diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index fc93793ed8bb0008b8bc97578609b61dd9a9afb1..3a1e9f19faf7d82541e6c6a819254e51ae4b19af 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -826,6 +826,24 @@ void	LLAccordionCtrl::setFilterSubString(const std::string& filter_string)
 	mNoVisibleTabsHelpText->setValue(text);
 }
 
+const LLAccordionCtrlTab* LLAccordionCtrl::getExpandedTab() const
+{
+	typedef std::vector<LLAccordionCtrlTab*>::const_iterator tabs_const_iterator;
+
+	const LLAccordionCtrlTab* result = 0;
+
+	for (tabs_const_iterator i = mAccordionTabs.begin(); i != mAccordionTabs.end(); ++i)
+	{
+		if ((*i)->isExpanded())
+		{
+			result = *i;
+			break;
+		}
+	}
+
+	return result;
+}
+
 S32 LLAccordionCtrl::calcExpandedTabHeight(S32 tab_index /* = 0 */, S32 available_height /* = 0 */)
 {
 	if(tab_index < 0)
diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h
index fc6f2d896c72521e849687b216b1c9ec5c74ce26..677b598a3221f80bd62b9d33da63b9cf82850587 100644
--- a/indra/llui/llaccordionctrl.h
+++ b/indra/llui/llaccordionctrl.h
@@ -129,6 +129,13 @@ class LLAccordionCtrl: public LLPanel
 	 */
 	void	setFilterSubString(const std::string& filter_string);
 
+	/**
+	 * This method returns the first expanded accordion tab.
+	 * It is expected to be called for accordion which doesn't allow multiple
+	 * tabs to be expanded. Use with care.
+	 */
+	const LLAccordionCtrlTab* getExpandedTab() const;
+
 private:
 	void	initNoTabsWidget(const LLTextBox::Params& tb_params);
 	void	updateNoTabsHelpTextVisibility();
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index 19d4ec0a1cea54950e35524c7534b8439f4e5529..7bf7eeef8fe66945c8ed5381ffaa65d52068c34a 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -171,7 +171,7 @@ class LLAccordionCtrlTab : public LLUICtrl
 
 	virtual bool addChild(LLView* child, S32 tab_group);
 
-	bool isExpanded() { return mDisplayChildren; }
+	bool isExpanded() const { return mDisplayChildren; }
 
 	S32 getHeaderHeight();
 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index bc6e030c91a987d35ee0b924cad9c25582b24c22..5b70e4bcb06b098ee2fa678f0847de0b9764cad2 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4678,7 +4678,381 @@
       <string>String</string>
       <key>Value</key>
       <string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
-    </map>    
+    </map>
+    <key>MarketplaceURL_objectFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Attachments Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/attachments</string>
+    </map>
+    <key>MarketplaceURL_objectMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Attachments Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/attachments</string>
+    </map>
+    <key>MarketplaceURL_clothingFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Clothing Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/clothing_female_avatar</string>
+    </map>
+    <key>MarketplaceURL_clothingMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Clothing Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/clothing_male_avatar</string>
+    </map>
+    <key>MarketplaceURL_bodypartFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Bodyparts Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
+    </map>
+    <key>MarketplaceURL_bodypartMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Bodyparts Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
+    </map>
+    <key>MarketplaceURL_glovesMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Gloves Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/gloves_both_women_and_men</string>
+    </map>
+    <key>MarketplaceURL_glovesFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Gloves Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/gloves_both_women_and_men</string>
+    </map>
+    <key>MarketplaceURL_jacketFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Jacket Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/jacket_womens</string>
+    </map>
+    <key>MarketplaceURL_jacketMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Jacket Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/jacket_mens</string>
+    </map>
+    <key>MarketplaceURL_shirtFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Shirt Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/shirt_womens</string>
+    </map>
+    <key>MarketplaceURL_shirtMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Shirt Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/shirt_mens</string>
+    </map>
+    <key>MarketplaceURL_undershirtFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Undershirt Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/undershirt_womens</string>
+    </map>
+    <key>MarketplaceURL_undershirtMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Undershirt Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/undershirt_mens</string>
+    </map>
+    <key>MarketplaceURL_skirtFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Skirt Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/skirts_women</string>
+    </map>
+    <key>MarketplaceURL_skirtMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Skirt Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/skirts_women</string>
+    </map>
+    <key>MarketplaceURL_pantsFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Pants Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/pants_women</string>
+    </map>
+    <key>MarketplaceURL_pantsMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Pants Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/pants_men</string>
+    </map>
+    <key>MarketplaceURL_underpantsFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Underwear Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/underwear_women</string>
+    </map>
+    <key>MarketplaceURL_underpantsMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Underwear Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/underwear_men</string>
+    </map>
+    <key>MarketplaceURL_shoesFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Shoes Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/shoes_women</string>
+    </map>
+    <key>MarketplaceURL_shoesMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Shoes Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/shoes_men</string>
+    </map>
+    <key>MarketplaceURL_socksFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Socks Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/socks_women</string>
+    </map>
+    <key>MarketplaceURL_socksMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Socks Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/socks_women</string>
+    </map>
+    <key>MarketplaceURL_tattooMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Tattoo Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/tattoo_both_women_and_men</string>
+    </map>
+    <key>MarketplaceURL_tattooFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Tattoo Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/tattoo_both_women_and_men</string>
+    </map>
+    <key>MarketplaceURL_hairFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Hair Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/womens_hair</string>
+    </map>
+    <key>MarketplaceURL_hairMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Hair Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/mens_hair</string>
+    </map>
+    <key>MarketplaceURL_eyesFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Eyes Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/womens_eyes</string>
+    </map>
+    <key>MarketplaceURL_eyesMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Eyes Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/mens_eyes</string>
+    </map>
+    <key>MarketplaceURL_shapeFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Shape Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/womens_shape</string>
+    </map>
+    <key>MarketplaceURL_shapeMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Shape Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/mens_shape</string>
+    </map>
+    <key>MarketplaceURL_skinFemale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Skin Female</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/womens_skin</string>
+    </map>
+    <key>MarketplaceURL_skinMale</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to the Marketplace Skins Male</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://marketplace.secondlife.com/trampoline/viewer21/mens_skin</string>
+    </map>
     <key>MaxDragDistance</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index 611396b0e5741386cbbb1dc90bc6235b378586d6..880d79222bc101a1bea2d1adbb597fa5839e81a2 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -34,6 +34,8 @@
 
 #include "llcofwearables.h"
 
+#include "llaccordionctrl.h"
+#include "llaccordionctrltab.h"
 #include "llagentdata.h"
 #include "llagentwearables.h"
 #include "llappearancemgr.h"
@@ -557,6 +559,14 @@ LLPanel* LLCOFWearables::getSelectedItem()
 	return mLastSelectedList->getSelectedItem();
 }
 
