Index: wp-admin/includes/class-wp-upgrader.php
===================================================================
--- wp-admin/includes/class-wp-upgrader.php	(revision 20208)
+++ wp-admin/includes/class-wp-upgrader.php	(working copy)
@@ -1124,6 +1124,14 @@
 			$this->feedback(implode(' | ', (array)$update_actions));
 	}
 
+	function header() {
+		// Nothing, This will be displayed within a iframe.
+	}
+
+	function footer() {
+		// Nothing, This will be displayed within a iframe.
+	}
+
 	function before() {
 		if ( $this->upgrader->show_before ) {
 			echo $this->upgrader->show_before;
@@ -1459,6 +1467,14 @@
 		parent::__construct($args);
 	}
 
+	function header() {
+		// Nothing, This will be displayed within a iframe.
+	}
+
+	function footer() {
+		// Nothing, This will be displayed within a iframe.
+	}
+
 	function after() {
 
 		$update_actions = array();
Index: wp-admin/update.php
===================================================================
--- wp-admin/update.php	(revision 20208)
+++ wp-admin/update.php	(working copy)
@@ -6,8 +6,14 @@
  * @subpackage Administration
  */
 
-if ( ! defined( 'IFRAME_REQUEST' ) && isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'update-selected', 'activate-plugin', 'update-selected-themes' ) ) )
-	define( 'IFRAME_REQUEST', true );
+if ( ! defined( 'IFRAME_REQUEST' ) ) {
+	// Requests directly to this page which are assumed to be within iframes
+	if ( isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'update-selected', 'activate-plugin', 'update-selected-themes' ) ) )
+		define( 'IFRAME_REQUEST', true );
+	// Requests to this page which we iframe from here
+	elseif ( ! empty( $_GET['iframe'] ) && isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'upgrade-plugin', 'upgrade-theme' ) ) )
+		define( 'IFRAME_REQUEST', true );
+}
 
 /** WordPress Administration Bootstrap */
 require_once('./admin.php');
@@ -54,16 +60,32 @@
 		$title = __('Update Plugin');
 		$parent_file = 'plugins.php';
 		$submenu_file = 'plugins.php';
-		require_once(ABSPATH . 'wp-admin/admin-header.php');
 
 		$nonce = 'upgrade-plugin_' . $plugin;
-		$url = 'update.php?action=upgrade-plugin&plugin=' . $plugin;
+		$url = 'update.php?action=upgrade-plugin&iframe=1&plugin=' . $plugin;
 
-		$upgrader = new Plugin_Upgrader( new Plugin_Upgrader_Skin( compact('title', 'nonce', 'url', 'plugin') ) );
-		$upgrader->upgrade($plugin);
+		if ( ! defined( 'IFRAME_REQUEST')  || ! IFRAME_REQUEST ) {
+			require_once(ABSPATH . 'wp-admin/admin-header.php');
 
-		include(ABSPATH . 'wp-admin/admin-footer.php');
+			echo '<div class="wrap">';
+			screen_icon('plugins');
+			echo '<h2>' . $title . '</h2>';
+			echo "<iframe src='" . wp_nonce_url( $url, $nonce ) . "' style='width: 100%; height: 100%; min-height: 750px;' frameborder='0'></iframe>";
+			echo '</div>';
 
+			include(ABSPATH . 'wp-admin/admin-footer.php');
+
+		} else {
+
+			iframe_header();
+
+			$upgrader = new Plugin_Upgrader( new Plugin_Upgrader_Skin( compact('title', 'nonce', 'url', 'plugin') ) );
+			$upgrader->upgrade($plugin);
+
+			iframe_footer();
+
+		}
+
 	} elseif ('activate-plugin' == $action ) {
 		if ( ! current_user_can('update_plugins') )
 			wp_die(__('You do not have sufficient permissions to update plugins for this site.'));
@@ -157,15 +179,31 @@
 		$title = __('Update Theme');
 		$parent_file = 'themes.php';
 		$submenu_file = 'themes.php';
-		require_once(ABSPATH . 'wp-admin/admin-header.php');
-
 		$nonce = 'upgrade-theme_' . $theme;
-		$url = 'update.php?action=upgrade-theme&theme=' . $theme;
+		$url = 'update.php?action=upgrade-theme&iframe=1&theme=' . $theme;
 
-		$upgrader = new Theme_Upgrader( new Theme_Upgrader_Skin( compact('title', 'nonce', 'url', 'theme') ) );
-		$upgrader->upgrade($theme);
+		if ( ! defined( 'IFRAME_REQUEST')  || ! IFRAME_REQUEST ) {
+			require_once(ABSPATH . 'wp-admin/admin-header.php');
 
-		include(ABSPATH . 'wp-admin/admin-footer.php');
+			echo '<div class="wrap">';
+			screen_icon('themes');
+			echo '<h2>' . $title . '</h2>';
+			echo "<iframe src='" . wp_nonce_url( $url, $nonce ) . "' style='width: 100%; height: 100%; min-height: 750px;' frameborder='0'></iframe>";
+			echo '</div>';
+
+			include(ABSPATH . 'wp-admin/admin-footer.php');
+
+		} else {
+
+			iframe_header();
+
+			$upgrader = new Theme_Upgrader( new Theme_Upgrader_Skin( compact('title', 'nonce', 'url', 'theme') ) );
+			$upgrader->upgrade($theme);
+
+			iframe_footer();
+
+		}
+
 	} elseif ( 'update-selected-themes' == $action ) {
 		if ( ! current_user_can( 'update_themes' ) )
 			wp_die( __( 'You do not have sufficient permissions to update themes for this site.' ) );
