Index: bp-activity/bp-activity-classes.php
===================================================================
--- bp-activity/bp-activity-classes.php
+++ bp-activity/bp-activity-classes.php
@@ -391,6 +391,27 @@ class BP_Activity_Activity {
 		return $wpdb->get_var( "SELECT id FROM {$bp->activity->table_name} {$where_sql}" );
 	}
 
+	/**
+	 * Delete activity items depending on the arguments passed.
+	 *
+	 * @since BuddyPress (1.2)
+	 *
+	 * @todo Make 'id' accept comma-delimited list
+	 * @todo Make 'date_recorded' accept a range
+	 *
+	 * @param array|string $args The parameters to delete notifications either by array or querystring {
+	 * 	@type int $id The activity ID.
+	 * 	@type string $action The activity action to filter by.
+	 * 	@type string $content The activity content to filter by
+	 * 	@type string $type The activity type to filter by
+	 * 	@type string $primary_link The primary link to filter by
+	 * 	@type int $user_id The user ID to filter by
+	 * 	@type int $item_id The activity item ID to filter by
+	 * 	@type int $secondary_item_id The secondary item ID to filter by
+	 * 	@type string $date_recorded The date the activity item was recorded.
+	 * 	@type int $hide_sitewide Whether to filter by hidden sitewide items. Either 1 or 0.
+	 * }
+	 */
 	public static function delete( $args = array() ) {
 		global $wpdb, $bp;
 
@@ -453,27 +474,71 @@ class BP_Activity_Activity {
 		// Fetch the activity IDs so we can delete any comments for this activity item
 		$activity_ids = $wpdb->get_col( "SELECT id FROM {$bp->activity->table_name} {$where_sql}" );
 
-		if ( !$wpdb->query( "DELETE FROM {$bp->activity->table_name} {$where_sql}" ) )
+		// Delete the activity item
+		if ( ! $wpdb->query( "DELETE FROM {$bp->activity->table_name} {$where_sql}" ) ) {
 			return false;
+		}
 
+		// Handle accompanying activity comments and meta deletion
 		if ( $activity_ids ) {
-			BP_Activity_Activity::delete_activity_item_comments( $activity_ids );
-			BP_Activity_Activity::delete_activity_meta_entries( $activity_ids );
+			$activity_ids_comma          = implode( ',', wp_parse_id_list( $activity_ids ) );
+			$activity_comments_where_sql = "WHERE type = 'activity_comment' AND item_id IN ({$activity_ids_comma})";
 
-			return $activity_ids;
+			// Fetch the activity comment IDs for our deleted activity items
+			$activity_comment_ids = $wpdb->get_col( "SELECT id FROM {$bp->activity->table_name} {$activity_comments_where_sql}" );
+
+			// We have activity comments!
+			if ( ! empty( $activity_comment_ids ) ) {
+				// Delete activity comments
+				$wpdb->query( "DELETE FROM {$bp->activity->table_name} {$activity_comments_where_sql}" );
+
+				// Merge activity IDs with activity comment IDs
+				$activity_ids = array_merge( $activity_ids, $activity_comment_ids );
+			}
+
+			// Delete all activity meta entries for activity items and activity comments
+			BP_Activity_Activity::delete_activity_meta_entries( $activity_ids );
 		}
 
 		return $activity_ids;
 	}
 
-	public static function delete_activity_item_comments( $activity_ids = array() ) {
+	/**
+	 * Delete the activity comments for a given parent activity item or items.
+	 *
+	 * @since BuddyPress (1.2)
+	 *
+	 * @todo Mark as deprecated?  Method is no longer used internally.
+	 *
+	 * @param array $activity_ids Array of parent activity item IDs to check for activity comments.
+	 * @param bool $delete_cache Should we delete the activity meta cache for these comments?
+	 */
+	public static function delete_activity_item_comments( $activity_ids = array(), $delete_cache = true ) {
 		global $bp, $wpdb;
 
+		$delete_cache = (bool) $delete_cache;
+
 		$activity_ids = implode( ',', wp_parse_id_list( $activity_ids ) );
 
+		if ( $delete_cache ) {
+			// Fetch the activity comment IDs for our deleted activity items
+			$activity_comment_ids = $wpdb->get_col( "SELECT id FROM {$bp->activity->table_name} WHERE type = 'activity_comment' AND item_id IN ({$activity_ids})" );
+
+			if ( ! empty( $activity_comment_ids ) ) {
+				self::delete_activity_meta_entries( $activity_comment_ids );
+			}
+		}
+
 		return $wpdb->query( "DELETE FROM {$bp->activity->table_name} WHERE type = 'activity_comment' AND item_id IN ({$activity_ids})" );
 	}
 
+	/**
+	 * Deletes the activity meta entries for a given list of activity IDs.
+	 *
+	 * @since BuddyPress (1.2)
+	 *
+	 * @param array $activity_ids Array of activity item IDs to delete meta cache for.
+	 */
 	public static function delete_activity_meta_entries( $activity_ids = array() ) {
 		global $bp, $wpdb;
 
Index: tests/testcases/activity/functions.php
===================================================================
--- tests/testcases/activity/functions.php
+++ tests/testcases/activity/functions.php
@@ -34,4 +34,56 @@ class BP_Tests_Activity_Functions extends BP_UnitTestCase {
 		$this->assertEquals( bp_activity_thumbnail_content_images( $post_content ), '<img src="http://example.com/foo.jpg" width="40" height="40" alt="Thumbnail" class="align-left thumbnail" /> Awesome.' );
 	}
 
+	/**
+	 * @group delete
+	 */
+	public function test_delete_activity_and_meta() {
+		// create an activity update
+		$parent_activity = $this->factory->activity->create( array(
+			'type' => 'activity_update',
+		) );
+
+		// create some activity comments
+		$comment_one = $this->factory->activity->create( array(
+			'type'              => 'activity_comment',
+			'item_id'           => $parent_activity,
+			'secondary_item_id' => $parent_activity,
+		) );
+
+		$comment_two = $this->factory->activity->create( array(
+			'type'              => 'activity_comment',
+			'item_id'           => $parent_activity,
+			'secondary_item_id' => $parent_activity,
+		) );
+
+		// add some meta to the activity items
+		bp_activity_update_meta( $parent_activity, 'foo', 'bar' );
+		bp_activity_update_meta( $comment_one,     'foo', 'bar' );
+		bp_activity_update_meta( $comment_two,     'foo', 'bar' );
+
+		// now delete the parent activity item
+		// this should hopefully delete the associated comments and meta entries
+		bp_activity_delete( array(
+			'id' => $parent_activity
+		) );
+
+		// now fetch the deleted activity entries
+		$get = bp_activity_get( array(
+			'in'               => array( $parent_activity, $comment_one, $comment_two ),
+			'display_comments' => 'stream'
+		) );
+
+		// activities should equal zero
+		$this->assertEquals( 0, $get['total'] );
+
+		// now fetch activity meta for the deleted activity entries
+		$m1 = bp_activity_get_meta( $parent_activity );
+		$m2 = bp_activity_get_meta( $comment_one );
+		$m3 = bp_activity_get_meta( $comment_two );
+
+		// test if activity meta entries still exist
+		$this->assertEquals( false, $m1 );
+		$this->assertEquals( false, $m2 );
+		$this->assertEquals( false, $m3 );
+	}
 }
