diff --git a/.hgtags b/.hgtags
index 9a32bc53cc38395ebe599c3ea82da4a4651f6af9..f32e71f85c18d79eb615a75554124fb4a32fb74e 100644
--- a/.hgtags
+++ b/.hgtags
@@ -111,3 +111,6 @@ d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
 bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
 bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
 5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
+11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start
+11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start
+e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index 794cdb83d592d82531ea6a4babc48cb3d0192b5d..57ac7a143f3f6206e192f264378b580d4cc0aaad 100644
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -991,6 +991,9 @@ void LLModel::normalizeVolumeFaces()
 		scale.splat(1.f);
 		scale.div(size);
 
+		LLVector4a inv_scale(1.f);
+		inv_scale.div(scale);
+
 		for (U32 i = 0; i < mVolumeFaces.size(); ++i)
 		{
 			LLVolumeFace& face = mVolumeFaces[i];
@@ -1007,10 +1010,14 @@ void LLModel::normalizeVolumeFaces()
 			// For all the positions, we scale
 			// the positions to fit within the unit cube.
 			LLVector4a* pos = (LLVector4a*) face.mPositions;
+			LLVector4a* norm = (LLVector4a*) face.mNormals;
+
 			for (U32 j = 0; j < face.mNumVertices; ++j)
 			{
 			 	pos[j].add(trans);
 				pos[j].mul(scale);
+				norm[j].mul(inv_scale);
+				norm[j].normalize3();
 			}
 		}
 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 071fcd2a3f6a8f1ae231c99fe4dea2a8f391a83f..78db307d648b196ceb70d18a6c7d555e1b98f6d9 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3982,17 +3982,6 @@
       <key>Value</key>
       <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
     </map>
-    <key>SearchURLBeta</key>
-    <map>
-      <key>Comment</key>
-      <string>URL for Search website, displayed in the Find floater</string>
-      <key>Persist</key>
-      <integer>0</integer>
-      <key>Type</key>
-      <string>String</string>
-      <key>Value</key>
-      <string>http://beta.search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
-    </map>
     <key>WebProfileURL</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index c6b5a0113ff9d2b2f3d0ea49916700e459144acf..80085dad9d2609d53f12cfdc6c7226ca76dec9e3 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -394,7 +394,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi
 	LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation
 	LLVector3 object_extents;	
 	const LLVector4a* oe4 = object->mDrawable->getSpatialExtents();
-	object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] );
+	LLVector4a size;
+	size.setSub(oe4[1], oe4[0]);
+	object_extents.set( size[0], size[1], size[2] );
 	
 	// make sure they object extents are non-zero
 	object_extents.clamp(0.001f, F32_MAX);
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index b7e9865228153340ca245ec26e0d88d7e17d5eba..241e908d8c5a9cae65994740e94af09e197d5d88 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -3848,6 +3848,18 @@ void LLModelPreview::updateStatusMessages()
 		}
 	}
 
+
+	//make sure no hulls have more than 256 points in them
+	for (U32 i = 0; upload_ok && i < mModel[LLModel::LOD_PHYSICS].size(); ++i)
+	{
+		LLModel* mdl = mModel[LLModel::LOD_PHYSICS][i];
+
+		for (U32 j = 0; upload_ok && j < mdl->mPhysics.mHull.size(); ++j)
+		{
+			upload_ok = upload_ok && mdl->mPhysics.mHull[i].size() <= 256;
+		}
+	}
+
 	bool errorStateFromLoader = getLoadState() >= LLModelLoader::ERROR_PARSING ? true : false;
 
 	bool skinAndRigOk = true;
@@ -3871,6 +3883,10 @@ void LLModelPreview::updateStatusMessages()
 	{
 		mFMP->childEnable("ok_btn");
 	}
+	else
+	{
+		mFMP->childDisable("ok_btn");
+	}
 	
 	//add up physics triangles etc
 	S32 start = 0;
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 34fda493754dda653f2fa98e4dbed3c6374d2e0c..fc6976755f8909832b1f8003c74aa901e4af19b8 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -590,6 +590,11 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region)
 	getChildView("im_btn")->setEnabled(allow_modify);
 	getChildView("manage_telehub_btn")->setEnabled(allow_modify);
 
