diff --git a/doc/contributions.txt b/doc/contributions.txt
index ef9f09bd2325beaa8ac08a1f07f665c53f554466..5f209a667593ea279aa71bdf0526ad238fe715a3 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -17,6 +17,9 @@ Agathos Frascati
 	CT-317
 	CT-352
 Aimee Trescothick
+	SNOW-227
+	SNOW-570
+	SNOW-572
 	VWR-3321
 	VWR-3336
 	VWR-3903
@@ -48,6 +51,9 @@ Aimee Trescothick
 	VWR-14087
 	VWR-14267
 	VWR-14278
+	VWR-14711
+	VWR-14712
+	VWR-15454
 Alejandro Rosenthal
 	VWR-1184
 Aleric Inglewood
diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
index bfa2c34c12808666a64ccfe8523c4b2f8535c630..e869b9717c3ddcef4e98e6a957281fd2c21cf64d 100644
--- a/indra/llaudio/CMakeLists.txt
+++ b/indra/llaudio/CMakeLists.txt
@@ -57,13 +57,11 @@ if (FMOD)
          llstreamingaudio_fmod.h
          )
 
-    if (LINUX)
-      if (${CXX_VERSION_NUMBER} GREATER 419)
-        set_source_files_properties(llaudioengine_fmod.cpp
-                                    llstreamingaudio_fmod.cpp
-                                    COMPILE_FLAGS -Wno-write-strings)
-      endif (${CXX_VERSION_NUMBER} GREATER 419)
-    endif (LINUX)
+    if (LINUX OR DARWIN)
+      set_source_files_properties(llaudioengine_fmod.cpp
+                                  llstreamingaudio_fmod.cpp
+                                  COMPILE_FLAGS -Wno-write-strings)
+    endif (LINUX OR DARWIN)
 endif (FMOD)
 
 if (OPENAL)
diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp
index c18e2375f94993e782124d101a5e1c36458bd46c..7d6dde1a58e3dfb03e9947b133f8ce61887c063b 100644
--- a/indra/llplugin/slplugin/slplugin.cpp
+++ b/indra/llplugin/slplugin/slplugin.cpp
@@ -255,6 +255,9 @@ int main(int argc, char **argv)
 	}
 #endif
 
+#if LL_DARWIN
+	EventTargetRef event_target = GetEventDispatcherTarget();
+#endif
 	while(!plugin->isDone())
 	{
 		timer.reset();
@@ -262,8 +265,12 @@ int main(int argc, char **argv)
 #if LL_DARWIN
 		{
 			// Some plugins (webkit at least) will want an event loop.  This qualifies.
-			EventRecord evt;
-			WaitNextEvent(0, &evt, 0, NULL);
+			EventRef event;
+			if(ReceiveNextEvent(0, 0, kEventDurationNoWait, true, &event) == noErr)
+			{
+				SendEventToEventTarget (event, event_target);
+				ReleaseEvent(event);
+			}
 			
 			// Check for a change in this process's frontmost window.
 			if(FrontWindow() != front_window)
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index 136fd2a9ac7e198daece1b5b39344164153f5fd8..5d1d57cbb28e26f9c5f0118cf63203594cdaf8fc 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -329,7 +329,7 @@ void LLAccordionCtrl::addCollapsibleCtrl(LLView* view)
 	LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(view);
 	if(!accordion_tab)
 		return;
-	if(std::find(getChildList()->begin(),getChildList()->end(),accordion_tab) == getChildList()->end())
+	if(std::find(beginChild(), endChild(), accordion_tab) == endChild())
 		addChild(accordion_tab);
 	mAccordionTabs.push_back(accordion_tab);
 
@@ -343,7 +343,7 @@ void LLAccordionCtrl::removeCollapsibleCtrl(LLView* view)
 	if(!accordion_tab)
 		return;
 
-	if(std::find(getChildList()->begin(),getChildList()->end(),accordion_tab) != getChildList()->end())
+	if(std::find(beginChild(), endChild(), accordion_tab) != endChild())
 		removeChild(accordion_tab);
 
 	for (std::vector<LLAccordionCtrlTab*>::iterator iter = mAccordionTabs.begin();
@@ -668,15 +668,23 @@ S32	LLAccordionCtrl::notifyParent(const LLSD& info)
 				LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
 				if(accordion_tab->hasFocus() && i>0)
 				{
+					bool prev_visible_tab_found = false;
 					while(i>0)
 					{
 						if(mAccordionTabs[--i]->getVisible())
+						{
+							prev_visible_tab_found = true;
 							break;
+						}
 					}
-					
-					accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
-					accordion_tab->notify(LLSD().with("action","select_last"));
-					return 1;
+
+					if (prev_visible_tab_found)
+					{
+						accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
+						accordion_tab->notify(LLSD().with("action","select_last"));
+						return 1;
+					}
+					break;
 				}
 			}
 			return 0;
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index d38923664235037953a8a0d4cfcefdf9388f0a6e..3c706ce90edbbdebefa60a470e3173b5a61bc7c9 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -554,7 +554,8 @@ S32	LLAccordionCtrlTab::notifyParent(const LLSD& info)
 			}
 			
 			//LLAccordionCtrl should rearrange accodion tab if one of accordion change its size
-			getParent()->notifyParent(info);
+			if (getParent()) // A parent may not be set if tabs are added dynamically.
+				getParent()->notifyParent(info);
 			return 1;
 		}
 		else if(str_action == "select_prev") 
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 990bf5cd22ed90f9109edd4e36035394cc49a229..e0b2244654c3f939d4f39407d1f9a2069e945ff8 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -744,12 +744,18 @@ LLRect LLFlatListView::getLastSelectedItemRect()
 
 void LLFlatListView::selectFirstItem	()
 {
+	// No items - no actions!
+	if (mItemPairs.empty()) return;
+
 	selectItemPair(mItemPairs.front(), true);
 	ensureSelectedVisible();
 }
 
 void LLFlatListView::selectLastItem		()
 {
+	// No items - no actions!
+	if (mItemPairs.empty()) return;
+
 	selectItemPair(mItemPairs.back(), true);
 	ensureSelectedVisible();
 }
