diff --git bp-members/bp-members-functions.php bp-members/bp-members-functions.php
index 6dbe403..4f8df49 100644
--- bp-members/bp-members-functions.php
+++ bp-members/bp-members-functions.php
@@ -1008,18 +1008,16 @@ function bp_last_activity_migrate() {
 
 	$bp = buddypress();
 
-	// The "NOT IN" clause prevents duplicates
+	// Wipe out existing last_activity data in the activity table -
+	// this helps to prevent duplicates when pulling from the usermeta
+	// table
+	$wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->members->table_name_last_activity} WHERE component = %s AND action = 'last_activity'", $bp->members->id ) );
+
 	$sql = "INSERT INTO {$bp->members->table_name_last_activity} (`user_id`, `component`, `type`, `action`, `content`, `primary_link`, `item_id`, `date_recorded` ) (
 		  SELECT user_id, '{$bp->members->id}' as component, 'last_activity' as type, '' as action, '' as content, '' as primary_link, 0 as item_id, meta_value AS date_recorded
 		  FROM {$wpdb->usermeta}
 		  WHERE
 		    meta_key = 'last_activity'
-		    AND
-		    user_id NOT IN (
-		      SELECT user_id
-		      FROM {$bp->members->table_name_last_activity}
-		      WHERE component = '{$bp->members->id}' AND type = 'last_activity'
-		    )
 	);";
 
 	return $wpdb->query( $sql );
diff --git tests/testcases/members/functions.php tests/testcases/members/functions.php
index 4444ccc..f7b6af9 100644
--- tests/testcases/members/functions.php
+++ tests/testcases/members/functions.php
@@ -279,4 +279,50 @@ class BP_Tests_Members_Functions extends BP_UnitTestCase {
 
 		$this->assertSame( $expected, bp_core_get_user_displaynames( array( $u1, $u2, ) ) );
 	}
+
+	/**
+	 * @group bp_last_activity_migrate
+	 * @expectedIncorrectUsage update_user_meta( $user_id, 'last_activity' )
+	 * @expectedIncorrectUsage get_user_meta( $user_id, 'last_activity' )
+	 */
+	public function test_bp_last_activity_migrate() {
+		// We explicitly do not want last_activity created, so use the
+		// WP factory methods
+		$u1 = $this->factory->user->create();
+		$u2 = $this->factory->user->create();
+		$u3 = $this->factory->user->create();
+
+		$time = time();
+		$t1 = date( 'Y-m-d H:i:s', $time - 50 );
+		$t2 = date( 'Y-m-d H:i:s', $time - 500 );
+		$t3 = date( 'Y-m-d H:i:s', $time - 5000 );
+
+		update_user_meta( $u1, 'last_activity', $t1 );
+		update_user_meta( $u2, 'last_activity', $t2 );
+		update_user_meta( $u3, 'last_activity', $t3 );
+
+		// Create an existing entry in last_activity to test no dupes
+		global $wpdb, $bp;
+		$wpdb->query( $wpdb->prepare( "INSERT INTO {$bp->members->table_name_last_activity} (`user_id`, `component`, `type`, `action`, `content`, `primary_link`, `item_id`, `date_recorded` ) VALUES ( %d, %s, %s, %s, %s, %s, %d, %s )", $u2, $bp->members->id, 'last_activity', '', '', 0, $t1 ) );
+
+		bp_last_activity_migrate();
+
+		$expected = array(
+			$u1 => $t1,
+			$u2 => $t2,
+			$u3 => $t3,
+		);
+
+		$found = array(
+			$u1 => '',
+			$u2 => '',
+			$u3 => '',
+		);
+
+		foreach ( $found as $uid => $v ) {
+			$found[ $uid ] = bp_get_user_last_activity( $uid );
+		}
+
+		$this->assertSame( $expected, $found );
+	}
 }
