diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 92f6cf2..b04e0f1 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,5 +1,6 @@
 autoassignole x.x-x.x, xxxx-xx-xx
 ---------------------------------------
+Issue #2045659 by claudiu.cristea: Featurify
 
 
 autoassignole 7.x-1.0-beta5, xxxx-xx-xx
diff --git a/autoassignrole.admin.inc b/autoassignrole.admin.inc
index 239af3a..2efdfc8 100644
--- a/autoassignrole.admin.inc
+++ b/autoassignrole.admin.inc
@@ -54,6 +54,7 @@ function autoassignrole_auto_settings() {
   // user by Drupal.
   $roles = user_roles(TRUE);
   unset($roles[DRUPAL_AUTHENTICATED_RID]);
+  $roles = drupal_map_assoc(array_values($roles));
 
   if ($roles) {
     $form['autoassignrole_auto_roles'] = array(
@@ -87,6 +88,7 @@ function autoassignrole_user_settings() {
   // user by Drupal.
   $roles = user_roles(TRUE);
   unset($roles[DRUPAL_AUTHENTICATED_RID]);
+  $roles = drupal_map_assoc($roles);
 
   if ($roles) {
     $form['autoassignrole_user_roles'] = array(
@@ -176,80 +178,65 @@ function autoassignrole_user_settings() {
  *
  * Form to edit or add role-specific pages.
  */
-function autoassignrole_page_form($form, &$form_state, $op = 'add', $id = 0) {
+function autoassignrole_page_form($form, &$form_state, $op = 'add', $name = NULL) {
   $roles = user_roles(TRUE);
   unset($roles[DRUPAL_AUTHENTICATED_RID]);
+  $roles = drupal_map_assoc($roles);
 
-  $form = array();
-
-  switch ($op) {
-    case 'add':
-      $title = t('Add a new role page');
-      $submit_value = t('Add');
-      break;
-
-    case 'edit':
-      $title = t('Edit role page');
-      $submit_value = t('Save');
-      break;
+  if ($op == 'add') {
+    $page = (object) array('name' => '', 'title' => '', 'path' => '', 'roles' => array(), 'menu' => '', 'display' => '');
   }
-
-  $form['rid_page'] = array(
-    '#type' => 'fieldset',
-    '#title' => $title,
-  );
-
-  $form['rid_page']['op_term'] = array(
-    '#type' => 'hidden',
-    '#value' => $op,
-  );
-
-  if ($op == 'edit') {
-    $form['rid_page']['id'] = array(
-      '#type' => 'hidden',
-      '#value' => $id,
-    );
-    if ($id > 0) {
-      $page = autoassignrole_get_page($id);
-    }
+  else {
+    $page = autoassignrole_get_page($name);
+    $page->roles = drupal_map_assoc(unserialize($page->roles));
   }
 
-  $form['rid_page']['roles'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Role'),
-    '#description' => t('Select the roles this page will assign'),
-    '#options' => $roles,
-    '#required' => TRUE,
-    '#default_value' => isset($page->rids) ? unserialize($page->rids) : array(),
+  $form['operation'] = array(
+    '#type' => 'value',
+    '#value' => $op,
   );
-
-  $form['rid_page']['title'] = array(
+  $form['title'] = array(
     '#type' => 'textfield',
     '#title' => t('Page Title'),
     '#description' => t('Enter the title of the page'),
     '#size' => 60,
     '#required' => TRUE,
-    '#default_value' => isset($page->title) ? $page->title : "",
+    '#default_value' => $page->title,
   );
-
-  $form['rid_page']['path'] = array(
+  $form['name'] = array(
+    '#type' => 'machine_name',
+    '#default_value' => $page->name,
+    '#disabled' => $op == 'edit',
+    '#machine_name' => array(
+      'exists' => 'autoassignrole_get_page',
+      'source' => array('title'),
+    ),
+    '#required' => TRUE,
+  );
+  $form['roles'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Role'),
+    '#description' => t('Select the roles this page will assign'),
+    '#options' => $roles,
+    '#required' => TRUE,
+    '#default_value' => $page->roles,
+  );
+  $form['path'] = array(
     '#type' => 'textfield',
     '#title' => t('Page Path'),
     '#description' => t('Enter the Drupal path for the registration page for this role. This is a relative path based on your Drupal installation.'),
     '#size' => 60,
     '#required' => TRUE,
-    '#default_value' => isset($page->path) ? $page->path : "",
+    '#default_value' => $page->path,
   );
-
-  $form['rid_page']['menu'] = array(
+  $form['menu'] = array(
     '#type' => 'select',
     '#title' => t('Menu'),
     '#description' => t('Which parent menu item should these pages appear under? This will only apply if you choose the "Standard" display option below.'),
     '#options' => menu_get_menus(),
-    '#default_value' => isset($page->menu) ? $page->menu : "",
+    '#default_value' => $page->menu,
   );
-
-  $form['rid_page']['display'] = array(
+  $form['display'] = array(
     '#type' => 'select',
     '#title' => t('Display type'),
     '#description' => t('Choose the way you would like these pages to be displayed.<br /><em>Standard</em> is equivalent to the core Drupal log in/ registration form, with tabs along the top.<br /><em>Individual</em> is a separate page without tabs.'),
@@ -257,12 +244,12 @@ function autoassignrole_page_form($form, &$form_state, $op = 'add', $id = 0) {
       AUTOASSIGNROLE_PAGE_DISPLAY_STANDARD => t('Standard'),
       AUTOASSIGNROLE_PAGE_DISPLAY_INDIVIDUAL => t('Individual'),
     ),
-    '#default_value' => isset($page->display) ? $page->display : "",
+    '#default_value' => $page->display,
   );
 
   $form['submit'] = array(
     '#type' => 'submit',
-    '#value' => $submit_value,
+    '#value' => $op == 'add' ? t('Add') : t('Save'),
   );
 
   return $form;
@@ -302,85 +289,33 @@ function autoassignrole_page_form_validate($form_id, &$form_state) {
  * Implements hook_form_submit().
  */
 function autoassignrole_page_form_submit($form_id, &$form_state) {
-  $page = array(
-    'rids' => serialize($form_state['values']['roles']),
-    'path' => $form_state['values']['path'],
-    'menu' => $form_state['values']['menu'],
-    'title' => $form_state['values']['title'],
-    'display' => $form_state['values']['display'],
+  $values =& $form_state['values'];
+  $is_new = $values['operation'] == 'add';
+
+  $page = (object) array(
+    'name' => $values['name'],
+    'roles' => serialize(array_keys(array_filter($values['roles']))),
+    'path' => $values['path'],
+    'menu' => $values['menu'],
+    'title' => $values['title'],
+    'display' => $values['display'],
   );
 
-  $return = FALSE;
-  $op = $form_state['values']['op_term'];
-  switch ($op) {
-    case 'add':
-      $return = autoassignrole_add_page($page);
-      $operation = 'Created';
-      break;
-
-    case 'edit':
-      $id = $form_state['values']['id'];
-      $return = autoassignrole_update_page($page, $id);
-      $operation = 'Updated';
-      break;
-  }
+  $return = drupal_write_record('autoassignrole_page', $page, $is_new ? array() : 'name');
 
-  if ($return) {
+  $ops = array(FALSE => t('updated'), TRUE => t('created'));
+  $op = $ops[$is_new];
+  if ($return !== FALSE) {
     menu_rebuild();
-    drupal_set_message(t('Successfully @operation Page @page', array('@operation' => $operation, '@page' => $page['title'])));
+    drupal_set_message(t('Successfully @operation Page @page', array('@operation' => $op, '@page' => $page->title)));
     drupal_goto('admin/config/people/autoassignrole/pages');
   }
   else {
-    drupal_set_message(t('Unfortunately there has been an error and this page could not be %op', array('%op' => drupal_strtolower($operation))), 'error');
+    drupal_set_message(t('Unfortunately there has been an error and this page could not be %op', array('%op' => $op)), 'error');
   }
 }
 
 /**
- * Function to add role-specific page.
- *
- * @param array $page
- *   The details of the page to be added.
- *
- * @return bool
- *   Return true if successful | false.
- */
-function autoassignrole_add_page($page) {
-  $return_value = FALSE;
-  try {
-    $return_value = db_insert('autoassignrole_page')->fields($page)->execute();
-  }
-  catch (Exception $e) {
-    drupal_set_message(t('db_insert failed. Message = %message, query = %query', array('%message' => $e->getMessage(), '%query' => $e->query_string)), 'error');
-  }
-  return $return_value;
-}
-
-/**
- * Function to update existing role-specific page.
- *
- * @param array $page
- *   The details of the page to be added.
- * @param int $id
- *   The id of the page to be updated.
- *
- * @return bool
- *   Return true if successful | false.
- */
-function autoassignrole_update_page($page, $id) {
-  $return_value = FALSE;
-  try {
-    $return_value = db_update('autoassignrole_page')
-      ->fields($page)
-      ->condition('rid_page_id', $id)
-      ->execute();
-  }
-  catch (Exception $e) {
-    drupal_set_message(t('db_update failed. Message = %message, query = %query', array('%message' => $e->getMessage(), '%query' => $e->query_string)), 'error');
-  }
-  return $return_value;
-}
-
-/**
  * Function to delete role-specific page.
  */
 function autoassignrole_page_delete_confirm($form, &$form_state, $page_id) {
@@ -398,7 +333,7 @@ function autoassignrole_page_delete_confirm($form, &$form_state, $page_id) {
  */
 function autoassignrole_page_delete_confirm_submit($form, &$form_state) {
   db_delete('autoassignrole_page')
-    ->condition('rid_page_id', (int) $form_state['values']['page_id'])
+    ->condition('name', $form_state['values']['page_id'])
     ->execute();
   menu_rebuild();
   drupal_set_message(t('Successfully deleted page'));
@@ -413,8 +348,9 @@ function autoassignrole_page_delete_confirm_submit($form, &$form_state) {
  */
 function autoassignrole_list_pages() {
   $header = array(
+    array('data' => t('Name'), 'field' => 'name'),
     array('data' => 'Title', 'field' => 'title', 'sort' => 'asc'),
-    array('data' => 'Roles', 'field' => 'rids'),
+    array('data' => 'Roles', 'field' => 'roles'),
     array('data' => 'Path', 'field' => 'path'),
     array('data' => 'Operations'),
   );
@@ -425,8 +361,8 @@ function autoassignrole_list_pages() {
     ->extend('TableSort')
     ->orderByHeader($header)
     ->fields('p', array(
-        'rid_page_id',
-        'rids',
+        'name',
+        'roles',
         'title',
         'path',
         )
@@ -434,26 +370,15 @@ function autoassignrole_list_pages() {
 
   $results = $query->execute();
 
-  $user_roles = user_roles(TRUE);
   $rows = array();
   foreach ($results as $page) {
-    $rids = unserialize($page->rids);
-    $roles = '';
-    $count = 0;
-    foreach ($rids as $rid) {
-      if (!empty($rid) && array_key_exists($rid, $user_roles)) {
-        if ($count != 0) {
-          $roles .= ', ';
-        }
-        $roles .= $user_roles[$rid];
-        $count++;
-      }
-    }
-    $edit = l(t('Edit'), 'admin/config/people/autoassignrole/pages/edit/' . $page->rid_page_id);
-    $delete = l(t('Delete'), 'admin/config/people/autoassignrole/pages/delete/' . $page->rid_page_id);
+    $roles = implode(', ', unserialize($page->roles));
+    $edit = l(t('Edit'), 'admin/config/people/autoassignrole/pages/edit/' . $page->name);
+    $delete = l(t('Delete'), 'admin/config/people/autoassignrole/pages/delete/' . $page->name);
     $links = $edit . ' | ' . $delete;
     $rows[] = array(
       'data' => array(
+        $page->name,
         $page->title,
         $roles,
         $page->path,
diff --git a/autoassignrole.info b/autoassignrole.info
index 717d6c1..d13300c 100644
--- a/autoassignrole.info
+++ b/autoassignrole.info
@@ -3,6 +3,7 @@ description = Automatically assign a role to new users.
 core = 7.x
 configure=admin/config/people/autoassignrole
 version = VERSION
+dependencies[] = ctools
 files[] = autoassignrole.module
 files[] = autoassignrole.admin.inc
 files[] = autoassignrole.test
diff --git a/autoassignrole.install b/autoassignrole.install
index 453581f..4a58f2c 100644
--- a/autoassignrole.install
+++ b/autoassignrole.install
@@ -43,16 +43,16 @@ function autoassignrole_schema() {
   $schema['autoassignrole_page'] = array(
     'description' => 'Stores autoassignrole page information',
     'fields' => array(
-      'rid_page_id' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'The unique identifier for this role page',
-      ),
-      'rids' => array(
+      'name' => array(
         'type' => 'varchar',
         'length' => 255,
         'not null' => TRUE,
-        'description' => 'The role IDs for this page',
+        'description' => 'The unique machine name of this page.'
+      ),
+      'roles' => array(
+        'type' => 'text',
+        'not null' => FALSE,
+        'description' => 'The roles for this page',
       ),
       'path' => array(
         'type' => 'text',
@@ -76,7 +76,20 @@ function autoassignrole_schema() {
         'description' => 'The display type for this page',
       ),
     ),
-    'primary key' => array('rid_page_id'),
+    'primary key' => array('name'),
+    'export' => array(
+      'key' => 'name',
+      'key name' => 'Machine name',
+      'primary key' => 'name',
+      'identifier' => 'autoassignrole',
+      'default hook' => 'autoassignrole_page_default',
+      'api' => array(
+        'owner' => 'autoassignrole',
+        'api' => 'autoassignrole',
+        'minimum_version' => 1,
+        'current_version' => 1,
+      ),
+    ),
   );
 
   return $schema;
@@ -257,3 +270,64 @@ function autoassignrole_update_7104() {
     variable_set('autoassignrole_user_description', $defaults);
   }
 }
+
+/**
+ * Features integration.
+ */
+function autoassignrole_update_7105() {
+  $roles = user_roles(TRUE);
+  foreach (array('autoassignrole_auto_roles', 'autoassignrole_user_roles') as $variable) {
+    $stored_roles = array();
+    foreach (variable_get($variable, array()) as $rid => $checked) {
+      $stored_roles[$roles[$rid]] = $checked ? $roles[$rid] : 0;
+    }
+    variable_set($variable, $stored_roles);
+  }
+
+  // Add a machine name to {autoassignrole_page} table, to make it exportable.
+  db_add_field('autoassignrole_page', 'name', array(
+    'type' => 'varchar',
+    'length' => 255,
+    'not null' => FALSE,
+    'description' => 'The unique machine name of this page.'
+  ));
+  // Add a larger column 'roles' to replace 'rids'.
+  db_add_field('autoassignrole_page', 'roles', array(
+    'type' => 'text',
+    'not null' => FALSE,
+    'description' => 'The roles for this page',
+  ));
+
+  // Convert the {autoassignrole_page} table data.
+  foreach (db_query("SELECT * FROM {autoassignrole_page}")->fetchAll() as $row) {
+    $name = preg_replace('@[^a-z0-9]+@', '_', drupal_strtolower($row->title));
+    $suffixed = $name;
+    $count = 0;
+    // Handle possible duplicates in 'title'.
+    while (db_query("SELECT 1 FROM {autoassignrole_page} WHERE name = :name AND rid_page_id <> :id", array(':name' => $suffixed, ':id' => $row->rid_page_id))->fetchField()) {
+      $suffixed = $name . '_' . $count;
+      $count++;
+    }
+    $rids = serialize(array_values(array_filter(array_map(function ($rid) use ($roles) {
+      return empty($roles[$rid]) ? FALSE : $roles[$rid];
+    }, unserialize($row->rids)))));
+    db_update('autoassignrole_page')
+      ->fields(array('name' => $suffixed, 'roles' => $rids))
+      ->condition('rid_page_id', $row->rid_page_id)
+      ->execute();
+  }
+
+  // Drop legacy fields and indexes.
+  db_drop_field('autoassignrole_page', 'rid_page_id');
+  db_drop_field('autoassignrole_page', 'rids');
+  // Make 'name' primary key.
+  db_add_primary_key('autoassignrole_page', array('name'));
+
+  // Fix the 'not null' problem.
+  db_change_field('autoassignrole_page', 'name', 'name', array(
+    'type' => 'varchar',
+    'length' => 255,
+    'not null' => TRUE,
+    'description' => 'The unique machine name of this page.'
+  ));
+}
diff --git a/autoassignrole.module b/autoassignrole.module
index c350488..1d4cd15 100644
--- a/autoassignrole.module
+++ b/autoassignrole.module
@@ -92,12 +92,12 @@ function autoassignrole_menu() {
 
   $pages = autoassignrole_get_pages();
   foreach ($pages as $page) {
-    $rids = unserialize($page->rids);
+    $roles = drupal_map_assoc(unserialize($page->roles));
     switch ($page->display) {
       case AUTOASSIGNROLE_PAGE_DISPLAY_STANDARD:
         $items[$page->path] = array(
           'title' => check_plain($page->title),
-          'page arguments' => array($rids),
+          'page arguments' => array($roles),
           'page callback' => 'autoassignrole_register',
           'access callback' => 'user_register_access',
           'file' => 'autoassignrole.paths.inc',
@@ -106,7 +106,7 @@ function autoassignrole_menu() {
         );
         $items[$page->path . '/register'] = array(
           'title' => 'Register',
-          'page arguments' => array($rids),
+          'page arguments' => array($roles),
           'page callback' => 'autoassignrole_register',
           'access callback' => 'user_register_access',
           'file' => 'autoassignrole.paths.inc',
@@ -131,7 +131,7 @@ function autoassignrole_menu() {
       case AUTOASSIGNROLE_PAGE_DISPLAY_INDIVIDUAL:
         $items[$page->path] = array(
           'title' => check_plain($page->title),
-          'page arguments' => array($rids),
+          'page arguments' => array($roles),
           'page callback' => 'autoassignrole_register',
           'access callback' => 'user_register_access',
           'file' => 'autoassignrole.paths.inc',
@@ -139,7 +139,7 @@ function autoassignrole_menu() {
         );
         $items[$page->path . '/register'] = array(
           'title' => 'Register',
-          'page arguments' => array($rids),
+          'page arguments' => array($roles),
           'page callback' => 'autoassignrole_register',
           'access callback' => 'user_register_access',
           'file' => 'autoassignrole.paths.inc',
@@ -169,7 +169,7 @@ function autoassignrole_menu() {
 /**
  * Finds any role ids attached to current page, if any.
  */
-function autoassignrole_get_active_path_rid() {
+function autoassignrole_get_active_path_roles() {
   $item = menu_get_item();
   if ($item['page_callback'] == 'autoassignrole_register') {
     return $item['page_arguments'][0];
@@ -185,7 +185,7 @@ function autoassignrole_user_presave(&$edit, $account, $category) {
   // Make sure we only assign roles automatically when enabled to do so.
   if (variable_get('autoassignrole_auto_active', 0) || variable_get("autoassignrole_user_active", 0)
     || (variable_get('autoassignrole_admin_active', 0) && user_access('administer users'))
-    || autoassignrole_get_active_path_rid()) {
+    || autoassignrole_get_active_path_roles()) {
     // Use case http://drupal.org/node/944864
     // Only assign roles if this is a new account.
     if (isset($account->is_new) && !empty($account->is_new)) {
@@ -196,7 +196,7 @@ function autoassignrole_user_presave(&$edit, $account, $category) {
       // Add in automatic roles.
       if ((variable_get('autoassignrole_auto_active', 0) && !user_access('administer users'))
         || (variable_get('autoassignrole_admin_active', 0) && user_access('administer users'))) {
-        $roles_to_add += array_intersect_key($user_roles, array_filter(variable_get('autoassignrole_auto_roles', array())));
+        $roles_to_add += array_intersect_key($user_roles, _autoassignrole_convert_roles(variable_get('autoassignrole_auto_roles', array())));
       }
 
       // Add in user selected roles if any.
@@ -205,13 +205,13 @@ function autoassignrole_user_presave(&$edit, $account, $category) {
         if (!is_array($edit['user_roles'])) {
           $edit['user_roles'] = array($edit['user_roles'] => $edit['user_roles']);
         }
-        $roles_to_add += array_intersect_key($user_roles, array_filter($edit['user_roles']));
+        $roles_to_add += array_intersect_key($user_roles, _autoassignrole_convert_roles($edit['user_roles']));
       }
 
       // Add page-specific roles.
-      $page_rids = autoassignrole_get_active_path_rid();
-      if ($page_rids) {
-        $roles_to_add = array_intersect_key($user_roles, array_filter($page_rids));
+      $page_roles = autoassignrole_get_active_path_roles();
+      if ($page_roles) {
+        $roles_to_add = array_intersect_key($user_roles, _autoassignrole_convert_roles($page_roles));
       }
 
       // Make sure the roles key exists.
@@ -230,10 +230,10 @@ function autoassignrole_user_presave(&$edit, $account, $category) {
  */
 function autoassignrole_form_user_register_form_alter(&$form, &$form_state) {
   if (variable_get("autoassignrole_user_active", 0) && !user_access('administer users')
-    && !autoassignrole_get_active_path_rid()) {
+    && !autoassignrole_get_active_path_roles()) {
 
     // Get a list of valid roles that can be selected.
-    $roles = array_intersect_key(user_roles(TRUE), array_filter(variable_get('autoassignrole_user_roles', array())));
+    $roles = array_intersect_key(user_roles(TRUE), _autoassignrole_convert_roles(variable_get('autoassignrole_user_roles', array())));
 
     if ($roles) {
       $form['autoassignrole_user'] = array(
@@ -253,6 +253,7 @@ function autoassignrole_form_user_register_form_alter(&$form, &$form_state) {
       else {
         drupal_sort_weight($roles, $roles);
       }
+      $roles = drupal_map_assoc($roles);
 
       $multiple = variable_get('autoassignrole_user_multiple', 0);
       $user_selection = variable_get('autoassignrole_user_selection', AUTOASSIGNROLE_ELEMENT_RADIO_CHECKBOX);
@@ -305,7 +306,7 @@ function autoassignrole_get_pages() {
  */
 function autoassignrole_get_page($id) {
   $query = _autoasignrole_get_page_query();
-  $query->condition('rid_page_id', $id, '=');
+  $query->condition('name', $id, '=');
   return $query->execute()->fetchObject();
 }
 
@@ -318,7 +319,8 @@ function autoassignrole_get_page($id) {
 function _autoasignrole_get_page_query() {
   return db_select('autoassignrole_page', 'p')
     ->fields('p', array(
-      'rids',
+      'name',
+      'roles',
       'path',
       'title',
       'menu',
@@ -339,4 +341,69 @@ function _autoassignrole_get_user_description() {
   );
 
   return variable_get('autoassignrole_user_description', $defaults);
-}
\ No newline at end of file
+}
+
+/**
+ * Converts the a list of roles that have both keys and values as role name to
+ * user_roles() format, taking role IDs as keys.
+ *
+ * @param array $roles
+ *   Roles to be converted.
+ * @return array
+ *   A list of role names keyed by role id.
+ */
+function _autoassignrole_convert_roles(array $roles) {
+  return array_filter(user_roles(TRUE), function ($role) use ($roles) {
+    return !empty($roles[$role]);
+  });
+}
+
+/**
+ * Implements hook_user_role_presave().
+ *
+ * We guess that in an update process the role might been changed, so we store
+ * the existing name before the new one is saved to be compared later.
+ */
+function autoassignrole_user_role_presave($role) {
+  if (!empty($role->rid)) {
+    // We store the existing role name to be used later.
+    $role->existing_name = db_query("SELECT name FROM {role} WHERE rid = :rid", array(':rid' => $role->rid))->fetchField();
+  }
+}
+
+/**
+ * Implements hook_user_role_update().
+ *
+ * Update the 'autoassignrole_auto_roles' to reflect the new role name.
+ */
+function autoassignrole_user_role_update($role) {
+  if ($role->name == $role->existing_name) {
+    return;
+  }
+
+  foreach (array('autoassignrole_auto_roles', 'autoassignrole_user_roles') as $variable) {
+    $stored_roles = array();
+    foreach (variable_get($variable, array()) as $name => $checked) {
+      if ($name == $role->existing_name) {
+        $name = $role->name;
+        $checked = $checked ? $name : 0;
+      }
+      $stored_roles[$name] = $checked;
+    }
+    variable_set($variable, $stored_roles);
+  }
+}
+
+/**
+ * Implements hook_features_pipe_COMPONENT_alter().
+ */
+function autoassignrole_features_pipe_autoassignrole_page_alter(&$pipe, $data, $export) {
+  $variables = db_select('variable', 'v')
+    ->fields('v', array('name'))
+    ->condition('name', db_like('autoassignrole_') . '%', 'LIKE')
+    ->execute()
+    ->fetchCol();
+  foreach ($variables as $variable) {
+    $pipe['variable'][] = $variable;
+  }
+}
diff --git a/autoassignrole.paths.inc b/autoassignrole.paths.inc
index f9a76ee..9cccc17 100644
--- a/autoassignrole.paths.inc
+++ b/autoassignrole.paths.inc
@@ -21,7 +21,7 @@ require_once drupal_get_path('module', 'user') . '/user.pages.inc';
  *
  * $rid is not actually used in the function but by passing it we can find out
  * which roles are meant to be added to the new user by using
- * autoassignrole_get_active_path_rid();
+ * autoassignrole_get_active_path_roles();
  *
  * @see autoassignrole.module
  *
@@ -31,7 +31,7 @@ require_once drupal_get_path('module', 'user') . '/user.pages.inc';
  * @return string
  *   User registration form renderer.
  *
- * @see autoassignrole_get_active_path_rid()
+ * @see autoassignrole_get_active_path_roles()
  */
 function autoassignrole_register($rid) {
   $output = drupal_get_form('user_register_form');
diff --git a/autoassignrole.test b/autoassignrole.test
index 780b8fb..a4e222b 100644
--- a/autoassignrole.test
+++ b/autoassignrole.test
@@ -10,6 +10,7 @@
  */
 class AutoassignroleAdminAutoTestCase extends DrupalWebTestCase {
   protected $admin_user;
+  protected $roles;
 
   public static function getInfo() {
     return array(
@@ -20,7 +21,7 @@ class AutoassignroleAdminAutoTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp('autoassignrole');
+    parent::setUp('autoassignrole', 'ctools');
     $this->admin_user = $this->drupalCreateUser(array(
       'administer autoassignrole',
       'access administration pages',
@@ -163,13 +164,13 @@ class AutoassignroleAdminAutoTestCase extends DrupalWebTestCase {
 
     // Verify that there are roles exposed.
     $this->assertField(
-     'autoassignrole_auto_roles[3]',
+     'autoassignrole_auto_roles[' . $this->roles[3] . ']',
      'Looking for the autoassignrole_auto_roles checkboxes.'
     );
 
     // Verify that a checkbox for each of our valid roles shows on the page.
-    foreach ($this->roles as $rid => $role) {
-      $edit["autoassignrole_auto_roles[$rid]"] = $rid;
+    foreach ($this->roles as $role) {
+      $edit["autoassignrole_auto_roles[$role]"] = $role;
     }
 
     // Check each of our roles and submit the form.
@@ -181,8 +182,8 @@ class AutoassignroleAdminAutoTestCase extends DrupalWebTestCase {
 
     // Verify the checked value was saved for each of our roles.
     $roles = variable_get("autoassignrole_auto_roles", array());
-    foreach ($this->roles as $rid => $role) {
-      $this->assertEqual(TRUE, array_key_exists($rid, $roles), 'Verifying that role (rid:' . $rid . ') was activated.');
+    foreach ($this->roles as $role) {
+      $this->assertEqual(TRUE, array_key_exists($role, $roles), sprintf('Verifying that role %s was activated.', $role));
     }
   }
 }
@@ -202,7 +203,7 @@ class AutoassignroleAdminUserTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp('autoassignrole');
+    parent::setUp('autoassignrole', 'ctools');
     $this->admin_user = $this->drupalCreateUser(array(
       'administer autoassignrole',
       'access administration pages',
@@ -298,13 +299,13 @@ class AutoassignroleAdminUserTestCase extends DrupalWebTestCase {
 
     // Verify that there are roles exposed.
     $this->assertField(
-     'autoassignrole_user_roles[3]',
+     'autoassignrole_user_roles[' . $this->roles[3] . ']',
      'Looking for the autoassignrole_user_roles checkboxes.'
     );
 
     // Verify that a checkbox for each of our valid roles shows on the page.
     foreach ($this->roles as $rid => $role) {
-      $edit["autoassignrole_user_roles[$rid]"] = $rid;
+      $edit["autoassignrole_user_roles[$role]"] = $role;
     }
 
     // Check each of our roles and submit the form.
@@ -317,7 +318,7 @@ class AutoassignroleAdminUserTestCase extends DrupalWebTestCase {
     // Verify the checked value was saved for each of our roles.
     $roles = variable_get("autoassignrole_user_roles", array());
     foreach ($this->roles as $rid => $role) {
-      $this->assertEqual(TRUE, array_key_exists($rid, $roles), 'Verifying that role (rid:' . $rid . ') was activated.');
+      $this->assertEqual(TRUE, array_key_exists($role, $roles), 'Verifying that role "' . $role . '" was activated.');
     }
   }
 
@@ -617,7 +618,7 @@ class AuthassignroleRolePerPathTestCase extends DrupalWebTestCase {
     $this->drupalGet('admin/config/people/autoassignrole/pages/add');
 
     // Verify that there are roles exposed.
-    $role_keys = array_keys($this->roles);
+    $role_keys = array_values($this->roles);
     $this->assertField(
      'roles[' . $role_keys[0] . ']',
      'Looking for the autoassignrole_auto_roles checkboxes.'
@@ -631,12 +632,13 @@ class AuthassignroleRolePerPathTestCase extends DrupalWebTestCase {
           continue;
         }
       }
-      $edit["roles[$rid]"] = $rid;
+      $edit["roles[$role]"] = $role;
     }
 
     // Set the title.
     $this->page_title = $this->randomName();
     $edit['title'] = $this->page_title;
+    $edit['name'] = drupal_strtolower($this->randomName());
     // Set the path.
     $edit['path'] = $this->page_path = 'test/register/' . $this->page_title;
 
@@ -648,7 +650,7 @@ class AuthassignroleRolePerPathTestCase extends DrupalWebTestCase {
     );
 
     // Verify the path has been saved.
-    $this->assertText('Successfully Created Page ' . $this->page_title, 'Verified that path has been created.');
+    $this->assertText('Successfully created Page ' . $this->page_title, 'Verified that path has been created.');
   }
 }
 
@@ -667,7 +669,7 @@ class AutoassignroleAdminRolePerPageTestCase extends AuthassignroleRolePerPathTe
   }
 
   function setUp() {
-    parent::setUp('autoassignrole');
+    parent::setUp('autoassignrole', 'ctools');
     $this->admin_user = $this->drupalCreateUser(array(
       'administer autoassignrole',
       'access administration pages',
@@ -727,6 +729,9 @@ class AutoassignroleAdminRolePerPageTestCase extends AuthassignroleRolePerPathTe
  */
 class AutoassignroleUserCreationTestCase extends DrupalWebTestCase {
   protected $admin_user;
+  protected $rid;
+  protected $roles;
+  protected $role;
 
   public static function getInfo() {
     return array(
@@ -737,10 +742,11 @@ class AutoassignroleUserCreationTestCase extends DrupalWebTestCase {
   }
 
   function setUp() {
-    parent::setUp('autoassignrole');
+    parent::setUp('autoassignrole', 'ctools');
     // Create a random role.
     $this->rid = $this->drupalCreateRole(array(), $this->randomName());
     $this->roles = user_roles(TRUE);
+    $this->role = $this->roles[$this->rid];
     unset($this->roles[DRUPAL_AUTHENTICATED_RID]);
   }
 
@@ -754,7 +760,7 @@ class AutoassignroleUserCreationTestCase extends DrupalWebTestCase {
     // Enable auto assignment for admin users.
     variable_set('autoassignrole_admin_active', 1);
     // Configure to assign our random role.
-    variable_set('autoassignrole_auto_roles', array($this->rid => $this->rid));
+    variable_set('autoassignrole_auto_roles', array($this->role => $this->role));
     // Create a test user.
     $this->test_user = $this->drupalCreateUser();
     // Verify test user has been assigned role.
@@ -772,7 +778,7 @@ class AutoassignroleUserCreationTestCase extends DrupalWebTestCase {
     // Enable auto role assignment.
     variable_set('autoassignrole_auto_active', 0);
     // Configure to assign our random role.
-    variable_set('autoassignrole_auto_roles', array($this->rid => $this->rid));
+    variable_set('autoassignrole_auto_roles', array($this->role => $this->role));
     // Create a test user.
     $this->test_user = $this->drupalCreateUser();
     // Verify test user has been assigned role.
@@ -801,7 +807,7 @@ class AutoassignroleUserCreationRolePerPathTestCase extends AuthassignroleRolePe
   }
 
   function setUp() {
-    parent::setUp('autoassignrole');
+    parent::setUp('autoassignrole', 'ctools');
     $this->admin_user = $this->drupalCreateUser(array(
       'administer permissions',
       'administer users',
