Index: bp-activity/bp-activity-functions.php
===================================================================
--- bp-activity/bp-activity-functions.php	(revision 6346)
+++ bp-activity/bp-activity-functions.php	(working copy)
@@ -809,6 +809,7 @@
 		'exclude'          => false,        // Comma-separated list of activity IDs to exclude
 		'in'               => false,        // Comma-separated list or array of activity IDs to which you want to limit the query
 		'spam'             => 'ham_only',   // 'ham_only' (default), 'spam_only' or 'all'.
+		'meta_query'       => false,        // Activity Meta Query
 
 		/**
 		 * Pass filters as an array -- all filter items can be multiple values comma separated:
@@ -837,7 +838,8 @@
 				'filter'           => $filter,
 				'display_comments' => $display_comments,
 				'show_hidden'      => $show_hidden,
-				'spam'             => $spam
+				'spam'             => $spam,
+				'meta_query'       => $meta_query,
 			);
 			$activity = BP_Activity_Activity::get( $args );
 			wp_cache_set( 'bp_activity_sitewide_front', $activity, 'bp' );
@@ -855,7 +857,8 @@
 			'show_hidden'      => $show_hidden,
 			'exclude'          => $exclude,
 			'in'               => $in,
-			'spam'             => $spam
+			'spam'             => $spam,
+			'meta_query'       => $meta_query,
 		);
 		$activity = BP_Activity_Activity::get( $args );
 	}
Index: bp-activity/bp-activity-classes.php
===================================================================
--- bp-activity/bp-activity-classes.php	(revision 6346)
+++ bp-activity/bp-activity-classes.php	(working copy)
@@ -149,10 +149,10 @@
 			'display_comments' => false,      // Whether to include activity comments
 			'show_hidden'      => false,      // Show items marked hide_sitewide
 			'spam'             => 'ham_only', // Spam status
+			'meta_query'       => false,
 		);
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r );
-
 		// Select conditions
 		$select_sql = "SELECT a.*, u.user_email, u.user_nicename, u.user_login, u.display_name";
 
@@ -197,6 +197,16 @@
 			$where_conditions['in'] = "a.id IN ({$in})";
 		}
 
+		// Meta Query
+		if ( !empty( $meta_query ) ) {
+			$this_meta_query = new WP_Meta_Query( $meta_query );
+			$wpdb->activitymeta = $bp->activity->table_name_meta;
+			$meta_sql = $this_meta_query->get_sql( 'activity', 'a', 'id' );
+			$where_conditions['meta_query'] = preg_replace( '/^\sAND/', '', $meta_sql['where'] );
+			$join_sql = $meta_sql['join'];
+		} else
+			$join_sql = '';
+
 		// Alter the query based on whether we want to show activity item
 		// comments in the stream like normal comments or threaded below
 		// the activity.
@@ -228,12 +238,12 @@
 			$per_page = absint( $per_page );
 
 			$pag_sql    = $wpdb->prepare( "LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page );
-			$activities = $wpdb->get_results( apply_filters( 'bp_activity_get_user_join_filter', $wpdb->prepare( "{$select_sql} {$from_sql} {$where_sql} ORDER BY a.date_recorded {$sort} {$pag_sql}" ), $select_sql, $from_sql, $where_sql, $sort, $pag_sql ) );
+			$activities = $wpdb->get_results( apply_filters( 'bp_activity_get_user_join_filter', $wpdb->prepare( "{$select_sql} {$from_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort} {$pag_sql}" ), $select_sql, $from_sql, $where_sql, $sort, $pag_sql ) );
 		} else {
-			$activities = $wpdb->get_results( apply_filters( 'bp_activity_get_user_join_filter', $wpdb->prepare( "{$select_sql} {$from_sql} {$where_sql} ORDER BY a.date_recorded {$sort}" ), $select_sql, $from_sql, $where_sql, $sort ) );
+			$activities = $wpdb->get_results( apply_filters( 'bp_activity_get_user_join_filter', $wpdb->prepare( "{$select_sql} {$from_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort}" ), $select_sql, $from_sql, $where_sql, $sort ) );
 		}
 
-		$total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', $wpdb->prepare( "SELECT count(a.id) FROM {$bp->activity->table_name} a {$index_hint_sql} {$where_sql} ORDER BY a.date_recorded {$sort}" ), $where_sql, $sort );
+		$total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', $wpdb->prepare( "SELECT count(a.id) FROM {$bp->activity->table_name} a {$index_hint_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort}" ), $where_sql, $sort );
 
 		$total_activities = $wpdb->get_var( $total_activities_sql );
 
