diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 592f7725497b1efcaceeaf2541c5772c152d9010..7041225d52183034604ea667af3e267696cb08c2 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -310,6 +310,7 @@ set(viewer_SOURCE_FILES
     lloutfitslist.cpp
     lloutfitobserver.cpp
     lloutputmonitorctrl.cpp
+    llpanelappearancetab.cpp
     llpanelavatar.cpp
     llpanelavatartag.cpp
     llpanelblockedlist.cpp
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index a0ef43ea80722dea466b2d7b8280c5db72a9fa19..cf0b3d94bda01291026dea34d034e7a10c5cca19 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -972,23 +972,6 @@ void LLOutfitsList::applyFilterToTab(
 	}
 }
 
-bool LLOutfitsList::canTakeOffSelected()
-{
-	uuid_vec_t selected_uuids;
-	getSelectedItemsUUIDs(selected_uuids);
-
-	LLFindWearablesEx is_worn(/*is_worn=*/ true, /*include_body_parts=*/ false);
-
-	for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it)
-	{
-		LLViewerInventoryItem* item = gInventory.getItem(*it);
-		if (!item) continue;
-
-		if (is_worn(NULL, item)) return true;
-	}
-	return false;
-}
-
 bool LLOutfitsList::canWearSelected()
 {
 	uuid_vec_t selected_items;
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index 37b909c93e191fbebd7bb093b3e6552c0c20d936..faf6f7ce1e34c9b6d457758ce7665feec9a6d6c2 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -98,7 +98,7 @@ public:
 
 	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; }
 
-	void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
+	/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
 
 	boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb);
 
@@ -173,11 +173,6 @@ private:
 	 */
 	void applyFilterToTab(const LLUUID& category_id, LLAccordionCtrlTab* tab, const std::string& filter_substring);
 
-	/**
-	 * Returns true if there are any items that can be taken off among currently selected, otherwise false.
-	 */
-	bool canTakeOffSelected();
-
 	/**
 	 * Returns true if all selected items can be worn.
 	 */
diff --git a/indra/newview/llpanelappearancetab.cpp b/indra/newview/llpanelappearancetab.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9910a3a2ac476458b34bed02c51806fed38a398f
--- /dev/null
+++ b/indra/newview/llpanelappearancetab.cpp
@@ -0,0 +1,51 @@
+/**
+ * @file llpanelappearancetab.h
+ * @brief Tabs interface for Side Bar "My Appearance" panel
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelappearancetab.h"
+
+
+#include "llinventoryfunctions.h"
+#include "llinventorymodel.h"
+
+//virtual
+bool LLPanelAppearanceTab::canTakeOffSelected()
+{
+	uuid_vec_t selected_uuids;
+	getSelectedItemsUUIDs(selected_uuids);
+
+	LLFindWearablesEx is_worn(/*is_worn=*/ true, /*include_body_parts=*/ false);
+
+	for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it)
+	{
+		LLViewerInventoryItem* item = gInventory.getItem(*it);
+		if (!item) continue;
+
+		if (is_worn(NULL, item)) return true;
+	}
+	return false;
+}
diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h
index fa929aac0a5fd7f4d2273c50e413813c631886fc..81366c5db4a26cc6b97595672fd9c4ca8393110d 100644
--- a/indra/newview/llpanelappearancetab.h
+++ b/indra/newview/llpanelappearancetab.h
@@ -41,9 +41,17 @@ public:
 
 	virtual void showGearMenu(LLView* spawning_view) = 0;
 
+	virtual void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const {}
+
 	static const std::string& getFilterSubString() { return sFilterSubString; }
 
 protected:
+
+	/**
+	 * Returns true if there are any items that can be taken off among currently selected, otherwise false.
+	 */
+	bool canTakeOffSelected();
+
 	static std::string		sFilterSubString;
 };
 
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index a6bc34c62e69e7df3d999663fc74fc369f1c8001..860470cd73ee55829c3bd19b96b1a98531191677 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -29,6 +29,7 @@
 #include "llpanelwearing.h"
 
 #include "llappearancemgr.h"
+#include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
 #include "llsidetray.h"
@@ -46,12 +47,16 @@ static void edit_outfit()
 class LLWearingGearMenu
 {
 public:
-	LLWearingGearMenu()
-	:	mMenu(NULL)
+	LLWearingGearMenu(LLPanelWearing* panel_wearing)
+	:	mMenu(NULL), mPanelWearing(panel_wearing)
 	{
 		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
 
 		registrar.add("Gear.Edit", boost::bind(&edit_outfit));
+		registrar.add("Gear.TakeOff", boost::bind(&LLWearingGearMenu::onTakeOff, this));
+
+		enable_registrar.add("Gear.OnEnable", boost::bind(&LLPanelWearing::isActionEnabled, mPanelWearing, _2));
 
 		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
 			"menu_wearing_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
@@ -70,7 +75,20 @@ public:
 	}
 
 private:
+
+	void onTakeOff()
+	{
+		uuid_vec_t selected_uuids;
+		mPanelWearing->getSelectedItemsUUIDs(selected_uuids);
+
+		for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it)
+		{
+				LLAppearanceMgr::instance().removeItemFromAvatar(*it);
+		}
+	}
+
 	LLMenuGL*		mMenu;
+	LLPanelWearing* mPanelWearing;
 };
 
 //////////////////////////////////////////////////////////////////////////
@@ -150,7 +168,7 @@ LLPanelWearing::LLPanelWearing()
 {
 	mCategoriesObserver = new LLInventoryCategoriesObserver();
 
-	mGearMenu = new LLWearingGearMenu();
+	mGearMenu = new LLWearingGearMenu(this);
 	mContextMenu = new LLWearingContextMenu();
 }
 
@@ -226,6 +244,12 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
 		// allow save only if outfit isn't locked and is dirty
 		return !outfit_locked && outfit_dirty;
 	}
+
+	if (command_name == "take_off")
+	{
+		return hasItemSelected() && canTakeOffSelected();
+	}
+
 	return false;
 }
 
@@ -255,4 +279,14 @@ void LLPanelWearing::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
 	mContextMenu->show(ctrl, selected_uuids, x, y);
 }
 
+bool LLPanelWearing::hasItemSelected()
+{
+	return mCOFItemsList->getSelectedItem() != NULL;
+}
+
+void LLPanelWearing::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
+{
+	mCOFItemsList->getSelectedUUIDs(selected_uuids);
+}
+
 // EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index 6ae8efef99d471cd7719ff852e62a63a7f085fc1..1fa97735b1b6d35e491db0fba7df2d0ad354fd95 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -60,8 +60,12 @@ public:
 
 	/*virtual*/ void showGearMenu(LLView* spawning_view);
 
+	/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
+
 	boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
 
+	bool hasItemSelected();
+
 private:
 	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);
 
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
index 747352cb291182138a0cb6f886a11d05dcc7a77d..84ab16c70954eb1bfed6ac6bde375129bcad60a8 100644
--- a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
@@ -10,4 +10,14 @@
         <on_click
          function="Gear.Edit" />
     </menu_item_call>
+    <menu_item_call
+     label="Take Off"
+     layout="topleft"
+     name="takeoff">
+        <on_click
+         function="Gear.TakeOff" />
+        <on_enable
+         function="Gear.OnEnable"
+         parameter="take_off" />
+    </menu_item_call>
 </menu>