diff -uP dynamic_persistent_menu.orig/dynamic-persistent-menu.css dynamic_persistent_menu/dynamic-persistent-menu.css
--- dynamic_persistent_menu.orig/dynamic-persistent-menu.css	1970-01-01 05:30:00.000000000 +0530
+++ dynamic_persistent_menu/dynamic-persistent-menu.css	2010-03-22 01:12:03.000000000 +0530
@@ -0,0 +1,77 @@
+div.block-dynamic_persistent_menu {
+  border-bottom: none;
+  margin-bottom: 0px;
+  padding: 0px;
+  background-color: #EEEEEE;
+  height: 40px;
+}
+div.block-dynamic_persistent_menu ul {
+	border-bottom: medium none;
+	height: 20px;
+	margin-bottom: 0px;
+	padding: 0px;
+}
+div.block-dynamic_persistent_menu ul {
+	clear: both;
+}
+div.block-dynamic_persistent_menu ul.dynamic-persistent-menu-sub-menu {
+	background-color: #A6CEE7;
+}
+div.block-dynamic_persistent_menu ul.dynamic-persistent-menu-menu li.dynamic-persistent-menu-menu-item,
+div.block-dynamic_persistent_menu ul.dynamic-persistent-menu-sub-menu li.dynamic-persistent-menu-sub-menu-item {
+	display: block;
+	float: left;
+	height: 20px;
+	background: none;
+	padding: 0px;
+}
+
+div.block-dynamic_persistent_menu ul.dynamic-persistent-menu-menu li a,
+div.block-dynamic_persistent_menu ul.dynamic-persistent-menu-sub-menu li a {
+	border-left: 1px solid #999;
+	font-size: 12px;
+	padding-left: 5px;
+	padding-right: 5px;
+	vertical-align: top;
+}
+div.block-dynamic_persistent_menu ul li:first-child a {
+	border: medium none;
+}
+div.block-dynamic_persistent_menu ul.dynamic-persistent-menu-menu li.dynamic-persistent-menu-children-active {
+	background-color: #A6CEE7;
+}
+div.block-dynamic_persistent_menu ul.dynamic-persistent-menu-menu li.active-trail {
+	background-color: #A6CEE7;
+}
+div.block-dynamic_persistent_menu .dynamic-persistent-menu-menu li.active-trail a {
+  border-right: none;
+  color: black;
+}
+div.block-dynamic_persistent_menu .dynamic-persistent-menu-menu li a:hover {
+  color: blue;
+}
+div.block-dynamic_persistent_menu .dynamic-persistent-menu-sub-menu li a:hover {
+  color: blue;
+}
+/*
+HACK to get the margins working with IDs. eg: garland has an id based selector 
+for setting margins and unless we use an id based selector that margin will 
+always have higher precedence than the one set here.
+No site would need more than 5 dynamic persistent menus :-)
+*/
+#block-dynamic_persistent_menu-1 li.dynamic-persistent-menu-menu-item, 
+#block-dynamic_persistent_menu-2 li.dynamic-persistent-menu-menu-item, 
+#block-dynamic_persistent_menu-3 li.dynamic-persistent-menu-menu-item, 
+#block-dynamic_persistent_menu-4 li.dynamic-persistent-menu-menu-item, 
+#block-dynamic_persistent_menu-5 li.dynamic-persistent-menu-menu-item {
+	margin: 0px;
+}
+#block-dynamic_persistent_menu-1 li.dynamic-persistent-menu-sub-menu-item, 
+#block-dynamic_persistent_menu-2 li.dynamic-persistent-menu-sub-menu-item, 
+#block-dynamic_persistent_menu-3 li.dynamic-persistent-menu-sub-menu-item, 
+#block-dynamic_persistent_menu-4 li.dynamic-persistent-menu-sub-menu-item, 
+#block-dynamic_persistent_menu-5 li.dynamic-persistent-menu-sub-menu-item {
+	margin: 0px;
+}
+ 
+
diff -uP dynamic_persistent_menu.orig/dynamic_persistent_menu.js dynamic_persistent_menu/dynamic_persistent_menu.js
--- dynamic_persistent_menu.orig/dynamic_persistent_menu.js	2010-03-15 20:49:01.000000000 +0530
+++ dynamic_persistent_menu/dynamic_persistent_menu.js	2010-03-22 02:27:12.000000000 +0530
@@ -4,82 +4,80 @@
  * @file dynamic_persistent_menu.js
  * The Javascript code for Dynamic Persistent Menu
  */
