diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index ad42d80467a7f8d88538350ca2aa2a2bca82655b..cce4f940288100d3d0ba8c1d9a17935afe43b04f 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -168,26 +168,21 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 
 		std::string name = cat->getName();
 
-		// *TODO: create accordion tabs and lists from XML.
-		LLAccordionCtrlTab::Params params;
-		params.name(name);
-		params.title(name);
-		params.rect(LLRect(0, 0, 315, 20));
-		params.display_children(false);
-		LLAccordionCtrlTab* tab  = LLUICtrlFactory::create<LLAccordionCtrlTab>(params);
+		static LLXMLNodePtr accordionXmlNode = getAccordionTabXMLNode();
 
-		mAccordion->addCollapsibleCtrl(tab);
-
-		LLFlatListView::Params list_params;
-		LLWearableItemsList* list  = LLUICtrlFactory::create<LLWearableItemsList>(list_params);
+		accordionXmlNode->setAttributeString("name", name);
+		accordionXmlNode->setAttributeString("title", name);
+		LLAccordionCtrlTab* tab = LLUICtrlFactory::defaultBuilder<LLAccordionCtrlTab>(accordionXmlNode, NULL, NULL);
 
-		tab->addChild(list, 0);
-		tab->setDisplayChildren(false);
+		// *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated.
+		tab->setDisplayChildren(false); 
+		mAccordion->addCollapsibleCtrl(tab);
 
 		// Map the new tab with outfit category UUID.
 		mOutfitsMap.insert(LLOutfitsList::outfits_map_value_t(cat_id, tab));
 
 		// Start observing the new outfit category.
+		LLWearableItemsList* list  = tab->getChild<LLWearableItemsList>("wearable_items_list");
 		mCategoriesObserver->addCategory(cat_id, boost::bind(&LLWearableItemsList::updateList, list, cat_id));
 
 		// Fetch the new outfit contents.
@@ -262,4 +257,21 @@ void LLOutfitsList::setFilterSubString(const std::string& string)
 	mFilterSubString = string;
 }
 
+
+//////////////////////////////////////////////////////////////////////////
+// Private methods
+//////////////////////////////////////////////////////////////////////////
+LLXMLNodePtr LLOutfitsList::getAccordionTabXMLNode()
+{
+	LLXMLNodePtr xmlNode = NULL;
+	bool success = LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode);
+	if (!success)
+	{
+		llwarns << "Failed to read xml of Outfit's Accordion Tab from outfit_accordion_tab.xml" << llendl;
+		return NULL;
+	}
+
+	return xmlNode;
+}
+
 // EOF
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index 892e0a862a04ee5a92d08f25141c29c77ee2d7e0..f1756ce873b1e7339743465a9d7e947c80786fd8 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -59,6 +59,14 @@ class LLOutfitsList : public LLPanel, public LLInventoryObserver
 	void setFilterSubString(const std::string& string);
 
 private:
+	/**
+	 * Reads xml with accordion tab and Flat list from xml file.
+	 *
+	 * @return LLPointer to XMLNode with accordion tab and flat list.
+	 */
+	LLXMLNodePtr getAccordionTabXMLNode();
+
+
 	LLInventoryCategoriesObserver* 	mCategoriesObserver;
 
 	LLAccordionCtrl*				mAccordion;
diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d00b1bfb7b8273e86b839ab32967728f0aa1d129
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- *NOTE: mantipov: this xml is intended to be used inside panel_outfits_list.xml for each outfit folder-->
+<!-- All accordion tabs in the My Appearance/My Outfits panel will be created from this one at runtume-->
+<accordion_tab
+ display_children="false"
+ follows="all"
+ height="40"
+ layout="topleft"
+ name="Mockup Tab"
+ title="Mockup Tab"
+ width="0">
+    <wearable_items_list
+     allow_select="true"
+     follows="all"
+     keep_one_selected="true"
+     name="wearable_items_list"
+    />
+</accordion_tab>