diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ed662f71a8362be1f10ef677eb3c8ad91233b921
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,75 @@
+cmake_minimum_required(VERSION 3.1)
+
+#==============================================================
+#                           Configuration
+#==============================================================
+
+set(PROJECT_NAME "Main")
+set(EXECUTABLE_NAME "Main")
+
+set(CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD ${CXX_STANDARD})
+
+if (MSVC)
+	add_compile_options(/EHsc)
+endif()
+
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+#=====================================
+#				Options
+#=====================================
+
+if(WIN32)
+	option(CMAKE_TOOLCHAIN_FILE "C:/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake")
+elseif(UNIX)
+	#option(CMAKE_TOOLCHAIN_FILE "/amuhome/b20017738/Bureau/vcpkg/scripts/buildsystems/vcpkg.cmake")	
+endif()
+
+#==============================================================
+#                           Sources
+#==============================================================
+
+set(SOURCES ${CMAKE_SOURCE_DIR}/source/)
+set(LIBRARY ${CMAKE_SOURCE_DIR}/library/)
+set(INCLUDE ${CMAKE_SOURCE_DIR}/include/)
+
+set(VCPKG_INCLUDE ${CMAKE_SOURCE_DIR}/vcpkg_installed/*/include)
+set(VCPKG_LIB 	 ${CMAKE_SOURCE_DIR}/vcpkg_installed/*/lib)
+
+#==============================================================
+#                           Build
+#==============================================================
+
+project(${PROJECT_NAME})
+set(CURRENT_TARGET ${EXECUTABLE_NAME})
+
+add_executable(${CURRENT_TARGET})
+
+foreach(dir ${SOURCES})
+    add_subdirectory(${dir})
+endforeach()  
+
+set_property(TARGET ${CURRENT_TARGET} PROPERTY RUNTIME_OUTPUT_DIRECTORY $<1:${CMAKE_SOURCE_DIR}>)
+
+#==============================================================
+#                           Linking
+#==============================================================
+
+target_include_directories(${CURRENT_TARGET} PRIVATE ${INCLUDE})
+
+#list(APPEND CMAKE_PREFIX_PATH "/amuhome/b20017738/Bureau/vcpkg/packages/glew_x64-linux")
+#list(APPEND CMAKE_PREFIX_PATH "/amuhome/b20017738/Bureau/vcpkg/packages/glm_x64-linux")
+#list(APPEND CMAKE_PREFIX_PATH "/amuhome/b20017738/Bureau/vcpkg/packages/imgui_x64-linux")
+
+find_package(glfw3  REQUIRED)
+find_package(GLEW   REQUIRED)
+find_package(glm 	CONFIG REQUIRED)
+find_package(imgui 	REQUIRED)
+
+target_link_libraries(${CURRENT_TARGET} PRIVATE glfw)
+target_link_libraries(${CURRENT_TARGET} PRIVATE GLEW::GLEW)
+target_link_libraries(${CURRENT_TARGET} PRIVATE glm::glm-header-only)
+target_link_libraries(${CURRENT_TARGET} PRIVATE imgui::imgui)
+
diff --git a/Main b/Main
new file mode 100755
index 0000000000000000000000000000000000000000..d6eba117ec4ac1e24aaa77c3c625a3077803184e
Binary files /dev/null and b/Main differ
diff --git a/source/CMakelists.txt b/source/CMakeLists.txt
similarity index 100%
rename from source/CMakelists.txt
rename to source/CMakeLists.txt
diff --git a/source/engine/graphics/back/buffers/DynamicBuffer.tpp b/source/engine/graphics/back/buffers/DynamicBuffer.tpp
index 80c3a40c5e98b8af5beaa46645fd8a7dd040741e..0fbb32be92a8c60b7bac30c61588a783fb5dd839 100644
--- a/source/engine/graphics/back/buffers/DynamicBuffer.tpp
+++ b/source/engine/graphics/back/buffers/DynamicBuffer.tpp
@@ -3,6 +3,7 @@
 #include <GL/glew.h>
 #include <exception>
 #include <stdexcept>
+#include <cstring>
 
 #include <iostream>
 
