diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0070dde..bf0354d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -72,6 +72,8 @@
   endif(MSAN)
 endif(LIBC++)
 
+#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall")
+
 # general
 option(BUILD_SHARED_LIBS "Build as shared library" OFF)
 option(BUILD_UT "Enable Unit test" ON)
@@ -90,7 +92,7 @@
 add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
 add_definitions(-DBOOST_SYSTEM_NO_DEPRECATED)
 add_definitions(-DBOOST_ALL_NO_LIB)
-set(Boost_USE_STATIC_LIBS ON)
+#set(Boost_USE_STATIC_LIBS ON)
 hunter_add_package(Boost)
 find_package(Boost REQUIRED)
 include_directories(${Boost_INCLUDE_DIRS}) 
@@ -99,6 +101,7 @@
 hunter_add_package(OpenSSL)
 find_package(OpenSSL REQUIRED)
 include_directories(${OPENSSL_INCLUDE_DIR})
+message("OPENSSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR}")
 
 #g3 logging
 # G3logger does some unfortunate compile options, so cheat a little bit and copy/paste
diff --git a/crow/include/crow/ci_map.h b/crow/include/crow/ci_map.h
index bf50fd0..456e528 100644
--- a/crow/include/crow/ci_map.h
+++ b/crow/include/crow/ci_map.h
@@ -2,6 +2,7 @@
 
 #include <algorithm>
 #include <iostream>
+#include <string>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/container/flat_map.hpp>
 #include <boost/functional/hash.hpp>
