diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ae078a428a8e5e640ed8dc7bcc2f4e58e159c6b..5011f8a562af37098edf8127bc01183bcfa166b8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -87,5 +87,5 @@ add_subdirectory(projects)
 
 if (NOT WIN32)
 	# add doxygen as target if installed
-	include(${vkcv_config}/ext/Doxygen.cmake)
+	#include(${vkcv_config}/ext/Doxygen.cmake)
 endif()
\ No newline at end of file
diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp
index 9f4ebb665ac0ee10bd228a880c12ef3345a5e60c..cd3676f45bf0891de97ab88ff74cdd980f6920da 100644
--- a/include/vkcv/Core.hpp
+++ b/include/vkcv/Core.hpp
@@ -223,9 +223,9 @@ namespace vkcv
 			Multisampling   multisampling = Multisampling::None);
 
         [[nodiscard]]
-        const uint32_t getImageWidth(ImageHandle imageHandle);
+        uint32_t getImageWidth(ImageHandle imageHandle);
         [[nodiscard]]
-        const uint32_t getImageHeight(ImageHandle imageHandle);
+        uint32_t getImageHeight(ImageHandle imageHandle);
 
         /** TODO:
          *   @param setDescriptions
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index 43095fbb89c40ae452eae25ebda34d3cbaca433e..a69f9bc755f9cfa3a75d0a51dd242876aedabf79 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -29,9 +29,6 @@ int main(int argc, const char** argv) {
 	);
 
 	const auto& context = core.getContext();
-	const vk::Instance& instance = context.getInstance();
-	const vk::PhysicalDevice& physicalDevice = context.getPhysicalDevice();
-	const vk::Device& device = context.getDevice();
 
 	auto triangleIndexBuffer = core.createBuffer<uint16_t>(vkcv::BufferType::INDEX, 3, vkcv::BufferMemoryType::DEVICE_LOCAL);
 	uint16_t indices[3] = { 0, 1, 2 };
diff --git a/projects/particle_simulation/src/Particle.cpp b/projects/particle_simulation/src/Particle.cpp
index 39c98fc125bd9bc8afedc9685b87f36a960a9c9a..b80d063d382c9ae1cb63887388cce065b8289b63 100644
--- a/projects/particle_simulation/src/Particle.cpp
+++ b/projects/particle_simulation/src/Particle.cpp
@@ -3,9 +3,10 @@
 
 Particle::Particle(glm::vec3 position, glm::vec3 velocity, float lifeTime)
 : m_position(position),
-m_velocity(velocity),
-m_lifeTime(lifeTime),
-m_reset_velocity(velocity)
+  m_lifeTime(lifeTime),
+  m_velocity(velocity),
+  m_mass(1.0f),
+  m_reset_velocity(velocity)
 {}
 
 const glm::vec3& Particle::getPosition()const{
diff --git a/projects/particle_simulation/src/Particle.hpp b/projects/particle_simulation/src/Particle.hpp
index 75ad0a71251734bd55101dcad5224d0255fac596..73e7cbf517709ee03274cfd199081ade3f756545 100644
--- a/projects/particle_simulation/src/Particle.hpp
+++ b/projects/particle_simulation/src/Particle.hpp
@@ -28,7 +28,7 @@ private:
     glm::vec3 m_position;
     float m_lifeTime;
     glm::vec3 m_velocity;
-    float mass = 1.f;
+    float m_mass;
     glm::vec3 m_reset_velocity;
-    float padding_3 = 0.f;
+    float padding_3;
 };
diff --git a/projects/voxelization/src/Voxelization.cpp b/projects/voxelization/src/Voxelization.cpp
index 1f1888d5c0ed30effc4c93c02efddb370ce8ad21..bbf161ddeb0899a1ce61279b4c476fb19cb906d7 100644
--- a/projects/voxelization/src/Voxelization.cpp
+++ b/projects/voxelization/src/Voxelization.cpp
@@ -259,7 +259,7 @@ void Voxelization::voxelizeMeshes(
 
 	// voxelization
 	std::vector<vkcv::DrawcallInfo> drawcalls;
-	for (int i = 0; i < meshes.size(); i++) {
+	for (size_t i = 0; i < meshes.size(); i++) {
 		drawcalls.push_back(vkcv::DrawcallInfo(
 			meshes[i],
 			{ 
diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp
index 68018ef80f801b797eca30078ca6fadf897da4ad..ca9951490e57b4b6afa3bbee986a55342a40582e 100644
--- a/projects/voxelization/src/main.cpp
+++ b/projects/voxelization/src/main.cpp
@@ -111,7 +111,7 @@ int main(int argc, const char** argv) {
 	std::vector<std::vector<vkcv::VertexBufferBinding>> vertexBufferBindings;
 	std::vector<vkcv::asset::VertexAttribute> vAttributes;
 
-	for (int i = 0; i < scene.vertexGroups.size(); i++) {
+	for (size_t i = 0; i < scene.vertexGroups.size(); i++) {
 
 		vBuffers.push_back(scene.vertexGroups[i].vertexBuffer.data);
 		iBuffers.push_back(scene.vertexGroups[i].indexBuffer.data);
@@ -452,14 +452,14 @@ int main(int argc, const char** argv) {
 
 	// prepare meshes
 	std::vector<vkcv::Mesh> meshes;
-	for (int i = 0; i < scene.vertexGroups.size(); i++) {
+	for (size_t i = 0; i < scene.vertexGroups.size(); i++) {
 		vkcv::Mesh mesh(vertexBufferBindings[i], indexBuffers[i].getVulkanHandle(), scene.vertexGroups[i].numIndices);
 		meshes.push_back(mesh);
 	}
 
 	std::vector<vkcv::DrawcallInfo> drawcalls;
 	std::vector<vkcv::DrawcallInfo> prepassDrawcalls;
-	for (int i = 0; i < meshes.size(); i++) {
+	for (size_t i = 0; i < meshes.size(); i++) {
 
 		drawcalls.push_back(vkcv::DrawcallInfo(meshes[i], { 
 			vkcv::DescriptorSetUsage(0, core.getDescriptorSet(forwardShadingDescriptorSet).vulkanHandle),
diff --git a/src/vkcv/CommandStreamManager.cpp b/src/vkcv/CommandStreamManager.cpp
index 5a5b359b912d9cef36e0b03379d7f0f6f0951381..52b73213dbc5837f6be4a2aa25c28615dccf5969 100644
--- a/src/vkcv/CommandStreamManager.cpp
+++ b/src/vkcv/CommandStreamManager.cpp
@@ -32,11 +32,10 @@ namespace vkcv {
 
 		// find unused stream
 		int unusedStreamIndex = -1;
-		for (int i = 0; i < m_commandStreams.size(); i++) {
+		for (size_t i = 0; i < m_commandStreams.size(); i++) {
 			if (m_commandStreams[i].cmdBuffer) {
 				// still in use
-			}
-			else {
+			} else {
 				unusedStreamIndex = i;
 				break;
 			}
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index 3af359e7fa302e01e5c42664911ab90c9e9247cc..a66c1e6220261679a85241fff42de08a57428d4c 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -71,7 +71,6 @@ namespace vkcv
 
         const auto& queueManager = context.getQueueManager();
         
-		const int						graphicQueueFamilyIndex	= queueManager.getGraphicsQueues()[0].familyIndex;
 		const std::unordered_set<int>	queueFamilySet			= generateQueueFamilyIndexSet(queueManager);
 		const auto						commandResources		= createCommandResources(context.getDevice(), queueFamilySet);
 		const auto						defaultSyncResources	= createSyncResources(context.getDevice());
@@ -163,9 +162,9 @@ namespace vkcv
 					nullptr,
 					&imageIndex, {}
 			);
-		} catch (vk::OutOfDateKHRError e) {
+		} catch (const vk::OutOfDateKHRError& e) {
 			result = vk::Result::eErrorOutOfDateKHR;
-		} catch (vk::DeviceLostError e) {
+		} catch (const vk::DeviceLostError& e) {
 			result = vk::Result::eErrorDeviceLost;
 		}
 		
@@ -268,7 +267,7 @@ namespace vkcv
 		const vk::Rect2D renderArea(vk::Offset2D(0, 0), vk::Extent2D(width, height));
 
 		std::vector<vk::ImageView> attachmentsViews;
-		for (const ImageHandle handle : renderTargets) {
+		for (const ImageHandle& handle : renderTargets) {
 			vk::ImageView targetHandle;
 			const auto cmdBuffer = m_CommandStreamManager->getStreamCommandBuffer(cmdStreamHandle);
 
@@ -305,8 +304,6 @@ namespace vkcv
 
         vk::Rect2D dynamicScissor({0, 0}, {width, height});
 
-		auto &bufferManager = m_BufferManager;
-
 		SubmitInfo submitInfo;
 		submitInfo.queueType = QueueType::Graphics;
 		submitInfo.signalSemaphores = { m_SyncResources.renderFinished };
@@ -338,13 +335,12 @@ namespace vkcv
             cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {});
 
             const PipelineConfig &pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle);
-            if(pipeConfig.m_UseDynamicViewport)
-            {
+            if (pipeConfig.m_UseDynamicViewport) {
                 cmdBuffer.setViewport(0, 1, &dynamicViewport);
                 cmdBuffer.setScissor(0, 1, &dynamicScissor);
             }
 
-            for (int i = 0; i < drawcalls.size(); i++) {
+            for (size_t i = 0; i < drawcalls.size(); i++) {
                 recordDrawcall(drawcalls[i], cmdBuffer, pipelineLayout, pushConstants, i);
             }
 
@@ -417,9 +413,9 @@ namespace vkcv
 		
 		try {
 			result = queueManager.getPresentQueue().handle.presentKHR(presentInfo);
-		} catch (vk::OutOfDateKHRError e) {
+		} catch (const vk::OutOfDateKHRError& e) {
 			result = vk::Result::eErrorOutOfDateKHR;
-		} catch (vk::DeviceLostError e) {
+		} catch (const vk::DeviceLostError& e) {
 			result = vk::Result::eErrorDeviceLost;
 		}
 		
@@ -463,8 +459,6 @@ namespace vkcv
 	}
 
 	CommandStreamHandle Core::createCommandStream(QueueType queueType) {
-
-		const vk::Device&       device  = m_Context.getDevice();
 		const vkcv::Queue       queue   = getQueueForSubmit(queueType, m_Context.getQueueManager());
 		const vk::CommandPool   cmdPool = chooseCmdPool(queue, m_CommandResources);
 
@@ -522,12 +516,12 @@ namespace vkcv
 			multisampling);
 	}
 
-	const uint32_t Core::getImageWidth(ImageHandle imageHandle)
+	uint32_t Core::getImageWidth(ImageHandle imageHandle)
 	{
 		return m_ImageManager->getImageWidth(imageHandle);
 	}
 
-	const uint32_t Core::getImageHeight(ImageHandle imageHandle)
+	uint32_t Core::getImageHeight(ImageHandle imageHandle)
 	{
 		return m_ImageManager->getImageHeight(imageHandle);
 	}
diff --git a/src/vkcv/DrawcallRecording.cpp b/src/vkcv/DrawcallRecording.cpp
index cae0b3226e5e6bc424123d5bfa21b98a73cb3951..32ed00e98f7ef72f0c391f61924444c26844869b 100644
--- a/src/vkcv/DrawcallRecording.cpp
+++ b/src/vkcv/DrawcallRecording.cpp
@@ -23,8 +23,6 @@ namespace vkcv {
                 nullptr);
         }
 
-        const size_t drawcallPushConstantOffset = drawcallIndex * pushConstants.getSizePerDrawcall();
-
         if (pushConstants.getSizePerDrawcall() > 0) {
             cmdBuffer.pushConstants(
                 pipelineLayout,
diff --git a/src/vkcv/ImageManager.cpp b/src/vkcv/ImageManager.cpp
index 9ef2d613f3c86b984bee0abaf354f58155a9bba2..ba96cf8ff1be1988dbaf3f9cb01bdaa96c84ac0b 100644
--- a/src/vkcv/ImageManager.cpp
+++ b/src/vkcv/ImageManager.cpp
@@ -67,7 +67,8 @@ namespace vkcv {
 		for (uint64_t id = 0; id < m_images.size(); id++) {
 			destroyImageById(id);
 		}
-		for (const auto swapchainImage : m_swapchainImages) {
+		
+		for (const auto& swapchainImage : m_swapchainImages) {
 			for (const auto view : swapchainImage.m_viewPerMip) {
 				m_core->getContext().getDevice().destroy(view);
 			}
@@ -196,7 +197,7 @@ namespace vkcv {
 		}
 		
 		std::vector<vk::ImageView> views;
-		for (int mip = 0; mip < mipCount; mip++) {
+		for (uint32_t mip = 0; mip < mipCount; mip++) {
 			const vk::ImageViewCreateInfo imageViewCreateInfo(
 				{},
 				image,
@@ -504,9 +505,6 @@ namespace vkcv {
 	}
 
 	void ImageManager::generateImageMipChainImmediate(const ImageHandle& handle) {
-
-		const auto& device = m_core->getContext().getDevice();
-
 		SubmitInfo submitInfo;
 		submitInfo.queueType = QueueType::Graphics;
 
@@ -655,7 +653,6 @@ namespace vkcv {
 
 	uint32_t ImageManager::getImageMipCount(const ImageHandle& handle) const {
 		const uint64_t id = handle.getId();
-		const bool isSwapchainFormat = handle.isSwapchainImage();
 
 		if (handle.isSwapchainImage()) {
 			return 1;
@@ -685,7 +682,7 @@ namespace vkcv {
 
 		assert(images.size() == views.size());
 		m_swapchainImages.clear();
-		for (int i = 0; i < images.size(); i++) {
+		for (size_t i = 0; i < images.size(); i++) {
 			m_swapchainImages.push_back(Image(images[i], nullptr, { views[i] }, width, height, 1, format, 1));
 		}
 	}
diff --git a/src/vkcv/QueueManager.cpp b/src/vkcv/QueueManager.cpp
index df6c74cccf6c4652adc6a4c78802f282ea6ae293..b4891c6be387b817b87f059f4155f5708d4f4710 100644
--- a/src/vkcv/QueueManager.cpp
+++ b/src/vkcv/QueueManager.cpp
@@ -51,7 +51,7 @@ namespace vkcv {
         }
         //resort flags with heighest priority before allocating the queues
         std::vector<vk::QueueFlagBits> newFlags;
-        for(int i = 0; i < prios.size(); i++) {
+        for(size_t i = 0; i < prios.size(); i++) {
             auto minElem = std::min_element(prios.begin(), prios.end());
             int index = minElem - prios.begin();
             newFlags.push_back(queueFlags[index]);
@@ -79,7 +79,7 @@ namespace vkcv {
             switch (qFlag) {
                 case vk::QueueFlagBits::eGraphics:
                     found = false;
-                    for (int i = 0; i < queueFamilyStatus.size() && !found; i++) {
+                    for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) {
                         if (queueFamilyStatus[i][0] > 0) {
                             queuePairsGraphics.push_back(std::pair(i, initialQueueFamilyStatus[i][0] - queueFamilyStatus[i][0]));
                             queueFamilyStatus[i][0]--;
@@ -89,7 +89,7 @@ namespace vkcv {
                         }
                     }
                     if (!found) {
-                        for (int i = 0; i < queueFamilyStatus.size() && !found; i++) {
+                        for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) {
                             if (initialQueueFamilyStatus[i][0] > 0) {
                                 queuePairsGraphics.push_back(std::pair(i, 0));
                                 found = true;
@@ -101,7 +101,7 @@ namespace vkcv {
                     break;
                 case vk::QueueFlagBits::eCompute:
                     found = false;
-                    for (int i = 0; i < queueFamilyStatus.size() && !found; i++) {
+                    for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) {
                         if (queueFamilyStatus[i][1] > 0) {
                             queuePairsCompute.push_back(std::pair(i, initialQueueFamilyStatus[i][1] - queueFamilyStatus[i][1]));
                             queueFamilyStatus[i][0]--;
@@ -111,7 +111,7 @@ namespace vkcv {
                         }
                     }
                     if (!found) {
-                        for (int i = 0; i < queueFamilyStatus.size() && !found; i++) {
+                        for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) {
                             if (initialQueueFamilyStatus[i][1] > 0) {
                                 queuePairsCompute.push_back(std::pair(i, 0));
                                 found = true;
@@ -123,7 +123,7 @@ namespace vkcv {
                     break;
                 case vk::QueueFlagBits::eTransfer:
                     found = false;
-                    for (int i = 0; i < queueFamilyStatus.size() && !found; i++) {
+                    for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) {
                         if (queueFamilyStatus[i][2] > 0) {
                             queuePairsTransfer.push_back(std::pair(i, initialQueueFamilyStatus[i][2] - queueFamilyStatus[i][2]));
                             queueFamilyStatus[i][0]--;
@@ -133,7 +133,7 @@ namespace vkcv {
                         }
                     }
                     if (!found) {
-                        for (int i = 0; i < queueFamilyStatus.size() && !found; i++) {
+                        for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) {
                             if (initialQueueFamilyStatus[i][2] > 0) {
                                 queuePairsTransfer.push_back(std::pair(i, 0));
                                 found = true;
@@ -149,7 +149,7 @@ namespace vkcv {
         }
 
         // create all requested queues
-        for (int i = 0; i < qFamilyProperties.size(); i++) {
+        for (size_t i = 0; i < qFamilyProperties.size(); i++) {
             uint32_t create = std::abs(initialQueueFamilyStatus[i][0] - queueFamilyStatus[i][0]);
             if (create > 0) {
                 vk::DeviceQueueCreateInfo qCreateInfo(
diff --git a/src/vkcv/Swapchain.cpp b/src/vkcv/Swapchain.cpp
index 94e7301d66bfcc513434ef6d22520d1b95f98161..d0aa26db9c661ea40caf06349a72cc9188e791a9 100644
--- a/src/vkcv/Swapchain.cpp
+++ b/src/vkcv/Swapchain.cpp
@@ -100,18 +100,14 @@ namespace vkcv
      * @return available Format
      */
     vk::SurfaceFormatKHR chooseSurfaceFormat(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface) {
-        uint32_t formatCount;
-        physicalDevice.getSurfaceFormatsKHR(surface, &formatCount, nullptr);
-        std::vector<vk::SurfaceFormatKHR> availableFormats(formatCount);
-        if (physicalDevice.getSurfaceFormatsKHR(surface, &formatCount, &availableFormats[0]) != vk::Result::eSuccess) {
-            throw std::runtime_error("Failed to get surface formats");
-        }
+        std::vector<vk::SurfaceFormatKHR> availableFormats = physicalDevice.getSurfaceFormatsKHR(surface);
 
         for (const auto& availableFormat : availableFormats) {
             if (availableFormat.format == vk::Format::eB8G8R8A8Unorm  && availableFormat.colorSpace == vk::ColorSpaceKHR::eSrgbNonlinear) {
                 return availableFormat;
             }
         }
+        
         return availableFormats[0];
     }
 
