diff --git a/RayTracer/camera/Hit.h b/RayTracer/camera/Hit.h
index 5ac61ef783db2f5c6877a3fe11e51e873c3f599f..43572f93410f6e48ef4dfc31b43942f656405189 100644
--- a/RayTracer/camera/Hit.h
+++ b/RayTracer/camera/Hit.h
@@ -1,7 +1,6 @@
 #pragma once
 
 #include "../material/Material.h"
-#include "../tools/Vec3.h"
 #include "Ray.h"
 
 namespace cam {
diff --git a/RayTracer/material/DiffuseMaterial.cpp b/RayTracer/material/DiffuseMaterial.cpp
index 03eeac4d0b982d864340de653025ef6bc2880b64..64eb1a022ea970558503fe7db2cef129086c0c91 100644
--- a/RayTracer/material/DiffuseMaterial.cpp
+++ b/RayTracer/material/DiffuseMaterial.cpp
@@ -1,6 +1,5 @@
 #include "DiffuseMaterial.h"
 
-#include "../tools/Vec3.h"
 #include "texture/Constant.h"
 
 namespace material {
diff --git a/RayTracer/material/DiffuseMaterial.h b/RayTracer/material/DiffuseMaterial.h
index 670c0cf0d27581a3f0597532306451a1e700ce38..c4d2cace963bcdda48bb79a98330f5f616691552 100644
--- a/RayTracer/material/DiffuseMaterial.h
+++ b/RayTracer/material/DiffuseMaterial.h
@@ -1,8 +1,6 @@
 #pragma once
 
-#include "../sampling/Sampler.h"
 #include "Material.h"
-#include "texture/Constant.h"
 
 namespace material {
 class DiffuseMaterial : public Material {
diff --git a/RayTracer/material/Material.h b/RayTracer/material/Material.h
index 97599ed919cbbde92cfd35fd0d40925064718b12..18c11e0b47e81870c7982bb30f39778cb408ab26 100644
--- a/RayTracer/material/Material.h
+++ b/RayTracer/material/Material.h
@@ -3,7 +3,6 @@
 #include <random>
 
 #include "../sampling/Sampler.h"
-#include "../tools/Vec3.h"
 
 namespace material {
 
diff --git a/RayTracer/material/texture/Constant.h b/RayTracer/material/texture/Constant.h
index 59c3b32a830ad0c68fe8fb2d708e75f966041d0e..d177e3c01d65e4dec23f17e79161f0dac388a86f 100644
--- a/RayTracer/material/texture/Constant.h
+++ b/RayTracer/material/texture/Constant.h
@@ -1,7 +1,6 @@
 #pragma once
 
 #include "../../sampling/Sampler.h"
-#include "../../tools/Vec3.h"
 
 namespace material {
 class Constant : public util::Sampler {
diff --git a/RayTracer/sampling/Image.h b/RayTracer/sampling/Image.h
index 1e99f192a92eb50ca7904422f0c9f63ad2650a6d..c23b1f12fa27a08aa42a7bc587c87b9007cb53f5 100644
--- a/RayTracer/sampling/Image.h
+++ b/RayTracer/sampling/Image.h
@@ -3,7 +3,6 @@
 #include <vector>
 
 #include "../camera/CamObs.h"
-#include "../tools/Vec3.h"
 #include "Sampler.h"
 
 namespace util {
diff --git a/RayTracer/sampling/Scene.h b/RayTracer/sampling/Scene.h
index ef8b2dc2d98563e41c45090babccbce3f3bb8339..faa93b9d906361613cbf6df769ece168b93428bc 100644
--- a/RayTracer/sampling/Scene.h
+++ b/RayTracer/sampling/Scene.h
@@ -1,9 +1,7 @@
 #pragma once
 
 #include "../camera/CamObs.h"
-#include "../camera/Ray.h"
-#include "../shape/Group.h"
-#include "../tools/Vec3.h"
+#include "../shape/Shape.h"
 #include "Sampler.h"
 
 class Scene : public util::Sampler {
diff --git a/RayTracer/shape/Group.h b/RayTracer/shape/Group.h
index 589e3f83956d452e97f1e12c9d815ba791d74124..89c5877774352c93ddcb3a113352e45cf8bed189 100644
--- a/RayTracer/shape/Group.h
+++ b/RayTracer/shape/Group.h
@@ -2,8 +2,6 @@
 
 #include <vector>
 
-#include "../camera/Hit.h"
-#include "../camera/Ray.h"
 #include "../tools/Mat4.h"
 #include "../tools/Transformation.h"
 #include "Shape.h"
diff --git a/RayTracer/shape/Shape.h b/RayTracer/shape/Shape.h
index d59e2e6200a0c000eec9a3800f1c5487072e7db9..ff92bbf107d795f4f344403fdb8c88dc4009eb4d 100644
--- a/RayTracer/shape/Shape.h
+++ b/RayTracer/shape/Shape.h
@@ -2,6 +2,7 @@
 
 #include "../camera/Hit.h"
 #include "../camera/Ray.h"
+#include "../tools/AxisAlignedBoundingBox.h"
 
 namespace shapes {
 class Shape {
diff --git a/RayTracer/tools/Mat4.cpp b/RayTracer/tools/Mat4.cpp
index 5c8f09ed5860f2adcda56e348c0f257d44aa801d..b5ea74e7220b9f038d7a0bb30373c4439e012dd2 100644
--- a/RayTracer/tools/Mat4.cpp
+++ b/RayTracer/tools/Mat4.cpp
@@ -1,5 +1,9 @@
 #include "Mat4.h"
 
+#define _USE_MATH_DEFINES
+
+#include <math.h>
+
 namespace util {
 // Constructor
 Mat4::Mat4(std::array<float, 16> arr) : arr(arr){};
diff --git a/RayTracer/tools/Mat4.h b/RayTracer/tools/Mat4.h
index 7fe13857b1e441dc39f55b73112566ab8f613b68..0d9c05ba64cfb409afdd7ff443ccb89d7523cfd7 100644
--- a/RayTracer/tools/Mat4.h
+++ b/RayTracer/tools/Mat4.h
@@ -1,9 +1,5 @@
 #pragma once
 
-#define _USE_MATH_DEFINES
-
-#include <math.h>
-
 #include <array>
 
 #include "Vec3.h"
diff --git a/RayTracer/tools/Threadpool.cpp b/RayTracer/tools/Threadpool.cpp
index c06b7c246a57ab959c63801aa594b5695dda67c6..1f017e1f9151855e7d30863cc91c2ed014527e64 100644
--- a/RayTracer/tools/Threadpool.cpp
+++ b/RayTracer/tools/Threadpool.cpp
@@ -1,5 +1,7 @@
 #include "Threadpool.h"
 
+#include <thread>
+
 namespace util {
 
 Threadpool::Threadpool(size_t n) : alive(true) {
diff --git a/RayTracer/tools/Threadpool.h b/RayTracer/tools/Threadpool.h
index d0fdafa8b8620d89b6f2f41bb6361e38bf2b254c..71afde19788fb0e0453dfacab53ddbec7e25755d 100644
--- a/RayTracer/tools/Threadpool.h
+++ b/RayTracer/tools/Threadpool.h
@@ -2,10 +2,8 @@
 
 #include <condition_variable>
 #include <functional>
-#include <iostream>
 #include <mutex>
 #include <queue>
-#include <thread>
 
 namespace util {
 
diff --git a/RayTracer/tools/Vec3.h b/RayTracer/tools/Vec3.h
index 4653f12d9778407685de96f842261db63c8b240a..f469b3de683dec5368fcbb88b0a6332e80c73d80 100644
--- a/RayTracer/tools/Vec3.h
+++ b/RayTracer/tools/Vec3.h
@@ -1,7 +1,6 @@
 #pragma once
 
 #include <array>
-#include <cassert>
 #include <iostream>
 
 namespace util {