Index: wp-admin/includes/class-wp-upgrader.php
===================================================================
--- wp-admin/includes/class-wp-upgrader.php	(revision 25693)
+++ wp-admin/includes/class-wp-upgrader.php	(working copy)
@@ -482,6 +482,7 @@
 
 		add_filter('upgrader_pre_install', array($this, 'deactivate_plugin_before_upgrade'), 10, 2);
 		add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4);
+		add_filter( 'upgrader_post_install', array( $this, 'activate_plugin_after_upgrade' ), 10, 3 );
 		//'source_selection' => array($this, 'source_selection'), //there's a trac ticket to move up the directory for zip's which are made a bit differently, useful for non-.org plugins.
 
 		$this->run( array(
@@ -497,6 +498,7 @@
 		// Cleanup our hooks, in case something else does a upgrade on this connection.
 		remove_filter('upgrader_pre_install', array($this, 'deactivate_plugin_before_upgrade'));
 		remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'));
+		remove_filter( 'upgrader_post_install', array( $this, 'activate_plugin_after_upgrade' ) );
 
 		if ( ! $this->result || is_wp_error($this->result) )
 			return $this->result;
@@ -660,6 +662,23 @@
 		}
 	}
 
+	/**
+	 * Re-activate a plugin after it's been upgraded
+	 * @param bool $return
+	 * @param array $plugin
+	 * @return null|WP_Error
+	 */
+	function activate_plugin_after_upgrade( $return, $plugin ) {
+		$plugin = isset( $plugin['plugin'] ) ? $plugin['plugin'] : '';
+		if ( empty( $plugin ) )
+			return new WP_Error( 'bad_request', $this->strings['bad_request'] );
+
+		if ( is_plugin_active( $plugin ) )
+			return $return;
+
+		return activate_plugin( $plugin, '', false, true );
+	}
+	
 	//Hooked to upgrade_clear_destination
 	function delete_old_plugin($removed, $local_destination, $remote_destination, $plugin) {
 		global $wp_filesystem;