@@ -10,9 +11,9 @@
 
 struct ci_key_eq {
   bool operator()(const std::string& left, const std::string& right) const {
-    unsigned int lsz = left.size();
-    unsigned int rsz = right.size();
-    for (unsigned int i = 0; i < std::min(lsz, rsz); ++i) {
+    size_t lsz = left.size();
+    size_t rsz = right.size();
+    for (size_t i = 0; i < std::min(lsz, rsz); ++i) {
       auto lchar = tolower(left[i]);
       auto rchar = tolower(right[i]);
       if (lchar != rchar) {
diff --git a/crow/include/crow/http_connection.h b/crow/include/crow/http_connection.h
index 5ead372..04810bd 100644
--- a/crow/include/crow/http_connection.h
+++ b/crow/include/crow/http_connection.h
@@ -5,6 +5,7 @@
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/array.hpp>
 #include <boost/asio.hpp>
+#include <boost/asio/ssl.hpp>
 #include <boost/lexical_cast.hpp>
 
 #include <boost/container/flat_map.hpp>
@@ -26,29 +27,33 @@
 namespace detail {
 template <typename MW>
 struct check_before_handle_arity_3_const {
-  template <typename T, void (T::*)(request&, response&, typename MW::context&)
-                            const = &T::before_handle>
+  template <typename T,
+            void (T::*)(request&, response&, typename MW::context&) const =
+                &T::before_handle>
   struct get {};
 };
 
 template <typename MW>
 struct check_before_handle_arity_3 {
-  template <typename T, void (T::*)(request&, response&,
-                                    typename MW::context&) = &T::before_handle>
+  template <typename T,
+            void (T::*)(request&, response&, typename MW::context&) =
+                &T::before_handle>
   struct get {};
 };
 
 template <typename MW>
 struct check_after_handle_arity_3_const {
-  template <typename T, void (T::*)(request&, response&, typename MW::context&)
-                            const = &T::after_handle>
+  template <typename T,
+            void (T::*)(request&, response&, typename MW::context&) const =
+                &T::after_handle>
   struct get {};
 };
 
 template <typename MW>
 struct check_after_handle_arity_3 {
-  template <typename T, void (T::*)(request&, response&,
-                                    typename MW::context&) = &T::after_handle>
+  template <typename T,
+            void (T::*)(request&, response&, typename MW::context&) =
+                &T::after_handle>
   struct get {};
 };
 
@@ -252,8 +257,9 @@
     if (parser_.check_version(1, 0)) {
       // HTTP/1.0
       if (req.headers.count("connection")) {
-        if (boost::iequals(req.get_header_value("connection"), "Keep-Alive"))
+        if (boost::iequals(req.get_header_value("connection"), "Keep-Alive")) {
           add_keep_alive_ = true;
+        }
       } else
         close_connection_ = true;
     } else if (parser_.check_version(1, 1)) {
@@ -262,8 +268,9 @@
         if (req.get_header_value("connection") == "close")
           close_connection_ = true;
         else if (boost::iequals(req.get_header_value("connection"),
-                                "Keep-Alive"))
+                                "Keep-Alive")) {
           add_keep_alive_ = true;
+        }
       }
       if (!req.headers.count("Host")) {
         is_invalid_request = true;
@@ -288,6 +295,7 @@
                   << req.url;
 
     need_to_call_after_handlers_ = false;
+
     if (!is_invalid_request) {
       res.complete_request_handler_ = [] {};
       res.is_alive_helper_ = [this]() -> bool { return adaptor_.is_open(); };
@@ -303,7 +311,7 @@
         res.complete_request_handler_ = [this] { this->complete_request(); };
         need_to_call_after_handlers_ = true;
         handler_->handle(req, res);
-        if (add_keep_alive_) res.set_header("connection", "Keep-Alive");
+        if (add_keep_alive_) res.add_header("connection", "Keep-Alive");
       } else {
         complete_request();
       }
@@ -358,11 +366,9 @@
         {503, "HTTP/1.1 503 Service Unavailable\r\n"},
     };
 
-    static std::string seperator = ": ";
-    static std::string crlf = "\r\n";
 
     buffers_.clear();
-    buffers_.reserve(4 * (res.headers.size() + 5) + 3);
+    buffers_.reserve(20);
 
     if (res.body.empty() && res.json_value.t() == json::type::Object) {
       res.body = json::dump(res.json_value);
@@ -376,41 +382,29 @@
 
     if (res.code >= 400 && res.body.empty())
       res.body = statusCodes[res.code].substr(9);
+    
+    
 
-    for (auto& kv : res.headers) {
-      buffers_.emplace_back(kv.first.data(), kv.first.size());
-      buffers_.emplace_back(seperator.data(), seperator.size());
-      buffers_.emplace_back(kv.second.data(), kv.second.size());
-      buffers_.emplace_back(crlf.data(), crlf.size());
-    }
+    const static std::string crlf = "\r\n";
+    content_length_ = std::to_string(res.body.size());
+    static const std::string content_length_tag = "Content-Length";
+    res.add_header(content_length_tag, content_length_);
 
-    if (!res.headers.count("content-length")) {
-      content_length_ = std::to_string(res.body.size());
-      static std::string content_length_tag = "Content-Length: ";
-      buffers_.emplace_back(content_length_tag.data(),
-                            content_length_tag.size());
-      buffers_.emplace_back(content_length_.data(), content_length_.size());
-      buffers_.emplace_back(crlf.data(), crlf.size());
-    }
-    if (!res.headers.count("server")) {
-      static std::string server_tag = "Server: ";
-      buffers_.emplace_back(server_tag.data(), server_tag.size());
-      buffers_.emplace_back(server_name_.data(), server_name_.size());
-      buffers_.emplace_back(crlf.data(), crlf.size());
-    }
-    if (!res.headers.count("date")) {
-      static std::string date_tag = "Date: ";
-      date_str_ = get_cached_date_str();
-      buffers_.emplace_back(date_tag.data(), date_tag.size());
-      buffers_.emplace_back(date_str_.data(), date_str_.size());
-      buffers_.emplace_back(crlf.data(), crlf.size());
-    }
+    static const std::string server_tag = "Server: ";
+    res.add_header(server_tag, server_name_);
+
+    static const std::string date_tag = "Date: ";
+    date_str_ = get_cached_date_str();
+    res.add_header(date_tag, date_str_);
+
     if (add_keep_alive_) {
-      static std::string keep_alive_tag = "Connection: Keep-Alive";
-      buffers_.emplace_back(keep_alive_tag.data(), keep_alive_tag.size());
-      buffers_.emplace_back(crlf.data(), crlf.size());
+      static const std::string keep_alive_tag = "Connection";
+      static const std::string keep_alive_value = "Keep-Alive";
+      res.add_header(keep_alive_tag, keep_alive_value);
     }
 
+buffers_.emplace_back(res.headers.data(), res.headers.size());
+
     buffers_.emplace_back(crlf.data(), crlf.size());
     res_body_copy_.swap(res.body);
     buffers_.emplace_back(res_body_copy_.data(), res_body_copy_.size());
@@ -432,12 +426,30 @@
         boost::asio::buffer(buffer_),
         [this](const boost::system::error_code& ec,
                std::size_t bytes_transferred) {
+          CROW_LOG_ERROR << "Read " << bytes_transferred << " Bytes";
           bool error_while_reading = true;
           if (!ec) {
             bool ret = parser_.feed(buffer_.data(), bytes_transferred);
             if (ret && adaptor_.is_open()) {
               error_while_reading = false;
             }
+          } else {
+            CROW_LOG_ERROR << "Error while reading: " << ec.message();
+            if (ec.category() == boost::asio::error::get_ssl_category()) {
+              auto err =
+                  std::string(" (") +
+                  boost::lexical_cast<std::string>(ERR_GET_LIB(ec.value())) +
+                  "," +
+                  boost::lexical_cast<std::string>(ERR_GET_FUNC(ec.value())) +
+                  "," +
+                  boost::lexical_cast<std::string>(ERR_GET_REASON(ec.value())) +
+                  ") ";
+              // ERR_PACK /* crypto/err/err.h */
+              char buf[128];
+              ::ERR_error_string_n(ec.value(), buf, sizeof(buf));
+              err += buf;
+              CROW_LOG_ERROR << err;
+            }
           }
           if (error_while_reading) {
             cancel_deadline_timer();
@@ -465,23 +477,37 @@
   void do_write() {
     // auto self = this->shared_from_this();
     is_writing = true;
-    boost::asio::async_write(adaptor_.socket(), buffers_,
-                             [&](const boost::system::error_code& ec,
-                                 std::size_t /*bytes_transferred*/) {
-                               is_writing = false;
-                               res.clear();
-                               res_body_copy_.clear();
-                               if (!ec) {
-                                 if (close_connection_) {
-                                   adaptor_.close();
-                                   CROW_LOG_DEBUG << this << " from write(1)";
-                                   check_destroy();
-                                 }
-                               } else {
-                                 CROW_LOG_DEBUG << this << " from write(2)";
-                                 check_destroy();
-                               }
-                             });
+    CROW_LOG_DEBUG << "Doing Write";
+    boost::asio::async_write(
+        adaptor_.socket(), buffers_, [&](const boost::system::error_code& ec,
+                                         std::size_t bytes_transferred) {
+          CROW_LOG_DEBUG << "Wrote " << bytes_transferred << "bytes";
+          for (auto& buffer : buffers_) {
+            /*
+            CROW_LOG_DEBUG << "2nd passbuffer is "
+                           << std::string(
+                                  boost::asio::buffer_cast<const char*>(buffer),
+                                  boost::asio::buffer_size(buffer));
+                                  */
+            CROW_LOG_DEBUG << "pointer address "
+                           << (int)boost::asio::buffer_cast<const char*>(
+                                  buffer);
+          }
+
+          is_writing = false;
+          res.clear();
+          res_body_copy_.clear();
+          if (!ec) {
+            if (close_connection_) {
+              adaptor_.close();
+              CROW_LOG_DEBUG << this << " from write(1)";
+              check_destroy();
+            }
+          } else {
+            CROW_LOG_DEBUG << this << " from write(2)";
+            check_destroy();
+          }
+        });
   }
 
   void check_destroy() {
diff --git a/crow/include/crow/http_request.h b/crow/include/crow/http_request.h
index 354f997..acb417c 100644
--- a/crow/include/crow/http_request.h
+++ b/crow/include/crow/http_request.h
@@ -41,7 +41,7 @@
         headers(std::move(headers)),
         body(std::move(body)) {}
 
-  void add_header(std::string key, std::string value) {
+  void add_header(const std::string& key, const std::string& value) {
     headers.emplace(std::move(key), std::move(value));
   }
 
diff --git a/crow/include/crow/http_response.h b/crow/include/crow/http_response.h
index 322147b..3ba2872 100644
--- a/crow/include/crow/http_response.h
+++ b/crow/include/crow/http_response.h
@@ -4,6 +4,7 @@
 #include "crow/ci_map.h"
 #include "crow/http_request.h"
 #include "crow/json.h"
+#include "crow/logging.h"
 
 namespace crow {
 template <typename Adaptor, typename Handler, typename... Middlewares>
@@ -17,18 +18,18 @@
   json::wvalue json_value;
 
   // `headers' stores HTTP headers.
-  ci_map headers;
+  //ci_map headers;
 
-  void set_header(std::string key, std::string value) {
-    headers.erase(key);
-    headers.emplace(std::move(key), std::move(value));
-  }
-  void add_header(std::string key, std::string value) {
-    headers.emplace(std::move(key), std::move(value));
-  }
+  std::string headers;
 
-  const std::string& get_header_value(const std::string& key) {
-    return crow::get_header_value(headers, key);
+  void add_header(const std::string& key, const std::string& value) {
+
+    const static std::string seperator = ": ";
+    const static std::string crlf = "\r\n";
+    headers.append(key);
+    headers.append(seperator);
+    headers.append(value);
+    headers.append(crlf);
   }
 
   response() {}
@@ -46,11 +47,19 @@
     json_mode();
   }
 
-  response(response&& r) { *this = std::move(r); }
+  response(response&& r) {
+    CROW_LOG_WARNING << "Moving response containers";
+    *this = std::move(r);
+  }
+
+  ~response(){
+    CROW_LOG_WARNING << "Destroying response";
+  }
 
   response& operator=(const response& r) = delete;
 
   response& operator=(response&& r) noexcept {
+    CROW_LOG_WARNING << "Moving response containers";
     body = std::move(r.body);
     json_value = std::move(r.json_value);
     code = r.code;
@@ -62,6 +71,7 @@
   bool is_completed() const noexcept { return completed_; }
 
   void clear() {
+    CROW_LOG_WARNING << "Clearing response containers";
     body.clear();
     json_value.clear();
     code = 200;
@@ -94,6 +104,6 @@
   std::function<bool()> is_alive_helper_;
 
   // In case of a JSON object, set the Content-Type header
-  void json_mode() { set_header("Content-Type", "application/json"); }
+  void json_mode() { add_header("Content-Type", "application/json"); }
 };
 }
diff --git a/crow/include/crow/socket_adaptors.h b/crow/include/crow/socket_adaptors.h
index c55e4d5..13b4a20 100644
--- a/crow/include/crow/socket_adaptors.h
+++ b/crow/include/crow/socket_adaptors.h
@@ -3,6 +3,7 @@
 #ifdef CROW_ENABLE_SSL
 #include <boost/asio/ssl.hpp>
 #endif
+#include "crow/logging.h"
 #include "crow/settings.h"
 namespace crow {
 using namespace boost;
@@ -85,7 +86,7 @@
     failed, because is_open now returns False (which could also mean the client
     disconnected during parse)
     UPdate: The parser does in fact have an "is_upgrade" method that is intended
-    for exactly this purpose.  Todo is now to make do_read obey the flag 
+    for exactly this purpose.  Todo is now to make do_read obey the flag
     appropriately.
     */
     if (ssl_socket_ != nullptr) {
@@ -99,7 +100,10 @@
     if (ssl_socket_ == nullptr) {
       return;
     }
-    ssl_socket_->lowest_layer().close();
+    boost::system::error_code ec;
+
+    // SHut it down
+    this->ssl_socket_->lowest_layer().close();
   }
 
   boost::asio::io_service& get_io_service() {
diff --git a/include/ssl_key_handler.hpp b/include/ssl_key_handler.hpp
index 5cd29a8..aade3fb 100644
--- a/include/ssl_key_handler.hpp
+++ b/include/ssl_key_handler.hpp
@@ -298,7 +298,7 @@
 
   std::string lighttp_ciphers = "AES128+EECDH:AES128+EDH:!aNULL:!eNULL";
 
-  if (SSL_CTX_set_cipher_list(m_ssl_context.native_handle(), ciphers.c_str()) !=
+  if (SSL_CTX_set_cipher_list(m_ssl_context.native_handle(), lighttp_ciphers.c_str()) !=
       1) {
     CROW_LOG_ERROR << "Error setting cipher list\n";
   }
diff --git a/scripts/build_web_assets.py b/scripts/build_web_assets.py
index 955f21e..46bf199 100755
--- a/scripts/build_web_assets.py
+++ b/scripts/build_web_assets.py
@@ -36,7 +36,7 @@
     res.code = 200;
     // TODO, if you have a browser from the dark ages that doesn't support gzip,
     // unzip it before sending based on Accept-Encoding header
-    res.add_header("Content-Encoding", "{content_encoding}");
+    res.add_header("Content-Encoding", {content_encoding});
     res.add_header("Content-Type", "{content_type}");
 
     res.write(staticassets::{relative_path_escaped});
@@ -242,6 +242,8 @@
                          "\n"
                          "namespace crow {\n"
                          "namespace webassets {\n"
+                         "static const std::string gzip_string = \"gzip\";\n"
+                         "static const std::string none_string = \"none\";\n"
                         )
 
         hpp_output.write("struct staticassets {\n")
@@ -273,7 +275,7 @@
                     get_sha1_path_from_relative(relative_path, sha1)
             #print("relative_path_sha1: " + relative_path_sha1)
             #print("sha1: " + sha1)
-            content_encoding = 'gzip' if gzip_content else 'none'
+            content_encoding = 'gzip_string' if gzip_content else 'none_string'
 
             environment = {
                 'relative_path': relative_path,
