diff --git bp-activity/bp-activity-classes.php bp-activity/bp-activity-classes.php
index a210786..f18b6b9 100644
--- bp-activity/bp-activity-classes.php
+++ bp-activity/bp-activity-classes.php
@@ -1177,8 +1177,7 @@ class BP_Activity_Activity {
 	 * @since BuddyPress (1.5.0)
 	 *
 	 * @param array $filter_array {
-	 *     Fields and values to filter by. Each can be either a single
-	 *     string, a comma-separated list, or an array of values.
+	 *     Fields and values to filter by.
 	 *     @type array|string|id $user_id User ID(s).
 	 *     @type array|string $object Corresponds to the 'component'
 	 *           column in the database.
@@ -1188,6 +1187,11 @@ class BP_Activity_Activity {
 	 *           column in the database.
 	 *     @type array|string|int $secondary_id Corresponds to the
 	 *           'secondary_item_id' column in the database.
+	 *     @type int $offset Return only those items with an ID greater
+	 *           than the offset value.
+	 *     @type string $since Return only those items that have a
+	 *           date_recorded value greater than a given MySQL-formatted
+	 *           date.
 	 * }
 	 * @return string The filter clause, for use in a SQL query.
 	 */
@@ -1230,6 +1234,15 @@ class BP_Activity_Activity {
 			$filter_sql[] = "a.id >= {$sid_sql}";
 		}
 
+		if ( ! empty( $filter_array['since'] ) ) {
+			// Validate that this is a proper Y-m-d H:i:s date
+			// Trick: parse to UNIX date then translate back
+			$translated_date = date( 'Y-m-d H:i:s', strtotime( $filter_array['since'] ) );
+			if ( $translated_date === $filter_array['since'] ) {
+				$filter_sql[] = "a.date_recorded > '{$translated_date}'";
+			}
+		}
+
 		if ( empty( $filter_sql ) )
 			return false;
 
diff --git bp-activity/bp-activity-filters.php bp-activity/bp-activity-filters.php
index 8f9cbff..9c6e5d9 100644
--- bp-activity/bp-activity-filters.php
+++ bp-activity/bp-activity-filters.php
@@ -429,7 +429,7 @@ add_filter( 'bp_core_get_js_dependencies', 'bp_activity_get_js_dependencies', 10
 function bp_activity_newest_class( $classes = '' ) {
 	$bp = buddypress();
 
-	if ( ! empty( $bp->activity->new_update_id ) && $bp->activity->new_update_id == bp_get_activity_id() ) {
+	if ( ! empty( $bp->activity->last_recorded ) && $bp->activity->last_recorded == bp_get_activity_date_recorded() ) {
 		$classes .= ' new-update';
 	}
 
@@ -438,12 +438,38 @@ function bp_activity_newest_class( $classes = '' ) {
 }
 
 /**
+ * Check if Activity Heartbeat feature i on to add a timestamp class.
+ *
+ * @since BuddyPress (2.0.0)
+ *
+ * @param string $classes
+ * @return string $classes
+ */
+function bp_activity_timestamp_class( $classes = '' ) {
+
+	if ( ! bp_activity_do_heartbeat() ) {
+		return $classes;
+	}
+
+	$activity_date = bp_get_activity_date_recorded();
+
+	if ( empty( $activity_date ) ) {
+		return $classes;
+	}
+	
+	$classes .= ' date-recorded-' . strtotime( $activity_date );
+
+	return $classes;
+}
+add_filter( 'bp_get_activity_css_class', 'bp_activity_timestamp_class', 9, 1 );
+
+/**
  * Use WordPress Heartbeat API to check for latest activity update.
  *
  * @since BuddyPress (2.0.0)
  *
  * @uses bp_activity_get_last_updated() to get the recorded date of the last activity
-
+ *
  * @param array $response
  * @param array $data
  * @return array $response
@@ -451,7 +477,7 @@ function bp_activity_newest_class( $classes = '' ) {
 function bp_activity_heartbeat_last_recorded( $response = array(), $data = array() ) {
 	$bp = buddypress();
 
-	if ( empty( $data['bp_activity_last_id'] ) ) {
+	if ( empty( $data['bp_activity_last_recorded'] ) ) {
 		return $response;
 	}
 
@@ -459,12 +485,12 @@ function bp_activity_heartbeat_last_recorded( $response = array(), $data = array
 	// filters), but force the offset to get only new items
 	$activity_latest_args = bp_parse_args(
 		bp_ajax_querystring( 'activity' ),
-		array( 'offset' => absint( $data['bp_activity_last_id'] ) + 1 ),
+		array( 'since' => date( 'Y-m-d H:i:s', $data['bp_activity_last_recorded'] ) ),
 		'activity_latest_args'
 	);
 
 	$newest_activities = array();
-	$last_activity_id  = 0;
+	$last_activity_recorded = 0;
 
 	// Temporarly add a just-posted class for new activity items
 	add_filter( 'bp_get_activity_css_class', 'bp_activity_newest_class', 10, 1 );
@@ -474,22 +500,23 @@ function bp_activity_heartbeat_last_recorded( $response = array(), $data = array
 		while ( bp_activities() ) {
 			bp_the_activity();
 
-			if ( $last_activity_id < bp_get_activity_id() ) {
-				$last_activity_id = bp_get_activity_id();
+			$atime = strtotime( bp_get_activity_date_recorded() );
+			if ( $last_activity_recorded < $atime ) {
+				$last_activity_recorded = $atime;
 			}
 
 			bp_get_template_part( 'activity/entry' );
 		}
 	}
 
-	$newest_activities['activities'] = ob_get_contents();
-	$newest_activities['last_id']    = $last_activity_id;
+	$newest_activities['activities']    = ob_get_contents();
+	$newest_activities['last_recorded'] = $last_activity_recorded;
 	ob_end_clean();
 
 	// Remove the temporary filter
 	remove_filter( 'bp_get_activity_css_class', 'bp_activity_newest_class', 10, 1 );
 
-	if ( ! empty( $newest_activities['last_id'] ) ) {
+	if ( ! empty( $newest_activities['last_recorded'] ) ) {
 		$response['bp_activity_newest_activities'] = $newest_activities;
 	}
 
diff --git bp-activity/bp-activity-template.php bp-activity/bp-activity-template.php
index e6b57dd..8e28b6b 100644
--- bp-activity/bp-activity-template.php
+++ bp-activity/bp-activity-template.php
@@ -547,6 +547,7 @@ function bp_has_activities( $args = '' ) {
 		'primary_id'        => $primary_id,  // object ID to filter on e.g. a group_id or forum_id or blog_id etc.
 		'secondary_id'      => false,        // secondary object ID to filter on e.g. a post_id
 		'offset'            => false,        // return only items >= this ID
+		'since'             => false,        // return only items recorded since this Y-m-d H:i:s date
 
 		'meta_query'        => false,        // filter on activity meta. See WP_Meta_Query for format
 
@@ -641,8 +642,8 @@ function bp_has_activities( $args = '' ) {
 	// into bp-custom.php or your theme's functions.php
 	if ( isset( $_GET['afilter'] ) && apply_filters( 'bp_activity_enable_afilter_support', false ) )
 		$filter = array( 'object' => $_GET['afilter'] );
-	else if ( ! empty( $user_id ) || ! empty( $object ) || ! empty( $action ) || ! empty( $primary_id ) || ! empty( $secondary_id ) || ! empty( $offset ) )
-		$filter = array( 'user_id' => $user_id, 'object' => $object, 'action' => $action, 'primary_id' => $primary_id, 'secondary_id' => $secondary_id, 'offset' => $offset );
+	else if ( ! empty( $user_id ) || ! empty( $object ) || ! empty( $action ) || ! empty( $primary_id ) || ! empty( $secondary_id ) || ! empty( $offset ) || ! empty( $since ) )
+		$filter = array( 'user_id' => $user_id, 'object' => $object, 'action' => $action, 'primary_id' => $primary_id, 'secondary_id' => $secondary_id, 'offset' => $offset, 'since' => $since );
 	else
 		$filter = false;
 
@@ -2805,7 +2806,7 @@ function bp_send_public_message_link() {
  */
 function bp_activity_recurse_comments_activity_ids( $activity = array(), $activity_ids = array() ) {
 	if ( is_array( $activity ) && ! empty( $activity['activities'] ) ) {
-		$activity = $activity['activities'][0];	
+		$activity = $activity['activities'][0];
 	}
 
 	if ( ! empty( $activity->children ) ) {
diff --git bp-templates/bp-legacy/buddypress-functions.php bp-templates/bp-legacy/buddypress-functions.php
index e1b3431..bca42bb 100644
--- bp-templates/bp-legacy/buddypress-functions.php
+++ bp-templates/bp-legacy/buddypress-functions.php
@@ -706,10 +706,10 @@ function bp_legacy_theme_post_update() {
 	if ( empty( $activity_id ) )
 		exit( '-1<div id="message" class="error"><p>' . __( 'There was a problem posting your update, please try again.', 'buddypress' ) . '</p></div>' );
 
-	$last_id = isset( $_POST['offset'] ) ? absint( $_POST['offset'] ) + 1 : 0;
-	if ( $last_id ) {
-		$activity_args = array( 'offset' => $last_id );
-		$bp->activity->new_update_id = $activity_id;
+	$last_recorded = isset( $_POST['since'] ) ? date( 'Y-m-d H:i:s', intval( $_POST['since'] ) ) : 0;
+	if ( $last_recorded ) {
+		$activity_args = array( 'since' => $last_recorded );
+		$bp->activity->last_recorded = $last_recorded;
 		add_filter( 'bp_get_activity_css_class', 'bp_activity_newest_class', 10, 1 );
 	} else {
 		$activity_args = array( 'include' => $activity_id );
@@ -722,7 +722,7 @@ function bp_legacy_theme_post_update() {
 		}
 	}
 
-	if ( ! empty( $last_id ) ) {
+	if ( ! empty( $last_recorded ) ) {
 		remove_filter( 'bp_get_activity_css_class', 'bp_activity_newest_class', 10, 1 );
 	}
 
diff --git bp-templates/bp-legacy/js/buddypress.js bp-templates/bp-legacy/js/buddypress.js
index 610f704..aa377b8 100644
--- bp-templates/bp-legacy/js/buddypress.js
+++ bp-templates/bp-legacy/js/buddypress.js
@@ -6,7 +6,7 @@ var bp_ajax_request = null;
 
 // Global variables to temporarly store newest activities
 var newest_activities = '';
-var activity_last_id  = 0;
+var activity_last_recorded  = 0;
 
 jq(document).ready( function() {
 	/**** Page Load Actions *******************************************************/
@@ -91,7 +91,7 @@ jq(document).ready( function() {
 
 	/* New posts */
 	jq("#aw-whats-new-submit").on( 'click', function() {
-		var last_displayed_id = 0;
+		var last_date_recorded = 0;
 		var button = jq(this);
 		var form = button.closest("form#whats-new-form");
 
@@ -113,9 +113,13 @@ jq(document).ready( function() {
 		var firstrow = jq( '#buddypress ul.activity-list li' ).first();
 
 		if ( firstrow.hasClass( 'load-newest' ) ) {
-			last_displayed_id = firstrow.next().prop( 'id' ) ? firstrow.next().prop( 'id' ).replace( 'activity-','' ) : 0;
-		} else {
-			last_displayed_id = firstrow.prop( 'id' ) ? firstrow.prop( 'id' ).replace( 'activity-','' ) : 0;
+			firstrow = firstrow.next();
+		}
+
+		timestamp = firstrow.prop( 'class' ).match( /date-recorded-([0-9]+)$/ );
+ 		
+ 		if ( timestamp ) {
+			last_date_recorded = timestamp[1];
 		}
 
 		/* Set object for non-profile posts */
@@ -130,7 +134,7 @@ jq(document).ready( function() {
 			'content': content,
 			'object': object,
 			'item_id': item_id,
-			'offset': last_displayed_id,
+			'since': last_date_recorded,
 			'_bp_as_nonce': jq('#_bp_as_nonce').val() || ''
 		},
 		function(response) {
@@ -157,7 +161,7 @@ jq(document).ready( function() {
 
 				jq("#activity-stream").prepend(response);
 
-				if ( ! last_displayed_id )
+				if ( ! last_date_recorded )
 					jq("#activity-stream li:first").addClass('new-update just-posted');
 
 				if ( 0 != jq("#latest-update").length ) {
@@ -184,7 +188,7 @@ jq(document).ready( function() {
 
 				// reset vars to get newest activities
 				newest_activities = '';
-				activity_last_id  = 0;
+				activity_last_recorded  = 0;
 			}
 
 			jq("#whats-new-options").animate({
@@ -305,6 +309,7 @@ jq(document).ready( function() {
 			var id        = li.attr('id').substr( 9, li.attr('id').length );
 			var link_href = target.attr('href');
 			var nonce     = link_href.split('_wpnonce=');
+			var timestamp = li.prop( 'class' ).match( /date-recorded-([0-9]+)$/ );
 
 			nonce = nonce[1];
 
@@ -325,9 +330,9 @@ jq(document).ready( function() {
 					li.slideUp(300);
 
 					// reset vars to get newest activities
-					if ( activity_last_id == id ) {
+					if ( timestamp && activity_last_recorded == timestamp[1] ) {
 						newest_activities = '';
-						activity_last_id  = 0;
+						activity_last_recorded  = 0;
 					}
 				}
 			});
@@ -337,7 +342,8 @@ jq(document).ready( function() {
 
 		// Spam activity stream items
 		if ( target.hasClass( 'spam-activity' ) ) {
-			var li = target.parents( 'div.activity ul li' );
+			var li        = target.parents( 'div.activity ul li' );
+			var timestamp = li.prop( 'class' ).match( /date-recorded-([0-9]+)$/ );
 			target.addClass( 'loading' );
 
 			jq.post( ajaxurl, {
@@ -354,9 +360,9 @@ jq(document).ready( function() {
 				} else {
 					li.slideUp( 300 );
 					// reset vars to get newest activities
-					if ( activity_last_id == id ) {
+					if ( timestamp && activity_last_recorded == timestamp[1] ) {
 						newest_activities = '';
-						activity_last_id  = 0;
+						activity_last_recorded  = 0;
 					}
 				}
 			});
@@ -1492,21 +1498,26 @@ jq(document).ready( function() {
 
 	// Set the last id to request after
 	jq( document ).on( 'heartbeat-send.buddypress', function( e, data ) {
+		
+		firstrow = 0;
 
 		// First row is default latest activity id
 		if ( jq( '#buddypress ul.activity-list li' ).first().prop( 'id' ) ) {
-			firstrow = jq( '#buddypress ul.activity-list li' ).first().prop( 'id' ).replace( 'activity-','' );
-		} else {
-			firstrow = 0;
+			// getting the timestamp
+			timestamp = jq( '#buddypress ul.activity-list li' ).first().prop( 'class' ).match( /date-recorded-([0-9]+)$/ );
+
+			if ( timestamp ) {
+				firstrow = timestamp[1];
+			}
 		}
 
-		if ( 0 == activity_last_id || Number( firstrow ) > activity_last_id )
-			activity_last_id = Number( firstrow );
+		if ( 0 == activity_last_recorded || Number( firstrow ) > activity_last_recorded )
+			activity_last_recorded = Number( firstrow );
 
-		data['bp_activity_last_id'] = activity_last_id;
+		data['bp_activity_last_recorded'] = activity_last_recorded;
 	});
 
-	// Increment newest_activities and activity_last_id if data has been returned
+	// Increment newest_activities and activity_last_recorded if data has been returned
 	jq( document ).on( 'heartbeat-tick', function( e, data ) {
 
 		// Only proceed if we have newest activities
@@ -1515,7 +1526,7 @@ jq(document).ready( function() {
 		}
 
 		newest_activities = data['bp_activity_newest_activities']['activities'] + newest_activities;
-		activity_last_id  = Number( data['bp_activity_newest_activities']['last_id'] );
+		activity_last_recorded  = Number( data['bp_activity_newest_activities']['last_recorded'] );
 
 		if ( jq( '#buddypress ul.activity-list li' ).first().hasClass( 'load-newest' ) )
 			return;
diff --git tests/testcases/activity/class.BP_Activity_Activity.php tests/testcases/activity/class.BP_Activity_Activity.php
index 4b0744a..f8eaa8b 100644
--- tests/testcases/activity/class.BP_Activity_Activity.php
+++ tests/testcases/activity/class.BP_Activity_Activity.php
@@ -282,6 +282,34 @@ class BP_Tests_Activity_Class extends BP_UnitTestCase {
 		$ids = wp_list_pluck( $activity['activities'], 'id' );
 		$this->assertEquals( array( $a3, $a2 ), $ids );
 	}
+
+	/**
+	 * @group get
+	 */
+	public function test_get_with_since() {
+		$now = time();
+		$a1 = $this->factory->activity->create( array(
+			'content' => 'Life Rules',
+			'recorded_time' => date( 'Y-m-d H:i:s', $now - 100 ),
+		) );
+		$a2 = $this->factory->activity->create( array(
+			'content' => 'Life Drools',
+			'recorded_time' => date( 'Y-m-d H:i:s', $now - 50 ),
+		) );
+		$a3 = $this->factory->activity->create( array(
+			'content' => 'Life Drools',
+			'recorded_time' => date( 'Y-m-d H:i:s', $now - 10 ),
+		) );
+
+		$activity = BP_Activity_Activity::get( array(
+			'filter' => array(
+				'since' => date( 'Y-m-d H:i:s', $now - 70 ),
+			),
+		) );
+		$ids = wp_list_pluck( $activity['activities'], 'id' );
+		$this->assertEquals( array( $a3, $a2 ), $ids );
+	}
+
 	/**
 	 * @group get_id
 	 */
