diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index 5bca589bc4daff0044f27019874a2b8dd71adcbd..3ca549ae72c50caf3a6d07162cdce153e2e19341 100644
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -327,7 +327,13 @@ void LLFolderView::filter( LLFolderViewFilter& filter )
 	LLFastTimer t2(FTM_FILTER);
 	filter.setFilterCount(llclamp(LLUI::sSettingGroups["config"]->getS32("FilterItemsPerFrame"), 1, 5000));
 
-	getViewModelItem()->filter(filter);
+	bool filtered_items = getViewModelItem()->filter(filter);
+    //if (getViewModelItem()->descendantsPassedFilter(filter.getCurrentGeneration()))
+    if (filtered_items)
+    {
+        llinfos << "Merov : LLFolderView::filter, request arrange, new elements passed the filter" << llendl;
+        requestArrange();
+    }
 }
 
 void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent)
@@ -1665,9 +1671,14 @@ void LLFolderView::update()
     {
       S32 height = 0;
       S32 width = 0;
+        llinfos << "Merov : LLFolderView::update: parent = " << mParentPanel->getName() << ", is been arranged, last arrange = " << mLastArrangeGeneration << ", root arrange = " << getRoot()->getArrangeGeneration() << llendl;
       S32 total_height = arrange( &width, &height );
       notifyParent(LLSD().with("action", "size_changes").with("height", total_height));
     }
+      else
+      {
+          llinfos << "Merov : LLFolderView::update: parent = " << mParentPanel->getName() << ", doesn't need arranging, last arrange = " << mLastArrangeGeneration << ", root arrange = " << getRoot()->getArrangeGeneration() << llendl;
+      }
   }
 
 	// during filtering process, try to pin selected item's location on screen
diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h
index ca31931e19443d94400473c4c1189fcc50217c71..a9b0201236b9ff3174695a0dabb8424d015f3a1b 100755
--- a/indra/llui/llfolderviewitem.h
+++ b/indra/llui/llfolderviewitem.h
@@ -316,7 +316,6 @@ class LLFolderViewFolder : public LLFolderViewItem
 	F32			mAutoOpenCountdown;
 	S32			mLastArrangeGeneration;
 	S32			mLastCalculatedWidth;
-	S32			mMostFilteredDescendantGeneration;
 	bool		mNeedsSort;
 
 public:
diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp
index 5ad94bfaba9522307b66366bbc47c22241dc9cb2..49b72485e0a624a6402837abb7729589d4734cf5 100644
--- a/indra/newview/llfolderviewmodelinventory.cpp
+++ b/indra/newview/llfolderviewmodelinventory.cpp
@@ -71,7 +71,7 @@ bool LLFolderViewModelInventory::startDrag(std::vector<LLFolderViewModelItem*>&
 void LLFolderViewModelInventory::sort( LLFolderViewFolder* folder )
 {
 	LLFastTimer _(FTM_INVENTORY_SORT);
-    llinfos << "Merov : LLFolderViewModelInventory::sort of instance = " << mModelInstance << llendl;
+    llinfos << "Merov : LLFolderViewModelInventory::sort of instance = " << mModelInstance << ", folder = " << folder->getName() << llendl;
 
 	if (!needsSort(folder->getViewModelItem())) return;
 
@@ -155,11 +155,12 @@ bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* ite
 {
 	S32 filter_generation = filter.getCurrentGeneration();
 
-	bool continue_filtering = true;
+//	bool continue_filtering = true;
+	bool new_filtered_item = false;
 	if (item->getLastFilterGeneration() < filter_generation)
 	{
 		// recursive application of the filter for child items
-		continue_filtering = item->filter( filter );
+		new_filtered_item = item->filter( filter );
 	}
 
 	// track latest generation to pass any child items, for each folder up to root
@@ -174,7 +175,7 @@ bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* ite
 		}
 	}
 
-	return continue_filtering;
+	return new_filtered_item;
 }
 
 bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
@@ -186,10 +187,6 @@ bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
     {
         llinfos << "Merov : LLFolderViewModelItemInventory::filter : special NOUNOURS case, filter count = " << filter.getFilterCount() << ", must pass = " << must_pass_generation << ", current = " << filter_generation << ", item last = " << getLastFilterGeneration() << ", folder last = " << getLastFolderFilterGeneration() << llendl;
     }
-    else
-    {
-        llinfos << "Merov : LLFolderViewModelItemInventory::filter : filter count = " << filter.getFilterCount() << llendl;
-    }
    
     if (getLastFilterGeneration() >= must_pass_generation
 		&& getLastFolderFilterGeneration() >= must_pass_generation
@@ -199,12 +196,14 @@ bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
 		// go ahead and flag this item as done
 		setPassedFilter(false, filter_generation);
 		setPassedFolderFilter(false, filter_generation);
-		return true;
+		return false;
 	}
 
 	const bool passed_filter_folder = (getInventoryType() == LLInventoryType::IT_CATEGORY) ? filter.checkFolder(this) : true;
 	setPassedFolderFilter(passed_filter_folder, filter_generation);
 
+	bool new_filtered_item = false;
+
 	if (!mChildren.empty()
 		&& (getLastFilterGeneration() < must_pass_generation // haven't checked descendants against minimum required generation to pass
             || descendantsPassedFilter(must_pass_generation))) // or at least one descendant has passed the minimum requirement
@@ -214,7 +213,8 @@ bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
 			iter != end_iter && filter.getFilterCount() > 0;
 			++iter)
 		{
-			if (!filterChildItem((*iter), filter))
+			new_filtered_item |= filterChildItem((*iter), filter);
+            if (filter.getFilterCount() <= 0)
 			{
 				break;
 			}
@@ -230,12 +230,9 @@ bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
 
 		const bool passed_filter = filter.check(this);
 		setPassedFilter(passed_filter, filter_generation, filter.getStringMatchOffset(this), filter.getFilterStringSize());
-		return true;
-	}
-	else
-	{
-		return false;
+        new_filtered_item |= passed_filter;
 	}
+    return new_filtered_item;
 }
 
 LLFolderViewModelInventory* LLInventoryPanel::getFolderViewModel()
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index eef0adda52ff3f820beffa2588ed3b963070c3b1..d3f5d68708d6ab9438adb7f35efe15f1ad8db586 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -104,10 +104,6 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
     {
         llinfos << "Merov : LLInventoryFilter::check : Here we go with our special NOUNOURS case, checked for string '" << mFilterSubString << "', passed = " << passed << ", name = " << listener->getSearchableName() << llendl;
     }
-    else
-    {
-        llinfos << "Merov : LLInventoryFilter::check : checked for string '" << mFilterSubString << "', passed = " << passed << ", name = " << listener->getSearchableName() << llendl;
-    }
 
 	return passed;
 }
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 7555ac7b2caf9510ce5ee0d3351fc2517c6ae165..4d8fa073360723cd2cb3cec8787058522f5216ad 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1492,6 +1492,7 @@ LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Par
 	mIsInventoryEmpty(TRUE),
 	mInventoryNeedsUpdate(FALSE)
 {
+    llinfos << "Merov : LLPanelObjectInventory::LLPanelObjectInventory, name = " << getName() << ", label = " << getLabel() << llendl;
 	// Setup context menu callbacks
 	mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2));
 	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));