diff --git a/.gitmodules b/.gitmodules
index b44e47387fc30a41c3f5c8d09b5ad525b354f233..97fc7d9d689b41b55f2c3308a086f8f167869258 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
 [submodule "lib/glfw"]
 	path = lib/glfw
 	url = https://github.com/glfw/glfw.git
+[submodule "modules/camera/lib/glm"]
+	path = modules/camera/lib/glm
+	url = https://github.com/g-truc/glm.git
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 3309d860b300dd378460338d9fece48066c38993..e9911a597d036e1123628bfc50b2fb7718e7a58c 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -1,3 +1,4 @@
 
 # Add new modules here:
+add_subdirectory(camera)
 add_subdirectory(testing)
diff --git a/modules/camera/CMakeLists.txt b/modules/camera/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..061c22e265b6ec9deb0a170dd54c8a0f8765d20d
--- /dev/null
+++ b/modules/camera/CMakeLists.txt
@@ -0,0 +1,31 @@
+cmake_minimum_required(VERSION 3.16)
+project(vkcv_camera)
+
+# setting c++ standard for the project
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+set(vkcv_camera_source ${PROJECT_SOURCE_DIR}/src)
+set(vkcv_camera_include ${PROJECT_SOURCE_DIR}/include)
+
+set(vkcv_camera_sources
+		${vkcv_camera_include}/vkcv/camera/Camera.hpp
+		${vkcv_camera_source}/vkcv/camera/Camera.cpp
+		${vkcv_camera_include}/vkcv/camera/TrackballCamera.hpp
+		${vkcv_camera_source}/vkcv/camera/TrackballCamera.cpp
+)
+
+# adding source files to the project
+add_library(vkcv_camera STATIC ${vkcv_camera_sources})
+
+# Setup some path variables to load libraries
+set(vkcv_camera_lib lib)
+set(vkcv_camera_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_camera_lib})
+
+include(config/GLM.cmake)
+
+target_link_libraries(vkcv_camera PUBLIC ${vkcv_camera_libraries})
+
+# add the own include directory for public headers
+target_include_directories(vkcv_camera BEFORE PUBLIC ${vkcv_camera_include} ${vkcv_camera_includes})
+
diff --git a/modules/camera/config/GLM.cmake b/modules/camera/config/GLM.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..c4d14392ef0ea24243a45b19cd8583d90d3267be
--- /dev/null
+++ b/modules/camera/config/GLM.cmake
@@ -0,0 +1,15 @@
+
+find_package(glm QUIET)
+
+if (glm_FOUND)
+    list(APPEND vkcv_camera_includes ${GLM_INCLUDE_DIRS})
+    list(APPEND vkcv_camera_libraries glm)
+else()
+    if (EXISTS "${vkcv_camera_lib_path}/glm")
+        add_subdirectory(${vkcv_camera_lib}/glm)
+        
+        list(APPEND vkcv_camera_libraries glm)
+    else()
+        message(WARNING "GLM is required..! Update the submodules!")
+    endif ()
+endif ()
diff --git a/modules/testing/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp
similarity index 86%
rename from modules/testing/include/vkcv/camera/Camera.hpp
rename to modules/camera/include/vkcv/camera/Camera.hpp
index 1f0cd5803c381097003e4c2302c79b3cf42253bd..90a2b003c9381093e7d83678d99a55e17d16eb24 100644
--- a/modules/testing/include/vkcv/camera/Camera.hpp
+++ b/modules/camera/include/vkcv/camera/Camera.hpp
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <GLFW/glfw3.h>
 #include <glm/glm.hpp>
 #include <glm/gtc/matrix_transform.hpp>
 #include <glm/gtc/matrix_access.hpp>
