diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 2433c14315f3a4f5405c913ba58a1e13c899916b..f22b49f30feb81f16a4a4c3dbd6a879de22ede0d 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -50,14 +50,21 @@ LLFlatListView::Params::Params()
 	allow_select("allow_select"),
 	multi_select("multi_select"),
 	keep_one_selected("keep_one_selected"),
+	keep_selection_visible_on_reshape("keep_selection_visible_on_reshape",false),
 	no_items_text("no_items_text")
 {};
 
 void LLFlatListView::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */)
 {
+	S32 delta = height - getRect().getHeight();
 	LLScrollContainer::reshape(width, height, called_from_parent);
 	setItemsNoScrollWidth(width);
 	rearrangeItems();
+	
+	if(delta!= 0 && mKeepSelectionVisibleOnReshape)
+	{
+		ensureSelectedVisible();
+	}
 }
 
 const LLRect& LLFlatListView::getItemsRect() const
@@ -380,6 +387,7 @@ LLFlatListView::LLFlatListView(const LLFlatListView::Params& p)
   , mPrevNotifyParentRect(LLRect())
   , mNoItemsCommentTextbox(NULL)
   , mIsConsecutiveSelection(false)
+  , mKeepSelectionVisibleOnReshape(p.keep_selection_visible_on_reshape)
 {
 	mBorderThickness = getBorderWidth();
 
@@ -1218,6 +1226,8 @@ LLFlatListViewEx::LLFlatListViewEx(const Params& p)
 :	LLFlatListView(p)
 , mNoFilteredItemsMsg(p.no_filtered_items_msg)
 , mNoItemsMsg(p.no_items_msg)
+, mForceShowingUnmatchedItems(false)
+, mLastFilterSucceded(false)
 {
 
 }
@@ -1242,6 +1252,16 @@ void LLFlatListViewEx::updateNoItemsMessage(const std::string& filter_string)
 
 }
 
+bool LLFlatListViewEx::getForceShowingUnmatchedItems()
+{
+	return mForceShowingUnmatchedItems;
+}
+
+void LLFlatListViewEx::setForceShowingUnmatchedItems(bool show)
+{
+	mForceShowingUnmatchedItems = show;
+}
+
 void LLFlatListViewEx::setFilterSubString(const std::string& filter_str)
 {
 	if (0 != LLStringUtil::compareInsensitive(filter_str, mFilterSubString))
@@ -1265,6 +1285,7 @@ void LLFlatListViewEx::filterItems()
 	item_panel_list_t items;
 	getItems(items);
 
+	mLastFilterSucceded = false;
 	for (item_panel_list_t::iterator
 			 iter = items.begin(),
 			 iter_end = items.end();
@@ -1275,13 +1296,14 @@ void LLFlatListViewEx::filterItems()
 		// i.e. we don't hide items that don't support 'match_filter' action, separators etc.
 		if (0 == pItem->notify(action))
 		{
+			mLastFilterSucceded = true;
 			pItem->setVisible(true);
 		}
 		else
 		{
 			// TODO: implement (re)storing of current selection.
 			selectItem(pItem, false);
-			pItem->setVisible(false);
+			pItem->setVisible(mForceShowingUnmatchedItems);
 		}
 	}
 
@@ -1289,4 +1311,9 @@ void LLFlatListViewEx::filterItems()
 	notifyParentItemsRectChanged();
 }
 
+bool LLFlatListViewEx::wasLasFilterSuccessfull()
+{
+	return mLastFilterSucceded;
+}
+
 //EOF
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index f4e0426f15913ce01e4327ea1b626770cf16d735..caeddfc179104291f9602d93b6a3d7ffce51a738 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -105,6 +105,9 @@ class LLFlatListView : public LLScrollContainer, public LLEditMenuHandler
 		/** don't allow to deselect all selected items (for mouse events on items only) */
 		Optional<bool> keep_one_selected;
 
+		/** try to keep selection visible after reshape */
+		Optional<bool> keep_selection_visible_on_reshape;
+
 		/** padding between items */
 		Optional<U32> item_pad; 
 
@@ -412,6 +415,8 @@ class LLFlatListView : public LLScrollContainer, public LLEditMenuHandler
 
 	bool mIsConsecutiveSelection;
 
+	bool mKeepSelectionVisibleOnReshape;
+
 	/** All pairs of the list */
 	pairs_list_t mItemPairs;
 
@@ -465,6 +470,10 @@ class LLFlatListViewEx : public LLFlatListView
 	void setNoItemsMsg(const std::string& msg) { mNoItemsMsg = msg; }
 	void setNoFilteredItemsMsg(const std::string& msg) { mNoFilteredItemsMsg = msg; }
 
+	bool getForceShowingUnmatchedItems();
+
+	void setForceShowingUnmatchedItems(bool show);
+
 	/**
 	 * Sets up new filter string and filters the list.
 	 */
@@ -476,6 +485,11 @@ class LLFlatListViewEx : public LLFlatListView
 	 */
 	void filterItems();
 
+	/**
+	 * Returns true if last call of filterItems() found at least one matching item
+	 */
+	bool wasLasFilterSuccessfull();
+
 protected:
 	LLFlatListViewEx(const Params& p);
 
@@ -491,6 +505,14 @@ class LLFlatListViewEx : public LLFlatListView
 	std::string mNoFilteredItemsMsg;
 	std::string mNoItemsMsg;
 	std::string	mFilterSubString;
+	/**
+	 * Show list items that don't match current filter
+	 */
+	bool mForceShowingUnmatchedItems;
+	/**
+	 * True if last call of filterItems() found at least one matching item
+	 */
+	bool mLastFilterSucceded;
 };
 
 #endif
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c1b2d680beb3752f89133a350f3995b9a20d7499..ce42cb60381dbc4d524c005ba294171ad1e29fb4 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -363,6 +363,7 @@ set(viewer_SOURCE_FILES
     llpaneltopinfobar.cpp
     llpanelvolume.cpp
     llpanelvolumepulldown.cpp
+    llpanelwearing.cpp
     llparcelselection.cpp
     llparticipantlist.cpp
     llpatchvertexarray.cpp
@@ -830,6 +831,7 @@ set(viewer_HEADER_FILES
     lloutfitslist.h
     lloutfitobserver.h
     lloutputmonitorctrl.h
+    llpanelappearancetab.h
     llpanelavatar.h
     llpanelavatartag.h
     llpanelblockedlist.h
@@ -883,6 +885,7 @@ set(viewer_HEADER_FILES
     llpaneltopinfobar.h
     llpanelvolume.h
     llpanelvolumepulldown.h
+    llpanelwearing.h
     llparcelselection.h
     llparticipantlist.h
     llpatchvertexarray.h
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 9cf0a659c1ce344f758a729bc0424ab211fcb924..e1a01624410afe8d7f0eb97395e027093411315e 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -95,6 +95,8 @@ const F32 OBJECT_MIN_ZOOM = 0.02f;
 const F32 APPEARANCE_MIN_ZOOM = 0.39f;
 const F32 APPEARANCE_MAX_ZOOM = 8.f;
 
+const F32 CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST = 3.5f;
+
 const F32 GROUND_TO_AIR_CAMERA_TRANSITION_TIME = 0.5f;
 const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f;
 
@@ -156,7 +158,6 @@ LLAgentCamera::LLAgentCamera() :
 	mFocusObjectOffset(),
 	mFocusDotRadius( 0.1f ),			// meters
 	mTrackFocusObject(TRUE),
-	mUIOffset(0.f),
 
 	mAtKey(0), // Either 1, 0, or -1... indicates that movement-key is pressed
 	mWalkKey(0), // like AtKey, but causes less forward thrust
@@ -1407,13 +1408,6 @@ void LLAgentCamera::updateCamera()
 
 //	llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl;
 
-	F32 ui_offset = 0.f;
-	if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) 
-	{
-		ui_offset = calcCustomizeAvatarUIOffset( camera_pos_global );
-	}
-
-
 	LLVector3 focus_agent = gAgent.getPosAgentFromGlobal(mFocusGlobal);
 	
 	mCameraPositionAgent = gAgent.getPosAgentFromGlobal(camera_pos_global);
@@ -1424,9 +1418,6 @@ void LLAgentCamera::updateCamera()
 	LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent);
 	//LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent);
 	//end Ventrella
-
-	//RN: translate UI offset after camera is oriented properly
-	LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset);
 	
 	// Change FOV
 	LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor));
@@ -1531,18 +1522,6 @@ void LLAgentCamera::validateFocusObject()
 	}
 }
 
-//-----------------------------------------------------------------------------
-// calcCustomizeAvatarUIOffset()
-//-----------------------------------------------------------------------------
-F32 LLAgentCamera::calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global)
-{
-	F32 ui_offset = 0.f;
-
-	F32 range = (F32)dist_vec(camera_pos_global, getFocusGlobal());
-	mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f));
-	return mUIOffset * range;
-}
-
 //-----------------------------------------------------------------------------
 // calcFocusPositionTargetGlobal()
 //-----------------------------------------------------------------------------
@@ -2332,14 +2311,24 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
 		LLVOAvatarSelf::onCustomizeStart();
 	}
 
+
+	// default focus point for customize avatar
+	LLVector3 focus_target;
+	if (isAgentAvatarValid())
+	{
+		focus_target = gAgentAvatarp->mHeadp->getWorldPosition();
+	}
+	else
+	{
+		focus_target = gAgent.getPositionAgent();
+	}
+
 	if (isAgentAvatarValid())
 	{
 		if(avatar_animate)
 		{	
-			// slamming the avatar's axis to the camera so that when the rotation
-			// completes it correctly points to the front of the avatar
 			// Remove any pitch or rotation from the avatar
-			LLVector3 at = LLViewerCamera::getInstance()->getAtAxis();
+			LLVector3 at = gAgent.getAtAxis();
 			at.mV[VZ] = 0.f;
 			at.normalize();
 			gAgent.resetAxes(at);
@@ -2351,17 +2340,25 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
 
 			if (turn_motion)
 			{
-				mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP;
+				setAnimationDuration(turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP);
 
 			}
 			else
 			{
-				mAnimationDuration = gSavedSettings.getF32("ZoomTime");
+				setAnimationDuration(gSavedSettings.getF32("ZoomTime"));
 			}
 		}
 
-		// this is what sets the avatar as the mFocusTargetGlobal
-		setFocusGlobal(LLVector3d::zero);
+		LLVector3 agent_at = gAgent.getAtAxis();
+		agent_at.mV[VZ] = 0.f;
+		agent_at.normalize();
+
+		LLVector3d camera_offset(agent_at * -1.0);
+		// push camera up and out from avatar
+		camera_offset.mdV[VZ] = 0.1f; 
+		camera_offset *= CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST;
+		LLVector3d focus_target_global = gAgent.getPosGlobalFromAgent(focus_target);
+		setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID());
 		
 		gAgentAvatarp->updateMeshTextures();
 	}
@@ -2391,6 +2388,20 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
 // Focus point management
 //
 
+void LLAgentCamera::setAnimationDuration(F32 duration)
+{ 
+	if (mCameraAnimating)
+	{
+		// do not cut any existing camera animation short
+		F32 animation_left = llmax(0.f, mAnimationDuration - mAnimationTimer.getElapsedTimeF32());
+		mAnimationDuration = llmax(duration, animation_left);
+	}
+	else
+	{
+		mAnimationDuration = duration; 
+	}
+}
+
 //-----------------------------------------------------------------------------
 // startCameraAnimation()
 //-----------------------------------------------------------------------------
@@ -2398,9 +2409,9 @@ void LLAgentCamera::startCameraAnimation()
 {
 	mAnimationCameraStartGlobal = getCameraPositionGlobal();
 	mAnimationFocusStartGlobal = mFocusGlobal;
+	setAnimationDuration(gSavedSettings.getF32("ZoomTime"));
 	mAnimationTimer.reset();
 	mCameraAnimating = TRUE;
-	mAnimationDuration = gSavedSettings.getF32("ZoomTime");
 }
 
 //-----------------------------------------------------------------------------
@@ -2546,12 +2557,6 @@ void LLAgentCamera::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, con
 	if (focus_delta_squared > ANIM_EPSILON_SQUARED)
 	{
 		startCameraAnimation();
-
-		if (CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode) 
-		{
-			// Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize.
-			mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal ));
-		}
 	}
 	
 	//LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) );
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
index 7afb5c0ed9763066ffcf5b4914021a7ef69f359e..3b8f88733a74a80ff51db6e4a5b91d0a551e9272 100644
--- a/indra/newview/llagentcamera.h
+++ b/indra/newview/llagentcamera.h
@@ -137,7 +137,6 @@ class LLAgentCamera
 	F32				getCameraMinOffGround(); 		// Minimum height off ground for this mode, meters
 	void			setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; }
 	BOOL			calcCameraMinDistance(F32 &obj_min_distance);
-	F32				calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global);
 	F32				getCurrentCameraBuildOffset() 	{ return (F32)mCameraFocusOffset.length(); }
 	void			clearCameraLag() { mCameraLag.clearVec(); }
 private:
@@ -184,7 +183,7 @@ class LLAgentCamera
 public:
 	void			setCameraAnimating(BOOL b)			{ mCameraAnimating = b; }
 	BOOL			getCameraAnimating()				{ return mCameraAnimating; }
-	void			setAnimationDuration(F32 seconds) 	{ mAnimationDuration = seconds; }
+	void			setAnimationDuration(F32 seconds);
 	void			startCameraAnimation();
 	void			stopCameraAnimation();
 private:
@@ -225,7 +224,6 @@ class LLAgentCamera
 	LLVector3		mFocusObjectOffset;
 	F32				mFocusDotRadius; 				// Meters
 	BOOL			mTrackFocusObject;
-	F32				mUIOffset;	
 	
 	//--------------------------------------------------------------------
 	// Lookat / Pointat
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 5728256dbaab9c30026444df81d1970c3b9130d4..017fcf6e2b5be40275e77e89514e8ffc3b992727 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -48,7 +48,6 @@
 #include "llmd5.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
-#include "llpaneloutfitsinventory.h"
 #include "llsidepanelappearance.h"
 #include "llsidetray.h"
 #include "lltexlayer.h"
@@ -1232,45 +1231,6 @@ void LLAgentWearables::createStandardWearablesAllDone()
 	gAgentAvatarp->onFirstTEMessageReceived();
 }
 
-
-class LLShowCreatedOutfit: public LLInventoryCallback
-{
-public:
-	LLShowCreatedOutfit(LLUUID& folder_id):
-		mFolderID(folder_id)
-	{
-	}
-
-	virtual ~LLShowCreatedOutfit()
-	{
-		LLSD key;
-		LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
-		LLPanelOutfitsInventory *outfit_panel =
-			dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory"));
-		// TODO: add handling "My Outfits" tab.
-		if (outfit_panel && outfit_panel->isCOFPanelActive())
-		{
-			outfit_panel->getRootFolder()->clearSelection();
-			outfit_panel->getRootFolder()->setSelectionByID(mFolderID, TRUE);
-		}
-		LLAccordionCtrlTab* tab_outfits = outfit_panel ? outfit_panel->findChild<LLAccordionCtrlTab>("tab_outfits") : 0;
-		if (tab_outfits && !tab_outfits->getDisplayChildren())
-		{
-			tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren());
-		}
-
-		LLAppearanceMgr::instance().updateIsDirty();
-		LLAppearanceMgr::instance().updatePanelOutfitName("");
-	}
-	
-	virtual void fire(const LLUUID&)
-	{
-	}
-	
-private:
-	LLUUID mFolderID;
-};
-
 void LLAgentWearables::makeNewOutfitDone(S32 type, U32 index)
 {
 	LLUUID first_item_id = getWearableItemID((LLWearableType::EType)type, index);
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 3947be49bb51a58e878f775fee07d9234cf7229d..ce022ac840710fc0b945d73eeaaf00d307e13727 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -45,7 +45,7 @@
 #include "llinventoryobserver.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
-#include "llpaneloutfitsinventory.h"
+#include "lloutfitslist.h"
 #include "llselectmgr.h"
 #include "llsidepanelappearance.h"
 #include "llsidetray.h"
@@ -935,7 +935,9 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
 	// That means subscribers will be notified that loading is done after first item in a batch is worn.
 	// (loading indicator disappears for example before all selected items are worn)
 	// Have not fix this issue for 2.1 because of stability reason. EXT-7777.
-	gAgentWearables.notifyLoadingStarted();
+
+	// Disabled for now because it is *not* acceptable to call updateAppearanceFromCOF() multiple times
+//	gAgentWearables.notifyLoadingStarted();
 
 	LLViewerInventoryItem* item_to_wear = gInventory.getItem(item_id_to_wear);
 	if (!item_to_wear) return false;
@@ -1697,9 +1699,10 @@ void LLAppearanceMgr::getUserDescendents(const LLUUID& category,
 
 void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append)
 {
-	gAgentWearables.notifyLoadingStarted();
 	if(!category) return;
 
+	gAgentWearables.notifyLoadingStarted();
+
 	llinfos << "wearInventoryCategory( " << category->getName()
 			 << " )" << llendl;
 
@@ -2305,18 +2308,11 @@ class LLShowCreatedOutfit: public LLInventoryCallback
 		{
 			LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
 		}
-		LLPanelOutfitsInventory *outfit_panel =
-			dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory"));
-		if (outfit_panel)
-		{
-			outfit_panel->getRootFolder()->clearSelection();
-			outfit_panel->getRootFolder()->setSelectionByID(mFolderID, TRUE);
-		}
-		
-		LLAccordionCtrlTab* tab_outfits = outfit_panel ? outfit_panel->findChild<LLAccordionCtrlTab>("tab_outfits") : 0;
-		if (tab_outfits && !tab_outfits->getDisplayChildren())
+		LLOutfitsList *outfits_list =
+			dynamic_cast<LLOutfitsList*>(LLSideTray::getInstance()->getPanel("outfitslist_tab"));
+		if (outfits_list)
 		{
-			tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren());
+			outfits_list->setSelectedOutfitByUUID(mFolderID);
 		}
 
 		LLAppearanceMgr::getInstance()->updateIsDirty();
@@ -2546,7 +2542,8 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id)
 	   {
 		   // we have to pass do_update = true to call LLAppearanceMgr::updateAppearanceFromCOF.
 		   // it will trigger gAgentWariables.notifyLoadingFinished()
-		   LLAppearanceMgr::addCOFItemLink(item_id, true);  // Add COF link for item.
+		   // But it is not acceptable solution. See EXT-7777
+		   LLAppearanceMgr::addCOFItemLink(item_id, false);  // Add COF link for item.
 	   }
 	   else
 	   {
@@ -2576,7 +2573,7 @@ void LLAppearanceMgr::linkRegisteredAttachments()
 		 ++it)
 	{
 		LLUUID item_id = *it;
-		addCOFItemLink(item_id, true);
+		addCOFItemLink(item_id, false);
 	}
 	mRegisteredAttachments.clear();
 }
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index ab4ff1bcfc847697a71d5fc79153ac461af4d822..61779d5c0e9a80cfcd22806c668b08cc754fa58e 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -34,10 +34,12 @@
 #define LL_LLAPPEARANCEMGR_H
 
 #include "llsingleton.h"
+
+#include "llagentwearables.h"
+#include "llcallbacklist.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
 #include "llviewerinventory.h"
-#include "llcallbacklist.h"
 
 class LLWearable;
 class LLWearableHoldingPattern;
@@ -360,6 +362,9 @@ class CallAfterCategoryFetchStage1: public LLInventoryFetchDescendentsObserver
 					<< llendl;
 			//dec_busy_count();
 			gInventory.removeObserver(this);
+
+			// lets notify observers that loading is finished.
+			gAgentWearables.notifyLoadingFinished();
 			delete this;
 			return;
 		}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index afaeddaaeba03b5f885cb416da8d4150f7c62d5b..a5f24c55fe0ec85927c7f1c9cafce626c6981e0f 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -72,7 +72,6 @@
 #include "llviewerwindow.h"
 #include "llvoavatarself.h"
 #include "llwearablelist.h"
