diff --git a/modules/hosting/rename/hosting.feature.rename.inc b/modules/hosting/rename/hosting.feature.rename.inc
new file mode 100644
index 0000000..4ad3144
--- /dev/null
+++ b/modules/hosting/rename/hosting.feature.rename.inc
@@ -0,0 +1,12 @@
+<?php
+
+function hosting_rename_hosting_feature() {
+  $features['rename'] = array(
+    'title' => t('Site rename'),
+    'description' => t('Rename a site both in the frontend and in the backend filesystem.'),
+    'status' => HOSTING_FEATURE_ENABLED,
+    'module' => 'hosting_rename',
+    );
+  return $features;
+}
+
diff --git a/modules/hosting/rename/hosting_rename.drush.inc b/modules/hosting/rename/hosting_rename.drush.inc
new file mode 100644
index 0000000..95eccba
--- /dev/null
+++ b/modules/hosting/rename/hosting_rename.drush.inc
@@ -0,0 +1,26 @@
+<?php
+
+function drush_hosting_rename_pre_hosting_task($task) {
+  $task =& drush_get_context('HOSTING_TASK');
+  if ($task->ref->type == 'site' && $task->task_type == 'rename') {
+    $task->args[2] = $task->task_args['new_name'];
+    $platform = node_load($task->task_args['platform']);
+    $task->args[3] = $platform->publish_path;
+    if (module_exists('hosting_alias')) {
+      $task->options['aliases'] = str_replace("\n", ",", $task->task_args['aliases']);
+      $task->options['redirection'] = $task->task_args['redirection'];
+    }
+  }
+}
+
+
+function hosting_rename_post_hosting_rename_task($task, $data) {
+  if ($task->ref->type == 'site') {
+    $node = $task->ref;
+    $node->title = $task->task_args['new_name'];
+    $node->revision = TRUE;
+    $node->changed = mktime();
+    node_save($node);
+  }
+}
+
diff --git a/modules/hosting/rename/hosting_rename.info b/modules/hosting/rename/hosting_rename.info
new file mode 100644
index 0000000..310e225
--- /dev/null
+++ b/modules/hosting/rename/hosting_rename.info
@@ -0,0 +1,6 @@
+name = Site rename
+description = Rename a site both in the frontend and in the backend filesystem.
+package = Hosting
+dependencies[] = hosting
+
+core = 6.x
diff --git a/modules/hosting/rename/hosting_rename.module b/modules/hosting/rename/hosting_rename.module
new file mode 100644
index 0000000..45b40e5
--- /dev/null
+++ b/modules/hosting/rename/hosting_rename.module
@@ -0,0 +1,74 @@
+<?php
+
+function hosting_rename_hosting_tasks() {
+  $options = array();
+
+  $options['site']['rename'] = array(
+    'title' => t('Rename'),
+    'description' => t('Rename a site.'),
+    'weight' => 6
+  );
+  return $options;
+}
+
+function hosting_rename_perm() {
+  return array(
+    'create rename task',
+  );
+}
+
+function hosting_task_rename_form_validate($form, &$form_state) {
+  $url = strtolower($form_state['values']['parameters']['new_name']); // domain names are case-insensitive
+  if (!_hosting_valid_fqdn($url)) {
+    form_set_error('title', t("You have not specified a valid url for this site."));
+  }
+  if (hosting_site_exists($url)) {
+    form_set_error('title', t("The domain name you have specified is not unique."));
+  }
+  if ($form_state['values']['parameters']['aliases']) {
+    $aliases = explode("\n", $form_state['values']['parameters']['aliases']);
+    foreach ($aliases as $alias) {
+      if ($alias = trim($alias)) {
+        if (!hosting_domain_allowed($alias, (array) $node)) {
+          form_set_error('aliases', t('The domain name @alias is already in use', array('@alias' => $alias)));
+        }
+      }
+    }
+  }
+}
+
+function hosting_rename_theme($existing, $type, $theme, $path) {
+  return array('hosting_task_rename_form' => array('arguments' => array('form' => NULL)));
+}
+
+function hosting_task_rename_form($node) {
+  $form['new_name'] = array (
+    '#title' => t('New site name'),
+    '#type' => 'textfield',
+    '#weight' => '-1',
+    '#required' => TRUE,
+    '#default_value' => $node->title
+  );
+  $form['platform'] = array( 
+    '#type' => 'hidden',
+    '#value' => $node->platform,
+  );
+  if (module_exists('hosting_alias')) {
+    $form['aliases'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Domain aliases'),
+      '#description' => t('Your site can also be accessed through these domain names. This field requires each domain alias to be on its own line'),
+      '#default_value' => implode("\n", (array) $form['#node']->aliases),
+      '#weight' => 10,
+    );
+    $form['redirection'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Redirection'),
+      '#description' => t('Aliases will all be redirected to the main domain if this is checked. Otherwise, all aliases will be accessible transparently.'),
+      '#default_value' => isset($form['#node']->redirection) ? $form['#node']->redirection : variable_get('hosting_alias_redirection', FALSE),
+    );
+  }
+  return $form;
+}
+
+
