diff --git a/drush_make.download.inc b/drush_make.download.inc
index 4187e89..39af6bc 100644
--- a/drush_make.download.inc
+++ b/drush_make.download.inc
@@ -239,23 +239,33 @@ function _drush_make_download_file($download) {
   return FALSE;
 }
 
+/**
+ * Unpacks the given file to the destination directory.
+ */
 function drush_make_download_file_unpack($filename, $download_location, $name) {
   $extension = array_pop(explode('.', $filename));
   switch ($extension) {
     case 'gz':
     case 'tgz':
       // I'd like to just use tar -z, but apparently it breaks on windoze. Why do they always have to ruin everything?
-      drush_make_download_file_unpack_gzip($filename, $download_location);
+      return drush_make_download_file_unpack_gzip($filename, $download_location);
       break;
     case 'tar':
-      drush_make_download_file_unpack_tar($filename, $download_location);
+      return drush_make_download_file_unpack_tar($filename, $download_location);
       break;
     case 'zip':
-      drush_make_download_file_unpack_zip($filename, $download_location);
+      return drush_make_download_file_unpack_zip($filename, $download_location);
       break;
     default:
-      drush_shell_exec('mv %s %s', $filename, $download_location . ($name ? '/' . $name : ''));
+      // Make sure the download location exists.
+      drush_make_mkdir($download_location);
+      // Move the destination file into the new directory.
+      $destination = $download_location . ($name ? '/' . $name : '');
+      if (drush_shell_exec('mv %s %s', $filename, $destination)) {
+        return $destination;
+      }
   }
+  return FALSE;
 }
 
 function drush_make_download_file_unpack_tar($filename, $download_location) {
@@ -266,7 +276,7 @@ function drush_make_download_file_unpack_tar($filename, $download_location) {
   drush_make_mkdir($tmp_path . '/__unzip__');
   drush_shell_exec('tar -x -C %s -f %s', $tmp_path . '/__unzip__', $filename);
 
-  _drush_make_download_file_move($tmp_path, $filename, $download_location);
+  return _drush_make_download_file_move($tmp_path, $filename, $download_location);
 }
 
 function drush_make_download_file_unpack_gzip($filename, $download_location) {
@@ -289,7 +299,7 @@ function drush_make_download_file_unpack_gzip($filename, $download_location) {
     }
   }
   drush_make_error('PACKAGE_ERROR', dt('Could not retrieve package information for %filename.', array('%filename' => $filename)));
-  return;
+  return FALSE;
 }
 
 function drush_make_download_file_unpack_zip($filename, $download_location) {
@@ -300,7 +310,7 @@ function drush_make_download_file_unpack_zip($filename, $download_location) {
   drush_make_mkdir($tmp_path . '/__unzip__');
   drush_shell_exec("unzip %s -d %s", $filename, $tmp_path . '/__unzip__');
 
-  _drush_make_download_file_move($tmp_path, $filename, $download_location);
+  return _drush_make_download_file_move($tmp_path, $filename, $download_location);
 }
 
 function _drush_make_download_file_move($tmp_path, $filename, $download_location) {
