diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 5d56a5dfa14442110e2a3c5eecddf2740864249c..1552c985943da85fc2caaa80a13636969103cd26 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -412,7 +412,7 @@ void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, B
 			return;
 		}
 
-		gAgent.getAvatarObject()->wearableUpdated( type );
+		gAgent.getAvatarObject()->wearableUpdated( type, TRUE );
 
 		if (send_update)
 		{
@@ -702,7 +702,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl
 
 void LLAgentWearables::wearableUpdated(LLWearable *wearable)
 {
-	mAvatarObject->wearableUpdated(wearable->getType());
+	mAvatarObject->wearableUpdated(wearable->getType(), TRUE);
 	wearable->setLabelUpdated();
 
 	// Hack pt 2. If the wearable we just loaded has definition version 24,
@@ -743,7 +743,7 @@ void LLAgentWearables::popWearable(const EWearableType type, U32 index)
 	if (wearable)
 	{
 		mWearableDatas[type].erase(mWearableDatas[type].begin() + index);
-		mAvatarObject->wearableUpdated(wearable->getType());
+		mAvatarObject->wearableUpdated(wearable->getType(), TRUE);
 		wearable->setLabelUpdated();
 	}
 }
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index a90f3ee181381b6f7b99174c31e06655fa6001ad..8d3dcf8a9995e9fb1a5345402cb1d3264d6344a4 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -689,24 +689,24 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 		}
 	}
 
+	LLGLSUIDefault gls_ui;
+	LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
+	gGL.setColorMask(true, true);
+
+	// clear buffer area to ensure we don't pick up UI elements
+	{
+		gGL.flush();
+		LLGLDisable no_alpha(GL_ALPHA_TEST);
+		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+		gGL.color4f( 0.f, 0.f, 0.f, 1.f );
+
+		gl_rect_2d_simple( width, height );
+
+		gGL.flush();
+	}
+
 	if (mIsVisible)
 	{
-		LLGLSUIDefault gls_ui;
-		LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
-		gGL.setColorMask(true, true);
-	
-		// clear buffer area to ensure we don't pick up UI elements
-		{
-			gGL.flush();
-			LLGLDisable no_alpha(GL_ALPHA_TEST);
-			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-			gGL.color4f( 0.f, 0.f, 0.f, 1.f );
-			
-			gl_rect_2d_simple( width, height );
-			
-			gGL.flush();
-		}
-	
 		// composite color layers
 		for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
 		{
@@ -723,6 +723,21 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 	
 		stop_glerror();
 	}
+	else
+	{
+		gGL.flush();
+
+		gGL.setSceneBlendType(LLRender::BT_REPLACE);
+		LLGLDisable no_alpha(GL_ALPHA_TEST);
+		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+		gGL.color4f( 0.f, 0.f, 0.f, 0.f );
+
+		gl_rect_2d_simple( width, height );
+		gGL.setSceneBlendType(LLRender::BT_ALPHA);
+
+		gGL.flush();
+
+	}
 
 	return success;
 }
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index f3e787ae7eff505356951c0a1e604adb0148ed24..7d6401acde059d94349101c94d33b08432a03eec 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -918,9 +918,9 @@ void LLVOAvatarSelf::updateAttachmentVisibility(U32 camera_mode)
 //-----------------------------------------------------------------------------
 // updatedWearable( EWearableType type )
 // forces an update to any baked textures relevant to type.
-// Should be called only on saving the wearable
+// will force an upload of the resulting bake if the second parameter is TRUE
 //-----------------------------------------------------------------------------
-void LLVOAvatarSelf::wearableUpdated( EWearableType type )
+void LLVOAvatarSelf::wearableUpdated( EWearableType type, BOOL upload_result )
 {
 	for (LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin();
 		 baked_iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end();
@@ -939,7 +939,7 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type )
 				{
 					if (mBakedTextureDatas[index].mTexLayerSet)
 					{
-						invalidateComposite(mBakedTextureDatas[index].mTexLayerSet, TRUE);
+						invalidateComposite(mBakedTextureDatas[index].mTexLayerSet, upload_result);
 					}
 					break;
 				}
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index e376e5e9efa7d23604d0bc9c2bdd84c82c5d937a..6bf4ef5496a2b084ba68b641ed259836434265d7 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -270,7 +270,7 @@ class LLVOAvatarSelf :
 
 public:
 	/*virtual*/ BOOL	isWearingWearableType(EWearableType type) const;
-	void				wearableUpdated(EWearableType type);
+	void				wearableUpdated(EWearableType type, BOOL upload_result);
 protected:
 	U32 getNumWearables(LLVOAvatarDefines::ETextureIndex i) const;
 
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index d92da4ef4441eae11133b93b13da6f9ce3a23a3f..050b218356347db8c42748a6cce0b4da4b4c1596 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -703,7 +703,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )
 	}
 
 	avatar->updateVisualParams();
-	avatar->wearableUpdated(type);
+	avatar->wearableUpdated(type, TRUE);
 
 //	if( upload_bake )
 //	{