diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index b839d6498064f3afbb0bba639fe30678e4c878d6..58fe82da9edc22d849e93294c5efbc4001dbb719 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -4443,7 +4443,7 @@
     <param
      id="1089"
      group="0"
-     name="Butt_Physics_UpDown_Controller"
+     name="Butt_Physics_UpDown_Driven"
      wearable="shape"
      edit_group="driven"
      label_min="Separate"
@@ -9350,6 +9350,27 @@ render_pass="bump">
 	 <param_driver />
     </param>
 
+    <param
+     id="1090"
+     group="0"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="14"
+     name="Butt_Physics_UpDown_Controller"
+     label="Butt Physics UpDown Controller"
+     label_min="Down"
+     label_max="Up"
+     value_min="-1"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".3"
+     camera_distance=".8">
+      <param_driver>
+        <driven
+         id="1089" />
+      </param_driver>
+    </param>
+
    <param
      id="507"
      group="0"
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp
index 094faf4d9774a773a60a413144538e501ec58d3d..393120be40206152d18e49e6b1f951a1db3fe13f 100644
--- a/indra/newview/llphysicsmotion.cpp
+++ b/indra/newview/llphysicsmotion.cpp
@@ -64,7 +64,8 @@ inline F64 llsgn(const F64 a)
    by the actual params that the user sees and sets.  For example, in the old system,
    the user sets a param called breast bouyancy, which controls the Z value of the breasts.
    In our new system, the user still sets the breast bouyancy, but that param is redefined
-   as a driver param so that it affects ...
+   as a driver param so that affects a new temporary driven param that the bounce is applied
+   to.
 */
 
 class LLPhysicsMotion
@@ -521,9 +522,6 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
 						       1.0f);
 
 	// Set the new param.
-	// 1. If the user has specified a param target, use that.
-	// 2. If the param is a driver param, set the param(s) that it drives.
-	// 3. Otherwise, set the param directly (don't do this if the param is a user-editable param!)
 	// If a specific param has been declared, then set that one.
 	// Otherwise, assume that the param is a driver param, and
 	// set the params that it drives.
@@ -534,6 +532,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
 	else
 	{
 		LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamUser);
+		llassert_always(driver_param);
 		if (driver_param)
 		{
 			for (LLDriverParam::entry_list_t::iterator iter = driver_param->mDriven.begin();
@@ -545,10 +544,6 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
 				setParamValue(driven_param,position_new_local_clamped);
 			}
 		}
-		else
-		{
-			setParamValue(mParamUser,position_new_local_clamped);
-		}
 	}
 	
 	//
diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp
index f287202ff13ae2f21d77e6ca1976a3dbbeea0a05..626b7ca1eb7652326eccdd46655399e910ab257c 100644
--- a/indra/newview/llpolymesh.cpp
+++ b/indra/newview/llpolymesh.cpp
@@ -611,7 +611,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
 					{
 						cloned_morph_data->mCoords[v][0] = 0;
 						cloned_morph_data->mCoords[v][1] = 0;
-						cloned_morph_data->mCoords[v][2] = 0.01F;
+						cloned_morph_data->mCoords[v][2] = 0.05F;
 						cloned_morph_data->mNormals[v] = LLVector3(0,0,0);
 						cloned_morph_data->mBinormals[v] = LLVector3(0,0,0);
 					}
@@ -626,7 +626,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
 					{
 						cloned_morph_data->mCoords[v][0] = 0;
 						cloned_morph_data->mCoords[v][1] = 0;
-						cloned_morph_data->mCoords[v][2] = 0.01F;
+						cloned_morph_data->mCoords[v][2] = 0.05F;
 						cloned_morph_data->mNormals[v] = LLVector3(0,0,0);
 						cloned_morph_data->mBinormals[v] = LLVector3(0,0,0);
 					}
@@ -641,7 +641,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
 					{
 						cloned_morph_data->mCoords[v][0] = 0;
 						cloned_morph_data->mCoords[v][1] = 0;
-						cloned_morph_data->mCoords[v][2] = 0.01F;
+						cloned_morph_data->mCoords[v][2] = 0.05F;
 						cloned_morph_data->mNormals[v] = LLVector3(0,0,0);
 						cloned_morph_data->mBinormals[v] = LLVector3(0,0,0);
 					}
@@ -651,7 +651,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
 				if (!strcmp(morphName, "Small_Butt"))
 				{
 					LLPolyMorphData* cloned_morph_data = new LLPolyMorphData(*morph_data);
-					cloned_morph_data->mName = std::string("Butt_Physics_UpDown_Controller");
+					cloned_morph_data->mName = std::string("Butt_Physics_UpDown_Driven");
 					for (U32 v=0; v < cloned_morph_data->mNumIndices; v++)
 					{
 						cloned_morph_data->mCoords[v][0] = 0;