diff --git a/user_prune.admin.inc b/user_prune.admin.inc
index 5647f73..e658e76 100644
--- a/user_prune.admin.inc
+++ b/user_prune.admin.inc
@@ -19,6 +19,19 @@ function user_prune_admin() {
  */
 function user_prune_admin_form() {
 	$form = array();
+  /**
+   * This will generate a list of all the roles and they should return the
+   * id to be used in the submit function.
+   */
+  $query =  db_query('SELECT * FROM {role}');
+  $roleoptions = array();
+  $count = 0;
+  while( $result = db_fetch_object($query) ) {
+    $roleoptions[$result->rid] = $result->name;
+  }
+  unset($roleoptions['1']);//anonymous users don't exist
+  unset($roleoptions['2']);//all users are authenticated.
+  unset($roleoptions['3']);//Shouldn't be pruning admins.
 	
 	$form['never_logged_in'] = array(
 		'#type' => 'fieldset',
@@ -44,6 +57,7 @@ function user_prune_admin_form() {
 		'#default_value' => variable_get('prune_never_registered_limit_unit', 2629744)
 	);
 	
+  
 	$form['has_logged_in'] = array(
 		'#type' => 'fieldset',
 		'#title' => t('Users who have logged in before')
@@ -81,6 +95,15 @@ function user_prune_admin_form() {
 		'#options' => array(31556926 => t('Years'), 2629744 => t('Months'), 604800 => t('Weeks'), 86400 => t('Days'), 3600 => t('Hours')),
 		'#default_value' => variable_get('prune_logged_in_registered_limit_unit', 2629744)
 	);
+  $form['protect'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Protect roles from being deleted.'),
+  );
+  $form['protect']['roles'] = array(
+    '#type' => 'checkboxes',
+    '#options' => $roleoptions,
+    '#default_value' => variable_get('prune_protected_roles', array()),
+  );
 	$form['prune_per_run'] = array(
 		'#type' => 'select',
 		'#title' => t('How many users to delete per run?'),
@@ -115,7 +138,6 @@ function user_prune_admin_form() {
 function user_prune_admin_form_validate($form, &$form_state) {
 	// shortcut
 	$values = $form_state['values'];
-	
 	// check if the text fields are numeric
 	$limit_lengths = array('prune_never_registered_limit_length' => $values['prune_never_registered_limit_length'], 'prune_logged_in_logged_in_limit_length' => $values['prune_logged_in_logged_in_limit_length'], 'prune_logged_in_registered_limit_length' => $values['prune_logged_in_registered_limit_length']);
 	
@@ -162,6 +184,7 @@ function user_prune_admin_form_submit($form, &$form_state) {
 			variable_set('prune_logged_in_registered_limit_unit', $values['prune_logged_in_registered_limit_unit']);
 		}
 		variable_set('prune_per_run', $values['prune_per_run']);
+    variable_set('prune_protected_roles', $values['roles']);
 		
 		drupal_set_message(t('The configuration options have been saved.'));
 	}
@@ -215,6 +238,25 @@ function user_prune_delete($values, $cron = FALSE) {
 		}
 	}
 	
+  $save_roles = array();
+  $save_roles[] = 3; // add administrator role so it is never removed.
+  foreach( element_children($values['roles']) as $rid){
+      if ($values['roles'][$rid] != 0 ) {
+        $save_roles[] = $rid;
+    }
+  }
+  foreach ($uids as $uid) {
+    $query = db_query('SELECT rid FROM {users_roles} WHERE uid = %d', $uid);
+    $roles = array();
+    $count = 0;
+    while( $results = db_result($query) ) {
+      $roles[] = $results;  
+    }
+    $intersections = array_intersect($roles, $save_roles);
+      if (count($intersections) != 0){
+        unset($uids[array_search($uid, $uids)]);
+    }
+  }
 	// check to make sure the number of uids are in the per-run limit and if not force it to be
 	if (count($uids) > $values['prune_per_run']) {
 		$leftover = count($uids) - $values['prune_per_run'];
diff --git a/user_prune.module b/user_prune.module
index c32c9d6..bd83179 100644
--- a/user_prune.module
+++ b/user_prune.module
@@ -40,7 +40,7 @@ function user_prune_cron() {
 	$config['prune_logged_in_registered_limit_length'] = variable_get('prune_logged_in_registered_limit_length', '');
 	$config['prune_logged_in_registered_limit_unit'] = variable_get('prune_logged_in_registered_limit_unit', 2629744);
 	$config['prune_per_run'] = variable_get('prune_per_run', 50);
-	
+	$config['roles'] = variable_get('prune_protected_roles', array());
 	module_load_include('admin.inc', 'user_prune', 'user_prune');
 	
 	user_prune_delete($config, TRUE);
