diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp
index a0e3e86eea81fd710166b922fe91af7535b1bd1f..da8bfae1a9de8b042540dd01e287c809d7419aa1 100644
--- a/indra/newview/llavatarrendernotifier.cpp
+++ b/indra/newview/llavatarrendernotifier.cpp
@@ -99,7 +99,6 @@ std::string LLAvatarRenderNotifier::overLimitMessage()
 
 void LLAvatarRenderNotifier::displayNotification()
 {
-    mAgentComplexity = mLatestAgentComplexity;
 	static LLCachedControl<U32> expire_delay(gSavedSettings, "ShowMyComplexityChanges", 20);
 
 	LLDate expire_date(LLDate::now().secondsSinceEpoch() + expire_delay);
@@ -108,10 +107,6 @@ void LLAvatarRenderNotifier::displayNotification()
 	std::string notification_name;
     if (mShowOverLimitAgents)
     {
-        mAgentsCount = mLatestAgentsCount;
-        mOverLimitAgents = mLatestOverLimitAgents;
-        mOverLimitPct = mLatestOverLimitPct;
-
         std::string notification_message = overLimitMessage();
         notification_name = "RegionAndAgentComplexity";
         args["OVERLIMIT_MSG"] = notification_message;
@@ -139,6 +134,69 @@ bool LLAvatarRenderNotifier::isNotificationVisible()
 	return mNotificationPtr != NULL && mNotificationPtr->isActive();
 }
 
+void LLAvatarRenderNotifier::updateNotification()
+{
+	if (mAgentsCount == mLatestAgentsCount
+		&& mOverLimitAgents == mLatestOverLimitAgents
+		&& mAgentComplexity == mLatestAgentComplexity)
+	{
+		//no changes since last notification
+		return;
+	}
+
+	if (mLatestAgentComplexity == 0
+		|| !gAgentWearables.areWearablesLoaded())
+	{
+		// data not ready, nothing to show.
+		return;
+	}
+
+	bool display_notification = false;
+	bool is_visible = isNotificationVisible();
+
+	if (mLatestOverLimitPct > 0 || mOverLimitPct > 0)
+	{
+		//include 'over limit' information into notification
+		mShowOverLimitAgents = true;
+	}
+	else
+	{
+		// make sure that 'over limit' won't be displayed only to be hidden in a second
+		mShowOverLimitAgents &= is_visible;
+	}
+
+	if (mAgentComplexity != mLatestAgentComplexity)
+	{
+		// if we have an agent complexity update, we always display it 
+		display_notification = true;
+
+		// next 'over limit' update should be displayed after delay to make sure information got updated at server side
+		mPopUpDelayTimer.resetWithExpiry(OVER_LIMIT_UPDATE_DELAY);
+	}
+	else if (   (mPopUpDelayTimer.hasExpired() || is_visible)
+		     && (mOverLimitPct > 0 || mLatestOverLimitPct > 0)
+             && std::abs(mOverLimitPct - mLatestOverLimitPct) > mLatestOverLimitPct * RENDER_ALLOWED_CHANGE_PCT
+             )
+	{
+		// display in case of drop to/from zero and in case of significant (RENDER_ALLOWED_CHANGE_PCT) changes
+		display_notification = true;
+
+		// default timeout before next notification
+		static LLCachedControl<U32> pop_up_delay(gSavedSettings, "ComplexityChangesPopUpDelay", 300);
+		mPopUpDelayTimer.resetWithExpiry(pop_up_delay);
+	}
+
+	if (display_notification)
+	{
+		mAgentComplexity = mLatestAgentComplexity;
+		mAgentsCount = mLatestAgentsCount;
+		mOverLimitAgents = mLatestOverLimitAgents;
+		mOverLimitPct = mLatestOverLimitPct;
+
+		displayNotification();
+	}
+}
+
 void LLAvatarRenderNotifier::updateNotificationRegion(U32 agentcount, U32 overLimit)
 {
 	if (agentcount == 0)
@@ -152,27 +210,7 @@ void LLAvatarRenderNotifier::updateNotificationRegion(U32 agentcount, U32 overLi
 	mLatestOverLimitAgents = overLimit;
 	mLatestOverLimitPct = mLatestAgentsCount != 0 ? ((F32)overLimit / (F32)mLatestAgentsCount) * 100.0 : 0;
 
-    if (mAgentsCount == mLatestAgentsCount
-        && mOverLimitAgents == mLatestOverLimitAgents)
-    {
-        //no changes since last notification
-        return;
-    }
-
-    if ((mPopUpDelayTimer.hasExpired() || (isNotificationVisible() && mShowOverLimitAgents))
-        && (mOverLimitPct > 0 || mLatestOverLimitPct > 0)
-        && std::abs(mOverLimitPct - mLatestOverLimitPct) > mLatestOverLimitPct * RENDER_ALLOWED_CHANGE_PCT
-        )
-    {
-        // display in case of drop to/from zero and in case of significant (RENDER_ALLOWED_CHANGE_PCT) changes
-
-        mShowOverLimitAgents = true;
-        displayNotification();
-
-        // default timeout before next notification
-        static LLCachedControl<U32> pop_up_delay(gSavedSettings, "ComplexityChangesPopUpDelay", 300);
-        mPopUpDelayTimer.resetWithExpiry(pop_up_delay);
-    }
+	updateNotification();
 }
 
 void LLAvatarRenderNotifier::updateNotificationAgent(U32 agentComplexity)
@@ -180,12 +218,6 @@ void LLAvatarRenderNotifier::updateNotificationAgent(U32 agentComplexity)
     // save the value for use in following messages
     mLatestAgentComplexity = agentComplexity;
 
-    if (!gAgentWearables.areWearablesLoaded())
-    {
-        // data not ready, nothing to show.
-        return;
-    }
-
     if (!mNotifyOutfitLoading)
     {
         // We should not notify about initial outfit and it's load process without reason
@@ -212,14 +244,6 @@ void LLAvatarRenderNotifier::updateNotificationAgent(U32 agentComplexity)
         }
     }
 
-    if (mAgentComplexity != mLatestAgentComplexity)
-    {
-        // if we have an agent complexity change, we always display it and hide 'over limit'
-        mShowOverLimitAgents = false;
-        displayNotification();
-
-        // next 'over limit' update should be displayed after delay to make sure information got updated at server side
-        mPopUpDelayTimer.resetWithExpiry(OVER_LIMIT_UPDATE_DELAY);
-    }
+    updateNotification();
 }
 
diff --git a/indra/newview/llavatarrendernotifier.h b/indra/newview/llavatarrendernotifier.h
index 509bc64b20e275d922b226a8b765448fce587bfd..20fcc5d277543ed54cd7b98dec094b4ad03fbb02 100644
--- a/indra/newview/llavatarrendernotifier.h
+++ b/indra/newview/llavatarrendernotifier.h
@@ -43,6 +43,7 @@ class LLAvatarRenderNotifier : public LLSingleton<LLAvatarRenderNotifier>
 	void displayNotification();
 	bool isNotificationVisible();
 
+	void updateNotification();
 	void updateNotificationRegion(U32 agentcount, U32 overLimit);
 	void updateNotificationAgent(U32 agentComplexity);