diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 36f2d05fabeee1c6ea22efaa8beddec0fceb2822..8d0e3d46478ca708bdeed37bcb008be30c930fe4 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -520,7 +520,8 @@ static void init_color_swatch_ctrl(LLPanelEditWearable* self, LLPanel* panel, co
 	LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);
 	if (color_swatch_ctrl)
 	{
-		color_swatch_ctrl->setOriginal(self->getWearable()->getClothesColor(entry->mTextureIndex));
+		// Can't get the color from the wearable here, since the wearable may not be set when this is called.
+		color_swatch_ctrl->setOriginal(LLColor4::white);
 	}
 }
 
@@ -654,6 +655,49 @@ BOOL LLPanelEditWearable::postBuild()
 	configureAlphaCheckbox(LLVOAvatarDefines::TEX_EYES_ALPHA, "eye alpha texture invisible");
 	configureAlphaCheckbox(LLVOAvatarDefines::TEX_HAIR_ALPHA, "hair alpha texture invisible");
 
+	// configure tab expanded callbacks
+	for (U32 type_index = 0; type_index < (U32)LLWearableType::WT_COUNT; ++type_index)
+	{
+		LLWearableType::EType type = (LLWearableType::EType) type_index;
+		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+		if (!wearable_entry)
+		{
+			llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
+			continue;
+		}
+		U8 num_subparts = wearable_entry->mSubparts.size();
+	
+		for (U8 index = 0; index < num_subparts; ++index)
+		{
+			// dive into data structures to get the panel we need
+			ESubpart subpart_e = wearable_entry->mSubparts[index];
+			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+	
+			if (!subpart_entry)
+			{
+				llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
+				continue;
+			}
+	
+			const std::string accordion_tab = subpart_entry->mAccordionTab;
+	
+			LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
+	
+			if (!tab)
+			{
+				llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
+				continue;
+			}
+	
+			// initialize callback to ensure camera view changes appropriately.
+			tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index));
+		}
+
+		// initialize texture and color picker controls
+		for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2));
+		for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2));
+	}
+
 	return TRUE;
 }
 
@@ -690,10 +734,9 @@ void LLPanelEditWearable::setWearable(LLWearable *wearable)
 	showWearable(mWearablePtr, FALSE);
 	mWearablePtr = wearable;
 	showWearable(mWearablePtr, TRUE);
-
-	initializePanel();
 }
 
+
 //static 
 void LLPanelEditWearable::onRevertButtonClicked(void* userdata)
 {
@@ -880,29 +923,83 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)
 	std::string title;
 	std::string description_title;
 
-	const LLEditWearableDictionary::WearableEntry *entry = LLEditWearableDictionary::getInstance()->getWearable(type);
-	if (!entry)
+	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+	if (!wearable_entry)
 	{
 		llwarns << "called LLPanelEditWearable::showWearable with an invalid wearable type! (" << type << ")" << llendl;
 		return;
 	}
 
 	targetPanel = getPanel(type);
-	title = getString(entry->mTitle);
-	description_title = getString(entry->mDescTitle);
+	title = getString(wearable_entry->mTitle);
+	description_title = getString(wearable_entry->mDescTitle);
+
+	// Update picker controls state
+	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2));
+	for_each_picker_ctrl_entry <LLTextureCtrl>     (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2));
 
 	targetPanel->setVisible(show);
+	toggleTypeSpecificControls(type);
+
 	if (show)
 	{
 		mPanelTitle->setText(title);
 		mDescTitle->setText(description_title);
-	}
+		
+		// set name
+		mTextEditor->setText(wearable->getName());
 
-	// Update picker controls state
-	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2));
-	for_each_picker_ctrl_entry <LLTextureCtrl>     (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2));
+		updatePanelPickerControls(type);
+		updateTypeSpecificControls(type);
 