diff --git a/source/engine/graphics/back/buffers/Layout.hpp b/source/engine/graphics/back/buffers/Layout.hpp
index 994e24cb9b0401a22aec5af426bbd9fee2e37ca4..dae2abbcc364be4752d926f677757c156ac2b3e5 100644
--- a/source/engine/graphics/back/buffers/Layout.hpp
+++ b/source/engine/graphics/back/buffers/Layout.hpp
@@ -5,17 +5,6 @@
 
 namespace megu {
     namespace layout {
-        enum Value;
-    }
-
-    using Layout = std::list<layout::Value>;
-    using Layout_Initializer = std::initializer_list<layout::Value>;
-
-    namespace layout {
-        inline size_t weight(const Layout & layout) {
-            return std::accumulate(layout.begin(), layout.end(), 0);
-        }
-
         enum Value : uint8_t {
             POSITION            = 3,
             FLAT                = 2,
@@ -26,4 +15,13 @@ namespace megu {
             ID                  = 1,
         };
     }
+
+    using Layout = std::list<layout::Value>;
+    using Layout_Initializer = std::initializer_list<layout::Value>;
+
+    namespace layout {
+        inline size_t weight(const Layout & layout) {
+            return std::accumulate(layout.begin(), layout.end(), 0);
+        }
+    }
 }
\ No newline at end of file
diff --git a/source/engine/graphics/back/geometry/Geometry.hpp b/source/engine/graphics/back/geometry/Geometry.hpp
index 0d51a917e8a7348c26f1b1be46f86ecaf15440f6..d61e0eaf9d126e4cb000a20c5e3e8a0fe0d729d6 100644
--- a/source/engine/graphics/back/geometry/Geometry.hpp
+++ b/source/engine/graphics/back/geometry/Geometry.hpp
@@ -10,8 +10,8 @@
 #include "../buffers/Layout.hpp"
 
 namespace megu {
-    using Vertices = std::vector<float>;
-    using Elements = std::vector<unsigned int>;
+    using Vertices_t = std::vector<float>;
+    using Elements_t = std::vector<unsigned int>;
 
     enum Primitive {
         TRIANGLES   = GL_TRIANGLES,
@@ -25,7 +25,7 @@ namespace megu {
             Geometry(const Layout_Initializer &);
            ~Geometry() = default;
 
-            virtual const Vertices & vertices() const = 0;
+            virtual const Vertices_t & vertices() const = 0;
 
         private:
             Layout _layout;
@@ -38,7 +38,7 @@ namespace megu {
             Geometry_Indiced(const Layout_Initializer &);
            ~Geometry_Indiced() = default;
 
-            virtual const Elements & elements() const = 0;
+            virtual const Elements_t & elements() const = 0;
     };
 
     template <class T, Primitive P>
@@ -48,8 +48,8 @@ namespace megu {
             Static_Geometry(const Layout_Initializer &);
            ~Static_Geometry() = default;
 
-            const Vertices & vertices() const final override {return Static_Geometry<T, P>::Vertices();}
-            static const Vertices & Vertices() {return T::Vertices();}
+            const Vertices_t & vertices() const final override {return Static_Geometry<T, P>::Vertices();}
+            static const Vertices_t & Vertices() {return T::Vertices();}
     };
 
     template <class T, Primitive P>
@@ -59,8 +59,8 @@ namespace megu {
             Static_Geometry_Indiced(const Layout_Initializer &);
            ~Static_Geometry_Indiced() = default;
 
-            const Vertices & elements() const final override {return Static_Geometry_Indiced<T, P>::Elements();}
-            static const Vertices & Elements() {return T::Elements();}
+            const Elements_t  & elements() const final override {return Static_Geometry_Indiced<T, P>::Elements();}
+            static const Elements_t & Elements() {return T::Elements();}
     };
 
    
diff --git a/source/main.cpp b/source/main.cpp
index 4e5c853aabd654e55d5b1b5bb99490c28c199a05..d0207f29da94f815d12c5521c5dee08954b136ac 100644
--- a/source/main.cpp
+++ b/source/main.cpp
@@ -11,7 +11,7 @@
 #define WINDOW_WIDTH  1200
 #define WINDOW_HEIGHT 720
 
-int main(int argc, const char * argv) {
+int main(int argc, const char * argv[]) {
     try {
         //? GLFW
         if(glfwInit() == GLFW_FALSE) {