diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 1ed4528cb177a33b58b81a3d2626eaa5cbbe8842..96fbc8323ba7013e601c297c265cea1e3d35255e 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11007,6 +11007,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+	<key>GlobalShowIconsOverride</key>
+	<map>
+		<key>Comment</key>
+		<string>Show/hide people icons in any list. This option should be set back to 0 when icons are enabled locally for the lists</string>
+		<key>Persist</key>
+		<integer>1</integer>
+		<key>Type</key>
+		<string>Boolean</string>
+		<key>Value</key>
+		<integer>0</integer>
+	</map>
     <key>FriendsSortOrder</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 8846d1317d1e173a469be467b3a4502c4e3ab7b7..c7fa375ada10d6d56860230d0cb4d51ff3264e1d 100755
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -63,16 +63,18 @@ bool LLAvatarList::contains(const LLUUID& id)
 	return std::find(ids.begin(), ids.end(), id) != ids.end();
 }
 
-void LLAvatarList::toggleIcons()
+void LLAvatarList::setIconsVisible(bool visible)
 {
+	if (visible == mShowIcons) // nothing to be done here.
+		return;
+
 	// Save the new value for new items to use.
-	mShowIcons = !mShowIcons;
-	gSavedSettings.setBOOL(mIconParamName, mShowIcons);
-	
+	mShowIcons = visible;
+
 	// Show/hide icons for all existing items.
 	std::vector<LLPanel*> items;
 	getItems(items);
-	for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
+	for (std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
 	{
 		static_cast<LLAvatarListItem*>(*it)->setAvatarIconVisible(mShowIcons);
 	}
@@ -187,6 +189,8 @@ void LLAvatarList::draw()
 		updateAvatarNames();
 	}
 
+	setIconsVisible(gSavedSettings.getBOOL(mIconParamName) && !gSavedSettings.getBOOL("GlobalShowIconsOverride"));
+
 	if (mDirty)
 		refresh();
 
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 3542577ae3c3f7cfb89272fdf1968624c0bd576f..159ff991e6ad40fa872c19415e771a09915d514b 100755
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -76,7 +76,7 @@ class LLAvatarList : public LLFlatListViewEx
 	void setSessionID(const LLUUID& session_id) { mSessionID = session_id; }
 	const LLUUID& getSessionID() { return mSessionID; }
 
-	void toggleIcons();
+	void setIconsVisible(bool visible);
 	void setSpeakingIndicatorsVisible(bool visible);
 	void showPermissions(bool visible);
 	void sortByName();
diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp
index 924a8d720679c57217011f0f2fe3f58e103fab66..3a6e4c4dfeac30a1d2ff16526975b7b55eb6d325 100644
--- a/indra/newview/llconversationview.cpp
+++ b/indra/newview/llconversationview.cpp
@@ -503,7 +503,7 @@ void LLConversationViewSession::refresh()
 		}
 	}
 	
