diff --git a/simplemenu.js b/simplemenu.js
index 1283075a..637e082a 100644
--- a/simplemenu.js
+++ b/simplemenu.js
@@ -21,12 +21,11 @@ $(document).ready(function() {
   
   $('body').css('margin-top', '23px');
   
-  // Drupal menu callback
-  $('#simplemenu').load(basePath + 'simplemenu/menu', function() {
-    $('li', this).hover(function() {
-      $('ul', this).slideDown(200);
-    }, function() {});
-    $('a', this).title('');
-    $(this).children('li.expanded').addClass('root');
-  });
+  // Build menu
+  $('#simplemenu').append(simplemenu);
+  $('#simplemenu li').hover(function() {
+    $('ul', this).slideDown(200);
+  }, function() {});
+  $('#simplemenu a').title('');
+  $('#simplemenu').children('li.expanded').addClass('root');          
 });
\ No newline at end of file
diff --git a/simplemenu.module b/simplemenu.module
index f2dfe5b9..250ea05d 100644
--- a/simplemenu.module
+++ b/simplemenu.module
@@ -12,14 +12,7 @@
 function simplemenu_menu($may_cache) {
   $items = array();
 
-  if ($may_cache) {
-    $items[] = array(
-      'path' => 'simplemenu/menu',
-      'access' => user_access('view simplemenu'),
-      'callback' => 'simplemenu_get_menu',
-      'type' => MENU_CALLBACK
-    );
-    
+  if ($may_cache) {    
     $items[] = array(
       'path' => 'admin/settings/simplemenu',
       'title' => t('SimpleMenu'),
@@ -57,6 +50,7 @@ function simplemenu_footer() {
     );
     
     drupal_add_js(array('simplemenu' => $settings), 'setting');
+    drupal_add_js('var simplemenu = '. drupal_to_js(simplemenu_get_menu() .';'), 'inline');
     drupal_add_js($path .'/simplemenu.js');
   }
 }
@@ -129,6 +123,53 @@ function simplemenu_admin_settings() {
   return system_settings_form($form);
 }
 
+/**
+ * Render an HTML list of links for a given menu.
+ */
+function simplemenu_get_menu() {
+  $output = '';
+  
+  $menu = simplemenu_menu_tree(variable_get('simplemenu_menu', 1));
+  
+  if (!$menu) {
+    $menu = '
'. t('No menu items found. Try a different menu as the default.') .'';
+  }
+  
+  $output .= simplemenu_get_devel();
+  $output .= $menu;
+  
+  return $output;
+}      
+
+/**
+ * Custom implementation of menu_tree().
+ * We want to retrieve the entire menu structure for a given menu,
+ * regardless of whether or not the menu item is expanded or not.
+ */
+function simplemenu_menu_tree($pid = 1) {
+  $menu = menu_get_menu();
+  $output = '';
+
+  if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
+    foreach ($menu['visible'][$pid]['children'] as $mid) {
+      $type = isset($menu['visible'][$mid]['type']) ? $menu['visible'][$mid]['type'] : NULL;
+      $children = isset($menu['visible'][$mid]['children']) ? $menu['visible'][$mid]['children'] : NULL;
+      $output .= theme('menu_item', $mid, simplemenu_theme_menu_tree($mid), count($children) == 0);
+    }
+  }
+
+  return $output;
+}                    
+
+/**
+ * Custom implementation of theme_menu_tree() to call our custom menu above.
+ */
+function simplemenu_theme_menu_tree($pid = 1) {
+  if ($tree = simplemenu_menu_tree($pid)) {
+    return '';
+  }
+}   
+
 /**
  * Return a list of devel module links if the module is enabled
  * and the user has access to this module.
@@ -159,48 +200,4 @@ function simplemenu_get_devel() {
   }
   
   return $output;
-}
-
-/**
- * Custom implementation of menu_tree().
- * We want to retrieve the entire menu structure for a given menu,
- * regardless of whether or not the menu item is expanded or not.
- */
-function simplemenu_menu_tree($pid = 1) {
-  $menu = menu_get_menu();
-  $output = '';
-
-  if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
-    foreach ($menu['visible'][$pid]['children'] as $mid) {
-      $type = isset($menu['visible'][$mid]['type']) ? $menu['visible'][$mid]['type'] : NULL;
-      $children = isset($menu['visible'][$mid]['children']) ? $menu['visible'][$mid]['children'] : NULL;
-      $output .= theme('menu_item', $mid, simplemenu_theme_menu_tree($mid), count($children) == 0);
-    }
-  }
-
-  return $output;
-}
-
-/**
- * Custom implementation of theme_menu_tree() to call our custom menu above.
- */
-function simplemenu_theme_menu_tree($pid = 1) {
-  if ($tree = simplemenu_menu_tree($pid)) {
-    return '';
-  }
-}
-
-/**
- * AJAX menu callback to return an HTML list of links for a given menu.
- */
-function simplemenu_get_menu() {
-  $menu = simplemenu_menu_tree(variable_get('simplemenu_menu', 1));
-  
-  if (!$menu) {
-    $menu = ''. t('No menu items found. Try a different menu as the default.') .'';
-  }
-  
-  print simplemenu_get_devel();
-  print $menu;
-  exit;
 }
\ No newline at end of file