-#include "llpaneloutfitsinventory.h"
 
 typedef std::pair<LLUUID, LLUUID> two_uuids_t;
 typedef std::list<two_uuids_t> two_uuids_list_t;
@@ -511,17 +510,6 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
 {
 	const LLInventoryObject *obj = getInventoryObject();
 
-	bool is_sidepanel = isInOutfitsSidePanel();
-	if (is_sidepanel)
-	{
-		// Sidepanel includes restricted menu.
-		if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID))
-		{
-			items.push_back(std::string("Remove Link"));
-		}
-		return;
-	}
-
 	if (obj)
 	{
 		if (obj->getIsLinkType())
@@ -948,16 +936,6 @@ void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)
 	}
 }
 
-BOOL LLInvFVBridge::isInOutfitsSidePanel() const
-{
-	LLInventoryPanel *my_panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-	LLPanelOutfitsInventory *outfit_panel =
-		dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory"));
-	if (!outfit_panel)
-		return FALSE;
-	return outfit_panel->isTabPanel(my_panel);
-}
-
 BOOL LLInvFVBridge::canShare() const
 {
 	const LLInventoryModel* model = getInventoryModel();
@@ -2430,17 +2408,8 @@ void LLFolderBridge::folderOptionsMenu()
 	const bool is_ensemble = (type == LLFolderType::FT_NONE ||
 							  LLFolderType::lookupIsEnsembleType(type));
 
-	// calling card related functionality for folders.
-
-	const bool is_sidepanel = isInOutfitsSidePanel();
-	if (is_sidepanel)
-	{
-		mItems.push_back("Rename");
-		addDeleteContextMenuOptions(mItems, disabled_items);
-	}
-
 	// Only enable calling-card related options for non-system folders.
-	if (!is_sidepanel && !is_system_folder)
+	if (!is_system_folder)
 	{
 		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
 		if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
@@ -2469,10 +2438,7 @@ void LLFolderBridge::folderOptionsMenu()
 		checkFolderForContentsOfType(model, is_object) ||
 		checkFolderForContentsOfType(model, is_gesture) )
 	{
-		if (!is_sidepanel)
-		{
-			mItems.push_back(std::string("Folder Wearables Separator"));
-		}
+		mItems.push_back(std::string("Folder Wearables Separator"));
 
 		// Only enable add/replace outfit for non-system folders.
 		if (!is_system_folder)
@@ -3763,13 +3729,6 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		{
 			disabled_items.push_back(std::string("Share"));
 		}
-		bool is_sidepanel = isInOutfitsSidePanel();
-
-		if (!is_sidepanel)
-		{
-			addOpenRightClickMenuOption(items);
-			items.push_back(std::string("Properties"));
-		}
 
 		getClipboardEntries(true, items, disabled_items, flags);
 
@@ -4071,12 +4030,8 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		{
 			disabled_items.push_back(std::string("Share"));
 		}
-		bool is_sidepanel = isInOutfitsSidePanel();
 
-		if (!is_sidepanel)
-		{
-			items.push_back(std::string("Properties"));
-		}
+		items.push_back(std::string("Properties"));
 
 		getClipboardEntries(true, items, disabled_items, flags);
 
@@ -4431,24 +4386,17 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		{
 			disabled_items.push_back(std::string("Share"));
 		}
-		bool is_sidepanel = isInOutfitsSidePanel();
 		
-		if (can_open && !is_sidepanel)
+		if (can_open)
 		{
 			addOpenRightClickMenuOption(items);
 		}
 
-		if (!is_sidepanel)
-		{
-			items.push_back(std::string("Properties"));
-		}
+		items.push_back(std::string("Properties"));
 
 		getClipboardEntries(true, items, disabled_items, flags);
 
-		if (!is_sidepanel)
-		{
-			items.push_back(std::string("Wearable Separator"));
-		}
+		items.push_back(std::string("Wearable Separator"));
 
 		items.push_back(std::string("Wearable Edit"));
 
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 64d0f8d25452339586c5557589a42f7dbf7b1eaa..97e87c2f3b3be641b9c2e98b2fc6d6728ecff33a 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -74,7 +74,6 @@ class LLInvFVBridge : public LLFolderViewEventListener
 									   U32 flags = 0x00);
 	virtual ~LLInvFVBridge() {}
 
-	BOOL isInOutfitsSidePanel() const; // allow context menus to be customized for side panel
 	BOOL canShare() const;
 
 	//--------------------------------------------------------------------
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index 957e88960db5c07a0568766367812ac410f1e0ed..a43118755ef582dfbcdb91576f5c181cd6858f54 100644
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -435,12 +435,12 @@ void LLManip::renderXYZ(const LLVector3 &vec)
 	S32 vertical_offset = window_center_y - VERTICAL_OFFSET;
 
 
-	glPushMatrix();
+	gGL.pushMatrix();
 	{
 		LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
 		gViewerWindow->setup2DRender();
 		const LLVector2& display_scale = gViewerWindow->getDisplayScale();
-		glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
+		gGL.scalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
 		gGL.color4f(0.f, 0.f, 0.f, 0.7f);
 
 		imagep->draw(
@@ -450,7 +450,7 @@ void LLManip::renderXYZ(const LLVector3 &vec)
 			PAD * 2 + 10, 
 			LLColor4(0.f, 0.f, 0.f, 0.7f) );
 	}
-	glPopMatrix();
+	gGL.popMatrix();
 
 	gViewerWindow->setup3DRender();
 
diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp
index 4c28e98e62797318d3638eb3ab69f63726100569..61fc932bab2a17f273a97911abe845aac1ebcfb0 100644
--- a/indra/newview/llmorphview.cpp
+++ b/indra/newview/llmorphview.cpp
@@ -75,7 +75,6 @@ LLMorphView::LLMorphView(const LLMorphView::Params& p)
 	mOldCameraNearClip( 0.f ),
 	mCameraPitch( 0.f ),
 	mCameraYaw( 0.f ),
-	mCameraDist( -1.f ),
 	mCameraDrivenByKeys( FALSE )
 {}
 
@@ -86,7 +85,6 @@ void	LLMorphView::initialize()
 {
 	mCameraPitch = 0.f;
 	mCameraYaw = 0.f;
-	mCameraDist = -1.f;
 
 	if (!isAgentAvatarValid() || gAgentAvatarp->isDead())
 	{
diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h
index 493f906c6b0494c07c54416b8b789229bdc08884..f0f04dfda366772cb85a7f5b62e62f0803c19a42 100644
--- a/indra/newview/llmorphview.h
+++ b/indra/newview/llmorphview.h
@@ -53,7 +53,6 @@ class LLMorphView : public LLView
 	};
 	LLMorphView(const LLMorphView::Params&);
 	
-	void		initialize();
 	void		shutdown();
 
 	// inherited methods
@@ -64,12 +63,13 @@ class LLMorphView : public LLView
 
 	void		setCameraOffset(const LLVector3d& camera_offset)	{mCameraOffset = camera_offset;}
 	void		setCameraTargetOffset(const LLVector3d& camera_target_offset) {mCameraTargetOffset = camera_target_offset;}
-	void		setCameraDistToDefault()					{ mCameraDist = -1.f; }
 
 	void		updateCamera();
 	void		setCameraDrivenByKeys( BOOL b );
 
 protected:
+	void		initialize();
+
 	LLJoint*	mCameraTargetJoint;
 	LLVector3d	mCameraOffset;
 	LLVector3d	mCameraTargetOffset;
@@ -82,9 +82,6 @@ class LLMorphView : public LLView
 	F32			mCameraPitch;
 	F32			mCameraYaw;
 
-	// camera zoom
-	F32			mCameraDist;
-
 	BOOL		mCameraDrivenByKeys;
 };
 
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 6542afc366fe4a112813db622625aab8cce4938a..67442dd573d7bef2efd8f77c59ea6aaf4256eee3 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -70,7 +70,148 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL
 
 //////////////////////////////////////////////////////////////////////////
 
-class OutfitContextMenu : public LLListContextMenu
+class LLOutfitListGearMenu
+{
+public:
+	LLOutfitListGearMenu(LLOutfitsList* olist)
+	:	mOutfitList(olist),
+		mMenu(NULL)
+	{
+		llassert_always(mOutfitList);
+
+		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
+
+		registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this));
+		registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this));
+		registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this));
+		registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this));
+		registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2));
+
+		enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitsList::isActionEnabled, mOutfitList, _2));
+		enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2));
+
+		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+			"menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+		llassert(mMenu);
+	}
+
+	void show(LLView* spawning_view)
+	{
+		if (!mMenu) return;
+
+		updateItemsVisibility();
+		mMenu->buildDrawLabels();
+		mMenu->updateParent(LLMenuGL::sMenuContainer);
+		S32 menu_x = 0;
+		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
+		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
+	}
+
+	void updateItemsVisibility()
+	{
+		if (!mMenu) return;
+
+		bool have_selection = getSelectedOutfitID().notNull();
+		mMenu->setItemVisible("sepatator1", have_selection);
+		mMenu->setItemVisible("sepatator2", have_selection);
+		mMenu->arrangeAndClear(); // update menu height
+	}
+
+private:
+	const LLUUID& getSelectedOutfitID()
+	{
+		return mOutfitList->getSelectedOutfitUUID();
+	}
+
+	LLViewerInventoryCategory* getSelectedOutfit()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.isNull())
+		{
+			return NULL;
+		}
+
+		LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id);
+		return cat;
+	}
+
+	void onWear()
+	{
+		LLViewerInventoryCategory* selected_outfit = getSelectedOutfit();
+		if (selected_outfit)
+		{
+			LLAppearanceMgr::instance().wearInventoryCategory(
+				selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE);
+		}
+	}
+
+	void onTakeOff()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.notNull())
+		{
+			LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
+		}
+	}
+
+	void onRename()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.notNull())
+		{
+			LLAppearanceMgr::instance().renameOutfit(selected_outfit_id);
+		}
+	}
+
+	void onDelete()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.notNull())
+		{
+			remove_category(&gInventory, selected_outfit_id);
+		}
+	}
+
+	void onCreate(const LLSD& data)
+	{
+		LLWearableType::EType type = LLWearableType::typeNameToType(data.asString());
+		if (type == LLWearableType::WT_NONE)
+		{
+			llwarns << "Invalid wearable type" << llendl;
+			return;
+		}
+
+		LLAgentWearables::createWearable(type, true);
+	}
+
+	bool onVisible(LLSD::String param)
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.isNull()) // no selection or invalid outfit selected
+		{
+			return false;
+		}
+
+		// *TODO This condition leads to menu item behavior inconsistent with
+		// "Wear" button behavior and should be modified or removed.
+		bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id;
+
+		if ("wear" == param)
+		{
+			return !is_worn;
+		}
+
+		return true;
+	}
+
+	LLOutfitsList*	mOutfitList;
+	LLMenuGL*		mMenu;
+};
+
+//////////////////////////////////////////////////////////////////////////
+
+class LLOutfitContextMenu : public LLListContextMenu
 {
 protected:
 	/* virtual */ LLContextMenu* createMenu()
@@ -89,8 +230,8 @@ class OutfitContextMenu : public LLListContextMenu
 		registrar.add("Outfit.Rename", boost::bind(renameOutfit, selected_id));
 		registrar.add("Outfit.Delete", boost::bind(deleteOutfit, selected_id));
 
-		enable_registrar.add("Outfit.OnEnable", boost::bind(&OutfitContextMenu::onEnable, this, _2));
-		enable_registrar.add("Outfit.OnVisible", boost::bind(&OutfitContextMenu::onVisible, this, _2));
+		enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitContextMenu::onEnable, this, _2));
+		enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitContextMenu::onVisible, this, _2));
 
 		return createFromFile("menu_outfit_tab.xml");
 	}
@@ -103,8 +244,13 @@ class OutfitContextMenu : public LLListContextMenu
 		{
 			return get_is_category_renameable(&gInventory, outfit_cat_id);
 		}
+		else if ("wear_replace" == param)
+		{
+			return !gAgentWearables.isCOFChangeInProgress();
+		}
 		else if ("wear_add" == param)
 		{
+			if (gAgentWearables.isCOFChangeInProgress()) return false;
 			return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id);
 		}
 		else if ("take_off" == param)
@@ -157,7 +303,7 @@ class OutfitContextMenu : public LLListContextMenu
 static LLRegisterPanelClassWrapper<LLOutfitsList> t_outfits_list("outfits_list");
 
 LLOutfitsList::LLOutfitsList()
-	:	LLPanel()
+	:	LLPanelAppearanceTab()
 	,	mAccordion(NULL)
 	,	mListCommands(NULL)
 	,	mIsInitialized(false)
@@ -165,11 +311,13 @@ LLOutfitsList::LLOutfitsList()
 {
 	mCategoriesObserver = new LLInventoryCategoriesObserver();
 
-	mOutfitMenu = new OutfitContextMenu();
+	mGearMenu = new LLOutfitListGearMenu(this);
+	mOutfitMenu = new LLOutfitContextMenu();
 }
 
 LLOutfitsList::~LLOutfitsList()
 {
+	delete mGearMenu;
 	delete mOutfitMenu;
 
 	if (gInventory.containsObserver(mCategoriesObserver))
@@ -291,6 +439,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 		// Setting callback to reset items selection inside outfit on accordion collapsing and expanding (EXT-7875)
 		tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::resetItemSelection, this, list, cat_id));
 
+		// force showing list items that don't match current filter(EXT-7158)
+		list->setForceShowingUnmatchedItems(true);
+
 		// Setting list commit callback to monitor currently selected wearable item.
 		list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1));
 
@@ -308,7 +459,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 
 		// If filter is currently applied we store the initial tab state and
 		// open it to show matched items if any.
-		if (!mFilterSubString.empty())
+		if (!sFilterSubString.empty())
 		{
 			tab->notifyChildren(LLSD().with("action","store_state"));
 			tab->setDisplayChildren(true);
@@ -318,7 +469,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 			// filter to the newly added list.
 			list->setForceRefresh(true);
 
-			list->setFilterSubString(mFilterSubString);
+			list->setFilterSubString(sFilterSubString);
 		}
 	}
 
@@ -410,14 +561,84 @@ void LLOutfitsList::performAction(std::string action)
 	}
 }
 
+void LLOutfitsList::removeSelected()
+{
+	if (mSelectedOutfitUUID.notNull())
+	{
+		remove_category(&gInventory, mSelectedOutfitUUID);
+	}
+}
+
+void LLOutfitsList::setSelectedOutfitByUUID(const LLUUID& outfit_uuid)
+{
+	for (outfits_map_t::iterator iter = mOutfitsMap.begin();
+			iter != mOutfitsMap.end();
+			++iter)
+	{
+		if (outfit_uuid == iter->first)
+		{
+			LLAccordionCtrlTab* tab = iter->second;
+			if (!tab) continue;
+
+			LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
+			if (!list) continue;
+
+			tab->setFocus(TRUE);
+			changeOutfitSelection(list, outfit_uuid);
+
+			tab->setDisplayChildren(true);
+		}
+	}
+}
+
+// virtual
 void LLOutfitsList::setFilterSubString(const std::string& string)
 {
 	applyFilter(string);
 
-	mFilterSubString = string;
+	sFilterSubString = string;
 }
 
-boost::signals2::connection LLOutfitsList::addSelectionChangeCallback(selection_change_callback_t cb)
+// virtual
+bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
+{
+	if (mSelectedOutfitUUID.isNull()) return false;
+
+	const std::string command_name = userdata.asString();
+	if (command_name == "delete")
+	{
+		return !mItemSelected && LLAppearanceMgr::instance().getCanRemoveOutfit(mSelectedOutfitUUID);
+	}
+	if (command_name == "rename")
+	{
+		return get_is_category_renameable(&gInventory, mSelectedOutfitUUID);
+	}
+	if (command_name == "save_outfit")
+	{
+		bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked();
+		bool outfit_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty();
+		// allow save only if outfit isn't locked and is dirty
+		return !outfit_locked && outfit_dirty;
+	}
+	if (command_name == "wear")
+	{
+		return !gAgentWearables.isCOFChangeInProgress();
+	}
+	if (command_name == "take_off")
+	{
+		return LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID;
+	}
+	return false;
+}
+
+// virtual
+void LLOutfitsList::showGearMenu(LLView* spawning_view)
+{
+	if (!mGearMenu) return;
+	mGearMenu->show(spawning_view);
+}
+
+boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb)
 {
 	return mSelectionChangeSignal.connect(cb);
 }
@@ -553,7 +774,7 @@ void LLOutfitsList::restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID
 
 void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl)
 {
-	if (!ctrl || mFilterSubString.empty())
+	if (!ctrl || sFilterSubString.empty())
 		return;
 
 	for (outfits_map_t::iterator
@@ -567,7 +788,7 @@ void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl)
 		LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
 		if (list != ctrl) continue;
 
-		applyFilterToTab(iter->first, tab, mFilterSubString);
+		applyFilterToTab(iter->first, tab, sFilterSubString);
 	}
 }
 
@@ -583,7 +804,7 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
 		LLAccordionCtrlTab* tab = iter->second;
 		if (!tab) continue;
 
-		bool more_restrictive = mFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, mFilterSubString.size()).compare(mFilterSubString);
+		bool more_restrictive = sFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, sFilterSubString.size()).compare(sFilterSubString);
 
 		// Restore tab visibility in case of less restrictive filter
 		// to compare it with updated string if it was previously hidden.
@@ -598,7 +819,7 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
 			list->setFilterSubString(new_filter_substring);
 		}
 
-		if(mFilterSubString.empty() && !new_filter_substring.empty())
+		if(sFilterSubString.empty() && !new_filter_substring.empty())
 		{
 			//store accordion tab state when filter is not empty
 			tab->notifyChildren(LLSD().with("action","store_state"));
@@ -632,6 +853,8 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
 			restoreOutfitSelection(tab, iter->first);
 		}
 	}