diff --git a/indra/mac_updater/CMakeLists.txt b/indra/mac_updater/CMakeLists.txt
index 57d426aa24d9779d867bb821cc42759374519f11..44f98e5e18c3371a01c65c4ac090467563f6ce98 100644
--- a/indra/mac_updater/CMakeLists.txt
+++ b/indra/mac_updater/CMakeLists.txt
@@ -15,24 +15,10 @@ include_directories(
 
 set(mac_updater_SOURCE_FILES
     mac_updater.cpp
-    FSCopyObject.c
-    GenLinkedList.c
-    MoreFilesX.c
     )
 
 set(mac_updater_HEADER_FILES
     CMakeLists.txt
-
-    FSCopyObject.h
-    GenLinkedList.h
-    MoreFilesX.h
-    )
-
-set_source_files_properties(
-    FSCopyObject.c
-    MoreFilesX.c
-    PROPERTIES
-    COMPILE_FLAGS -Wno-deprecated-declarations
     )
 
 set_source_files_properties(${mac_updater_HEADER_FILES}
diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp
index d2a46d4338dc7dac6d12b3005ccd789fbeb5cc13..44f002aecf503805ff20d98dc5defff0cdcf644f 100644
--- a/indra/mac_updater/mac_updater.cpp
+++ b/indra/mac_updater/mac_updater.cpp
@@ -48,9 +48,6 @@
 
 #include <Carbon/Carbon.h>
 
-#include "MoreFilesX.h"
-#include "FSCopyObject.h"
-
 #include "llerrorcontrol.h"
 
 enum
@@ -547,20 +544,6 @@ bool isDirWritable(FSRef &dir)
 	return result;
 }
 
-static void utf8str_to_HFSUniStr255(HFSUniStr255 *dest, const char* src)
-{
-	llutf16string	utf16str = utf8str_to_utf16str(src);
-
-	dest->length = utf16str.size();
-	if(dest->length > 255)
-	{
-		// There's onl room for 255 chars in a HFSUniStr25..
-		// Truncate to avoid stack smaching or other badness.
-		dest->length = 255;
-	}
-	memcpy(dest->unicode, utf16str.data(), sizeof(UniChar)* dest->length);		/* Flawfinder: ignore */
-}
-
 static std::string HFSUniStr255_to_utf8str(const HFSUniStr255* src)
 {
 	llutf16string string16((U16*)&(src->unicode), src->length);
@@ -584,19 +567,12 @@ int restoreObject(const char* aside, const char* target, const char* path, const
 
 	llinfos << "Copying " << source << " to " << dest << llendl;
 
-	err = FSCopyObject(	
+	err = FSCopyObjectSync(
 			&sourceRef,
 			&destRef,
-			0,
-			kFSCatInfoNone,
-			kDupeActionReplace,
-			NULL,
-			false,
-			false,
 			NULL,
 			NULL,
-			NULL,
-			NULL);
+			kFSFileOperationOverwrite);
 
 	if(err != noErr) return false;
 	return true;
@@ -779,21 +755,21 @@ void *updatethreadproc(void*)
 			// so we need to go up 3 levels to get the path to the main application bundle.
 			if(err == noErr)
 			{
-				err = FSGetParentRef(&myBundle, &targetRef);
+				err = FSGetCatalogInfo(&myBundle, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
 			}
 			if(err == noErr)
 			{
-				err = FSGetParentRef(&targetRef, &targetRef);
+				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
 			}
 			if(err == noErr)
 			{
-				err = FSGetParentRef(&targetRef, &targetRef);
+				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
 			}
 			
 			// And once more to get the parent of the target
 			if(err == noErr)
 			{
-				err = FSGetParentRef(&targetRef, &targetParentRef);
+				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetParentRef);
 			}
 			
 			if(err == noErr)
@@ -1077,14 +1053,16 @@ void *updatethreadproc(void*)
 		char aside[MAX_PATH];		/* Flawfinder: ignore */
 		
 		// this will hold the name of the destination target
-		HFSUniStr255 appNameUniStr;
+		CFStringRef appNameRef;
 
 		if(replacingTarget)
 		{
 			// Get the name of the target we're replacing
+			HFSUniStr255 appNameUniStr;
 			err = FSGetCatalogInfo(&targetRef, 0, NULL, &appNameUniStr, NULL, NULL);
 			if(err != noErr)
 				throw 0;
+			appNameRef = FSCreateStringFromHFSUniStr(NULL, &appNameUniStr);
 			
 			// Move aside old version (into work directory)
 			err = FSMoveObject(&targetRef, &tempDirRef, &asideRef);
@@ -1099,7 +1077,7 @@ void *updatethreadproc(void*)
 			// Construct the name of the target based on the product name
 			char appName[MAX_PATH];		/* Flawfinder: ignore */
 			snprintf(appName, sizeof(appName), "%s.app", gProductName);		
-			utf8str_to_HFSUniStr255( &appNameUniStr, appName );
+			appNameRef = CFStringCreateWithCString(NULL, appName, kCFStringEncodingUTF8);
 		}
 		
 		sendProgress(0, 0, CFSTR("Copying files..."));
@@ -1107,19 +1085,12 @@ void *updatethreadproc(void*)
 		llinfos << "Starting copy..." << llendl;
 
 		// Copy the new version from the disk image to the target location.
-		err = FSCopyObject(	
+		err = FSCopyObjectSync(
 				&sourceRef,
 				&targetParentRef,
-				0,
-				kFSCatInfoNone,
-				kDupeActionStandard,
-				&appNameUniStr,
-				false,
-				false,
-				NULL,
-				NULL,
+				appNameRef,
 				&targetRef,
-				NULL);
+				kFSFileOperationDefaultOptions);
 		
 		// Grab the path for later use.
 		err = FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target));
@@ -1131,7 +1102,7 @@ void *updatethreadproc(void*)
 		if(err != noErr)
 		{
 			// Something went wrong during the copy.  Attempt to put the old version back and bail.
-			(void)FSDeleteObjects(&targetRef);
+			(void)FSDeleteObject(&targetRef);
 			if(replacingTarget)
 			{
 				(void)FSMoveObject(&asideRef, &targetParentRef, NULL);
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 8bcf680876dc4e8cc1d90fbb8e1436ae71b333f6..ddcaeb113d8785616504b1fac00666d491f3027c 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1226,7 +1226,10 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s
 	if ( distance > 1.f && heightDelta > (sqrtf(mAutoPilotStopDistance) + 1.f))
 	{
 		setFlying(TRUE);
-		mAutoPilotFlyOnStop = TRUE;
+		// Do not force flying for "Sit" behavior to prevent flying after pressing "Stand"
+		// from an object. See EXT-1655.
+		if ("Sit" != mAutoPilotBehaviorName)
+			mAutoPilotFlyOnStop = TRUE;
 	}
 
 	mAutoPilot = TRUE;
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index 80d9b143457412dcefa0a8f33302e2417865ab9a..44ef39fb7dbce6a2606204b65e1a82a570da2b9e 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -291,6 +291,7 @@ static OSStatus CarbonEventHandler(EventHandlerCallRef inHandlerCallRef,
 		if(os_result >= 0 && matching_psn)
 		{
 			sCrashReporterIsRunning = false;
+			QuitApplicationEventLoop();
 		}
     }
     return noErr;
@@ -326,7 +327,7 @@ void LLAppViewerMacOSX::handleCrashReporting(bool reportFreeze)
 			// *NOTE:Mani A better way - make a copy of the data that the crash reporter will send
 			// and let SL go about its business. This way makes the mac work like windows and linux
 			// and is the smallest patch for the issue. 
-			sCrashReporterIsRunning = true;
+			sCrashReporterIsRunning = false;
 			ProcessSerialNumber o_psn;
 
 			static EventHandlerRef sCarbonEventsRef = NULL;
@@ -356,15 +357,13 @@ void LLAppViewerMacOSX::handleCrashReporting(bool reportFreeze)
 			
 			if(os_result >= 0)
 			{	
-				EventRecord evt;
-				while(sCrashReporterIsRunning)
-				{
-					while(WaitNextEvent(osMask, &evt, 0, NULL))
-					{
-						// null op!?!
-					}
-				}
-			}	
+				sCrashReporterIsRunning = true;
+			}
+
+			while(sCrashReporterIsRunning)
+			{
+				RunApplicationEventLoop();
+			}
 
 			// Re-install the apps quit handler.
 			AEInstallEventHandler(kCoreEventClass, 
@@ -453,16 +452,17 @@ std::string LLAppViewerMacOSX::generateSerialNumber()
 static AudioDeviceID get_default_audio_output_device(void)
 {
 	AudioDeviceID device = 0;
-	UInt32 size;
-	OSStatus err;
-	
-	size = sizeof(device);
-	err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
+	UInt32 size = sizeof(device);
+	AudioObjectPropertyAddress device_address = { kAudioHardwarePropertyDefaultOutputDevice,
+												  kAudioObjectPropertyScopeGlobal,
+												  kAudioObjectPropertyElementMaster };
+
+	OSStatus err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &device_address, 0, NULL, &size, &device);
 	if(err != noErr)
 	{
 		LL_DEBUGS("SystemMute") << "Couldn't get default audio output device (0x" << std::hex << err << ")" << LL_ENDL;
 	}
-	
+
 	return device;
 }
 
@@ -470,11 +470,15 @@ static AudioDeviceID get_default_audio_output_device(void)
 void LLAppViewerMacOSX::setMasterSystemAudioMute(bool new_mute)
 {
 	AudioDeviceID device = get_default_audio_output_device();
-	
+
 	if(device != 0)
 	{
 		UInt32 mute = new_mute;
-		OSStatus err = AudioDeviceSetProperty(device, NULL, 0, false, kAudioDevicePropertyMute, sizeof(mute), &mute);
+		AudioObjectPropertyAddress device_address = { kAudioDevicePropertyMute,
+													  kAudioDevicePropertyScopeOutput,
+													  kAudioObjectPropertyElementMaster };
+
+		OSStatus err = AudioObjectSetPropertyData(device, &device_address, 0, NULL, sizeof(mute), &mute);
 		if(err != noErr)
 		{
 			LL_INFOS("SystemMute") << "Couldn't set audio mute property (0x" << std::hex << err << ")" << LL_ENDL;
@@ -487,13 +491,17 @@ bool LLAppViewerMacOSX::getMasterSystemAudioMute()
 {
 	// Assume the system isn't muted 
 	UInt32 mute = 0;
-	
+
 	AudioDeviceID device = get_default_audio_output_device();
-	
+
 	if(device != 0)
 	{
 		UInt32 size = sizeof(mute);
-		OSStatus err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyMute, &size, &mute);
+		AudioObjectPropertyAddress device_address = { kAudioDevicePropertyMute,
+													  kAudioDevicePropertyScopeOutput,
+													  kAudioObjectPropertyElementMaster };
+
+		OSStatus err = AudioObjectGetPropertyData(device, &device_address, 0, NULL, &size, &mute);
 		if(err != noErr)
 		{
 			LL_DEBUGS("SystemMute") << "Couldn't get audio mute property (0x" << std::hex << err << ")" << LL_ENDL;
diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp
index 9f54b86607e99c71236868d584ad41cb8c5f48c3..dca130c672996f010685abca88455f4e60f3bafd 100644
--- a/indra/newview/llinventoryitemslist.cpp
+++ b/indra/newview/llinventoryitemslist.cpp
@@ -2,6 +2,10 @@
  * @file llinventoryitemslist.cpp
  * @brief A list of inventory items represented by LLFlatListView.
  *
+ * Class LLInventoryItemsList implements a flat list of inventory items.
+ * Class LLPanelInventoryListItem displays inventory item as an element
+ * of LLInventoryItemsList.
+ *
  * $LicenseInfo:firstyear=2010&license=viewergpl$
  *
  * Copyright (c) 2010, Linden Research, Inc.
@@ -39,33 +43,31 @@
 #include "lliconctrl.h"
 
 #include "llinventoryfunctions.h"
+#include "llinventorymodel.h"
 #include "lltextutil.h"
 
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 
-LLPanelInventoryItem::LLPanelInventoryItem(LLAssetType::EType asset_type,
-										   LLInventoryType::EType inventory_type,
-										   U32 wearable_type,
-										   const std::string &item_name,
-										   const std::string &hl)
-:	 LLPanel()
-	,mItemName(item_name)
-	,mHighlightedText(hl)
-	,mIcon(NULL)
-	,mTitle(NULL)
+// static
+LLPanelInventoryListItem* LLPanelInventoryListItem::createItemPanel(const LLViewerInventoryItem* item)
 {
-	mItemIcon = get_item_icon(asset_type, inventory_type, wearable_type, FALSE);
-
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
+	if (item)
+	{
+		return new LLPanelInventoryListItem(item);
+	}
+	else
+	{
+		return NULL;
+	}
 }
 
-LLPanelInventoryItem::~LLPanelInventoryItem()
+LLPanelInventoryListItem::~LLPanelInventoryListItem()
 {}
 
 //virtual
-BOOL LLPanelInventoryItem::postBuild()
+BOOL LLPanelInventoryListItem::postBuild()
 {
 	mIcon = getChild<LLIconCtrl>("item_icon");
 	mTitle = getChild<LLTextBox>("item_name");
@@ -76,14 +78,14 @@ BOOL LLPanelInventoryItem::postBuild()
 }
 
 //virtual
-void LLPanelInventoryItem::setValue(const LLSD& value)
+void LLPanelInventoryListItem::setValue(const LLSD& value)
 {
 	if (!value.isMap()) return;
 	if (!value.has("selected")) return;
 	childSetVisible("selected_icon", value["selected"]);
 }
 
-void LLPanelInventoryItem::updateItem()
+void LLPanelInventoryListItem::updateItem()
 {
 	if (mItemIcon.notNull())
 		mIcon->setImage(mItemIcon);
@@ -95,28 +97,47 @@ void LLPanelInventoryItem::updateItem()
 		mHighlightedText);
 }
 
-void LLPanelInventoryItem::onMouseEnter(S32 x, S32 y, MASK mask)
+void LLPanelInventoryListItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", true);
 
 	LLPanel::onMouseEnter(x, y, mask);
 }
 
-void LLPanelInventoryItem::onMouseLeave(S32 x, S32 y, MASK mask)
+void LLPanelInventoryListItem::onMouseLeave(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", false);
 
 	LLPanel::onMouseLeave(x, y, mask);
 }
 
+LLPanelInventoryListItem::LLPanelInventoryListItem(const LLViewerInventoryItem* item)
+:	 LLPanel()
+	,mIcon(NULL)
+	,mTitle(NULL)
+{
+	mItemName = item->getName();
+	mItemIcon = get_item_icon(item->getType(), item->getInventoryType(), item->getFlags(), FALSE);
+
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 
-LLInventoryItemsList::LLInventoryItemsList(const LLFlatListView::Params& p)
+LLInventoryItemsList::Params::Params()
+{}
+
+LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p)
 :	LLFlatListView(p)
 ,	mNeedsRefresh(false)
-{}
+{
+	// TODO: mCommitOnSelectionChange is set to "false" in LLFlatListView
+	// but reset to true in all derived classes. This settings might need to
+	// be added to LLFlatListView::Params() and/or set to "true" by default.
+	setCommitOnSelectionChange(true);
+}
 
 // virtual
 LLInventoryItemsList::~LLInventoryItemsList()
@@ -196,10 +217,15 @@ void LLInventoryItemsList::computeDifference(
 
 void LLInventoryItemsList::addNewItem(LLViewerInventoryItem* item)
 {
-	llassert(item);
+	if (!item)
+	{
+		llwarns << "No inventory item. Couldn't create flat list item." << llendl;
+		llassert(!"No inventory item. Couldn't create flat list item.");
+	}
 
-	LLPanelInventoryItem *list_item = new LLPanelInventoryItem(item->getType(),
-		item->getInventoryType(), item->getFlags(), item->getName(), LLStringUtil::null);
+	LLPanelInventoryListItem *list_item = LLPanelInventoryListItem::createItemPanel(item);
+	if (!list_item)
+		return;
 
 	if (!addItem(list_item, item->getUUID()))
 	{
diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h
index 0ca4146867f2b79525f07856c3f5329a2bbf4b47..b496f4b9e94c74a24e16997154fa31bd010f4616 100644
--- a/indra/newview/llinventoryitemslist.h
+++ b/indra/newview/llinventoryitemslist.h
@@ -2,6 +2,10 @@
  * @file llinventoryitemslist.h
  * @brief A list of inventory items represented by LLFlatListView.
  *
+ * Class LLInventoryItemsList implements a flat list of inventory items.
+ * Class LLPanelInventoryListItem displays inventory item as an element
+ * of LLInventoryItemsList.
+ *
  * $LicenseInfo:firstyear=2010&license=viewergpl$
  *
  * Copyright (c) 2010, Linden Research, Inc.
@@ -32,28 +36,23 @@
 #ifndef LL_LLINVENTORYITEMSLIST_H
 #define LL_LLINVENTORYITEMSLIST_H
 
-#include "llpanel.h"
-
-#include "llassettype.h"
+#include "lldarray.h"
 
-#include "llinventorytype.h"
+#include "llpanel.h"
 
 // newview
 #include "llflatlistview.h"
-#include "llinventorymodel.h"
 
 class LLIconCtrl;
 class LLTextBox;
+class LLViewerInventoryItem;
 
-class LLPanelInventoryItem : public LLPanel
+class LLPanelInventoryListItem : public LLPanel
 {
 public:
-	LLPanelInventoryItem(LLAssetType::EType asset_type,
-						 LLInventoryType::EType inventory_type,
-						 U32 wearable_type,
-						 const std::string &item_name,
-						 const std::string &hl);
-	virtual ~LLPanelInventoryItem();
+	static LLPanelInventoryListItem* createItemPanel(const LLViewerInventoryItem* item);
+
+	virtual ~LLPanelInventoryListItem();
 
 	/*virtual*/ BOOL postBuild();
 	/*virtual*/ void setValue(const LLSD& value);
@@ -63,6 +62,9 @@ class LLPanelInventoryItem : public LLPanel
 	void onMouseEnter(S32 x, S32 y, MASK mask);
 	void onMouseLeave(S32 x, S32 y, MASK mask);
 
+protected:
+	LLPanelInventoryListItem(const LLViewerInventoryItem* item);
+
 private:
 	LLIconCtrl*		mIcon;
 	LLTextBox*		mTitle;
@@ -72,13 +74,17 @@ class LLPanelInventoryItem : public LLPanel
 	std::string		mHighlightedText;
 };
 
-
 class LLInventoryItemsList : public LLFlatListView
 {
 public:
+	struct Params : public LLInitParam::Block<Params, LLFlatListView::Params>
+	{
+		Params();
+	};
+
 	virtual ~LLInventoryItemsList();
 
-	void refreshList(const LLInventoryModel::item_array_t item_array);
+	void refreshList(const LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array);
 
 	/**
 	 * Let list know items need to be refreshed in next draw()
@@ -91,7 +97,7 @@ class LLInventoryItemsList : public LLFlatListView
 
 protected:
 	friend class LLUICtrlFactory;
-	LLInventoryItemsList(const LLFlatListView::Params& p);
+	LLInventoryItemsList(const LLInventoryItemsList::Params& p);
 
 	uuid_vec_t& getIDs() { return mIDs; }
 
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 03006243f9f8fde72c882095dc78e1f07e652ed5..214b5d317a530f6773fe545693ed972d136d7b91 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -658,11 +658,13 @@ void LLInventoryCategoriesObserver::changed(U32 mask)
 
 	for (category_map_t::iterator iter = mCategoryMap.begin();
 		 iter != mCategoryMap.end();
-		 iter++)
+		 ++iter)
 	{
-		// Inventory category version is used to find out if some changes
-		// to a category have been made.
-		S32 version = gInventory.getCategory((*iter).first)->getVersion();
+		LLViewerInventoryCategory* category = gInventory.getCategory((*iter).first);
+		if (!category)
+			continue;
+
+		S32 version = category->getVersion();
 		if (version != (*iter).second.mVersion)
 		{
 			// Update category version in map.
@@ -674,11 +676,27 @@ void LLInventoryCategoriesObserver::changed(U32 mask)
 
 void LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t cb)
 {
-	S32 version = gInventory.getCategory(cat_id)->getVersion();
+	S32 version;
+	LLViewerInventoryCategory* category = gInventory.getCategory(cat_id);
+	if (category)
+	{
+		// Inventory category version is used to find out if some changes
+		// to a category have been made.
+		version = category->getVersion();
+	}
+	else
+	{
+		// If category could not be retrieved it might mean that
+		// inventory is unusable at the moment so the category is
+		// stored with VERSION_UNKNOWN and it may be updated later.
+		version = LLViewerInventoryCategory::VERSION_UNKNOWN;
+	}
+
+	version = category->getVersion();
 	mCategoryMap.insert(category_map_value_t(cat_id, LLCategoryData(cb, version)));
 }
 
 void LLInventoryCategoriesObserver::removeCategory(const LLUUID& cat_id)
 {
-	mCategoryMap.erase(mCategoryMap.find(cat_id));
+	mCategoryMap.erase(cat_id);
 }
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index 3d7f3233acb2a55806010a35aad96c0774247bf5..eb53d295b2b3ff22d7cbc3b99135258f1c3354ce 100644
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -46,10 +46,6 @@ class LLImageRaw;
 class LLTextBox;
 class LLViewerTexture;
 
-const F32 MAP_SCALE_MIN = 64.f;
-const F32 MAP_SCALE_MID = 172.f;
-const F32 MAP_SCALE_MAX = 512.f;
-
 class LLNetMap : public LLUICtrl
 {
 public:
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index cce4f940288100d3d0ba8c1d9a17935afe43b04f..1c627d452fb6b4e26fa5278a9c20606f942d6004 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -33,6 +33,9 @@
 
 #include "lloutfitslist.h"
 
+// llcommon
+#include "llcommonutils.h"
+
 #include "llaccordionctrl.h"
 #include "llaccordionctrltab.h"
 #include "llinventoryfunctions.h"
@@ -45,7 +48,12 @@ LLOutfitsList::LLOutfitsList()
 	:	LLPanel()
 	,	mAccordion(NULL)
 	,	mListCommands(NULL)
-{}
+{
+	mCategoriesObserver = new LLInventoryCategoriesObserver();
+	gInventory.addObserver(mCategoriesObserver);
+
+	gInventory.addObserver(this);
+}
 
 LLOutfitsList::~LLOutfitsList()
 {
@@ -65,11 +73,6 @@ BOOL LLOutfitsList::postBuild()
 {
 	mAccordion = getChild<LLAccordionCtrl>("outfits_accordion");
 
-	mCategoriesObserver = new LLInventoryCategoriesObserver();
-	gInventory.addObserver(mCategoriesObserver);
-
-	gInventory.addObserver(this);
-
 	return TRUE;
 }
 
@@ -79,15 +82,15 @@ void LLOutfitsList::changed(U32 mask)
 	if (!gInventory.isInventoryUsable())
 		return;
 
-	// Start observing changes in "My Outfits" category.
 	const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
-	mCategoriesObserver->addCategory(outfits,
-			boost::bind(&LLOutfitsList::refreshList, this, outfits));
-
 	LLViewerInventoryCategory* category = gInventory.getCategory(outfits);
 	if (!category)
 		return;
 
+	// Start observing changes in "My Outfits" category.
+	mCategoriesObserver->addCategory(outfits,
+			boost::bind(&LLOutfitsList::refreshList, this, outfits));
+
 	// Fetch "My Outfits" contents and refresh the list to display
 	// initially fetched items. If not all items are fetched now
 	// the observer will refresh the list as soon as the new items
@@ -121,7 +124,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 	// Creating a vector of newly collected sub-categories UUIDs.
 	for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
 		 iter != cat_array.end();
-		 iter++)
+		 ++iter)
 	{
 		vnew.push_back((*iter)->getUUID());
 	}
@@ -131,35 +134,21 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 	// Creating a vector of currently displayed sub-categories UUIDs.
 	for (outfits_map_t::const_iterator iter = mOutfitsMap.begin();
 		 iter != mOutfitsMap.end();
-		 iter++)
+		 ++iter)
 	{
 		vcur.push_back((*iter).first);
 	}
 
-	// Sorting both vectors to compare.
-	std::sort(vcur.begin(), vcur.end());
-	std::sort(vnew.begin(), vnew.end());
-
 	uuid_vec_t vadded;
 	uuid_vec_t vremoved;
 
-	uuid_vec_t::iterator it;
-	size_t maxsize = llmax(vcur.size(), vnew.size());
-	vadded.resize(maxsize);
-	vremoved.resize(maxsize);
-
-	// what to remove
-	it = set_difference(vcur.begin(), vcur.end(), vnew.begin(), vnew.end(), vremoved.begin());
-	vremoved.erase(it, vremoved.end());
-
-	// what to add
-	it = set_difference(vnew.begin(), vnew.end(), vcur.begin(), vcur.end(), vadded.begin());
-	vadded.erase(it, vadded.end());
+	// Create added and removed items vectors.
+	LLCommonUtils::computeDifference(vnew, vcur, vadded, vremoved);
 
 	// Handle added tabs.
 	for (uuid_vec_t::const_iterator iter = vadded.begin();
 		 iter != vadded.end();
-		 iter++)
+		 ++iter)
 	{
 		const LLUUID cat_id = (*iter);
 		LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
@@ -175,7 +164,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 		LLAccordionCtrlTab* tab = LLUICtrlFactory::defaultBuilder<LLAccordionCtrlTab>(accordionXmlNode, NULL, NULL);
 
 		// *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated.
-		tab->setDisplayChildren(false); 
+		tab->setDisplayChildren(false);
 		mAccordion->addCollapsibleCtrl(tab);
 
 		// Map the new tab with outfit category UUID.
@@ -185,6 +174,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 		LLWearableItemsList* list  = tab->getChild<LLWearableItemsList>("wearable_items_list");
 		mCategoriesObserver->addCategory(cat_id, boost::bind(&LLWearableItemsList::updateList, list, cat_id));
 
+		// Setting drop down callback to monitor currently selected outfit.
+		tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::onTabExpandedCollapsed, this, list));
+
 		// Fetch the new outfit contents.
 		cat->fetch();
 
@@ -252,6 +244,14 @@ void LLOutfitsList::updateOutfitTab(const LLUUID& category_id)
 	}
 }
 
+void LLOutfitsList::onTabExpandedCollapsed(LLWearableItemsList* list)
+{
+	if (!list)
+		return;
+
+	// TODO: Add outfit selection handling.
+}
+
 void LLOutfitsList::setFilterSubString(const std::string& string)
 {
 	mFilterSubString = string;
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index f1756ce873b1e7339743465a9d7e947c80786fd8..de14c1541580a31cb29dba9662730b04b29a65b0 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -41,6 +41,17 @@ class LLAccordionCtrl;
 class LLAccordionCtrlTab;
 class LLWearableItemsList;
 
+/**
+ * @class LLOutfitsList
+ *
+ * A list of agents's outfits from "My Outfits" inventory category
+ * which displays each outfit in an accordion tab with a flat list
+ * of items inside it.
+ * Uses LLInventoryCategoriesObserver to monitor changes to "My Outfits"
+ * inventory category and refresh the outfits listed in it.
+ * This class is derived from LLInventoryObserver to know when inventory
+ * becomes usable and it is safe to request data from inventory model.
+ */
 class LLOutfitsList : public LLPanel, public LLInventoryObserver
 {
 public:
@@ -56,6 +67,8 @@ class LLOutfitsList : public LLPanel, public LLInventoryObserver
 	// Update tab displaying outfit identified by category_id.
 	void updateOutfitTab(const LLUUID& category_id);
 
+	void onTabExpandedCollapsed(LLWearableItemsList* list);
+
 	void setFilterSubString(const std::string& string);
 
 private:
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index a5adb11c537fac59c94fd43766807c0a9d3768af..c883087cf21885f967a42d0cb7c0d4a05ff10aa0 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1564,10 +1564,6 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
 		// larger mips are corrupted
 		priority = -3.0f;
 	}
-	else if (cur_discard <= mDesiredDiscardLevel)
-	{
-		priority = -4.0f;
-	}
 	else
 	{
 		// priority range = 100,000 - 500,000
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 7473adda1f7743d214599b7111fc6b061482dbd7..63f060b58a4d610b4d175eead5136777521aed04 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -2238,7 +2238,6 @@ LLGLuint LLVOAvatarSelf::getScratchTexName( LLGLenum format, S32& components, U3
 	{
 		case GL_LUMINANCE:			components = 1; internal_format = GL_LUMINANCE8;		break;
 		case GL_ALPHA:				components = 1; internal_format = GL_ALPHA8;			break;
-		case GL_COLOR_INDEX:		components = 1; internal_format = GL_COLOR_INDEX8_EXT;	break;
 		case GL_LUMINANCE_ALPHA:	components = 2; internal_format = GL_LUMINANCE8_ALPHA8;	break;
 		case GL_RGB:				components = 3; internal_format = GL_RGB8;				break;
 		case GL_RGBA:				components = 4; internal_format = GL_RGBA8;				break;
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index ff309cbbc3333580edc1767353f8aeb11fe1516a..3d110dcc786c9b456a049d6c7243f4a1b84a646a 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -62,7 +62,10 @@ bool LLFindOutfitItems::operator()(LLInventoryCategory* cat,
 
 static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_items_list");
 
-LLWearableItemsList::LLWearableItemsList(const LLFlatListView::Params& p)
+LLWearableItemsList::Params::Params()
+{}
+
+LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
 :	LLInventoryItemsList(p)
 {}
 
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index e3b011912ba109a628e9a1e57bc7960d1da7e7a2..e7ccba8e6c151b1ee64f8adebcfce0fe94341b2a 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -34,23 +34,32 @@
 
 #include "llpanel.h"
 
-#include "llassettype.h"
-
-#include "llinventorytype.h"
-
 // newview
 #include "llinventoryitemslist.h"
 
+/**
+ * @class LLWearableItemsList
+ *
+ * A flat list of wearable inventory items.
+ * Collects all items that can be a part of an outfit from
+ * an inventory category specified by UUID and displays them
+ * as a flat list.
+ */
 class LLWearableItemsList : public LLInventoryItemsList
 {
 public:
+	struct Params : public LLInitParam::Block<Params, LLInventoryItemsList::Params>
+	{
+		Params();
+	};
+
 	virtual ~LLWearableItemsList();
 
 	void updateList(const LLUUID& category_id);
 
 protected:
 	friend class LLUICtrlFactory;
-	LLWearableItemsList(const LLFlatListView::Params& p);
+	LLWearableItemsList(const LLWearableItemsList::Params& p);
 };
 
 #endif //LL_LLWEARABLEITEMSLIST_H
diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
index d00b1bfb7b8273e86b839ab32967728f0aa1d129..b3150bb98bd789ac7ad98ec0eaa933b737a7f64c 100644
--- a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
+++ b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <!-- *NOTE: mantipov: this xml is intended to be used inside panel_outfits_list.xml for each outfit folder-->
-<!-- All accordion tabs in the My Appearance/My Outfits panel will be created from this one at runtume-->
+<!-- All accordion tabs in the My Appearance/My Outfits panel will be created from this one at runtime-->
 <accordion_tab
  display_children="false"
  follows="all"
- height="40"
+ height="45"
  layout="topleft"
  name="Mockup Tab"
  title="Mockup Tab"
diff --git a/indra/newview/skins/default/xui/fr/menu_group_plus.xml b/indra/newview/skins/default/xui/fr/menu_group_plus.xml
index f5882261b08222102278416b88c6710da5fc2e62..0db5afedc795c54c793826fbd8752defc25c5785 100644
--- a/indra/newview/skins/default/xui/fr/menu_group_plus.xml
+++ b/indra/newview/skins/default/xui/fr/menu_group_plus.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="menu_group_plus">
-	<menu_item_call label="Rejoignez des groupes..." name="item_join"/>
+	<menu_item_call label="Rejoindre des groupes..." name="item_join"/>
 	<menu_item_call label="Nouveau groupe..." name="item_new"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml
index 91bccfd699bc29f25cd783a602cca22591b9d3bf..4cfdfd2614b8fc73c1bf190a437dd03c5d9897ce 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml
@@ -7,7 +7,7 @@
 	<menu_item_call label="Réinitialiser les filtres" name="reset_filters"/>
 	<menu_item_call label="Fermer tous les dossiers" name="close_folders"/>
 	<menu_item_call label="Vider la corbeille" name="empty_trash"/>
-	<menu_item_call label="Vider les Objets trouvés" name="empty_lostnfound"/>
+	<menu_item_call label="Vider les objets trouvés" name="empty_lostnfound"/>
 	<menu_item_call label="Enregistrer la texture sous" name="Save Texture As"/>
 	<menu_item_call label="Trouver l&apos;original" name="Find Original"/>
 	<menu_item_call label="Trouver tous les liens" name="Find All Links"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
index 1a4450cccc9b48d68bbba8bc3c431da860665186..6cd9db2a5ed4ae33ae6bad98c6fc42cf307bbf59 100644
--- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
@@ -23,7 +23,7 @@
 			<menu_item_call label="Réinitialiser les filtres" name="Reset Current"/>
 			<menu_item_call label="Fermer tous les dossiers" name="Close All Folders"/>
 			<menu_item_call label="Vider la corbeille" name="Empty Trash"/>
-			<menu_item_call label="Vider les Objets trouvés" name="Empty Lost And Found"/>
+			<menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/>
 		</menu>
 		<menu label="Créer" name="Create">
 			<menu_item_call label="Nouveau dossier" name="New Folder"/>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 61659d386b3bbfb6ca6f7ff070e985380ea6d39d..6d81df5cdbd545535c6a8e425971d4f88398b748 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -2085,7 +2085,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Large
 	</string>
 	<string name="Brow Size">
-		Taille
+		Taille du front
 	</string>
 	<string name="Bug Eyes">
 		Yeux globuleux
@@ -2235,7 +2235,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Extrémités
 	</string>
 	<string name="Egg Head">
-		Forme de la tête
+		Proéminence
 	</string>
 	<string name="Eye Bags">
 		Cernes
@@ -2559,7 +2559,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Fente labiale
 	</string>
 	<string name="Lip Cleft Depth">
-		Fente labiale
+		Prof. fente labiale
 	</string>
 	<string name="Lip Fullness">
 		Volume des lèvres
@@ -2643,7 +2643,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Abaisser
 	</string>
 	<string name="Lower Bridge">
-		Arête plus basse
+		Arête inférieure
 	</string>
 	<string name="Lower Cheeks">
 		Joue inférieure
@@ -2817,10 +2817,10 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Épaisseur du nez
 	</string>
 	<string name="Nose Tip Angle">
-		Bout du nez
+		Angle bout du nez
 	</string>
 	<string name="Nose Tip Shape">
-		Bout du nez
+		Forme bout du nez
 	</string>
 	<string name="Nose Width">
 		Largeur du nez
@@ -2946,7 +2946,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Plus
 	</string>
 	<string name="Puffy Eyelids">
-		Cernes
+		Paup. gonflées
 	</string>
 	<string name="Rainbow Color">
 		Couleur arc en ciel
@@ -3237,7 +3237,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Arête supérieure
 	</string>
 	<string name="Upper Cheeks">
-		Pommette
+		Joue supérieure
 	</string>
 	<string name="Upper Chin Cleft">
 		Menton supérieur