+	const bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") && 
+		gAgent.getRegion() &&
+		!gAgent.getRegion()->getCapability("GetMesh").empty();
+	getChildView("mesh_rez_enabled_check")->setVisible(enable_mesh);
+	getChildView("mesh_rez_enabled_check")->setEnabled(getChildView("mesh_rez_enabled_check")->getEnabled() && enable_mesh);
 	// Data gets filled in by processRegionInfo
 
 	return LLPanelRegionInfo::refreshFromRegion(region);
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index c8fe380710a8f5d3cf9a75ba98a124d5d97b18bc..d5806e375c18ab8e02dd623467d65c3c63b28f22 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -38,7 +38,6 @@
 #include "llui.h"
 #include "llviewercontrol.h"
 #include "llweb.h"
-#include "llversioninfo.h"
 
 // support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps
 class LLSearchHandler : public LLCommandHandler
@@ -204,15 +203,7 @@ void LLFloaterSearch::search(const LLSD &key)
 
 	// get the search URL and expand all of the substitutions
 	// (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
-	std::string url;
-	if (LLVersionInfo::getChannel().find("Beta") != std::string::npos)
-	{
-		url = gSavedSettings.getString("SearchURLBeta");
-	}
-	else
-	{
-		url = gSavedSettings.getString("SearchURL");
-	}
+	std::string url = gSavedSettings.getString("SearchURL");
 	url = LLWeb::expandURLSubstitutions(url, subs);
 
 	// and load the URL in the web view
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 64af6c2157b97cf1d6cdea643288cd6ec9de8a27..204c146f3c5c4b015d5f14b1f43579d18e65876f 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -33,11 +33,9 @@
 #include "lleconomy.h"
 #include "llerror.h"
 #include "llfontgl.h"
-#include "llmaterialtable.h"
 #include "llpermissionsflags.h"
 #include "llstring.h"
 #include "llvolume.h"
-#include "material_codes.h"
 #include "m3math.h"
 
 // project includes
@@ -57,7 +55,6 @@
 #include "lltool.h"
 #include "lltoolcomp.h"
 #include "lltoolmgr.h"
-#include "lltrans.h"
 #include "llui.h"
 #include "llviewerobject.h"
 #include "llviewerregion.h"
@@ -101,17 +98,6 @@ BOOL	LLPanelObject::postBuild()
 {
 	setMouseOpaque(FALSE);
 	
-	std::map<std::string, std::string> material_name_map;
-	material_name_map["Stone"]= LLTrans::getString("Stone");
-	material_name_map["Metal"]= LLTrans::getString("Metal");	
-	material_name_map["Glass"]= LLTrans::getString("Glass");	
-	material_name_map["Wood"]= LLTrans::getString("Wood");	
-	material_name_map["Flesh"]= LLTrans::getString("Flesh");
-	material_name_map["Plastic"]= LLTrans::getString("Plastic");
-	material_name_map["Rubber"]= LLTrans::getString("Rubber");	
-	material_name_map["Light"]= LLTrans::getString("Light");		
-	
-	LLMaterialTable::basic.initTableTransNames(material_name_map);
 	//--------------------------------------------------------
 	// Top
 	//--------------------------------------------------------
@@ -166,22 +152,6 @@ BOOL	LLPanelObject::postBuild()
 
 	//--------------------------------------------------------
 		
-	// material type popup
-	mComboMaterial = getChild<LLComboBox>("material");
-	childSetCommitCallback("material",onCommitMaterial,this);
-	mComboMaterial->removeall();
-
-	for (LLMaterialTable::info_list_t::iterator iter = LLMaterialTable::basic.mMaterialInfoList.begin();
-		 iter != LLMaterialTable::basic.mMaterialInfoList.end(); ++iter)
-	{
-		LLMaterialInfo* minfop = *iter;
-		if (minfop->mMCode != LL_MCODE_LIGHT)
-		{
-			mComboMaterial->add(minfop->mName);  
-		}
-	}
-	mComboMaterialItemCount = mComboMaterial->getItemCount();
-
 	// Base Type
 	mComboBaseType = getChild<LLComboBox>("comboBaseType");
 	childSetCommitCallback("comboBaseType",onCommitParametric,this);
@@ -309,7 +279,6 @@ BOOL	LLPanelObject::postBuild()
 
 LLPanelObject::LLPanelObject()
 :	LLPanel(),
-	mComboMaterialItemCount(0),
 	mIsPhysical(FALSE),
 	mIsTemporary(FALSE),
 	mIsPhantom(FALSE),
@@ -527,43 +496,6 @@ void LLPanelObject::getState( )
 	mCheckCastShadows->setEnabled( roots_selected==1 && editable );
 #endif
 	
-	// Update material part
-	// slightly inefficient - materials are unique per object, not per TE
-	U8 material_code = 0;
-	struct f : public LLSelectedTEGetFunctor<U8>
-	{
-		U8 get(LLViewerObject* object, S32 te)
-		{
-			return object->getMaterial();
-		}
-	} func;
-	bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code );
-	std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright");
-	if (editable && single_volume && material_same)
-	{
-		mComboMaterial->setEnabled( TRUE );
-		if (material_code == LL_MCODE_LIGHT)
-		{
-			if (mComboMaterial->getItemCount() == mComboMaterialItemCount)
-			{
-				mComboMaterial->add(LEGACY_FULLBRIGHT_DESC);
-			}
-			mComboMaterial->setSimple(LEGACY_FULLBRIGHT_DESC);
-		}
-		else
-		{
-			if (mComboMaterial->getItemCount() != mComboMaterialItemCount)
-			{
-				mComboMaterial->remove(LEGACY_FULLBRIGHT_DESC);
-			}
-			
-			mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code)));
-		}
-	}
-	else
-	{
-		mComboMaterial->setEnabled( FALSE );
-	}
 	//----------------------------------------------------------------------------
 
 	S32 selected_item	= MI_BOX;
