diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
index 2aea4f2..8ee5a6d 100644
--- src/bp-members/bp-members-functions.php
+++ src/bp-members/bp-members-functions.php
@@ -2065,15 +2065,23 @@ function bp_core_activate_signup( $key ) {
 		}
 	}
 
-	// Update the display_name.
-	wp_update_user( array(
-		'ID'           => $user_id,
-		'display_name' => bp_core_get_user_displayname( $user_id ),
-	) );
-
-	// Set the password on multisite installs.
+	// Replace the password automatically generated by WordPress by the one the user chose.
 	if ( ! empty( $user['meta']['password'] ) ) {
 		$wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_pass = %s WHERE ID = %d", $user['meta']['password'], $user_id ) );
+
+		/**
+		 * Make sure to clean the user's cache as we've
+		 * directly edited the password without using
+		 * wp_update_user().
+		 *
+		 * If we can't use wp_update_user() that's because
+		 * we already hashed the password at the signup step.
+		 */
+		$uc = wp_cache_get( $user_id, 'users' );
+
+		if ( ! empty( $uc->ID ) ) {
+			clean_user_cache( $uc->ID );
+		}
 	}
 
 	/**
diff --git tests/phpunit/testcases/members/functions.php tests/phpunit/testcases/members/functions.php
index 6799af2..c9e0748 100644
--- tests/phpunit/testcases/members/functions.php
+++ tests/phpunit/testcases/members/functions.php
@@ -587,4 +587,54 @@ class BP_Tests_Members_Functions extends BP_UnitTestCase {
 	public function test_wp_registration_url_should_return_bp_register_page_when_register_page_is_configured_properly() {
 		$this->assertSame( bp_get_signup_page(), wp_registration_url() );
 	}
+
+	/**
+	 * @group bp_core_activate_signup
+	 */
+	public function test_bp_core_activate_signup_password() {
+		global $wpdb;
+
+
+		$signups = array( 'no-blog' =>
+			array( 'signup_id' => $this->factory->signup->create( array(
+					'user_login'     => 'noblog',
+					'user_email'     => 'noblog@example.com',
+					'activation_key' => 'no-blog',
+					'meta' => array(
+						'field_1' => 'Foo Bar',
+						'password' => 'foobar',
+					),
+			) ),
+				'password' => 'foobar',
+			),
+		);
+
+		if ( is_multisite() ) {
+			$signups['ms-blog'] = array( 'signup_id' => $this->factory->signup->create( array(
+					'user_login'     => 'msblog',
+					'user_email'     => 'msblog@example.com',
+					'domain'         => get_current_site()->domain,
+					'path'           => get_current_site()->path . 'ms-blog',
+					'title'          => 'Ding Dang',
+					'activation_key' => 'ms-blog',
+					'meta' => array(
+						'field_1'  => 'Ding Dang',
+						'password' => 'dingdang',
+					),
+				) ),
+				'password' => 'dingdang',
+			);
+		}
+
+		// Neutralize db errors
+		$suppress = $wpdb->suppress_errors();
+
+		foreach ( $signups as $key => $data ) {
+			$u = bp_core_activate_signup( $key );
+
+			$this->assertEquals( get_userdata( $u )->user_pass, $data['password'] );
+		}
+
+		$wpdb->suppress_errors( $suppress );
+	}
 }
