incremental
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 56f2c2a..323747a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,7 +39,7 @@
 find_package(Boost COMPONENTS system thread regex REQUIRED)
 
 #Openssl
-hunter_add_package(OpenSSL)
+#hunter_add_package(OpenSSL)
 find_package(OpenSSL REQUIRED)
 if (NOT OPENSSL_FOUND)
     message(FATAL_ERROR "Could not find OpenSSL")
@@ -50,19 +50,31 @@
 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/crow/include)
 
 #g3 logging
-set(ADD_FATAL_EXAMPLE OFF)
+option(ADD_FATAL_EXAMPLE "Disable g3 examples" OFF)
 add_subdirectory(g3log)
 include_directories(g3log/src)
 
 # Debug sanitizers
 find_package(Sanitizers)
 
+
+set(SRC_FILES
+    src/example.cpp
+    include/crow_g3_logger.hpp
+    include/ssl_key_handler.hpp
+    include/color_cout_g3_sink.hpp
+)
+
 # Executable
-add_executable(example ${CMAKE_CURRENT_SOURCE_DIR}/src/example.cpp)
+
+add_executable(bmcweb ${SRC_FILES})
 #target_link_libraries(example crow)
-target_link_libraries(example Boost::boost Boost::system)
-target_link_libraries(example ${CMAKE_THREAD_LIBS_INIT})
-target_link_libraries(example OpenSSL::SSL OpenSSL::Crypto)
-target_link_libraries(example g3logger)
+target_link_libraries(bmcweb Boost::boost Boost::system)
+target_link_libraries(bmcweb ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(bmcweb OpenSSL::SSL OpenSSL::Crypto)
+target_link_libraries(bmcweb g3logger)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
 
-
+# this needs to be at the end to make sure all includes are handled correctly
+get_property(C_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
+execute_process(COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/scripts/prime_vscode_compile_db.py ${C_INCLUDE_DIRS})
diff --git a/src/ColorCoutG3Sink.hpp b/include/color_cout_g3_sink.hpp
similarity index 100%
rename from src/ColorCoutG3Sink.hpp
rename to include/color_cout_g3_sink.hpp
diff --git a/include/crow_g3_logger.hpp b/include/crow_g3_logger.hpp
new file mode 100644
index 0000000..e39269a
--- /dev/null
+++ b/include/crow_g3_logger.hpp
@@ -0,0 +1,92 @@
+#pragma once
+
+// This file overrides the default crow logging framework to use g3 instead.
+// It implements enough of the interfaces of the crow logging framework to work correctly
+// but deletes the ILogHandler interface, as usage of that would be counter to the g3
+// handler management, and would cause performance issues.
+
+
+#include <string>
+#include <cstdio>
+#include <cstdlib>
+#include <ctime>
+#include <iostream>
+#include <sstream>
+
+#include <g3log/g3log.hpp>
+#include <g3log/logworker.hpp>
+
+namespace crow
+{
+    enum class LogLevel
+    {
+#ifndef ERROR
+        DEBUG = 0,
+        INFO,
+        WARNING,
+        ERROR,
+        CRITICAL,
+#endif
+
+        Debug = 0,
+        Info,
+        Warning,
+        Error,
+        Critical,
+    };
+
+    class logger {
+
+        public:
+
+
+            logger(std::string prefix, LogLevel level) : level_(level) {
+                // no op, let g3 handle th log levels
+
+            }
+
+            //
+            template <typename T>
+            logger& operator<<(T const &value) {
+
+    #ifdef CROW_ENABLE_LOGGING
+                if(level_ >= get_current_log_level()) {
+                    stringstream_ << value;
+                }
+    #endif
+                return *this;
+            }
+
+            //
+            static void setLogLevel(LogLevel level) {
+                get_log_level_ref() = level;
+            }
+
+            static LogLevel get_current_log_level() {
+                return get_log_level_ref();
+            }
+
+        private:
+            //
+            static LogLevel& get_log_level_ref()
+            {
+                static LogLevel current_level = (LogLevel)CROW_LOG_LEVEL;
+                return current_level;
+            }
+
+            //
+            std::ostringstream stringstream_;
+            LogLevel level_;
+    };
+}
+
+#define CROW_LOG_CRITICAL   \
+        LOG(FATAL)
+#define CROW_LOG_ERROR      \
+        LOG(WARNING)
+#define CROW_LOG_WARNING    \
+        LOG(WARNING)
+#define CROW_LOG_INFO       \
+        LOG(INFO)
+#define CROW_LOG_DEBUG      \
+        LOG(DEBUG)
diff --git a/src/ssl_key_handler.hpp b/include/ssl_key_handler.hpp
similarity index 100%
rename from src/ssl_key_handler.hpp
rename to include/ssl_key_handler.hpp
diff --git a/scripts/prime_vscode_compile_db.py b/scripts/prime_vscode_compile_db.py
old mode 100644
new mode 100755
index 02ae98c..82ce977
--- a/scripts/prime_vscode_compile_db.py
+++ b/scripts/prime_vscode_compile_db.py
@@ -1,10 +1,11 @@
+#! /usr/bin/python3
+
 import json
 import shlex
 import os
 import sys
 
 SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
-
 VS_CODE_FILE = os.path.join(SCRIPT_DIR, "../.vscode/c_cpp_properties.json")
 
 def main():
diff --git a/src/example.cpp b/src/example.cpp
index c75ad61..91fdb7f 100644
--- a/src/example.cpp
+++ b/src/example.cpp
@@ -21,7 +21,7 @@
 #include "crow/http_server.h"
 #include "crow/app.h"
 
-#include "ColorCoutG3Sink.hpp"
+#include "color_cout_g3_sink.hpp"
 
 #include "ssl_key_handler.hpp"
 #include <iostream>