diff --git a/src/g3log/generated_definitions.hpp b/src/g3log/generated_definitions.hpp
new file mode 100644
index 0000000..18433bb
--- /dev/null
+++ b/src/g3log/generated_definitions.hpp
@@ -0,0 +1,13 @@
+// AUTO GENERATED MACRO DEFINITIONS FOR G3LOG
+
+/** ==========================================================================
+* 2015 by KjellKod.cc. This is PUBLIC DOMAIN to use at your own risk and comes
+* with no warranties. This code is yours to share, use and modify with no
+* strings attached and no restrictions or obligations.
+* 
+* For more information see g3log/LICENSE or refer refer to http://unlicense.org
+* ============================================================================*/
+#pragma once
+
+// CMake induced definitions below. See g3log/Options.cmake for details.
+
diff --git a/src/getvideo_main.cpp b/src/getvideo_main.cpp
index 2259b8c..182e8ad 100644
--- a/src/getvideo_main.cpp
+++ b/src/getvideo_main.cpp
@@ -39,14 +39,14 @@
     std::cout << "Writing\n";
     
     int status;
-    /*
+    
     status = write(video_fd, reinterpret_cast<char*>(&image_info),
                         sizeof(image_info));
     if (status != 0) {
       std::cout << "Write failed.  Return: " << status <<"\n";
       perror("perror output:");
     }
-    */
+    
     std::cout << "Write done\n";
     //std::this_thread::sleep_for(std::chrono::milliseconds(2000));
     
@@ -64,8 +64,9 @@
       std::cout << std::hex << std::setfill('0') << std::setw(2)
                 << int(*(pt + i)) << " ";
     }
-    std::cout << "\n";
-    /*
+    
+    std::cout << "\nprinting buffer\n";
+    
     for(int i = 0; i < 1024; i++){
         if (i % 16 == 0){
           std::cout << "\n";
@@ -73,7 +74,7 @@
         std::cout << std::hex << std::setfill('0') << std::setw(2)
             << int(buffer[i]) << " ";
     }
-    */
+    
     buffer.resize(image_info.len);
     
     std::ofstream f("/tmp/screen.jpg",std::ios::out | std::ios::binary); 
diff --git a/src/security_headers_middleware_test.cpp b/src/security_headers_middleware_test.cpp
index 2364ab5..fc183e9 100644
--- a/src/security_headers_middleware_test.cpp
+++ b/src/security_headers_middleware_test.cpp
@@ -40,13 +40,13 @@
   c.connect(asio::ip::tcp::endpoint(asio::ip::address::from_string("127.0.0.1"),
                                     45451));
   c.send(asio::buffer(sendmsg));
-  auto received_count = c.receive(asio::buffer(buf));
+  c.receive(asio::buffer(buf));
   c.close();
   auto return_code = std::string(&buf[9], &buf[12]);
   EXPECT_EQ("200", return_code);
   std::string response(std::begin(buf), std::end(buf));
 
-  // This is a routine to split strings until a newline is hit
+  // This is a routine to split strings until a blank is hit
   // TODO(ed) this should really use the HTTP parser
   std::vector<std::string> headers;
   std::string::size_type pos = 0;
diff --git a/src/token_authorization_middleware_test.cpp b/src/token_authorization_middleware_test.cpp
index 68efe8f..00eed2f 100644
--- a/src/token_authorization_middleware_test.cpp
+++ b/src/token_authorization_middleware_test.cpp
@@ -24,7 +24,7 @@
     c.connect(asio::ip::tcp::endpoint(
         asio::ip::address::from_string("127.0.0.1"), 45451));
     c.send(asio::buffer(sendmsg));
-    auto received_count = c.receive(asio::buffer(buf, 2048));
+    c.receive(asio::buffer(buf, 2048));
     c.close();
     EXPECT_EQ("200", std::string(buf + 9, buf + 12));
   }
@@ -66,7 +66,7 @@
     }
   }
   c.send(asio::buffer(sendmsg));
-  auto received_count = c.receive(asio::buffer(buf, 2048));
+  c.receive(asio::buffer(buf, 2048));
   c.close();
   EXPECT_EQ("401", std::string(buf + 9, buf + 12));
 
