diff --git a/cmake/assign_source_group.cmake b/cmake/assign_source_group.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..648f93ebd32efe33f2d366e4a08c4ec2d0598f26
--- /dev/null
+++ b/cmake/assign_source_group.cmake
@@ -0,0 +1,17 @@
+# Assigns the given files to source groups identical to their location.
+function(assign_source_group)
+  foreach(_SOURCE IN ITEMS ${ARGN})
+    if (IS_ABSOLUTE "${_SOURCE}")
+      file(RELATIVE_PATH _SOURCE_REL "${CMAKE_CURRENT_SOURCE_DIR}" "${_SOURCE}")
+    else()
+      set(_SOURCE_REL "${_SOURCE}")
+    endif()
+    get_filename_component(_SOURCE_PATH "${_SOURCE_REL}" PATH)
+    if(WIN32)
+      string(REPLACE "/" "\\" _SOURCE_PATH_MSVC "${_SOURCE_PATH}")
+      source_group("${_SOURCE_PATH_MSVC}" FILES "${_SOURCE}")
+    else()
+      source_group("${_SOURCE_PATH}" FILES "${_SOURCE}")
+    endif()
+  endforeach()
+endfunction(assign_source_group)
\ No newline at end of file
diff --git a/demos/viewer/src/navigation_behavior.cpp b/demos/viewer/src/navigation_behavior.cpp
index b93fedc62fcf6ed9e92709af458817ac90a7ce43..e9c914fd4d8658c03d65d1362203764739d3e2ed 100644
--- a/demos/viewer/src/navigation_behavior.cpp
+++ b/demos/viewer/src/navigation_behavior.cpp
@@ -32,12 +32,12 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/gtc/matrix_access.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/display_system_openvr.hpp"
-#include "phx/engine.hpp"
-#include "phx/entity.hpp"
-#include "phx/hmd.hpp"
-#include "phx/scene.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/display/hmd.hpp"
+#include "phx/rendering/components/transform.hpp"
 
 NavigationBehavior::NavigationBehavior(
     phx::DisplaySystemOpenVR* display_system_openvr)
diff --git a/demos/viewer/src/navigation_behavior.hpp b/demos/viewer/src/navigation_behavior.hpp
index 5c4079c798ba2f44462e212fac0f441c37305231..aee9accca37a44597cd536ae96edbcb5d6471ab4 100644
--- a/demos/viewer/src/navigation_behavior.hpp
+++ b/demos/viewer/src/navigation_behavior.hpp
@@ -23,8 +23,8 @@
 #ifndef DEMOS_VIEWER_SRC_NAVIGATION_BEHAVIOR_HPP_
 #define DEMOS_VIEWER_SRC_NAVIGATION_BEHAVIOR_HPP_
 
