diff --git a/source/States/GameState/IPreparable.h b/source/BasicAbstractions/IPreparable.h
similarity index 100%
rename from source/States/GameState/IPreparable.h
rename to source/BasicAbstractions/IPreparable.h
diff --git a/source/States/GameState/ContextManager.cpp b/source/States/GameState/Context/ContextManager.cpp
similarity index 89%
rename from source/States/GameState/ContextManager.cpp
rename to source/States/GameState/Context/ContextManager.cpp
index cbd7f8ae71c8f6db3d7f0252ff481f9f5e90ef8e..28ba4eb7967c0f7ca134b6822b750bca011532d3 100644
--- a/source/States/GameState/ContextManager.cpp
+++ b/source/States/GameState/Context/ContextManager.cpp
@@ -1,4 +1,4 @@
-#include <States/GameState/ContextManager.h>
+#include <States/GameState/Context/ContextManager.h>
 
 void ContextManager::reset(GameContext&& context) {
     while (!m_contexts.empty())
diff --git a/source/States/GameState/ContextManager.h b/source/States/GameState/Context/ContextManager.h
similarity index 86%
rename from source/States/GameState/ContextManager.h
rename to source/States/GameState/Context/ContextManager.h
index 8c0adc92e6207c911f2947e3d494a98eff186db9..9c84bc30e733ecb8eed251223d9a133dde5f42dc 100644
--- a/source/States/GameState/ContextManager.h
+++ b/source/States/GameState/Context/ContextManager.h
@@ -1,5 +1,5 @@
 #pragma once
-#include <States/GameState/GameContext.h>
+#include <States/GameState/Context/GameContext.h>
 #include <stack>
 
 class ContextManager {
diff --git a/source/States/GameState/GameContext.cpp b/source/States/GameState/Context/GameContext.cpp
similarity index 88%
rename from source/States/GameState/GameContext.cpp
rename to source/States/GameState/Context/GameContext.cpp
index e6aac1a8270c5a7f37fd4577631eca9f39be4e46..db0c2c19496dd053150d111d50a8638e335bb32b 100644
--- a/source/States/GameState/GameContext.cpp
+++ b/source/States/GameState/Context/GameContext.cpp
@@ -1,4 +1,4 @@
-#include <States/GameState/GameContext.h>
+#include <States/GameState/Context/GameContext.h>
 
 GameContext GameContext::clone() const {
     GameContext new_game_context;
diff --git a/source/States/GameState/GameContext.h b/source/States/GameState/Context/GameContext.h
similarity index 59%
rename from source/States/GameState/GameContext.h
rename to source/States/GameState/Context/GameContext.h
index 8c295d29f0a6d20fac47438c2245321f94dcccf6..81b3bdcc9c0e77154640bea2b3982b7655218652 100644
--- a/source/States/GameState/GameContext.h
+++ b/source/States/GameState/Context/GameContext.h
@@ -1,7 +1,7 @@
 #pragma once
-#include <States/GameState/Entities/Pacman.h>
-#include <States/GameState/Entities/StaticEntities.h>
-#include <States/GameState/Entities/DynamicEntities.h>
+#include <States/GameState/Entities/Pacman/Pacman.h>
+#include <States/GameState/Entities/StaticEntities/StaticEntities.h>
+#include <States/GameState/Entities/DynamicEntities/DynamicEntities.h>
 
 struct GameContext {
     [[nodiscard]] GameContext clone() const;
diff --git a/source/States/GameState/Entities/DynamicEntities.cpp b/source/States/GameState/Entities/DynamicEntities/DynamicEntities.cpp
similarity index 92%
rename from source/States/GameState/Entities/DynamicEntities.cpp
rename to source/States/GameState/Entities/DynamicEntities/DynamicEntities.cpp
index 8c4cd833543f8332b7f5cd37da3821a0dceed302..c2f0ffacdc57bb25146bc54338adc83be0f248c3 100644
--- a/source/States/GameState/Entities/DynamicEntities.cpp
+++ b/source/States/GameState/Entities/DynamicEntities/DynamicEntities.cpp
@@ -1,5 +1,5 @@
 #include <Configuration.h>
-#include <States/GameState/Entities/DynamicEntities.h>
+#include <States/GameState/Entities/DynamicEntities/DynamicEntities.h>
 
 Enemy::Enemy() : m_rectangle({config::GAME_ENEMY_SIZE, config::GAME_ENEMY_SIZE}) {
     m_rectangle.setFillColor(config::GAME_ENEMY_COLOR);
diff --git a/source/States/GameState/Entities/DynamicEntities.h b/source/States/GameState/Entities/DynamicEntities/DynamicEntities.h
similarity index 100%
rename from source/States/GameState/Entities/DynamicEntities.h
rename to source/States/GameState/Entities/DynamicEntities/DynamicEntities.h
diff --git a/source/States/GameState/Entities/IEntity.h b/source/States/GameState/Entities/IEntity.h
index c8e40f142bd9c18846187d034c7f4fea968d3668..51bc31bd5c593b1e845d1a1354c5b7638debd0b8 100644
--- a/source/States/GameState/Entities/IEntity.h
+++ b/source/States/GameState/Entities/IEntity.h
@@ -1,6 +1,6 @@
 #pragma once
-#include <States/GameState/IPreparable.h>
-#include <States/GameState/Maze/Room.h>
+#include <BasicAbstractions/IPreparable.h>
+#include <States/GameState/Maze/Room/Room.h>
 
 class IEntity : public IPreparable {
 public:
diff --git a/source/States/GameState/Entities/Pacman.cpp b/source/States/GameState/Entities/Pacman/Pacman.cpp
similarity index 90%
rename from source/States/GameState/Entities/Pacman.cpp
rename to source/States/GameState/Entities/Pacman/Pacman.cpp
index e6f04f8540b71dcfa83a9f49c4d41e165a892a8a..b7b96e092dfaf141af39cb2ab9c3d688f0959c85 100644
--- a/source/States/GameState/Entities/Pacman.cpp
+++ b/source/States/GameState/Entities/Pacman/Pacman.cpp
@@ -1,5 +1,5 @@
 #include <Configuration.h>
-#include <States/GameState/Entities/Pacman.h>
+#include <States/GameState/Entities/Pacman/Pacman.h>
 
 Pacman::Pacman() : m_circle{ config::GAME_PACMAN_SIZE } {
     m_circle.setFillColor(config::GAME_COLOR_PACMAN);
diff --git a/source/States/GameState/Entities/Pacman.h b/source/States/GameState/Entities/Pacman/Pacman.h
similarity index 100%
rename from source/States/GameState/Entities/Pacman.h
rename to source/States/GameState/Entities/Pacman/Pacman.h
diff --git a/source/States/GameState/Entities/StaticEntities.cpp b/source/States/GameState/Entities/StaticEntities/StaticEntities.cpp
similarity index 87%
rename from source/States/GameState/Entities/StaticEntities.cpp
rename to source/States/GameState/Entities/StaticEntities/StaticEntities.cpp
index 5e22de1e146586d2422cda66434eb43649f3ffe8..9d915e699a56d97703940b928da6b98aa0d3401e 100644
--- a/source/States/GameState/Entities/StaticEntities.cpp
+++ b/source/States/GameState/Entities/StaticEntities/StaticEntities.cpp
@@ -1,4 +1,4 @@
-#include <States/GameState/Entities/StaticEntities.h>
+#include <States/GameState/Entities/StaticEntities/StaticEntities.h>
 #include <Configuration.h>
 
 Food::Food() : m_circle(config::GAME_FOOD_SIZE, 6) {
diff --git a/source/States/GameState/Entities/StaticEntities.h b/source/States/GameState/Entities/StaticEntities/StaticEntities.h
similarity index 100%
rename from source/States/GameState/Entities/StaticEntities.h
rename to source/States/GameState/Entities/StaticEntities/StaticEntities.h
diff --git a/source/States/GameState/GameState.h b/source/States/GameState/GameState.h
index 21be1482a34ead893701fc4508b8addbb93df8f6..63d49f61089f2b9aa0f2536ed24eba3993e99630 100644
--- a/source/States/GameState/GameState.h
+++ b/source/States/GameState/GameState.h
@@ -2,7 +2,7 @@
 #include <BasicAbstractions/IState.h>
 #include <BasicAbstractions/IWindowKeeper.h>
 #include <States/GameState/Maze/Maze.h>
-#include <States/GameState/ContextManager.h>
+#include <States/GameState/Context/ContextManager.h>
 
 class GameState : public IState, public IWindowKeeper {
 public:
diff --git a/source/States/GameState/Maze/Maze.h b/source/States/GameState/Maze/Maze.h
index db98cae87ff9576c7315769d5529670721ef6e14..ee9937995aed94fbd70417758bebd560808eb98e 100644
--- a/source/States/GameState/Maze/Maze.h
+++ b/source/States/GameState/Maze/Maze.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <States/GameState/Maze/Room.h>
+#include <States/GameState/Maze/Room/Room.h>
 
 #include <vector>
 
diff --git a/source/States/GameState/Maze/Room.cpp b/source/States/GameState/Maze/Room/Room.cpp
similarity index 94%
rename from source/States/GameState/Maze/Room.cpp
rename to source/States/GameState/Maze/Room/Room.cpp
index aa62c090e2d207e80317aaa66f264aa5b5fe254a..ea3b4a74a7d91342b732736aff93ac48b5f69c0a 100644
--- a/source/States/GameState/Maze/Room.cpp
+++ b/source/States/GameState/Maze/Room/Room.cpp
@@ -1,4 +1,4 @@
-#include <States/GameState/Maze/Room.h>
+#include <States/GameState/Maze/Room/Room.h>
 
 Room::Room(float size) : m_rectangle({size, size}) {
     m_rectangle.setOrigin(size/2, size/2);
diff --git a/source/States/GameState/Maze/Room.h b/source/States/GameState/Maze/Room/Room.h
similarity index 89%
rename from source/States/GameState/Maze/Room.h
rename to source/States/GameState/Maze/Room/Room.h
index 87f10b0d93857f627339dacd91f163d131b19000..2825cb2862a3d54798612544813c4c18e9fc33e0 100644
--- a/source/States/GameState/Maze/Room.h
+++ b/source/States/GameState/Maze/Room/Room.h
@@ -1,7 +1,7 @@
 #pragma once
 
-#include <States/GameState/IPreparable.h>
-#include <States/GameState/Maze/RoomSide.h>
+#include <BasicAbstractions/IPreparable.h>
+#include <States/GameState/Maze/Room/RoomSide/RoomSide.h>
 
 #include <array>
 
diff --git a/source/States/GameState/Maze/RoomSide.cpp b/source/States/GameState/Maze/Room/RoomSide/RoomSide.cpp
similarity index 100%
rename from source/States/GameState/Maze/RoomSide.cpp
rename to source/States/GameState/Maze/Room/RoomSide/RoomSide.cpp
diff --git a/source/States/GameState/Maze/RoomSide.h b/source/States/GameState/Maze/Room/RoomSide/RoomSide.h
similarity index 94%
rename from source/States/GameState/Maze/RoomSide.h
rename to source/States/GameState/Maze/Room/RoomSide/RoomSide.h
index f730f21775f3f39ef49589010a6301216e856185..411fc35af015d66f7b82ed142904bc5ed464aa3c 100644
--- a/source/States/GameState/Maze/RoomSide.h
+++ b/source/States/GameState/Maze/Room/RoomSide/RoomSide.h
@@ -1,5 +1,5 @@
 #pragma once
-#include <States/GameState/IPreparable.h>
+#include <BasicAbstractions/IPreparable.h>
 
 class IEntity;
 class Room;