diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index e718fcec46038d3306bd224f167490477bd94963..0c1dcc301bc7de197b7cad2909f91efeed3ed71e 100644
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -342,7 +342,9 @@ static LLTrace::BlockTimerStatHandle FTM_FILTER("Filter Folder View");
 void LLFolderView::filter( LLFolderViewFilter& filter )
 {
 	LL_RECORD_BLOCK_TIME(FTM_FILTER);
-    filter.resetTime(llclamp(LLUI::getInstance()->mSettingGroups["config"]->getS32(mParentPanel.get()->getVisible() ? "FilterItemsMaxTimePerFrameVisible" : "FilterItemsMaxTimePerFrameUnvisible"), 1, 100));
+    static LLCachedControl<S32> filter_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10);
+    static LLCachedControl<S32> filter_hidden(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameUnvisible", 1);
+    filter.resetTime(llclamp(mParentPanel.get()->getVisible() ? filter_visible() : filter_hidden(), 1, 100));
 
     // Note: we filter the model, not the view
 	getViewModelItem()->filter(filter);
diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 9754192b062a784ec747997cf1d51daedb56ca50..863a72b6c0336dd9be239ec31325bb78545d69f4 100644
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -183,10 +183,13 @@ LLFolderViewItem::~LLFolderViewItem()
 BOOL LLFolderViewItem::postBuild()
 {
     LLFolderViewModelItem& vmi = *getViewModelItem();
-    mLabel = vmi.getDisplayName(); // slightly expensive, but only first time
+    // getDisplayName() is slightly expensive and requires a filter reset
+    mLabel = vmi.getDisplayName();
     setToolTip(vmi.getName());
 
     // Dirty the filter flag of the model from the view (CHUI-849)
+    vmi.dirtyFilter();
+
     mLabelNeedsRefresh = true;
     mLabelWidthDirty = true;
 	return TRUE;
@@ -288,10 +291,6 @@ void LLFolderViewItem::refresh()
 {
 	LLFolderViewModelItem& vmi = *getViewModelItem();
 
-    // getDisplayName() is slightly expensive on first run
-	mLabel = vmi.getDisplayName();
-	setToolTip(vmi.getName());
-
     // icons are slightly expensive to get, can be optimized
     // see LLInventoryIcon::getIcon()
 	mIcon = vmi.getIcon();
@@ -306,8 +305,6 @@ void LLFolderViewItem::refresh()
 		mLabelSuffix = vmi.getLabelSuffix();
 	}
 
-    // Dirty the filter flag of the model from the view (CHUI-849)
-	vmi.dirtyFilter();
     mLabelWidthDirty = true;
     mLabelNeedsRefresh = false;
 }
@@ -362,6 +359,8 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height )
 	{
         if (mLabelNeedsRefresh)
         {
+            // Expensive. But despite refreshing label,
+            // it is purely visual, so it is fine to do at our laisure
             refresh();
         }
 		mLabelWidth = getLabelXPos() + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + mLabelPaddingRight; 
diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h
index f37125adb3b4b0b65ff18953cc4df35c8c3a353d..8693e1e0f93fdec631af3eb0fbc44259ef0baad9 100644
--- a/indra/llui/llfolderviewitem.h
+++ b/indra/llui/llfolderviewitem.h
@@ -268,7 +268,7 @@ class LLFolderViewItem : public LLView
 	virtual BOOL	isPotentiallyVisible(S32 filter_generation = -1);
 
     // refresh information from the object being viewed.
-    // refreshes, label, sufixes and sets icons. Expensive!
+    // refreshes sufixes and sets icons. Expensive!
 	virtual void refresh();
 
 	// LLView functionality
diff --git a/indra/llui/llfolderviewmodel.cpp b/indra/llui/llfolderviewmodel.cpp
index 3b45fb53a2183ebfa99ea982aeae816e929dbe8e..ea106b5fae098b7c9de657d96d918234b7b9a22d 100644
--- a/indra/llui/llfolderviewmodel.cpp
+++ b/indra/llui/llfolderviewmodel.cpp
@@ -48,7 +48,8 @@ std::string LLFolderViewModelCommon::getStatusText()
 
 void LLFolderViewModelCommon::filter()
 {
-    getFilter().resetTime(llclamp(LLUI::getInstance()->mSettingGroups["config"]->getS32("FilterItemsMaxTimePerFrameVisible"), 1, 100));
+    static LLCachedControl<S32> filter_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10);
+    getFilter().resetTime(llclamp(filter_visible(), 1, 100));
 	mFolderView->getViewModelItem()->filter(getFilter());
 }
 
diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp
index a4affe800600af3a2cb63b5f5384136ac8ca788b..fda52670418651cc07d052672ac638039f56c5a0 100644
--- a/indra/newview/llconversationview.cpp
+++ b/indra/newview/llconversationview.cpp
@@ -430,7 +430,11 @@ void LLConversationViewSession::refresh()
 	// Refresh the session view from its model data
 	LLConversationItem* vmi = dynamic_cast<LLConversationItem*>(getViewModelItem());
 	vmi->resetRefresh();
-	
+
+    mLabel = vmi->getDisplayName(); // needs a filter reset
+    setToolTip(vmi->getName());
+    vmi->dirtyFilter();
+
 	if (mSessionTitle)
 	{
 		mSessionTitle->setText(vmi->getDisplayName());
@@ -621,7 +625,11 @@ void LLConversationViewParticipant::refresh()
 	
 	// *TODO: We should also do something with vmi->isModerator() to echo that state in the UI somewhat
 	mSpeakingIndicator->setIsModeratorMuted(participant_model->isModeratorMuted());
-	
+
+    mLabel = participant_model->getDisplayName(); // needs a filter reset
+    setToolTip(participant_model->getName());
+    participant_model->dirtyFilter();
+
 	// Do the regular upstream refresh
 	LLFolderViewItem::refresh();
 }