@@ -122,12 +118,7 @@ namespace vkcv
      * @return available PresentationMode
      */
     vk::PresentModeKHR choosePresentMode(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface) {
-        uint32_t modeCount;
-        physicalDevice.getSurfacePresentModesKHR( surface, &modeCount, nullptr );
-        std::vector<vk::PresentModeKHR> availablePresentModes(modeCount);
-        if (physicalDevice.getSurfacePresentModesKHR(surface, &modeCount, &availablePresentModes[0]) != vk::Result::eSuccess) {
-            throw std::runtime_error("Failed to get presentation modes");
-        }
+        std::vector<vk::PresentModeKHR> availablePresentModes = physicalDevice.getSurfacePresentModesKHR(surface);
 
         for (const auto& availablePresentMode : availablePresentModes) {
             if (availablePresentMode == vk::PresentModeKHR::eMailbox) {
@@ -145,12 +136,11 @@ namespace vkcv
      * @return available ImageCount
      */
     uint32_t chooseImageCount(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface) {
-        vk::SurfaceCapabilitiesKHR surfaceCapabilities;
-        if(physicalDevice.getSurfaceCapabilitiesKHR(surface, &surfaceCapabilities) != vk::Result::eSuccess){
-            throw std::runtime_error("cannot get surface capabilities. There is an issue with the surface.");
-        }
-
-        uint32_t imageCount = surfaceCapabilities.minImageCount + 1;    // minImageCount should always be at least 2; set to 3 for triple buffering
+        vk::SurfaceCapabilitiesKHR surfaceCapabilities = physicalDevice.getSurfaceCapabilitiesKHR(surface);
+	
+		// minImageCount should always be at least 2; set to 3 for triple buffering
+        uint32_t imageCount = surfaceCapabilities.minImageCount + 1;
+        
         // check if requested image count is supported
         if (surfaceCapabilities.maxImageCount > 0 && imageCount > surfaceCapabilities.maxImageCount) {
             imageCount = surfaceCapabilities.maxImageCount;
@@ -215,8 +205,9 @@ namespace vkcv
     }
     
     void Swapchain::updateSwapchain(const Context &context, const Window &window) {
-    	if (!m_RecreationRequired.exchange(false))
-    		return;
+    	if (!m_RecreationRequired.exchange(false)) {
+			return;
+		}
     	
 		vk::SwapchainKHR oldSwapchain = m_Swapchain;
 		vk::Extent2D extent2D = chooseExtent(context.getPhysicalDevice(), m_Surface.handle, window);
diff --git a/src/vkcv/Window.cpp b/src/vkcv/Window.cpp
index ea72582d67d5350e5fbf3f3c0fa2aae2ba407b0e..025cb388c6880cc8132b454c799d39e2b530ceb3 100644
--- a/src/vkcv/Window.cpp
+++ b/src/vkcv/Window.cpp
@@ -150,11 +150,15 @@ namespace vkcv {
     }
 
     void Window::onGamepadEvent(int gamepadIndex) {
-        int activeWindowIndex = std::find_if(s_Windows.begin(),
-                                             s_Windows.end(),
-                                             [](GLFWwindow* window){return glfwGetWindowAttrib(window, GLFW_FOCUSED);})
-                                - s_Windows.begin();
-        activeWindowIndex *= (activeWindowIndex < s_Windows.size());    // fixes index getting out of bounds (e.g. if there is no focused window)
+        size_t activeWindowIndex = std::find_if(
+        		s_Windows.begin(),
+        		s_Windows.end(),
+        		[](GLFWwindow* window){return glfwGetWindowAttrib(window, GLFW_FOCUSED);}
+		) - s_Windows.begin();
+	
+		// fixes index getting out of bounds (e.g. if there is no focused window)
+        activeWindowIndex *= (activeWindowIndex < s_Windows.size());
+        
         auto window = static_cast<Window *>(glfwGetWindowUserPointer(s_Windows[activeWindowIndex]));
 
         if (window != nullptr) {