diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index afc9d5b1235a4ee80556d776ca449eddfa41c7cd..c6d52a06614234de4f62e5dc5856df5a6b25b4ce 100755
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -317,6 +317,7 @@ void LLPanelFace::sendTexture()
 void LLPanelFace::sendBump(U32 bumpiness)
 {	
 	LLTextureCtrl* bumpytexture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
+	LLUUID current_normal_map = bumpytexture_ctrl->getImageAssetID();
 
 	if (bumpiness < BUMPY_TEXTURE)
 	{
@@ -329,7 +330,7 @@ void LLPanelFace::sendBump(U32 bumpiness)
 	LLSelectMgr::getInstance()->selectionSetBumpmap( bump );
 
 	updateBumpyControls(bumpiness == BUMPY_TEXTURE, true);
-	LLSelectedTEMaterial::setNormalID(this, bumpytexture_ctrl->getImageAssetID());
+	LLSelectedTEMaterial::setNormalID(this, current_normal_map);
 }
 
 void LLPanelFace::sendTexGen()
@@ -1443,6 +1444,11 @@ void LLPanelFace::onSelectColor(const LLSD& data)
 void LLPanelFace::onCommitMaterialsMedia(LLUICtrl* ctrl, void* userdata)
 {
 	LLPanelFace* self = (LLPanelFace*) userdata;
+	// Force to default states to side-step problems with menu contents
+	// and generally reflecting old state when switching tabs or objects
+	//
+	self->updateShinyControls(false,true);
+	self->updateBumpyControls(false,true);
 	self->updateUI();
 }
 
@@ -1530,10 +1536,11 @@ void LLPanelFace::updateVisibility()
 void LLPanelFace::onCommitMaterialType(LLUICtrl* ctrl, void* userdata)
 {
     LLPanelFace* self = (LLPanelFace*) userdata;
-    // This is here to insure that we properly update shared UI elements
-    // like the texture ctrls for diffuse/norm/spec so that they are correct
-    // when switching modes
-    //
+	 // Force to default states to side-step problems with menu contents
+	 // and generally reflecting old state when switching tabs or objects
+	 //
+	 self->updateShinyControls(false,true);
+	 self->updateBumpyControls(false,true);
     self->updateUI();
 }
 
@@ -1801,7 +1808,7 @@ void LLPanelFace::onCommitSpecularTexture( const LLSD& data )
 void LLPanelFace::onCommitNormalTexture( const LLSD& data )
 {
 	LL_DEBUGS("Materials") << data << LL_ENDL;
-	sendBump(BUMPY_TEXTURE);
+	sendBump(getCurrentNormalMap().isNull() ? 0 : BUMPY_TEXTURE);
 }
 
 void LLPanelFace::onCancelSpecularTexture(const LLSD& data)
diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h
index b6a8df19fe6718a19bb598bcfa05b6ab87979515..84aba4dc89f1865b4fb6e945130051e0b30fffe4 100755
--- a/indra/newview/llpanelface.h
+++ b/indra/newview/llpanelface.h
@@ -242,7 +242,7 @@ class LLPanelFace : public LLPanel
 
 					// Default to matching expected state of UI
 					//
-					new_material->setDiffuseAlphaMode(default_alpha_mode);
+					new_material->setDiffuseAlphaMode(current_material.isNull() ? default_alpha_mode : current_material->getDiffuseAlphaMode());
 
 					// Do "It"!
 					//
@@ -262,16 +262,6 @@ class LLPanelFace : public LLPanel
 					}
 					else
 					{
-						// Replicate old init behavior
-						//
-						if (current_material.isNull())
-						{
-							U8	current_alpha_mode			= _panel->getCurrentDiffuseAlphaMode();
-							U8	current_alpha_mask_cutoff	= _panel->getCurrentAlphaMaskCutoff();
-							new_material->setDiffuseAlphaMode(current_alpha_mode);
-							new_material->setAlphaMaskCutoff(current_alpha_mask_cutoff);
-						}
-
 						LL_DEBUGS("Materials") << "Putting material on object " << object->getID() << " face " << face << ", material: " << new_material->asLLSD() << LL_ENDL;
 						LLMaterialMgr::getInstance()->put(object->getID(),face,*new_material);
 					}