--- classes.php.orig	2007-09-11 17:20:49.000000000 +0100
+++ classes.php	2007-09-11 17:26:25.000000000 +0100
@@ -507,16 +507,30 @@
 		return $output;
 	}
 
+	function parent_level($page, $current_page, $level=0) {
+		$_current_page = get_page($current_page);
+		if ( $page->ID == $current_page )
+			return $level;
+		elseif ( $_current_page && $page->ID == $_current_page->post_parent )
+			return ++$level;
+		elseif ( is_object($_current_page) )
+			return ( $this->parent_level($page, $_current_page->post_parent, ++$level ) );
+		else
+			return false;
+	}
+
 	function start_el($output, $page, $depth, $current_page, $args) {
 		if ( $depth )
 			$indent = str_repeat("\t", $depth);
 		extract($args, EXTR_SKIP);
 		$css_class = 'page_item page-item-'.$page->ID;
-		$_current_page = get_page( $current_page );
-		if ( $page->ID == $current_page )
-			$css_class .= ' current_page_item ';
-		elseif ( $_current_page && $page->ID == $_current_page->post_parent )
+		$parent_level = $this->parent_level($page, $current_page);
+		if ( $parent_level === 0 )
+			$css_class .= ' current_page_item';
+		elseif ( $parent_level > 0 )
 			$css_class .= ' current_page_parent';
+		if ( $parent_level !== false )
+			$css_class .= ' current_page_parent_l' . $parent_level;
 
 		$output .= $indent . '<li class="' . $css_class . '"><a href="' . get_page_link($page->ID) . '" title="' . attribute_escape(apply_filters('the_title', $page->post_title)) . '">' . apply_filters('the_title', $page->post_title) . '</a>';
 
@@ -581,6 +595,18 @@
 		return $output;
 	}
 
+	function parent_level($category, $current_category, $level=0) {
+		$_current_category = get_category( $current_category );
+		if ( $category->term_id == $current_category )
+			return $level;
+		elseif ( $_current_category && $category->term_id == $_current_category->parent )
+			return ++$level;
+		elseif ( is_object($_current_category) )
+			return ( $this->parent_level($category, $_current_category->parent, ++$level ));
+		else
+			return false;
+	}
+
 	function start_el($output, $category, $depth, $args) {
 		extract($args);
 
@@ -629,18 +655,18 @@
 			$link .= ' ' . gmdate('Y-m-d', $category->last_update_timestamp);
 		}
 
-		if ( $current_category )
-			$_current_category = get_category( $current_category );
-
 		if ( 'list' == $args['style'] ) {
-			$output .= "\t<li";
-			$class = 'cat-item cat-item-'.$category->term_id;
-			if ( $current_category && ($category->term_id == $current_category) )
-				$class .=  ' current-cat';
-			elseif ( $_current_category && ($category->term_id == $_current_category->parent) )
-				$class .=  ' current-cat-parent';
-			$output .=  ' class="'.$class.'"';
-			$output .= ">$link\n";
+			$css_class = 'cat-item cat-item-'.$category->term_id;
+			if ( $current_category ) {
+				$parent_level = $this->parent_level($category, $current_category);
+				if ( $parent_level === 0 )
+					$css_class .=  ' current-cat';
+				elseif ( $parent_level > 0 )
+					$css_class .=  ' current-cat-parent';
+				if ( $parent_level !== false )
+					$css_class .= ' current-cat-parent-l' . $parent_level;
+			}
+			$output .= "\t" . '<li class="' . $css_class . '">$link' . "\n";
 		} else {
 			$output .= "\t$link<br />\n";
 		}

