diff --git a/drush_make.download.inc b/drush_make.download.inc
index 2d6c070..52d8146 100644
--- a/drush_make.download.inc
+++ b/drush_make.download.inc
@@ -482,7 +482,15 @@ function drush_make_download_git($name, $download, $download_location) {
     if (!$wc && file_exists($tmp_location . '/.git')) {
       drush_shell_exec("rm -rf %s", $tmp_location . '/.git');
     }
-    drush_shell_exec('cp -Rf %s %s', $tmp_location, dirname($download_location));
+
+    // Get only a subdirectory if subtree was specified
+    if (isset($download['subtree'])) {
+        $subtree = $tmp_location . '/' . $download['subtree'];
+    } else {
+        $subtree = $tmp_location;
+    }
+	
+    drush_shell_exec('cp -Rf %s %s', $subtree, dirname($download_location));
     drush_shell_exec("rm -rf %s", dirname($tmp_location));
     return dirname($tmp_location);
   }
diff --git a/drush_make.project.inc b/drush_make.project.inc
index d0f2a48..b447c87 100644
--- a/drush_make.project.inc
+++ b/drush_make.project.inc
@@ -44,7 +44,7 @@ class DrushMakeProject {
   function findDownloadLocation() {
     $this->path = $this->generatePath();
     $this->project_directory = !empty($this->directory_name) ? $this->directory_name : $this->name;
-    $this->download_location = $this->path . '/' . $this->project_directory;
+    $this->download_location = $this->path . '/' . ($this->subfolder?$this->subfoler.'/':'') . $this->project_directory;
     // This directory shouldn't exist yet -- if it does, stop.
     if (is_dir($this->download_location)) {
       drush_set_error(dt('Directory not empty: %directory', array('%directory' => $this->download_location)));
