diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 79376f746788b9e40ad9b9f0d95f6688a501bdac..e216c7865dfdfa697ba576a87e0ce29b0df79c8b 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1584,6 +1584,28 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>ChatLoadGroupMaxMembers</key>
+    <map>
+        <key>Comment</key>
+        <string>Max number of active members we'll show up for an unresponsive group</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>S32</string>
+        <key>Value</key>
+        <real>100</real>
+    </map>
+    <key>ChatLoadGroupTimeout</key>
+    <map>
+        <key>Comment</key>
+        <string>Time we give the server to send group participants before we hit the server for group info (seconds)</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>F32</string>
+        <key>Value</key>
+        <real>10.0</real>
+    </map>
     <key>ChatOnlineNotification</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 301b489c3496b4cf4a2852d74b3e062f87b1f81f..8783d99b118094144412eebf5bf8f4eebf819e74 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -38,6 +38,8 @@
 #include "llvoavatar.h"
 #include "llworld.h"
 
+extern LLControlGroup gSavedSettings;
+
 const LLColor4 INACTIVE_COLOR(0.3f, 0.3f, 0.3f, 0.5f);
 const LLColor4 ACTIVE_COLOR(0.5f, 0.5f, 0.5f, 1.f);
 
@@ -311,6 +313,7 @@ LLSpeakerMgr::LLSpeakerMgr(LLVoiceChannel* channelp) :
 	mModerateModeHandledFirstTime(false),
 	mSpeakerListUpdated(false)
 {
+    mGetListTime.reset();
 	static LLUICachedControl<F32> remove_delay ("SpeakerParticipantRemoveDelay", 10.0);
 
 	mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&LLSpeakerMgr::removeSpeaker, this, _1), remove_delay);
@@ -537,18 +540,20 @@ void LLSpeakerMgr::updateSpeakerList()
 			LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
 			if (session->isGroupSessionType() && (mSpeakers.size() <= 1))
 			{
+                const F32 load_group_timeout = gSavedSettings.getF32("ChatLoadGroupTimeout");
 				// For groups, we need to hit the group manager.
 				// Note: The session uuid and the group uuid are actually one and the same. If that was to change, this will fail.
 				LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(session_id);
-				if (!gdatap)
+				if (!gdatap && (mGetListTime.getElapsedTimeF32() >= load_group_timeout))
 				{
 					// Request the data the first time around
 					LLGroupMgr::getInstance()->sendCapGroupMembersRequest(session_id);
 				}
-				else if (gdatap->isMemberDataComplete() && !gdatap->mMembers.empty())
+				else if (gdatap && gdatap->isMemberDataComplete() && !gdatap->mMembers.empty())
 				{
 					// Add group members when we get the complete list (note: can take a while before we get that list)
 					LLGroupMgrGroupData::member_list_t::iterator member_it = gdatap->mMembers.begin();
+                    const S32 load_group_max_members = gSavedSettings.getS32("ChatLoadGroupMaxMembers");
                     S32 updated = 0;
 					while (member_it != gdatap->mMembers.end())
 					{
@@ -564,7 +569,7 @@ void LLSpeakerMgr::updateSpeakerList()
 						++member_it;
                         // Limit the number of "manually updated" participants to a reasonable number to avoid severe fps drop
                         // *TODO : solve the perf issue of having several hundreds of widgets in the conversation list
-                        if (updated >= 100)
+                        if (updated >= load_group_max_members)
                             break;
 					}
                     mSpeakerListUpdated = true;
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index 5f5095097e3bd1c2cd5c86158b197e7131063e26..e953dd0e1a516c7db03354ba17d12685f639fbf3 100644
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -264,6 +264,7 @@ class LLSpeakerMgr : public LLOldEvents::LLObservable
 	typedef std::map<LLUUID, LLPointer<LLSpeaker> > speaker_map_t;
 	speaker_map_t		mSpeakers;
 	bool                mSpeakerListUpdated;
+    LLTimer             mGetListTime;
 
 	speaker_list_t		mSpeakersSorted;
 	LLFrameTimer		mSpeechTimer;