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..501da3b01 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,32 @@ 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 context = bp.Nouveau.Activity.getContext;
+				    toPrepend = context.areUpdatesListed() && context.isInSearch( response.activity );
 
-				if ( ! response.is_directory ||
-				     ( 'all' === scope && ( 'user' === self.model.get( 'object' ) || false === response.is_private ) ) ||
-				     ( self.model.get( 'object' ) + 's'  === scope )
-				    ) {
-
-					if ( ! $( '#activity-' + response.id  ).length ) {
-						bp.Nouveau.inject( '#activity-stream ul.activity-list', response.activity, 'prepend' );
-						prepended = true;
-					}
+				// Should we prepend the posted activity to the stream ?
+				if ( toPrepend ) {
+					toPrepend = context[ self.model.get( 'object' ) ].prependNewItems( response );
 				}
 
 				// 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' } ) );
+
+				// Inject the activity into the stream only if it hasn't been done already (HeartBeat).
+				} else if ( ! $( '#activity-' + response.id  ).length ) {
 
-				/**
-				 * 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' } ) );
+					// 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-activity.js src/bp-templates/bp-nouveau/js/buddypress-activity.js
index e47543c2b..f992d283d 100644
--- src/bp-templates/bp-nouveau/js/buddypress-activity.js
+++ src/bp-templates/bp-nouveau/js/buddypress-activity.js
@@ -52,6 +52,78 @@ window.bp = window.bp || {};
 			};
 		},
 
+		getContext: {
+			/**
+			 * Checks content match search terms.
+			 *
+			 * @return {boolean} True if there's no search all activities are matching, or
+			 *                   there's a search and content matches it. False otherwise.
+			 */
+			isInSearch: function( content ) {
+				var searchTerms = $( '[data-bp-search="activity"] input[type="search"]' ).val(), matches = {};
+
+				if ( ! content ) {
+					return false;
+				}
+
+				if ( searchTerms ) {
+					searchTerms = new RegExp( searchTerms, 'im' );
+					matches = content.match( searchTerms );
+				}
+
+				return ! searchTerms || null !== matches;
+			},
+			/**
+			 * Checks Activity Updates are listed.
+			 *
+			 * @return {boolean} True if all activity types are listed, or only
+			 *                   activity updates are listed. False otherwise.
+			 */
+			areUpdatesListed: function() {
+				var filter = bp.Nouveau.getStorage( 'bp-activity', 'filter' );
+
+				return ! filter || 0 === parseInt( filter, 10 ) || 'activity_update' === filter;
+			},
+			user: {
+				/**
+				 * Conditions to prepend new user activities to the stream.
+				 *
+				 * @param  {object} item  The posted item.
+				 * @return {boolean}      True if the user is on his profile, or if all items
+				 *                        are listed in the Activity directory. False otherwise.
+				 */
+				prependNewItems: function( item ) {
+					var scope = bp.Nouveau.getStorage( 'bp-activity', 'scope' );
+					item = $.extend( { 'is_directory': false }, item );
+
+					if ( item.is_directory ) {
+						return 'all' === scope;
+					}
+
+					return true;
+				}
+			},
+			group: {
+				/**
+				 * Conditions to prepend new group activities to the stream.
+				 *
+				 * @param  {object} item  The posted item.
+				 * @return {boolean}      True if the user is on the group's profile, or if group items
+				 *                        are listed into the Activity directory. False otherwise.
+				 */
+				prependNewItems: function( item ) {
+					var scope = bp.Nouveau.getStorage( 'bp-activity', 'scope' );
+					item = $.extend( { 'is_directory': false, 'is_private': false }, item );
+
+					if ( item.is_directory ) {
+						return 'groups' === scope || ! item.is_private;
+					}
+
+					return true;
+				}
+			}
+		},
+
 		/**
 		 * [addListeners description]
 		 */
diff --git src/bp-templates/bp-nouveau/js/buddypress-nouveau.js src/bp-templates/bp-nouveau/js/buddypress-nouveau.js
index ef9a9cc7b..12f5f1ae9 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;
