diff --git drush_make.download.inc drush_make.download.inc
index 55ca46a..fad0eaa 100644
--- drush_make.download.inc
+++ drush_make.download.inc
@@ -262,6 +262,12 @@ function drush_make_download_file_unpack_tar($filename, $download_location) {
   list($main_directory) = array_reverse(explode('/', $download_location));
 
   drush_make_mkdir($tmp_path . '/__unzip__');
+
+  if (substr(PHP_OS, 0, 3) == 'WIN' && drush_shell_exec('cygpath -u %s', $filename)) {
+    $output = drush_shell_exec_output();
+    $filename = $output[0];
+  }
+
   drush_shell_exec('tar -x -C %s -f %s', $tmp_path . '/__unzip__', $filename);
 
   _drush_make_download_file_move($tmp_path, $filename, $download_location);
diff --git drush_make.project.inc drush_make.project.inc
index 05ae7a0..2981e15 100644
--- drush_make.project.inc
+++ drush_make.project.inc
@@ -73,7 +73,13 @@ class DrushMakeProject {
       }
       // Download the patch.
       if ($filename = _drush_make_download_file($info)) {
-        $patched = drush_shell_exec("patch -p0 -d %s < %s", $project_directory, $filename);
+        // convert patch directory to cygwin format for patch command
+        $project_directory_patch = $project_directory;
+        if (substr(PHP_OS, 0, 3) == 'WIN' && drush_shell_exec('cygpath -u %s', $project_directory_patch)) {
+          $output = drush_shell_exec_output();
+          $project_directory_patch = $output[0];
+        }
+        $patched = drush_shell_exec("patch -p0 -d %s < %s", $project_directory_patch, $filename);
         if ($patched) {
           if (!$ignore_checksums) {
             if (isset($info['md5']) && md5(file_get_contents($filename)) !== $info['md5']) {
diff --git drush_make.test.inc drush_make.test.inc
index eb17494..e82d62d 100644
--- drush_make.test.inc
+++ drush_make.test.inc
@@ -185,7 +185,7 @@ function drush_make_test_get_tests($id = NULL) {
  */
 function drush_make_test_run_test($id) {
   if ($test = drush_make_test_get_tests($id)) {
-    $makefile = dirname(__FILE__) .'/'. $test['makefile'];
+    $makefile = _drush_convert_path(dirname(__FILE__)) .'/'. $test['makefile'];
     $options = $test['options'] + array('test' => TRUE, 'md5' => TRUE);
 
     // Log the test command.
diff --git drush_make.utilities.inc drush_make.utilities.inc
index b2a362d..be3dbf4 100644
--- drush_make.utilities.inc
+++ drush_make.utilities.inc
@@ -139,6 +139,7 @@ function drush_make_validate_info_file($info) {
     $errors = TRUE;
   }
 
+  include_once('drush_make.drush.inc');
   if (!isset($info['api'])) {
     $info['api'] = DRUSH_MAKE_API;
     drush_log(dt("You need to specify an API version of two in your makefile:\napi = !api", array("!api" => DRUSH_MAKE_API)), 'warning');
@@ -285,6 +286,10 @@ function drush_make_tmp($set = TRUE) {
   static $tmp_dir;
   if (!isset($tmp_dir) && $set) {
     $tmp_dir = sys_get_temp_dir();
+
+    // Convert windows paths.
+    $tmp_dir = _drush_convert_path($tmp_dir);
+
     if (strrpos($tmp_dir, '/') == strlen($tmp_dir) - 1) {
       $tmp_dir .= 'drush_make_tmp_' . time();
     }
@@ -316,7 +321,7 @@ function drush_make_prepare_install($build_path) {
 }
 
 function drush_make_md5() {
-  if (drush_shell_exec("( find %s -type f -exec cksum {} \; )", drush_make_tmp())) {
+  if (drush_shell_exec("( find %s -type f -exec cksum '{}' ';' )", drush_make_tmp())) {
     $hashes = array();
     foreach (drush_shell_exec_output() as $line) {
       // Remove the temporary build path which includes a (relatively)
@@ -378,9 +383,9 @@ if (!function_exists('drush_shell_cd_and_exec')) {
 
     $effective_wd = array_shift($args);
     $cwd = getcwd();
-    drush_op('chdir', $effective_wd);
+    drush_op('chdir', _drush_convert_path($effective_wd));
     $result = call_user_func_array('drush_shell_exec', $args);
-    drush_op('chdir', $cwd);
+    drush_op('chdir', _drush_convert_path($cwd));
     return $result;
   }
 }
