Index: wp-admin/includes/template.php
===================================================================
--- wp-admin/includes/template.php	(revision 19080)
+++ wp-admin/includes/template.php	(working copy)
@@ -849,7 +849,7 @@
 	if ( empty( $screen ) )
 		$screen = get_current_screen();
 	elseif ( is_string( $screen ) )
-		$screen = convert_to_screen( $screen );
+		$screen = WP_Screen::for_meta_box( $screen );
 
 	$page = $screen->id;
 
@@ -918,7 +918,7 @@
 	if ( empty( $screen ) )
 		$screen = get_current_screen();
 	elseif ( is_string( $screen ) )
-		$screen = convert_to_screen( $screen );
+		$screen = WP_Screen::for_meta_box( $screen );
 
 	$page = $screen->id;
 
@@ -984,7 +984,7 @@
 	if ( empty( $screen ) )
 		$screen = get_current_screen();
 	elseif ( is_string( $screen ) )
-		$screen = convert_to_screen( $screen );
+		$screen = WP_Screen::for_meta_box( $screen );
 
 	$page = $screen->id;
 
Index: wp-admin/includes/screen.php
===================================================================
--- wp-admin/includes/screen.php	(revision 19080)
+++ wp-admin/includes/screen.php	(working copy)
@@ -52,7 +52,7 @@
 	global $wp_meta_boxes;
 
 	if ( is_string( $screen ) )
-		$screen = convert_to_screen( $screen );
+		$screen = WP_Screen::for_meta_box( $screen );
 
 	if ( empty($wp_meta_boxes[$screen->id]) )
 		return;
@@ -86,7 +86,7 @@
  */
 function get_hidden_meta_boxes( $screen ) {
 	if ( is_string( $screen ) )
-		$screen = convert_to_screen( $screen );
+		$screen = WP_Screen::for_meta_box( $screen );
 
 	$hidden = get_user_option( "metaboxhidden_{$screen->id}" );
 
@@ -498,11 +498,15 @@
 			$base .= '-user';
  		}
 
-		if ( isset( self::$_registry[ $id ] ) )
-			return self::$_registry[ $id ];
+		if ( isset( self::$_registry[ $id ] ) ) {
+			$screen = self::$_registry[ $id ];
+			if ( $screen === get_current_screen() )
+				return $screen;
+		} else {
+			$screen = new WP_Screen();
+			$screen->id     = $id;
+		}
 
-		$screen = new WP_Screen();
-		$screen->id         = $id;
 		$screen->base       = $base;
 		$screen->action     = $action;
 		$screen->post_type  = $post_type;
@@ -515,6 +519,13 @@
 		return $screen;
  	}
 
+	static function for_meta_box( $meta_box ) {
+		if ( post_type_exists( $meta_box ) )
+			return WP_Screen::get( 'post-' . $meta_box );
+		else
+			return WP_Screen::get( $meta_box );
+	}
+
 	/**
 	 * Makes the screen object the current screen.
 	 *