+
+	mAccordion->arrange();
 }
 
 void LLOutfitsList::applyFilterToTab(
@@ -655,7 +878,7 @@ void LLOutfitsList::applyFilterToTab(
 	{
 		// hide tab if its title doesn't pass filter
 		// and it has no visible items
-		tab->setVisible(list->size() > 0);
+		tab->setVisible(list->wasLasFilterSuccessfull());
 
 		// remove title highlighting because it might
 		// have been previously highlighted by less restrictive filter
@@ -696,7 +919,7 @@ void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
 
 	uuid_vec_t selected_uuids;
 
-	// Collect seleted items from all selected lists.
+	// Collect selected items from all selected lists.
 	for (wearables_lists_map_t::iterator iter = mSelectedListsMap.begin();
 			iter != mSelectedListsMap.end();
 			++iter)
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index a6b9a66836dd2d06dacf468ac5db1f26b6827432..d2076247929e23b35ef68567dc075c0ba3b9f051 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -37,12 +37,15 @@
 
 // newview
 #include "llinventorymodel.h"
-#include "llinventoryobserver.h"
+#include "llpanelappearancetab.h"
 
 class LLAccordionCtrlTab;
+class LLInventoryCategoriesObserver;
+class LLOutfitListGearMenu;
 class LLWearableItemsList;
 class LLListContextMenu;
 
+
 /**
  * @class LLOutfitTabNameComparator
  *
@@ -66,9 +69,9 @@ class LLOutfitTabNameComparator : public LLAccordionCtrl::LLTabComparator
  * which displays each outfit in an accordion tab with a flat list
  * of items inside it.
  *
- * Starts fetching nevessary inventory content on first openning.
+ * Starts fetching necessary inventory content on first opening.
  */
-class LLOutfitsList : public LLPanel
+class LLOutfitsList : public LLPanelAppearanceTab
 {
 public:
 	typedef boost::function<void (const LLUUID&)> selection_change_callback_t;
@@ -88,11 +91,19 @@ class LLOutfitsList : public LLPanel
 
 	void performAction(std::string action);
 
-	void setFilterSubString(const std::string& string);
+	void removeSelected();
+
+	void setSelectedOutfitByUUID(const LLUUID& outfit_uuid);
+
+	/*virtual*/ void setFilterSubString(const std::string& string);
+
+	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
+
+	/*virtual*/ void showGearMenu(LLView* spawning_view);
 
 	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; }
 
-	boost::signals2::connection addSelectionChangeCallback(selection_change_callback_t cb);
+	boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb);
 
 	/**
 	 * Returns true if there is a selection inside currently selected outfit
@@ -184,13 +195,12 @@ class LLOutfitsList : public LLPanel
 	LLUUID							mHighlightedOutfitUUID;
 	selection_change_signal_t		mSelectionChangeSignal;
 
-	std::string 					mFilterSubString;
-
 	typedef	std::map<LLUUID, LLAccordionCtrlTab*>		outfits_map_t;
 	typedef outfits_map_t::value_type					outfits_map_value_t;
 	outfits_map_t					mOutfitsMap;
 
-	LLListContextMenu*			mOutfitMenu;
+	LLOutfitListGearMenu*			mGearMenu;
+	LLListContextMenu*				mOutfitMenu;
 
 	bool							mIsInitialized;
 	/**
diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h
index c2f8dbd074a12cbc23865988f3d54968073eff09..f1901a63a4ff34780e0861f590a07b4fe5f2fdaf 100644
--- a/indra/newview/llpanelappearancetab.h
+++ b/indra/newview/llpanelappearancetab.h
@@ -1,6 +1,6 @@
 /** 
- * @file llpanelplacestab.h
- * @brief Tabs interface for Side Bar "Places" panel
+ * @file llpanelappearancetab.h
+ * @brief Tabs interface for Side Bar "My Appearance" panel
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
@@ -34,28 +34,22 @@
 
 #include "llpanel.h"
 
-#include "llpanelappearance.h"
-
 class LLPanelAppearanceTab : public LLPanel
 {
 public:
-	LLPanelAppearanceTab(LLPanelAppearance *parent) : 
-		LLPanel(),
-		mParent(parent)
-	{}
+	LLPanelAppearanceTab() : LLPanel() {}
 	virtual ~LLPanelAppearanceTab() {}
 
-	virtual void onSearchEdit(const std::string& string) = 0;
-	virtual void updateVerbs() = 0;		// Updates buttons at the bottom of Appearance panel
-	virtual void onWear() = 0;
-	virtual void onEdit() = 0;
-	virtual void onNew() = 0;
+	virtual void setFilterSubString(const std::string& string) = 0;
+
+	virtual bool isActionEnabled(const LLSD& userdata) = 0;
 
-	bool isTabVisible(); // Check if parent TabContainer is visible.
+	virtual void showGearMenu(LLView* spawning_view) = 0;
 
+	static const std::string& getFilterSubString() { return sFilterSubString; }
 
 protected:
-	LLPanelAppearance*		mParent;
+	static std::string		sFilterSubString;
 };
 
 #endif //LL_LLPANELAPPEARANCETAB_H
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 71edd39348d5175c263f8709bc18e1650a1f87d4..ae549099452e061a466469e81ec3bf921fd44934 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -1127,7 +1127,6 @@ void LLPanelEditWearable::changeCamera(U8 subpart)
 	}
 
 	// Update the camera
-	gMorphView->setCameraDistToDefault();
 	gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
 	gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
 	gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index aac020087b45f6d9d6f9858e6b855ce546a5c170..ea7d23333310b0043fb8830a88119f242747c2a2 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -328,7 +328,8 @@ BOOL LLPanelOutfitEdit::postBuild()
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);
 	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
 	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
-	childSetCommitCallback("shop_btn", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
+	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
+	childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 
 	mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index d382c77430f7ede7d6af3ab586e8db59fa0fe39e..2f1cad8a75db178eecf75257296add305714f440 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -33,216 +33,32 @@
 
 #include "llpaneloutfitsinventory.h"
 
-#include "llagent.h"
-#include "llagentwearables.h"
-#include "llappearancemgr.h"
+#include "llnotificationsutil.h"
+#include "lltabcontainer.h"
 
-#include "llbutton.h"
-#include "llfloaterreg.h"
-#include "llfloaterworldmap.h"
-#include "llfloaterinventory.h"
-#include "llfoldervieweventlistener.h"
-#include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodelbackgroundfetch.h"
-#include "llinventorypanel.h"
-#include "lllandmark.h"
-#include "lllineeditor.h"
-#include "llmodaldialog.h"
-#include "llnotificationsutil.h"
+#include "llagentwearables.h"
+#include "llappearancemgr.h"
 #include "lloutfitobserver.h"
 #include "lloutfitslist.h"
+#include "llpanelwearing.h"
 #include "llsaveoutfitcombobtn.h"
 #include "llsidepanelappearance.h"
 #include "llsidetray.h"
-#include "lltabcontainer.h"
 #include "llviewerfoldertype.h"
-#include "llviewerjointattachment.h"
-#include "llvoavatarself.h"
-
-// List Commands
-#include "lldndbutton.h"
-#include "llmenugl.h"
-#include "llviewermenu.h"
-
-#include "llviewercontrol.h"
 
 static const std::string OUTFITS_TAB_NAME = "outfitslist_tab";
 static const std::string COF_TAB_NAME = "cof_tab";
 
 static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory");
 
-class LLOutfitListGearMenu
-{
-public:
-	LLOutfitListGearMenu(LLOutfitsList* olist)
-	:	mOutfitList(olist),
-		mMenu(NULL)
-	{
-		llassert_always(mOutfitList);
-
-		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
-		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
-
-		registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this));
-		registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this));
-		registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this));
-		registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this));
-		registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2));
-
-		enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenu::onEnable, this, _2));
-		enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2));
-
-		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
-			"menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-		llassert(mMenu);
-	}
-
-	LLMenuGL* getMenu() { return mMenu; }
-
-	void show(LLView* spawning_view)
-	{
-		if (!mMenu) return;
-
-		updateItemsVisibility();
-		mMenu->buildDrawLabels();
-		mMenu->updateParent(LLMenuGL::sMenuContainer);
-		S32 menu_x = 0;
-		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
-		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
-	}
-
-	void updateItemsVisibility()
-	{
-		if (!mMenu) return;
-
-		bool have_selection = getSelectedOutfitID().notNull();
-		mMenu->setItemVisible("sepatator1", have_selection);
-		mMenu->setItemVisible("sepatator2", have_selection);
-		mMenu->arrangeAndClear(); // update menu height
-	}
-
-private:
-	const LLUUID& getSelectedOutfitID()
-	{
-		return mOutfitList->getSelectedOutfitUUID();
-	}
-
-	LLViewerInventoryCategory* getSelectedOutfit()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.isNull())
-		{
-			return NULL;
-		}
-
-		LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id);
-		return cat;
-	}
-
-	void onWear()
-	{
-		LLViewerInventoryCategory* selected_outfit = getSelectedOutfit();
-		if (selected_outfit)
-		{
-			LLAppearanceMgr::instance().wearInventoryCategory(
-				selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE);
-		}
-	}
-
-	void onTakeOff()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
-		}
-	}
-
-	void onRename()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			LLAppearanceMgr::instance().renameOutfit(selected_outfit_id);
-		}
-	}
-
-	void onDelete()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			remove_category(&gInventory, selected_outfit_id);
-		}
-	}
-
-	void onCreate(const LLSD& data)
-	{
-		LLWearableType::EType type = LLWearableType::typeNameToType(data.asString());
-		if (type == LLWearableType::WT_NONE)
-		{
-			llwarns << "Invalid wearable type" << llendl;
-			return;
-		}
-
-		LLAgentWearables::createWearable(type, true);
-	}
-
-	bool onEnable(LLSD::String param)
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.isNull()) // no selection or invalid outfit selected
-		{
-			return false;
-		}
-
-		if ("rename" == param)
-		{
-			return get_is_category_renameable(&gInventory, selected_outfit_id);
-		}
-		else if ("delete" == param)
-		{
-			return LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit_id);
-		}
-		else if ("take_off" == param)
-		{
-			return LLAppearanceMgr::getCanRemoveFromCOF(selected_outfit_id);
-		}
-
-		return true;
-	}
-
-	bool onVisible(LLSD::String param)
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.isNull()) // no selection or invalid outfit selected
-		{
-			return false;
-		}
-
-		bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id;
-
-		if ("wear" == param)
-		{
-			return !is_worn;
-		}
-
-		return true;
-	}
-
-	LLOutfitsList*	mOutfitList;
-	LLMenuGL*		mMenu;
-};
-
 LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
 	mMyOutfitsPanel(NULL),
 	mCurrentOutfitPanel(NULL),
-	mGearMenu(NULL),
+	mActivePanel(NULL),
 	mInitialized(false)
 {
-	mSavedFolderState = new LLSaveFolderState();
-	mSavedFolderState->setApply(FALSE);
 	gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoaded, this));
 	gAgentWearables.addLoadingStartedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoading, this));
 
@@ -254,8 +70,6 @@ LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
 
 LLPanelOutfitsInventory::~LLPanelOutfitsInventory()
 {
-	delete mGearMenu;
-	delete mSavedFolderState;
 }
 
 // virtual
@@ -297,7 +111,8 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key)
 	// and update verbs.
 	onTabChange();
 	
-	// Auto open the first outfit newly created so new users can see sample outfit contents
+	// *TODO: Auto open the first outfit newly created so new users can see sample outfit contents
+	/*
 	static bool should_open_outfit = true;
 	if (should_open_outfit && gAgent.isFirstLogin())
 	{
@@ -317,6 +132,7 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key)
 		}
 	}
 	should_open_outfit = false;
+	*/
 }
 
 void LLPanelOutfitsInventory::updateVerbs()
@@ -330,93 +146,30 @@ void LLPanelOutfitsInventory::updateVerbs()
 // virtual
 void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)
 {
-	mFilterSubString = string;
+	if (!mActivePanel) return;
 
-	// TODO: add handling "My Outfits" tab.
-	if (!isCOFPanelActive())
-	{
-		mMyOutfitsPanel->setFilterSubString(string);
-		return;
-	}
+	mFilterSubString = string;
 
 	if (string == "")
 	{
-		getActivePanel()->setFilterSubString(LLStringUtil::null);
-
-		// re-open folders that were initially open
-		mSavedFolderState->setApply(TRUE);
-		getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		LLOpenFoldersWithSelection opener;
-		getRootFolder()->applyFunctorRecursively(opener);
-		getRootFolder()->scrollToShowSelection();
+		mActivePanel->setFilterSubString(LLStringUtil::null);
 	}
 
 	LLInventoryModelBackgroundFetch::instance().start();
 
-	if (getActivePanel()->getFilterSubString().empty() && string.empty())
+	if (mActivePanel->getFilterSubString().empty() && string.empty())
 	{
 		// current filter and new filter empty, do nothing
 		return;
 	}
 
-	// save current folder open state if no filter currently applied
-	if (getRootFolder()->getFilterSubString().empty())
-	{
-		mSavedFolderState->setApply(FALSE);
-		getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-	}
-
 	// set new filter string
-	getActivePanel()->setFilterSubString(string);
+	mActivePanel->setFilterSubString(string);
 }
 
 void LLPanelOutfitsInventory::onWearButtonClick()
 {
-	// TODO: Remove if/else, add common interface
-	// for "My Outfits" and "Wearing" tabs.
-	if (!isCOFPanelActive())
-	{
-		mMyOutfitsPanel->performAction("replaceoutfit");
-	}
-	else
-	{
-		LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
-		if (listenerp)
-		{
-			listenerp->performAction(NULL, "replaceoutfit");
-		}
-	}
-}
-
-void LLPanelOutfitsInventory::onAdd()
-{
-	// TODO: Remove if/else, add common interface
-	// for "My Outfits" and "Wearing" tabs.
-	if (!isCOFPanelActive())
-	{
-		mMyOutfitsPanel->performAction("addtooutfit");
-	}
-	else
-	{
-		LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
-		if (listenerp)
-		{
-			listenerp->performAction(NULL, "addtooutfit");
-		}
-	}
-}
-
-void LLPanelOutfitsInventory::onRemove()
-{
-	LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
-	if (listenerp)
-	{
-		listenerp->performAction(NULL, "removefromoutfit");
-	}
-}
-
-void LLPanelOutfitsInventory::onEdit()
-{
+	mMyOutfitsPanel->performAction("replaceoutfit");
 }
 
 bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response)
@@ -446,8 +199,6 @@ bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD&
 	return false;
 }
 
-
-
 void LLPanelOutfitsInventory::onSave()
 {
 	std::string outfit_name;
@@ -475,57 +226,6 @@ void LLPanelOutfitsInventory::onSave()
 	}*/
 }
 
-void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
-{
-	updateVerbs();
-
-	// TODO: add handling "My Outfits" tab.
-	if (!isCOFPanelActive())
-		return;
-
-	if (getRootFolder()->needsAutoRename() && items.size())
-	{
-		getRootFolder()->startRenamingSelectedItem();
-		getRootFolder()->setNeedsAutoRename(FALSE);
-	}
-}
-
-LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction()
-{
-	// TODO: add handling "My Outfits" tab.
-	if (!isCOFPanelActive())
-		return NULL;
-
-	LLFolderViewItem* current_item = getRootFolder()->getCurSelectedItem();
-	if (!current_item)
-		return NULL;
-
-	LLFolderViewEventListener* listenerp = current_item->getListener();
-	if (getIsCorrectType(listenerp))
-	{
-		return listenerp;
-	}
-	return NULL;
-}
-
-bool LLPanelOutfitsInventory::getIsCorrectType(const LLFolderViewEventListener *listenerp) const
-{
-	if (listenerp->getInventoryType() == LLInventoryType::IT_CATEGORY)
-	{
-		LLViewerInventoryCategory *cat = gInventory.getCategory(listenerp->getUUID());
-		if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
-		{
-			return true;
-		}
-	}
-	return false;
-}
-
-LLFolderView *LLPanelOutfitsInventory::getRootFolder()
-{
-	return getActivePanel()->getRootFolder();
-}
-
 //static
 LLPanelOutfitsInventory* LLPanelOutfitsInventory::findInstance()
 {
@@ -542,21 +242,12 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
 	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::showGearMenu, this));
 	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this));
 	mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this));
-
-	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
-	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this
-				   ,       _4 // BOOL drop
-				   ,       _5 // EDragAndDropType cargo_type
-				   ,       _7 // EAcceptance* accept
-				   ));
-
-	mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel);
 }
 
 void LLPanelOutfitsInventory::updateListCommands()
 {
 	bool trash_enabled = isActionEnabled("delete");
-	bool wear_enabled =  !gAgentWearables.isCOFChangeInProgress() && isActionEnabled("wear");
+	bool wear_enabled =  isActionEnabled("wear");
 	bool wear_visible = !isCOFPanelActive();
 	bool make_outfit_enabled = isActionEnabled("save_outfit");
 
@@ -568,269 +259,58 @@ void LLPanelOutfitsInventory::updateListCommands()
 
 void LLPanelOutfitsInventory::showGearMenu()
 {
-	if (!mGearMenu) return;
+	if (!mActivePanel) return;
 
 	LLView* spawning_view = getChild<LLView>("options_gear_btn");
-	mGearMenu->show(spawning_view);
+	mActivePanel->showGearMenu(spawning_view);
 }
 
 void LLPanelOutfitsInventory::onTrashButtonClick()
 {
-	onClipboardAction("delete");
-}
+	mMyOutfitsPanel->removeSelected();
 
-void LLPanelOutfitsInventory::onClipboardAction(const LLSD& userdata)
-{
-	std::string command_name = userdata.asString();
-	if (isCOFPanelActive())
-	{
-		getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name);
-	}
-	else // "My Outfits" tab active
-	{
-		if (command_name == "delete")
-		{
-			const LLUUID& selected_outfit_id = mMyOutfitsPanel->getSelectedOutfitUUID();
-			if (selected_outfit_id.notNull())
-			{
-				remove_category(&gInventory, selected_outfit_id);
-			}
-		}
-		else
-		{
-			llwarns << "Unrecognized action" << llendl;
-		}
-	}
-	updateListCommands();
-	updateVerbs();
+ 	updateListCommands();
+ 	updateVerbs();
 }
 
-void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
+bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 {
-	if (!isActionEnabled(userdata))
-		return;
-
-	const std::string command_name = userdata.asString();
-	if (command_name == "new")
-	{
-		onSave();
-	}
-	if (command_name == "edit")
-	{
-		onEdit();
-	}
-	if (command_name == "wear")
-	{
-		onWearButtonClick();
-	}
-	// Note: This option has been removed from the gear menu.
-	if (command_name == "add")
-	{
-		onAdd();
-	}
-	if (command_name == "remove")
-	{
-		onRemove();
-	}
-	if (command_name == "rename")
-	{
-		onClipboardAction("rename");
-	}
-	if (command_name == "remove_link")
-	{
-		onClipboardAction("delete");
-	}
-	if (command_name == "delete")
-	{
-		onClipboardAction("delete");
-	}
-	updateListCommands();
-	updateVerbs();
+	return mActivePanel && mActivePanel->isActionEnabled(userdata);
 }
-
-BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
-{
-	const std::string command_name = userdata.asString();
-	if (command_name == "delete" || command_name == "remove")
-	{
-		BOOL can_delete = FALSE;
-
-		if (isCOFPanelActive())
-		{
-			LLFolderView* root = getActivePanel()->getRootFolder();
-			if (root)
-			{
-				std::set<LLUUID> selection_set = root->getSelectionList();
-				can_delete = (selection_set.size() > 0);
-				for (std::set<LLUUID>::iterator iter = selection_set.begin();
-					 iter != selection_set.end();
-					 ++iter)
-				{
-					const LLUUID &item_id = (*iter);
-					LLFolderViewItem *item = root->getItemByID(item_id);
-					can_delete &= item->getListener()->isItemRemovable();
-				}
-			}
-		}
-		else // "My Outfits" tab active
-		{
-			const LLUUID& selected_outfit = mMyOutfitsPanel->getSelectedOutfitUUID();
-			// first condition prevents trash btn from enabling when items are selected inside outfit (EXT-7847)
-			can_delete = !mMyOutfitsPanel->hasItemSelected() && LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit);
-		}
-
-		return can_delete;
-	}
-	if (command_name == "remove_link")
-	{
-		BOOL can_delete = FALSE;
-		LLFolderView* root = getActivePanel()->getRootFolder();
-		if (root)
-		{
-			std::set<LLUUID> selection_set = root->getSelectionList();
-			can_delete = (selection_set.size() > 0);
-			for (std::set<LLUUID>::iterator iter = selection_set.begin();
-				 iter != selection_set.end();
-				 ++iter)
-			{
-				const LLUUID &item_id = (*iter);
-				LLViewerInventoryItem *item = gInventory.getItem(item_id);
-				if (!item || !item->getIsLinkType())
-					return FALSE;
-			}
-			return can_delete;
-		}
-		return FALSE;
-	}
-	if (command_name == "rename" ||
-		command_name == "delete_outfit")
-	{
-		return (getCorrectListenerForAction() != NULL) && hasItemsSelected();
-	}
-	
-	if (command_name == "wear")
-	{
-		if (isCOFPanelActive())
-		{
-			return FALSE;
-		}
-		return hasItemsSelected();
-	}
-	if (command_name == "save_outfit")
-	{
-		bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked();
-		bool outfit_dirty =LLAppearanceMgr::getInstance()->isOutfitDirty();
-		// allow save only if outfit isn't locked and is dirty
-		return !outfit_locked && outfit_dirty;
-	}
-   
-	if (command_name == "edit" || 
-		command_name == "add"
-		)
-	{
-		return (getCorrectListenerForAction() != NULL);
-	}
-	return TRUE;
-}
-
-bool LLPanelOutfitsInventory::hasItemsSelected()
-{
-	bool has_items_selected = false;
-
-	if (isCOFPanelActive())
-	{
-		LLFolderView* root = getActivePanel()->getRootFolder();
-		if (root)
-		{
-			std::set<LLUUID> selection_set = root->getSelectionList();
-			has_items_selected = (selection_set.size() > 0);
-		}
-	}
-	else // My Outfits Tab is active
-	{
-		has_items_selected = mMyOutfitsPanel->getSelectedOutfitUUID().notNull();
-	}
-	return has_items_selected;
-}
-
-bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
-{
-	*accept = ACCEPT_NO;
-
-	const bool is_enabled = isActionEnabled("delete");
-	if (is_enabled) *accept = ACCEPT_YES_MULTI;
-
-	if (is_enabled && drop)
-	{
-		onClipboardAction("delete");
-	}
-	return true;
-}
-
-// List Commands                                                              //
-////////////////////////////////////////////////////////////////////////////////
+// List Commands                                                                //
+//////////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////////
-// Tab panels                                                                    //
+// Tab panels                                                                   //
 
 void LLPanelOutfitsInventory::initTabPanels()
 {
-	mCurrentOutfitPanel = getChild<LLInventoryPanel>(COF_TAB_NAME);
-	mCurrentOutfitPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-	mCurrentOutfitPanel->setSelectCallback(boost::bind(&LLPanelOutfitsInventory::onTabSelectionChange, this, mCurrentOutfitPanel, _1, _2));
+	mCurrentOutfitPanel = getChild<LLPanelWearing>(COF_TAB_NAME);
+	mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
 	mMyOutfitsPanel = getChild<LLOutfitsList>(OUTFITS_TAB_NAME);
-	mMyOutfitsPanel->addSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
+	mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
 	mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs");
 	mAppearanceTabs->setCommitCallback(boost::bind(&LLPanelOutfitsInventory::onTabChange, this));
 }
 
