diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp
index d53cf2a9a3bd08ca6b1fa914d2c215b663e744c1..b93dfaf0616c5db89e7e0d54e76994c3041900a7 100644
--- a/indra/newview/llfolderviewmodelinventory.cpp
+++ b/indra/newview/llfolderviewmodelinventory.cpp
@@ -232,8 +232,9 @@ bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
 		return true;
 	}
      */
-    
-	const bool passed_filter_folder = (getInventoryType() == LLInventoryType::IT_CATEGORY) ? filter.checkFolder(this) : true;
+
+	bool is_folder = (getInventoryType() == LLInventoryType::IT_CATEGORY);
+	const bool passed_filter_folder = is_folder ? filter.checkFolder(this) : true;
 	setPassedFolderFilter(passed_filter_folder, filter_generation);
 
 	bool continue_filtering = true;
@@ -258,7 +259,7 @@ bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
 	{
         // This is where filter check on the item done (CHUI-849)
 		const bool passed_filter = filter.check(this);
-		if (passed_filter && mChildren.empty()) // Update the latest filter generation for empty folders
+		if (passed_filter && mChildren.empty() && is_folder) // Update the latest filter generation for empty folders
 		{
 			LLFolderViewModelItemInventory* view_model = this;
 			while (view_model && view_model->mMostFilteredDescendantGeneration < filter_generation)
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 8f93796ec733c806b4c24a0d3f55da0cbbf3cc7d..d610b920b9d9f3f39065262c9ef05c50a98861c9 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -495,6 +495,11 @@ void LLInventoryPanel::modelChanged(U32 mask)
 
 					view_item->refresh();
 				}
+				LLFolderViewFolder* parent = view_item->getParentFolder();
+				if(parent)
+				{
+					parent->getViewModelItem()->dirtyDescendantsFilter();
+				}
 			}
 		}
 
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 7d4a05565c875cd3ae2b71888cd946d79bd2a8b3..f771a027e0f81e5443f526fb2ef47b597ad2fbda 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -29,7 +29,6 @@
 
 #include "llagent.h"
 #include "llagentcamera.h"
-#include "llagentwearables.h"
 #include "llavataractions.h"
 #include "llcheckboxctrl.h"
 #include "llcombobox.h"
@@ -180,8 +179,6 @@ BOOL LLPanelMainInventory::postBuild()
 		mWornItemsPanel->setFilterLinks(LLInventoryFilter::FILTERLINK_EXCLUDE_LINKS);
 		mWornItemsPanel->getFilter().markDefault();
 		mWornItemsPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mWornItemsPanel, _1, _2));
-
-		gAgentWearables.addLoadedCallback(boost::bind(&LLPanelMainInventory::updateWornItemsPanel, this));
 	}
 	mSearchTypeCombo  = getChild<LLComboBox>("search_type");
 	if(mSearchTypeCombo)
@@ -339,18 +336,6 @@ BOOL LLPanelMainInventory::handleKeyHere(KEY key, MASK mask)
 
 }
 
-void LLPanelMainInventory::updateWornItemsPanel()
-{
-	if (!mUpdateWornTimer.getStarted())
-	{
-		mUpdateWornTimer.start();
-	}
-	else
-	{
-		mUpdateWornTimer.reset();
-	}
-}
-
 //----------------------------------------------------------------------------
 // menu callbacks
 
@@ -685,11 +670,6 @@ void LLPanelMainInventory::draw()
 		mActivePanel->setSortOrder(order);
 		mResortActivePanel = false;
 	}
-	if (mWornItemsPanel && mUpdateWornTimer.getStarted() && (mUpdateWornTimer.getElapsedTimeF32() > 1))
-	{
-		mUpdateWornTimer.stop();
-		mWornItemsPanel->getFilter().setModified(LLFolderViewFilter::FILTER_MORE_RESTRICTIVE);
-	}
 	LLPanel::draw();
 	updateItemcountText();
 }
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index a309b3619c3bf5ed0e50bd72c43dd691204cc5d4..5300a2c02301cbfa9585db9507a7893d433da122 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -112,8 +112,6 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
 	const std::string getFilterSubString();
 	void setFilterSubString(const std::string& string);
 
-	void updateWornItemsPanel();
-
 	// menu callbacks
 	void doToSelected(const LLSD& userdata);
 	void closeAllFolders();
@@ -144,7 +142,6 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
 	S32							mItemCount;
 	std::string 				mItemCountString;
 	LLComboBox*					mSearchTypeCombo;
-	LLFrameTimer				mUpdateWornTimer;