diff --git a/App/CMakeLists.txt b/App/CMakeLists.txt
index af3f7e2a1ca26c20a83e22ece6224d9f231c8260..d83db83acc75f04511e169a303c4c60d076a1b45 100644
--- a/App/CMakeLists.txt
+++ b/App/CMakeLists.txt
@@ -1,23 +1,28 @@
 add_executable( QPongGame 
+    QPongApp.cpp 
     GameLayer.cpp
     Log.cpp
     Player.cpp
     MainMenuLayer.cpp
-    QPongApp.cpp 
     Window.cpp
 )
 
-target_include_directories( QPong PUBLIC
-    .
-    ..
-    ../libs
-    ../libs/imgui/examples/libs/gl3w
-)
+target_compile_options( QPongGame
+    PRIVATE
+        ${basic_flags}
+    )
 
-target_link_libraries( QPongGame PUBLIC 
-    GuiCore
-    QPong
-)
+target_link_libraries( QPongGame 
+    PRIVATE 
+        GuiCore
+        QPong
+        ImGuiSrc
+    )
+
+target_include_directories( QPongGame
+    PRIVATE
+        ..
+    )
 
 add_custom_command(TARGET QPongGame
     POST_BUILD
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1112d31a038de22782cbf28942d7de72405b18fc..90cce88c76b6426275311d5cd28ce11b3f2278a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,7 +3,10 @@ project(QPong VERSION 0.0.1 LANGUAGES C CXX)
 
 set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_BUILD_TYPE Release)
-set(CMAKE_CXX_FLAGS "-Ofast")
+
+list(APPEND basic_flags "-O3" "-Wextra" "-Wall" "-Wshadow" "-Wold-style-cast")
+list(APPEND basic_flags "-Wno-unused-variable")
+list(APPEND pedantic_flags "-pedantic" "-Wpedantic")
 
 option(LOG_DEBUG_INFO "Enable logging t console" OFF)
 if(LOG_DEBUG_INFO)
@@ -13,6 +16,12 @@ endif(LOG_DEBUG_INFO)
 # Check for PkgConfig
 find_package(PkgConfig REQUIRED)
 
+# Libraries the project depends on:
+add_subdirectory(libs/spdlog)
+
+# ImGuiSrc
+add_subdirectory(ImGuiSrc)
+
 # GUI/Window 
 add_subdirectory(GuiCore)
 
@@ -22,5 +31,3 @@ add_subdirectory(QPong)
 # QPong App sources
 add_subdirectory(App)
 
-# Libraries the project depends on:
-add_subdirectory(libs/spdlog)
diff --git a/GuiCore/CMakeLists.txt b/GuiCore/CMakeLists.txt
index 38492720572ddb2a19b8c15a664c54716efa18dc..83036fb3f4ee6d7aa07b67448ee98e19d81a21bd 100644
--- a/GuiCore/CMakeLists.txt
+++ b/GuiCore/CMakeLists.txt
@@ -1,5 +1,30 @@
 find_package( Freetype REQUIRED)
 