@@ -1244,25 +1176,6 @@ void LLPanelObject::sendCastShadows()
 	}
 }
 
-// static
-void LLPanelObject::onCommitMaterial( LLUICtrl* ctrl, void* userdata )
-{
-	//LLPanelObject* self = (LLPanelObject*) userdata;
-	LLComboBox* box = (LLComboBox*) ctrl;
-
-	if (box)
-	{
-		// apply the currently selected material to the object
-		const std::string& material_name = box->getSimple();
-		std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright");
-		if (material_name != LEGACY_FULLBRIGHT_DESC)
-		{
-			U8 material_code = LLMaterialTable::basic.getMCode(material_name);
-			LLSelectMgr::getInstance()->selectionSetMaterial(material_code);
-		}
-	}
-}
-
 // static
 void LLPanelObject::onCommitParametric( LLUICtrl* ctrl, void* userdata )
 {
@@ -1937,7 +1850,6 @@ void LLPanelObject::clearCtrls()
 	mCheckCastShadows->set(FALSE);
 	mCheckCastShadows->setEnabled( FALSE );
 #endif
-	mComboMaterial	->setEnabled( FALSE );
 	// Disable text labels
 	mLabelPosition	->setEnabled( FALSE );
 	mLabelSize		->setEnabled( FALSE );
diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h
index e2f2a4400d7fecbabc6c4868894bf08c7b261404..475dfdaedbbffec08ea2e653f0cd58a5450054b5 100644
--- a/indra/newview/llpanelobject.h
+++ b/indra/newview/llpanelobject.h
@@ -66,7 +66,6 @@ class LLPanelObject : public LLPanel
 	static void 	onCommitPhantom(		LLUICtrl* ctrl, void* userdata);
 	static void 	onCommitCastShadows(	LLUICtrl* ctrl, void* userdata);
 	static void 	onCommitPhysics(		LLUICtrl* ctrl, void* userdata);
-	static void 	onCommitMaterial(		LLUICtrl* ctrl, void* userdata);
 
 	static void 	onCommitParametric(LLUICtrl* ctrl, void* userdata);
 
@@ -94,10 +93,6 @@ class LLPanelObject : public LLPanel
 	void 			getVolumeParams(LLVolumeParams& volume_params);
 	
 protected:
-	S32				mComboMaterialItemCount;
-
-	LLComboBox*		mComboMaterial;
-	
 	// Per-object options
 	LLComboBox*		mComboBaseType;
 
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index c443814c89bdbcf3ec91ed3502f5e6893ad8e1a3..ebddaa90bc7b154daaf16f71de7f65d9b706abc2 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -59,6 +59,7 @@
 #include "lltool.h"
 #include "lltoolcomp.h"
 #include "lltoolmgr.h"
+#include "lltrans.h"
 #include "llui.h"
 #include "llviewerobject.h"
 #include "llviewerregion.h"
@@ -156,6 +157,34 @@ BOOL	LLPanelVolume::postBuild()
 		mSpinPhysicsRestitution = getChild<LLSpinCtrl>("Physics Restitution");
 		mSpinPhysicsRestitution->setCommitCallback(boost::bind(&LLPanelVolume::sendPhysicsRestitution, this, _1, mSpinPhysicsRestitution));
 	}