-	showDefaultSubpart();
+		// clear and rebuild visual param list
+		U8 num_subparts = wearable_entry->mSubparts.size();
+	
+		for (U8 index = 0; index < num_subparts; ++index)
+		{
+			// dive into data structures to get the panel we need
+			ESubpart subpart_e = wearable_entry->mSubparts[index];
+			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+	
+			if (!subpart_entry)
+			{
+				llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
+				continue;
+			}
+	
+			const std::string scrolling_panel = subpart_entry->mParamList;
+			const std::string accordion_tab = subpart_entry->mAccordionTab;
+	
+			LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
+			LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
+	
+			if (!panel_list)
+			{
+				llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
+				continue;
+			}
+	
+			if (!tab)
+			{
+				llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
+				continue;
+			}
+	
+			// what edit group do we want to extract params for?
+			const std::string edit_group = subpart_entry->mEditGroup;
+	
+			// storage for ordered list of visual params
+			value_map_t sorted_params;
+			getSortedParams(sorted_params, edit_group);
+	
+			buildParamList(panel_list, sorted_params, tab);
+	
+			updateScrollingPanelUI();
+		}
+		showDefaultSubpart();
+
+		updateVerbs();
+	}
 }
 
 void LLPanelEditWearable::showDefaultSubpart()
@@ -967,91 +1064,6 @@ void LLPanelEditWearable::updateScrollingPanelList()
 	updateScrollingPanelUI();
 }
 
-void LLPanelEditWearable::initializePanel()
-{
-	if (!mWearablePtr)
-	{
-		// cannot initialize with a null reference.
-		return;
-	}
-
-	LLWearableType::EType type = mWearablePtr->getType();
-
-	// set name
-	mTextEditor->setText(mWearablePtr->getName());
-
-	// toggle wearable type-specific controls
-	toggleTypeSpecificControls(type);
-
-	// clear and rebuild visual param list
-	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
-	if (!wearable_entry)
-	{
-		llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
-		return;
-	}
-	U8 num_subparts = wearable_entry->mSubparts.size();
-
-	for (U8 index = 0; index < num_subparts; ++index)
-	{
-		// dive into data structures to get the panel we need
-		ESubpart subpart_e = wearable_entry->mSubparts[index];
-		const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
-
-		if (!subpart_entry)
-		{
-			llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
-			continue;
-		}
-
-		const std::string scrolling_panel = subpart_entry->mParamList;
-		const std::string accordion_tab = subpart_entry->mAccordionTab;
-
-		LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
-		LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
-
-		if (!panel_list)
-		{
-			llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
-			continue;
-		}
-
-		if (!tab)
-		{
-			llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
-			continue;
-		}
-
-		// what edit group do we want to extract params for?
-		const std::string edit_group = subpart_entry->mEditGroup;
-
-		// initialize callback to ensure camera view changes appropriately.
-		tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index));
-
-		// storage for ordered list of visual params
-		value_map_t sorted_params;
-		getSortedParams(sorted_params, edit_group);
-
-		buildParamList(panel_list, sorted_params, tab);
-
-		updateScrollingPanelUI();
-	}
-
-	// initialize texture and color picker controls
-	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2));
-	for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2));
-
-	showDefaultSubpart();
-	updateVerbs();
-
-	if (getWearable())
-	{
-		LLWearableType::EType type = getWearable()->getType();
-		updatePanelPickerControls(type);
-		updateTypeSpecificControls(type);
-	}
-}
-
 void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type)
 {
 	// Toggle controls specific to shape editing panel.
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
index b6b8c0c781115528a0923e07749f9dfbc5522de8..6b376fe3d9ca8c7350fb0c83945b5d1716f5ac45 100644
--- a/indra/newview/llpaneleditwearable.h
+++ b/indra/newview/llpaneleditwearable.h
@@ -78,7 +78,6 @@ class LLPanelEditWearable : public LLPanel
 	typedef std::map<F32, LLViewerVisualParam*> value_map_t;
 
 	void				showWearable(LLWearable* wearable, BOOL show);
-	void				initializePanel();
 	void				updateScrollingPanelUI();
 	LLPanel*			getPanel(LLWearableType::EType type);
 	void				getSortedParams(value_map_t &sorted_params, const std::string &edit_group);