-	setIconsVisible(gSavedSettings.getBOOL("ChatShowIcons"));
+	setIconsVisible(gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride"));
 	
 	requestArrange();
 	// Do the regular upstream refresh
@@ -572,7 +572,7 @@ void LLConversationViewParticipant::initFromParams(const LLConversationViewParti
 BOOL LLConversationViewParticipant::postBuild()
 {
     mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
-	mAvatarIcon->setVisible(gSavedSettings.getBOOL("ChatShowIcons"));
+	mAvatarIcon->setVisible(gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride"));
 
 	mInfoBtn = getChild<LLButton>("info_btn");
 	mInfoBtn->setClickedCallback(boost::bind(&LLConversationViewParticipant::onInfoBtnClick, this));
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 1c9b2e6acbb9621bb479a26489c9cbb274bd2efb..0a5a6e8e1324c31325575475824f9fe1fb069dc2 100755
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -926,7 +926,8 @@ void LLFloaterIMContainer::onCustomAction(const LLSD& userdata)
 	}
 	if ("view_icons" == command)
 	{
-		gSavedSettings.setBOOL("ChatShowIcons", !gSavedSettings.getBOOL("ChatShowIcons"));
+		gSavedSettings.setBOOL("ChatShowIcons", !(gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL("ChatShowIcons") && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
 	}
 	if ("chat_preferences" == command)
 	{
@@ -980,7 +981,7 @@ BOOL LLFloaterIMContainer::isActionChecked(const LLSD& userdata)
 	}
 	if ("view_icons" == command)
 	{
-		return gSavedSettings.getBOOL("ChatShowIcons");
+		return gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 	}
 	if ("Translating.Enabled" == command)
 	{
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index de4efc8612f61706ff675037688ddebca8ae0630..6b86459d8f5062287b372f724823eafe7ad1dff5 100755
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -1326,8 +1326,12 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
 	}
 	else if (chosen_item == "view_icons")
 	{
-		mAllFriendList->toggleIcons();
-		mOnlineFriendList->toggleIcons();
+		std::string param = mAllFriendList->getIconParamName();
+		gSavedSettings.setBOOL(param, !(gSavedSettings.getBOOL(param) && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL(param) && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL(mOnlineFriendList->getIconParamName(), gSavedSettings.getBOOL(param));
+		mAllFriendList->setIconsVisible(gSavedSettings.getBOOL(param));
+		mOnlineFriendList->setIconsVisible(gSavedSettings.getBOOL(param));
 	}
 	else if (chosen_item == "view_permissions")
 	{
@@ -1363,7 +1367,10 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata)
 	}
 	else if (chosen_item == "view_icons")
 	{
-		mNearbyList->toggleIcons();
+		std::string param = mNearbyList->getIconParamName();
+		gSavedSettings.setBOOL(param, !(gSavedSettings.getBOOL(param) && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL(param) && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		mNearbyList->setIconsVisible(gSavedSettings.getBOOL(param));
 	}
 	else if (chosen_item == "sort_distance")
 	{
@@ -1382,6 +1389,8 @@ bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata)
 		return sort_order == E_SORT_BY_NAME;
 	if (item == "sort_distance")
 		return sort_order == E_SORT_BY_DISTANCE;
+	if (item == "view_icons")
+		return gSavedSettings.getBOOL(mNearbyList->getIconParamName()) && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 
 	return false;
 }
@@ -1400,7 +1409,10 @@ void LLPanelPeople::onRecentViewSortMenuItemClicked(const LLSD& userdata)
 	}
 	else if (chosen_item == "view_icons")
 	{
-		mRecentList->toggleIcons();
+		std::string param = mRecentList->getIconParamName();
+		gSavedSettings.setBOOL(param, !(gSavedSettings.getBOOL(param) && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL(param) && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		mRecentList->setIconsVisible(gSavedSettings.getBOOL(param));
 	}
 }
 
@@ -1413,6 +1425,8 @@ bool LLPanelPeople::onFriendsViewSortMenuItemCheck(const LLSD& userdata)
 		return sort_order == E_SORT_BY_NAME;
 	if (item == "sort_status")
 		return sort_order == E_SORT_BY_STATUS;
+	if (item == "view_icons")
+		return gSavedSettings.getBOOL(mAllFriendList->getIconParamName()) && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 
 	return false;
 }
@@ -1426,6 +1440,8 @@ bool LLPanelPeople::onRecentViewSortMenuItemCheck(const LLSD& userdata)
 		return sort_order == E_SORT_BY_MOST_RECENT;
 	if (item == "sort_name") 
 		return sort_order == E_SORT_BY_NAME;
+	if (item == "view_icons")
+		return gSavedSettings.getBOOL(mRecentList->getIconParamName()) && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 
 	return false;
 }
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
index 8790fde7c5574c05437cd4c736d8dcca1cf38c7c..02c6cfc006bcace783c2e74c1d1db9d7f0a9a3f8 100755
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
@@ -29,8 +29,8 @@
      function="People.Friends.ViewSort.Action"
      parameter="view_icons" />
     <menu_item_check.on_check
-     function="CheckControl"
-     parameter="FriendsListShowIcons" />
+     function="People.Friends.ViewSort.CheckItem"
+     parameter="view_icons" />
   </menu_item_check>
   <menu_item_check name="view_permissions" label="View Permissions Granted">
     <menu_item_check.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
index da88ca9f4d53ecd24f8591b8d0bef29cda153540..44b3d14e100770b56086ed62ba8e53e3b2881a5b 100755
--- a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
@@ -39,8 +39,8 @@
          function="People.Nearby.ViewSort.Action"
          parameter="view_icons" />
         <menu_item_check.on_check
-         function="CheckControl"
-         parameter="NearbyListShowIcons" />
+         function="People.Nearby.ViewSort.CheckItem"
+         parameter="view_icons"/>
     </menu_item_check>
     <menu_item_check name ="view_map" label="View Map">
         <menu_item_check.on_check
diff --git a/indra/newview/skins/default/xui/en/menu_people_recent_view.xml b/indra/newview/skins/default/xui/en/menu_people_recent_view.xml
index 1dbc90dd2be49550ea43950a61f88b9d08cbc923..cd2260d0c40b4a45aeb76016e5aae83985f2f42c 100755
--- a/indra/newview/skins/default/xui/en/menu_people_recent_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_recent_view.xml
@@ -29,7 +29,7 @@
      function="People.Recent.ViewSort.Action"
      parameter="view_icons" />
     <menu_item_check.on_check
-     function="CheckControl"
-     parameter="RecentListShowIcons" />
+     function="People.Recent.ViewSort.CheckItem"
+     parameter="view_icons" />
   </menu_item_check>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index b201e071ef826aa2946d4271d3d233f1fa49abd5..a8be517f3cfd90396a075df71bc126d5d8b2e0c3 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -313,4 +313,30 @@
 		<button.commit_callback
 		  function="Pref.Proxy" />
   </button>
+  <text
+    type="string"
+    length="1"
+    follows="left|top"
+    height="10"
+    layout="topleft"
+    left="30"
+    name="People Icons:"
+    mouse_opaque="false"
+    top_pad="5"
+    width="300">
+		People Icons:
+  </text>
+  <check_box
+	top_delta="4"
+	enabled="true"
+	follows="left|top"
+	height="14"
+	initial_value="false"
+	control_name="GlobalShowIconsOverride"
+	label="Hide people icons (global override)"
+	left_delta="50"
+	mouse_opaque="true"
+	name="global_show_icons_override"
+	width="400"           
+	top_pad="10"/>
 </panel>