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	2009-12-08 02:15:57.000000000 +0530
+++ dynamic_persistent_menu/dynamic_persistent_menu.js	2010-03-01 13:25:24.000000000 +0530
@@ -1,60 +1,111 @@
-var overMenu;
-var overStatus = 1;
+// $Id: dynamic_persistent_menu.js,v 1.2 2010-03-01 06:17:41 dileep Exp $
+
+/**
+ * @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.
 
-$(document).ready(function()
-{
+/**
+ * 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;
+  } 
+  //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 ;
-        subMenu = dynamic_persistent_menu_get_sub_menu(overMenu);
-        
-        if (overMenu)
-        {
-          $('#' + subMenu).hide();
-          $('#' + overMenu).removeClass('dynamic-persistent-menu-children-active');
-        }
-
-        overMenu = this.id;
-        subMenu = dynamic_persistent_menu_get_sub_menu(overMenu);
-        $('#' + subMenu).show();
-        $('#' + this.id).addClass('dynamic-persistent-menu-children-active')
+    function () {
+      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;
+      }
+      // 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]);
+        $('#' + subMenu).hide();
+        $('#' + overMenu[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]);
+      $('#' + subMenu).show();
+      $('#' + this.id).addClass('dynamic-persistent-menu-children-active');
     }
-    ).mouseout(
-        dynamic_persistent_menu_set_timeout
-      );
+  ).mouseout(
+    function() {
+      // Set timeout for the hide function
+      dynamic_persistent_menu_set_timeout(settings_id);
+    }
+  );
       
-    $(".dynamic-persistent-menu-sub-menu").mouseover(
-        function()
-        {
-          if (dynamic_persistent_menu_get_sub_menu(overMenu) == this.id)
-          {
-            overStatus = 1;
-          }
-        }
-      ).mouseout(
-dynamic_persistent_menu_set_timeout
-        )
-});
+  // 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;
+      }
+    }
+  ).mouseout(
+    function() {
+      dynamic_persistent_menu_set_timeout(settings_id);
+    }
+  );
+};
 
-function dynamic_persistent_menu_get_sub_menu(menu_id)
-{
+/**
+ * Get the id of the submenu of a menu, 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');
 }
 
-function dynamic_persistent_menu_reset()
-{
-  if (!overStatus)
-  {
-    $('#' + dynamic_persistent_menu_get_sub_menu(overMenu)).hide();
-    $('#' + overMenu).removeClass('dynamic-persistent-menu-children-active');
-    overMenu = overMenuDefault;
-    $('#' + dynamic_persistent_menu_get_sub_menu(overMenu)).show();
+/**
+ * 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-', '');
+  return Number(id);
+}
+
+/**
+ * Reset all submenus and the corresponding statuses.
+ */
+function dynamic_persistent_menu_reset() {
+  // 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();
   }
 }
 
