diff --git a/admin_menu.module b/admin_menu.module
index 2e5cb47..75d4aad 100644
--- a/admin_menu.module
+++ b/admin_menu.module
@@ -671,12 +671,14 @@ function theme_admin_menu_links($variables) {
  */
 function admin_menu_element_sort($a, $b) {
   // @see element_sort()
-  $a_weight = (is_array($a) && isset($a['#weight'])) ? $a['#weight'] : 0;
-  $b_weight = (is_array($b) && isset($b['#weight'])) ? $b['#weight'] : 0;
+  $a_is_array = is_array($a);
+  $b_is_array = is_array($b);
+  $a_weight = ($a_is_array && isset($a['#weight'])) ? $a['#weight'] : 0;
+  $b_weight = ($b_is_array && isset($b['#weight'])) ? $b['#weight'] : 0;
   if ($a_weight == $b_weight) {
     // @see element_sort_by_title()
-    $a_title = (is_array($a) && isset($a['#title'])) ? $a['#title'] : '';
-    $b_title = (is_array($b) && isset($b['#title'])) ? $b['#title'] : '';
+    $a_title = ($a_is_array && isset($a['#title'])) ? $a['#title'] : '';
+    $b_title = ($b_is_array && isset($b['#title'])) ? $b['#title'] : '';
     return strnatcasecmp($a_title, $b_title);
   }
   return ($a_weight < $b_weight) ? -1 : 1;
