diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index adfdfebae7359c804f7cb09b77dafe2ada544839..4491ec8488c9d7f78114c7171db7c07d4edcca45 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -590,9 +590,20 @@ void LLInventoryPanel::modelChanged(U32 mask)
 		}
 	}
 
-	if ("Recent Items" == getName())
+	if (mask & (LLInventoryObserver::STRUCTURE | LLInventoryObserver::REMOVE))
 	{
-		getFilter().setModified();
+		// STRUCTURE and REMOVE model changes usually fail to update (clean)
+		// mMostFilteredDescendantGeneration of parent folder and dirtyFilter()
+		// is not sufficient for successful filter update, so we need to check
+		// all already passed element over again to remove obsolete elements.
+		// New items or moved items should be sufficiently covered by
+		// dirtyFilter().
+		LLInventoryFilter& filter = getFilter();
+		if (filter.getFilterTypes() & LLInventoryFilter::FILTERTYPE_DATE
+			|| filter.isNotDefault())
+		{
+			filter.setModified(LLFolderViewFilter::FILTER_MORE_RESTRICTIVE);
+		}
 	}
 }