+
+	std::map<std::string, std::string> material_name_map;
+	material_name_map["Stone"]= LLTrans::getString("Stone");
+	material_name_map["Metal"]= LLTrans::getString("Metal");	
+	material_name_map["Glass"]= LLTrans::getString("Glass");	
+	material_name_map["Wood"]= LLTrans::getString("Wood");	
+	material_name_map["Flesh"]= LLTrans::getString("Flesh");
+	material_name_map["Plastic"]= LLTrans::getString("Plastic");
+	material_name_map["Rubber"]= LLTrans::getString("Rubber");	
+	material_name_map["Light"]= LLTrans::getString("Light");		
+	
+	LLMaterialTable::basic.initTableTransNames(material_name_map);
+
+	// material type popup
+	mComboMaterial = getChild<LLComboBox>("material");
+	childSetCommitCallback("material",onCommitMaterial,this);
+	mComboMaterial->removeall();
+
+	for (LLMaterialTable::info_list_t::iterator iter = LLMaterialTable::basic.mMaterialInfoList.begin();
+		 iter != LLMaterialTable::basic.mMaterialInfoList.end(); ++iter)
+	{
+		LLMaterialInfo* minfop = *iter;
+		if (minfop->mMCode != LL_MCODE_LIGHT)
+		{
+			mComboMaterial->add(minfop->mName);  
+		}
+	}
+	mComboMaterialItemCount = mComboMaterial->getItemCount();
 	
 	// Start with everyone disabled
 	clearCtrls();
@@ -164,7 +193,8 @@ BOOL	LLPanelVolume::postBuild()
 }
 
 LLPanelVolume::LLPanelVolume()
-	: LLPanel()
+	: LLPanel(),
+	  mComboMaterialItemCount(0)
 {
 	setMouseOpaque(FALSE);
 
@@ -379,6 +409,46 @@ void LLPanelVolume::getState( )
 		getChildView("FlexForceZ")->setEnabled(false);
 	}
 	
+	// Material properties
+
+	// Update material part
+	// slightly inefficient - materials are unique per object, not per TE
+	U8 material_code = 0;
+	struct f : public LLSelectedTEGetFunctor<U8>
+	{
+		U8 get(LLViewerObject* object, S32 te)
+		{
+			return object->getMaterial();
+		}
+	} func;
+	bool material_same = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_code );
+	std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright");
+	if (editable && single_volume && material_same)
+	{
+		mComboMaterial->setEnabled( TRUE );
+		if (material_code == LL_MCODE_LIGHT)
+		{
+			if (mComboMaterial->getItemCount() == mComboMaterialItemCount)
+			{
+				mComboMaterial->add(LEGACY_FULLBRIGHT_DESC);
+			}
+			mComboMaterial->setSimple(LEGACY_FULLBRIGHT_DESC);
+		}
+		else
+		{
+			if (mComboMaterial->getItemCount() != mComboMaterialItemCount)
+			{
+				mComboMaterial->remove(LEGACY_FULLBRIGHT_DESC);
+			}
+			
+			mComboMaterial->setSimple(std::string(LLMaterialTable::basic.getName(material_code)));
+		}
+	}
+	else
+	{
+		mComboMaterial->setEnabled( FALSE );
+	}
+
 	// Physics properties
 	
 	mSpinPhysicsGravity->set(objectp->getPhysicsGravity());
@@ -467,7 +537,6 @@ void LLPanelVolume::refresh()
 	getChildView("label physicsshapetype")->setVisible(enable_mesh);
 	getChildView("Physics Shape Type Combo Ctrl")->setVisible(enable_mesh);
 	getChildView("Physics Gravity")->setVisible(enable_mesh);
-	getChildView("Physics Material Override")->setVisible(enable_mesh);
 	getChildView("Physics Friction")->setVisible(enable_mesh);
 	getChildView("Physics Density")->setVisible(enable_mesh);
 	getChildView("Physics Restitution")->setVisible(enable_mesh);