-var overMenu=new Array();
-var settings_id;
-var overStatus = 1;
-//TODO Single overStatus for multiple menus supported by the module? Probably needs array.
-
+
 /**
  * Initialize the module's JS functions
  */
 Drupal.behaviors.dynamic_persistent_menu = function() {
-  // Set the default overMenu
-  //alert(DynamicPersistentMenu['menus']);
-  //settings_id = dynamic_persistent_menu_menu_settings_index(overMenu);
-  //overMenu = DynamicPersistentMenu.menus[settings_id]['over'];
-  var boolStatus=new Array();
-  for (var i in DynamicPersistentMenu.menus) {
-    boolStatus[i]=0;
+  dpms = Drupal.settings.dynamic_persistent_menu;
+  // Initialize the default settings
+  dynamic_persistent_menu_load_settings(Drupal.settings.dynamic_persistent_menu);
+  for (i in dpms.menus) {
+    dpms.boolStatus[i] = 0;
   } 
-  //overMenu= 'dynamic-persistent-menu-menu'+DynamicPersistentMenu.menus[1]['over'];
- // alert(overMenu);
   // Set mouseover function to show current submenu, hide previous submenu, if any.
   $(".dynamic-persistent-menu-menu-item").mouseover(
     function () {
-      overStatus = 1 ;
+      dpms.overStatus = 1 ;
       //var parentId=$(this).parent().attr("id");
-      settings_id = dynamic_persistent_menu_menu_settings_index($(this));
-      
-      if(boolStatus[settings_id]==0) {
-        overMenu[settings_id]= 'dynamic-persistent-menu-menu'+DynamicPersistentMenu.menus[settings_id]['over'];
-        //alert(overMenu);
-        boolStatus[settings_id]=1;
+      dpms.settings_id = dynamic_persistent_menu_menu_settings_index($(this));
+      if(dpms.boolStatus[dpms.settings_id] == 0) {
+        dpms.overMenu[dpms.settings_id] = 'dynamic-persistent-menu-menu' + dpms.menus[dpms.settings_id]['over'];
+        dpms.boolStatus[dpms.settings_id] = 1;
       }
       // If there was a previous menu which received a mouseover, hide the submenu.
-      if (overMenu[settings_id]) {
-        subMenu = dynamic_persistent_menu_get_sub_menu(overMenu[settings_id]);
+      if (dpms.overMenu[dpms.settings_id]) {
+        subMenu = dynamic_persistent_menu_get_sub_menu(dpms.overMenu[dpms.settings_id]);
         $('#' + subMenu).hide();
-        $('#' + overMenu[settings_id]).removeClass('dynamic-persistent-menu-children-active');
+        $('#' + dpms.overMenu[dpms.settings_id]).removeClass('dynamic-persistent-menu-children-active');
       }
       // Show the submenu of the current menu.
-      overMenu[settings_id] = this.id;
-      subMenu = dynamic_persistent_menu_get_sub_menu(overMenu[settings_id]);
+      dpms.overMenu[dpms.settings_id] = this.id;
+      subMenu = dynamic_persistent_menu_get_sub_menu(dpms.overMenu[dpms.settings_id]);
       $('#' + subMenu).show();
       $('#' + this.id).addClass('dynamic-persistent-menu-children-active');
     }
   ).mouseout(
     function() {
       // Set timeout for the hide function
-      dynamic_persistent_menu_set_timeout(settings_id);
+      dynamic_persistent_menu_set_timeout(dpms.settings_id);
     }
   );
       
   // Set mouseover function to keep overStatus as long as mouse is over the current menu.
   $(".dynamic-persistent-menu-sub-menu").mouseover(
     function() {
-      if (dynamic_persistent_menu_get_sub_menu(overMenu[settings_id]) == this.id) {
-        overStatus = 1;
+      if (dynamic_persistent_menu_get_sub_menu(dpms.overMenu[dpms.settings_id]) == this.id) {
+        dpms.overStatus = 1;
       }
     }
   ).mouseout(
     function() {
-      dynamic_persistent_menu_set_timeout(settings_id);
+      dynamic_persistent_menu_set_timeout(dpms.settings_id);
     }
-  );
+  );
+  $(".dynamic-persistent-menu-sub-menu-item a").click(function() {
+    dpms.clicked = 1;
+  });
+  $(".dynamic-persistent-menu-menu-item a").click(function() {
+    dpms.clicked = 1;
+  });
 };
 
 /**
- * Get the id of the submenu of a menu, given its id.
+ * Get the id of the submenu of a menu item, given its id.
  */
 function dynamic_persistent_menu_get_sub_menu(menu_id) {
-  return menu_id.replace('dynamic-persistent-menu-menu','dynamic-persistent-menu-sub-menu');
+  if(menu_id != null) {
+    return menu_id.replace('dynamic-persistent-menu-menu','dynamic-persistent-menu-sub-menu');
+  }
 }
 
 /**
  * Get the index of the settings array for a given menu.
  */
-function dynamic_persistent_menu_menu_settings_index(menu_id) {
-  id = menu_id.parent().attr('id').replace('dynamic-persistent-menu-', '');
+function dynamic_persistent_menu_menu_settings_index(menu_item) {
+  id = menu_item.parent().attr('id').replace('dynamic-persistent-menu-', '');
   return Number(id);
 }
 
@@ -87,15 +85,14 @@
  * Reset all submenus and the corresponding statuses.
  */
 function dynamic_persistent_menu_reset() {
+  dpms = Drupal.settings.dynamic_persistent_menu;
   // Hide menu's only if the mouse is not over one of the submenus
-  if (!overStatus) {
-    // This can be avoided if the menus array index is the actual menu id itself.
-   // settings_id = dynamic_persistent_menu_menu_settings_index(overMenu);
-    $('#' + dynamic_persistent_menu_get_sub_menu(overMenu[settings_id])).hide();
-    $('#' + overMenu[settings_id]).removeClass('dynamic-persistent-menu-children-active');
-    //TODO - Use drupal settings array instead of custom settings.
-    overMenu[settings_id] = DynamicPersistentMenu.menus[settings_id]['default'];
-    $('#' + dynamic_persistent_menu_get_sub_menu(overMenu[settings_id])).show();
+  // and if we are waiting to process a click on one of the links
+  if (!dpms.overStatus && !dpms.clicked) {
+    $('#' + dynamic_persistent_menu_get_sub_menu(dpms.overMenu[dpms.settings_id])).hide();
+    $('#' + dpms.overMenu[dpms.settings_id]).removeClass('dynamic-persistent-menu-children-active');
+    dpms.overMenu[dpms.settings_id] = 'dynamic-persistent-menu-menu' + dpms.menus[dpms.settings_id]['default'];
+    $('#' + dynamic_persistent_menu_get_sub_menu(dpms.overMenu[dpms.settings_id])).show();
   }
 }
 
@@ -103,9 +100,20 @@
  * Call timeout function.
  */
 function dynamic_persistent_menu_set_timeout(settings_id) {
-  //settings_id = dynamic_persistent_menu_menu_settings_index(overMenu);
-  //TODO - Use drupal settings array instead of custom settings.
-  subMenuTimeout = DynamicPersistentMenu.menus[settings_id]['timeout'];
-  overStatus = 0 ;
+  dpms = Drupal.settings.dynamic_persistent_menu;
+  subMenuTimeout = dpms.menus[settings_id]['timeout'];
+  dpms.overStatus = 0 ;
   setTimeout('dynamic_persistent_menu_reset()', subMenuTimeout);
 }
+ 
+/**
+ * Load global variables in the module context into the settings array
+ * without polluting the javascript global namespace
+ */
+function dynamic_persistent_menu_load_settings(settings) {
+  settings.overMenu = new Array();
+  settings.settings_id = 0;
+  settings.overStatus = 1;
+  settings.boolStatus = new Array();
+  settings.clicked = 0;
+}
diff -uP dynamic_persistent_menu.orig/dynamic_persistent_menu.module dynamic_persistent_menu/dynamic_persistent_menu.module
--- dynamic_persistent_menu.orig/dynamic_persistent_menu.module	2010-03-15 20:49:01.000000000 +0530
+++ dynamic_persistent_menu/dynamic_persistent_menu.module	2010-03-22 02:27:27.000000000 +0530
@@ -8,7 +8,7 @@
 /**
  * Implementation of hook_block
  */
-function dynamic_persistent_menu_block($op= 'list', $delta = 0, $edit = array()) {
+function dynamic_persistent_menu_block($op = 'list', $delta = 0, $edit = array()) {
    switch ($op) {
     case 'list':
       $result = db_query('SELECT dpmid, root, timeout FROM {dynamic_persistent_menu}');
@@ -43,6 +43,11 @@
         }
         break;
   }
+}
+
+function dynamic_persistent_menu_init() {
+   drupal_add_css(drupal_get_path('module', 'dynamic_persistent_menu') .'/dynamic-persistent-menu.css', 'module', 'all', TRUE);
+
 }
 
 /**
@@ -181,7 +186,7 @@
   $menu_tree = menu_tree_all_data($menu_name);
   $menu_link = menu_link_load($mlid);
   if ($mlid != 0) {
-    for ($i=1; $i<10; $i++) {
+    for ($i = 1; $i < 10; $i++) {
       foreach($menu_tree as $menu_item) {
         if ($menu_item["link"]['mlid'] == $mlid) {
           $menu = $menu_item['below'];
@@ -201,18 +206,17 @@
   }
 
   // Don't display anything if the selected menu has no children
-
   if (!$menu) {
     return;
   }
-  $menu_active=menu_set_active_trail();
+  $menu_active = menu_set_active_trail();
   /*foreach ($menu_active [1] as $key => $value) {
     print "Key: $key; Value: $value<br />\n";
   }*/
-  if(count ($menu_active) > 1) {
+  if (count($menu_active) > 1) {
     $result = db_query("SELECT * FROM {menu_links} WHERE menu_name='%s' AND link_path='%s'",$menu_name,$menu_active[1]['href']);
-    if($row=db_fetch_object($result)) {
-      if($row->plid !=0) {
+    if ($row = db_fetch_object($result)) {
+      if ($row->plid != 0) {
         $trail[] = $row->plid;
       }
       else {
@@ -240,16 +244,10 @@
       
     }
   }*/
-  
-  
   //print $arrroot[0]; 
-  
-  
-  
   // Build table of mlid in the active trail
-  
   //print $a;
- /* foreach ($menu as $key => $value) {
+  /* foreach ($menu as $key => $value) {
     print "Key: $key; Value: $value<br />\n";
   }*/
   //print count (menu_set_active_trail())."<br /n>";
@@ -276,19 +274,17 @@
     }
     
   }*/
- // print count (menu_set_active_trail());
- /* foreach (menu_set_active_trail() as $value) {
+  // print count (menu_set_active_trail());
+  /* foreach (menu_set_active_trail() as $value) {
     if ($value['mlid']) {
       $trail[] = $value['mlid'];
     }
   }*/
-   // Restore active menu trail
-
+
+  // Restore active menu trail
   menu_set_active_menu_name($active_menu_name);
   
   // Build the menus
-  
-  //$output = '<ul id="dynamic-persistent-menu-'. $id .'" style="display:inline" class="dynamic-persistent-menu-menu">';
   $output = '<ul id="dynamic-persistent-menu-'. $id .'" style="display:block" class="dynamic-persistent-menu-menu">';
   foreach($menu as $menu_item) {
     $link = $menu_item['link'];
@@ -332,7 +328,7 @@
           }
         }
         if ($submenu_items !='') {
-          $submenu .= '<ul class="block dynamic-persistent-menu-sub-menu" id="dynamic-persistent-menu-sub-menu'. $link['mlid'] .'" style="display:'. $display  .'">';
+          $submenu .= '<ul class="dynamic-persistent-menu-sub-menu" id="dynamic-persistent-menu-sub-menu'. $link['mlid'] .'" style="display:'. $display  .'">';
           $submenu .= $submenu_items;
           $submenu .= '</ul>';
         }
@@ -341,16 +337,13 @@
   }
   $output .= '</ul>';
   $output .= $submenu;
-    $menu = array(
-      'default' => $over_menu_default,
-      'over' => $over_menu_default,
-      'timeout' => $timeout
-    );
-    $menu_js = drupal_to_js($menu);
-    //drupal_add_js("DynamicPersistentMenu.menus = {};", 'inline');
-    drupal_add_js("DynamicPersistentMenu.menus[$id] = $menu_js;", 'inline');
-    drupal_add_js(drupal_get_path('module', 'dynamic_persistent_menu') .'/dynamic_persistent_menu.js');
-  
+  $menu = array(
+    'default' => $over_menu_default,
+    'over' => $over_menu_default,
+    'timeout' => $timeout
+  );
+  drupal_add_js(array("dynamic_persistent_menu" => array("menus" => array($id => $menu))), 'setting');
+  drupal_add_js(drupal_get_path('module', 'dynamic_persistent_menu') .'/dynamic_persistent_menu.js');
   return $output;
 }
 
@@ -361,13 +354,17 @@
 */
 function theme_dynamic_persistent_menu_menu_item($link, $extra_class = NULL, $id = NULL) {
  if (!empty($extra_class)) {
-   $class .= ' '. $extra_class;
+   $class .= $extra_class;
  }
  
  if ($link['in_active_trail']) {
-   $class .= ' active-trail';
+   if (!empty($class)) {
+     $class .= ' active-trail';
+   }
+   else {
+     $class = 'active-trail';
+   }
  }
- 
 
- return '<li style="display:block" class="'. $class .'" id="'.$id.'">'. theme('menu_item_link', $link) ."</li>\n";
+ return '<li class="'. $class .'" id="'.$id.'">'. theme('menu_item_link', $link) ."</li>\n";
 }
