diff --git a/.gitmodules b/.gitmodules
index 347c28c6704b0e8fc3012ef84f190e840c53cacc..e92be47648a3486447af87707693960c55144c9f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,12 +1,12 @@
-[submodule "external/DMath"]
+[submodule "DMath"]
 	path = external/DMath
 	url = https://github.com/Didgy74/DMath.git
-	shallow = true
-[submodule "external/fx-gltf"]
+	branch = master
+[submodule "fx-gltf"]
 	path = external/fx-gltf
 	url = https://github.com/jessey-git/fx-gltf.git
-	shallow = true
-[submodule "external/nlohmann-json"]
+	branch = master
+[submodule "nlohmann-json"]
 	path = external/nlohmann-json
 	url = https://github.com/nlohmann/json.git
-	shallow = true
+	branch = master
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e19212837b5f2a2f257cc375056b783c42163acd..8ffdeb57b9092f805684557044c21a727a7f0557 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,16 +13,19 @@ target_link_libraries(${PROJECT_NAME} external::external)
 
 # Add custom command to copy Data directory to build directory
 # Remove Data directory in build directory if present
-add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
-		   COMMAND ${CMAKE_COMMAND} -E remove_directory
-		   ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Data
-		   )
+add_custom_command(
+	TARGET ${PROJECT_NAME} POST_BUILD
+	COMMAND ${CMAKE_COMMAND} -E remove_directory
+	$<TARGET_FILE_DIR:${PROJECT_NAME}>/Data
+	)
+
 # Copy directory from source folder to build folder
-add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
-		   COMMAND ${CMAKE_COMMAND} -E copy_directory
-                   ${PROJECT_SOURCE_DIR}/Data
-		   ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Data
-		   )
+add_custom_command(
+	TARGET ${PROJECT_NAME} POST_BUILD
+	COMMAND ${CMAKE_COMMAND} -E copy_directory
+    ${PROJECT_SOURCE_DIR}/Data
+	$<TARGET_FILE_DIR:${PROJECT_NAME}>/Data
+	)
 
 # GLEW
 find_package(GLEW 2.0 QUIET)
diff --git a/lib/GLEW/GLEWconfig.cmake b/lib/GLEW/GLEWconfig.cmake
index 254da76a5eb2950c82fd19ae8d572b77fac6906f..ec2edc648961df4b689e053c27411ac93ed59207 100644
--- a/lib/GLEW/GLEWconfig.cmake
+++ b/lib/GLEW/GLEWconfig.cmake
@@ -24,10 +24,12 @@ if (WIN32)
 
     set(GLEW_BINARY "${GLEW_BINDIR}/${GLEW_BINNAME}")
 
-    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD        # Adds a post-build event to MyTest
-            COMMAND ${CMAKE_COMMAND} -E copy_if_different  # which executes "cmake - E copy_if_different..."
-            ${GLEW_BINARY}      # <--this is in-file
-            ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GLEW_BINNAME}) # <--this is out-file path
+    add_custom_command(
+		TARGET ${PROJECT_NAME} POST_BUILD
+		COMMAND ${CMAKE_COMMAND} -E copy_if_different
+		"${GLEW_BINARY}"
+		"$<TARGET_FILE_DIR:${PROJECT_NAME}>/${GLEW_BINNAME}"
+		)
 
 endif()
 
diff --git a/lib/GLFW3/GLFW3config.cmake b/lib/GLFW3/GLFW3config.cmake
index 5c1dc0432c7fb29613083961cb2786fd319d7aee..1af0721a5f525a0b8af6d8861711a298a11c3ed3 100644
--- a/lib/GLFW3/GLFW3config.cmake
+++ b/lib/GLFW3/GLFW3config.cmake
@@ -24,10 +24,12 @@ if (WIN32)
 
     set(GLFW3_BINARY "${GLFW3_BINDIR}/${GLFW3_BINNAME}")
 
-    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD        # Adds a post-build event to MyTest
-            COMMAND ${CMAKE_COMMAND} -E copy_if_different  # which executes "cmake - E copy_if_different..."
-            ${GLFW3_BINARY}      # <--this is in-file
-            ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GLFW3_BINNAME}) # <--this is out-file path
+    add_custom_command(
+		TARGET ${PROJECT_NAME} POST_BUILD
+		COMMAND ${CMAKE_COMMAND} -E copy_if_different
+		"${GLFW3_BINARY}"
+		"$<TARGET_FILE_DIR:${PROJECT_NAME}>/${GLFW3_BINNAME}"
+		)
 
 endif()
 
diff --git a/lib/GLFW3/MSVC/bin/glfw3.dll b/lib/GLFW3/MSVC/bin/glfw3.dll
new file mode 100644
index 0000000000000000000000000000000000000000..456be5c47ed4e5c3ac4a15772244b9a74b90aab7
Binary files /dev/null and b/lib/GLFW3/MSVC/bin/glfw3.dll differ
diff --git a/lib/GLFW3/MinGW/bin/glfw3.dll b/lib/GLFW3/MinGW/bin/glfw3.dll
new file mode 100644
index 0000000000000000000000000000000000000000..520dd4ff098306ac6494fa3df122ad2437aacdee
Binary files /dev/null and b/lib/GLFW3/MinGW/bin/glfw3.dll differ