@@ -522,6 +591,8 @@ void LLPanelVolume::clearCtrls()
 	mSpinPhysicsFriction->setEnabled(FALSE);
 	mSpinPhysicsDensity->setEnabled(FALSE);
 	mSpinPhysicsRestitution->setEnabled(FALSE);
+
+	mComboMaterial->setEnabled( FALSE );
 }
 
 //
@@ -673,6 +744,25 @@ void LLPanelVolume::onLightSelectTexture(const LLSD& data)
 	}
 }
 
+// static
+void LLPanelVolume::onCommitMaterial( LLUICtrl* ctrl, void* userdata )
+{
+	//LLPanelObject* self = (LLPanelObject*) userdata;
+	LLComboBox* box = (LLComboBox*) ctrl;
+
+	if (box)
+	{
+		// apply the currently selected material to the object
+		const std::string& material_name = box->getSimple();
+		std::string LEGACY_FULLBRIGHT_DESC = LLTrans::getString("Fullbright");
+		if (material_name != LEGACY_FULLBRIGHT_DESC)
+		{
+			U8 material_code = LLMaterialTable::basic.getMCode(material_name);
+			LLSelectMgr::getInstance()->selectionSetMaterial(material_code);
+		}
+	}
+}
+
 // static
 void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata )
 {
diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h
index 776a2c1f4abcfc8f36f941f775bd04997acaa785..0ef47db0d9effe6e958f11dd47acf0d977c48780 100644
--- a/indra/newview/llpanelvolume.h
+++ b/indra/newview/llpanelvolume.h
@@ -63,8 +63,8 @@ class LLPanelVolume : public LLPanel
 	static void 	onCommitLight(			LLUICtrl* ctrl, void* userdata);
 	static void 	onCommitIsFlexible(		LLUICtrl* ctrl, void* userdata);
 	static void 	onCommitFlexible(		LLUICtrl* ctrl, void* userdata);
-
 	static void     onCommitPhysicsParam(       LLUICtrl* ctrl, void* userdata);
+	static void 	onCommitMaterial(		LLUICtrl* ctrl, void* userdata);
 
 	void		onLightCancelColor(const LLSD& data);
 	void		onLightSelectColor(const LLSD& data);
@@ -104,6 +104,10 @@ class LLPanelVolume : public LLPanel
 	LLSpinCtrl*		mSpinForce[3];
 */
 
+	S32			mComboMaterialItemCount;
+	LLComboBox*		mComboMaterial;
+	
+
 	LLColor4		mLightSavedColor;
 	LLUUID			mLightSavedTexture;
 	LLPointer<LLViewerObject> mObject;
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 9b264b81c782dfd6ba9b75ae68713e8e81e1062a..8fa4065fa6aa87f73abf3228f8ef065a0fc02513 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -1997,7 +1997,7 @@ void LLSelectMgr::selectionSetPhysicsType(U8 type)
 			if (object->permModify())
 			{
 				object->setPhysicsShapeType(mType);
-				object->updateFlags();
+				object->updateFlags(TRUE);
 			}
 			return true;
 		}
@@ -2016,7 +2016,7 @@ void LLSelectMgr::selectionSetFriction(F32 friction)
 			if (object->permModify())
 			{
 				object->setPhysicsFriction(mFriction);
-				object->updateFlags();
+				object->updateFlags(TRUE);
 			}
 			return true;
 		}
@@ -2035,7 +2035,7 @@ void LLSelectMgr::selectionSetGravity(F32 gravity )
 			if (object->permModify())
 			{
 				object->setPhysicsGravity(mGravity);
-				object->updateFlags();
+				object->updateFlags(TRUE);
 			}
 			return true;
 		}
@@ -2054,7 +2054,7 @@ void LLSelectMgr::selectionSetDensity(F32 density )
 			if (object->permModify())
 			{
 				object->setPhysicsDensity(mDensity);
-				object->updateFlags();
+				object->updateFlags(TRUE);
 			}
 			return true;
 		}
