Index: nav-menu.php
===================================================================
--- nav-menu.php	(revision 14072)
+++ nav-menu.php	(working copy)
@@ -208,6 +208,8 @@
 				$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 );
+				if ( is_wp_error( $menu_item->url ) )
+					$menu_item->url = '';
 
 			} else {
 				$menu_item->append = __('Custom');
@@ -273,6 +275,8 @@
 
 			$menu_item->title = $menu_item->name;
 			$menu_item->url = get_term_link( $menu_item, $menu_item_object );
+			if ( is_wp_error( $menu_item->url ) )
+				$menu_item->url = '';
 			$menu_item->target = '';
 			$menu_item->attr_title = '';
 			$menu_item->description = '';
@@ -283,4 +287,40 @@
 	
 	return apply_filters( 'wp_setup_nav_menu_item', $menu_item, $menu_item_type, $menu_item_object );
 }
+
+/**
+ * Internal function that deletes nav menu items
+ * if the object has been deleted elsewhere.
+ *
+ * It removes any instances of that object from all nav menus.
+ *
+ * @since 3.0.0
+ **/
+function _wp_delete_nav_menu_item( $term_or_post_id, $tt_id = null, $taxonomy = null ) {
+	if ( empty( $taxonomy ) && $post = get_post( $term_or_post_id ) && $post->post_type == 'nav_menu_item' )
+		return;
+	$nav_menus = wp_get_nav_menus();
+	if ( empty( $nav_menus ) )
+		return;
+	foreach ( $nav_menus as $nav_menu ) {
+		$menu_items = wp_get_nav_menu_items( $nav_menu->term_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') );
+		if ( empty( $menu_items ) )
+			continue;
+		foreach ( $menu_items as $menu_item ) {
+			$object_type = get_post_meta( $menu_item->ID, '_menu_item_type', true );
+			if ( ! in_array( $object_type, array( 'post_type', 'taxonomy' ) ) )
+				continue;
+			$object_id = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );
+			if ( $object_id != $term_or_post_id )
+				continue;
+			if ( 'taxonomy' == $object_type && ! empty( $taxonomy ) || 'post_type' == $object_type && empty( $taxonomy ) ) {
+				wp_delete_post( $menu_item->ID, true );
+				return;
+			}
+		}
+	}
+}
+add_action( 'deleted_term', '_wp_delete_nav_menu_item', 10, 3 );
+add_action( 'deleted_post', '_wp_delete_nav_menu_item' );
+add_action( 'trashed_post', '_wp_delete_nav_menu_item' );
 ?>
\ No newline at end of file