@@ -9,8 +8,6 @@ namespace vkcv {
 
     class Camera {
     protected:
-        GLFWwindow *m_window;
-
         glm::mat4 m_view, m_projection;
 
         int m_width, m_height;
@@ -26,8 +23,6 @@ namespace vkcv {
 
         ~Camera();
 
-        virtual void update(GLFWwindow *window) {};
-
         void setPerspective(float fov, float ratio, float near, float far);
 
         const glm::mat4 &getView();
@@ -38,7 +33,7 @@ namespace vkcv {
 
         void lookAt(glm::vec3 position, glm::vec3 center, glm::vec3 up);
 
-        const glm::mat4 &Camera::getProjection();
+        const glm::mat4& getProjection();
 
         void setProjection(const glm::mat4 projection);
 
diff --git a/modules/testing/include/vkcv/camera/TrackballCamera.hpp b/modules/camera/include/vkcv/camera/TrackballCamera.hpp
similarity index 91%
rename from modules/testing/include/vkcv/camera/TrackballCamera.hpp
rename to modules/camera/include/vkcv/camera/TrackballCamera.hpp
index e9143e873de38ac470f8df6da10af6ba37854ec8..156ad8e4302210bc9c874dadefb31a9aa99730bc 100644
--- a/modules/testing/include/vkcv/camera/TrackballCamera.hpp
+++ b/modules/camera/include/vkcv/camera/TrackballCamera.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "vkcv/camera/Camera.hpp"
+#include "Camera.hpp"
 
 namespace vkcv {
 
@@ -13,8 +13,6 @@ namespace vkcv {
 
         ~TrackballCamera();
 
-        void update( GLFWwindow* window);
-
         float getSensitivity() const;
 
         void setSensitivity(float sensitivity);
diff --git a/modules/camera/lib/glm b/modules/camera/lib/glm
new file mode 160000
index 0000000000000000000000000000000000000000..66062497b104ca7c297321bd0e970869b1e6ece5
--- /dev/null
+++ b/modules/camera/lib/glm
@@ -0,0 +1 @@
+Subproject commit 66062497b104ca7c297321bd0e970869b1e6ece5
diff --git a/modules/testing/src/vkcv/camera/Camera.cpp b/modules/camera/src/vkcv/camera/Camera.cpp
similarity index 100%
rename from modules/testing/src/vkcv/camera/Camera.cpp
rename to modules/camera/src/vkcv/camera/Camera.cpp
diff --git a/modules/testing/src/vkcv/camera/TrackballCamera.cpp b/modules/camera/src/vkcv/camera/TrackballCamera.cpp
similarity index 96%
rename from modules/testing/src/vkcv/camera/TrackballCamera.cpp
rename to modules/camera/src/vkcv/camera/TrackballCamera.cpp
index 6e2323da17db2a83be1f8bcaf957fd677c4dc3a8..880a6209c9d4ba01238caf2ce6ec0b2b63f7dea2 100644
--- a/modules/testing/src/vkcv/camera/TrackballCamera.cpp
+++ b/modules/camera/src/vkcv/camera/TrackballCamera.cpp
@@ -59,8 +59,8 @@ namespace vkcv{
     {
     }
 
-
-    void TrackballCamera::update( GLFWwindow* window) {
+	// TODO: Can be done as events... (mouseMove, mouseDown, mouseUp)
+    /*void TrackballCamera::update( GLFWwindow* window) {
 
         double x, y;
 
@@ -94,7 +94,7 @@ namespace vkcv{
 
         m_view = glm::lookAt( m_position, m_center, m_up);
 
-    }
+    }*/
 
     float TrackballCamera::getSensitivity() const {
         return m_sensitivity;
diff --git a/modules/testing/CMakeLists.txt b/modules/testing/CMakeLists.txt
index 213bbb22c5ad3b83d3770df729a3dc8fd4a1d3d7..a22e547646fd4ef59860245d51365b98df59b578 100644
--- a/modules/testing/CMakeLists.txt
+++ b/modules/testing/CMakeLists.txt
@@ -11,21 +11,11 @@ set(vkcv_testing_include ${PROJECT_SOURCE_DIR}/include)
 set(vkcv_testing_sources
 		${vkcv_testing_include}/vkcv/testing/Test.hpp
 		${vkcv_testing_source}/vkcv/testing/Test.cpp
-		${vkcv_testing_include}/vkcv/camera/Camera.hpp
-		${vkcv_testing_source}/vkcv/camera/Camera.cpp
-		${vkcv_testing_include}/vkcv/camera/TrackballCamera.hpp
-		${vkcv_testing_source}/vkcv/camera/TrackballCamera.cpp
-		)
+)
 
 # adding source files to the project
 add_library(vkcv_testing STATIC ${vkcv_testing_sources})
 
-#include(GLM.cmake)                                               # libglm-dev
-#include(GLFW.cmake)												 # libglfw3-dev
-find_package(glfw3 QUIET)
-find_package(glm QUIET)
-target_link_libraries(vkcv_testing PUBLIC glm glfw)
-
 # add the own include directory for public headers
 target_include_directories(vkcv_testing BEFORE PUBLIC ${vkcv_testing_include})
 
diff --git a/modules/testing/GLFW.cmake b/modules/testing/GLFW.cmake
deleted file mode 100644
index 1b68d8aa97ba59158a7bd805ab2470f554f705aa..0000000000000000000000000000000000000000
--- a/modules/testing/GLFW.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
-
-find_package(glfw3 QUIET)
-
-if (glfw3_FOUND)
-    list(APPEND vkcv_libraries glfw)
-
-    message(${vkcv_config_msg} " GLFW    -   " ${glfw3_VERSION})
-else()
-    if (EXISTS "${vkcv_lib_path}/glfw")
-        add_subdirectory(${vkcv_lib}/glfw)
-
-        list(APPEND vkcv_libraries glfw)
-
-        message(${vkcv_config_msg} " GLFW    -   " ${glfw3_VERSION})
-    else()
-        message(WARNING "GLFW is required..! Update the submodules!")
-    endif ()
-endif ()
diff --git a/modules/testing/GLM.cmake b/modules/testing/GLM.cmake
deleted file mode 100644
index 151886dcf38745bdd2bda3e7ffcb6c8aa6bac0a1..0000000000000000000000000000000000000000
--- a/modules/testing/GLM.cmake
+++ /dev/null
@@ -1,22 +0,0 @@
-find_package(glm REQUIRED)
-
-if (glm_FOUND)
-
-#    list(APPEND vkcv_includes ${GLM_INCLUDE_DIRS})
-#    list(APPEND vkcv_libraries glm)
-    message(STATUS "GLM included at ${GLM_INCLUDE_DIR}")
-    message(STATUS ${GLM_INCLUDE_DIR})
-    message(STATUS ${GLM_INCLUDE_DIRS})
-    message(STATUS ${GLM_LIBRARIES})
-    message(${vkcv_config_msg} " GLM    -   " ${glm_VERSION})
-else()
-    if (EXISTS "${vkcv_lib_path}/glfw")
-        add_subdirectory(${vkcv_lib}/glfw)
-
-        list(APPEND vkcv_libraries glfw)
-
-        message(${vkcv_config_msg} " GLFW    -   " ${glfw3_VERSION})
-    else()
-        message(WARNING "GLFW is required..! Update the submodules!")
-    endif ()
-endif ()
\ No newline at end of file