diff --git a/variable_realm_admin/include/realm.info.inc b/variable_realm_admin/include/realm.info.inc
new file mode 100644
index 0000000..7b524ed
--- /dev/null
+++ b/variable_realm_admin/include/realm.info.inc
@@ -0,0 +1,128 @@
+<?php
+/**
+ * @file
+ * Various helper functions for retrieving information from variable realm
+ * information arrays.
+ */
+
+/**
+ * Retrieve title of given realm.
+ */
+function variable_realm_admin_realm_title($realm) {
+  $info = variable_realm_info($realm);
+  return isset($info['title']) ? $info['title'] : $realm;
+}
+
+/**
+ * Check whether the given realm has settings. Requires the 'settings'
+ * parameter in the realms information to exist and not be set to FALSE.
+ */
+function variable_realm_admin_has_settings($realm) {
+  $info = variable_realm_info($realm);
+  return isset($info['settings']) && $info['settings'] !== FALSE;
+}
+
+/**
+ * Check whether the given realm has a settings configuration page. Requires
+ * info[settings][admin] not to be set to FALSE. Defaults to TRUE, as long as
+ * the realm has settings.
+ *
+ * @see variable_realm_admin_has_settings().
+ */
+function variable_realm_admin_has_settings_ui($realm) {
+  $info = variable_realm_info($realm);
+  return variable_realm_admin_has_settings($realm) &&
+    (!isset($info['settings']['admin']) || $info['settings']['admin'] !== FALSE);
+}
+
+/**
+ * Retrieve the default key for the given realm, or check if a given key is the
+ * default key.
+ */
+function variable_realm_admin_default_key($realm, $key = NULL) {
+  $info = variable_realm_info($realm);
+  $defaults = &drupal_static(__FUNCTION__, array());
+  if (!isset($defaults[$realm])) {
+    // first try callback
+    if (isset($info['default key callback'])) {
+      $callback = $info['default key callback'];
+      $arguments = isset($info['default key arguments']) ? $info['default key arguments'] : array();
+      $defaults[$realm] = call_user_func_array($callback, $arguments);
+    }
+    // second see if we have a simple key instead
+    else if (isset($info['default key'])) {
+      $defaults[$realm] = $info['default key'];
+    }
+    else {
+      $defaults[$realm] = FALSE;
+    }
+  }
+  return empty($key) ? $defaults[$realm] : $defaults[$realm] != $key;
+}
+
+/**
+ * Get list of all "valid" variables for a given realm. Validity is determined
+ * by the value of a realm-specific key in the each variable's info array.
+ *
+ * For example, all variables for the i18n realm have to have the key
+ * 'localize' set to TRUE.
+ */
+function variable_realm_admin_variables_list_all($realm) {
+  $info = variable_realm_info($realm);
+  $key = isset($info['settings']['variable key']) ? $info['settings']['variable key'] : NULL;
+
+  $variables = array();
+  if (isset($key)) {
+    foreach (variable_get_info() as $name => $variable) {
+      if (!empty($variable[$key])) {
+        $variables[] = $name;
+      }
+    }
+  }
+  drupal_alter('variable_realm_variables', $variables, $realm);
+  return $variables;
+}
+
+/**
+ * Get a realm switcher block for the given realm.
+ */
+function _variable_realm_admin_forms_switcher($realm, $current, $reset = FALSE) {
+  $info = variable_realm_info($realm);
+  $blocks = &drupal_static(__FUNCTION__, array());
+  if (!isset($blocks[$realm]) || $reset) {
+    if (isset($info['forms']['switcher callback'])) {
+      $callback = $info['forms']['switcher callback'];
+      $arguments = isset($info['forms']['switcher arguments']) ? $info['forms']['switcher arguments'] : array();
+      array_unshift($arguments, $current);
+      array_unshift($arguments, $realm);
+      $blocks[$realm] = call_user_func_array($callback, $arguments);
+    }
+    else {
+      $blocks[$realm] = FALSE;
+    }
+  }
+  return $blocks[$realm];
+}
+
+
+/**
+ * Return the name for the variable type described by the given realm, e.g.
+ * "multilingual variable". Falls back to "@realm variable".
+ */
+function _variable_realm_admin_variable_type_name($realm, $plural = TRUE) {
+  $info = variable_realm_info($realm);
+  if ($plural) {
+    return isset($info['variable name plural']) ? t($info['variable name plural']) : t('@realm variables', array('@realm' => variable_realm_admin_realm_title($realm)));
+  }
+  else {
+    return isset($info['variable name']) ? t($info['variable name']) : t('@realm variable', array('@realm' => variable_realm_admin_realm_title($realm)));
+  }
+}
+
+/**
+ * Return a css name for form elements belonging to given realm.
+ */
+function _variable_realm_admin_variable_type_cssname($realm) {
+  $info = variable_realm_info($realm);
+  return isset($info['forms']['variable css']) ? $info['forms']['variable css'] : 'variable-realm-' . $realm;
+}
\ No newline at end of file
diff --git a/variable_realm_admin/include/realm.overview.inc b/variable_realm_admin/include/realm.overview.inc
new file mode 100644
index 0000000..a009e2b
--- /dev/null
+++ b/variable_realm_admin/include/realm.overview.inc
@@ -0,0 +1,69 @@
+<?php
+/**
+ * @file
+ *
+ */
+
+/**
+ * Lists available realms.
+ */
+function variable_realm_admin_realm_overview($form, $form_state) {
+  variable_realm_admin_info();
+
+  $header = array(
+    t('Realm name'),
+    t('Keys'),
+    t('Configured variables'),
+    t('Actual variable names'),
+    t('Actions'),
+  );
+
+  $realms = array();
+  foreach (variable_realm_info() as $realm => $info) {
+    $title = $keys = $conf = $list = $links = '';
+    // Get realm name
+    $title = variable_realm_admin_realm_title($realm);
+
+    // Build key info
+    $keys_all = variable_realm_keys($realm);
+    $key_default = variable_realm_admin_default_key($realm);
+    if (count($keys_all) < 5) {
+      if ($key_default && isset($keys_all[$key_default])) {
+        $keys_all[$key_default] = '<strong>' . $keys_all[$key_default] . '</strong>';
+      }
+      $keys = implode(', ', $keys_all);
+    }
+    else {
+      $keys = format_plural(count($keys_all), '1 key', '@count keys');
+      if ($key_default && isset($keys_all[$key_default])) {
+        $keys .= ' (' . t('default key = %key', array('%key' => $keys_all[$key_default])) . ')';
+      }
+      else {
+        $keys .= ' (' . t('no default key') . ')';
+      }
+    }
+
+    // Add list of configured variables + configuration link
+    if (variable_realm_admin_has_settings_ui($realm)) {
+      $conf = implode(', ', variable_realm_admin_variables_conf($realm));
+      $links = l(t('Configure'), 'admin/config/system/variable/realm/' . $realm);
+      $title = l($title, 'admin/config/system/variable/realm/' . $realm);
+    }
+
+    // Add list of actual variables
+    if (variable_realm_admin_has_settings($realm)) {
+      $list = implode(', ', variable_realm_admin_variables_list($realm));
+    }
+    $realms[] = array($title, $keys, $conf, $list, $links);
+  }
+
+  $form['realms'] = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $realms,
+    '#empty' => t('No realms available.'),
+  );
+
+  return $form;
+}
+
diff --git a/variable_realm_admin/include/realm.settings.inc b/variable_realm_admin/include/realm.settings.inc
new file mode 100644
index 0000000..2c0fa46
--- /dev/null
+++ b/variable_realm_admin/include/realm.settings.inc
@@ -0,0 +1,53 @@
+<?php
+/**
+ * @file
+ * Variable Realms Admin module - Select realm-specific variables
+ */
+
+/**
+ * Select realm-specific variables
+ */
+function variable_realm_admin_realm_settings($form, $form_state, $realm) {
+  variable_realm_admin_info();
+  $current = variable_realm_admin_variables_conf($realm);
+  $variables = variable_realm_admin_variables_list_all($realm);
+
+  // The final list will be the sum of both lists. We may have unknown variables we want to preserve.
+  $list = array_unique(array_merge($variables, $current));
+  $form['variables'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Select %realm dependent variables', array('%realm' => variable_realm_admin_realm_title($realm))),
+    '#theme' => 'variable_table_select',
+    '#tree' => TRUE,
+  );
+  foreach ($list as $name) {
+    // Variable names may clash with form element names, so we need to replace '[' and ']'
+    $safename = str_replace(array('[', ']'), array('<', '>'), $name);
+    $form['variables'][$safename] = array(
+      '#type' => 'checkbox',
+      '#default_value' => in_array($name, $current),
+      '#variable_name' => $name,
+    );
+  }
+  $form['realm'] = array('#type' => 'value', '#value' => $realm);
+  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
+  return $form;
+}
+
+/**
+ * Handle form submission.
+ */
+function variable_realm_admin_realm_settings_submit($form, $form_state) {
+  // Get realm
+  $realm = $form_state['values']['realm'];
+  unset($form_state['values']['realm']);
+  // Get main variable names
+  $variables = $form_state['values']['variables'];
+  $variables = array_keys(array_filter($variables));
+  // Translate variable names
+  foreach ($variables as $index => $name) {
+    $variables[$index] = str_replace(array('<', '>'), array('[', ']'), $name);
+  }
+  variable_realm_admin_variables_conf($realm, $variables);
+}
+
diff --git a/variable_realm_admin/include/system.forms.inc b/variable_realm_admin/include/system.forms.inc
new file mode 100644
index 0000000..e7d46f0
--- /dev/null
+++ b/variable_realm_admin/include/system.forms.inc
@@ -0,0 +1,168 @@
+<?php
+/**
+ * @file
+ * Variable Realms Admin module - Adjust system forms
+ */
+
+/**
+ *
+ * @todo separate handling for theme form???
+ */
+function variable_realm_admin_system_forms_alter(&$form, &$form_state, $form_id) {
+  if ($variables = _variable_realm_admin_system_forms_settings($form)) {
+    array_unshift($form['#submit'], 'variable_realm_admin_system_forms_submit');
+    $form['#realm_variables'] = $variables;
+    $form += variable_realm_admin_forms_realm_infoblock(array_unique(array_values($variables)));
+  }
+}
+
+/**
+ * Check for realm variables in form + mark them respectively.
+ *
+ * @param $form
+ *   The form.
+ * @return array
+ *   List of variables which have a realm (realmvariable => realm).
+ */
+function _variable_realm_admin_system_forms_settings(&$form) {
+  $result = array();
+  foreach (element_children($form) as $field) {
+    if (count(element_children($form[$field])) && empty($form[$field]['#tree'])) {
+      $result += _variable_realm_admin_system_forms_settings($form[$field]);
+    }
+    elseif ($realm = variable_realm_admin_find_realm($field)) {
+      // Add form field class (i18n-variable) and description text.
+      $form[$field]['#attributes']['class'][] = _variable_realm_admin_variable_type_cssname($realm);
+      $form[$field]['#description'] = !empty($form[$field]['#description']) ? $form[$field]['#description'] : '';
+      $form[$field]['#description'] .= ' <strong>' . t('This is a @variable.', array('@variable' => _variable_realm_admin_variable_type_name($realm, FALSE))) . '</strong> ';
+      // Addd field => realm to result
+      $result[$field] = $realm;
+    }
+  }
+  return $result;
+}
+
+/**
+ * Submit handler for system settings forms.
+ *
+ * Saves values for realm variables to respective realms and removes their
+ * values from the form unless the currently active realm is the default one.
+ */
+function variable_realm_admin_system_forms_submit($form, &$form_state) {
+  $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : '';
+
+  // determine active realm keys
+  $realms_current = variable_realm_current();
+  if (isset($form_state['values']['variable_realm']['current'])) {
+    $realms_current = $form_state['values']['variable_realm']['current'];
+    unset ($form_state['values']['variable_realm']['current']);
+  }
+
+  // retrieve realm variables
+  $variables = $form['#realm_variables'];
+  foreach ($variables as $name => $realm) {
+    $realm_key = $realms_current[$realm];
+    // if there is a value for this variable
+    if (isset($form_state['values'][$name])) {
+      if ($op == t('Reset to defaults')) {
+        variable_store_del($realm, $realm_key, $name);
+        variable_realm_del($realm, $realm_key, $name);
+      }
+      else {
+        $value = $form_state['values'][$name];
+        if (is_array($value) && isset($form_state['values']['array_filter'])) {
+          $value = array_keys(array_filter($value));
+        }
+        variable_store_set($realm, $realm_key, $name, $value);
+        variable_realm_set($realm, $realm_key, $name, $value);
+      }
+      // Unless current realm key is a default key, remove the value to prevent
+      // the global default value from being overwritten in
+      // system_settings_form_submit().
+      if (!variable_realm_admin_default_key($realm, $realm_key)) {
+        dpm('unset value for ' . $name);
+        unset($form_state['values'][$name]);
+      }
+    }
+  }
+
+  // Make sure the form shown after submission is still the same one
+  $query_params = array();
+  foreach ($variables as $name => $realm) {
+    $query_params[VARIABLE_REALM_SELECTOR_QUERY_PARAM_PREFIX . $realm] = $realms_current[$realm];
+  }
+  $form_state['redirect'] = array(current_path(), array('query' => $query_params));
+}
+
+/**
+ * Add an info block + realm selector at top of form.
+ *
+ * @see variable_realm_admin_init().
+ *
+ * @param $realms
+ *   Active realms
+ */
+function variable_realm_admin_forms_realm_infoblock($realms) {
+  $realms_current = variable_realm_current();
+
+  $form = array(
+    '#type' => 'fieldset',
+    '#weight' => -100,
+    '#title' => t('There are @realm-variables in this form.', array('@realm-variables' => _variable_realm_admin_realm_names_human($realms))),
+    '#description' => t('Check you are editing the variables for the right realm(s). To configure which variables are available for which realm visit <a href="@variable-realms">variable realms configuration</a>.', array('@variable-realms' => url('admin/config/system/variable/realm'))),
+  );
+
+  foreach ($realms as $realm) {
+    $current = $realms_current[$realm];
+
+    // build realm switcher block
+    $switcher = _variable_realm_admin_forms_switcher($realm, $current);
+    if(!empty($switcher)) {
+      $form[$realm . '_switcher'] = $switcher;
+    }
+
+    // store active realm
+    $form['current'][$realm] = array('#type' => 'value', '#value' => $current);
+  }
+
+  drupal_alter('variable_realm_forms_infoblock', $form, $realms);
+  return array('variable_realm' => $form);
+}
+
+/**
+ * Default callback for generating a realm switcher block.
+ */
+function variable_realm_admin_forms_switcher($realm, $current) {
+  $info = variable_realm_info($realm);
+  $keys = variable_realm_keys($realm);
+
+  // build list of switch links
+  $items = array();
+  foreach ($keys as $key => $name) {
+    $link =  l($name, $_GET['q'], array('query' => array(VARIABLE_REALM_SELECTOR_QUERY_PARAM_PREFIX . $realm => $key) + drupal_get_query_parameters()));
+    $items[] = $current == $key ? '<strong>' . $link . '</strong>' : $link;
+  }
+  return array(
+    '#title' => t('Select @realm', array('@realm' => $info['title'])),
+    '#type' => 'item',
+    '#markup' => implode(' | ', $items),
+  );
+}
+
+/**
+ * Turns a list of realms into a string of form [realm1], [realm2], and [realm3].
+ */
+function _variable_realm_admin_realm_names_human($realms) {
+  $realms = array_map('_variable_realm_admin_variable_type_name', $realms);
+  if (count($realms) <= 1) {
+    return reset($realms);
+  }
+  else if (count($realms) == 2) {
+    return reset($realms) . ' ' . t('and') . ' ' . next($realms);
+  }
+  else {
+    $last = array_pop($realms);
+    return implode(', ', $realms) . ', ' . t('and') . ' ' . $last;
+  }
+}
+
diff --git a/variable_realm_admin/variable_realm_admin.info b/variable_realm_admin/variable_realm_admin.info
new file mode 100644
index 0000000..eb306cd
--- /dev/null
+++ b/variable_realm_admin/variable_realm_admin.info
@@ -0,0 +1,6 @@
+name = Variable realm admin
+description = Makes existing configuration pages aware of variable realms
+dependencies[] = variable
+dependencies[] = variable_realm
+package = Variable
+core = 7.x
diff --git a/variable_realm_admin/variable_realm_admin.module b/variable_realm_admin/variable_realm_admin.module
new file mode 100644
index 0000000..dbcfa91
--- /dev/null
+++ b/variable_realm_admin/variable_realm_admin.module
@@ -0,0 +1,281 @@
+<?php
+/**
+ * @file
+ * Variable Realms Admin module
+ */
+
+/**
+ * Query parameter prefix for realm switcher.
+ */
+define('VARIABLE_REALM_SELECTOR_QUERY_PARAM_PREFIX', 'realm-');
+
+/**
+ * Implements hook_menu().
+ */
+function variable_realm_admin_menu() {
+  variable_realm_admin_info();
+
+  $items = array();
+  $items['admin/config/system/variable/realm'] = array(
+    'title' => 'Realms',
+    'description' => 'Configure realms.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('variable_realm_admin_realm_overview'),
+    'file' => 'realm.overview.inc',
+    'file path' => drupal_get_path('module', 'variable_realm_admin') . '/include',
+    'access arguments' => array('administer site configuration'),
+    'type' => MENU_LOCAL_TASK,
+  );
+  $items['admin/config/system/variable/realm/overview'] = array(
+    'title' => 'Overview',
+    'description' => 'Configure realms.',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => -10
+  );
+
+  foreach (variable_realm_info() as $realm => $info) {
+    if (!variable_realm_admin_has_settings_ui($realm)) continue;
+    $items['admin/config/system/variable/realm/' . $realm] = array(
+      'title' => $info['title'],
+      'description' => 'Configure realm variables.',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('variable_realm_admin_realm_settings', $realm),
+      'access arguments' => array('administer site configuration'),
+      'file' => 'realm.settings.inc',
+      'file path' => drupal_get_path('module', 'variable_realm_admin') . '/include',
+      'type' => MENU_LOCAL_TASK,
+    );
+  }
+
+  return $items;
+}
+
+/**
+ * Implements hook_hook_info().
+ *
+ * @todo move hook_variable_realm_switch to variable_realm module?
+ */
+function variable_realm_admin_hook_info() {
+  // Alter the variables list when it is loaded
+  $hooks['variable_realm_variables_alter'] = array(
+    'group' => 'variable',
+  );
+  // Allow other modules to act on update of variables list
+  $hooks['variable_realm_variables_update'] = array(
+    'group' => 'variable',
+  );
+  // Allow other modules to act on realm switching
+  $hooks['variable_realm_switch'] = array(
+    'group' => 'variable',
+  );
+  // Allow other modules to adjust the realms info block printed above system
+  // forms (includes realm switchers).
+  $hooks['variable_realm_forms_infoblock_alter'] = array(
+    'group' => 'variable',
+  );
+  return $hooks;
+}
+
+/**
+ * Load helper functions for accessing variable realm information.
+ */
+function variable_realm_admin_info() {
+  module_load_include('inc', 'variable_realm_admin', 'include/realm.info');
+}
+
+/**
+ * Implements hook_form_alter().
+ */
+function variable_realm_admin_form_alter(&$form, &$form_state, $form_id) {
+  if (isset($form['#theme']) && $form['#theme'] == 'system_settings_form') {
+    variable_realm_admin_info();
+    module_load_include('inc', 'variable_realm_admin', 'include/system.forms');
+    variable_realm_admin_system_forms_alter($form, $form_state, $form_id);
+  }
+}
+
+/**
+ * Implements hook_module_implements_alter().
+ *
+ * Move variable_realm_admin_form_alter() to the end of the list to be able to
+ * act on variables added during hook_form_alter().
+ *
+ * @param $implementations
+ *   All implementations of the given hook.
+ * @param $hook
+ *   Name of the hook.
+ */
+function variable_realm_admin_module_implements_alter(&$implementations, $hook) {
+  if ($hook == 'form_alter') {
+    // move own hook to end
+    $group = $implementations['variable_realm_admin'];
+    unset($implementations['variable_realm_admin']);
+    $implementations['variable_realm_admin'] = $group;
+
+    // remove i18n_variable_form_alter, because we take care of things now :)
+    unset($implementations['i18n_variable']);
+  }
+}
+
+/**
+ * Implements hook_boot().
+ *
+ * The only reason for this implementation is, so that this module is loaded at
+ * bootstrap level, which puts us at the same level as the i18n_variable
+ * module. Without bootstrap level, it is not possible to properly modify
+ * i18n_variable hook implementations in hook_module_implements_alter().
+ */
+function variable_realm_admin_boot() {
+}
+
+/**
+ * Implements hook_init().
+ *
+ * Switch active realm if respective URL parameter is set. This is required for
+ * the realm switching functionality on system forms.
+ *
+ * @see variable_realm_admin_forms_realm_selector()
+ */
+function variable_realm_admin_init() {
+  foreach (variable_realm_info() as $realm => $info) {
+    if (!empty($_GET[VARIABLE_REALM_SELECTOR_QUERY_PARAM_PREFIX . $realm])) {
+      $key = $_GET[VARIABLE_REALM_SELECTOR_QUERY_PARAM_PREFIX . $realm];
+      $switched = variable_realm_admin_switch($realm, $key);
+      if (!$switched) {
+        unset($_GET[VARIABLE_REALM_SELECTOR_QUERY_PARAM_PREFIX . $realm]);
+      }
+    }
+  }
+}
+
+/**
+ * Switch given realm to given key, unless already active.
+ *
+ * Invokes hook_variable_realm_switch() after a successful switch.
+ */
+function variable_realm_admin_switch($realm, $key) {
+  $current_realms = variable_realm_current();
+
+  // check whether switch is necessary
+  if ($key && $current_realms[$realm] != $key) {
+    $variables = variable_store($realm, $key);
+    variable_realm_add($realm, $key, $variables);
+    variable_realm_switch($realm, $key);
+    module_invoke_all('variable_realm_switch', $realm, $key);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * Determines the name (prefix) of variable(s) which store the lists of realm-
+ * specific variable names.
+ *
+ * @param $realm
+ *   The name of the realm.
+ */
+function variable_realm_admin_variables_list_name($realm, $suffix = 'list') {
+  $info = variable_realm_info($realm);
+  $prefix = isset($info['settings']['config prefix']) ? $info['settings']['config prefix'] : 'variable_realm_' . $realm . '_variables';
+  return $prefix . '_' . $suffix;
+}
+
+/**
+ * Get list of variables for given realm or check whether a variable belongs to
+ * the given realm. Returns low-level variable names.
+ *
+ * @param $realm
+ *   The name of the realm.
+ * @param $name
+ *   The name of a variable.
+ */
+function variable_realm_admin_variables_list($realm, $name = NULL) {
+  static $variables;
+  if (!isset($variables)) {
+    // Note that variables being a global static, any other module can initialize or alter it.
+    $variables = &drupal_static(__FUNCTION__, array());
+  }
+  if (!isset($variables[$realm])) {
+    $variable_name = variable_realm_admin_variables_list_name($realm);
+    $variables[$realm] = variable_get($variable_name, array());
+  }
+  return $name ? in_array($name, $variables[$realm]) : $variables[$realm];
+}
+
+/**
+ * Finds a realm for the given variable. If a variable is assigned to
+ * multiple realms, the realm with the highest weight is returned. Returns NULL
+ * if there is no realm assigned.
+ *
+ * @param $name
+ *   The variable name.
+ * @return string
+ *   The realm of the variable, or NULL if there is none.
+ */
+function variable_realm_admin_find_realm($name) {
+  // get list of realms (ordered descending by weight)
+  $realms = array_reverse(variable_realm_weight());
+
+  foreach ($realms as $realm) {
+    if (variable_realm_admin_variables_list($realm, $name)) {
+      return $realm;
+    }
+  }
+  return NULL;
+}
+
+/**
+ * Get or set the list of high-level variables for a given realm.
+ *
+ * If a new set of variable names is given, this function will automatically
+ * update the respective low-level list of variables provided by
+ * variable_realm_admin_variables_list().
+ *
+ * @see variable_realm_admin_realm_settings_submit().
+ *
+ * @param $realm
+ *   The name of the realm.
+ * @param $data
+ *   A new list of high-level variable names.
+ */
+function variable_realm_admin_variables_conf($realm, $data = NULL) {
+  $confname = variable_realm_admin_variables_list_name($realm, 'conf');
+
+  if (isset($data)) {
+    // Save high-level variable names
+    variable_set($confname, $data);
+
+    // Rebuild low-level variables list
+    variable_realm_admin_variables_list_update($realm, $data);
+
+    // Notify other modules
+    module_invoke_all('variable_realm_variables_update', $realm, $data);
+  }
+
+  return variable_get($confname, array());
+}
+
+/**
+ * Updates the low-level list of selected variables for the given realm from a
+ * list of high level variables. Also automatically removes any old variable
+ * values.
+ *
+ * @param $realm
+ *   The variable realm.
+ * @param $conf
+ *   The selected high-level list of variables.
+ */
+function variable_realm_admin_variables_list_update($realm, $conf) {
+  // Spawn multiple variables and translate into actual variables
+  $new_list = variable_children($conf);
+
+  // Save new list
+  variable_set(variable_realm_admin_variables_list_name($realm), $new_list);
+
+  // Delete variables from store that are not in the new list.
+  $old_list = variable_store_list_all($realm, NULL);
+  foreach (array_diff($old_list, $new_list) as $name) {
+    variable_store_delete_all($realm, NULL, $name);
+    drupal_set_message(t('Deleted existing values of %name from %realm variables.', array('%name' => $name, '%realm' => $realm)));
+  }
+}
diff --git a/variable_realm_admin/variable_realm_admin.variable.inc b/variable_realm_admin/variable_realm_admin.variable.inc
new file mode 100644
index 0000000..07132b7
--- /dev/null
+++ b/variable_realm_admin/variable_realm_admin.variable.inc
@@ -0,0 +1,107 @@
+<?php
+/**
+ * @file
+ * Variable Realms Admin module
+ */
+
+/**
+ * Implements hook_variable_info().
+ */
+function variable_realm_admin_variable_info() {
+  variable_realm_admin_info();
+
+  $variables = array();
+  foreach (variable_realm_info() as $realm => $info) {
+    // Only provide the high level *_conf variable if there is a UI for setting it.
+    if (variable_realm_admin_has_settings_ui($realm)) {
+      $conf = variable_realm_admin_variables_list_name($realm, 'conf');
+      $variables[$conf] = array(
+        'title' => t('@realm variables, high-level variable names.', array('@realm' => $info['title'])),
+        'type' => 'array',
+        'group' => 'variable',
+      );
+    }
+    // Always provide the low level *_list variable as long as the realm has settings.
+    if (variable_realm_admin_has_settings($realm)) {
+      $list = variable_realm_admin_variables_list_name($realm, 'list');
+      $variables[$list] = array(
+        'title' => t('@realm variables, real variable names.', array('@realm' => $info['title'])),
+        'type' => 'array',
+        'group' => 'variable',
+      );
+    }
+  }
+  return $variables;
+}
+
+/**
+ * Implements hook_variable_realm_info_alter().
+ *
+ * @todo move into i18n_variable module
+ * @todo add documentation to variable_realm
+ */
+function variable_realm_admin_variable_realm_info_alter(&$info) {
+  if (isset($info['language'])) {
+
+    $info['language'] += array(
+      // Callback which is used to determine the default key, e.g. the default
+      // language code for the language realm.
+      'default key callback' => 'language_default',
+      'default key arguments' => array('language'),
+
+      'settings' => array(
+        // Used for storing selected variables belonging to realm; actual variables come in two forms: 
+        // - [config prefix]_conf : list of high-level variable names
+        // - [config prefix]_list : list of real variable names
+        'config prefix' => 'i18n_variable',
+
+        // The variable key needs to be set for respective variables in variable
+        // info for the variables to show up in the configuration form for this
+        // realm.
+        'variable key' => 'localize',
+
+        // Whether to allow configuration pages for variable settings. Defaults to
+        // TRUE. Can be disabled for generated realms, e.g. realm unions.
+        'admin' => TRUE,
+      ),
+      // A human name for variables which are dependent on this realm. Defaults
+      // to "[title] variable". Used to highlight form elements as belonging to
+      // this realm.
+      'variable name' => 'multilingual variable',
+
+      // A human name for variables which are dependent on this realm (plural
+      // form). Defaults to "[title] variables".
+      'variable name plural' => 'multilingual variables',
+
+      // Values related to the modification of system forms
+      'forms' => array(
+        // A callback used for generating switch links for system forms.
+        'switcher callback' => 'variable_realm_admin_forms_switcher',
+        'switcher arguments' => array(),
+
+        // A css name which is attached to form elements belonging to this realm.
+        'variable css' => 'i18n-variable',
+      ),
+    );
+  }
+
+  // strings for potx
+  t('multilingual variable');
+  t('multilingual variables');
+}
+
+/**
+ * Implements hook_variable_realm_variables_alter().
+ *
+ * Add support for legacy $conf['i18n_variables'] array on behave of i18n_variable module.
+ */
+function i18n_variable_variable_realm_variables_alter(&$variables, $realm) {
+  if ($realm == 'i18n') {
+    $conf = variable_get('i18n_variables', array());
+    $variables += $conf;
+  }
+}
+
+
+
+
