Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 3494)
+++ wp-includes/functions.php	(working copy)
@@ -2283,4 +2283,9 @@
 	return $wpdb->num_queries;
 }
 
+function deactivate_plugins() {
+	update_option('deactivated_plugins', get_settings('active_plugins'));
+	update_option('active_plugins', array());
+}
+
 ?>
Index: wp-settings.php
===================================================================
--- wp-settings.php	(revision 3494)
+++ wp-settings.php	(working copy)
@@ -170,7 +170,7 @@
 		require(ABSPATH . '/my-hacks.php');
 }
 
-if ( get_settings('active_plugins') ) {
+if ( get_settings('active_plugins') && !defined('WP_INSTALLING') ) {
 	$current_plugins = get_settings('active_plugins');
 	if ( is_array($current_plugins) ) {
 		foreach ($current_plugins as $plugin) {
Index: wp-admin/wp-admin.css
===================================================================
--- wp-admin/wp-admin.css	(revision 3494)
+++ wp-admin/wp-admin.css	(working copy)
@@ -712,6 +712,13 @@
 .alternate.active .name {
 	background: #8B8;
 }
+.deactivated td {
+	background-color: #ccc;
+	color: #999 !important;
+}
+.deactivated td a.edit:hover {
+	background-color: #999;
+}
 
 /* A handy div class for hiding controls.
    Some browsers will disable them when you
Index: wp-admin/plugins.php
===================================================================
--- wp-admin/plugins.php	(revision 3494)
+++ wp-admin/plugins.php	(working copy)
@@ -4,8 +4,14 @@
 if ( isset($_GET['action']) ) {
 	check_admin_referer();
 	
-	if ('activate' == $_GET['action']) {
+	if ('activate' == $_GET['action'] || 'reactivate' == $_GET['action']) {
 		$current = get_settings('active_plugins');
+		$deactivated = get_settings('deactivated_plugins');
+		if (in_array($_GET['plugin'], $deactivated) && 'reactivate' == $_GET['action']) {
+			array_splice($deactivated, array_search( $_GET['plugin'], $deactivated), 1 ); // Array-fu!
+			update_option('deactivated_plugins', $deactivated);
+			//plugin will be activated in next if()
+		}
 		if (!in_array($_GET['plugin'], $current)) {
 			$current[] = trim( $_GET['plugin'] );
 			sort($current);
@@ -69,6 +75,7 @@
 
 if ( get_settings('active_plugins') )
 	$current_plugins = get_settings('active_plugins');
+$deactivated_plugins = get_settings('deactivated_plugins');
 
 $plugins = get_plugins();
 
@@ -104,6 +111,11 @@
 		} else {
 			$action = "<a href='plugins.php?action=activate&amp;plugin=$plugin_file' title='".__('Activate this plugin')."' class='edit'>".__('Activate')."</a>";
 		}
+		if (!empty($deactivated_plugins) && in_array($plugin_file, $deactivated_plugins)) {
+			$style .= ' deactivated';
+			$action = "<a href='plugins.php?action=reactivate&amp;plugin=$plugin_file' title='".__('Reactivate this plugin')."' class='edit'>".__('Reactivate')."</a>";
+			$plugin_data['Title'] .= ' <em>' . __('deactivated in upgrade') . '</em>';
+		}
 		$plugin_data['Description'] = wp_kses($plugin_data['Description'], array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()) ); ;
 		if ($style != '') $style = 'class="' . $style . '"';
 		echo "
Index: wp-admin/upgrade.php
===================================================================
--- wp-admin/upgrade.php	(revision 3494)
+++ wp-admin/upgrade.php	(working copy)
@@ -75,6 +75,7 @@
 	break;
 	
 	case 1:
+	deactivate_plugins();
 	wp_cache_flush();
 	make_db_current_silent();
 	upgrade_all();
@@ -87,6 +88,21 @@
 ?> 
 <h2><?php _e('Step 1'); ?></h2> 
 	<p><?php printf(__("There's actually only one step. So if you see this, you're done. <a href='%s'>Have fun</a>!"),  $backto); ?></p>
+	
+	<?php $deactivated = get_option('deactivated_plugins');
+	if (is_array($deactivated) && count($deactivated)) {
+		<h3><?php _e('Deactivated plugins'); ?></h3>
+		<p><?php _e('When upgrading, plugins designed for the old version can sometimes break with the new version, causing your upgraded WordPress to have errors or sometime not be accessible at all. To be on the safe side, we&apos;ve disabled all your plugins. On the plugins page the plugins you can reactivate the plugins you previously had activated one by one to make sure nothing breaks.'); ?></p>
+		
+		<p><?php _e('Here&apos;s a list of the plugins you had activated before. Plugins that were previously activated are marked on the Plugins page.'); ?></p>
+		
+		<ul>
+			<?php foreach ($deactivated as $plugin) { 
+				$plugin_data = get_plugins_data($plugin); ?>
+				<li><?php echo $plugin_data['Title']; ?></li>
+			<?php } ?>
+		</ul>
+	<?php } ?>
 
 <!--
 <pre>
