Index: wp-includes/ms-default-filters.php
===================================================================
--- wp-includes/ms-default-filters.php	(revision 16022)
+++ wp-includes/ms-default-filters.php	(working copy)
@@ -22,13 +22,17 @@
 
 // Blogs
 add_filter( 'wpmu_validate_blog_signup', 'signup_nonce_check' );
-add_action( 'wpmu_new_blog', 'wpmu_activate_network_plugins', 9 );
 add_action( 'wpmu_new_blog', 'wpmu_log_new_registrations', 10, 2 );
 add_action( 'wpmu_new_blog', 'newblog_notify_siteadmin', 10, 2 );
 
 // Register Nonce
 add_action( 'signup_hidden_fields', 'signup_nonce_fields' );
 
+// Plugins
+add_action( 'wpmu_new_blog', 'wpmu_activate_network_plugins', 9 );
+add_action( 'activated_plugin', 'wpmu_handle_network_activation', 9 );
+add_action( 'deactivated_plugin', 'wpmu_handle_network_activation', 9 );
+
 // Template
 add_action( 'template_redirect', 'maybe_redirect_404' );
 add_filter( 'allowed_redirect_hosts', 'redirect_this_site' );
Index: wp-includes/ms-functions.php
===================================================================
--- wp-includes/ms-functions.php	(revision 16022)
+++ wp-includes/ms-functions.php	(working copy)
@@ -1244,6 +1244,44 @@
 	restore_current_blog();
 }
 
+/**
+ * Fires the activation hook for each active site in a network
+ * when a network activation occurs
+ *
+ * @since 3.1.0
+ *
+ * @param string $plugin The plugin being network-activated
+ */
+function wpmu_handle_network_activation( $plugin ) {
+	if ( !is_plugin_active_for_network( $plugin ) )
+		return;
+
+	global $wpdb;
+
+	$active_blogs = $wpdb->get_col( "
+		SELECT blog_id
+		FROM $wpdb->blogs
+		WHERE site_id = '{$wpdb->siteid}'
+		AND deleted = 0
+	" );
+
+	list( $action ) = explode( '_', current_filter(), 2 );
+
+	$action = str_replace( 'activated', 'activate', $action );
+
+	foreach ( $active_blogs as $blog_id ) {
+		switch_to_blog( $blog_id );
+
+		if ( in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) )
+			continue;
+
+		do_action( $action . '_' . $plugin, false );
+		do_action( $action . '_plugin', $plugin, false );
+	}
+
+	restore_current_blog();
+}
+
 function wpmu_log_new_registrations( $blog_id, $user_id ) {
 	global $wpdb;
 	$user = new WP_User( (int) $user_id );
