--- dynamic_persistent_menu.module	2010-05-12 16:39:30.000000000 +0200
+++ template.php	2010-05-12 16:41:41.000000000 +0200
@@ -55,9 +55,31 @@
   
   $output = '<ul class="dynamic-persistent-menu-menu">';
 
+  // Cleaning 'hidden' items
+  foreach ($menu as $key => $menu_item) {
+    if ($menu_item['link']['hidden']) {
+      unset($menu[$key]);
+      continue;
+    }
+    if ($menu_item['link']['has_children']) {
+      foreach ($menu_item['below'] as $key_sub => $menu_item_sub) {
+        if ($menu_item_sub['link']['hidden']) {
+          unset($menu[$key]['below'][$key_sub]);
+        }
+      }
+    }
+  }
+
+  // Counting items for 'first' and 'last' classes
+  $cpt = 0;
+  $num_items = count($menu);
+
   foreach($menu as $menu_item) {
     $link = $menu_item['link'];
-    if ($link['hidden'] == 0) {
+
+    // Reset extra_classes for each item
+    $extra_classes = array($item_class);
+
       if($link['has_children']) {
         if (is_array($trail) && in_array($link['mlid'], $trail)) {
           $display = 'block';
@@ -72,20 +94,38 @@
         $link['in_active_trail'] = TRUE;
       }
       
-      $output .= theme('dynamic_persistent_menu_menu_item', $link, 'dynamic-persistent-menu-menu-item', 'dynamic-persistent-menu-menu'.$link['mlid']);
+    if ($cpt == 0) {
+      $extra_classes[] = 'first';
+    }
+    if ($cpt == $num_items - 1) {
+      $extra_classes[] = 'last';
+    }
+    
+    $output .= theme('dynamic_persistent_menu_menu_item', $link, implode(' ', $extra_classes), 'dynamic-persistent-menu-menu'.$link['mlid']);
+    $cpt++;
     
       // Submenu
       
       if ($menu_item['link']['has_children']) {
+      // same count for first/last
+      $cpt_sub = 0;
+      $num_items_sub = count($menu_item['below']);
+
         $submenu_items ='';
         foreach($menu_item['below'] as $submenu_item) {
+        $extra_classes_sub = array($sub_item_class);
           $link2 = $submenu_item['link'];
-          if ($link2['hidden'] == 0) {
             if (is_array($trail) && in_array($link2['mlid'], $trail)) {
               $link2['in_active_trail'] = TRUE;
             }
-            $submenu_items .= theme('dynamic_persistent_menu_menu_item', $link2, 'dynamic-persistent-menu-sub-menu-item', 'dynamic-persistent-menu-sub-menu-item'.$link2['mlid']);;
+        if ($cpt_sub == 0) {
+          $extra_classes_sub[] = 'first';
           }
+        if ($cpt_sub == $num_items_sub - 1) {
+          $extra_classes_sub[] = 'last';
+        }
+        $submenu_items .= theme('dynamic_persistent_menu_menu_item', $link2, implode(' ', $extra_classes_sub), 'dynamic-persistent-menu-sub-menu-item'.$link2['mlid']);
+        $cpt_sub++;
         }
         if ($submenu_items !='') {
           $submenu .= '<ul class="block dynamic-persistent-menu-sub-menu" id="dynamic-persistent-menu-sub-menu'. $link['mlid'] .'" style="display:'. $display  .'">';
@@ -94,7 +134,6 @@
         }
       }
     }
-  }
   $output .= '</ul>';
   $output .= $submenu;
     drupal_add_js("overMenuDefault = 'dynamic-persistent-menu-menu". $over_menu_default ."';", 'inline');
