diff --git a/flag_limiter.module b/flag_limiter.module
index 7078344..1d1639d 100644
--- a/flag_limiter.module
+++ b/flag_limiter.module
@@ -53,32 +53,30 @@ function flag_limiter_settings_form($form, &$form_state) {
  * Implements hook_flag_flag().
  */
 function flag_limiter_flag_flag($flag, $entity_id, $account, $flagging) {
-  if ($flagging->action == 'flag') {
-    // Get the flag limits.
-    $flag_limit = variable_get('flag_limiter_' . $flag->name . '_value', 0);
-    $peritem_limit = variable_get('flag_limiter_' . $flag->name . '_peritem_value', 0);
+  // Get the flag limits.
+  $flag_limit = variable_get('flag_limiter_' . $flag->name . '_value', 0);
+  $peritem_limit = variable_get('flag_limiter_' . $flag->name . '_peritem_value', 0);
 
-    if ($flag_limit) {
-      $user_flags = flag_limiter_get_user_flags($account->uid, $flag->fid);
-      if (count($user_flags) > $flag_limit) {
-        $unflag = flag('unflag', $flag->name, $entity_id, $account, TRUE);
-        if ($unflag) {
-          drupal_set_message(t("You've already signed up @num times", array('@num' => $flag_limit)), 'error');
-        } else {
-          drupal_set_message(t('Fail limiter operation'), 'status', FALSE);
-        }
+  if ($flag_limit) {
+    $user_flags = flag_limiter_get_user_flags($account->uid, $flag->fid);
+    if (count($user_flags) > $flag_limit) {
+      $unflag = flag('unflag', $flag->name, $entity_id, $account, TRUE);
+      if ($unflag) {
+        drupal_set_message(t("You've already signed up @num times", array('@num' => $flag_limit)), 'error');
+      } else {
+        drupal_set_message(t('Fail limiter operation'), 'status', FALSE);
       }
     }
+  }
 
-    if ($peritem_limit) {
-      $flagging_data = flag_get_counts($flag->entity_type, $entity_id, TRUE);
-      if ($flagging_data[$flagging->flag_name] > $peritem_limit) {
-        $unflag_item = flag('unflag', $flag->name, $entity_id, $account, TRUE);
-        if ($unflag_item) {
-          drupal_set_message(t("The event already signed up @num times", array('@num' => $peritem_limit)), 'error');
-        } else {
-          drupal_set_message(t('Fail limiter operation'), 'status', FALSE);
-        }
+  if ($peritem_limit) {
+    $flagging_data = flag_get_counts($flag->entity_type, $entity_id, TRUE);
+    if ($flagging_data[$flagging->flag_name] > $peritem_limit) {
+      $unflag_item = flag('unflag', $flag->name, $entity_id, $account, TRUE);
+      if ($unflag_item) {
+        drupal_set_message(t("The event already signed up @num times", array('@num' => $peritem_limit)), 'error');
+      } else {
+        drupal_set_message(t('Fail limiter operation'), 'status', FALSE);
       }
     }
   }
@@ -100,17 +98,19 @@ function flag_limiter_preprocess_flag(&$variables) {
     if ($flag_limit) {
       $user_flags = flag_limiter_get_user_flags($variables['user']->uid, $flag->fid);
       if (count($user_flags) >= $flag_limit && $variables['status'] == 'unflagged') {
-        unset($variables['link_href']);
+        $variables['link_href'] = '';
         $variables['link_text'] = $flag->unflag_denied_text;
       }
     }
 
     if ($peritem_limit) {
       $limit = flag_get_counts($flag->entity_type, $variables['entity_id'], TRUE);
-      $name = $flag->name;
-      if ($limit[$name] >= $peritem_limit && user_access('unflag ' . $flag->name) == FALSE) {
-        unset($variables['link_href']);
-        $variables['link_text'] = $flag->unflag_denied_text;
+      if ($limit) {
+        $name = $flag->name;
+        if ($limit[$name] >= $peritem_limit && $variables['link_text'] != $flag->unflag_short ) {
+          $variables['link_href'] = '';
+          $variables['link_text'] = $flag->unflag_denied_text;
+        }
       }
     }
   }
