diff --git a/masquerade.css b/masquerade.css
new file mode 100644
index 0000000..ace9987
--- /dev/null
+++ b/masquerade.css
@@ -0,0 +1,3 @@
+div.add-or-remove-shortcuts {
+  display: inline-block;
+}
diff --git a/masquerade.module b/masquerade.module
index 74b007b..29fa74d 100644
--- a/masquerade.module
+++ b/masquerade.module
@@ -114,6 +114,14 @@ function masquerade_menu() {
     'access arguments' => array('unswitch'),
     'type' => MENU_NORMAL_ITEM,
   );
+  $items['masquerade/remove/%/%'] = array(
+    'title' => 'Remove quick switch user',
+    'page callback' => 'masquerade_remove_quick_switch_page',
+    'page arguments' => array(2, 3),
+    'access callback' => 'masquerade_menu_access',
+    'access arguments' => array('remove'),
+    'type' => MENU_CALLBACK,
+  );
   $items['masquerade/autocomplete'] = array(
     'title' => '',
     'page callback' => 'masquerade_autocomplete',
@@ -245,6 +253,9 @@ function masquerade_menu_access($type, $uid = NULL) {
       }
       return !isset($_SESSION['masquerading']) && (user_access('masquerade as user') || user_access('masquerade as admin') || $switch_to_account);
       break;
+    case 'remove':
+      return TRUE;
+      break;
   }
 }
 
@@ -593,12 +604,36 @@ function masquerade_block_1() {
         $account = user_load($switch_user);
         if (isset($account->uid)) {
           $switch_link = 'masquerade/switch/' . $account->uid;
-          if ($account->uid) {
-            $quick_switch_links[] = l($account->name, $switch_link, array('query' => array('token' => drupal_get_token($switch_link))));
-          }
           if ($switch_user == 0) {
             $account->name = variable_get('anonymous', t('Anonymous'));
-            $quick_switch_links[] = l($account->name, $switch_link, array('query' => array('token' => drupal_get_token($switch_link))));
+          }
+          $quick_switch_links[$switch_user] = array(
+            'data' => l($account->name, $switch_link, array('query' => array('token' => drupal_get_token($switch_link)))),
+            'class' => array('uid-' . $switch_user),
+          );
+          if (in_array($switch_user, $user_switches)) {
+            $remove_link = array(
+              '#attached' => array(
+                'css' => array(
+                  drupal_get_path('module', 'shortcut') . '/shortcut.css',
+                  drupal_get_path('module', 'masquerade') . '/masquerade.css'
+                ),
+                'js' => array('misc/ajax.js'),
+              ),
+              '#prefix' => '<div class="add-or-remove-shortcuts remove-shortcut">',
+              '#type' => 'link',
+              '#title' => '<span class="icon"></span><span class="text">' . t('Remove') . '</span>',
+              '#href' => 'masquerade/remove/' . $account->uid . '/nojs',
+              '#options' => array(
+                'attributes' => array(
+                  'class' => array('use-ajax'),
+                ),
+                'html' => TRUE,
+                'query' => drupal_get_destination(),
+              ),
+              '#suffix' => '</div>',
+            );
+            $quick_switch_links[$account->uid]['data'] .= render($remove_link);
           }
         }
       }
@@ -617,6 +652,10 @@ function masquerade_block_1() {
       $form['submit'] = array(
         '#type' => 'submit',
         '#value' => t('Go'),
+      );
+      $form['quickadd'] = array(
+        '#type' => 'submit',
+        '#value' => t('Add'),
         '#suffix' => '</div>',
       );
     }
@@ -637,6 +676,10 @@ function masquerade_block_1() {
  * Masquerade block form validation.
  */
 function masquerade_block_1_validate($form, &$form_state) {
+  if (t('Add') == $form_state['values']['op']) {
+    return;
+  }
+
   global $user;
   //unset($form);
   $name = $form_state['values']['masquerade_user_field'];
@@ -671,12 +714,32 @@ function masquerade_block_1_validate($form, &$form_state) {
  */
 function masquerade_block_1_submit($form, &$form_state) {
   //unset($form);
-  $masq_user = _masquerade_user_load($form_state['values']['masquerade_user_field']);
-  if (!masquerade_switch_user($masq_user->uid)) {
-    drupal_access_denied();
+  if (t('Add') == $form_state['values']['op']) {
+    global $user;
+    $account = user_load_by_name($form_state['values']['masquerade_user_field']);
+    $count = db_select('masquerade_users', 'm')
+      ->fields('m', array())
+      ->condition('uid_from', $user->uid)
+      ->condition('uid_to', $account->uid)
+      ->execute()
+      ->rowCount();
+    if ($count === 0) {
+      db_insert('masquerade_users')
+        ->fields(array(
+          'uid_from' => $user->uid,
+          'uid_to' => $account->uid,
+        ))
+        ->execute();
+    }
   }
   else {
-    drupal_goto($_SERVER['HTTP_REFERER']);
+    $masq_user = _masquerade_user_load($form_state['values']['masquerade_user_field']);
+    if (!masquerade_switch_user($masq_user->uid)) {
+      drupal_access_denied();
+    }
+    else {
+      drupal_goto($_SERVER['HTTP_REFERER']);
+    }
   }
 }
 
@@ -883,3 +946,28 @@ function masquerade_switch_back() {
 
   watchdog('masquerade', 'User %user no longer masquerading as %masq_as.', array('%user' => $user->name, '%masq_as' => $oldname), WATCHDOG_INFO);
 }
+
+/**
+ *
+ */
+function masquerade_remove_quick_switch_page($uid, $mode) {
+  global $user;
+
+  db_delete('masquerade_users')
+    ->condition('uid_from', $user->uid)
+    ->condition('uid_to', $uid)
+    ->execute();
+
+  if ($mode == 'ajax') {
+    $commands = array();
+    $commands[] = ajax_command_remove('.block-masquerade li.uid-' . $uid);
+
+    $element = array(
+      '#type' => 'ajax',
+      '#commands' => $commands,
+    );
+    ajax_deliver($element);
+    exit;
+  }
+  drupal_goto();
+}
