Index: class-walker-nav-menu.php
===================================================================
--- class-walker-nav-menu.php	(revision 39490)
+++ class-walker-nav-menu.php	(working copy)
@@ -246,5 +246,20 @@
 		}
 		$output .= "</li>{$n}";
 	}
-
+	public function factory_element($element){
+		
+		if(!($element instanceof WP_Post && $element->post_type =='nav_menu_item')){
+			$element= wp_setup_nav_menu_item($element);
+		}
+		
+		return $element;
+	}
+	public function factory_args($args){
+		//$wp_nav_menu_args = array_shift($args);
+		if(is_array($args)){
+			$args=(object)$args;
+		}
+		// array_unshift($args, $wp_nav_menu_args);
+		return $args;
+	}
 } // Walker_Nav_Menu
Index: class-wp-walker.php
===================================================================
--- class-wp-walker.php	(revision 39490)
+++ class-wp-walker.php	(working copy)
@@ -143,6 +143,8 @@
 		}
 
 		$cb_args = array_merge( array(&$output, $element, $depth), $args);
+		$cb_args[3]= $this->factory_args($cb_args[3]);
+		$element= $this->factory_element($element);
 		call_user_func_array(array($this, 'start_el'), $cb_args);
 
 		// descend only when the depth is right and there are childrens for this element
@@ -153,6 +155,7 @@
 				if ( !isset($newlevel) ) {
 					$newlevel = true;
 					//start the child delimiter
+
 					$cb_args = array_merge( array(&$output, $depth), $args);
 					call_user_func_array(array($this, 'start_lvl'), $cb_args);
 				}
@@ -421,5 +424,14 @@
 
 		unset( $children_elements[ $id ] );
 	}
+	public function factory_element($element){
+		
+		
+		return $element;
+	}
+	public function factory_args($args){
 
+		return $args;
+	}
+
 } // Walker