@@ -2073,7 +2073,7 @@ void LLSelectMgr::selectionSetRestitution(F32 restitution)
 			if (object->permModify())
 			{
 				object->setPhysicsRestitution(mRestitution);
-				object->updateFlags();
+				object->updateFlags(TRUE);
 			}
 			return true;
 		}
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 6d493bfcd56f525843fb8a516635dcb11558e37c..f5fee662e61a3b2f394f8135bf3c677fac09b0e4 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -5282,7 +5282,7 @@ bool LLViewerObject::specialHoverCursor() const
 			|| (mClickAction != 0);
 }
 
-void LLViewerObject::updateFlags()
+void LLViewerObject::updateFlags(BOOL physics_changed)
 {
 	LLViewerRegion* regionp = getRegion();
 	if(!regionp) return;
@@ -5295,12 +5295,15 @@ void LLViewerObject::updateFlags()
 	gMessageSystem->addBOOL("IsTemporary", flagTemporaryOnRez() );
 	gMessageSystem->addBOOL("IsPhantom", flagPhantom() );
 	gMessageSystem->addBOOL("CastsShadows", flagCastShadows() );
-	gMessageSystem->nextBlock("ExtraPhysics");
-	gMessageSystem->addU8("PhysicsShapeType", getPhysicsShapeType() );
-	gMessageSystem->addF32("Density", getPhysicsDensity() );
-	gMessageSystem->addF32("Friction", getPhysicsFriction() );
-	gMessageSystem->addF32("Restitution", getPhysicsRestitution() );
-	gMessageSystem->addF32("GravityMultiplier", getPhysicsGravity() );
+	if (physics_changed)
+	{
+		gMessageSystem->nextBlock("ExtraPhysics");
+		gMessageSystem->addU8("PhysicsShapeType", getPhysicsShapeType() );
+		gMessageSystem->addF32("Density", getPhysicsDensity() );
+		gMessageSystem->addF32("Friction", getPhysicsFriction() );
+		gMessageSystem->addF32("Restitution", getPhysicsRestitution() );
+		gMessageSystem->addF32("GravityMultiplier", getPhysicsGravity() );
+	}
 	gMessageSystem->sendReliable( regionp->getHost() );
 }
 
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index e417343becb07402ec4755c4fd80ca198b260cfe..21198f7dd122f5f4f3a14294317cab052cb5b476 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -488,7 +488,7 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	void			setRegion(LLViewerRegion *regionp);
 	virtual void	updateRegion(LLViewerRegion *regionp);
 
-	void updateFlags();
+	void updateFlags(BOOL physics_changed = FALSE);
 	BOOL setFlags(U32 flag, BOOL state);
 	void setPhysicsShapeType(U8 type);
 	void setPhysicsGravity(F32 gravity);
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
index 374eeeb0de845c3997ef72c5e9e70c10c26bd3bc..85535c207829b5094c5b234e1956d1ebc2bf3193 100644
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -23,7 +23,7 @@
   <string name="simplifying">Simplifying...</string>
   
 
-  <text left="15" bottom="25" follows="top|left" height="15" name="name_label">
+  <text left="15" bottom="25" follows="top|left" height="15" max_length_bytes="64" name="name_label">
     Name:
   </text>
   <line_editor bottom_delta="20" follows="top|left|right" height="19" 
diff --git a/indra/newview/skins/default/xui/en/floater_model_wizard.xml b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
index 92d57b20be00a5048bfa1094718c8e259fa10617..47b2e5fd79e468da3acc016ab02fb3c7c61ce6e2 100644
--- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
@@ -572,9 +572,9 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
 		 bg_opaque_color="DkGray2"
 		 background_visible="true"
 		 background_opaque="true">
-      <text top="25" left="30" text_color="White" font="SansSerifSmallBold" width="300" height="4">Performance</text>
+      <text top="15" left="20" text_color="White" font="SansSerifSmallBold" width="110" height="30" wrap="true" halign="center">Higher Performance</text>
       <text top="45" left="10" halign="center" width="130" word_wrap="true"   font="SansSerifSmall" height="80">Faster rendering but less detailed; lowers Resource (prim) cost.</text>
-      <text top="25" left="390" text_color="White" font="SansSerifSmallBold" width="300" height="4">Accuracy</text>
+      <text top="15" left="372" text_color="White" font="SansSerifSmallBold" width="90" height="30" wrap="true" halign="center">Higher Accuracy</text>
       <text top="45" left="360" halign="center" width="130" word_wrap="true"   font="SansSerifSmall" height="80">More detailed model but slower; increases Resource (prim) cost.</text>
 
       <slider
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 05d47506dbfe9eec55023688bf38781d353f2bfd..40bf7bfed75608d4530c6cceabfd1d709f9f4eef 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -1608,41 +1608,6 @@ even though the user gets a free copy.
                  name="Sculpted"
                  value="Sculpted" />
             </combo_box>
