diff --git a/CMakeLists.txt b/CMakeLists.txt
index 738cf9189f3a1ffd100296736e645648703e3891..a9602bc6a0ecaa0b763b86f74a95bf71285c0eed 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,16 +4,27 @@ project (Cryptlib C)
 include("ExternalProject")
 
 find_program(PATCH_PATH NAMES patch HINTS "C:/Program Files/Git/usr/bin" "C:/Program Files (x86)/Git/usr/bin" REQUIRED)
-find_program(ENV_PATH NAMES env REQUIRED)
-find_program(SH_PATH NAMES sh REQUIRED)
+find_program(SH_PATH NAMES sh HINTS "C:/Program Files/Git/usr/bin" "C:/Program Files (x86)/Git/usr/bin" REQUIRED)
+find_program(FIND_PATH NAMES find PATHS "C:/Program Files/Git/usr/bin" "C:/Program Files (x86)/Git/usr/bin" NO_DEFAULT_PATH)
+find_program(FIND_PATH NAMES find)
 
 if(WIN32)
-	set(MAKE_FLAGS MINGW32_NT-6.1 OSNAME=win32 RANLIB=${CMAKE_RANLIB} AR=${CMAKE_AR} CC=${CMAKE_C_COMPILER} MAKE=${MAKE_PATH})
-	find_program(UNZIP_PATH tar REQUIRED)
-	set(DOWNLOAD_CMD "${UNZIP_PATH}" -xf "${CMAKE_CURRENT_SOURCE_DIR}/dist/cryptlib.zip" -C "<SOURCE_DIR>")
-	find_program(MAKE_PATH NAMES msbuild REQUIRED)
-	set(BUILD_CMD ${msbuild} /p:Configuration=Release /p:Platform=Win32 cryptlib.sln)
+	if(MSVC)
+		find_program(MAKE_PATH NAMES make mingw32-make REQUIRED)
+		find_program(UNZIP_PATH tar REQUIRED)
+		set(DOWNLOAD_CMD "${UNZIP_PATH}" -xf "${CMAKE_CURRENT_SOURCE_DIR}/dist/cryptlib.zip" -C "<SOURCE_DIR>")
+		find_program(MAKE_PATH NAMES msbuild REQUIRED)
+		set(BUILD_CMD ${MAKE_PATH} /p:Configuration=Release /p:Platform=Win32 "<SOURCE_DIR>/crypt32.sln")
+		set(INSTALL_CMD ${CMAKE_CURRENT_SOURCE_DIR}/install.bat "<SOURCE_DIR>" "${Cryptlib_BINARY_DIR}")
+	else()
+		set(MAKE_FLAGS MINGW32_NT-6.1 OSNAME=win32 RANLIB=${CMAKE_RANLIB} AR=${CMAKE_AR} CC=${CMAKE_C_COMPILER} MAKE=${MAKE_PATH})
+		set(BUILD_CMD ${MAKE_PATH} ${MAKE_FLAGS})
+		find_program(UNZIP_PATH tar REQUIRED)
+		set(DOWNLOAD_CMD "${UNZIP_PATH}" -xf "${CMAKE_CURRENT_SOURCE_DIR}/dist/cryptlib.zip" -C "<SOURCE_DIR>")
+		set(INSTALL_CMD cp "<SOURCE_DIR>/cryptlib.h" "<SOURCE_DIR>/libcl.a" ${Cryptlib_BINARY_DIR})
+	endif()
 else()
+	find_program(ENV_PATH NAMES env REQUIRED)
 	find_program(MAKE_PATH NAMES make mingw32-make REQUIRED)
 	if("$ENV{CMAKE_BUILD_PARALLEL_LEVEL}" STREQUAL "")
 		set(MAKE_FLAGS ${MAKE_FLAGS} -j 32)
@@ -23,6 +34,7 @@ else()
 	set(BUILD_CMD ${ENV_PATH} - PATH=$ENV{PATH} ${CROSS_MAKE_ENV} ${MAKE_PATH} ${MAKE_FLAGS})
 	find_program(UNZIP_PATH unzip REQUIRED)
 	set(DOWNLOAD_CMD "${UNZIP_PATH}" -oa "${CMAKE_CURRENT_SOURCE_DIR}/dist/cryptlib.zip" -d "<SOURCE_DIR>")
+	set(INSTALL_CMD cp "<SOURCE_DIR>/cryptlib.h" "<SOURCE_DIR>/libcl.a" ${Cryptlib_BINARY_DIR})
 endif()
 
 
@@ -31,12 +43,12 @@ ExternalProject_Add(
 	DOWNLOAD_COMMAND ${DOWNLOAD_CMD}
 	UPDATE_COMMAND ""
 	CONFIGURE_COMMAND ""
-	PATCH_COMMAND ${SH_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/patch.sh" "${CMAKE_CURRENT_SOURCE_DIR}" "<SOURCE_DIR>"
+	PATCH_COMMAND ${SH_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/patch.sh" "${CMAKE_CURRENT_SOURCE_DIR}" "<SOURCE_DIR>" ${FIND_PATH} ${PATCH_PATH}
 	BUILD_IN_SOURCE TRUE
 	BUILD_COMMAND ${BUILD_CMD}
 	# This is actually an install byproduct but hey... ¯\_(ツ)_/¯
 	BUILD_BYPRODUCTS ${Cryptlib_BINARY_DIR}/libcl.a
-	INSTALL_COMMAND cp "<SOURCE_DIR>/cryptlib.h" "<SOURCE_DIR>/libcl.a" ${Cryptlib_BINARY_DIR}
+	INSTALL_COMMAND ${INSTALL_CMD}
 )
 
 add_library(cryptlib STATIC IMPORTED GLOBAL)
diff --git a/install.bat b/install.bat
new file mode 100644
index 0000000000000000000000000000000000000000..933d5bf95dca7c4a672d5ed6b997d9f644b68a10
--- /dev/null
+++ b/install.bat
@@ -0,0 +1,5 @@
+copy "%1\cryptlib.h" "%2"
+copy "%1\binaries32_vs10\cl32.lib" "%2"
+copy "%1\binaries32_vs10\cl32.dll" "%2"
+copy "%1\binaries32_vs10\cl32.pdb" "%2"
+copy "%1\binaries32_vs10\cl32.exp" "%2"