diff --git a/og_menu.js b/og_menu.js
index 76d102e..d51e998 100644
--- a/og_menu.js
+++ b/og_menu.js
@@ -11,6 +11,7 @@
       var enabled = $('#edit-menu-enabled').is(':checked');
 
       var holder = document.createElement('select');
+      var selectors = 'select[name^="og_group_ref"], input[name^="og_group_ref"';
 
       // Toggle menu alteration
       function toggle(values) {
@@ -61,12 +62,12 @@
       };
 
       // Alter menu on OG select change and init
-      if ($('select.group-audience').size()) {
-        $('select.group-audience').change(toggleSelect).ready(toggleSelect);
+      if ($(selectors).size()) {
+        $(selectors).change(toggleSelect).ready(toggleSelect);
       }
 
       // init
-      toggle($('select.group-audience').val());
+      toggle($(selectors).val());
     }
 
   }
diff --git a/og_menu.module b/og_menu.module
index f291d57..6ad9aaa 100644
--- a/og_menu.module
+++ b/og_menu.module
@@ -207,13 +207,13 @@ function og_menu_block_view($delta = '') {
   $block = array();
   if ($delta == 'og_single_menu_block') {
     $context = og_context();
-    $group = isset($context->gid) ? $context->gid : 0;
+    $group = isset($context['gid']) ? $context['gid'] : 0;
     $menus = og_menu_get_group_menus(array($group));
     $menu = array_shift($menus);
 
     if ($menu) {
       if (variable_get('og_menu_block_links', FALSE)) {
-        $block['subject'] = l($menu->mtitle, 'node/' . $context->etid);
+        $block['subject'] = l($menu->mtitle, 'node/' . $context['gid']);
       }
       else {
         $block['subject'] = check_plain($menu->mtitle);
@@ -227,13 +227,13 @@ function og_menu_block_view($delta = '') {
     $gids = array();
     if ($node) {
       if (og_is_group_content_type('node', $node->type)) {
-        $nodegroups = og_load_multiple(og_get_entity_groups('node', $node));
-        foreach ($nodegroups as $ng)
-          $gids[] = $ng->gid;
+        $nodegroups = og_get_entity_groups('node', $node);
+        if (!empty($nodegroups['node'])) {
+          $gids = $nodegroups['node'];
+        }
       }
       elseif (og_is_group_type('node', $node->type)) {
-        $group = og_get_group('node', $node->nid);
-        $gids = array($group->gid);
+        $gids = array($node->nid);
       }
     }
     // If no group was found, fallback to the regular og_get_group_context
@@ -281,7 +281,7 @@ function og_menu_field_extra_fields() {
  */
 function og_menu_get_context() {
   $context = og_context();
-  return (isset($context->gid) ? $context->gid : 0);
+  return (isset($context['gid']) ? $context['gid'] : 0);
 }
 
 /**
@@ -299,19 +299,17 @@ function og_menu_form_node_form_alter(&$form, &$form_state) {
   // Group content.
   if ($is_group_content) {
     // Check if we get any group context from the url
-    $gids = array_values(og_get_context_by_url());
+    $gid = og_context();
     $context_based_access = FALSE;
     $group_based_access = FALSE;
-    if (!empty($gids) && is_array($gids)) {
-      foreach ($gids as $gid) {
-        if (og_user_access($gid, 'administer og menu')) {
+    if (!empty($gid) && is_array($gid)) {
+        if (og_user_access('node', $gid['gid'], 'administer og menu')) {
           $context_based_access = TRUE;
         }
-      }
     }
 
     if (!$context_based_access && $group = og_context()) { // Performance, might be a gotcha later on.
-      $group_based_access = og_user_access($group->gid, 'administer og menu');
+      $group_based_access = og_user_access('node', $group['gid'], 'administer og menu');
     }
 
     if (user_access('administer og menu') || $context_based_access || $group_based_access) {
@@ -320,8 +318,7 @@ function og_menu_form_node_form_alter(&$form, &$form_state) {
       $groups = og_get_entity_groups('user', $user);
       $list = array();
       $settings = array();
-      $menus = og_menu_get_group_menus($groups);
-
+      $menus = og_menu_get_group_menus($groups['node']);
       if (!empty($menus)) {
         foreach ($menus as $menu) {
           $list[$menu->mname] = $menu->mtitle;
@@ -346,11 +343,6 @@ function og_menu_form_node_form_alter(&$form, &$form_state) {
           $merged_list = $list;
         }
 
-        $menus = og_menu_get_group_menus();
-        foreach ($menus as $menu) {
-          $settings[$menu->mname] = $menu->gid;
-        }
-
         // Menu parent options will format the list in a way Drupal expects and give children, etc
         $options = menu_parent_options($merged_list, array('mlid' => 0));
         if ($nid = $form['nid']['#value']) {
@@ -367,7 +359,6 @@ function og_menu_form_node_form_alter(&$form, &$form_state) {
       }
     }
   }
-
   // Group type.
   if ($is_group_type) {
     $form['og_menu'] = array(
@@ -399,17 +390,20 @@ function og_menu_form_menu_edit_menu_alter(&$form, &$form_state) {
     $options = array('' => '--');
     $values = array();
     // Populate gids
-    if (user_access('administer organic groups')) {
-      $result = db_query("SELECT gid, label FROM {og} WHERE entity_type='node'");
+    if (user_access('administer group')) {
+      $result = db_query("SELECT distinct ogm.gid, n.title FROM {og_membership} ogm LEFT JOIN {node} n ON n.nid = ogm.gid WHERE entity_type='node'");
       foreach ($result as $group) {
-        $options[$group->gid] = $group->label;
+        $options[$group->gid] = $group->title;
       }
     }
     else {
       global $user;
-      $groups = og_load_multiple(og_get_entity_groups('user', $user));
-      foreach ($groups as $group) {
-        $options[$group->gid] = $group->label;
+      $entities = og_get_entity_groups('user', $user);
+      foreach (array_keys($entities) as $entity_type) {
+        $groups = entity_load($entity_type, $entities[$entity_type]);
+        foreach ($groups as $gid => $group) {
+          $options[$gid] = $group->title;
+        }
       }
     }
 
@@ -542,10 +536,7 @@ function og_menu_node_prepare($node) {
   if (og_is_group_type('node', $node->type)) {
     $node->og_menu = og_menu_get_group_menus();
     if (!empty($node->nid)) {
-      $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING));
-      if (isset($og->gid)) {
-        $node->og_menu = og_menu_get_group_menus(array($og->gid));
-      }
+      $node->og_menu = og_menu_get_group_menus(array($node->nid));
     }
   }
   // $node is not a new node and is a group content type, menu link is not set.
@@ -581,14 +572,13 @@ function og_menu_node_prepare($node) {
  */
 function og_menu_node_insert($node) {
   if (og_is_group_type('node', $node->type)) {
-    $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING));
     if ($node->og_menu) {
       menu_save(array(
-        'menu_name' => 'menu-og-' . $og->gid,
+        'menu_name' => 'menu-og-' . $node->nid,
         'title' => $node->title,
         'description' => t('OG Menu for') . ' ' . check_plain($node->title),
       ));
-      og_menu_update_menu('menu-og-' . $og->gid, $og->gid);
+      og_menu_update_menu('menu-og-' . $node->nid, $node->nid);
     }
   }
 }
@@ -598,22 +588,21 @@ function og_menu_node_insert($node) {
  */
 function og_menu_node_update($node) {
   if (og_is_group_type('node', $node->type)) {
-    $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING));
     if ($node->og_menu) {
-      $menu = og_menu_get_group_menus(array($og->gid));
+      $menu = og_menu_get_group_menus(array($node->nid));
       if (empty($menu)) {
         menu_save(array(
-          'menu_name' => 'menu-og-' . $og->gid,
+          'menu_name' => 'menu-og-' . $node->nid,
           'title' => $node->title,
           'description' => t('OG Menu for') . ' ' . check_plain($node->title),
         ));
-        og_menu_update_menu('menu-og-' . $og->gid, $og->gid);
+        og_menu_update_menu('menu-og-' . $node->nid, $node->nid);
       }
     }
     else {
       // We can't assume that the menu name is 'menu-og-[gid]'
       // we need to look up menus associated with this group
-      $result = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $og->gid))->fetchCol();
+      $result = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $node->nid))->fetchCol();
       foreach ($result as $menu_name) {
         menu_delete(array(
           'menu_name' => $menu_name,
@@ -636,9 +625,7 @@ function og_menu_node_delete($node) {
      * we need the gid of the group being deleted, see if its an og assosiated
      * menu from og_menu and then from that menu name, delete it.
      */
-    $gid = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING))->gid;
-
-    $results = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $gid))->fetchCol();
+    $results = db_query('SELECT menu_name FROM {og_menu} WHERE gid = :gid', array(':gid' => $node->nid))->fetchCol();
 
     // @todo This can be replaced with two db_delete queries
     foreach ($results as $menu_name) {
@@ -717,9 +704,9 @@ function og_menu_get_group_menus($gids = NULL, $user = NULL) {
     global $user;
   }
   if (!$gids) {
-    $nodegroups = og_load_multiple(og_get_entity_groups('user', $user));
-    foreach ($nodegroups as $ng) {
-      $gids[] = $ng->gid;
+    $nodegroups = og_get_entity_groups('user', $user);
+    if (!empty($nodegroups['node'])) {
+      $gids = $nodegroups['node'];
     }
   }
   $menus = array();
@@ -759,11 +746,10 @@ function og_menu_access($node, $menu = NULL, $op = NULL) {
   elseif (user_access('administer menu')) {
     return TRUE;
   }
-  elseif (user_access('administer og menu') || og_user_access_by_entity('administer og menu', 'node', $node->nid)) {
+  elseif (user_access('administer og menu') || og_user_access_entity('administer og menu', 'node', $node->nid)) {
     if ($op == 'new-menu') {
-      $group = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING));
       $query = db_select('og_menu', 'ogm');
-      $query->condition('ogm.gid', $group->gid, '=');
+      $query->condition('ogm.gid', $node->nid, '=');
       $count = $query->countQuery()->execute()->fetchField();
       $max = variable_get('og_menu_max_menus_per_group', 1);
       if ($max > 0 && $count >= $max) {
@@ -899,14 +885,16 @@ function og_menu_menu_alter(&$items) {
  */
 function _og_menu_autocomplete($string) {
   $matches = array();
-  $query = db_select('og', 'og');
-  $return = $query
-          ->fields('og', array('gid', 'label'))
-          ->condition('og.label', '%' . db_like($string) . '%', 'LIKE')
-          ->range(0, 10)
-          ->execute();
+  $query = db_select('node', 'n');
+  $query->distinct();
+  $query->join('og_membership','og', 'n.nid = og.gid');
+  $query->fields('og', array('gid'));
+  $query->fields('n', array('title'));
+  $query->condition('n.title', '%' . db_like($string) . '%', 'LIKE');
+  $query->range(0, 10);
+  $return = $query->execute();
   foreach ($return as $row) {
-    $matches[$row->label . " [gid:$row->gid]"] = '<div class="og-autocomplete">' . $row->label . '</div>';
+    $matches[$row->title . " [gid:$row->gid]"] = '<div class="og-autocomplete">' . $row->title . '</div>';
   }
   // return for JS
   drupal_json_output($matches);
diff --git a/og_menu.pages.inc b/og_menu.pages.inc
index 19300c2..5faf8a8 100644
--- a/og_menu.pages.inc
+++ b/og_menu.pages.inc
@@ -10,9 +10,6 @@
  * user's group and along with their description.
  */
 function og_menu_overview_page($node) {
-  $gid = og_get_group_ids('node', array($node->nid), FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING));
-  $gid = $gid[$node->nid];
-
   // Set the title of the page.
   drupal_set_title(t('List menus for @title', array('@title' => $node->title)), PASS_THROUGH);
 
@@ -22,7 +19,7 @@ function og_menu_overview_page($node) {
     LEFT JOIN {menu_custom} m
     ON om.menu_name = m.menu_name
     WHERE om.gid = :gid
-    ORDER BY title", array(':gid' => $gid));
+    ORDER BY title", array(':gid' => $node->nid));
   $header = array(t('Title'), array('data' => t('Operations'), 'colspan' => '3'));
   $rows = array();
   foreach ($result as $menu) {
@@ -47,7 +44,6 @@ function og_menu_overview_page($node) {
 function og_menu_edit_menu_form($form, &$form_state, $type, $menu = array()) {
   module_load_include('inc', 'menu', 'menu.admin');
   $node = menu_get_object('node', 1);
-  $og = og_get_group('node', $node->nid, FALSE, array(OG_STATE_ACTIVE, OG_STATE_PENDING));
 
   // Set the title of the page.
   switch ($type) {
@@ -62,7 +58,7 @@ function og_menu_edit_menu_form($form, &$form_state, $type, $menu = array()) {
   $form = drupal_retrieve_form('menu_edit_menu', $form_state, $type, $menu);
   $form['og_menu_gid'] = array(
     '#type' => 'value',
-    '#value' => $og->gid,
+    '#value' => $node->nid,
   );
   // Add submit handlers.
   $form['#submit'][] = 'menu_edit_menu_submit';
@@ -164,7 +160,7 @@ function og_menu_edit_item_form($form, &$form_state, $type, $item, $menu, $node)
   module_load_include('inc', 'menu', 'menu.admin');
   $form = drupal_retrieve_form('menu_edit_item', $form_state, $form, $type, $item, $menu);
   $list = array();
-  $menus = og_menu_get_group_menus(array(og_get_group('node', $node->nid)->gid));
+  $menus = og_menu_get_group_menus(array($node->nid));
   foreach ($menus as $option) {
     $list[$option->mname] = $option->mtitle;
   }
