Index: wp-admin/admin-ajax.php
===================================================================
--- wp-admin/admin-ajax.php	(revision 17521)
+++ wp-admin/admin-ajax.php	(working copy)
@@ -751,6 +751,10 @@
 			! empty( $menu_item_data['menu-item-object-id'] )
 		) {
 			switch( $menu_item_data['menu-item-type'] ) {
+				case 'post_type_archive' :
+					$_object = get_post_type_object( $menu_item_data['menu-item-object'] );
+				break;
+				
 				case 'post_type' :
 					$_object = get_post( $menu_item_data['menu-item-object-id'] );
 				break;
Index: wp-admin/includes/nav-menu.php
===================================================================
--- wp-admin/includes/nav-menu.php	(revision 17521)
+++ wp-admin/includes/nav-menu.php	(working copy)
@@ -57,6 +57,8 @@
 		} elseif ( 'post_type' == $item->type ) {
 			$original_object = get_post( $item->object_id );
 			$original_title = $original_object->post_title;
+		} elseif ( 'post_type_archive' == $item->type ) {
+			$original_title = $item->label;
 		}
 
 		$classes = array(
@@ -368,6 +370,7 @@
 	add_meta_box( 'add-custom-links', __('Custom Links'), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' );
 	wp_nav_menu_post_type_meta_boxes();
 	wp_nav_menu_taxonomy_meta_boxes();
+	wp_nav_menu_post_type_archives_meta_box();
 
 	// Register advanced menu items (columns)
 	add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns');
@@ -452,6 +455,20 @@
 }
 
 /**
+ * Displays a metabox for any post type archive menu item.
+ *
+ * @since 3.0.0
+ */
+function wp_nav_menu_post_type_archives_meta_box() {
+	$post_type_archives = get_post_types( array( 'show_in_nav_menus' => true, 'has_archive' => true ), 'object' );
+
+	if ( ! $post_type_archives )
+		return;
+
+	add_meta_box( 'add-post-type-archives', 'Post Type Archives', 'wp_nav_menu_item_post_type_archives_meta_box', 'nav-menus', 'side', 'default', $post_type_archives );
+}
+
+/**
  * Displays a metabox for the nav menu theme locations.
  *
  * @since 3.0.0
@@ -938,6 +955,141 @@
 }
 
 /**
+ * Displays a metabox for the post type archives menu item.
+ *
+ * @since 3.0.0
+ *
+ * @param string $object Not used.
+ * @param string $post_type_archives_list The post type archives object.
+ */
+function wp_nav_menu_item_post_type_archives_meta_box( $object, $post_type_archives_list ) {
+	global $_nav_menu_placeholder, $nav_menu_selected_id;
+
+	$post_type_name = 'posttype-archives';
+
+	// paginate browsing for large numbers of post objects
+	$per_page = 50;
+	$pagenum = isset( $_REQUEST[$post_type_name . '-tab'] ) && isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 1;
+	$offset = 0 < $pagenum ? $per_page * ( $pagenum - 1 ) : 0;
+
+	$walker = new Walker_Nav_Menu_Checklist;
+
+	$current_tab = 'all';
+	if ( isset( $_REQUEST[$post_type_name . '-tab'] ) && in_array( $_REQUEST[$post_type_name . '-tab'], array('all', 'search') ) ) {
+		$current_tab = $_REQUEST[$post_type_name . '-tab'];
+	}
+
+	if ( ! empty( $_REQUEST['quick-search-' . $post_type_name] ) ) {
+		$current_tab = 'search';
+	}
+
+	$removed_args = array(
+		'action',
+		'customlink-tab',
+		'edit-menu-item',
+		'menu-item',
+		'page-tab',
+		'_wpnonce',
+	);
+
+	foreach ( $post_type_archives_list['args'] as $post_type_archive ) {
+		$post_type_archives[$post_type_archive->label] = $post_type_archive;
+	}
+	
+	?>
+	<div id="<?php echo $post_type_name; ?>" class="posttypediv">
+		<ul id="<?php echo $post_type_name; ?>-tabs" class="posttype-tabs add-menu-item-tabs">
+			<?php /*<li <?php echo ( 'most-recent' == $current_tab ? ' class="tabs"' : '' ); ?>><a class="nav-tab-link" href="<?php if ( $nav_menu_selected_id ) echo esc_url(add_query_arg($post_type_name . '-tab', 'most-recent', remove_query_arg($removed_args))); ?>#tabs-panel-<?php echo $post_type_name; ?>-most-recent"><?php _e('Most Recent'); ?></a></li> */ ?>
+			<li <?php echo ( 'all' == $current_tab ? ' class="tabs"' : '' ); ?>><a class="nav-tab-link" href="<?php if ( $nav_menu_selected_id ) echo esc_url(add_query_arg($post_type_name . '-tab', 'all', remove_query_arg($removed_args))); ?>#<?php echo $post_type_name; ?>-all"><?php _e('View All'); ?></a></li>
+			<li <?php echo ( 'search' == $current_tab ? ' class="tabs"' : '' ); ?>><a class="nav-tab-link" href="<?php if ( $nav_menu_selected_id ) echo esc_url(add_query_arg($post_type_name . '-tab', 'search', remove_query_arg($removed_args))); ?>#tabs-panel-<?php echo $post_type_name; ?>-search"><?php _e('Search'); ?></a></li>
+		</ul>
+		<div class="tabs-panel <?php
+			echo ( 'search' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' );
+		?>" id="tabs-panel-<?php echo $post_type_name; ?>-search">
+			<?php
+			if ( isset( $_REQUEST['quick-search-' . $post_type_name] ) ) {
+				$searched = esc_attr( $_REQUEST['quick-search-' . $post_type_name] );
+				$search_results = get_posts( array( 's' => $searched, 'post_type' => $post_type_name, 'fields' => 'all', 'order' => 'DESC', ) );
+			} else {
+				$searched = '';
+				$search_results = array();
+			}
+			?>
+			<p class="quick-search-wrap">
+				<input type="text" class="quick-search input-with-default-title" title="<?php esc_attr_e('Search'); ?>" value="<?php echo $searched; ?>" name="quick-search-<?php echo $post_type_name; ?>" />
+				<img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
+				<?php submit_button( __( 'Search' ), 'quick-search-submit button-secondary hide-if-js', 'submit', false ); ?>
+			</p>
+
+			<ul id="<?php echo $post_type_name; ?>-search-checklist" class="list:<?php echo $post_type_name?> categorychecklist form-no-clear">
+			<?php if ( ! empty( $search_results ) && ! is_wp_error( $search_results ) ) : ?>
+				<?php
+				$args['walker'] = $walker;
+				echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $search_results), 0, (object) $args );
+				?>
+			<?php elseif ( is_wp_error( $search_results ) ) : ?>
+				<li><?php echo $search_results->get_error_message(); ?></li>
+			<?php elseif ( ! empty( $searched ) ) : ?>
+				<li><?php _e('No results found.'); ?></li>
+			<?php endif; ?>
+			</ul>
+		</div><!-- /.tabs-panel -->
+
+
+		<div id="<?php echo $post_type_name; ?>-all" class="tabs-panel tabs-panel-view-all <?php
+			echo ( 'all' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' );
+		?>">
+			<?php if ( ! empty( $page_links ) ) : ?>
+				<div class="add-menu-item-pagelinks">
+					<?php echo $page_links; ?>
+				</div>
+			<?php endif; ?>
+			<ul id="<?php echo $post_type_name; ?>checklist" class="list:<?php echo $post_type_name?> categorychecklist form-no-clear">
+				<?php
+				$args['walker'] = $walker;
+
+				$checkbox_items = walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $post_type_archives), 0, (object) $args );
+
+				if ( 'all' == $current_tab && ! empty( $_REQUEST['selectall'] ) ) {
+					$checkbox_items = preg_replace('/(type=(.)checkbox(\2))/', '$1 checked=$2checked$2', $checkbox_items);
+				}
+
+				echo $checkbox_items;
+				?>
+			</ul>
+			<?php if ( ! empty( $page_links ) ) : ?>
+				<div class="add-menu-item-pagelinks">
+					<?php echo $page_links; ?>
+				</div>
+			<?php endif; ?>
+		</div><!-- /.tabs-panel -->
+
+
+		<p class="button-controls">
+			<span class="list-controls">
+				<a href="<?php
+					echo esc_url(add_query_arg(
+						array(
+							$post_type_name . '-tab' => 'all',
+							'selectall' => 1,
+						),
+						remove_query_arg($removed_args)
+					));
+				?>#<?php echo $post_type_name; ?>" class="select-all"><?php _e('Select All'); ?></a>
+			</span>
+
+			<span class="add-to-menu">
+				<img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
+				<input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-post-type-menu-item" id="submit-<?php echo $post_type_name; ?>" />
+			</span>
+		</p>
+
+	</div><!-- /.posttypediv -->
+	<?php
+}
+
+
+/**
  * Save posted nav menu item data.
  *
  * @since 3.0.0
Index: wp-includes/nav-menu-template.php
===================================================================
--- wp-includes/nav-menu-template.php	(revision 17521)
+++ wp-includes/nav-menu-template.php	(working copy)
@@ -358,6 +358,30 @@
 			$active_parent_object_ids[] = (int) $menu_item->post_parent;
 			$active_object = $menu_item->object;
 
+		// if the menu item corresponds to the currently-queried post type archive object
+		} elseif ( 'post_type_archive' == $menu_item->type && $wp_query->is_post_type_archive ) {
+			$current_url = untrailingslashit( ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+			$item_url = untrailingslashit( strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url );
+			$_indexless_current = untrailingslashit( preg_replace( '/index.php$/', '', $current_url ) );
+
+			if ( in_array( $item_url, array( $current_url, $_indexless_current ) ) ) {
+				$classes[] = 'current-menu-item';
+				$menu_items[$key]->current = true;
+				
+				$_anc_id = (int) $menu_item->db_id;
+				
+				while(
+					( $_anc_id = get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) &&
+					! in_array( $_anc_id, $active_ancestor_item_ids )
+				) {
+					$active_ancestor_item_ids[] = $_anc_id;
+				}
+
+				$active_parent_item_ids[] = (int) $menu_item->menu_item_parent;
+				$active_parent_object_ids[] = (int) $menu_item->post_parent;
+				$active_object = $menu_item->object;
+			}
+
 		// if the menu item corresponds to the currently-requested URL
 		} elseif ( 'custom' == $menu_item->object ) {
 			$current_url = untrailingslashit( ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
Index: wp-includes/nav-menu.php
===================================================================
--- wp-includes/nav-menu.php	(revision 17521)
+++ wp-includes/nav-menu.php	(working copy)
@@ -576,6 +576,12 @@
 				$original_title = get_term_field( 'name', $menu_item->object_id, $menu_item->object, 'raw' );
 				$menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title;
 
+			} elseif ( 'post_type_archive' == $menu_item->type ) {
+				$object = get_post_type_object( $menu_item->object );
+				$menu_item->type_label = __('Post Type Archive');
+				$menu_item->title = $object->label;
+				$menu_item->url = get_post_type_archive_link( $object->name );
+
 			} else {
 				$menu_item->type_label = __('Custom');
 				$menu_item->title = $menu_item->post_title;
@@ -627,7 +633,24 @@
 		$menu_item->description = get_term_field( 'description', $menu_item->term_id, $menu_item->taxonomy );
 		$menu_item->classes = array();
 		$menu_item->xfn = '';
+	} elseif ( isset( $menu_item->has_archive ) ) { // post type or taxonomy archive items
+		$menu_item->ID = 0;
+		$menu_item->db_id = 0;
+		$menu_item->menu_item_parent = 0;
+		$menu_item->object_id = -1; // must be different from 0
+		$menu_item->post_parent = 0;
+		$menu_item->type = 'post_type_archive';
 
+		$menu_item->object = $menu_item->label;
+		$menu_item->type_label = 'Post Type Archive';
+
+		$menu_item->title = $menu_item->label;
+		$menu_item->url = get_post_type_archive_link( $menu_item->label );
+		$menu_item->target = '';
+		$menu_item->attr_title = '';
+		$menu_item->description = '';
+		$menu_item->classes = array();
+		$menu_item->xfn = '';
 	}
 
 	return apply_filters( 'wp_setup_nav_menu_item', $menu_item );
