Index: wp-includes/nav-menu-template.php
===================================================================
--- wp-includes/nav-menu-template.php	(revision 14027)
+++ wp-includes/nav-menu-template.php	(working copy)
@@ -22,8 +22,9 @@
  * link_before - Text before the link.
  * link_after - Text after the link.
  * echo - Whether to echo the menu or return it. Defaults to echo.
- * show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link.
  *
+ * @todo show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link.
+ *
  * @since 3.0.0
  *
  * @param array $args Arguments
@@ -31,7 +32,7 @@
 function wp_nav_menu( $args = array() ) {
 	$defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true,
 	'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '',
-	'depth' => 0, 'walker' => '' );
+	'depth' => 0, 'walker' => '', 'context' => 'frontend' );
 
 	$args = wp_parse_args( $args, $defaults );
 	$args = apply_filters( 'wp_nav_menu_args', $args );
@@ -51,80 +52,38 @@
 			}
 		}
 	}
-
-	if ( $menu && ! is_wp_error( $menu ) )
-		$args->menu = $menu->term_id;
-	$nav_menu = '';
-
-	if ( 'div' == $args->container ) {
-		$class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : '';
-
-		if ( is_nav_menu($menu) ) {
-			$nav_menu .= '<div id="menu-' . $menu->slug . '"'. $class .'>';
-		} else {
-			$nav_menu .= '<div'. $class .'>';
-		}
-	}
-
-	$nav_menu .= wp_get_nav_menu( $args );
-
-	if ( 'div' == $args->container )
-		$nav_menu .= '</div>';
-
-	$nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args );
-
-	if ( $args->echo )
-		echo $nav_menu;
-	else
-		return $nav_menu;
-}
-
-/**
- * Returns a Navigation Menu.
- *
- * See wp_nav_menu() for args.
- *
- * @since 3.0.0
- *
- * @param array $args Arguments
- * @return mixed $output False if menu doesn't exists, else, returns the menu.
- **/
-function wp_get_nav_menu( $args = array() ) {
-	$defaults = array( 'menu' => '', 'menu_class' => 'menu', 'context' => 'frontend', 'depth' => 0,
-	'fallback_cb' => '', 'walker' => '', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', );
-
-	$args = wp_parse_args( $args, $defaults );
-	$args = apply_filters( 'wp_get_nav_menu_args', $args );
-	$args = (object) $args;
-
-	// Variable setup
-	$nav_menu = '';
-	$items = '';
-
-	// Get the menu object
-	$menu = wp_get_nav_menu_object( $args->menu );
-
+	
 	// If the menu exists, get it's items.
 	if ( $menu && !is_wp_error($menu) )
 		$menu_items = wp_get_nav_menu_items( $menu->term_id, $args->context );
 
 	// If no menu was found or if the menu has no items, call the fallback_cb
 	if ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) ) ) {
-		if ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) {
-			$_args = array_merge( (array) $args, array('echo' => false) );
-			return call_user_func( $args->fallback_cb, $_args );
+		if ( 'frontend' == $args->context && ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) ) {
+			return call_user_func( $args->fallback_cb, (array) $args );
 		}
 	}
+	
+	$nav_menu = '';
+	$items = '';
+	$container_allowedtags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'p', 'nav' ) );
 
+	if ( in_array( $args->container, $container_allowedtags ) ) {
+		$class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-'. $menu->slug .'-container"';
+		$nav_menu .= '<'. $args->container . $class .'>';
+	}
+
 	// Set up the $menu_item variables
 	foreach ( (array) $menu_items as $key => $menu_item )
 		$menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item( $menu_item, 'frontend' );
 
 	$items .= walk_nav_menu_tree( $menu_items, $args->depth, $args );
 
