diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index a9101378a46dabca5cb4c9682355d1882b55b974..eed82f924bf3b653274bbd1dde23be0945bda88a 100755
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -57,6 +57,7 @@ const int MODEL_NAMES_LENGTH = sizeof(model_names) / sizeof(std::string);
 
 LLModel::LLModel(LLVolumeParams& params, F32 detail)
 	: LLVolume(params, detail), mNormalizedScale(1,1,1), mNormalizedTranslation(0,0,0)
+	, mPelvisOffset( 0.0f )
 {
 	mDecompID = -1;
 }
@@ -1497,6 +1498,7 @@ LLSD LLModel::writeModel(
 			}
 		}
 		
+		
 		if ( upload_joints && high->mAlternateBindMatrix.size() > 0 )
 		{
 			for (U32 i = 0; i < high->mJointList.size(); ++i)
@@ -1509,6 +1511,8 @@ LLSD LLModel::writeModel(
 					}
 				}
 			}
+
+			mdl["skin"]["pelvis_offset"] = high->mPelvisOffset;
 		}
 		
 	}
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index c10ca1c11be60fa5154990d1fe917381535a4541..e9e33bdee51abd6abef57ff43a0b9b97a97892d8 100755
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -194,6 +194,7 @@ class LLModel : public LLVolume
 	LLVector3 mNormalizedScale;
 	LLVector3 mNormalizedTranslation;
 
+	float	mPelvisOffset;
 	// convex hull decomposition
 	S32 mDecompID;
 	convex_hull_decomposition mConvexHullDecomp;
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index f65fab41e756147098a18b35a1d54b23a889d5ba..d4ba039eeb583fc8bafa50aae964baf6d1045e2a 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -310,6 +310,7 @@ BOOL LLFloaterModelPreview::postBuild()
 	childSetCommitCallback("upload_joints", onUploadJointsCommit, this);
 
 	childSetCommitCallback("import_scale", onImportScaleCommit, this);
+	childSetCommitCallback("pelvis_offset", onPelvisOffsetCommit, this);
 
 	childSetCommitCallback("lod_file_or_limit", refresh, this);
 	childSetCommitCallback("physics_load_radio", refresh, this);
@@ -318,6 +319,9 @@ BOOL LLFloaterModelPreview::postBuild()
 
 	childDisable("upload_skin");
 	childDisable("upload_joints");
+
+	childDisable("pelvis_offset");
+
 	childDisable("ok_btn");
 
 	mViewOptionMenuButton = getChild<LLMenuButton>("options_gear_btn");
@@ -456,6 +460,18 @@ void LLFloaterModelPreview::onImportScaleCommit(LLUICtrl*,void* userdata)
 	fp->mModelPreview->calcResourceCost();
 	fp->mModelPreview->refresh();
 }
+//static
+void LLFloaterModelPreview::onPelvisOffsetCommit( LLUICtrl*, void* userdata )
+{
+	LLFloaterModelPreview *fp =(LLFloaterModelPreview*)userdata;
+
+	if (!fp->mModelPreview)
+	{
+		return;
+	}
+
+	fp->mModelPreview->refresh();
+}
 
 //static
 void LLFloaterModelPreview::onUploadJointsCommit(LLUICtrl*,void* userdata)
@@ -3742,7 +3758,7 @@ BOOL LLModelPreview::render()
 		if (fmp)
 		{
 			fmp->enableViewOption("show_skin_weight");
-			fmp->setViewOptionEnabled("show_joint_positions", skin_weight);
+			fmp->setViewOptionEnabled("show_joint_positions", skin_weight);	
 		}
 		mFMP->childEnable("upload_skin");
 	}
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index ffda565fefc63022bf780a32624b803347f2df90..aac20244cc390175d0536ae990bd12f320674b53 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -183,6 +183,7 @@ class LLFloaterModelPreview : public LLFloater
 	friend class LLPhysicsDecomp;
 	
 	static void		onImportScaleCommit(LLUICtrl*, void*);
+	static void		onPelvisOffsetCommit(LLUICtrl*, void*);
 	static void		onUploadJointsCommit(LLUICtrl*,void*);
 	static void		onUploadSkinCommit(LLUICtrl*,void*);
 	
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index e259ee9846076707468579175eedf2b7c74a4b8d..8e869b2d5b51bf4600c35b83746b18b2c93ccb3c 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -1162,7 +1162,12 @@ bool LLMeshRepoThread::skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 dat
 				info.mAlternateBindMatrix.push_back(mat);
 			}
 		}
-		
+
+		if (skin.has("pelvis_offset"))
+		{
+			info.mPelvisOffset = skin["pelvis_offset"].asReal();
+		}
+
 		mSkinInfoQ.push(info);
 	}
 
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index 0fcb2213de78920ac38ea7777bf5e965af9ff227..ccdcc03310fa38c3c1ffaa2f2f24a24d2cfd21bc 100644
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -131,6 +131,7 @@ class LLMeshSkinInfo
 	std::vector<LLMatrix4> mAlternateBindMatrix;
 	
 	LLMatrix4 mBindShapeMatrix;
+	float mPelvisOffset;
 };
 
 class LLMeshDecomposition
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 ca4e4a3a2abb95a777eef1e3980453bcab265f3c..e79dfcbc7d3cc82969d5e87ea93e004b35d9cb87 100644
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -388,6 +388,13 @@
       <check_box top_pad="5" name="upload_textures" height="15" follows="top|left" label="Textures"/>
       <check_box top_pad="5" name="upload_skin" height="15" follows="top|left" label="Skin weight"/>
       <check_box top_pad="5" left="20" name="upload_joints" height="15" follows="top|left" label="Joint positions"/>
+
+      <text left="10" top_pad="4" width="90" bottom="30" follows="top|left" height="15">
+        Pelvis Offset:
+      </text>
+
+      <spinner left="10" top_pad="4" height="20" follows="top|left" width="80" value="0.0" min_val="0.00" max_val="32.0" name="pelvis_offset"/>
+
     </panel>
   </tab_container>