diff --git a/SwiftShader.sln b/SwiftShader.sln
index 9b4895f..8c5b30d 100644
--- a/SwiftShader.sln
+++ b/SwiftShader.sln
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
-VisualStudioVersion = 15.0.27004.2002
+VisualStudioVersion = 15.0.27130.2036
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LLVM", "LLVM", "{B408B98A-E888-4ECF-81E0-7A37A6854B17}"
 EndProject
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 4d1f44a..9e03912 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -27,8 +27,10 @@
 #include "VkPhysicalDevice.hpp"
 #include "VkQueue.hpp"
 #include "VkSemaphore.hpp"
+
 #include <cstring>
 #include <string>
+#include <algorithm>
 
 extern "C"
 {
@@ -1688,7 +1690,7 @@
 		UNIMPLEMENTED();
 	}
 
-	// The only flag that can be set here is VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT 
+	// The only flag that can be set here is VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT
 	// According to the Vulkan spec, 4.3.1. Queue Family Properties:
 	// "VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT specifies that the device queue is a
 	//  protected-capable queue. If the protected memory feature is not enabled,
diff --git a/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_Windows.cpp b/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_Windows.cpp
index 4f2a734..947861c 100644
--- a/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_Windows.cpp
+++ b/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_Windows.cpp
@@ -4,7 +4,7 @@
 
  @Title        OpenGL ES 2.0 HelloAPI Tutorial
 
- @Version      
+ @Version
 
  @Copyright    Copyright (c) Imagination Technologies Limited.
 
@@ -90,7 +90,7 @@
  @Return		bool			true if no EGL error was detected
  @Description	Tests for an EGL error and prints it
 ******************************************************************************/
-bool TestEGLError(HWND hWnd, char* pszLocation)
+bool TestEGLError(HWND hWnd, const char* pszLocation)
 {
 	/*
 		eglGetError returns the last error that has happened using egl,
@@ -110,6 +110,36 @@
 }
 
 /*!****************************************************************************
+ @Function		Cleanup
+ @Input			eglDisplay		Handle to the EGL display
+ @Input			hWnd			Handle to the window
+ @Input			hDC				Handle to the device context
+ @Return		int				result code to OS
+ @Description	Clean up before program termination on error or normal exit
+******************************************************************************/
+int Cleanup(EGLDisplay eglDisplay, HWND hWnd, HDC hDC)
+{
+	/*
+		eglTerminate takes care of destroying any context or surface created
+		with this display, so we don't need to call eglDestroySurface or
+		eglDestroyContext here.
+	*/
+
+	eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+	eglTerminate(eglDisplay);
+
+	/*
+		Destroy the eglWindow.
+		This is platform specific and delegated to a separate function.
+	*/
+
+	// Release the device context
+	if (hDC) ReleaseDC(hWnd, hDC);
+
+	return 0;
+}
+
+/*!****************************************************************************
  @Function		WinMain
  @Input			hInstance		Application instance from OS
  @Input			hPrevInstance	Always NULL
@@ -141,12 +171,12 @@
 	};
 
 	// Fragment and vertex shaders code
-	char* pszFragShader = "\
+	const char* pszFragShader = "\
 		void main (void)\
 		{\
 			gl_FragColor = vec4(1.0, 1.0, 0.66 ,1.0);\
 		}";
-	char* pszVertShader = "\
+	const char* pszVertShader = "\
 		attribute highp vec4	myVertex;\
 		uniform mediump mat4	myPMVMatrix;\
 		void main(void)\
@@ -192,7 +222,7 @@
 	if (!hDC)
 	{
 		MessageBox(0, _T("Failed to create the device context"), _T("Error"), MB_OK|MB_ICONEXCLAMATION);
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	/*
@@ -220,7 +250,7 @@
 	if (!eglInitialize(eglDisplay, &iMajorVersion, &iMinorVersion))
 	{
 		MessageBox(0, _T("eglInitialize() failed."), _T("Error"), MB_OK|MB_ICONEXCLAMATION);
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	/*
@@ -232,7 +262,7 @@
 	eglBindAPI(EGL_OPENGL_ES_API);
 	if (!TestEGLError(hWnd, "eglBindAPI"))
 	{
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	/*
@@ -264,7 +294,7 @@
 	if (!eglChooseConfig(eglDisplay, pi32ConfigAttribs, &eglConfig, 1, &iConfigs) || (iConfigs != 1))
 	{
 		MessageBox(0, _T("eglChooseConfig() failed."), _T("Error"), MB_OK|MB_ICONEXCLAMATION);
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	/*
@@ -286,7 +316,7 @@
 
 	if (!TestEGLError(hWnd, "eglCreateWindowSurface"))
 	{
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	/*
@@ -299,7 +329,7 @@
 	eglContext = eglCreateContext(eglDisplay, eglConfig, NULL, ai32ContextAttribs);
 	if (!TestEGLError(hWnd, "eglCreateContext"))
 	{
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	/*
@@ -315,7 +345,7 @@
 	eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
 	if (!TestEGLError(hWnd, "eglMakeCurrent"))
 	{
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	/*
@@ -355,7 +385,7 @@
 		MessageBox(hWnd, i32InfoLogLength ? pszInfoLog : _T(""), _T("Failed to compile fragment shader"), MB_OK|MB_ICONEXCLAMATION);
 		delete[] pszInfoLog;
 
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	// Loads the vertex shader in the same way
@@ -375,7 +405,7 @@
 
 		delete[] pszInfoLog;
 
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	// Create the shader program
@@ -404,7 +434,7 @@
 		MessageBox(hWnd, i32InfoLogLength ? pszInfoLog : _T(""), _T("Failed to link program"), MB_OK|MB_ICONEXCLAMATION);
 
 		delete[] pszInfoLog;
-		goto cleanup;
+		return Cleanup(eglDisplay, hWnd, hDC);
 	}
 
 	// Actually use the created program
@@ -419,7 +449,7 @@
 
 	// We're going to draw a triangle to the screen so create a vertex buffer object for our triangle
 	GLuint	ui32Vbo; // Vertex buffer object handle
-	
+
 	// Interleaved vertex data
 	GLfloat afVertices[] = {	-0.4f,-0.4f,0.0f, // Position
 								0.4f ,-0.4f,0.0f,
@@ -482,7 +512,7 @@
 		eglSwapBuffers(eglDisplay, eglSurface);
 		if (!TestEGLError(hWnd, "eglSwapBuffers"))
 		{
-			goto cleanup;
+			return Cleanup(eglDisplay, hWnd, hDC);
 		}
 
 		// Managing the window messages
@@ -503,24 +533,8 @@
 
 	/*
 		Step 10 - Terminate OpenGL ES and destroy the window (if present).
-		eglTerminate takes care of destroying any context or surface created
-		with this display, so we don't need to call eglDestroySurface or
-		eglDestroyContext here.
 	*/
-cleanup:
-	eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-	eglTerminate(eglDisplay);
-
-	/*
-		Step 11 - Destroy the eglWindow.
-		Again, this is platform specific and delegated to a separate function.
-	*/
-
-	// Release the device context
-	if (hDC) ReleaseDC(hWnd, hDC);
-
-	// Destroy the eglWindow
-	return 0;
+	return Cleanup(eglDisplay, hWnd, hDC);
 }
 
 /******************************************************************************
