diff --git bp-core/bp-core-update.php bp-core/bp-core-update.php
index 8b1f30e..ed0b8c2 100644
--- bp-core/bp-core-update.php
+++ bp-core/bp-core-update.php
@@ -369,6 +369,20 @@ function bp_update_to_2_0() {
 		}
 
 		foreach ( $signups as $signup ) {
+			// Sanity check: make sure this user has not been
+			// previously activated manually
+			if ( isset( $signup->data->user_status ) && 2 !== intval( $signup->data->user_status ) ) {
+				bp_delete_user_meta( $signup->ID, 'activation_key' );
+				continue;
+			}
+
+			// User status is 2, but activation_key disappeared
+			// regenerate it.
+			if ( empty( $signup->activation_key ) ) {
+				$signup->activation_key = wp_hash( $signup->ID );
+				bp_update_user_meta( $signup->ID, 'activation_key', $signup->activation_key );
+			}
+
 			$meta = array();
 
 			if ( bp_is_active( 'xprofile' ) ) {
diff --git tests/testcases/core/update.php tests/testcases/core/update.php
index e69de29..d5a7b95 100644
--- tests/testcases/core/update.php
+++ tests/testcases/core/update.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * @group update
+ */
+class BP_Tests_Update extends BP_UnitTestCase {
+	/**
+	 * @group bp_update_to_2_0
+	 */
+	public function test_upgrade_to_2_0_user_with_user_status_0_and_activation_key() {
+		if ( is_multisite() ) {
+			return;
+		}
+
+		if ( ! function_exists( 'bp_core_install_activity_streams' ) ) {
+			require_once( buddypress()->plugin_dir . 'bp-core/admin/bp-core-schema.php' );
+		}
+
+		$u = $this->create_user();
+		$user = new WP_User( $u );
+		$user->add_role( 'editor' );
+
+		update_user_meta( $u, 'activation_key', 'foo' );
+
+		bp_update_to_2_0();
+
+		$u2 = new WP_User( $u );
+
+		$this->assertTrue( in_array( 'editor', $u2->roles ) );
+	}
+
+	/**
+	 * @group bp_update_to_2_0
+	 */
+	public function test_upgrade_to_2_0_user_with_user_status_2_and_activation_key() {
+		if ( is_multisite() ) {
+			return;
+		}
+
+		if ( ! function_exists( 'bp_core_install_activity_streams' ) ) {
+			require_once( buddypress()->plugin_dir . 'bp-core/admin/bp-core-schema.php' );
+		}
+
+		global $wpdb;
+
+		$u = $this->create_user();
+		$wpdb->update( $wpdb->users, array( 'user_status' => '2' ), array( 'ID' => $u ) );
+		clean_user_cache( $u );
+
+		$user = new WP_User( $u );
+		$user->add_role( 'editor' );
+
+		update_user_meta( $u, 'activation_key', 'foo' );
+
+		bp_update_to_2_0();
+
+		$u2 = new WP_User( $u );
+
+		$this->assertTrue( ! in_array( 'editor', $u2->roles ) );
+	}
+}
