diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index b2399d238bdc00c00f6b2a28b8713b8dbe2311f8..dc6847f2360cdec2ce46d352e9638cb05382d0fd 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -306,13 +306,16 @@ void LLColorSwatchCtrl::onColorChanged ( void* data, EColorPickOp pick_op )
 	}
 }
 
-void LLColorSwatchCtrl::onFloaterClose()
+// This is called when the main floatercustomize panel is closed.
+// Since this class has pointers up to its parents, we need to cleanup
+// this class first in order to avoid a crash.
+void LLColorSwatchCtrl::onParentFloaterClosed()
 {
 	LLFloaterColorPicker* pickerp = (LLFloaterColorPicker*)mPickerHandle.get();
-
 	if (pickerp)
 	{
 		pickerp->setSwatch(NULL);
+		pickerp->closeFloater();
 	}
 
 	mPickerHandle.markDead();
diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h
index 2f6aec85e86bbd6adff4e2c7aea7782ea5921771..4bb7d837cbe32865027f12fb8b9ed95ad62cb2e1 100644
--- a/indra/newview/llcolorswatch.h
+++ b/indra/newview/llcolorswatch.h
@@ -105,7 +105,7 @@ class LLColorSwatchCtrl
 	/*virtual*/ void	setEnabled( BOOL enabled );
 
 	static void		onColorChanged ( void* data, EColorPickOp pick_op = COLOR_CHANGE );
-	void			onFloaterClose();
+	void			onParentFloaterClosed();
 
 protected:
 	BOOL			mValid;
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 56b56dc3d2f3c8801033ac7dca04a775982097e5..73b79d8e132db5b1144a78e0beaab372a8f88017 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -241,16 +241,6 @@ BOOL LLFloaterColorPicker::postBuild()
     return TRUE;
 }
 
-/*virtual*/ 
-void LLFloaterColorPicker::onClose(bool app_settings)
-{
-	if (mSwatch)
-	{
-		mSwatch->onFloaterClose();
-	}
-	stopUsingPipette();
-}
-
 //////////////////////////////////////////////////////////////////////////////
 //
 void LLFloaterColorPicker::initUI ( F32 rValIn, F32 gValIn, F32 bValIn )