diff --git a/drush/Provision/Service/git.php b/drush/Provision/Service/git.php
index ac66866..aaf310d 100644
--- a/drush/Provision/Service/git.php
+++ b/drush/Provision/Service/git.php
@@ -10,6 +10,7 @@ class Provision_Service_git extends Provision_Service {
 
   static function subscribe_platform($context) {
     $context->setProperty('repo_url');
+    $context->setProperty('repo_path');
     $context->setProperty('deploy_from_git');
     $context->setProperty('git_ref');
   }
diff --git a/drush/provision_git.drush.inc b/drush/provision_git.drush.inc
index 8803b23..303fe8f 100644
--- a/drush/provision_git.drush.inc
+++ b/drush/provision_git.drush.inc
@@ -273,7 +273,7 @@ function drush_provision_git_clone($git_url = '', $path = '', $git_ref = '') {
         break;
       case 'platform':
       default:
-        $path = d()->root;
+        $path = d()->repo_path;
         break;
     }
   }
@@ -383,6 +383,19 @@ function drush_provision_git_post_provision_verify() {
 }
 
 /**
+ * Implements drush_hook_post_COMMAND() for provision-delete command.
+ *
+ * If repo path is different from root, delete it.
+ */
+function drush_provision_git_post_provision_delete() {
+  // If platform has a repo path that is not the root, it must be deleted as well.
+  if (d()->type =='platform' && d()->repo_path != d()->root) {
+    drush_log('Deleting repo path at ' . d()->repo_path, 'ok');
+    _provision_recursive_delete(d()->repo_path);
+  }
+}
+
+/**
  * Update the drush context with the git_url and current git_ref.
  */
 function _provision_git_update_git_meta_data() {
diff --git a/hosting_git.drush.inc b/hosting_git.drush.inc
index 9b662eb..e552e15 100644
--- a/hosting_git.drush.inc
+++ b/hosting_git.drush.inc
@@ -60,6 +60,7 @@ function hosting_git_hosting_platform_context_options(&$task) {
   // If we're actually provisioning from Git, populate real data.
   if (!empty($task->ref->git['repo_url'])) {
     $task->context_options['repo_url'] = $task->ref->git['repo_url'];
+    $task->context_options['repo_path'] = $task->ref->git['repo_path'];
     $task->context_options['deploy_from_git'] = TRUE;
     $task->context_options['git_ref'] = $task->ref->git['git_ref'];
   }
@@ -79,6 +80,7 @@ function hosting_git_drush_context_import($context, &$node) {
   if (in_array($context->type, array('site', 'platform')) && $context->deploy_from_git) {
     $node->git['repo_url'] = $context->repo_url;
     $node->git['git_ref'] = $context->git_ref;
+    $node->git['repo_path'] = $context->repo_path;
   }
 }
 
@@ -96,4 +98,8 @@ function hosting_git_post_hosting_verify_task($task, $data) {
   if (isset($context['git_ref'])) {
     $node->git['git_ref'] = $context['git_ref'];
   }
+
+  if (isset($context['repo_path'])) {
+    $node->git['repo_path'] = $context['repo_path'];
+  }
 }
diff --git a/hosting_git.install b/hosting_git.install
index e5bad27..efdbeda 100644
--- a/hosting_git.install
+++ b/hosting_git.install
@@ -26,6 +26,13 @@ function hosting_git_schema() {
         'not null' => TRUE,
         'default' => '',
       ),
+      'repo_path' => array(
+        'description' => 'The absolute path to clone the repository to.',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => FALSE,
+        'default' => '',
+      ),
       'git_ref' => array(
         'description' => 'The current git branch or tag.',
         'type' => 'varchar',
@@ -39,3 +46,16 @@ function hosting_git_schema() {
 
   return $schema;
 }
+
+/**
+ * Add repo_path field.
+ */
+function hosting_git_update_7301 () {
+  db_add_field('hosting_git', 'repo_path', array(
+    'description' => 'The absolute path to clone the repository to.',
+    'type' => 'varchar',
+    'length' => 255,
+    'not null' => FALSE,
+    'default' => '',
+  ));
+}
diff --git a/hosting_git.module b/hosting_git.module
index 665d6d0..073860a 100644
--- a/hosting_git.module
+++ b/hosting_git.module
@@ -51,7 +51,7 @@ function hosting_git_form_alter(&$form, &$form_state, $form_id) {
 
     if ($form_id == 'platform_node_form') {
       $node_type = 'platform';
-      $deploy_description = t('You may deploy this platform from a Git repository. This functionality cannot be combined with a Makefile.');
+      $deploy_description = t('You may deploy this platform from a Git repository. The repository must contain a full Drupal codebase or a makefile. If you wish to use a makefile that is contained inside your repository, you must specify the full path to the Makefile below. Make sure to specify the location where it will be located after the git clone based on the Repository Path. ');
       // Default collapse 'from makefile' fieldset.
       $form['frommakefile']['#collapsed'] = TRUE;
     }
@@ -61,7 +61,6 @@ function hosting_git_form_alter(&$form, &$form_state, $form_id) {
       $deploy_description = t('You may deploy this site from a Git repository.');
     }
 
-    $form['#validate'][] = 'hosting_git_node_form_validate';
     $form['git'] = array(
       '#type' => 'fieldset',
       '#tree' => TRUE,
@@ -78,6 +77,13 @@ function hosting_git_form_alter(&$form, &$form_state, $form_id) {
         '#description' => t('The full URL that you would pass to <em>git clone</em>. Example:  git@github.com:username/project.git or https://github.com/username/project.git. Note that this repository must be accessible by the Aegir user.'),
         '#default_value' => isset($node->git['repo_url']) ? $node->git['repo_url'] : '',
       );
+      $form['git']['repo_path'] = array(
+        '#type' => 'textfield',
+        '#title' => 'Repository path',
+        '#description' => t('Defaults to the Publish Path if left blank. If Drupal is not in the root of your repository, enter the absolute path to clone the repository to, and edit the Publish Path to point to the correct subfolder. For example, if your Drupal code is in <code>docroot</code>, set Repository path to <code>/var/aegir/platforms/NAME</code> and Publish path to <code>/var/aegir/platforms/NAME/docroot</code>'),
+        '#default_value' => isset($node->git['repo_path']) ? $node->git['repo_path'] : '',
+        '#access' => $node_type == 'platform',
+      );
 
       $form['git']['git_ref'] = array(
         '#type' => 'textfield',
@@ -93,12 +99,28 @@ function hosting_git_form_alter(&$form, &$form_state, $form_id) {
         '#title' => t('Repo URL'),
         '#markup' => $node->git['repo_url'],
       );
+      $form['git']['repo_path_display'] = array(
+        '#type' => 'item',
+        '#title' => t('Repo Path'),
+        '#markup' => $node->git['repo_path'],
+      );
       $form['git']['git_ref_display'] = array(
         '#type' => 'item',
         '#title' => 'Branch or tag name',
         '#markup' => isset($node->git['git_ref']) ? $node->git['git_ref'] : 'master',
         '#description' => 'Use a checkout task to change this value.',
       );
+      
+      // Don't lose values
+      $form['git']['repo_url'] = array(
+        '#type' => 'value',
+        '#default_value' => isset($node->git['repo_url']) ? $node->git['repo_url'] : '',
+      );
+      // Don't lose values
+      $form['git']['repo_path'] = array(
+        '#type' => 'value',
+        '#default_value' => isset($node->git['repo_path']) ? $node->git['repo_path'] : '',
+      );
     }
 
     // Default collapse one fieldset based on the current node.
@@ -112,15 +134,6 @@ function hosting_git_form_alter(&$form, &$form_state, $form_id) {
 }
 
 /**
- * Validation callback for platform node form.
- */
-function hosting_git_node_form_validate($form, &$form_state) {
-  if (!empty($form_state['values']['git']['repo_url']) && !empty($form_state['values']['frommakefile']['makefile'])) {
-    form_set_error('makefile', t('Git deployment and Makefile deployment cannot be combined'));
-  }
-}
-
-/**
  * Implements hook_node_insert().
  */
 function hosting_git_node_insert($node) {
@@ -140,6 +153,7 @@ function hosting_git_node_update($node) {
       ->key(array('nid' => $node->nid))
       ->fields(array(
         'repo_url' => $node->git['repo_url'],
+        'repo_path' => $node->git['repo_path'],
         'git_ref' => $node->git['git_ref'],
       ))
       ->execute();
@@ -161,6 +175,12 @@ function hosting_git_node_load($nodes, $types) {
 
         $node->git['repo_url'] = $result->repo_url;
         $node->git['git_ref'] = $result->git_ref;
+        $node->git['repo_path'] = $result->repo_path;
+
+        // If platform repo path is empty, then load the publish_path in it's place.
+        if ( $node->type == 'platform' && empty($node->git['repo_path'])) {
+          $node->git['repo_path'] = $node->publish_path;
+        }
       }
       else {
         _hosting_git_node_load_defaults($node);
@@ -181,6 +201,10 @@ function _hosting_git_node_load_defaults(&$node) {
     $node->git['repo_url'] = '';
   }
 
+  if (!isset($node->git['repo_path'])) {
+    $node->git['repo_path'] = '';
+  }
+
   if (!isset($node->git['git_ref'])) {
     $node->git['git_ref'] = 'master';
   }
@@ -209,6 +233,12 @@ function hosting_git_node_view($node) {
       '#weight' => 100,
       '#markup' => check_plain($node->git['repo_url']),
     );
+    $node->content['info']['repo_path'] = array(
+      '#type' => 'item',
+      '#title' => t('Git Repository Path'),
+      '#weight' => 100,
+      '#markup' => check_plain($node->git['repo_path']),
+    );
     $ref = $node->git['git_ref'] ? $node->git['git_ref'] : t('Pending Verification');
     $node->content['info']['git_ref'] = array(
       '#type' => 'item',