-void LLPanelOutfitsInventory::onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action)
-{
-	if (user_action && items.size() > 0)
-	{
-		// TODO: add handling "My Outfits" tab.
-		if (isCOFPanelActive())
-		{
-			onSelectionChange(items, user_action);
-		}
-		else
-		{
-			mCurrentOutfitPanel->getRootFolder()->clearSelection();
-		}
-	}
-}
-
 void LLPanelOutfitsInventory::onTabChange()
 {
-	// TODO: add handling "My Outfits" tab.
-	if (isCOFPanelActive())
-	{
-		mCurrentOutfitPanel->setFilterSubString(mFilterSubString);
-	}
-	else
-	{
-		mMyOutfitsPanel->setFilterSubString(mFilterSubString);
-		mMyOutfitsPanel->onOpen(LLSD());
-	}
+	mActivePanel = dynamic_cast<LLPanelAppearanceTab*>(mAppearanceTabs->getCurrentPanel());
+	if (!mActivePanel) return;
+
+	mActivePanel->setFilterSubString(mFilterSubString);
+	mActivePanel->onOpen(LLSD());
 
 	updateVerbs();
 }
 
-BOOL LLPanelOutfitsInventory::isTabPanel(LLInventoryPanel *panel) const
+bool LLPanelOutfitsInventory::isCOFPanelActive() const
 {
-	// TODO: add handling "My Outfits" tab.
-	if (mCurrentOutfitPanel == panel)
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
+	if (!mActivePanel) return false;
 
-BOOL LLPanelOutfitsInventory::isCOFPanelActive() const
-{
-	return (childGetVisibleTab("appearance_tabs")->getName() == COF_TAB_NAME);
+	return mActivePanel->getName() == COF_TAB_NAME;
 }
 
 void LLPanelOutfitsInventory::setWearablesLoading(bool val)
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index eabfda7f8c2e56817a646c871e521b25e8eb946d..a50e047140ccc01e8cbb0218a33bd27e7791402e 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -34,20 +34,15 @@
 #define LL_LLPANELOUTFITSINVENTORY_H
 
 #include "llpanel.h"
-#include "llinventoryobserver.h"
 
-class LLFolderView;
-class LLFolderViewItem;
-class LLFolderViewEventListener;
-class LLInventoryPanel;
 class LLOutfitsList;
-class LLSaveFolderState;
-class LLButton;
+class LLOutfitListGearMenu;
+class LLPanelAppearanceTab;
+class LLPanelWearing;
 class LLMenuGL;
 class LLSidepanelAppearance;
 class LLTabContainer;
 class LLSaveOutfitComboBtn;
-class LLOutfitListGearMenu;
 
 class LLPanelOutfitsInventory : public LLPanel
 {
@@ -60,55 +55,36 @@ class LLPanelOutfitsInventory : public LLPanel
 	/*virtual*/ void onOpen(const LLSD& key);
 	
 	void onSearchEdit(const std::string& string);
-	void onAdd();
-	void onRemove();
-	void onEdit();
 	void onSave();
 	
 	bool onSaveCommit(const LLSD& notification, const LLSD& response);
 
-	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
-
-	// If a compatible listener type is selected, then return a pointer to that.
-	// Otherwise, return NULL.
-	LLFolderViewEventListener* getCorrectListenerForAction();
-
-	LLFolderView* getRootFolder();
 	static LLSidepanelAppearance* getAppearanceSP();
 
 	static LLPanelOutfitsInventory* findInstance();
 
 protected:
 	void updateVerbs();
-	bool getIsCorrectType(const LLFolderViewEventListener *listenerp) const;
 
 private:
-	LLSaveFolderState*		mSavedFolderState;
 	LLTabContainer*			mAppearanceTabs;
 	std::string 			mFilterSubString;
 	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
-public:
-	//////////////////////////////////////////////////////////////////////////////////
-	// tab panels
-	// TODO: change getActivePanel() to return the active tab instead of returning
-	// a pointer to "Wearing" inventory panel.
-	LLInventoryPanel* 		getActivePanel() { return mCurrentOutfitPanel; }
-
-	BOOL 					isTabPanel(LLInventoryPanel *panel) const;
-	BOOL 					isCOFPanelActive() const;
 
+	//////////////////////////////////////////////////////////////////////////////////
+	// tab panels                                                                   //
 protected:
 	void 					initTabPanels();
-	void 					onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action);
 	void 					onTabChange();
+	bool 					isCOFPanelActive() const;
 
 private:
+	LLPanelAppearanceTab*	mActivePanel;
 	LLOutfitsList*			mMyOutfitsPanel;
-	LLInventoryPanel*		mCurrentOutfitPanel;
+	LLPanelWearing*			mCurrentOutfitPanel;
 
-	// tab panels                                                               //
-	////////////////////////////////////////////////////////////////////////////////
-	
+	// tab panels                                                                   //
+	//////////////////////////////////////////////////////////////////////////////////
 
 	//////////////////////////////////////////////////////////////////////////////////
 	// List Commands                                                                //
@@ -118,21 +94,15 @@ class LLPanelOutfitsInventory : public LLPanel
 	void onWearButtonClick();
 	void showGearMenu();
 	void onTrashButtonClick();
-	void onClipboardAction(const LLSD& userdata);
-	BOOL isActionEnabled(const LLSD& command_name);
-	void onCustomAction(const LLSD& command_name);
-	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
-	bool hasItemsSelected();
+	bool isActionEnabled(const LLSD& userdata);
 	void setWearablesLoading(bool val);
 	void onWearablesLoaded();
 	void onWearablesLoading();
 private:
 	LLPanel*					mListCommands;
-	LLOutfitListGearMenu*		mGearMenu;
 	LLMenuGL*					mMenuAdd;
-	// List Commands                                                              //
-	////////////////////////////////////////////////////////////////////////////////
-	///
+	// List Commands                                                                //
+	//////////////////////////////////////////////////////////////////////////////////
 
 	bool mInitialized;
 };
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b8852890add436d15c71aa3b512c33af940ebb00
--- /dev/null
+++ b/indra/newview/llpanelwearing.cpp
@@ -0,0 +1,214 @@
+/**
+ * @file llpanelwearing.cpp
+ * @brief List of agent's worn items.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelwearing.h"
+
+#include "llappearancemgr.h"
+#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
+#include "llsidetray.h"
+#include "llviewermenu.h"
+#include "llwearableitemslist.h"
+
+// Context menu and Gear menu helper.
+static void edit_outfit()
+{
+	LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit"));
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+class LLWearingGearMenu
+{
+public:
+	LLWearingGearMenu()
+	:	mMenu(NULL)
+	{
+		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+
+		registrar.add("Gear.Edit", boost::bind(&edit_outfit));
+
+		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+			"menu_wearing_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+		llassert(mMenu);
+	}
+
+	void show(LLView* spawning_view)
+	{
+		if (!mMenu) return;
+
+		mMenu->buildDrawLabels();
+		mMenu->updateParent(LLMenuGL::sMenuContainer);
+		S32 menu_x = 0;
+		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
+		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
+	}
+
+private:
+	LLMenuGL*		mMenu;
+};
+
+//////////////////////////////////////////////////////////////////////////
+
+class LLWearingContextMenu : public LLListContextMenu
+{
+protected:
+	/* virtual */ LLContextMenu* createMenu()
+	{
+		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+
+		registrar.add("Wearing.Edit", boost::bind(&edit_outfit));
+
+		return createFromFile("menu_wearing_tab.xml");
+	}
+};
+
+//////////////////////////////////////////////////////////////////////////
+
+std::string LLPanelAppearanceTab::sFilterSubString = LLStringUtil::null;
+
+static LLRegisterPanelClassWrapper<LLPanelWearing> t_panel_wearing("panel_wearing");
+
+LLPanelWearing::LLPanelWearing()
+	:	LLPanelAppearanceTab()
+	,	mCOFItemsList(NULL)
+	,	mIsInitialized(false)
+{
+	mCategoriesObserver = new LLInventoryCategoriesObserver();
+
+	mGearMenu = new LLWearingGearMenu();
+	mContextMenu = new LLWearingContextMenu();
+}
+
+LLPanelWearing::~LLPanelWearing()
+{
+	delete mGearMenu;
+	delete mContextMenu;
+
+	if (gInventory.containsObserver(mCategoriesObserver))
+	{
+		gInventory.removeObserver(mCategoriesObserver);
+		delete mCategoriesObserver;
+	}
+}
+
+BOOL LLPanelWearing::postBuild()
+{
+	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
+	mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3));
+
+	return TRUE;
+}
+
+//virtual
+void LLPanelWearing::onOpen(const LLSD& /*info*/)
+{
+	if (!mIsInitialized)
+	{
+		// *TODO: I'm not sure is this check necessary but it never match while developing.
+		if (!gInventory.isInventoryUsable())
+			return;
+
+		const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
+
+		// *TODO: I'm not sure is this check necessary but it never match while developing.
+		LLViewerInventoryCategory* category = gInventory.getCategory(cof);
+		if (!category)
+			return;
+
+		gInventory.addObserver(mCategoriesObserver);
+
+		// Start observing changes in Current Outfit category.
+		mCategoriesObserver->addCategory(cof, boost::bind(&LLWearableItemsList::updateList, mCOFItemsList, cof));
+
+		// Fetch Current Outfit 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
+		// arrive.
+		category->fetch();
+
+		mCOFItemsList->updateList(cof);
+
+		mIsInitialized = true;
+	}
+}
+
+// virtual
+void LLPanelWearing::setFilterSubString(const std::string& string)
+{
+	sFilterSubString = string;
+	mCOFItemsList->setFilterSubString(sFilterSubString);
+}
+
+// virtual
+bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
+{
+	const std::string command_name = userdata.asString();
+
+	if (command_name == "save_outfit")
+	{
+		bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked();
+		bool outfit_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty();
+		// allow save only if outfit isn't locked and is dirty
+		return !outfit_locked && outfit_dirty;
+	}
+	return false;
+}
+
+// virtual
+void LLPanelWearing::showGearMenu(LLView* spawning_view)
+{
+	if (!mGearMenu) return;
+	mGearMenu->show(spawning_view);
+}
+
+boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)
+{
+	if (!mCOFItemsList) return boost::signals2::connection();
+
+	return mCOFItemsList->setCommitCallback(cb);
+}
+
+void LLPanelWearing::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
+{
+	LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(ctrl);
+	if (!list) return;
+
+	uuid_vec_t selected_uuids;
+
+	list->getSelectedUUIDs(selected_uuids);
+
+	mContextMenu->show(ctrl, selected_uuids, x, y);
+}
+
+// EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
new file mode 100644
index 0000000000000000000000000000000000000000..1573990d1310b2575408315ffd4fd83f1ac55ff0
--- /dev/null
+++ b/indra/newview/llpanelwearing.h
@@ -0,0 +1,81 @@
+/**
+ * @file llpanelwearing.h
+ * @brief List of agent's worn items.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELWEARING_H
+#define LL_LLPANELWEARING_H
+
+#include "llpanel.h"
+
+// newview
+#include "llpanelappearancetab.h"
+
+class LLInventoryCategoriesObserver;
+class LLListContextMenu;
+class LLWearableItemsList;
+class LLWearingGearMenu;
+
+/**
+ * @class LLPanelWearing
+ *
+ * A list of agents's currently worn items represented by
+ * a flat list view.
+ * Starts fetching necessary inventory content on first opening.
+ */
+class LLPanelWearing : public LLPanelAppearanceTab
+{
+public:
+	LLPanelWearing();
+	virtual ~LLPanelWearing();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void onOpen(const LLSD& info);
+
+	/*virtual*/ void setFilterSubString(const std::string& string);
+
+	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
+
+	/*virtual*/ void showGearMenu(LLView* spawning_view);
+
+	boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
+
+private:
+	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);
+
+	LLInventoryCategoriesObserver* 	mCategoriesObserver;
+	LLWearableItemsList* 			mCOFItemsList;
+	LLWearingGearMenu*				mGearMenu;
+	LLListContextMenu*				mContextMenu;
+
+	bool							mIsInitialized;
+};
+
+#endif //LL_LLPANELWEARING_H
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index ff315d3c53c13db0de0f3ff6390f76c75c809ba8..a7b4873feddd1f04b4c731d02d9e3298ffe3784c 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -876,6 +876,7 @@ void LLPreviewGesture::onLoadComplete(LLVFS *vfs,
 
 				self->mDirty = FALSE;
 				self->refresh();
+				self->refreshFromItem(); // to update description and title
 			}
 			else
 			{
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 0d1be91125483d0cdba45fc39db6e5f8ac997995..ea5796d7660ee32110ce4996ff510b3e4ff623f2 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -390,8 +390,8 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
 				return;
 		}
 
-		std::string look_name = gAgentWearables.isCOFChangeInProgress() ? "" : getString("No Outfit");
-		mCurrentLookName->setText(look_name);
+		std::string string_name = gAgentWearables.isCOFChangeInProgress() ? "Changing outfits" : "No Outfit";
+		mCurrentLookName->setText(getString(string_name));
 		mOpenOutfitBtn->setEnabled(FALSE);
 	}
 	else
@@ -475,6 +475,12 @@ void LLSidepanelAppearance::setWearablesLoading(bool val)
 {
 	childSetVisible("wearables_loading_indicator", val);
 	childSetVisible("edit_outfit_btn", !val);
+
+	if (!val)
+	{
+		// refresh outfit name when COF is already changed.
+		refreshCurrentOutfitName();
+	}
 }
 
 void LLSidepanelAppearance::showDefaultSubpart()
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
index 032714cabfdde8bbd35098434d65d0140f5cdf0f..b9875f465a671d879f143ec4ac4eff896322b156 100644
--- a/indra/newview/lltoolfocus.cpp
+++ b/indra/newview/lltoolfocus.cpp
@@ -236,7 +236,6 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info)
 		gAgentCamera.setFocusOnAvatar(FALSE, FALSE);
 		
 		LLVector3d cam_pos = gAgentCamera.getCameraPositionGlobal();
-		cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgentCamera.calcCustomizeAvatarUIOffset( cam_pos ));
 
 		gAgentCamera.setCameraPosAndFocusGlobal( cam_pos, pick_info.mPosGlobal, pick_info.mObjectID);
 	}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 4ef166fb71debcf2da9788e6b1fea42e3290a426..3dce4ce0bc5a5bbe9fb29c6a5f6e0ffe38b6d2d5 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3201,7 +3201,10 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
 		visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE;
 	}
 
-	if (!visible)
+	// don't early out for your own avatar, as we rely on your animations playing reliably
+	// for example, the "turn around" animation when entering customize avatar needs to trigger
+	// even when your avatar is offscreen
+	if (!visible && !isSelf())
 	{
 		updateMotions(LLCharacter::HIDDEN_UPDATE);
 		return FALSE;
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 832d4a2fe6aadfdd450311bf9a343a8b99974266..da15b936978ddcd07fc516c9f567dfe9690ebfaf 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -95,19 +95,22 @@ LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item)
 //////////////////////////////////////////////////////////////////////////
 
 // static
-LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryItem* item)
+LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryItem* item,
+															 bool worn_indication_enabled)
 {
 	LLPanelWearableOutfitItem* list_item = NULL;
 	if (item)
 	{
-		list_item = new LLPanelWearableOutfitItem(item);
+		list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled);
 		list_item->init();
 	}
 	return list_item;
 }
 
-LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item)
+LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
+													 bool worn_indication_enabled)
 : LLPanelInventoryListItemBase(item)
+, mWornIndicationEnabled(worn_indication_enabled)
 {
 }
 
@@ -117,7 +120,7 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name,
 {
 	std::string search_label = name;
 
-	if (get_is_item_worn(mInventoryItemUUID))
+	if (mWornIndicationEnabled && get_is_item_worn(mInventoryItemUUID))
 	{
 		search_label += LLTrans::getString("worn");
 		item_state = IS_WORN;
@@ -444,6 +447,7 @@ static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_i
 
 LLWearableItemsList::Params::Params()
 :	standalone("standalone", true)
+,	worn_indication_enabled("worn_indication_enabled", true)
 {}
 
 LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
@@ -456,6 +460,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
 		// Use built-in context menu.
 		setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3));
 	}
+	mWornIndicationEnabled = p.worn_indication_enabled;
 }
 
 // virtual
@@ -471,7 +476,7 @@ void LLWearableItemsList::addNewItem(LLViewerInventoryItem* item, bool rearrange
 		llassert(item != NULL);
 	}
 
-	LLPanelWearableOutfitItem *list_item = LLPanelWearableOutfitItem::create(item);
+	LLPanelWearableOutfitItem *list_item = LLPanelWearableOutfitItem::create(item, mWornIndicationEnabled);
 	if (!list_item)
 		return;
 
@@ -657,7 +662,7 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
 	setMenuItemVisible(menu, "wear_add",			mask == MASK_CLOTHING && n_worn == 0);
 	setMenuItemEnabled(menu, "wear_add",			n_items == 1 && canAddWearable(ids.front()));
 	setMenuItemVisible(menu, "wear",				n_worn == 0);
