diff --git a/aegir.make b/aegir.make
index 6eafe2d..305af4b 100644
--- a/aegir.make
+++ b/aegir.make
@@ -1,6 +1,5 @@
 core = 6.x
 projects[] = "drupal"
-
 projects[hostmaster][type] = "profile"
 projects[hostmaster][download][type] = "git"
 projects[hostmaster][download][url] = "git://git.aegirproject.org/hostmaster.git"
diff --git a/db_server/clone.provision.inc b/db_server/clone.provision.inc
index 63f5913..3f88a0b 100644
--- a/db_server/clone.provision.inc
+++ b/db_server/clone.provision.inc
@@ -1,5 +1,4 @@
 <?php
-
 // $Id$
 
 function drush_provision_mysql_provision_clone_validate() {
diff --git a/platform/rename.provision.inc b/platform/rename.provision.inc
new file mode 100644
index 0000000..9ad4c9b
--- /dev/null
+++ b/platform/rename.provision.inc
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Rename command implementation
+ *
+ * This command when called will 
+ *   1. Make a backup of the current site, before modifications are made.
+ *   2. Execute 'provision deploy' to build the new site using the backup of the old site.
+ *   3. Delete the old site.
+ *
+ */
+
+/**
+ * Make sure we have a valid site being renamed, and that the site being renamed exists
+ */
+function drush_provision_drupal_provision_rename_validate($url = null, $new_url = null, $platform = null) {
+  drush_bootstrap(DRUSH_BOOTSTRAP_DRUPAL_SITE);
+}
+
+/**
+ * Make a backup before making any changes, and add extract the file we are restoring from
+ */
+function drush_provision_drupal_pre_provision_rename($url, $new_url, $platform = null) {
+  drush_invoke('provision-backup', $url);
+}
+
+/**
+ * Remove the extracted site directory
+ */
+function drush_provision_drupal_pre_provision_rename_rollback($url, $new_url, $platform = null) {
+  $success =  provision_path("unlink", drush_get_option('backup_file'), TRUE, dt('Removed unused rename site package'), dt('Could not remove unused site package'));
+}
+
+/**
+ * Switch the rename directories around now that we have the new db installed
+ */
+function drush_provision_drupal_provision_rename($url, $new_url, $platform = null) {
+  # note that we reset the aliases so they don't conflict with the original site
+  drush_backend_invoke('provision-deploy', array(
+    $new_url, 
+    drush_get_option('backup_file'), 
+    'root' => $platform, 
+    'aliases' => drush_get_option('aliases'),
+    'redirection' => drush_get_option('redirection'),
+    'web_host' => drush_get_option('web_host'), 
+    'web_ip' => drush_get_option('web_ip'), 
+    'db_host' => drush_get_option('db_host')
+  ));
+}
+
+function drush_provision_drupal_post_provision_rename($url) {
+  /* @TODO: sort this out.. to do a drush_backend_invoke means 
+   * that drush_save_config($context) gets called.. somehow?
+   * and it tries to write to the drushrc.php of the old site 
+   * that's been deleted
+   */
+  drush_invoke("provision-delete", $url);
+}
diff --git a/provision.drush.inc b/provision.drush.inc
index 5a42d2b..5696229 100644
--- a/provision.drush.inc
+++ b/provision.drush.inc
@@ -35,8 +35,6 @@
  *   unlock  - Unlock a platform so that sites can be provisioned on it.
  *
  *   login_reset - Generate a one-time login reset URL.
- *
- * Not implemented yet :
  *   rename  - Change the url of a site. This requires moving of files, and numerous other issues.
  */
 
@@ -189,6 +187,12 @@ function provision_drush_command() {
       'example.com' => dt('The url of the site being migrated.')),
   );
 
+  $items['provision-rename'] = array(
+    'description' => 'Rename a site.',
+    'arguments' => array('domain.com' => dt('The domain to rename. Any outstanding updates will be run.'),
+      'new.domain.com' => dt('The new domain name to use.')),
+    'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_ROOT
+  );
 
   return $items;
 }
