diff --git a/ga_login.module b/ga_login.module
index def3181..c5f6d94 100644
--- a/ga_login.module
+++ b/ga_login.module
@@ -21,6 +21,15 @@ function ga_login_menu() {
     'access callback' => 'ga_login_create_access',
     'access arguments' => array(1),
   );
+  
+  $items['user/%user/ga_login/delete'] = array(
+    'type' => MENU_LOCAL_TASK,
+    'title' => 'GA login',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('ga_login_delete_form', 1),
+    'access callback' => 'ga_login_delete_access',
+    'access arguments' => array(1),
+  );
 
   $items['admin/config/people/ga_login'] = array(
     'type' => MENU_NORMAL_ITEM,
@@ -36,7 +45,7 @@ function ga_login_menu() {
 }
 
 /**
- * Access callback.
+ * Access callback for creating codes.
  */
 function ga_login_create_access($target_account, $account = NULL) {
   if (is_null($account)) {
@@ -58,6 +67,24 @@ function ga_login_create_access($target_account, $account = NULL) {
 }
 
 /**
+ * Access callback for deleting codes.
+ */
+function ga_login_delete_access($target_account, $account = NULL) {
+  if (is_null($account)) {
+    global $user;
+    $account = $user;
+  }
+  if ($account->uid == $target_account->uid) {
+    $access = user_access('delete own login code', $account) || user_access('delete others login codes', $account);
+    if ($access) {
+      // user already has access
+      return TRUE;
+    }
+  }
+  return user_access('delete others login codes', $account);
+}
+
+/**
  * Implements hook_permission().
  */
 function ga_login_permission() {
@@ -75,6 +102,15 @@ function ga_login_permission() {
       'description' => t('Allows users to create others\' GA login codes'),
       'restrict access' => TRUE,
     ),
+    'delete own login code' => array(
+      'title' => t('Delete own login code'),
+      'description' => t('Allows users to delete their own GA login code.'),
+    ),
+    'delete others login codes' => array(
+      'title' => t('Delete others\' login codes'),
+      'description' => t('Allows users to delete others\' GA login codes'),
+      'restrict access' => TRUE,
+    ),
     'login without code' => array(
       'title' => t('Login without code'),
       'description' => t('With this permission, users don\'t have to fill in the GA login code'),
@@ -389,7 +425,7 @@ function ga_login_create_form_submit($form, &$form_state) {
         $ga->internalPutData($username, $form_state['data']);
 
         if (module_exists('mobile_codes')) {
-          if(file_unmanaged_delete($form_state['values']['code_image_path'])) {
+          if (file_unmanaged_delete($form_state['values']['code_image_path'])) {
             drupal_set_message(t('Mobile code image was successfully deleted.'));
           }
           else {
@@ -516,22 +552,74 @@ function ga_login_form_alter(&$form, &$form_state, $form_id) {
   elseif ($form_id == 'user_profile_form') {
     $account = $form['#user'];
     $register = ($account->uid > 0 ? FALSE : TRUE);
+
+    //If the account is registered and has permission to login with using a ga login code
+    $optional_force = !$register && user_access('login without code', $account);
+
+    $ga = new ga_loginGA(variable_get('ga_login_totp_skew', 10), variable_get('ga_login_hotp_skew', 10));
+    $username = _ga_login_username($account);
+
+    //If this account has a ga login code set and the acting user has permission to delete it
+    $can_delete = $ga->hasToken($username) && (user_access('delete own login code') || user_access('delete others login code'));
+
     // Add some more settings to the user profile form.
     $form['ga_login'] = array(
       '#type' => 'fieldset',
       '#title' => t('Two factor authentication'),
       '#weight' => 1,
-      '#access' => (!$register && user_access('login without code', $account)),
-    );
-    $form['ga_login']['ga_login_force_tfa'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Protect my account with two-factor-authentication'),
-      '#default_value' => isset($account->data['ga_login_force_tfa']) ? $account->data['ga_login_force_tfa'] : FALSE,
-      '#description' => t('Check this box to force two-factor-authentication during login. If you decide to do so and haven\'t yet created your key, then please also refer to <a href="@url">GA Login</a>.', array('@url' => url('user/' . $account->uid . '/ga_login'))),
+      '#access' => ($optional_force || $can_delete),
     );
+    if ($optional_force) {
+      $form['ga_login']['ga_login_force_tfa'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Protect my account with two-factor-authentication'),
+        '#default_value' => isset($account->data['ga_login_force_tfa']) ? $account->data['ga_login_force_tfa'] : FALSE,
+        '#description' => t('Check this box to force two-factor-authentication during login. If you decide to do so and haven\'t yet created your key, then please also refer to <a href="@url">GA Login</a>.', array('@url' => url('user/' . $account->uid . '/ga_login'))),
+      );
+    } 
+    elseif ($can_delete) {
+      $form['ga_login']['ga_login_delete_code'] = array(
+        '#type' => 'submit',
+        '#value' => t('Delete GA Login Code'),
+      );
+      $form['#submit'] = array('ga_login_delete_code_confirm_redirect');
+    }
   }
 }
 
+/*
+ * A simple redirect to a confirmation page before deleting a GA Login code
+ */
+function ga_login_delete_code_confirm_redirect($form, &$form_state) {
+  drupal_goto('user/' . $form['#user']->uid . '/ga_login/delete');
+}
+
+/*
+ * The confirmation page form for deleting a GA Login code
+ */
+function ga_login_delete_form($form, &$form_state, $account) {
+  $form['account'] = array(
+    '#type' => 'value',
+    '#value' => $account,
+  );
+  return confirm_form($form, 
+    t("Delete the GA Login code for @name?", array('@name' => format_username($account))),
+    'user/' . $account->uid . '/edit',
+    t('This action cannot be undone.'),
+    t('Delete'),
+    t('Cancel')
+  );
+}
+
+/*
+ * The submit handler for deletign a GA Login code
+ */
+function ga_login_delete_form_submit($form, &$form_state) {
+  $account = $form_state['values']['account'];
+  ga_login_delete_code($account);
+  drupal_goto('user/' . $account->uid . '/edit');
+}
+
 /**
  * Implements hook_user_presave().
  *
@@ -627,8 +715,24 @@ function _ga_login_username($account, $encode = TRUE) {
   $username = format_string('!account@!realm!suffix', array(
     '!account' => $account->name,
     '!realm' => $realm,
-    '!suffix' =>$suffix,
+    '!suffix' => $suffix,
   ));
 
   return $encode ? rawurlencode($username) : $username;
 }
+
+/*
+ * Removes the GA login code associated with an accuont
+ */
+function ga_login_delete_code($account) {
+  $username = _ga_login_username($account);
+  $result = db_delete('ga_login')
+    ->condition('name', $username)
+    ->execute();
+  if ($result) {
+    drupal_set_message(t("Successfully deleted the GA Login code for @name", array('@name' => format_username($account))));
+  } 
+  else {
+    drupal_set_message(t("There was a problem deleting the GA Login code for @name", array('@name' => format_username($account))), 'error');
+  }
+}
