diff --git a/RayTracer/shape/Background.cpp b/RayTracer/shape/Background.cpp
index febaa1461be4a5c09ce05ca25f2de44c4e8628dd..415b1631f85972bd9754669efbbbbbe41a351386 100644
--- a/RayTracer/shape/Background.cpp
+++ b/RayTracer/shape/Background.cpp
@@ -9,15 +9,15 @@ Background::Background(const std::shared_ptr<material::Material>& material)
 // TODO TEXELS
 std::optional<cam::Hit> Background::intersect(const cam::Ray& r) const {
 	return std::optional<cam::Hit>({r(std::numeric_limits<float>::infinity()),
-	                                util::Vec3(0, 0, 0),
-	                                {0, 0},
+	                                util::Vec3({}),
+	                                {},
 	                                std::numeric_limits<float>::infinity(),
 	                                material});
 }
 // Not used
 std::pair<float, float> Background::texture_coordinates(
     const util::Vec3& pos) const {
-	return std::pair<float, float>({0, 0});
+	return std::pair<float, float>({});
 }
 
 util::AxisAlignedBoundingBox Background::bounds() const {
diff --git a/RayTracer/shape/CirclePlane.cpp b/RayTracer/shape/CirclePlane.cpp
index 45cb4d3b2d06f9cc8664fdc9a8c52fded824dd78..45e56ce0ae30e4f995cc75d2809e900e04b6269e 100644
--- a/RayTracer/shape/CirclePlane.cpp
+++ b/RayTracer/shape/CirclePlane.cpp
@@ -37,7 +37,7 @@ std::optional<cam::Hit> CirclePlane::intersect(const cam::Ray& r) const {
 std::pair<float, float> CirclePlane::texture_coordinates(
     const util::Vec3& pos) const {
 	return std::pair<float, float>(
-	    {pos.x() / radius + 0.5, pos.z() / radius + 0.5});
+	    {pos.x() / radius + 0.5f, pos.z() / radius + 0.5f});
 }
 
 util::AxisAlignedBoundingBox CirclePlane::bounds() const {
diff --git a/RayTracer/shape/Group.cpp b/RayTracer/shape/Group.cpp
index 144296b2ba8751ea764818ecee60cd07ffce1884..f918fce1dda0aafea4624bb40fc13ae470d58d17 100644
--- a/RayTracer/shape/Group.cpp
+++ b/RayTracer/shape/Group.cpp
@@ -48,7 +48,7 @@ std::optional<cam::Hit> Group::intersect(const cam::Ray& r) const {
 // Not used
 std::pair<float, float> Group::texture_coordinates(
     const util::Vec3& pos) const {
-	return std::pair<float, float>({0, 0});
+	return std::pair<float, float>({});
 }
 util::AxisAlignedBoundingBox Group::bounds() const {
 	return boundingVolume;
diff --git a/RayTracer/shape/RectanglePlane.cpp b/RayTracer/shape/RectanglePlane.cpp
index faf890f6d16d610f9f67848bd641749aafa9cd3e..e66ad104cb0396b54d3758e06964dc36c1ea9dea 100644
--- a/RayTracer/shape/RectanglePlane.cpp
+++ b/RayTracer/shape/RectanglePlane.cpp
@@ -40,7 +40,7 @@ std::optional<cam::Hit> RectanglePlane::intersect(const cam::Ray& r) const {
 std::pair<float, float> RectanglePlane::texture_coordinates(
     const util::Vec3& pos) const {
 	return std::pair<float, float>(
-	    {pos.x() / width + 0.5, pos.z() / depth + 0.5});
+	    {pos.x() / width + 0.5f, pos.z() / depth + 0.5f});
 }
 util::AxisAlignedBoundingBox RectanglePlane::bounds() const {
 	return util::AxisAlignedBoundingBox(util::Vec3(-width / 2, 0, -depth / 2),
diff --git a/RayTracer/shape/ShapeSingleGroup.cpp b/RayTracer/shape/ShapeSingleGroup.cpp
index 6cfb13e2c36b11f3ba18cd514369a060c414d2dc..35bff28b92b8c6925307fae2c4c823e9be501477 100644
--- a/RayTracer/shape/ShapeSingleGroup.cpp
+++ b/RayTracer/shape/ShapeSingleGroup.cpp
@@ -35,7 +35,7 @@ std::optional<cam::Hit> ShapeSingleGroup::intersect(const cam::Ray& r) const {
 }
 std::pair<float, float> ShapeSingleGroup::texture_coordinates(
     const util::Vec3& pos) const {
-	return std::pair<float, float>({0, 0});
+	return std::pair<float, float>({});
 }
 util::AxisAlignedBoundingBox ShapeSingleGroup::bounds() const {
 	return boundingVolume;
diff --git a/RayTracer/shape/Sphere.cpp b/RayTracer/shape/Sphere.cpp
index d9c90e3e5078998c1037a98bf28580494f44291e..248a2e354fa5dbd90d9d68fe4f01f5dd779f42e3 100644
--- a/RayTracer/shape/Sphere.cpp
+++ b/RayTracer/shape/Sphere.cpp
@@ -49,7 +49,8 @@ std::pair<float, float> Sphere::texture_coordinates(
     const util::Vec3& pos) const {
 	float theta = std::acos(pos.y() / radius);
 	float phi = M_PI + std::atan2(pos.x(), pos.z());
-	return std::pair<float, float>({phi / (2 * M_PI), theta / M_PI});
+	return std::pair<float, float>(
+	    {(float)(phi / (2 * M_PI)), (float)(theta / M_PI)});
 }
 util::AxisAlignedBoundingBox Sphere::bounds() const {
 	return util::AxisAlignedBoundingBox(util::Vec3(-radius),
diff --git a/RayTracer/shape/Triangle.cpp b/RayTracer/shape/Triangle.cpp
index 3e3346f28c4bc2c311d04196ce1e662b09a33c7f..d6d5b490fbbf24efd77910843ddb1c44f4c4c1a6 100644
--- a/RayTracer/shape/Triangle.cpp
+++ b/RayTracer/shape/Triangle.cpp
@@ -51,7 +51,7 @@ std::optional<cam::Hit> Triangle::intersect(const cam::Ray& r) const {
 // TODO
 std::pair<float, float> Triangle::texture_coordinates(
     const util::Vec3& pos) const {
-	return std::pair<float, float>({0, 0});
+	return std::pair<float, float>({});
 }
 util::AxisAlignedBoundingBox Triangle::bounds() const {
 	// std::cout << "In tri bounds" << std::endl;
diff --git a/RayTracer/shape/TriangleMesh.cpp b/RayTracer/shape/TriangleMesh.cpp
index 72ea8d016daf84a003c77d05ce7271731bfd0621..b2166b5fb40183b400f728e75939e4b0c25fed19 100644
--- a/RayTracer/shape/TriangleMesh.cpp
+++ b/RayTracer/shape/TriangleMesh.cpp
@@ -31,25 +31,25 @@ std::optional<cam::Hit> TriangleMesh::intersect(size_t i,
                                                 const cam::Ray& r) const {
 	if (!hierarchy[i].bb.intersects(r)) return std::nullopt;
 	std::array<cam::Hit, 3> hits = {
-	    cam::Hit(util::Vec3(0), util::Vec3(0), {0.0, 0.0},
+	    cam::Hit(util::Vec3({}), util::Vec3({}), {},
 	             std::numeric_limits<float>::infinity(), nullptr),
-	    cam::Hit(util::Vec3(0), util::Vec3(0), {0.0, 0.0},
+	    cam::Hit(util::Vec3({}), util::Vec3({}), {},
 	             std::numeric_limits<float>::infinity(), nullptr),
-	    cam::Hit(util::Vec3(0), util::Vec3(0), {0.0, 0.0},
+	    cam::Hit(util::Vec3({}), util::Vec3({}), {},
 	             std::numeric_limits<float>::infinity(), nullptr)};
 	// Check left
 	size_t left_i = hierarchy[i].left;
 	std::optional<cam::Hit> left_hit = std::nullopt;
 	if (left_i != -1) left_hit = intersect(left_i, r);
-	hits[0] = left_hit.value_or(
-	    cam::Hit(util::Vec3(0), util::Vec3(0), {0.0, 0.0},
-	             std::numeric_limits<float>::infinity(), nullptr));
+	hits[0] = left_hit.value_or(cam::Hit(util::Vec3({}), util::Vec3({}), {},
+	                                     std::numeric_limits<float>::infinity(),
+	                                     nullptr));
 	// Check right
 	size_t right_i = hierarchy[i].right;
 	std::optional<cam::Hit> right_hit = std::nullopt;
 	if (right_i != -1) right_hit = intersect(right_i, r);
 	hits[1] = right_hit.value_or(
-	    cam::Hit(util::Vec3(0), util::Vec3(0), {0.0, 0.0},
+	    cam::Hit(util::Vec3({}), util::Vec3({}), {},
 	             std::numeric_limits<float>::infinity(), nullptr));
 
 	std::optional<cam::Hit> temp = std::nullopt;
@@ -69,9 +69,9 @@ std::optional<cam::Hit> TriangleMesh::intersect(size_t i,
 			}
 		}
 	}
-	hits[2] = mid_hit.value_or(
-	    cam::Hit(util::Vec3(0), util::Vec3(0), {0.0, 0.0},
-	             std::numeric_limits<float>::infinity(), nullptr));
+	hits[2] = mid_hit.value_or(cam::Hit(util::Vec3({}), util::Vec3({}), {},
+	                                    std::numeric_limits<float>::infinity(),
+	                                    nullptr));
 	std::sort(hits.begin(), hits.end(),
 	          [](cam::Hit a, cam::Hit b) { return a.scalar() < b.scalar(); });
 	if (hits[0].material == nullptr) return std::nullopt;
@@ -81,14 +81,14 @@ std::optional<cam::Hit> TriangleMesh::intersect(size_t i,
 // TODO
 std::pair<float, float> TriangleMesh::texture_coordinates(
     const util::Vec3& pos) const {
-	return std::pair<float, float>({0.0, 0.0});
+	return std::pair<float, float>({});
 }
 util::AxisAlignedBoundingBox TriangleMesh::bounds() const {
 	return hierarchy[0].bb;
 }
 // TODO
 util::SurfacePoint TriangleMesh::sampleLight() const {
-	return util::SurfacePoint(util::Vec3(0), 0, {0.0, 0.0}, material);
+	return util::SurfacePoint(util::Vec3({}), 0, {}, material);
 }
 // TODO
 util::Vec3 TriangleMesh::calculateLightEmission(const util::SurfacePoint& p,