diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 9a1f7de73b7c1f0dc848440301c7784986ab0cff..9754192b062a784ec747997cf1d51daedb56ca50 100644
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -122,6 +122,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
 :	LLView(p),
 	mLabelWidth(0),
 	mLabelWidthDirty(false),
+    mLabelNeedsRefresh(false),
     mLabelPaddingRight(DEFAULT_LABEL_PADDING_RIGHT),
 	mParentFolder( NULL ),
 	mIsSelected( FALSE ),
@@ -181,11 +182,16 @@ LLFolderViewItem::~LLFolderViewItem()
 
 BOOL LLFolderViewItem::postBuild()
 {
-	refresh();
+    LLFolderViewModelItem& vmi = *getViewModelItem();
+    mLabel = vmi.getDisplayName(); // slightly expensive, but only first time
+    setToolTip(vmi.getName());
+
+    // Dirty the filter flag of the model from the view (CHUI-849)
+    mLabelNeedsRefresh = true;
+    mLabelWidthDirty = true;
 	return TRUE;
 }
 
-
 LLFolderView* LLFolderViewItem::getRoot()
 {
 	return mRoot;
@@ -282,22 +288,28 @@ 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();
 	mIconOpen = vmi.getIconOpen();
 	mIconOverlay = vmi.getIconOverlay();
 
 	if (mRoot->useLabelSuffix())
 	{
+        // Very Expensive!
+        // Can do a number of expensive checks, like checking active motions, wearables or friend list
 		mLabelStyle = vmi.getLabelStyle();
 		mLabelSuffix = vmi.getLabelSuffix();
 	}
 
-	mLabelWidthDirty = true;
     // Dirty the filter flag of the model from the view (CHUI-849)
 	vmi.dirtyFilter();
+    mLabelWidthDirty = true;
+    mLabelNeedsRefresh = false;
 }
 
 // Utility function for LLFolderView
@@ -348,6 +360,10 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height )
 		: 0;
 	if (mLabelWidthDirty)
 	{
+        if (mLabelNeedsRefresh)
+        {
+            refresh();
+        }
 		mLabelWidth = getLabelXPos() + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + mLabelPaddingRight; 
 		mLabelWidthDirty = false;
 	}
diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h
index 61c39e0175fb0680cd37bab6e3d87c28f55a5673..f37125adb3b4b0b65ff18953cc4df35c8c3a353d 100644
--- a/indra/llui/llfolderviewitem.h
+++ b/indra/llui/llfolderviewitem.h
@@ -90,6 +90,7 @@ class LLFolderViewItem : public LLView
 	std::string					mLabel;
 	S32							mLabelWidth;
 	bool						mLabelWidthDirty;
+	bool						mLabelNeedsRefresh;
     S32                         mLabelPaddingRight;
 	LLFolderViewFolder*			mParentFolder;
 	LLPointer<LLFolderViewModelItem> mViewModelItem;
@@ -266,7 +267,8 @@ class LLFolderViewItem : public LLView
 	virtual BOOL	passedFilter(S32 filter_generation = -1);
 	virtual BOOL	isPotentiallyVisible(S32 filter_generation = -1);
 
-	// refresh information from the object being viewed.
+    // refresh information from the object being viewed.
+    // refreshes, label, sufixes and sets icons. Expensive!
 	virtual void refresh();
 
 	// LLView functionality
diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp
index 60a5204547d158b630a7723042de398a92b1a773..a4affe800600af3a2cb63b5f5384136ac8ca788b 100644
--- a/indra/newview/llconversationview.cpp
+++ b/indra/newview/llconversationview.cpp
@@ -545,7 +545,9 @@ BOOL LLConversationViewParticipant::postBuild()
     }
 
     updateChildren();
-	return LLFolderViewItem::postBuild();
+	LLFolderViewItem::postBuild();
+    refresh();
+    return TRUE;
 }
 
 void LLConversationViewParticipant::draw()