diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp
index 6749a85f3cb4bcdd8b356fb6cf615143fd6ecb6c..d064b2982c07d839928b403f36ad12a46369a667 100644
--- a/indra/llappearance/llwearable.cpp
+++ b/indra/llappearance/llwearable.cpp
@@ -60,6 +60,14 @@ LLWearable::LLWearable()
 // virtual
 LLWearable::~LLWearable()
 {
+	for (visual_param_index_map_t::iterator vpIter = mVisualParamIndexMap.begin(); vpIter != mVisualParamIndexMap.end(); ++vpIter)
+	{
+		LLVisualParam* vp = vpIter->second;
+		vp->clearNextParam();
+		delete vp;
+		vpIter->second = NULL;
+	}
+
 	destroyTextures();
 }
 
diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp
index 0df7fb2bc3c73b9784e452bc2b037bc601064363..dd87847c186c7bc6687f79687fc9de8b71502f46 100755
--- a/indra/llcharacter/llvisualparam.cpp
+++ b/indra/llcharacter/llvisualparam.cpp
@@ -178,7 +178,10 @@ LLVisualParam::LLVisualParam()
 //-----------------------------------------------------------------------------
 LLVisualParam::~LLVisualParam()
 {
-	delete mNext;
+	if (mNext != NULL)
+	{
+		delete mNext;
+	}
 }
 
 /*
@@ -284,6 +287,14 @@ void LLVisualParam::setNextParam( LLVisualParam *next )
 	mNext = next;
 }
 
+//-----------------------------------------------------------------------------
+// clearNextParam()
+//-----------------------------------------------------------------------------
+void LLVisualParam::clearNextParam()
+{
+	mNext = NULL;
+}
+
 //-----------------------------------------------------------------------------
 // animate()
 //-----------------------------------------------------------------------------
diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h
index a4d9f93e56f78b5fb3f8f6f970e6a62fa6ca64a7..78c776705ff21f970ff50f2cdde6a73b04bfebe8 100755
--- a/indra/llcharacter/llvisualparam.h
+++ b/indra/llcharacter/llvisualparam.h
@@ -155,6 +155,7 @@ class LLVisualParam
 
 	LLVisualParam*			getNextParam()		{ return mNext; }
 	void					setNextParam( LLVisualParam *next );
+	void					clearNextParam();
 	
 	virtual void			setAnimating(BOOL is_animating) { mIsAnimating = is_animating && !mIsDummy; }
 	BOOL					getAnimating() const { return mIsAnimating; }