+void LLCOFWearables::getSelectedItems(std::vector<LLPanel*>& selected_items) const
+{
+	if (mLastSelectedList)
+	{
+		mLastSelectedList->getSelectedItems(selected_items);
+	}
+}
+
 void LLCOFWearables::clear()
 {
 	mAttachments->clear();
@@ -564,6 +574,29 @@ void LLCOFWearables::clear()
 	mBodyParts->clear();
 }
 
+LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
+{
+	static std::map<std::string, LLAssetType::EType> type_map;
+	static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion");
+
+	if (type_map.empty())
+	{
+		type_map["tab_clothing"] = LLAssetType::AT_CLOTHING;
+		type_map["tab_attachments"] = LLAssetType::AT_OBJECT;
+		type_map["tab_body_parts"] = LLAssetType::AT_BODYPART;
+	}
+
+	const LLAccordionCtrlTab* tab = accordion_ctrl->getExpandedTab();
+
+	if (!tab)
+	{
+		llwarns << "No accordion is expanded" << llendl;
+		return LLAssetType::AT_NONE;
+	}
+
+	return type_map[tab->getName()];
+}
+
 void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu)
 {
 	if(menu)
diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h
index f99f2662e656fa0412daacb155a437e111c90d0a..62f4cfc69276f9dc1ef537fa4a8c31ba2b21e396 100644
--- a/indra/newview/llcofwearables.h
+++ b/indra/newview/llcofwearables.h
@@ -78,10 +78,13 @@ class LLCOFWearables : public LLPanel
 	bool getSelectedUUIDs(uuid_vec_t& selected_ids);
 
 	LLPanel* getSelectedItem();
+	void getSelectedItems(std::vector<LLPanel*>& selected_items) const;
 
 	void refresh();
 	void clear();
 
+	LLAssetType::EType getExpandedAccordionAssetType();
+
 	LLCOFCallbacks& getCOFCallbacks() { return mCOFCallbacks; }
 
 protected:
diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h
index 473d2b189d699d1d0e6b171a0c9c6999587eefab..dc719bdafe5f56a5ecb78ec65f69bd9c7d348b0e 100644
--- a/indra/newview/llfloaterinventory.h
+++ b/indra/newview/llfloaterinventory.h
@@ -66,6 +66,7 @@ class LLFloaterInventory : public LLFloater
 	/*virtual*/ void onOpen(const LLSD& key);
 
 	LLInventoryPanel* getPanel();
+	LLPanelMainInventory* getMainInventoryPanel() { return mPanelMainInventory;}
 private:
 	LLPanelMainInventory* mPanelMainInventory;
 };
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index c86d463a08844e6afa6ef8cd27a335f0b08b0665..68fc86467c9305fb3e0ed49e0b6f8ae0c2a17619 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -52,6 +52,7 @@
 #include "llappearancemgr.h"
 #include "llappviewer.h"
 //#include "llfirstuse.h"
