Index: wp-includes/ms-functions.php
===================================================================
--- wp-includes/ms-functions.php	(revision 36252)
+++ wp-includes/ms-functions.php	(working copy)
@@ -952,29 +952,40 @@
 function wpmu_activate_signup($key) {
 	global $wpdb;
 
-	$signup = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->signups WHERE activation_key = %s", $key) );
+	$signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE activation_key = %s", $key ) );
 
-	if ( empty( $signup ) )
+	if ( empty( $signup ) ) {
 		return new WP_Error( 'invalid_key', __( 'Invalid activation key.' ) );
+	}
 
 	if ( $signup->active ) {
-		if ( empty( $signup->domain ) )
+		if ( empty( $signup->domain ) ) {
 			return new WP_Error( 'already_active', __( 'The user is already active.' ), $signup );
-		else
+		} else {
 			return new WP_Error( 'already_active', __( 'The site is already active.' ), $signup );
+		}
 	}
 
-	$meta = maybe_unserialize($signup->meta);
+	$meta     = maybe_unserialize( $signup->meta );
 	$password = wp_generate_password( 12, false );
 
-	$user_id = username_exists($signup->user_login);
+	$user_id = username_exists( $signup->user_login );
 
+	if ( ! $user_id ) {
+		$user_id = wpmu_create_user( $signup->user_login, $password, $signup->user_email );
+	} else {
+		$wpdb->update( $wpdb->signups, array( 'active' => 1, 'activated' => $now ), array( 'activation_key' => $key ) );
+	}
+		/**
+		 * allow the suppression of errors if user already exists.
+		 *
+		 * @since 4.5
+		 *
+		 * @param WP_Error
+		 */
+		$user_already_exists = apply_filters('_wpmu_activate_existing_error_', true, $signup  );
+	}
 	if ( ! $user_id )
-		$user_id = wpmu_create_user($signup->user_login, $password, $signup->user_email);
-	else
-		$user_already_exists = true;
-
-	if ( ! $user_id )
 		return new WP_Error('create_user', __('Could not create user'), $signup);
 
 	$now = current_time('mysql', true);
@@ -981,10 +992,11 @@
 
 	if ( empty($signup->domain) ) {
 		$wpdb->update( $wpdb->signups, array('active' => 1, 'activated' => $now), array('activation_key' => $key) );
+		
+		if ( isset( $user_already_exists ) ){
+			return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup, get_defined_vars() );
+		}
 
-		if ( isset( $user_already_exists ) )
-			return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup);
-
 		/**
 		 * Fires immediately after a new user is activated.
 		 *