@@ -95,7 +95,7 @@
     }
   }
   c.send(asio::buffer(sendmsg));
-  auto received_count = c.receive(asio::buffer(buf, 2048));
+  c.receive(asio::buffer(buf, 2048));
   c.close();
   EXPECT_EQ("401", std::string(buf + 9, buf + 12));
 
@@ -118,7 +118,7 @@
     c.connect(asio::ip::tcp::endpoint(
         asio::ip::address::from_string("127.0.0.1"), 45451));
     c.send(asio::buffer(sendmsg));
-    auto received_count = c.receive(asio::buffer(buf));
+    c.receive(asio::buffer(buf));
     c.close();
   };
 
@@ -193,7 +193,7 @@
     c.connect(asio::ip::tcp::endpoint(
         asio::ip::address::from_string("127.0.0.1"), 45451));
     c.send(asio::buffer(sendmsg));
-    auto received_count = c.receive(asio::buffer(buf));
+    c.receive(asio::buffer(buf));
     c.close();
   };
 
diff --git a/src/udpclient.cpp b/src/udpclient.cpp
index 772739b..cf9f3d1 100644
--- a/src/udpclient.cpp
+++ b/src/udpclient.cpp
@@ -85,7 +85,7 @@
     udp::endpoint sender_endpoint;
     size_t len =
         socket.receive_from(boost::asio::buffer(recv_buf), sender_endpoint);
-
+    std::cout << len;
     for (auto character : recv_buf) {
       std::cout << std::hex << static_cast<unsigned>(character) << " ";
     }
diff --git a/src/webassets_test.cpp b/src/webassets_test.cpp
index 2157f03..8d0cfef 100644
--- a/src/webassets_test.cpp
+++ b/src/webassets_test.cpp
@@ -186,7 +186,6 @@
   while ((pos = response.find("\r\n", prev)) != std::string::npos) {
     auto this_string = response.substr(prev, pos - prev);
     if (this_string == "") {
-      prev = pos + 2;
       break;
     }
 
diff --git a/src/webserver_main.cpp b/src/webserver_main.cpp
index cf8500f..949bdc1 100644
--- a/src/webserver_main.cpp
+++ b/src/webserver_main.cpp
@@ -1,9 +1,7 @@
-#include <webassets.hpp>
 #include <web_kvm.hpp>
+#include <webassets.hpp>
 #include "ssl_key_handler.hpp"
 
-#include <crow/bmc_app_type.hpp>
-
 #include "crow/app.h"
 #include "crow/ci_map.h"
 #include "crow/common.h"
@@ -26,15 +24,15 @@
 #include "crow/utility.h"
 #include "crow/websocket.h"
 
-
 #include "color_cout_g3_sink.hpp"
 #include "webassets.hpp"
 
+#include "security_headers_middleware.hpp"
+#include "token_authorization_middleware.hpp"
 
 #include <boost/asio.hpp>
 #include <boost/endian/arithmetic.hpp>
 
-
 #include <iostream>
 #include <memory>
 #include <string>
@@ -52,13 +50,13 @@
   std::string ssl_pem_file("server.pem");
   ensuressl::ensure_openssl_key_present_and_valid(ssl_pem_file);
 
-  BmcAppType app;
+  crow::App<crow::TokenAuthorizationMiddleware, crow::SecurityHeadersMiddleware>
+      app;
 
   crow::webassets::request_routes(app);
   crow::kvm::request_routes(app);
 
   crow::logger::setLogLevel(crow::LogLevel::INFO);
-  app.debug_print();
   CROW_ROUTE(app, "/systeminfo")
   ([]() {
 
@@ -112,7 +110,7 @@
         size_t len =
             socket.receive_from(boost::asio::buffer(recv_buf), sender_endpoint);
         // TODO(ed) THis is ugly.  Find a way to not make a copy (ie, use
-        // std::string::data() to 
+        // std::string::data() to
         std::string str(std::begin(recv_buf), std::end(recv_buf));
         LOG(DEBUG) << "Got " << str << "back \n";
         conn.send_binary(str);
