Index: wp-admin/includes/plugin.php
===================================================================
--- wp-admin/includes/plugin.php	(revision 12929)
+++ wp-admin/includes/plugin.php	(working copy)
@@ -544,23 +544,30 @@
 }
 
 /**
- * validate active plugins
+ * Validate active plugins
  *
- * validate all active plugins, deactivates invalid and
- * returns an array of deactived ones.
+ * Validate all active plugins, deactivates invalid and
+ * returns an array of deactivated ones.
  *
  * @since unknown
  * @return array invalid plugins, plugin as key, error as value
  */
 function validate_active_plugins() {
 	$plugins = apply_filters( 'active_plugins', get_option( 'active_plugins', array() ) );
-
 	// validate vartype: array
-	if ( !is_array( $plugins ) ) {
-		update_option('active_plugins', array());
-		return;
+	if ( ! is_array( $plugins ) ) {
+		update_option( 'active_plugins', array() );
+		$plugins = array();
 	}
 
+	if ( is_multisite() && is_super_admin() ) {
+		$network_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
+		$plugins = array_merge( (array) $plugins, $network_plugins );
+	}
+
+	if ( empty( $plugins ) )
+		return;
+
 	$invalid = array();
 
 	// invalid plugins get deactivated
Index: wp-includes/load.php
===================================================================
--- wp-includes/load.php	(revision 12929)
+++ wp-includes/load.php	(working copy)
@@ -374,7 +374,7 @@
  * @since 3.0.0
  * @return array Files to include
  */
-function wp_muplugins_to_load() {
+function wp_load_mu_plugins() {
 	$mu_plugins = array();
 	if ( !is_dir( WPMU_PLUGIN_DIR ) )
 		return $mu_plugins;
@@ -399,24 +399,29 @@
  *
  * @access private
  * @since 3.0.0
+ * @param bool $network Whether to return network-wide plugins. Default false.
  * @return array Files to include
  */
-function wp_plugins_to_load() {
+function wp_load_plugins( $network = false ) {
 	$plugins = array();
 
 	// Check for hacks file if the option is enabled
 	if ( get_option( 'hack_file' ) && file_exists( ABSPATH . 'my-hacks.php' ) )
 			$plugins[] = ABSPATH . 'my-hacks.php';
 
-	$active_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins', array() ) );
-	if ( !is_array( $active_plugins ) || defined( 'WP_INSTALLING' ) )
+	if ( $network && is_multisite() )
+		$active_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
+	else
+		$active_plugins = (array) apply_filters( 'active_plugins', get_option( 'active_plugins', array() ) );
+
+	if ( empty( $active_plugins ) || defined( 'WP_INSTALLING' ) )
 		return $plugins;
+
 	foreach ( $active_plugins as $plugin ) {
-		if ( validate_file( $plugin ) // $plugin must validate as file
-			|| '.php' != substr( $plugin, -4 ) // $plugin must end with '.php'
-			|| !file_exists( WP_PLUGIN_DIR . '/' . $plugin ) // $plugin must exist
+		if ( ! validate_file( $plugin ) // $plugin must validate as file
+			&& '.php' == substr( $plugin, -4 ) // $plugin must end with '.php'
+			&& file_exists( WP_PLUGIN_DIR . '/' . $plugin ) // $plugin must exist
 			)
-			continue;
 		$plugins[] = WP_PLUGIN_DIR . '/' . $plugin;
 	}
 	return $plugins;
Index: wp-includes/ms-load.php
===================================================================
--- wp-includes/ms-load.php	(revision 12929)
+++ wp-includes/ms-load.php	(working copy)
@@ -23,43 +23,6 @@
 }
 
 /**
- * Returns array of sitewide plugin files to be included in global scope.
- *
- * @access private
- * @since 3.0.0
- * @return array Files to include
- */
-function ms_network_plugins() {
-	$network_plugins = array();
-	$deleted_sitewide_plugins = array();
-	$wpmu_sitewide_plugins = (array) maybe_unserialize( get_site_option( 'wpmu_sitewide_plugins' ) );
-	foreach ( $wpmu_sitewide_plugins as $plugin_file => $activation_time ) {
-		if ( !$plugin_file )
-			continue;
-
-		if ( !file_exists( WP_PLUGIN_DIR . '/' . $plugin_file ) )
-			$deleted_sitewide_plugins[] = $plugin_file;
-		else
-			$network_plugins[] = WP_PLUGIN_DIR . '/' . $plugin_file;
-	}
-
-	if ( !empty( $deleted_sitewide_plugins ) ) {
-		$active_sitewide_plugins = maybe_unserialize( get_site_option( 'active_sitewide_plugins' ) );
-
-		/* Remove any deleted plugins from the wpmu_sitewide_plugins array */
-		foreach ( $deleted_sitewide_plugins as $plugin_file ) {
-			unset( $wpmu_sitewide_plugins[$plugin_file] );
-			unset( $active_sitewide_plugins[$plugin_file] );
-		}
-
-		update_site_option( 'wpmu_sitewide_plugins', $wpmu_sitewide_plugins );
-		update_site_option( 'active_sitewide_plugins', $wpmu_sitewide_plugins );
-	}
-
-	return $network_plugins;
-}
-
-/**
  * Checks status of current blog.
  *
  * Checks if the blog is deleted, inactive, archived, or spammed.
Index: wp-settings.php
===================================================================
--- wp-settings.php	(revision 12929)
+++ wp-settings.php	(working copy)
@@ -136,14 +136,16 @@
 wp_default_constants( 'wp_included' );
 
 // Load must-use plugins.
-foreach( wp_muplugins_to_load() as $mu_plugin )
+foreach( wp_load_mu_plugins() as $mu_plugin ) {
 	include_once( $mu_plugin );
+}
 unset( $mu_plugin );
 
 // Load network-wide plugins if multisite.
 if ( is_multisite() ) {
-	foreach ( ms_network_plugins() as $plugin_file )
+	foreach ( wp_load_plugins( true ) as $plugin_file ) {
 		include_once( $plugin_file );
+	}
 	unset( $plugin_file );
 }
 
@@ -170,7 +172,7 @@
 create_initial_taxonomies();
 
 // Load active plugins.
-foreach( wp_plugins_to_load() as $plugin )
+foreach( wp_load_plugins() as $plugin )
 	include_once( $plugin );
 unset( $plugin );
 

