diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 984739e..36a333b 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -687,6 +687,7 @@ function variable_initialize($conf = array()) {
  *
  * @see variable_del()
  * @see variable_set()
+ * @see variable_rename()
  */
 function variable_get($name, $default = NULL) {
   global $conf;
@@ -709,6 +710,7 @@ function variable_get($name, $default = NULL) {
  *
  * @see variable_del()
  * @see variable_get()
+ * @see variable_rename()
  */
 function variable_set($name, $value) {
   global $conf;
@@ -732,6 +734,7 @@ function variable_set($name, $value) {
  *
  * @see variable_get()
  * @see variable_set()
+ * @see variable_rename()
  */
 function variable_del($name) {
   global $conf;
diff --git a/includes/common.inc b/includes/common.inc
index ce36933..33f48ef 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -7823,3 +7823,35 @@ function drupal_get_filetransfer_info() {
   }
   return $info;
 }
+
+/**
+ * Renames a persistent variable.
+ *
+ * Case-sensitivity of the variable_* functions depends on the database
+ * collation used. To avoid problems, always use lower case for persistent
+ * variable names.
+ *
+ * @param $name
+ *   The variable to be renamed.
+ * @param $new_name
+ *   The new name for the variable.
+ *
+ * @see variable_get()
+ * @see variable_set()
+ * @see variable_del()
+ */
+function variable_rename($name, $new_name) {
+  global $conf;
+
+  // Variables that are not actually set do not need to be renamed.
+  if (isset($conf[$name])) {
+    db_update('variable')
+      ->fields(array('name' => $new_name))
+      ->condition('name', $name)
+      ->execute();
+    cache_clear_all('variables', 'cache_bootstrap');
+
+    $conf[$new_name] = $conf[$name];
+    unset($conf[$name]);
+  }
+}