+#include "llfloaterinventory.h"
 #include "llfocusmgr.h"
 #include "llfolderview.h"
 #include "llgesturemgr.h"
@@ -63,6 +64,7 @@
 #include "llinventorypanel.h"
 #include "lllineeditor.h"
 #include "llmenugl.h"
+#include "llpanelmaininventory.h"
 #include "llpreviewanim.h"
 #include "llpreviewgesture.h"
 #include "llpreviewnotecard.h"
@@ -74,6 +76,7 @@
 #include "llscrollcontainer.h"
 #include "llselectmgr.h"
 #include "llsidetray.h"
+#include "llsidepanelinventory.h"
 #include "lltabcontainer.h"
 #include "lltooldraganddrop.h"
 #include "lluictrlfactory.h"
@@ -332,9 +335,38 @@ void show_item_profile(const LLUUID& item_uuid)
 
 void show_item_original(const LLUUID& item_uuid)
 {
+	bool reset_inventory_filter = !LLSideTray::getInstance()->isPanelActive("sidepanel_inventory");
+
 	LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel();
 	if (!active_panel) return;
 	active_panel->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_NO);
+	
+	if(reset_inventory_filter)
+	{
+		LLSidepanelInventory *sidepanel_inventory =
+			dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+		if(sidepanel_inventory)
+		{
+			LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel();
+
+			main_inventory->onFilterEdit("");
+		}
+
+		//now for inventory floater
+
+		LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
+		for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+		{
+			LLFloaterInventory* floater_inventory = dynamic_cast<LLFloaterInventory*>(*iter);
+			if (floater_inventory)
+			{
+				LLPanelMainInventory* main_inventory = floater_inventory->getMainInventoryPanel();
+
+				main_inventory->onFilterEdit("");
+			}
+		}
+
+	}
 }
 
 ///----------------------------------------------------------------------------
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 5a068373f58102117bcc05d3277cda68ba53b2b9..82b72ac224de1119bc97f3d2dfb66a0564a9197d 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -84,6 +84,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
 	
 	void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
 
+	void onFilterEdit(const std::string& search_string );
 protected:
 	//
 	// Misc functions
@@ -98,7 +99,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
 	void onClearSearch();
 	static void onFoldersByName(void *user_data);
 	static BOOL checkFoldersByName(void *user_data);
-	void onFilterEdit(const std::string& search_string );
+	
 	static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward);
 	void onFilterSelected();
 
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 1454a2f6af70f00d8555ab9ad7c13e0223289c7c..8da7432e0a97347375457d60e906b73d7e4e8482 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -72,6 +72,8 @@
 #include "lltoggleablemenu.h"
 #include "llwearablelist.h"
 #include "llwearableitemslist.h"
+#include "llwearabletype.h"
+#include "llweb.h"
 
 static LLRegisterPanelClassWrapper<LLPanelOutfitEdit> t_outfit_edit("panel_outfit_edit");
 
@@ -81,6 +83,65 @@ const U64 ALL_ITEMS_MASK = WEARABLE_MASK | ATTACHMENT_MASK;
 
 static const std::string REVERT_BTN("revert_btn");
 