-            <combo_box
-             height="19"
-             layout="topleft"
-             name="material"
-             top_pad="5"
-             width="150">
-                <combo_box.item
-                 label="Stone"
-                 name="Stone"
-                 value="Stone" />
-                <combo_box.item
-                 label="Metal"
-                 name="Metal"
-                 value="Metal" />
-                <combo_box.item
-                 label="Glass"
-                 name="Glass"
-                 value="Glass" />
-                <combo_box.item
-                 label="Wood"
-                 name="Wood"
-                 value="Wood" />
-                <combo_box.item
-                 label="Flesh"
-                 name="Flesh"
-                 value="Flesh" />
-                <combo_box.item
-                 label="Plastic"
-                 name="Plastic"
-                 value="Plastic" />
-                <combo_box.item
-                 label="Rubber"
-                 name="Rubber"
-                 value="Rubber" />
-            </combo_box>
             <text
              type="string"
              length="1"
@@ -2426,6 +2391,41 @@ even though the user gets a free copy.
 			   name="Physics Shape Type Combo Ctrl"
 			   tool_tip="Choose the physics shape type"
 			   width="108"/>
+            <combo_box
+             height="19"
+             layout="topleft"
+             name="material"
+             top_pad="5"
+             width="150">
+                <combo_box.item
+                 label="Stone"
+                 name="Stone"
+                 value="Stone" />
+                <combo_box.item
+                 label="Metal"
+                 name="Metal"
+                 value="Metal" />
+                <combo_box.item
+                 label="Glass"
+                 name="Glass"
+                 value="Glass" />
+                <combo_box.item
+                 label="Wood"
+                 name="Wood"
+                 value="Wood" />
+                <combo_box.item
+                 label="Flesh"
+                 name="Flesh"
+                 value="Flesh" />
+                <combo_box.item
+                 label="Plastic"
+                 name="Plastic"
+                 value="Plastic" />
+                <combo_box.item
+                 label="Rubber"
+                 name="Rubber"
+                 value="Rubber" />
+            </combo_box>
 
             <spinner
              follows="left|top"
@@ -2441,16 +2441,6 @@ even though the user gets a free copy.
              top_pad="10"
              width="132" />
 
-            <check_box
-             height="19"
-             label="Override material"
-             layout="topleft"
-             left_delta="0"
-             name="Physics Material Override"
-             tool_tip="Override Material"
-             top_pad="10"
-             width="132" />
-
             <spinner
              follows="left|top"
              height="19"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index 484af630979539cb0215070ec09042643761591e..b36b82ebd8d80aeb75b9a4067b9962838d9fad0c 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -42,7 +42,7 @@
                     <menu_item_call.on_enable
                      function="File.EnableUpload" />
                 </menu_item_call>
-		            <menu_item_call
+		<menu_item_call
                  label="Model..."
                  layout="topleft"
                  name="Upload Model">
@@ -54,6 +54,18 @@
                 <menu_item_call.on_visible
                 function="File.VisibleUploadModel"/>
                 </menu_item_call>
+              <menu_item_call
+                label="Model Wizard..."
+                layout="topleft"
+                name="Upload Model Wizard">
+                <menu_item_call.on_click
+                 function="Floater.Show"
+                 parameter="upload_model_wizard" />
+                <menu_item_call.on_enable
+                 function="File.EnableUploadModel" />
+                <menu_item_call.on_visible
+                function="File.VisibleUploadModel"/>
+	      </menu_item_call>
                 <menu_item_call
                  label="Bulk (L$[COST] per file)..."
                  layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml
index e0d9f3f71456a996806dedfa1d3345de074d3ba0..3f9195d092d496520835517fe41bd39314b7f138 100644
--- a/indra/newview/skins/default/xui/en/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_general.xml
@@ -134,6 +134,7 @@
      top="190"
      width="80" />
 	<check_box
+     visible="FALSE"
      height="20"
      label="Allow Mesh Objects"
      layout="topleft"