Index: wp-admin/menu.php
===================================================================
--- wp-admin/menu.php	(revision 17521)
+++ wp-admin/menu.php	(working copy)
@@ -123,7 +123,7 @@
 
 foreach ( (array) get_post_types( array('show_ui' => true, '_builtin' => false) ) as $ptype ) {
 	$ptype_obj = get_post_type_object( $ptype );
-	$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : $_wp_last_object_menu++; // If we're to use $_wp_last_object_menu, increment it first.
+	$ptype_menu_position = is_numeric( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : $_wp_last_object_menu++; // If we're to use $_wp_last_object_menu, increment it first.
 	$ptype_for_id = sanitize_html_class( $ptype );
 	if ( is_string( $ptype_obj->menu_icon ) ) {
 		$menu_icon   = esc_url( $ptype_obj->menu_icon );

Index: wp-admin/includes/plugin.php
===================================================================
--- wp-admin/includes/plugin.php	(revision 17521)
+++ wp-admin/includes/plugin.php	(working copy)
@@ -817,7 +817,7 @@
  * @param int $position The position in the menu order this one should appear
  */
 function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = NULL ) {
-	global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages;
+	global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages, $_wp_last_object_menu;
 
 	$menu_slug = plugin_basename( $menu_slug );
 
@@ -835,10 +835,10 @@
 
 	$new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $hookname, $hookname, $icon_url );
 
-	if ( null === $position  )
-		$menu[] = $new_menu;
+	if ( is_numeric( $position )  )
+		$menu[$position] = $new_menu;
 	else
-		$menu[$position] = $new_menu;
+		$menu[$_wp_last_object_menu++] = $new_menu;
 
 	$_registered_pages[$hookname] = true;
 