+class LLShopURLDispatcher
+{
+public:
+	std::string resolveURL(LLWearableType::EType wearable_type, ESex sex);
+	std::string resolveURL(LLAssetType::EType asset_type, ESex sex);
+};
+
+std::string LLShopURLDispatcher::resolveURL(LLWearableType::EType wearable_type, ESex sex)
+{
+	const std::string prefix = "MarketplaceURL";
+	const std::string sex_str = (sex == SEX_MALE) ? "Male" : "Female";
+	const std::string type_str = LLWearableType::getTypeName(wearable_type);
+
+	std::string setting_name = prefix;
+
+	switch (wearable_type)
+	{
+	case LLWearableType::WT_ALPHA:
+	case LLWearableType::WT_NONE:
+	case LLWearableType::WT_INVALID:	// just in case, this shouldn't happen
+	case LLWearableType::WT_COUNT:		// just in case, this shouldn't happen
+		break;
+
+	default:
+		setting_name += '_';
+		setting_name += type_str;
+		setting_name += sex_str;
+		break;
+	}
+
+	return gSavedSettings.getString(setting_name);
+}
+
+std::string LLShopURLDispatcher::resolveURL(LLAssetType::EType asset_type, ESex sex)
+{
+	const std::string prefix = "MarketplaceURL";
+	const std::string sex_str = (sex == SEX_MALE) ? "Male" : "Female";
+	const std::string type_str = LLAssetType::lookup(asset_type);
+
+	std::string setting_name = prefix;
+
+	switch (asset_type)
+	{
+	case LLAssetType::AT_CLOTHING:
+	case LLAssetType::AT_OBJECT:
+	case LLAssetType::AT_BODYPART:
+		setting_name += '_';
+		setting_name += type_str;
+		setting_name += sex_str;
+		break;
+
+	// to suppress warnings
+	default:
+		break;
+	}
+
+	return gSavedSettings.getString(setting_name);
+}
+
 class LLPanelOutfitEditGearMenu
 {
 public:
@@ -262,6 +323,7 @@ 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);
 
 	mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
@@ -530,6 +592,46 @@ void LLPanelOutfitEdit::onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id
 	}
 }
 
+void LLPanelOutfitEdit::onShopButtonClicked()
+{
+	static LLShopURLDispatcher url_resolver;
+
+	std::string url;
+	std::vector<LLPanel*> selected_items;
+	mCOFWearables->getSelectedItems(selected_items);
+
+	ESex sex = gSavedSettings.getU32("AvatarSex") ? SEX_MALE : SEX_FEMALE;
+
+	if (selected_items.size() == 1)
+	{
+		LLWearableType::EType type = LLWearableType::WT_NONE;
+		LLPanel* item = selected_items.front();
+
+		// LLPanelDummyClothingListItem is lower then LLPanelInventoryListItemBase in hierarchy tree
+		if (LLPanelDummyClothingListItem* dummy_item = dynamic_cast<LLPanelDummyClothingListItem*>(item))
+		{
+			type = dummy_item->getWearableType();
+		}
+		else if (LLPanelInventoryListItemBase* real_item = dynamic_cast<LLPanelInventoryListItemBase*>(item))
+		{
+			type = real_item->getWearableType();
+		}
+
+		// WT_INVALID comes for attachments
+		if (type != LLWearableType::WT_INVALID)
+		{
+			url = url_resolver.resolveURL(type, sex);
+		}
+	}
+
+	if (url.empty())
+	{
+		url = url_resolver.resolveURL(mCOFWearables->getExpandedAccordionAssetType(), sex);
+	}
+
+	LLWeb::loadURLExternal(url);
+}
+
 void LLPanelOutfitEdit::onRemoveFromOutfitClicked(void)
 {
 	LLUUID id_to_remove = mCOFWearables->getSelectedUUID();
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 56c6c6d68020d6de832835216957bd0a064b666f..1705e3043b6abe1542d09b68bac73d53fde40660 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -163,6 +163,7 @@ class LLPanelOutfitEdit : public LLPanel
 	void onEditWearableClicked(void);
 	void onAddWearableClicked(void);
 	void onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id);
+	void onShopButtonClicked();
 
 	void displayCurrentOutfit();
 	void updateCurrentOutfitName();
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 5563214407af75b79bbdfeff4f2cdcad7bd2be21..7e1bff09617d0710fff881c8a910727d75249277 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -86,7 +86,6 @@ class LLOutfitListGearMenu
 
 		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));
 
@@ -159,15 +158,6 @@ class LLOutfitListGearMenu
 		}
 	}
 
-	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();
@@ -197,11 +187,7 @@ class LLOutfitListGearMenu
 			return false;
 		}
 
-		if ("rename" == param)
-		{
-			return get_is_category_renameable(&gInventory, selected_outfit_id);
-		}
-		else if ("delete" == param)
+		if ("delete" == param)
 		{
 			return LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit_id);
 		}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 2dc17e741d51d51d065ce81394a208f012008a25..a038f9985347c2c04bbe679da9bc6dc8e08b2f6b 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -51,6 +51,7 @@ class LLSidepanelInventory : public LLPanel
 	/*virtual*/ void onOpen(const LLSD& key);
 
 	LLInventoryPanel* getActivePanel(); // Returns an active inventory panel, if any.
