diff --git src/bp-templates/bp-nouveau/js/buddypress-activity-post-form.js src/bp-templates/bp-nouveau/js/buddypress-activity-post-form.js
index 9a50fb7bc..2b8ce57a8 100644
--- src/bp-templates/bp-nouveau/js/buddypress-activity-post-form.js
+++ src/bp-templates/bp-nouveau/js/buddypress-activity-post-form.js
@@ -708,32 +708,53 @@ window.bp = window.bp || {};
 			}
 
 			bp.ajax.post( 'post_update', _.extend( data, this.model.attributes ) ).done( function( response ) {
-				var scope     = bp.Nouveau.getStorage( 'bp-activity', 'scope' ),
-					prepended = false;
+				var store       = bp.Nouveau.getStorage( 'bp-activity' ),
+					searchTerms = $( '[data-bp-search="activity"] input[type="search"]' ).val(), matches = {},
+					toPrepend = false;
+
+				// Look for matches if the stream displays search results.
+				if ( searchTerms ) {
+					searchTerms = new RegExp( searchTerms, 'im' );
+					matches = response.activity.match( searchTerms );
+				}
 
-				if ( ! response.is_directory ||
-				     ( 'all' === scope && ( 'user' === self.model.get( 'object' ) || false === response.is_private ) ) ||
-				     ( self.model.get( 'object' ) + 's'  === scope )
-				    ) {
+				/**
+				 * Before injecting the activity into the stream, we need to check the filter
+				 * and search terms are consistent with it when posting from a single item or
+				 * from the Activity directory.
+				 */
+				if ( ( ! searchTerms || matches ) ) {
+					toPrepend = ! store.filter || 0 === parseInt( store.filter, 10 ) || 'activity_update' === store.filter;
+				}
 
-					if ( ! $( '#activity-' + response.id  ).length ) {
-						bp.Nouveau.inject( '#activity-stream ul.activity-list', response.activity, 'prepend' );
-						prepended = true;
-					}
+				/**
+				 * In the Activity directory, we also need to check the active scope.
+				 * eg: An update posted in a private group should only show when the
+				 * "My Groups" tab is active.
+				 */
+				if ( toPrepend && response.is_directory ) {
+					toPrepend = ( 'all' === store.scope && ( 'user' === self.model.get( 'object' ) || false === response.is_private ) )
+								|| ( self.model.get( 'object' ) + 's'  === store.scope );
 				}
 
 				// Reset the form
 				self.resetForm();
 
-				// Stop here if the activity has been added to the stream
-				if ( prepended ) {
-					return;
-				}
+				// Display a successful feedback if the acticity is not consistent with the displayed stream.
+				if ( ! toPrepend ) {
+					self.views.add( new bp.Views.activityFeedback( { value: response.message, type: 'updated' } ) );
 
-				/**
-				 * Do not add to the stream if the scope is not consistent with the activity
-				 */
-				self.views.add( new bp.Views.activityFeedback( { value: response.message, type: 'updated' } ) );
+				// Inject the activity into the stream only if it hasn't been done already (HeartBeat).
+				} else if ( ! $( '#activity-' + response.id  ).length ) {
+
+					// It's the very first activity, let's make sure the container can welcome it!
+					if ( ! $( '#activity-stream ul.activity-list').length ) {
+						$( '#activity-stream' ).html( $( '<ul></ul>').addClass( 'activity-list item-list bp-list' ) );
+					}
+
+					// Prepend the activity.
+					bp.Nouveau.inject( '#activity-stream ul.activity-list', response.activity, 'prepend' );
+				}
 			} ).fail( function( response ) {
 
 				self.model.set( 'errors', { type: 'error', value: response.message } );
diff --git src/bp-templates/bp-nouveau/js/buddypress-nouveau.js src/bp-templates/bp-nouveau/js/buddypress-nouveau.js
index 763c74d54..8d9930282 100644
--- src/bp-templates/bp-nouveau/js/buddypress-nouveau.js
+++ src/bp-templates/bp-nouveau/js/buddypress-nouveau.js
@@ -103,8 +103,8 @@ window.bp = window.bp || {};
 				store = {};
 			}
 
-			if ( undefined !== property && store[property] ) {
-				return store[property];
+			if ( undefined !== property ) {
+				return store[property] || false;
 			}
 
 			return store;