-function dynamic_persistent_menu_set_timeout()
-{
+/**
+ * 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 ;
-  setTimeout( 'dynamic_persistent_menu_reset()' , subMenuTimeout );
-}
\ No newline at end of file
+  setTimeout('dynamic_persistent_menu_reset()', subMenuTimeout);
+}
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	2009-12-08 02:15:57.000000000 +0530
+++ dynamic_persistent_menu/dynamic_persistent_menu.module	2010-03-01 13:25:24.000000000 +0530
@@ -1,5 +1,5 @@
 <?php
-// $Id: dynamic_persistent_menu.module,v 1.2.2.9 2009/12/07 20:45:57 yrocq Exp $
+// $Id: dynamic_persistent_menu.module,v 1.2 2010-03-01 06:17:41 dileep Exp $
 
 /**
  * @file
@@ -7,9 +7,9 @@
  */
 /**
  * Implementation of hook_block
- */
+ */
 function dynamic_persistent_menu_block($op= 'list', $delta = 0, $edit = array()) {
-  switch ($op) {
+   switch ($op) {
     case 'list':
       $result = db_query('SELECT dpmid, root, timeout FROM {dynamic_persistent_menu}');
       while($row = db_fetch_object($result)) {
@@ -18,9 +18,8 @@
       }
       return $block;
       break;
-      
-    case 'view':
-      $dpm = dynamic_persistent_menu_load($delta);
+    case 'view':
+      $dpm = dynamic_persistent_menu_load($delta);
       $params = explode(':', $dpm->root);
       $block['content'] = theme('dynamic_persistent_menu', $delta, $params[0], $params[1], $dpm->timeout);
       return $block;
@@ -129,7 +128,7 @@
  */
 
 function dynamic_persistent_menu_setting_base_form($dpm = NULL) {
-  $options = menu_parent_options(menu_get_menus(), 0);
+  $options = menu_parent_options(menu_get_menus(), 0);
   $form['dpmid'] = array(
     '#type' => 'hidden',
     '#value' => $dpm->dpmid
@@ -150,7 +149,7 @@
   return $form;
 }
 
-function dynamic_persistent_menu_load($dpmid) {
+function dynamic_persistent_menu_load($dpmid) {
   $result = db_query('SELECT dpmid, root, timeout FROM {dynamic_persistent_menu} WHERE dpmid=%d', $dpmid);
   
   return db_fetch_object($result);
@@ -164,10 +163,9 @@
  * Theme functions
  */
 
-function theme_dynamic_persistent_menu($id, $menu_name, $mlid, $timeout) {
-  static $settings;
-  
-  if (!isset($settings)) {
+function theme_dynamic_persistent_menu($id, $menu_name, $mlid, $timeout) {
+ static $settings;
+   if (!isset($settings)) {
     $settings = array(
       "menus" => array()
     );
@@ -181,9 +179,8 @@
   // Find menu item in the menu tree
 
   $menu_tree = menu_tree_all_data($menu_name);
-  $menu_link = menu_link_load($mlid);
-  
-  if ($mlid != 0) {
+  $menu_link = menu_link_load($mlid);
+  if ($mlid != 0) {
     for ($i=1; $i<10; $i++) {
       foreach($menu_tree as $menu_item) {
         if ($menu_item["link"]['mlid'] == $mlid) {
@@ -207,37 +204,105 @@
 
   if (!$menu) {
     return;
-  }
-
+  }
+  $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) {
+    $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) {
+        $trail[] = $row->plid;
+      }
+      else {
+        $trail[] = $row->mlid;
+      }
+      //$active_menu=$row->menu_name;
+      //print $active_menu;
+    }
+  }
+  /*foreach ($a[1] as $key => $value) {
+    print "Key: $key; Value: $value<br />\n";
+  }*/
   // Backup active menu trail and set a new one
-  
-  $active_menu_name = menu_get_active_menu_name();
-  menu_set_active_menu_name($menu_name);
-
-  // Build table of mlid in the active trail
-  
-  foreach (menu_set_active_trail() as $value) {
-    if ($value['mlid']) {
+  $active_menu_name = menu_get_active_menu_name();
+  menu_set_active_menu_name($menu_name);
+  /*$a=menu_set_active_trail();
+  foreach ($a[1] as $key => $value) {
+    print "Key: $key; Value: $value<br />\n";
+  }*/
+  /*$result = db_query('SELECT dpmid, root, timeout FROM {dynamic_persistent_menu}');
+  while ($row=db_fetch_object($result)) {
+    $arrroot=explode(":",$row->root);
+    print $arrroot[0]."=====".$menu_name."<br /n>";
+    if($arrroot[0]==$menu_name) {
+      
+    }
+  }*/
+  
+  
+  //print $arrroot[0]; 
+  
+  
+  
+  // Build table of mlid in the active trail
+  
+  //print $a;
+ /* foreach ($menu as $key => $value) {
+    print "Key: $key; Value: $value<br />\n";
+  }*/
+  //print count (menu_set_active_trail())."<br /n>";
+  
+  /*$bool_active_trail=TRUE;
+  if (count (menu_set_active_trail()) == 1) {
+      //print ("dileep");
+    $a=menu_tree_all_data($menu_name);
+    foreach ($a as $b) {
+      $first_mid = $b['link']['mlid'];
+      break;
+    }
+    $bool_active_trail=FALSE;
+  }
+  else if (count (menu_set_active_trail()) >1) {
+    $control_menu=menu_set_active_trail();
+    if (!$control_menu[1]['mlid']) {
+      $a=menu_tree_all_data($menu_name);
+        foreach ($a as $b) {
+          $first_mid = $b['link']['mlid'];
+          break;
+        }
+      $bool_active_trail=FALSE;
+    }
+    
+  }*/
+ // 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">';
-
-  foreach($menu as $menu_item) {
+  //$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'];
-    if ($link['hidden'] == 0) {
-      if($link['has_children']) {
-        if (is_array($trail) && in_array($link['mlid'], $trail)) {
-          $display = 'block';
+    if ($link['hidden'] == 0) {
+      if($link['has_children']) {
+        if (is_array($trail) && in_array($link['mlid'], $trail)) {
+          $display = 'block';
           $over_menu_default = $link['mlid'];
-        }
+        }
+        /*else if($bool_active_trail==FALSE) {
+          $display = 'block';
+          $over_menu_default = $first_mid;
+          
+        }*/
         else {
           $display = 'none';
         }
@@ -245,7 +310,11 @@
       
       if (is_array($trail) && in_array($link['mlid'], $trail)) {
         $link['in_active_trail'] = TRUE;
-      }
+      }
+      /*else if($bool_active_trail==FALSE) {
+        $link['in_active_trail'] = TRUE;
+        $bool_active_trail=TRUE;
+      }*/
       
       $output .= theme('dynamic_persistent_menu_menu_item', $link, 'dynamic-persistent-menu-menu-item', 'dynamic-persistent-menu-menu'.$link['mlid']);
     
@@ -278,6 +347,7 @@
       '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');
   
@@ -299,5 +369,5 @@
  }
  
 
- return '<li style="display:inline" class="'. $class .'" id="'.$id.'">'. theme('menu_item_link', $link) ."</li>\n";
-}
\ No newline at end of file
+ return '<li style="display:block" class="'. $class .'" id="'.$id.'">'. theme('menu_item_link', $link) ."</li>\n";
+}