-#include "phx/behavior.hpp"
-#include "phx/display_system_openvr.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/scripting/behavior.hpp"
 
 class NavigationBehavior : public phx::Behavior {
  public:
diff --git a/demos/viewer/src/rotation_behavior.cpp b/demos/viewer/src/rotation_behavior.cpp
index 94d0799921c4dcd236ebb1d1526179e89072b850..8f3cdd738d51b119f46950f5087541076f2de583 100644
--- a/demos/viewer/src/rotation_behavior.cpp
+++ b/demos/viewer/src/rotation_behavior.cpp
@@ -29,10 +29,10 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/engine.hpp"
-#include "phx/entity.hpp"
-#include "phx/scene.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/rendering/components/transform.hpp"
 
 void RotationBehavior::OnUpdate() {
   auto transform = GetEntity()->GetFirstComponent<phx::Transform>();
diff --git a/demos/viewer/src/rotation_behavior.hpp b/demos/viewer/src/rotation_behavior.hpp
index aa9b81e74b4568ff00d81ba27eb31318678dbd44..8002373678ee32079d9668b750fe63fdbb4873ae 100644
--- a/demos/viewer/src/rotation_behavior.hpp
+++ b/demos/viewer/src/rotation_behavior.hpp
@@ -23,7 +23,7 @@
 #ifndef DEMOS_VIEWER_SRC_ROTATION_BEHAVIOR_HPP_
 #define DEMOS_VIEWER_SRC_ROTATION_BEHAVIOR_HPP_
 
-#include "phx/behavior.hpp"
+#include "phx/scripting/behavior.hpp"
 
 class RotationBehavior : public phx::Behavior {
  public:
diff --git a/demos/viewer/src/viewer.cpp b/demos/viewer/src/viewer.cpp
index 743e829011ab42dec70bc685be39635a50ff7085..d7e3cd485fd0ff42b7a41144b72899361f9aeec6 100644
--- a/demos/viewer/src/viewer.cpp
+++ b/demos/viewer/src/viewer.cpp
@@ -27,32 +27,32 @@
 #include <utility>
 #include <vector>
 
-#include "phx/assimp_model_loader.hpp"
-#include "phx/display_system_window.hpp"
-#include "phx/engine.hpp"
-#include "phx/entity.hpp"
-#include "phx/input_system.hpp"
-#include "phx/light.hpp"
-#include "phx/logger.hpp"
-#include "phx/material_handle.hpp"
-#include "phx/mesh.hpp"
-#include "phx/mesh_handle.hpp"
-#include "phx/openvr_resource_loader.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/display/display_system_window.hpp"
+#include "phx/display/window.hpp"
+#include "phx/input/input_system.hpp"
+#include "phx/rendering/auxiliary/splash_screen.hpp"
+#include "phx/rendering/components/light.hpp"
+#include "phx/rendering/components/material_handle.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/rendering/rendering_system.hpp"
+#include "phx/resources/loaders/assimp_model_loader.hpp"
+#include "phx/resources/loaders/openvr_resource_loader.hpp"
+#include "phx/resources/loaders/scene_loader.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_pointer.hpp"
 #include "phx/phoenix.hpp"
-#include "phx/rendering_system.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/runtime_component.hpp"
-#include "phx/scene.hpp"
-#include "phx/scene_loader.hpp"
 #include "phx/setup.hpp"
-#include "phx/splash_screen.hpp"
-#include "phx/transform.hpp"
-#include "phx/window.hpp"
 
 #include "navigation_behavior.hpp"
-#include "phx/display_system_openvr.hpp"
 #include "rotation_behavior.hpp"
 #include "viewer_system.hpp"
 
diff --git a/demos/viewer/src/viewer_system.cpp b/demos/viewer/src/viewer_system.cpp
index 5354fab236b4a6c122722af754aca2697255c6df..5fd77fc5cbf7111287e73bb24c5dd12eb61f6724 100644
--- a/demos/viewer/src/viewer_system.cpp
+++ b/demos/viewer/src/viewer_system.cpp
@@ -25,8 +25,8 @@
 #include <iostream>
 #include <string>
 
-#include "phx/engine.hpp"
-#include "phx/logger.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/logger.hpp"
 
 ViewerSystem::ViewerSystem(phx::Engine* engine) : phx::System(engine) {}
 
diff --git a/demos/viewer/src/viewer_system.hpp b/demos/viewer/src/viewer_system.hpp
index 49cda68e62278bedceb20ae593b5ec7cbdca2530..d425eec4e77fd65b9705ec5e6fb0b9f0823ed149 100644
--- a/demos/viewer/src/viewer_system.hpp
+++ b/demos/viewer/src/viewer_system.hpp
@@ -27,9 +27,9 @@
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/engine.hpp"
-#include "phx/frame_timer.hpp"
-#include "phx/system.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/frame_timer.hpp"
+#include "phx/core/system.hpp"
 
 SUPPRESS_WARNINGS_BEGIN_PADDED
 
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index 74d8d59a664bd41be9bd4e7d40e26a27edcd6c79..84ff95b01b9781f453aa91b55031b5a267f9b6bb 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -20,8 +20,8 @@
 # limitations under the License.
 #------------------------------------------------------------------------------
 
-file(GLOB PHOENIX_SOURCES phx/*.cpp)
-file(GLOB PHOENIX_HEADERS phx/*.hpp)
+file(GLOB_RECURSE PHOENIX_SOURCES phx/*.cpp phx/*.c)
+file(GLOB_RECURSE PHOENIX_HEADERS phx/*.hpp phx/*.h)
 
 # configure resources directory include string
 set(_RESOURCES_ROOT_PATH "${CMAKE_SOURCE_DIR}/resources/")
@@ -29,6 +29,10 @@ set(SOURCE_RESOURCES_INCLUDE_FILE "${CMAKE_SOURCE_DIR}/cmake/resources_path.hpp.
 set(TARGET_RESOURCES_INCLUDE_FILE "${CMAKE_CURRENT_BINARY_DIR}/phx/resources_path.hpp")
 configure_file(${SOURCE_RESOURCES_INCLUDE_FILE} ${TARGET_RESOURCES_INCLUDE_FILE} @ONLY)
 
+include(assign_source_group)
+assign_source_group(${PHOENIX_SOURCES})
+assign_source_group(${PHOENIX_HEADERS})
+
 add_library(phoenix
   ${PHOENIX_SOURCES}
   ${PHOENIX_HEADERS}
diff --git a/library/phx/component.cpp b/library/phx/core/component.cpp
similarity index 97%
rename from library/phx/component.cpp
rename to library/phx/core/component.cpp
index 7f34e170ca14df0bad295115a194950213a9e18f..54263176d1664aa53db66f92b32c09168b6bbb53 100644
--- a/library/phx/component.cpp
+++ b/library/phx/core/component.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "component.hpp"
+#include "phx/core/component.hpp"
 
 namespace phx {
 
diff --git a/library/phx/component.hpp b/library/phx/core/component.hpp
similarity index 91%
rename from library/phx/component.hpp
rename to library/phx/core/component.hpp
index ccd93f7d9c0e91371bd88a8a26a4df46e33e9f02..1faa0952bfa7cc2cfdd9ad077f0a654758cc77a4 100644
--- a/library/phx/component.hpp
+++ b/library/phx/core/component.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_COMPONENT_HPP_
-#define LIBRARY_PHX_COMPONENT_HPP_
+#ifndef LIBRARY_PHX_CORE_COMPONENT_HPP_
+#define LIBRARY_PHX_CORE_COMPONENT_HPP_
 
 #include <ostream>
 #include <string>
 
+#include "phx/utility/aspects/loggable.hpp"
 #include "phx/export.hpp"
-#include "phx/loggable.hpp"
 
 namespace phx {
 
@@ -57,4 +57,4 @@ class PHOENIX_EXPORT Component : public Loggable {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_COMPONENT_HPP_
+#endif  // LIBRARY_PHX_CORE_COMPONENT_HPP_
diff --git a/library/phx/component_check.hpp b/library/phx/core/component_check.hpp
similarity index 93%
rename from library/phx/component_check.hpp
rename to library/phx/core/component_check.hpp
index d0cbcc88d3367b2b401a00258194282a661776c8..d7fbb114166df882159418d733fe316d2c6b6640 100644
--- a/library/phx/component_check.hpp
+++ b/library/phx/core/component_check.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_COMPONENT_CHECK_HPP_
-#define LIBRARY_PHX_COMPONENT_CHECK_HPP_
+#ifndef LIBRARY_PHX_CORE_COMPONENT_CHECK_HPP_
+#define LIBRARY_PHX_CORE_COMPONENT_CHECK_HPP_
 
 #include <tuple>
 
 #include "boost/optional.hpp"
 
-#include "phx/entity.hpp"
+#include "phx/core/entity.hpp"
 #include "phx/export.hpp"
 
 namespace phx {
@@ -80,4 +80,4 @@ struct PHOENIX_EXPORT ComponentGather {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_COMPONENT_CHECK_HPP_
+#endif  // LIBRARY_PHX_CORE_COMPONENT_CHECK_HPP_
diff --git a/library/phx/engine.cpp b/library/phx/core/engine.cpp
similarity index 97%
rename from library/phx/engine.cpp
rename to library/phx/core/engine.cpp
index 2ca67313b4ae9dc73c008738edb8357478c0fe89..a122ee4c77fea5633ce5f77167247121f1903f35 100644
--- a/library/phx/engine.cpp
+++ b/library/phx/core/engine.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "engine.hpp"
+#include "phx/core/engine.hpp"
 
 #include <iostream>
 #include <memory>
@@ -28,8 +28,8 @@
 #include <utility>
 #include <vector>
 
-#include "phx/logger.hpp"
-#include "phx/scene.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/scene.hpp"
 
 namespace phx {
 
diff --git a/library/phx/engine.hpp b/library/phx/core/engine.hpp
similarity index 94%
rename from library/phx/engine.hpp
rename to library/phx/core/engine.hpp
index f89843eeca22e8b881f0486912a8796f9911bf09..e13934b7390e5c2d4e674c7f61ac261fa30ae950 100644
--- a/library/phx/engine.hpp
+++ b/library/phx/core/engine.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_ENGINE_HPP_
-#define LIBRARY_PHX_ENGINE_HPP_
+#ifndef LIBRARY_PHX_CORE_ENGINE_HPP_
+#define LIBRARY_PHX_CORE_ENGINE_HPP_
 
 #include <algorithm>
 #include <chrono>
@@ -40,13 +40,13 @@ SUPPRESS_WARNINGS_BEGIN
 #include "boost/signals2/signal.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/behavior.hpp"
+#include "phx/core/frame_timer.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/core/system.hpp"
+#include "phx/scripting/behavior.hpp"
+#include "phx/utility/aspects/loggable.hpp"
+#include "phx/utility/orderable_list.hpp"
 #include "phx/export.hpp"
-#include "phx/frame_timer.hpp"
-#include "phx/loggable.hpp"
-#include "phx/orderable_list.hpp"
-#include "phx/scene.hpp"
-#include "phx/system.hpp"
 
 namespace phx {
 
@@ -169,4 +169,4 @@ SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_ENGINE_HPP_
+#endif  // LIBRARY_PHX_CORE_ENGINE_HPP_
diff --git a/library/phx/entity.cpp b/library/phx/core/entity.cpp
similarity index 97%
rename from library/phx/entity.cpp
rename to library/phx/core/entity.cpp
index 38a70397762a9b64b0faef3e266db4da1a7fa833..36d74d15a9c097e294875e7427280282dc41109a 100644
--- a/library/phx/entity.cpp
+++ b/library/phx/core/entity.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "entity.hpp"
+#include "phx/core/entity.hpp"
 
 #include <string>
 
diff --git a/library/phx/entity.hpp b/library/phx/core/entity.hpp
similarity index 93%
rename from library/phx/entity.hpp
rename to library/phx/core/entity.hpp
index 56528b901a0220373f8c41a226d06a5cfedf9def..993438548637bb1baa3fb112dad705b52456e217 100644
--- a/library/phx/entity.hpp
+++ b/library/phx/core/entity.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_ENTITY_HPP_
-#define LIBRARY_PHX_ENTITY_HPP_
+#ifndef LIBRARY_PHX_CORE_ENTITY_HPP_
+#define LIBRARY_PHX_CORE_ENTITY_HPP_
 
 #include <algorithm>
 #include <memory>
@@ -30,10 +30,10 @@
 #include <type_traits>
 #include <vector>
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
+#include "phx/utility/aspects/loggable.hpp"
+#include "phx/utility/aspects/nameable.hpp"
 #include "phx/export.hpp"
-#include "phx/loggable.hpp"
-#include "phx/nameable.hpp"
 
 namespace phx {
 
@@ -103,4 +103,4 @@ class PHOENIX_EXPORT Entity : public Nameable, public Loggable {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_ENTITY_HPP_
+#endif  // LIBRARY_PHX_CORE_ENTITY_HPP_
diff --git a/library/phx/frame_timer.hpp b/library/phx/core/frame_timer.hpp
similarity index 93%
rename from library/phx/frame_timer.hpp
rename to library/phx/core/frame_timer.hpp
index 82b967c3bad4cb5640299c9d2b04c61430531009..ec8207f848e9a28c4acfa8d463487f487d7a9295 100644
--- a/library/phx/frame_timer.hpp
+++ b/library/phx/core/frame_timer.hpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_FRAME_TIMER_HPP_
-#define LIBRARY_PHX_FRAME_TIMER_HPP_
+#ifndef LIBRARY_PHX_CORE_FRAME_TIMER_HPP_
+#define LIBRARY_PHX_CORE_FRAME_TIMER_HPP_
 
 #include <chrono>
 
 #include "phx/export.hpp"
-#include "phx/time_info.hpp"
+#include "phx/core/time_info.hpp"
 
 namespace phx {
 
@@ -67,4 +67,4 @@ class PHOENIX_EXPORT FrameTimer final {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_FRAME_TIMER_HPP_
+#endif  // LIBRARY_PHX_CORE_FRAME_TIMER_HPP_
diff --git a/library/phx/logger.cpp b/library/phx/core/logger.cpp
similarity index 98%
rename from library/phx/logger.cpp
rename to library/phx/core/logger.cpp
index 578b7255a88895ea4c98595c0e61d22b7249fcc9..c47e5434b5d4bee38ff33d71a3c14cda4034c117 100644
--- a/library/phx/logger.cpp
+++ b/library/phx/core/logger.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "logger.hpp"
+#include "phx/core/logger.hpp"
 
 #include <memory>
 #include <vector>
diff --git a/library/phx/logger.hpp b/library/phx/core/logger.hpp
similarity index 94%
rename from library/phx/logger.hpp
rename to library/phx/core/logger.hpp
index 9a3a17e9fff5f32cfaba31ca852ea207b0ce7d57..7ef947af5bd962eedebb673f5f0b304fe62d7543 100644
--- a/library/phx/logger.hpp
+++ b/library/phx/core/logger.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_LOGGER_HPP_
-#define LIBRARY_PHX_LOGGER_HPP_
+#ifndef LIBRARY_PHX_CORE_LOGGER_HPP_
+#define LIBRARY_PHX_CORE_LOGGER_HPP_
 
 #include <memory>
 #include <sstream>
@@ -31,7 +31,7 @@
 #include "spdlog/logger.h"
 
 #include "phx/export.hpp"
-#include "phx/stream_helpers.hpp"
+#include "phx/utility/stream_helpers.hpp"
 
 namespace phx {
 
@@ -67,4 +67,4 @@ PHX_CONVENIENCE_LOGGER_FUNCTIONS(critical)
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_LOGGER_HPP_
+#endif  // LIBRARY_PHX_CORE_LOGGER_HPP_
diff --git a/library/phx/runtime_component.hpp b/library/phx/core/runtime_component.hpp
similarity index 90%
rename from library/phx/runtime_component.hpp
rename to library/phx/core/runtime_component.hpp
index 226edd3859ea0ee4e3650e1e5a305417722c1410..48ae0917bf0b081c1e8715a8540e7857c69606d2 100644
--- a/library/phx/runtime_component.hpp
+++ b/library/phx/core/runtime_component.hpp
@@ -20,13 +20,12 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RUNTIME_COMPONENT_HPP_
-#define LIBRARY_PHX_RUNTIME_COMPONENT_HPP_
+#ifndef LIBRARY_PHX_CORE_RUNTIME_COMPONENT_HPP_
+#define LIBRARY_PHX_CORE_RUNTIME_COMPONENT_HPP_
 
+#include "phx/core/component.hpp"
 #include "phx/export.hpp"
 
-#include "phx/component.hpp"
-
 namespace phx {
 
 enum RuntimeComponentType {
@@ -51,4 +50,4 @@ class PHOENIX_EXPORT RuntimeComponent : public Component {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RUNTIME_COMPONENT_HPP_
+#endif  // LIBRARY_PHX_CORE_RUNTIME_COMPONENT_HPP_
diff --git a/library/phx/scene.cpp b/library/phx/core/scene.cpp
similarity index 95%
rename from library/phx/scene.cpp
rename to library/phx/core/scene.cpp
index 00933e4940f25304858b3da1a9d57b70149b5ca3..e45799d9f174d3544594034b27e7c372008833e1 100644
--- a/library/phx/scene.cpp
+++ b/library/phx/core/scene.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "scene.hpp"
+#include "phx/core/scene.hpp"
 
 #include <cstddef>
 
@@ -30,8 +30,8 @@
 #include <utility>
 #include <vector>
 
-#include "phx/transform.hpp"
-#include "phx/runtime_component.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/rendering/components/transform.hpp"
 
 namespace phx {
 
diff --git a/library/phx/scene.hpp b/library/phx/core/scene.hpp
similarity index 93%
rename from library/phx/scene.hpp
rename to library/phx/core/scene.hpp
index 171453a3daf294d6e6da9a1cb866f906dfdc0d95..b4eb2d82437ab78d620b7d74c231bd2b85e4f74e 100644
--- a/library/phx/scene.hpp
+++ b/library/phx/core/scene.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SCENE_HPP_
-#define LIBRARY_PHX_SCENE_HPP_
+#ifndef LIBRARY_PHX_CORE_SCENE_HPP_
+#define LIBRARY_PHX_CORE_SCENE_HPP_
 
 #include <cstddef>
 
@@ -32,11 +32,11 @@
 #include <utility>
 #include <vector>
 
-#include "phx/component_check.hpp"
-#include "phx/entity.hpp"
+#include "phx/core/component_check.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/utility/aspects/loggable.hpp"
+#include "phx/utility/aspects/nameable.hpp"
 #include "phx/export.hpp"
-#include "phx/loggable.hpp"
-#include "phx/nameable.hpp"
 
 namespace phx {
 
@@ -125,4 +125,4 @@ std::vector<std::tuple<Components*...>> Scene::GetFirstComponentsMany() const {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_SCENE_HPP_
+#endif  // LIBRARY_PHX_CORE_SCENE_HPP_
diff --git a/library/phx/system.cpp b/library/phx/core/system.cpp
similarity index 94%
rename from library/phx/system.cpp
rename to library/phx/core/system.cpp
index b4ae86cd80cb4032346641978f13acff50f9eb75..0dfaeae161117e6b39f67ee6b4eb3a6ec4aa2111 100644
--- a/library/phx/system.cpp
+++ b/library/phx/core/system.cpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "system.hpp"
-#include "engine.hpp"
+#include "phx/core/system.hpp"
+#include "phx/core/engine.hpp"
 
 namespace phx {
 
diff --git a/library/phx/system.hpp b/library/phx/core/system.hpp
similarity index 88%
rename from library/phx/system.hpp
rename to library/phx/core/system.hpp
index ffdf3b01cba3197b9f29417977be323980aa587b..0cfa0b180bc6348b92e5b524bf3d2772be35fe34 100644
--- a/library/phx/system.hpp
+++ b/library/phx/core/system.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SYSTEM_HPP_
-#define LIBRARY_PHX_SYSTEM_HPP_
+#ifndef LIBRARY_PHX_CORE_SYSTEM_HPP_
+#define LIBRARY_PHX_CORE_SYSTEM_HPP_
 
 #include <string>
 
+#include "phx/core/frame_timer.hpp"
+#include "phx/utility/aspects/loggable.hpp"
 #include "phx/export.hpp"
-#include "phx/frame_timer.hpp"
-#include "phx/loggable.hpp"
 
 namespace phx {
 class Engine;
@@ -54,4 +54,4 @@ class PHOENIX_EXPORT System : public Loggable {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_SYSTEM_HPP_
+#endif  // LIBRARY_PHX_CORE_SYSTEM_HPP_
diff --git a/library/phx/time_info.hpp b/library/phx/core/time_info.hpp
similarity index 91%
rename from library/phx/time_info.hpp
rename to library/phx/core/time_info.hpp
index 735ae8c9d963c654d878a2698e1a277605f66821..d26403c84b6f65a2e25ff92ac54b9b0235f5ef6e 100644
--- a/library/phx/time_info.hpp
+++ b/library/phx/core/time_info.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_TIME_INFO_HPP_
-#define LIBRARY_PHX_TIME_INFO_HPP_
+#ifndef LIBRARY_PHX_CORE_TIME_INFO_HPP_
+#define LIBRARY_PHX_CORE_TIME_INFO_HPP_
 
 #include <cstddef>
 
@@ -38,4 +38,4 @@ struct PHOENIX_EXPORT TimeInfo {
 };
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_TIME_INFO_HPP_
+#endif  // LIBRARY_PHX_CORE_TIME_INFO_HPP_
diff --git a/library/phx/display_system.cpp b/library/phx/display/display_system.cpp
similarity index 96%
rename from library/phx/display_system.cpp
rename to library/phx/display/display_system.cpp
index 675f964211c9f8d7d852aa198436487b267a04ae..d6730963c2c30ae2d7da8438211fc912ccf1520b 100644
--- a/library/phx/display_system.cpp
+++ b/library/phx/display/display_system.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "display_system.hpp"
+#include "phx/display/display_system.hpp"
 
 namespace phx {
 DisplaySystem::DisplaySystem(Engine* engine) : System(engine) {}
diff --git a/library/phx/display_system.hpp b/library/phx/display/display_system.hpp
similarity index 86%
rename from library/phx/display_system.hpp
rename to library/phx/display/display_system.hpp
index 419d2af3d70b7627ad61720c331c8e9b7735e061..96d78f7f662980cff91fb7294972ba6cad778344 100644
--- a/library/phx/display_system.hpp
+++ b/library/phx/display/display_system.hpp
@@ -20,16 +20,16 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_DISPLAY_SYSTEM_HPP_
-#define LIBRARY_PHX_DISPLAY_SYSTEM_HPP_
+#ifndef LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_HPP_
+#define LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_HPP_
 
 #include <memory>
 #include <vector>
 
-#include "phx/engine.hpp"
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/system.hpp"
 #include "phx/export.hpp"
-#include "phx/render_target.hpp"
-#include "phx/system.hpp"
 
 namespace phx {
 
@@ -51,4 +51,4 @@ class PHOENIX_EXPORT DisplaySystem : public System {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_DISPLAY_SYSTEM_HPP_
+#endif  // LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_HPP_
diff --git a/library/phx/display_system_openvr.cpp b/library/phx/display/display_system_openvr.cpp
similarity index 94%
rename from library/phx/display_system_openvr.cpp
rename to library/phx/display/display_system_openvr.cpp
index 7938a3fce7112a3c5791d209b315c3d5fc4b616e..a455ed5a07f6b738c4fd939f5402f22b04e55a8c 100644
--- a/library/phx/display_system_openvr.cpp
+++ b/library/phx/display/display_system_openvr.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "display_system_openvr.hpp"
+#include "phx/display/display_system_openvr.hpp"
 
 #include <algorithm>
 #include <memory>
@@ -29,11 +29,11 @@
 #include <utility>
 #include <vector>
 
-#include "engine.hpp"
-#include "logger.hpp"
-#include "rendering_system.hpp"
-#include "runtime_component.hpp"
-#include "scene.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/rendering/rendering_system.hpp"
 
 #undef CreateWindow
 
diff --git a/library/phx/display_system_openvr.hpp b/library/phx/display/display_system_openvr.hpp
similarity index 84%
rename from library/phx/display_system_openvr.hpp
rename to library/phx/display/display_system_openvr.hpp
index a75bcdaf55025b3ddef512518f23904358bfad47..eb1c50dace48a0a776c12e78e6e823f779393237 100644
--- a/library/phx/display_system_openvr.hpp
+++ b/library/phx/display/display_system_openvr.hpp
@@ -20,18 +20,18 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_DISPLAY_SYSTEM_OPENVR_HPP_
-#define LIBRARY_PHX_DISPLAY_SYSTEM_OPENVR_HPP_
+#ifndef LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_OPENVR_HPP_
+#define LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_OPENVR_HPP_
 
 #include <memory>
 #include <vector>
 
-#include "phx/display_system.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system.hpp"
+#include "phx/display/hmd.hpp"
+#include "phx/display/window.hpp"
+#include "phx/rendering/backend/render_target.hpp"
 #include "phx/export.hpp"
-#include "phx/hmd.hpp"
-#include "phx/render_target.hpp"
-#include "phx/scene.hpp"
-#include "phx/window.hpp"
 
 namespace phx {
 
@@ -68,4 +68,4 @@ class PHOENIX_EXPORT DisplaySystemOpenVR : public DisplaySystem {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_DISPLAY_SYSTEM_OPENVR_HPP_
+#endif  // LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_OPENVR_HPP_
diff --git a/library/phx/display_system_window.cpp b/library/phx/display/display_system_window.cpp
similarity index 92%
rename from library/phx/display_system_window.cpp
rename to library/phx/display/display_system_window.cpp
index 58adabda9a5bebe9b513528ff70be2f075d34f8e..190c2fe08b595e1b073a287a949629ba4b7c6b30 100644
--- a/library/phx/display_system_window.cpp
+++ b/library/phx/display/display_system_window.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "display_system_window.hpp"
+#include "phx/display/display_system_window.hpp"
 
 #include <algorithm>
 #include <memory>
@@ -31,10 +31,10 @@
 
 #include "SDL2/SDL_video.h"
 
-#include "logger.hpp"
-#include "rendering_system.hpp"
-#include "runtime_component.hpp"
-#include "scene.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/rendering/rendering_system.hpp"
 
 #undef CreateWindow
 
diff --git a/library/phx/display_system_window.hpp b/library/phx/display/display_system_window.hpp
similarity index 87%
rename from library/phx/display_system_window.hpp
rename to library/phx/display/display_system_window.hpp
index 90bca383b91ffd6f097c04ecaf9beab740b167bd..cf8a3b559bbcc58796be3b1e4b34b76d01c36392 100644
--- a/library/phx/display_system_window.hpp
+++ b/library/phx/display/display_system_window.hpp
@@ -20,17 +20,17 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_DISPLAY_SYSTEM_WINDOW_HPP_
-#define LIBRARY_PHX_DISPLAY_SYSTEM_WINDOW_HPP_
+#ifndef LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_WINDOW_HPP_
+#define LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_WINDOW_HPP_
 
 #include <memory>
 #include <vector>
 
-#include "phx/display_system.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system.hpp"
+#include "phx/display/window.hpp"
+#include "phx/rendering/backend/render_target.hpp"
 #include "phx/export.hpp"
-#include "phx/render_target.hpp"
-#include "phx/scene.hpp"
-#include "phx/window.hpp"
 
 #undef CreateWindow
 
@@ -70,4 +70,4 @@ Window* DisplaySystemWindow::CreateWindow(Arguments&&... arguments) {
 }
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_DISPLAY_SYSTEM_WINDOW_HPP_
+#endif  // LIBRARY_PHX_DISPLAY_DISPLAY_SYSTEM_WINDOW_HPP_
diff --git a/library/phx/hmd.cpp b/library/phx/display/hmd.cpp
similarity index 98%
rename from library/phx/hmd.cpp
rename to library/phx/display/hmd.cpp
index 198a07a5fb5c05760d026eb6b6df8005a7b73881..9436e224c5a3224bb1be8c0aab26be2bcb3fe483 100644
--- a/library/phx/hmd.cpp
+++ b/library/phx/display/hmd.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "hmd.hpp"
+#include "phx/display/hmd.hpp"
 
 #include <algorithm>
 #include <array>
@@ -39,9 +39,10 @@ SUPPRESS_WARNINGS_END
 #include "openvr.h"  //NOLINT
 
 #include "gl/texture.hpp"
-#include "phx/logger.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_pointer.hpp"
+
+#include "phx/core/logger.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_pointer.hpp"
 
 namespace phx {
 HMD::HMD() {
diff --git a/library/phx/hmd.hpp b/library/phx/display/hmd.hpp
similarity index 94%
rename from library/phx/hmd.hpp
rename to library/phx/display/hmd.hpp
index 5ccffcfa0c9bfb0bfd86c28d8054905f1a4a700e..4bf398e9009ead18a97c8aec08fbdce9345be680 100644
--- a/library/phx/hmd.hpp
+++ b/library/phx/display/hmd.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_HMD_HPP_
-#define LIBRARY_PHX_HMD_HPP_
+#ifndef LIBRARY_PHX_DISPLAY_HMD_HPP_
+#define LIBRARY_PHX_DISPLAY_HMD_HPP_
 
 #include <memory>
 #include <vector>
@@ -35,9 +35,9 @@ SUPPRESS_WARNINGS_BEGIN
 #include "openvr.h"  //NOLINT
 SUPPRESS_WARNINGS_END
 
+#include "phx/resources/types/material.hpp"
+#include "phx/resources/types/mesh.hpp"
 #include "phx/export.hpp"
-#include "phx/material.hpp"
-#include "phx/mesh.hpp"
 
 #include "gl/texture.hpp"
 
@@ -114,4 +114,4 @@ class PHOENIX_EXPORT HMD {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_HMD_HPP_
+#endif  // LIBRARY_PHX_DISPLAY_HMD_HPP_
diff --git a/library/phx/window.cpp b/library/phx/display/window.cpp
similarity index 98%
rename from library/phx/window.cpp
rename to library/phx/display/window.cpp
index edc41151a95ac2d2785ed975b657dbcdc8cdfedb..014c6ddefa32bffb66827ebf71f6e5ef88adf1b8 100644
--- a/library/phx/window.cpp
+++ b/library/phx/display/window.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "window.hpp"
+#include "phx/display/window.hpp"
 
 #include <stdexcept>
 #include <string>
diff --git a/library/phx/window.hpp b/library/phx/display/window.hpp
similarity index 93%
rename from library/phx/window.hpp
rename to library/phx/display/window.hpp
index 23edcc2ed4affbb1b95fedf52aba016b8d89d948..b68d1d2d67f3a4a4f63bf6fb2d7ca7cd74d196da 100644
--- a/library/phx/window.hpp
+++ b/library/phx/display/window.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_WINDOW_HPP_
-#define LIBRARY_PHX_WINDOW_HPP_
+#ifndef LIBRARY_PHX_DISPLAY_WINDOW_HPP_
+#define LIBRARY_PHX_DISPLAY_WINDOW_HPP_
 
 #include <string>
 
@@ -69,4 +69,4 @@ class PHOENIX_EXPORT Window {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_WINDOW_HPP_
+#endif  // LIBRARY_PHX_DISPLAY_WINDOW_HPP_
diff --git a/library/phx/input_system.cpp b/library/phx/input/input_system.cpp
similarity index 96%
rename from library/phx/input_system.cpp
rename to library/phx/input/input_system.cpp
index df27af3ce77b7b1595dc6be0044d375a9635845f..04dc951c7076fed99d97ae33057d46f71f751e74 100644
--- a/library/phx/input_system.cpp
+++ b/library/phx/input/input_system.cpp
@@ -20,12 +20,12 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "input_system.hpp"
+#include "phx/input/input_system.hpp"
 
 #include <string>
-#include "logger.hpp"
-#include "rendering_system.hpp"
 
+#include "phx/core/logger.hpp"
+#include "phx/rendering/rendering_system.hpp"
 #include "phx/suppress_warnings.hpp"
 
 SUPPRESS_WARNINGS_BEGIN
diff --git a/library/phx/input_system.hpp b/library/phx/input/input_system.hpp
similarity index 94%
rename from library/phx/input_system.hpp
rename to library/phx/input/input_system.hpp
index 34bb3e5798b4d7da77fe9f4fbc97b3e7818f0e0b..af3b0465c16f821a2131fddacf37eb6982f3a936 100644
--- a/library/phx/input_system.hpp
+++ b/library/phx/input/input_system.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_INPUT_SYSTEM_HPP_
-#define LIBRARY_PHX_INPUT_SYSTEM_HPP_
+#ifndef LIBRARY_PHX_INPUT_INPUT_SYSTEM_HPP_
+#define LIBRARY_PHX_INPUT_INPUT_SYSTEM_HPP_
 
 #include <functional>
 #include <string>
@@ -34,9 +34,9 @@ SUPPRESS_WARNINGS_BEGIN
 #include "boost/signals2/signal.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/engine.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/system.hpp"
 #include "phx/export.hpp"
-#include "phx/system.hpp"
 
 namespace phx {
 
@@ -91,4 +91,4 @@ class PHOENIX_EXPORT InputSystem : public System {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_INPUT_SYSTEM_HPP_
+#endif  // LIBRARY_PHX_INPUT_INPUT_SYSTEM_HPP_
diff --git a/library/phx/openvr_controller_behavior.cpp b/library/phx/input/openvr_controller_behavior.cpp
similarity index 91%
rename from library/phx/openvr_controller_behavior.cpp
rename to library/phx/input/openvr_controller_behavior.cpp
index 51620fe1f74a172e3890a0207fa47f23c91a4383..cd229828f4a407039f843dc5219e07d7d5c6aaca 100644
--- a/library/phx/openvr_controller_behavior.cpp
+++ b/library/phx/input/openvr_controller_behavior.cpp
@@ -20,12 +20,12 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "openvr_controller_behavior.hpp"
+#include "phx/input/openvr_controller_behavior.hpp"
 
-#include "phx/entity.hpp"
-#include "phx/runtime_component.hpp"
-#include "phx/scene.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/rendering/components/transform.hpp"
 
 namespace phx {
 void OpenVRControllerBehavior::OnUpdate() {
diff --git a/library/phx/openvr_controller_behavior.hpp b/library/phx/input/openvr_controller_behavior.hpp
similarity index 86%
rename from library/phx/openvr_controller_behavior.hpp
rename to library/phx/input/openvr_controller_behavior.hpp
index a1b0340fb01912a614f75e2fa3e283821f76f2ff..c31643b67d511b4a813eb82e0d75db5f0039648d 100644
--- a/library/phx/openvr_controller_behavior.hpp
+++ b/library/phx/input/openvr_controller_behavior.hpp
@@ -20,12 +20,12 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_OPENVR_CONTROLLER_BEHAVIOR_HPP_
-#define LIBRARY_PHX_OPENVR_CONTROLLER_BEHAVIOR_HPP_
+#ifndef LIBRARY_PHX_INPUT_OPENVR_CONTROLLER_BEHAVIOR_HPP_
+#define LIBRARY_PHX_INPUT_OPENVR_CONTROLLER_BEHAVIOR_HPP_
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/behavior.hpp"
+#include "phx/scripting/behavior.hpp"
 #include "phx/export.hpp"
 
 namespace phx {
@@ -45,4 +45,4 @@ class PHOENIX_EXPORT OpenVRControllerBehavior : public Behavior {
 SUPPRESS_WARNINGS_END
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_OPENVR_CONTROLLER_BEHAVIOR_HPP_
+#endif  // LIBRARY_PHX_INPUT_OPENVR_CONTROLLER_BEHAVIOR_HPP_
diff --git a/library/phx/openvr_controller_system.cpp b/library/phx/input/openvr_controller_system.cpp
similarity index 91%
rename from library/phx/openvr_controller_system.cpp
rename to library/phx/input/openvr_controller_system.cpp
index 01a18ad27879ff4a817143af9081477a807b8040..eecf2be7c87c8437f68888ac9670a81bb7123009 100644
--- a/library/phx/openvr_controller_system.cpp
+++ b/library/phx/input/openvr_controller_system.cpp
@@ -20,21 +20,21 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "openvr_controller_system.hpp"
+#include "phx/input/openvr_controller_system.hpp"
 
 #include <memory>
 #include <string>
 #include <utility>
 
-#include "phx/display_system_openvr.hpp"
-#include "phx/logger.hpp"
-#include "phx/material_handle.hpp"
-#include "phx/mesh_handle.hpp"
-#include "phx/openvr_controller_behavior.hpp"
-#include "phx/openvr_resource_loader.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/input/openvr_controller_behavior.hpp"
+#include "phx/rendering/components/material_handle.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/resources/loaders/openvr_resource_loader.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_pointer.hpp"
 
 namespace phx {
 
diff --git a/library/phx/openvr_controller_system.hpp b/library/phx/input/openvr_controller_system.hpp
similarity index 86%
rename from library/phx/openvr_controller_system.hpp
rename to library/phx/input/openvr_controller_system.hpp
index 828ae7864e3d8556a4e0bafea1a6839172eed45d..607f72a46f02a0db1a33f1457ada5583f27f3e97 100644
--- a/library/phx/openvr_controller_system.hpp
+++ b/library/phx/input/openvr_controller_system.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_OPENVR_CONTROLLER_SYSTEM_HPP_
-#define LIBRARY_PHX_OPENVR_CONTROLLER_SYSTEM_HPP_
+#ifndef LIBRARY_PHX_INPUT_OPENVR_CONTROLLER_SYSTEM_HPP_
+#define LIBRARY_PHX_INPUT_OPENVR_CONTROLLER_SYSTEM_HPP_
 
 #include <memory>
 #include <vector>
@@ -32,12 +32,12 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/display_system.hpp"
-#include "phx/engine.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/system.hpp"
+#include "phx/display/display_system.hpp"
+#include "phx/display/hmd.hpp"
+#include "phx/input/openvr_controller_behavior.hpp"
 #include "phx/export.hpp"
-#include "phx/hmd.hpp"
-#include "phx/openvr_controller_behavior.hpp"
-#include "phx/system.hpp"
 
 namespace phx {
 class PHOENIX_EXPORT OpenVRControllerSystem : public System {
@@ -70,4 +70,4 @@ class PHOENIX_EXPORT OpenVRControllerSystem : public System {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_OPENVR_CONTROLLER_SYSTEM_HPP_
+#endif  // LIBRARY_PHX_INPUT_OPENVR_CONTROLLER_SYSTEM_HPP_
diff --git a/library/phx/splash_screen.cpp b/library/phx/rendering/auxiliary/splash_screen.cpp
similarity index 96%
rename from library/phx/splash_screen.cpp
rename to library/phx/rendering/auxiliary/splash_screen.cpp
index 3064a85876105d783d1c8282cabd900418d83d71..7f84a9a8abd502f0afaf20be8149fb76088b07eb 100644
--- a/library/phx/splash_screen.cpp
+++ b/library/phx/rendering/auxiliary/splash_screen.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "splash_screen.hpp"
+#include "phx/rendering/auxiliary/splash_screen.hpp"
 
 #include <gl/all.hpp>
 
@@ -28,9 +28,9 @@
 #include <memory>
 #include <string>
 
-#include "phx/image.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 #include "phx/resources_path.hpp"
 
 namespace phx {
diff --git a/library/phx/splash_screen.hpp b/library/phx/rendering/auxiliary/splash_screen.hpp
similarity index 85%
rename from library/phx/splash_screen.hpp
rename to library/phx/rendering/auxiliary/splash_screen.hpp
index 8755048cd61e850108a5505898ea3b99c70a7ad4..37511e99dc514bb5da407e26ef8f58c412267663 100644
--- a/library/phx/splash_screen.hpp
+++ b/library/phx/rendering/auxiliary/splash_screen.hpp
@@ -20,17 +20,17 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SPLASH_SCREEN_HPP_
-#define LIBRARY_PHX_SPLASH_SCREEN_HPP_
+#ifndef LIBRARY_PHX_RENDERING_AUXILIARY_SPLASH_SCREEN_HPP_
+#define LIBRARY_PHX_RENDERING_AUXILIARY_SPLASH_SCREEN_HPP_
 
 #include <memory>
 
 #include "phx/suppress_warnings.hpp"
 
+#include "phx/display/window.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/resources/resource_pointer.hpp"
 #include "phx/export.hpp"
-#include "phx/image.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/window.hpp"
 
 #include "gl/framebuffer.hpp"
 
@@ -62,4 +62,4 @@ SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_SPLASH_SCREEN_HPP_
+#endif  // LIBRARY_PHX_RENDERING_AUXILIARY_SPLASH_SCREEN_HPP_
diff --git a/library/phx/opengl_image_buffer_data.cpp b/library/phx/rendering/backend/opengl_image_buffer_data.cpp
similarity index 98%
rename from library/phx/opengl_image_buffer_data.cpp
rename to library/phx/rendering/backend/opengl_image_buffer_data.cpp
index 5a87d2f8a4308c9466b77c468df451d19357dbd1..2198b578e4351ccc02dfa2a506ce18193064124d 100644
--- a/library/phx/opengl_image_buffer_data.cpp
+++ b/library/phx/rendering/backend/opengl_image_buffer_data.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "opengl_image_buffer_data.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
 
 #include <algorithm>
 #include <memory>
diff --git a/library/phx/opengl_image_buffer_data.hpp b/library/phx/rendering/backend/opengl_image_buffer_data.hpp
similarity index 97%
rename from library/phx/opengl_image_buffer_data.hpp
rename to library/phx/rendering/backend/opengl_image_buffer_data.hpp
index 13ec7a85db6dcbf96d8c04c4f1987247ec5bc166..128d6b20063ed269fcaa7bfa0abed3f9dc82f61f 100644
--- a/library/phx/opengl_image_buffer_data.hpp
+++ b/library/phx/rendering/backend/opengl_image_buffer_data.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_OPENGL_IMAGE_BUFFER_DATA_HPP_
-#define LIBRARY_PHX_OPENGL_IMAGE_BUFFER_DATA_HPP_
+#ifndef LIBRARY_PHX_RENDERING_BACKEND_OPENGL_IMAGE_BUFFER_DATA_HPP_
+#define LIBRARY_PHX_RENDERING_BACKEND_OPENGL_IMAGE_BUFFER_DATA_HPP_
 
 #include <algorithm>
 #include <cmath>
@@ -34,10 +34,10 @@
 #include "GL/glew.h"
 #include "gl/texture.hpp"
 
+#include "phx/resources/types/image.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 #include "phx/export.hpp"
-#include "phx/image.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
 
 namespace phx {
 
@@ -393,4 +393,4 @@ phx::OpenGLImageBufferData<T> phx::OpenGLImageBufferData<T>::ReadFromFilePNG(
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_OPENGL_IMAGE_BUFFER_DATA_HPP_
+#endif  // LIBRARY_PHX_RENDERING_BACKEND_OPENGL_IMAGE_BUFFER_DATA_HPP_
diff --git a/library/phx/render_target.cpp b/library/phx/rendering/backend/render_target.cpp
similarity index 94%
rename from library/phx/render_target.cpp
rename to library/phx/rendering/backend/render_target.cpp
index 02008a7d97e3072cb6c1a7a42ebb34edc9393210..b8b1c611a6b5a0c5eaaa351dbeec3cd492b9f08e 100644
--- a/library/phx/render_target.cpp
+++ b/library/phx/rendering/backend/render_target.cpp
@@ -20,17 +20,17 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "render_target.hpp"
+#include "phx/rendering/backend/render_target.hpp"
 
 #include <memory>
 
 #include "gl/command_execution.hpp"
 #include "gl/viewport.hpp"
 
-#include "phx/entity.hpp"
-#include "phx/logger.hpp"
-#include "phx/projection.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/rendering/components/projection.hpp"
+#include "phx/rendering/components/transform.hpp"
 
 namespace phx {
 phx::RenderTarget::RenderTarget(const glm::uvec2 dimensions)
diff --git a/library/phx/render_target.hpp b/library/phx/rendering/backend/render_target.hpp
similarity index 91%
rename from library/phx/render_target.hpp
rename to library/phx/rendering/backend/render_target.hpp
index f441a947c7a32e831d353f1078bfd6b986bf2d28..be07213d041ca9e41aec02c17b72d5e00f56090f 100644
--- a/library/phx/render_target.hpp
+++ b/library/phx/rendering/backend/render_target.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RENDER_TARGET_HPP_
-#define LIBRARY_PHX_RENDER_TARGET_HPP_
+#ifndef LIBRARY_PHX_RENDERING_BACKEND_RENDER_TARGET_HPP_
+#define LIBRARY_PHX_RENDERING_BACKEND_RENDER_TARGET_HPP_
 
 #include <memory>
 
@@ -38,7 +38,7 @@ SUPPRESS_WARNINGS_END
 #include "gl/renderbuffer.hpp"
 #include "gl/texture.hpp"
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
 #include "phx/export.hpp"
 
 namespace phx {
@@ -73,4 +73,4 @@ SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RENDER_TARGET_HPP_
+#endif  // LIBRARY_PHX_RENDERING_BACKEND_RENDER_TARGET_HPP_
diff --git a/library/phx/shader_program.cpp b/library/phx/rendering/backend/shader_program.cpp
similarity index 93%
rename from library/phx/shader_program.cpp
rename to library/phx/rendering/backend/shader_program.cpp
index 85f76897a39a9db2028f7681ebfc46788b795cc8..4d53dc6c6245d2b0fdd1fe631f42cd1b7c3f2f28 100644
--- a/library/phx/shader_program.cpp
+++ b/library/phx/rendering/backend/shader_program.cpp
@@ -20,16 +20,16 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "phx/shader_program.hpp"
+#include "phx/rendering/backend/shader_program.hpp"
 
 #include <fstream>
 #include <iostream>
 #include <memory>
 #include <string>
 
-#include "phx/logger.hpp"
-#include "phx/resource.hpp"
-#include "phx/shader_source.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/resources/types/shader_source.hpp"
+#include "phx/resources/resource.hpp"
 
 namespace phx {
 
diff --git a/library/phx/shader_program.hpp b/library/phx/rendering/backend/shader_program.hpp
similarity index 86%
rename from library/phx/shader_program.hpp
rename to library/phx/rendering/backend/shader_program.hpp
index 63bc305fb810aeb66a55d9c6ecdc016849a0e466..93c6d7a56319bc436740a4e938fba132490a00ec 100644
--- a/library/phx/shader_program.hpp
+++ b/library/phx/rendering/backend/shader_program.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SHADER_PROGRAM_HPP_
-#define LIBRARY_PHX_SHADER_PROGRAM_HPP_
+#ifndef LIBRARY_PHX_RENDERING_BACKEND_SHADER_PROGRAM_HPP_
+#define LIBRARY_PHX_RENDERING_BACKEND_SHADER_PROGRAM_HPP_
 
 #include <cstddef>
 #include <memory>
@@ -37,12 +37,12 @@ SUPPRESS_WARNINGS_END
 #include "gl/program.hpp"
 #include "gl/shader.hpp"
 
+#include "phx/rendering/components/transform.hpp"
+#include "phx/rendering/render_passes/render_pass.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/types/shader_source.hpp"
+#include "phx/resources/resource_pointer.hpp"
 #include "phx/export.hpp"
-#include "phx/mesh.hpp"
-#include "phx/render_pass.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/shader_source.hpp"
-#include "phx/transform.hpp"
 
 namespace phx {
 
@@ -95,4 +95,4 @@ SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_SHADER_PROGRAM_HPP_
+#endif  // LIBRARY_PHX_RENDERING_BACKEND_SHADER_PROGRAM_HPP_
diff --git a/library/phx/light.cpp b/library/phx/rendering/components/light.cpp
similarity index 97%
rename from library/phx/light.cpp
rename to library/phx/rendering/components/light.cpp
index 3f571a0381c07386d280f4f362f09f5b3d17d380..547edfe9b790799f584b6996d1059759bdf9efea 100644
--- a/library/phx/light.cpp
+++ b/library/phx/rendering/components/light.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "light.hpp"
+#include "phx/rendering/components/light.hpp"
 
 #include <string>
 
diff --git a/library/phx/light.hpp b/library/phx/rendering/components/light.hpp
similarity index 91%
rename from library/phx/light.hpp
rename to library/phx/rendering/components/light.hpp
index de0a6522916b8b8326916751fc49d38d8e2a86e4..e8abc925810b1d63db905fad6a885e2843d2cb90 100644
--- a/library/phx/light.hpp
+++ b/library/phx/rendering/components/light.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_LIGHT_HPP_
-#define LIBRARY_PHX_LIGHT_HPP_
+#ifndef LIBRARY_PHX_RENDERING_COMPONENTS_LIGHT_HPP_
+#define LIBRARY_PHX_RENDERING_COMPONENTS_LIGHT_HPP_
 
 #include <string>
 
@@ -31,7 +31,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
 #include "phx/export.hpp"
 
 namespace phx {
@@ -84,4 +84,4 @@ SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_LIGHT_HPP_
+#endif  // LIBRARY_PHX_RENDERING_COMPONENTS_LIGHT_HPP_
diff --git a/library/phx/material_handle.cpp b/library/phx/rendering/components/material_handle.cpp
similarity index 94%
rename from library/phx/material_handle.cpp
rename to library/phx/rendering/components/material_handle.cpp
index ecafabb6b67ee45ee2c2fd99868b29712b00b2fd..0e058bba73ae1c5d0bab1fac7f947951bb5a77fa 100644
--- a/library/phx/material_handle.cpp
+++ b/library/phx/rendering/components/material_handle.cpp
@@ -20,12 +20,12 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "material_handle.hpp"
+#include "phx/rendering/components/material_handle.hpp"
 
 #include <iostream>
 #include <string>
 
-#include "logger.hpp"
+#include "phx/core/logger.hpp"
 
 namespace phx {
 
diff --git a/library/phx/material_handle.hpp b/library/phx/rendering/components/material_handle.hpp
similarity index 83%
rename from library/phx/material_handle.hpp
rename to library/phx/rendering/components/material_handle.hpp
index e51fb04fc2790a0b2fcb2603a93fbb60ab31f6fe..a2a5a14442cccc3b29a88c10fa6f811199754af1 100644
--- a/library/phx/material_handle.hpp
+++ b/library/phx/rendering/components/material_handle.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_MATERIAL_HANDLE_HPP_
-#define LIBRARY_PHX_MATERIAL_HANDLE_HPP_
+#ifndef LIBRARY_PHX_RENDERING_COMPONENTS_MATERIAL_HANDLE_HPP_
+#define LIBRARY_PHX_RENDERING_COMPONENTS_MATERIAL_HANDLE_HPP_
 
 #include <string>
 #include <vector>
@@ -32,11 +32,11 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec3.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
+#include "phx/resources/types/material.hpp"
+#include "phx/resources/resource_pointer.hpp"
+#include "phx/utility/aspects/nameable.hpp"
 #include "phx/export.hpp"
-#include "phx/material.hpp"
-#include "phx/nameable.hpp"
-#include "phx/resource_pointer.hpp"
 
 namespace phx {
 
@@ -62,4 +62,4 @@ class PHOENIX_EXPORT MaterialHandle final : public Component, public Nameable {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_MATERIAL_HANDLE_HPP_
+#endif  // LIBRARY_PHX_RENDERING_COMPONENTS_MATERIAL_HANDLE_HPP_
diff --git a/library/phx/mesh_handle.cpp b/library/phx/rendering/components/mesh_handle.cpp
similarity index 95%
rename from library/phx/mesh_handle.cpp
rename to library/phx/rendering/components/mesh_handle.cpp
index e8b2f5f2a875f6aff6f0f669c1f4397c1683609b..85fd32a7fcc2feea41f9f8f115e816a67c71fff3 100644
--- a/library/phx/mesh_handle.cpp
+++ b/library/phx/rendering/components/mesh_handle.cpp
@@ -19,11 +19,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //------------------------------------------------------------------------------
-#include "mesh_handle.hpp"
+
+#include "phx/rendering/components/mesh_handle.hpp"
 
 #include <string>
 
-#include "phx/mesh.hpp"
+#include "phx/resources/types/mesh.hpp"
 
 namespace phx {
 
diff --git a/library/phx/mesh_handle.hpp b/library/phx/rendering/components/mesh_handle.hpp
similarity index 83%
rename from library/phx/mesh_handle.hpp
rename to library/phx/rendering/components/mesh_handle.hpp
index afe8b0c5d5915e7c7b3bbf7b46b507b78677105e..e62ed8f1378dbba78d9de1b0c0e1ec153146bddc 100644
--- a/library/phx/mesh_handle.hpp
+++ b/library/phx/rendering/components/mesh_handle.hpp
@@ -19,16 +19,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //------------------------------------------------------------------------------
-#ifndef LIBRARY_PHX_MESH_HANDLE_HPP_
-#define LIBRARY_PHX_MESH_HANDLE_HPP_
+#ifndef LIBRARY_PHX_RENDERING_COMPONENTS_MESH_HANDLE_HPP_
+#define LIBRARY_PHX_RENDERING_COMPONENTS_MESH_HANDLE_HPP_
 
 #include <string>
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/resource_pointer.hpp"
+#include "phx/utility/aspects/nameable.hpp"
 #include "phx/export.hpp"
-#include "phx/mesh.hpp"
-#include "phx/nameable.hpp"
-#include "phx/resource_pointer.hpp"
 
 namespace phx {
 /**
@@ -58,4 +58,4 @@ class PHOENIX_EXPORT MeshHandle final : public Component, public Nameable {
 };
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_MESH_HANDLE_HPP_
+#endif  // LIBRARY_PHX_RENDERING_COMPONENTS_MESH_HANDLE_HPP_
diff --git a/library/phx/projection.cpp b/library/phx/rendering/components/projection.cpp
similarity index 97%
rename from library/phx/projection.cpp
rename to library/phx/rendering/components/projection.cpp
index 81713abd912bc564b7a0615a738cfcc05e7a052c..63b56491e4f5f2328ae7fbfab08b13b384a16101 100644
--- a/library/phx/projection.cpp
+++ b/library/phx/rendering/components/projection.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "projection.hpp"
+#include "phx/rendering/components/projection.hpp"
 
 #include <string>
 
diff --git a/library/phx/projection.hpp b/library/phx/rendering/components/projection.hpp
similarity index 89%
rename from library/phx/projection.hpp
rename to library/phx/rendering/components/projection.hpp
index 17671b52416f0bdda621d5f711670fd7f955a2b9..b347dae5a61e47dd5e9066eb687d964a5bb07b27 100644
--- a/library/phx/projection.hpp
+++ b/library/phx/rendering/components/projection.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_PROJECTION_HPP_
-#define LIBRARY_PHX_PROJECTION_HPP_
+#ifndef LIBRARY_PHX_RENDERING_COMPONENTS_PROJECTION_HPP_
+#define LIBRARY_PHX_RENDERING_COMPONENTS_PROJECTION_HPP_
 
 #include <string>
 
@@ -31,7 +31,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/mat4x4.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
 #include "phx/export.hpp"
 
 namespace phx {
@@ -63,4 +63,4 @@ class PHOENIX_EXPORT Projection final : public Component {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_PROJECTION_HPP_
+#endif  // LIBRARY_PHX_RENDERING_COMPONENTS_PROJECTION_HPP_
diff --git a/library/phx/transform.cpp b/library/phx/rendering/components/transform.cpp
similarity index 98%
rename from library/phx/transform.cpp
rename to library/phx/rendering/components/transform.cpp
index 32f699262afff5d85e53f5074623bea8a9ce66cf..9cbe8c26b0e003f5893cc3395494299036421175 100644
--- a/library/phx/transform.cpp
+++ b/library/phx/rendering/components/transform.cpp
@@ -32,11 +32,10 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/gtx/transform.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "transform.hpp"
-
-#include "phx/entity.hpp"
-#include "phx/logger.hpp"
-#include "phx/stream_helpers.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/utility/stream_helpers.hpp"
 
 namespace phx {
 Transform::Transform(const glm::vec3& translation, const glm::quat& rotation,
diff --git a/library/phx/transform.hpp b/library/phx/rendering/components/transform.hpp
similarity index 94%
rename from library/phx/transform.hpp
rename to library/phx/rendering/components/transform.hpp
index dfdef2a3ef0b30cb7a47eb8f28c999f2ac1c2b1b..c9e4f0c30f96753ad51946118f3e3d0628d0407f 100644
--- a/library/phx/transform.hpp
+++ b/library/phx/rendering/components/transform.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_TRANSFORM_HPP_
-#define LIBRARY_PHX_TRANSFORM_HPP_
+#ifndef LIBRARY_PHX_RENDERING_COMPONENTS_TRANSFORM_HPP_
+#define LIBRARY_PHX_RENDERING_COMPONENTS_TRANSFORM_HPP_
 
 #include <ostream>
 #include <string>
@@ -34,9 +34,9 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec4.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
+#include "phx/utility/aspects/hierarchical.hpp"
 #include "phx/export.hpp"
-#include "phx/hierarchical.hpp"
 
 namespace phx {
 
@@ -126,4 +126,4 @@ class PHOENIX_EXPORT Transform : public Component,
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_TRANSFORM_HPP_
+#endif  // LIBRARY_PHX_RENDERING_COMPONENTS_TRANSFORM_HPP_
diff --git a/library/phx/frame_graph.cpp b/library/phx/rendering/frame_graph.cpp
similarity index 91%
rename from library/phx/frame_graph.cpp
rename to library/phx/rendering/frame_graph.cpp
index c672239f7ec7a5e17ecc6163b3731273ce057b89..8c25c72b218964a02f0696cb3bf76a5fe4971b9f 100644
--- a/library/phx/frame_graph.cpp
+++ b/library/phx/rendering/frame_graph.cpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "phx/frame_graph.hpp"
+#include "phx/rendering/frame_graph.hpp"
 
 #include <memory>
 #include <utility>
 
-#include "phx/clear_pass.hpp"
-#include "phx/geometry_pass.hpp"
+#include "phx/rendering/render_passes/clear_pass.hpp"
+#include "phx/rendering/render_passes/geometry_pass.hpp"
 
 namespace phx {
 
diff --git a/library/phx/frame_graph.hpp b/library/phx/rendering/frame_graph.hpp
similarity index 91%
rename from library/phx/frame_graph.hpp
rename to library/phx/rendering/frame_graph.hpp
index 09079b5ead43296d5791c92d895756d114840e10..a6b4cbaf87f73cd6fce95aa39a110392f13e250c 100644
--- a/library/phx/frame_graph.hpp
+++ b/library/phx/rendering/frame_graph.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_FRAME_GRAPH_HPP_
-#define LIBRARY_PHX_FRAME_GRAPH_HPP_
+#ifndef LIBRARY_PHX_RENDERING_FRAME_GRAPH_HPP_
+#define LIBRARY_PHX_RENDERING_FRAME_GRAPH_HPP_
 
 #include <list>
 #include <memory>
@@ -29,7 +29,7 @@
 #include <vector>
 
 #include "phx/export.hpp"
-#include "phx/render_pass.hpp"
+#include "phx/rendering/render_passes/render_pass.hpp"
 
 namespace phx {
 class PHOENIX_EXPORT FrameGraph {
@@ -71,4 +71,4 @@ std::vector<RenderPassType*> phx::FrameGraph::GetRenderPasses() const {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_FRAME_GRAPH_HPP_
+#endif  // LIBRARY_PHX_RENDERING_FRAME_GRAPH_HPP_
diff --git a/library/phx/blit_pass.cpp b/library/phx/rendering/render_passes/blit_pass.cpp
similarity index 97%
rename from library/phx/blit_pass.cpp
rename to library/phx/rendering/render_passes/blit_pass.cpp
index 92f9deb7fe361960d913f95c23b4c056044e8d8a..e8029f84039fe2be178867a289d500d1ff9724d5 100644
--- a/library/phx/blit_pass.cpp
+++ b/library/phx/rendering/render_passes/blit_pass.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "blit_pass.hpp"
+#include "phx/rendering/render_passes/blit_pass.hpp"
 
 #include <memory>
 
diff --git a/library/phx/blit_pass.hpp b/library/phx/rendering/render_passes/blit_pass.hpp
similarity index 84%
rename from library/phx/blit_pass.hpp
rename to library/phx/rendering/render_passes/blit_pass.hpp
index 8b62607003da4462e6bacbfcd93af9e24616e619..2d1a41a3b1e7901b9e2b8d35f9d0e7349fe8e942 100644
--- a/library/phx/blit_pass.hpp
+++ b/library/phx/rendering/render_passes/blit_pass.hpp
@@ -20,16 +20,16 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_BLIT_PASS_HPP_
-#define LIBRARY_PHX_BLIT_PASS_HPP_
+#ifndef LIBRARY_PHX_RENDERING_RENDER_PASSES_BLIT_PASS_HPP_
+#define LIBRARY_PHX_RENDERING_RENDER_PASSES_BLIT_PASS_HPP_
 
 #include <memory>
 
 #include "gl/framebuffer.hpp"
 
 #include "phx/export.hpp"
-#include "phx/render_pass.hpp"
-#include "phx/render_target.hpp"
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/rendering/render_passes/render_pass.hpp"
 
 namespace phx {
 
@@ -52,4 +52,4 @@ class PHOENIX_EXPORT BlitPass : public RenderPass {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_BLIT_PASS_HPP_
+#endif  // LIBRARY_PHX_RENDERING_RENDER_PASSES_BLIT_PASS_HPP_
diff --git a/library/phx/clear_pass.cpp b/library/phx/rendering/render_passes/clear_pass.cpp
similarity index 96%
rename from library/phx/clear_pass.cpp
rename to library/phx/rendering/render_passes/clear_pass.cpp
index 6d42887213e4d5bb272feefbb0ff3a17a3455894..f971ac29c642bcf3dc9e9ea49c064bbc9151e342 100644
--- a/library/phx/clear_pass.cpp
+++ b/library/phx/rendering/render_passes/clear_pass.cpp
@@ -28,7 +28,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/gtc/type_ptr.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "clear_pass.hpp"
+#include "phx/rendering/render_passes/clear_pass.hpp"
 
 namespace phx {
 
diff --git a/library/phx/clear_pass.hpp b/library/phx/rendering/render_passes/clear_pass.hpp
similarity index 85%
rename from library/phx/clear_pass.hpp
rename to library/phx/rendering/render_passes/clear_pass.hpp
index 4df4c70bb388be168607f25bda00fe65376c43d3..82de13564646794ef732d918da2f631eaee7e5a4 100644
--- a/library/phx/clear_pass.hpp
+++ b/library/phx/rendering/render_passes/clear_pass.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_CLEAR_PASS_HPP_
-#define LIBRARY_PHX_CLEAR_PASS_HPP_
+#ifndef LIBRARY_PHX_RENDERING_RENDER_PASSES_CLEAR_PASS_HPP_
+#define LIBRARY_PHX_RENDERING_RENDER_PASSES_CLEAR_PASS_HPP_
 
 #include "phx/suppress_warnings.hpp"
 
@@ -30,9 +30,9 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec4.hpp"
 SUPPRESS_WARNINGS_END
 
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/rendering/render_passes/render_pass.hpp"
 #include "phx/export.hpp"
-#include "phx/render_pass.hpp"
-#include "phx/render_target.hpp"
 
 namespace phx {
 
@@ -56,4 +56,4 @@ class PHOENIX_EXPORT ClearPass : public RenderPass {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_CLEAR_PASS_HPP_
+#endif  // LIBRARY_PHX_RENDERING_RENDER_PASSES_CLEAR_PASS_HPP_
diff --git a/library/phx/geometry_pass.cpp b/library/phx/rendering/render_passes/geometry_pass.cpp
similarity index 97%
rename from library/phx/geometry_pass.cpp
rename to library/phx/rendering/render_passes/geometry_pass.cpp
index d5fd889fc4e7ceafa3e6c0915d258fee37bdf262..6f27ac3e5eb1dfb3d7475fd16ee569f619ba1c5b 100644
--- a/library/phx/geometry_pass.cpp
+++ b/library/phx/rendering/render_passes/geometry_pass.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "geometry_pass.hpp"
+#include "phx/rendering/render_passes/geometry_pass.hpp"
 
 #include <algorithm>
 #include <iostream>
@@ -33,11 +33,11 @@
 #include "glm/gtc/type_ptr.hpp"
 #include "glm/gtx/matrix_operation.hpp"
 
-#include "phx/logger.hpp"
-#include "phx/mesh.hpp"
-#include "phx/resource_utils.hpp"
-#include "phx/shader_source.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/types/shader_source.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 namespace phx {
 
diff --git a/library/phx/geometry_pass.hpp b/library/phx/rendering/render_passes/geometry_pass.hpp
similarity index 86%
rename from library/phx/geometry_pass.hpp
rename to library/phx/rendering/render_passes/geometry_pass.hpp
index 847648d73b38a52192df694081953719a5643e1b..9605e594dc062f6d3853ee4a1a6e177b5ef46efd 100644
--- a/library/phx/geometry_pass.hpp
+++ b/library/phx/rendering/render_passes/geometry_pass.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_GEOMETRY_PASS_HPP_
-#define LIBRARY_PHX_GEOMETRY_PASS_HPP_
+#ifndef LIBRARY_PHX_RENDERING_RENDER_PASSES_GEOMETRY_PASS_HPP_
+#define LIBRARY_PHX_RENDERING_RENDER_PASSES_GEOMETRY_PASS_HPP_
 
 #include <cstddef>
 #include <map>
@@ -36,16 +36,16 @@ SUPPRESS_WARNINGS_BEGIN
 #include "gl/vertex_array.hpp"
 SUPPRESS_WARNINGS_END
 
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/rendering/backend/shader_program.hpp"
+#include "phx/rendering/components/light.hpp"
+#include "phx/rendering/components/material_handle.hpp"
+#include "phx/rendering/components/projection.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/rendering/render_passes/render_pass.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/resource_manager.hpp"
 #include "phx/export.hpp"
-#include "phx/light.hpp"
-#include "phx/material_handle.hpp"
-#include "phx/mesh.hpp"
-#include "phx/projection.hpp"
-#include "phx/render_pass.hpp"
-#include "phx/render_target.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/shader_program.hpp"
-#include "phx/transform.hpp"
 
 namespace phx {
 
@@ -139,4 +139,4 @@ SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_GEOMETRY_PASS_HPP_
+#endif  // LIBRARY_PHX_RENDERING_RENDER_PASSES_GEOMETRY_PASS_HPP_
diff --git a/library/phx/render_pass.hpp b/library/phx/rendering/render_passes/render_pass.hpp
similarity index 88%
rename from library/phx/render_pass.hpp
rename to library/phx/rendering/render_passes/render_pass.hpp
index 1009afed720765d7aa1419e00f57fb2be02997ac..ed01445f7e52b95d030be7a8785a9cdf7a7126ce 100644
--- a/library/phx/render_pass.hpp
+++ b/library/phx/rendering/render_passes/render_pass.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RENDER_PASS_HPP_
-#define LIBRARY_PHX_RENDER_PASS_HPP_
+#ifndef LIBRARY_PHX_RENDERING_RENDER_PASSES_RENDER_PASS_HPP_
+#define LIBRARY_PHX_RENDERING_RENDER_PASSES_RENDER_PASS_HPP_
 
 #include "phx/export.hpp"
 
@@ -44,4 +44,4 @@ class PHOENIX_EXPORT RenderPass {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RENDER_PASS_HPP_
+#endif  // LIBRARY_PHX_RENDERING_RENDER_PASSES_RENDER_PASS_HPP_
diff --git a/library/phx/rendering_system.cpp b/library/phx/rendering/rendering_system.cpp
similarity index 87%
rename from library/phx/rendering_system.cpp
rename to library/phx/rendering/rendering_system.cpp
index b403cbecc009abe26a32c6b1efd303ffcf73489c..4a6bd5443b3c75658660ab1fe0aa143d093a13e4 100644
--- a/library/phx/rendering_system.cpp
+++ b/library/phx/rendering/rendering_system.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "rendering_system.hpp"
+#include "phx/rendering/rendering_system.hpp"
 
 #include <iostream>
 #include <memory>
@@ -29,17 +29,17 @@
 #include <utility>
 #include <vector>
 
-#include "engine.hpp"
-#include "light.hpp"
-#include "logger.hpp"
-#include "material_handle.hpp"
-#include "mesh.hpp"
-#include "mesh_handle.hpp"
-#include "projection.hpp"
-#include "runtime_component.hpp"
-#include "scene.hpp"
-#include "system.hpp"
-#include "transform.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/core/system.hpp"
+#include "phx/rendering/components/light.hpp"
+#include "phx/rendering/components/material_handle.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/components/projection.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/resources/types/mesh.hpp"
 
 #include "gl/opengl.hpp"
 
diff --git a/library/phx/rendering_system.hpp b/library/phx/rendering/rendering_system.hpp
similarity index 82%
rename from library/phx/rendering_system.hpp
rename to library/phx/rendering/rendering_system.hpp
index 0c47b0a8b0a4623e72cdae8404155c3c3b26a852..e33def770c5e7d7c64b7c6bb0ae97e7f1460fe3f 100644
--- a/library/phx/rendering_system.hpp
+++ b/library/phx/rendering/rendering_system.hpp
@@ -20,22 +20,22 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RENDERING_SYSTEM_HPP_
-#define LIBRARY_PHX_RENDERING_SYSTEM_HPP_
+#ifndef LIBRARY_PHX_RENDERING_RENDERING_SYSTEM_HPP_
+#define LIBRARY_PHX_RENDERING_RENDERING_SYSTEM_HPP_
 
 #include <memory>
 #include <ostream>
 #include <string>
 #include <vector>
 
-#include "phx/display_system.hpp"
-#include "phx/engine.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/core/system.hpp"
+#include "phx/display/display_system.hpp"
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/rendering/render_passes/geometry_pass.hpp"
+#include "phx/rendering/frame_graph.hpp"
 #include "phx/export.hpp"
-#include "phx/frame_graph.hpp"
-#include "phx/geometry_pass.hpp"
-#include "phx/render_target.hpp"
-#include "phx/scene.hpp"
-#include "phx/system.hpp"
 
 namespace phx {
 
@@ -70,4 +70,4 @@ class PHOENIX_EXPORT RenderingSystem : public System {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RENDERING_SYSTEM_HPP_
+#endif  // LIBRARY_PHX_RENDERING_RENDERING_SYSTEM_HPP_
diff --git a/library/phx/assimp_model_loader.cpp b/library/phx/resources/loaders/assimp_model_loader.cpp
similarity index 97%
rename from library/phx/assimp_model_loader.cpp
rename to library/phx/resources/loaders/assimp_model_loader.cpp
index 0c079c9a011db2ca4fc2195961945f5b0c4ba7dd..31341d2519a1108203afed03c0652e95b97091ce 100644
--- a/library/phx/assimp_model_loader.cpp
+++ b/library/phx/resources/loaders/assimp_model_loader.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "assimp_model_loader.hpp"
+#include "phx/resources/loaders/assimp_model_loader.hpp"
 
 #include <iostream>
 #include <memory>
@@ -30,13 +30,13 @@
 #include "assimp/Importer.hpp"   // C++ importer interface
 #include "assimp/postprocess.h"  // Post processing flags
 
-#include "phx/image_loader.hpp"
-#include "phx/logger.hpp"
-#include "phx/model.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
+#include "phx/resources/loaders/image_loader.hpp"
+#include "phx/resources/types/model.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 #include "phx/resources_path.hpp"
+#include "phx/core/logger.hpp"
 
 namespace phx {
 
diff --git a/library/phx/assimp_model_loader.hpp b/library/phx/resources/loaders/assimp_model_loader.hpp
similarity index 90%
rename from library/phx/assimp_model_loader.hpp
rename to library/phx/resources/loaders/assimp_model_loader.hpp
index 88426077760a81fcd6087b2ddf7a12be62f44deb..94c010f0f9423f1459f1447208fe103c4277314d 100644
--- a/library/phx/assimp_model_loader.hpp
+++ b/library/phx/resources/loaders/assimp_model_loader.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_ASSIMP_MODEL_LOADER_HPP_
-#define LIBRARY_PHX_ASSIMP_MODEL_LOADER_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_LOADERS_ASSIMP_MODEL_LOADER_HPP_
+#define LIBRARY_PHX_RESOURCES_LOADERS_ASSIMP_MODEL_LOADER_HPP_
 
 #include <functional>
 #include <memory>
@@ -39,12 +39,12 @@ SUPPRESS_WARNINGS_BEGIN
 SUPPRESS_WARNINGS_END
 
 #include "phx/export.hpp"
-#include "phx/material.hpp"
-#include "phx/mesh.hpp"
-#include "phx/model.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_load_strategy.hpp"
-#include "phx/resource_pointer.hpp"
+#include "phx/resources/types/material.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/types/model.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
+#include "phx/resources/resource_pointer.hpp"
 
 namespace phx {
 
@@ -127,4 +127,4 @@ std::vector<glm::vec3> phx::AssimpModelLoader::LoadVectorData(
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_ASSIMP_MODEL_LOADER_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_LOADERS_ASSIMP_MODEL_LOADER_HPP_
diff --git a/library/phx/image_loader.cpp b/library/phx/resources/loaders/image_loader.cpp
similarity index 95%
rename from library/phx/image_loader.cpp
rename to library/phx/resources/loaders/image_loader.cpp
index a28713dd9312f2e826bc760b64083ad2990b62f9..ca100f042bbdb9f8f6266745e56234d7f62f1682 100644
--- a/library/phx/image_loader.cpp
+++ b/library/phx/resources/loaders/image_loader.cpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "phx/image_loader.hpp"
+#include "phx/resources/loaders/image_loader.hpp"
 
 #include <memory>
 #include <string>
 #include <utility>
 
-#include "phx/image.hpp"
-#include "phx/logger.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/resources/types/image.hpp"
 #include "phx/resources_path.hpp"
 
 namespace phx {
diff --git a/library/phx/image_loader.hpp b/library/phx/resources/loaders/image_loader.hpp
similarity index 87%
rename from library/phx/image_loader.hpp
rename to library/phx/resources/loaders/image_loader.hpp
index 21bd195e778dfaab0d77191411c6b0f397859e11..9e0e61fb4f42d357e1689460a12100069acf2a4b 100644
--- a/library/phx/image_loader.hpp
+++ b/library/phx/resources/loaders/image_loader.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_IMAGE_LOADER_HPP_
-#define LIBRARY_PHX_IMAGE_LOADER_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_LOADERS_IMAGE_LOADER_HPP_
+#define LIBRARY_PHX_RESOURCES_LOADERS_IMAGE_LOADER_HPP_
 
 #include <memory>
 #include <string>
 #include <vector>
 
-#include "phx/resource_load_strategy.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
 
 namespace phx {
 class ImageLoader final : public ResourceLoadStrategy {
@@ -45,4 +45,4 @@ class ImageLoader final : public ResourceLoadStrategy {
 };
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_IMAGE_LOADER_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_LOADERS_IMAGE_LOADER_HPP_
diff --git a/library/phx/openvr_resource_loader.cpp b/library/phx/resources/loaders/openvr_resource_loader.cpp
similarity index 95%
rename from library/phx/openvr_resource_loader.cpp
rename to library/phx/resources/loaders/openvr_resource_loader.cpp
index d4aa3b4822893a9cfb6a39a764847dacfb491742..3c24d99ef7846cdd8f5e5e6e9005e0bbf055c9e5 100644
--- a/library/phx/openvr_resource_loader.cpp
+++ b/library/phx/resources/loaders/openvr_resource_loader.cpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "openvr_resource_loader.hpp"
+#include "phx/resources/loaders/openvr_resource_loader.hpp"
 
 #include <memory>
 #include <string>
 
-#include "logger.hpp"
-#include "material.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/resources/types/material.hpp"
 
 namespace phx {
 
diff --git a/library/phx/openvr_resource_loader.hpp b/library/phx/resources/loaders/openvr_resource_loader.hpp
similarity index 82%
rename from library/phx/openvr_resource_loader.hpp
rename to library/phx/resources/loaders/openvr_resource_loader.hpp
index d51e796557e2160129c94d761834f23af71edd73..357ff8ad9489e2ac269f962b8a48979d884c26d9 100644
--- a/library/phx/openvr_resource_loader.hpp
+++ b/library/phx/resources/loaders/openvr_resource_loader.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_OPENVR_RESOURCE_LOADER_HPP_
-#define LIBRARY_PHX_OPENVR_RESOURCE_LOADER_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_LOADERS_OPENVR_RESOURCE_LOADER_HPP_
+#define LIBRARY_PHX_RESOURCES_LOADERS_OPENVR_RESOURCE_LOADER_HPP_
 
 #include <memory>
 #include <vector>
@@ -33,10 +33,10 @@ SUPPRESS_WARNINGS_BEGIN
 SUPPRESS_WARNINGS_END
 
 #include "phx/export.hpp"
-#include "phx/hmd.hpp"
-#include "phx/mesh.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_load_strategy.hpp"
+#include "phx/display/hmd.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
 
 namespace phx {
 class Mesh;
@@ -59,4 +59,4 @@ class PHOENIX_EXPORT OpenVRResourceLoader final : public ResourceLoadStrategy {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_OPENVR_RESOURCE_LOADER_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_LOADERS_OPENVR_RESOURCE_LOADER_HPP_
diff --git a/library/phx/scene_loader.cpp b/library/phx/resources/loaders/scene_loader.cpp
similarity index 87%
rename from library/phx/scene_loader.cpp
rename to library/phx/resources/loaders/scene_loader.cpp
index ef6fa6fa88ac6d8a832806836d7a310805662e05..9b24a5a9a55fd4be48d9b6897a5625b8e58c2486 100644
--- a/library/phx/scene_loader.cpp
+++ b/library/phx/resources/loaders/scene_loader.cpp
@@ -20,16 +20,16 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "scene_loader.hpp"
+#include "phx/resources/loaders/scene_loader.hpp"
 
 #include <string>
 
-#include "material_handle.hpp"
-#include "mesh_handle.hpp"
-#include "model.hpp"
-#include "resource_manager.hpp"
-#include "resource_utils.hpp"
-#include "transform.hpp"
+#include "phx/rendering/components/material_handle.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/resources/types/model.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 namespace phx {
 
diff --git a/library/phx/scene_loader.hpp b/library/phx/resources/loaders/scene_loader.hpp
similarity index 86%
rename from library/phx/scene_loader.hpp
rename to library/phx/resources/loaders/scene_loader.hpp
index 204af32dde777a4e863e912f5977bd290b385b28..17d9403c12422ebb2b24d9fd6f2e3b285fd9e17b 100644
--- a/library/phx/scene_loader.hpp
+++ b/library/phx/resources/loaders/scene_loader.hpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SCENE_LOADER_HPP_
-#define LIBRARY_PHX_SCENE_LOADER_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_LOADERS_SCENE_LOADER_HPP_
+#define LIBRARY_PHX_RESOURCES_LOADERS_SCENE_LOADER_HPP_
 
 #include <string>
 
+#include "phx/core/scene.hpp"
 #include "phx/export.hpp"
-#include "phx/scene.hpp"
 
 namespace phx {
 
@@ -40,4 +40,4 @@ class PHOENIX_EXPORT SceneLoader {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_SCENE_LOADER_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_LOADERS_SCENE_LOADER_HPP_
diff --git a/library/phx/shader_loader.cpp b/library/phx/resources/loaders/shader_loader.cpp
similarity index 93%
rename from library/phx/shader_loader.cpp
rename to library/phx/resources/loaders/shader_loader.cpp
index 01b5697cfd98149dbea819ec9c25a37c41df5c27..8e51d914968dbd351aa792a7e18442f18a8273ff 100644
--- a/library/phx/shader_loader.cpp
+++ b/library/phx/resources/loaders/shader_loader.cpp
@@ -20,16 +20,16 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "phx/shader_loader.hpp"
+#include "phx/resources/loaders/shader_loader.hpp"
 
 #include <fstream>
 #include <memory>
 #include <string>
 #include <utility>
 
-#include "phx/logger.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/resources/types/shader_source.hpp"
 #include "phx/resources_path.hpp"
-#include "phx/shader_source.hpp"
 
 namespace phx {
 
diff --git a/library/phx/shader_loader.hpp b/library/phx/resources/loaders/shader_loader.hpp
similarity index 85%
rename from library/phx/shader_loader.hpp
rename to library/phx/resources/loaders/shader_loader.hpp
index 62496e27ce8b802f9b30bb271b3876ab720d9131..3f2a816001083ab8ddd73849bd48183641fc608c 100644
--- a/library/phx/shader_loader.hpp
+++ b/library/phx/resources/loaders/shader_loader.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SHADER_LOADER_HPP_
-#define LIBRARY_PHX_SHADER_LOADER_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_LOADERS_SHADER_LOADER_HPP_
+#define LIBRARY_PHX_RESOURCES_LOADERS_SHADER_LOADER_HPP_
 
 #include <memory>
 #include <string>
 
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_load_strategy.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
 
 namespace phx {
 class ShaderLoader final : public ResourceLoadStrategy {
@@ -51,4 +51,4 @@ class ShaderLoader final : public ResourceLoadStrategy {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_SHADER_LOADER_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_LOADERS_SHADER_LOADER_HPP_
diff --git a/library/phx/resource.hpp b/library/phx/resources/resource.hpp
similarity index 91%
rename from library/phx/resource.hpp
rename to library/phx/resources/resource.hpp
index b3a1d9698e5e322c303d8182b3e4631838e2c069..b83eeb8e88a74570fc40f3adf447b2c0aa692685 100644
--- a/library/phx/resource.hpp
+++ b/library/phx/resources/resource.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RESOURCE_HPP_
-#define LIBRARY_PHX_RESOURCE_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_RESOURCE_HPP_
+#define LIBRARY_PHX_RESOURCES_RESOURCE_HPP_
 
 namespace phx {
 /**
@@ -42,4 +42,4 @@ class Resource {
 };
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RESOURCE_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_RESOURCE_HPP_
diff --git a/library/phx/resource_declaration.hpp b/library/phx/resources/resource_declaration.hpp
similarity index 86%
rename from library/phx/resource_declaration.hpp
rename to library/phx/resources/resource_declaration.hpp
index 570068d5727cfe64d7ad78196fa2b3acbaf44528..0a0c325617cf1640400b0509c7c71fbd17cd521d 100644
--- a/library/phx/resource_declaration.hpp
+++ b/library/phx/resources/resource_declaration.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RESOURCE_DECLARATION_HPP_
-#define LIBRARY_PHX_RESOURCE_DECLARATION_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_RESOURCE_DECLARATION_HPP_
+#define LIBRARY_PHX_RESOURCES_RESOURCE_DECLARATION_HPP_
 
 #include "json.hpp"
 
@@ -29,4 +29,4 @@ namespace phx {
 using ResourceDeclaration = nlohmann::json;
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RESOURCE_DECLARATION_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_RESOURCE_DECLARATION_HPP_
diff --git a/library/phx/resource_load_strategy.hpp b/library/phx/resources/resource_load_strategy.hpp
similarity index 86%
rename from library/phx/resource_load_strategy.hpp
rename to library/phx/resources/resource_load_strategy.hpp
index 35c4f954eb8cf3f30bbb52cdeb7ffb0d40eeb067..98925b4325691b69af4de2576a81a4da86464edf 100644
--- a/library/phx/resource_load_strategy.hpp
+++ b/library/phx/resources/resource_load_strategy.hpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RESOURCE_LOAD_STRATEGY_HPP_
-#define LIBRARY_PHX_RESOURCE_LOAD_STRATEGY_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_RESOURCE_LOAD_STRATEGY_HPP_
+#define LIBRARY_PHX_RESOURCES_RESOURCE_LOAD_STRATEGY_HPP_
 
 #include <memory>
 
-#include "resource.hpp"
-#include "resource_declaration.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource.hpp"
 
 namespace phx {
 /**
@@ -52,4 +52,4 @@ class ResourceLoadStrategy {
 };
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RESOURCE_LOAD_STRATEGY_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_RESOURCE_LOAD_STRATEGY_HPP_
diff --git a/library/phx/resource_manager.cpp b/library/phx/resources/resource_manager.cpp
similarity index 94%
rename from library/phx/resource_manager.cpp
rename to library/phx/resources/resource_manager.cpp
index 51347e90355e43caff258e0be9eea4c48aca8095..a7ac44d8b21f28a6b2a0fa473a16c1952c51ccbd 100644
--- a/library/phx/resource_manager.cpp
+++ b/library/phx/resources/resource_manager.cpp
@@ -19,16 +19,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //------------------------------------------------------------------------------
-#include "resource_manager.hpp"
+#include "phx/resources/resource_manager.hpp"
 
 #include <algorithm>
 #include <memory>
 #include <string>
 #include <utility>
 
-#include "phx/assimp_model_loader.hpp"
-#include "phx/image_loader.hpp"
-#include "phx/shader_loader.hpp"
+#include "phx/resources/loaders/assimp_model_loader.hpp"
+#include "phx/resources/loaders/image_loader.hpp"
+#include "phx/resources/loaders/shader_loader.hpp"
 
 namespace phx {
 
diff --git a/library/phx/resource_manager.hpp b/library/phx/resources/resource_manager.hpp
similarity index 88%
rename from library/phx/resource_manager.hpp
rename to library/phx/resources/resource_manager.hpp
index 1949b293fa82998e7dd7c09f73a00f1aa95d5ab7..54cf258ca1a0b8cc9eb1c0c6ded2134152216a6f 100644
--- a/library/phx/resource_manager.hpp
+++ b/library/phx/resources/resource_manager.hpp
@@ -20,20 +20,20 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RESOURCE_MANAGER_HPP_
-#define LIBRARY_PHX_RESOURCE_MANAGER_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_RESOURCE_MANAGER_HPP_
+#define LIBRARY_PHX_RESOURCES_RESOURCE_MANAGER_HPP_
 
 #include <map>
 #include <memory>
 #include <string>
 
+#include "phx/core/logger.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
+#include "phx/resources/resource_pointer.hpp"
+#include "phx/resources/resource_proxy.hpp"
+#include "phx/utility/aspects/singleton.hpp"
 #include "phx/export.hpp"
-#include "phx/logger.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_load_strategy.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/resource_proxy.hpp"
-#include "phx/singleton.hpp"
 
 namespace phx {
 /**
@@ -94,4 +94,4 @@ ResourcePointer<ResourceType> phx::ResourceManager::DeclareResource(
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RESOURCE_MANAGER_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_RESOURCE_MANAGER_HPP_
diff --git a/library/phx/resource_pointer.hpp b/library/phx/resources/resource_pointer.hpp
similarity index 92%
rename from library/phx/resource_pointer.hpp
rename to library/phx/resources/resource_pointer.hpp
index 4e2f0f8d9ea889d4f09ec5d60c2e18ecef8bd494..3ee0ca1f5298cf4018f7d65269f913734e194856 100644
--- a/library/phx/resource_pointer.hpp
+++ b/library/phx/resources/resource_pointer.hpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RESOURCE_POINTER_HPP_
-#define LIBRARY_PHX_RESOURCE_POINTER_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_RESOURCE_POINTER_HPP_
+#define LIBRARY_PHX_RESOURCES_RESOURCE_POINTER_HPP_
 
 #include <cstddef>
 
+#include "phx/resources/resource_proxy.hpp"
 #include "phx/export.hpp"
-#include "resource_proxy.hpp"
 
 namespace phx {
 
@@ -71,4 +71,4 @@ class PHOENIX_EXPORT ResourcePointer {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RESOURCE_POINTER_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_RESOURCE_POINTER_HPP_
diff --git a/library/phx/resource_proxy.cpp b/library/phx/resources/resource_proxy.cpp
similarity index 94%
rename from library/phx/resource_proxy.cpp
rename to library/phx/resources/resource_proxy.cpp
index b2908d0b56521f2c6f7026a7845e5906f3a8cac8..a2453e7906e3e08918bd4779d8ec041e2ddb3924 100644
--- a/library/phx/resource_proxy.cpp
+++ b/library/phx/resources/resource_proxy.cpp
@@ -20,8 +20,9 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "resource_proxy.hpp"
-#include "resource_manager.hpp"
+#include "phx/resources/resource_proxy.hpp"
+
+#include "phx/resources/resource_manager.hpp"
 
 namespace phx {
 
diff --git a/library/phx/resource_proxy.hpp b/library/phx/resources/resource_proxy.hpp
similarity index 91%
rename from library/phx/resource_proxy.hpp
rename to library/phx/resources/resource_proxy.hpp
index abcb5b7a8bbacc7fdd1705a49042b40f51febbc3..967dfa32f4939cd393460bc07f92a1df37ece541 100644
--- a/library/phx/resource_proxy.hpp
+++ b/library/phx/resources/resource_proxy.hpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RESOURCE_PROXY_HPP_
-#define LIBRARY_PHX_RESOURCE_PROXY_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_RESOURCE_PROXY_HPP_
+#define LIBRARY_PHX_RESOURCES_RESOURCE_PROXY_HPP_
 
 #include <memory>
 
-#include "resource.hpp"
-#include "resource_declaration.hpp"
+#include "phx/resources/resource.hpp"
+#include "phx/resources/resource_declaration.hpp"
 
 namespace phx {
 class ResourceManager;
@@ -70,4 +70,4 @@ ResourceTargetType *phx::ResourceProxy::GetAs() const {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RESOURCE_PROXY_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_RESOURCE_PROXY_HPP_
diff --git a/library/phx/resource_utils.cpp b/library/phx/resources/resource_utils.cpp
similarity index 95%
rename from library/phx/resource_utils.cpp
rename to library/phx/resources/resource_utils.cpp
index 1e2c1995d089c4ad671e42f5f65db3fd4eb47ec8..e8e82fcb5356defa3988ae2696281f75a7054cc9 100644
--- a/library/phx/resource_utils.cpp
+++ b/library/phx/resources/resource_utils.cpp
@@ -19,13 +19,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //------------------------------------------------------------------------------
-#include "resource_utils.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 #include <algorithm>
 #include <locale>
 #include <string>
 
-#include "phx/resource_manager.hpp"
+#include "phx/resources/resource_manager.hpp"
 #include "phx/resources_path.hpp"
 
 namespace phx {
diff --git a/library/phx/resource_utils.hpp b/library/phx/resources/resource_utils.hpp
similarity index 82%
rename from library/phx/resource_utils.hpp
rename to library/phx/resources/resource_utils.hpp
index c27d46ee044641f0e3d45083f2ac8f371c5ce772..8f18bc1fa3c17ae0db1dc93a83ed4aebab8d8236 100644
--- a/library/phx/resource_utils.hpp
+++ b/library/phx/resources/resource_utils.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_RESOURCE_UTILS_HPP_
-#define LIBRARY_PHX_RESOURCE_UTILS_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_RESOURCE_UTILS_HPP_
+#define LIBRARY_PHX_RESOURCES_RESOURCE_UTILS_HPP_
 
 #include <map>
 #include <memory>
@@ -29,13 +29,13 @@
 
 #include "json.hpp"
 
+#include "phx/core/logger.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_pointer.hpp"
+#include "phx/utility/aspects/singleton.hpp"
 #include "phx/export.hpp"
-#include "phx/logger.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_load_strategy.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/singleton.hpp"
 
 namespace phx {
 /**
@@ -63,4 +63,4 @@ class PHOENIX_EXPORT ResourceUtils final {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_RESOURCE_UTILS_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_RESOURCE_UTILS_HPP_
diff --git a/library/phx/image.cpp b/library/phx/resources/types/image.cpp
similarity index 99%
rename from library/phx/image.cpp
rename to library/phx/resources/types/image.cpp
index c2af360d9c091595cc00fa883d69f94edffe8096..f4da0845b2f216c908b3172ebc1bf92c935027c9 100644
--- a/library/phx/image.cpp
+++ b/library/phx/resources/types/image.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "image.hpp"
+#include "phx/resources/types/image.hpp"
 
 #include <string>
 #include <utility>
diff --git a/library/phx/image.hpp b/library/phx/resources/types/image.hpp
similarity index 94%
rename from library/phx/image.hpp
rename to library/phx/resources/types/image.hpp
index f162528fd786e2bb26ac4739164b96493405d494..8638e7bb8f9522751fa44555848248fd05ce3cbd 100644
--- a/library/phx/image.hpp
+++ b/library/phx/resources/types/image.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_IMAGE_HPP_
-#define LIBRARY_PHX_IMAGE_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_TYPES_IMAGE_HPP_
+#define LIBRARY_PHX_RESOURCES_TYPES_IMAGE_HPP_
 
 #ifdef _WIN32
 #define NOMINMAX
@@ -38,9 +38,9 @@
 
 #include "FreeImage.h"
 
+#include "phx/resources/resource.hpp"
+#include "phx/utility/aspects/loggable.hpp"
 #include "phx/export.hpp"
-#include "phx/loggable.hpp"
-#include "phx/resource.hpp"
 
 namespace phx {
 class PHOENIX_EXPORT Image : public Resource, public Loggable {
@@ -124,4 +124,4 @@ class PHOENIX_EXPORT Image : public Resource, public Loggable {
 };  // namespace phx
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_IMAGE_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_TYPES_IMAGE_HPP_
diff --git a/library/phx/material.cpp b/library/phx/resources/types/material.cpp
similarity index 98%
rename from library/phx/material.cpp
rename to library/phx/resources/types/material.cpp
index 7809e25d95ec336118961986c3837941178c4c89..f79e5d332942b63f933ddc00235cb201fe4e8d06 100644
--- a/library/phx/material.cpp
+++ b/library/phx/resources/types/material.cpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "material.hpp"
+#include "phx/resources/types/material.hpp"
 
 #include <math.h>
 #include <algorithm>
 #include <memory>
 #include <string>
 
-#include "logger.hpp"
+#include "phx/core/logger.hpp"
 
 namespace phx {
 
diff --git a/library/phx/material.hpp b/library/phx/resources/types/material.hpp
similarity index 90%
rename from library/phx/material.hpp
rename to library/phx/resources/types/material.hpp
index 520bbd5adc423fb721d0ca48d6804a1a3661eaa6..557dbfc01397270ac47f926fec0be7a2d4f663ed 100644
--- a/library/phx/material.hpp
+++ b/library/phx/resources/types/material.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_MATERIAL_HPP_
-#define LIBRARY_PHX_MATERIAL_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_TYPES_MATERIAL_HPP_
+#define LIBRARY_PHX_RESOURCES_TYPES_MATERIAL_HPP_
 
 #include <memory>
 #include <string>
@@ -35,11 +35,11 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec3.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "nameable.hpp"
+#include "phx/resources/resource.hpp"
+#include "phx/resources/resource_pointer.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/utility/aspects/nameable.hpp"
 #include "phx/export.hpp"
-#include "phx/image.hpp"
-#include "phx/resource.hpp"
-#include "phx/resource_pointer.hpp"
 
 namespace phx {
 
@@ -102,4 +102,4 @@ class PHOENIX_EXPORT Material : public Resource, public Nameable {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_MATERIAL_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_TYPES_MATERIAL_HPP_
diff --git a/library/phx/mesh.cpp b/library/phx/resources/types/mesh.cpp
similarity index 98%
rename from library/phx/mesh.cpp
rename to library/phx/resources/types/mesh.cpp
index fe06eb2fd87fdea52aad92c644abe4f1e1bf79e6..a4e8f9438618eabed973b14b21c38eeb8b048fa0 100644
--- a/library/phx/mesh.cpp
+++ b/library/phx/resources/types/mesh.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "mesh.hpp"
+#include "phx/resources/types/mesh.hpp"
 
 #include <string>
 #include <utility>
diff --git a/library/phx/mesh.hpp b/library/phx/resources/types/mesh.hpp
similarity index 91%
rename from library/phx/mesh.hpp
rename to library/phx/resources/types/mesh.hpp
index 6e1e5685e7a28a16bfb4e0be22d5c1b2f432ca11..7ebd5f24e5912bd614d41218a6357f8fae719f2b 100644
--- a/library/phx/mesh.hpp
+++ b/library/phx/resources/types/mesh.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_MESH_HPP_
-#define LIBRARY_PHX_MESH_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_TYPES_MESH_HPP_
+#define LIBRARY_PHX_RESOURCES_TYPES_MESH_HPP_
 
 #include <string>
 #include <vector>
@@ -32,9 +32,9 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
+#include "phx/resources/resource.hpp"
+#include "phx/utility/aspects/nameable.hpp"
 #include "phx/export.hpp"
-#include "phx/nameable.hpp"
-#include "phx/resource.hpp"
 
 namespace phx {
 
@@ -81,4 +81,4 @@ class PHOENIX_EXPORT Mesh : public Resource, public Nameable {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_MESH_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_TYPES_MESH_HPP_
diff --git a/library/phx/model.cpp b/library/phx/resources/types/model.cpp
similarity index 95%
rename from library/phx/model.cpp
rename to library/phx/resources/types/model.cpp
index 62e78a3a57d3d05252b139432c206bda5f884e26..e10c2c2ea5c8b2293afafd53a871c527c332debe 100644
--- a/library/phx/model.cpp
+++ b/library/phx/resources/types/model.cpp
@@ -20,13 +20,13 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "model.hpp"
+#include "phx/resources/types/model.hpp"
 
 #include <string>
 #include <vector>
 
-#include "phx/logger.hpp"
-#include "phx/material.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/resources/types/material.hpp"
 
 namespace phx {
 
diff --git a/library/phx/model.hpp b/library/phx/resources/types/model.hpp
similarity index 87%
rename from library/phx/model.hpp
rename to library/phx/resources/types/model.hpp
index f6ce4133b1a0e0bb01a8ce057d2bb6d3119e167b..f45df4b9742fe29bfea1dcfa0bb0fa170d0faa62 100644
--- a/library/phx/model.hpp
+++ b/library/phx/resources/types/model.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_MODEL_HPP_
-#define LIBRARY_PHX_MODEL_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_TYPES_MODEL_HPP_
+#define LIBRARY_PHX_RESOURCES_TYPES_MODEL_HPP_
 
 #include <map>
 #include <string>
@@ -33,11 +33,11 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
+#include "phx/resources/types/material.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/resource.hpp"
+#include "phx/resources/resource_pointer.hpp"
 #include "phx/export.hpp"
-#include "phx/material.hpp"
-#include "phx/mesh.hpp"
-#include "phx/resource.hpp"
-#include "phx/resource_pointer.hpp"
 
 namespace phx {
 
@@ -73,4 +73,4 @@ class PHOENIX_EXPORT Model : public Resource {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_MODEL_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_TYPES_MODEL_HPP_
diff --git a/library/phx/shader_source.cpp b/library/phx/resources/types/shader_source.cpp
similarity index 96%
rename from library/phx/shader_source.cpp
rename to library/phx/resources/types/shader_source.cpp
index ef36646791d67f6674a9ecf282fd9c44b42f78a5..c6fe488054ac8be7745a2640383caa3114cf6bb4 100644
--- a/library/phx/shader_source.cpp
+++ b/library/phx/resources/types/shader_source.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "phx/shader_source.hpp"
+#include "phx/resources/types/shader_source.hpp"
 
 #include <cstddef>
 #include <string>
diff --git a/library/phx/shader_source.hpp b/library/phx/resources/types/shader_source.hpp
similarity index 88%
rename from library/phx/shader_source.hpp
rename to library/phx/resources/types/shader_source.hpp
index 0b9c0d8c8342c1a1aa598289607255482488d874..432aa87a945fa6bec17c47c8a8b39ce5e56b08c1 100644
--- a/library/phx/shader_source.hpp
+++ b/library/phx/resources/types/shader_source.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SHADER_SOURCE_HPP_
-#define LIBRARY_PHX_SHADER_SOURCE_HPP_
+#ifndef LIBRARY_PHX_RESOURCES_TYPES_SHADER_SOURCE_HPP_
+#define LIBRARY_PHX_RESOURCES_TYPES_SHADER_SOURCE_HPP_
 
 #include <cstddef>
 #include <string>
 
+#include "phx/resources/resource.hpp"
 #include "phx/export.hpp"
-#include "phx/resource.hpp"
 
 namespace phx {
 class PHOENIX_EXPORT ShaderSource final : public Resource {
@@ -51,4 +51,4 @@ class PHOENIX_EXPORT ShaderSource final : public Resource {
 };
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_SHADER_SOURCE_HPP_
+#endif  // LIBRARY_PHX_RESOURCES_TYPES_SHADER_SOURCE_HPP_
diff --git a/library/phx/behavior.cpp b/library/phx/scripting/behavior.cpp
similarity index 96%
rename from library/phx/behavior.cpp
rename to library/phx/scripting/behavior.cpp
index c5a6e2d4c079e5aaa67e5484f89daf878163ee1c..5f046b8b7c44b6c16f967ffb8c091a0eefd9fb3a 100644
--- a/library/phx/behavior.cpp
+++ b/library/phx/scripting/behavior.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "behavior.hpp"
+#include "phx/scripting/behavior.hpp"
 
 #include <string>
 
diff --git a/library/phx/behavior.hpp b/library/phx/scripting/behavior.hpp
similarity index 87%
rename from library/phx/behavior.hpp
rename to library/phx/scripting/behavior.hpp
index 4ec2fa75798671f089d942c469464825e45b9f2d..5733f0579d73e6c22da478b4e9e234dbd1b95be5 100644
--- a/library/phx/behavior.hpp
+++ b/library/phx/scripting/behavior.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_BEHAVIOR_HPP_
-#define LIBRARY_PHX_BEHAVIOR_HPP_
+#ifndef LIBRARY_PHX_SCRIPTING_BEHAVIOR_HPP_
+#define LIBRARY_PHX_SCRIPTING_BEHAVIOR_HPP_
 
 #include <string>
 
-#include "phx/component.hpp"
+#include "phx/core/component.hpp"
+#include "phx/core/frame_timer.hpp"
 #include "phx/export.hpp"
-#include "phx/frame_timer.hpp"
 
 namespace phx {
 
@@ -52,4 +52,4 @@ class PHOENIX_EXPORT Behavior : public Component {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_BEHAVIOR_HPP_
+#endif  // LIBRARY_PHX_SCRIPTING_BEHAVIOR_HPP_
diff --git a/library/phx/behavior_system.cpp b/library/phx/scripting/behavior_system.cpp
similarity index 90%
rename from library/phx/behavior_system.cpp
rename to library/phx/scripting/behavior_system.cpp
index de26fa1794bfeeead8d2dce7e86ebe2bed663759..234e0d47405b988ac3b60950bb86e3ab8f0eaaab 100644
--- a/library/phx/behavior_system.cpp
+++ b/library/phx/scripting/behavior_system.cpp
@@ -20,12 +20,11 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "behavior_system.hpp"
+#include "phx/scripting/behavior_system.hpp"
 
-#include "phx/engine.hpp"
-#include "phx/scene.hpp"
-
-#include "behavior.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/scripting/behavior.hpp"
 
 namespace phx {
 BehaviorSystem::BehaviorSystem(Engine* engine) : System(engine) {}
diff --git a/library/phx/behavior_system.hpp b/library/phx/scripting/behavior_system.hpp
similarity index 88%
rename from library/phx/behavior_system.hpp
rename to library/phx/scripting/behavior_system.hpp
index 2b5f544c0dfdd1aca62309578e88cc11a40bb84d..11a95e0631e66ec4322c82e83dba5508d32fd967 100644
--- a/library/phx/behavior_system.hpp
+++ b/library/phx/scripting/behavior_system.hpp
@@ -20,14 +20,14 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_BEHAVIOR_SYSTEM_HPP_
-#define LIBRARY_PHX_BEHAVIOR_SYSTEM_HPP_
+#ifndef LIBRARY_PHX_SCRIPTING_BEHAVIOR_SYSTEM_HPP_
+#define LIBRARY_PHX_SCRIPTING_BEHAVIOR_SYSTEM_HPP_
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/engine.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/system.hpp"
 #include "phx/export.hpp"
-#include "phx/system.hpp"
 
 namespace phx {
 
@@ -54,4 +54,4 @@ SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_BEHAVIOR_SYSTEM_HPP_
+#endif  // LIBRARY_PHX_SCRIPTING_BEHAVIOR_SYSTEM_HPP_
diff --git a/library/phx/setup.cpp b/library/phx/setup.cpp
index 0bfd2ea2586fae486a5ec4a6d9a69a56e33a6b68..0cb1fb02c23183be73f05b1052ec01678d996a14 100644
--- a/library/phx/setup.cpp
+++ b/library/phx/setup.cpp
@@ -27,22 +27,22 @@
 #include <string>
 #include <utility>
 
-#include "behavior_system.hpp"
-#include "blit_pass.hpp"
-#include "clear_pass.hpp"
-#include "component.hpp"
-#include "display_system_openvr.hpp"
-#include "display_system_window.hpp"
-#include "engine.hpp"
-#include "hmd.hpp"
-#include "input_system.hpp"
-#include "logger.hpp"
-#include "openvr_controller_system.hpp"
-#include "render_target.hpp"
-#include "rendering_system.hpp"
-#include "runtime_component.hpp"
-#include "scene.hpp"
-#include "tracking_system_openvr.hpp"
+#include "phx/core/component.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/display/display_system_window.hpp"
+#include "phx/display/hmd.hpp"
+#include "phx/input/input_system.hpp"
+#include "phx/input/openvr_controller_system.hpp"
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/rendering/render_passes/blit_pass.hpp"
+#include "phx/rendering/render_passes/clear_pass.hpp"
+#include "phx/rendering/rendering_system.hpp"
+#include "phx/scripting/behavior_system.hpp"
+#include "phx/tracking/tracking_system_openvr.hpp"
 
 #undef CreateWindow
 namespace phx {
diff --git a/library/phx/setup.hpp b/library/phx/setup.hpp
index ee37cf4cf9b4712479652c1d5aa2716bf5b29343..fef65a3543c39b9a268ea14e5e9616c26b12372c 100644
--- a/library/phx/setup.hpp
+++ b/library/phx/setup.hpp
@@ -25,12 +25,12 @@
 
 #include <memory>
 
-#include "phx/engine.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/window.hpp"
+#include "phx/rendering/frame_graph.hpp"
+#include "phx/rendering/rendering_system.hpp"
 #include "phx/export.hpp"
-#include "phx/frame_graph.hpp"
-#include "phx/rendering_system.hpp"
-#include "phx/scene.hpp"
-#include "phx/window.hpp"
 
 namespace phx {
 
diff --git a/library/phx/tracking_system_openvr.cpp b/library/phx/tracking/tracking_system_openvr.cpp
similarity index 94%
rename from library/phx/tracking_system_openvr.cpp
rename to library/phx/tracking/tracking_system_openvr.cpp
index e78c6ebade0c9b4dec3453b79a37ac0bb8da64a1..e101095e0ff421af0d03b59666e79bc2684abb70 100644
--- a/library/phx/tracking_system_openvr.cpp
+++ b/library/phx/tracking/tracking_system_openvr.cpp
@@ -20,17 +20,17 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "tracking_system_openvr.hpp"
+#include "phx/tracking/tracking_system_openvr.hpp"
 
 #include <memory>
 #include <string>
 
-#include "display_system_openvr.hpp"
-#include "hmd.hpp"
-#include "logger.hpp"
-#include "projection.hpp"
-#include "runtime_component.hpp"
-#include "transform.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/display/hmd.hpp"
+#include "phx/rendering/components/projection.hpp"
+#include "phx/rendering/components/transform.hpp"
 
 namespace phx {
 
diff --git a/library/phx/tracking_system_openvr.hpp b/library/phx/tracking/tracking_system_openvr.hpp
similarity index 89%
rename from library/phx/tracking_system_openvr.hpp
rename to library/phx/tracking/tracking_system_openvr.hpp
index 592e181c32d49486d782fb5c04b37fa839ed3426..d2cd2172a18097ebe5c7d6d48c7720993663a9b1 100644
--- a/library/phx/tracking_system_openvr.hpp
+++ b/library/phx/tracking/tracking_system_openvr.hpp
@@ -20,18 +20,18 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_TRACKING_SYSTEM_OPENVR_HPP_
-#define LIBRARY_PHX_TRACKING_SYSTEM_OPENVR_HPP_
+#ifndef LIBRARY_PHX_TRACKING_TRACKING_SYSTEM_OPENVR_HPP_
+#define LIBRARY_PHX_TRACKING_TRACKING_SYSTEM_OPENVR_HPP_
 
 #include <memory>
 #include <string>
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/display_system_openvr.hpp"
-#include "phx/engine.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/system.hpp"
+#include "phx/display/display_system_openvr.hpp"
 #include "phx/export.hpp"
-#include "phx/system.hpp"
 
 SUPPRESS_WARNINGS_BEGIN
 #define BOOST_BIND_NO_PLACEHOLDERS
@@ -77,4 +77,4 @@ class PHOENIX_EXPORT TrackingSystemOpenVR : public System {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_TRACKING_SYSTEM_OPENVR_HPP_
+#endif  // LIBRARY_PHX_TRACKING_TRACKING_SYSTEM_OPENVR_HPP_
diff --git a/library/phx/hierarchical.hpp b/library/phx/utility/aspects/hierarchical.hpp
similarity index 94%
rename from library/phx/hierarchical.hpp
rename to library/phx/utility/aspects/hierarchical.hpp
index f12ecfc5a80770bbed87f5e02a12bca6926b0168..45dd77d166b3908678d4e8e22ceb3ba00050bcb0 100644
--- a/library/phx/hierarchical.hpp
+++ b/library/phx/utility/aspects/hierarchical.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_HIERARCHICAL_HPP_
-#define LIBRARY_PHX_HIERARCHICAL_HPP_
+#ifndef LIBRARY_PHX_UTILITY_ASPECTS_HIERARCHICAL_HPP_
+#define LIBRARY_PHX_UTILITY_ASPECTS_HIERARCHICAL_HPP_
 
 #include <algorithm>
 #include <cstddef>
@@ -87,4 +87,4 @@ class PHOENIX_EXPORT Hierarchical {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_HIERARCHICAL_HPP_
+#endif  // LIBRARY_PHX_UTILITY_ASPECTS_HIERARCHICAL_HPP_
diff --git a/library/phx/loggable.hpp b/library/phx/utility/aspects/loggable.hpp
similarity index 91%
rename from library/phx/loggable.hpp
rename to library/phx/utility/aspects/loggable.hpp
index f6c21e4466c6158f92e0c48d078a60fb2366fb49..2bfd5060aa6365abed3f827ec18beab9193892f8 100644
--- a/library/phx/loggable.hpp
+++ b/library/phx/utility/aspects/loggable.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_LOGGABLE_HPP_
-#define LIBRARY_PHX_LOGGABLE_HPP_
+#ifndef LIBRARY_PHX_UTILITY_ASPECTS_LOGGABLE_HPP_
+#define LIBRARY_PHX_UTILITY_ASPECTS_LOGGABLE_HPP_
 
 #include <ostream>
 #include <string>
@@ -56,4 +56,4 @@ T& PHOENIX_EXPORT operator<<(T& out, const Loggable& loggable) {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_LOGGABLE_HPP_
+#endif  // LIBRARY_PHX_UTILITY_ASPECTS_LOGGABLE_HPP_
diff --git a/library/phx/nameable.hpp b/library/phx/utility/aspects/nameable.hpp
similarity index 91%
rename from library/phx/nameable.hpp
rename to library/phx/utility/aspects/nameable.hpp
index dc27b6f6de800cdf4b2e4e14cad4af90603b4cf8..53b110ccded8d17aa88c8eee5092ea3690f38612 100644
--- a/library/phx/nameable.hpp
+++ b/library/phx/utility/aspects/nameable.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_NAMEABLE_HPP_
-#define LIBRARY_PHX_NAMEABLE_HPP_
+#ifndef LIBRARY_PHX_UTILITY_ASPECTS_NAMEABLE_HPP_
+#define LIBRARY_PHX_UTILITY_ASPECTS_NAMEABLE_HPP_
 
 #include <string>
 
@@ -50,4 +50,4 @@ class PHOENIX_EXPORT Nameable {
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_NAMEABLE_HPP_
+#endif  // LIBRARY_PHX_UTILITY_ASPECTS_NAMEABLE_HPP_
diff --git a/library/phx/singleton.hpp b/library/phx/utility/aspects/singleton.hpp
similarity index 92%
rename from library/phx/singleton.hpp
rename to library/phx/utility/aspects/singleton.hpp
index 73fddef37be3d30202a44b280b29abf25161b545..c2e70bfddd7ccea3cd276d118e924152d6e57659 100644
--- a/library/phx/singleton.hpp
+++ b/library/phx/utility/aspects/singleton.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_SINGLETON_HPP_
-#define LIBRARY_PHX_SINGLETON_HPP_
+#ifndef LIBRARY_PHX_UTILITY_ASPECTS_SINGLETON_HPP_
+#define LIBRARY_PHX_UTILITY_ASPECTS_SINGLETON_HPP_
 
 #include <memory>
 #include <mutex>
@@ -63,4 +63,4 @@ template <class type>
 std::unique_ptr<type> singleton<type>::instance_ = nullptr;
 
 }  // namespace phx
-#endif  // LIBRARY_PHX_SINGLETON_HPP_
+#endif  // LIBRARY_PHX_UTILITY_ASPECTS_SINGLETON_HPP_
diff --git a/library/phx/orderable_list.hpp b/library/phx/utility/orderable_list.hpp
similarity index 96%
rename from library/phx/orderable_list.hpp
rename to library/phx/utility/orderable_list.hpp
index a9f50f36c48863528d1a72301b7146a730ccc3f4..20965c02a5859aee301e79ab224df355f399ba86 100644
--- a/library/phx/orderable_list.hpp
+++ b/library/phx/utility/orderable_list.hpp
@@ -20,15 +20,15 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_ORDERABLE_LIST_HPP_
-#define LIBRARY_PHX_ORDERABLE_LIST_HPP_
+#ifndef LIBRARY_PHX_UTILITY_ORDERABLE_LIST_HPP_
+#define LIBRARY_PHX_UTILITY_ORDERABLE_LIST_HPP_
 
 #include <memory>
 #include <utility>
 #include <vector>
 
+#include "phx/core/logger.hpp"
 #include "phx/export.hpp"
-#include "phx/logger.hpp"
 
 namespace phx {
 
@@ -132,4 +132,4 @@ void phx::OrderableList<ElementType>::MoveRelativeTo(ElementType* element,
 
 }  // namespace phx
 
-#endif  // LIBRARY_PHX_ORDERABLE_LIST_HPP_
+#endif  // LIBRARY_PHX_UTILITY_ORDERABLE_LIST_HPP_
diff --git a/library/phx/stream_helpers.cpp b/library/phx/utility/stream_helpers.cpp
similarity index 98%
rename from library/phx/stream_helpers.cpp
rename to library/phx/utility/stream_helpers.cpp
index 1ca8820eb960d4386816c8d1cdeda28da3f9dff1..e903b3fbd5ba71b07a1447caa24165dceda1e9c7 100644
--- a/library/phx/stream_helpers.cpp
+++ b/library/phx/utility/stream_helpers.cpp
@@ -20,7 +20,7 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#include "stream_helpers.hpp"
+#include "phx/utility/stream_helpers.hpp"
 
 namespace glm {
 PhxStreamSettings::PhxStreamSettings(std::ostream& stream) : stream_(stream) {
diff --git a/library/phx/stream_helpers.hpp b/library/phx/utility/stream_helpers.hpp
similarity index 94%
rename from library/phx/stream_helpers.hpp
rename to library/phx/utility/stream_helpers.hpp
index 0c924d2681858e4e67747a3ef69391200aefd71e..c464887c49b75208f9433a0181e50e5b2e4046db 100644
--- a/library/phx/stream_helpers.hpp
+++ b/library/phx/utility/stream_helpers.hpp
@@ -20,8 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
-#ifndef LIBRARY_PHX_STREAM_HELPERS_HPP_
-#define LIBRARY_PHX_STREAM_HELPERS_HPP_
+#ifndef LIBRARY_PHX_UTILITY_STREAM_HELPERS_HPP_
+#define LIBRARY_PHX_UTILITY_STREAM_HELPERS_HPP_
 
 #include <ostream>
 
@@ -75,4 +75,4 @@ PHOENIX_EXPORT std::ostream& operator<<(std::ostream& out,
                                         const glm::mat4& mat);
 
 }  // namespace glm
-#endif  // LIBRARY_PHX_STREAM_HELPERS_HPP_
+#endif  // LIBRARY_PHX_UTILITY_STREAM_HELPERS_HPP_
diff --git a/tests/src/integration_test_hmd.cpp b/tests/src/integration_test_hmd.cpp
index 9a71c4ec06ce21fbb2c41cf1bbd034a4eda12b0b..7babf1ca229f2eb11ea665b3b9ce7ba0b4e2c82d 100644
--- a/tests/src/integration_test_hmd.cpp
+++ b/tests/src/integration_test_hmd.cpp
@@ -29,14 +29,14 @@
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/engine.hpp"
-#include "phx/light.hpp"
-#include "phx/opengl_image_buffer_data.hpp"
-#include "phx/resource_utils.hpp"
-#include "phx/runtime_component.hpp"
-#include "phx/scene_loader.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
+#include "phx/rendering/components/light.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/resources/loaders/scene_loader.hpp"
+#include "phx/resources/resource_utils.hpp"
 #include "phx/setup.hpp"
-#include "phx/transform.hpp"
 
 SUPPRESS_WARNINGS_BEGIN
 #include "mocks/openvr_mock.hpp"
diff --git a/tests/src/integration_test_model_rendering.cpp b/tests/src/integration_test_model_rendering.cpp
index b180d0baf203664a77a8dea0014e1fb6f1235c65..729b5fc573b4f15c65d316a35ddfa63b460fc17c 100644
--- a/tests/src/integration_test_model_rendering.cpp
+++ b/tests/src/integration_test_model_rendering.cpp
@@ -27,19 +27,19 @@
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/assimp_model_loader.hpp"
-#include "phx/display_system_window.hpp"
-#include "phx/frame_timer.hpp"
-#include "phx/mesh.hpp"
-#include "phx/mesh_handle.hpp"
-#include "phx/opengl_image_buffer_data.hpp"
-#include "phx/rendering_system.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
-#include "phx/scene.hpp"
+#include "phx/resources/loaders/assimp_model_loader.hpp"
+#include "phx/display/display_system_window.hpp"
+#include "phx/display/window.hpp"
+#include "phx/core/frame_timer.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/rendering_system.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
+#include "phx/core/scene.hpp"
 #include "phx/setup.hpp"
-#include "phx/window.hpp"
 
 #include "test_utilities/opengl_buffer_data_comparison.hpp"
 
diff --git a/tests/src/integration_test_opengl_buffer_data_download.cpp b/tests/src/integration_test_opengl_buffer_data_download.cpp
index 2349c5d5cefd8c926ed4ec9676556c898730884e..459f99ba1b3fc4785de28aaf5e70ce816e3a9bd6 100644
--- a/tests/src/integration_test_opengl_buffer_data_download.cpp
+++ b/tests/src/integration_test_opengl_buffer_data_download.cpp
@@ -29,18 +29,18 @@
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/engine.hpp"
-#include "phx/entity.hpp"
-#include "phx/mesh.hpp"
-#include "phx/mesh_handle.hpp"
-#include "phx/opengl_image_buffer_data.hpp"
-#include "phx/rendering_system.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/scene.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/window.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/rendering_system.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_pointer.hpp"
+#include "phx/resources/types/mesh.hpp"
 #include "phx/setup.hpp"
-#include "phx/window.hpp"
 
 SUPPRESS_WARNINGS_BEGIN
 #include "mocks/openvr_mock.hpp"
diff --git a/tests/src/integration_test_rendering.cpp b/tests/src/integration_test_rendering.cpp
index dcd36fae1e2c797cc94266c6f4bd2271eb3bdc15..0d23dbd4216219d241ce3bc04aa5ebfd669e6d2d 100644
--- a/tests/src/integration_test_rendering.cpp
+++ b/tests/src/integration_test_rendering.cpp
@@ -28,16 +28,16 @@
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/display_system_window.hpp"
-#include "phx/frame_timer.hpp"
-#include "phx/mesh.hpp"
-#include "phx/mesh_handle.hpp"
-#include "phx/opengl_image_buffer_data.hpp"
-#include "phx/rendering_system.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/scene.hpp"
+#include "phx/core/frame_timer.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system_window.hpp"
+#include "phx/display/window.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/rendering_system.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/resource_manager.hpp"
 #include "phx/setup.hpp"
-#include "phx/window.hpp"
 
 SUPPRESS_WARNINGS_BEGIN
 #include "mocks/openvr_mock.hpp"
diff --git a/tests/src/test-transform.cpp b/tests/src/test-transform.cpp
index a02f86e2635ce824d1efe520fe8154d30c34688f..f0f8c7662b45126e0e9ccacc0091ba235a56d8fd 100644
--- a/tests/src/test-transform.cpp
+++ b/tests/src/test-transform.cpp
@@ -32,11 +32,11 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/entity.hpp"
-#include "phx/scene.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/rendering/components/transform.hpp"
 
-#include "phx/logger.hpp"
 #include "test_utilities/glm_mat4.hpp"
 #include "test_utilities/glm_quat.hpp"
 #include "test_utilities/glm_vec3.hpp"
diff --git a/tests/src/test_assimp_loader.cpp b/tests/src/test_assimp_loader.cpp
index 613ee4564563aabd2ea0de4c3045d8f82841d29d..f1cbfcc6b9cdfa9f32657b561b1a3cde09330443 100644
--- a/tests/src/test_assimp_loader.cpp
+++ b/tests/src/test_assimp_loader.cpp
@@ -26,11 +26,11 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/assimp_model_loader.hpp"
-#include "phx/logger.hpp"
-#include "phx/mesh.hpp"
-#include "phx/nameable.hpp"
-#include "phx/resource_utils.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/loaders/assimp_model_loader.hpp"
+#include "phx/resources/resource_utils.hpp"
+#include "phx/utility/aspects/nameable.hpp"
 
 #include "test_utilities/log_capture.hpp"
 
diff --git a/tests/src/test_behavior_system.cpp b/tests/src/test_behavior_system.cpp
index 493787f420b89df4f281d8ada3add8156c1bd94e..d7ce2e41fd95c38264588fbf57f7614c612dd97a 100644
--- a/tests/src/test_behavior_system.cpp
+++ b/tests/src/test_behavior_system.cpp
@@ -26,10 +26,10 @@
 #include "catch/catch.hpp"
 #include "trompeloeil.hpp"
 
-#include "phx/behavior.hpp"
-#include "phx/behavior_system.hpp"
-#include "phx/engine.hpp"
-#include "phx/scene.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/scripting/behavior.hpp"
+#include "phx/scripting/behavior_system.hpp"
 
 extern template struct trompeloeil::reporter<trompeloeil::specialized>;
 
diff --git a/tests/src/test_clear_pass.cpp b/tests/src/test_clear_pass.cpp
index 9957d399aa3477335a1273eccb1d2ba9e7ed4eec..dce48d4c421761b0d77d5e3b5f087f061f54d827 100644
--- a/tests/src/test_clear_pass.cpp
+++ b/tests/src/test_clear_pass.cpp
@@ -31,8 +31,8 @@ SUPPRESS_WARNINGS_END
 
 #include "catch/catch.hpp"
 
-#include "phx/clear_pass.hpp"
-#include "phx/render_target.hpp"
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/rendering/render_passes/clear_pass.hpp"
 
 #include "mocks/opengl_mock.hpp"
 
diff --git a/tests/src/test_display_system.cpp b/tests/src/test_display_system.cpp
index 97135366aa074c6ed2dcc0d869125bbe2e3eb3b4..5441032582559874deec4c0e6561cbe8d10cfa98 100644
--- a/tests/src/test_display_system.cpp
+++ b/tests/src/test_display_system.cpp
@@ -29,9 +29,9 @@
 
 #include "mocks/sdl_mock.hpp"
 
-#include "phx/display_system_window.hpp"
-#include "phx/logger.hpp"
-#include "phx/window.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/display/display_system_window.hpp"
+#include "phx/display/window.hpp"
 
 using trompeloeil::_;
 using trompeloeil::ne;
diff --git a/tests/src/test_engine.cpp b/tests/src/test_engine.cpp
index 02b9efd634ccea19931a1ccccab5481fd5c0ec02..e500e5b1f3680fc465e5d9584ffb449c0d82c65b 100644
--- a/tests/src/test_engine.cpp
+++ b/tests/src/test_engine.cpp
@@ -28,14 +28,14 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/behavior.hpp"
-#include "phx/display_system_window.hpp"
-#include "phx/engine.hpp"
-#include "phx/input_system.hpp"
-#include "phx/logger.hpp"
-#include "phx/rendering_system.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/core/system.hpp"
+#include "phx/display/display_system_window.hpp"
+#include "phx/input/input_system.hpp"
+#include "phx/rendering/rendering_system.hpp"
+#include "phx/scripting/behavior.hpp"
 #include "phx/setup.hpp"
-#include "phx/system.hpp"
 
 #include "test_utilities/log_capture.hpp"
 
diff --git a/tests/src/test_entity.cpp b/tests/src/test_entity.cpp
index 12baf3feefaa045485aa2f7824abb3b32d680949..a4182668389c3fe4cda81d0fbc404076c1830995 100644
--- a/tests/src/test_entity.cpp
+++ b/tests/src/test_entity.cpp
@@ -22,9 +22,9 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/component.hpp"
-#include "phx/entity.hpp"
-#include "phx/mesh_handle.hpp"
+#include "phx/core/component.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
 
 SCENARIO("An entity can keep track of components.", "[phx][phx::Entity]") {
   GIVEN("A new entity.") {
diff --git a/tests/src/test_frame_graph.cpp b/tests/src/test_frame_graph.cpp
index 2008be84053496297c680dac6f2bc875e2dd2fec..65308ab53e9a7b7672f6ae5b5b07dc5c614a2a10 100644
--- a/tests/src/test_frame_graph.cpp
+++ b/tests/src/test_frame_graph.cpp
@@ -27,8 +27,8 @@
 
 #include "trompeloeil.hpp"
 
-#include "phx/frame_graph.hpp"
-#include "phx/render_pass.hpp"
+#include "phx/rendering/render_passes/render_pass.hpp"
+#include "phx/rendering/frame_graph.hpp"
 
 extern template struct trompeloeil::reporter<trompeloeil::specialized>;
 
diff --git a/tests/src/test_geometry_pass.cpp b/tests/src/test_geometry_pass.cpp
index d8cdc27c771136f87a763a8cb840352afbd17ceb..141e691c4dc634829b26108db667980e675c1bf9 100644
--- a/tests/src/test_geometry_pass.cpp
+++ b/tests/src/test_geometry_pass.cpp
@@ -37,11 +37,11 @@ SUPPRESS_WARNINGS_BEGIN
 #include "trompeloeil.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/entity.hpp"
-#include "phx/geometry_pass.hpp"
-#include "phx/projection.hpp"
-#include "phx/render_target.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/rendering/backend/render_target.hpp"
+#include "phx/rendering/components/projection.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/rendering/render_passes/geometry_pass.hpp"
 
 #include "mocks/opengl_mock.hpp"
 
diff --git a/tests/src/test_image.cpp b/tests/src/test_image.cpp
index db69d982d9a5a7e3b6dc858599c2c55a454fa352..bc6f702a54d3096148e61d1c9c2a6aeb7d9a5a9a 100644
--- a/tests/src/test_image.cpp
+++ b/tests/src/test_image.cpp
@@ -25,8 +25,8 @@
 #include <cstddef>
 #include <memory>
 #include "catch/catch.hpp"
-#include "phx/image.hpp"
-#include "phx/opengl_image_buffer_data.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
+#include "phx/resources/types/image.hpp"
 #include "test_utilities/opengl_buffer_data_comparison.hpp"
 
 SCENARIO("We can create an empty image.", "[phx][phx::Image]") {
diff --git a/tests/src/test_input_system.cpp b/tests/src/test_input_system.cpp
index dc2a11142349b5407fabd1d807c19498bd2bdfc4..7ac9cbc35cd66467dc29edadfd45c862b2613313 100644
--- a/tests/src/test_input_system.cpp
+++ b/tests/src/test_input_system.cpp
@@ -24,8 +24,8 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/engine.hpp"
-#include "phx/input_system.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/input/input_system.hpp"
 
 #include "trompeloeil.hpp"
 
diff --git a/tests/src/test_light.cpp b/tests/src/test_light.cpp
index c8a4fadf4720565da8848fc67326acb5c2f4ac43..6506ab2cdfa096a474b6518518795482aaac7a8d 100644
--- a/tests/src/test_light.cpp
+++ b/tests/src/test_light.cpp
@@ -24,8 +24,8 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/entity.hpp"
-#include "phx/light.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/rendering/components/light.hpp"
 
 #include "glm/glm.hpp"
 
diff --git a/tests/src/test_material.cpp b/tests/src/test_material.cpp
index 8b97af72d9295751bb61760364f1b597a98da095..34f0552562a062641b060f9d222b54c5058fecda 100644
--- a/tests/src/test_material.cpp
+++ b/tests/src/test_material.cpp
@@ -25,9 +25,9 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/component.hpp"
-#include "phx/logger.hpp"
-#include "phx/material_handle.hpp"
+#include "phx/core/component.hpp"
+#include "phx/core/logger.hpp"
+#include "phx/rendering/components/material_handle.hpp"
 
 #include "test_utilities/glm_vec3.hpp"
 
diff --git a/tests/src/test_mesh.cpp b/tests/src/test_mesh.cpp
index cf5ef60e92b77e9623d7ed006613a375c57df68a..4aea83e47a4b54b1c74a48b5011f2665dfc04f2b 100644
--- a/tests/src/test_mesh.cpp
+++ b/tests/src/test_mesh.cpp
@@ -26,7 +26,7 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/mesh.hpp"
+#include "phx/resources/types/mesh.hpp"
 
 #define TEST_ATTRIBUTE(ATTRIBUTE_NAME, ATTRIBUTE_TYPE)           \
   WHEN("We query the " #ATTRIBUTE_NAME) {                        \
diff --git a/tests/src/test_model.cpp b/tests/src/test_model.cpp
index 2d6b927ea4056039e4f4414a15b1c55671abfc9a..7098d7ca52f01c7dec6872d7a815ff80aee976b3 100644
--- a/tests/src/test_model.cpp
+++ b/tests/src/test_model.cpp
@@ -24,10 +24,10 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/assimp_model_loader.hpp"
-#include "phx/model.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
+#include "phx/resources/loaders/assimp_model_loader.hpp"
+#include "phx/resources/types/model.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 SCENARIO("A Model can be loaded that contains multiple meshes",
          "[phx][phx::Model]") {
diff --git a/tests/src/test_opengl_buffer_data.cpp b/tests/src/test_opengl_buffer_data.cpp
index da2958389ac079df5b9681364847f15d9dd1c7e4..f52f171b53db4afbe9e3513c54d48a46c585479a 100644
--- a/tests/src/test_opengl_buffer_data.cpp
+++ b/tests/src/test_opengl_buffer_data.cpp
@@ -25,7 +25,7 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/opengl_image_buffer_data.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
 #include "phx/resources_path.hpp"
 #include "test_utilities/opengl_buffer_data_comparison.hpp"
 
diff --git a/tests/src/test_opengl_buffer_data_comparison.cpp b/tests/src/test_opengl_buffer_data_comparison.cpp
index 4696e60ead7f64e50b95edd713cfac8013fbfcda..067c0153e08441e38d5c6027f5922cf900d6024d 100644
--- a/tests/src/test_opengl_buffer_data_comparison.cpp
+++ b/tests/src/test_opengl_buffer_data_comparison.cpp
@@ -23,7 +23,7 @@
 #include <iostream>
 #include "catch/catch.hpp"
 
-#include "phx/opengl_image_buffer_data.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
 #include "test_utilities/opengl_buffer_data_comparison.hpp"
 
 SCENARIO("OpenGLImageBufferData can be compared", "[tests][test::utils]") {
diff --git a/tests/src/test_openvr_controller_system.cpp b/tests/src/test_openvr_controller_system.cpp
index 22d3acf01a91f4d15c9ceb424d311930288b2fe2..0b2987fe9e6899e0ed6e1434137415228c94a054 100644
--- a/tests/src/test_openvr_controller_system.cpp
+++ b/tests/src/test_openvr_controller_system.cpp
@@ -32,14 +32,14 @@ SUPPRESS_WARNINGS_END
 
 #include "trompeloeil.hpp"
 
-#include "phx/display_system_openvr.hpp"
-#include "phx/entity.hpp"
-#include "phx/material_handle.hpp"
-#include "phx/mesh_handle.hpp"
-#include "phx/openvr_controller_behavior.hpp"
-#include "phx/openvr_controller_system.hpp"
-#include "phx/rendering_system.hpp"
-#include "phx/scene.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/input/openvr_controller_behavior.hpp"
+#include "phx/input/openvr_controller_system.hpp"
+#include "phx/rendering/components/material_handle.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/rendering_system.hpp"
 
 #include "mocks/opengl_mock.hpp"
 #include "mocks/openvr_mock.hpp"
diff --git a/tests/src/test_orderable_list.cpp b/tests/src/test_orderable_list.cpp
index 093264bad578bcdabf0cc7d1aabfd0cd30395173..ee67a84a3dc235e3c8d5efaefc917466faf4225a 100644
--- a/tests/src/test_orderable_list.cpp
+++ b/tests/src/test_orderable_list.cpp
@@ -26,7 +26,7 @@
 #include "catch/catch.hpp"
 #include "trompeloeil.hpp"
 
-#include "phx/orderable_list.hpp"
+#include "phx/utility/orderable_list.hpp"
 
 using trompeloeil::_;
 using trompeloeil::ne;
diff --git a/tests/src/test_projection.cpp b/tests/src/test_projection.cpp
index d38f27056061dc6686fc944cb5ad3b236cda0d2b..a6927186a093e2c9ab5c128e37f4c9414a5b2825 100644
--- a/tests/src/test_projection.cpp
+++ b/tests/src/test_projection.cpp
@@ -28,8 +28,8 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/entity.hpp"
-#include "phx/projection.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/rendering/components/projection.hpp"
 
 #include "test_utilities/glm_mat4.hpp"
 
diff --git a/tests/src/test_rendering_system.cpp b/tests/src/test_rendering_system.cpp
index cd925e872804a65417c00adf684761e9f8741404..c3ce5f433bbd9b08337e27864765e7fea58f9f86 100644
--- a/tests/src/test_rendering_system.cpp
+++ b/tests/src/test_rendering_system.cpp
@@ -24,14 +24,14 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/display_system_window.hpp"
-#include "phx/engine.hpp"
-#include "phx/entity.hpp"
-#include "phx/geometry_pass.hpp"
-#include "phx/mesh.hpp"
-#include "phx/rendering_system.hpp"
-#include "phx/scene.hpp"
-#include "phx/transform.hpp"
+#include "phx/display/display_system_window.hpp"
+#include "phx/core/engine.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/rendering/render_passes/geometry_pass.hpp"
+#include "phx/rendering/rendering_system.hpp"
+#include "phx/resources/types/mesh.hpp"
 
 #include "trompeloeil.hpp"
 
diff --git a/tests/src/test_resource_manager.cpp b/tests/src/test_resource_manager.cpp
index a217d071cdc5914ca202e1003c672f2ccf9fad15..b3fcdb79350f94107d0212a81315c0a6ecb24001 100644
--- a/tests/src/test_resource_manager.cpp
+++ b/tests/src/test_resource_manager.cpp
@@ -34,13 +34,13 @@ SUPPRESS_WARNINGS_END
 
 #include "assimp/postprocess.h"  // Post processing flags
 
-#include "phx/image.hpp"
-#include "phx/image_loader.hpp"
-#include "phx/model.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
-#include "phx/shader_source.hpp"
+#include "phx/resources/loaders/image_loader.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/resources/types/model.hpp"
+#include "phx/resources/types/shader_source.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 SCENARIO(
     "Check the declaration phase of a resource life cycle. A resource needs to "
diff --git a/tests/src/test_resource_pointer.cpp b/tests/src/test_resource_pointer.cpp
index 2a36059fe6f23f5219374eda299c312701ec5785..8a0c9e361ed76e402de7b9552845b73351e21f3c 100644
--- a/tests/src/test_resource_pointer.cpp
+++ b/tests/src/test_resource_pointer.cpp
@@ -22,10 +22,10 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/image.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_pointer.hpp"
-#include "phx/resource_utils.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_pointer.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 SCENARIO(
     "The resource pointer makes the underlying resource available through the "
diff --git a/tests/src/test_resource_utils.cpp b/tests/src/test_resource_utils.cpp
index 154d5a12cc885ff931db52c3ab788a464ba5b838..d2b0a9bb82b807735219581322600fec1e1c6e26 100644
--- a/tests/src/test_resource_utils.cpp
+++ b/tests/src/test_resource_utils.cpp
@@ -24,9 +24,9 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/image.hpp"
-#include "phx/resource_declaration.hpp"
-#include "phx/resource_utils.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/resources/resource_declaration.hpp"
+#include "phx/resources/resource_utils.hpp"
 #include "phx/resources_path.hpp"
 
 SCENARIO("Resource utils can extract file extensions.",
diff --git a/tests/src/test_scene.cpp b/tests/src/test_scene.cpp
index e52dd2fe8a58e7393ec827280dd92517ff0d4f62..96aeef23214eb650fc77bbd25b1df9f321363f37 100644
--- a/tests/src/test_scene.cpp
+++ b/tests/src/test_scene.cpp
@@ -22,9 +22,9 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/entity.hpp"
-#include "phx/runtime_component.hpp"
-#include "phx/scene.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/core/scene.hpp"
 
 SCENARIO("A scene keeps track of entities.", "[phx][phx::Scene]") {
   GIVEN("An empty scene") {
diff --git a/tests/src/test_scene_loader.cpp b/tests/src/test_scene_loader.cpp
index c62ab489b7bd3b926b0bbe978972a3bc37c3a0bf..1e69d84c692c57071f22d50d69d4df46bfe838d0 100644
--- a/tests/src/test_scene_loader.cpp
+++ b/tests/src/test_scene_loader.cpp
@@ -24,11 +24,11 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/entity.hpp"
-#include "phx/mesh_handle.hpp"
-#include "phx/scene.hpp"
-#include "phx/scene_loader.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/rendering/components/mesh_handle.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/resources/loaders/scene_loader.hpp"
 
 SCENARIO("The scene loader can load a model", "[phx][phx::SceneLoader]") {
   GIVEN("An empty scene") {
diff --git a/tests/src/test_shader.cpp b/tests/src/test_shader.cpp
index 1e7bdfffe16aaa32f55e419ad277d734c0ecd5ae..b5e510e51b93f8b670b21f2b5b2aca7d10410746 100644
--- a/tests/src/test_shader.cpp
+++ b/tests/src/test_shader.cpp
@@ -34,9 +34,9 @@ SUPPRESS_WARNINGS_END
 
 #include "catch/catch.hpp"
 
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
-#include "phx/shader_program.hpp"
+#include "phx/rendering/backend/shader_program.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 #include "mocks/opengl_mock.hpp"
 
diff --git a/tests/src/test_tracking_system.cpp b/tests/src/test_tracking_system.cpp
index 2b1ae42eabbcb6ac2a7d0e187008c9ab14253dcc..44124c76815edf17b45827619708cb257c698973 100644
--- a/tests/src/test_tracking_system.cpp
+++ b/tests/src/test_tracking_system.cpp
@@ -34,13 +34,13 @@ SUPPRESS_WARNINGS_BEGIN
 SUPPRESS_WARNINGS_END
 #include "mocks/sdl_mock.hpp"
 
-#include "phx/display_system_openvr.hpp"
-#include "phx/entity.hpp"
-#include "phx/projection.hpp"
-#include "phx/runtime_component.hpp"
-#include "phx/scene.hpp"
-#include "phx/tracking_system_openvr.hpp"
-#include "phx/transform.hpp"
+#include "phx/core/entity.hpp"
+#include "phx/core/runtime_component.hpp"
+#include "phx/core/scene.hpp"
+#include "phx/display/display_system_openvr.hpp"
+#include "phx/rendering/components/projection.hpp"
+#include "phx/rendering/components/transform.hpp"
+#include "phx/tracking/tracking_system_openvr.hpp"
 
 #include "test_utilities/glm_mat4.hpp"
 
diff --git a/tests/test_utilities/dummy_material_generator.cpp b/tests/test_utilities/dummy_material_generator.cpp
index 9c3140db47361bbd25dc3a989e89a18fb4ad2923..4dcf8e004a7d1bd854f0f734247ece4c1d28d155 100644
--- a/tests/test_utilities/dummy_material_generator.cpp
+++ b/tests/test_utilities/dummy_material_generator.cpp
@@ -26,7 +26,7 @@
 #include <utility>
 #include <vector>
 
-#include "phx/material.hpp"
+#include "phx/resources/types/material.hpp"
 
 namespace phx {
 
diff --git a/tests/test_utilities/dummy_material_generator.hpp b/tests/test_utilities/dummy_material_generator.hpp
index 263622f25d244864e218594204c50a1ca310118d..41c449a466ce608d850c1f03d82a321cfb823c3e 100644
--- a/tests/test_utilities/dummy_material_generator.hpp
+++ b/tests/test_utilities/dummy_material_generator.hpp
@@ -33,7 +33,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec3.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/resource_load_strategy.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
 
 namespace phx {
 class Material;
diff --git a/tests/test_utilities/dummy_mesh_generator.cpp b/tests/test_utilities/dummy_mesh_generator.cpp
index ba4e062170120ba0aae1f3a36de3d55a06c7e760..5c6a4f4e925777dcbefaf58f2e0ce2b6396074c8 100644
--- a/tests/test_utilities/dummy_mesh_generator.cpp
+++ b/tests/test_utilities/dummy_mesh_generator.cpp
@@ -26,7 +26,7 @@
 #include <utility>
 #include <vector>
 
-#include "phx/mesh.hpp"
+#include "phx/resources/types/mesh.hpp"
 
 namespace phx {
 
diff --git a/tests/test_utilities/dummy_mesh_generator.hpp b/tests/test_utilities/dummy_mesh_generator.hpp
index c24b1a0ad52cb993429977203645276d9e54195d..5febf12190e0be8621034ef4bdb7cefeaab617a7 100644
--- a/tests/test_utilities/dummy_mesh_generator.hpp
+++ b/tests/test_utilities/dummy_mesh_generator.hpp
@@ -33,7 +33,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec3.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/resource_load_strategy.hpp"
+#include "phx/resources/resource_load_strategy.hpp"
 
 namespace phx {
 class Mesh;
diff --git a/tests/test_utilities/glm_mat4.hpp b/tests/test_utilities/glm_mat4.hpp
index c34f9e9eeb2d7daa75e5f752120f0018932145a0..33fb19347cc3a09624d3e2c9d9695a8d600e4c32 100644
--- a/tests/test_utilities/glm_mat4.hpp
+++ b/tests/test_utilities/glm_mat4.hpp
@@ -36,7 +36,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/stream_helpers.hpp"
+#include "phx/utility/stream_helpers.hpp"
 
 #include "approx.hpp"
 
diff --git a/tests/test_utilities/glm_quat.hpp b/tests/test_utilities/glm_quat.hpp
index a6dd611a663dcbe7283f067ef91430d313b15473..2d36d62045d2b75cfaeb154d0bd98b2256185802 100644
--- a/tests/test_utilities/glm_quat.hpp
+++ b/tests/test_utilities/glm_quat.hpp
@@ -36,7 +36,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/stream_helpers.hpp"
+#include "phx/utility/stream_helpers.hpp"
 
 #include "approx.hpp"
 
diff --git a/tests/test_utilities/glm_vec3.hpp b/tests/test_utilities/glm_vec3.hpp
index d9a1de832d5e38f673b4111d7f2f2dbb3be0b57a..d33ee272edb8b709e0fdb86e2d6f3f443d5a7f8f 100644
--- a/tests/test_utilities/glm_vec3.hpp
+++ b/tests/test_utilities/glm_vec3.hpp
@@ -36,7 +36,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
 
-#include "phx/stream_helpers.hpp"
+#include "phx/utility/stream_helpers.hpp"
 
 #include "approx.hpp"
 
diff --git a/tests/test_utilities/opengl_buffer_data_comparison.cpp b/tests/test_utilities/opengl_buffer_data_comparison.cpp
index 2f64ad4cd8e28b8473b2c297d38dc45fb9019ae6..c9e952a6114b1c7f1bfc49d6af50536cdd779ef8 100644
--- a/tests/test_utilities/opengl_buffer_data_comparison.cpp
+++ b/tests/test_utilities/opengl_buffer_data_comparison.cpp
@@ -24,7 +24,7 @@
 
 #include <string>
 
-#include "phx/image.hpp"
+#include "phx/resources/types/image.hpp"
 
 namespace test_utilities {
 
diff --git a/tests/test_utilities/opengl_buffer_data_comparison.hpp b/tests/test_utilities/opengl_buffer_data_comparison.hpp
index 2ffdc3f3140f72ece5936003d80aec7bbc65f087..5f86bb1bb79253277cd60ca51606447cfd5997d4 100644
--- a/tests/test_utilities/opengl_buffer_data_comparison.hpp
+++ b/tests/test_utilities/opengl_buffer_data_comparison.hpp
@@ -37,9 +37,9 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/image.hpp"
-#include "phx/opengl_image_buffer_data.hpp"
-#include "phx/resource_manager.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/resources/resource_manager.hpp"
 
 #include "test_utilities/reference_image_path.hpp"
 
diff --git a/tests/test_utilities/tests/src/test_log_capture.cpp b/tests/test_utilities/tests/src/test_log_capture.cpp
index 4202c170e8e0d4346c08e55234c3f3b66abbd1c8..93e9ff79adf421b47b588eee67ecba890a51d908 100644
--- a/tests/test_utilities/tests/src/test_log_capture.cpp
+++ b/tests/test_utilities/tests/src/test_log_capture.cpp
@@ -25,7 +25,7 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/logger.hpp"
+#include "phx/core/logger.hpp"
 
 #include "test_utilities/log_capture.hpp"
 
diff --git a/tests/test_utilities/tests/src/test_reference_images.cpp b/tests/test_utilities/tests/src/test_reference_images.cpp
index f2005d2cc4c4a91fd7f15de4cdee2bd3cfd5510a..1db9888215186a58ffc86c98484c278c3d7af563 100644
--- a/tests/test_utilities/tests/src/test_reference_images.cpp
+++ b/tests/test_utilities/tests/src/test_reference_images.cpp
@@ -28,9 +28,9 @@
 
 #include "catch/catch.hpp"
 
-#include "phx/opengl_image_buffer_data.hpp"
-#include "phx/resource_manager.hpp"
-#include "phx/resource_utils.hpp"
+#include "phx/rendering/backend/opengl_image_buffer_data.hpp"
+#include "phx/resources/resource_manager.hpp"
+#include "phx/resources/resource_utils.hpp"
 
 #include "test_utilities/opengl_buffer_data_comparison.hpp"
 #include "test_utilities/reference_image_path.hpp"