diff --git a/modules/og_views/includes/og_views_handler_field_og_managelink.inc b/modules/og_views/includes/og_views_handler_field_og_managelink.inc
index 2e0ff93..92ccb69 100644
--- a/modules/og_views/includes/og_views_handler_field_og_managelink.inc
+++ b/modules/og_views/includes/og_views_handler_field_og_managelink.inc
@@ -20,15 +20,15 @@ class og_views_handler_field_og_managelink extends og_views_handler_field_og_uid
       // Only show links to group admins. And don't show next to group manager.
       if ($uid != $node->uid) {
         if ($is_active) {
-          $item = menu_get_item("og/unsubscribe/$nid/$uid");
-          if ($item['access']) {
+          $account = new stdClass();
+          $account->uid = $uid;
+          if (og_menu_access_unsubscribe($node, $account)) {
             return l(t('Remove membership'), "og/unsubscribe/$nid/$uid", array('query' => drupal_get_destination()));
           }
         }
         else {
-          $token = og_get_token($nid);
-          $item = menu_get_item("og/approve/$nid/$uid/$token");
-          if ($item['access']) {
+          if (og_is_group_admin($node)) {
+            $token = og_get_token($nid);
             return t('Request: <a href="@approve">approve</a> or <a href="@deny">deny</a>.', array('@approve' => url("og/approve/$nid/$uid/$token", array('query' => drupal_get_destination())), '@deny' => url("og/deny/$nid/$uid/$token", array('query' => drupal_get_destination()))));
           }
         }
diff --git a/modules/og_views/includes/og_views_handler_field_og_managelinkadmin.inc b/modules/og_views/includes/og_views_handler_field_og_managelinkadmin.inc
index 9c336f4..6640767 100644
--- a/modules/og_views/includes/og_views_handler_field_og_managelinkadmin.inc
+++ b/modules/og_views/includes/og_views_handler_field_og_managelinkadmin.inc
@@ -18,18 +18,12 @@ class og_views_handler_field_og_managelinkadmin extends og_views_handler_field_o
       $is_admin = $values->{$this->aliases['is_admin']};
       $node = node_load($nid);
       // Only show links to group admins. And don't show next to group manager.
-      if ($uid != $node->uid) {
+      if ($uid != $node->uid && og_is_group_admin($node)) {
         if ($is_admin) {
-          $item = menu_get_item("og/delete_admin/$nid/$uid");
-          if ($item['access']) {
-            return l(t('Admin: Remove'), "og/delete_admin/$nid/$uid", array('query' => drupal_get_destination()));
-          }
+          return l(t('Admin: Remove'), "og/delete_admin/$nid/$uid", array('query' => drupal_get_destination()));
         }
         else {
-          $item = menu_get_item("og/create_admin/$nid/$uid");
-          if ($item['access']) {
-            return l(t('Admin: Create'), "og/create_admin/$nid/$uid", array('query' => drupal_get_destination()));
-          }
+          return l(t('Admin: Create'), "og/create_admin/$nid/$uid", array('query' => drupal_get_destination()));
         }
       }
     }
diff --git a/og.module b/og.module
index d2637f2..49d7660 100644
--- a/og.module
+++ b/og.module
@@ -309,19 +309,14 @@ function og_menu_access_unsubscribe($group_node, $account = NULL) {
     $account = drupal_clone($user);
   }
 
+  $gid = $group_node;
+  if (is_object($group_node)) {
+    $gid = $group_node->nid;
+  }
+
   // Unsubscribee must already be a member or pending member.
-  if (!og_is_group_member($group_node, FALSE, $account->uid)) {
-    // Check pending as well.
-    $subs = og_get_subscriptions($account->uid, 0);
-    foreach ($subs as $key => $sub) {
-      if ($group_node->nid == $key) {
-        $is_member = TRUE;
-        break;
-      }
-    }
-    if (empty($is_member)) {
-      return FALSE;
-    }
+  if (!og_is_active_pending_group_member($account->uid, $gid)) {
+    return FALSE;
   }
 
   // Only admins can remove another member
@@ -2926,3 +2921,41 @@ function og_check_token($token, $seed) {
 function og_broadcast_access($node) {
   return og_is_group_admin($node) && module_exists('og_notifications');
 }
+
+
+/**
+ * CUSTOM FUNCTION
+ */
+
+/**
+ * Check if a user is active or pending for a group.
+ *
+ * This function does not load all group to check if a user is in one particular group.
+ * (Combine og_is_group_member and og_get_subscriptions without static variable)
+ *
+ * @param $uid
+ *   User ID of the user.
+ * @param $nid
+ *   Node ID of the group.
+ *
+ * @return the group row if found, FALSE otherwise
+ */
+function og_is_active_pending_group_member($uid, $nid) {
+  // Anonymous users are not able to subscribe to groups.
+  if (!$uid || !$nid) {
+    return FALSE;
+  }
+
+  $rows = FALSE;
+  $params = array(
+    '0' => $uid,
+    '1' => $nid,
+  );
+  $sql = "SELECT n.title, n.type, n.status, ou.* FROM {og_uid} ou INNER JOIN {node} n ON ou.nid = n.nid WHERE ou.uid = %d AND ou.nid = %d";
+  $result = db_query($sql, $params);
+  while ($row = db_fetch_array($result)) {
+    $rows = $row;
+  }
+
+  return $rows;
+}