+	LLPanelMainInventory* getMainInventoryPanel() const { return mPanelMainInventory; }
 	BOOL isMainInventoryPanelActive() const;
 
 protected:
diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
index e94af2c8d512c9f4d5c02a186947629cd1e4c838..d1db5c17bad13fea24d79e0f34c075aeb4a66aad 100644
--- a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
@@ -18,6 +18,7 @@
      max_length="2147483647"
      name="Chat History Editor"
      parse_highlights="true" 
+     read_only="true"
      width="420"
      word_wrap="true" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
index 8e7ef7f0b55f964384f301b54ee94bfe8a5b53ea..16b33eff892f6b941328150248f49eb27ea3b6c5 100644
--- a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
@@ -175,19 +175,6 @@
             <!-- copied from menu_inventory_add.xml -->
 
     <menu_item_separator name="sepatator2" />
-    <menu_item_call
-     label="Rename Outfit"
-     layout="topleft"
-     name="rename">
-        <on_click
-         function="Gear.Rename" />
-        <on_enable
-         function="Gear.OnEnable"
-         parameter="rename" />
-        <on_visible
-         function="Gear.OnVisible"
-         parameter="rename" />
-    </menu_item_call>
     <menu_item_call
      label="Delete Outfit"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml
index 430a7b6444475308d2646a6b14a917740b59ac20..efea2ae3e8f65c752316582b4eadee9bfcdb332a 100644
--- a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml
@@ -2,7 +2,7 @@
 <context_menu
  name="Outfit Wearable Context Menu">
     <menu_item_call
-     label="Wear"
+     label="Replace"
      layout="topleft"
      name="wear">
         <on_click
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index e4eb9afb290a859a4561177ff228f446f594aa93..e894fc8fb8bd8431ae2b4ed7c44ed8012188ca22 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -95,7 +95,8 @@ background_visible="true"
        name="group_accordions"
        follows="all"
        layout="topleft"
-       auto_resize="true">
+       auto_resize="true"
+       width="313">
    <accordion
      left="0"
      top="0"
@@ -103,7 +104,8 @@ background_visible="true"
      fit_parent="true"
      follows="all"
      layout="topleft"
-     name="groups_accordion">
+     name="groups_accordion"
+     width="313">
          <accordion_tab
             expanded="true"
             layout="topleft"
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 ed3b1762678fdfb99d256c54d54e4a4d797e2870..03a0c464d2fcde93632ec9d953c12ef395423a95 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -144,7 +144,7 @@ Required height for dragbar (icon in spec) is 10, so resizebar height should be
 It is calculated as border_size + 2*UIResizeBarOverlap
 -->
     <layout_stack
-     animate="false"
+     animate="true"
      border_size="8"
      clip="false"
      default_tab_group="2"
@@ -284,7 +284,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
          bg_alpha_color="DkGray2"
          auto_resize="true"
          default_tab_group="3"
-         height="211"
+         height="450"
          min_height="210"
          name="add_wearables_panel"
          width="313"
@@ -307,7 +307,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
              background_visible="false"
              border="false"
              follows="left|top|right|bottom"
-             height="203"
+             height="442"
              layout="topleft"
              left="0"
              mouse_opaque="false"
@@ -322,7 +322,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
              layout="topleft"
              follows="left|top|right|bottom"
              border="false"
-             height="210"
+             height="449"
              left="0"
              mouse_opaque="false"
              width="310"
@@ -336,7 +336,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
                  follows="all"
                  multi_select="true"
                  width="310"
-                 height="210"
+                 height="449"
                  left="0"
                  top="0"/>
             </panel>
@@ -375,7 +375,19 @@ It is calculated as border_size + 2*UIResizeBarOverlap
          layout="topleft"
          left_pad="1"
          name="dummy_right_icon"
-         width="281" />
+         width="246" />
+        <button
+         follows="bottom|right"
+         height="25"
+         image_hover_unselected="Toolbar_Middle_Over"
+         image_overlay="AddItem_Off"
+         image_selected="Toolbar_Middle_Selected"
+         image_unselected="Toolbar_Middle_Off"
+         layout="topleft"
+         left_pad="0"
+         name="shop_btn"
+         top="1"
+         width="31" />
     </panel>
     
     
@@ -490,7 +502,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
          follows="bottom|left|right"
          height="23"
          left_pad="12"
-         label="Revert"
+         label="Undo Changes"
          layout="topleft"
          name="revert_btn"
          top="0"