+add_library( ImGuiQPong
+    Shader.cpp
+    Glyphs.cpp
+    ImGuiLayer.cpp    
+)
+
+target_compile_options( ImGuiQPong
+    PRIVATE
+        ${basic_flags}
+    )
+
+target_include_directories( ImGuiQPong 
+    SYSTEM PRIVATE
+        ../libs
+        ../libs/imgui/examples/libs/gl3w
+        ../libs/spdlog/include/
+        ${FREETYPE_INCLUDE_DIRS}
+    )
+
+target_link_libraries( ImGuiQPong
+    PRIVATE
+        ImGuiSrc
+        ${FREETYPE_LIBRARIES}
+)
+
 # GuiCore library
 add_library(GuiCore
     Application.cpp
@@ -9,49 +34,26 @@ add_library(GuiCore
     Log.cpp
     Timer.cpp
     Timestep.cpp
-    Glyphs.cpp
 )
 
-target_include_directories( GuiCore PUBLIC
-    ../libs/spdlog/include/
-    ${FREETYPE_INCLUDE_DIRS}
-)
+target_compile_options(GuiCore
+    PRIVATE
+        ${basic_flags}
+    )
+
+target_include_directories( GuiCore 
+    SYSTEM PRIVATE
+        ../libs/spdlog/include/
+    )
 
 target_link_libraries( GuiCore
+    ImGuiQPong
     spdlog
-    ${FREETYPE_LIBRARIES}
-)
-add_compile_definitions(IMGUI_IMPL_OPENGL_LOADER_GL3W)
-
-# ImGui is a dependency of GuiCore
-add_library( ImGui
-    Shader.cpp
-    ImGuiLayer.cpp
-    ../libs/imgui/imgui.cpp
-    ../libs/imgui/imgui_draw.cpp
-    ../libs/imgui/imgui_widgets.cpp
-    ../libs/imgui/imgui_tables.cpp
-    ../libs/imgui/backends/imgui_impl_glfw.cpp
-    ../libs/imgui/backends/imgui_impl_opengl3.cpp
-    ../libs/imgui/examples/libs/gl3w/GL/gl3w.c
-)
-
-target_include_directories( ImGui PUBLIC
-    ../libs
-    ../libs/imgui # for glfw
-    ../libs/imgui/backends
-    ../libs/imgui/examples/libs/gl3w
-    ../libs/spdlog/include    
-)
-
-
-target_link_libraries( GuiCore 
-    ImGui
 )
 
 # Check for GLFW3 and link
 pkg_check_modules(GLFW glfw3)
-target_include_directories(GuiCore PUBLIC ${GLFW_INCLUDE_DIRS})
+target_include_directories(GuiCore PRIVATE ${GLFW_INCLUDE_DIRS})
 target_link_libraries(GuiCore ${GLFW_LIBRARIES})
 
 
diff --git a/ImGuiSrc/CMakeLists.txt b/ImGuiSrc/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4eb0733f7da1c4c88ed5650d6a99aa758482dac6
--- /dev/null
+++ b/ImGuiSrc/CMakeLists.txt
@@ -0,0 +1,18 @@
+add_compile_definitions(IMGUI_IMPL_OPENGL_LOADER_GL3W)
+
+add_library( ImGuiSrc
+    ../libs/imgui/imgui.cpp
+    ../libs/imgui/imgui_draw.cpp
+    ../libs/imgui/imgui_widgets.cpp
+    ../libs/imgui/imgui_tables.cpp
+    ../libs/imgui/backends/imgui_impl_glfw.cpp
+    ../libs/imgui/backends/imgui_impl_opengl3.cpp
+    ../libs/imgui/examples/libs/gl3w/GL/gl3w.c
+)
+
+target_include_directories( ImGuiSrc
+    SYSTEM PUBLIC
+        ../libs/imgui # for glfw
+        ../libs/imgui/backends
+        ../libs/imgui/examples/libs/gl3w
+    )
diff --git a/QPong/CMakeLists.txt b/QPong/CMakeLists.txt
index eb417d3768a8c3e2b542fc28dbf8b55155cc42e3..42f71f946245e575797fc3655ccdaaa1d6bbcf6a 100644
--- a/QPong/CMakeLists.txt
+++ b/QPong/CMakeLists.txt
@@ -5,12 +5,28 @@ add_library(QPong
     Utils.cpp
 )
 
-target_include_directories(QPong PUBLIC
-    ..
-)
+target_compile_options(QPong 
+    PRIVATE
+        ${basic_flags}
+    )
+
+target_include_directories(QPong 
+    PRIVATE
+        .
+        ..
+    )
+
+target_link_libraries(QPong 
+    PRIVATE
+        GuiCore
+        fftw3
+        fftw3_omp
+    )
 
-target_link_libraries( QPong PRIVATE
-    GuiCore
-    fftw3
-    fftw3_omp
-)
\ No newline at end of file
+# target_include_directories( QPong 
+# PUBLIC
+#     .
+#     ..
+#     ../libs
+#     ../libs/imgui/examples/libs/gl3w
+# )
\ No newline at end of file