diff --git a/commands/make/make.download.inc b/commands/make/make.download.inc
index 19b080a..429409a 100644
--- a/commands/make/make.download.inc
+++ b/commands/make/make.download.inc
@@ -125,12 +125,16 @@ function _make_download_file($download) {
         $header_file = $tmp_path . '/__header__';
         touch($header_file);
         drush_shell_exec("ls %s", $download_path);
+        $basename = basename($url);
+        $output_filename = "{$download_path}/{$basename}";
         $files = drush_shell_exec_output();
-        if ($download['request_type'] == 'get' && drush_shell_cd_and_exec($download_path, 'curl -LOD %s %s', $header_file, $url)) {
+        if ($download['request_type'] == 'get'
+            && drush_shell_cd_and_exec($download_path, 'curl -o %s -LD %s %s', $output_filename, $header_file, $url)) {
           $download_mechanism = 'curl';
           $success = TRUE;
         }
-        elseif ($download['request_type'] == 'post' && drush_shell_cd_and_exec($download_path, 'curl -d %s -LOD %s %s', $download['data'], $header_file, $url)) {
+        elseif ($download['request_type'] == 'post'
+                 && drush_shell_cd_and_exec($download_path, 'curl -o %s -d %s -LD %s %s', $output_filename, $download['data'], $header_file, $url)) {
           $download_mechanism = 'curl';
           $success = TRUE;
         }
diff --git a/commands/make/make.drush.inc b/commands/make/make.drush.inc
index faa6a57..c2167ec 100644
--- a/commands/make/make.drush.inc
+++ b/commands/make/make.drush.inc
@@ -113,9 +113,10 @@ function drush_make($makefile = NULL, $build_path = NULL) {
   if ($info === FALSE || ($info = make_validate_info_file($info)) === FALSE) {
     return FALSE;
   }
+  $make_dir = realpath(dirname($makefile));
+  if (make_projects(FALSE, drush_get_option('contrib-destination', 'sites/all'), $info, $build_path, $make_dir)) {
+    make_libraries(drush_get_option('contrib-destination', 'sites/all'), $info, $build_path, $make_dir);
 
-  if (make_projects(FALSE, drush_get_option('contrib-destination', 'sites/all'), $info, $build_path)) {
-    make_libraries(drush_get_option('contrib-destination', 'sites/all'), $info, $build_path);
 
     if (drush_get_option('prepare-install')) {
       make_prepare_install($build_path);
@@ -154,7 +155,7 @@ function drush_make_post_make($makefile = NULL, $build_path = NULL) {
   make_clean_tmp();
 }
 
-function make_projects($recursion, $contrib_destination, $info, $build_path) {
+function make_projects($recursion, $contrib_destination, $info, $build_path, $make_dir) {
   $release_info = drush_get_option('release-info', 'updatexml');
   drush_include_engine('release_info', $release_info);
 
@@ -184,6 +185,7 @@ function make_projects($recursion, $contrib_destination, $info, $build_path) {
       'location'            => drush_get_option('make-update-default-url', RELEASE_INFO_DEFAULT_URL),
       'subdir'              => '',
       'directory_name'      => '',
+      'make_directory'      => $make_dir,
     );
     if (!isset($project['l10n_url']) && ($project['location'] == RELEASE_INFO_DEFAULT_URL)) {
       $project['l10n_url'] = MAKE_DEFAULT_L10N_SERVER;
@@ -268,7 +270,7 @@ function make_projects($recursion, $contrib_destination, $info, $build_path) {
   return TRUE;
 }
 
-function make_libraries($contrib_destination, $info, $build_path) {
+function make_libraries($contrib_destination, $info, $build_path, $make_dir) {
   if (empty($info['libraries'])) {
     return;
   }
@@ -286,6 +288,7 @@ function make_libraries($contrib_destination, $info, $build_path) {
       'contrib_destination' => $contrib_destination,
       'subdir'              => '',
       'directory_name'      => $key,
+      'make_directory'      => $make_dir,
     );
     if ($ignore_checksums) {
       unset($library['download']['md5']);
diff --git a/commands/make/make.project.inc b/commands/make/make.project.inc
index 12d0a83..ba7fe81 100644
--- a/commands/make/make.project.inc
+++ b/commands/make/make.project.inc
@@ -74,6 +74,19 @@ class DrushMakeProject {
     return TRUE;
   }
 
+  protected function preprocessLocalFileUrl($url) {
+    $uri = parse_url($url);
+    if (!isset($uri['scheme']) && isset($uri['path'])) {
+      $path = $uri['path'];
+      if (!drush_is_absolute_path($uri['path'])) {
+        $path = $this->make_directory .'/'. $path;
+      }
+      $path = realpath($path);
+      $url = "file://$path";
+    }
+    return $url;
+  }
+
   function findDownloadLocation() {
     $this->path = $this->generatePath();
     $this->project_directory = !empty($this->directory_name) ? $this->directory_name : $this->name;
@@ -106,7 +119,10 @@ class DrushMakeProject {
     $ignore_checksums = drush_get_option('ignore-checksums');
     foreach ($this->patch as $info) {
       if (!is_array($info)) {
-        $info = array('url' => $info);
+        $info = array('url' => $this->preprocessLocalFileUrl($info));
+      }
+      else {
+        $info['url'] = $this->preprocessLocalFileUrl($info['url']);
       }
       // Download the patch.
       if ($filename = _make_download_file($info)) {
@@ -199,7 +215,7 @@ class DrushMakeProject {
         }
         if ($l10n_server) {
           if (!isset($cache[$l10n_server])) {
-            if ($filename = _make_download_file($l10n_server)) {
+            if ($filename = _make_download_file($this->preprocessLocalFileUrl($l10n_server))) {
               $server_info = simplexml_load_string(file_get_contents($filename));
               $cache[$l10n_server] = !empty($server_info->update_url) ? $server_info->update_url : FALSE;
               drush_op('unlink', $filename);
@@ -228,7 +244,7 @@ class DrushMakeProject {
           $url = strtr($update_url, $variables);
 
           // Download the translation file.
-          if ($filename = _make_download_file($url)) {
+          if ($filename = _make_download_file($this->preprocessLocalFileUrl($url))) {
             // If this is the core project type, download the translation file
             // and create two copies:
             // 1. To profiles/default/translations. It must be named
diff --git a/commands/make/make.utilities.inc b/commands/make/make.utilities.inc
index 5c65677..00b60a8 100644
--- a/commands/make/make.utilities.inc
+++ b/commands/make/make.utilities.inc
@@ -482,6 +482,8 @@ function make_http_request($url, $destination, $headers = array(), $method = 'GE
       $host = $uri['host'] . ($port != 443 ? ':'. $port : '');
       $fp = @fsockopen('ssl://'. $uri['host'], $port, $errno, $errstr, 20);
       break;
+    case 'file':
+      return _drush_make_request_local_file($uri['path'], $destination);
     default:
       $result->error = 'invalid schema '. $uri['scheme'];
       $result->code = -1003;
@@ -610,3 +612,46 @@ function make_http_request($url, $destination, $headers = array(), $method = 'GE
   $result->code = $code;
   return $result;
 }
+
+/**
+ * Copies a local file from one location to another while responding as if it is a HTTP request.
+ *
+ * @see drush_make_http_request()
+ *
+ * @param
+ *   $source The source location for the file to copy.
+ * @param
+ *   $target The target destination for the file.
+ *
+ * @return stdClass
+ *   A mock HTTP response compatiable object.
+ */
+function _drush_make_request_local_file($source, $target) {
+  $result = new stdClass();
+  $result->protocol = 'FILE';
+  $result->request = "COPY {$source} {$result->protocol}\r\n";
+  $result->headers = array();
+
+  if (!is_file($source)) {
+    $result->code = 404;
+    $result->error = 'No such file or directory';
+    $result->status_message = 'Not Found';
+  }
+  elseif (!is_readable($source)) {
+    $result->code = 403;
+    $result->error = 'Permission denied';
+    $result->status_message = 'Forbidden';
+  }
+  elseif (copy($source, $target)) {
+    $result->code = 200;
+    $result->status_message = 'OK';
+  }
+  // Something is wrong but we're not sure what.
+  else {
+    $result->code = 500;
+    $result->error = 'Oops!';
+    $result->status_message = 'Internal Server Error';
+  }
+
+  return $result;
+}
\ No newline at end of file