-	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART));
+	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items);
 	setMenuItemEnabled(menu, "edit",				n_editable == 1 && n_worn == 1 && n_items == 1);
 	setMenuItemVisible(menu, "create_new",			mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1);
 	setMenuItemVisible(menu, "show_original",		!standalone);
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index 2bfb90e3ec506101da22eab60159a60f747cebf9..eb82418454dff78671eb9df1a42b7be8465378f1 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -82,7 +82,8 @@ class LLPanelWearableOutfitItem : public LLPanelInventoryListItemBase
 {
 	LOG_CLASS(LLPanelWearableOutfitItem);
 public:
-	static LLPanelWearableOutfitItem* create(LLViewerInventoryItem* item);
+	static LLPanelWearableOutfitItem* create(LLViewerInventoryItem* item,
+											 bool worn_indication_enabled);
 
 	/**
 	 * Updates item name and (worn) suffix.
@@ -91,7 +92,11 @@ class LLPanelWearableOutfitItem : public LLPanelInventoryListItemBase
 								EItemState item_state = IS_DEFAULT);
 
 protected:
-	LLPanelWearableOutfitItem(LLViewerInventoryItem* item);
+	LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
+							  bool worn_indication_enabled);
+
+private:
+	bool	mWornIndicationEnabled;
 };
 
 class LLPanelDeletableWearableListItem : public LLPanelWearableListItem
@@ -352,6 +357,7 @@ class LLWearableItemsList : public LLInventoryItemsList
 	struct Params : public LLInitParam::Block<Params, LLInventoryItemsList::Params>
 	{
 		Optional<bool> standalone;
+		Optional<bool> worn_indication_enabled;
 
 		Params();
 	};
@@ -377,6 +383,7 @@ class LLWearableItemsList : public LLInventoryItemsList
 	void onRightClick(S32 x, S32 y);
 
 	bool mIsStandalone;
+	bool mWornIndicationEnabled;
 };
 
 #endif //LL_LLWEARABLEITEMSLIST_H
diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png
index d7e0001dc6e1d33c731d25816971661114d38b41..9d091fed44fadaa9867e69821a4e381a481064e5 100644
Binary files a/indra/newview/skins/default/textures/icons/Shop.png and b/indra/newview/skins/default/textures/icons/Shop.png differ
diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml
index 37e3307960e5fb9e0cfb7be35f09127d0abdb4a1..a1b98ec4ce9a25b5e71c6e834550690aa1e45854 100644
--- a/indra/newview/skins/default/xui/da/floater_camera.xml
+++ b/indra/newview/skins/default/xui/da/floater_camera.xml
@@ -9,35 +9,28 @@
 	<floater.string name="move_tooltip">
 		Flyt kamera op og ned, til venstre og højre
 	</floater.string>
-	<floater.string name="orbit_mode_title">
-		Kredsløb
+	<floater.string name="camera_modes_title">
+		Kamera valg
 	</floater.string>
 	<floater.string name="pan_mode_title">
-		Panorér
+		Kredsløb zoom panorering
 	</floater.string>
-	<floater.string name="avatar_view_mode_title">
+	<floater.string name="presets_mode_title">
 		Forvalg
 	</floater.string>
 	<floater.string name="free_mode_title">
 		Se objekt
 	</floater.string>
 	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, til venstre og højre"/>
 		<panel name="zoom" tool_tip="Zoom kamera mod fokus">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera kredser rundt om fokus"/>
 			<slider_bar name="zoom_slider" tool_tip="Zoom kamera mod fokus"/>
-		</panel>
-		<joystick_rotate name="cam_rotate_stick" tool_tip="Kreds kamera omkring fokus"/>
-		<panel name="camera_presets">
-			<button name="rear_view" tool_tip="Se bagfra"/>
-			<button name="group_view" tool_tip="Se som gruppe"/>
-			<button name="front_view" tool_tip="Se forfra"/>
-			<button name="mouselook_view" tool_tip="Førsteperson"/>
+			<joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, venstre og højre"/>
 		</panel>
 	</panel>
 	<panel name="buttons">
-		<button label="" name="orbit_btn" tool_tip="Rotér kamera"/>
-		<button label="" name="pan_btn" tool_tip="Panorér kamera"/>
-		<button label="" name="avatarview_btn" tool_tip="Forvalg"/>
-		<button label="" name="freecamera_btn" tool_tip="Se objekt"/>
+		<button label="" name="presets_btn" tool_tip="Forvalg"/>
+		<button label="" name="pan_btn" tool_tip="Kredsløb zoom panorering"/>
+		<button label="" name="avatarview_btn" tool_tip="Kamera valg"/>
 	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
index 2349174db29791fbc6a6252894977a8a1efb0af8..7a3c3e466abdfb603c57ddb3a556cfafc1a0d4a2 100644
--- a/indra/newview/skins/default/xui/da/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
@@ -16,7 +16,13 @@
 		har sluttet sig til stemme chat opkald med en konference chat.
 	</floater.string>
 	<floater.string name="VoiceInviteGroup">
-		deltager nu i Stemme chat opkald med denne gruppe [GROUP].
+		netop tilsuttet stemme kanal for &apos;[GROUP]&apos;.
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionGroup">
+		Ønsker du at forlade [CURRENT_CHAT] og tilsutte dig kald med &apos;[GROUP]&apos;?
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionDefault">
+		Ønsker du at forlade [CURRENT_CHAT] og tilslutte dig denne stemmechat?
 	</floater.string>
 	<text name="question">
 		Ønsker du at forlade [CURRENT_CHAT] og slutte dig til denne stemme chat?
diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml
index 7f7fb8ddf0b88f3aceb83de63bd3e133e985f621..a62bd607577339e9f4dd1468e0e3fc3cc0692fc5 100644
--- a/indra/newview/skins/default/xui/da/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml
@@ -5,12 +5,19 @@
 	</floater.string>
 	<button label="Tag nyt foto" name="new_snapshot_btn"/>
 	<line_editor label="Beskrivelse" name="description"/>
-	<button label="Del foto" name="share"/>
-	<button label="Del på internettet" name="share_to_web"/>
-	<button label="Gem til beholdning" name="save_to_inventory"/>
-	<button label="Gem foto" name="save"/>
-	<button label="Email foto" name="share_to_email"/>
-	<button label="Gem på computer" name="save_to_computer"/>
-	<button label="Sæt som profil billede" name="set_profile_pic"/>
-	<button label="Tilbage" name="cancel"/>
+	<panel name="panel_snapshot_main">
+		<button label="Del foto" name="share"/>
+		<button label="Gem foto" name="save"/>
+		<button label="Sæt til profilbillede" name="set_profile_pic"/>
+	</panel>
+	<panel name="panel_snapshot_share">
+		<button label="Del på internettet" name="share_to_web"/>
+		<button label="E-mail foto" name="share_to_email"/>
+		<button label="Tilbage" name="cancel_share"/>
+	</panel>
+	<panel name="panel_snapshot_save">
+		<button label="Gem til min beholdning" name="save_to_inventory"/>
+		<button label="Gem til min computer" name="save_to_computer"/>
+		<button label="Tilbage" name="cancel_save"/>
+	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
index 05e9eb6cdd8552e4d86fcd3c519db3e543a819e0..2e59dfd649e9d6f6c4f0e09ea1640800a08b251f 100644
--- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
@@ -19,8 +19,10 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Min avatar:"/>
 		</layout_panel>
-		<layout_panel name="leave_call_btn_panel">
-			<button label="Forlad opkald" name="leave_call_btn"/>
-		</layout_panel>
+		<layout_stack name="voice_effect_and_leave_call_stack">
+			<layout_panel name="leave_call_btn_panel">
+				<button label="Forlad opkald" name="leave_call_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_voice_effect.xml b/indra/newview/skins/default/xui/da/floater_voice_effect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..543224c6f68af121071d28109a1e896fb04765b5
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Steder" name="voice_effects" title="SE STEMME &quot;MORPH&quot;">
+	<string name="no_voice_effect">
+		(Ingen stemme &quot;morph&quot;)
+	</string>
+	<string name="active_voice_effect">
+		(Aktiv)
+	</string>
+	<string name="unsubscribed_voice_effect">
+		(Ikke aktiveret)
+	</string>
+	<string name="new_voice_effect">
+		(Ny!)
+	</string>
+	<text name="status_text">
+		For at se stemme &quot;morph&quot; effekter, skal du klikke på &quot;optag&quot; kanppen for at optage en stump stemme, derefter klik på en stemme &quot;morph&quot; på listen for at høre hvordan det vil lyde.
+
+For at vende tilbage til lokal stemme-chat luk dette vindue.
+	</text>
+	<button label="Optage prøve" name="record_btn" tool_tip="Optag en stemmeprøve."/>
+	<button label="Stop" name="record_stop_btn"/>
+	<text name="voice_morphing_link">
+		[[URL] Hent stemme &quot;morph&quot;]
+	</text>
+	<scroll_list name="voice_effect_list" tool_tip="Optag en prøve med din stemme og klik på en effekt for at teste.">
+		<scroll_list.columns label="Stemme &quot;morph&quot;" name="name"/>
+		<scroll_list.columns label="Udløber" name="expires"/>
+	</scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/inspect_object.xml b/indra/newview/skins/default/xui/da/inspect_object.xml
index 8cbcf6cac832662db79f854ed381cfd48519d9cc..78ccc5b8699c3a7aa8b96354f0c81c251958e0f8 100644
--- a/indra/newview/skins/default/xui/da/inspect_object.xml
+++ b/indra/newview/skins/default/xui/da/inspect_object.xml
@@ -8,8 +8,8 @@
 		Af [CREATOR]
 	</string>
 	<string name="CreatorAndOwner">
-		af [CREATOR]
-ejer [OWNER]
+		Af [CREATOR]
+Owner [OWNER]
 	</string>
 	<string name="Price">
 		L$[AMOUNT]
@@ -23,6 +23,13 @@ ejer [OWNER]
 	<string name="Sit">
 		Sid
 	</string>
+	<text name="object_name" value="Test objekt navn der reelt er to linier og meget lang"/>
+	<text name="price_text">
+		L$30,000
+	</text>
+	<text name="object_description">
+		Dette er en meget lang beskrivelse af et objekt udformet så den fylder mindst 80 karakterer i længden eller endda nærmere 120 på dette sted. Man kan aldrig vide....
+	</text>
 	<button label="Køb" name="buy_btn"/>
 	<button label="Betal" name="pay_btn"/>
 	<button label="Tag kopi" name="take_free_copy_btn"/>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_attachment.xml b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9d7fc0f2239d0c679c0d58a467b57fb1ec212a04
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Tag af" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_body_part.xml b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0e90d5a3aebdbe0cf1d34a520f4f5b3e9fc14d19
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Erstat" name="replace"/>
+	<menu_item_call label="Redigér" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_clothing.xml b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml
new file mode 100644
index 0000000000000000000000000000000000000000..73d97cd167754c4a9a41830d8c3e583d5aa942ef
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Tag af" name="take_off"/>
+	<menu_item_call label="Flyt et lag op" name="move_up"/>
+	<menu_item_call label="Flyt et lag ned" name="move_down"/>
+	<menu_item_call label="Redigér" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_gear.xml b/indra/newview/skins/default/xui/da/menu_cof_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f44369fd843e6d68eb582d5aa712b22e31cc3c29
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Nyt tøj" name="COF.Gear.New_Clothes"/>
+	<menu label="Nye kropsdele" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml
index 45276adda408ad2b59a70064296c0e34d5aee005..d96a8a8a17e2f95a13d5bed11c12c86482c3a990 100644
--- a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
 <menu name="hide_navbar_menu">
 	<menu_item_check label="Vis navigationsbjælke" name="ShowNavbarNavigationPanel"/>
 	<menu_item_check label="Vis favoritbjælke" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Vis min lokation bjælke" name="ShowMiniLocationPanel"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml
index ff70ec788663dc7e3fdceff928ef73082bf6c8f1..2eafeb3fcc29b6334d318049c87a6bd51a65f1d5 100644
--- a/indra/newview/skins/default/xui/da/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/da/menu_inventory.xml
@@ -78,6 +78,7 @@
 	<menu label="Vedhæft til HUD" name="Attach To HUD"/>
 	<menu_item_call label="Redigér" name="Wearable Edit"/>
 	<menu_item_call label="Tag på" name="Wearable Wear"/>
+	<menu_item_call label="Tilføj" name="Wearable Add"/>
 	<menu_item_call label="Tag af" name="Take Off"/>
 	<menu_item_call label="--ingen valg--" name="--no options--"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/da/menu_outfit_gear.xml b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3ed0df904158b89f21a131632e56b6f9e2182ad3
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Tag på - Erstat nuværende sæt" name="wear"/>
+	<menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/>
+	<menu label="Nyt tøj" name="New Clothes">
+		<menu_item_call label="Ny trøje" name="New Shirt"/>
+		<menu_item_call label="Nye bukser" name="New Pants"/>
+		<menu_item_call label="Nye sko" name="New Shoes"/>
+		<menu_item_call label="Nye strømper" name="New Socks"/>
+		<menu_item_call label="Ny jakke" name="New Jacket"/>
+		<menu_item_call label="Ny nederdel" name="New Skirt"/>
+		<menu_item_call label="Nye handsker" name="New Gloves"/>
+		<menu_item_call label="Ny undertrøje" name="New Undershirt"/>
+		<menu_item_call label="Nye underbukser" name="New Underpants"/>
+		<menu_item_call label="Ny alpha" name="New Alpha"/>
+		<menu_item_call label="Ny tatovering" name="New Tattoo"/>
+	</menu>
+	<menu label="Nye kropsdele" name="New Body Parts">
+		<menu_item_call label="Ny figur" name="New Shape"/>
+		<menu_item_call label="Nyt hud" name="New Skin"/>
+		<menu_item_call label="Nyt hår" name="New Hair"/>
+		<menu_item_call label="Nye øjne" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Omdøb sæt" name="rename"/>
+	<menu_item_call label="Slet sæt" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_outfit_tab.xml b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35bb1ae68525e86ff631e0df83269789aba33dad
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Tag på - Erstat nuværende sæt" name="wear_replace"/>
+	<menu_item_call label="Tag på - Tilføj til nuværende sæt" name="wear_add"/>
+	<menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/>
+	<menu_item_call label="Redigér sæt" name="edit"/>
+	<menu_item_call label="Omdøb" name="rename"/>
+	<menu_item_call label="Slet sæt" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_save_outfit.xml b/indra/newview/skins/default/xui/da/menu_save_outfit.xml
index 3d89715ea83362967fe2a68b24ac157dd0612e31..188229b58684921babd8529880ac1fe7fad0da74 100644
--- a/indra/newview/skins/default/xui/da/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/da/menu_save_outfit.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="save_outfit_menu">
 	<menu_item_call label="Gem" name="save_outfit"/>
-	<menu_item_call label="Gem som ny" name="save_as_new_outfit"/>
+	<menu_item_call label="Gem som" name="save_as_new_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index a061292eb0f2da9f33ace4555d1f09d3e7c85d0e..6449a00f2fdff5c9d728068cc6a5819cb10c38ae 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -9,6 +9,7 @@
 		<menu_item_check label="Beholdning" name="Inventory"/>
 		<menu_item_check label="Min beholdning" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Mine bevægelser" name="Gestures"/>
+		<menu_item_check label="Min stemme" name="ShowVoice"/>
 		<menu label="Min status" name="Status">
 			<menu_item_call label="Væk" name="Set Away"/>
 			<menu_item_call label="Optaget" name="Set Busy"/>
@@ -68,6 +69,12 @@
 		<menu_item_call label="Sammenkæd" name="Link"/>
 		<menu_item_call label="Adskil" name="Unlink"/>
 		<menu_item_check label="Redigér sammekædede objekter" name="Edit Linked Parts"/>
+		<menu label="Vis lænkede dele" name="Select Linked Parts">
+			<menu_item_call label="Vælg næste del" name="Select Next Part"/>
+			<menu_item_call label="Vælg forrige del" name="Select Previous Part"/>
+			<menu_item_call label="Inkludér næste del" name="Include Next Part"/>
+			<menu_item_call label="Inkludér forrige del" name="Include Previous Part"/>
+		</menu>
 		<menu_item_call label="Fokusér på valgte" name="Focus on Selection"/>
 		<menu_item_call label="Zoom til valgte" name="Zoom to Selection"/>
 		<menu label="Objekt" name="Object">
@@ -98,11 +105,11 @@
 			<menu_item_call label="Benyt valgte som grundlag for gitter" name="Use Selection for Grid"/>
 			<menu_item_call label="Gitter indstillinger" name="Grid Options"/>
 		</menu>
-		<menu label="Vis lænkede dele" name="Select Linked Parts">
-			<menu_item_call label="Vælg næste del" name="Select Next Part"/>
-			<menu_item_call label="Vælg forrige del" name="Select Previous Part"/>
-			<menu_item_call label="Inkludér næste del" name="Include Next Part"/>
-			<menu_item_call label="Inkludér forrige del" name="Include Previous Part"/>
+		<menu label="Send" name="Upload">
+			<menu_item_call label="Billede (L$[COST])..." name="Upload Image"/>
+			<menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/>
+			<menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/>
+			<menu_item_call label="Mange (L$[COST] pr. fil)..." name="Bulk Upload"/>
 		</menu>
 	</menu>
 	<menu label="Hjælp" name="Help">
diff --git a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ec5e50e5b267dee3664c4f2488d09449ce91559
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Tag på" name="wear"/>
+	<menu_item_call label="Tilføj" name="wear_add"/>
+	<menu_item_call label="Tag af" name="take_off_or_detach"/>
+	<menu_item_call label="Tag af" name="detach"/>
+	<context_menu label="Vedhæft til  ▶" name="wearable_attach_to"/>
+	<context_menu label="Vedhæft på HUD  ▶" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Tag af" name="take_off"/>
+	<menu_item_call label="Redigér" name="edit"/>
+	<menu_item_call label="Objekt profil" name="object_profile"/>
+	<menu_item_call label="Vis original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 72a1ab6a29b403f79b560d5d277a10f25b225d3f..76cf73e1e6419d0107a89f3dec22fc306b11a72a 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -267,6 +267,11 @@ Dette skyldes ofte nyt hardware som endnu ikke er blevet testet med [APP_NAME].
 Grafik kvaliteten sættes til &apos;lav&apos; for at undgå typiske problemer med drivere. Dette vil slå visse grafik funktioner fra.
 Vi anbefaler at opdatere driverne til dit grafikkort.
 Grafik kvaliteten kan forbedres i indstillinger &gt; Grafik.
+	</notification>
+	<notification name="CannotCopyWarning">
+		Du har ikke rettigheder til at kopiere følgende genstande:
+[ITEMS]
+og du vil miste dem fra din beholdning hvis du forærer dem væk. Er du sikker på at du vil tilbyde disse genstande?
 	</notification>
 	<notification name="CannotGiveCategory">
 		Du har ikke tilladelse til at videreføre den valgte mappe.
@@ -412,6 +417,26 @@ Tilbyd venskab til [NAME]?
 			<button name="Cancel" text="Annullér"/>
 		</form>
 	</notification>
+	<notification label="Gem" name="SaveWearableAs">
+		Gem genstand til beholdning som:
+		<form name="form">
+			<input name="message">
+				[DESC] (ny)
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annullér"/>
+		</form>
+	</notification>
+	<notification label="Omdøb sæt" name="RenameOutfit">
+		Nyt navn til sæt:
+		<form name="form">
+			<input name="new_name">
+				[NAME]
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annullér"/>
+		</form>
+	</notification>
 	<notification name="ConfirmItemDeleteHasLinks">
 		Mindst en af genstandene har lænkede genstande der peger på den. Hvis du sletter denne genstand, vil lænkninger ikke virke mere.  Det anbefales kraftigt at fjerne lænkninger først.
 
@@ -677,9 +702,9 @@ GÃ¥ til &apos;Knowledge Base&apos; for mere information om indholdsratings.
 		Du har ikke adgang til denne region på grund af din valgte indholdsrating.
 	</notification>
 	<notification name="RegionEntryAccessBlocked_Change">
-		Du har ikke adgang til den region, da din indholdsrating ikke tillader dette.
+		Du har ikke adgang til denne region på grund af din opsætning af indholdsrating.
 
-Klik på &quot;Ændre præference&quot; for at forhøje din indholdsrating for direkte adgang nu. Ved at gøre dette vil du få lov til at søge og få adgang til [REGIONMATURITY] indhold. Hvis du ønsker at ændre denne opsætning senere, kan du gøre dette fra Mig &gt; Indstillinger &gt; Generelt.
+For at få adgang til den ønskede region skal du ændre din indholdsrating. Dette vil give dig ret til at søge og får tilgang til indhold af typen [REGIONMATURITY]. For at omgøre ændringer gå til Mig &gt; Indstillinger &gt; Generelt.
 		<form name="form">
 			<button name="OK" text="Ændre indstillinger"/>
 			<button name="Cancel" text="Luk"/>
@@ -1460,6 +1485,21 @@ Klik på Acceptér for at deltage eller Afvis for at afvise invitationen. Klik p
 	<notification name="VoiceLoginRetry">
 		Vi laver en stemmekanal til dig. Det kan tage op til et minut.
 	</notification>
+	<notification name="VoiceEffectsExpired">
+		En eller flere af dine stemme &quot;morphs&quot; er udløbet.
+[[URL] Click here] for at forny dit abbonnement.
+	</notification>
+	<notification name="VoiceEffectsExpiredInUse">
+		Den aktive stemme &quot;morph&quot; er udløbet og din normale stemme opsætning er genaktiveret.
+[[URL] Click here] for at forny dit abbonnement.
+	</notification>
+	<notification name="VoiceEffectsWillExpire">
+		En eller flere af dine stemme &quot;morphs&quot; vil udløbe om mindre end [INTERVAL] dage.
+[[URL] Click here] for at forny dit abbonnement.
+	</notification>
+	<notification name="VoiceEffectsNew">
+		Nye stemme &quot;morphs&quot; er tilgængelige!
+	</notification>
 	<notification name="Cannot enter parcel: not a group member">
 		Kun medlemmer af en bestemt gruppe kan besøge dette område.
 	</notification>
@@ -1526,18 +1566,36 @@ De vil blive blokeret nogle få sekunder af sikkerhedsmæssige årsager.
 Knappen vil blive vist når der er nok plads til den.
 	</notification>
 	<notification name="ShareNotification">
-		Træk genstande fra beholdning til en person i beboer vælgeren
+		Vælg beboere at dele med.
+	</notification>
+	<notification name="ShareItemsConfirmation">
+		Er du sikker på at du vil dele følgende genstande:
+
+[ITEMS]
+
+Med følgende beboere:
+
+[RESIDENTS]
+		<usetemplate name="okcancelbuttons" notext="Annullér" yestext="Ok"/>
+	</notification>
+	<notification name="ItemsShared">
+		Genstande er nu delt.
 	</notification>
 	<notification name="DeedToGroupFail">
 		Dedikering til gruppe fejlede.
 	</notification>
 	<notification name="AvatarRezNotification">
 		( [EXISTENCE] sekunder i live )
-Avatar &apos;[NAME]&apos; declouded in [TIME] seconds.
+Avatar &apos;[NAME]&apos; var ikke sky mere, efter [TIME] sekunder.
 	</notification>
-	<notification name="AvatarRezSelfNotification">
-		( [EXISTENCE] sekunder i live )
-Du afsluttede klargøring af dit sæt på [TIME] sekunder.
+	<notification name="AvatarRezSelfBakedDoneNotification">
+		( [EXISTENCE] seconds alive )
+Du blev færdig med at fremvise dit sæt efter [TIME] sekunder.
+	</notification>
+	<notification name="AvatarRezSelfBakedUpdateNotification">
+		( [EXISTENCE] seconds alive )
+Du sendte en opdatering af dit udseende efter [TIME] sekunder.
+[STATUS]
 	</notification>
 	<notification name="AvatarRezCloudNotification">
 		( [EXISTENCE] sekunder i live )
@@ -1559,9 +1617,31 @@ Avatar &apos;[NAME]&apos; skiftede til udseende modus.
 		( [EXISTENCE] sekunder i live )
 Avatar &apos;[NAME]&apos; har forladt udseende modus.
 	</notification>
+	<notification name="NoConnect">
+		Vi har problemer med at oprette forbindelse via [PROTOCOL] [HOSTID].
+Check venligst din netværks- og firewallsetup.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
+	<notification name="NoVoiceConnect">
+		Vi har problemer med at oprette forbindelse til din stemme server:
+
+[HOSTID]
+
+Stemme kommunikation vil ikke være tilgængelig.
+Check venligst din netværks- og firewall setup.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
 	<notification name="AvatarRezLeftNotification">
 		( [EXISTENCE] sekunder i live )
 Avatar &apos;[NAME]&apos; forsvandt helt &quot;uploaded&quot;.
+	</notification>
+	<notification name="AvatarRezSelfBakeNotification">
+		( [EXISTENCE] seconds alive )
+Du sendte en [RESOLUTION] tekstur til &apos;[BODYREGION]&apos; efter [TIME] sekunder.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Er du sikker på at du vil forlade dette opkald?
@@ -1574,7 +1654,7 @@ vil have lyden slukket - selv efter de har forladt kaldet.
 
 
 Sluk for alles lyd?
-		<usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="OK" yestext="Annullér"/>
+		<usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="Annullér" yestext="Ok"/>
 	</notification>
 	<global name="UnsupportedGLRequirements">
 		Det ser ikke ud til at din hardware opfylder minimumskravene til [APP_NAME]. [APP_NAME] kræver et OpenGL grafikkort som understøter &apos;multitexture&apos;. Check eventuelt om du har de nyeste drivere for grafikkortet, og de nyeste service-packs og patches til dit operativsystem.
diff --git a/indra/newview/skins/default/xui/da/panel_edit_shape.xml b/indra/newview/skins/default/xui/da/panel_edit_shape.xml
index 4360fe35f5edc36966be08b11745c7c527978f03..7c1ffe5cfadca7722c5afa529ba27279e3bf00c4 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_shape.xml
@@ -1,8 +1,15 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="edit_shape_panel">
-	<text name="avatar_height">
-		[HEIGHT] meter høj
-	</text>
+	<string name="meters">
+		Meter
+	</string>
+	<string name="feet">
+		Fod
+	</string>
+	<string name="height">
+		Højde:
+	</string>
+	<text name="avatar_height"/>
 	<panel label="Trøje" name="accordion_panel">
 		<accordion name="wearable_accordion">
 			<accordion_tab name="shape_body_tab" title="Krop"/>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
index 8e6990fe31cde76fb74b1c11711a1e8dd7ee76e7..f927f918a18c14daadfa5a6da6cd45b5bab5c7d9 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
@@ -72,7 +72,7 @@
 	<string name="jacket_desc_text">
 		Jakke:
 	</string>
-	<string name="skirt_skirt_desc_text">
+	<string name="skirt_desc_text">
 		Nederdel:
 	</string>
 	<string name="gloves_desc_text">
@@ -100,11 +100,6 @@
 		<icon name="male_icon" tool_tip="Mandlig"/>
 		<icon name="female_icon" tool_tip="Kvindelig"/>
 	</panel>
-	<panel label="gear_buttom_panel" name="gear_buttom_panel">
-		<button name="friends_viewsort_btn" tool_tip="Valg"/>
-		<button name="add_btn" tool_tip="TODO"/>
-		<button name="del_btn" tool_tip="TODO"/>
-	</panel>
 	<panel name="button_panel">
 		<button label="Gem som" name="save_as_button"/>
 		<button label="Vend tilbage" name="revert_button"/>
diff --git a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
index 9aa9fd14cc1f18a6f4547f59902238e396150d67..a02c9ba399d6609e9d3117aeeb4113e5d6a80de5 100644
--- a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
 	<string name="Filter.All" value="Alle"/>
 	<string name="Filter.Clothes/Body" value="Tøj/Krop"/>
 	<string name="Filter.Objects" value="Objekter"/>
-	<button label="redigér" name="edit_wearable_btn"/>
+	<string name="Filter.Custom" value="Tilpasset filter"/>
 	<text name="title" value="Redigér sæt"/>
 	<panel label="bottom_panel" name="header_panel">
 		<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
 	</panel>
 	<layout_stack name="im_panels">
 		<layout_panel label="IM kontrolpanel" name="outfit_wearables_panel">
-			<panel label="bottom_panel" name="edit_panel"/>
-		</layout_panel>
-		<layout_panel name="add_wearables_panel">
-			<text name="add_to_outfit_label" value="Tilføj til sæt:"/>
 			<layout_stack name="filter_panels">
-				<layout_panel label="IM kontrolpanel" name="filter_panel">
-					<filter_editor label="Filter" name="look_item_filter"/>
+				<layout_panel name="add_button_and_combobox">
+					<button label="Tilføj mere..." name="show_add_wearables_btn"/>
+				</layout_panel>
+				<layout_panel name="filter_panel">
+					<filter_editor label="Filtrér tøj i beholdning" name="look_item_filter"/>
 				</layout_panel>
 			</layout_stack>
-			<panel label="add_wearables_button_bar" name="add_wearables_button_bar">
-				<button label="F" name="folder_view_btn"/>
-				<button label="L" name="list_view_btn"/>
-			</panel>
 		</layout_panel>
+		<layout_panel name="add_wearables_panel"/>
 	</layout_stack>
 	<panel name="save_revert_button_bar">
 		<button label="Gem" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
index 681701aba22234932a73d46d0f884dc6fe7c582a..4bc9ff99a91212526b02487606955d0366ff0a81 100644
--- a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
 	<panel name="bottom_panel">
 		<button name="options_gear_btn" tool_tip="Vis flere muligheder"/>
 		<dnd_button name="trash_btn" tool_tip="Fjern valgte genstand"/>
-		<button label="Gem sæt" name="make_outfit_btn" tool_tip="Gem udseende som nyt sæt"/>
+		<button label="Gem som" name="save_btn"/>
 		<button label="Tag på" name="wear_btn" tool_tip="Tag valgte sæt på"/>
-		<button label="Redigér sæt" name="edit_current_outfit_btn"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
index c06176f9941188f99cf4aba7c36d3f3a6d1a72b5..ac15da1717abb7c5aad4c98d6de314846e0397d7 100644
--- a/indra/newview/skins/default/xui/da/panel_places.xml
+++ b/indra/newview/skins/default/xui/da/panel_places.xml
@@ -5,12 +5,12 @@
 	<filter_editor label="Filtrér mine steder" name="Filter"/>
 	<panel name="button_panel">
 		<button label="Teleportér" name="teleport_btn" tool_tip="Teleportér til det valgte område"/>
-		<button label="Kort" name="map_btn"/>
+		<button label="Kort" name="map_btn" tool_tip="Vis dette område på verdenskortet"/>
 		<button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/>
 		<button label="â–¼" name="overflow_btn" tool_tip="Vise flere valgmuligheder"/>
 		<button label="Gem" name="save_btn"/>
 		<button label="Annullér" name="cancel_btn"/>
 		<button label="Luk" name="close_btn"/>
-		<button label="Profil" name="profile_btn"/>
+		<button label="Profil" name="profile_btn" tool_tip="Vis profil for stedet"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
index 807d7939b89af399fb4e7d3232d05f14575c36c6..b267c75673a2c49aace3c7321234df1ca4e7206c 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
 	</text>
 	<check_box label="Byg/Redigér" name="edit_camera_movement" tool_tip="Benyt automatisk kamera positionering ved start og slut af editerings modus"/>
 	<check_box label="Udseende" name="appearance_camera_movement" tool_tip="Benyt automatisk kamera positionering ved redigering"/>
-	<check_box initial_value="1" label="Sidepanel" name="appearance_sidebar_positioning" tool_tip="Benyt automatisk positionering af kamera"/>
+	<check_box initial_value="sand" label="Sidepanel" name="appearance_sidebar_positioning" tool_tip="Benyt automatisk positionering af kamera"/>
 	<check_box label="Vis avatar i førsteperson" name="first_person_avatar_visible"/>
 	<check_box label="Piletaster bruges altid til bevægelse" name="arrow_keys_move_avatar_check"/>
 	<check_box label="Tast-tast-hold for at løbe" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml
index 08ffafd5a6e322f8ceb38ff202a0c6ce50f82818..8633f12d24ec75da42c5c5bf6d8a0cd7a4c6efb8 100644
--- a/indra/newview/skins/default/xui/da/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/da/panel_status_bar.xml
@@ -21,8 +21,10 @@
 	<panel.string name="buycurrencylabel">
 		L$ [AMT]
 	</panel.string>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Min balance"/>
-	<button label="Køb L$" name="buyL" tool_tip="Klik for at købe flere L$"/>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Min status" value="L$20"/>
+		<button label="KØB L$" name="buyL" tool_tip="Klik for at købe flere L$"/>
+	</panel>
 	<text name="TimeText" tool_tip="Nuværende tid (Pacific)">
 		24:00 PST
 	</text>
diff --git a/indra/newview/skins/default/xui/da/panel_voice_effect.xml b/indra/newview/skins/default/xui/da/panel_voice_effect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8800d2e12d14eab4c860f27bc665277b34f09175
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+	<string name="no_voice_effect">
+		Ingen stemme &quot;morph&quot;
+	</string>
+	<string name="preview_voice_effects">
+		Se stemme &quot;morph&quot;  â–¶
+	</string>
+	<string name="get_voice_effects">
+		Hente stemme &quot;morph&quot;  â–¶
+	</string>
+	<combo_box name="voice_effect" tool_tip="Vælg en stemme &quot;morph&quot; effekt for at ændre din stemme.">
+		<combo_box.item label="Ingen stemme &quot;morph&quot;" name="no_voice_effect"/>
+	</combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
index 767d74ca3fa5dc0063afff961453c50e8798338a..64ee3f04285e7ea3bc5a9fdbc1c911105a523aeb 100644
--- a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
 <panel label="Ting" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn"/>
-			<button label="Del" name="share_btn"/>
-			<button label="Køb ind" name="shop_btn"/>
-			<button label="Bær" name="wear_btn"/>
+			<button label="Profil" name="info_btn" tool_tip="Vis objekt profil"/>
+			<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
+			<button label="Køb ind" name="shop_btn" tool_tip="Åben hjemmeside for markedsplads"/>
+			<button label="Bær" name="wear_btn" tool_tip="Tag valgte sæt på"/>
 			<button label="Afspil" name="play_btn"/>
-			<button label="Teleportér" name="teleport_btn"/>
+			<button label="Teleportér" name="teleport_btn" tool_tip="Teleport til det valgte område"/>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 5ceb0612a8458b4732a472d31b5eb5a2fe99deb2..af0f685826620993554d7966f44a77c93b31460a 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -95,7 +95,7 @@
 		Et ugyldig hostnavn blev brugt for at få adgang til serveren. Check venligst din SLURL eller navnet på hosten.
 	</string>
 	<string name="CertExpired">
-		Certifikat returneret fra nettet ser ud til at være udløbet.  Check venligst din systemtid eller kontakt administratoren af dette net.
+		Det certifikat der blev returneret ser ud til at være udløbet. Check venligst din systemtid på computeren.
 	</string>
 	<string name="CertKeyUsage">
 		Det certifikat der blev returneret af serveren kan ikke benyttes til SSL.  Kontakt venligst administrator af dette net.
@@ -104,7 +104,7 @@
 		For mange certifikater i serverens certifikat streng.  Kontakt venligst administrator af dette net.
 	</string>
 	<string name="CertInvalidSignature">
-		Certifikat signaturen returneret på dette net kan ikke bekræftes.  Kontakt venligst administrator af dette net.
+		Signaturen på certifkat der blev returneret af Second Life serveren kunne ikke bekræftes.
 	</string>
 	<string name="LoginFailedNoNetwork">
 		Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse.
@@ -729,6 +729,12 @@
 	<string name="land_type_unknown">
 		(ukendt)
 	</string>
+	<string name="Estate / Full Region">
+		Estate / Hel region
+	</string>
+	<string name="Mainland / Full Region">
+		Mainland / Hel region
+	</string>
 	<string name="all_files">
 		Alle filer
 	</string>
@@ -873,6 +879,9 @@
 	<string name="NewWearable">
 		Ny [WEARABLE_ITEM]
 	</string>
+	<string name="CreateNewWearable">
+		Opret [WEARABLE_TYPE]
+	</string>
 	<string name="next">
 		Næste
 	</string>
@@ -3445,6 +3454,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 	<string name="session_initialization_timed_out_error">
 		Initialisering af session er &quot;timed out&quot;
 	</string>
+	<string name="voice_morphing_url">
+		http://secondlife.com/landing/voicemorphing
+	</string>
 	<string name="paid_you_ldollars">
 		[NAME] betalte dig L$[AMOUNT]
 	</string>
@@ -3615,16 +3627,16 @@ Krænkelsesanmeldelse
 	<string name="Male - Wow">
 		Mand - Wow
 	</string>
-	<string name="FeMale - Excuse me">
+	<string name="Female - Excuse me">
 		Kvinde - Undskyld mig
 	</string>
-	<string name="FeMale - Get lost">
+	<string name="Female - Get lost">
 		Kvinde - Skrid!
 	</string>
-	<string name="FeMale - Blow kiss">
+	<string name="Female - Blow kiss">
 		Kvinde - Pust et kys
 	</string>
-	<string name="FeMale - Boo">
+	<string name="Female - Boo">
 		Kvinde - Boo
 	</string>
 	<string name="Female - Bored">
@@ -3657,4 +3669,32 @@ Krænkelsesanmeldelse
 	<string name="texture_load_dimensions_error">
 		Kan ikke hente billeder større end  [WIDTH]*[HEIGHT]
 	</string>
+	<string name="words_separator" value=","/>
+	<string name="server_is_down">
+		Desværre er noget gået galt.
+
+	Check venligst status.secondlifegrid.net for at se om der skulle være driftsproblemer.
+	Hvis du bliver ved med at have problemer, check venligst din firewall- og netværksopsætning.
+	</string>
+	<string name="dateTimeWeekdaysNames">
+		Søndag:Mandag:Tirsdag:Onsdag:Torsdag:Fredag:Lørdag
+	</string>
+	<string name="dateTimeWeekdaysShortNames">
+		Søn:Man:Tir:Ons:Tor:Fre:Lør
+	</string>
+	<string name="dateTimeMonthNames">
+		Januar:Februar:Marts:April:Maj:Juni:Juli:August:September:Oktober:November:December
+	</string>
+	<string name="dateTimeMonthShortNames">
+		Jan:Feb:Mar:Apr:Maj:Jun:Jul:Aug:Sep:Okt:Nov:Dec
+	</string>
+	<string name="dateTimeDayFormat">
+		[MDAY]
+	</string>
+	<string name="dateTimeAM">
+		AM
+	</string>
+	<string name="dateTimePM">
+		PM
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
index 9c3151fe07f3166bda3c4184a525dc3c7066ee13..8c8bb29baf1061876b6ed7b8d8e259e9c9e6b393 100644
--- a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
+++ b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
@@ -8,6 +8,9 @@
      name="wear_replace">
         <on_click
          function="Outfit.WearReplace" />
+        <on_enable
+         function="Outfit.OnEnable"
+         parameter="wear_replace" />
         <on_visible
          function="Outfit.OnVisible"
          parameter="wear_replace" />
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..84431a2f6969ed5fc8effaab60478ad658bdd06d
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ layout="topleft"
+ name="Gear Wearing">
+    <menu_item_call
+     label="Edit Outfit"
+     layout="topleft"
+     name="edit">
+        <on_click
+         function="Gear.Edit" />
+    </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..85505f9972748c0dc4eff2c974ff7876ef3b15f4
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Wearing">
+    <menu_item_call
+     label="Edit Outfit"
+     layout="topleft"
+     name="edit">
+        <on_click
+         function="Wearing.Edit" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
index f016c27b0a8c34f6a7c7b6b501d592f2070d0f85..d2c8ab159f476422bb00cf07067dfd9282161ba4 100644
--- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
+++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
@@ -31,6 +31,7 @@
              item_pad="3"
              layout="topleft"
              left="0"
+             keep_selection_visible_on_reshape="true"
              multi_select="true"
              name="list_attachments"
              top="0"
@@ -45,6 +46,7 @@
              follows="all"
              height="10"
              item_pad="3"
+             keep_selection_visible_on_reshape="true"
              layout="topleft"
              left="0"
              multi_select="true"
@@ -61,6 +63,7 @@
              follows="all"
              height="10"
              item_pad="3"
+             keep_selection_visible_on_reshape="true"
              layout="topleft"
              left="0"
              multi_select="true"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index 1ab9f722d09714e9333098335dfa077c272192cb..fc1caca9e9ce6aa8769211b6223553264f1f5ce5 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -12,95 +12,125 @@
  top="0"
  width="333">
     <string
-     name="edit_shape_title"
-     value="Editing Shape" />
+     name="edit_shape_title">
+        Editing Shape
+    </string>
     <string
-     name="edit_skin_title"
-     value="Editing Skin" />
+     name="edit_skin_title">
+        Editing Skin
+    </string>
     <string
-     name="edit_hair_title"
-     value="Editing Hair" />
+     name="edit_hair_title">
+        Editing Hair
+    </string>
     <string
-     name="edit_eyes_title"
-     value="Editing Eyes" />
+     name="edit_eyes_title">
+        Editing Eyes
+    </string>
     <string
-     name="edit_shirt_title"
-     value="Editing Shirt" />
+     name="edit_shirt_title">
+        Editing Shirt
+    </string>
     <string
-     name="edit_pants_title"
-     value="Editing Pants" />
+     name="edit_pants_title">
+        Editing Pants
+    </string>
     <string
-     name="edit_shoes_title"
-     value="Editing Shoes" />
+     name="edit_shoes_title">
+        Editing Shoes
+    </string>
     <string
-     name="edit_socks_title"
-     value="Editing Socks" />
+     name="edit_socks_title">
+        Editing Socks
+    </string>
     <string
-     name="edit_jacket_title"
-     value="Editing Jacket" />
+     name="edit_jacket_title">
+        Editing Jacket
+    </string>
     <string
-     name="edit_skirt_title"
-     value="Editing Skirt" />
+     name="edit_skirt_title">
+        Editing Skirt
+    </string>
     <string
-     name="edit_gloves_title"
-     value="Editing Gloves" />
+     name="edit_gloves_title">
+        Editing Gloves
+    </string>
     <string
-     name="edit_undershirt_title"
-     value="Editing Undershirt" />
+     name="edit_undershirt_title">
+        Editing Undershirt
+    </string>
     <string
-     name="edit_underpants_title"
-     value="Editing Underpants" />
+     name="edit_underpants_title">
+        Editing Underpants
+    </string>
     <string
-     name="edit_alpha_title"
-     value="Editing Alpha Mask" />
+     name="edit_alpha_title">
+        Editing Alpha Mask
+    </string>
     <string
-     name="edit_tattoo_title"
-     value="Editing Tattoo" />
+     name="edit_tattoo_title">
+        Editing Tattoo
+    </string>
     <string
-     name="shape_desc_text"
-     value="Shape:" />
+     name="shape_desc_text">
+        Shape:
+    </string>
     <string
-     name="skin_desc_text"
-     value="Skin:" />
+     name="skin_desc_text">
+        Skin:
+    </string>
     <string
-     name="hair_desc_text"
-     value="Hair:" />
+     name="hair_desc_text">
+        Hair:
+    </string>
     <string
-     name="eyes_desc_text"
-     value="Eyes:" />
+     name="eyes_desc_text">
+        Eyes:
+    </string>
     <string
-     name="shirt_desc_text"
-     value="Shirt:" />
+     name="shirt_desc_text">
+        Shirt:
+    </string>
     <string
-     name="pants_desc_text"
-     value="Pants:" />
+     name="pants_desc_text">
+        Pants:
+    </string>
     <string
-     name="shoes_desc_text"
-     value="Shoes:" />
+     name="shoes_desc_text">
+        Shoes:
+    </string>
     <string
-     name="socks_desc_text"
-     value="Socks:" />
+    name="socks_desc_text">
+        Socks:
+    </string>
     <string
-     name="jacket_desc_text"
-     value="Jacket:" />
+     name="jacket_desc_text">
+        Jacket:
+    </string>
     <string
-     name="skirt_desc_text"
-     value="Skirt:" />
+     name="skirt_desc_text">
+        Skirt:
+    </string>
     <string
-     name="gloves_desc_text"
-     value="Gloves:" />
+    name="gloves_desc_text">
+        Gloves:
+    </string>
     <string
-     name="undershirt_desc_text"
-     value="Undershirt:" />
+     name="undershirt_desc_text">
+        Undershirt:
+    </string>
     <string
-     name="underpants_desc_text"
-     value="Underpants:" />
+     name="underpants_desc_text">
+        Underpants:
+    </string>
     <string
-     name="alpha_desc_text"
-     value="Alpha Mask:" />
+     name="alpha_desc_text">
+        Alpha Mask:
+    </string>
     <string
-     name="tattoo_desc_text"
-     value="Tattoo:" />
+     name="tattoo_desc_text">
+        Tattoo:
+    </string>
     <button
      follows="top|left"
      height="24"
@@ -390,7 +420,7 @@
         <button
          follows="bottomleft"
          height="23"
-         label="Revert"
+         label="Undo Changes"
          layout="topleft"
          left_pad="7"
          name="revert_button"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index d6549adfef59afcc4a91c1f5b8fa7f0193b6877a..4abd7dceacb0529dc5f1cb1c24662380296055f0 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -391,12 +391,12 @@ It is calculated as border_size + 2*UIResizeBarOverlap
          follows="bottom|right"
          height="25"
          image_hover_unselected="Toolbar_Middle_Over"
-         image_overlay="AddItem_Off"
+         image_overlay="Shop"
          image_selected="Toolbar_Middle_Selected"
          image_unselected="Toolbar_Middle_Off"
          layout="topleft"
          left_pad="0"
-         name="shop_btn"
+         name="shop_btn_1"
          top="1"
          width="31" />
     </panel>
@@ -472,8 +472,20 @@ It is calculated as border_size + 2*UIResizeBarOverlap
          layout="topleft"
          left_pad="1"
          name="dummy_right_icon"
-         width="184" >
+         width="153" >
         </icon>
+        <button
+         follows="bottom|right"
+         height="25"
+         image_hover_unselected="Toolbar_Middle_Over"
+         image_overlay="Shop"
+         image_selected="Toolbar_Middle_Selected"
+         image_unselected="Toolbar_Middle_Off"
+         layout="topleft"
+         left_pad="0"
+         name="shop_btn_2"
+         top="1"
+         width="31" />
     </panel>
     
     <!-- SAVE AND REVERT BUTTONS -->
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index a59070496e9f4a15715d6a325a7db43b8a2f2258..b365540d1fa8ba37f7c71f5a938e916c40da52dc 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -34,22 +34,32 @@
            follows="all"
            label="MY OUTFITS"
            layout="topleft"
-           width="315" />
-         <inventory_panel
-           follows="all"
+           width="312" />
+         <panel
            background_visible="true"
-           background_opaque="true"
-           label="WEARING"
+           class="panel_wearing"
+           follows="all"
+           height="490"          
            help_topic="now_wearing_tab"
-          allow_multi_select="true"
-           border="false"
-           left="0"
-           top="0"
-           mouse_opaque="true"
+           label="WEARING"
+           layout="topleft"
            name="cof_tab"
-           start_folder="Current Outfit"
-           use_label_suffix="true" 
-           width="315" />
+           width="312">
+            <wearable_items_list
+             allow_select="true"
+             follows="all"
+             height="490"
+             keep_one_selected="true"
+             left="1"
+             multi_select="true"
+             name="cof_items_list"
+             standalone="false"
+             top="0"
+             translate="false"
+             width="310"
+             worn_indication_enabled="false"
+            />
+         </panel>
    </tab_container>
 	 <panel
        background_visible="true"
@@ -84,7 +94,7 @@
       width="241"
         />
 
-        <dnd_button
+        <button
          follows="bottom|right"
          height="25"
          image_hover_unselected="Toolbar_Right_Over"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index e189d11d352dba50427a2f267e0118c486edb4ac..9a07d3a48a87265401216d00d2ed12bc0c55d814 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -21,6 +21,9 @@ width="333">
    <string
    name="Now Wearing"
    value="Now wearing..." />
+   <string
+   name="Changing outfits"
+   value="Changing outfits" />
    <panel
    background_opaque="true"
    background_visible="true"
diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
index dbe1ea2874134d07a23cfdf7dcd821d6603813d8..50be0ac1a19496c5e72bc6d24bf3dfaa849fd2af 100644
--- a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
@@ -14,5 +14,6 @@
   <!-- style for inventory list item WORN on avatar -->
   <worn_style
    font="SansSerifSmall"
-   font.style="BOLD" />
+   font.style="BOLD"
+   color="EmphasisColor" />
 </inventory_list_item>
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
index 558551b64964e131f20295bb57577e9a28dc9e62..b0834fe1705817a101b044111ebae2fa3587ba42 100644
--- a/indra/newview/skins/default/xui/fr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/fr/floater_camera.xml
@@ -9,35 +9,28 @@
 	<floater.string name="move_tooltip">
 		Déplacer la caméra vers le haut et le bas, la gauche et la droite
 	</floater.string>
-	<floater.string name="orbit_mode_title">
-		Faire tourner
+	<floater.string name="camera_modes_title">
+		Modes
 	</floater.string>
 	<floater.string name="pan_mode_title">
-		Faire un panoramique
+		Rotation - Zoom - Panoramique
 	</floater.string>
-	<floater.string name="avatar_view_mode_title">
+	<floater.string name="presets_mode_title">
 		Préréglages
 	</floater.string>
 	<floater.string name="free_mode_title">
 		Voir l&apos;objet
 	</floater.string>
 	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
 		<panel name="zoom" tool_tip="Zoomer en direction du point central">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
 			<slider_bar name="zoom_slider" tool_tip="Zoomer en direction du point central"/>
-		</panel>
-		<joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
-		<panel name="camera_presets">
-			<button name="rear_view" tool_tip="Vue arrière"/>
-			<button name="group_view" tool_tip="Vue Groupe"/>
-			<button name="front_view" tool_tip="Vue frontale"/>
-			<button name="mouselook_view" tool_tip="Vue subjective"/>
+			<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
 		</panel>
 	</panel>
 	<panel name="buttons">
-		<button label="" name="orbit_btn" tool_tip="Faire tourner la caméra"/>
-		<button label="" name="pan_btn" tool_tip="Faire un panoramique"/>
-		<button label="" name="avatarview_btn" tool_tip="Préréglages"/>
-		<button label="" name="freecamera_btn" tool_tip="Voir l&apos;objet"/>
+		<button label="" name="presets_btn" tool_tip="Préréglages"/>
+		<button label="" name="pan_btn" tool_tip="Rotation - Zoom - Panoramique"/>
+		<button label="" name="avatarview_btn" tool_tip="Modes"/>
 	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
index 110c61aedc936dc442dff37a61720927e56e2823..43a742485188a0f779e0e0baf602abc3cca4516c 100644
--- a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
@@ -16,7 +16,13 @@
 		a rejoint un chat vocal avec conférence.
 	</floater.string>
 	<floater.string name="VoiceInviteGroup">
-		a rejoint un chat vocal avec le groupe [GROUP].
+		vient de rejoindre le canal vocal [GROUP].
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionGroup">
+		Voulez-vous quitter [CURRENT_CHAT] et rejoindre l&apos;appel avec [GROUP] ?
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionDefault">
+		Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ?
 	</floater.string>
 	<text name="question">
 		Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ?
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 381a513bda33887e041496d1a68e9be48fd215df..033ee7443ce36437086165dccf0fc029cc6588e3 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -5,12 +5,19 @@
 	</floater.string>
 	<button label="Rafraîchir" name="new_snapshot_btn"/>
 	<line_editor label="Description" name="description"/>
-	<button label="Partager" name="share"/>
-	<button label="Partage Web" name="share_to_web"/>
-	<button label="Dans mon inventaire" name="save_to_inventory"/>
-	<button label="Enregistrer" name="save"/>
-	<button label="Envoi par e-mail" name="share_to_email"/>
-	<button label="Sur mon ordinateur" name="save_to_computer"/>
-	<button label="Image de profil" name="set_profile_pic"/>
-	<button label="Précédent" name="cancel"/>
+	<panel name="panel_snapshot_main">
+		<button label="Partager" name="share"/>
+		<button label="Enregistrer" name="save"/>
+		<button label="Image de profil" name="set_profile_pic"/>
+	</panel>
+	<panel name="panel_snapshot_share">
+		<button label="Partage Web" name="share_to_web"/>
+		<button label="Envoi par e-mail" name="share_to_email"/>
+		<button label="Précédent" name="cancel_share"/>
+	</panel>
+	<panel name="panel_snapshot_save">
+		<button label="Dans mon inventaire" name="save_to_inventory"/>
+		<button label="Sur mon ordinateur" name="save_to_computer"/>
+		<button label="Précédent" name="cancel_save"/>
+	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
index 1a7bc228faa07d6b07531941fc6157b29f756e03..5c26527ed6b947485cd767aaf5ea5fece4ec8a50 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
@@ -19,8 +19,10 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mon avatar :"/>
 		</layout_panel>
-		<layout_panel name="leave_call_btn_panel">
-			<button label="Quitter l&apos;appel" name="leave_call_btn"/>
-		</layout_panel>
+		<layout_stack name="voice_effect_and_leave_call_stack">
+			<layout_panel name="leave_call_btn_panel">
+				<button label="Quitter l&apos;appel" name="leave_call_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d7f0ff7f6b04296b9cb2bf7ea820c000a4f3d7b2
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Endroits" name="voice_effects" title="APERÇU DES EFFETS DE VOIX">
+	<string name="no_voice_effect">
+		(Aucun effet de voix)
+	</string>
+	<string name="active_voice_effect">
+		(Actif)
+	</string>
+	<string name="unsubscribed_voice_effect">
+		(Pas d&apos;abonnement)
+	</string>
+	<string name="new_voice_effect">
+		(Nouveau !)
+	</string>
+	<text name="status_text">
+		Pour obtenir un aperçu des effets, enregistrez un court extrait de votre voix en cliquant sur le bouton ci-dessous, puis cliquez sur l&apos;une des entrées de la liste. Vous entendrez alors le son de votre voix transformée.
+
+Pour vous reconnecter au chat vocal près de vous, fermez cette fenêtre.
+	</text>
+	<button label="Enregistrer un extrait" name="record_btn" tool_tip="Enregistrez un extrait de votre voix."/>
+	<button label="Arrêter" name="record_stop_btn"/>
+	<text name="voice_morphing_link">
+		[[URL] Obtenir un effet de voix]
+	</text>
+	<scroll_list name="voice_effect_list" tool_tip="Enregistrez un extrait de votre voix, puis cliquez sur un effet pour obtenir un aperçu.">
+		<scroll_list.columns label="Effet de voix" name="name"/>
+		<scroll_list.columns label="Date d&apos;expiration" name="expires"/>
+	</scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/inspect_object.xml b/indra/newview/skins/default/xui/fr/inspect_object.xml
index e50de400fda5e44bbe6d1819e4b42ebde2163716..b66af7a2bf2083e60a5ae65bee5ab0396280ba22 100644
--- a/indra/newview/skins/default/xui/fr/inspect_object.xml
+++ b/indra/newview/skins/default/xui/fr/inspect_object.xml
@@ -8,8 +8,8 @@
 		Par [CREATOR]
 	</string>
 	<string name="CreatorAndOwner">
-		par [CREATOR]
-propriétaire [OWNER]
+		De [CREATOR]
+Propriétaire [OWNER]
 	</string>
 	<string name="Price">
 		[AMOUNT] L$
@@ -23,16 +23,16 @@ propriétaire [OWNER]
 	<string name="Sit">
 		M&apos;asseoir
 	</string>
-	<text name="object_name" value="Nom d&apos;objet de test vraiment très long"/>
+	<text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/>
 	<text name="object_creator">
 		par secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
 owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
 	</text>
 	<text name="price_text">
-		300 000 L$
+		30 000 L$
 	</text>
 	<text name="object_description">
-		Cette description d&apos;objet est vraiment très longue : elle compte au moins 80 caractères, voire plus de 120, vraiment très très longue. Who knows, really?
+		This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
 	</text>
 	<text name="object_media_url">
 		http://www.superdupertest.com
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4ead48b6b3b37c6ccb7188a13a20ab284efc284
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Détacher" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b6907fcc61391ca41ab4751c9107e4b705c0d8f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Remplacer" name="replace"/>
+	<menu_item_call label="Modifier" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5641c756a0f5103e8a6616d0187f22ef9e38b47
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Couche supérieure" name="move_up"/>
+	<menu_item_call label="Couche inférieure" name="move_down"/>
+	<menu_item_call label="Modifier" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_gear.xml b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8276d570259774f7b543165aedf107842c5cd2a1
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Nouveaux habits" name="COF.Gear.New_Clothes"/>
+	<menu label="Nouvelles parties du corps" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml
index 3a7126fe50f9e10f86c36467f7fb3c9974604661..86a2ddd185eee0f83e3235211dc412bf79872e47 100644
--- a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
 <menu name="hide_navbar_menu">
 	<menu_item_check label="Afficher la barre de navigation" name="ShowNavbarNavigationPanel"/>
 	<menu_item_check label="Afficher la barre des Favoris" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Afficher la mini-barre d&apos;emplacement" name="ShowMiniLocationPanel"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml
index 4b9a05edd6a7aa0cb44005c5436340fb7375ff19..8b0d726e51629cd848140e4e8a275d2bc98f41d5 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml
@@ -81,6 +81,7 @@
 	<menu label="Attacher au HUD " name="Attach To HUD"/>
 	<menu_item_call label="Éditer" name="Wearable Edit"/>
 	<menu_item_call label="Porter" name="Wearable Wear"/>
+	<menu_item_call label="Ajouter" name="Wearable Add"/>
 	<menu_item_call label="Enlever" name="Take Off"/>
 	<menu_item_call label="--aucune option--" name="--no options--"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..93730c620609ae561d059e11ed315062950cb4a5
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear"/>
+	<menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/>
+	<menu label="Nouveaux habits" name="New Clothes">
+		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
+		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
+		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
+		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
+		<menu_item_call label="Nouveau débardeur" name="New Undershirt"/>
+		<menu_item_call label="Nouveau caleçon" name="New Underpants"/>
+		<menu_item_call label="Nouvel alpha" name="New Alpha"/>
+		<menu_item_call label="Nouveau tatouage" name="New Tattoo"/>
+	</menu>
+	<menu label="Nouvelles parties du corps" name="New Body Parts">
+		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+		<menu_item_call label="Nouvelle peau" name="New Skin"/>
+		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Renommer la tenue" name="rename"/>
+	<menu_item_call label="Supprimer la tenue" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a68715108fe8d644169b55c4a15b739d64558e2e
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear_replace"/>
+	<menu_item_call label="Porter - Ajouter à la tenue actuelle" name="wear_add"/>
+	<menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/>
+	<menu_item_call label="Modifier la tenue" name="edit"/>
+	<menu_item_call label="Renommer" name="rename"/>
+	<menu_item_call label="Supprimer la tenue" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml
index fbec93338228153994562aec853460f9c539cca3..f78db411b39e706be8abdcc8c87b8e280d93a6df 100644
--- a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="save_outfit_menu">
 	<menu_item_call label="Enregistrer" name="save_outfit"/>
-	<menu_item_call label="Enregistrer comme nouvelle" name="save_as_new_outfit"/>
+	<menu_item_call label="Enregistrer sous" name="save_as_new_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 4c7cdefbe8a1af9283f25208857ea249190dc400..0976f0c72a5f7b6411adda1173f7b78102a9e983 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -11,6 +11,7 @@
 		<menu_item_check label="Mon inventaire" name="Inventory"/>
 		<menu_item_check label="Mon inventaire" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Mes gestes" name="Gestures"/>
+		<menu_item_check label="Ma voix" name="ShowVoice"/>
 		<menu label="Mon statut" name="Status">
 			<menu_item_call label="Absent" name="Set Away"/>
 			<menu_item_call label="Occupé" name="Set Busy"/>
@@ -70,6 +71,12 @@
 		<menu_item_call label="Lien" name="Link"/>
 		<menu_item_call label="Annuler le lien" name="Unlink"/>
 		<menu_item_check label="Modifier les parties liées" name="Edit Linked Parts"/>
+		<menu label="Sélectionner les parties liées" name="Select Linked Parts">
+			<menu_item_call label="Sélectionner la partie suivante" name="Select Next Part"/>
+			<menu_item_call label="Sélectionner la partie précédente" name="Select Previous Part"/>
+			<menu_item_call label="Inclure la partie suivante" name="Include Next Part"/>
+			<menu_item_call label="Inclure la partie précédente" name="Include Previous Part"/>
+		</menu>
 		<menu_item_call label="Point central sur la sélection" name="Focus on Selection"/>
 		<menu_item_call label="Zoomer sur la sélection" name="Zoom to Selection"/>
 		<menu label="Objet" name="Object">
@@ -100,11 +107,11 @@
 			<menu_item_call label="Utiliser la sélection pour la grille" name="Use Selection for Grid"/>
 			<menu_item_call label="Options de la grille" name="Grid Options"/>
 		</menu>
-		<menu label="Sélectionner les parties liées" name="Select Linked Parts">
-			<menu_item_call label="Sélectionner la partie suivante" name="Select Next Part"/>
-			<menu_item_call label="Sélectionner la partie précédente" name="Select Previous Part"/>
-			<menu_item_call label="Inclure la partie suivante" name="Include Next Part"/>
-			<menu_item_call label="Inclure la partie précédente" name="Include Previous Part"/>
+		<menu label="Charger" name="Upload">
+			<menu_item_call label="Image ([COST] L$)..." name="Upload Image"/>
+			<menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/>
+			<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
+			<menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/>
 		</menu>
 	</menu>
 	<menu label="Aide" name="Help">
diff --git a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..207ba79148c06f341d4ae707c525543f01d4d82d
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Porter" name="wear"/>
+	<menu_item_call label="Ajouter" name="wear_add"/>
+	<menu_item_call label="Enlever / Détacher" name="take_off_or_detach"/>
+	<menu_item_call label="Détacher" name="detach"/>
+	<context_menu label="Attacher à  ▶" name="wearable_attach_to"/>
+	<context_menu label="Attacher au HUD  â–¶" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Modifier" name="edit"/>
+	<menu_item_call label="Profil de l&apos;objet" name="object_profile"/>
+	<menu_item_call label="Afficher l&apos;original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index bb1c4242ee3ae96f767e10d3cb8b60ec433f6123..32f779f538c367e8ae5340967e9d4dbc2f27ed6d 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -474,7 +474,9 @@ La qualité des graphiques peut être augmentée à la section Préférences &gt
 		Le terraformage est interdit dans la région [REGION].
 	</notification>
 	<notification name="CannotCopyWarning">
-		Vous n&apos;êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
+		Vous n&apos;êtes pas autorisé à copier les articles suivants :
+[ITEMS].
+Ceux-ci disparaîtront donc de votre inventaire si vous les donnez. Voulez-vous vraiment offrir ces articles ?
 		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
 	</notification>
 	<notification name="CannotGiveItem">
@@ -943,6 +945,26 @@ Proposer à [NAME] de devenir votre ami(e) ?
 			<button name="Cancel" text="Annuler"/>
 		</form>
 	</notification>
+	<notification label="Enregistrer l&apos;article à porter" name="SaveWearableAs">
+		Enregistrer l&apos;article dans mon inventaire comme :
+		<form name="form">
+			<input name="message">
+				[DESC] (nouv.)
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Renommer la tenue" name="RenameOutfit">
+		Nouveau nom de la tenue :
+		<form name="form">
+			<input name="new_name">
+				[NAME]
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
 	<notification name="RemoveFromFriends">
 		Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d&apos;amis ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@@ -1555,7 +1577,7 @@ Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
 	<notification name="RegionEntryAccessBlocked_Change">
 		La catégorie de contenu définie dans vos préférences ne vous permet pas de pénétrer dans cette région.
 
-Pour cela, cliquez sur Modifier les préférences afin de spécifier une catégorie plus élevée. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour modifier ce paramètre ultérieurement, accédez à Moi &gt; Préférences &gt; Général, le moment voulu.
+Pour cela, vous devez modifier votre paramètre de catégorie de contenu. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour annuler vos modifications, accédez à Moi &gt; Préférences &gt; Général.
 		<form name="form">
 			<button name="OK" text="Modifier les préférences"/>
 			<button default="true" name="Cancel" text="Fermer"/>
@@ -2573,6 +2595,21 @@ Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignore
 	<notification name="VoiceLoginRetry">
 		Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
 	</notification>
+	<notification name="VoiceEffectsExpired">
+		Au moins l&apos;un des effets de voix auxquels vous êtes abonné a expiré.
+[[URL] Cliquez ici] pour renouveler votre abonnement.
+	</notification>
+	<notification name="VoiceEffectsExpiredInUse">
+		L&apos;effet de voix actif a expiré. Vos paramètres de voix normaux ont été rétablis.
+[[URL] Cliquez ici] pour renouveler votre abonnement.
+	</notification>
+	<notification name="VoiceEffectsWillExpire">
+		Au moins l&apos;un de vos effets de voix expirera dans moins de [INTERVAL] jours.
+[[URL] Cliquez ici] pour renouveler votre abonnement.
+	</notification>
+	<notification name="VoiceEffectsNew">
+		De nouveaux effets de voix sont disponibles !
+	</notification>
 	<notification name="Cannot enter parcel: not a group member">
 		Seuls les membres d&apos;un certain groupe peuvent visiter cette zone.
 	</notification>
@@ -2639,18 +2676,36 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
 Le bouton sera affiché quand il y aura suffisamment de place.
 	</notification>
 	<notification name="ShareNotification">
-		Faire glisser des articles de l&apos;inventaire sur une personne dans le sélecteur de résident
+		Sélectionnez les résidents avec lesquels partager l&apos;élément.
+	</notification>
+	<notification name="ShareItemsConfirmation">
+		Voulez-vous vraiment partager les articles suivants :
+
+[ITEMS]
+
+avec les résidents suivants :
+
+[RESIDENTS] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Ok"/>
+	</notification>
+	<notification name="ItemsShared">
+		Articles partagés.
 	</notification>
 	<notification name="DeedToGroupFail">
 		Échec de cession au groupe.
 	</notification>
 	<notification name="AvatarRezNotification">
 		([EXISTENCE] secondes d&apos;existence)
-Nuage de l&apos;avatar [NAME] disparu en [TIME] secondes.
+Nuage de l&apos;avatar [NAME] disparu au bout de [TIME] secondes.
 	</notification>
-	<notification name="AvatarRezSelfNotification">
+	<notification name="AvatarRezSelfBakedDoneNotification">
 		([EXISTENCE] secondes d&apos;existence)
-Vous avez terminé de figer votre tenue en [TIME] secondes.
+Tenue figée au bout de [TIME] secondes.
+	</notification>
+	<notification name="AvatarRezSelfBakedUpdateNotification">
+		([EXISTENCE] secondes d&apos;existence)
+Mise à jour de votre apparence transmise au bout de [TIME] secondes.
+[STATUS]
 	</notification>
 	<notification name="AvatarRezCloudNotification">
 		([EXISTENCE] secondes d&apos;existence)
@@ -2672,9 +2727,31 @@ L&apos;avatar [NAME] est entré en mode Apparence.
 		([EXISTENCE] secondes d&apos;existence)
 L&apos;avatar [NAME] a quitté le mode Apparence.
 	</notification>
+	<notification name="NoConnect">
+		Problèmes de connexion via [PROTOCOL] [HOSTID].
+Veuillez vérifier la configuration de votre réseau et de votre pare-feu.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
+	<notification name="NoVoiceConnect">
+		Problèmes de connexion à votre serveur vocal :
+
+[HOSTID]
+
+Aucune communication vocale n&apos;est disponible.
+Veuillez vérifier la configuration de votre réseau et de votre pare-feu.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
 	<notification name="AvatarRezLeftNotification">
 		([EXISTENCE] secondes d&apos;existence)
 Départ de l&apos;avatar [NAME] entièrement chargé.
+	</notification>
+	<notification name="AvatarRezSelfBakeNotification">
+		([EXISTENCE] secondes d&apos;existence)
+Texture figée de [RESOLUTION] chargée pour [BODYREGION] au bout de [TIME] secondes.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Voulez-vous vraiment quitter cet appel ?
@@ -2686,7 +2763,7 @@ Les résidents rejoignant l&apos;appel ultérieurement seront également
 ignorés, même si vous quittez l&apos;appel.
 
 Ignorer les autres ?
-		<usetemplate ignoretext="Confirmer avant d&apos;ignorer les autres lors d&apos;un appel de groupe" name="okcancelignore" notext="Ok" yestext="Annuler"/>
+		<usetemplate ignoretext="Confirmer avant d&apos;ignorer les autres lors d&apos;un appel de groupe" name="okcancelignore" notext="Annuler" yestext="Ok"/>
 	</notification>
 	<global name="UnsupportedCPU">
 		- Votre processeur ne remplit pas les conditions minimum requises.
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml
index 88f0635d97196c123a89a122ad8c3120ad36499a..6a5f71a36b6ceca8aa085b58a5a340293a5e3240 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml
@@ -1,8 +1,15 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="edit_shape_panel">
-	<text name="avatar_height">
-		Taille : [HEIGHT] mètres
-	</text>
+	<string name="meters">
+		mètres
+	</string>
+	<string name="feet">
+		pieds
+	</string>
+	<string name="height">
+		Taille :
+	</string>
+	<text name="avatar_height"/>
 	<panel label="Chemise" name="accordion_panel">
 		<accordion name="wearable_accordion">
 			<accordion_tab name="shape_body_tab" title="Corps"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
index e0762bd791fa6a9b25d7279e099a3b8120ca269a..60c46a9f2eb109e88031fe5274a2a26b831200d1 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
@@ -72,8 +72,8 @@
 	<string name="jacket_desc_text">
 		Veste :
 	</string>
-	<string name="skirt_skirt_desc_text">
-		Jupe :
+	<string name="skirt_desc_text">
+		Jupe :
 	</string>
 	<string name="gloves_desc_text">
 		Gants :
@@ -100,11 +100,6 @@
 		<icon name="male_icon" tool_tip="Homme"/>
 		<icon name="female_icon" tool_tip="Femme"/>
 	</panel>
-	<panel label="gear_buttom_panel" name="gear_buttom_panel">
-		<button name="friends_viewsort_btn" tool_tip="Options"/>
-		<button name="add_btn" tool_tip="TODO"/>
-		<button name="del_btn" tool_tip="TODO"/>
-	</panel>
 	<panel name="button_panel">
 		<button label="Enregistrer sous" name="save_as_button"/>
 		<button label="Rétablir" name="revert_button" width="130"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
index 4c869d05c8be027e2c0e0d9704d8b8c71122854c..0764cfb6e72e9189a17fe8ab4353a48a620d56b5 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
 	<string name="Filter.All" value="Tout"/>
 	<string name="Filter.Clothes/Body" value="Habits/Corps"/>
 	<string name="Filter.Objects" value="Objets"/>
-	<button label="modifier" name="edit_wearable_btn"/>
+	<string name="Filter.Custom" value="Filtre personnalisé"/>
 	<text name="title" value="Modifier la tenue"/>
 	<panel label="bottom_panel" name="header_panel">
 		<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
 	</panel>
 	<layout_stack name="im_panels">
 		<layout_panel label="Panneau de contrôle IM" name="outfit_wearables_panel">
-			<panel label="bottom_panel" name="edit_panel"/>
-		</layout_panel>
-		<layout_panel name="add_wearables_panel">
-			<text name="add_to_outfit_label" value="Ajouter à la tenue :"/>
 			<layout_stack name="filter_panels">
-				<layout_panel label="Panneau de contrôle IM" name="filter_panel">
-					<filter_editor label="Filtre" name="look_item_filter"/>
+				<layout_panel name="add_button_and_combobox">
+					<button label="Ajouter plus..." name="show_add_wearables_btn"/>
+				</layout_panel>
+				<layout_panel name="filter_panel">
+					<filter_editor label="Filtrer ce qui peut être porté dans l&apos;inventaire" name="look_item_filter"/>
 				</layout_panel>
 			</layout_stack>
-			<panel label="add_wearables_button_bar" name="add_wearables_button_bar">
-				<button label="D" name="folder_view_btn"/>
-				<button label="L" name="list_view_btn"/>
-			</panel>
 		</layout_panel>
+		<layout_panel name="add_wearables_panel"/>
 	</layout_stack>
 	<panel name="save_revert_button_bar">
 		<button label="Enregistrer" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
index f4fa3a28384517ef778e38885bcd0b8e2e183a2c..22e6adfb8992ffd039ba9451c45af6c01ba915eb 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
 	<panel name="bottom_panel">
 		<button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
 		<dnd_button name="trash_btn" tool_tip="Supprimer l&apos;objet sélectionné"/>
-		<button label="Enregistrer la tenue" name="make_outfit_btn" tool_tip="Enregistrer l&apos;apparence comme tenue"/>
+		<button label="Enregistrer sous" name="save_btn"/>
 		<button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/>
-		<button label="Modifier tenue" name="edit_current_outfit_btn"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
index 9990c4612d93c9366537314822869b1652160c98..efb06cfce9a92e57edda22c84a4a66bcafdea57f 100644
--- a/indra/newview/skins/default/xui/fr/panel_places.xml
+++ b/indra/newview/skins/default/xui/fr/panel_places.xml
@@ -5,12 +5,12 @@
 	<filter_editor label="Filtrer les endroits" name="Filter"/>
 	<panel name="button_panel">
 		<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
-		<button label="Carte" name="map_btn"/>
+		<button label="Carte" name="map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/>
 		<button label="Éditer" name="edit_btn" tool_tip="Modifier les informations du repère"/>
 		<button label="â–¼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
 		<button label="Enregistrer" name="save_btn"/>
 		<button label="Annuler" name="cancel_btn"/>
 		<button label="Fermer" name="close_btn"/>
-		<button label="Profil" name="profile_btn"/>
+		<button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
index 6b8e68bd986704841a77340d9fb9e237e37f64d3..9af3a8a5d80f032679b2c737e0e4be60ece3e6c5 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
 	</text>
 	<check_box label="Construire/Modifier" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/>
 	<check_box label="Apparence" name="appearance_camera_movement" tool_tip="Utiliser le positionnement automatique de la caméra quand je suis en mode Édition"/>
-	<check_box label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/>
+	<check_box initial_value="true" label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/>
 	<check_box label="Afficher en vue subjective" name="first_person_avatar_visible"/>
 	<check_box label="Les touches de direction me font toujours me déplacer" name="arrow_keys_move_avatar_check"/>
 	<check_box label="Appuyer deux fois et maintenir enfoncé pour courir" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
index dffb1d42384a015928c92b71a456bb8e039a4e67..3c56fa68e7b939e6855f57d42abb7f755a7280a2 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -21,8 +21,10 @@
 	<panel.string name="buycurrencylabel">
 		[AMT] L$
 	</panel.string>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Mon solde"/>
-	<button label="Acheter L$" name="buyL" tool_tip="Cliquez pour acheter plus de L$"/>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Mon solde" value="20 L$"/>
+		<button label="ACHETER L$" name="buyL" tool_tip="Cliquer pour acheter plus de L$"/>
+	</panel>
 	<text name="TimeText" tool_tip="Heure actuelle (Pacifique)">
 		00h00 PST
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_effect.xml b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01734295f20b1919a008a346bfff670f7ecf0e9b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+	<string name="no_voice_effect">
+		Aucun effet de voix
+	</string>
+	<string name="preview_voice_effects">
+		Aperçu des effets de voix  ▶
+	</string>
+	<string name="get_voice_effects">
+		Obtenir un effet de voix  â–¶
+	</string>
+	<combo_box name="voice_effect" tool_tip="Sélectionnez un effet pour modifier le son de votre voix.">
+		<combo_box.item label="Aucun effet de voix" name="no_voice_effect"/>
+	</combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
index 893b64d4b280fdcc44f6fc72668f41753f832fda..ebee1af45b2d035a74820ffe7170ffb75b7cc111 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
 <panel label="Choses" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn"/>
-			<button label="Partager" name="share_btn"/>
-			<button label="Acheter" name="shop_btn"/>
-			<button label="Porter" name="wear_btn"/>
+			<button label="Profil" name="info_btn" tool_tip="Afficher le profil de l&apos;objet"/>
+			<button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
+			<button label="Acheter" name="shop_btn" tool_tip="Accéder à la place du marché sur le Web"/>
+			<button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/>
 			<button label="Jouer" name="play_btn"/>
-			<button label="Téléporter" name="teleport_btn"/>
+			<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 15d5847c5850a4f616a47790716f196a8314516e..d95cfaedb42ea9973ef6696b605007516869e772 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -107,7 +107,7 @@
 		Nom d&apos;hôte non valide utilisé pour accéder au serveur. Vérifiez votre nom d&apos;hôte de grille ou SLURL.
 	</string>
 	<string name="CertExpired">
-		Il semble que le certificat renvoyé par la grille ait expiré. Vérifiez votre horloge système ou contactez l&apos;administrateur de la grille.
+		Il semble que le certificat renvoyé par la grille ait expiré.  Vérifiez votre horloge système ou contactez l&apos;administrateur de la grille.
 	</string>
 	<string name="CertKeyUsage">
 		Impossible d&apos;utiliser le certificat renvoyé par le serveur pour SSL. Contactez l&apos;administrateur de la grille.
@@ -116,7 +116,7 @@
 		Certificats trop nombreux dans la chaîne des certificats du serveur. Contactez l&apos;administrateur de la grille.
 	</string>
 	<string name="CertInvalidSignature">
-		Impossible de vérifier la signature de certificat renvoyée par le serveur de la grille. Contactez l&apos;administrateur de la grille.
+		Impossible de vérifier la signature de certificat renvoyée par le serveur de la grille.  Contactez l&apos;administrateur de la grille.
 	</string>
 	<string name="LoginFailedNoNetwork">
 		Erreur réseau : impossible d&apos;établir la connexion. Veuillez vérifier votre connexion réseau.
@@ -753,6 +753,12 @@
 	<string name="land_type_unknown">
 		(inconnu)
 	</string>
+	<string name="Estate / Full Region">
+		Domaine / Région entière
+	</string>
+	<string name="Mainland / Full Region">
+		Continent / Région entière
+	</string>
 	<string name="all_files">
 		Tous fichiers
 	</string>
@@ -897,6 +903,9 @@
 	<string name="NewWearable">
 		Nouv. [WEARABLE_ITEM]
 	</string>
+	<string name="CreateNewWearable">
+		Créer [WEARABLE_TYPE]
+	</string>
 	<string name="next">
 		Suivant
 	</string>
@@ -3550,6 +3559,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="session_initialization_timed_out_error">
 		Expiration du délai d&apos;initialisation de la session
 	</string>
+	<string name="voice_morphing_url">
+		http://secondlife.com/landing/voicemorphing
+	</string>
 	<string name="paid_you_ldollars">
 		[NAME] vous a payé [AMOUNT] L$
 	</string>
@@ -3720,16 +3732,16 @@ de l&apos;infraction signalée
 	<string name="Male - Wow">
 		Homme - Ouah !
 	</string>
-	<string name="FeMale - Excuse me">
+	<string name="Female - Excuse me">
 		Femme - Demander pardon
 	</string>
-	<string name="FeMale - Get lost">
+	<string name="Female - Get lost">
 		Femme - Dire d&apos;aller au diable
 	</string>
-	<string name="FeMale - Blow kiss">
+	<string name="Female - Blow kiss">
 		Femme - Envoyer un baiser
 	</string>
-	<string name="FeMale - Boo">
+	<string name="Female - Boo">
 		Femme - Hou !
 	</string>
 	<string name="Female - Bored">
@@ -3762,4 +3774,32 @@ de l&apos;infraction signalée
 	<string name="texture_load_dimensions_error">
 		Impossible de charger des images de taille supérieure à [WIDTH]*[HEIGHT]
 	</string>
+	<string name="words_separator" value=","/>
+	<string name="server_is_down">
+		Malgré nos efforts, une erreur inattendue s&apos;est produite.
+
+	Veuillez vous reporter à status.secondlifegrid.net afin de déterminer si un problème connu existe avec ce service.  
+        Si le problème persiste, vérifiez la configuration de votre réseau et de votre pare-feu.
+	</string>
+	<string name="dateTimeWeekdaysNames">
+		Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
+	</string>
+	<string name="dateTimeWeekdaysShortNames">
+		Sun:Mon:Tue:Wed:Thu:Fri:Sat
+	</string>
+	<string name="dateTimeMonthNames">
+		January:February:March:April:May:June:July:August:September:October:November:December
+	</string>
+	<string name="dateTimeMonthShortNames">
+		Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec
+	</string>
+	<string name="dateTimeDayFormat">
+		[MDAY]
+	</string>
+	<string name="dateTimeAM">
+		AM
+	</string>
+	<string name="dateTimePM">
+		PM
+	</string>
 </strings>
diff --git a/install.xml b/install.xml
index f69d781c671221bcd9f7b45296fe6b47186bdf24..39806a664d54d137566eeaab1674c984afc3ee3e 100644
--- a/install.xml
+++ b/install.xml
@@ -200,9 +200,9 @@
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>d58ac1a8396ac983b67cc3e3541457e3</string>
+            <string>4db3d74e40d149eeec06f4d97a609bb1</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100222a.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100624.tar.bz2</uri>
           </map>
           <key>linux64</key>
           <map>