-	// CSS class
-	$ul_class = $args->menu_class ? ' class="'. $args->menu_class .'"' : '';
-	$nav_menu .= '<ul'. $ul_class .'>';
+	// Attributes	
+	$attributes  = ' id="menu-' . $menu->slug . '"';
+	$attributes .= $args->menu_class ? ' class="'. $args->menu_class .'"' : '';
+	
+	$nav_menu .= '<ul'. $attributes .'>';
 
 	// Allow plugins to hook into the menu to add their own <li>'s
 	if ( 'frontend' == $args->context ) {
@@ -137,7 +96,15 @@
 
 	$nav_menu .= '</ul>';
 
-	return apply_filters( 'wp_get_nav_menu', $nav_menu );
+	if ( in_array( $args->container, $container_allowedtags ) )
+		$nav_menu .= '</'. $args->container .'>';
+
+	$nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args );
+
+	if ( $args->echo )
+		echo $nav_menu;
+	else
+		return $nav_menu;
 }
 
 /**
@@ -161,7 +128,7 @@
 
 			$output .= $args->before;
 			$output .= '<a'. $attributes .'>';
-			$output .= $args->link_before . apply_filters('the_title', $menu_item->title) . $args->link_after;
+			$output .= $args->link_before . apply_filters( 'the_title', $menu_item->title ) . $args->link_after;
 			$output .= '</a>';
 			$output .= $args->after;
 
@@ -218,6 +185,6 @@
 			break;
 	}
 
-	return $output;
+	return apply_filters( 'wp_get_nav_menu_item', $output, $context, $args );
 }
 ?>
\ No newline at end of file
Index: wp-includes/classes.php
===================================================================
--- wp-includes/classes.php	(revision 14027)
+++ wp-includes/classes.php	(working copy)
@@ -1178,7 +1178,7 @@
 	 * @param object $item Menu item data object.
 	 * @param int $depth Depth of menu item. Used for padding.
 	 * @param int $current_page Menu item ID.
-	 * @param array $args
+	 * @param object $args
 	 */
 	function start_el(&$output, $item, $depth, $args) {
 		$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
@@ -1217,7 +1217,6 @@
 	function end_el(&$output, $item, $depth) {
 		$output .= "</li>\n";
 	}
-
 }
 
 /**
Index: wp-includes/nav-menu.php
===================================================================
--- wp-includes/nav-menu.php	(revision 14027)
+++ wp-includes/nav-menu.php	(working copy)
@@ -178,7 +178,7 @@
 	$walker = ( empty($r->walker) ) ? new Walker_Nav_Menu : $r->walker;
 	$args = array( $items, $depth, $r );
 
-	return call_user_func_array(array(&$walker, 'walk'), $args);
+	return call_user_func_array( array(&$walker, 'walk'), $args );
 }
 
 /**
@@ -202,17 +202,19 @@
 			if ( 'post_type' == $menu_item->type ) {
 				$object = get_post_type_object( $menu_item->object );
 				$menu_item->append = $object->singular_label;
+				$menu_item->url = get_permalink( $menu_item->object_id );
 
 			} elseif ( 'taxonomy' == $menu_item->type ) {
 				$object = get_taxonomy( $menu_item->object );
 				$menu_item->append = $object->singular_label;
+				$menu_item->url = get_term_link( (int) $menu_item->object_id, $menu_item->object );
 
 			} else {
 				$menu_item->append = __('Custom');
+				$menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
 			}
 
 			$menu_item->title = $menu_item->post_title;
-			$menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
 			$menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
 
 			$menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
@@ -221,7 +223,7 @@
 			$menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_classes', true );
 			$menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
 			break;
-
+		
 		case 'custom':
 			$menu_item->db_id = 0;
 			$menu_item->object_id = (int) $menu_item->ID;
@@ -235,8 +237,8 @@
 			$menu_item->title = $menu_item->post_title;
 			$menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
 			$menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
-			$menu_item->classes = '';
-			$menu_item->xfn = '';
+			$menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_target', true );
+			$menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
 			break;
 
 		case 'post_type':
@@ -273,11 +275,12 @@
 			$menu_item->url = get_term_link( $menu_item, $menu_item_object );
 			$menu_item->target = '';
 			$menu_item->attr_title = '';
-			$menu_item->description = strip_tags( $menu_item->description );
+			$menu_item->description = '';
 			$menu_item->classes = '';
 			$menu_item->xfn = '';
 			break;
 	}
-	return $menu_item;
+	
+	return apply_filters( 'wp_setup_nav_menu_item', $menu_item, $menu_item_type, $menu_item_object );
 }
-?>
+?>
\ No newline at end of file
Index: wp-content/themes/twentyten/style.css
===================================================================
--- wp-content/themes/twentyten/style.css	(revision 14027)
+++ wp-content/themes/twentyten/style.css	(working copy)
@@ -113,6 +113,7 @@
 h3#comments-title,
 h3#reply-title,
 #access .menu,
+#access div.menu ul,
 #cancel-comment-reply-link,
 .form-allowed-tags,
 #site-info,
@@ -153,6 +154,7 @@
 
 /* The main theme structure */
 #access .menu-header,
+div.menu,
 #colophon,
 #branding,
 #main,
@@ -360,15 +362,15 @@
 	display:block;
 	float:left;
 }
-#access .menu-header {
+#access .menu-header, div.menu {
 	font-size: 13px;
 	margin-left: 12px;
 }
-#access .menu-header ul {
+#access .menu-header ul, div.menu ul {
 	list-style: none;
 	margin: 0;
 }
-#access .menu-header li {
+#access .menu-header li, div.menu li {
 	float:left;
 	position: relative;
 }
Index: wp-admin/includes/nav-menu.php
===================================================================
--- wp-admin/includes/nav-menu.php	(revision 14027)
+++ wp-admin/includes/nav-menu.php	(working copy)
@@ -55,7 +55,7 @@
 
 	foreach ( $post_types as $post_type ) {
 		$id = $post_type->name;
-		add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $post_type->singular_label ), 'wp_nav_menu_item_post_type_metabox', 'nav-menus', 'side', 'default', $post_type );
+		add_meta_box( "add-{$id}", sprintf( __('Add %s'), $post_type->label ), 'wp_nav_menu_item_post_type_metabox', 'nav-menus', 'side', 'default', $post_type );
 	}
 }
 
@@ -72,8 +72,7 @@
 
 	foreach ( $taxonomies as $tax ) {
 		$id = $tax->name;
-
-		add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'nav-menus', 'side', 'default', $tax );
+		add_meta_box( "add-{$id}", sprintf( __('Add %s'), $tax->label ), 'wp_nav_menu_item_taxonomy_metabox', 'nav-menus', 'side', 'default', $tax );
 	}
 }
 
Index: wp-admin/nav-menus.php
===================================================================
--- wp-admin/nav-menus.php	(revision 14027)
+++ wp-admin/nav-menus.php	(working copy)
@@ -274,7 +274,7 @@
 						<div id="menu-container" class="postbox">
 							<h3 class="hndle"><?php echo esc_html( $nav_menu_selected_title ); ?></h3>
 							<div class="inside">
-								<?php echo wp_get_nav_menu( array( 'context' => 'backend', 'menu' => $nav_menu_selected_id ) ); ?>
+								<?php wp_nav_menu( array( 'menu' => $nav_menu_selected_id, 'context' => 'backend' ) ); ?>
 							</div><!-- /.inside -->
 						<!-- /#nav-menu-canvas .postbox-->
 						</div>
