diff --git a/autoassignrole.admin.inc b/autoassignrole.admin.inc
index 239af3a..dcd4f29 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(
diff --git a/autoassignrole.install b/autoassignrole.install
index 453581f..e9d9447 100644
--- a/autoassignrole.install
+++ b/autoassignrole.install
@@ -257,3 +257,15 @@ function autoassignrole_update_7104() {
     variable_set('autoassignrole_user_description', $defaults);
   }
 }
+
+/**
+ * Converts the role storage from role ID to role name to allow Features export.
+ */
+function autoassignrole_update_7105() {
+  $roles = user_roles(TRUE);
+  $auto_roles = array();
+  foreach (variable_get('autoassignrole_auto_roles', array()) as $rid => $checked) {
+    $auto_roles[$roles[$rid]] = $checked ? $roles[$rid] : 0;
+  }
+  variable_set('autoassignrole_auto_roles', $auto_roles);
+}
diff --git a/autoassignrole.module b/autoassignrole.module
index c350488..29cefb2 100644
--- a/autoassignrole.module
+++ b/autoassignrole.module
@@ -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_get_auto_roles());
       }
 
       // Add in user selected roles if any.
@@ -339,4 +339,50 @@ function _autoassignrole_get_user_description() {
   );
 
   return variable_get('autoassignrole_user_description', $defaults);
-}
\ No newline at end of file
+}
+
+/**
+ * Converts the 'autoassignrole_auto_roles' variable in user_roles(), format,
+ * taking role IDs as keys. The unchecked roles of 'autoassignrole_auto_roles'
+ * variables are filtered out.
+ *
+ * @return array
+ *   A list of role names keyed by role id.
+ */
+function _autoassignrole_get_auto_roles() {
+  $auto_roles = variable_get('autoassignrole_auto_roles', array());
+  return array_filter(user_roles(TRUE), function ($role) use ($auto_roles) {
+    return !empty($auto_roles[$role]);
+  });
+}
+
+/**
+ * Implements hook_user_role_presave().
+ */
+function autoassignrole_user_role_presave($role) {
+  if ($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;
+  }
+
+  $auto_role = array();
+  foreach (variable_get('autoassignrole_auto_roles', array()) as $name => $checked) {
+    if ($name == $role->existing_name) {
+      $name = $role->name;
+      $checked = $checked ? $name : 0;
+    }
+    $auto_role[$name] = $checked;
+  }
+  variable_set('autoassignrole_auto_roles', $auto_role);
+}
diff --git a/autoassignrole.test b/autoassignrole.test
index 780b8fb..0a98155 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(
@@ -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));
     }
   }
 }
@@ -727,6 +728,9 @@ class AutoassignroleAdminRolePerPageTestCase extends AuthassignroleRolePerPathTe
  */
 class AutoassignroleUserCreationTestCase extends DrupalWebTestCase {
   protected $admin_user;
+  protected $rid;
+  protected $roles;
+  protected $role;
 
   public static function getInfo() {
     return array(
@@ -741,6 +745,7 @@ class AutoassignroleUserCreationTestCase extends DrupalWebTestCase {
     // 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 +759,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 +777,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.
