diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h
index cd8f9e63fb966d1c57c20f472470b495e36bc855..1507686f6711be7b81d7b667b0ad797e43308c05 100644
--- a/indra/llcharacter/llcharacter.h
+++ b/indra/llcharacter/llcharacter.h
@@ -203,9 +203,9 @@ class LLCharacter
 	void addVisualParam(LLVisualParam *param);
 	void addSharedVisualParam(LLVisualParam *param);
 
-	BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL set_by_user = FALSE );
-	BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user = FALSE );
-	BOOL setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user = FALSE );
+	virtual BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL set_by_user = FALSE );
+	virtual BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user = FALSE );
+	virtual BOOL setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user = FALSE );
 
 	// get visual param weight by param or name
 	F32 getVisualParamWeight(LLVisualParam *distortion);
diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp
index d7a144e00cfc16557eb90b5f2c44a1564151f45c..e948913a689c4d04627198c2bf387d5fe0f3c846 100644
--- a/indra/llcharacter/llvisualparam.cpp
+++ b/indra/llcharacter/llvisualparam.cpp
@@ -147,6 +147,21 @@ BOOL LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
 	return TRUE;
 }
 
+//virtual
+void LLVisualParamInfo::toStream(std::ostream &out)
+{
+	out <<  mID << "\t";
+	out << mName << "\t";
+	out <<  mDisplayName << "\t";
+	out <<  mMinName << "\t";
+	out <<  mMaxName << "\t";
+	out <<  mGroup << "\t";
+	out <<  mMinWeight << "\t";
+	out <<  mMaxWeight << "\t";
+	out <<  mDefaultWeight << "\t";
+	out <<  mSex << "\t";
+}
+
 //-----------------------------------------------------------------------------
 // LLVisualParam()
 //-----------------------------------------------------------------------------
@@ -288,3 +303,11 @@ void LLVisualParam::stopAnimating(BOOL set_by_user)
 		setWeight(mTargetWeight, set_by_user);
 	}
 }
+
+//virtual
+BOOL LLVisualParam::linkDrivenParams(visual_param_mapper mapper, bool only_cross_params)
+{
+	// nothing to do for non-driver parameters
+	return TRUE;
+}
+
diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h
index 25c41e8509ea39f614a8f8ab1157b32d17177fa7..b2b697766f5b92d4de2f664555cd040faea4ae0a 100644
--- a/indra/llcharacter/llvisualparam.h
+++ b/indra/llcharacter/llvisualparam.h
@@ -36,6 +36,7 @@
 #include "v3math.h"
 #include "llstring.h"
 #include "llxmltree.h"
+#include <boost/function.hpp>
 
 class LLPolyMesh;
 class LLXmlTreeNode;
@@ -68,6 +69,10 @@ class LLVisualParamInfo
 	virtual ~LLVisualParamInfo() {};
 
 	virtual BOOL parseXml(LLXmlTreeNode *node);
+
+	S32 getID() const { return mID; }
+
+	virtual void toStream(std::ostream &out);
 	
 protected:
 	S32					mID;				// ID associated with VisualParam
@@ -91,6 +96,9 @@ class LLVisualParamInfo
 //-----------------------------------------------------------------------------
 class LLVisualParam
 {
+protected:
+	typedef		boost::function<LLVisualParam*(S32)> visual_param_mapper;
+
 public:
 	LLVisualParam();
 	virtual ~LLVisualParam();
@@ -111,6 +119,8 @@ class LLVisualParam
 	virtual void			animate(F32 delta, BOOL set_by_user);
 	virtual void			stopAnimating(BOOL set_by_user);
 
+	virtual BOOL			linkDrivenParams(visual_param_mapper mapper, bool only_cross_params);
+
 	// Interface methods
 	S32						getID() const		{ return mID; }
 	void					setID(S32 id) 		{ llassert(!mInfo); mID = id; }
@@ -150,6 +160,7 @@ class LLVisualParam
 
 	S32					mID;				// id for storing weight/morphtarget compares compactly
 	LLVisualParamInfo	*mInfo;
+
 };
 
 #endif // LL_LLVisualParam_H
diff --git a/indra/llui/llscrollingpanellist.cpp b/indra/llui/llscrollingpanellist.cpp
index 13fbe1d5764bb0acf40303aa14a1af705d1d3d65..4f55c0507c5defd8666b8262c4299ee861a9d0c1 100644
--- a/indra/llui/llscrollingpanellist.cpp
+++ b/indra/llui/llscrollingpanellist.cpp
@@ -50,7 +50,7 @@ void LLScrollingPanelList::clearPanels()
 	reshape( 1, 1, FALSE );
 }
 
-void LLScrollingPanelList::addPanel( LLScrollingPanel* panel )
+S32 LLScrollingPanelList::addPanel( LLScrollingPanel* panel )
 {
 	addChildInBack( panel );
 	mPanelList.push_front( panel );
@@ -79,6 +79,8 @@ void LLScrollingPanelList::addPanel( LLScrollingPanel* panel )
 		childp->translate( -childp->getRect().mLeft, cur_y - childp->getRect().mBottom);
 		cur_y -= GAP_BETWEEN_PANELS;
 	}
+
+	return total_height;
 }
 
 void LLScrollingPanelList::removePanel(LLScrollingPanel* panel) 
diff --git a/indra/llui/llscrollingpanellist.h b/indra/llui/llscrollingpanellist.h
index 9da15822d0ec1b1b41fd67a47cebebac96cb56bf..3abfbcbbe7800ffcb483f5e2485859508556c2df 100644
--- a/indra/llui/llscrollingpanellist.h
+++ b/indra/llui/llscrollingpanellist.h
@@ -77,7 +77,7 @@ class LLScrollingPanelList : public LLUICtrl
 	virtual void		draw();
 
 	void				clearPanels();
-	void				addPanel( LLScrollingPanel* panel );
+	S32					addPanel( LLScrollingPanel* panel );
 	void				removePanel( LLScrollingPanel* panel );
 	void				removePanel( U32 panel_index );
 	void				updatePanels(BOOL allow_modify);
diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp
index 7a531e0fbff99582865030fed2a20feb03b79136..08c993ed2aa42c57c1d1a18a3291261bc12c5502 100644
--- a/indra/llvfs/lldir_linux.cpp
+++ b/indra/llvfs/lldir_linux.cpp
@@ -99,7 +99,19 @@ LLDir_Linux::LLDir_Linux()
 #else
 	mAppRODataDir = tmp_str;
 #endif
-	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
+    U32 indra_pos = mExecutableDir.find("/indra");
+    if (indra_pos != std::string::npos)
+    {
+		// ...we're in a dev checkout
+		mSkinBaseDir = mExecutableDir.substr(0, indra_pos) + "/indra/newview/skins";
+		llinfos << "Running in dev checkout with mSkinBaseDir "
+		 << mSkinBaseDir << llendl;
+    }
+    else
+    {
+		// ...normal installation running
+		mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
+    }	
 	mOSUserDir = getCurrentUserHome(tmp_str);
 	mOSUserAppDir = "";
 	mLindenUserDir = tmp_str;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c402c3979a6883f8bad8de9bda5e86175066cc27..37acdc3ceff401b94c3f7f2d45dd3aa5f9fe1e1d 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -303,6 +303,7 @@ set(viewer_SOURCE_FILES
     llpaneldirland.cpp
     llpaneldirpeople.cpp
     llpaneldirplaces.cpp
+    llpaneleditwearable.cpp
     llpanelevent.cpp
     llpanelface.cpp
     llpanelgroup.cpp
@@ -358,6 +359,7 @@ set(viewer_SOURCE_FILES
     llremoteparcelrequest.cpp
     llsavedsettingsglue.cpp
     llscreenchannel.cpp
+    llscrollingpanelparam.cpp
     llsearchcombobox.cpp
     llsearchhistory.cpp
     llselectmgr.cpp
@@ -767,6 +769,7 @@ set(viewer_HEADER_FILES
     llpaneldirland.h
     llpaneldirpeople.h
     llpaneldirplaces.h
+    llpaneleditwearable.h
     llpanelevent.h
     llpanelface.h
     llpanelgroup.h
@@ -823,6 +826,7 @@ set(viewer_HEADER_FILES
     llresourcedata.h
     llrootview.h
     llscreenchannel.h
+    llscrollingpanelparam.h
     llsavedsettingsglue.h
     llsearchcombobox.h
     llsearchhistory.h
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index c943c57fdbe79d523a17b7ea446ad182a1d46c3e..f3bfa37ceaf48eb665db25f12d77850a351d5c64 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1,310 +1,309 @@
 <?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
 <linden_avatar
- version="1.0"
- wearable_definition_version="22">  
- <!-- The wearable_definition_version is checked during asset upload. -->
- <!-- If you increment it, check indra/lib/python/indra/assetutil.py.  -->
-   <skeleton
-    file_name="avatar_skeleton.xml">
-      <attachment_point
-       id="1"
-       group="6"
-       pie_slice="2"
-       name="Chest"
-       joint="mChest"
-       position="0.15 0 -0.1"
-       rotation="0 90 90"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="2"
-       group="2"
-       pie_slice="2"
-       name="Skull"
-       joint="mHead"
-       position="0 0 0.15"
-       rotation="0 0 90"
-       visible_in_first_person="false" />
-
-      <attachment_point
-       id="3"
-       group="3"
-       pie_slice="3"
-       name="Left Shoulder"
-       joint="mCollarLeft"
-       position="0 0 0.08"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
+ version="1.0" wearable_definition_version="23"> 
+  <!-- The wearable_definition_version is checked during asset upload. -->
+  <!-- If you increment it, check indra/lib/python/indra/assetutil.py.  -->
+  <skeleton
+   file_name="avatar_skeleton.xml">
+    <attachment_point
+     id="1"
+     group="6"
+     pie_slice="2"
+     name="Chest"
+     joint="mChest"
+     position="0.15 0 -0.1"
+     rotation="0 90 90"
+   visible_in_first_person="true" />
 
-      <attachment_point
-       id="4"
-       group="1"
-       pie_slice="1"
-       name="Right Shoulder"
-       joint="mCollarRight"
-       position="0 0 0.08"
-       rotation="0 0 0" 
-	   visible_in_first_person="true"/>
-
-      <attachment_point
-       id="5"
-       group="4"
-       name="Left Hand"
-       joint="mWristLeft"
-       position="0 0.08 -0.02"
-       rotation="0 0 0"
-       visible_in_first_person="true"
-       max_attachment_offset="1.5" />
+    <attachment_point
+     id="2"
+     group="2"
+     pie_slice="2"
+     name="Skull"
+     joint="mHead"
+     position="0 0 0.15"
+     rotation="0 0 90"
+     visible_in_first_person="false" />
 
-      <attachment_point
-       id="6"
-       group="0"
-       name="Right Hand"
-       joint="mWristRight"
-       position="0 -0.08 -0.02"
-       rotation="0 0 0"
-       visible_in_first_person="true"
-       max_attachment_offset="1.5" />
-
-      <attachment_point
-       id="7"
-       group="5"
-       pie_slice="6"
-       name="Left Foot"
-       joint="mFootLeft"
-       position="0 0.0 0.0"
-       rotation="0 0 0" 
-	   visible_in_first_person="true"/>
-
-      <attachment_point
-       id="8"
-       group="7"
-       pie_slice="6"
-       name="Right Foot"
-       joint="mFootRight"
-       position="0 0.0 0.0"
-       rotation="0 0 0" 
-	   visible_in_first_person="true"/>
-
-      <attachment_point
-       id="9"
-       group="6"
-       pie_slice="7"
-       name="Spine"
-       joint="mChest"
-       position="-0.15 0 -0.1"
-       rotation="0 -90 90"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="10"
-       group="6"
-       pie_slice="6"
-       name="Pelvis"
-       joint="mPelvis"
-       position="0 0 -0.15"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="11"
-       group="2"
-       pie_slice="6"
-       name="Mouth"
-       joint="mHead"
-       position="0.12 0 0.001"
-       rotation="0 0 0" 
-	   visible_in_first_person="false"/>
-
-      <attachment_point
-       id="12"
-       group="2"
-       pie_slice="7"
-       name="Chin"
-       joint="mHead"
-       position="0.12 0 -0.04"
-       rotation="0 0 0"
-	   visible_in_first_person="false" />
-
-      <attachment_point
-       id="13"
-       group="2"
-       pie_slice="4"
-       name="Left Ear"
-       joint="mHead"
-       position="0.015 0.08 0.017"
-       rotation="0 0 0"
-	   visible_in_first_person="false" />
-
-      <attachment_point
-       id="14"
-       group="2"
-       pie_slice="0"
-       name="Right Ear"
-       joint="mHead"
-       position="0.015 -0.08 0.017"
-       rotation="0 0 0"
-	   visible_in_first_person="false" />
-
-      <attachment_point
-       id="15"
-       group="2"
-       pie_slice="3"
-       name="Left Eyeball"
-       joint="mEyeLeft"
-       position="0 0 0"
-       rotation="0 0 0" 
-	   visible_in_first_person="false"/>
-
-      <attachment_point
-       id="16"
-       group="2"
-       pie_slice="1"
-       name="Right Eyeball"
-       joint="mEyeRight"
-       position="0 0 0"
-       rotation="0 0 0"
-	   visible_in_first_person="false" />
-
-      <attachment_point
-       id="17"
-       group="2"
-       pie_slice="5"
-       name="Nose"
-       joint="mHead"
-       position="0.1 0 0.05"
-       rotation="0 0 0" 
-	   visible_in_first_person="false"/>
-
-      <attachment_point
-       id="18"
-       group="1"
-       pie_slice="0"
-       name="R Upper Arm"
-       joint="mShoulderRight"
-       position="0.01 -0.13 0.01"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
+    <attachment_point
+     id="3"
+     group="3"
+     pie_slice="3"
+     name="Left Shoulder"
+     joint="mCollarLeft"
+     position="0 0 0.08"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
 
-      <attachment_point
-       id="19"
-       group="1"
-       pie_slice="7"
-       name="R Forearm"
-       joint="mElbowRight"
-       position="0 -0.12 0"
-       rotation="0 0 0"
-	   visible_in_first_person="true"/>
-
-      <attachment_point
-       id="20"
-       group="3"
-       pie_slice="4"
-       name="L Upper Arm"
-       joint="mShoulderLeft"
-       position="0.01 0.15 -0.01"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="21"
-       group="3"
-       pie_slice="5"
-       name="L Forearm"
-       joint="mElbowLeft"
-       position="0 0.113 0"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="22"
-       group="7"
-       pie_slice="1"
-       name="Right Hip"
-       joint="mHipRight"
-       position="0 0 0"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="23"
-       group="7"
-       pie_slice="0"
-       name="R Upper Leg"
-       joint="mHipRight"
-       position="-0.017 0.041 -0.310"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="24"
-       group="7"
-       pie_slice="7"
-       name="R Lower Leg"
-       joint="mKneeRight"
-       position="-0.044 -0.007 -0.262"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="25"
-       group="5"
-       pie_slice="3"
-       name="Left Hip"
-       joint="mHipLeft"
-       position="0 0 0"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="26"
-       group="5"
-       pie_slice="4"
-       name="L Upper Leg"
-       joint="mHipLeft"
-       position="-0.019 -0.034 -0.310"
-       rotation="0 0 0" 
-	   visible_in_first_person="true"/>
-
-      <attachment_point
-       id="27"
-       group="5"
-       pie_slice="5"
-       name="L Lower Leg"
-       joint="mKneeLeft"
-       position="-0.044 -0.007 -0.261"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="28"
-       group="6"
-       pie_slice="5"
-       name="Stomach"
-       joint="mPelvis"
-       position="0.092 0.0 0.088"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="29"
-       group="6"
-       pie_slice="3"
-       name="Left Pec"
-       joint="mTorso"
-       position="0.104 0.082 0.247"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
-
-      <attachment_point
-       id="30"
-       group="6"
-       pie_slice="1"
-       name="Right Pec"
-       joint="mTorso"
-       position="0.104 -0.082 0.247"
-       rotation="0 0 0"
-	   visible_in_first_person="true" />
+    <attachment_point
+     id="4"
+     group="1"
+     pie_slice="1"
+     name="Right Shoulder"
+     joint="mCollarRight"
+     position="0 0 0.08"
+     rotation="0 0 0"
+   visible_in_first_person="true"/>
+
+    <attachment_point
+     id="5"
+     group="4"
+     name="Left Hand"
+     joint="mWristLeft"
+     position="0 0.08 -0.02"
+     rotation="0 0 0"
+     visible_in_first_person="true"
+     max_attachment_offset="1.5" />
+
+    <attachment_point
+     id="6"
+     group="0"
+     name="Right Hand"
+     joint="mWristRight"
+     position="0 -0.08 -0.02"
+     rotation="0 0 0"
+     visible_in_first_person="true"
+     max_attachment_offset="1.5" />
+
+    <attachment_point
+     id="7"
+     group="5"
+     pie_slice="6"
+     name="Left Foot"
+     joint="mFootLeft"
+     position="0 0.0 0.0"
+     rotation="0 0 0"
+   visible_in_first_person="true"/>
+
+    <attachment_point
+     id="8"
+     group="7"
+     pie_slice="6"
+     name="Right Foot"
+     joint="mFootRight"
+     position="0 0.0 0.0"
+     rotation="0 0 0"
+   visible_in_first_person="true"/>
+
+    <attachment_point
+     id="9"
+     group="6"
+     pie_slice="7"
+     name="Spine"
+     joint="mChest"
+     position="-0.15 0 -0.1"
+     rotation="0 -90 90"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="10"
+     group="6"
+     pie_slice="6"
+     name="Pelvis"
+     joint="mPelvis"
+     position="0 0 -0.15"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="11"
+     group="2"
+     pie_slice="6"
+     name="Mouth"
+     joint="mHead"
+     position="0.12 0 0.001"
+     rotation="0 0 0"
+   visible_in_first_person="false"/>
+
+    <attachment_point
+     id="12"
+     group="2"
+     pie_slice="7"
+     name="Chin"
+     joint="mHead"
+     position="0.12 0 -0.04"
+     rotation="0 0 0"
+   visible_in_first_person="false" />
+
+    <attachment_point
+     id="13"
+     group="2"
+     pie_slice="4"
+     name="Left Ear"
+     joint="mHead"
+     position="0.015 0.08 0.017"
+     rotation="0 0 0"
+   visible_in_first_person="false" />
+
+    <attachment_point
+     id="14"
+     group="2"
+     pie_slice="0"
+     name="Right Ear"
+     joint="mHead"
+     position="0.015 -0.08 0.017"
+     rotation="0 0 0"
+   visible_in_first_person="false" />
+
+    <attachment_point
+     id="15"
+     group="2"
+     pie_slice="3"
+     name="Left Eyeball"
+     joint="mEyeLeft"
+     position="0 0 0"
+     rotation="0 0 0"
+   visible_in_first_person="false"/>
+
+    <attachment_point
+     id="16"
+     group="2"
+     pie_slice="1"
+     name="Right Eyeball"
+     joint="mEyeRight"
+     position="0 0 0"
+     rotation="0 0 0"
+   visible_in_first_person="false" />
+
+    <attachment_point
+     id="17"
+     group="2"
+     pie_slice="5"
+     name="Nose"
+     joint="mHead"
+     position="0.1 0 0.05"
+     rotation="0 0 0"
+   visible_in_first_person="false"/>
+
+    <attachment_point
+     id="18"
+     group="1"
+     pie_slice="0"
+     name="R Upper Arm"
+     joint="mShoulderRight"
+     position="0.01 -0.13 0.01"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="19"
+     group="1"
+     pie_slice="7"
+     name="R Forearm"
+     joint="mElbowRight"
+     position="0 -0.12 0"
+     rotation="0 0 0"
+   visible_in_first_person="true"/>
+
+    <attachment_point
+     id="20"
+     group="3"
+     pie_slice="4"
+     name="L Upper Arm"
+     joint="mShoulderLeft"
+     position="0.01 0.15 -0.01"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="21"
+     group="3"
+     pie_slice="5"
+     name="L Forearm"
+     joint="mElbowLeft"
+     position="0 0.113 0"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="22"
+     group="7"
+     pie_slice="1"
+     name="Right Hip"
+     joint="mHipRight"
+     position="0 0 0"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="23"
+     group="7"
+     pie_slice="0"
+     name="R Upper Leg"
+     joint="mHipRight"
+     position="-0.017 0.041 -0.310"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="24"
+     group="7"
+     pie_slice="7"
+     name="R Lower Leg"
+     joint="mKneeRight"
+     position="-0.044 -0.007 -0.262"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="25"
+     group="5"
+     pie_slice="3"
+     name="Left Hip"
+     joint="mHipLeft"
+     position="0 0 0"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="26"
+     group="5"
+     pie_slice="4"
+     name="L Upper Leg"
+     joint="mHipLeft"
+     position="-0.019 -0.034 -0.310"
+     rotation="0 0 0"
+   visible_in_first_person="true"/>
+
+    <attachment_point
+     id="27"
+     group="5"
+     pie_slice="5"
+     name="L Lower Leg"
+     joint="mKneeLeft"
+     position="-0.044 -0.007 -0.261"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="28"
+     group="6"
+     pie_slice="5"
+     name="Stomach"
+     joint="mPelvis"
+     position="0.092 0.0 0.088"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="29"
+     group="6"
+     pie_slice="3"
+     name="Left Pec"
+     joint="mTorso"
+     position="0.104 0.082 0.247"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
+
+    <attachment_point
+     id="30"
+     group="6"
+     pie_slice="1"
+     name="Right Pec"
+     joint="mTorso"
+     position="0.104 -0.082 0.247"
+     rotation="0 0 0"
+   visible_in_first_person="true" />
 
     <attachment_point
        id="31"
@@ -394,6 +393,7 @@
        max_attachment_offset="2.0"
        visible_in_first_person="true" />
        
+
     <param
        id="32"
        group="1"
@@ -403,10899 +403,10959 @@
        label_max="Male"
        value_min="0"
        value_max="1">
-         <param_skeleton>
-            <bone
-             name="mNeck"
-             scale="0 0 .2" />
+      <param_skeleton>
+        <bone
+         name="mNeck"
+         scale="0 0 .2" />
 
-            <bone
-             name="mCollarLeft"
-             scale="0 .4 0" />
+        <bone
+         name="mCollarLeft"
+         scale="0 .4 0" />
 
-            <bone
-             name="mCollarRight"
-             scale="0 .4 0" />
+        <bone
+         name="mCollarRight"
+         scale="0 .4 0" />
 
-            <bone
-             name="mShoulderLeft"
-             scale="0 .35 0" />
+        <bone
+         name="mShoulderLeft"
+         scale="0 .35 0" />
 
-            <bone
-             name="mShoulderRight"
-             scale="0 .35 0" />
+        <bone
+         name="mShoulderRight"
+         scale="0 .35 0" />
 
-            <bone
-             name="mElbowLeft"
-             scale="0 .1 0" />
+        <bone
+         name="mElbowLeft"
+         scale="0 .1 0" />
 
-            <bone
-             name="mElbowRight"
-             scale="0 .1 0" />
+        <bone
+         name="mElbowRight"
+         scale="0 .1 0" />
 
-            <bone
-             name="mChest"
-             scale=".05 .05 .05" />
+        <bone
+         name="mChest"
+         scale=".05 .05 .05" />
 
-            <bone
-             name="mTorso"
-             scale="0 0 .05" />
+        <bone
+         name="mTorso"
+         scale="0 0 .05" />
 
-            <bone
-             name="mPelvis"
-             scale="0 0 0" />
+        <bone
+         name="mPelvis"
+         scale="0 0 0" />
 
-            <bone
-             name="mHipLeft"
-             scale=".05 .05 0" />
+        <bone
+         name="mHipLeft"
+         scale=".05 .05 0" />
 
-            <bone
-             name="mHipRight"
-             scale=".05 .05 0" />
+        <bone
+         name="mHipRight"
+         scale=".05 .05 0" />
 
-            <bone
-             name="mKneeLeft"
-             scale=".05 .05 .1" />
+        <bone
+         name="mKneeLeft"
+         scale=".05 .05 .1" />
 
-            <bone
-             name="mKneeRight"
-             scale=".05 .05 .1" />
-         </param_skeleton>
-      </param>
+        <bone
+         name="mKneeRight"
+         scale=".05 .05 .1" />
+      </param_skeleton>
+    </param>
 
-      <param
-       id="33"
-       group="0"
-       name="Height"
-       label="Height"
-       wearable="shape"
-       edit_group="shape_body"
-       edit_group_order="1"
-       label_min="Short"
-       label_max="Tall"
-       show_simple="true"
-       value_min="-2.3"
-       value_max="2"
-       camera_distance="2.2">
-         <param_skeleton>
-            <bone
-             name="mNeck"
-             scale="0 0 .02" />
+    <param
+     id="33"
+     group="0"
+     name="Height"
+     label="Height"
+     wearable="shape"
+     edit_group="shape_body"
+     edit_group_order="1"
+     label_min="Short"
+     label_max="Tall"
+     show_simple="true"
+     value_min="-2.3"
+     value_max="2"
+     camera_distance="2.2">
+      <param_skeleton>
+        <bone
+         name="mNeck"
+         scale="0 0 .02" />
+
+        <bone
+         name="mCollarLeft"
+         scale="0 0 0" />
+
+        <bone
+         name="mCollarRight"
+         scale="0 0 0" />
+
+        <bone
+         name="mShoulderLeft"
+         scale="0 0.08 0" />
+
+        <bone
+         name="mShoulderRight"
+         scale="0 0.08 0" />
+
+        <bone
+         name="mElbowLeft"
+         scale="0 0.06 0" />
+
+        <bone
+         name="mElbowRight"
+         scale="0 0.06 0" />
+
+        <bone
+         name="mChest"
+         scale="0 0 0.05" />
+
+        <bone
+         name="mTorso"
+         scale="0 0 0.05" />
+
+        <bone
+         name="mPelvis"
+         scale="0 0 0" />
+
+        <bone
+         name="mHipLeft"
+         scale="0 0 0.1" />
+
+        <bone
+         name="mHipRight"
+         scale="0 0 0.1" />
+
+        <bone
+         name="mKneeLeft"
+         scale="0 0 0.1" />
+
+        <bone
+         name="mKneeRight"
+         scale="0 0 0.1" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mCollarLeft"
-             scale="0 0 0" />
+    <param
+     id="34"
+     group="0"
+     name="Thickness"
+     label="Body Thickness"
+     wearable="shape"
+     edit_group="shape_body"
+     edit_group_order="2"
+     label_min="Body Thin"
+     label_max="Body Thick"
+     show_simple="true"
+     value_min="-0.7"
+     value_max="1.5"
+     camera_distance="1.8">
+      <param_skeleton>
+        <bone
+         name="mNeck"
+         scale="0.1 0.1 0" />
+
+        <bone
+         name="mCollarLeft"
+         scale="0 0.2 0" />
+
+        <bone
+         name="mCollarRight"
+         scale="0 0.2 0" />
+
+        <bone
+         name="mShoulderLeft"
+         scale="0.1 0 0.1" />
+
+        <bone
+         name="mShoulderRight"
+         scale="0.1 0 0.1" />
+
+        <bone
+         name="mElbowLeft"
+         scale="0.1 0 0.1" />
+
+        <bone
+         name="mElbowRight"
+         scale="0.1 0 0.1" />
+
+        <bone
+         name="mChest"
+         scale="0.1 0.1 0" />
+
+        <bone
+         name="mTorso"
+         scale="0.1 0.1 0" />
+
+        <bone
+         name="mPelvis"
+         scale="0.1 0.1 0" />
+
+        <bone
+         name="mHipLeft"
+         scale="0.13 0.13 0" />
+
+        <bone
+         name="mHipRight"
+         scale="0.13 0.13 0" />
+
+        <bone
+         name="mKneeLeft"
+         scale="0.12 0.12 0" />
+
+        <bone
+         name="mKneeRight"
+         scale="0.12 0.12 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mCollarRight"
-             scale="0 0 0" />
+    <param
+     id="36"
+     group="0"
+     name="Shoulders"
+   label="Shoulders"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="4"
+     label_min="Narrow"
+     label_max="Broad"
+     show_simple="true"
+     value_min="-1.8"
+     value_max="1.4"
+     value_default="-0.5"
+     camera_elevation=".1"
+     camera_distance="1.2"
+     camera_angle="0">
+      <param_skeleton>
+        <bone
+         name="mNeck"
+         scale="0.01 0.03 0" />
+
+        <bone
+         name="mCollarLeft"
+         scale="0 0 0"
+         offset="0 .02 0" />
+
+        <bone
+         name="mCollarRight"
+         scale="0 0 0"
+         offset="0 -.02 0" />
+
+        <bone
+         name="mChest"
+         scale="0.02 0.08 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mShoulderLeft"
-             scale="0 0.08 0" />
+    <param
+     id="37"
+     group="0"
+     name="Hip Width"
+   label="Hip Width"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="3"
+     label_min="Narrow"
+     label_max="Wide"
+     show_simple="true"
+     value_min="-3.2"
+     value_max="2.8"
+     camera_distance="1.8">
+      <param_skeleton>
+        <bone
+         name="mPelvis"
+         scale="0 0.1 0" />
+
+        <bone
+         name="mHipLeft"
+         scale="0 0 0"
+         offset="0 .004 0" />
+
+        <bone
+         name="mHipRight"
+         scale="0 0 0"
+         offset="0 -.004 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mShoulderRight"
-             scale="0 0.08 0" />
+    <param
+     id="842"
+     group="0"
+     name="Hip Length"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="3.2"
+     label_min="Short hips"
+     label_max="Long Hips"
+     value_min="-1"
+     value_max="1"
+     camera_distance="1.8">
+      <param_skeleton>
+        <bone
+         name="mPelvis"
+         scale="0 0 0.3" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mElbowLeft"
-             scale="0 0.06 0" />
+    <param
+     id="38"
+     group="0"
+     name="Torso Length"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="11"
+     label_min="Short Torso"
+     label_max="Long Torso"
+     value_min="-1"
+     value_max="1"
+     camera_distance="1.8">
+      <param_skeleton>
+        <bone
+         name="mTorso"
+         scale="0 0 .3" />
+
+        <bone
+         name="mPelvis"
+         scale="0 0 .1" />
+
+        <bone
+         name="mHipLeft"
+         scale="0 0 -.1" />
+
+        <bone
+         name="mHipRight"
+         scale="0 0 -.1" />
+
+        <bone
+         name="mKneeRight"
+         scale="0 0 -.05" />
+
+        <bone
+         name="mKneeLeft"
+         scale="0 0 -.05" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mElbowRight"
-             scale="0 0.06 0" />
+    <param
+     id="195"
+     group="1"
+     name="EyeBone_Spread"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Eyes Together"
+     label_max="Eyes Spread"
+     value_min="-1"
+     value_max="1">
+      <param_skeleton>
+        <bone
+         name="mEyeLeft"
+         scale="0 0 0"
+         offset="0 .009 0" />
+
+        <bone
+         name="mEyeRight"
+         scale="0 0 0"
+         offset="0 -.009 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mChest"
-             scale="0 0 0.05" />
+    <param
+     id="661"
+     group="1"
+     name="EyeBone_Head_Shear"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Eyes Shear Left Up"
+     label_max="Eyes Shear Right Up"
+     value_min="-2"
+     value_max="2">
+      <param_skeleton>
+        <bone
+         name="mEyeLeft"
+         scale="0 0 0"
+         offset="0 0 .004" />
+
+        <bone
+         name="mEyeRight"
+         scale="0 0 0"
+         offset="0 0 -.004" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mTorso"
-             scale="0 0 0.05" />
+    <param
+     id="772"
+     group="1"
+     name="EyeBone_Head_Elongate"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Eyes Short Head"
+     label_max="Eyes Long Head"
+     value_min="-1"
+     value_max="1">
+      <param_skeleton>
+        <bone
+         name="mEyeLeft"
+         scale="0 0 0"
+         offset=".016 0 0" />
+
+        <bone
+         name="mEyeRight"
+         scale="0 0 0"
+         offset=".016 0 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mPelvis"
-             scale="0 0 0" />
+    <param
+     id="768"
+     group="1"
+     name="EyeBone_Bug"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Eyes Sunken"
+     label_max="Eyes Bugged"
+     value_min="-2"
+     value_max="2">
+      <param_skeleton>
+        <bone
+         name="mEyeLeft"
+         scale="0 0 0"
+         offset=".005 0 0" />
+
+        <bone
+         name="mEyeRight"
+         scale="0 0 0"
+         offset=".005 0 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mHipLeft"
-             scale="0 0 0.1" />
+    <param
+     id="655"
+     group="1"
+     name="Head Size"
+   label="Head Size"
+     wearable="shape"
+     edit_group="shape_head"
+     label_min="Small Head"
+     label_max="Big Head"
+     show_simple="true"
+     value_min="-.25"
+     value_max=".10">
+      <param_skeleton>
+        <bone
+         name="mSkull"
+         scale="1 1 1"
+         offset="0 0 0.1" />
+
+        <bone
+         name="mHead"
+         scale="1 1 1"
+         offset="0 0 0" />
+
+        <bone
+         name="mEyeLeft"
+         scale="1 1 1"
+         offset="0 0 0" />
+
+        <bone
+         name="mEyeRight"
+         scale="1 1 1"
+         offset="0 0 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mHipRight"
-             scale="0 0 0.1" />
+    <param
+     id="197"
+     group="1"
+     wearable="shoes"
+     name="Shoe_Heels"
+     edit_group="shoes"
+     label_min="No Heels"
+     label_max="High Heels"
+     value_min="0"
+     value_max="1">
+      <param_skeleton>
+        <bone
+         name="mFootRight"
+         scale="0 0 0"
+         offset="0 0 -.08" />
+
+        <bone
+         name="mFootLeft"
+         scale="0 0 0"
+         offset="0 0 -.08" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mKneeLeft"
-             scale="0 0 0.1" />
+    <param
+     id="502"
+     group="1"
+     wearable="shoes"
+     name="Shoe_Platform"
+     edit_group="shoes"
+     label_min="No Heels"
+     label_max="High Heels"
+     value_min="0"
+     value_max="1">
+      <param_skeleton>
+        <bone
+         name="mFootRight"
+         scale="0 0 0"
+         offset="0 0 -.07" />
+
+        <bone
+         name="mFootLeft"
+         scale="0 0 0"
+         offset="0 0 -.07" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mKneeRight"
-             scale="0 0 0.1" />
-         </param_skeleton>
-      </param>
+    <param
+     id="675"
+     group="0"
+     name="Hand Size"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="10"
+     label_min="Small Hands"
+     label_max="Large Hands"
+     value_min="-.3"
+     value_max=".3"
+     camera_elevation=".1"
+     camera_distance="1.4"
+     camera_angle="0">
+      <param_skeleton>
+        <bone
+         name="mWristRight"
+         scale="1 1 1"
+         offset="0 0 0" />
+
+        <bone
+         name="mWristLeft"
+         scale="1 1 1"
+         offset="0 0 0" />
+      </param_skeleton>
+    </param>
 
-      <param
-       id="34"
-       group="0"
-       name="Thickness"
-       label="Body Thickness"
-       wearable="shape"
-       edit_group="shape_body"
-       edit_group_order="2"
-       label_min="Body Thin"
-       label_max="Body Thick"
-       show_simple="true"
-       value_min="-0.7"
-       value_max="1.5"
-       camera_distance="1.8">
-         <param_skeleton>
-            <bone
-             name="mNeck"
-             scale="0.1 0.1 0" />
+    <param
+     id="683"
+     group="0"
+     name="Neck Thickness"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="2"
+     label_min="Skinny Neck"
+     label_max="Thick Neck"
+     value_min="-.4"
+     value_max=".2"
+     value_default="-.15"
+     camera_elevation=".3"
+     camera_distance=".8"
+     camera_angle="15">
+      <param_skeleton>
+        <bone
+         name="mNeck"
+         scale="1 1 0"
+         offset="0 0 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mCollarLeft"
-             scale="0 0.2 0" />
+    <param
+     id="689"
+     group="1"
+     wearable="shape"
+     name="EyeBone_Big_Eyes"
+     edit_group="shape_eyes"
+     label_min="Eyes Back"
+     label_max="Eyes Forward"
+     value_min="-1"
+     value_max="1">
+      <param_skeleton>
+        <bone
+         name="mEyeLeft"
+         scale="0 0 0"
+         offset="-.005 0 0" />
+
+        <bone
+         name="mEyeRight"
+         scale="0 0 0"
+         offset="-.005 0 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mCollarRight"
-             scale="0 0.2 0" />
+    <param
+     id="692"
+     group="0"
+     name="Leg Length"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="2"
+     label_min="Short Legs"
+     label_max="Long Legs"
+     value_min="-1"
+     value_max="1"
+     camera_distance="2.5">
+      <param_skeleton>
+        <bone
+         name="mHipLeft"
+         scale="0 0 .2" />
+
+        <bone
+         name="mHipRight"
+         scale="0 0 .2" />
+
+        <bone
+         name="mKneeRight"
+         scale="0 0 .2" />
+
+        <bone
+         name="mKneeLeft"
+         scale="0 0 .2" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mShoulderLeft"
-             scale="0.1 0 0.1" />
+    <param
+     id="693"
+     group="0"
+     name="Arm Length"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="9"
+     label_min="Short Arms"
+     label_max="Long arms"
+     value_min="-1"
+     value_max="1"
+     value_default=".6"
+     camera_distance="1.5">
+      <param_skeleton>
+        <bone
+         name="mShoulderLeft"
+         scale="0 .2 0" />
+
+        <bone
+         name="mShoulderRight"
+         scale="0 .2 0" />
+
+        <bone
+         name="mElbowRight"
+         scale="0 .3 0" />
+
+        <bone
+         name="mElbowLeft"
+         scale="0 .3 0" />
+      </param_skeleton>
+    </param>
 
-            <bone
-             name="mShoulderRight"
-             scale="0.1 0 0.1" />
+    <param
+     id="756"
+     group="0"
+     name="Neck Length"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="3"
+     label_min="Short Neck"
+     label_max="Long Neck"
+     value_min="-1"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".3"
+     camera_distance=".8"
+     camera_angle="15">
+      <param_skeleton>
+        <bone
+         name="mNeck"
+         scale="0 0 .5" />
+      </param_skeleton>
+    </param>
+  </skeleton>
+
+  <mesh
+   type="hairMesh"
+ lod="0"
+   file_name="avatar_hair.llm"
+   min_pixel_width="320">
+    <!-- begin morph targets -->
+    <param
+     id="180"
+     group="1"
+     name="Hair_Volume"
+     label="Hair Volume"
+   show_simple="true"
+     wearable="hair"
+     clothing_morph="true"
+     edit_group="hair_style"
+     label_min="Less"
+     label_max="More"
+     value_min="0"
+     value_max="1.3"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mElbowLeft"
-             scale="0.1 0 0.1" />
+    <param
+     id="761"
+     group="1"
+     name="Hair_Volume_Small"
+     label="Hair Volume"
+   show_simple="true"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Less"
+     label_max="More"
+     value_min="0"
+     value_max="1.3"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mElbowRight"
-             scale="0.1 0 0.1" />
+    <param
+     id="181"
+     group="0"
+     name="Hair_Big_Front"
+     label="Big Hair Front"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="5"
+     label_min="Less"
+     label_max="More"
+     value_min="-1"
+     value_max="1"
+     value_default="0.14"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="90">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mChest"
-             scale="0.1 0.1 0" />
+    <param
+     id="182"
+     group="0"
+     name="Hair_Big_Top"
+     label="Big Hair Top"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="6"
+     label_min="Less"
+     label_max="More"
+     value_min="-1"
+     value_max="1"
+     value_default=".7"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="90">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mTorso"
-             scale="0.1 0.1 0" />
+    <param
+     id="183"
+     group="0"
+     name="Hair_Big_Back"
+     clothing_morph="true"
+     label="Big Hair Back"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="7"
+     label_min="Less"
+     label_max="More"
+     value_min="-1"
+     value_max="1"
+     value_default="0.05"
+     camera_elevation=".1"
+     camera_distance=".7"
+     camera_angle="90">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mPelvis"
-             scale="0.1 0.1 0" />
+    <param
+     id="184"
+     group="0"
+     name="Hair_Spiked"
+     label="Spiked Hair"
+   show_simple="true"
+     wearable="hair"
+     clothing_morph="true"
+     edit_group="hair_style"
+     edit_group_order="15"
+     label_min="No Spikes"
+     label_max="Big Spikes"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mHipLeft"
-             scale="0.13 0.13 0" />
+    <param
+     id="140"
+     group="0"
+     name="Hair_Part_Middle"
+     label="Middle Part"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="17"
+     label_min="No Part"
+     label_max="Part"
+     value_min="0"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="0">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mHipRight"
-             scale="0.13 0.13 0" />
+    <param
+     id="141"
+     group="0"
+     name="Hair_Part_Right"
+     label="Right Part"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="18"
+     label_min="No Part"
+     label_max="Part"
+     value_min="0"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="0">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mKneeLeft"
-             scale="0.12 0.12 0" />
+    <param
+     id="142"
+     group="0"
+     name="Hair_Part_Left"
+     label="Left Part"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="19"
+     label_min="No Part"
+     label_max="Part"
+     value_min="0"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="0">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mKneeRight"
-             scale="0.12 0.12 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="143"
+     group="0"
+     name="Hair_Sides_Full"
+     label="Full Hair Sides"
+   show_simple="true"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="11"
+     label_min="Mowhawk"
+     label_max="Full Sides"
+     value_min="-4"
+     value_max="1.5"
+     value_default="0.125"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-      <param
-       id="36"
-       group="0"
-       name="Shoulders"
-	   label="Shoulders"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="4"
-       label_min="Narrow"
-       label_max="Broad"
-       show_simple="true"
-       value_min="-1.8"
-       value_max="1.4"
-       value_default="-0.5"
-       camera_elevation=".1"
-       camera_distance="1.2"
-       camera_angle="0">
-         <param_skeleton>
-            <bone
-             name="mNeck"
-             scale="0.01 0.03 0" />
+    <param
+     id="144"
+     group="1"
+     name="Bangs_Front_Up"
+     label="Front Bangs Up"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Bangs"
+     label_max="Bangs Up"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mCollarLeft"
-             scale="0 0 0"
-             offset="0 .02 0" />
+    <param
+     id="145"
+     group="1"
+     clothing_morph="true"
+     name="Bangs_Front_Down"
+     label="Front Bangs Down"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Bangs"
+     label_max="Bangs Down"
+     value_min="0"
+     value_max="5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mCollarRight"
-             scale="0 0 0"
-             offset="0 -.02 0" />
+    <param
+     id="146"
+     group="1"
+     name="Bangs_Sides_Up"
+     label="Side Bangs Up"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Side Bangs"
+     label_max="Side Bangs Up"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mChest"
-             scale="0.02 0.08 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="147"
+     group="1"
+     clothing_morph="true"
+     name="Bangs_Sides_Down"
+     label="Side Bangs Down"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Side Bangs"
+     label_max="Side Bangs Down"
+     value_min="0"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-      <param
-       id="37"
-       group="0"
-       name="Hip Width"
-	   label="Hip Width"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="3"
-       label_min="Narrow"
-       label_max="Wide"
-       show_simple="true"
-       value_min="-3.2"
-       value_max="2.8"
-       camera_distance="1.8">
-         <param_skeleton>
-            <bone
-             name="mPelvis"
-             scale="0 0.1 0" />
-
-            <bone
-             name="mHipLeft"
-             scale="0 0 0"
-             offset="0 .004 0" />
-
-            <bone
-             name="mHipRight"
-             scale="0 0 0"
-             offset="0 -.004 0" />
-         </param_skeleton>
-      </param>
-
-      <param
-       id="842"
-       group="0"
-       name="Hip Length"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="3.2"
-       label_min="Short hips"
-       label_max="Long Hips"
-       value_min="-1"
-       value_max="1"
-       camera_distance="1.8">
-         <param_skeleton>
-            <bone
-             name="mPelvis"
-             scale="0 0 0.3" />
-         </param_skeleton>
-      </param>
+    <param
+     id="148"
+     group="1"
+     name="Bangs_Back_Up"
+     label="Back Bangs Up"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Back Bangs"
+     label_max="Back Bangs Up"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="150">
+      <param_morph />
+    </param>
 
-      <param
-       id="38"
-       group="0"
-       name="Torso Length"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="11"
-       label_min="Short Torso"
-       label_max="Long Torso"
-       value_min="-1"
-       value_max="1"
-       camera_distance="1.8">
-         <param_skeleton>
-            <bone
-             name="mTorso"
-             scale="0 0 .3" />
+    <param
+     id="149"
+     group="1"
+     name="Bangs_Back_Down"
+     label="Back Bangs Down"
+     clothing_morph="true"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Back Bangs"
+     label_max="Back Bangs Down"
+     value_min="0"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="150">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mPelvis"
-             scale="0 0 .1" />
+    <param
+     id="171"
+     group="1"
+     name="Hair_Front_Down"
+     label="Front Hair Down"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Front Hair"
+     label_max="Front Hair Down"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mHipLeft"
-             scale="0 0 -.1" />
+    <param
+     id="172"
+     group="1"
+     name="Hair_Front_Up"
+     label="Front Hair Up"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Front Hair"
+     label_max="Front Hair Up"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mHipRight"
-             scale="0 0 -.1" />
+    <param
+     id="173"
+     group="1"
+     name="Hair_Sides_Down"
+     label="Sides Hair Down"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Sides Hair"
+     label_max="Sides Hair Down"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mKneeRight"
-             scale="0 0 -.05" />
+    <param
+     id="174"
+     group="1"
+     name="Hair_Sides_Up"
+     label="Sides Hair Up"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Sides Hair"
+     label_max="Sides Hair Up"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mKneeLeft"
-             scale="0 0 -.05" />
-         </param_skeleton>
-      </param>
+    <param
+     id="175"
+     group="1"
+     name="Hair_Back_Down"
+     label="Back Hair Down"
+     clothing_morph="true"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Back Hair"
+     label_max="Back Hair Down"
+     value_min="0"
+     value_max="3"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="150">
+      <param_morph />
+    </param>
 
-      <param
-       id="195"
-       group="1"
-       name="EyeBone_Spread"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Eyes Together"
-       label_max="Eyes Spread"
-       value_min="-1"
-       value_max="1">
-         <param_skeleton>
-            <bone
-             name="mEyeLeft"
-             scale="0 0 0"
-             offset="0 .009 0" />
+    <param
+     id="176"
+     group="1"
+     name="Hair_Back_Up"
+     label="Back Hair Up"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Back Hair"
+     label_max="Back Hair Up"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="150">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mEyeRight"
-             scale="0 0 0"
-             offset="0 -.009 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="177"
+     group="0"
+     name="Hair_Rumpled"
+     label="Rumpled Hair"
+   show_simple="true"
+     wearable="hair"
+     clothing_morph="true"
+     edit_group="hair_style"
+     edit_group_order="14.5"
+     label_min="Smooth Hair"
+     label_max="Rumpled Hair"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-      <param
-       id="661"
-       group="1"
-       name="EyeBone_Head_Shear"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Eyes Shear Left Up"
-       label_max="Eyes Shear Right Up"
-       value_min="-2"
-       value_max="2">
-         <param_skeleton>
-            <bone
-             name="mEyeLeft"
-             scale="0 0 0"
-             offset="0 0 .004" />
+    <param
+     id="178"
+     group="1"
+     name="Hair_Swept_Back"
+     label="Swept Back Hair"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="NotHair"
+     label_max="Swept Back"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="90">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mEyeRight"
-             scale="0 0 0"
-             offset="0 0 -.004" />
-         </param_skeleton>
-      </param>
+    <param
+     id="179"
+     group="1"
+     name="Hair_Swept_Forward"
+     label="Swept Forward Hair"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Hair"
+     label_max="Swept Forward"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="90">
+      <param_morph />
+    </param>
 
-      <param
-       id="772"
-       group="1"
-       name="EyeBone_Head_Elongate"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Eyes Short Head"
-       label_max="Eyes Long Head"
-       value_min="-1"
-       value_max="1">
-         <param_skeleton>
-            <bone
-             name="mEyeLeft"
-             scale="0 0 0"
-             offset=".016 0 0" />
+    <param
+     id="190"
+     group="1"
+     name="Hair_Tilt_Right"
+     label="Hair Tilted Right"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Hair"
+     label_max="Tilt Right"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="0">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mEyeRight"
-             scale="0 0 0"
-             offset=".016 0 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="191"
+     group="1"
+     name="Hair_Tilt_Left"
+     label="Hair Tilted Left"
+     wearable="hair"
+     edit_group="hair_style"
+     label_min="Hair"
+     label_max="Tilt Left"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="0">
+      <param_morph />
+    </param>
 
-      <param
-       id="768"
-       group="1"
-       name="EyeBone_Bug"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Eyes Sunken"
-       label_max="Eyes Bugged"
-       value_min="-2"
-       value_max="2">
-         <param_skeleton>
-            <bone
-             name="mEyeLeft"
-             scale="0 0 0"
-             offset=".005 0 0" />
+    <param
+     id="192"
+     group="0"
+     name="Bangs_Part_Middle"
+     label="Part Bangs"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="20"
+     label_min="No Part"
+     label_max="Part Bangs"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="0">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mEyeRight"
-             scale="0 0 0"
-             offset=".005 0 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="640"
+     group="1"
+     name="Hair_Egg_Head"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="-1.3"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="655"
-       group="1"
-       name="Head Size"
-	   label="Head Size"
-       wearable="shape"
-       edit_group="shape_head"
-       label_min="Small Head"
-       label_max="Big Head"
-       show_simple="true"
-       value_min="-.25"
-       value_max=".10">
-         <param_skeleton>
-            <bone
-             name="mSkull"
-             scale="1 1 1"
-             offset="0 0 0.1" />
-
-            <bone
-             name="mHead"
-             scale="1 1 1"
-             offset="0 0 0" />
-
-            <bone
-             name="mEyeLeft"
-             scale="1 1 1"
-             offset="0 0 0" />
-
-            <bone
-             name="mEyeRight"
-             scale="1 1 1"
-             offset="0 0 0" />
-         </param_skeleton>
-      </param>
-
-      <param
-       id="197"
-       group="1"
-       wearable="shoes"
-       name="Shoe_Heels"
-       edit_group="shoes"
-       label_min="No Heels"
-       label_max="High Heels"
-       value_min="0"
-       value_max="1">
-         <param_skeleton>
-            <bone
-             name="mFootRight"
-             scale="0 0 0"
-             offset="0 0 -.08" />
+    <param
+     id="641"
+     group="1"
+     name="Hair_Squash_Stretch_Head"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="-.5"
+     value_max="1">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mFootLeft"
-             scale="0 0 0"
-             offset="0 0 -.08" />
-         </param_skeleton>
-      </param>
+    <param
+     id="642"
+     group="1"
+     name="Hair_Square_Head"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="502"
-       group="1"
-       wearable="shoes"
-       name="Shoe_Platform"
-       edit_group="shoes"
-       label_min="No Heels"
-       label_max="High Heels"
-       value_min="0"
-       value_max="1">
-         <param_skeleton>
-            <bone
-             name="mFootRight"
-             scale="0 0 0"
-             offset="0 0 -.07" />
+    <param
+     id="643"
+     group="1"
+     name="Hair_Round_Head"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mFootLeft"
-             scale="0 0 0"
-             offset="0 0 -.07" />
-         </param_skeleton>
-      </param>
+    <param
+     id="644"
+     group="1"
+     name="Hair_Forehead_Round"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="675"
-       group="0"
-       name="Hand Size"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="10"
-       label_min="Small Hands"
-       label_max="Large Hands"
-       value_min="-.3"
-       value_max=".3"
-       camera_elevation=".1"
-       camera_distance="1.4"
-       camera_angle="0">
-         <param_skeleton>
-            <bone
-             name="mWristRight"
-             scale="1 1 1"
-             offset="0 0 0" />
+    <param
+     id="645"
+     group="1"
+     name="Hair_Forehead_Slant"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mWristLeft"
-             scale="1 1 1"
-             offset="0 0 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="774"
+     group="1"
+     name="Shear_Head_Hair"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="-2"
+     value_max="2">
+      <param_morph />
+    </param>
 
-      <param
-       id="683"
-       group="0"
-       name="Neck Thickness"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="2"
-       label_min="Skinny Neck"
-       label_max="Thick Neck"
-       value_min="-.4"
-       value_max=".2"
-       value_default="-.15"
-       camera_elevation=".3"
-       camera_distance=".8"
-       camera_angle="15">
-         <param_skeleton>
-            <bone
-             name="mNeck"
-             scale="1 1 0"
-             offset="0 0 0" />
-         </param_skeleton>
-      </param>
-
-      <param
-       id="689"
-       group="1"
-       wearable="shape"
-       name="EyeBone_Big_Eyes"
-       edit_group="shape_eyes"
-       label_min="Eyes Back"
-       label_max="Eyes Forward"
-       value_min="-1"
-       value_max="1">
-         <param_skeleton>
-            <bone
-             name="mEyeLeft"
-             scale="0 0 0"
-             offset="-.005 0 0" />
+    <param
+     id="771"
+     group="1"
+     name="Elongate_Head_Hair"
+     wearable="hair"
+     edit_group="hair_style"
+     cross_wearable="true"
+     value_min="-1"
+     value_max="1">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mEyeRight"
-             scale="0 0 0"
-             offset="-.005 0 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="674"
+     group="0"
+     name="Hair_Shear_Back"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="12"
+     label="Shear Back"
+     label_min="Full Back"
+     label_max="Sheared Back"
+     value_min="-1"
+     value_max="2"
+     value_default="-0.3"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="100">
+      <param_morph />
+    </param>
 
-      <param
-       id="692"
-       group="0"
-       name="Leg Length"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="2"
-       label_min="Short Legs"
-       label_max="Long Legs"
-       value_min="-1"
-       value_max="1"
-       camera_distance="2.5">
-         <param_skeleton>
-            <bone
-             name="mHipLeft"
-             scale="0 0 .2" />
+    <param
+     id="762"
+     group="0"
+     name="Hair_Shear_Front"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="11.8"
+     label="Shear Front"
+   show_simple="true"
+     label_min="Full Front"
+     label_max="Sheared Front"
+     value_min="0"
+     value_max="3"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="30">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mHipRight"
-             scale="0 0 .2" />
+    <param
+     id="754"
+     group="0"
+     name="Hair_Taper_Back"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="14"
+     label="Taper Back"
+     label_min="Wide Back"
+     label_max="Narrow Back"
+     value_min="-1"
+     value_max="2"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="160">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mKneeRight"
-             scale="0 0 .2" />
+    <param
+     id="755"
+     group="0"
+     name="Hair_Taper_Front"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="13"
+     label="Taper Front"
+     label_min="Wide Front"
+     label_max="Narrow Front"
+     value_min="-1.5"
+     value_max="1.5"
+     value_default="0.05"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mKneeLeft"
-             scale="0 0 .2" />
-         </param_skeleton>
-      </param>
+    <param
+     id="782"
+     group="1"
+     clothing_morph="true"
+     name="Hair_Pigtails_Short"
+     wearable="hair"
+     edit_group="hair_style"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="693"
-       group="0"
-       name="Arm Length"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="9"
-       label_min="Short Arms"
-       label_max="Long arms"
-       value_min="-1"
-       value_max="1"
-       value_default=".6"
-       camera_distance="1.5">
-         <param_skeleton>
-            <bone
-             name="mShoulderLeft"
-             scale="0 .2 0" />
+    <param
+     id="783"
+     group="1"
+     clothing_morph="true"
+     name="Hair_Pigtails_Med"
+     wearable="hair"
+     edit_group="hair_style"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mShoulderRight"
-             scale="0 .2 0" />
+    <param
+     id="790"
+     group="1"
+     clothing_morph="true"
+     name="Hair_Pigtails_Medlong"
+     wearable="hair"
+     edit_group="hair_style"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mElbowRight"
-             scale="0 .3 0" />
+    <param
+     id="784"
+     group="1"
+     clothing_morph="true"
+     name="Hair_Pigtails_Long"
+     wearable="hair"
+     edit_group="hair_style"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-            <bone
-             name="mElbowLeft"
-             scale="0 .3 0" />
-         </param_skeleton>
-      </param>
+    <param
+     id="786"
+     group="1"
+     name="Hair_Ponytail_Short"
+     wearable="hair"
+     edit_group="hair_style"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="756"
-       group="0"
-       name="Neck Length"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="3"
-       label_min="Short Neck"
-       label_max="Long Neck"
-       value_min="-1"
-       value_max="1"
-       value_default="0"
-       camera_elevation=".3"
-       camera_distance=".8"
-       camera_angle="15">
-         <param_skeleton>
-            <bone
-             name="mNeck"
-             scale="0 0 .5" />
-         </param_skeleton>
-      </param>
-   </skeleton>
-
-   <mesh
-    type="hairMesh"
-	lod="0"
-    file_name="avatar_hair.llm"
-    min_pixel_width="320">
-<!-- begin morph targets -->
-      <param
-       id="180"
-       group="1"
-       name="Hair_Volume"
-       label="Hair Volume"
-	   show_simple="true"
-       wearable="hair"
-       clothing_morph="true"
-       edit_group="hair_style"
-       label_min="Less"
-       label_max="More"
-       value_min="0"
-       value_max="1.3"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="787"
+     group="1"
+     name="Hair_Ponytail_Med"
+     wearable="hair"
+     edit_group="hair_style"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="761"
-       group="1"
-       name="Hair_Volume_Small"
-       label="Hair Volume"
-	   show_simple="true"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Less"
-       label_max="More"
-       value_min="0"
-       value_max="1.3"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="788"
+     group="1"
+     name="Hair_Ponytail_Long"
+     clothing_morph="true"
+     wearable="hair"
+     edit_group="hair_style"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!-- #end morph targets -->
+  </mesh>
+
+  <mesh
+   type="hairMesh"
+ lod="1"
+   file_name="avatar_hair_1.llm"
+   min_pixel_width="160"
+   reference="avatar_hair.llm">
+  </mesh>
+
+  <mesh
+   type="hairMesh"
+ lod="2"
+   file_name="avatar_hair_2.llm"
+   min_pixel_width="80"
+   reference="avatar_hair.llm">
+  </mesh>
+
+  <mesh
+   type="hairMesh"
+ lod="3"
+   file_name="avatar_hair_3.llm"
+   min_pixel_width="40"
+   reference="avatar_hair.llm">
+  </mesh>
+
+  <mesh
+   type="hairMesh"
+ lod="4"
+   file_name="avatar_hair_4.llm"
+ min_pixel_width="20"
+   reference="avatar_hair.llm">
+  </mesh>
+
+  <mesh
+   type="hairMesh"
+ lod="5"
+   file_name="avatar_hair_5.llm"
+ min_pixel_width="0"
+   reference="avatar_hair.llm">
+  </mesh>
+
+  <mesh
+   type="headMesh"
+ lod="0"
+   file_name="avatar_head.llm"
+   min_pixel_width="320">
+    <!-- 
+                begin morph targets
+                #############
+                tweakable morphs
+                ############# 
+      -->
+    <param
+     id="1"
+     group="0"
+     name="Big_Brow"
+     label="Brow Size"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="7"
+     label_min="Small"
+     label_max="Large"
+     value_min="-.3"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".4"
+     camera_angle="45">
+      <param_morph />
+    </param>
 
-      <param
-       id="181"
-       group="0"
-       name="Hair_Big_Front"
-       label="Big Hair Front"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="5"
-       label_min="Less"
-       label_max="More"
-       value_min="-1"
-       value_max="1"
-       value_default="0.14"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="90">
-         <param_morph />
-      </param>
+    <param
+     id="2"
+     group="0"
+     name="Nose_Big_Out"
+     label="Nose Size"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="1"
+     label_min="Small"
+     label_max="Large"
+     show_simple="true"
+     value_min="-0.8"
+     value_max="2.5"
+     camera_elevation=".1"
+     camera_distance=".35"
+     camera_angle="50">
+      <param_morph />
+    </param>
 
-      <param
-       id="182"
-       group="0"
-       name="Hair_Big_Top"
-       label="Big Hair Top"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="6"
-       label_min="Less"
-       label_max="More"
-       value_min="-1"
-       value_max="1"
-       value_default=".7"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="90">
-         <param_morph />
-      </param>
+    <param
+     id="4"
+     group="0"
+     name="Broad_Nostrils"
+     label="Nostril Width"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="3"
+     label_min="Narrow"
+     label_max="Broad"
+     value_min="-.5"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="183"
-       group="0"
-       name="Hair_Big_Back"
-       clothing_morph="true"
-       label="Big Hair Back"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="7"
-       label_min="Less"
-       label_max="More"
-       value_min="-1"
-       value_max="1"
-       value_default="0.05"
-       camera_elevation=".1"
-       camera_distance=".7"
-       camera_angle="90">
-         <param_morph />
-      </param>
+    <param
+     id="759"
+     group="0"
+     name="Low_Septum_Nose"
+     label="Nostril Division"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="3.5"
+     label_min="High"
+     label_max="Low"
+     value_min="-1"
+     value_max="1.5"
+     value_default="0.5"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="184"
-       group="0"
-       name="Hair_Spiked"
-       label="Spiked Hair"
-	   show_simple="true"
-       wearable="hair"
-       clothing_morph="true"
-       edit_group="hair_style"
-       edit_group_order="15"
-       label_min="No Spikes"
-       label_max="Big Spikes"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="517"
+     group="0"
+     name="Wide_Nose"
+     label="Nose Width"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="2"
+     label_min="Narrow"
+     label_max="Wide"
+     show_simple="true"
+     value_min="-.5"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="140"
-       group="0"
-       name="Hair_Part_Middle"
-       label="Middle Part"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="17"
-       label_min="No Part"
-       label_max="Part"
-       value_min="0"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="0">
-         <param_morph />
-      </param>
+    <param
+     id="5"
+     group="0"
+     name="Cleft_Chin"
+     label="Chin Cleft"
+     wearable="shape"
+     edit_group="shape_chin"
+     edit_group_order="6"
+     label_min="Round"
+     label_max="Cleft"
+     value_min="-.1"
+     value_max="1"
+     camera_elevation="0"
+     camera_distance=".28"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="141"
-       group="0"
-       name="Hair_Part_Right"
-       label="Right Part"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="18"
-       label_min="No Part"
-       label_max="Part"
-       value_min="0"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="0">
-         <param_morph />
-      </param>
+    <param
+     id="6"
+     group="0"
+     name="Bulbous_Nose_Tip"
+     label="Nose Tip Shape"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="8"
+     label_min="Pointy"
+     label_max="Bulbous"
+     value_min="-.3"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".35"
+     camera_angle="15">
+      <param_morph />
+    </param>
 
-      <param
-       id="142"
-       group="0"
-       name="Hair_Part_Left"
-       label="Left Part"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="19"
-       label_min="No Part"
-       label_max="Part"
-       value_min="0"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="0">
-         <param_morph />
-      </param>
+    <param
+     id="7"
+     group="0"
+     name="Weak_Chin"
+     label="Chin Angle"
+     wearable="shape"
+     edit_group="shape_chin"
+     edit_group_order="1"
+     label_min="Chin Out"
+     label_max="Chin In"
+     value_min="-.5"
+     value_max=".5"
+     camera_elevation=".1"
+     camera_distance=".4"
+     camera_angle="45">
+      <param_morph />
+    </param>
 
-      <param
-       id="143"
-       group="0"
-       name="Hair_Sides_Full"
-       label="Full Hair Sides"
-	   show_simple="true"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="11"
-       label_min="Mowhawk"
-       label_max="Full Sides"
-       value_min="-4"
-       value_max="1.5"
-       value_default="0.125"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="8"
+     group="0"
+     name="Double_Chin"
+     label="Chin-Neck"
+     wearable="shape"
+     edit_group="shape_chin"
+     edit_group_order="8"
+     label_min="Tight Chin"
+     label_max="Double Chin"
+     value_min="-.5"
+     value_max="1.5"
+     camera_elevation="-.1"
+     camera_distance=".3"
+     camera_angle="60">
+      <param_morph />
+    </param>
 
-      <param
-       id="144"
-       group="1"
-       name="Bangs_Front_Up"
-       label="Front Bangs Up"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Bangs"
-       label_max="Bangs Up"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="10"
+     group="0"
+     name="Sunken_Cheeks"
+     label="Lower Cheeks"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="9"
+     label_min="Well-Fed"
+     label_max="Sunken"
+     show_simple="true"
+     value_min="-1.5"
+     value_max="3"
+     camera_elevation=".1"
+     camera_distance=".4"
+     camera_angle="5">
+      <param_morph />
+    </param>
 
-      <param
-       id="145"
-       group="1"
-       clothing_morph="true"
-       name="Bangs_Front_Down"
-       label="Front Bangs Down"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Bangs"
-       label_max="Bangs Down"
-       value_min="0"
-       value_max="5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="11"
+     group="0"
+     name="Noble_Nose_Bridge"
+     label="Upper Bridge"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="5"
+     label_min="Low"
+     label_max="High"
+     value_min="-.5"
+     value_max="1.5"
+     camera_elevation=".1"
+     camera_distance=".35"
+     camera_angle="70">
+      <param_morph />
+    </param>
 
-      <param
-       id="146"
-       group="1"
-       name="Bangs_Sides_Up"
-       label="Side Bangs Up"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Side Bangs"
-       label_max="Side Bangs Up"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="758"
+     group="0"
+     name="Lower_Bridge_Nose"
+     label="Lower Bridge"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="5.5"
+     label_min="Low"
+     label_max="High"
+     value_min="-1.5"
+     value_max="1.5"
+     camera_elevation=".1"
+     camera_distance=".35"
+     camera_angle="70">
+      <param_morph />
+    </param>
 
-      <param
-       id="147"
-       group="1"
-       clothing_morph="true"
-       name="Bangs_Sides_Down"
-       label="Side Bangs Down"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Side Bangs"
-       label_max="Side Bangs Down"
-       value_min="0"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="12"
+     group="0"
+     name="Jowls"
+     wearable="shape"
+     edit_group="shape_chin"
+     edit_group_order="5"
+     label_min="Less"
+     label_max="More"
+     value_min="-.5"
+     value_max="2.5"
+     camera_elevation=".1"
+     camera_distance=".4"
+     camera_angle="0">
+      <param_morph />
+    </param>
 
-      <param
-       id="148"
-       group="1"
-       name="Bangs_Back_Up"
-       label="Back Bangs Up"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Back Bangs"
-       label_max="Back Bangs Up"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="150">
-         <param_morph />
-      </param>
+    <param
+     id="13"
+     group="0"
+     name="Cleft_Chin_Upper"
+     label="Upper Chin Cleft"
+     wearable="shape"
+     edit_group="shape_chin"
+     edit_group_order="7"
+     label_min="Round"
+     label_max="Cleft"
+     value_min="0"
+     value_max="1.5"
+     camera_elevation="0"
+     camera_distance=".28"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="149"
-       group="1"
-       name="Bangs_Back_Down"
-       label="Back Bangs Down"
-       clothing_morph="true"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Back Bangs"
-       label_max="Back Bangs Down"
-       value_min="0"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="150">
-         <param_morph />
-      </param>
+    <param
+     id="14"
+     group="0"
+     name="High_Cheek_Bones"
+     label="Cheek Bones"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="10"
+     label_min="Low"
+     label_max="High"
+     value_min="-.5"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="171"
-       group="1"
-       name="Hair_Front_Down"
-       label="Front Hair Down"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Front Hair"
-       label_max="Front Hair Down"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="15"
+     group="0"
+     name="Ears_Out"
+     label="Ear Angle"
+     wearable="shape"
+     edit_group="shape_ears"
+     edit_group_order="2"
+     label_min="In"
+     label_max="Out"
+     value_min="-.5"
+     value_max="1.5"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="-20">
+      <param_morph />
+    </param>
+
+    <!--Pointy eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
+    <param
+     id="870"
+     group="1"
+     name="Pointy_Eyebrows"
+     label="Eyebrow Points"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="4"
+     label_min="Smooth"
+     label_max="Pointy"
+     value_min="-.5"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_morph />
+    </param>
 
-      <param
-       id="172"
-       group="1"
-       name="Hair_Front_Up"
-       label="Front Hair Up"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Front Hair"
-       label_max="Front Hair Up"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="17"
+     group="0"
+     name="Square_Jaw"
+     label="Jaw Shape"
+     wearable="shape"
+     edit_group="shape_chin"
+     edit_group_order="2"
+     label_min="Pointy"
+     label_max="Square"
+     value_min="-.5"
+     value_max="1"
+     camera_distance=".3"
+     camera_elevation=".04"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="173"
-       group="1"
-       name="Hair_Sides_Down"
-       label="Sides Hair Down"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Sides Hair"
-       label_max="Sides Hair Down"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="18"
+     group="0"
+     name="Puffy_Upper_Cheeks"
+     label="Upper Cheeks"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="8"
+     label_min="Thin"
+     label_max="Puffy"
+     value_min="-1.5"
+     value_max="2.5"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="174"
-       group="1"
-       name="Hair_Sides_Up"
-       label="Sides Hair Up"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Sides Hair"
-       label_max="Sides Hair Up"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="19"
+     group="0"
+     name="Upturned_Nose_Tip"
+     label="Nose Tip Angle"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="7"
+     label_min="Downturned"
+     label_max="Upturned"
+     value_min="-1.5"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".35"
+     camera_angle="15">
+      <param_morph />
+    </param>
 
-      <param
-       id="175"
-       group="1"
-       name="Hair_Back_Down"
-       label="Back Hair Down"
-       clothing_morph="true"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Back Hair"
-       label_max="Back Hair Down"
-       value_min="0"
-       value_max="3"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="150">
-         <param_morph />
-      </param>
+    <param
+     id="20"
+     group="0"
+     name="Bulbous_Nose"
+     label="Nose Thickness"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="4"
+     label_min="Thin Nose"
+     label_max="Bulbous Nose"
+     show_simple="true"
+     value_min="-.5"
+     value_max="1.5"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_morph />
+    </param>
 
-      <param
-       id="176"
-       group="1"
-       name="Hair_Back_Up"
-       label="Back Hair Up"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Back Hair"
-       label_max="Back Hair Up"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="150">
-         <param_morph />
-      </param>
+    <param
+     id="21"
+     group="0"
+     name="Upper_Eyelid_Fold"
+     label="Upper Eyelid Fold"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="5"
+     label_min="Uncreased"
+     label_max="Creased"
+     value_min="-0.2"
+     value_max="1.3"
+     camera_elevation=".1"
+     camera_distance=".35">
+      <param_morph />
+    </param>
 
-      <param
-       id="177"
-       group="0"
-       name="Hair_Rumpled"
-       label="Rumpled Hair"
-	   show_simple="true"
-       wearable="hair"
-       clothing_morph="true"
-       edit_group="hair_style"
-       edit_group_order="14.5"
-       label_min="Smooth Hair"
-       label_max="Rumpled Hair"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="22"
+     group="0"
+     name="Attached_Earlobes"
+     label="Attached Earlobes"
+     wearable="shape"
+     edit_group="shape_ears"
+     edit_group_order="3"
+     label_min="Unattached"
+     label_max="Attached"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="45">
+      <param_morph />
+    </param>
 
-      <param
-       id="178"
-       group="1"
-       name="Hair_Swept_Back"
-       label="Swept Back Hair"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="NotHair"
-       label_max="Swept Back"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="90">
-         <param_morph />
-      </param>
+    <param
+     id="23"
+     group="0"
+     name="Baggy_Eyes"
+     label="Eye Bags"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="6"
+     label_min="Smooth"
+     label_max="Baggy"
+     value_min="-.5"
+     value_max="1.5"
+     camera_elevation=".1"
+     camera_distance=".35">
+      <param_morph />
+    </param>
 
-      <param
-       id="179"
-       group="1"
-       name="Hair_Swept_Forward"
-       label="Swept Forward Hair"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Hair"
-       label_max="Swept Forward"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="90">
-         <param_morph />
-      </param>
+    <param
+     id="765"
+     group="0"
+     name="Puffy_Lower_Lids"
+     label="Puffy Eyelids"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="6.1"
+     label_min="Flat"
+     label_max="Puffy"
+     value_min="-.3"
+     value_max="2.5"
+     camera_elevation=".1"
+     camera_distance=".35">
+      <param_morph />
+    </param>
 
-      <param
-       id="190"
-       group="1"
-       name="Hair_Tilt_Right"
-       label="Hair Tilted Right"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Hair"
-       label_max="Tilt Right"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="0">
-         <param_morph />
-      </param>
+    <param
+     id="24"
+     group="0"
+     name="Wide_Eyes"
+     label="Eye Opening"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="1.1"
+     label_min="Narrow"
+     label_max="Wide"
+     value_min="-1.5"
+     value_max="2"
+   show_simple="true"
+     camera_elevation=".1"
+     camera_distance=".35">
+      <param_morph />
+    </param>
 
-      <param
-       id="191"
-       group="1"
-       name="Hair_Tilt_Left"
-       label="Hair Tilted Left"
-       wearable="hair"
-       edit_group="hair_style"
-       label_min="Hair"
-       label_max="Tilt Left"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="0">
-         <param_morph />
-      </param>
+    <param
+     id="25"
+     group="0"
+     name="Wide_Lip_Cleft"
+     label="Lip Cleft"
+     wearable="shape"
+     edit_group="shape_mouth"
+     edit_group_order="6"
+     label_min="Narrow"
+     label_max="Wide"
+     value_min="-.8"
+     value_max="1.5"
+     camera_elevation="0"
+     camera_distance=".28">
+      <param_morph />
+    </param>
 
-      <param
-       id="192"
-       group="0"
-       name="Bangs_Part_Middle"
-       label="Part Bangs"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="20"
-       label_min="No Part"
-       label_max="Part Bangs"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="0">
-         <param_morph />
-      </param>
+    <param
+     id="764"
+     group="0"
+     name="Lip_Cleft_Deep"
+     label="Lip Cleft Depth"
+     wearable="shape"
+     edit_group="shape_mouth"
+     edit_group_order="5.8"
+     label_min="Shallow"
+     label_max="Deep"
+     value_min="-.5"
+     value_max="1.2"
+     camera_elevation="0"
+     camera_distance=".28">
+      <param_morph />
+    </param>
 
-      <param
-       id="640"
-       group="1"
-       name="Hair_Egg_Head"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="-1.3"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="26"
+     group="1"
+     wearable="shape"
+     name="Lips_Thin"
+     edit_group="driven"
+     value_min="0"
+     value_max=".7">
+      <param_morph />
+    </param>
 
-      <param
-       id="641"
-       group="1"
-       name="Hair_Squash_Stretch_Head"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="-.5"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="27"
+     group="0"
+     name="Wide_Nose_Bridge"
+     label="Bridge Width"
+     wearable="shape"
+     edit_group="shape_nose"
+     edit_group_order="6"
+     label_min="Narrow"
+     label_max="Wide"
+     value_min="-1.3"
+     value_max="1.2"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="642"
-       group="1"
-       name="Hair_Square_Head"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="28"
+     group="1"
+     name="Lips_Fat"
+     wearable="shape"
+     edit_group="driven"
+     value_min="0"
+     value_max="2">
+      <param_morph />
+    </param>
 
-      <param
-       id="643"
-       group="1"
-       name="Hair_Round_Head"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="29"
+     group="1"
+     name="Wide_Upper_Lip"
+     wearable="shape"
+     edit_group="driven"
+     value_min="-.7"
+     value_max="1.3">
+      <param_morph />
+    </param>
 
-      <param
-       id="644"
-       group="1"
-       name="Hair_Forehead_Round"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="30"
+     group="1"
+     name="Wide_Lower_Lip"
+     wearable="shape"
+     edit_group="driven"
+     value_min="-.7"
+     value_max="1.3">
+      <param_morph />
+    </param>
+
+    <!--Arced eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
+    <param
+     id="872"
+     group="1"
+     name="Arced_Eyebrows"
+     label="Eyebrow Arc"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="3"
+     label_min="Flat"
+     label_max="Arced"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--Lower eyebrows became a driver/driven param with new min value for backwards compatibility between 1.0 and 1.1-->
+    <param
+     id="871"
+     group="1"
+     name="Lower_Eyebrows"
+     label="Eyebrow Height"
+   show_simple="true"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="2.5"
+     label_min="Higher"
+     label_max="Lower"
+     value_min="-2"
+     value_max="2">
+      <param_morph />
+    </param>
 
-      <param
-       id="645"
-       group="1"
-       name="Hair_Forehead_Slant"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="35"
+     group="0"
+     name="Big_Ears"
+     label="Ear Size"
+     wearable="shape"
+     edit_group="shape_ears"
+     edit_group_order="1"
+     label_min="Small"
+     label_max="Large"
+     value_min="-1"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="45">
+      <param_morph />
+    </param>
 
-      <param
-       id="774"
-       group="1"
-       name="Shear_Head_Hair"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="-2"
-       value_max="2">
-         <param_morph />
-      </param>
+    <param
+     id="796"
+     group="0"
+     name="Pointy_Ears"
+     label="Ear Tips"
+     wearable="shape"
+     edit_group="shape_ears"
+     edit_group_order="4"
+     label_min="Flat"
+     label_max="Pointy"
+     value_min="-.4"
+     value_max="3"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="45">
+      <param_morph />
+    </param>
 
-      <param
-       id="771"
-       group="1"
-       name="Elongate_Head_Hair"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="-1"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="185"
+     group="0"
+     name="Deep_Chin"
+     label="Chin Depth"
+     wearable="shape"
+     edit_group="shape_chin"
+     edit_group_order="3"
+     label_min="Shallow"
+     label_max="Deep"
+     value_min="-1"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".4"
+     camera_angle="30">
+      <param_morph />
+    </param>
 
-      <param
-       id="674"
-       group="0"
-       name="Hair_Shear_Back"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="12"
-       label="Shear Back"
-       label_min="Full Back"
-       label_max="Sheared Back"
-       value_min="-1"
-       value_max="2"
-       value_default="-0.3"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="100">
-         <param_morph />
-      </param>
+    <param
+     id="186"
+     group="1"
+     name="Egg_Head"
+     label="Egg Head"
+     wearable="shape"
+     edit_group="shape_head"
+     label_min="Chin Heavy"
+     label_max="Forehead Heavy"
+     value_min="-1.3"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-      <param
-       id="762"
-       group="0"
-       name="Hair_Shear_Front"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="11.8"
-       label="Shear Front"
-	   show_simple="true"
-       label_min="Full Front"
-       label_max="Sheared Front"
-       value_min="0"
-       value_max="3"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="30">
-         <param_morph />
-      </param>
+    <param
+     id="187"
+     group="1"
+     name="Squash_Stretch_Head"
+     label="Squash/Stretch Head"
+     wearable="shape"
+     edit_group="shape_head"
+     label_min="Squash Head"
+     label_max="Stretch Head"
+     value_min="-.5"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph>
+        <volume_morph
+          name="HEAD"
+          scale="-0.008 -0.006 0.015"/>
+      </param_morph>
+    </param>
 
-      <param
-       id="754"
-       group="0"
-       name="Hair_Taper_Back"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="14"
-       label="Taper Back"
-       label_min="Wide Back"
-       label_max="Narrow Back"
-       value_min="-1"
-       value_max="2"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="160">
-         <param_morph />
-      </param>
+    <param
+     id="188"
+     group="1"
+     name="Square_Head"
+     wearable="shape"
+     label_min="Less Square"
+     label_max="More Square"
+     value_min="0"
+     value_max=".7"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-      <param
-       id="755"
-       group="0"
-       name="Hair_Taper_Front"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="13"
-       label="Taper Front"
-       label_min="Wide Front"
-       label_max="Narrow Front"
-       value_min="-1.5"
-       value_max="1.5"
-       value_default="0.05"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="189"
+     group="1"
+     wearable="shape"
+     name="Round_Head"
+     label_min="Less Round"
+     label_max="More Round"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-      <param
-       id="782"
-       group="1"
-       clothing_morph="true"
-       name="Hair_Pigtails_Short"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="194"
+     group="1"
+     name="Eye_Spread"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Eyes Together"
+     label_max="Eyes Spread"
+     value_min="-2"
+     value_max="2">
+      <param_morph />
+    </param>
 
-      <param
-       id="783"
-       group="1"
-       clothing_morph="true"
-       name="Hair_Pigtails_Med"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="400"
+     sex="male"
+     group="1"
+     name="Displace_Hair_Facial"
+     label="Hair Thickess"
+     wearable="hair"
+     edit_group="hair_facial"
+     label_min="Cropped Hair"
+     label_max="Bushy Hair"
+     value_min="0"
+     value_max="2">
+      <param_morph />
+    </param>
 
-      <param
-       id="790"
-       group="1"
-       clothing_morph="true"
-       name="Hair_Pigtails_Medlong"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="506"
+     group="0"
+     name="Mouth_Height"
+     wearable="shape"
+     label="Mouth Position"
+   show_simple="true"
+     edit_group="shape_mouth"
+     edit_group_order="4"
+     label_min="High"
+     label_max="Low"
+     value_min="-2"
+     value_max="2"
+     camera_distance=".3"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="784"
-       group="1"
-       clothing_morph="true"
-       name="Hair_Pigtails_Long"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="633"
+     group="1"
+     name="Fat_Head"
+     label="Fat Head"
+     wearable="shape"
+     edit_group="shape_body"
+     label_min="Skinny"
+     label_max="Fat"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".3">
+      <param_morph/>
+    </param>
 
-      <param
-       id="786"
-       group="1"
-       name="Hair_Ponytail_Short"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="630"
+     group="1"
+     name="Forehead_Round"
+     label="Round Forehead"
+     wearable="shape"
+     label_min="Less"
+     label_max="More"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="787"
-       group="1"
-       name="Hair_Ponytail_Med"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="631"
+     group="1"
+     name="Forehead_Slant"
+     label="Slanted Forehead"
+     wearable="shape"
+     label_min="Less"
+     label_max="More"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="788"
-       group="1"
-       name="Hair_Ponytail_Long"
-       clothing_morph="true"
-       wearable="hair"
-       edit_group="hair_style"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
-
-<!-- #end morph targets -->
-   </mesh>
-
-   <mesh
-    type="hairMesh"
-	lod="1"
-    file_name="avatar_hair_1.llm"
-    min_pixel_width="160"
-    reference="avatar_hair.llm">
-   </mesh>
-
-   <mesh
-    type="hairMesh"
-	lod="2"
-    file_name="avatar_hair_2.llm"
-    min_pixel_width="80"
-    reference="avatar_hair.llm">
-   </mesh>
-
-   <mesh
-    type="hairMesh"
-	lod="3"
-    file_name="avatar_hair_3.llm"
-    min_pixel_width="40"
-    reference="avatar_hair.llm">
-   </mesh>
-
-   <mesh
-    type="hairMesh"
-	lod="4"
-    file_name="avatar_hair_4.llm"
-	min_pixel_width="20"
-    reference="avatar_hair.llm">
-   </mesh>
-
-   <mesh
-    type="hairMesh"
-	lod="5"
-    file_name="avatar_hair_5.llm"
-	min_pixel_width="0"
-    reference="avatar_hair.llm">
-   </mesh>
-
-   <mesh
-    type="headMesh"
-	lod="0"
-    file_name="avatar_head.llm"
-    min_pixel_width="320">
-<!-- 
-            begin morph targets
-            #############
-            tweakable morphs
-            ############# 
-  -->
-      <param
-       id="1"
-       group="0"
-       name="Big_Brow"
-       label="Brow Size"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="7"
-       label_min="Small"
-       label_max="Large"
-       value_min="-.3"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".4"
-       camera_angle="45">
-         <param_morph />
-      </param>
+    <param
+     id="650"
+     group="0"
+     name="Eyelid_Corner_Up"
+     label="Outer Eye Corner"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="4"
+     label_min="Corner Down"
+     label_max="Corner Up"
+     value_min="-1.3"
+     value_max="1.2"
+     camera_elevation=".1"
+     camera_distance=".30">
+      <param_morph />
+    </param>
 
-      <param
-       id="2"
+    <param
+       id="880"
        group="0"
-       name="Nose_Big_Out"
-       label="Nose Size"
+       name="Eyelid_Inner_Corner_Up"
+       label="Inner Eye Corner"
        wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="1"
-       label_min="Small"
-       label_max="Large"
-       show_simple="true"
-       value_min="-0.8"
-       value_max="2.5"
+       edit_group="shape_eyes"
+       edit_group_order="4.2"
+       label_min="Corner Down"
+       label_max="Corner Up"
+       value_min="-1.3"
+       value_max="1.2"
        camera_elevation=".1"
-       camera_distance=".35"
-       camera_angle="50">
-         <param_morph />
-      </param>
+       camera_distance=".30">
+      <param_morph />
+    </param>
+ 
 
-      <param
-       id="4"
-       group="0"
-       name="Broad_Nostrils"
-       label="Nostril Width"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="3"
-       label_min="Narrow"
-       label_max="Broad"
-       value_min="-.5"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="653"
+     group="0"
+     name="Tall_Lips"
+     wearable="shape"
+     label="Lip Fullness"
+   show_simple="true"
+     edit_group="shape_mouth"
+     edit_group_order="2"
+     label_min="Less Full"
+     label_max="More Full"
+     value_min="-1"
+     value_max="2"
+     camera_distance=".3"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="759"
-       group="0"
-       name="Low_Septum_Nose"
-       label="Nostril Division"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="3.5"
-       label_min="High"
-       label_max="Low"
-       value_min="-1"
-       value_max="1.5"
-       value_default="0.5"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="656"
+     group="0"
+     name="Crooked_Nose"
+     wearable="shape"
+     label="Crooked Nose"
+     edit_group="shape_nose"
+     edit_group_order="9"
+     label_min="Nose Left"
+     label_max="Nose Right"
+     value_min="-2"
+     value_max="2"
+     camera_distance=".3"
+     camera_elevation=".04"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="517"
-       group="0"
-       name="Wide_Nose"
-       label="Nose Width"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="2"
-       label_min="Narrow"
-       label_max="Wide"
-       show_simple="true"
-       value_min="-.5"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="657"
+     group="1"
+     name="Smile_Mouth"
+     wearable="shape"
+     label="Mouth Corner"
+     edit_group="shape_mouth"
+     label_min="Corner Normal"
+     label_max="Corner Up"
+     value_min="0"
+     value_max="1.4"
+     camera_distance=".3"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="5"
-       group="0"
-       name="Cleft_Chin"
-       label="Chin Cleft"
-       wearable="shape"
-       edit_group="shape_chin"
-       edit_group_order="6"
-       label_min="Round"
-       label_max="Cleft"
-       value_min="-.1"
-       value_max="1"
-       camera_elevation="0"
-       camera_distance=".28"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="658"
+     group="1"
+     name="Frown_Mouth"
+     wearable="shape"
+     label="Mouth Corner"
+     edit_group="shape_mouth"
+     label_min="Corner Normal"
+     label_max="Corner Down"
+     value_min="0"
+     value_max="1.2"
+     camera_distance=".3"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="6"
-       group="0"
-       name="Bulbous_Nose_Tip"
-       label="Nose Tip Shape"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="8"
-       label_min="Pointy"
-       label_max="Bulbous"
-       value_min="-.3"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".35"
-       camera_angle="15">
-         <param_morph />
-      </param>
+    <param
+     id="797"
+     group="1"
+     name="Fat_Upper_Lip"
+     wearable="shape"
+     label="Fat Upper Lip"
+     edit_group="shape_mouth"
+     label_min="Normal Upper"
+     label_max="Fat Upper"
+     value_min="0"
+     value_max="1.5"
+     camera_distance=".3"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="7"
-       group="0"
-       name="Weak_Chin"
-       label="Chin Angle"
-       wearable="shape"
-       edit_group="shape_chin"
-       edit_group_order="1"
-       label_min="Chin Out"
-       label_max="Chin In"
-       value_min="-.5"
-       value_max=".5"
-       camera_elevation=".1"
-       camera_distance=".4"
-       camera_angle="45">
-         <param_morph />
-      </param>
+    <param
+     id="798"
+     group="1"
+     name="Fat_Lower_Lip"
+     wearable="shape"
+     label="Fat Lower Lip"
+     edit_group="shape_mouth"
+     label_min="Normal Lower"
+     label_max="Fat Lower"
+     value_min="0"
+     value_max="1.5"
+     camera_distance=".3"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="8"
-       group="0"
-       name="Double_Chin"
-       label="Chin-Neck"
-       wearable="shape"
-       edit_group="shape_chin"
-       edit_group_order="8"
-       label_min="Tight Chin"
-       label_max="Double Chin"
-       value_min="-.5"
-       value_max="1.5"
-       camera_elevation="-.1"
-       camera_distance=".3"
-       camera_angle="60">
-         <param_morph />
-      </param>
+    <param
+     id="660"
+     group="1"
+     name="Shear_Head"
+     wearable="shape"
+     label="Shear Face"
+     edit_group="shape_head"
+     label_min="Shear Left"
+     label_max="Shear Right"
+     value_min="-2"
+     value_max="2"
+     value_default="0"
+     camera_distance=".5"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="10"
-       group="0"
-       name="Sunken_Cheeks"
-       label="Lower Cheeks"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="9"
-       label_min="Well-Fed"
-       label_max="Sunken"
-       show_simple="true"
-       value_min="-1.5"
-       value_max="3"
-       camera_elevation=".1"
-       camera_distance=".4"
-       camera_angle="5">
-         <param_morph />
-      </param>
+    <param
+     id="770"
+     group="1"
+     name="Elongate_Head"
+     wearable="shape"
+     label="Shear Face"
+     edit_group="shape_head"
+     label_min="Flat Head"
+     label_max="Long Head"
+     value_min="-1"
+     value_max="1"
+     value_default="0"
+     camera_distance=".5"
+     camera_elevation=".04">
+      <param_morph>
+        <volume_morph
+          name="HEAD"
+          scale="0.02 0.0 0.0"/>
+      </param_morph>
+    </param>
 
-      <param
-       id="11"
-       group="0"
-       name="Noble_Nose_Bridge"
-       label="Upper Bridge"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="5"
-       label_min="Low"
-       label_max="High"
-       value_min="-.5"
-       value_max="1.5"
-       camera_elevation=".1"
-       camera_distance=".35"
-       camera_angle="70">
-         <param_morph />
-      </param>
+    <param
+     id="663"
+     group="0"
+     name="Shift_Mouth"
+     wearable="shape"
+     label="Shift Mouth"
+     edit_group="shape_mouth"
+     edit_group_order="7"
+     label_min="Shift Left"
+     label_max="Shift Right"
+     value_min="-2"
+     value_max="2"
+     value_default="0"
+     camera_distance=".35"
+     camera_elevation=".04"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="758"
-       group="0"
-       name="Lower_Bridge_Nose"
-       label="Lower Bridge"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="5.5"
-       label_min="Low"
-       label_max="High"
-       value_min="-1.5"
-       value_max="1.5"
-       camera_elevation=".1"
-       camera_distance=".35"
-       camera_angle="70">
-         <param_morph />
-      </param>
+    <param
+     id="664"
+     group="0"
+     name="Pop_Eye"
+     wearable="shape"
+     label="Eye Pop"
+     edit_group="shape_eyes"
+     edit_group_order="8"
+     label_min="Pop Right Eye"
+     label_max="Pop Left Eye"
+     value_min="-1.3"
+     value_max="1.3"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".35">
+      <param_morph />
+    </param>
 
-      <param
-       id="12"
-       group="0"
-       name="Jowls"
-       wearable="shape"
-       edit_group="shape_chin"
-       edit_group_order="5"
-       label_min="Less"
-       label_max="More"
-       value_min="-.5"
-       value_max="2.5"
-       camera_elevation=".1"
-       camera_distance=".4"
-       camera_angle="0">
-         <param_morph />
-      </param>
+    <param
+     id="760"
+     group="0"
+     name="Jaw_Angle"
+     wearable="shape"
+     label="Jaw Angle"
+     edit_group="shape_chin"
+     edit_group_order="3.5"
+     label_min="Low Jaw"
+     label_max="High Jaw"
+     value_min="-1.2"
+     value_max="2"
+     value_default="0"
+     camera_distance=".5"
+     camera_elevation=".04"
+     camera_angle="70">
+      <param_morph />
+    </param>
 
-      <param
-       id="13"
-       group="0"
-       name="Cleft_Chin_Upper"
-       label="Upper Chin Cleft"
-       wearable="shape"
-       edit_group="shape_chin"
-       edit_group_order="7"
-       label_min="Round"
-       label_max="Cleft"
-       value_min="0"
-       value_max="1.5"
-       camera_elevation="0"
-       camera_distance=".28"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="665"
+     group="0"
+     name="Jaw_Jut"
+     wearable="shape"
+     label="Jaw Jut"
+     edit_group="shape_chin"
+     edit_group_order="4"
+     label_min="Overbite"
+     label_max="Underbite"
+     value_min="-2"
+     value_max="2"
+     value_default="0"
+     camera_distance=".5"
+     camera_elevation=".04"
+     camera_angle="70">
+      <param_morph />
+    </param>
 
-      <param
-       id="14"
-       group="0"
-       name="High_Cheek_Bones"
-       label="Cheek Bones"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="10"
-       label_min="Low"
-       label_max="High"
-       value_min="-.5"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="686"
+     group="1"
+     name="Head_Eyes_Big"
+     wearable="shape"
+     label="Eye Size"
+     edit_group="shape_eyes"
+     label_min="Beady Eyes"
+     label_max="Anime Eyes"
+     show_simple="true"
+     value_min="-2"
+     value_max="2"
+     value_default="0">
+      <param_morph />
+    </param>
 
-      <param
-       id="15"
-       group="0"
-       name="Ears_Out"
-       label="Ear Angle"
-       wearable="shape"
-       edit_group="shape_ears"
-       edit_group_order="2"
-       label_min="In"
-       label_max="Out"
-       value_min="-.5"
-       value_max="1.5"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="767"
+     group="1"
+     name="Bug_Eyed_Head"
+     wearable="shape"
+     label="Eye Depth"
+     edit_group="shape_eyes"
+     edit_group_order="4.5"
+     label_min="Sunken Eyes"
+     label_max="Bug Eyes"
+     value_min="-2"
+     value_max="2"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <!--
+             #Fat_Lips = Fat_Lips 34 1 0 1
+             #Wide_Lips = Wide_Lips 35 1 0 1
+             #Wide_Nose = Wide_Nose 36 1 0 1
+       -->
+    <!--
+            ##############
+            # Facial Expression morphs 
+            ##############
+            -->
+    <param
+     id="300"
+     group="1"
+     name="Express_Closed_Mouth"
+     value_default="1"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-<!--Pointy eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
-      <param
-       id="870"
-       group="1"
-       name="Pointy_Eyebrows"
-       label="Eyebrow Points"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="4"
-       label_min="Smooth"
-       label_max="Pointy"
-       value_min="-.5"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_morph />
-      </param>
+    <param
+     id="301"
+     group="1"
+     name="Express_Tongue_Out"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="17"
-       group="0"
-       name="Square_Jaw"
-       label="Jaw Shape"
-       wearable="shape"
-       edit_group="shape_chin"
-       edit_group_order="2"
-       label_min="Pointy"
-       label_max="Square"
-       value_min="-.5"
-       value_max="1"
-       camera_distance=".3"
-       camera_elevation=".04"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="302"
+     group="1"
+     name="Express_Surprise_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="18"
-       group="0"
-       name="Puffy_Upper_Cheeks"
-       label="Upper Cheeks"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="8"
-       label_min="Thin"
-       label_max="Puffy"
-       value_min="-1.5"
-       value_max="2.5"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="303"
+     group="1"
+     name="Express_Wink_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="19"
-       group="0"
-       name="Upturned_Nose_Tip"
-       label="Nose Tip Angle"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="7"
-       label_min="Downturned"
-       label_max="Upturned"
-       value_min="-1.5"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".35"
-       camera_angle="15">
-         <param_morph />
-      </param>
+    <param
+     id="304"
+     group="1"
+     name="Express_Embarrassed_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="20"
-       group="0"
-       name="Bulbous_Nose"
-       label="Nose Thickness"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="4"
-       label_min="Thin Nose"
-       label_max="Bulbous Nose"
-       show_simple="true"
-       value_min="-.5"
-       value_max="1.5"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_morph />
-      </param>
+    <param
+     id="305"
+     group="1"
+     name="Express_Shrug_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="21"
-       group="0"
-       name="Upper_Eyelid_Fold"
-       label="Upper Eyelid Fold"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="5"
-       label_min="Uncreased"
-       label_max="Creased"
-       value_min="-0.2"
-       value_max="1.3"
-       camera_elevation=".1"
-       camera_distance=".35">
-         <param_morph />
-      </param>
+    <param
+     id="306"
+     group="1"
+     name="Express_Kiss"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="22"
-       group="0"
-       name="Attached_Earlobes"
-       label="Attached Earlobes"
-       wearable="shape"
-       edit_group="shape_ears"
-       edit_group_order="3"
-       label_min="Unattached"
-       label_max="Attached"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="45">
-         <param_morph />
-      </param>
+    <param
+     id="307"
+     group="1"
+     name="Express_Bored_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="23"
-       group="0"
-       name="Baggy_Eyes"
-       label="Eye Bags"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="6"
-       label_min="Smooth"
-       label_max="Baggy"
-       value_min="-.5"
-       value_max="1.5"
-       camera_elevation=".1"
-       camera_distance=".35">
-         <param_morph />
-      </param>
+    <param
+     id="308"
+     group="1"
+     name="Express_Repulsed_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="765"
-       group="0"
-       name="Puffy_Lower_Lids"
-       label="Puffy Eyelids"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="6.1"
-       label_min="Flat"
-       label_max="Puffy"
-       value_min="-.3"
-       value_max="2.5"
-       camera_elevation=".1"
-       camera_distance=".35">
-         <param_morph />
-      </param>
+    <param
+     id="309"
+     group="1"
+     name="Express_Disdain"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="24"
-       group="0"
-       name="Wide_Eyes"
-       label="Eye Opening"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="1.1"
-       label_min="Narrow"
-       label_max="Wide"
-       value_min="-1.5"
-       value_max="2"
-	   show_simple="true"
-       camera_elevation=".1"
-       camera_distance=".35">
-         <param_morph />
-      </param>
+    <param
+     id="310"
+     group="1"
+     name="Express_Afraid_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="25"
-       group="0"
-       name="Wide_Lip_Cleft"
-       label="Lip Cleft"
-       wearable="shape"
-       edit_group="shape_mouth"
-       edit_group_order="6"
-       label_min="Narrow"
-       label_max="Wide"
-       value_min="-.8"
-       value_max="1.5"
-       camera_elevation="0"
-       camera_distance=".28">
-         <param_morph />
-      </param>
+    <param
+     id="311"
+     group="1"
+     name="Express_Worry_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="764"
-       group="0"
-       name="Lip_Cleft_Deep"
-       label="Lip Cleft Depth"
-       wearable="shape"
-       edit_group="shape_mouth"
-       edit_group_order="5.8"
-       label_min="Shallow"
-       label_max="Deep"
-       value_min="-.5"
-       value_max="1.2"
-       camera_elevation="0"
-       camera_distance=".28">
-         <param_morph />
-      </param>
+    <param
+     id="312"
+     group="1"
+     name="Express_Cry_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="26"
-       group="1"
-       wearable="shape"
-       name="Lips_Thin"
-       edit_group="driven"
-       value_min="0"
-       value_max=".7">
-         <param_morph />
-      </param>
+    <param
+     id="313"
+     group="1"
+     name="Express_Sad_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="27"
-       group="0"
-       name="Wide_Nose_Bridge"
-       label="Bridge Width"
-       wearable="shape"
-       edit_group="shape_nose"
-       edit_group_order="6"
-       label_min="Narrow"
-       label_max="Wide"
-       value_min="-1.3"
-       value_max="1.2"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     id="314"
+     group="1"
+     name="Express_Anger_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="28"
-       group="1"
-       name="Lips_Fat"
-       wearable="shape"
-       edit_group="driven"
-       value_min="0"
-       value_max="2">
-         <param_morph />
-      </param>
+    <param
+     id="315"
+     group="1"
+     name="Express_Frown"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="29"
-       group="1"
-       name="Wide_Upper_Lip"
-       wearable="shape"
-       edit_group="driven"
-       value_min="-.7"
-       value_max="1.3">
-         <param_morph />
-      </param>
+    <param
+     id="316"
+     group="1"
+     name="Express_Laugh_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="30"
-       group="1"
-       name="Wide_Lower_Lip"
-       wearable="shape"
-       edit_group="driven"
-       value_min="-.7"
-       value_max="1.3">
-         <param_morph />
-      </param>
+    <param
+     id="317"
+     group="1"
+     name="Express_Toothsmile"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-<!--Arced eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
-      <param
-       id="872"
-       group="1"
-       name="Arced_Eyebrows"
-       label="Eyebrow Arc"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="3"
-       label_min="Flat"
-       label_max="Arced"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     id="318"
+     group="1"
+     name="Express_Smile"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-<!--Lower eyebrows became a driver/driven param with new min value for backwards compatibility between 1.0 and 1.1-->
-      <param
-       id="871"
-       group="1"
-       name="Lower_Eyebrows"
-       label="Eyebrow Height"
-	   show_simple="true"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="2.5"
-       label_min="Higher"
-       label_max="Lower"
-       value_min="-2"
-       value_max="2">
-         <param_morph />
-      </param>
+    <param
+     id="632"
+     group="1"
+     name="Express_Open_Mouth"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+            ##############
+            # Lipsync morphs
+            ##############
+            -->
 
-      <param
-       id="35"
-       group="0"
-       name="Big_Ears"
-       label="Ear Size"
-       wearable="shape"
-       edit_group="shape_ears"
-       edit_group_order="1"
-       label_min="Small"
-       label_max="Large"
-       value_min="-1"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="45">
-         <param_morph />
-      </param>
+    <param
+     id="70"
+     group="1"
+     name="Lipsync_Aah"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="796"
-       group="0"
-       name="Pointy_Ears"
-       label="Ear Tips"
-       wearable="shape"
-       edit_group="shape_ears"
-       edit_group_order="4"
-       label_min="Flat"
-       label_max="Pointy"
-       value_min="-.4"
-       value_max="3"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="45">
-         <param_morph />
-      </param>
+    <param
+     id="71"
+     group="1"
+     name="Lipsync_Ooh"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+            ##############
+            # other morphs (not user controlled)
+            ##############
+            -->
+    <param
+     id="40"
+     group="1"
+     name="Male_Head"
+     wearable="shape"
+     edit_group="driven"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="185"
-       group="0"
-       name="Deep_Chin"
-       label="Chin Depth"
-       wearable="shape"
-       edit_group="shape_chin"
-       edit_group_order="3"
-       label_min="Shallow"
-       label_max="Deep"
-       value_min="-1"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".4"
-       camera_angle="30">
-         <param_morph />
-      </param>
+    <param
+     id="41"
+     group="1"
+     name="Old"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+            ##############
+            # animatable morphs
+            ##############
+             -->
+    <param
+     id="51"
+     group="1"
+     name="Furrowed_Eyebrows"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="186"
-       group="1"
-       name="Egg_Head"
-       label="Egg Head"
-       wearable="shape"
-       edit_group="shape_head"
-       label_min="Chin Heavy"
-       label_max="Forehead Heavy"
-       value_min="-1.3"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="53"
+     group="1"
+     name="Surprised_Eyebrows"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="187"
-       group="1"
-       name="Squash_Stretch_Head"
-       label="Squash/Stretch Head"
-       wearable="shape"
-       edit_group="shape_head"
-       label_min="Squash Head"
-       label_max="Stretch Head"
-       value_min="-.5"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph>
-			<volume_morph
-				name="HEAD"
-				scale="-0.008 -0.006 0.015"/>
-		 </param_morph>
-      </param>
+    <param
+     id="54"
+     group="1"
+     name="Worried_Eyebrows"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="188"
-       group="1"
-       name="Square_Head"
-       wearable="shape"
-       label_min="Less Square"
-       label_max="More Square"
-       value_min="0"
-       value_max=".7"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="55"
+     group="1"
+     name="Frown_Mouth"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="189"
-       group="1"
-       wearable="shape"
-       name="Round_Head"
-       label_min="Less Round"
-       label_max="More Round"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+    <param
+     id="57"
+     group="1"
+     name="Smile_Mouth"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="194"
-       group="1"
-       name="Eye_Spread"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Eyes Together"
-       label_max="Eyes Spread"
-       value_min="-2"
-       value_max="2">
-         <param_morph />
-      </param>
+    <param
+     id="58"
+     group="1"
+     name="Blink_Left"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="400"
-       sex="male"
-       group="1"
-       name="Displace_Hair_Facial"
-       label="Hair Thickess"
-       wearable="hair"
-       edit_group="hair_facial"
-       label_min="Cropped Hair"
-       label_max="Bushy Hair"
-       value_min="0"
-       value_max="2">
-         <param_morph />
-      </param>
+    <param
+     id="59"
+     group="1"
+     name="Blink_Right"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+            #end morph targets
+             -->
+  </mesh>
+
+  <mesh
+   type="headMesh"
+ lod="1"
+   file_name="avatar_head_1.llm"
+   min_pixel_width="160"
+   reference="avatar_head.llm">
+  </mesh>
+
+  <mesh
+   type="headMesh"
+ lod="2"
+   file_name="avatar_head_2.llm"
+   min_pixel_width="80"
+   reference="avatar_head.llm">
+  </mesh>
+
+  <mesh
+   type="headMesh"
+ lod="3"
+   file_name="avatar_head_3.llm"
+   min_pixel_width="40"
+   reference="avatar_head.llm">
+  </mesh>
+
+  <mesh
+   type="headMesh"
+ lod="4"
+   file_name="avatar_head_4.llm"
+ min_pixel_width="0"
+   reference="avatar_head.llm">
+  </mesh>
+
+  <mesh
+   type="eyelashMesh"
+ lod="0"
+   file_name="avatar_eyelashes.llm"
+   min_pixel_width="320">
+    <param
+     shared="1"
+     id="660"
+     group="1"
+     name="Shear_Head"
+     wearable="shape"
+     label="Shear Face"
+     edit_group="shape_head"
+     label_min="Shear Left"
+     label_max="Shear Right"
+     value_min="-2"
+     value_max="2"
+     value_default="0"
+     camera_distance=".5"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="506"
-       group="0"
-       name="Mouth_Height"
-       wearable="shape"
-       label="Mouth Position"
-	   show_simple="true"
-       edit_group="shape_mouth"
-       edit_group_order="4"
-       label_min="High"
-       label_max="Low"
-       value_min="-2"
-       value_max="2"
-       camera_distance=".3"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="770"
+     group="1"
+     name="Elongate_Head"
+     wearable="shape"
+     label="Shear Face"
+     edit_group="shape_head"
+     label_min="Flat Head"
+     label_max="Long Head"
+     value_min="-1"
+     value_max="1"
+     value_default="0"
+     camera_distance=".5"
+     camera_elevation=".04">
+      <param_morph />
+    </param>
 
-      <param
-       id="633"
-       group="1"
-       name="Fat_Head"
-       label="Fat Head"
-       wearable="shape"
-       edit_group="shape_body"
-       label_min="Skinny"
-       label_max="Fat"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".3">
-         <param_morph/>
-      </param>
+    <param
+     shared="1"
+     id="664"
+     group="0"
+     name="Pop_Eye"
+     wearable="shape"
+     label="Eye Pop"
+     edit_group="shape_eyes"
+     edit_group_order="8"
+     label_min="Pop Right Eye"
+     label_max="Pop Left Eye"
+     value_min="-2"
+     value_max="2"
+     value_default="0"
+     camera_distance=".5"
+     camera_elevation=".04"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="630"
-       group="1"
-       name="Forehead_Round"
-       label="Round Forehead"
-       wearable="shape"
-       label_min="Less"
-       label_max="More"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="21"
+     group="0"
+     name="Upper_Eyelid_Fold"
+     label="Upper Eyelid Fold"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Uncreased"
+     label_max="Creased"
+     value_min="-0.2"
+     value_max="1.3"
+     camera_elevation=".1"
+     camera_distance=".35">
+      <param_morph />
+    </param>
 
-      <param
-       id="631"
-       group="1"
-       name="Forehead_Slant"
-       label="Slanted Forehead"
-       wearable="shape"
-       label_min="Less"
-       label_max="More"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="24"
+     group="0"
+     name="Wide_Eyes"
+     label="Eye Opening"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Narrow"
+     label_max="Wide"
+     show_simple="true"
+     value_min="-1.5"
+     value_max="2"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_morph />
+    </param>
 
-      <param
-       id="650"
-       group="0"
-       name="Eyelid_Corner_Up"
-       label="Outer Eye Corner"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="4"
-       label_min="Corner Down"
-       label_max="Corner Up"
-       value_min="-1.3"
-       value_max="1.2"
-       camera_elevation=".1"
-       camera_distance=".30">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="186"
+     group="1"
+     name="Egg_Head"
+     label="Egg Head"
+     wearable="shape"
+     edit_group="shape_head"
+     label_min="Chin Heavy"
+     label_max="Forehead Heavy"
+     value_min="-1.3"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-	  <param
-       id="880"
-       group="0"
-       name="Eyelid_Inner_Corner_Up"
-       label="Inner Eye Corner"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="4.2"
-       label_min="Corner Down"
-       label_max="Corner Up"
-       value_min="-1.3"
-       value_max="1.2"
-       camera_elevation=".1"
-       camera_distance=".30">
-         <param_morph />
-      </param>
- 
-      <param
-       id="653"
-       group="0"
-       name="Tall_Lips"
-       wearable="shape"
-       label="Lip Fullness"
-	   show_simple="true"
-       edit_group="shape_mouth"
-       edit_group_order="2"
-       label_min="Less Full"
-       label_max="More Full"
-       value_min="-1"
-       value_max="2"
-       camera_distance=".3"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="187"
+     group="1"
+     name="Squash_Stretch_Head"
+     label="Squash/Stretch Head"
+     wearable="shape"
+     edit_group="shape_head"
+     label_min="Squash Head"
+     label_max="Stretch Head"
+     value_min="-.5"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_morph />
+    </param>
 
-      <param
-       id="656"
-       group="0"
-       name="Crooked_Nose"
-       wearable="shape"
-       label="Crooked Nose"
-       edit_group="shape_nose"
-       edit_group_order="9"
-       label_min="Nose Left"
-       label_max="Nose Right"
-       value_min="-2"
-       value_max="2"
-       camera_distance=".3"
-       camera_elevation=".04"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="194"
+     group="1"
+     name="Eye_Spread"
+     edit_group="shape_eyes"
+     label_min="Eyes Together"
+     label_max="Eyes Spread"
+     value_min="-2"
+     value_max="2">
+      <param_morph />
+    </param>
 
-      <param
-       id="657"
-       group="1"
-       name="Smile_Mouth"
-       wearable="shape"
-       label="Mouth Corner"
-       edit_group="shape_mouth"
-       label_min="Corner Normal"
-       label_max="Corner Up"
-       value_min="0"
-       value_max="1.4"
-       camera_distance=".3"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+    <param
+     id="518"
+     group="0"
+     name="Eyelashes_Long"
+     wearable="shape"
+     label="Eyelash Length"
+     edit_group="shape_eyes"
+     edit_group_order="7"
+     label_min="Short"
+     label_max="Long"
+     value_min="-.3"
+     value_max="1.5"
+     camera_elevation=".1"
+     camera_distance=".30"
+     camera_angle="-20">
+      <param_morph />
+    </param>
 
-      <param
-       id="658"
-       group="1"
-       name="Frown_Mouth"
-       wearable="shape"
-       label="Mouth Corner"
-       edit_group="shape_mouth"
-       label_min="Corner Normal"
-       label_max="Corner Down"
-       value_min="0"
-       value_max="1.2"
-       camera_distance=".3"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="650"
+     group="0"
+     name="Eyelid_Corner_Up"
+     label="Outer Eye Corner"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Corner Down"
+     label_max="Corner Up"
+     value_min="-1.3"
+     value_max="1.2"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_morph />
+    </param>
+      
 
-      <param
-       id="797"
-       group="1"
-       name="Fat_Upper_Lip"
-       wearable="shape"
-       label="Fat Upper Lip"
-       edit_group="shape_mouth"
-       label_min="Normal Upper"
-       label_max="Fat Upper"
-       value_min="0"
-       value_max="1.5"
-       camera_distance=".3"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="880"
+     group="0"
+     name="Eyelid_Inner_Corner_Up"
+     label="Inner Eye Corner"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="Corner Down"
+     label_max="Corner Up"
+     value_min="-1.3"
+     value_max="1.2"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_morph />
+    </param>
 
-      <param
-       id="798"
-       group="1"
-       name="Fat_Lower_Lip"
-       wearable="shape"
-       label="Fat Lower Lip"
-       edit_group="shape_mouth"
-       label_min="Normal Lower"
-       label_max="Fat Lower"
-       value_min="0"
-       value_max="1.5"
-       camera_distance=".3"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="686"
+     group="1"
+     name="Head_Eyes_Big"
+     wearable="shape"
+     label="Eye Size"
+     edit_group="shape_eyes"
+     label_min="Beady Eyes"
+     label_max="Anime Eyes"
+     value_min="-2"
+     value_max="2"
+   show_simple="true"
+     value_default="0">
+      <param_morph />
+    </param>
 
-      <param
-       id="660"
-       group="1"
-       name="Shear_Head"
-       wearable="shape"
-       label="Shear Face"
-       edit_group="shape_head"
-       label_min="Shear Left"
-       label_max="Shear Right"
-       value_min="-2"
-       value_max="2"
-       value_default="0"
-       camera_distance=".5"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="767"
+     group="1"
+     name="Bug_Eyed_Head"
+     wearable="shape"
+     label="Eye Depth"
+     edit_group="shape_eyes"
+     edit_group_order="4.5"
+     label_min="Sunken Eyes"
+     label_max="Bug Eyes"
+     value_min="-2"
+     value_max="2"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <!--
+            ##############
+            # Facial Expression morphs 
+            ##############
+            -->
+    <param
+     shared="1"
+     id="301"
+     group="1"
+     name="Express_Tongue_Out"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="770"
-       group="1"
-       name="Elongate_Head"
-       wearable="shape"
-       label="Shear Face"
-       edit_group="shape_head"
-       label_min="Flat Head"
-       label_max="Long Head"
-       value_min="-1"
-       value_max="1"
-       value_default="0"
-       camera_distance=".5"
-       camera_elevation=".04">
-         <param_morph>
-			<volume_morph
-				name="HEAD"
-				scale="0.02 0.0 0.0"/>
-		 </param_morph>
-      </param>
+    <param
+     shared="1"
+     id="302"
+     group="1"
+     name="Express_Surprise_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="663"
-       group="0"
-       name="Shift_Mouth"
-       wearable="shape"
-       label="Shift Mouth"
-       edit_group="shape_mouth"
-       edit_group_order="7"
-       label_min="Shift Left"
-       label_max="Shift Right"
-       value_min="-2"
-       value_max="2"
-       value_default="0"
-       camera_distance=".35"
-       camera_elevation=".04"
-       camera_angle="-20">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="303"
+     group="1"
+     name="Express_Wink_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="664"
-       group="0"
-       name="Pop_Eye"
-       wearable="shape"
-       label="Eye Pop"
-       edit_group="shape_eyes"
-       edit_group_order="8"
-       label_min="Pop Right Eye"
-       label_max="Pop Left Eye"
-       value_min="-1.3"
-       value_max="1.3"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".35">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="304"
+     group="1"
+     name="Express_Embarrassed_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="760"
-       group="0"
-       name="Jaw_Angle"
-       wearable="shape"
-       label="Jaw Angle"
-       edit_group="shape_chin"
-       edit_group_order="3.5"
-       label_min="Low Jaw"
-       label_max="High Jaw"
-       value_min="-1.2"
-       value_max="2"
-       value_default="0"
-       camera_distance=".5"
-       camera_elevation=".04"
-       camera_angle="70">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="305"
+     group="1"
+     name="Express_Shrug_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
 
-      <param
-       id="665"
-       group="0"
-       name="Jaw_Jut"
-       wearable="shape"
-       label="Jaw Jut"
-       edit_group="shape_chin"
-       edit_group_order="4"
-       label_min="Overbite"
-       label_max="Underbite"
-       value_min="-2"
-       value_max="2"
-       value_default="0"
-       camera_distance=".5"
-       camera_elevation=".04"
-       camera_angle="70">
-         <param_morph />
-      </param>
+    <param
+     shared="1"
+     id="306"
+     group="1"
+     name="Express_Kiss"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="307"
+     group="1"
+     name="Express_Bored_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="308"
+     group="1"
+     name="Express_Repulsed_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="309"
+     group="1"
+     name="Express_Disdain"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="310"
+     group="1"
+     name="Express_Afraid_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="312"
+     group="1"
+     name="Express_Cry_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="313"
+     group="1"
+     name="Express_Sad_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="314"
+     group="1"
+     name="Express_Anger_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="315"
+     group="1"
+     name="Express_Frown"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="316"
+     group="1"
+     name="Express_Laugh_Emote"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="317"
+     group="1"
+     name="Express_Toothsmile"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="318"
+     group="1"
+     name="Express_Smile"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+            ##############
+            # other morphs (not user controlled)
+            ##############
+            -->
+    <param
+     shared="1"
+     id="41"
+     group="1"
+     name="Old"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+            ##############
+            # animatable morphs
+            ##############
+             -->
+    <param
+     shared="1"
+     id="58"
+     group="1"
+     name="Blink_Left"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="59"
+     group="1"
+     name="Blink_Right"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+  </mesh>
+
+  <!--
+      #headMesh2 =
+      #headMesh3 =
+      -->
+  <mesh
+   type="upperBodyMesh"
+ lod="0"
+   file_name="avatar_upper_body.llm"
+   min_pixel_width="320">
+    <!--
+            #begin morph targets
+            #############
+            # tweakable morphs
+            #############
+            -->
+    <param
+     id="104"
+     group="1"
+     name="Big_Belly_Torso"
+     wearable="shape"
+     edit_group="driven"
+     value_min="0"
+     value_max="1">
+      <param_morph>
+        <volume_morph
+          name="BELLY"
+          scale="0.075 0.04 0.03"
+          pos="0.07 0 -0.07"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="626"
+     sex="female"
+     group="1"
+     name="Big_Chest"
+     label="Chest Size"
+     wearable="shape"
+     edit_group="shape_torso"
+     label_min="Small"
+     label_max="Large"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance="1"
+     camera_angle="15">
+      <param_morph />
+    </param>
+
+    <param
+     id="627"
+     sex="female"
+     group="1"
+     name="Small_Chest"
+     label="Chest Size"
+     wearable="shape"
+     edit_group="shape_torso"
+     label_min="Large"
+     label_max="Small"
+     value_min="0"
+     value_max="1"
+     camera_elevation="0"
+     camera_distance=".28">
+      <param_morph />
+    </param>
+
+    <param
+     id="843"
+     sex="female"
+     group="1"
+     name="No_Chest"
+     label="Chest Size"
+     wearable="shape"
+     edit_group="shape_torso"
+     label_min="Some"
+     label_max="None"
+     value_min="0"
+     value_max="1"
+     camera_elevation="0"
+     camera_distance=".28">
+      <param_morph />
+    </param>
+
+    <param
+     id="106"
+     group="1"
+     name="Muscular_Torso"
+     label="Torso Muscles"
+   show_simple="true"
+     wearable="shape"
+     edit_group="shape_torso"
+     label_min="Regular"
+     label_max="Muscular"
+     value_min="0"
+     value_max="1.4"
+     camera_elevation=".3"
+     camera_distance="1.2">
+      <param_morph>
+        <volume_morph
+          name="L_CLAVICLE"
+          scale="0.02 0.0 0.005"
+          pos="0.0 0 0.005"/>
+        <volume_morph
+          name="L_UPPER_ARM"
+          scale="0.015 0.0 0.005"
+          pos="0.015 0 0"/>
+        <volume_morph
+          name="L_LOWER_ARM"
+          scale="0.005 0.0 0.005"
+          pos="0.005 0 0"/>
+        <volume_morph
+          name="R_CLAVICLE"
+          scale="0.02 0.0 0.005"
+          pos="0.0 0 0.005"/>
+        <volume_morph
+          name="R_UPPER_ARM"
+          scale="0.015 0.0 0.005"
+          pos="0.015 0 0"/>
+        <volume_morph
+          name="R_LOWER_ARM"
+          scale="0.005 0.0 0.005"
+          pos="0.005 0 0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="648"
+     group="1"
+     sex="female"
+     name="Scrawny_Torso"
+     label="Torso Muscles"
+   show_simple="true"
+     wearable="shape"
+     edit_group="shape_torso"
+     label_min="Regular"
+     label_max="Scrawny"
+     value_min="0"
+     value_max="1.3"
+     camera_elevation=".3"
+     camera_distance="1.2">
+      <param_morph>
+        <volume_morph
+          name="BELLY"
+          scale="0.0 -0.01 0.0"
+          pos="0.0 0.0 0"/>
+        <volume_morph
+          name="CHEST"
+          scale="-0.01 -0.01 0.0"
+          pos="0.01 0.0 0"/>
+        <volume_morph
+          name="L_CLAVICLE"
+          scale="0.0 -0.03 -0.005"
+          pos="0.0 0 -0.005"/>
+        <volume_morph
+          name="L_UPPER_ARM"
+          scale="-0.01 -0.01 -0.02"
+          pos="0 0 0"/>
+        <volume_morph
+          name="L_LOWER_ARM"
+          scale="-0.005 0.0 -0.01"
+          pos="-0.005 0 0"/>
+        <volume_morph
+          name="R_CLAVICLE"
+          scale="0.0 -0.03 -0.005"
+          pos="0.0 0 -0.005"/>
+        <volume_morph
+          name="R_UPPER_ARM"
+          scale="-0.01 -0.01 -0.02"
+          pos="0 0 0"/>
+        <volume_morph
+          name="R_LOWER_ARM"
+          scale="-0.005 0.0 -0.01"
+          pos="-0.005 0 0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="677"
+     group="1"
+     sex="male"
+     name="Scrawny_Torso_Male"
+     label="Torso Scrawny"
+     wearable="shape"
+     edit_group="shape_torso"
+     label_min="Regular"
+     label_max="Scrawny"
+     value_min="0"
+     value_max="1.3"
+     camera_elevation=".3"
+     camera_distance="1.2">
+      <param_morph>
+        <volume_morph
+          name="BELLY"
+          scale="-0.01 -0.01 0.0"
+          pos="0.01 0.0 0"/>
+        <volume_morph
+          name="CHEST"
+          scale="-0.02 -0.02 0.0"
+          pos="0.01 0.0 0"/>
+        <volume_morph
+          name="L_CLAVICLE"
+          scale="0.0 -0.03 -0.005"
+          pos="0.0 0 -0.005"/>
+        <volume_morph
+          name="L_UPPER_ARM"
+          scale="-0.01 -0.01 -0.02"
+          pos="0 0 0"/>
+        <volume_morph
+          name="L_LOWER_ARM"
+          scale="-0.005 0.0 -0.01"
+          pos="-0.005 0 0"/>
+        <volume_morph
+          name="R_CLAVICLE"
+          scale="0.0 -0.03 -0.005"
+          pos="0.0 0 -0.005"/>
+        <volume_morph
+          name="R_UPPER_ARM"
+          scale="-0.01 -0.01 -0.02"
+          pos="0 0 0"/>
+        <volume_morph
+          name="R_LOWER_ARM"
+          scale="-0.005 0.0 -0.01"
+          pos="-0.005 0 0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="634"
+     group="1"
+     name="Fat_Torso"
+     label="Fat Torso"
+     wearable="shape"
+     edit_group="shape_body"
+     label_min="skinny"
+     label_max="fat"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".3">
+      <param_morph>
+        <volume_morph
+          name="CHEST"
+          scale="0.02 0.03 0.03"
+          pos="0 0 -0.03"/>
+        <volume_morph
+          name="BELLY"
+          scale="0.09 0.08 0.07"
+          pos="0 0 -0.05"/>
+        <volume_morph
+          name="L_CLAVICLE"
+          scale="0.0 0.0 0.015"/>
+        <volume_morph
+          name="L_UPPER_ARM"
+          scale="0.02 0.0 0.02"
+          pos="0.0 0.0 -0.02"/>
+        <volume_morph
+          name="L_LOWER_ARM"
+          scale="0.01 0.0 0.01"
+          pos="0.0 0.0 -0.01"/>
+        <volume_morph
+          name="R_CLAVICLE"
+          scale="0.0 0.0 0.015"/>
+        <volume_morph
+          name="R_UPPER_ARM"
+          scale="0.02 0.0 0.02"
+          pos="0.0 0.0 -0.02"/>
+        <volume_morph
+          name="R_LOWER_ARM"
+          scale="0.01 0.0 0.01"
+          pos="0.0 0.0 -0.01"/>
+        <volume_morph
+          name="NECK"
+          scale="0.015 0.01 0.0"/>
+        <volume_morph
+          name="HEAD"
+          scale="0.0 0.0 0.01"
+          pos="0 0 -0.01"/>
+      </param_morph>
+
+    </param>
+
+    <param
+     id="507"
+     group="0"
+     sex="female"
+     name="Breast_Gravity"
+     label="Breast Buoyancy"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="7"
+     label_min="Less Gravity"
+     label_max="More Gravity"
+     value_default="0"
+     value_min="-1.5"
+     value_max="2"
+     camera_elevation=".3"
+     camera_distance=".8">
+      <param_morph />
+    </param>
+
+    <param
+     id="628"
+     group="1"
+     name="Displace_Loose_Upperbody"
+     label="Shirt Fit"
+     wearable="shirt"
+     edit_group="driven"
+     clothing_morph="true"
+     value_min="0"
+     value_max="1"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <param
+     id="840"
+     group="0"
+     name="Shirtsleeve_flair"
+     label="Sleeve Looseness"
+   show_simple="true"
+     wearable="shirt"
+     edit_group="shirt"
+     edit_group_order="6"
+     clothing_morph="true"
+     label_min="Tight Sleeves"
+     label_max="Loose Sleeves"
+     value_min="0"
+     value_max="1.5"
+     camera_distance="1.8"
+     camera_angle="30"
+     camera_elevation="-.3">
+      <param_morph />
+    </param>
+
+    <param
+     id="855"
+     group="1"
+     name="Love_Handles"
+     wearable="shape"
+     edit_group="driven"
+     value_default="0"
+     value_min="-1"
+     value_max="2">
+      <param_morph>
+        <volume_morph
+          name="BELLY"
+          scale="0.0 0.02 0.0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="684"
+     group="0"
+     sex="female"
+     name="Breast_Female_Cleavage"
+     label="Breast Cleavage"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="8"
+     label_min="Separate"
+     label_max="Join"
+     value_default="0"
+     value_min="-.3"
+     value_max="1.3"
+     camera_elevation=".3"
+     camera_distance=".8">
+      <param_morph />
+    </param>
+
+    <param
+     id="685"
+     group="0"
+     sex="male"
+     name="Chest_Male_No_Pecs"
+     label="Pectorals"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="5"
+     label_min="Big Pectorals"
+     label_max="Sunken Chest"
+     value_default="0"
+     value_min="-.5"
+     value_max="1.1"
+     camera_elevation=".3"
+     camera_distance="1.2">
+      <param_morph />
+    </param>
+
+    <!-- ############# # 
+      other morphs (not user controlled) 
+      ############# -->
+    <param
+     id="100"
+     group="1"
+     name="Male_Torso"
+    wearable="shape"
+     edit_group="driven"
+     label_min="Male_Torso"
+     value_min="0"
+     value_max="1">
+      <param_morph>
+        <volume_morph
+          name="CHEST"
+          scale="0.03 0.04 0.02"
+          pos="-0.03 0 -0.01"/>
+        <volume_morph
+          name="BELLY"
+          scale="0.03 0.03 0.0"
+          pos="-0.03 0 0.02"/>
+        <volume_morph
+          name="L_CLAVICLE"
+          scale="0.02 0.0 0.01"
+          pos="-0.02 0 0"/>
+        <volume_morph
+          name="L_UPPER_ARM"
+          scale="0.01 0.0 0.01"
+          pos="0.0 0.0 -0.01"/>
+        <volume_morph
+          name="L_LOWER_ARM"
+          scale="0.005 0.0 0.005"
+          pos="0.0 0.0 -0.005"/>
+        <volume_morph
+          name="R_CLAVICLE"
+          scale="0.02 0.0 0.01"
+          pos="-0.02 0 0"/>
+        <volume_morph
+          name="R_UPPER_ARM"
+          scale="0.01 0.0 0.01"
+          pos="0.0 0.0 -0.01"/>
+        <volume_morph
+          name="R_LOWER_ARM"
+          scale="0.005 0.0 0.005"
+          pos="0.0 0.0 -0.005"/>
+        <volume_morph
+          name="NECK"
+          scale="0.015 0.01 0.0"/>
+        <volume_morph
+          name="HEAD"
+          scale="0.0 0.0 0.01"
+          pos="0 0 -0.01"/>
+      </param_morph>
+    </param>
+
+    <!--
+            ##############
+            # animatable morphs
+            ##############
+            -->
+    <param
+     id="101"
+     group="1"
+     name="Hands_Relaxed"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="102"
+     group="1"
+     name="Hands_Point"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="103"
+     group="1"
+     name="Hands_Fist"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="666"
+     group="1"
+     name="Hands_Relaxed_L"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="667"
+     group="1"
+     name="Hands_Point_L"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="668"
+     group="1"
+     name="Hands_Fist_L"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="669"
+     group="1"
+     name="Hands_Relaxed_R"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="670"
+     group="1"
+     name="Hands_Point_R"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="671"
+     group="1"
+     name="Hands_Fist_R"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="672"
+     group="1"
+     name="Hands_Typing"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="766"
+     group="1"
+     name="Hands_Salute_R"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="791"
+     group="1"
+     name="Hands_Peace_R"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="792"
+     group="1"
+     name="Hands_Spread_R"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+         #end morph targets
+          -->
+  </mesh>
+
+  <mesh
+   type="upperBodyMesh"
+ lod="1"
+   file_name="avatar_upper_body_1.llm"
+   min_pixel_width="160"
+   reference="avatar_upper_body.llm">
+  </mesh>
+
+  <mesh
+   type="upperBodyMesh"
+ lod="2"
+   file_name="avatar_upper_body_2.llm"
+   min_pixel_width="80"
+   reference="avatar_upper_body.llm">
+  </mesh>
+
+  <mesh
+   type="upperBodyMesh"
+ lod="3"
+   file_name="avatar_upper_body_3.llm"
+   min_pixel_width="40"
+   reference="avatar_upper_body.llm">
+  </mesh>
+
+  <mesh
+   type="upperBodyMesh"
+ lod="4"
+   file_name="avatar_upper_body_4.llm"
+ min_pixel_width="0"
+   reference="avatar_upper_body.llm">
+  </mesh>
+
+  <!--
+      #upperBodyMesh2 =
+      #upperBodyMesh3 =
+      -->
+  <mesh
+   type="lowerBodyMesh"
+ lod="0"
+   file_name="avatar_lower_body.llm"
+   min_pixel_width="320">
+    <!--
+            #begin morph targets
+            #############
+            # tweakable morphs
+            #############
+            -->
+    <param
+     id="156"
+     group="1"
+     name="Big_Belly_Legs"
+     wearable="shape"
+     edit_group="driven"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="151"
+     group="1"
+     name="Big_Butt_Legs"
+     label="Butt Size"
+     wearable="shape"
+     edit_group="shape_legs"
+     label_min="Regular"
+     label_max="Large"
+     value_min="0"
+     value_max="1">
+      <param_morph>
+        <volume_morph
+          name="PELVIS"
+          scale="0.03 0.0 0.02"
+          pos="-0.03 0 -0.025"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="794"
+     group="1"
+     name="Small_Butt"
+     label="Butt Size"
+     wearable="shape"
+     edit_group="shape_legs"
+     label_min="Regular"
+     label_max="Small"
+     value_min="0"
+     value_max="1">
+      <param_morph>
+        <volume_morph
+          name="PELVIS"
+          scale="-0.01 0.0 0.0"
+          pos="0.01 0 0.0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="152"
+     group="1"
+     name="Muscular_Legs"
+     label="Leg Muscles"
+   show_simple="true"
+     wearable="shape"
+     edit_group="shape_legs"
+     label_min="Regular Muscles"
+     label_max="More Muscles"
+     value_min="0"
+     value_max="1.5"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_morph>
+        <volume_morph
+          name="L_UPPER_LEG"
+          scale="0.015 0.015 0.0"
+          pos="0.0 0 0.0"/>
+        <volume_morph
+          name="L_LOWER_LEG"
+          scale="0.01 0.01 0.0"
+          pos="0.0 0 0.0"/>
+        <volume_morph
+          name="R_UPPER_LEG"
+          scale="0.015 0.015 0.0"
+          pos="0.0 0 0.0"/>
+        <volume_morph
+          name="R_LOWER_LEG"
+          scale="0.01 0.01 0.0"
+          pos="0.0 0 0.0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="651"
+     group="1"
+     name="Scrawny_Legs"
+     label="Scrawny Leg"
+     wearable="shape"
+     edit_group="shape_legs"
+     label_min="Regular Muscles"
+     label_max="Less Muscles"
+     value_min="0"
+     value_max="1.5"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_morph>
+        <volume_morph
+          name="L_UPPER_LEG"
+          scale="-0.03 -0.03 0.0"
+          pos="0.0 0 0.0"/>
+        <volume_morph
+          name="L_LOWER_LEG"
+          scale="-0.015 -0.015 0.0"
+          pos="0.0 0 0.0"/>
+        <volume_morph
+          name="R_UPPER_LEG"
+          scale="-0.03 -0.03 0.0"
+          pos="0.0 0 0.0"/>
+        <volume_morph
+          name="R_LOWER_LEG"
+          scale="-0.015 -0.015 0.0"
+          pos="0.0 0 0.0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="853"
+     group="1"
+     name="Bowed_Legs"
+     label="Knee Angle"
+     wearable="shape"
+     value_min="-1"
+     value_max="1">
+      <param_morph>
+        <volume_morph
+          name="L_UPPER_LEG"
+          pos="0.0 0.03 0.0"/>
+        <volume_morph
+          name="L_LOWER_LEG"
+          pos="0.0 0.03 0.0"/>
+        <volume_morph
+          name="R_UPPER_LEG"
+          pos="0.0 -0.03 0.0"/>
+        <volume_morph
+          name="R_LOWER_LEG"
+          pos="0.0 -0.03 0.0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="500"
+     group="1"
+     name="Shoe_Heel_Height"
+     label="Heel Height"
+     wearable="shoes"
+     edit_group="shoes"
+     label_min="Low Heels"
+     label_max="High Heels"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.5"
+     camera_elevation="-.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="501"
+     group="1"
+     name="Shoe_Platform_Height"
+     label="Platform Height"
+     wearable="shoes"
+     edit_group="shoes"
+     label_min="Low Platforms"
+     label_max="High Platforms"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.5"
+     camera_elevation="-.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="508"
+     group="0"
+     name="Shoe_Platform_Width"
+     label="Platform Width"
+     wearable="shoes"
+     edit_group="shoes"
+     edit_group_order="7"
+     label_min="Narrow"
+     label_max="Wide"
+     value_min="-1"
+     value_max="2"
+     camera_angle="15"
+     camera_distance="1.5"
+     camera_elevation="-1">
+      <param_morph />
+    </param>
+
+    <param
+     id="509"
+     group="1"
+     name="Shoe_Heel_Point"
+     label="Heel Shape"
+     wearable="shoes"
+     edit_group="shoes"
+     label_min="Default Heels"
+     label_max="Pointy Heels"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="510"
+     group="1"
+     name="Shoe_Heel_Thick"
+     label="Heel Shape"
+     wearable="shoes"
+     edit_group="shoes"
+     label_min="default Heels"
+     label_max="Thick Heels"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="511"
+     group="1"
+     name="Shoe_Toe_Point"
+     label="Toe Shape"
+     wearable="shoes"
+     edit_group="shoes"
+     label_min="Default Toe"
+     label_max="Pointy Toe"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="512"
+     group="1"
+     name="Shoe_Toe_Square"
+     label="Toe Shape"
+     wearable="shoes"
+     edit_group="shoes"
+     label_min="Default Toe"
+     label_max="Square Toe"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.5"
+     camera_elevation="-.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="654"
+     group="0"
+     name="Shoe_Toe_Thick"
+     label="Toe Thickness"
+     wearable="shoes"
+     edit_group="shoes"
+     edit_group_order="5"
+     label_min="Flat Toe"
+     label_max="Thick Toe"
+     value_min="0"
+     value_max="2"
+     camera_angle="15"
+     camera_distance="1.5"
+     camera_elevation="-1">
+      <param_morph />
+    </param>
+
+    <param
+     id="515"
+     group="0"
+     name="Foot_Size"
+     label="Foot Size"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="6"
+     label_min="Small"
+     label_max="Big"
+     value_min="-1"
+     value_max="3"
+     camera_angle="45"
+     camera_distance="1.1"
+     camera_elevation="-1">
+      <param_morph>
+        <volume_morph
+          name="L_FOOT"
+          scale="0.02 0.01 0.0"
+          pos="0.01 0 0"/>
+        <volume_morph
+          name="R_FOOT"
+          scale="0.02 0.01 0.0"
+          pos="0.01 0 0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="516"
+     group="1"
+     name="Displace_Loose_Lowerbody"
+     label="Pants Fit"
+     wearable="pants"
+     edit_group="driven"
+     clothing_morph="true"
+     value_min="0"
+     value_max="1"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <param
+     id="625"
+     group="0"
+     name="Leg_Pantflair"
+     label="Cuff Flare"
+   show_simple="true"
+     wearable="pants"
+     edit_group="pants"
+     edit_group_order="3"
+     clothing_morph="true"
+     label_min="Tight Cuffs"
+     label_max="Flared Cuffs"
+     value_min="0"
+     value_max="1.5"
+     camera_distance="1.8"
+     camera_angle="30"
+     camera_elevation="-.3">
+      <param_morph />
+    </param>
+
+    <param
+     id="793"
+     group="1"
+     name="Leg_Longcuffs"
+     label="Longcuffs"
+     wearable="pants"
+     edit_group="driven"
+     clothing_morph="true"
+     value_min="0"
+     value_max="3"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <param
+     id="638"
+     group="0"
+     name="Low_Crotch"
+     label="Pants Crotch"
+     wearable="pants"
+     clothing_morph="true"
+     edit_group="pants"
+     edit_group_order="4"
+     label_min="High and Tight"
+     label_max="Low and Loose"
+     value_min="0"
+     value_max="1.3"
+     camera_distance="1.2"
+     camera_angle="-20"
+     camera_elevation="-.3">
+      <param_morph />
+    </param>
+
+    <param
+     id="635"
+     group="1"
+     name="Fat_Legs"
+     label="Fat Torso"
+     wearable="shape"
+     edit_group="shape_body"
+     label_min="skinny"
+     label_max="fat"
+     value_min="0"
+     value_max="1">
+      <param_morph>
+        <volume_morph
+          name="PELVIS"
+          scale="0.03 0.06 0.0"/>
+        <volume_morph
+          name="R_UPPER_LEG"
+          scale="0.02 0.02 0.0"
+          pos="0.0 -0.02 0.0"/>
+        <volume_morph
+          name="R_LOWER_LEG"
+          scale="0.01 0.01 0.0"/>
+        <volume_morph
+          name="L_UPPER_LEG"
+          scale="0.02 0.02 0.0"
+          pos="0.0 0.02 0.0"/>
+        <volume_morph
+          name="L_LOWER_LEG"
+          scale="0.01 0.01 0.0"/>
+      </param_morph>
+    </param>
+
+    <param
+     id="854"
+     group="1"
+     name="Saddlebags"
+     wearable="shape"
+     edit_grouo="driven"
+     value_min="-.5"
+     value_max="3">
+      <param_morph>
+        <volume_morph
+          name="PELVIS"
+          scale="0.0 0.025 0.0"/>
+      </param_morph>
+
+    </param>
+
+    <param
+     id="879"
+     group="0"
+     sex="male"
+     name="Male_Package"
+     label="Package"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="4.6"
+     label_min="Coin Purse"
+     label_max="Duffle Bag"
+     value_default="0"
+     value_min="-.5"
+     value_max="2"
+     camera_angle="60"
+     camera_distance=".6">
+      <param_morph />
+    </param>
+
+    <!--
+            #############
+            # other morphs (not user controlled)
+            #############
+            -->
+    <param
+     id="153"
+     group="1"
+     name="Male_Legs"
+     wearable="shape"
+     edit_group="driven"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <!--
+            #end morph targets
+            -->
+  </mesh>
+
+  <mesh
+   type="lowerBodyMesh"
+ lod="1"
+   file_name="avatar_lower_body_1.llm"
+   min_pixel_width="160"
+   reference="avatar_lower_body.llm">
+  </mesh>
+
+  <mesh
+   type="lowerBodyMesh"
+ lod="2"
+   file_name="avatar_lower_body_2.llm"
+   min_pixel_width="80"
+   reference="avatar_lower_body.llm">
+  </mesh>
+
+  <mesh
+   type="lowerBodyMesh"
+ lod="3"
+   file_name="avatar_lower_body_3.llm"
+   min_pixel_width="40"
+   reference="avatar_lower_body.llm">
+  </mesh>
+
+  <mesh
+   type="lowerBodyMesh"
+ lod="4"
+   file_name="avatar_lower_body_4.llm"
+ min_pixel_width="0"
+   reference="avatar_lower_body.llm">
+  </mesh>
+
+  <!--
+      #lowerBodyMesh2 =
+      #lowerBodyMesh3 =
+      -->
+  <!--
+      #eyeLidLeftMesh =
+      -->
+  <mesh
+   type="eyeBallLeftMesh"
+ lod="0"
+   file_name="avatar_eye.llm"
+   min_pixel_width="320">
+    <!-- begin morph_params -->
+    <param
+     id="679"
+     group="1"
+     name="Eyeball_Size"
+     label="Eyeball Size"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".10">
+      <param_morph />
+    </param>
+
+    <param
+     id="687"
+     group="1"
+     name="Eyeball_Size"
+     label="Big Eyeball"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".25">
+      <param_morph />
+    </param>
+  </mesh>
+
+  <mesh
+   type="eyeBallLeftMesh"
+ lod="1"
+   file_name="avatar_eye_1.llm"
+   min_pixel_width="80">
+    <!-- begin morph_params -->
+    <param
+     id="694"
+     group="1"
+     name="Eyeball_Size"
+     label="Eyeball Size"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".10">
+      <param_morph />
+    </param>
+
+    <param
+     id="695"
+     group="1"
+     name="Eyeball_Size"
+     label="Big Eyeball"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".25">
+      <param_morph />
+    </param>
+  </mesh>
+
+  <!--
+      #eyeLidRightMesh =
+      -->
+  <mesh
+   type="eyeBallRightMesh"
+ lod="0"
+   file_name="avatar_eye.llm"
+   min_pixel_width="320">
+    <!-- begin morph_params -->
+    <param
+     id="680"
+     group="1"
+     name="Eyeball_Size"
+     label="Eyeball Size"
+     wearable="shape"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".10">
+      <param_morph />
+    </param>
+
+    <param
+     id="688"
+     group="1"
+     name="Eyeball_Size"
+     label="Big Eyeball"
+     wearable="shape"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".25">
+      <param_morph />
+    </param>
+  </mesh>
+
+  <mesh
+   type="eyeBallRightMesh"
+ lod="1"
+   file_name="avatar_eye_1.llm"
+   min_pixel_width="80">
+    <!-- begin morph_params -->
+    <param
+     id="681"
+     group="1"
+     name="Eyeball_Size"
+     label="Eyeball Size"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".10">
+      <param_morph />
+    </param>
+
+    <param
+     id="691"
+     group="1"
+     name="Eyeball_Size"
+     label="Big Eyeball"
+     wearable="shape"
+     edit_group="shape_eyes"
+     label_min="small eye"
+     label_max="big eye"
+     value_min="-.25"
+     value_max=".25">
+      <param_morph />
+    </param>
+  </mesh>
+
+  <mesh
+   type="skirtMesh"
+ lod="0"
+   file_name="avatar_skirt.llm"
+   min_pixel_width="320">
+    <param
+     id="845"
+     group="1"
+     name="skirt_poofy"
+     label="poofy skirt"
+     clothing_morph="true"
+     wearable="skirt"
+     edit_group="skirt"
+     label_min="less poofy"
+     label_max="more poofy"
+     value_min="0"
+     value_max="1.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="846"
+     group="1"
+     name="skirt_loose"
+     label="loose skirt"
+     clothing_morph="true"
+     wearable="skirt"
+     edit_group="skirt"
+     label_min="form fitting"
+     label_max="loose"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="866"
+     group="1"
+     name="skirt_tight"
+     label="tight skirt"
+     clothing_morph="true"
+     wearable="skirt"
+     edit_group="skirt"
+     label_min="form fitting"
+     label_max="loose"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="867"
+     group="1"
+     name="skirt_smallbutt"
+     label="tight skirt"
+     clothing_morph="false"
+     wearable="skirt"
+     edit_group="skirt"
+     cross_wearable="true"
+     label_min="form fitting"
+     label_max="loose"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="848"
+     group="0"
+     name="skirt_bustle"
+     label="bustle skirt"
+     clothing_morph="true"
+     wearable="skirt"
+     edit_group_order="3"
+     edit_group="skirt"
+     label_min="no bustle"
+     label_max="more bustle"
+     value_min="0"
+     value_max="2"
+     value_default=".2"
+     camera_angle="100"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_morph />
+    </param>
+
+    <param
+     id="847"
+     group="1"
+     name="skirt_bowlegs"
+     label="legs skirt"
+     wearable="skirt"
+     edit_group="driven"
+     cross_wearable="true"
+     value_min="-1"
+     value_max="1"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <param
+     id="852"
+     group="1"
+     name="skirt_bigbutt"
+     wearable="skirt"
+     edit_group="driven"
+     cross_wearable="true"
+     label="bigbutt skirt"
+     label_min="less"
+     label_max="more"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="849"
+     group="1"
+     name="skirt_belly"
+     wearable="skirt"
+     edit_group="driven"
+     cross_wearable="true"
+     label="big belly skirt"
+     value_min="0"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="850"
+     group="1"
+     wearable="skirt"
+     edit_group="driven"
+     cross_wearable="true"
+     name="skirt_saddlebags"
+     value_min="-.5"
+     value_max="3">
+      <param_morph />
+    </param>
+
+    <param
+     id="851"
+     group="1"
+     name="skirt_chubby"
+     wearable="skirt"
+     edit_group="driven"
+     cross_wearable="true"
+     label_min="less"
+     label_max="more"
+     value_min="0"
+     value_max="1"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <param
+     id="856"
+     group="1"
+     name="skirt_lovehandles"
+     wearable="skirt"
+     edit_group="driven"
+     cross_wearable="true"
+     label_min="less"
+     label_max="more"
+     value_min="-1"
+     value_max="2"
+     value_default="0">
+      <param_morph />
+    </param>
+
+    <!--
+            #############
+            # other morphs (not user controlled)
+            #############
+            -->
+    <param
+     id="857"
+     group="1"
+     name="skirt_male"
+     wearable="skirt"
+     edit_group="driven"
+     cross_wearable="true" 
+     value_min="0" 
+     value_max="1"> 
+      <param_morph />
+    </param>
+  </mesh>
+
+  <mesh
+   type="skirtMesh"
+ lod="1"
+   file_name="avatar_skirt_1.llm"
+   min_pixel_width="160"
+   reference="avatar_skirt.llm">
+  </mesh>
+
+  <mesh
+   type="skirtMesh"
+ lod="2"
+   file_name="avatar_skirt_2.llm"
+   min_pixel_width="80"
+   reference="avatar_skirt.llm">
+  </mesh>
+
+  <mesh
+   type="skirtMesh"
+ lod="3"
+   file_name="avatar_skirt_3.llm"
+   min_pixel_width="40"
+   reference="avatar_skirt.llm">
+  </mesh>
+
+  <mesh
+   type="skirtMesh"
+ lod="4"
+   file_name="avatar_skirt_4.llm"
+ min_pixel_width="0"
+   reference="avatar_skirt.llm">
+  </mesh>
+
+  <!-- =========================================================== -->
+  <global_color
+   name="skin_color">
+    <param
+     id="111"
+     group="0"
+     wearable="skin"
+     edit_group="skin_color"
+     edit_group_order="1"
+     name="Pigment"
+   show_simple="true"
+     label_min="Light"
+     label_max="Dark"
+     value_min="0"
+     value_max="1"
+     value_default=".5">
+      <param_color>
+        <value
+         color="252, 215, 200, 255" />
+
+        <value
+         color="240, 177, 112, 255" />
+
+        <value
+         color="90, 40, 16, 255" />
+
+        <value
+         color="29, 9, 6, 255" />
+      </param_color>
+    </param>
+
+    <param
+     id="110"
+     group="0"
+     wearable="skin"
+     edit_group="skin_color"
+     edit_group_order="2"
+     name="Red Skin"
+     label="Ruddiness"
+     label_min="Pale"
+     label_max="Ruddy"
+     value_min="0"
+     value_max="0.1">
+      <param_color
+       operation="blend">
+        <value
+         color="218, 41, 37, 255" />
+      </param_color>
+    </param>
+
+    <param
+     id="108"
+     group="0"
+     wearable="skin"
+     edit_group="skin_color"
+     edit_group_order="3"
+     name="Rainbow Color"
+   show_simple="true"
+     label_min="None"
+     label_max="Wild"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5">
+      <param_color>
+        <value
+         color=" 0, 0, 0, 255" />
+
+        <value
+         color="255, 0, 255, 255" />
+
+        <value
+         color="255, 0, 0, 255" />
+
+        <value
+         color="255, 255, 0, 255" />
+
+        <value
+         color=" 0, 255, 0, 255" />
+
+        <value
+         color=" 0, 255, 255, 255" />
+
+        <value
+         color=" 0, 0, 255, 255" />
+
+        <value
+         color="255, 0, 255, 255" />
+      </param_color>
+    </param>
+  </global_color>
+
+  <!-- =========================================================== -->
+  <global_color
+   name="hair_color">
+    <param
+     id="114"
+     group="0"
+     wearable="hair"
+     edit_group="hair_color"
+     edit_group_order="3"
+     name="Blonde Hair"
+   show_simple="true"
+     label_min="Black"
+     label_max="Blonde"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5">
+      <param_color>
+        <value
+         color="0, 0, 0, 255" />
+
+        <value
+         color="22, 6, 6, 255" />
+
+        <value
+         color="29, 9, 6, 255" />
+
+        <value
+         color="45, 21, 11, 255" />
+
+        <value
+         color="78, 39, 11, 255" />
+
+        <value
+         color="90, 53, 16, 255" />
+
+        <value
+         color="136, 92, 21, 255" />
+
+        <value
+         color="150, 106, 33, 255" />
+
+        <value
+         color="198, 156, 74, 255" />
+
+        <value
+         color="233, 192, 103, 255" />
+
+        <value
+         color="238, 205, 136, 255" />
+      </param_color>
+    </param>
+
+    <param
+     id="113"
+     group="0"
+     wearable="hair"
+     edit_group="hair_color"
+     edit_group_order="4"
+     name="Red Hair"
+   show_simple="true"
+     label_min="No Red"
+     label_max="Very Red"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5">
+      <param_color>
+        <value
+         color="0, 0, 0, 255" />
+
+        <value
+         color="118, 47, 19, 255" />
+      </param_color>
+    </param>
+
+    <param
+     id="115"
+     group="0"
+     wearable="hair"
+     edit_group="hair_color"
+     edit_group_order="1"
+     name="White Hair"
+   show_simple="true"
+     label_min="No White"
+     label_max="All White"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5">
+      <param_color>
+        <value
+         color="0, 0, 0, 255" />
+
+        <value
+         color="255, 255, 255, 255" />
+      </param_color>
+    </param>
+
+    <param
+     id="112"
+     group="0"
+     wearable="hair"
+     edit_group="hair_color"
+     edit_group_order="2"
+     name="Rainbow Color"
+   show_simple="true"
+     label_min="None"
+     label_max="Wild"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".5">
+      <param_color>
+        <value
+         color=" 0, 0, 0, 255" />
+
+        <value
+         color="255, 0, 255, 255" />
+
+        <value
+         color="255, 0, 0, 255" />
+
+        <value
+         color="255, 255, 0, 255" />
+
+        <value
+         color=" 0, 255, 0, 255" />
+
+        <value
+         color=" 0, 255, 255, 255" />
+
+        <value
+         color=" 0, 0, 255, 255" />
+
+        <value
+         color="255, 0, 255, 255" />
+      </param_color>
+    </param>
+  </global_color>
+
+  <!-- =========================================================== -->
+  <global_color
+   name="eye_color">
+    <param
+     id="99"
+     group="0"
+     wearable="eyes"
+     edit_group="eyes"
+     edit_group_order="1"
+     name="Eye Color"
+   show_simple="true"
+     label_min="Natural"
+     label_max="Unnatural"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <!-- default to natural brown eyes-->
+      <param_color>
+        <value
+         color="50, 25, 5, 255" />
+
+        <!-- natural dark brown eyes-->
+        <value
+         color="109, 55, 15, 255" />
+
+        <!-- natural brown eyes-->
+        <value
+         color="150, 93, 49, 255" />
+
+        <!-- natural light brown eyes-->
+        <value
+         color="152, 118, 25, 255" />
+
+        <!--natural hazel eyes-->
+        <value
+         color="95, 179, 107, 255" />
+
+        <!--natural green eyes-->
+        <value
+         color="87, 192, 191, 255" />
+
+        <!--natural aqua eyes-->
+        <value
+         color="95, 172, 179, 255" />
+
+        <!--natural blue eyes-->
+        <value
+         color="128, 128, 128, 255" />
+
+        <!--natural grey eyes-->
+        <value
+         color="0, 0, 0, 255" />
+
+        <!--black eyes-->
+        <value
+         color="255, 255, 0, 255" />
+
+        <!--bright yellow eyes-->
+        <value
+         color=" 0, 255, 0, 255" />
+
+        <!-- bright green eyes-->
+        <value
+         color=" 0, 255, 255, 255" />
+
+        <!-- bright cyan eyes-->
+        <value
+         color=" 0, 0, 255, 255" />
+
+        <!--bright blue eyes-->
+        <value
+         color="255, 0, 255, 255" />
+
+        <!-- bright violet eyes-->
+        <value
+         color="255, 0, 0, 255" />
+
+        <!--bright red eyes-->
+      </param_color>
+    </param>
+
+    <param
+     id="98"
+     group="0"
+     wearable="eyes"
+     edit_group="eyes"
+     edit_group_order="2"
+     name="Eye Lightness"
+   show_simple="true"
+     label_min="Darker"
+     label_max="Lighter"
+     value_min="0"
+     value_max="1"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_color>
+        <value
+         color="0, 0, 0, 0" />
+
+        <value
+         color="255, 255, 255, 255" />
+      </param_color>
+    </param>
+  </global_color>
+
+  <!-- =========================================================== -->
+  <layer_set
+    body_region="hair"
+    width="512"
+    height="512"
+    clear_alpha="false">
+    <layer
+      name="base"
+      global_color="hair_color"
+      write_all_channels="true">
+      <texture
+       local_texture="hair_grain" />
+    </layer>
+
+    <layer
+       name="hair alpha"
+       visibility_mask="TRUE">
+      <texture
+         local_texture="hair_alpha" />
+    </layer>
+
+  </layer_set>
+  <!-- =========================================================== -->
+
+  <layer_set
+    body_region="head"
+    width="512"
+    height="512"
+  clear_alpha="false"
+    alpha_tga_file="head_alpha.tga">
+    <layer
+       name="head bump base"
+       fixed_color = "128,128,128,255"
+       render_pass="bump">
+    </layer>
 
-      <param
-       id="686"
-       group="1"
-       name="Head_Eyes_Big"
-       wearable="shape"
-       label="Eye Size"
-       edit_group="shape_eyes"
-       label_min="Beady Eyes"
-       label_max="Anime Eyes"
-       show_simple="true"
-       value_min="-2"
-       value_max="2"
-       value_default="0">
-         <param_morph />
-      </param>
+    <layer
+     name="head bump definition"
+     render_pass="bump">
+         
 
-      <param
-       id="767"
-       group="1"
-       name="Bug_Eyed_Head"
-       wearable="shape"
-       label="Eye Depth"
-       edit_group="shape_eyes"
-       edit_group_order="4.5"
-       label_min="Sunken Eyes"
-       label_max="Bug Eyes"
-       value_min="-2"
-       value_max="2"
-       value_default="0">
-         <param_morph />
-      </param>
+      <texture
+           tga_file="bump_head_base.tga"
+       file_is_mask="FALSE"/>
 
-<!--
-         #Fat_Lips = Fat_Lips 34 1 0 1
-         #Wide_Lips = Wide_Lips 35 1 0 1
-         #Wide_Nose = Wide_Nose 36 1 0 1
-   -->
-<!--
-        ##############
-        # Facial Expression morphs 
-        ##############
-        -->
       <param
-       id="300"
+       id="873"
        group="1"
-       name="Express_Closed_Mouth"
-       value_default="1"
+       wearable="skin"
+       edit_group="driven"
+       edit_group_order="12"
+       name="Bump base"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         domain="0" />
       </param>
+    </layer>
 
-      <param
-       id="301"
-       group="1"
-       name="Express_Tongue_Out"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <layer
+     name="base"
+     global_color="skin_color">
+      <texture
+       tga_file="head_skingrain.tga" />
+    </layer>
 
-      <param
-       id="302"
-       group="1"
-       name="Express_Surprise_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <layer
+     name="headcolor">
+      <texture
+       tga_file="head_color.tga" />
+    </layer>
 
-      <param
-       id="303"
-       group="1"
-       name="Express_Wink_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <layer
+     name="shadow">
+      <texture
+       tga_file="head_shading_alpha.tga"
+       file_is_mask="TRUE" />
 
       <param
-       id="304"
+       id="158"
        group="1"
-       name="Express_Embarrassed_Emote"
+       wearable="skin"
+       name="Shading"
        value_min="0"
        value_max="1">
-         <param_morph />
-      </param>
+        <param_color>
+          <value
+           color="0, 0, 0, 0" />
 
-      <param
-       id="305"
-       group="1"
-       name="Express_Shrug_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="0, 0, 0, 128" />
+        </param_color>
       </param>
+    </layer>
 
-      <param
-       id="306"
-       group="1"
-       name="Express_Kiss"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <layer
+     name="highlight">
+      <texture
+        tga_file="head_highlights_alpha.tga"
+file_is_mask="TRUE" />
 
-      <param
-       id="307"
-       group="1"
-       name="Express_Bored_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
 
       <param
-       id="308"
-       group="1"
-       name="Express_Repulsed_Emote"
-       value_min="0"
+                 id="159"
+                 group="1"
+                 name="Shading"
+                 wearable="skin"
+                 value_min="0"
        value_max="1">
-         <param_morph />
-      </param>
+        <param_color>
+          <value
+color="255, 255, 255, 0" />
 
-      <param
-       id="309"
-       group="1"
-       name="Express_Disdain"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
 
-      <param
-       id="310"
-       group="1"
-       name="Express_Afraid_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="255, 255, 255, 64" />
+        </param_color>
       </param>
+    </layer>
+    <layer
+     name="rosyface">
+      <texture
+       tga_file="rosyface_alpha.tga"
+       file_is_mask="true" />
 
       <param
-       id="311"
-       group="1"
-       name="Express_Worry_Emote"
+       id="116"
+       group="0"
+       wearable="skin"
+       edit_group="skin_facedetail"
+       edit_group_order="4"
+       name="Rosy Complexion"
+       label_min="Less Rosy"
+       label_max="More Rosy"
        value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+       value_max="1"
+       camera_distance=".3"
+       camera_elevation=".07">
+        <param_color>
+          <value
+           color="198, 71, 71, 0" />
 
-      <param
-       id="312"
-       group="1"
-       name="Express_Cry_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="198, 71, 71, 255" />
+        </param_color>
       </param>
+    </layer>
 
-      <param
-       id="313"
-       group="1"
-       name="Express_Sad_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <layer
+       name="lips">
+      <texture
+       tga_file="lips_mask.tga"
+       file_is_mask="true" />
 
       <param
-       id="314"
-       group="1"
-       name="Express_Anger_Emote"
+       id="117"
+       group="0"
+       wearable="skin"
+       edit_group="skin_facedetail"
+       edit_group_order="5"
+       name="Lip Pinkness"
+       label_min="Darker"
+       label_max="Pinker"
        value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+       value_max="1"
+       camera_distance=".25">
+        <param_color>
+          <value
+           color="220, 115, 115, 0" />
 
-      <param
-       id="315"
-       group="1"
-       name="Express_Frown"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="220, 115, 115, 128" />
+        </param_color>
       </param>
+    </layer>
 
+    <layer
+     name="wrinkles_shading"
+     render_pass="bump"
+     fixed_color="0,0,0,100">
       <param
-       id="316"
+       id="118"
        group="1"
-       name="Express_Laugh_Emote"
+       wearable="skin"
+       name="Wrinkles"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="bump_face_wrinkles.tga"
+         skip_if_zero="true"
+         domain="0.3" />
       </param>
+    </layer>
 
-      <param
-       id="317"
-       group="1"
-       name="Express_Toothsmile"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+    <!--<layer
+           name="wrinkles_highlights"
+           fixed_color="255,255,255,64">
+             <param
+              id="128"
+              group="1"
+              name="Wrinkles"
+              value_min="0"
+              value_max="1">
+                <param_alpha
+                 tga_file="head_wrinkles_highlights_alpha.tga"
+                 skip_if_zero="true"
+                 domain="0.3" />
+             </param>
+          </layer>-->
+    <layer
+            name="freckles"
+     fixed_color="120,47,20,128">
+      <param
+        id="165"
+        group="0"
+        wearable="skin"
+        edit_group="skin_facedetail"
+        edit_group_order="2"
+        name="Freckles"
+        label_min="Less"
+        label_max="More"
+        value_min="0"
+        value_max="1"
+        camera_distance=".3"
+camera_elevation=".07">
+        <param_alpha
+          tga_file="freckles_alpha.tga"
+          skip_if_zero="true"
+domain="0.5" />
       </param>
+    </layer>
+    <layer
+name="eyebrowsbump"
+render_pass="bump">
+      <texture
+       tga_file="head_hair.tga"
+       file_is_mask="false" />
 
       <param
-       id="318"
+       id="1000"
        group="1"
-       name="Express_Smile"
+       wearable="hair"
+       edit_group="driven"
+       name="Eyebrow Size Bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="eyebrows_alpha.tga"
+         domain="0.1" />
       </param>
 
       <param
-       id="632"
+       id="1002"
        group="1"
-       name="Express_Open_Mouth"
+       wearable="hair"
+       edit_group="driven"
+       name="Eyebrow Density Bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_color>
+          <value
+           color="255,255,255,0" />
+
+          <value
+           color="255,255,255,255" />
+        </param_color>
       </param>
+    </layer>
 
-<!--
-        ##############
-        # Lipsync morphs
-        ##############
-        -->
+    <layer
+     name="eyebrows"
+     global_color="hair_color">
+      <texture
+       tga_file="head_hair.tga"
+       file_is_mask="false" />
 
       <param
-       id="70"
+       id="1001"
        group="1"
-       name="Lipsync_Aah"
+       wearable="hair"
+       edit_group="hair_eyebrows"
+       name="Eyebrow Size"
+   show_simple="true"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default="0.5">
+        <param_alpha
+         tga_file="eyebrows_alpha.tga"
+         domain="0.1" />
       </param>
 
       <param
-       id="71"
+       id="1003"
        group="1"
-       name="Lipsync_Ooh"
+       wearable="hair"
+       edit_group="driven"
+       name="Eyebrow Density"
        value_min="0"
        value_max="1">
-         <param_morph />
-      </param>
+        <param_color
+         operation="multiply">
+          <value
+           color="255,255,255,0" />
 
-<!--
-        ##############
-        # other morphs (not user controlled)
-        ##############
-        -->
-      <param
-       id="40"
-       group="1"
-       name="Male_Head"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="255,255,255,255" />
+        </param_color>
       </param>
+    </layer>
 
+    <layer
+     name="lipstick">
       <param
-       id="41"
-       group="1"
-       name="Old"
+       id="700"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="2"
+       name="Lipstick Color"
+       label_min="Pink"
+       label_max="Black"
        value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+       value_max="1"
+       value_default=".25"
+       camera_distance=".25">
+        <param_color>
+          <value
+           color="245,161,177,200" />
 
-<!--
-        ##############
-        # animatable morphs
-        ##############
-         -->
-      <param
-       id="51"
-       group="1"
-       name="Furrowed_Eyebrows"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="216,37,67,200" />
+
+          <value
+           color="178,48,76,200" />
+
+          <value
+           color="68,0,11,200" />
+
+          <value
+           color="252,207,184,200" />
+
+          <value
+           color="241,136,106,200" />
+
+          <value
+           color="208,110,85,200" />
+
+          <value
+           color="106,28,18,200" />
+
+          <value
+           color="58,26,49,200" />
+
+          <value
+           color="14,14,14,200" />
+        </param_color>
       </param>
 
       <param
-       id="53"
-       group="1"
-       name="Surprised_Eyebrows"
+       id="701"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="1"
+       name="Lipstick"
+       label_min="No Lipstick"
+       label_max="More Lipstick"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max=".9"
+       value_default="0.0"
+       camera_distance=".25">
+        <param_alpha
+         tga_file="lipstick_alpha.tga"
+         skip_if_zero="true"
+         domain="0.05" />
       </param>
+    </layer>
 
+    <layer
+     name="lipgloss"
+     fixed_color="255,255,255,190">
       <param
-       id="54"
-       group="1"
-       name="Worried_Eyebrows"
+       id="702"
+       name="Lipgloss"
+       label_min="No Lipgloss"
+       label_max="Glossy"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="3"
+       group="0"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       camera_distance=".25">
+        <param_alpha
+         tga_file="lipgloss_alpha.tga"
+         skip_if_zero="true"
+         domain="0.2" />
       </param>
+    </layer>
 
+    <layer
+     name="blush">
       <param
-       id="55"
-       group="1"
-       name="Frown_Mouth"
+       id="704"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="4"
+       name="Blush"
+       label_min="No Blush"
+       label_max="More Blush"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max=".9"
+       value_default="0"
+       camera_distance=".3"
+       camera_elevation=".07"
+       camera_angle="20">
+        <param_alpha
+         tga_file="blush_alpha.tga"
+         skip_if_zero="true"
+         domain="0.3" />
       </param>
 
       <param
-       id="57"
-       group="1"
-       name="Smile_Mouth"
+       id="705"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="5"
+       name="Blush Color"
+       label_min="Pink"
+       label_max="Orange"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default=".5"
+       camera_distance=".3"
+       camera_elevation=".07"
+       camera_angle="20">
+        <param_color>
+          <value
+           color="253,162,193,200" />
+
+          <value
+           color="247,131,152,200" />
+
+          <value
+           color="213,122,140,200" />
+
+          <value
+           color="253,152,144,200" />
+
+          <value
+           color="236,138,103,200" />
+
+          <value
+           color="195,128,122,200" />
+
+          <value
+           color="148,103,100,200" />
+
+          <value
+           color="168,95,62,200" />
+        </param_color>
       </param>
 
       <param
-       id="58"
-       group="1"
-       name="Blink_Left"
+       id="711"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="6"
+       name="Blush Opacity"
+       label_min="Clear"
+       label_max="Opaque"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default=".5"
+       camera_distance=".3"
+       camera_elevation=".07"
+       camera_angle="20">
+        <param_color
+         operation="multiply">
+          <value
+           color="255,255,255,0" />
+
+          <value
+           color="255,255,255,255" />
+        </param_color>
       </param>
+    </layer>
 
+    <layer
+     name="Outer Eye Shadow">
       <param
-       id="59"
-       group="1"
-       name="Blink_Right"
+       id="708"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="11"
+       name="Out Shdw Color"
+       label_min="Light"
+       label_max="Dark"
        value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
-
-<!--
-        #end morph targets
-         -->
-   </mesh>
-
-   <mesh
-    type="headMesh"
-	lod="1"
-    file_name="avatar_head_1.llm"
-    min_pixel_width="160"
-    reference="avatar_head.llm">
-   </mesh>
-
-   <mesh
-    type="headMesh"
-	lod="2"
-    file_name="avatar_head_2.llm"
-    min_pixel_width="80"
-    reference="avatar_head.llm">
-   </mesh>
-
-   <mesh
-    type="headMesh"
-	lod="3"
-    file_name="avatar_head_3.llm"
-    min_pixel_width="40"
-    reference="avatar_head.llm">
-   </mesh>
-
-   <mesh
-    type="headMesh"
-	lod="4"
-    file_name="avatar_head_4.llm"
-	min_pixel_width="0"
-    reference="avatar_head.llm">
-   </mesh>
-
-   <mesh
-    type="eyelashMesh"
-	lod="0"
-    file_name="avatar_eyelashes.llm"
-    min_pixel_width="320">
-      <param
-       shared="1"
-       id="660"
-       group="1"
-       name="Shear_Head"
-       wearable="shape"
-       label="Shear Face"
-       edit_group="shape_head"
-       label_min="Shear Left"
-       label_max="Shear Right"
-       value_min="-2"
-       value_max="2"
-       value_default="0"
-       camera_distance=".5"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+       value_max="1"
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_color>
+          <value
+           color="252,247,246,255" />
+
+          <value
+           color="255,206,206,255" />
+
+          <value
+           color="233,135,149,255" />
+
+          <value
+           color="220,168,192,255" />
+
+          <value
+           color="228,203,232,255" />
+
+          <value
+           color="255,234,195,255" />
+
+          <value
+           color="230,157,101,255" />
+
+          <value
+           color="255,147,86,255" />
+
+          <value
+           color="228,110,89,255" />
+
+          <value
+           color="228,150,120,255" />
+
+          <value
+           color="223,227,213,255" />
+
+          <value
+           color="96,116,87,255" />
+
+          <value
+           color="88,143,107,255" />
+
+          <value
+           color="194,231,223,255" />
+
+          <value
+           color="207,227,234,255" />
+
+          <value
+           color="41,171,212,255" />
+
+          <value
+           color="180,137,130,255" />
+
+          <value
+           color="173,125,105,255" />
+
+          <value
+           color="144,95,98,255" />
 
-      <param
-       shared="1"
-       id="770"
-       group="1"
-       name="Elongate_Head"
-       wearable="shape"
-       label="Shear Face"
-       edit_group="shape_head"
-       label_min="Flat Head"
-       label_max="Long Head"
-       value_min="-1"
-       value_max="1"
-       value_default="0"
-       camera_distance=".5"
-       camera_elevation=".04">
-         <param_morph />
-      </param>
+          <value
+           color="115,70,77,255" />
 
-      <param
-       shared="1"
-       id="664"
-       group="0"
-       name="Pop_Eye"
-       wearable="shape"
-       label="Eye Pop"
-       edit_group="shape_eyes"
-       edit_group_order="8"
-       label_min="Pop Right Eye"
-       label_max="Pop Left Eye"
-       value_min="-2"
-       value_max="2"
-       value_default="0"
-       camera_distance=".5"
-       camera_elevation=".04"
-       camera_angle="-20">
-         <param_morph />
+          <value
+           color="155,78,47,255" />
+
+          <value
+           color="239,239,239,255" />
+
+          <value
+           color="194,194,194,255" />
+
+          <value
+           color="120,120,120,255" />
+
+          <value
+           color="10,10,10,255" />
+        </param_color>
       </param>
 
       <param
-       shared="1"
-       id="21"
+       id="706"
        group="0"
-       name="Upper_Eyelid_Fold"
-       label="Upper Eyelid Fold"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Uncreased"
-       label_max="Creased"
-       value_min="-0.2"
-       value_max="1.3"
-       camera_elevation=".1"
-       camera_distance=".35">
-         <param_morph />
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="12"
+       name="Out Shdw Opacity"
+       label_min="Clear"
+       label_max="Opaque"
+       value_min=".2"
+       value_max="1"
+       value_default=".6"
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_color
+         operation="multiply">
+          <value
+           color="255,255,255,0" />
+
+          <value
+           color="255,255,255,255" />
+        </param_color>
       </param>
 
       <param
-       shared="1"
-       id="24"
+       id="707"
        group="0"
-       name="Wide_Eyes"
-       label="Eye Opening"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Narrow"
-       label_max="Wide"
-       show_simple="true"
-       value_min="-1.5"
-       value_max="2"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_morph />
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="10"
+       name="Outer Shadow"
+       label_min="No Eyeshadow"
+       label_max="More Eyeshadow"
+       value_min="0"
+       value_max=".7"
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_alpha
+         tga_file="eyeshadow_outer_alpha.tga"
+         skip_if_zero="true"
+         domain="0.05" />
       </param>
+    </layer>
 
+    <layer
+     name="Inner Eye Shadow">
       <param
-       shared="1"
-       id="186"
-       group="1"
-       name="Egg_Head"
-       label="Egg Head"
-       wearable="shape"
-       edit_group="shape_head"
-       label_min="Chin Heavy"
-       label_max="Forehead Heavy"
-       value_min="-1.3"
+       id="712"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="8"
+       name="In Shdw Color"
+       label_min="Light"
+       label_max="Dark"
+       value_min="0"
        value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_color>
+          <value
+           color="252,247,246,255" />
+
+          <value
+           color="255,206,206,255" />
+
+          <value
+           color="233,135,149,255" />
+
+          <value
+           color="220,168,192,255" />
+
+          <value
+           color="228,203,232,255" />
+
+          <value
+           color="255,234,195,255" />
+
+          <value
+           color="230,157,101,255" />
+
+          <value
+           color="255,147,86,255" />
+
+          <value
+           color="228,110,89,255" />
+
+          <value
+           color="228,150,120,255" />
+
+          <value
+           color="223,227,213,255" />
+
+          <value
+           color="96,116,87,255" />
+
+          <value
+           color="88,143,107,255" />
+
+          <value
+           color="194,231,223,255" />
+
+          <value
+           color="207,227,234,255" />
+
+          <value
+           color="41,171,212,255" />
+
+          <value
+           color="180,137,130,255" />
+
+          <value
+           color="173,125,105,255" />
+
+          <value
+           color="144,95,98,255" />
+
+          <value
+           color="115,70,77,255" />
+
+          <value
+           color="155,78,47,255" />
+
+          <value
+           color="239,239,239,255" />
+
+          <value
+           color="194,194,194,255" />
+
+          <value
+           color="120,120,120,255" />
+
+          <value
+           color="10,10,10,255" />
+        </param_color>
       </param>
 
       <param
-       shared="1"
-       id="187"
-       group="1"
-       name="Squash_Stretch_Head"
-       label="Squash/Stretch Head"
-       wearable="shape"
-       edit_group="shape_head"
-       label_min="Squash Head"
-       label_max="Stretch Head"
-       value_min="-.5"
+       id="713"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="9"
+       name="In Shdw Opacity"
+       label_min="Clear"
+       label_max="Opaque"
+       value_min=".2"
        value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_morph />
-      </param>
+       value_default=".7"
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_color
+         operation="multiply">
+          <value
+           color="255,255,255,0" />
 
-      <param
-       shared="1"
-       id="194"
-       group="1"
-       name="Eye_Spread"
-       edit_group="shape_eyes"
-       label_min="Eyes Together"
-       label_max="Eyes Spread"
-       value_min="-2"
-       value_max="2">
-         <param_morph />
+          <value
+           color="255,255,255,255" />
+        </param_color>
       </param>
 
       <param
-       id="518"
+       id="709"
        group="0"
-       name="Eyelashes_Long"
-       wearable="shape"
-       label="Eyelash Length"
-       edit_group="shape_eyes"
+       wearable="skin"
+       edit_group="skin_makeup"
        edit_group_order="7"
-       label_min="Short"
-       label_max="Long"
-       value_min="-.3"
-       value_max="1.5"
-       camera_elevation=".1"
-       camera_distance=".30"
-       camera_angle="-20">
-         <param_morph />
+       name="Inner Shadow"
+       label_min="No Eyeshadow"
+       label_max="More Eyeshadow"
+       value_min="0"
+       value_max="1"
+       value_default="0"
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_alpha
+         tga_file="eyeshadow_inner_alpha.tga"
+         skip_if_zero="true"
+         domain="0.2" />
       </param>
+    </layer>
 
+    <layer
+     name="eyeliner"
+     fixed_color="0,0,0,200">
       <param
-       shared="1"
-       id="650"
+       id="703"
        group="0"
-       name="Eyelid_Corner_Up"
-       label="Outer Eye Corner"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Corner Down"
-       label_max="Corner Up"
-       value_min="-1.3"
-       value_max="1.2"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_morph />
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="13"
+       name="Eyeliner"
+       label_min="No Eyeliner"
+       label_max="Full Eyeliner"
+       value_min="0"
+       value_max="1"
+       value_default="0.0"
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_alpha
+         tga_file="eyeliner_alpha.tga"
+         skip_if_zero="true"
+         domain="0.1" />
       </param>
-      
+
       <param
-       shared="1"
-       id="880"
+       id="714"
        group="0"
-       name="Eyelid_Inner_Corner_Up"
-       label="Inner Eye Corner"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="Corner Down"
-       label_max="Corner Up"
-       value_min="-1.3"
-       value_max="1.2"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_morph />
-      </param>
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="14"
+       name="Eyeliner Color"
+       label_min="Dark Green"
+       label_max="Black"
+       value_min="0"
+       value_max="1"
+       camera_distance=".3"
+       camera_elevation=".14">
+        <param_color>
+          <value
+           color="24,98,40,250" />
 
-      <param
-       shared="1"
-       id="686"
-       group="1"
-       name="Head_Eyes_Big"
-       wearable="shape"
-       label="Eye Size"
-       edit_group="shape_eyes"
-       label_min="Beady Eyes"
-       label_max="Anime Eyes"
-       value_min="-2"
-       value_max="2"
-	   show_simple="true"
-       value_default="0">
-         <param_morph />
-      </param>
+          <!-- dark green -->
+          <value
+           color="9,100,127,250" />
 
-      <param
-       shared="1"
-       id="767"
-       group="1"
-       name="Bug_Eyed_Head"
-       wearable="shape"
-       label="Eye Depth"
-       edit_group="shape_eyes"
-       edit_group_order="4.5"
-       label_min="Sunken Eyes"
-       label_max="Bug Eyes"
-       value_min="-2"
-       value_max="2"
-       value_default="0">
-         <param_morph />
-      </param>
+          <!-- lt.aqua  blue -->
+          <value
+           color="61,93,134,250" />
 
-<!--
-        ##############
-        # Facial Expression morphs 
-        ##############
-        -->
-      <param
-       shared="1"
-       id="301"
-       group="1"
-       name="Express_Tongue_Out"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+          <!-- aqua  -->
+          <value
+           color="70,29,27,250" />
 
-      <param
-       shared="1"
-       id="302"
-       group="1"
-       name="Express_Surprise_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+          <!--    dark brown -->
+          <value
+           color="115,75,65,250" />
 
-      <param
-       shared="1"
-       id="303"
-       group="1"
-       name="Express_Wink_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+          <!-- lt. brown  blue -->
+          <value
+           color="100,100,100,250" />
 
-      <param
-       shared="1"
-       id="304"
-       group="1"
-       name="Express_Embarrassed_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+          <!-- grey -->
+          <value
+           color="91,80,74,250" />
 
-      <param
-       shared="1"
-       id="305"
-       group="1"
-       name="Express_Shrug_Emote"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+          <!-- grey/brown  -->
+          <value
+           color="112,42,76,250" />
 
-      <param
-       shared="1"
-       id="306"
-       group="1"
-       name="Express_Kiss"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <!-- plum -->
+          <value
+           color="14,14,14,250" />
+
+          <!-- black -->
+        </param_color>
       </param>
+    </layer>
+
+    <layer
+     name="facialhair bump"
+     render_pass="bump">
+      <texture
+       tga_file="head_hair.tga"
+       file_is_mask="false" />
 
       <param
-       shared="1"
-       id="307"
+       id="1004"
+       sex="male"
        group="1"
-       name="Express_Bored_Emote"
+       wearable="hair"
+       edit_group="driven"
+       name="Sideburns bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_sideburns_alpha.tga"
+         skip_if_zero="true"
+         domain="0.05" />
       </param>
 
       <param
-       shared="1"
-       id="308"
+       id="1006"
+       sex="male"
        group="1"
-       name="Express_Repulsed_Emote"
+       wearable="hair"
+       edit_group="driven"
+       name="Moustache bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_moustache_alpha.tga"
+         skip_if_zero="true"
+         domain="0.05" />
       </param>
 
       <param
-       shared="1"
-       id="309"
+       id="1008"
+       sex="male"
        group="1"
-       name="Express_Disdain"
+       wearable="hair"
+       edit_group="driven"
+       name="Soulpatch bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_soulpatch_alpha.tga"
+         skip_if_zero="true"
+         domain="0.1" />
       </param>
 
       <param
-       shared="1"
-       id="310"
+       id="1010"
+       sex="male"
        group="1"
-       name="Express_Afraid_Emote"
+       edit_group="driven"
+       wearable="hair"
+       name="Chin Curtains bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_chincurtains_alpha.tga"
+         skip_if_zero="true"
+         domain="0.03" />
       </param>
 
       <param
-       shared="1"
-       id="312"
+       id="1012"
        group="1"
-       name="Express_Cry_Emote"
+       sex="male"
+       wearable="hair"
+       edit_group="driven"
+       name="5 O'Clock Shadow bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_color>
+          <value
+           color="255,255,255,255" />
+
+          <value
+           color="255,255,255,0" />
+        </param_color>
       </param>
+    </layer>
+
+    <layer
+     name="facialhair"
+     global_color="hair_color">
+
+      <texture
+       tga_file="head_hair.tga"
+       file_is_mask="false" />
 
       <param
-       shared="1"
-       id="313"
+       id="1005"
+       sex="male"
        group="1"
-       name="Express_Sad_Emote"
+       wearable="hair"
+       edit_group="driven"
+       name="Sideburns"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_sideburns_alpha.tga"
+         skip_if_zero="true"
+         domain="0.05" />
       </param>
 
       <param
-       shared="1"
-       id="314"
+       id="1007"
+       sex="male"
        group="1"
-       name="Express_Anger_Emote"
+       wearable="hair"
+       edit_group="driven"
+       name="Moustache"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_moustache_alpha.tga"
+         skip_if_zero="true"
+         domain="0.05" />
       </param>
 
       <param
-       shared="1"
-       id="315"
+       id="1009"
+       sex="male"
        group="1"
-       name="Express_Frown"
+       wearable="hair"
+       edit_group="driven"
+       name="Soulpatch"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_soulpatch_alpha.tga"
+         skip_if_zero="true"
+         domain="0.1" />
       </param>
 
       <param
-       shared="1"
-       id="316"
+       id="1011"
+       sex="male"
        group="1"
-       name="Express_Laugh_Emote"
+       wearable="hair"
+       edit_group="driven"
+       name="Chin Curtains"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         tga_file="facehair_chincurtains_alpha.tga"
+         skip_if_zero="true"
+         domain="0.03" />
       </param>
 
       <param
-       shared="1"
-       id="317"
+       id="751"
        group="1"
-       name="Express_Toothsmile"
+       wearable="hair"
+       sex="male"
+       edit_group="hair_facial"
+       name="5 O'Clock Shadow"
+       label_min="Dense hair"
+       label_max="Shadow hair"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default="0.7"
+       camera_elevation=".1"
+       camera_distance=".3">
+        <param_color
+         operation="multiply">
+          <value
+           color="255,255,255,255" />
+
+          <value
+           color="255,255,255,30" />
+        </param_color>
       </param>
+    </layer>
+
+    <layer
+        name="head_bodypaint">
+      <texture
+       local_texture="head_bodypaint" />
+    </layer>
+    <layer
+       name="head alpha"
+       visibility_mask="TRUE">
+      <texture
+         local_texture="head_alpha" />
+    </layer>
+    <layer
+       name="head_tattoo">
+      <texture
+         local_texture="head_tattoo" />
+    </layer>
+
+  </layer_set>
+
+  <!-- =========================================================== -->
+  <layer_set
+   body_region="upper_body"
+   width="512"
+   height="512">
+    <layer
+     name="base_upperbody bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+    </layer>
+    <layer
+     name="upperbody bump definition"
+     render_pass="bump">
+      <texture
+         tga_file="bump_upperbody_base.tga"
+     file_is_mask="FALSE"/>
 
       <param
-       shared="1"
-       id="318"
+       id="874"
        group="1"
-       name="Express_Smile"
+       wearable="skin"
+       edit_group="driven"
+       edit_group_order="20"
+       name="Bump upperdef"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         domain="0" />
       </param>
+    </layer>
+
+    <layer
+     name="base"
+     global_color="skin_color">
+      <texture
+       tga_file="body_skingrain.tga" />
+    </layer>
+
+    <layer
+     name="nipples">
+      <texture
+       tga_file="upperbody_color.tga" />
+    </layer>
+
+    <layer
+     name="shadow">
+      <texture
+       tga_file="upperbody_shading_alpha.tga"
+       file_is_mask="TRUE" />
 
-<!--
-        ##############
-        # other morphs (not user controlled)
-        ##############
-        -->
       <param
-       shared="1"
-       id="41"
+       id="125"
        group="1"
-       name="Old"
+       name="Shading"
+       wearable="skin"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_color>
+          <value
+           color="0, 0, 0, 0" />
+
+          <value
+           color="0, 0, 0, 128" />
+        </param_color>
       </param>
+    </layer>
+
+    <layer
+     name="highlight">
+      <texture
+       tga_file="upperbody_highlights_alpha.tga"
+       file_is_mask="TRUE" />
 
-<!--
-        ##############
-        # animatable morphs
-        ##############
-         -->
       <param
-       shared="1"
-       id="58"
+       id="126"
        group="1"
-       name="Blink_Left"
+       wearable="skin"
+       name="Shading"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_color>
+          <value
+           color="255, 255, 255, 0" />
+
+          <value
+           color="255, 255, 255, 64" />
+        </param_color>
       </param>
+    </layer>
+
+    <layer
+     name="upper_bodypaint">
+      <texture
+       local_texture="upper_bodypaint" />
+    </layer>
 
+    <layer
+     name="freckles upper"
+     fixed_color="120,47,20,128">
       <param
-       shared="1"
-       id="59"
+       id="776"
        group="1"
-       name="Blink_Right"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
-   </mesh>
-
-<!--
-    #headMesh2 =
-    #headMesh3 =
-    -->
-   <mesh
-    type="upperBodyMesh"
-	lod="0"
-    file_name="avatar_upper_body.llm"
-    min_pixel_width="320">
-<!--
-        #begin morph targets
-        #############
-        # tweakable morphs
-        #############
-        -->
-      <param
-       id="104"
-       group="1"
-       name="Big_Belly_Torso"
+       name="freckles upper"
+       wearable="skin"
        value_min="0"
        value_max="1">
-         <param_morph>
-		 	<volume_morph
-				name="BELLY"
-				scale="0.075 0.04 0.03"
-				pos="0.07 0 -0.07"/>
-		</param_morph>
+        <param_alpha
+         tga_file="upperbodyfreckles_alpha.tga"
+         skip_if_zero="true"
+         domain="0.6" />
       </param>
+    </layer>
 
-      <param
-       id="626"
-       sex="female"
-       group="1"
-       name="Big_Chest"
-       label="Chest Size"
-       wearable="shape"
-       edit_group="shape_torso"
-       label_min="Small"
-       label_max="Large"
-       value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance="1"
-       camera_angle="15">
-         <param_morph />
-      </param>
+    <layer
+     name="upper_tattoo">
+      <texture
+         local_texture="upper_tattoo" />
+    </layer>
+
+
+    <layer
+     name="upper_undershirt bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="upper_undershirt"
+       local_texture_alpha_only="true" />
 
       <param
-       id="627"
-       sex="female"
+       id="1043"
        group="1"
-       name="Small_Chest"
-       label="Chest Size"
-       wearable="shape"
-       edit_group="shape_torso"
-       label_min="Large"
-       label_max="Small"
-       value_min="0"
+       wearable="undershirt"
+       edit_group="driven"
+       name="Sleeve Length bump"
+       value_min=".01"
        value_max="1"
-       camera_elevation="0"
-       camera_distance=".28">
-         <param_morph />
+       value_default=".4">
+        <param_alpha
+         tga_file="shirt_sleeve_alpha.tga"
+         multiply_blend="false"
+         domain="0.01" />
       </param>
 
       <param
-       id="843"
-       sex="female"
+       id="1045"
        group="1"
-       name="No_Chest"
-       label="Chest Size"
-       wearable="shape"
-       edit_group="shape_torso"
-       label_min="Some"
-       label_max="None"
+       wearable="undershirt"
+       edit_group="undershirt"
+       edit_group_order="2"
+       name="Bottom bump"
        value_min="0"
        value_max="1"
-       camera_elevation="0"
-       camera_distance=".28">
-         <param_morph />
+       value_default=".8">
+        <param_alpha
+         tga_file="shirt_bottom_alpha.tga"
+         multiply_blend="true"
+         domain="0.05" />
       </param>
 
       <param
-       id="106"
-       group="1"
-       name="Muscular_Torso"
-       label="Torso Muscles"
-	   show_simple="true"
-       wearable="shape"
-       edit_group="shape_torso"
-       label_min="Regular"
-       label_max="Muscular"
-       value_min="0"
-       value_max="1.4"
-       camera_elevation=".3"
-       camera_distance="1.2">
-         <param_morph>
-		 	<volume_morph
-				name="L_CLAVICLE"
-				scale="0.02 0.0 0.005"
-				pos="0.0 0 0.005"/>
-		 	<volume_morph
-				name="L_UPPER_ARM"
-				scale="0.015 0.0 0.005"
-				pos="0.015 0 0"/>
-		 	<volume_morph
-				name="L_LOWER_ARM"
-				scale="0.005 0.0 0.005"
-				pos="0.005 0 0"/>
-		 	<volume_morph
-				name="R_CLAVICLE"
-				scale="0.02 0.0 0.005"
-				pos="0.0 0 0.005"/>
-		 	<volume_morph
-				name="R_UPPER_ARM"
-				scale="0.015 0.0 0.005"
-				pos="0.015 0 0"/>
-		 	<volume_morph
-				name="R_LOWER_ARM"
-				scale="0.005 0.0 0.005"
-				pos="0.005 0 0"/>
-		 </param_morph>
-      </param>
-
-      <param
-       id="648"
-       group="1"
-       sex="female"
-       name="Scrawny_Torso"
-       label="Torso Muscles"
-	   show_simple="true"
-       wearable="shape"
-       edit_group="shape_torso"
-       label_min="Regular"
-       label_max="Scrawny"
-       value_min="0"
-       value_max="1.3"
-       camera_elevation=".3"
-       camera_distance="1.2">
-		<param_morph>
-		 	<volume_morph
-				name="BELLY"
-				scale="0.0 -0.01 0.0"
-				pos="0.0 0.0 0"/>
-		 	<volume_morph
-				name="CHEST"
-				scale="-0.01 -0.01 0.0"
-				pos="0.01 0.0 0"/>
-		 	<volume_morph
-				name="L_CLAVICLE"
-				scale="0.0 -0.03 -0.005"
-				pos="0.0 0 -0.005"/>
-		 	<volume_morph
-				name="L_UPPER_ARM"
-				scale="-0.01 -0.01 -0.02"
-				pos="0 0 0"/>
-		 	<volume_morph
-				name="L_LOWER_ARM"
-				scale="-0.005 0.0 -0.01"
-				pos="-0.005 0 0"/>
-		 	<volume_morph
-				name="R_CLAVICLE"
-				scale="0.0 -0.03 -0.005"
-				pos="0.0 0 -0.005"/>
-		 	<volume_morph
-				name="R_UPPER_ARM"
-				scale="-0.01 -0.01 -0.02"
-				pos="0 0 0"/>
-		 	<volume_morph
-				name="R_LOWER_ARM"
-				scale="-0.005 0.0 -0.01"
-				pos="-0.005 0 0"/>
-		</param_morph>
-	  </param>
-
-      <param
-       id="677"
-       group="1"
-       sex="male"
-       name="Scrawny_Torso_Male"
-       label="Torso Scrawny"
-       wearable="shape"
-       edit_group="shape_torso"
-       label_min="Regular"
-       label_max="Scrawny"
-       value_min="0"
-       value_max="1.3"
-       camera_elevation=".3"
-       camera_distance="1.2">
-		<param_morph>
-		 	<volume_morph
-				name="BELLY"
-				scale="-0.01 -0.01 0.0"
-				pos="0.01 0.0 0"/>
-		 	<volume_morph
-				name="CHEST"
-				scale="-0.02 -0.02 0.0"
-				pos="0.01 0.0 0"/>
-		 	<volume_morph
-				name="L_CLAVICLE"
-				scale="0.0 -0.03 -0.005"
-				pos="0.0 0 -0.005"/>
-		 	<volume_morph
-				name="L_UPPER_ARM"
-				scale="-0.01 -0.01 -0.02"
-				pos="0 0 0"/>
-		 	<volume_morph
-				name="L_LOWER_ARM"
-				scale="-0.005 0.0 -0.01"
-				pos="-0.005 0 0"/>
-		 	<volume_morph
-				name="R_CLAVICLE"
-				scale="0.0 -0.03 -0.005"
-				pos="0.0 0 -0.005"/>
-		 	<volume_morph
-				name="R_UPPER_ARM"
-				scale="-0.01 -0.01 -0.02"
-				pos="0 0 0"/>
-		 	<volume_morph
-				name="R_LOWER_ARM"
-				scale="-0.005 0.0 -0.01"
-				pos="-0.005 0 0"/>
-		</param_morph>
-	  </param>
-
-      <param
-       id="634"
+       id="1047"
        group="1"
-       name="Fat_Torso"
-       label="Fat Torso"
-       wearable="shape"
-       edit_group="shape_body"
-       label_min="skinny"
-       label_max="fat"
+       wearable="undershirt"
+       edit_group="driven"
+       name="Collar Front bump"
        value_min="0"
        value_max="1"
-       camera_elevation=".3">
-         <param_morph>
-			<volume_morph
-				name="CHEST"
-				scale="0.02 0.03 0.03"
-				pos="0 0 -0.03"/>
-			<volume_morph
-				name="BELLY"
-				scale="0.09 0.08 0.07"
-				pos="0 0 -0.05"/>
-			<volume_morph
-				name="L_CLAVICLE"
-				scale="0.0 0.0 0.015"/>
-			<volume_morph
-				name="L_UPPER_ARM"
-				scale="0.02 0.0 0.02"
-				pos="0.0 0.0 -0.02"/>
-			<volume_morph
-				name="L_LOWER_ARM"
-				scale="0.01 0.0 0.01"
-				pos="0.0 0.0 -0.01"/>
-			<volume_morph
-				name="R_CLAVICLE"
-				scale="0.0 0.0 0.015"/>
-			<volume_morph
-				name="R_UPPER_ARM"
-				scale="0.02 0.0 0.02"
-				pos="0.0 0.0 -0.02"/>
-			<volume_morph
-				name="R_LOWER_ARM"
-				scale="0.01 0.0 0.01"
-				pos="0.0 0.0 -0.01"/>
-			<volume_morph
-				name="NECK"
-				scale="0.015 0.01 0.0"/>
-			<volume_morph
-				name="HEAD"
-				scale="0.0 0.0 0.01"
-				pos="0 0 -0.01"/>
-		 </param_morph>
-
-      </param>
-
-      <param
-       id="507"
-       group="0"
-       sex="female"
-       name="Breast_Gravity"
-       label="Breast Buoyancy"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="7"
-       label_min="Less Gravity"
-       label_max="More Gravity"
-       value_default="0"
-       value_min="-1.5"
-       value_max="2"
-       camera_elevation=".3"
-       camera_distance=".8">
-         <param_morph />
+       value_default=".8">
+        <param_alpha
+         tga_file="shirt_collar_alpha.tga"
+         multiply_blend="true"
+         domain="0.05" />
       </param>
 
       <param
-       id="628"
+       id="1049"
        group="1"
-       name="Displace_Loose_Upperbody"
-       label="Shirt Fit"
-       wearable="shirt"
+       wearable="undershirt"
        edit_group="driven"
-       clothing_morph="true"
+       name="Collar Back bump"
        value_min="0"
        value_max="1"
-       value_default="0">
-         <param_morph />
+       value_default=".8">
+        <param_alpha
+         tga_file="shirt_collar_back_alpha.tga"
+         multiply_blend="true"
+         domain="0.05" />
       </param>
+    </layer>
+
+    <layer
+     name="upper_undershirt">
+      <texture
+       local_texture="upper_undershirt" />
 
       <param
-       id="840"
+       id="821"
        group="0"
-       name="Shirtsleeve_flair"
-       label="Sleeve Looseness"
-	   show_simple="true"
-       wearable="shirt"
-       edit_group="shirt"
-       edit_group_order="6"
-       clothing_morph="true"
-       label_min="Tight Sleeves"
-       label_max="Loose Sleeves"
+       wearable="undershirt"
+       edit_group="colorpicker"
+       name="undershirt_red"
        value_min="0"
-       value_max="1.5"
-       camera_distance="1.8"
-       camera_angle="30"
-       camera_elevation="-.3">
-         <param_morph />
-      </param>
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-      <param
-       id="855"
-       group="1"
-       name="Love_Handles"
-       value_default="0"
-       value_min="-1"
-       value_max="2">
-         <param_morph>
-		 	<volume_morph
-				name="BELLY"
-				scale="0.0 0.02 0.0"/>
-		</param_morph>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="684"
+       id="822"
        group="0"
-       sex="female"
-       name="Breast_Female_Cleavage"
-       label="Breast Cleavage"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="8"
-       label_min="Separate"
-       label_max="Join"
-       value_default="0"
-       value_min="-.3"
-       value_max="1.3"
-       camera_elevation=".3"
-       camera_distance=".8">
-         <param_morph />
-      </param>
+       wearable="undershirt"
+       edit_group="colorpicker"
+       name="undershirt_green"
+       value_min="0"
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-      <param
-       id="685"
-       group="0"
-       sex="male"
-       name="Chest_Male_No_Pecs"
-       label="Pectorals"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="5"
-       label_min="Big Pectorals"
-       label_max="Sunken Chest"
-       value_default="0"
-       value_min="-.5"
-       value_max="1.1"
-       camera_elevation=".3"
-       camera_distance="1.2">
-         <param_morph />
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
-<!-- ############# # 
-  other morphs (not user controlled) 
-  ############# -->
       <param
-       id="100"
-       group="1"
-       name="Male_Torso"
-       label_min="Male_Torso"
-       value_min="0"
-       value_max="1">
-        <param_morph>
-			<volume_morph
-				name="CHEST"
-				scale="0.03 0.04 0.02"
-				pos="-0.03 0 -0.01"/>
-			<volume_morph
-				name="BELLY"
-				scale="0.03 0.03 0.0"
-				pos="-0.03 0 0.02"/>
-			<volume_morph
-				name="L_CLAVICLE"
-				scale="0.02 0.0 0.01"
-				pos="-0.02 0 0"/>
-			<volume_morph
-				name="L_UPPER_ARM"
-				scale="0.01 0.0 0.01"
-				pos="0.0 0.0 -0.01"/>
-			<volume_morph
-				name="L_LOWER_ARM"
-				scale="0.005 0.0 0.005"
-				pos="0.0 0.0 -0.005"/>
-			<volume_morph
-				name="R_CLAVICLE"
-				scale="0.02 0.0 0.01"
-				pos="-0.02 0 0"/>
-			<volume_morph
-				name="R_UPPER_ARM"
-				scale="0.01 0.0 0.01"
-				pos="0.0 0.0 -0.01"/>
-			<volume_morph
-				name="R_LOWER_ARM"
-				scale="0.005 0.0 0.005"
-				pos="0.0 0.0 -0.005"/>
-			<volume_morph
-				name="NECK"
-				scale="0.015 0.01 0.0"/>
-			<volume_morph
-				name="HEAD"
-				scale="0.0 0.0 0.01"
-				pos="0 0 -0.01"/>
-		 </param_morph>
-	</param>
-
-<!--
-        ##############
-        # animatable morphs
-        ##############
-        -->
-      <param
-       id="101"
-       group="1"
-       name="Hands_Relaxed"
+       id="823"
+       group="0"
+       wearable="undershirt"
+       edit_group="colorpicker"
+       name="undershirt_blue"
        value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-      <param
-       id="102"
-       group="1"
-       name="Hands_Point"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="103"
+       id="1042"
        group="1"
-       name="Hands_Fist"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+       wearable="undershirt"
+       edit_group="driven"
+       name="Sleeve Length"
+       value_min=".01"
+       value_max="1"
+       value_default=".4">
+        <param_alpha
+         tga_file="shirt_sleeve_alpha.tga"
+         multiply_blend="false"
+         domain="0.01" />
       </param>
 
       <param
-       id="666"
+       id="1044"
        group="1"
-       name="Hands_Relaxed_L"
+       wearable="undershirt"
+       edit_group="driven"
+       name="Bottom"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default=".8">
+        <param_alpha
+         tga_file="shirt_bottom_alpha.tga"
+         multiply_blend="true"
+         domain="0.05" />
       </param>
 
       <param
-       id="667"
+       id="1046"
        group="1"
-       name="Hands_Point_L"
+       wearable="undershirt"
+       edit_group="driven"
+       name="Collar Front"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default=".8">
+        <param_alpha
+         tga_file="shirt_collar_alpha.tga"
+         multiply_blend="true"
+         domain="0.05" />
       </param>
 
       <param
-       id="668"
+       id="1048"
        group="1"
-       name="Hands_Fist_L"
+       wearable="undershirt"
+       edit_group="driven"
+       name="Collar Back"
+       label_min="Low"
+       label_max="High"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default=".8">
+        <param_alpha
+         tga_file="shirt_collar_back_alpha.tga"
+         multiply_blend="true"
+         domain="0.05" />
       </param>
+    </layer>
 
+    <layer
+     name="Nail Polish">
       <param
-       id="669"
-       group="1"
-       name="Hands_Relaxed_R"
+       id="710"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="15"
+       name="Nail Polish"
+       label_min="No Polish"
+       label_max="Painted Nails"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default="0.0"
+       camera_distance="1.6"
+       camera_elevation="-.4"
+       camera_angle="70">
+        <param_alpha
+         tga_file="nailpolish_alpha.tga"
+         skip_if_zero="true"
+         domain="0.1" />
       </param>
 
       <param
-       id="670"
-       group="1"
-       name="Hands_Point_R"
+       id="715"
+       group="0"
+       wearable="skin"
+       edit_group="skin_makeup"
+       edit_group_order="16"
+       name="Nail Polish Color"
+       label_min="Pink"
+       label_max="Black"
        value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+       value_max="1"
+       camera_distance="1.6"
+       camera_elevation="-.4"
+       camera_angle="70">
+        <param_color>
+          <value
+           color="255,187,200,255" />
 
-      <param
-       id="671"
-       group="1"
-       name="Hands_Fist_R"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+          <value
+           color="194,102,127,255" />
 
-      <param
-       id="672"
-       group="1"
-       name="Hands_Typing"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+          <value
+           color="227,34,99,255" />
 
-      <param
-       id="766"
-       group="1"
-       name="Hands_Salute_R"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+          <value
+           color="168,41,60,255" />
+
+          <value
+           color="97,28,59,255" />
+
+          <value
+           color="234,115,93,255" />
+
+          <value
+           color="142,58,47,255" />
+
+          <value
+           color="114,30,46,255" />
+
+          <value
+           color="14,14,14,255" />
+        </param_color>
       </param>
+    </layer>
+
+    <layer
+     name="upper_gloves bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="upper_gloves"
+       local_texture_alpha_only="true" />
 
       <param
-       id="791"
+       id="1059"
        group="1"
-       name="Hands_Peace_R"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+       wearable="gloves"
+       edit_group="driven"
+       name="Glove Length bump"
+       value_min=".01"
+       value_max="1"
+       value_default=".8">
+        <param_alpha
+         tga_file="glove_length_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="792"
+       id="1061"
        group="1"
-       name="Hands_Spread_R"
-       value_min="0"
-       value_max="1">
-         <param_morph />
+       wearable="gloves"
+       edit_group="driven"
+       name="Glove Fingers bump"
+       value_min=".01"
+       value_max="1"
+       value_default="1">
+        <param_alpha
+         tga_file="gloves_fingers_alpha.tga"
+         multiply_blend="true"
+         domain="0.01" />
       </param>
+    </layer>
 
-<!--
-     #end morph targets
-      -->
-   </mesh>
-
-   <mesh
-    type="upperBodyMesh"
-	lod="1"
-    file_name="avatar_upper_body_1.llm"
-    min_pixel_width="160"
-    reference="avatar_upper_body.llm">
-   </mesh>
-
-   <mesh
-    type="upperBodyMesh"
-	lod="2"
-    file_name="avatar_upper_body_2.llm"
-    min_pixel_width="80"
-    reference="avatar_upper_body.llm">
-   </mesh>
-
-   <mesh
-    type="upperBodyMesh"
-	lod="3"
-    file_name="avatar_upper_body_3.llm"
-    min_pixel_width="40"
-    reference="avatar_upper_body.llm">
-   </mesh>
-
-   <mesh
-    type="upperBodyMesh"
-	lod="4"
-    file_name="avatar_upper_body_4.llm"
-	min_pixel_width="0"
-    reference="avatar_upper_body.llm">
-   </mesh>
-
-<!--
-    #upperBodyMesh2 =
-    #upperBodyMesh3 =
-    -->
-   <mesh
-    type="lowerBodyMesh"
-	lod="0"
-    file_name="avatar_lower_body.llm"
-    min_pixel_width="320">
-<!--
-        #begin morph targets
-        #############
-        # tweakable morphs
-        #############
-        -->
-      <param
-       id="156"
-       group="1"
-       name="Big_Belly_Legs"
-       value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
+    <layer
+     name="upper_gloves">
+      <texture
+       local_texture="upper_gloves" />
 
       <param
-       id="151"
-       group="1"
-       name="Big_Butt_Legs"
-       label="Butt Size"
-       wearable="shape"
-       edit_group="shape_legs"
-       label_min="Regular"
-       label_max="Large"
+       id="827"
+       group="0"
+       wearable="gloves"
+       edit_group="colorpicker"
+       name="gloves_red"
        value_min="0"
-       value_max="1">
-         <param_morph>
-		 	<volume_morph
-				name="PELVIS"
-				scale="0.03 0.0 0.02"
-				pos="-0.03 0 -0.025"/>
-		 </param_morph>
-      </param>
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-      <param
-       id="794"
-       group="1"
-       name="Small_Butt"
-       label="Butt Size"
-       wearable="shape"
-       edit_group="shape_legs"
-       label_min="Regular"
-       label_max="Small"
-       value_min="0"
-       value_max="1">
-         <param_morph>
- 		 	<volume_morph
-				name="PELVIS"
-				scale="-0.01 0.0 0.0"
-				pos="0.01 0 0.0"/>
-		 </param_morph>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="152"
-       group="1"
-       name="Muscular_Legs"
-       label="Leg Muscles"
-	   show_simple="true"
-       wearable="shape"
-       edit_group="shape_legs"
-       label_min="Regular Muscles"
-       label_max="More Muscles"
-       value_min="0"
-       value_max="1.5"
-       camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_morph>
-		 	<volume_morph
-				name="L_UPPER_LEG"
-				scale="0.015 0.015 0.0"
-				pos="0.0 0 0.0"/>
-		 	<volume_morph
-				name="L_LOWER_LEG"
-				scale="0.01 0.01 0.0"
-				pos="0.0 0 0.0"/>
-		 	<volume_morph
-				name="R_UPPER_LEG"
-				scale="0.015 0.015 0.0"
-				pos="0.0 0 0.0"/>
-		 	<volume_morph
-				name="R_LOWER_LEG"
-				scale="0.01 0.01 0.0"
-				pos="0.0 0 0.0"/>
-		 </param_morph>
-      </param>
-
-      <param
-       id="651"
-       group="1"
-       name="Scrawny_Legs"
-       label="Scrawny Leg"
-       wearable="shape"
-       edit_group="shape_legs"
-       label_min="Regular Muscles"
-       label_max="Less Muscles"
-       value_min="0"
-       value_max="1.5"
-       camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_morph>
-		 	<volume_morph
-				name="L_UPPER_LEG"
-				scale="-0.03 -0.03 0.0"
-				pos="0.0 0 0.0"/>
-		 	<volume_morph
-				name="L_LOWER_LEG"
-				scale="-0.015 -0.015 0.0"
-				pos="0.0 0 0.0"/>
-		 	<volume_morph
-				name="R_UPPER_LEG"
-				scale="-0.03 -0.03 0.0"
-				pos="0.0 0 0.0"/>
-		 	<volume_morph
-				name="R_LOWER_LEG"
-				scale="-0.015 -0.015 0.0"
-				pos="0.0 0 0.0"/>
-		 </param_morph>
-		</param>
-
-      <param
-       id="853"
-       group="1"
-       name="Bowed_Legs"
-       label="Knee Angle"
-       wearable="shape"
-       value_min="-1"
-       value_max="1">
-         <param_morph>
-		 	<volume_morph
-				name="L_UPPER_LEG"
-				pos="0.0 0.03 0.0"/>
-		 	<volume_morph
-				name="L_LOWER_LEG"
-				pos="0.0 0.03 0.0"/>
-		 	<volume_morph
-				name="R_UPPER_LEG"
-				pos="0.0 -0.03 0.0"/>
-		 	<volume_morph
-				name="R_LOWER_LEG"
-				pos="0.0 -0.03 0.0"/>
-		 </param_morph>
-      </param>
-
-      <param
-       id="500"
-       group="1"
-       name="Shoe_Heel_Height"
-       label="Heel Height"
-       wearable="shoes"
-       edit_group="shoes"
-       label_min="Low Heels"
-       label_max="High Heels"
+       id="829"
+       group="0"
+       wearable="gloves"
+       edit_group="colorpicker"
+       name="gloves_green"
        value_min="0"
        value_max="1"
-       camera_distance="1.5"
-       camera_elevation="-.5">
-         <param_morph />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
+
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="501"
-       group="1"
-       name="Shoe_Platform_Height"
-       label="Platform Height"
-       wearable="shoes"
-       edit_group="shoes"
-       label_min="Low Platforms"
-       label_max="High Platforms"
+       id="830"
+       group="0"
+       wearable="gloves"
+       edit_group="colorpicker"
+       name="gloves_blue"
        value_min="0"
        value_max="1"
-       camera_distance="1.5"
-       camera_elevation="-.5">
-         <param_morph />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
+
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="508"
-       group="0"
-       name="Shoe_Platform_Width"
-       label="Platform Width"
-       wearable="shoes"
-       edit_group="shoes"
-       edit_group_order="7"
-       label_min="Narrow"
-       label_max="Wide"
-       value_min="-1"
-       value_max="2"
-       camera_angle="15"
-       camera_distance="1.5"
-       camera_elevation="-1">
-         <param_morph />
+       id="1058"
+       group="1"
+       wearable="gloves"
+       edit_group="driven"
+       name="Glove Length"
+       value_min=".01"
+       value_max="1"
+       value_default=".8">
+        <param_alpha
+         tga_file="glove_length_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="509"
+       id="1060"
        group="1"
-       name="Shoe_Heel_Point"
-       label="Heel Shape"
-       wearable="shoes"
-       edit_group="shoes"
-       label_min="Default Heels"
-       label_max="Pointy Heels"
-       value_min="0"
+       wearable="gloves"
+       edit_group="driven"
+       name="Glove Fingers"
+       value_min=".01"
        value_max="1"
-       camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_morph />
+       value_default="1">
+        <param_alpha
+         tga_file="gloves_fingers_alpha.tga"
+         multiply_blend="true"
+         domain="0.01" />
       </param>
+    </layer>
+
+    <layer
+     name="upper_clothes_shadow">
+      <texture
+       local_texture="upper_shirt" />
 
       <param
-       id="510"
+       id="899"
        group="1"
-       name="Shoe_Heel_Thick"
-       label="Heel Shape"
-       wearable="shoes"
-       edit_group="shoes"
-       label_min="default Heels"
-       label_max="Thick Heels"
+       edit_group="driven"
+       wearable="shirt"
+       name="Upper Clothes Shading"
        value_min="0"
        value_max="1"
-       camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_morph />
+       value_default="0">
+        <param_color>
+          <value
+           color="0, 0, 0, 0" />
+
+          <value
+           color="0, 0, 0, 80" />
+        </param_color>
       </param>
 
       <param
-       id="511"
+       id="900"
        group="1"
-       name="Shoe_Toe_Point"
-       label="Toe Shape"
-       wearable="shoes"
-       edit_group="shoes"
-       label_min="Default Toe"
-       label_max="Pointy Toe"
-       value_min="0"
-       value_max="1"
-       camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_morph />
+       wearable="shirt"
+       edit_group="driven"
+       name="Sleeve Length Shadow"
+       value_min="0.02"
+       value_max=".87"
+       value_default="0.02">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="shirt_sleeve_alpha.tga"
+         skip_if_zero="true"
+         domain="0.03" />
       </param>
 
       <param
-       id="512"
+       id="901"
        group="1"
-       name="Shoe_Toe_Square"
-       label="Toe Shape"
-       wearable="shoes"
-       edit_group="shoes"
-       label_min="Default Toe"
-       label_max="Square Toe"
-       value_min="0"
-       value_max="1"
-       camera_distance="1.5"
-       camera_elevation="-.5">
-         <param_morph />
+       wearable="shirt"
+       edit_group="driven"
+       name="Shirt Shadow Bottom"
+       value_min="0.02"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_bottom_alpha.tga"
+         skip_if_zero="true"
+         domain="0.05" />
       </param>
 
       <param
-       id="654"
-       group="0"
-       name="Shoe_Toe_Thick"
-       label="Toe Thickness"
-       wearable="shoes"
-       edit_group="shoes"
-       edit_group_order="5"
-       label_min="Flat Toe"
-       label_max="Thick Toe"
-       value_min="0"
-       value_max="2"
-       camera_angle="15"
-       camera_distance="1.5"
-       camera_elevation="-1">
-         <param_morph />
+       id="902"
+       group="1"
+       wearable="shirt"
+       edit_group="driven"
+       name="Collar Front Shadow Height"
+       value_min="0.02"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_alpha.tga"
+         skip_if_zero="true"
+         domain="0.02" />
       </param>
 
       <param
-       id="515"
-       group="0"
-       name="Foot_Size"
-       label="Foot Size"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="6"
-       label_min="Small"
-       label_max="Big"
-       value_min="-1"
-       value_max="3"
-       camera_angle="45"
-       camera_distance="1.1"
-       camera_elevation="-1">
-         <param_morph>
-		 	<volume_morph
-				name="L_FOOT"
-				scale="0.02 0.01 0.0"
-				pos="0.01 0 0"/>
-		 	<volume_morph
-				name="R_FOOT"
-				scale="0.02 0.01 0.0"
-				pos="0.01 0 0"/>
-		</param_morph>
-	  </param>
-
-      <param
-       id="516"
+       id="903"
        group="1"
-       name="Displace_Loose_Lowerbody"
-       label="Pants Fit"
-       wearable="pants"
+       wearable="shirt"
        edit_group="driven"
-       clothing_morph="true"
-       value_min="0"
-       value_max="1"
-       value_default="0">
-         <param_morph />
+       name="Collar Back Shadow Height"
+       value_min="0.02"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_back_alpha.tga"
+         skip_if_zero="true"
+         domain="0.02" />
       </param>
+    </layer>
+
+    <layer
+     name="upper_shirt base bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="upper_shirt"
+       local_texture_alpha_only="true" />
 
       <param
-       id="625"
-       group="0"
-       name="Leg_Pantflair"
-       label="Cuff Flare"
-	   show_simple="true"
-       wearable="pants"
-       edit_group="pants"
-       edit_group_order="3"
-       clothing_morph="true"
-       label_min="Tight Cuffs"
-       label_max="Flared Cuffs"
+       id="1029"
+       group="1"
+       wearable="shirt"
+       edit_group="driven"
+       name="Sleeve Length Cloth"
        value_min="0"
-       value_max="1.5"
-       camera_distance="1.8"
-       camera_angle="30"
-       camera_elevation="-.3">
-         <param_morph />
+       value_max="0.85">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="shirt_sleeve_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="793"
+       id="1030"
        group="1"
-       name="Leg_Longcuffs"
-       label="Longcuffs"
-       wearable="pants"
+       wearable="shirt"
        edit_group="driven"
-       clothing_morph="true"
+       name="Shirt Bottom Cloth"
        value_min="0"
-       value_max="3"
-       value_default="0">
-         <param_morph />
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_bottom_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="638"
-       group="0"
-       name="Low_Crotch"
-       label="Pants Crotch"
-       wearable="pants"
-       clothing_morph="true"
-       edit_group="pants"
-       edit_group_order="4"
-       label_min="High and Tight"
-       label_max="Low and Loose"
+       id="1031"
+       group="1"
+       wearable="shirt"
+       edit_group="driven"
+       name="Collar Front Height Cloth"
        value_min="0"
-       value_max="1.3"
-       camera_distance="1.2"
-       camera_angle="-20"
-       camera_elevation="-.3">
-         <param_morph />
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="635"
+       id="1032"
        group="1"
-       name="Fat_Legs"
-       label="Fat Torso"
-       wearable="shape"
-       edit_group="shape_body"
-       label_min="skinny"
-       label_max="fat"
+       wearable="shirt"
+       edit_group="driven"
+       name="Collar Back Height Cloth"
        value_min="0"
        value_max="1">
-         <param_morph>
-			<volume_morph
-				name="PELVIS"
-				scale="0.03 0.06 0.0"/>
-		 	<volume_morph
-				name="R_UPPER_LEG"
-				scale="0.02 0.02 0.0"
-				pos="0.0 -0.02 0.0"/>
-			<volume_morph
-				name="R_LOWER_LEG"
-				scale="0.01 0.01 0.0"/>
-		 	<volume_morph
-				name="L_UPPER_LEG"
-				scale="0.02 0.02 0.0"
-				pos="0.0 0.02 0.0"/>
-			<volume_morph
-				name="L_LOWER_LEG"
-				scale="0.01 0.01 0.0"/>
-		</param_morph>
-      </param>
-
-      <param
-       id="854"
-       group="1"
-       name="Saddlebags"
-       value_min="-.5"
-       value_max="3">
-        <param_morph>
-		 	<volume_morph
-				name="PELVIS"
-				scale="0.0 0.025 0.0"/>
-		</param_morph>
-
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_back_alpha.tga"
+         domain="0.05" />
       </param>
+    </layer>
+
+    <layer
+     name="upper_clothes bump"
+     render_pass="bump">
+      <texture
+       tga_file="bump_shirt_wrinkles.tga" />
+
+      <texture
+       local_texture="upper_shirt"
+       local_texture_alpha_only="true" />
 
       <param
-       id="879"
+       id="868"
        group="0"
-       sex="male"
-       name="Male_Package"
-       label="Package"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="4.6"
-       label_min="Coin Purse"
-       label_max="Duffle Bag"
-       value_default="0"
-       value_min="-.5"
-       value_max="2"
-       camera_angle="60"
-       camera_distance=".6">
-         <param_morph />
+       wearable="shirt"
+       edit_group="shirt"
+       edit_group_order="8"
+       name="Shirt Wrinkles"
+       value_min="0"
+       value_max="1"
+       value_default="0">
+        <param_color>
+          <value
+           color="255, 255, 255, 0" />
+
+          <value
+           color="255, 255, 255, 255" />
+        </param_color>
       </param>
 
-<!--
-        #############
-        # other morphs (not user controlled)
-        #############
-        -->
       <param
-       id="153"
+       id="1013"
        group="1"
-       name="Male_Legs"
+       wearable="shirt"
+       edit_group="driven"
+       name="Sleeve Length Cloth"
        value_min="0"
-       value_max="1">
-         <param_morph />
-      </param>
-
-<!--
-        #end morph targets
-        -->
-   </mesh>
-
-   <mesh
-    type="lowerBodyMesh"
-	lod="1"
-    file_name="avatar_lower_body_1.llm"
-    min_pixel_width="160"
-    reference="avatar_lower_body.llm">
-   </mesh>
-
-   <mesh
-    type="lowerBodyMesh"
-	lod="2"
-    file_name="avatar_lower_body_2.llm"
-    min_pixel_width="80"
-    reference="avatar_lower_body.llm">
-   </mesh>
-
-   <mesh
-    type="lowerBodyMesh"
-	lod="3"
-    file_name="avatar_lower_body_3.llm"
-    min_pixel_width="40"
-    reference="avatar_lower_body.llm">
-   </mesh>
-
-   <mesh
-    type="lowerBodyMesh"
-	lod="4"
-    file_name="avatar_lower_body_4.llm"
-	min_pixel_width="0"
-    reference="avatar_lower_body.llm">
-   </mesh>
-
-<!--
-    #lowerBodyMesh2 =
-    #lowerBodyMesh3 =
-    -->
-<!--
-    #eyeLidLeftMesh =
-    -->
-   <mesh
-    type="eyeBallLeftMesh"
-	lod="0"
-    file_name="avatar_eye.llm"
-    min_pixel_width="320">
-<!-- begin morph_params -->
-      <param
-       id="679"
-       group="1"
-       name="Eyeball_Size"
-       label="Eyeball Size"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".10">
-         <param_morph />
+       value_max="0.85">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="shirt_sleeve_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="687"
+       id="1014"
        group="1"
-       name="Eyeball_Size"
-       label="Big Eyeball"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".25">
-         <param_morph />
-      </param>
-   </mesh>
-
-   <mesh
-    type="eyeBallLeftMesh"
-	lod="1"
-    file_name="avatar_eye_1.llm"
-    min_pixel_width="80">
-<!-- begin morph_params -->
-      <param
-       id="694"
-       group="1"
-       name="Eyeball_Size"
-       label="Eyeball Size"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".10">
-         <param_morph />
+       wearable="shirt"
+       edit_group="driven"
+       name="Shirt Bottom Cloth"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_bottom_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="695"
-       group="1"
-       name="Eyeball_Size"
-       label="Big Eyeball"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".25">
-         <param_morph />
-      </param>
-   </mesh>
-
-<!--
-    #eyeLidRightMesh =
-    -->
-   <mesh
-    type="eyeBallRightMesh"
-	lod="0"
-    file_name="avatar_eye.llm"
-    min_pixel_width="320">
-<!-- begin morph_params -->
-      <param
-       id="680"
+       id="1015"
        group="1"
-       name="Eyeball_Size"
-       label="Eyeball Size"
-       wearable="shape"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".10">
-         <param_morph />
+       wearable="shirt"
+       edit_group="driven"
+       name="Collar Front Height Cloth"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="688"
-       group="1"
-       name="Eyeball_Size"
-       label="Big Eyeball"
-       wearable="shape"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".25">
-         <param_morph />
-      </param>
-   </mesh>
-
-   <mesh
-    type="eyeBallRightMesh"
-	lod="1"
-    file_name="avatar_eye_1.llm"
-    min_pixel_width="80">
-<!-- begin morph_params -->
-      <param
-       id="681"
+       id="1016"
        group="1"
-       name="Eyeball_Size"
-       label="Eyeball Size"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".10">
-         <param_morph />
+       wearable="shirt"
+       edit_group="driven"
+       name="Collar Back Height Cloth"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_back_alpha.tga"
+         domain="0.05" />
       </param>
+    </layer>
 
-      <param
-       id="691"
-       group="1"
-       name="Eyeball_Size"
-       label="Big Eyeball"
-       wearable="shape"
-       edit_group="shape_eyes"
-       label_min="small eye"
-       label_max="big eye"
-       value_min="-.25"
-       value_max=".25">
-         <param_morph />
-      </param>
-   </mesh>
+    <layer
+     name="upper_clothes">
+      <texture
+       local_texture="upper_shirt" />
 
-   <mesh
-    type="skirtMesh"
-	lod="0"
-    file_name="avatar_skirt.llm"
-    min_pixel_width="320">
       <param
-       id="845"
-       group="1"
-       name="skirt_poofy"
-       label="poofy skirt"
-       clothing_morph="true"
-       wearable="skirt"
-       edit_group="skirt"
-       label_min="less poofy"
-       label_max="more poofy"
+       id="803"
+       group="0"
+       wearable="shirt"
+       edit_group="colorpicker"
+       name="shirt_red"
        value_min="0"
-       value_max="1.5">
-         <param_morph />
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
+
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="846"
-       group="1"
-       name="skirt_loose"
-       label="loose skirt"
-       clothing_morph="true"
-       wearable="skirt"
-       edit_group="skirt"
-       label_min="form fitting"
-       label_max="loose"
+       id="804"
+       group="0"
+       wearable="shirt"
+       edit_group="colorpicker"
+       name="shirt_green"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
+
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="866"
-       group="1"
-       name="skirt_tight"
-       label="tight skirt"
-       clothing_morph="true"
-       wearable="skirt"
-       edit_group="skirt"
-       label_min="form fitting"
-       label_max="loose"
+       id="805"
+       group="0"
+       wearable="shirt"
+       edit_group="colorpicker"
+       name="shirt_blue"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
+
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="867"
+       id="600"
        group="1"
-       name="skirt_smallbutt"
-       label="tight skirt"
-       clothing_morph="false"
-       wearable="skirt"
-       edit_group="skirt"
-       label_min="form fitting"
-       label_max="loose"
+       wearable="shirt"
+       edit_group="driven"
+       name="Sleeve Length Cloth"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="0.85"
+       value_default=".7">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="shirt_sleeve_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="848"
-       group="0"
-       name="skirt_bustle"
-       label="bustle skirt"
-       clothing_morph="true"
-       wearable="skirt"
-       edit_group_order="3"
-       edit_group="skirt"
-       label_min="no bustle"
-       label_max="more bustle"
+       id="601"
+       group="1"
+       wearable="shirt"
+       edit_group="driven"
+       name="Shirt Bottom Cloth"
        value_min="0"
-       value_max="2"
-       value_default=".2"
-       camera_angle="100"
-       camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_morph />
+       value_max="1"
+       value_default=".8">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_bottom_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="847"
+       id="602"
        group="1"
-       name="skirt_bowlegs"
-       label="legs skirt"
-       wearable="skirt"
-       value_min="-1"
+       wearable="shirt"
+       edit_group="driven"
+       name="Collar Front Height Cloth"
+       value_min="0"
        value_max="1"
-       value_default="0">
-	     <param_morph />
-	  </param>
+       value_default=".8">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_alpha.tga"
+         domain="0.05" />
+      </param>
 
       <param
-       id="852"
+       id="778"
        group="1"
-       name="skirt_bigbutt"
-       label="bigbutt skirt"
-       label_min="less"
-       label_max="more"
+       wearable="shirt"
+       edit_group="driven"
+       name="Collar Back Height Cloth"
        value_min="0"
-       value_max="1">
-         <param_morph />
+       value_max="1"
+       value_default=".8">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_back_alpha.tga"
+         domain="0.05" />
       </param>
+    </layer>
+
+    <layer
+     name="upper_jacket base bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="upper_jacket"
+       local_texture_alpha_only="true" />
 
       <param
-       id="849"
+       id="1039"
        group="1"
-       name="skirt_belly"
-       label="big belly skirt"
+       wearable="jacket"
+       edit_group="driven"
+       edit_group_order="1"
+       name="Jacket Sleeve Length bump"
        value_min="0"
        value_max="1">
-         <param_morph />
+        <param_alpha
+         multiply_blend="false"
+         tga_file="shirt_sleeve_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="850"
+       id="1040"
        group="1"
-       name="skirt_saddlebags"
-       value_min="-.5"
-       value_max="3">
-         <param_morph />
+       wearable="jacket"
+       edit_group="driven"
+       name="Jacket Collar Front bump"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="851"
+       id="1041"
        group="1"
-       name="skirt_chubby"
-       label_min="less"
-       label_max="more"
+       wearable="jacket"
+       edit_group="driven"
+       edit_group_order="3.5"
+       name="Jacket Collar Back bump"
        value_min="0"
-       value_max="1"
-       value_default="0">
-         <param_morph />
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_back_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="856"
+       id="1037"
        group="1"
-       name="skirt_lovehandles"
-       label_min="less"
-       label_max="more"
-       value_min="-1"
-       value_max="2"
-       value_default="0">
-         <param_morph />
+       wearable="jacket"
+       edit_group="driven"
+       name="jacket bottom length upper bump"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_length_upper_alpha.tga"
+         domain="0.01" />
       </param>
 
-<!--
-        #############
-        # other morphs (not user controlled)
-        #############
-        -->
       <param
-       id="857"
+       id="1038"
        group="1"
-       name="skirt_male"
+       wearable="jacket"
+       edit_group="driven"
+       name="jacket open upper bump"
        value_min="0"
        value_max="1">
-         <param_morph />
-      </param>
-   </mesh>
-
-   <mesh
-    type="skirtMesh"
-	lod="1"
-    file_name="avatar_skirt_1.llm"
-    min_pixel_width="160"
-    reference="avatar_skirt.llm">
-   </mesh>
-
-   <mesh
-    type="skirtMesh"
-	lod="2"
-    file_name="avatar_skirt_2.llm"
-    min_pixel_width="80"
-    reference="avatar_skirt.llm">
-   </mesh>
-
-   <mesh
-    type="skirtMesh"
-	lod="3"
-    file_name="avatar_skirt_3.llm"
-    min_pixel_width="40"
-    reference="avatar_skirt.llm">
-   </mesh>
-
-   <mesh
-    type="skirtMesh"
-	lod="4"
-    file_name="avatar_skirt_4.llm"
-	min_pixel_width="0"
-    reference="avatar_skirt.llm">
-   </mesh>
-
-<!-- =========================================================== -->
-   <global_color
-    name="skin_color">
-      <param
-       id="111"
-       group="0"
-       wearable="skin"
-       edit_group="skin_color"
-       edit_group_order="1"
-       name="Pigment"
-	   show_simple="true"
-       label_min="Light"
-       label_max="Dark"
-       value_min="0"
-       value_max="1"
-       value_default=".5">
-         <param_color>
-            <value
-             color="252, 215, 200, 255" />
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_open_upper_alpha.tga"
+         domain="0.01" />
+      </param>
+    </layer>
+
+    <layer
+     name="upper_jacket bump"
+     render_pass="bump">
+      <texture
+       tga_file="bump_shirt_wrinkles.tga" />
 
-            <value
-             color="240, 177, 112, 255" />
+      <texture
+       local_texture="upper_jacket"
+       local_texture_alpha_only="true" />
+          
 
-            <value
-             color="90, 40, 16, 255" />
+      <param
+      id="875"
+      group="1"
+      wearable="jacket"
+      name="jacket upper Wrinkles"
+      value_min="0"
+      value_max="1"
+      value_default="0">
+        <param_color>
+          <value
+           color="255, 255, 255, 0" />
 
-            <value
-             color="29, 9, 6, 255" />
-         </param_color>
+          <value
+           color="255, 255, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="110"
-       group="0"
-       wearable="skin"
-       edit_group="skin_color"
-       edit_group_order="2"
-       name="Red Skin"
-       label="Ruddiness"
-       label_min="Pale"
-       label_max="Ruddy"
+       id="1019"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       edit_group_order="1"
+       name="Jacket Sleeve Length bump"
        value_min="0"
-       value_max="0.1">
-         <param_color
-          operation="blend">
-            <value
-             color="218, 41, 37, 255" />
-         </param_color>
+       value_max="1">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="shirt_sleeve_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="108"
-       group="0"
-       wearable="skin"
-       edit_group="skin_color"
-       edit_group_order="3"
-       name="Rainbow Color"
-	   show_simple="true"
-       label_min="None"
-       label_max="Wild"
+       id="1021"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       name="Jacket Collar Front bump"
        value_min="0"
-       value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5">
-         <param_color>
-            <value
-             color=" 0, 0, 0, 255" />
-
-            <value
-             color="255, 0, 255, 255" />
-
-            <value
-             color="255, 0, 0, 255" />
-
-            <value
-             color="255, 255, 0, 255" />
-
-            <value
-             color=" 0, 255, 0, 255" />
-
-            <value
-             color=" 0, 255, 255, 255" />
-
-            <value
-             color=" 0, 0, 255, 255" />
-
-            <value
-             color="255, 0, 255, 255" />
-         </param_color>
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_alpha.tga"
+         domain="0.05" />
       </param>
-   </global_color>
 
-<!-- =========================================================== -->
-   <global_color
-    name="hair_color">
       <param
-       id="114"
-       group="0"
-       wearable="hair"
-       edit_group="hair_color"
-       edit_group_order="3"
-       name="Blonde Hair"
-	   show_simple="true"
-       label_min="Black"
-       label_max="Blonde"
+       id="1023"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       edit_group_order="3.5"
+       name="Jacket Collar Back bump"
        value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5">
-         <param_color>
-            <value
-             color="0, 0, 0, 255" />
-
-            <value
-             color="22, 6, 6, 255" />
-
-            <value
-             color="29, 9, 6, 255" />
-
-            <value
-             color="45, 21, 11, 255" />
-
-            <value
-             color="78, 39, 11, 255" />
-
-            <value
-             color="90, 53, 16, 255" />
-
-            <value
-             color="136, 92, 21, 255" />
-
-            <value
-             color="150, 106, 33, 255" />
-
-            <value
-             color="198, 156, 74, 255" />
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_back_alpha.tga"
+         domain="0.05" />
+      </param>
 
-            <value
-             color="233, 192, 103, 255" />
+      <param
+       id="1025"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       name="jacket bottom length upper bump"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_length_upper_alpha.tga"
+         domain="0.01" />
+      </param>
 
-            <value
-             color="238, 205, 136, 255" />
-         </param_color>
+      <param
+       id="1026"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       name="jacket open upper bump"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_open_upper_alpha.tga"
+         domain="0.01" />
       </param>
+    </layer>
+
+    <layer
+     name="upper_jacket">
+      <texture
+       local_texture="upper_jacket" />
 
       <param
-       id="113"
-       group="0"
-       wearable="hair"
-       edit_group="hair_color"
-       edit_group_order="4"
-       name="Red Hair"
-	   show_simple="true"
-       label_min="No Red"
-       label_max="Very Red"
+       id="831"
+       group="1"
+       edit_group="colorpicker_driven"
+       wearable="jacket"
+       name="upper_jacket_red"
        value_min="0"
        value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5">
-         <param_color>
-            <value
-             color="0, 0, 0, 255" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <value
-             color="118, 47, 19, 255" />
-         </param_color>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="115"
-       group="0"
-       wearable="hair"
-       edit_group="hair_color"
-       edit_group_order="1"
-       name="White Hair"
-	   show_simple="true"
-       label_min="No White"
-       label_max="All White"
+       id="832"
+       group="1"
+       edit_group="colorpicker_driven"
+       wearable="jacket"
+       name="upper_jacket_green"
        value_min="0"
        value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5">
-         <param_color>
-            <value
-             color="0, 0, 0, 255" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <value
-             color="255, 255, 255, 255" />
-         </param_color>
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="112"
-       group="0"
-       wearable="hair"
-       edit_group="hair_color"
-       edit_group_order="2"
-       name="Rainbow Color"
-	   show_simple="true"
-       label_min="None"
-       label_max="Wild"
+       id="833"
+       group="1"
+       edit_group="colorpicker_driven"
+       wearable="jacket"
+       name="upper_jacket_blue"
        value_min="0"
        value_max="1"
-       camera_elevation=".1"
-       camera_distance=".5">
-         <param_color>
-            <value
-             color=" 0, 0, 0, 255" />
-
-            <value
-             color="255, 0, 255, 255" />
-
-            <value
-             color="255, 0, 0, 255" />
-
-            <value
-             color="255, 255, 0, 255" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <value
-             color=" 0, 255, 0, 255" />
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
+      </param>
 
-            <value
-             color=" 0, 255, 255, 255" />
+      <param
+       id="1020"
+       group="1"
+ edit_group="driven"
+ wearable="jacket"
+       name="jacket Sleeve Length" value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="shirt_sleeve_alpha.tga"
+         domain="0.01" />
+      </param>
 
-            <value
-             color=" 0, 0, 255, 255" />
+      <param
+       id="1022"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       name="jacket Collar Front"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_alpha.tga"
+         domain="0.05" />
+      </param>
 
-            <value
-             color="255, 0, 255, 255" />
-         </param_color>
+      <param
+       id="1024"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       edit_group_order="3.5"
+       name="jacket Collar Back"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="shirt_collar_back_alpha.tga"
+         domain="0.05" />
       </param>
-   </global_color>
 
-<!-- =========================================================== -->
-   <global_color
-    name="eye_color">
       <param
-       id="99"
-       group="0"
-       wearable="eyes"
-       edit_group="eyes"
-       edit_group_order="1"
-       name="Eye Color"
-	   show_simple="true"
-       label_min="Natural"
-       label_max="Unnatural"
+       id="620"
+       group="1"
+       wearable="jacket"
+       edit_group="jacket"
+       name="bottom length upper"
+       label_min="hi cut"
+       label_max="low cut"
        value_min="0"
        value_max="1"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".3">
-<!-- default to natural brown eyes-->
-         <param_color>
-            <value
-             color="50, 25, 5, 255" />
-
-<!-- natural dark brown eyes-->
-            <value
-             color="109, 55, 15, 255" />
-
-<!-- natural brown eyes-->
-            <value
-             color="150, 93, 49, 255" />
-
-<!-- natural light brown eyes-->
-            <value
-             color="152, 118, 25, 255" />
-
-<!--natural hazel eyes-->
-            <value
-             color="95, 179, 107, 255" />
-
-<!--natural green eyes-->
-            <value
-             color="87, 192, 191, 255" />
-
-<!--natural aqua eyes-->
-            <value
-             color="95, 172, 179, 255" />
-
-<!--natural blue eyes-->
-            <value
-             color="128, 128, 128, 255" />
-
-<!--natural grey eyes-->
-            <value
-             color="0, 0, 0, 255" />
-
-<!--black eyes-->
-            <value
-             color="255, 255, 0, 255" />
-
-<!--bright yellow eyes-->
-            <value
-             color=" 0, 255, 0, 255" />
-
-<!-- bright green eyes-->
-            <value
-             color=" 0, 255, 255, 255" />
-
-<!-- bright cyan eyes-->
-            <value
-             color=" 0, 0, 255, 255" />
-
-<!--bright blue eyes-->
-            <value
-             color="255, 0, 255, 255" />
-
-<!-- bright violet eyes-->
-            <value
-             color="255, 0, 0, 255" />
-
-<!--bright red eyes-->
-         </param_color>
+       value_default=".8"
+       camera_distance="1.2"
+       camera_angle="30"
+       camera_elevation=".2">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_length_upper_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="98"
-       group="0"
-       wearable="eyes"
-       edit_group="eyes"
-       edit_group_order="2"
-       name="Eye Lightness"
-	   show_simple="true"
-       label_min="Darker"
-       label_max="Lighter"
+       id="622"
+       group="1"
+       wearable="jacket"
+       edit_group="jacket"
+       name="open upper"
+       label_min="closed"
+       label_max="open"
        value_min="0"
        value_max="1"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_color>
-            <value
-             color="0, 0, 0, 0" />
-
-            <value
-             color="255, 255, 255, 255" />
-         </param_color>
+       value_default=".8"
+       camera_distance="1.2"
+       camera_angle="30"
+       camera_elevation=".2">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_open_upper_alpha.tga"
+         domain="0.01" />
       </param>
-   </global_color>
-
-<!-- =========================================================== -->
-  <layer_set
-    body_region="hair"
-    width="512"
-    height="512"
-    clear_alpha="false">
-    <layer
-      name="base"
-      global_color="hair_color"
-      write_all_channels="true">
-      <texture
-       local_texture="hair_grain" />
     </layer>
 
     <layer
-       name="hair alpha"
-       visibility_mask="TRUE">
+     name="upper alpha"
+     visibility_mask="TRUE">
       <texture
-         local_texture="hair_alpha" />
+       local_texture="upper_alpha" />
     </layer>
 
   </layer_set>
-  <!-- =========================================================== -->
 
+  <!-- =========================================================== -->
   <layer_set
-    body_region="head"
-    width="512"
-    height="512"
-	clear_alpha="false"
-    alpha_tga_file="head_alpha.tga">
-		<layer
-		   name="head bump base"
-		   fixed_color = "128,128,128,255"
-		   render_pass="bump">
-		</layer>
-
-      <layer
-       name="head bump definition"
-       render_pass="bump">
-         
-		 <texture
-          tga_file="bump_head_base.tga" 
-		  file_is_mask="FALSE"/>
-
-         <param
-          id="873"
-          group="1"
-          wearable="skin"
-          edit_group="driven"
-          edit_group_order="12"
-          name="Bump base"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             domain="0" />
-         </param>
-      </layer>
-
-      <layer
-       name="base"
-       global_color="skin_color">
-         <texture
-          tga_file="head_skingrain.tga" />
-      </layer>
-
-      <layer
-       name="headcolor">
-         <texture
-          tga_file="head_color.tga" />
-      </layer>
-
-      <layer
-       name="shadow">
-         <texture
-          tga_file="head_shading_alpha.tga"
-          file_is_mask="TRUE" />
-
-         <param
-          id="158"
-          group="1"
-          wearable="skin"
-          name="Shading"
-          value_min="0"
-          value_max="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 0" />
-
-               <value
-                color="0, 0, 0, 128" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="highlight">
-                  <texture
-                    tga_file="head_highlights_alpha.tga"
-          file_is_mask="TRUE" />
-
-
-         <param
-                    id="159"
-                    group="1"
-                    name="Shading"
-                    wearable="skin"
-                    value_min="0"
-          value_max="1">
-                        <param_color>
-                              <value
-                color="255, 255, 255, 0" />
-
-
-               <value
-                color="255, 255, 255, 64" />
-                        </param_color>
-                  </param>
-            </layer>	  
-      <layer
-       name="rosyface">
-         <texture
-          tga_file="rosyface_alpha.tga"
-          file_is_mask="true" />
-
-         <param
-          id="116"
-          group="0"
-          wearable="skin"
-          edit_group="skin_facedetail"
-          edit_group_order="4"
-          name="Rosy Complexion"
-          label_min="Less Rosy"
-          label_max="More Rosy"
-          value_min="0"
-          value_max="1"
-          camera_distance=".3"
-          camera_elevation=".07">
-            <param_color>
-               <value
-                color="198, 71, 71, 0" />
-
-               <value
-                color="198, 71, 71, 255" />
-            </param_color>
-         </param>
-      </layer>
-
-	  <layer
-       name="lips">
-         <texture
-          tga_file="lips_mask.tga"
-          file_is_mask="true" />
-
-         <param
-          id="117"
-          group="0"
-          wearable="skin"
-          edit_group="skin_facedetail"
-          edit_group_order="5"
-          name="Lip Pinkness"
-          label_min="Darker"
-          label_max="Pinker"
-          value_min="0"
-          value_max="1"
-          camera_distance=".25">
-            <param_color>
-               <value
-                color="220, 115, 115, 0" />
-
-               <value
-                color="220, 115, 115, 128" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="wrinkles_shading"
-       render_pass="bump"
-       fixed_color="0,0,0,100">
-         <param
-          id="118"
-          group="1"
-          wearable="skin"
-          name="Wrinkles"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="bump_face_wrinkles.tga"
-             skip_if_zero="true"
-             domain="0.3" />
-         </param>
-      </layer>
-
-<!--<layer
-       name="wrinkles_highlights"
-       fixed_color="255,255,255,64">
-         <param
-          id="128"
-          group="1"
-          name="Wrinkles"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="head_wrinkles_highlights_alpha.tga"
-             skip_if_zero="true"
-             domain="0.3" />
-         </param>
-      </layer>-->
-      <layer
-              name="freckles"
-       fixed_color="120,47,20,128">
-                  <param
-                    id="165"
-                    group="0"
-                    wearable="skin"
-                    edit_group="skin_facedetail"
-                    edit_group_order="2"
-                    name="Freckles"
-                    label_min="Less"
-                    label_max="More"
-                    value_min="0"
-                    value_max="1"
-                    camera_distance=".3"
-          camera_elevation=".07">
-                        <param_alpha
-                          tga_file="freckles_alpha.tga"
-                          skip_if_zero="true"
-             domain="0.5" />
-                  </param>
-            </layer>
-            <layer
-       name="eyebrowsbump"
-       render_pass="bump">
-         <texture
-          tga_file="head_hair.tga"
-          file_is_mask="false" />
-
-         <param
-          id="1000"
-          group="1"
-          wearable="hair"
-          edit_group="driven"
-          name="Eyebrow Size Bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="eyebrows_alpha.tga"
-             domain="0.1" />
-         </param>
-
-         <param
-          id="1002"
-          group="1"
-          wearable="hair"
-          edit_group="driven"
-          name="Eyebrow Density Bump"
-          value_min="0"
-          value_max="1">
-            <param_color>
-               <value
-                color="255,255,255,0" />
-
-               <value
-                color="255,255,255,255" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="eyebrows"
-       global_color="hair_color">
-         <texture
-          tga_file="head_hair.tga"
-          file_is_mask="false" />
-
-         <param
-          id="1001"
-          group="1"
-          wearable="hair"
-          edit_group="hair_eyebrows"
-          name="Eyebrow Size"
-		  show_simple="true"
-          value_min="0"
-          value_max="1"
-          value_default="0.5">
-            <param_alpha
-             tga_file="eyebrows_alpha.tga"
-             domain="0.1" />
-         </param>
-
-         <param
-          id="1003"
-          group="1"
-          edit_group="driven"
-          name="Eyebrow Density"
-          value_min="0"
-          value_max="1">
-            <param_color
-             operation="multiply">
-               <value
-                color="255,255,255,0" />
-
-               <value
-                color="255,255,255,255" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="lipstick">
-         <param
-          id="700"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="2"
-          name="Lipstick Color"
-          label_min="Pink"
-          label_max="Black"
-          value_min="0"
-          value_max="1"
-          value_default=".25"
-          camera_distance=".25">
-            <param_color>
-               <value
-                color="245,161,177,200" />
-
-               <value
-                color="216,37,67,200" />
-
-               <value
-                color="178,48,76,200" />
-
-               <value
-                color="68,0,11,200" />
-
-               <value
-                color="252,207,184,200" />
-
-               <value
-                color="241,136,106,200" />
-
-               <value
-                color="208,110,85,200" />
-
-               <value
-                color="106,28,18,200" />
-
-               <value
-                color="58,26,49,200" />
-
-               <value
-                color="14,14,14,200" />
-            </param_color>
-         </param>
-
-         <param
-          id="701"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="1"
-          name="Lipstick"
-          label_min="No Lipstick"
-          label_max="More Lipstick"
-          value_min="0"
-          value_max=".9"
-          value_default="0.0"
-          camera_distance=".25">
-            <param_alpha
-             tga_file="lipstick_alpha.tga"
-             skip_if_zero="true"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="lipgloss"
-       fixed_color="255,255,255,190">
-         <param
-          id="702"
-          name="Lipgloss"
-          label_min="No Lipgloss"
-          label_max="Glossy"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="3"
-          group="0"
-          value_min="0"
-          value_max="1"
-          camera_distance=".25">
-            <param_alpha
-             tga_file="lipgloss_alpha.tga"
-             skip_if_zero="true"
-             domain="0.2" />
-         </param>
-      </layer>
-
-      <layer
-       name="blush">
-         <param
-          id="704"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="4"
-          name="Blush"
-          label_min="No Blush"
-          label_max="More Blush"
-          value_min="0"
-          value_max=".9"
-          value_default="0"
-          camera_distance=".3"
-          camera_elevation=".07"
-          camera_angle="20">
-            <param_alpha
-             tga_file="blush_alpha.tga"
-             skip_if_zero="true"
-             domain="0.3" />
-         </param>
-
-         <param
-          id="705"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="5"
-          name="Blush Color"
-          label_min="Pink"
-          label_max="Orange"
-          value_min="0"
-          value_max="1"
-          value_default=".5"
-          camera_distance=".3"
-          camera_elevation=".07"
-          camera_angle="20">
-            <param_color>
-               <value
-                color="253,162,193,200" />
-
-               <value
-                color="247,131,152,200" />
-
-               <value
-                color="213,122,140,200" />
-
-               <value
-                color="253,152,144,200" />
-
-               <value
-                color="236,138,103,200" />
-
-               <value
-                color="195,128,122,200" />
-
-               <value
-                color="148,103,100,200" />
-
-               <value
-                color="168,95,62,200" />
-            </param_color>
-         </param>
-
-         <param
-          id="711"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="6"
-          name="Blush Opacity"
-          label_min="Clear"
-          label_max="Opaque"
-          value_min="0"
-          value_max="1"
-          value_default=".5"
-          camera_distance=".3"
-          camera_elevation=".07"
-          camera_angle="20">
-            <param_color
-             operation="multiply">
-               <value
-                color="255,255,255,0" />
-
-               <value
-                color="255,255,255,255" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="Outer Eye Shadow">
-         <param
-          id="708"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="11"
-          name="Out Shdw Color"
-          label_min="Light"
-          label_max="Dark"
-          value_min="0"
-          value_max="1"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_color>
-               <value
-                color="252,247,246,255" />
-
-               <value
-                color="255,206,206,255" />
-
-               <value
-                color="233,135,149,255" />
-
-               <value
-                color="220,168,192,255" />
-
-               <value
-                color="228,203,232,255" />
-
-               <value
-                color="255,234,195,255" />
-
-               <value
-                color="230,157,101,255" />
-
-               <value
-                color="255,147,86,255" />
-
-               <value
-                color="228,110,89,255" />
-
-               <value
-                color="228,150,120,255" />
-
-               <value
-                color="223,227,213,255" />
-
-               <value
-                color="96,116,87,255" />
-
-               <value
-                color="88,143,107,255" />
-
-               <value
-                color="194,231,223,255" />
-
-               <value
-                color="207,227,234,255" />
-
-               <value
-                color="41,171,212,255" />
-
-               <value
-                color="180,137,130,255" />
-
-               <value
-                color="173,125,105,255" />
-
-               <value
-                color="144,95,98,255" />
-
-               <value
-                color="115,70,77,255" />
-
-               <value
-                color="155,78,47,255" />
-
-               <value
-                color="239,239,239,255" />
-
-               <value
-                color="194,194,194,255" />
-
-               <value
-                color="120,120,120,255" />
-
-               <value
-                color="10,10,10,255" />
-            </param_color>
-         </param>
-
-         <param
-          id="706"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="12"
-          name="Out Shdw Opacity"
-          label_min="Clear"
-          label_max="Opaque"
-          value_min=".2"
-          value_max="1"
-          value_default=".6"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_color
-             operation="multiply">
-               <value
-                color="255,255,255,0" />
-
-               <value
-                color="255,255,255,255" />
-            </param_color>
-         </param>
-
-         <param
-          id="707"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="10"
-          name="Outer Shadow"
-          label_min="No Eyeshadow"
-          label_max="More Eyeshadow"
-          value_min="0"
-          value_max=".7"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_alpha
-             tga_file="eyeshadow_outer_alpha.tga"
-             skip_if_zero="true"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="Inner Eye Shadow">
-         <param
-          id="712"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="8"
-          name="In Shdw Color"
-          label_min="Light"
-          label_max="Dark"
-          value_min="0"
-          value_max="1"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_color>
-               <value
-                color="252,247,246,255" />
-
-               <value
-                color="255,206,206,255" />
-
-               <value
-                color="233,135,149,255" />
-
-               <value
-                color="220,168,192,255" />
-
-               <value
-                color="228,203,232,255" />
-
-               <value
-                color="255,234,195,255" />
-
-               <value
-                color="230,157,101,255" />
-
-               <value
-                color="255,147,86,255" />
-
-               <value
-                color="228,110,89,255" />
-
-               <value
-                color="228,150,120,255" />
-
-               <value
-                color="223,227,213,255" />
-
-               <value
-                color="96,116,87,255" />
-
-               <value
-                color="88,143,107,255" />
-
-               <value
-                color="194,231,223,255" />
-
-               <value
-                color="207,227,234,255" />
-
-               <value
-                color="41,171,212,255" />
-
-               <value
-                color="180,137,130,255" />
-
-               <value
-                color="173,125,105,255" />
-
-               <value
-                color="144,95,98,255" />
-
-               <value
-                color="115,70,77,255" />
-
-               <value
-                color="155,78,47,255" />
-
-               <value
-                color="239,239,239,255" />
-
-               <value
-                color="194,194,194,255" />
-
-               <value
-                color="120,120,120,255" />
-
-               <value
-                color="10,10,10,255" />
-            </param_color>
-         </param>
-
-         <param
-          id="713"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="9"
-          name="In Shdw Opacity"
-          label_min="Clear"
-          label_max="Opaque"
-          value_min=".2"
-          value_max="1"
-          value_default=".7"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_color
-             operation="multiply">
-               <value
-                color="255,255,255,0" />
-
-               <value
-                color="255,255,255,255" />
-            </param_color>
-         </param>
-
-         <param
-          id="709"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="7"
-          name="Inner Shadow"
-          label_min="No Eyeshadow"
-          label_max="More Eyeshadow"
-          value_min="0"
-          value_max="1"
-          value_default="0"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_alpha
-             tga_file="eyeshadow_inner_alpha.tga"
-             skip_if_zero="true"
-             domain="0.2" />
-         </param>
-      </layer>
-
-      <layer
-       name="eyeliner"
-       fixed_color="0,0,0,200">
-         <param
-          id="703"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="13"
-          name="Eyeliner"
-          label_min="No Eyeliner"
-          label_max="Full Eyeliner"
-          value_min="0"
-          value_max="1"
-          value_default="0.0"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_alpha
-             tga_file="eyeliner_alpha.tga"
-             skip_if_zero="true"
-             domain="0.1" />
-         </param>
-
-         <param
-          id="714"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="14"
-          name="Eyeliner Color"
-          label_min="Dark Green"
-          label_max="Black"
-          value_min="0"
-          value_max="1"
-          camera_distance=".3"
-          camera_elevation=".14">
-            <param_color>
-               <value
-                color="24,98,40,250" />
-
-<!-- dark green -->
-               <value
-                color="9,100,127,250" />
-
-<!-- lt.aqua  blue -->
-               <value
-                color="61,93,134,250" />
-
-<!-- aqua  -->
-               <value
-                color="70,29,27,250" />
-
-<!--    dark brown -->
-               <value
-                color="115,75,65,250" />
-
-<!-- lt. brown  blue -->
-               <value
-                color="100,100,100,250" />
-
-<!-- grey -->
-               <value
-                color="91,80,74,250" />
-
-<!-- grey/brown  -->
-               <value
-                color="112,42,76,250" />
-
-<!-- plum -->
-               <value
-                color="14,14,14,250" />
-
-<!-- black -->
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="facialhair bump"
-       render_pass="bump">
-         <texture
-          tga_file="head_hair.tga"
-          file_is_mask="false" />
-
-         <param
-          id="1004"
-          sex="male"
-          group="1"
-          wearable="hair"
-          edit_group="driven"
-          name="Sideburns bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_sideburns_alpha.tga"
-             skip_if_zero="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1006"
-          sex="male"
-          group="1"
-          wearable="hair"
-          edit_group="driven"
-          name="Moustache bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_moustache_alpha.tga"
-             skip_if_zero="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1008"
-          sex="male"
-          group="1"
-          wearable="hair"
-          edit_group="driven"
-          name="Soulpatch bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_soulpatch_alpha.tga"
-             skip_if_zero="true"
-             domain="0.1" />
-         </param>
-
-         <param
-          id="1010"
-          sex="male"
-          group="1"
-          edit_group="driven"
-          wearable="hair"
-          name="Chin Curtains bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_chincurtains_alpha.tga"
-             skip_if_zero="true"
-             domain="0.03" />
-         </param>
-
-         <param
-          id="1012"
-          group="1"
-          sex="male"
-          wearable="hair"
-          edit_group="driven"
-          name="5 O'Clock Shadow bump"
-          value_min="0"
-          value_max="1">
-            <param_color>
-               <value
-                color="255,255,255,255" />
-
-               <value
-                color="255,255,255,0" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="facialhair"
-       global_color="hair_color">
-
-         <texture
-          tga_file="head_hair.tga"
-          file_is_mask="false" />
-
-         <param
-          id="1005"
-          sex="male"
-          group="1"
-          edit_group="driven"
-          name="Sideburns"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_sideburns_alpha.tga"
-             skip_if_zero="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1007"
-          sex="male"
-          group="1"
-          edit_group="driven"
-          name="Moustache"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_moustache_alpha.tga"
-             skip_if_zero="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1009"
-          sex="male"
-          group="1"
-          edit_group="driven"
-          name="Soulpatch"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_soulpatch_alpha.tga"
-             skip_if_zero="true"
-             domain="0.1" />
-         </param>
-
-         <param
-          id="1011"
-          sex="male"
-          group="1"
-          edit_group="driven"
-          name="Chin Curtains"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="facehair_chincurtains_alpha.tga"
-             skip_if_zero="true"
-             domain="0.03" />
-         </param>
-
-         <param
-          id="751"
-          group="1"
-          wearable="hair"
-          sex="male"
-          edit_group="hair_facial"
-          name="5 O'Clock Shadow"
-          label_min="Dense hair"
-          label_max="Shadow hair"
-          value_min="0"
-          value_max="1"
-          value_default="0.7"
-          camera_elevation=".1"
-          camera_distance=".3">
-            <param_color
-             operation="multiply">
-               <value
-                color="255,255,255,255" />
-
-               <value
-                color="255,255,255,30" />
-            </param_color>
-         </param>
-      </layer>
-
-   <layer
-       name="head_bodypaint">
-         <texture
-          local_texture="head_bodypaint" />
-      </layer>
-   <layer
-      name="head alpha"
-      visibility_mask="TRUE">
-     <texture
-        local_texture="head_alpha" />
-   </layer>
-   <layer
-      name="head_tattoo">
-     <texture
-        local_texture="head_tattoo" />
-   </layer>
-
-   </layer_set>
-
-<!-- =========================================================== -->
-   <layer_set
-    body_region="upper_body"
-    width="512"
-    height="512">
-      <layer
-       name="base_upperbody bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-      </layer>
-      <layer
-       name="upperbody bump definition"
-       render_pass="bump">
-   		 <texture
-          tga_file="bump_upperbody_base.tga" 
-		  file_is_mask="FALSE"/>
-
-         <param
-          id="874"
-          group="1"
-          wearable="skin"
-          edit_group="driven"
-          edit_group_order="20"
-          name="Bump upperdef"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             domain="0" />
-         </param>
-      </layer>
-
-      <layer
-       name="base"
-       global_color="skin_color">
-         <texture
-          tga_file="body_skingrain.tga" />
-      </layer>
-
-      <layer
-       name="nipples">
-         <texture
-          tga_file="upperbody_color.tga" />
-      </layer>
-
-      <layer
-       name="shadow">
-         <texture
-          tga_file="upperbody_shading_alpha.tga"
-          file_is_mask="TRUE" />
-
-         <param
-          id="125"
-          group="1"
-          name="Shading"
-          wearable="skin"
-          value_min="0"
-          value_max="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 0" />
-
-               <value
-                color="0, 0, 0, 128" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="highlight">
-         <texture
-          tga_file="upperbody_highlights_alpha.tga"
-          file_is_mask="TRUE" />
-
-         <param
-          id="126"
-          group="1"
-          wearable="skin"
-          name="Shading"
-          value_min="0"
-          value_max="1">
-            <param_color>
-               <value
-                color="255, 255, 255, 0" />
-
-               <value
-                color="255, 255, 255, 64" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="upper_bodypaint">
-         <texture
-          local_texture="upper_bodypaint" />
-      </layer>
-
-      <layer
-       name="freckles upper"
-       fixed_color="120,47,20,128">
-         <param
-          id="776"
-          group="1"
-          name="freckles upper"
-          wearable="skin"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="upperbodyfreckles_alpha.tga"
-             skip_if_zero="true"
-             domain="0.6" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_tattoo">
-        <texture
-           local_texture="upper_tattoo" />
-      </layer>
-
-
-      <layer
-       name="upper_undershirt bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="upper_undershirt"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1043"
-          group="1"
-          wearable="undershirt"
-          edit_group="driven"
-          name="Sleeve Length bump"
-          value_min=".01"
-          value_max="1"
-          value_default=".4">
-            <param_alpha
-             tga_file="shirt_sleeve_alpha.tga"
-             multiply_blend="false"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1045"
-          group="1"
-          wearable="undershirt"
-          edit_group="undershirt"
-          edit_group_order="2"
-          name="Bottom bump"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="shirt_bottom_alpha.tga"
-             multiply_blend="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1047"
-          group="1"
-          wearable="undershirt"
-          edit_group="driven"
-          name="Collar Front bump"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="shirt_collar_alpha.tga"
-             multiply_blend="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1049"
-          group="1"
-          wearable="undershirt"
-          edit_group="driven"
-          name="Collar Back bump"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="shirt_collar_back_alpha.tga"
-             multiply_blend="true"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_undershirt">
-         <texture
-          local_texture="upper_undershirt" />
-
-         <param
-          id="821"
-          group="0"
-          wearable="undershirt"
-          edit_group="colorpicker"
-          name="undershirt_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="822"
-          group="0"
-          wearable="undershirt"
-          edit_group="colorpicker"
-          name="undershirt_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="823"
-          group="0"
-          wearable="undershirt"
-          edit_group="colorpicker"
-          name="undershirt_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1042"
-          group="1"
-          wearable="undershirt"
-          edit_group="driven"
-          name="Sleeve Length"
-          value_min=".01"
-          value_max="1"
-          value_default=".4">
-            <param_alpha
-             tga_file="shirt_sleeve_alpha.tga"
-             multiply_blend="false"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1044"
-          group="1"
-          wearable="undershirt"
-          edit_group="driven"
-          name="Bottom"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="shirt_bottom_alpha.tga"
-             multiply_blend="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1046"
-          group="1"
-          wearable="undershirt"
-          edit_group="driven"
-          name="Collar Front"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="shirt_collar_alpha.tga"
-             multiply_blend="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1048"
-          group="1"
-          wearable="undershirt"
-          edit_group="driven"
-          name="Collar Back"
-          label_min="Low"
-          label_max="High"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="shirt_collar_back_alpha.tga"
-             multiply_blend="true"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="Nail Polish">
-         <param
-          id="710"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="15"
-          name="Nail Polish"
-          label_min="No Polish"
-          label_max="Painted Nails"
-          value_min="0"
-          value_max="1"
-          value_default="0.0"
-          camera_distance="1.6"
-          camera_elevation="-.4"
-          camera_angle="70">
-            <param_alpha
-             tga_file="nailpolish_alpha.tga"
-             skip_if_zero="true"
-             domain="0.1" />
-         </param>
-
-         <param
-          id="715"
-          group="0"
-          wearable="skin"
-          edit_group="skin_makeup"
-          edit_group_order="16"
-          name="Nail Polish Color"
-          label_min="Pink"
-          label_max="Black"
-          value_min="0"
-          value_max="1"
-          camera_distance="1.6"
-          camera_elevation="-.4"
-          camera_angle="70">
-            <param_color>
-               <value
-                color="255,187,200,255" />
-
-               <value
-                color="194,102,127,255" />
-
-               <value
-                color="227,34,99,255" />
-
-               <value
-                color="168,41,60,255" />
-
-               <value
-                color="97,28,59,255" />
-
-               <value
-                color="234,115,93,255" />
-
-               <value
-                color="142,58,47,255" />
-
-               <value
-                color="114,30,46,255" />
-
-               <value
-                color="14,14,14,255" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="upper_gloves bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="upper_gloves"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1059"
-          group="1"
-          wearable="gloves"
-          edit_group="driven"
-          name="Glove Length bump"
-          value_min=".01"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="glove_length_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1061"
-          group="1"
-          wearable="gloves"
-          edit_group="driven"
-          name="Glove Fingers bump"
-          value_min=".01"
-          value_max="1"
-          value_default="1">
-            <param_alpha
-             tga_file="gloves_fingers_alpha.tga"
-             multiply_blend="true"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_gloves">
-         <texture
-          local_texture="upper_gloves" />
-
-         <param
-          id="827"
-          group="0"
-          wearable="gloves"
-          edit_group="colorpicker"
-          name="gloves_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="829"
-          group="0"
-          wearable="gloves"
-          edit_group="colorpicker"
-          name="gloves_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="830"
-          group="0"
-          wearable="gloves"
-          edit_group="colorpicker"
-          name="gloves_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1058"
-          group="1"
-          wearable="gloves"
-          edit_group="driven"
-          name="Glove Length"
-          value_min=".01"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="glove_length_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1060"
-          group="1"
-          wearable="gloves"
-          edit_group="driven"
-          name="Glove Fingers"
-          value_min=".01"
-          value_max="1"
-          value_default="1">
-            <param_alpha
-             tga_file="gloves_fingers_alpha.tga"
-             multiply_blend="true"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_clothes_shadow">
-         <texture
-          local_texture="upper_shirt" />
-
-         <param
-          id="899"
-          group="1"
-          edit_group="driven"
-          wearable="shirt"
-          name="Upper Clothes Shading"
-          value_min="0"
-          value_max="1"
-          value_default="0">
-            <param_color>
-               <value
-                color="0, 0, 0, 0" />
-
-               <value
-                color="0, 0, 0, 80" />
-            </param_color>
-         </param>
-
-         <param
-          id="900"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Sleeve Length Shadow"
-          value_min="0.02"
-          value_max=".87"
-          value_default="0.02">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="shirt_sleeve_alpha.tga"
-             skip_if_zero="true"
-             domain="0.03" />
-         </param>
-
-         <param
-          id="901"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Shirt Shadow Bottom"
-          value_min="0.02"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_bottom_alpha.tga"
-             skip_if_zero="true"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="902"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Front Shadow Height"
-          value_min="0.02"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_alpha.tga"
-             skip_if_zero="true"
-             domain="0.02" />
-         </param>
-
-         <param
-          id="903"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Back Shadow Height"
-          value_min="0.02"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_back_alpha.tga"
-             skip_if_zero="true"
-             domain="0.02" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_shirt base bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="upper_shirt"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1029"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Sleeve Length Cloth"
-          value_min="0"
-          value_max="0.85">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="shirt_sleeve_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1030"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Shirt Bottom Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_bottom_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1031"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Front Height Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1032"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Back Height Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_back_alpha.tga"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_clothes bump"
-       render_pass="bump">
-         <texture
-          tga_file="bump_shirt_wrinkles.tga" />
-
-         <texture
-          local_texture="upper_shirt"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="868"
-          group="0"
-          wearable="shirt"
-          edit_group="shirt"
-          edit_group_order="8"
-          name="Shirt Wrinkles"
-          value_min="0"
-          value_max="1"
-          value_default="0">
-            <param_color>
-               <value
-                color="255, 255, 255, 0" />
-
-               <value
-                color="255, 255, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1013"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Sleeve Length Cloth"
-          value_min="0"
-          value_max="0.85">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="shirt_sleeve_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1014"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Shirt Bottom Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_bottom_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1015"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Front Height Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1016"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Back Height Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_back_alpha.tga"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_clothes">
-         <texture
-          local_texture="upper_shirt" />
-
-         <param
-          id="803"
-          group="0"
-          wearable="shirt"
-          edit_group="colorpicker"
-          name="shirt_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="804"
-          group="0"
-          wearable="shirt"
-          edit_group="colorpicker"
-          name="shirt_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="805"
-          group="0"
-          wearable="shirt"
-          edit_group="colorpicker"
-          name="shirt_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="600"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Sleeve Length Cloth"
-          value_min="0"
-          value_max="0.85"
-          value_default=".7">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="shirt_sleeve_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="601"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Shirt Bottom Cloth"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_bottom_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="602"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Front Height Cloth"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="778"
-          group="1"
-          wearable="shirt"
-          edit_group="driven"
-          name="Collar Back Height Cloth"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_back_alpha.tga"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_jacket base bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="upper_jacket"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1039"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          edit_group_order="1"
-          name="Jacket Sleeve Length bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="shirt_sleeve_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1040"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="Jacket Collar Front bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1041"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          edit_group_order="3.5"
-          name="Jacket Collar Back bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_back_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1037"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket bottom length upper bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_length_upper_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1038"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket open upper bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_open_upper_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_jacket bump"
-       render_pass="bump">
-         <texture
-          tga_file="bump_shirt_wrinkles.tga" />
-
-         <texture
-          local_texture="upper_jacket"
-          local_texture_alpha_only="true" />
-          
-          <param
-          id="875"
-          group="1"
-          wearable="jacket"
-          name="jacket upper Wrinkles"
-          value_min="0"
-          value_max="1"
-          value_default="0">
-            <param_color>
-               <value
-                color="255, 255, 255, 0" />
-
-               <value
-                color="255, 255, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1019"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          edit_group_order="1"
-          name="Jacket Sleeve Length bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="shirt_sleeve_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1021"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="Jacket Collar Front bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1023"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          edit_group_order="3.5"
-          name="Jacket Collar Back bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_back_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1025"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket bottom length upper bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_length_upper_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1026"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket open upper bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_open_upper_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper_jacket">
-         <texture
-          local_texture="upper_jacket" />
-
-         <param
-          id="831"
-          group="1"
-          edit_group="colorpicker_driven"
-          wearable="jacket"
-          name="upper_jacket_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="832"
-          group="1"
-          edit_group="colorpicker_driven"
-          wearable="jacket"
-          name="upper_jacket_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="833"
-          group="1"
-          edit_group="colorpicker_driven"
-          wearable="jacket"
-          name="upper_jacket_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1020"
-          group="1"
-          edit_group="driven"
-          name="jacket Sleeve Length"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="shirt_sleeve_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1022"
-          group="1"
-          edit_group="driven"
-          name="jacket Collar Front"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1024"
-          group="1"
-          edit_group="driven"
-          edit_group_order="3.5"
-          name="jacket Collar Back"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="shirt_collar_back_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="620"
-          group="1"
-          wearable="jacket"
-          edit_group="jacket"
-          name="bottom length upper"
-          label_min="hi cut"
-          label_max="low cut"
-          value_min="0"
-          value_max="1"
-          value_default=".8"
-          camera_distance="1.2"
-          camera_angle="30"
-          camera_elevation=".2">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_length_upper_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="622"
-          group="1"
-          wearable="jacket"
-          edit_group="jacket"
-          name="open upper"
-          label_min="closed"
-          label_max="open"
-          value_min="0"
-          value_max="1"
-          value_default=".8"
-          camera_distance="1.2"
-          camera_angle="30"
-          camera_elevation=".2">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_open_upper_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="upper alpha"
-       visibility_mask="TRUE">
-       <texture
-        local_texture="upper_alpha" />
-     </layer>
-
-   </layer_set>
-
-<!-- =========================================================== -->
-   <layer_set
-    body_region="lower_body"
-    width="512"
-    height="512">
-		<layer
-		   name="lower body bump base"
-		   fixed_color = "128,128,128,255"
-		   render_pass="bump">
-		</layer>
-      <layer
-       name="base_lowerbody bump"
-       render_pass="bump">
-         <texture
-          tga_file="bump_lowerbody_base.tga"
-		  file_is_mask="FALSE" />
-
-         <param
-          id="878"
-          group="1"
-          wearable="skin"
-          edit_group="driven"
-          edit_group_order="20"
-          name="Bump upperdef"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             domain="0" />
-         </param>
-      </layer>
-
-      <layer
-       name="base"
-       global_color="skin_color">
-         <texture
-          tga_file="body_skingrain.tga" />
-      </layer>
-
-      <layer
-       name="shadow">
-         <texture
-          tga_file="lowerbody_shading_alpha.tga"
-          file_is_mask="TRUE" />
-
-         <param
-          id="160"
-          group="1"
-          name="Shading"
-          wearable="pants"
-          value_min="0"
-          value_max="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 0" />
-
-               <value
-                color="0, 0, 0, 128" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="highlight">
-         <texture
-          tga_file="lowerbody_highlights_alpha.tga"
-          file_is_mask="TRUE" />
-
-         <param
-          id="161"
-          group="1"
-          name="Shading"
-          wearable="skin"
-          value_min="0"
-          value_max="1">
-            <param_color>
-               <value
-                color="255, 255, 255, 0" />
-
-               <value
-                color="255, 255, 255, 64" />
-            </param_color>
-         </param>
-      </layer>
-
-	  <layer
-       name="toenails">
-         <texture
-          tga_file="lowerbody_color.tga" />
-      </layer>
-
-      <layer
-       name="lower_bodypaint">
-         <texture
-          local_texture="lower_bodypaint" />
-      </layer>
-
-      <layer
-       name="freckles lower"
-       fixed_color="120,47,20,128">
-         <param
-          id="777"
-          group="1"
-          name="freckles lower"
-          wearable="skin"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="bodyfreckles_alpha.tga"
-             skip_if_zero="true"
-             domain="0.6" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_tattoo">
-         <texture
-          local_texture="lower_tattoo" />
-      </layer>
-
-      <layer
-       name="lower_underpants bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="lower_underpants"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1055"
-          group="1"
-          wearable="underpants"
-          edit_group="underpants"
-          name="Pants Length"
-          value_min="0"
-          value_max="1"
-          value_default=".3">
-            <param_alpha
-             tga_file="pants_length_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1057"
-          group="1"
-          wearable="underpants"
-          edit_group="underpants"
-          name="Pants Waist"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="pants_waist_alpha.tga"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_underpants">
-         <texture
-          local_texture="lower_underpants" />
-
-         <param
-          id="824"
-          group="0"
-          wearable="underpants"
-          edit_group="colorpicker"
-          name="underpants_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="825"
-          group="0"
-          wearable="underpants"
-          edit_group="colorpicker"
-          name="underpants_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="826"
-          group="0"
-          wearable="underpants"
-          edit_group="colorpicker"
-          name="underpants_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1054"
-          group="1"
-          wearable="underpants"
-          edit_group="driven"
-          name="Pants Length"
-          value_min="0"
-          value_max="1"
-          value_default=".3"
-          camera_distance="1.2"
-          camera_angle="30"
-          camera_elevation="-.3">
-            <param_alpha
-             tga_file="pants_length_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1056"
-          group="1"
-          wearable="underpants"
-          edit_group="driven"
-          name="Pants Waist"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="pants_waist_alpha.tga"
-             domain="0.05" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_socks bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="lower_socks"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1051"
-          group="1"
-          wearable="socks"
-          edit_group="driven"
-          name="Socks Length bump"
-          value_min="0"
-          value_max="1"
-          value_default="0.35">
-            <param_alpha
-             tga_file="shoe_height_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_socks">
-         <texture
-          local_texture="lower_socks" />
-
-         <param
-          id="818"
-          group="0"
-          wearable="socks"
-          edit_group="colorpicker"
-          name="socks_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="819"
-          group="0"
-          wearable="socks"
-          edit_group="colorpicker"
-          name="socks_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="820"
-          group="0"
-          wearable="socks"
-          edit_group="colorpicker"
-          name="socks_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1050"
-          group="1"
-          wearable="socks"
-          edit_group="driven"
-          name="Socks Length bump"
-          value_min="0"
-          value_max="1"
-          value_default="0.35">
-            <param_alpha
-             tga_file="shoe_height_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_shoes bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="lower_shoes"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1053"
-          group="1"
-          wearable="shoes"
-          edit_group="driven"
-          name="Shoe Height bump"
-          value_min="0"
-          value_max="1"
-          value_default="0.1">
-            <param_alpha
-             tga_file="shoe_height_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_shoes">
-         <texture
-          local_texture="lower_shoes" />
-
-         <param
-          id="812"
-          group="0"
-          wearable="shoes"
-          edit_group="colorpicker"
-          name="shoes_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="813"
-          group="0"
-          wearable="shoes"
-          edit_group="colorpicker"
-          name="shoes_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="817"
-          group="0"
-          wearable="shoes"
-          edit_group="colorpicker"
-          name="shoes_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1052"
-          group="1"
-          wearable="shoes"
-          edit_group="driven"
-          name="Shoe Height"
-          value_min="0"
-          value_max="1"
-          value_default="0.1">
-            <param_alpha
-             tga_file="shoe_height_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_clothes_shadow">
-         <texture
-          local_texture="lower_pants" />
-
-         <param
-          id="913"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Lower Clothes Shading"
-          value_min="0"
-          value_max="1"
-          value_default="0">
-            <param_color>
-               <value
-                color="0, 0, 0, 0" />
-
-               <value
-                color="0, 0, 0, 80" />
-            </param_color>
-         </param>
-
-         <param
-          id="914"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Waist Height Shadow"
-          value_min="0.02"
-          value_max="1">
-            <param_alpha
-             tga_file="pants_waist_alpha.tga"
-             skip_if_zero="true"
-             domain="0.04" />
-         </param>
-
-         <param
-          id="915"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Pants Length Shadow"
-          value_min="0.02"
-          value_max="1">
-            <param_alpha
-             tga_file="pants_length_alpha.tga"
-             skip_if_zero="true"
-             domain="0.03" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_pants base bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="lower_pants"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1035"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Waist Height Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="pants_waist_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1036"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Pants Length Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="pants_length_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_pants bump"
-       render_pass="bump">
-         <texture
-          tga_file="bump_pants_wrinkles.tga" />
-
-         <texture
-          local_texture="lower_pants"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="869"
-          group="0"
-          wearable="pants"
-          edit_group="pants"
-          edit_group_order="6"
-          name="Pants Wrinkles"
-          value_min="0"
-          value_max="1"
-          value_default="0">
-            <param_color>
-               <value
-                color="255, 255, 255, 0" />
-
-               <value
-                color="255, 255, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1017"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Waist Height Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="pants_waist_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="1018"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Pants Length Cloth"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             tga_file="pants_length_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_pants">
-         <texture
-          local_texture="lower_pants" />
-
-         <param
-          id="806"
-          group="0"
-          wearable="pants"
-          edit_group="colorpicker"
-          name="pants_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="807"
-          group="0"
-          wearable="pants"
-          edit_group="colorpicker"
-          name="pants_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="808"
-          group="0"
-          wearable="pants"
-          edit_group="colorpicker"
-          name="pants_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="614"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Waist Height Cloth"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="pants_waist_alpha.tga"
-             domain="0.05" />
-         </param>
-
-         <param
-          id="615"
-          group="1"
-          edit_group="driven"
-          wearable="pants"
-          name="Pants Length Cloth"
-          value_min="0"
-          value_max="1"
-          value_default=".8">
-            <param_alpha
-             tga_file="pants_length_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_jacket base bump"
-       render_pass="bump"
-       fixed_color="128,128,128,255">
-         <texture
-          local_texture="lower_jacket"
-          local_texture_alpha_only="true" />
-
-         <param
-          id="1033"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket bottom length lower bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="jacket_length_lower_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1034"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket open lower bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_open_lower_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_jacket bump"
+   body_region="lower_body"
+   width="512"
+   height="512">
+    <layer
+       name="lower body bump base"
+       fixed_color = "128,128,128,255"
        render_pass="bump">
-         <texture
-          tga_file="bump_pants_wrinkles.tga" />
+    </layer>
+    <layer
+     name="base_lowerbody bump"
+     render_pass="bump">
+      <texture
+       tga_file="bump_lowerbody_base.tga"
+   file_is_mask="FALSE" />
 
-         <texture
-          local_texture="lower_jacket"
-          local_texture_alpha_only="true" />
-          
-         <param
-          id="876"
-          group="1"
-          wearable="jacket"
-          name="jacket upper Wrinkles"
-          value_min="0"
-          value_max="1"
-          value_default="0">
-            <param_color>
-               <value
-                color="255, 255, 255, 0" />
-
-               <value
-                color="255, 255, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="1027"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket bottom length lower bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="jacket_length_lower_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="1028"
-          group="1"
-          wearable="jacket"
-          edit_group="driven"
-          name="jacket open lower bump"
-          value_min="0"
-          value_max="1">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_open_lower_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-       name="lower_jacket">
-         <texture
-          local_texture="lower_jacket" />
-
-         <param
-          id="809"
-          group="1"
-          edit_group="colorpicker_driven"
-          wearable="jacket"
-          name="lower_jacket_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="810"
-          group="1"
-          edit_group="colorpicker_driven"
-          wearable="jacket"
-          name="lower_jacket_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="811"
-          group="1"
-          edit_group="colorpicker_driven"
-          wearable="jacket"
-          name="lower_jacket_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="621"
-          group="1"
-          wearable="jacket"
-          edit_group="jacket"
-          name="bottom length lower"
-          label_min="hi cut"
-          label_max="low cut"
-          value_min="0"
-          value_max="1"
-          value_default=".8"
-          camera_distance="1.2"
-          camera_angle="30"
-          camera_elevation=".2">
-            <param_alpha
-             multiply_blend="false"
-             tga_file="jacket_length_lower_alpha.tga"
-             domain="0.01" />
-         </param>
-
-         <param
-          id="623"
-          group="1"
-          wearable="jacket"
-          edit_group="jacket"
-          name="open lower"
-          label_min="open"
-          label_max="closed"
-          value_min="0"
-          value_max="1"
-          value_default=".8"
-          camera_distance="1.2"
-          camera_angle="30"
-          camera_elevation=".2">
-            <param_alpha
-             multiply_blend="true"
-             tga_file="jacket_open_lower_alpha.tga"
-             domain="0.01" />
-         </param>
-      </layer>
-
-      <layer
-         name="lower alpha"
-         visibility_mask="TRUE">
-        <texture
-           local_texture="lower_alpha" />
-      </layer>
-
-   </layer_set>
-
-<!-- =========================================================== -->
-   <layer_set
-    body_region="eyes"
-    width="128"
-    height="128">
-      <layer
-       name="whites">
-         <texture
-          tga_file="eyewhite.tga" />
-      </layer>
-
-      <layer
-       name="iris"
-       global_color="eye_color">
-         <texture
-          local_texture="eyes_iris" />
-      </layer>
-
-     <layer
-        name="eyes alpha"
-        visibility_mask="TRUE">
-       <texture
-          local_texture="eyes_alpha" />
-     </layer>
-
-   </layer_set>
-
-<!-- =========================================================== -->
-   <layer_set
-    body_region="skirt"
-    width="512"
-    height="512"
-    clear_alpha="false">
-      <layer
-       name="skirt_fabric"
-       write_all_channels="true">
-         <texture
-          local_texture="skirt" />
-
-         <param
-          id="921"
-          group="0"
-          wearable="skirt"
-          edit_group="colorpicker"
-          name="skirt_red"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="255, 0, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="922"
-          group="0"
-          wearable="skirt"
-          edit_group="colorpicker"
-          name="skirt_green"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 255, 0, 255" />
-            </param_color>
-         </param>
-
-         <param
-          id="923"
-          group="0"
-          wearable="skirt"
-          edit_group="colorpicker"
-          name="skirt_blue"
-          value_min="0"
-          value_max="1"
-          value_default="1">
-            <param_color>
-               <value
-                color="0, 0, 0, 255" />
-
-               <value
-                color="0, 0, 255, 255" />
-            </param_color>
-         </param>
-      </layer>
-
-      <layer
-       name="skirt_fabric_alpha">
-         <param
-          id="858"
-          group="0"
-          wearable="skirt"
-          edit_group="skirt"
-          edit_group_order="1"
-          name="Skirt Length"
-		  show_simple="true"
-          label_min="Short"
-          label_max="Long"
-          value_min=".01"
-          value_max="1"
-          value_default=".4"
-		  simple_percent_min="40"
-		  simple_percent_max="100"
-          camera_distance="1.3"
-          camera_elevation="-.5"
-          camera_angle="30">
-            <param_alpha
-             tga_file="skirt_length_alpha.tga"
-             domain="0"
-             multiply_blend="true" />
-         </param>
-
-         <param
-          id="859"
-          group="0"
-          wearable="skirt"
-          edit_group="skirt"
-          edit_group_order="4"
-          name="Slit Front"
-          label_min="Open Front"
-          label_max="Closed Front"
-          value_min="0"
-          value_max="1"
-          value_default="1"
-          camera_distance="1.3"
-          camera_elevation="-.5"
-          camera_angle="30">
-            <param_alpha
-             tga_file="skirt_slit_front_alpha.tga"
-             multiply_blend="true"
-             domain="0" />
-         </param>
-
-         <param
-          id="860"
-          group="0"
-          wearable="skirt"
-          edit_group="skirt"
-          edit_group_order="5"
-          name="Slit Back"
-          label_min="Open Back"
-          label_max="Closed Back"
-          value_min="0"
-          value_max="1"
-          value_default="1"
-          camera_distance="1.3"
-          camera_elevation="-.5"
-          camera_angle="160">
-            <param_alpha
-             tga_file="skirt_slit_back_alpha.tga"
-             multiply_blend="true"
-             domain="0" />
-         </param>
-
-         <param
-          id="861"
-          group="0"
-          wearable="skirt"
-          edit_group="skirt"
-          edit_group_order="6"
-          name="Slit Left"
-          label_min="Open Left"
-          label_max="Closed Left"
-          value_min="0"
-          value_max="1"
-          value_default="1"
-          camera_distance="1.3"
-          camera_elevation="-.5"
-          camera_angle="30">
-            <param_alpha
-             tga_file="skirt_slit_left_alpha.tga"
-             multiply_blend="true"
-             domain="0" />
-         </param>
-
-         <param
-          id="862"
-          group="0"
-          wearable="skirt"
-          edit_group="skirt"
-          edit_group_order="7"
-          name="Slit Right"
-          label_min="Open Right"
-          label_max="Closed Right"
-          value_min="0"
-          value_max="1"
-          value_default="1"
-          camera_distance="1.3"
-          camera_elevation="-.5"
-          camera_angle="-30">
-            <param_alpha
-             tga_file="skirt_slit_right_alpha.tga"
-             multiply_blend="true"
-             domain="0" />
-         </param>
-      </layer>
-
-   </layer_set>
-
-<!-- =========================================================== -->
-   <driver_parameters>
-      <param
-       id="828"
-       group="0"
-       name="Loose Upper Clothing"
-       label="Shirt Fit"
-	   show_simple="true"
-       wearable="shirt"
-       edit_group="shirt"
-       edit_group_order="4"
-       label_min="Tight Shirt"
-       label_max="Loose Shirt"
+      <param
+       id="878"
+       group="1"
+       wearable="skin"
+       edit_group="driven"
+       edit_group_order="20"
+       name="Bump upperdef"
        value_min="0"
-       value_max="1"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="628" />
-
-            <driven
-             id="899"
-             min1="0.1"
-             max1="0.5"
-             max2="1"
-             min2="1" />
-         </param_driver>
+       value_max="1">
+        <param_alpha
+         domain="0" />
       </param>
+    </layer>
+
+    <layer
+     name="base"
+     global_color="skin_color">
+      <texture
+       tga_file="body_skingrain.tga" />
+    </layer>
+
+    <layer
+     name="shadow">
+      <texture
+       tga_file="lowerbody_shading_alpha.tga"
+       file_is_mask="TRUE" />
 
       <param
-       id="816"
-       group="0"
-       name="Loose Lower Clothing"
-       label="Pants Fit"
-	   show_simple="true"
+       id="160"
+       group="1"
+       name="Shading"
        wearable="pants"
-       edit_group="pants"
-       edit_group_order="2.5"
-       label_min="Tight Pants"
-       label_max="Loose Pants"
+       cross_wearable="true"
        value_min="0"
-       value_max="1"
-       camera_distance="1.8"
-       camera_angle="30"
-       camera_elevation="-.3">
-         <param_driver>
-            <driven
-             id="516" />
+       value_max="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 0" />
 
-            <driven
-             id="913"
-             min1="0.1"
-             max1="0.5"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="0, 0, 0, 128" />
+        </param_color>
       </param>
+    </layer>
+
+    <layer
+     name="highlight">
+      <texture
+       tga_file="lowerbody_highlights_alpha.tga"
+       file_is_mask="TRUE" />
 
       <param
-       id="814"
-       group="0"
-       wearable="pants"
-       edit_group="pants"
-       edit_group_order="2"
-       name="Waist Height"
-       label_min="Low"
-       label_max="High"
+       id="161"
+       group="1"
+       name="Shading"
+       wearable="skin"
        value_min="0"
-       value_max="1"
-       value_default="1"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation="-.3">
-         <param_driver>
-            <driven
-             id="614" />
+       value_max="1">
+        <param_color>
+          <value
+           color="255, 255, 255, 0" />
 
-            <driven
-             id="1017" />
+          <value
+           color="255, 255, 255, 64" />
+        </param_color>
+      </param>
+    </layer>
 
-            <driven
-             id="1033" />
+    <layer
+       name="toenails">
+      <texture
+       tga_file="lowerbody_color.tga" />
+    </layer>
 
-            <driven
-             id="914"
-             min1="0"
-             max1=".98"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
+    <layer
+     name="lower_bodypaint">
+      <texture
+       local_texture="lower_bodypaint" />
+    </layer>
 
+    <layer
+     name="freckles lower"
+     fixed_color="120,47,20,128">
       <param
-       id="815"
-       group="0"
-       wearable="pants"
-       edit_group="pants"
-       edit_group_order="1"
-       name="Pants Length"
-	   show_simple="true"
-       label_min="Short"
-       label_max="Long"
-       value_min="0"
-       value_max="1"
-       value_default=".8"
-	   simple_percent_min="20"
-	   simple_percent_max="100"
-       camera_distance="1.8"
-       camera_angle="30"
-       camera_elevation="-.3">
-         <param_driver>
-            <driven
-             id="615"
-             min1="0"
-             max1=".9"
-             max2="1"
-             min2="1" />
-
-            <driven
-             id="1018"
-             min1="0"
-             max1=".9"
-             max2="1"
-             min2="1" />
-
-            <driven
-             id="1036"
-             min1="0"
-             max1=".9"
-             max2="1"
-             min2="1" />
-
-            <driven
-             id="793"
-             min1=".9"
-             max1="1"
-             max2="1"
-             min2="1" />
-
-            <driven
-             id="915"
-             min1="0"
-             max1=".882"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="800"
-       group="0"
-       wearable="shirt"
-       edit_group="shirt"
-       edit_group_order="1"
-       name="Sleeve Length"
-	   show_simple="true"
-       label_min="Short"
-       label_max="Long"
+       id="777"
+       group="1"
+       name="freckles lower"
+       wearable="skin"
        value_min="0"
-       value_max="1"
-       value_default=".89"
-	   simple_percent_min="15"
-	   simple_percent_max="100"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="600" />
-
-            <driven
-             id="1013" />
+       value_max="1">
+        <param_alpha
+         tga_file="bodyfreckles_alpha.tga"
+         skip_if_zero="true"
+         domain="0.6" />
+      </param>
+    </layer>
 
-            <driven
-             id="1029" />
+    <layer
+     name="lower_tattoo">
+      <texture
+       local_texture="lower_tattoo" />
+    </layer>
 
-            <driven
-             id="900"
-             min1="0"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
+    <layer
+     name="lower_underpants bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="lower_underpants"
+       local_texture_alpha_only="true" />
 
       <param
-       id="801"
-       group="0"
-       wearable="shirt"
-       edit_group="shirt"
-       edit_group_order="2"
-       name="Shirt Bottom"
-       label_min="Short"
-       label_max="Long"
+       id="1055"
+       group="1"
+       wearable="underpants"
+       edit_group="underpants"
+       name="Pants Length"
        value_min="0"
        value_max="1"
-       value_default="1"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="601" />
-
-            <driven
-             id="1014" />
-
-            <driven
-             id="1030" />
-
-            <driven
-             id="901"
-             min1="0"
-             max1=".98"
-             max2="1"
-             min2="1" />
-         </param_driver>
+       value_default=".3">
+        <param_alpha
+         tga_file="pants_length_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="802"
-       group="0"
-       wearable="shirt"
-       edit_group="shirt"
-       edit_group_order="3"
-       name="Collar Front"
-	   show_simple="true"
-       label_min="Low"
-       label_max="High"
+       id="1057"
+       group="1"
+       wearable="underpants"
+       edit_group="underpants"
+       name="Pants Waist"
        value_min="0"
        value_max="1"
-       value_default=".78"
-	   simple_percent_min="40"
-	   simple_percent_max="100"
-       camera_distance="1.2"
-       camera_angle="15"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="602" />
-
-            <driven
-             id="1015" />
-
-            <driven
-             id="1031" />
-
-            <driven
-             id="902"
-             min1="0"
-             max1=".98"
-             max2="1"
-             min2="1" />
-         </param_driver>
+       value_default=".8">
+        <param_alpha
+         tga_file="pants_waist_alpha.tga"
+         domain="0.05" />
       </param>
+    </layer>
+
+    <layer
+     name="lower_underpants">
+      <texture
+       local_texture="lower_underpants" />
 
       <param
-       id="781"
+       id="824"
        group="0"
-       wearable="shirt"
-       edit_group="shirt"
-       edit_group_order="3.1"
-       name="Collar Back"
-       label_min="Low"
-       label_max="High"
+       wearable="underpants"
+       edit_group="colorpicker"
+       name="underpants_red"
        value_min="0"
        value_max="1"
-       value_default=".78"
-       camera_distance="1.2"
-       camera_angle="195"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="778" />
-
-            <driven
-             id="1016" />
-
-            <driven
-             id="1032" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="903"
-             min1="0"
-             max1=".98"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="150"
+       id="825"
        group="0"
-       wearable="skin"
-       edit_group="skin_bodydetail"
-       name="Body Definition"
-       label_min="Less"
-       label_max="More"
+       wearable="underpants"
+       edit_group="colorpicker"
+       name="underpants_green"
        value_min="0"
        value_max="1"
-       value_default="0"
-       camera_distance="1.4"
-       camera_elevation="-.2">
-         <param_driver>
-            <driven
-             id="125" />
-
-            <driven
-             id="126" />
-
-            <driven
-             id="160" />
-
-            <driven
-             id="161" />
-
-            <driven
-             id="874" />
-
-            <driven
-             id="878" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-         </param_driver>
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="775"
+       id="826"
        group="0"
-       wearable="skin"
-       edit_group="skin_bodydetail"
-       name="Body Freckles"
-       label_min="Less Freckles"
-       label_max="More Freckles"
+       wearable="underpants"
+       edit_group="colorpicker"
+       name="underpants_blue"
        value_min="0"
        value_max="1"
-       value_default="0"
-       camera_distance="1.4"
-       camera_elevation="-.2">
-         <param_driver>
-            <driven
-             id="776" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="777" />
-         </param_driver>
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="162"
-       group="0"
-       wearable="skin"
-       edit_group="skin_facedetail"
-       edit_group_order="1"
-       name="Facial Definition"
-       label_min="Less"
-       label_max="More"
+       id="1054"
+       group="1"
+       wearable="underpants"
+       edit_group="driven"
+       name="Pants Length"
        value_min="0"
        value_max="1"
-       camera_distance=".3"
-       camera_elevation=".07"
-       value_default="0">
-         <param_driver>
-            <driven
-             id="158" />
-
-            <driven
-             id="159" />
-
-			<driven
-             id="873" />
-         </param_driver>
+       value_default=".3"
+       camera_distance="1.2"
+       camera_angle="30"
+       camera_elevation="-.3">
+        <param_alpha
+         tga_file="pants_length_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="163"
-       group="0"
-       wearable="skin"
-       edit_group="skin_facedetail"
-       edit_group_order="3"
-       name="wrinkles"
-       label_min="Less"
-       label_max="More"
+       id="1056"
+       group="1"
+       wearable="underpants"
+       edit_group="driven"
+       name="Pants Waist"
        value_min="0"
        value_max="1"
-       camera_distance=".3"
-       camera_elevation=".07"
-       value_default="0">
-         <param_driver>
-<!--<driven
-             id="128" />-->
-            <driven
-             id="118" />
-         </param_driver>
+       value_default=".8">
+        <param_alpha
+         tga_file="pants_waist_alpha.tga"
+         domain="0.05" />
       </param>
+    </layer>
+
+    <layer
+     name="lower_socks bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="lower_socks"
+       local_texture_alpha_only="true" />
 
       <param
-       id="505"
-       group="0"
-       wearable="shape"
-       edit_group="shape_mouth"
-       edit_group_order="3"
-       name="Lip Thickness"
-       label_min="Thin Lips"
-       label_max="Fat Lips"
+       id="1051"
+       group="1"
+       wearable="socks"
+       edit_group="driven"
+       name="Socks Length bump"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_distance=".3"
-       camera_elevation=".04"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="26"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="28"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+       value_default="0.35">
+        <param_alpha
+         tga_file="shoe_height_alpha.tga"
+         domain="0.01" />
       </param>
+    </layer>
+
+    <layer
+     name="lower_socks">
+      <texture
+       local_texture="lower_socks" />
 
       <param
-       id="799"
+       id="818"
        group="0"
-       wearable="shape"
-       edit_group="shape_mouth"
-       edit_group_order="3.2"
-       name="Lip Ratio"
-	   label="Lip Ratio"
-	   show_simple="true"
-       label_min="More Upper Lip"
-       label_max="More Lower Lip"
+       wearable="socks"
+       edit_group="colorpicker"
+       name="socks_red"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_distance=".3"
-       camera_elevation=".04"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="797"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="798"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="155"
+       id="819"
        group="0"
-       wearable="shape"
-       edit_group="shape_mouth"
-       edit_group_order="1"
-       name="Lip Width"
-	   label="Lip Width"
-       label_min="Narrow Lips"
-       label_max="Wide Lips"
-       show_simple="true"
-       value_min="-0.9"
-       value_max="1.3"
-       camera_distance=".3"
-       camera_elevation=".04"
-       value_default="0">
-         <param_driver>
-            <driven
-             id="29" />
+       wearable="socks"
+       edit_group="colorpicker"
+       name="socks_green"
+       value_min="0"
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="30" />
-         </param_driver>
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="196"
+       id="820"
        group="0"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="2"
-       name="Eye Spacing"
-	   label="Eye Spacing"
-       label_min="Close Set Eyes"
-       label_max="Far Set Eyes"
-       show_simple="true"
-       value_min="-2"
+       wearable="socks"
+       edit_group="colorpicker"
+       name="socks_blue"
+       value_min="0"
        value_max="1"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".35"
-       camera_angle="5">
-         <param_driver>
-            <driven
-             id="194" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="195" />
-         </param_driver>
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="769"
-       group="0"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="4.5"
-       name="Eye Depth"
-       label_min="Sunken Eyes"
-       label_max="Bugged Eyes"
+       id="1050"
+       group="1"
+       wearable="socks"
+       edit_group="driven"
+       name="Socks Length bump"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="75">
-         <param_driver>
-            <driven
-             id="767" />
-
-            <driven
-             id="768" />
-         </param_driver>
+       value_default="0.35">
+        <param_alpha
+         tga_file="shoe_height_alpha.tga"
+         domain="0.01" />
       </param>
+    </layer>
+
+    <layer
+     name="lower_shoes bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="lower_shoes"
+       local_texture_alpha_only="true" />
 
       <param
-       id="198"
-       group="0"
+       id="1053"
+       group="1"
        wearable="shoes"
-       edit_group="shoes"
-       edit_group_order="2"
-       name="Heel Height"
-       label_min="Low Heels"
-       label_max="High Heels"
+       edit_group="driven"
+       name="Shoe Height bump"
        value_min="0"
        value_max="1"
-       value_default="0"
-       camera_angle="45"
-       camera_distance=".8"
-       camera_elevation="-1">
-         <param_driver>
-            <driven
-             id="197" />
-
-            <driven
-             id="500" />
-         </param_driver>
+       value_default="0.1">
+        <param_alpha
+         tga_file="shoe_height_alpha.tga"
+         domain="0.01" />
       </param>
+    </layer>
+
+    <layer
+     name="lower_shoes">
+      <texture
+       local_texture="lower_shoes" />
 
       <param
-       id="513"
+       id="812"
        group="0"
        wearable="shoes"
-       edit_group="shoes"
-       edit_group_order="3"
-       name="Heel Shape"
-       label_min="Pointy Heels"
-       label_max="Thick Heels"
+       edit_group="colorpicker"
+       name="shoes_red"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_angle="45"
-       camera_distance="1.5"
-       camera_elevation="-1">
-         <param_driver>
-            <driven
-             id="509"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="510"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="514"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
+
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
+      </param>
+
+      <param
+       id="813"
        group="0"
        wearable="shoes"
-       edit_group="shoes"
-       edit_group_order="4"
-       name="Toe Shape"
-       label_min="Pointy"
-       label_max="Square"
+       edit_group="colorpicker"
+       name="shoes_green"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_angle="5"
-       camera_distance=".8"
-       camera_elevation="-.8">
-         <param_driver>
-            <driven
-             id="511"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="512"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="503"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
+
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
+      </param>
+
+      <param
+       id="817"
        group="0"
        wearable="shoes"
-       edit_group="shoes"
-       edit_group_order="6"
-       name="Platform Height"
-       label_min="Low Platforms"
-       label_max="High Platforms"
+       edit_group="colorpicker"
+       name="shoes_blue"
        value_min="0"
        value_max="1"
-       value_default="0"
-       camera_angle="45"
-       camera_distance=".5"
-       camera_elevation="-1">
-         <param_driver>
-            <driven
-             id="501" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="502" />
-         </param_driver>
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="193"
-       group="0"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="3"
-       name="Head Shape"
-	   label="Head Shape"
-       label_min="More Square"
-       label_max="More Round"
-       show_simple="true"
+       id="1052"
+       group="1"
+       wearable="shoes"
+       edit_group="driven"
+       name="Shoe Height"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="188"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="642"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="189"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-
-            <driven
-             id="643"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="157"
-       group="0"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="13"
-       name="Belly Size"
-       label_min="Small"
-       label_max="Big"
+       value_default="0.1">
+        <param_alpha
+         tga_file="shoe_height_alpha.tga"
+         domain="0.01" />
+      </param>
+    </layer>
+
+    <layer
+     name="lower_clothes_shadow">
+      <texture
+       local_texture="lower_pants" />
+
+      <param
+       id="913"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Lower Clothes Shading"
        value_min="0"
        value_max="1"
-       value_default="0"
-       camera_distance="1.4"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="104" />
+       value_default="0">
+        <param_color>
+          <value
+           color="0, 0, 0, 0" />
+
+          <value
+           color="0, 0, 0, 80" />
+        </param_color>
+      </param>
+
+      <param
+       id="914"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Waist Height Shadow"
+       value_min="0.02"
+       value_max="1">
+        <param_alpha
+         tga_file="pants_waist_alpha.tga"
+         skip_if_zero="true"
+         domain="0.04" />
+      </param>
+
+      <param
+       id="915"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Pants Length Shadow"
+       value_min="0.02"
+       value_max="1">
+        <param_alpha
+         tga_file="pants_length_alpha.tga"
+         skip_if_zero="true"
+         domain="0.03" />
+      </param>
+    </layer>
+
+    <layer
+     name="lower_pants base bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="lower_pants"
+       local_texture_alpha_only="true" />
 
-            <driven
-             id="156" />
+      <param
+       id="1035"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Waist Height Cloth"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         tga_file="pants_waist_alpha.tga"
+         domain="0.05" />
+      </param>
 
-            <driven
-             id="849" />
-         </param_driver>
+      <param
+       id="1036"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Pants Length Cloth"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         tga_file="pants_length_alpha.tga"
+         domain="0.01" />
       </param>
+    </layer>
+
+    <layer
+     name="lower_pants bump"
+     render_pass="bump">
+      <texture
+       tga_file="bump_pants_wrinkles.tga" />
+
+      <texture
+       local_texture="lower_pants"
+       local_texture_alpha_only="true" />
 
       <param
-       id="637"
+       id="869"
        group="0"
-       wearable="shape"
-       edit_group="shape_body"
-       edit_group_order="3"
-       name="Body Fat"
-       label_min="Less Body Fat"
-       label_max="More Body Fat"
+       wearable="pants"
+       edit_group="pants"
+       edit_group_order="6"
+       name="Pants Wrinkles"
        value_min="0"
        value_max="1"
-       value_default="0"
-       camera_distance="1.8">
-         <param_driver>
-            <driven
-             id="633" />
+       value_default="0">
+        <param_color>
+          <value
+           color="255, 255, 255, 0" />
 
-            <driven
-             id="634" />
+          <value
+           color="255, 255, 255, 255" />
+        </param_color>
+      </param>
 
-            <driven
-             id="635" />
+      <param
+       id="1017"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Waist Height Cloth"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         tga_file="pants_waist_alpha.tga"
+         domain="0.05" />
+      </param>
 
-            <driven
-             id="851" />
-         </param_driver>
+      <param
+       id="1018"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Pants Length Cloth"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         tga_file="pants_length_alpha.tga"
+         domain="0.01" />
       </param>
+    </layer>
+
+    <layer
+     name="lower_pants">
+      <texture
+       local_texture="lower_pants" />
 
       <param
-       id="130"
+       id="806"
        group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="8"
-       name="Front Fringe"
-       label_min="Short"
-       label_max="Long"
+       wearable="pants"
+       edit_group="colorpicker"
+       name="pants_red"
        value_min="0"
        value_max="1"
-       value_default=".45"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="144"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="145"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="131"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="9"
-       name="Side Fringe"
-       label_min="Short"
-       label_max="Long"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="90">
-         <param_driver>
-            <driven
-             id="146"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="147"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="132"
+       id="807"
        group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="10"
-       name="Back Fringe"
-       label_min="Short"
-       label_max="Long"
+       wearable="pants"
+       edit_group="colorpicker"
+       name="pants_green"
        value_min="0"
        value_max="1"
-       value_default=".39"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="160">
-         <param_driver>
-            <driven
-             id="148"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="149"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="133"
+       id="808"
        group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="2"
-       name="Hair Front"
-       label_min="Short"
-       label_max="Long"
+       wearable="pants"
+       edit_group="colorpicker"
+       name="pants_blue"
        value_min="0"
        value_max="1"
-       value_default=".25"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="172"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="171"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="134"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="3"
-       name="Hair Sides"
-       label_min="Short"
-       label_max="Long"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="90">
-         <param_driver>
-            <driven
-             id="174"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="173"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="135"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="4"
-       name="Hair Back"
-	   show_simple="true"
-       label_min="Short"
-       label_max="Long"
+       id="614"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Waist Height Cloth"
        value_min="0"
        value_max="1"
-       value_default=".55"
-       camera_elevation="-.1"
-       camera_distance=".8"
-       camera_angle="160">
-         <param_driver>
-            <driven
-             id="176"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="175"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+       value_default=".8">
+        <param_alpha
+         tga_file="pants_waist_alpha.tga"
+         domain="0.05" />
       </param>
 
       <param
-       id="136"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="11.5"
-       name="Hair Sweep"
-       label_min="Sweep Forward"
-       label_max="Sweep Back"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="90">
-         <param_driver>
-            <driven
-             id="179"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="178"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="137"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="16"
-       name="Hair Tilt"
-       label_min="Left"
-       label_max="Right"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="0">
-         <param_driver>
-            <driven
-             id="190"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="191"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="608"
-       group="0"
-       wearable="jacket"
-       edit_group="jacket"
-       edit_group_order="2"
-       name="bottom length lower"
-       label="Jacket Length"
-       label_min="Short"
-       label_max="Long"
+       id="615"
+       group="1"
+       edit_group="driven"
+       wearable="pants"
+       name="Pants Length Cloth"
        value_min="0"
        value_max="1"
-       value_default=".8"
-       camera_distance="1.4"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="620" />
-
-            <driven
-             id="1025" />
-
-            <driven
-             id="1037" />
-
-            <driven
-             id="621" />
+       value_default=".8">
+        <param_alpha
+         tga_file="pants_length_alpha.tga"
+         domain="0.01" />
+      </param>
+    </layer>
 
-            <driven
-             id="1027" />
+    <layer
+     name="lower_jacket base bump"
+     render_pass="bump"
+     fixed_color="128,128,128,255">
+      <texture
+       local_texture="lower_jacket"
+       local_texture_alpha_only="true" />
 
-            <driven
-             id="1033" />
-         </param_driver>
+      <param
+       id="1033"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       cross_wearable="true"
+       name="jacket bottom length lower bump"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="jacket_length_lower_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="609"
-       group="0"
+       id="1034"
+       group="1"
        wearable="jacket"
-       edit_group="jacket"
-       edit_group_order="4"
-       name="open jacket"
-       label="Open Front"
-       label_min="Open"
-       label_max="Closed"
+       edit_group="driven"
+       name="jacket open lower bump"
        value_min="0"
-       value_max="1"
-       value_default=".2"
-       camera_distance="1.4"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="622" />
-
-            <driven
-             id="1026" />
-
-            <driven
-             id="1038" />
-
-            <driven
-             id="623" />
+       value_max="1">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_open_lower_alpha.tga"
+         domain="0.01" />
+      </param>
+    </layer>
 
-            <driven
-             id="1028" />
+    <layer
+     name="lower_jacket bump"
+     render_pass="bump">
+      <texture
+       tga_file="bump_pants_wrinkles.tga" />
 
-            <driven
-             id="1034" />
-         </param_driver>
-      </param>
+      <texture
+       local_texture="lower_jacket"
+       local_texture_alpha_only="true" />
+          
 
       <param
-       id="105"
-       group="0"
-       sex="female"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="6"
-       name="Breast Size"
-       label_min="Small"
-       label_max="Large"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".3"
-       camera_distance="1.2"
-       camera_angle="30">
-         <param_driver>
-            <driven
-             id="843"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".01" />
-
-            <driven
-             id="627"
-             min1="0"
-             max1="0.01"
-             max2="0.01"
-             min2=".5" />
-
-            <driven
-             id="626"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="629"
-       group="0"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="6"
-       name="Forehead Angle"
-       label_min="More Vertical"
-       label_max="More Sloped"
+       id="876"
+       group="1"
+       wearable="jacket"
+       name="jacket upper Wrinkles"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="70">
-         <param_driver>
-            <driven
-             id="630"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="644"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="631"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-
-            <driven
-             id="645"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="646"
-       group="0"
-       name="Egg_Head"
-       label="Egg Head"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="4"
-       label_min="Chin Heavy"
-       label_max="Forehead Heavy"
-       show_simple="true"
-       value_min="-1.3"
-       value_max="1"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="640" />
+       value_default="0">
+        <param_color>
+          <value
+           color="255, 255, 255, 0" />
 
-            <driven
-             id="186" />
-         </param_driver>
+          <value
+           color="255, 255, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="647"
-       group="0"
-       name="Squash_Stretch_Head"
-       label="Head Stretch"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="2"
-       show_simple="true"
-       label_min="Squash Head"
-       label_max="Stretch Head"
-       value_min="-0.5"
-       value_max="1"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="641" />
-
-            <driven
-             id="187" />
-         </param_driver>
+       id="1027"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       name="jacket bottom length lower bump"
+       value_min="0"
+       value_max="1">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="jacket_length_lower_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="649"
-       group="0"
-       sex="female"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="1.1"
-       name="Torso Muscles"
-	   label="Torso Muscles"
-	   show_simple="true"
-       label_min="Less Muscular"
-       label_max="More Muscular"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance="1"
-       camera_angle="15">
-         <param_driver>
-            <driven
-             id="648"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="106"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="678"
-       group="0"
-       sex="male"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="1"
-       name="Torso Muscles"
-       show_simple="true"
-	   label_min="Less Muscular"
-       label_max="More Muscular"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance="1.2"
-       camera_angle="0">
-         <param_driver>
-            <driven
-             id="677"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="106"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="652"
-       group="0"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="1"
-       name="Leg Muscles"
-       label_min="Less Muscular"
-       label_max="More Muscular"
-       show_simple="true"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_distance="1.3"
-       camera_elevation="-.5"
-       camera_angle="15">
-         <param_driver>
-            <driven
-             id="651"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="152"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="80"
-       name="male"
-       group="0"
-       edit_group="dummy"
-       wearable="shape"
+       id="1028"
+       group="1"
+       wearable="jacket"
+       edit_group="driven"
+       name="jacket open lower bump"
        value_min="0"
        value_max="1">
-         <param_driver>
-            <driven
-             id="32" />
-
-            <driven
-             id="153" />
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_open_lower_alpha.tga"
+         domain="0.01" />
+      </param>
+    </layer>
 
-            <driven
-             id="40" />
+    <layer
+     name="lower_jacket">
+      <texture
+       local_texture="lower_jacket" />
 
-            <driven
-             id="100" />
+      <param
+       id="809"
+       group="1"
+       edit_group="colorpicker_driven"
+       wearable="jacket"
+       name="lower_jacket_red"
+       value_min="0"
+       value_max="1"
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="857" />
-         </param_driver>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="659"
-       group="0"
-       wearable="shape"
-       edit_group="shape_mouth"
-       edit_group_order="5"
-       name="Mouth Corner"
-       label_min="Corner Down"
-       label_max="Corner Up"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation="0"
-       camera_distance=".28">
-         <param_driver>
-            <driven
-             id="658"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
-
-            <driven
-             id="657"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="662"
-       group="0"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="5"
-       name="Face Shear"
-       label_min="Shear Right Up"
-       label_max="Shear Left Up"
+       id="810"
+       group="1"
+       edit_group="colorpicker_driven"
+       wearable="jacket"
+       name="lower_jacket_green"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5">
-         <param_driver>
-            <driven
-             id="660" />
-
-            <driven
-             id="661" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="774" />
-         </param_driver>
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="773"
-       group="0"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="4.5"
-       name="Head Length"
-       label_min="Flat Head"
-       label_max="Long Head"
+       id="811"
+       group="1"
+       edit_group="colorpicker_driven"
+       wearable="jacket"
+       name="lower_jacket_blue"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="75">
-         <param_driver>
-            <driven
-             id="770" />
-
-            <driven
-             id="771" />
+       value_default="1">
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="772" />
-         </param_driver>
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
 
       <param
-       id="682"
-       group="0"
-       wearable="shape"
-       edit_group="shape_head"
-       edit_group_order="1"
-       name="Head Size"
-	   label="Head Size"
-       label_min="Small Head"
-       label_max="Big Head"
-       show_simple="true"
+       id="621"
+       group="1"
+       wearable="jacket"
+       edit_group="jacket"
+       name="bottom length lower"
+       label_min="hi cut"
+       label_max="low cut"
        value_min="0"
        value_max="1"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".5">
-         <param_driver>
-            <driven
-             id="679" />
-
-            <driven
-             id="694" />
-
-            <driven
-             id="680" />
-
-            <driven
-             id="681" />
-
-            <driven
-             id="655" />
-         </param_driver>
+       value_default=".8"
+       camera_distance="1.2"
+       camera_angle="30"
+       camera_elevation=".2">
+        <param_alpha
+         multiply_blend="false"
+         tga_file="jacket_length_lower_alpha.tga"
+         domain="0.01" />
       </param>
 
       <param
-       id="690"
-       group="0"
-       wearable="shape"
-       edit_group="shape_eyes"
-       edit_group_order="1"
-       name="Eye Size"
-	   label="Eye Size"
-       label_min="Beady Eyes"
-       label_max="Anime Eyes"
+       id="623"
+       group="1"
+       wearable="jacket"
+       edit_group="jacket"
+       name="open lower"
+       label_min="open"
+       label_max="closed"
        value_min="0"
        value_max="1"
-       value_default=".5"
-	   show_simple="true"
-       camera_elevation=".1"
-       camera_distance=".35">
-         <param_driver>
-            <driven
-             id="686" />
+       value_default=".8"
+       camera_distance="1.2"
+       camera_angle="30"
+       camera_elevation=".2">
+        <param_alpha
+         multiply_blend="true"
+         tga_file="jacket_open_lower_alpha.tga"
+         domain="0.01" />
+      </param>
+    </layer>
 
-            <driven
-             id="687" />
+    <layer
+       name="lower alpha"
+       visibility_mask="TRUE">
+      <texture
+         local_texture="lower_alpha" />
+    </layer>
 
-            <driven
-             id="695" />
+  </layer_set>
 
-            <driven
-             id="688" />
+  <!-- =========================================================== -->
+  <layer_set
+   body_region="eyes"
+   width="128"
+   height="128">
+    <layer
+     name="whites">
+      <texture
+       tga_file="eyewhite.tga" />
+    </layer>
 
-            <driven
-             id="691" />
+    <layer
+     name="iris"
+     global_color="eye_color">
+      <texture
+       local_texture="eyes_iris" />
+    </layer>
 
-            <driven
-             id="689" />
-         </param_driver>
-      </param>
+    <layer
+       name="eyes alpha"
+       visibility_mask="TRUE">
+      <texture
+         local_texture="eyes_alpha" />
+    </layer>
 
-      <param
-       id="752"
-       group="0"
-       sex="male"
-       wearable="hair"
-       edit_group="hair_facial"
-       edit_group_order="1"
-       name="Hair Thickness"
-       label_min="5 O'Clock Shadow"
-       label_max="Bushy Hair"
-       value_min="0"
-       value_max="1"
-       value_default=".5"
-       camera_elevation="0"
-       camera_distance=".28">
-         <param_driver>
-            <driven
-             id="751"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".2" />
-
-            <driven
-             id="1012"
-             min1="0"
-             max1="0"
-             max2=".2"
-             min2=".6" />
-
-            <driven
-             id="400"
-             min1=".2"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="763"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="1"
-       name="Hair Volume"
-	   show_simple="true"
-       label_min="Less Volume"
-       label_max="More Volume"
-       value_min="0"
-       value_max="1"
-       value_default=".55"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="20">
-         <param_driver>
-            <driven
-             id="761"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".5" />
+  </layer_set>
 
-            <driven
-             id="180"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
+  <!-- =========================================================== -->
+  <layer_set
+   body_region="skirt"
+   width="512"
+   height="512"
+   clear_alpha="false">
+    <layer
+     name="skirt_fabric"
+     write_all_channels="true">
+      <texture
+       local_texture="skirt" />
 
       <param
-       id="834"
+       id="921"
        group="0"
-       wearable="jacket"
+       wearable="skirt"
        edit_group="colorpicker"
-       name="jacket_red"
+       name="skirt_red"
        value_min="0"
        value_max="1"
        value_default="1">
-         <param_driver>
-            <driven
-             id="809"
-             min1="0"
-             max1="1"
-             max2="1"
-             min2="1" />
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="831"
-             min1="0"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="255, 0, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="835"
+       id="922"
        group="0"
-       wearable="jacket"
+       wearable="skirt"
        edit_group="colorpicker"
-       name="jacket_green"
+       name="skirt_green"
        value_min="0"
        value_max="1"
        value_default="1">
-         <param_driver>
-            <driven
-             id="810"
-             min1="0"
-             max1="1"
-             max2="1"
-             min2="1" />
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="832"
-             min1="0"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="0, 255, 0, 255" />
+        </param_color>
       </param>
 
       <param
-       id="836"
+       id="923"
        group="0"
-       wearable="jacket"
+       wearable="skirt"
        edit_group="colorpicker"
-       name="jacket_blue"
+       name="skirt_blue"
        value_min="0"
        value_max="1"
        value_default="1">
-         <param_driver>
-            <driven
-             id="811"
-             min1="0"
-             max1="1"
-             max2="1"
-             min2="1" />
+        <param_color>
+          <value
+           color="0, 0, 0, 255" />
 
-            <driven
-             id="833"
-             min1="0"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
+          <value
+           color="0, 0, 255, 255" />
+        </param_color>
       </param>
+    </layer>
 
+    <layer
+     name="skirt_fabric_alpha">
       <param
-       id="785"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="14.6"
-       name="Pigtails"
-	   show_simple="true"
-       label_min="Short Pigtails"
-       label_max="Long Pigtails"
-       value_min="0"
-       value_max="1"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="15">
-         <param_driver>
-            <driven
-             id="782"
-             min1="0"
-             max1=".10"
-             max2=".10"
-             min2=".5" />
-
-            <driven
-             id="783"
-             min1=".10"
-             max1=".5"
-             max2=".5"
-             min2=".75" />
-
-            <driven
-             id="790"
-             min1=".5"
-             max1=".75"
-             max2=".75"
-             min2="1" />
-
-            <driven
-             id="784"
-             min1=".75"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="789"
-       group="0"
-       wearable="hair"
-       edit_group="hair_style"
-       edit_group_order="14.7"
-       name="Ponytail"
-       label_min="Short Ponytail"
-       label_max="Long Ponytail"
-       value_min="0"
-       value_max="1"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".5"
-       camera_angle="180">
-         <param_driver>
-            <driven
-             id="786"
-             min1="0"
-             max1=".10"
-             max2=".10"
-             min2=".66" />
-
-            <driven
-             id="787"
-             min1=".10"
-             max1=".66"
-             max2=".66"
-             min2="1" />
-
-            <driven
-             id="788"
-             min1=".66"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="795"
-       group="0"
-       name="Butt Size"
-       label="Butt Size"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="4"
-       label_min="Flat Butt"
-       label_max="Big Butt"
-       value_min="0"
-       value_max="1"
-       value_default=".25"
-       camera_angle="180"
-       camera_distance=".6">
-         <param_driver>
-            <driven
-             id="867"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".3" />
-
-            <driven
-             id="794"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".3" />
-
-            <driven
-             id="151"
-             min1=".3"
-             max1="1"
-             max2="1"
-             min2="1" />
-
-            <driven
-             id="852"
-             min1=".3"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="841"
+       id="858"
        group="0"
-       name="Bowed_Legs"
-       label="Knee Angle"
-       wearable="shape"
-       edit_group_order="5.5"
-       edit_group="shape_legs"
-       label_min="Knock Kneed"
-       label_max="Bow Legged"
-       value_min="-1"
+       wearable="skirt"
+       edit_group="skirt"
+       edit_group_order="1"
+       name="Skirt Length"
+   show_simple="true"
+       label_min="Short"
+       label_max="Long"
+       value_min=".01"
        value_max="1"
-       value_default="0"
+       value_default=".4"
+   simple_percent_min="40"
+   simple_percent_max="100"
        camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_driver>
-            <driven
-             id="853" />
-
-            <driven
-             id="847" />
-         </param_driver>
-      </param>
-
-      <param
-       id="753"
-       group="0"
-       name="Saddlebags"
-       label="Saddle Bags"
-       wearable="shape"
-       edit_group="shape_legs"
-       edit_group_order="5"
-       label_min="Less Saddle"
-       label_max="More Saddle"
-       value_min="-0.5"
-       value_max="3"
-       value_default="0"
-       camera_angle="0"
-       camera_distance="1.2">
-         <param_driver>
-            <driven
-             id="850" />
-
-            <driven
-             id="854" />
-         </param_driver>
-      </param>
-
-      <param
-       id="676"
-       group="0"
-       name="Love_Handles"
-       label="Love Handles"
-       wearable="shape"
-       edit_group="shape_torso"
-       edit_group_order="12"
-       label_min="Less Love"
-       label_max="More Love"
-       value_min="-1"
-       value_max="2"
-       value_default="0"
-       camera_elevation=".3"
-       camera_distance=".9">
-         <param_driver>
-            <driven
-             id="855" />
-
-            <driven
-             id="856" />
-         </param_driver>
+       camera_elevation="-.5"
+       camera_angle="30">
+        <param_alpha
+         tga_file="skirt_length_alpha.tga"
+         domain="0"
+         multiply_blend="true" />
       </param>
 
       <param
-       id="863"
+       id="859"
        group="0"
-       name="skirt_looseness"
-       label="Skirt Fit"
-	   show_simple="true"
-       clothing_morph="true"
        wearable="skirt"
-       edit_group_order="2"
        edit_group="skirt"
-       label_min="Tight Skirt"
-       label_max="Poofy Skirt"
+       edit_group_order="4"
+       name="Slit Front"
+       label_min="Open Front"
+       label_max="Closed Front"
        value_min="0"
        value_max="1"
-       value_default=".333"
+       value_default="1"
        camera_distance="1.3"
-       camera_elevation="-.5">
-         <param_driver>
-            <driven
-             id="866"
-             min1="0"
-             max1="0"
-             max2="0"
-             min2=".2" />
-
-            <driven
-             id="846"
-             min1="0"
-             max1=".5"
-             max2=".5"
-             min2="1" />
-
-            <driven
-             id="845"
-             min1=".5"
-             max1="1"
-             max2="1"
-             min2="1" />
-         </param_driver>
-      </param>
-
-      <param
-       id="119"
-       group="0"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="1"
-       name="Eyebrow Size"
-	   show_simple="true"
-       label_min="Thin Eyebrows"
-       label_max="Bushy Eyebrows"
-       value_min="0"
-       value_max="1"
-       value_default="0.5"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_driver>
-            <driven
-             id="1000" />
-
-            <driven
-             id="1001" />
-         </param_driver>
+       camera_elevation="-.5"
+       camera_angle="30">
+        <param_alpha
+         tga_file="skirt_slit_front_alpha.tga"
+         multiply_blend="true"
+         domain="0" />
       </param>
 
       <param
-       id="750"
+       id="860"
        group="0"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="2"
-       name="Eyebrow Density"
-       label_min="Sparse"
-       label_max="Dense"
+       wearable="skirt"
+       edit_group="skirt"
+       edit_group_order="5"
+       name="Slit Back"
+       label_min="Open Back"
+       label_max="Closed Back"
        value_min="0"
        value_max="1"
-       value_default="0.7"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_driver>
-            <driven
-             id="1002" />
-
-            <driven
-             id="1003" />
-         </param_driver>
+       value_default="1"
+       camera_distance="1.3"
+       camera_elevation="-.5"
+       camera_angle="160">
+        <param_alpha
+         tga_file="skirt_slit_back_alpha.tga"
+         multiply_blend="true"
+         domain="0" />
       </param>
 
       <param
-       id="166"
-       sex="male"
+       id="861"
        group="0"
-       wearable="hair"
-       edit_group="hair_facial"
-       edit_group_order="2"
-       name="Sideburns"
-	   show_simple="true"
-       label_min="Short Sideburns"
-       label_max="Mutton Chops"
+       wearable="skirt"
+       edit_group="skirt"
+       edit_group_order="6"
+       name="Slit Left"
+       label_min="Open Left"
+       label_max="Closed Left"
        value_min="0"
        value_max="1"
-       value_default="0.0"
-       camera_elevation=".1"
-       camera_distance=".3"
+       value_default="1"
+       camera_distance="1.3"
+       camera_elevation="-.5"
        camera_angle="30">
-         <param_driver>
-            <driven
-             id="1004" />
-
-            <driven
-             id="1005" />
-         </param_driver>
+        <param_alpha
+         tga_file="skirt_slit_left_alpha.tga"
+         multiply_blend="true"
+         domain="0" />
       </param>
 
       <param
-       id="167"
-       sex="male"
+       id="862"
        group="0"
-       wearable="hair"
-       edit_group="hair_facial"
-       edit_group_order="3"
-       name="Moustache"
-	   show_simple="true"
-       label_min="Chaplin"
-       label_max="Handlebars"
+       wearable="skirt"
+       edit_group="skirt"
+       edit_group_order="7"
+       name="Slit Right"
+       label_min="Open Right"
+       label_max="Closed Right"
        value_min="0"
        value_max="1"
-       value_default="0.0"
-       camera_elevation=".1"
-       camera_distance=".3"
-       camera_angle="30">
-         <param_driver>
-            <driven
-             id="1006" />
-
-            <driven
-             id="1007" />
-         </param_driver>
+       value_default="1"
+       camera_distance="1.3"
+       camera_elevation="-.5"
+       camera_angle="-30">
+        <param_alpha
+         tga_file="skirt_slit_right_alpha.tga"
+         multiply_blend="true"
+         domain="0" />
       </param>
+    </layer>
 
-      <param
-       id="168"
-       sex="male"
-       group="0"
-       wearable="hair"
-       edit_group="hair_facial"
-       edit_group_order="5"
-       name="Soulpatch"
-	   show_simple="true"
-       label_min="Less soul"
-       label_max="More soul"
-       value_min="0"
-       value_max="1"
-       value_default="0.0"
-       camera_elevation="-.1"
-       camera_distance=".3"
-       camera_angle="0">
-         <param_driver>
-            <driven
-             id="1008" />
+  </layer_set>
 
-            <driven
-             id="1009" />
-         </param_driver>
-      </param>
+  <!-- =========================================================== -->
+  <driver_parameters>
+    <param
+     id="828"
+     group="0"
+     name="Loose Upper Clothing"
+     label="Shirt Fit"
+   show_simple="true"
+     wearable="shirt"
+     edit_group="shirt"
+     edit_group_order="4"
+     label_min="Tight Shirt"
+     label_max="Loose Shirt"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="628" />
+
+        <driven
+         id="899"
+         min1="0.1"
+         max1="0.5"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-      <param
-       id="169"
-       sex="male"
-       group="0"
-       wearable="hair"
-       edit_group="hair_facial"
-       edit_group_order="4"
-       name="Chin Curtains"
-	   show_simple="true"
-       label_min="Less Curtains"
-       label_max="More Curtains"
-       value_min="0"
-       value_max="1"
-       value_default="0.0"
-       camera_elevation="-.1"
-       camera_distance=".3"
-       camera_angle="45">
-         <param_driver>
-            <driven
-             id="1010" />
+    <param
+     id="816"
+     group="0"
+     name="Loose Lower Clothing"
+     label="Pants Fit"
+   show_simple="true"
+     wearable="pants"
+     edit_group="pants"
+     edit_group_order="2.5"
+     label_min="Tight Pants"
+     label_max="Loose Pants"
+     value_min="0"
+     value_max="1"
+     camera_distance="1.8"
+     camera_angle="30"
+     camera_elevation="-.3">
+      <param_driver>
+        <driven
+         id="516" />
+
+        <driven
+         id="913"
+         min1="0.1"
+         max1="0.5"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="814"
+     group="0"
+     wearable="pants"
+     edit_group="pants"
+     edit_group_order="2"
+     name="Waist Height"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default="1"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation="-.3">
+      <param_driver>
+        <driven
+         id="614" />
+
+        <driven
+         id="1017" />
+
+        <driven
+         id="1033" />
+
+        <driven
+         id="914"
+         min1="0"
+         max1=".98"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="815"
+     group="0"
+     wearable="pants"
+     edit_group="pants"
+     edit_group_order="1"
+     name="Pants Length"
+   show_simple="true"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".8"
+   simple_percent_min="20"
+   simple_percent_max="100"
+     camera_distance="1.8"
+     camera_angle="30"
+     camera_elevation="-.3">
+      <param_driver>
+        <driven
+         id="615"
+         min1="0"
+         max1=".9"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="1018"
+         min1="0"
+         max1=".9"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="1036"
+         min1="0"
+         max1=".9"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="793"
+         min1=".9"
+         max1="1"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="915"
+         min1="0"
+         max1=".882"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="800"
+     group="0"
+     wearable="shirt"
+     edit_group="shirt"
+     edit_group_order="1"
+     name="Sleeve Length"
+   show_simple="true"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".89"
+   simple_percent_min="15"
+   simple_percent_max="100"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="600" />
+
+        <driven
+         id="1013" />
+
+        <driven
+         id="1029" />
+
+        <driven
+         id="900"
+         min1="0"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="801"
+     group="0"
+     wearable="shirt"
+     edit_group="shirt"
+     edit_group_order="2"
+     name="Shirt Bottom"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default="1"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="601" />
+
+        <driven
+         id="1014" />
+
+        <driven
+         id="1030" />
+
+        <driven
+         id="901"
+         min1="0"
+         max1=".98"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="802"
+     group="0"
+     wearable="shirt"
+     edit_group="shirt"
+     edit_group_order="3"
+     name="Collar Front"
+   show_simple="true"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default=".78"
+   simple_percent_min="40"
+   simple_percent_max="100"
+     camera_distance="1.2"
+     camera_angle="15"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="602" />
+
+        <driven
+         id="1015" />
+
+        <driven
+         id="1031" />
+
+        <driven
+         id="902"
+         min1="0"
+         max1=".98"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="781"
+     group="0"
+     wearable="shirt"
+     edit_group="shirt"
+     edit_group_order="3.1"
+     name="Collar Back"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default=".78"
+     camera_distance="1.2"
+     camera_angle="195"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="778" />
+
+        <driven
+         id="1016" />
+
+        <driven
+         id="1032" />
+
+        <driven
+         id="903"
+         min1="0"
+         max1=".98"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="150"
+     group="0"
+     wearable="skin"
+     edit_group="skin_bodydetail"
+     name="Body Definition"
+     label_min="Less"
+     label_max="More"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_distance="1.4"
+     camera_elevation="-.2">
+      <param_driver>
+        <driven
+         id="125" />
+
+        <driven
+         id="126" />
+
+        <driven
+         id="160" />
+
+        <driven
+         id="161" />
+
+        <driven
+         id="874" />
+
+        <driven
+         id="878" />
+
+      </param_driver>
+    </param>
+
+    <param
+     id="775"
+     group="0"
+     wearable="skin"
+     edit_group="skin_bodydetail"
+     name="Body Freckles"
+     label_min="Less Freckles"
+     label_max="More Freckles"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_distance="1.4"
+     camera_elevation="-.2">
+      <param_driver>
+        <driven
+         id="776" />
+
+        <driven
+         id="777" />
+      </param_driver>
+    </param>
+
+    <param
+     id="162"
+     group="0"
+     wearable="skin"
+     edit_group="skin_facedetail"
+     edit_group_order="1"
+     name="Facial Definition"
+     label_min="Less"
+     label_max="More"
+     value_min="0"
+     value_max="1"
+     camera_distance=".3"
+     camera_elevation=".07"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="158" />
+
+        <driven
+         id="159" />
+
+        <driven
+               id="873" />
+      </param_driver>
+    </param>
+
+    <param
+     id="163"
+     group="0"
+     wearable="skin"
+     edit_group="skin_facedetail"
+     edit_group_order="3"
+     name="wrinkles"
+     label_min="Less"
+     label_max="More"
+     value_min="0"
+     value_max="1"
+     camera_distance=".3"
+     camera_elevation=".07"
+     value_default="0">
+      <param_driver>
+        <!--<driven
+                     id="128" />-->
+        <driven
+         id="118" />
+      </param_driver>
+    </param>
+
+    <param
+     id="505"
+     group="0"
+     wearable="shape"
+     edit_group="shape_mouth"
+     edit_group_order="3"
+     name="Lip Thickness"
+     label_min="Thin Lips"
+     label_max="Fat Lips"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_distance=".3"
+     camera_elevation=".04"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="26"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="28"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="799"
+     group="0"
+     wearable="shape"
+     edit_group="shape_mouth"
+     edit_group_order="3.2"
+     name="Lip Ratio"
+   label="Lip Ratio"
+   show_simple="true"
+     label_min="More Upper Lip"
+     label_max="More Lower Lip"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_distance=".3"
+     camera_elevation=".04"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="797"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="798"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="155"
+     group="0"
+     wearable="shape"
+     edit_group="shape_mouth"
+     edit_group_order="1"
+     name="Lip Width"
+   label="Lip Width"
+     label_min="Narrow Lips"
+     label_max="Wide Lips"
+     show_simple="true"
+     value_min="-0.9"
+     value_max="1.3"
+     camera_distance=".3"
+     camera_elevation=".04"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="29" />
+
+        <driven
+         id="30" />
+      </param_driver>
+    </param>
+
+    <param
+     id="196"
+     group="0"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="2"
+     name="Eye Spacing"
+   label="Eye Spacing"
+     label_min="Close Set Eyes"
+     label_max="Far Set Eyes"
+     show_simple="true"
+     value_min="-2"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".35"
+     camera_angle="5">
+      <param_driver>
+        <driven
+         id="194" />
+
+        <driven
+         id="195" />
+      </param_driver>
+    </param>
+
+    <param
+     id="769"
+     group="0"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="4.5"
+     name="Eye Depth"
+     label_min="Sunken Eyes"
+     label_max="Bugged Eyes"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="75">
+      <param_driver>
+        <driven
+         id="767" />
+
+        <driven
+         id="768" />
+      </param_driver>
+    </param>
+
+    <param
+     id="198"
+     group="0"
+     wearable="shoes"
+     edit_group="shoes"
+     edit_group_order="2"
+     name="Heel Height"
+     label_min="Low Heels"
+     label_max="High Heels"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_angle="45"
+     camera_distance=".8"
+     camera_elevation="-1">
+      <param_driver>
+        <driven
+         id="197" />
+
+        <driven
+         id="500" />
+      </param_driver>
+    </param>
+
+    <param
+     id="513"
+     group="0"
+     wearable="shoes"
+     edit_group="shoes"
+     edit_group_order="3"
+     name="Heel Shape"
+     label_min="Pointy Heels"
+     label_max="Thick Heels"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_angle="45"
+     camera_distance="1.5"
+     camera_elevation="-1">
+      <param_driver>
+        <driven
+         id="509"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="510"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="514"
+     group="0"
+     wearable="shoes"
+     edit_group="shoes"
+     edit_group_order="4"
+     name="Toe Shape"
+     label_min="Pointy"
+     label_max="Square"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_angle="5"
+     camera_distance=".8"
+     camera_elevation="-.8">
+      <param_driver>
+        <driven
+         id="511"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="512"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="503"
+     group="0"
+     wearable="shoes"
+     edit_group="shoes"
+     edit_group_order="6"
+     name="Platform Height"
+     label_min="Low Platforms"
+     label_max="High Platforms"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_angle="45"
+     camera_distance=".5"
+     camera_elevation="-1">
+      <param_driver>
+        <driven
+         id="501" />
+
+        <driven
+         id="502" />
+      </param_driver>
+    </param>
+
+    <param
+     id="193"
+     group="0"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="3"
+     name="Head Shape"
+   label="Head Shape"
+     label_min="More Square"
+     label_max="More Round"
+     show_simple="true"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="188"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="642"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="189"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="643"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="157"
+     group="0"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="13"
+     name="Belly Size"
+     label_min="Small"
+     label_max="Big"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_distance="1.4"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="104" />
+
+        <driven
+         id="156" />
+
+        <driven
+         id="849" />
+      </param_driver>
+    </param>
+
+    <param
+     id="637"
+     group="0"
+     wearable="shape"
+     edit_group="shape_body"
+     edit_group_order="3"
+     name="Body Fat"
+     label_min="Less Body Fat"
+     label_max="More Body Fat"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_distance="1.8">
+      <param_driver>
+        <driven
+         id="633" />
+
+        <driven
+         id="634" />
+
+        <driven
+         id="635" />
+
+        <driven
+         id="851" />
+      </param_driver>
+    </param>
+
+    <param
+     id="130"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="8"
+     name="Front Fringe"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".45"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="144"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="145"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="131"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="9"
+     name="Side Fringe"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="90">
+      <param_driver>
+        <driven
+         id="146"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="147"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="132"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="10"
+     name="Back Fringe"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".39"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="160">
+      <param_driver>
+        <driven
+         id="148"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="149"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="133"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="2"
+     name="Hair Front"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".25"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="172"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="171"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="134"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="3"
+     name="Hair Sides"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="90">
+      <param_driver>
+        <driven
+         id="174"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="173"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="135"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="4"
+     name="Hair Back"
+   show_simple="true"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".55"
+     camera_elevation="-.1"
+     camera_distance=".8"
+     camera_angle="160">
+      <param_driver>
+        <driven
+         id="176"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="175"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="136"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="11.5"
+     name="Hair Sweep"
+     label_min="Sweep Forward"
+     label_max="Sweep Back"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="90">
+      <param_driver>
+        <driven
+         id="179"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="178"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="137"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="16"
+     name="Hair Tilt"
+     label_min="Left"
+     label_max="Right"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="0">
+      <param_driver>
+        <driven
+         id="190"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="191"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="608"
+     group="0"
+     wearable="jacket"
+     edit_group="jacket"
+     edit_group_order="2"
+     name="bottom length lower"
+     label="Jacket Length"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".8"
+     camera_distance="1.4"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="620" />
+
+        <driven
+         id="1025" />
+
+        <driven
+         id="1037" />
+
+        <driven
+         id="621" />
+
+        <driven
+         id="1027" />
+
+        <driven
+         id="1033" />
+      </param_driver>
+    </param>
+
+    <param
+     id="609"
+     group="0"
+     wearable="jacket"
+     edit_group="jacket"
+     edit_group_order="4"
+     name="open jacket"
+     label="Open Front"
+     label_min="Open"
+     label_max="Closed"
+     value_min="0"
+     value_max="1"
+     value_default=".2"
+     camera_distance="1.4"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="622" />
+
+        <driven
+         id="1026" />
+
+        <driven
+         id="1038" />
+
+        <driven
+         id="623" />
+
+        <driven
+         id="1028" />
+
+        <driven
+         id="1034" />
+      </param_driver>
+    </param>
+
+    <param
+     id="105"
+     group="0"
+     sex="female"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="6"
+     name="Breast Size"
+     label_min="Small"
+     label_max="Large"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".3"
+     camera_distance="1.2"
+     camera_angle="30">
+      <param_driver>
+        <driven
+         id="843"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".01" />
+
+        <driven
+         id="627"
+         min1="0"
+         max1="0.01"
+         max2="0.01"
+         min2=".5" />
+
+        <driven
+         id="626"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="629"
+     group="0"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="6"
+     name="Forehead Angle"
+     label_min="More Vertical"
+     label_max="More Sloped"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="70">
+      <param_driver>
+        <driven
+         id="630"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="644"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="631"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="645"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="646"
+     group="0"
+     name="Egg_Head"
+     label="Egg Head"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="4"
+     label_min="Chin Heavy"
+     label_max="Forehead Heavy"
+     show_simple="true"
+     value_min="-1.3"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="640" />
+
+        <driven
+         id="186" />
+      </param_driver>
+    </param>
+
+    <param
+     id="647"
+     group="0"
+     name="Squash_Stretch_Head"
+     label="Head Stretch"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="2"
+     show_simple="true"
+     label_min="Squash Head"
+     label_max="Stretch Head"
+     value_min="-0.5"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="641" />
+
+        <driven
+         id="187" />
+      </param_driver>
+    </param>
+
+    <param
+     id="649"
+     group="0"
+     sex="female"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="1.1"
+     name="Torso Muscles"
+   label="Torso Muscles"
+   show_simple="true"
+     label_min="Less Muscular"
+     label_max="More Muscular"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance="1"
+     camera_angle="15">
+      <param_driver>
+        <driven
+         id="648"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="106"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
+
+    <param
+     id="678"
+     group="0"
+     sex="male"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="1"
+     name="Torso Muscles"
+     show_simple="true"
+   label_min="Less Muscular"
+     label_max="More Muscular"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance="1.2"
+     camera_angle="0">
+      <param_driver>
+        <driven
+         id="677"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="106"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1011" />
-         </param_driver>
-      </param>
+    <param
+     id="652"
+     group="0"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="1"
+     name="Leg Muscles"
+     label_min="Less Muscular"
+     label_max="More Muscular"
+     show_simple="true"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_distance="1.3"
+     camera_elevation="-.5"
+     camera_angle="15">
+      <param_driver>
+        <driven
+         id="651"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="152"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-      <param
-       id="606"
-       group="0"
-       wearable="jacket"
-       edit_group="jacket"
-       edit_group_order="1"
-       name="Sleeve Length"
-       label_min="Short"
-       label_max="Long"
-       value_min="0"
-       value_max="1"
-       value_default=".8"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1019" />
+    <param
+     id="80"
+     name="male"
+     group="0"
+     edit_group="dummy"
+     wearable="shape"
+     value_min="0"
+     value_max="1">
+      <param_driver>
+        <driven
+         id="32" />
+
+        <driven
+         id="153" />
+
+        <driven
+         id="40" />
+
+        <driven
+         id="100" />
+
+        <driven
+         id="857" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1039" />
+    <param
+     id="659"
+     group="0"
+     wearable="shape"
+     edit_group="shape_mouth"
+     edit_group_order="5"
+     name="Mouth Corner"
+     label_min="Corner Down"
+     label_max="Corner Up"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation="0"
+     camera_distance=".28">
+      <param_driver>
+        <driven
+         id="658"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="657"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1020" />
-         </param_driver>
-      </param>
+    <param
+     id="662"
+     group="0"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="5"
+     name="Face Shear"
+     label_min="Shear Right Up"
+     label_max="Shear Left Up"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5">
+      <param_driver>
+        <driven
+         id="660" />
+
+        <driven
+         id="661" />
+
+        <driven
+         id="774" />
+      </param_driver>
+    </param>
 
-      <param
-       id="607"
-       group="0"
-       wearable="jacket"
-       edit_group="jacket"
-       edit_group_order="3"
-       name="Collar Front"
-       label_min="Low"
-       label_max="High"
-       value_min="0"
-       value_max="1"
-       value_default=".8"
-       camera_distance="1.2"
-       camera_angle="15"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1021" />
+    <param
+     id="773"
+     group="0"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="4.5"
+     name="Head Length"
+     label_min="Flat Head"
+     label_max="Long Head"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="75">
+      <param_driver>
+        <driven
+         id="770" />
+
+        <driven
+         id="771" />
+
+        <driven
+         id="772" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1040" />
+    <param
+     id="682"
+     group="0"
+     wearable="shape"
+     edit_group="shape_head"
+     edit_group_order="1"
+     name="Head Size"
+   label="Head Size"
+     label_min="Small Head"
+     label_max="Big Head"
+     show_simple="true"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".5">
+      <param_driver>
+        <driven
+         id="679" />
+
+        <driven
+         id="694" />
+
+        <driven
+         id="680" />
+
+        <driven
+         id="681" />
+
+        <driven
+         id="655" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1022" />
-         </param_driver>
-      </param>
+    <param
+     id="690"
+     group="0"
+     wearable="shape"
+     edit_group="shape_eyes"
+     edit_group_order="1"
+     name="Eye Size"
+   label="Eye Size"
+     label_min="Beady Eyes"
+     label_max="Anime Eyes"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+   show_simple="true"
+     camera_elevation=".1"
+     camera_distance=".35">
+      <param_driver>
+        <driven
+         id="686" />
+
+        <driven
+         id="687" />
+
+        <driven
+         id="695" />
+
+        <driven
+         id="688" />
+
+        <driven
+         id="691" />
+
+        <driven
+         id="689" />
+      </param_driver>
+    </param>
 
-      <param
-       id="780"
-       group="0"
-       wearable="jacket"
-       edit_group="jacket"
-       edit_group_order="3.5"
-       name="Collar Back"
-       label_min="Low"
-       label_max="High"
-       value_min="0"
-       value_max="1"
-       value_default=".8"
-       camera_distance="1.2"
-       camera_angle="195"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1023" />
+    <param
+     id="752"
+     group="0"
+     sex="male"
+     wearable="hair"
+     edit_group="hair_facial"
+     edit_group_order="1"
+     name="Hair Thickness"
+     label_min="5 O'Clock Shadow"
+     label_max="Bushy Hair"
+     value_min="0"
+     value_max="1"
+     value_default=".5"
+     camera_elevation="0"
+     camera_distance=".28">
+      <param_driver>
+        <driven
+         id="751"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".2" />
+
+        <driven
+         id="1012"
+         min1="0"
+         max1="0"
+         max2=".2"
+         min2=".6" />
+
+        <driven
+         id="400"
+         min1=".2"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1041" />
+    <param
+     id="763"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="1"
+     name="Hair Volume"
+   show_simple="true"
+     label_min="Less Volume"
+     label_max="More Volume"
+     value_min="0"
+     value_max="1"
+     value_default=".55"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="20">
+      <param_driver>
+        <driven
+         id="761"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".5" />
+
+        <driven
+         id="180"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1024" />
-         </param_driver>
-      </param>
+    <param
+     id="834"
+     group="0"
+     wearable="jacket"
+     edit_group="colorpicker"
+     name="jacket_red"
+     value_min="0"
+     value_max="1"
+     value_default="1">
+      <param_driver>
+        <driven
+         id="809"
+         min1="0"
+         max1="1"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="831"
+         min1="0"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-      <param
-       id="603"
-       group="0"
-       wearable="undershirt"
-       edit_group="undershirt"
-       edit_group_order="1"
-       name="Sleeve Length"
-       label_min="Short"
-       label_max="Long"
-       value_min=".01"
-       value_max="1"
-       value_default=".4"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1042" />
+    <param
+     id="835"
+     group="0"
+     wearable="jacket"
+     edit_group="colorpicker"
+     name="jacket_green"
+     value_min="0"
+     value_max="1"
+     value_default="1">
+      <param_driver>
+        <driven
+         id="810"
+         min1="0"
+         max1="1"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="832"
+         min1="0"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1043" />
-         </param_driver>
-      </param>
+    <param
+     id="836"
+     group="0"
+     wearable="jacket"
+     edit_group="colorpicker"
+     name="jacket_blue"
+     value_min="0"
+     value_max="1"
+     value_default="1">
+      <param_driver>
+        <driven
+         id="811"
+         min1="0"
+         max1="1"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="833"
+         min1="0"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-      <param
-       id="604"
-       group="0"
-       wearable="undershirt"
-       edit_group="undershirt"
-       edit_group_order="2"
-       name="Bottom"
-       label_min="Short"
-       label_max="Long"
-       value_min="0"
-       value_max="1"
-       value_default=".85"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1044" />
+    <param
+     id="785"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="14.6"
+     name="Pigtails"
+   show_simple="true"
+     label_min="Short Pigtails"
+     label_max="Long Pigtails"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="15">
+      <param_driver>
+        <driven
+         id="782"
+         min1="0"
+         max1=".10"
+         max2=".10"
+         min2=".5" />
+
+        <driven
+         id="783"
+         min1=".10"
+         max1=".5"
+         max2=".5"
+         min2=".75" />
+
+        <driven
+         id="790"
+         min1=".5"
+         max1=".75"
+         max2=".75"
+         min2="1" />
+
+        <driven
+         id="784"
+         min1=".75"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1045" />
-         </param_driver>
-      </param>
+    <param
+     id="789"
+     group="0"
+     wearable="hair"
+     edit_group="hair_style"
+     edit_group_order="14.7"
+     name="Ponytail"
+     label_min="Short Ponytail"
+     label_max="Long Ponytail"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".5"
+     camera_angle="180">
+      <param_driver>
+        <driven
+         id="786"
+         min1="0"
+         max1=".10"
+         max2=".10"
+         min2=".66" />
+
+        <driven
+         id="787"
+         min1=".10"
+         max1=".66"
+         max2=".66"
+         min2="1" />
+
+        <driven
+         id="788"
+         min1=".66"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-      <param
-       id="605"
-       group="0"
-       wearable="undershirt"
-       edit_group="undershirt"
-       edit_group_order="3"
-       name="Collar Front"
-       label_min="Low"
-       label_max="High"
-       value_min="0"
-       value_max="1"
-       value_default=".84"
-       camera_distance=".8"
-       camera_angle="15"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1046" />
+    <param
+     id="795"
+     group="0"
+     name="Butt Size"
+     label="Butt Size"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="4"
+     label_min="Flat Butt"
+     label_max="Big Butt"
+     value_min="0"
+     value_max="1"
+     value_default=".25"
+     camera_angle="180"
+     camera_distance=".6">
+      <param_driver>
+        <driven
+         id="867"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".3" />
+
+        <driven
+         id="794"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".3" />
+
+        <driven
+         id="151"
+         min1=".3"
+         max1="1"
+         max2="1"
+         min2="1" />
+
+        <driven
+         id="852"
+         min1=".3"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1047" />
-         </param_driver>
-      </param>
+    <param
+     id="841"
+     group="0"
+     name="Bowed_Legs"
+     label="Knee Angle"
+     wearable="shape"
+     edit_group_order="5.5"
+     edit_group="shape_legs"
+     label_min="Knock Kneed"
+     label_max="Bow Legged"
+     value_min="-1"
+     value_max="1"
+     value_default="0"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_driver>
+        <driven
+         id="853" />
+
+        <driven
+         id="847" />
+      </param_driver>
+    </param>
 
-      <param
-       id="779"
-       group="0"
-       wearable="undershirt"
-       edit_group="undershirt"
-       edit_group_order="4"
-       name="Collar Back"
-       label_min="Low"
-       label_max="High"
-       value_min="0"
-       value_max="1"
-       value_default=".84"
-       camera_distance=".8"
-       camera_angle="195"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1048" />
+    <param
+     id="753"
+     group="0"
+     name="Saddlebags"
+     label="Saddle Bags"
+     wearable="shape"
+     edit_group="shape_legs"
+     edit_group_order="5"
+     label_min="Less Saddle"
+     label_max="More Saddle"
+     value_min="-0.5"
+     value_max="3"
+     value_default="0"
+     camera_angle="0"
+     camera_distance="1.2">
+      <param_driver>
+        <driven
+         id="850" />
+
+        <driven
+         id="854" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1049" />
-         </param_driver>
-      </param>
+    <param
+     id="676"
+     group="0"
+     name="Love_Handles"
+     label="Love Handles"
+     wearable="shape"
+     edit_group="shape_torso"
+     edit_group_order="12"
+     label_min="Less Love"
+     label_max="More Love"
+     value_min="-1"
+     value_max="2"
+     value_default="0"
+     camera_elevation=".3"
+     camera_distance=".9">
+      <param_driver>
+        <driven
+         id="855" />
+
+        <driven
+         id="856" />
+      </param_driver>
+    </param>
 
-      <param
-       id="617"
-       group="0"
-       wearable="socks"
-       edit_group="socks"
-       name="Socks Length"
-       label_min="Short"
-       label_max="Long"
-       value_min="0"
-       value_max="1"
-       value_default="0.35"
-       camera_distance=".95"
-       camera_angle="30"
-       camera_elevation="-.75">
-         <param_driver>
-            <driven
-             id="1050" />
+    <param
+     id="863"
+     group="0"
+     name="skirt_looseness"
+     label="Skirt Fit"
+   show_simple="true"
+     clothing_morph="true"
+     wearable="skirt"
+     edit_group_order="2"
+     edit_group="skirt"
+     label_min="Tight Skirt"
+     label_max="Poofy Skirt"
+     value_min="0"
+     value_max="1"
+     value_default=".333"
+     camera_distance="1.3"
+     camera_elevation="-.5">
+      <param_driver>
+        <driven
+         id="866"
+         min1="0"
+         max1="0"
+         max2="0"
+         min2=".2" />
+
+        <driven
+         id="846"
+         min1="0"
+         max1=".5"
+         max2=".5"
+         min2="1" />
+
+        <driven
+         id="845"
+         min1=".5"
+         max1="1"
+         max2="1"
+         min2="1" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1051" />
-         </param_driver>
-      </param>
+    <param
+     id="119"
+     group="0"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="1"
+     name="Eyebrow Size"
+   show_simple="true"
+     label_min="Thin Eyebrows"
+     label_max="Bushy Eyebrows"
+     value_min="0"
+     value_max="1"
+     value_default="0.5"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_driver>
+        <driven
+         id="1000" />
+
+        <driven
+         id="1001" />
+      </param_driver>
+    </param>
 
-      <param
-       id="616"
-       group="0"
-       wearable="shoes"
-       edit_group="shoes"
-       edit_group_order="1"
-       name="Shoe Height"
-       label_min="Short"
-       label_max="Tall"
-       value_min="0"
-       value_max="1"
-       value_default="0.1"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation="-.75">
-         <param_driver>
-            <driven
-             id="1052" />
+    <param
+     id="750"
+     group="0"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="2"
+     name="Eyebrow Density"
+     label_min="Sparse"
+     label_max="Dense"
+     value_min="0"
+     value_max="1"
+     value_default="0.7"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_driver>
+        <driven
+         id="1002" />
+
+        <driven
+         id="1003" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1053" />
-         </param_driver>
-      </param>
+    <param
+     id="166"
+     sex="male"
+     group="0"
+     wearable="hair"
+     edit_group="hair_facial"
+     edit_group_order="2"
+     name="Sideburns"
+   show_simple="true"
+     label_min="Short Sideburns"
+     label_max="Mutton Chops"
+     value_min="0"
+     value_max="1"
+     value_default="0.0"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="30">
+      <param_driver>
+        <driven
+         id="1004" />
+
+        <driven
+         id="1005" />
+      </param_driver>
+    </param>
 
-      <param
-       id="619"
-       group="0"
-       wearable="underpants"
-       edit_group="underpants"
-       name="Pants Length"
-       label_min="Short"
-       label_max="Long"
-       value_min="0"
-       value_max="1"
-       value_default=".3"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation="-.3">
-         <param_driver>
-            <driven
-             id="1054" />
+    <param
+     id="167"
+     sex="male"
+     group="0"
+     wearable="hair"
+     edit_group="hair_facial"
+     edit_group_order="3"
+     name="Moustache"
+   show_simple="true"
+     label_min="Chaplin"
+     label_max="Handlebars"
+     value_min="0"
+     value_max="1"
+     value_default="0.0"
+     camera_elevation=".1"
+     camera_distance=".3"
+     camera_angle="30">
+      <param_driver>
+        <driven
+         id="1006" />
+
+        <driven
+         id="1007" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1055" />
-         </param_driver>
-      </param>
+    <param
+     id="168"
+     sex="male"
+     group="0"
+     wearable="hair"
+     edit_group="hair_facial"
+     edit_group_order="5"
+     name="Soulpatch"
+   show_simple="true"
+     label_min="Less soul"
+     label_max="More soul"
+     value_min="0"
+     value_max="1"
+     value_default="0.0"
+     camera_elevation="-.1"
+     camera_distance=".3"
+     camera_angle="0">
+      <param_driver>
+        <driven
+         id="1008" />
+
+        <driven
+         id="1009" />
+      </param_driver>
+    </param>
 
-      <param
-       id="624"
-       group="0"
-       wearable="underpants"
-       edit_group="underpants"
-       name="Pants Waist"
-       label_min="Low"
-       label_max="High"
-       value_min="0"
-       value_max="1"
-       value_default=".8"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation="-.3">
-         <param_driver>
-            <driven
-             id="1056" />
+    <param
+     id="169"
+     sex="male"
+     group="0"
+     wearable="hair"
+     edit_group="hair_facial"
+     edit_group_order="4"
+     name="Chin Curtains"
+   show_simple="true"
+     label_min="Less Curtains"
+     label_max="More Curtains"
+     value_min="0"
+     value_max="1"
+     value_default="0.0"
+     camera_elevation="-.1"
+     camera_distance=".3"
+     camera_angle="45">
+      <param_driver>
+        <driven
+         id="1010" />
+
+        <driven
+         id="1011" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1057" />
-         </param_driver>
-      </param>
+    <param
+     id="606"
+     group="0"
+     wearable="jacket"
+     edit_group="jacket"
+     edit_group_order="1"
+     name="Sleeve Length"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".8"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1019" />
+
+        <driven
+         id="1039" />
+
+        <driven
+         id="1020" />
+      </param_driver>
+    </param>
 
-      <param
-       id="93"
-       group="0"
-       wearable="gloves"
-       edit_group="gloves"
-       name="Glove Length"
-       label_min="Short"
-       label_max="Long"
-       value_min=".01"
-       value_max="1"
-       value_default=".8"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1058" />
+    <param
+     id="607"
+     group="0"
+     wearable="jacket"
+     edit_group="jacket"
+     edit_group_order="3"
+     name="Collar Front"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default=".8"
+     camera_distance="1.2"
+     camera_angle="15"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1021" />
+
+        <driven
+         id="1040" />
+
+        <driven
+         id="1022" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1059" />
-         </param_driver>
-      </param>
+    <param
+     id="780"
+     group="0"
+     wearable="jacket"
+     edit_group="jacket"
+     edit_group_order="3.5"
+     name="Collar Back"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default=".8"
+     camera_distance="1.2"
+     camera_angle="195"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1023" />
+
+        <driven
+         id="1041" />
+
+        <driven
+         id="1024" />
+      </param_driver>
+    </param>
 
-      <param
-       id="844"
-       group="0"
-       wearable="gloves"
-       edit_group="gloves"
-       name="Glove Fingers"
-       label_min="Fingerless"
-       label_max="Fingers"
-       value_min=".01"
-       value_max="1"
-       value_default="1"
-       camera_distance="1.2"
-       camera_angle="30"
-       camera_elevation=".2">
-         <param_driver>
-            <driven
-             id="1060" />
+    <param
+     id="603"
+     group="0"
+     wearable="undershirt"
+     edit_group="undershirt"
+     edit_group_order="1"
+     name="Sleeve Length"
+     label_min="Short"
+     label_max="Long"
+     value_min=".01"
+     value_max="1"
+     value_default=".4"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1042" />
+
+        <driven
+         id="1043" />
+      </param_driver>
+    </param>
 
-            <driven
-             id="1061" />
-         </param_driver>
-      </param>
+    <param
+     id="604"
+     group="0"
+     wearable="undershirt"
+     edit_group="undershirt"
+     edit_group_order="2"
+     name="Bottom"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".85"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1044" />
+
+        <driven
+         id="1045" />
+      </param_driver>
+    </param>
 
-<!--Pointy eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
-      <param
-       id="16"
-       group="0"
-       name="Pointy_Eyebrows"
-       label="Eyebrow Points"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="4"
-       label_min="Smooth"
-       label_max="Pointy"
-       value_min="-.5"
-       value_max="3"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_driver>
-            <driven
-             id="870" />
-         </param_driver>
-      </param>
+    <param
+     id="605"
+     group="0"
+     wearable="undershirt"
+     edit_group="undershirt"
+     edit_group_order="3"
+     name="Collar Front"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default=".84"
+     camera_distance=".8"
+     camera_angle="15"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1046" />
+
+        <driven
+         id="1047" />
+      </param_driver>
+    </param>
 
-<!--Lower eyebrows became a driver/driven param with new min value for backwards compatibility between 1.0 and 1.1-->
-      <param
-       id="757"
-       group="0"
-       name="Lower_Eyebrows"
-       label="Eyebrow Height"
-	   show_simple="true"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="2.5"
-       label_min="Higher"
-       label_max="Lower"
-       value_min="-4"
-       value_max="2"
-       value_default="-1"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_driver>
-            <driven
-             id="871" />
-         </param_driver>
-      </param>
+    <param
+     id="779"
+     group="0"
+     wearable="undershirt"
+     edit_group="undershirt"
+     edit_group_order="4"
+     name="Collar Back"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default=".84"
+     camera_distance=".8"
+     camera_angle="195"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1048" />
+
+        <driven
+         id="1049" />
+      </param_driver>
+    </param>
 
-<!--Arced eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
-      <param
-       id="31"
-       group="0"
-       name="Arced_Eyebrows"
-       label="Eyebrow Arc"
-       wearable="hair"
-       edit_group="hair_eyebrows"
-       edit_group_order="3"
-       label_min="Flat"
-       label_max="Arced"
-       value_min="0"
-       value_max="2"
-       value_default=".5"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_driver>
-            <driven
-             id="872" />
-         </param_driver>
-      </param>
+    <param
+     id="617"
+     group="0"
+     wearable="socks"
+     edit_group="socks"
+     name="Socks Length"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default="0.35"
+     camera_distance=".95"
+     camera_angle="30"
+     camera_elevation="-.75">
+      <param_driver>
+        <driven
+         id="1050" />
+
+        <driven
+         id="1051" />
+      </param_driver>
+    </param>
+
+    <param
+     id="616"
+     group="0"
+     wearable="shoes"
+     edit_group="shoes"
+     edit_group_order="1"
+     name="Shoe Height"
+     label_min="Short"
+     label_max="Tall"
+     value_min="0"
+     value_max="1"
+     value_default="0.1"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation="-.75">
+      <param_driver>
+        <driven
+         id="1052" />
+
+        <driven
+         id="1053" />
+      </param_driver>
+    </param>
+
+    <param
+     id="619"
+     group="0"
+     wearable="underpants"
+     edit_group="underpants"
+     name="Pants Length"
+     label_min="Short"
+     label_max="Long"
+     value_min="0"
+     value_max="1"
+     value_default=".3"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation="-.3">
+      <param_driver>
+        <driven
+         id="1054" />
+
+        <driven
+         id="1055" />
+      </param_driver>
+    </param>
+
+    <param
+     id="624"
+     group="0"
+     wearable="underpants"
+     edit_group="underpants"
+     name="Pants Waist"
+     label_min="Low"
+     label_max="High"
+     value_min="0"
+     value_max="1"
+     value_default=".8"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation="-.3">
+      <param_driver>
+        <driven
+         id="1056" />
+
+        <driven
+         id="1057" />
+      </param_driver>
+    </param>
+
+    <param
+     id="93"
+     group="0"
+     wearable="gloves"
+     edit_group="gloves"
+     name="Glove Length"
+     label_min="Short"
+     label_max="Long"
+     value_min=".01"
+     value_max="1"
+     value_default=".8"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1058" />
+
+        <driven
+         id="1059" />
+      </param_driver>
+    </param>
+
+    <param
+     id="844"
+     group="0"
+     wearable="gloves"
+     edit_group="gloves"
+     name="Glove Fingers"
+     label_min="Fingerless"
+     label_max="Fingers"
+     value_min=".01"
+     value_max="1"
+     value_default="1"
+     camera_distance="1.2"
+     camera_angle="30"
+     camera_elevation=".2">
+      <param_driver>
+        <driven
+         id="1060" />
+
+        <driven
+         id="1061" />
+      </param_driver>
+    </param>
+
+    <!--Pointy eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
+    <param
+     id="16"
+     group="0"
+     name="Pointy_Eyebrows"
+     label="Eyebrow Points"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="4"
+     label_min="Smooth"
+     label_max="Pointy"
+     value_min="-.5"
+     value_max="3"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_driver>
+        <driven
+         id="870" />
+      </param_driver>
+    </param>
+
+    <!--Lower eyebrows became a driver/driven param with new min value for backwards compatibility between 1.0 and 1.1-->
+    <param
+     id="757"
+     group="0"
+     name="Lower_Eyebrows"
+     label="Eyebrow Height"
+   show_simple="true"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="2.5"
+     label_min="Higher"
+     label_max="Lower"
+     value_min="-4"
+     value_max="2"
+     value_default="-1"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_driver>
+        <driven
+         id="871" />
+      </param_driver>
+    </param>
+
+    <!--Arced eyebrows became a driver/driven param with new max value for backwards compatibility between 1.0 and 1.1-->
+    <param
+     id="31"
+     group="0"
+     name="Arced_Eyebrows"
+     label="Eyebrow Arc"
+     wearable="hair"
+     edit_group="hair_eyebrows"
+     edit_group_order="3"
+     label_min="Flat"
+     label_max="Arced"
+     value_min="0"
+     value_max="2"
+     value_default=".5"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_driver>
+        <driven
+         id="872" />
+      </param_driver>
+    </param>
       
-      <param
-       id="877"
-       group="0"
-       name="Jacket Wrinkles"
-       label="Jacket Wrinkles"
-       wearable="jacket"
-       edit_group="jacket"
-       edit_group_order="20"
-       label_min="No Wrinkles"
-       label_max="Wrinkles"
-       value_min="0"
-       value_max="1"
-       value_default="0"
-       camera_elevation=".1"
-       camera_distance=".3">
-         <param_driver>
-            <driven
-             id="875" />
+
+    <param
+     id="877"
+     group="0"
+     name="Jacket Wrinkles"
+     label="Jacket Wrinkles"
+     wearable="jacket"
+     edit_group="jacket"
+     edit_group_order="20"
+     label_min="No Wrinkles"
+     label_max="Wrinkles"
+     value_min="0"
+     value_max="1"
+     value_default="0"
+     camera_elevation=".1"
+     camera_distance=".3">
+      <param_driver>
+        <driven
+         id="875" />
              
-             <driven
-             id="876" />
-         </param_driver>
-      </param>
+
+        <driven
+        id="876" />
+      </param_driver>
+    </param>
       
-   </driver_parameters>
+
+  </driver_parameters>
 
   <morph_masks>
     <mask
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 41aeeee82a5dbff0e8371295dba5413e3b8e5245..fa60c5afc1e3606537555b97a0702fc5bc622760 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -6320,8 +6320,8 @@ void LLAgent::sendAgentSetAppearance()
 			continue;
 		}
 
-		// IMG_DEFAULT_AVATAR means not baked
-		if (!mAvatarObject->isTextureDefined(texture_index))
+		// IMG_DEFAULT_AVATAR means not baked. 0 index should be ignored for baked textures
+		if (!mAvatarObject->isTextureDefined(texture_index, 0))
 		{
 			textures_current = FALSE;
 			break;
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 2cfa8d2a544a6a1cb1784c5f1a62d61e89076144..a26b799d3d8ace8391fab407f47e69a94a600af7 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -46,6 +46,7 @@
 #include "llwearablelist.h"
 #include "llgesturemgr.h"
 #include "llappearancemgr.h"
+#include "lltexlayer.h"
 
 #include <boost/scoped_ptr.hpp>
 
@@ -65,11 +66,10 @@ class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver
 	struct InitialWearableData
 	{
 		EWearableType mType;
-		U32 mIndex;
 		LLUUID mItemID;
 		LLUUID mAssetID;
-		InitialWearableData(EWearableType type, U32 index, LLUUID itemID, LLUUID assetID) :
-			mType(type), mIndex(index), mItemID(itemID), mAssetID(assetID) { }
+		InitialWearableData(EWearableType type, LLUUID itemID, LLUUID assetID) :
+			mType(type), mItemID(itemID), mAssetID(assetID) { }
 	};
 
 	typedef std::vector<InitialWearableData> initial_wearable_data_vec_t;
@@ -139,11 +139,6 @@ LLAgentWearables::LLAgentWearables() :
 	mWearablesLoaded(FALSE),
 	mAvatarObject(NULL)
 {
-	// MULTI-WEARABLE: TODO remove null entries.
-	for (U32 i = 0; i < WT_COUNT; i++)
-	{
-		mWearableDatas[(EWearableType)i].push_back(NULL);
-	}
 }
 
 LLAgentWearables::~LLAgentWearables()
@@ -237,10 +232,16 @@ void LLAgentWearables::addWearabletoAgentInventoryDone(const S32 type,
 	{
 		wearable->setItemID(item_id);
 	}
-	setWearable((EWearableType)type,index,wearable);
 
 	if (old_item_id.notNull())
+	{	
 		gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id);
+		setWearable((EWearableType)type,index,wearable);
+	}
+	else
+	{
+		pushWearable((EWearableType)type,wearable);
+	}
 	gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
 	LLViewerInventoryItem* item = gInventory.getItem(item_id);
 	if (item && wearable)
@@ -260,11 +261,11 @@ void LLAgentWearables::sendAgentWearablesUpdate()
 {
 	// MULTI-WEARABLE: call i "type" or something.
 	// First make sure that we have inventory items for each wearable
-	for (S32 i=0; i < WT_COUNT; ++i)
+	for (S32 type=0; type < WT_COUNT; ++type)
 	{
-		for (U32 j=0; j < getWearableCount((EWearableType)i); j++)
+		for (U32 j=0; j < getWearableCount((EWearableType)type); ++j)
 		{
-			LLWearable* wearable = getWearable((EWearableType)i,j);
+			LLWearable* wearable = getWearable((EWearableType)type,j);
 			if (wearable)
 			{
 				if (wearable->getItemID().isNull())
@@ -272,7 +273,7 @@ void LLAgentWearables::sendAgentWearablesUpdate()
 					LLPointer<LLInventoryCallback> cb =
 						new addWearableToAgentInventoryCallback(
 							LLPointer<LLRefCount>(NULL),
-							i,
+							type,
 							j,
 							wearable,
 							addWearableToAgentInventoryCallback::CALL_NONE);
@@ -299,15 +300,15 @@ void LLAgentWearables::sendAgentWearablesUpdate()
 
 	lldebugs << "sendAgentWearablesUpdate()" << llendl;
 	// MULTI-WEARABLE: update for multi-wearables after server-side support is in.
-	for (S32 i=0; i < WT_COUNT; ++i)
+	for (S32 type=0; type < WT_COUNT; ++type)
 	{
 		gMessageSystem->nextBlockFast(_PREHASH_WearableData);
 
-		U8 type_u8 = (U8)i;
+		U8 type_u8 = (U8)type;
 		gMessageSystem->addU8Fast(_PREHASH_WearableType, type_u8);
 
 		// MULTI-WEARABLE: TODO: hacked index to 0, needs to loop over all once messages support this.
-		LLWearable* wearable = getWearable((EWearableType)i, 0);
+		LLWearable* wearable = getWearable((EWearableType)type, 0);
 		if (wearable)
 		{
 			//llinfos << "Sending wearable " << wearable->getName() << llendl;
@@ -327,19 +328,18 @@ void LLAgentWearables::sendAgentWearablesUpdate()
 			gMessageSystem->addUUIDFast(_PREHASH_ItemID, LLUUID::null);
 		}
 
-		lldebugs << "       " << LLWearableDictionary::getTypeLabel((EWearableType)i) << ": " << (wearable ? wearable->getAssetID() : LLUUID::null) << llendl;
+		lldebugs << "       " << LLWearableDictionary::getTypeLabel((EWearableType)type) << ": " << (wearable ? wearable->getAssetID() : LLUUID::null) << llendl;
 	}
 	gAgent.sendReliableMessage();
 }
 
-// MULTI-WEARABLE: add index.
 void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, BOOL send_update)
 {
 	LLWearable* old_wearable = getWearable(type, index);
 	if (old_wearable && (old_wearable->isDirty() || old_wearable->isOldVersion()))
 	{
 		LLUUID old_item_id = old_wearable->getItemID();
-		LLWearable* new_wearable = LLWearableList::instance().createCopyFromAvatar(old_wearable);
+		LLWearable* new_wearable = LLWearableList::instance().createCopy(old_wearable);
 		new_wearable->setItemID(old_item_id); // should this be in LLWearable::copyDataFrom()?
 		setWearable(type,index,new_wearable);
 
@@ -391,7 +391,6 @@ void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, B
 	}
 }
 
-// MULTI-WEARABLE: add index
 void LLAgentWearables::saveWearableAs(const EWearableType type,
 									  const U32 index,
 									  const std::string& new_name,
@@ -417,7 +416,7 @@ void LLAgentWearables::saveWearableAs(const EWearableType type,
 	}
 	std::string trunc_name(new_name);
 	LLStringUtil::truncate(trunc_name, DB_INV_ITEM_NAME_STR_LEN);
-	LLWearable* new_wearable = LLWearableList::instance().createCopyFromAvatar(
+	LLWearable* new_wearable = LLWearableList::instance().createCopy(
 		old_wearable,
 		trunc_name);
 	LLPointer<LLInventoryCallback> cb =
@@ -451,10 +450,8 @@ void LLAgentWearables::saveWearableAs(const EWearableType type,
 void LLAgentWearables::revertWearable(const EWearableType type, const U32 index)
 {
 	LLWearable* wearable = getWearable(type, index);
-	if (wearable)
-	{
-		wearable->writeToAvatar(TRUE);
-	}
+	wearable->revertValues();
+
 	gAgent.sendAgentSetAppearance();
 }
 
@@ -604,13 +601,10 @@ void LLAgentWearables::sendAgentWearablesRequest()
 	gAgent.sendReliableMessage();
 }
 
-// MULTI-WEARABLE: update for multiple items per type.
-// Used to enable/disable menu items.
 // static
 BOOL LLAgentWearables::selfHasWearable(EWearableType type)
 {
-	// MULTI-WEARABLE: TODO could be getWearableCount > 0, once null entries have been eliminated.
-	return gAgentWearables.getWearable(type,0) != NULL;
+	return (gAgentWearables.getWearableCount(type) > 0);
 }
 
 LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 index)
@@ -633,6 +627,11 @@ LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 index)
 
 void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearable *wearable)
 {
+	if (!getWearable(type,index))
+	{
+		pushWearable(type,wearable);
+		return;
+	}
 	wearableentry_map_t::iterator wearable_iter = mWearableDatas.find(type);
 	if (wearable_iter == mWearableDatas.end())
 	{
@@ -650,6 +649,59 @@ void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearab
 	}
 }
 
+U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearable)
+{
+	if (wearable == NULL)
+	{
+		// no null wearables please!
+		//TODO: insert llwarns
+		return MAX_ATTACHMENTS_PER_TYPE;
+	}
+	if (type < WT_COUNT)
+	{
+		mWearableDatas[type].push_back(wearable);
+		return mWearableDatas[type].size()-1;
+	}
+	return MAX_ATTACHMENTS_PER_TYPE;
+}
+
+void LLAgentWearables::popWearable(const EWearableType type, LLWearable *wearable)
+{
+	U32 index = getWearableIndex(type, wearable);
+	if (index < MAX_ATTACHMENTS_PER_TYPE && index < getWearableCount(type))
+	{
+		popWearable(type, index);
+	}
+}
+
+void LLAgentWearables::popWearable(const EWearableType type, U32 index)
+{
+	if (getWearable(type, index))
+	{
+		mWearableDatas[type].erase(mWearableDatas[type].begin() + index);
+	}
+}
+
+U32	LLAgentWearables::getWearableIndex(const EWearableType type, LLWearable *wearable)
+{
+	wearableentry_map_t::const_iterator wearable_iter = mWearableDatas.find(type);
+	if (wearable_iter == mWearableDatas.end())
+	{
+		llwarns << "tried to get wearable index with an invalid type!" << llendl;
+		return MAX_ATTACHMENTS_PER_TYPE;
+	}
+	const wearableentry_vec_t& wearable_vec = wearable_iter->second;
+	for(U32 index = 0; index < wearable_vec.size(); index++)
+	{
+		if (wearable_vec[index] == wearable)
+		{
+			return index;
+		}
+	}
+
+	return MAX_ATTACHMENTS_PER_TYPE;
+}
+
 const LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 index) const
 {
 	wearableentry_map_t::const_iterator wearable_iter = mWearableDatas.find(type);
@@ -668,7 +720,17 @@ const LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 in
 	}
 }
 
-//MULTI-WEARABLE: this will give wrong values until we get rid of the "always one empty object" scheme.
+LLWearable* LLAgentWearables::getTopWearable(const EWearableType type)
+{
+	U32 count = getWearableCount(type);
+	if ( count == 0)
+	{
+		return NULL;
+	}
+
+	return getWearable(type, count-1);
+}
+
 U32 LLAgentWearables::getWearableCount(const EWearableType type) const
 {
 	wearableentry_map_t::const_iterator wearable_iter = mWearableDatas.find(type);
@@ -680,6 +742,13 @@ U32 LLAgentWearables::getWearableCount(const EWearableType type) const
 	return wearable_vec.size();
 }
 
+U32 LLAgentWearables::getWearableCount(const U32 tex_index) const
+{
+	const EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType((LLVOAvatarDefines::ETextureIndex)tex_index);
+	return getWearableCount(wearable_type);
+}
+
+
 BOOL LLAgentWearables::itemUpdatePending(const LLUUID& item_id) const
 {
 	return mItemsAwaitingWearableUpdate.find(item_id) != mItemsAwaitingWearableUpdate.end();
@@ -798,7 +867,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
 				// MULTI-WEARABLE: TODO: update once messages change.  Currently use results to populate the zeroth element.
 				
 				// Store initial wearables data until we know whether we have the current outfit folder or need to use the data.
-				LLInitialWearablesFetch::InitialWearableData wearable_data(type, 0, item_id, asset_id); // MULTI-WEARABLE: update
+				LLInitialWearablesFetch::InitialWearableData wearable_data(type, item_id, asset_id); // MULTI-WEARABLE: update
 				outfit->mAgentInitialWearables.push_back(wearable_data);
 				
 			}
@@ -832,7 +901,7 @@ void LLAgentWearables::onInitialWearableAssetArrived(LLWearable* wearable, void*
 {
 	boost::scoped_ptr<LLInitialWearablesFetch::InitialWearableData> wear_data((LLInitialWearablesFetch::InitialWearableData*)userdata); 
 	const EWearableType type = wear_data->mType;
-	const U32 index = wear_data->mIndex;
+	U32 index = 0;
 
 	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
 	if (!avatar)
@@ -843,22 +912,19 @@ void LLAgentWearables::onInitialWearableAssetArrived(LLWearable* wearable, void*
 	if (wearable)
 	{
 		llassert(type == wearable->getType());
-		// MULTI-WEARABLE: is this always zeroth element?  Change sometime.
 		wearable->setItemID(wear_data->mItemID);
-		gAgentWearables.setWearable(type, index, wearable);
+		index = gAgentWearables.pushWearable(type, wearable);
 		gAgentWearables.mItemsAwaitingWearableUpdate.erase(wear_data->mItemID);
 
 		// disable composites if initial textures are baked
 		avatar->setupComposites();
 
-		wearable->writeToAvatar(FALSE);
 		avatar->setCompositeUpdatesEnabled(TRUE);
 		gInventory.addChangedMask(LLInventoryObserver::LABEL, wearable->getItemID());
 	}
 	else
 	{
 		// Somehow the asset doesn't exist in the database.
-		// MULTI-WEARABLE: assuming zeroth elt
 		gAgentWearables.recoverMissingWearable(type,index);
 	}
 
@@ -898,7 +964,7 @@ void LLAgentWearables::recoverMissingWearable(const EWearableType type, U32 inde
 
 	S32 type_s32 = (S32) type;
 	setWearable(type,index,new_wearable);
-	new_wearable->writeToAvatar(TRUE);
+	//new_wearable->writeToAvatar(TRUE);
 
 	// Add a new one in the lost and found folder.
 	// (We used to overwrite the "not found" one, but that could potentially
@@ -938,8 +1004,8 @@ void LLAgentWearables::addLocalTextureObject(const EWearableType wearable_type,
 	{
 		llerrs << "Tried to add local texture object to invalid wearable with type " << wearable_type << " and index " << wearable_index << llendl;
 	}
-	
-	wearable->setLocalTextureObject(texture_type, new LLLocalTextureObject());
+	LLLocalTextureObject* lto = new LLLocalTextureObject();
+	wearable->setLocalTextureObject(texture_type, lto);
 }
 
 void LLAgentWearables::createStandardWearables(BOOL female)
@@ -982,17 +1048,15 @@ void LLAgentWearables::createStandardWearables(BOOL female)
 				once = true;
 				donecb = new createStandardWearablesAllDoneCallback;
 			}
-			// MULTI_WEARABLE: only elt 0, may be the right thing?
-			llassert(getWearable((EWearableType)i,0) == NULL);
+			llassert(getWearableCount((EWearableType)i) == 0);
 			LLWearable* wearable = LLWearableList::instance().createNewWearable((EWearableType)i);
-			setWearable((EWearableType)i,0,wearable);
+			U32 index = pushWearable((EWearableType)i,wearable);
 			// no need to update here...
-			// MULTI_WEARABLE: hardwired index = 0 here.
 			LLPointer<LLInventoryCallback> cb =
 				new addWearableToAgentInventoryCallback(
 					donecb,
 					i,
-					0,
+					index,
 					wearable,
 					addWearableToAgentInventoryCallback::CALL_CREATESTANDARDDONE);
 			addWearableToAgentInventory(cb, wearable, LLUUID::null, FALSE);
@@ -1002,11 +1066,9 @@ void LLAgentWearables::createStandardWearables(BOOL female)
 
 void LLAgentWearables::createStandardWearablesDone(S32 type, U32 index)
 {
-	LLWearable* wearable = getWearable((EWearableType)type, index);
-
-	if (wearable)
+	if (mAvatarObject)
 	{
-		wearable->writeToAvatar(TRUE);
+		mAvatarObject->updateVisualParams();
 	}
 }
 
@@ -1023,12 +1085,12 @@ void LLAgentWearables::createStandardWearablesAllDone()
 	mAvatarObject->onFirstTEMessageReceived();
 }
 
+// MULTI-WEARABLE: Properly handle multiwearables later.
 void LLAgentWearables::getAllWearablesArray(LLDynamicArray<S32>& wearables)
 {
 	for( S32 i = 0; i < WT_COUNT; ++i )
 	{
-		// MULTI-WEARABLE: Properly handle multiwearables later.
-		if (getWearable( (EWearableType) i, 0 ) != NULL)
+		if (getWearableCount( (EWearableType) i) !=  0 )
 		{
 			wearables.push_back(i);
 		}
@@ -1233,6 +1295,13 @@ void LLAgentWearables::addWearableToAgentInventory(LLPointer<LLInventoryCallback
 
 void LLAgentWearables::removeWearable(const EWearableType type, bool do_remove_all, U32 index)
 {
+	if ((gAgent.isTeen())
+		&& (type == WT_UNDERSHIRT || type == WT_UNDERPANTS))
+	{
+		// Can't take off underclothing in simple UI mode or on PG accounts
+		// TODO: enable the removing of a single undershirt/underpants if multiple are worn. - Nyx
+		return;
+	}
 
 	if (do_remove_all)
 	{
@@ -1240,16 +1309,8 @@ void LLAgentWearables::removeWearable(const EWearableType type, bool do_remove_a
 	}
 	else
 	{
-// MULTI_WEARABLE: handle vector changes from arbitrary removal.
 		LLWearable* old_wearable = getWearable(type,index);
 		
-		if ((gAgent.isTeen())
-			&& (type == WT_UNDERSHIRT || type == WT_UNDERPANTS))
-		{
-			// Can't take off underclothing in simple UI mode or on PG accounts
-			return;
-		}
-		
 		if (old_wearable)
 		{
 			if (old_wearable->isDirty())
@@ -1308,26 +1369,22 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 		{
 			LLWearable* old_wearable = getWearable(type,i);
 			gInventory.addChangedMask(LLInventoryObserver::LABEL, getWearableItemID(type,i));
-			setWearable(type,i,NULL);
+			popWearable(type,i);
 
 			//queryWearableCache(); // moved below
-			// MULTI_WEARABLE: FIXME - currently we keep a null entry, so can't delete the last one.
-			if (i>0)
-			{
-				mWearableDatas[type].pop_back();
-			}
 			if (old_wearable)
 			{
 				old_wearable->removeFromAvatar(TRUE);
 			}
 		}
+		mWearableDatas[type].clear();
 	}
 	else
 	{
 		LLWearable* old_wearable = getWearable(type, index);
 
 		gInventory.addChangedMask(LLInventoryObserver::LABEL, getWearableItemID(type,index));
-		setWearable(type,index,NULL);
+		popWearable(type, index);
 
 		//queryWearableCache(); // moved below
 
@@ -1335,16 +1392,6 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 		{
 			old_wearable->removeFromAvatar(TRUE);
 		}
-
-		// MULTI_WEARABLE: logic changes if null entries go away
-		if (getWearableCount(type)>1)
-		{
-			// Have to shrink the vector and clean up the item.
-			wearableentry_map_t::iterator wearable_iter = mWearableDatas.find(type);
-			llassert_always(wearable_iter != mWearableDatas.end());
-			wearableentry_vec_t& wearable_vec = wearable_iter->second;
-			wearable_vec.erase( wearable_vec.begin() + index );
-		}
 	}
 
 	queryWearableCache();
@@ -1429,7 +1476,7 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
 			{
 				wearables_being_removed.push_back(wearable);
 			}
-			setWearable((EWearableType)i,0,NULL);
+			removeWearable((EWearableType)i,true,0);
 		}
 	}
 
@@ -1450,9 +1497,9 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
 		}
 	}
 
-	for (i = 0; i < count; i++)
+	if (mAvatarObject)
 	{
-		wearables[i]->writeToAvatar(TRUE);
+		mAvatarObject->updateVisualParams();
 	}
 
 	// Start rendering & update the server
@@ -1578,7 +1625,7 @@ void LLAgentWearables::setWearableFinal(LLInventoryItem* new_item, LLWearable* n
 
 	//llinfos << "LLVOAvatar::setWearableItem()" << llendl;
 	queryWearableCache();
-	new_wearable->writeToAvatar(TRUE);
+	//new_wearable->writeToAvatar(TRUE);
 
 	updateServer();
 }
@@ -1612,13 +1659,16 @@ void LLAgentWearables::queryWearableCache()
 		LLUUID hash;
 		for (U8 i=0; i < baked_dict->mWearables.size(); i++)
 		{
-			// EWearableType baked_type = gBakedWearableMap[baked_index][baked_num];
 			const EWearableType baked_type = baked_dict->mWearables[i];
-			// MULTI_WEARABLE: assuming 0th
-			const LLWearable* wearable = getWearable(baked_type,0);
-			if (wearable)
+			// MULTI_WEARABLE: not order-dependent
+			const U32 num_wearables = getWearableCount(baked_type);
+			for (U32 index = 0; index < num_wearables; ++index)
 			{
-				hash ^= wearable->getAssetID();
+				const LLWearable* wearable = getWearable(baked_type,index);
+				if (wearable)
+				{
+					hash ^= wearable->getAssetID();
+				}
 			}
 		}
 		if (hash.notNull())
@@ -1672,7 +1722,6 @@ void LLAgentWearables::userRemoveAllClothes(void* userdata)
 }
 
 // static
-// MULTI_WEARABLE: removing all here.
 void LLAgentWearables::userRemoveAllClothesStep2(BOOL proceed)
 {
 	if (proceed)
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 8b9d29342ae7930e00bd206f9318aeb2c6d7aeea..d147b0447b6229766addd650632c474dcd562aea 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -45,6 +45,7 @@ class LLVOAvatarSelf;
 class LLWearable;
 class LLInitialWearablesFetch;
 class LLViewerObject;
+class LLTexLayerTemplate;
 
 class LLAgentWearables
 {
@@ -93,8 +94,9 @@ class LLAgentWearables
 	static BOOL			selfHasWearable(EWearableType type);
 	LLWearable*			getWearable(const EWearableType type, U32 index /*= 0*/); 
 	const LLWearable* 	getWearable(const EWearableType type, U32 index /*= 0*/) const;
-	U32					getWearableCount(const EWearableType type) const;
-
+	LLWearable*		getTopWearable(const EWearableType type);
+	U32				getWearableCount(const EWearableType type) const;
+	U32				getWearableCount(const U32 tex_index) const;
 
 	//--------------------------------------------------------------------
 	// Setters
@@ -103,12 +105,16 @@ class LLAgentWearables
 private:
 	// Low-level data structure setter - public access is via setWearableItem, etc.
 	void 			setWearable(const EWearableType type, U32 index, LLWearable *wearable);
+	U32 			pushWearable(const EWearableType type, LLWearable *wearable);
+	void 			popWearable(const EWearableType type, LLWearable *wearable);
+	void			popWearable(const EWearableType type, U32 index);
 	
 public:
 	void			setWearableItem(LLInventoryItem* new_item, LLWearable* wearable, bool do_append = false);
 	void			setWearableOutfit(const LLInventoryItem::item_array_t& items, const LLDynamicArray< LLWearable* >& wearables, BOOL remove);
 	void			setWearableName(const LLUUID& item_id, const std::string& new_name);
 	void			addLocalTextureObject(const EWearableType wearable_type, const LLVOAvatarDefines::ETextureIndex texture_type, U32 wearable_index);
+	U32				getWearableIndex(const EWearableType type, LLWearable *wearable);
 protected:
 	void			setWearableFinal(LLInventoryItem* new_item, LLWearable* new_wearable, bool do_append = false);
 	static bool		onSetWearableDialog(const LLSD& notification, const LLSD& response, LLWearable* wearable);
@@ -252,6 +258,8 @@ class LLAgentWearables
 		LLPointer<LLRefCount> mCB;
 	};
 
+	static const U32 MAX_ATTACHMENTS_PER_TYPE = 4; 
+
 }; // LLAgentWearables
 
 extern LLAgentWearables gAgentWearables;
diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp
index 55b3ab796e001e5619bb7c281f1c178947a542f2..87a8557a888dad4c9fe7348e286b35d0812c493e 100644
--- a/indra/newview/lldriverparam.cpp
+++ b/indra/newview/lldriverparam.cpp
@@ -36,6 +36,9 @@
 
 #include "llfasttimer.h"
 #include "llvoavatar.h"
+#include "llvoavatarself.h"
+#include "llagent.h"
+#include "llwearable.h"
 
 //-----------------------------------------------------------------------------
 // LLDriverParamInfo
@@ -100,12 +103,66 @@ BOOL LLDriverParamInfo::parseXml(LLXmlTreeNode* node)
 	return TRUE;
 }
 
+//virtual 
+void LLDriverParamInfo::toStream(std::ostream &out)
+{
+	LLViewerVisualParamInfo::toStream(out);
+	out << "driver" << "\t";
+	out << mDrivenInfoList.size() << "\t";
+	for (entry_info_list_t::iterator iter = mDrivenInfoList.begin(); iter != mDrivenInfoList.end(); iter++)
+	{
+		LLDrivenEntryInfo driven = *iter;
+		out << driven.mDrivenID << "\t";
+	}
+
+	out << std::endl;
+
+	LLVOAvatarSelf *avatar = gAgent.getAvatarObject();
+	if(avatar)
+	{
+		for (entry_info_list_t::iterator iter = mDrivenInfoList.begin(); iter != mDrivenInfoList.end(); iter++)
+		{
+			LLDrivenEntryInfo driven = *iter;
+			LLViewerVisualParam *param = (LLViewerVisualParam*)avatar->getVisualParam(driven.mDrivenID);
+			if (param)
+			{
+				param->getInfo()->toStream(out);
+				if (param->getWearableType() != mWearableType)
+				{
+					if(param->getCrossWearable())
+					{
+						out << "cross-wearable" << "\t";
+					}
+					else
+					{
+						out << "ERROR!" << "\t";
+					}
+				}
+				else
+				{
+					out << "valid" << "\t";
+				}
+			}
+			else
+			{
+				llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << avatar << " for driver parameter " << getID() << llendl;
+			}
+			out << std::endl;
+		}
+	}
+}
+
 //-----------------------------------------------------------------------------
 // LLDriverParam
 //-----------------------------------------------------------------------------
 
 LLDriverParam::LLDriverParam(LLVOAvatar *avatarp)
-	: mCurrentDistortionParam( NULL ), mAvatarp(avatarp)
+	: mCurrentDistortionParam( NULL ), mAvatarp(avatarp), mWearablep(NULL)
+{
+}
+
+LLDriverParam::LLDriverParam(LLWearable *wearablep)
+	: mCurrentDistortionParam( NULL ), mAvatarp(NULL), mWearablep(wearablep)
 {
 }
 
@@ -122,27 +179,65 @@ BOOL LLDriverParam::setInfo(LLDriverParamInfo *info)
 	mID = info->mID;
 
 	setWeight(getDefaultWeight(), FALSE );
+
+	BOOL success;
+	if (mWearablep)
+	{
+		LLVisualParam*(LLWearable::*function)(S32)const = &LLWearable::getVisualParam; // need this line to disambiguate between versions of LLCharacter::getVisualParam()
+		success = linkDrivenParams(boost::bind(function,(LLWearable*)mWearablep, _1), false);
+	}
+	else
+	{
+		LLVisualParam*(LLCharacter::*function)(S32)const = &LLCharacter::getVisualParam; // need this line to disambiguate between versions of LLCharacter::getVisualParam()
+		success = linkDrivenParams(boost::bind(function,(LLCharacter*)mAvatarp, _1), false);
+	}
+	if(!success)
+	{
+		mInfo = NULL;
+		return FALSE;
+	}
 	
-	LLDriverParamInfo::entry_info_list_t::iterator iter;
-	mDriven.reserve(getInfo()->mDrivenInfoList.size());
-	for (iter = getInfo()->mDrivenInfoList.begin(); iter != getInfo()->mDrivenInfoList.end(); iter++)
+	return TRUE;
+}
+
+void LLDriverParam::setWearable(LLWearable *wearablep)
+{
+	if (wearablep)
 	{
-		LLDrivenEntryInfo *driven_info = &(*iter);
-		S32 driven_id = driven_info->mDrivenID;
-		LLViewerVisualParam* param = (LLViewerVisualParam*)mAvatarp->getVisualParam( driven_id );
-		if (param)
+		mWearablep = wearablep;
+		mAvatarp = NULL;
+	}
+}
+
+void LLDriverParam::setAvatar(LLVOAvatar *avatarp)
+{
+	if (avatarp)
+	{
+		mWearablep = NULL;
+		mAvatarp = avatarp;
+	}
+}
+
+/*virtual*/ LLViewerVisualParam * 	LLDriverParam::cloneParam(LLWearable* wearable) const
+{
+	LLDriverParam *new_param;
+	if (wearable)
+	{
+		new_param = new LLDriverParam(wearable);
+	}
+	else
+	{
+		if (mWearablep)
 		{
-			mDriven.push_back(LLDrivenEntry( param, driven_info ));
+			new_param = new LLDriverParam(mWearablep);
 		}
 		else
 		{
-			llerrs << "<driven> Unable to resolve driven parameter: " << driven_id << llendl;
-			mInfo = NULL;
-			return FALSE;
+			new_param = new LLDriverParam(mAvatarp);
 		}
 	}
-	
-	return TRUE;
+	*new_param = *this;
+	return new_param;
 }
 
 #if 0 // obsolete
@@ -218,8 +313,8 @@ void LLDriverParam::setWeight(F32 weight, BOOL set_by_user)
 				{
 					driven_weight = driven_min;
 				}
-
-				driven->mParam->setWeight( driven_weight, set_by_user );
+				
+				setDrivenWeight(driven,driven_weight,set_by_user);
 				continue;
 			}
 			else 
@@ -243,13 +338,13 @@ void LLDriverParam::setWeight(F32 weight, BOOL set_by_user)
 					driven_weight = driven_min;
 				}
 
-				driven->mParam->setWeight( driven_weight, set_by_user );
+				setDrivenWeight(driven,driven_weight,set_by_user);
 				continue;
 			}
 		}
 
 		driven_weight = getDrivenWeight(driven, mCurWeight);
-		driven->mParam->setWeight( driven_weight, set_by_user );
+		setDrivenWeight(driven,driven_weight,set_by_user);
 	}
 }
 
@@ -402,6 +497,46 @@ void LLDriverParam::stopAnimating(BOOL set_by_user)
 	}
 }
 
+/*virtual*/ 
+BOOL LLDriverParam::linkDrivenParams(visual_param_mapper mapper, bool only_cross_params)
+{
+	BOOL success = TRUE;
+	LLDriverParamInfo::entry_info_list_t::iterator iter;
+	mDriven.clear();
+	mDriven.reserve(getInfo()->mDrivenInfoList.size());
+	for (iter = getInfo()->mDrivenInfoList.begin(); iter != getInfo()->mDrivenInfoList.end(); ++iter)
+	{
+		LLDrivenEntryInfo *driven_info = &(*iter);
+		S32 driven_id = driven_info->mDrivenID;
+
+		// check for already existing links. Do not overwrite.
+		BOOL found = FALSE;
+		for (entry_list_t::iterator driven_iter = mDriven.begin(); driven_iter != mDriven.end() && !found; ++driven_iter)
+		{
+			if (driven_iter->mInfo->mDrivenID == driven_id)
+			{
+				found = TRUE;
+			}
+		}
+
+		if (!found)
+		{
+			LLViewerVisualParam* param = (LLViewerVisualParam*)mapper(driven_id);
+			bool push = param && (!only_cross_params || param->getCrossWearable());
+			if (push)
+			{
+				mDriven.push_back(LLDrivenEntry( param, driven_info ));
+			}
+			else
+			{
+				success = FALSE;
+			}
+		}
+	}
+	
+	return success;	
+}
+
 //-----------------------------------------------------------------------------
 // getDrivenWeight()
 //-----------------------------------------------------------------------------
@@ -458,3 +593,18 @@ F32 LLDriverParam::getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight
 
 	return driven_weight;
 }
+
+void LLDriverParam::setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool set_by_user)
+{
+	LLVOAvatarSelf *avatar_self = gAgent.getAvatarObject();
+	if(mWearablep && driven->mParam->getCrossWearable() &&
+	   mWearablep->isOnTop())
+	{
+		// call setWeight through LLVOAvatarSelf so other wearables can be updated with the correct values
+		avatar_self->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, set_by_user );
+	}
+	else
+	{
+		driven->mParam->setWeight( driven_weight, set_by_user );
+	}
+}
diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h
index 7bc0c15448a3e8e1f0b15663884a7442fa66f10f..c5dce62fa6f9e3de2615735c66990f21b20c1828 100644
--- a/indra/newview/lldriverparam.h
+++ b/indra/newview/lldriverparam.h
@@ -36,6 +36,7 @@
 #include "llviewervisualparam.h"
 
 class LLVOAvatar;
+class LLWearable;
 
 //-----------------------------------------------------------------------------
 
@@ -69,6 +70,8 @@ class LLDriverParamInfo : public LLViewerVisualParamInfo
 	
 	/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
 
+	/*virtual*/ void toStream(std::ostream &out);	
+
 protected:
 	typedef std::deque<LLDrivenEntryInfo> entry_info_list_t;
 	entry_info_list_t mDrivenInfoList;
@@ -80,6 +83,7 @@ class LLDriverParam : public LLViewerVisualParam
 {
 public:
 	LLDriverParam(LLVOAvatar *avatarp);
+	LLDriverParam(LLWearable *wearablep);
 	~LLDriverParam();
 
 	// Special: These functions are overridden by child classes
@@ -87,12 +91,18 @@ class LLDriverParam : public LLViewerVisualParam
 	//   This sets mInfo and calls initialization functions
 	BOOL					setInfo(LLDriverParamInfo *info);
 
+	void					setWearable(LLWearable *wearablep);
+	void					setAvatar(LLVOAvatar *avatarp);
+
+	/*virtual*/ LLViewerVisualParam * 	cloneParam(LLWearable* wearable) const;
+
 	// LLVisualParam Virtual functions
 	///*virtual*/ BOOL				parseData(LLXmlTreeNode* node);
 	/*virtual*/ void				apply( ESex sex ) {} // apply is called separately for each driven param.
 	/*virtual*/ void				setWeight(F32 weight, BOOL set_by_user);
 	/*virtual*/ void				setAnimationTarget( F32 target_value, BOOL set_by_user );
 	/*virtual*/ void				stopAnimating(BOOL set_by_user);
+	/*virtual*/ BOOL				linkDrivenParams(visual_param_mapper mapper, bool only_cross_params);
 	
 	// LLViewerVisualParam Virtual functions
 	/*virtual*/ F32					getTotalDistortion();
@@ -103,6 +113,7 @@ class LLDriverParam : public LLViewerVisualParam
 	/*virtual*/ const LLVector3*	getNextDistortion(U32 *index, LLPolyMesh **poly_mesh);
 protected:
 	F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight);
+	void setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool set_by_user);
 
 
 	LLVector3	mDefaultVec; // temp holder
@@ -111,6 +122,7 @@ class LLDriverParam : public LLViewerVisualParam
 	LLViewerVisualParam* mCurrentDistortionParam;
 	// Backlink only; don't make this an LLPointer.
 	LLVOAvatar* mAvatarp;
+	LLWearable* mWearablep;
 };
 
 #endif  // LL_LLDRIVERPARAM_H
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index 3976e25ba4086540557707e1dc53375880eb50f3..81d38f8f680e16b2023286073783d0b4c7241b24 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -39,6 +39,7 @@
 #include "lluictrlfactory.h"
 #include "llviewerobjectlist.h"
 #include "llvoavatar.h"
+#include "llagentwearables.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -79,7 +80,18 @@ static void update_texture_ctrl(LLVOAvatar* avatarp,
 								 LLTextureCtrl* ctrl,
 								 ETextureIndex te)
 {
-	LLUUID id = avatarp->getTE(te)->getID();
+	LLUUID id = IMG_DEFAULT_AVATAR;
+	EWearableType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType(te);
+	LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0);
+	if (wearable)
+	{
+		LLLocalTextureObject *lto = wearable->getLocalTextureObject(te);
+		if (lto)
+		{
+			id = lto->getID();
+		}
+	}
+	//id = avatarp->getTE(te)->getID();
 	if (id == IMG_DEFAULT_AVATAR)
 	{
 		ctrl->setImageAssetID(LLUUID::null);
@@ -152,7 +164,32 @@ void LLFloaterAvatarTextures::onClickDump(void* data)
 		const LLTextureEntry* te = avatarp->getTE(i);
 		if (!te) continue;
 
-		llinfos << "Avatar TE " << i << " id " << te->getID() << llendl;
+		if (LLVOAvatar::isIndexLocalTexture((ETextureIndex)i))
+		{
+			LLUUID id = IMG_DEFAULT_AVATAR;
+			EWearableType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType((ETextureIndex)i);
+			LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0);
+			if (wearable)
+			{
+				LLLocalTextureObject *lto = wearable->getLocalTextureObject(i);
+				if (lto)
+				{
+					id = lto->getID();
+				}
+			}
+			if (id != IMG_DEFAULT_AVATAR)
+			{
+				llinfos << "Avatar TE " << i << " id " << id << llendl;
+			}
+			else
+			{
+				llinfos << "Avatar TE " << i << " id " << "<DEFAULT>" << llendl;
+			}
+		}
+		else
+		{
+			llinfos << "Avatar TE " << i << " id " << te->getID() << llendl;
+		}
 	}
 #endif
 }
diff --git a/indra/newview/lllocaltextureobject.cpp b/indra/newview/lllocaltextureobject.cpp
index e4a20aea68eadce8d5679fbb75071b0fa643874c..99c98ec16e2e97fd1f726555421105a7db2bb37b 100644
--- a/indra/newview/lllocaltextureobject.cpp
+++ b/indra/newview/lllocaltextureobject.cpp
@@ -37,6 +37,7 @@
 #include "llviewertexture.h"
 #include "lltextureentry.h"
 #include "lluuid.h"
+#include "llwearable.h"
 
 
 LLLocalTextureObject::LLLocalTextureObject() :
@@ -46,31 +47,33 @@ LLLocalTextureObject::LLLocalTextureObject() :
 	mImage = NULL;
 }
 
-LLLocalTextureObject::LLLocalTextureObject(LLViewerFetchedTexture *image, LLTextureEntry *entry, LLTexLayer *layer, LLUUID id)
+LLLocalTextureObject::LLLocalTextureObject(LLViewerFetchedTexture *image, LLUUID id)
 {
-	if (entry)
-	{
-		LLTextureEntry * te = new LLTextureEntry(*entry);
-		mTexEntry = boost::shared_ptr<LLTextureEntry>(te);
-	}
-
-	if (layer)
-	{
-		LLTexLayer *texLayer = new LLTexLayer(*layer);
-		mTexLayer = boost::shared_ptr<LLTexLayer>(texLayer);
-	}
 	mImage = image;
+	gGL.getTexUnit(0)->bind(mImage);
 	mID = id;
 }
 
 LLLocalTextureObject::LLLocalTextureObject(const LLLocalTextureObject &lto) :
 mImage(lto.mImage),
-mTexEntry(lto.mTexEntry),
-mTexLayer(lto.mTexLayer),
 mID(lto.mID),
 mIsBakedReady(lto.mIsBakedReady),
 mDiscard(lto.mDiscard)
 {
+	U32 num_layers = lto.getNumTexLayers();
+	mTexLayers.reserve(num_layers);
+	for (U32 index = 0; index < num_layers; index++)
+	{
+		LLTexLayer* original_layer = lto.getTexLayer(index);
+		if (!original_layer)
+		{
+			llerrs << "could not clone Local Texture Object: unable to extract texlayer!" << llendl;
+		}
+
+		LLTexLayer* new_layer = new LLTexLayer(*original_layer);
+		new_layer->setLTO(this);
+		mTexLayers.push_back(new_layer);
+	}
 }
 
 LLLocalTextureObject::~LLLocalTextureObject()
@@ -82,14 +85,33 @@ LLViewerFetchedTexture* LLLocalTextureObject::getImage() const
 	return mImage;
 }
 
-LLTextureEntry* LLLocalTextureObject::getTexEntry() const
+LLTexLayer* LLLocalTextureObject::getTexLayer(U32 index) const
 {
-	return mTexEntry.get();
+	if (index >= getNumTexLayers())
+	{
+		return NULL;
+	}
+
+	return mTexLayers[index];
 }
 
-LLTexLayer* LLLocalTextureObject::getTexLayer() const
+LLTexLayer* LLLocalTextureObject::getTexLayer(const std::string &name)
 {
-	return mTexLayer.get();
+	for( tex_layer_p::iterator iter = mTexLayers.begin(); iter != mTexLayers.end(); iter++)
+	{
+		LLTexLayer *layer = *iter;
+		if (layer->getName().compare(name) == 0)
+		{
+			return layer;
+		}
+	}
+
+	return NULL;
+}
+
+U32 LLLocalTextureObject::getNumTexLayers() const
+{
+	return mTexLayers.size();
 }
 
 LLUUID LLLocalTextureObject::getID() const
@@ -112,24 +134,68 @@ void LLLocalTextureObject::setImage(LLViewerFetchedTexture* new_image)
 	mImage = new_image;
 }
 
-void LLLocalTextureObject::setTexEntry(LLTextureEntry *new_te)
+BOOL LLLocalTextureObject::setTexLayer(LLTexLayer *new_tex_layer, U32 index)
 {
-	LLTextureEntry *ptr = NULL;
-	if (new_te)
+	if (index >= getNumTexLayers() )
+	{
+		return FALSE;
+	}
+
+	if (new_tex_layer == NULL)
 	{
-		ptr = new LLTextureEntry(*new_te);
+		return removeTexLayer(index);
 	}
-	mTexEntry = boost::shared_ptr<LLTextureEntry>(ptr);
+
+	LLTexLayer *layer = new LLTexLayer(*new_tex_layer);
+	layer->setLTO(this);
+
+	if (mTexLayers[index])
+	{
+		delete mTexLayers[index];
+	}
+	mTexLayers[index] = layer;
+
+	return TRUE;
+}
+
+BOOL LLLocalTextureObject::addTexLayer(LLTexLayer *new_tex_layer, LLWearable *wearable)
+{
+	if (new_tex_layer == NULL)
+	{
+		return FALSE;
+	}
+
+	LLTexLayer *layer = new LLTexLayer(*new_tex_layer, wearable);
+	layer->setLTO(this);
+	mTexLayers.push_back(layer);
+	return TRUE;
 }
 
-void LLLocalTextureObject::setTexLayer(LLTexLayer *new_tex_layer)
+BOOL LLLocalTextureObject::addTexLayer(LLTexLayerTemplate *new_tex_layer, LLWearable *wearable)
 {
-	LLTexLayer *ptr = NULL;
-	if (new_tex_layer)
+	if (new_tex_layer == NULL)
 	{
-		ptr = new LLTexLayer(*new_tex_layer);
+		return FALSE;
 	}
-	mTexLayer = boost::shared_ptr<LLTexLayer>(ptr);
+
+	LLTexLayer *layer = new LLTexLayer(*new_tex_layer, this, wearable);
+	layer->setLTO(this);
+	mTexLayers.push_back(layer);
+	return TRUE;
+}
+
+BOOL LLLocalTextureObject::removeTexLayer(U32 index)
+{
+	if (index >= getNumTexLayers())
+	{
+		return FALSE;
+	}
+	tex_layer_p::iterator iter = mTexLayers.begin();
+	iter += index;
+
+	delete *iter;
+	mTexLayers.erase(iter);
+	return TRUE;
 }
 
 void LLLocalTextureObject::setID(LLUUID new_id)
diff --git a/indra/newview/lllocaltextureobject.h b/indra/newview/lllocaltextureobject.h
index 79e1562dce2b270db7c3345940921b81b150ee2f..138bbad677768f7893b95398863ab6f731e995d5 100644
--- a/indra/newview/lllocaltextureobject.h
+++ b/indra/newview/lllocaltextureobject.h
@@ -39,6 +39,8 @@ class LLViewerFetchedTexture;
 class LLUUID;
 class LLTexLayer;
 class LLTextureEntry;
+class LLTexLayerTemplate;
+class LLWearable;
 
 // Stores all relevant information for a single texture 
 // assumed to have ownership of all objects referred to - 
@@ -47,20 +49,24 @@ class LLLocalTextureObject
 {
 public:
 	LLLocalTextureObject();
-	LLLocalTextureObject(LLViewerFetchedTexture *image, LLTextureEntry *entry, LLTexLayer *layer, LLUUID id);
+	LLLocalTextureObject(LLViewerFetchedTexture *image, LLUUID id);
 	LLLocalTextureObject(const LLLocalTextureObject &lto);
 	~LLLocalTextureObject();
 
 	LLViewerFetchedTexture* getImage() const;
-	LLTextureEntry* getTexEntry() const;
-	LLTexLayer* getTexLayer() const;
+	LLTexLayer* getTexLayer(U32 index) const;
+	LLTexLayer* getTexLayer(const std::string &name);
+	U32 		getNumTexLayers() const;
 	LLUUID		getID() const;
 	S32			getDiscard() const;
 	BOOL		getBakedReady() const;
 
 	void setImage(LLViewerFetchedTexture* new_image);
-	void setTexEntry(LLTextureEntry *new_te);
-	void setTexLayer(LLTexLayer *new_tex_layer);
+	BOOL setTexLayer(LLTexLayer *new_tex_layer, U32 index);
+	BOOL addTexLayer(LLTexLayer *new_tex_layer, LLWearable *wearable);
+	BOOL addTexLayer(LLTexLayerTemplate *new_tex_layer, LLWearable *wearable);
+	BOOL removeTexLayer(U32 index);
+
 	void setID(LLUUID new_id);
 	void setDiscard(S32 new_discard);
 	void setBakedReady(BOOL ready);
@@ -73,8 +79,9 @@ class LLLocalTextureObject
 	// NOTE: LLLocalTextureObject should be the exclusive owner of mTexEntry and mTexLayer
 	// using shared pointers here only for smart assignment & cleanup
 	// do NOT create new shared pointers to these objects, or keep pointers to them around
-	boost::shared_ptr<LLTextureEntry> 	mTexEntry;
-	boost::shared_ptr<LLTexLayer>	   	mTexLayer;
+	typedef std::vector<LLTexLayer*> tex_layer_p;
+	tex_layer_p mTexLayers;
+
 	LLUUID			mID;
 
 	BOOL mIsBakedReady;
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c2c32527fb17234b15236d8fe31a537037b8246c
--- /dev/null
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -0,0 +1,658 @@
+/** 
+ * @file llpaneleditwearable.cpp
+ * @brief UI panel for editing of a particular wearable item.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpaneleditwearable.h"
+#include "llpanel.h"
+#include "llwearable.h"
+#include "lluictrl.h"
+#include "llscrollingpanellist.h"
+#include "llvisualparam.h"
+#include "lltoolmorph.h"
+#include "llviewerjointmesh.h"
+#include "lltrans.h"
+#include "llbutton.h"
+#include "llsliderctrl.h"
+#include "llagent.h"
+#include "llvoavatarself.h"
+#include "lltexteditor.h"
+#include "lltextbox.h"
+#include "llaccordionctrltab.h"
+#include "llagentwearables.h"
+#include "llscrollingpanelparam.h"
+
+// register panel with appropriate XML
+static LLRegisterPanelClassWrapper<LLPanelEditWearable> t_edit_wearable("panel_edit_wearable");
+
+// subparts of the UI for focus, camera position, etc.
+enum ESubpart {
+	SUBPART_SHAPE_HEAD = 1, // avoid 0
+	SUBPART_SHAPE_EYES,
+	SUBPART_SHAPE_EARS,
+	SUBPART_SHAPE_NOSE,
+	SUBPART_SHAPE_MOUTH,
+	SUBPART_SHAPE_CHIN,
+	SUBPART_SHAPE_TORSO,
+	SUBPART_SHAPE_LEGS,
+	SUBPART_SHAPE_WHOLE,
+	SUBPART_SHAPE_DETAIL,
+	SUBPART_SKIN_COLOR,
+	SUBPART_SKIN_FACEDETAIL,
+	SUBPART_SKIN_MAKEUP,
+	SUBPART_SKIN_BODYDETAIL,
+	SUBPART_HAIR_COLOR,
+	SUBPART_HAIR_STYLE,
+	SUBPART_HAIR_EYEBROWS,
+	SUBPART_HAIR_FACIAL,
+	SUBPART_EYES,
+	SUBPART_SHIRT,
+	SUBPART_PANTS,
+	SUBPART_SHOES,
+	SUBPART_SOCKS,
+	SUBPART_JACKET,
+	SUBPART_GLOVES,
+	SUBPART_UNDERSHIRT,
+	SUBPART_UNDERPANTS,
+	SUBPART_SKIRT,
+	SUBPART_ALPHA,
+	SUBPART_TATTOO
+ };
+
+typedef std::vector<ESubpart> subpart_vec_t;
+
+// Locally defined classes
+
+class LLEditWearableDictionary : public LLSingleton<LLEditWearableDictionary>
+{
+	//--------------------------------------------------------------------
+	// Constructors and Destructors
+	//--------------------------------------------------------------------
+public:
+	LLEditWearableDictionary();
+	virtual ~LLEditWearableDictionary();
+	
+	//--------------------------------------------------------------------
+	// Wearable Types
+	//--------------------------------------------------------------------
+public:
+	struct WearableEntry : public LLDictionaryEntry
+	{
+		WearableEntry(EWearableType type,
+					  const std::string &title,
+					  const std::string &desc_title,
+					  U8 num_subparts, ... ); // number of subparts followed by a list of ESubparts
+
+
+		const EWearableType mWearableType;
+		const std::string   mTitle;
+		const std::string	mDescTitle;
+		subpart_vec_t		mSubparts;
+
+	};
+
+	struct Wearables : public LLDictionary<EWearableType, WearableEntry>
+	{
+		Wearables();
+	} mWearables;
+
+	const WearableEntry*	getWearable(EWearableType type) const { return mWearables.lookup(type); }
+
+	//--------------------------------------------------------------------
+	// Subparts
+	//--------------------------------------------------------------------
+public:
+	struct SubpartEntry : public LLDictionaryEntry
+	{
+		SubpartEntry(ESubpart part,
+					 const std::string &joint,
+					 const std::string &edit_group,
+					 const std::string &param_list,
+					 const std::string &accordion_tab,
+					 const LLVector3d  &target_offset,
+					 const LLVector3d  &camera_offset,
+					 const ESex 	   &sex);
+
+		ESubpart			mSubpart;
+		std::string			mTargetJoint;
+		std::string			mEditGroup;
+		std::string			mParamList;
+		std::string			mAccordionTab;
+		LLVector3d			mTargetOffset;
+		LLVector3d			mCameraOffset;
+		ESex				mSex;
+	};
+
+	struct Subparts : public LLDictionary<ESubpart, SubpartEntry>
+	{
+		Subparts();
+	} mSubparts;
+
+	const SubpartEntry*  getSubpart(ESubpart subpart) const { return mSubparts.lookup(subpart); }
+};
+
+LLEditWearableDictionary::LLEditWearableDictionary()
+{
+
+}
+
+//virtual 
+LLEditWearableDictionary::~LLEditWearableDictionary()
+{
+}
+
+LLEditWearableDictionary::Wearables::Wearables()
+{
+	addEntry(WT_SHAPE, new WearableEntry(WT_SHAPE,"edit_shape_title","shape_desc_text",9,	SUBPART_SHAPE_HEAD,	SUBPART_SHAPE_EYES,	SUBPART_SHAPE_EARS,	SUBPART_SHAPE_NOSE,	SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS, SUBPART_SHAPE_WHOLE));
+	addEntry(WT_SKIN, new WearableEntry(WT_SKIN,"edit_skin_title","skin_desc_text",4, SUBPART_SKIN_COLOR, SUBPART_SKIN_FACEDETAIL, SUBPART_SKIN_MAKEUP, SUBPART_SKIN_BODYDETAIL));
+	addEntry(WT_HAIR, new WearableEntry(WT_HAIR,"edit_hair_title","hair_desc_text",4, SUBPART_HAIR_COLOR,	SUBPART_HAIR_STYLE,	SUBPART_HAIR_EYEBROWS, SUBPART_HAIR_FACIAL));
+	addEntry(WT_EYES, new WearableEntry(WT_EYES,"edit_eyes_title","eyes_desc_text",1, SUBPART_EYES));
+	addEntry(WT_SHIRT, new WearableEntry(WT_SHIRT,"edit_shirt_title","shirt_desc_text",1, SUBPART_SHIRT));
+	addEntry(WT_PANTS, new WearableEntry(WT_PANTS,"edit_pants_title","pants_desc_text",1, SUBPART_PANTS));
+	addEntry(WT_SHOES, new WearableEntry(WT_SHOES,"edit_shoes_title","shoes_desc_text",1, SUBPART_SHOES));
+	addEntry(WT_SOCKS, new WearableEntry(WT_SOCKS,"edit_socks_title","socks_desc_text",1, SUBPART_SOCKS));
+	addEntry(WT_JACKET, new WearableEntry(WT_JACKET,"edit_jacket_title","jacket_desc_text",1, SUBPART_JACKET));
+	addEntry(WT_GLOVES, new WearableEntry(WT_GLOVES,"edit_gloves_title","gloves_desc_text",1, SUBPART_GLOVES));
+	addEntry(WT_UNDERSHIRT, new WearableEntry(WT_UNDERSHIRT,"edit_undershirt_title","undershirt_desc_text",1, SUBPART_UNDERSHIRT));
+	addEntry(WT_UNDERPANTS, new WearableEntry(WT_UNDERPANTS,"edit_underpants_title","underpants_desc_text",1, SUBPART_UNDERPANTS));
+	addEntry(WT_SKIRT, new WearableEntry(WT_SKIRT,"edit_skirt_title","skirt_desc_text",1, SUBPART_SKIRT));
+	addEntry(WT_ALPHA, new WearableEntry(WT_ALPHA,"edit_alpha_title","alpha_desc_text",1, SUBPART_ALPHA));
+	addEntry(WT_TATTOO, new WearableEntry(WT_TATTOO,"edit_tattoo_title","tattoo_desc_text",1, SUBPART_TATTOO));
+}
+
+LLEditWearableDictionary::WearableEntry::WearableEntry(EWearableType type,
+					  const std::string &title,
+					  const std::string &desc_title,
+					  U8 num_subparts, ... ) :
+	LLDictionaryEntry(title),
+	mWearableType(type),
+	mTitle(title),
+	mDescTitle(desc_title)
+{
+	va_list argp;
+	va_start(argp, num_subparts);
+
+	for (U8 i = 0; i < num_subparts; ++i)
+	{
+		ESubpart part = (ESubpart)va_arg(argp,int);
+		mSubparts.push_back(part);
+	}
+}
+
+LLEditWearableDictionary::Subparts::Subparts()
+{
+	addEntry(SUBPART_SHAPE_WHOLE, new SubpartEntry(SUBPART_SHAPE_WHOLE, "mPelvis", "shape_body","shape_body_param_list", "shape_body_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_HEAD, new SubpartEntry(SUBPART_SHAPE_HEAD, "mHead", "shape_head", "shape_head_param_list", "shape_head_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_EYES, new SubpartEntry(SUBPART_SHAPE_EYES, "mHead", "shape_eyes", "shape_eyes_param_list", "shape_eyes_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_EARS, new SubpartEntry(SUBPART_SHAPE_EARS, "mHead", "shape_ears", "shape_ears_param_list", "shape_ears_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_NOSE, new SubpartEntry(SUBPART_SHAPE_NOSE, "mHead", "shape_nose", "shape_nose_param_list", "shape_nose_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_MOUTH, new SubpartEntry(SUBPART_SHAPE_MOUTH, "mHead", "shape_mouth", "shape_mouth_param_list", "shape_mouth_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_CHIN, new SubpartEntry(SUBPART_SHAPE_CHIN, "mHead", "shape_chin", "shape_chin_param_list", "shape_chin_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_TORSO, new SubpartEntry(SUBPART_SHAPE_TORSO, "mTorso", "shape_torso", "shape_torso_param_list", "shape_torso_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
+	addEntry(SUBPART_SHAPE_LEGS, new SubpartEntry(SUBPART_SHAPE_LEGS, "mPelvis", "shape_legs", "shape_legs_param_list", "shape_legs_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+
+	addEntry(SUBPART_SKIN_COLOR, new SubpartEntry(SUBPART_SKIN_COLOR, "mHead", "skin_color", "skin_color_param_list", "skin_color_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SKIN_FACEDETAIL, new SubpartEntry(SUBPART_SKIN_FACEDETAIL, "mHead", "skin_facedetail", "skin_face_param_list", "skin_face_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SKIN_MAKEUP, new SubpartEntry(SUBPART_SKIN_MAKEUP, "mHead", "skin_makeup", "skin_makeup_param_list", "skin_makeup_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_SKIN_BODYDETAIL, new SubpartEntry(SUBPART_SKIN_BODYDETAIL, "mPelvis", "skin_bodydetail", "skin_body_param_list", "skin_body_tab", LLVector3d(0.f, 0.f, -0.2f), LLVector3d(-2.5f, 0.5f, 0.5f),SEX_BOTH));
+
+	addEntry(SUBPART_HAIR_COLOR, new SubpartEntry(SUBPART_HAIR_COLOR, "mHead", "hair_color", "hair_color_param_list", "hair_color_tab", LLVector3d(0.f, 0.f, 0.10f), LLVector3d(-0.4f, 0.05f, 0.10f),SEX_BOTH));
+	addEntry(SUBPART_HAIR_STYLE, new SubpartEntry(SUBPART_HAIR_STYLE, "mHead", "hair_style", "hair_style_param_list", "hair_style_tab", LLVector3d(0.f, 0.f, 0.10f), LLVector3d(-0.4f, 0.05f, 0.10f),SEX_BOTH));
+	addEntry(SUBPART_HAIR_EYEBROWS, new SubpartEntry(SUBPART_HAIR_EYEBROWS, "mHead", "hair_eyebrows", "hair_eyebrows_param_list", "hair_eyebrows_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+	addEntry(SUBPART_HAIR_FACIAL, new SubpartEntry(SUBPART_HAIR_FACIAL, "mHead", "hair_facial", "hair_facial_param_list", "hair_facial_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_MALE));
+
+	addEntry(SUBPART_EYES, new SubpartEntry(SUBPART_EYES, "mHead", "eyes", "eyes_main_param_list", "eyes_main_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+
+	addEntry(SUBPART_SHIRT, new SubpartEntry(SUBPART_SHIRT, "mTorso", "shirt", "shirt_main_param_list", "shirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
+	addEntry(SUBPART_PANTS, new SubpartEntry(SUBPART_PANTS, "mPelvis", "pants", "pants_main_param_list", "pants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+	addEntry(SUBPART_SHOES, new SubpartEntry(SUBPART_SHOES, "mPelvis", "shoes", "shoes_main_param_list", "shoes_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+	addEntry(SUBPART_SOCKS, new SubpartEntry(SUBPART_SOCKS, "mPelvis", "socks", "socks_main_param_list", "socks_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+	addEntry(SUBPART_JACKET, new SubpartEntry(SUBPART_JACKET, "mTorso", "jacket", "jacket_main_param_list", "jacket_main_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(-2.f, 0.1f, 0.3f),SEX_BOTH));
+	addEntry(SUBPART_SKIRT, new SubpartEntry(SUBPART_SKIRT, "mPelvis", "skirt", "skirt_main_param_list", "skirt_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+	addEntry(SUBPART_GLOVES, new SubpartEntry(SUBPART_GLOVES, "mTorso", "gloves", "gloves_main_param_list", "gloves_main_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(-1.f, 0.15f, 0.f),SEX_BOTH));
+	addEntry(SUBPART_UNDERSHIRT, new SubpartEntry(SUBPART_UNDERSHIRT, "mTorso", "undershirt", "undershirt_main_param_list", "undershirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
+	addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants", "underpants_main_param_list", "underpants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+	addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha", "alpha_main_param_list", "alpha_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+	addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", "tattoo_main_param_list", "tattoo_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+}
+
+LLEditWearableDictionary::SubpartEntry::SubpartEntry(ESubpart part,
+					 const std::string &joint,
+					 const std::string &edit_group,
+					 const std::string &param_list,
+					 const std::string &accordion_tab,
+					 const LLVector3d  &target_offset,
+					 const LLVector3d  &camera_offset,
+					 const ESex 	   &sex) :
+	LLDictionaryEntry(edit_group),
+	mSubpart(part),
+	mTargetJoint(joint),
+	mEditGroup(edit_group),
+	mParamList(param_list),
+	mAccordionTab(accordion_tab),
+	mTargetOffset(target_offset),
+	mCameraOffset(camera_offset),
+	mSex(sex)
+{
+}
+
+
+// LLPanelEditWearable
+
+LLPanelEditWearable::LLPanelEditWearable()
+	: LLPanel()
+{
+}
+
+//virtual
+LLPanelEditWearable::~LLPanelEditWearable()
+{
+
+}
+
+// virtual 
+BOOL LLPanelEditWearable::postBuild()
+{
+	// buttons
+	mBtnRevert = getChild<LLButton>("revert_button");
+	mBtnRevert->setClickedCallback(boost::bind(&LLPanelEditWearable::onRevertButtonClicked, this));
+
+	mBtnBack = getChild<LLButton>("back_btn");
+	// handled at appearance panel level?
+	//mBtnBack->setClickedCallback(boost::bind(&LLPanelEditWearable::onBackButtonClicked, this));
+
+	mTextEditor = getChild<LLTextEditor>("description");
+
+	mPanelTitle = getChild<LLTextBox>("edit_wearable_title");
+	mDescTitle = getChild<LLTextBox>("description_text");
+
+	// The following panels will be shown/hidden based on what wearable we're editing
+	// body parts
+	mPanelShape = getChild<LLPanel>("edit_shape_panel");
+	mPanelSkin = getChild<LLPanel>("edit_skin_panel");
+	mPanelEyes = getChild<LLPanel>("edit_eyes_panel");
+	mPanelHair = getChild<LLPanel>("edit_hair_panel");
+
+	//clothes
+	mPanelShirt = getChild<LLPanel>("edit_shirt_panel");
+	mPanelPants = getChild<LLPanel>("edit_pants_panel");
+	mPanelShoes = getChild<LLPanel>("edit_shoes_panel");
+	mPanelSocks = getChild<LLPanel>("edit_socks_panel");
+	mPanelJacket = getChild<LLPanel>("edit_jacket_panel");
+	mPanelGloves = getChild<LLPanel>("edit_gloves_panel");
+	mPanelUndershirt = getChild<LLPanel>("edit_undershirt_panel");
+	mPanelUnderpants = getChild<LLPanel>("edit_underpants_panel");
+	mPanelSkirt = getChild<LLPanel>("edit_skirt_panel");
+	mPanelAlpha = getChild<LLPanel>("edit_alpha_panel");
+	mPanelTattoo = getChild<LLPanel>("edit_tattoo_panel");
+
+	mWearablePtr = NULL;
+
+	return TRUE;
+}
+
+// virtual 
+// LLUICtrl
+BOOL LLPanelEditWearable::isDirty() const
+{
+	BOOL isDirty = FALSE;
+	if (mWearablePtr)
+	{
+		if (mWearablePtr->isDirty() ||
+			mWearablePtr->getName().compare(mTextEditor->getText()) != 0)
+		{
+			isDirty = TRUE;
+		}
+	}
+	return isDirty;
+}
+//virtual
+void LLPanelEditWearable::draw()
+{
+	BOOL is_dirty = isDirty();
+	mBtnRevert->setEnabled(is_dirty);
+
+	LLPanel::draw();
+}
+
+void LLPanelEditWearable::setWearable(LLWearable *wearable)
+{
+	showWearable(mWearablePtr, FALSE);
+	mWearablePtr = wearable;
+	showWearable(mWearablePtr, TRUE);
+
+	initializePanel();
+}
+
+//static 
+void LLPanelEditWearable::onRevertButtonClicked(void* userdata)
+{
+	LLPanelEditWearable *panel = (LLPanelEditWearable*) userdata;
+	panel->revertChanges();
+}
+
+
+void LLPanelEditWearable::saveChanges()
+{
+	if (!mWearablePtr || !isDirty())
+	{
+		// do nothing if no unsaved changes
+		return;
+	}
+
+	U32 index = gAgentWearables.getWearableIndex(mWearablePtr->getType(), mWearablePtr);
+	
+	if (mWearablePtr->getName().compare(mTextEditor->getText()) != 0)
+	{
+		// the name of the wearable has changed, re-save wearable with new name
+		gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, mTextEditor->getText(), FALSE);
+	}
+	else
+	{
+		gAgentWearables.saveWearable(mWearablePtr->getType(), index);
+	}
+}
+
+void LLPanelEditWearable::revertChanges()
+{
+	if (!mWearablePtr || !isDirty())
+	{
+		// no unsaved changes to revert
+		return;
+	}
+
+	mWearablePtr->revertValues();
+	mTextEditor->setText(mWearablePtr->getName());
+}
+
+void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)
+{
+	if (!wearable)
+	{
+		return;
+	}
+
+	EWearableType type = wearable->getType();
+	LLPanel *targetPanel = NULL;
+	std::string title;
+	std::string description_title;
+
+	const LLEditWearableDictionary::WearableEntry *entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+	if (!entry)
+	{
+		llwarns << "called LLPanelEditWearable::showWearable with an invalid wearable type! (" << type << ")" << llendl;
+		return;
+	}
+
+	targetPanel = getPanel(type);
+	title = getString(entry->mTitle);
+	description_title = getString(entry->mDescTitle);
+
+	targetPanel->setVisible(show);
+	if (show)
+	{
+		mPanelTitle->setText(title);
+		mDescTitle->setText(description_title);
+	}
+
+}
+
+void LLPanelEditWearable::initializePanel()
+{
+	if (!mWearablePtr)
+	{
+		// cannot initialize with a null reference.
+		return;
+	}
+
+	EWearableType type = mWearablePtr->getType();
+
+	// set name
+	mTextEditor->setText(mWearablePtr->getName());
+
+	// clear and rebuild visual param list
+	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+	if (!wearable_entry)
+	{
+		llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
+		return;
+	}
+	U8 num_subparts = wearable_entry->mSubparts.size();
+
+	for (U8 index = 0; index < num_subparts; ++index)
+	{
+		// dive into data structures to get the panel we need
+		ESubpart subpart_e = wearable_entry->mSubparts[index];
+		const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+
+		if (!subpart_entry)
+		{
+			llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
+			continue;
+		}
+
+		const std::string scrolling_panel = subpart_entry->mParamList;
+		const std::string accordion_tab = subpart_entry->mAccordionTab;
+
+		LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
+		LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
+
+		if (!panel_list)
+		{
+			llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
+			continue;
+		}
+
+		if (!tab)
+		{
+			llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
+			continue;
+		}
+
+		// what edit group do we want to extract params for?
+		const std::string edit_group = subpart_entry->mEditGroup;
+
+		// storage for ordered list of visual params
+		value_map_t sorted_params;
+		getSortedParams(sorted_params, edit_group);
+
+		buildParamList(panel_list, sorted_params, tab);
+
+		updateScrollingPanelUI();
+	}
+	
+}
+
+void LLPanelEditWearable::updateScrollingPanelUI()
+{
+	// do nothing if we don't have a valid wearable we're editing
+	if (mWearablePtr == NULL)
+	{
+		return;
+	}
+
+	EWearableType type = mWearablePtr->getType();
+	LLPanel *panel = getPanel(type);
+
+	if(panel && (mWearablePtr->getItemID().notNull()))
+	{
+		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+		U8 num_subparts = wearable_entry->mSubparts.size();
+
+		LLScrollingPanelParam::sUpdateDelayFrames = 0;
+		for (U8 index = 0; index < num_subparts; ++index)
+		{
+			// dive into data structures to get the panel we need
+			ESubpart subpart_e = wearable_entry->mSubparts[index];
+			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+
+			const std::string scrolling_panel = subpart_entry->mParamList;
+
+			LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
+	
+			if (!panel_list)
+			{
+				llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
+				continue;
+			}
+			
+			panel_list->updatePanels(TRUE);
+		}
+	}
+}
+
+LLPanel* LLPanelEditWearable::getPanel(EWearableType type)
+{
+	switch (type)
+	{
+		case WT_SHAPE:
+			return mPanelShape;
+			break;
+
+		case WT_SKIN:
+			return mPanelSkin;
+			break;
+
+		case WT_HAIR:
+			return mPanelHair;
+			break;
+
+		case WT_EYES:
+			return mPanelEyes;
+			break;
+
+		case WT_SHIRT:
+			return mPanelShirt;
+			break;
+
+		case WT_PANTS:
+			return mPanelPants;
+			break;
+
+		case WT_SHOES:
+			return mPanelShoes;
+			break;
+
+		case WT_SOCKS:
+			return mPanelSocks;
+			break;
+
+		case WT_JACKET:
+			return mPanelJacket;
+			break;
+
+		case WT_GLOVES:
+			return mPanelGloves;
+			break;
+
+		case WT_UNDERSHIRT:
+			return mPanelUndershirt;
+			break;
+
+		case WT_UNDERPANTS:
+			return mPanelUnderpants;
+			break;
+
+		case WT_SKIRT:
+			return mPanelSkirt;
+			break;
+
+		case WT_ALPHA:
+			return mPanelAlpha;
+			break;
+
+		case WT_TATTOO:
+			return mPanelTattoo;
+			break;
+		default:
+			break;
+	}
+	return NULL;
+}
+
+void LLPanelEditWearable::getSortedParams(value_map_t &sorted_params, const std::string &edit_group)
+{
+	LLWearable::visualParamCluster_t param_list;
+	ESex avatar_sex = gAgent.getAvatarObject()->getSex();
+
+	mWearablePtr->getVisualParams(param_list);
+
+	LLWearable::visualParamCluster_t::iterator iter = param_list.begin();
+	LLWearable::visualParamCluster_t::iterator end = param_list.end();
+
+	for (; iter != end; ++iter)
+	{
+		LLViewerVisualParam *param = (LLViewerVisualParam*) *iter;
+
+		if (param->getID() == -1
+			|| param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE 
+			|| param->getEditGroup() != edit_group 
+			|| !(param->getSex() & avatar_sex))
+		{
+			continue;
+		}
+
+		value_map_t::value_type vt(-param->getDisplayOrder(), param);
+		llassert( sorted_params.find(-param->getDisplayOrder()) == sorted_params.end() ); //check for duplicates
+		sorted_params.insert(vt);
+	}
+}
+
+void LLPanelEditWearable::buildParamList(LLScrollingPanelList *panel_list, value_map_t &sorted_params, LLAccordionCtrlTab *tab)
+{
+	// sorted_params is sorted according to magnitude of effect from
+	// least to greatest.  Adding to the front of the child list
+	// reverses that order.
+	if( panel_list )
+	{
+		panel_list->clearPanels();
+		value_map_t::iterator end = sorted_params.end();
+		S32 height = 0;
+		for(value_map_t::iterator it = sorted_params.begin(); it != end; ++it)
+		{
+			LLPanel::Params p;
+			p.name("LLScrollingPanelParam");
+			p.rect(LLRect(0, LLScrollingPanelParam::PARAM_PANEL_HEIGHT, LLScrollingPanelParam::PARAM_PANEL_WIDTH, 0 ));
+			LLScrollingPanelParam* panel_param = new LLScrollingPanelParam( p, NULL, (*it).second, TRUE, this->getWearable());
+			height = panel_list->addPanel( panel_param );
+		}
+	
+		S32 width = tab->getRect().getWidth();
+	
+		tab->reshape(width,height + tab->getHeaderHeight()+10,FALSE);
+	}
+}
+
+
+
+
+
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
new file mode 100644
index 0000000000000000000000000000000000000000..417865961767534783b3d6b0a73fd7972f364623
--- /dev/null
+++ b/indra/newview/llpaneleditwearable.h
@@ -0,0 +1,114 @@
+/** 
+ * @file llfloatercustomize.h
+ * @brief The customize avatar floater, triggered by "Appearance..."
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELEDITWEARABLE_H
+#define LL_LLPANELEDITWEARABLE_H
+
+#include "llpanel.h"
+#include "llscrollingpanellist.h"
+#include "llmodaldialog.h"
+#include "llwearabledictionary.h"
+
+class LLWearable;
+class LLTextEditor;
+class LLTextBox;
+class LLViewerVisualParam;
+class LLVisualParamHint;
+class LLViewerJointMesh;
+class LLAccordionCtrlTab;
+
+class LLPanelEditWearable : public LLPanel
+{
+public:
+	LLPanelEditWearable( );
+	virtual ~LLPanelEditWearable();
+
+	/*virtual*/ BOOL 		postBuild();
+	/*virtual*/ BOOL		isDirty() const;	// LLUICtrl
+	/*virtual*/ void		draw();	
+
+	LLWearable* 		getWearable() { return mWearablePtr; }
+	void				setWearable(LLWearable *wearable);
+
+	void				saveChanges();
+	void				revertChanges();
+
+	static void			onRevertButtonClicked(void* userdata);
+
+private:
+	typedef std::map<F32, LLViewerVisualParam*> value_map_t;
+
+	void				showWearable(LLWearable* wearable, BOOL show);
+	void				initializePanel();
+	void				updateScrollingPanelUI();
+	LLPanel*			getPanel(EWearableType type);
+	void				getSortedParams(value_map_t &sorted_params, const std::string &edit_group);
+	void				buildParamList(LLScrollingPanelList *panel_list, value_map_t &sorted_params, LLAccordionCtrlTab *tab);
+
+	// the pointer to the wearable we're editing. NULL means we're not editing a wearable.
+	LLWearable *mWearablePtr;
+
+	// these are constant no matter what wearable we're editing
+	LLButton *mBtnRevert;
+	LLButton *mBtnBack;
+
+	LLTextBox *mPanelTitle;
+	LLTextBox *mDescTitle;
+
+
+	// This text editor reference will change each time we edit a new wearable - 
+	// it will be grabbed from the currently visible panel
+	LLTextEditor *mTextEditor;
+
+	// The following panels will be shown/hidden based on what wearable we're editing
+	// body parts
+	LLPanel *mPanelShape;
+	LLPanel *mPanelSkin;
+	LLPanel *mPanelEyes;
+	LLPanel *mPanelHair;
+
+	//clothes
+	LLPanel *mPanelShirt;
+	LLPanel *mPanelPants;
+	LLPanel *mPanelShoes;
+	LLPanel *mPanelSocks;
+	LLPanel *mPanelJacket;
+	LLPanel *mPanelGloves;
+	LLPanel *mPanelUndershirt;
+	LLPanel *mPanelUnderpants;
+	LLPanel *mPanelSkirt;
+	LLPanel *mPanelAlpha;
+	LLPanel *mPanelTattoo;
+
+};
+
+#endif
diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp
index dbe6079ed57cfa73884523b35f0b5955413ab328..02e11cefad36e69c1fbc36db7bf5166347702d96 100644
--- a/indra/newview/llpolymesh.cpp
+++ b/indra/newview/llpolymesh.cpp
@@ -40,6 +40,7 @@
 #include "llviewercontrol.h"
 #include "llxmltree.h"
 #include "llvoavatar.h"
+#include "llwearable.h"
 #include "lldir.h"
 #include "llvolume.h"
 #include "llendianswizzle.h"
@@ -1117,6 +1118,13 @@ BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
 	return TRUE;
 }
 
+/*virtual*/ LLViewerVisualParam * 	LLPolySkeletalDistortion::cloneParam(LLWearable* wearable) const
+{
+	LLPolySkeletalDistortion *new_param = new LLPolySkeletalDistortion(mAvatar);
+	*new_param = *this;
+	return new_param;
+}
+
 //-----------------------------------------------------------------------------
 // apply()
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llpolymesh.h b/indra/newview/llpolymesh.h
index c23617749f253608fe5ee6e13f4b112beb8e5a0b..709b176c8d96a4336f249af2e0bee57ddd1029f6 100644
--- a/indra/newview/llpolymesh.h
+++ b/indra/newview/llpolymesh.h
@@ -46,6 +46,7 @@
 
 class LLSkinJoint;
 class LLVOAvatar;
+class LLWearable;
 
 //#define USE_STRIPS	// Use tri-strips for rendering.
 
@@ -416,6 +417,8 @@ class LLPolySkeletalDistortion : public LLViewerVisualParam
 	//   This sets mInfo and calls initialization functions
 	BOOL							setInfo(LLPolySkeletalDistortionInfo *info);
 
+	/*virtual*/ LLViewerVisualParam * 	cloneParam(LLWearable* wearable) const;
+
 	// LLVisualParam Virtual functions
 	///*virtual*/ BOOL				parseData(LLXmlTreeNode* node);
 	/*virtual*/ void				apply( ESex sex );
diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp
index 3a57b6f9f700c6f24b2406da3689430b0d8eb35b..924b1a4d6e500de4daca09e3fec99a55c411120e 100644
--- a/indra/newview/llpolymorph.cpp
+++ b/indra/newview/llpolymorph.cpp
@@ -37,6 +37,7 @@
 
 #include "llpolymorph.h"
 #include "llvoavatar.h"
+#include "llwearable.h"
 #include "llxmltree.h"
 #include "llendianswizzle.h"
 
@@ -301,6 +302,13 @@ BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info)
 	return TRUE;
 }
 
+/*virtual*/ LLViewerVisualParam * 	LLPolyMorphTarget::cloneParam(LLWearable* wearable) const
+{
+	LLPolyMorphTarget *new_param = new LLPolyMorphTarget(mMesh);
+	*new_param = *this;
+	return new_param;
+}
+
 #if 0 // obsolete
 //-----------------------------------------------------------------------------
 // parseData()
diff --git a/indra/newview/llpolymorph.h b/indra/newview/llpolymorph.h
index f8dd52ca3275e00aac480f0f4d703105f15e9b8b..5089fc2e8a4f95d67aeed8b0aacea9896e43f528 100644
--- a/indra/newview/llpolymorph.h
+++ b/indra/newview/llpolymorph.h
@@ -42,6 +42,7 @@ class LLPolyMeshSharedData;
 class LLVOAvatar;
 class LLVector2;
 class LLViewerJointCollisionVolume;
+class LLWearable;
 
 //-----------------------------------------------------------------------------
 // LLPolyMorphData()
@@ -153,6 +154,8 @@ class LLPolyMorphTarget : public LLViewerVisualParam
 	//   This sets mInfo and calls initialization functions
 	BOOL					setInfo(LLPolyMorphTargetInfo *info);
 
+	/*virtual*/ LLViewerVisualParam * 	cloneParam(LLWearable* wearable) const;
+
 	// LLVisualParam Virtual functions
 	///*virtual*/ BOOL				parseData(LLXmlTreeNode* node);
 	/*virtual*/ void				apply( ESex sex );
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1013d5adb7aec09063c6f7e0eb366c5cb6cfffae
--- /dev/null
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -0,0 +1,388 @@
+/** 
+ * @file llscrollingpanelparam.cpp
+ * @brief UI panel for a list of visual param panels
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llscrollingpanelparam.h"
+#include "llviewerjointmesh.h"
+#include "llviewervisualparam.h"
+#include "llwearable.h"
+#include "llviewervisualparam.h"
+#include "lltoolmorph.h"
+#include "lltrans.h"
+#include "llbutton.h"
+#include "llsliderctrl.h"
+#include "llagent.h"
+#include "llvoavatarself.h"
+
+// Constants for LLPanelVisualParam
+const static F32 PARAM_STEP_TIME_THRESHOLD = 0.25f;
+
+const static S32 BTN_BORDER = 2;
+const static S32 PARAM_HINT_WIDTH = 128;
+const static S32 PARAM_HINT_HEIGHT = 128;
+const static S32 PARAM_HINT_LABEL_HEIGHT = 16;
+const static S32 PARAM_PANEL_WIDTH = 2 * (3* BTN_BORDER + PARAM_HINT_WIDTH +  LLPANEL_BORDER_WIDTH);
+const static S32 PARAM_PANEL_HEIGHT = 2 * BTN_BORDER + PARAM_HINT_HEIGHT + PARAM_HINT_LABEL_HEIGHT + 4 * LLPANEL_BORDER_WIDTH; 
+
+// LLScrollingPanelParam
+//static
+S32 LLScrollingPanelParam::sUpdateDelayFrames = 0;
+
+LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_params,
+											  LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable )
+	: LLScrollingPanel( panel_params ),
+	  mParam(param),
+	  mAllowModify(allow_modify),
+	  mWearable(wearable)
+{
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_scrolling_param.xml");
+
+	static LLUICachedControl<S32> slider_ctrl_height ("UISliderctrlHeight", 0);
+	S32 pos_x = 2 * LLPANEL_BORDER_WIDTH;
+	S32 pos_y = 3 * LLPANEL_BORDER_WIDTH + slider_ctrl_height;
+	F32 min_weight = param->getMinWeight();
+	F32 max_weight = param->getMaxWeight();
+
+	mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, param,  min_weight);
+	pos_x += PARAM_HINT_WIDTH + 3 * BTN_BORDER;
+	mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, param, max_weight );
+	
+	mHintMin->setAllowsUpdates( FALSE );
+	mHintMax->setAllowsUpdates( FALSE );
+	childSetValue("param slider", weightToPercent(param->getWeight()));
+
+	std::string display_name = LLTrans::getString(param->getDisplayName());
+	childSetLabelArg("param slider", "[DESC]", display_name);
+	childSetEnabled("param slider", mAllowModify);
+	childSetCommitCallback("param slider", LLScrollingPanelParam::onSliderMoved, this);
+
+	// *TODO: Translate
+	std::string min_name = param->getMinDisplayName();
+	std::string max_name = param->getMaxDisplayName();
+	childSetValue("min param text", min_name);
+	childSetValue("max param text", max_name);
+
+	LLButton* less = getChild<LLButton>("less");
+	if (less)
+	{
+		less->setMouseDownCallback( LLScrollingPanelParam::onHintMinMouseDown, this );
+		less->setMouseUpCallback( LLScrollingPanelParam::onHintMinMouseUp, this );
+		less->setHeldDownCallback( LLScrollingPanelParam::onHintMinHeldDown, this );
+		less->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD );
+	}
+
+	LLButton* more = getChild<LLButton>("more");
+	if (more)
+	{
+		more->setMouseDownCallback( LLScrollingPanelParam::onHintMaxMouseDown, this );
+		more->setMouseUpCallback( LLScrollingPanelParam::onHintMaxMouseUp, this );
+		more->setHeldDownCallback( LLScrollingPanelParam::onHintMaxHeldDown, this );
+		more->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD );
+	}
+
+	setVisible(FALSE);
+	setBorderVisible( FALSE );
+}
+
+LLScrollingPanelParam::~LLScrollingPanelParam()
+{
+}
+void LLScrollingPanelParam::updatePanel(BOOL allow_modify)
+{
+	LLViewerVisualParam* param = mHintMin->getVisualParam();
+
+	if (!mWearable)
+	{
+		// not editing a wearable just now, no update necessary
+		return;
+	}
+	F32 current_weight = mWearable->getVisualParamWeight( param->getID() );
+	childSetValue("param slider", weightToPercent( current_weight ) );
+	mHintMin->requestUpdate( sUpdateDelayFrames++ );
+	mHintMax->requestUpdate( sUpdateDelayFrames++ );
+
+	mAllowModify = allow_modify;
+	childSetEnabled("param slider", mAllowModify);
+	childSetEnabled("less", mAllowModify);
+	childSetEnabled("more", mAllowModify);
+}
+
+void LLScrollingPanelParam::setVisible( BOOL visible )
+{
+	if( getVisible() != visible )
+	{
+		LLPanel::setVisible( visible );
+		mHintMin->setAllowsUpdates( visible );
+		mHintMax->setAllowsUpdates( visible );
+
+		if( visible )
+		{
+			mHintMin->setUpdateDelayFrames( sUpdateDelayFrames++ );
+			mHintMax->setUpdateDelayFrames( sUpdateDelayFrames++ );
+		}
+	}
+}
+
+void LLScrollingPanelParam::draw()
+{
+	if( !mWearable )
+	{
+		return;
+	}
+	
+	childSetVisible("less", mHintMin->getVisible());
+	childSetVisible("more", mHintMax->getVisible());
+
+	// Draw all the children except for the labels
+	childSetVisible( "min param text", FALSE );
+	childSetVisible( "max param text", FALSE );
+	LLPanel::draw();
+
+	// Draw the hints over the "less" and "more" buttons.
+	glPushMatrix();
+	{
+		const LLRect& r = mHintMin->getRect();
+		F32 left = (F32)(r.mLeft + BTN_BORDER);
+		F32 bot  = (F32)(r.mBottom + BTN_BORDER);
+		glTranslatef(left, bot, 0.f);
+		mHintMin->draw();
+	}
+	glPopMatrix();
+
+	glPushMatrix();
+	{
+		const LLRect& r = mHintMax->getRect();
+		F32 left = (F32)(r.mLeft + BTN_BORDER);
+		F32 bot  = (F32)(r.mBottom + BTN_BORDER);
+		glTranslatef(left, bot, 0.f);
+		mHintMax->draw();
+	}
+	glPopMatrix();
+
+
+	// Draw labels on top of the buttons
+	childSetVisible( "min param text", TRUE );
+	drawChild(getChild<LLView>("min param text"), BTN_BORDER, BTN_BORDER);
+
+	childSetVisible( "max param text", TRUE );
+	drawChild(getChild<LLView>("max param text"), BTN_BORDER, BTN_BORDER);
+}
+
+// static
+void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata)
+{
+	LLSliderCtrl* slider = (LLSliderCtrl*) ctrl;
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+	LLViewerVisualParam* param = self->mParam;
+	
+	F32 current_weight = self->mWearable->getVisualParamWeight( param->getID() );
+	F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() );
+	if (current_weight != new_weight )
+	{
+		self->mWearable->setVisualParamWeight( param->getID(), new_weight, TRUE );
+		gAgent.getAvatarObject()->updateVisualParams();
+	}
+}
+
+// static
+void LLScrollingPanelParam::onSliderMouseDown(LLUICtrl* ctrl, void* userdata)
+{
+}
+
+// static
+void LLScrollingPanelParam::onSliderMouseUp(LLUICtrl* ctrl, void* userdata)
+{
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+
+	LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax );
+}
+
+// static
+void LLScrollingPanelParam::onHintMinMouseDown( void* userdata )
+{
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+	self->onHintMouseDown( self->mHintMin );
+}
+
+// static
+void LLScrollingPanelParam::onHintMaxMouseDown( void* userdata )
+{
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+	self->onHintMouseDown( self->mHintMax );
+}
+
+
+void LLScrollingPanelParam::onHintMouseDown( LLVisualParamHint* hint )
+{
+	// morph towards this result
+	F32 current_weight = mWearable->getVisualParamWeight( hint->getVisualParam()->getID() );
+
+	// if we have maxed out on this morph, we shouldn't be able to click it
+	if( hint->getVisualParamWeight() != current_weight )
+	{
+		mMouseDownTimer.reset();
+		mLastHeldTime = 0.f;
+	}
+}
+
+// static
+void LLScrollingPanelParam::onHintMinHeldDown( void* userdata )
+{
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+	self->onHintHeldDown( self->mHintMin );
+}
+
+// static
+void LLScrollingPanelParam::onHintMaxHeldDown( void* userdata )
+{
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+	self->onHintHeldDown( self->mHintMax );
+}
+	
+void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )
+{
+	F32 current_weight = mWearable->getVisualParamWeight( hint->getVisualParam()->getID() );
+
+	if (current_weight != hint->getVisualParamWeight() )
+	{
+		const F32 FULL_BLEND_TIME = 2.f;
+		F32 elapsed_time = mMouseDownTimer.getElapsedTimeF32() - mLastHeldTime;
+		mLastHeldTime += elapsed_time;
+
+		F32 new_weight;
+		if (current_weight > hint->getVisualParamWeight() )
+		{
+			new_weight = current_weight - (elapsed_time / FULL_BLEND_TIME);
+		}
+		else
+		{
+			new_weight = current_weight + (elapsed_time / FULL_BLEND_TIME);
+		}
+
+		// Make sure we're not taking the slider out of bounds
+		// (this is where some simple UI limits are stored)
+		F32 new_percent = weightToPercent(new_weight);
+		LLSliderCtrl* slider = getChild<LLSliderCtrl>("param slider");
+		if (slider)
+		{
+			if (slider->getMinValue() < new_percent
+				&& new_percent < slider->getMaxValue())
+			{
+				mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, TRUE);
+				gAgent.getAvatarObject()->updateVisualParams();
+
+				slider->setValue( weightToPercent( new_weight ) );
+			}
+		}
+	}
+}
+
+// static
+void LLScrollingPanelParam::onHintMinMouseUp( void* userdata )
+{
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+
+	F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32();
+
+	LLVisualParamHint* hint = self->mHintMin;
+
+	if (elapsed_time < PARAM_STEP_TIME_THRESHOLD)
+	{
+		// step in direction
+		F32 current_weight = self->mWearable->getVisualParamWeight( hint->getVisualParam()->getID() );
+		F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight();
+		// step a fraction in the negative directiona
+		F32 new_weight = current_weight - (range / 10.f);
+		F32 new_percent = self->weightToPercent(new_weight);
+		LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider");
+		if (slider)
+		{
+			if (slider->getMinValue() < new_percent
+				&& new_percent < slider->getMaxValue())
+			{
+				self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE);
+				slider->setValue( self->weightToPercent( new_weight ) );
+			}
+		}
+	}
+
+	LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax );
+}
+
+void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )
+{
+	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
+
+	F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32();
+
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	if (avatar)
+	{
+		LLVisualParamHint* hint = self->mHintMax;
+
+		if (elapsed_time < PARAM_STEP_TIME_THRESHOLD)
+		{
+			// step in direction
+			F32 current_weight = self->mWearable->getVisualParamWeight( hint->getVisualParam()->getID() );
+			F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight();
+			// step a fraction in the negative direction
+			F32 new_weight = current_weight + (range / 10.f);
+			F32 new_percent = self->weightToPercent(new_weight);
+			LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider");
+			if (slider)
+			{
+				if (slider->getMinValue() < new_percent
+					&& new_percent < slider->getMaxValue())
+				{
+					self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight, TRUE);
+					slider->setValue( self->weightToPercent( new_weight ) );
+				}
+			}
+		}
+	}
+
+	LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax );
+}
+
+
+F32 LLScrollingPanelParam::weightToPercent( F32 weight )
+{
+	LLViewerVisualParam* param = mParam;
+	return (weight - param->getMinWeight()) /  (param->getMaxWeight() - param->getMinWeight()) * 100.f;
+}
+
+F32 LLScrollingPanelParam::percentToWeight( F32 percent )
+{
+	LLViewerVisualParam* param = mParam;
+	return percent / 100.f * (param->getMaxWeight() - param->getMinWeight()) + param->getMinWeight();
+}
diff --git a/indra/newview/llscrollingpanelparam.h b/indra/newview/llscrollingpanelparam.h
new file mode 100644
index 0000000000000000000000000000000000000000..8c5db64816dad6af6e8e9bff1a5b55324b566057
--- /dev/null
+++ b/indra/newview/llscrollingpanelparam.h
@@ -0,0 +1,100 @@
+/** 
+ * @file llscrollingpanelparam.h
+ * @brief the scrolling panel containing a list of visual param 
+ *  	  panels
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_SCROLLINGPANELPARAM_H
+#define LL_SCROLLINGPANELPARAM_H
+
+#include "llpanel.h"
+#include "llscrollingpanellist.h"
+
+class LLViewerJointMesh;
+class LLViewerVisualParam;
+class LLWearable;
+class LLVisualParamHint;
+class LLViewerVisualParam;
+
+class LLScrollingPanelParam : public LLScrollingPanel
+{
+public:
+	LLScrollingPanelParam( const LLPanel::Params& panel_params,
+						   LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable );
+	virtual ~LLScrollingPanelParam();
+
+	virtual void		draw();
+	virtual void		setVisible( BOOL visible );
+	virtual void		updatePanel(BOOL allow_modify);
+
+	static void			onSliderMouseDown(LLUICtrl* ctrl, void* userdata);
+	static void			onSliderMoved(LLUICtrl* ctrl, void* userdata);
+	static void			onSliderMouseUp(LLUICtrl* ctrl, void* userdata);
+
+	static void			onHintMinMouseDown(void* userdata);
+	static void			onHintMinHeldDown(void* userdata);
+	static void			onHintMaxMouseDown(void* userdata);
+	static void			onHintMaxHeldDown(void* userdata);
+	static void			onHintMinMouseUp(void* userdata);
+	static void			onHintMaxMouseUp(void* userdata);
+
+	void				onHintMouseDown( LLVisualParamHint* hint );
+	void				onHintHeldDown( LLVisualParamHint* hint );
+
+	F32					weightToPercent( F32 weight );
+	F32					percentToWeight( F32 percent );
+
+public:
+	// Constants for LLPanelVisualParam
+	const static F32 PARAM_STEP_TIME_THRESHOLD;
+	
+	const static S32 BTN_BORDER;
+	const static S32 PARAM_HINT_WIDTH;
+	const static S32 PARAM_HINT_HEIGHT;
+	const static S32 PARAM_HINT_LABEL_HEIGHT;
+	const static S32 PARAM_PANEL_WIDTH;
+	const static S32 PARAM_PANEL_HEIGHT; 
+
+
+public:
+	LLViewerVisualParam* mParam;
+	LLPointer<LLVisualParamHint>	mHintMin;
+	LLPointer<LLVisualParamHint>	mHintMax;
+	static S32 			sUpdateDelayFrames;
+	
+protected:
+	LLTimer				mMouseDownTimer;	// timer for how long mouse has been held down on a hint.
+	F32					mLastHeldTime;
+
+	BOOL mAllowModify;
+	LLWearable *mWearable;
+}; 
+
+#endif
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 7bf0d31d94f68a246ddb48ae800e3a1625376c6e..9f317803ce745c5cea1579136ad290b881227f29 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -659,8 +659,11 @@ void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group)
 		return;
 	}
 
-	group->mLastUpdateDistance = group->mDistance;
-	group->mLastUpdateViewAngle = group->mViewAngle;
+	if (group->changeLOD())
+	{
+		group->mLastUpdateDistance = group->mDistance;
+		group->mLastUpdateViewAngle = group->mViewAngle;
+	}
 	
 	LLFastTimer ftm(FTM_REBUILD_VBO);	
 
diff --git a/indra/newview/lltexglobalcolor.cpp b/indra/newview/lltexglobalcolor.cpp
index e81c3731f76d6b42e528a272cc9b42e5c8325e2b..d0bb9e1cf1bcb50a6a02b312f259011472a7870f 100644
--- a/indra/newview/lltexglobalcolor.cpp
+++ b/indra/newview/lltexglobalcolor.cpp
@@ -33,6 +33,7 @@
 #include "llagent.h"
 #include "lltexlayer.h"
 #include "llvoavatar.h"
+#include "llwearable.h"
 #include "lltexglobalcolor.h"
 
 //-----------------------------------------------------------------------------
@@ -64,7 +65,7 @@ BOOL LLTexGlobalColor::setInfo(LLTexGlobalColorInfo *info)
 		 iter++)
 	{
 		LLTexParamGlobalColor* param_color = new LLTexParamGlobalColor(this);
-		if (!param_color->setInfo(*iter))
+		if (!param_color->setInfo(*iter, TRUE))
 		{
 			mInfo = NULL;
 			return FALSE;
@@ -95,10 +96,16 @@ const std::string& LLTexGlobalColor::getName() const
 // LLTexParamGlobalColor
 //-----------------------------------------------------------------------------
 LLTexParamGlobalColor::LLTexParamGlobalColor(LLTexGlobalColor* tex_global_color) :
-	LLTexLayerParamColor((LLTexLayer*)NULL),
+	LLTexLayerParamColor(tex_global_color->getAvatar()),
 	mTexGlobalColor(tex_global_color)
 {
-	mAvatar = tex_global_color->getAvatar();
+}
+
+/*virtual*/ LLViewerVisualParam * 	LLTexParamGlobalColor::cloneParam(LLWearable* wearable) const
+{
+	LLTexParamGlobalColor *new_param = new LLTexParamGlobalColor(mTexGlobalColor);
+	*new_param = *this;
+	return new_param;
 }
 
 void LLTexParamGlobalColor::onGlobalColorChanged(bool set_by_user)
diff --git a/indra/newview/lltexglobalcolor.h b/indra/newview/lltexglobalcolor.h
index 154b8143922a0315f5c77ab8fb87e6ad577bba63..f0d22d317ccf01c1f656458c3b1ef4ebeb710335 100644
--- a/indra/newview/lltexglobalcolor.h
+++ b/indra/newview/lltexglobalcolor.h
@@ -36,6 +36,7 @@
 #include "lltexlayerparams.h"
 
 class LLVOAvatar;
+class LLWearable;
 class LLTexGlobalColorInfo;
 
 class LLTexGlobalColor
@@ -67,7 +68,7 @@ class LLTexGlobalColorInfo
 	~LLTexGlobalColorInfo();
 
 	BOOL parseXml(LLXmlTreeNode* node);
-	
+
 private:
 	param_color_info_list_t		mParamColorInfoList;
 	std::string				mName;
@@ -77,6 +78,7 @@ class LLTexParamGlobalColor : public LLTexLayerParamColor
 {
 public:
 	LLTexParamGlobalColor(LLTexGlobalColor *tex_color);
+	/*virtual*/ LLViewerVisualParam * 	cloneParam(LLWearable* wearable) const;
 protected:
 	/*virtual*/ void onGlobalColorChanged(bool set_by_user);
 private:
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 5a5f187415a58a126b1d7c715f7ece1de30fe80a..de8458c0fac95cb283d499b8fad2b296e2ea593c 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -41,6 +41,9 @@
 #include "llassetuploadresponders.h"
 #include "lltexlayerparams.h"
 #include "llui.h"
+#include "llagentwearables.h"
+#include "llwearable.h"
+#include "llviewervisualparam.h"
 
 //#include "../tools/imdebug/imdebug.h"
 
@@ -66,90 +69,45 @@ LLBakedUploadData::LLBakedUploadData(const LLVOAvatarSelf* avatar,
 
 // static
 S32 LLTexLayerSetBuffer::sGLByteCount = 0;
-S32 LLTexLayerSetBuffer::sGLBumpByteCount = 0;
 
 LLTexLayerSetBuffer::LLTexLayerSetBuffer(LLTexLayerSet* const owner, 
-										 S32 width, S32 height, 
-										 BOOL has_bump) :
+										 S32 width, S32 height) :
 	// ORDER_LAST => must render these after the hints are created.
 	LLViewerDynamicTexture( width, height, 4, LLViewerDynamicTexture::ORDER_LAST, TRUE ), 
 	mNeedsUpdate( TRUE ),
 	mNeedsUpload( FALSE ),
 	mUploadPending( FALSE ), // Not used for any logic here, just to sync sending of updates
-	mTexLayerSet(owner),
-	mHasBump(has_bump),
-	mBumpTex(NULL)
+	mTexLayerSet(owner)
 {
 	LLTexLayerSetBuffer::sGLByteCount += getSize();
-	createBumpTexture() ;
 }
 
 LLTexLayerSetBuffer::~LLTexLayerSetBuffer()
 {
 	LLTexLayerSetBuffer::sGLByteCount -= getSize();
-
-	if( mBumpTex.notNull())
+	destroyGLTexture();
+	for( S32 order = 0; order < ORDER_COUNT; order++ )
 	{
-		mBumpTex = NULL ;
-		LLImageGL::sGlobalTextureMemoryInBytes -= mFullWidth * mFullHeight * 4;
-		LLTexLayerSetBuffer::sGLBumpByteCount -= mFullWidth * mFullHeight * 4;
+		LLViewerDynamicTexture::sInstances[order].erase(this);  // will fail in all but one case.
 	}
 }
 
 //virtual 
 void LLTexLayerSetBuffer::restoreGLTexture() 
 {	
-	createBumpTexture() ;
 	LLViewerDynamicTexture::restoreGLTexture() ;
 }
 
 //virtual 
 void LLTexLayerSetBuffer::destroyGLTexture() 
 {
-	if( mBumpTex.notNull() )
-	{
-		mBumpTex = NULL ;
-		LLImageGL::sGlobalTextureMemoryInBytes -= mFullWidth * mFullHeight * 4;
-		LLTexLayerSetBuffer::sGLBumpByteCount -= mFullWidth * mFullHeight * 4;
-	}
-
 	LLViewerDynamicTexture::destroyGLTexture() ;
 }
 
-void LLTexLayerSetBuffer::createBumpTexture()
-{
-	if( mHasBump )
-	{
-		LLGLSUIDefault gls_ui;
-		mBumpTex = LLViewerTextureManager::getLocalTexture(FALSE) ;
-		if(!mBumpTex->createGLTexture())
-		{
-			mBumpTex = NULL ;
-			return ;
-		}
-
-		gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mBumpTex->getTexName());
-		stop_glerror();
-
-		gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
-
-		gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
-
-		LLImageGL::setManualImage(GL_TEXTURE_2D, 0, GL_RGBA8, mFullWidth, mFullHeight, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
-		stop_glerror();
-
-		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-
-		LLImageGL::sGlobalTextureMemoryInBytes += mFullWidth * mFullHeight * 4;
-		LLTexLayerSetBuffer::sGLBumpByteCount += mFullWidth * mFullHeight * 4;
-	}
-}
-
 // static
 void LLTexLayerSetBuffer::dumpTotalByteCount()
 {
 	llinfos << "Composite System GL Buffers: " << (LLTexLayerSetBuffer::sGLByteCount/1024) << "KB" << llendl;
-	llinfos << "Composite System GL Bump Buffers: " << (LLTexLayerSetBuffer::sGLBumpByteCount/1024) << "KB" << llendl;
 }
 
 void LLTexLayerSetBuffer::requestUpdate()
@@ -242,8 +200,6 @@ void LLTexLayerSetBuffer::postRender(BOOL success)
 
 BOOL LLTexLayerSetBuffer::render()
 {
-	U8* baked_bump_data = NULL;
-
 	// Default color mask for tex layer render
 	gGL.setColorMask(true, true);
 
@@ -252,33 +208,6 @@ BOOL LLTexLayerSetBuffer::render()
 	BOOL upload_now = (gAgentQueryManager.hasNoPendingQueries() && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal());
 	BOOL success = TRUE;
 
-	// Composite bump
-	if( mBumpTex.notNull() )
-	{
-		// Composite the bump data
-		success &= mTexLayerSet->renderBump( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight );
-		stop_glerror();
-
-		if (success)
-		{
-			LLGLSUIDefault gls_ui;
-
-			// read back into texture (this is done externally for the color data)
-			gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mBumpTex->getTexName());
-			stop_glerror();
-
-			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight);
-			stop_glerror();
-
-			// if we need to upload the data, read it back into a buffer
-			if( upload_now )
-			{
-				baked_bump_data = new U8[ mFullWidth * mFullHeight * 4 ];
-				glReadPixels(mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, GL_RGBA, GL_UNSIGNED_BYTE, baked_bump_data );
-				stop_glerror();
-			}
-		}
-	}
 
 	// Composite the color data
 	LLGLSUIDefault gls_ui;
@@ -294,7 +223,7 @@ BOOL LLTexLayerSetBuffer::render()
 		}
 		else
 		{
-			readBackAndUpload(baked_bump_data);
+			readBackAndUpload();
 		}
 	}
 
@@ -306,7 +235,6 @@ BOOL LLTexLayerSetBuffer::render()
 	mGLTexturep->setGLTextureCreated(true);
 	mNeedsUpdate = FALSE;
 
-	delete [] baked_bump_data;
 	return success;
 }
 
@@ -330,7 +258,7 @@ BOOL LLTexLayerSetBuffer::updateImmediate()
 	return result;
 }
 
-void LLTexLayerSetBuffer::readBackAndUpload(const U8* baked_bump_data)
+void LLTexLayerSetBuffer::readBackAndUpload()
 {
 	// pointers for storing data to upload
 	U8* baked_color_data = new U8[ mFullWidth * mFullHeight * 4 ];
@@ -358,44 +286,25 @@ void LLTexLayerSetBuffer::readBackAndUpload(const U8* baked_bump_data)
 	// writes into baked_color_data
 	const char* comment_text = NULL;
 
-	S32 baked_image_components = mBumpTex.notNull() ? 5 : 4; // red green blue [bump] clothing
+	S32 baked_image_components = 5; // red green blue [bump] clothing
 	LLPointer<LLImageRaw> baked_image = new LLImageRaw( mFullWidth, mFullHeight, baked_image_components );
 	U8* baked_image_data = baked_image->getData();
 	
-	
-	if( mBumpTex.notNull() )
-	{
-		comment_text = LINDEN_J2C_COMMENT_PREFIX "RGBHM"; // 5 channels: rgb, heightfield/alpha, mask
+	comment_text = LINDEN_J2C_COMMENT_PREFIX "RGBHM"; // 5 channels: rgb, heightfield/alpha, mask
 
-			S32 i = 0;
-			for( S32 u = 0; u < mFullWidth; u++ )
-			{
-				for( S32 v = 0; v < mFullHeight; v++ )
-				{
-					baked_image_data[5*i + 0] = baked_color_data[4*i + 0];
-					baked_image_data[5*i + 1] = baked_color_data[4*i + 1];
-					baked_image_data[5*i + 2] = baked_color_data[4*i + 2];
-					baked_image_data[5*i + 3] = baked_color_data[4*i + 3]; // alpha should be correct for eyelashes.
-					baked_image_data[5*i + 4] = baked_mask_data[i];
-					i++;
-				}
-			}
-		}
-		else
+	S32 i = 0;
+	for( S32 u = 0; u < mFullWidth; u++ )
+	{
+		for( S32 v = 0; v < mFullHeight; v++ )
 		{
-			S32 i = 0;
-			for( S32 u = 0; u < mFullWidth; u++ )
-			{
-				for( S32 v = 0; v < mFullHeight; v++ )
-				{
-					baked_image_data[4*i + 0] = baked_color_data[4*i + 0];
-					baked_image_data[4*i + 1] = baked_color_data[4*i + 1];
-					baked_image_data[4*i + 2] = baked_color_data[4*i + 2];
-					baked_image_data[4*i + 3] = baked_color_data[4*i + 3];  // Use alpha, not bump
-					i++;
-				}
-			}
+			baked_image_data[5*i + 0] = baked_color_data[4*i + 0];
+			baked_image_data[5*i + 1] = baked_color_data[4*i + 1];
+			baked_image_data[5*i + 2] = baked_color_data[4*i + 2];
+			baked_image_data[5*i + 3] = baked_color_data[4*i + 3]; // alpha should be correct for eyelashes.
+			baked_image_data[5*i + 4] = baked_mask_data[i];
+			i++;
 		}
+	}
 	
 	LLPointer<LLImageJ2C> compressedImage = new LLImageJ2C;
 	compressedImage->setRate(0.f);
@@ -548,23 +457,6 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
 	delete baked_upload_data;
 }
 
-void LLTexLayerSetBuffer::bindBumpTexture( U32 stage )
-{
-	if( mBumpTex.notNull() ) 
-	{
-		gGL.getTexUnit(stage)->bindManual(LLTexUnit::TT_TEXTURE, mBumpTex->getTexName());
-		gGL.getTexUnit(0)->activate();
-	
-		mGLTexturep->updateBindStats(mFullWidth * mFullHeight * 4);
-	}
-	else
-	{
-		gGL.getTexUnit(stage)->unbind(LLTexUnit::TT_TEXTURE);
-		gGL.getTexUnit(0)->activate();
-	}
-}
-
-
 //-----------------------------------------------------------------------------
 // LLTexLayerSet
 // An ordered set of texture layers that get composited into a single texture.
@@ -659,7 +551,6 @@ LLTexLayerSet::LLTexLayerSet(LLVOAvatarSelf* const avatar) :
 	mComposite( NULL ),
 	mAvatar( avatar ),
 	mUpdatesEnabled( FALSE ),
-	mHasBump( FALSE ),
 	mInfo( NULL )
 {
 }
@@ -686,16 +577,25 @@ BOOL LLTexLayerSet::setInfo(const LLTexLayerSetInfo *info)
 		 iter != info->mLayerInfoList.end(); 
 		 iter++)
 	{
-		LLTexLayer* layer = new LLTexLayer( this );
-		if (!layer->setInfo(*iter))
+		LLTexLayerInterface *layer = NULL;
+		if ( (*iter)->isUserSettable() )
+		{
+			layer = new LLTexLayerTemplate( this );
+		}
+		else
+		{
+			layer = new LLTexLayer(this);
+		}
+		// this is the first time this layer (of either type) is being created - make sure you add the parameters to the avatar
+		if (!layer->setInfo(*iter, NULL))
 		{
 			mInfo = NULL;
 			return FALSE;
 		}
 		if (!layer->isVisibilityMask())
 		{
-		mLayerList.push_back( layer );
-	}
+			mLayerList.push_back( layer );
+		}
 		else
 		{
 			mMaskLayerList.push_back(layer);
@@ -736,12 +636,12 @@ void LLTexLayerSet::deleteCaches()
 {
 	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
 	{
-		LLTexLayer* layer = *iter;
+		LLTexLayerInterface* layer = *iter;
 		layer->deleteCaches();
 	}
 	for (layer_list_t::iterator iter = mMaskLayerList.begin(); iter != mMaskLayerList.end(); iter++)
 	{
-		LLTexLayer* layer = *iter;
+		LLTexLayerInterface* layer = *iter;
 		layer->deleteCaches();
 	}
 }
@@ -772,10 +672,22 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 
 	BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex);
 
+	// 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++ )
 	{
-		LLTexLayer* layer = *iter;
+		LLTexLayerInterface* layer = *iter;
 		if (layer->getRenderPass() == LLTexLayer::RP_COLOR)
 		{
 			gGL.flush();
@@ -788,44 +700,13 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 		}
 	}
 	
-	renderAlphaMaskTextures(width, height, false);
+	renderAlphaMaskTextures(x, y, width, height, false);
 
 	stop_glerror();
 
 	return success;
 }
 
-BOOL LLTexLayerSet::renderBump( S32 x, S32 y, S32 width, S32 height )
-{
-	BOOL success = TRUE;
-
-	LLGLSUIDefault gls_ui;
-	LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
-
-	//static S32 bump_layer_count = 1;
-
-	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
-	{
-		LLTexLayer* layer = *iter;
-		if (layer->getRenderPass() == LLTexLayer::RP_BUMP)
-		{
-//			success &= layer->render(x, y, width, height);
-		}
-	}
-
-	// Set the alpha channel to one (clean up after previous blending)
-	LLGLDisable no_alpha(GL_ALPHA_TEST);
-	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-	gGL.color4f( 0.f, 0.f, 0.f, 1.f );
-	gGL.setColorMask(false, true);
-
-	gl_rect_2d_simple( width, height );
-	
-	gGL.setColorMask(true, true);
-	stop_glerror();
-
-	return success;
-}
 
 BOOL LLTexLayerSet::isBodyRegion(const std::string& region) const 
 { 
@@ -869,11 +750,9 @@ void LLTexLayerSet::createComposite()
 		// Composite other avatars at reduced resolution
 		if( !mAvatar->isSelf() )
 		{
-			// TODO: replace with sanity check to ensure not called for non-self avatars
-//			width /= 2;
-//			height /= 2;
+			llerrs << "composites should not be created for non-self avatars!" << llendl;
 		}
-		mComposite = new LLTexLayerSetBuffer( this, width, height, mHasBump );
+		mComposite = new LLTexLayerSetBuffer( this, width, height );
 	}
 }
 
@@ -905,44 +784,21 @@ LLTexLayerSetBuffer* LLTexLayerSet::getComposite()
 
 void LLTexLayerSet::gatherMorphMaskAlpha(U8 *data, S32 width, S32 height)
 {
-	S32 size = width * height;
-
 	memset(data, 255, width * height);
 
 	BOOL render_morph = mAvatar->morphMaskNeedsUpdate(mBakedTexIndex);
 
 	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
 	{
-		LLTexLayer* layer = *iter;
-		U8* alphaData = layer->getAlphaData();
-		if (!alphaData && layer->hasAlphaParams())
-		{
-			LLColor4 net_color;
-			layer->findNetColor( &net_color );
-			// TODO: eliminate need for layer morph mask valid flag
-			layer->invalidateMorphMasks();
-			mAvatar->invalidateMorphMasks(mBakedTexIndex);
-			layer->renderMorphMasks(mComposite->getOriginX(), mComposite->getOriginY(), width, height, net_color, render_morph);
-			alphaData = layer->getAlphaData();
-		}
-		if (alphaData)
-		{
-			for( S32 i = 0; i < size; i++ )
-			{
-				U8 curAlpha = data[i];
-				U16 resultAlpha = curAlpha;
-				resultAlpha *= (alphaData[i] + 1);
-				resultAlpha = resultAlpha >> 8;
-				data[i] = (U8)resultAlpha;
-			}
-		}
+		LLTexLayerInterface* layer = *iter;
+		layer->gatherAlphaMasks(data, mComposite->getOriginX(),mComposite->getOriginY(), width, height, render_morph);
 	}
 	
 	// Set alpha back to that of our alpha masks.
-	renderAlphaMaskTextures(width, height, true);
+	renderAlphaMaskTextures(mComposite->getOriginX(), mComposite->getOriginY(), width, height, true);
 }
 
-void LLTexLayerSet::renderAlphaMaskTextures(S32 width, S32 height, bool forceClear)
+void LLTexLayerSet::renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height, bool forceClear)
 {
 	const LLTexLayerSetInfo *info = getInfo();
 	
@@ -986,9 +842,9 @@ void LLTexLayerSet::renderAlphaMaskTextures(S32 width, S32 height, bool forceCle
 		gGL.getTexUnit(0)->setTextureBlendType( LLTexUnit::TB_REPLACE );
 		for (layer_list_t::iterator iter = mMaskLayerList.begin(); iter != mMaskLayerList.end(); iter++)
 		{
-			LLTexLayer* layer = *iter;
+			LLTexLayerInterface* layer = *iter;
 			gGL.flush();
-			layer->blendAlphaTexture(width, height);
+			layer->blendAlphaTexture(x,y,width, height);
 			gGL.flush();
 		}
 		
@@ -1006,23 +862,6 @@ void LLTexLayerSet::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_
 	mAvatar->applyMorphMask(tex_data, width, height, num_components, mBakedTexIndex);
 }
 
-//-----------------------------------------------------------------------------
-// finds a specific layer based on a passed in name
-//-----------------------------------------------------------------------------
-LLTexLayer*  LLTexLayerSet::findLayerByName(std::string name)
-{
-	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
-	{
-		LLTexLayer* layer = *iter;
-
-		if (layer->getName().compare(name) == 0)
-		{
-			return layer;
-		}
-	}
-	return NULL;
-}
-
 
 //-----------------------------------------------------------------------------
 // LLTexLayerInfo
@@ -1190,7 +1029,7 @@ BOOL LLTexLayerInfo::createVisualParams(LLVOAvatar *avatar)
 	{
 		LLTexLayerParamColorInfo * color_info = *color_info_iter;
 		LLTexLayerParamColor* param_color = new LLTexLayerParamColor(avatar);
-		if (!param_color->setInfo(color_info))
+		if (!param_color->setInfo(color_info, TRUE))
 		{
 			llwarns << "NULL TexLayer Color Param could not be added to visual param list. Deleting." << llendl;
 			delete param_color;
@@ -1204,7 +1043,7 @@ BOOL LLTexLayerInfo::createVisualParams(LLVOAvatar *avatar)
 	{
 		LLTexLayerParamAlphaInfo * alpha_info = *alpha_info_iter;
 		LLTexLayerParamAlpha* param_alpha = new LLTexLayerParamAlpha(avatar);
-		if (!param_alpha->setInfo(alpha_info))
+		if (!param_alpha->setInfo(alpha_info, TRUE))
 		{
 			llwarns << "NULL TexLayer Alpha Param could not be added to visual param list. Deleting." << llendl;
 			delete param_alpha;
@@ -1215,6 +1054,138 @@ BOOL LLTexLayerInfo::createVisualParams(LLVOAvatar *avatar)
 	return success;
 }
 
+LLTexLayerInterface::LLTexLayerInterface(LLTexLayerSet* const layer_set):
+	mTexLayerSet( layer_set ),
+	mMorphMasksValid( FALSE ),
+	mStaticImageInvalid( FALSE ),
+	mInfo(NULL),
+	mHasMorph(FALSE)
+{
+}
+
+LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWearable *wearable):
+	mTexLayerSet( layer.mTexLayerSet )
+{
+	// don't add visual params for cloned layers
+	setInfo(layer.getInfo(), wearable);
+
+	mHasMorph = layer.mHasMorph;
+}
+
+BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearable  ) // This sets mInfo and calls initialization functions
+{
+	llassert(mInfo == NULL);
+	mInfo = info;
+	//mID = info->mID; // No ID
+
+		mParamColorList.reserve(mInfo->mParamColorInfoList.size());
+	for (param_color_info_list_t::const_iterator iter = mInfo->mParamColorInfoList.begin(); 
+		 iter != mInfo->mParamColorInfoList.end(); 
+		 iter++)
+	{
+		LLTexLayerParamColor* param_color;
+			if (!wearable)
+			{
+				param_color = new LLTexLayerParamColor(this);
+				if (!param_color->setInfo(*iter, TRUE))
+				{
+					mInfo = NULL;
+					return FALSE;
+				}
+			}
+			else
+			{
+				param_color = (LLTexLayerParamColor*)wearable->getVisualParam((*iter)->getID());
+				if (!param_color)
+				{
+					mInfo = NULL;
+					return FALSE;
+				}
+			}
+			mParamColorList.push_back( param_color );
+		}
+
+		mParamAlphaList.reserve(mInfo->mParamAlphaInfoList.size());
+	for (param_alpha_info_list_t::const_iterator iter = mInfo->mParamAlphaInfoList.begin(); 
+		 iter != mInfo->mParamAlphaInfoList.end(); 
+		 iter++)
+		{
+			LLTexLayerParamAlpha* param_alpha;
+			if (!wearable)
+			{
+				param_alpha = new LLTexLayerParamAlpha( this );
+				if (!param_alpha->setInfo(*iter, TRUE))
+				{
+					mInfo = NULL;
+					return FALSE;
+				}
+			}
+			else
+			{
+				param_alpha = (LLTexLayerParamAlpha*) wearable->getVisualParam((*iter)->getID());
+				if (!param_alpha)
+				{
+					mInfo = NULL;
+					return FALSE;
+				}
+			}
+			mParamAlphaList.push_back( param_alpha );
+		}
+
+	return TRUE;
+}
+
+/*virtual*/ void LLTexLayerInterface::requestUpdate()
+{
+	mTexLayerSet->requestUpdate();
+}
+
+const std::string& LLTexLayerInterface::getName() const
+{
+	return mInfo->mName; 
+}
+
+LLTexLayerInterface::ERenderPass LLTexLayerInterface::getRenderPass() const
+{
+	return mInfo->mRenderPass; 
+}
+
+const std::string& LLTexLayerInterface::getGlobalColor() const
+{
+	return mInfo->mGlobalColor; 
+}
+
+BOOL LLTexLayerInterface::isVisibilityMask() const
+{
+	return mInfo->mIsVisibilityMask;
+}
+
+void LLTexLayerInterface::invalidateMorphMasks()
+{
+	mMorphMasksValid = FALSE;
+}
+
+LLViewerVisualParam* LLTexLayerInterface::getVisualParamPtr(S32 index)
+{
+	LLViewerVisualParam *result = NULL;
+	for (param_color_list_t::iterator color_iter = mParamColorList.begin(); color_iter != mParamColorList.end() && !result; ++color_iter)
+	{
+		if ((*color_iter)->getID() == index)
+		{
+			result = *color_iter;
+		}
+	}
+	for (param_alpha_list_t::iterator alpha_iter = mParamAlphaList.begin(); alpha_iter != mParamAlphaList.end() && !result; ++alpha_iter)
+	{
+		if ((*alpha_iter)->getID() == index)
+		{
+			result = *alpha_iter;
+		}
+	}
+
+	return result;
+}
+
 //-----------------------------------------------------------------------------
 // LLTexLayer
 // A single texture layer, consisting of:
@@ -1228,23 +1199,22 @@ BOOL LLTexLayerInfo::createVisualParams(LLVOAvatar *avatar)
 //			* a texture entry index (TE)
 //		* (optional) one or more alpha parameters (weighted alpha textures)
 //-----------------------------------------------------------------------------
-LLTexLayer::LLTexLayer(LLTexLayerSet* layer_set) :
-	mTexLayerSet( layer_set ),
-	mMorphMasksValid( FALSE ),
-	mStaticImageInvalid( FALSE ),
-	mInfo(NULL),
-	mHasMorph(FALSE)
+LLTexLayer::LLTexLayer(LLTexLayerSet* const layer_set) :
+	LLTexLayerInterface( layer_set ),
+	mLocalTextureObject(NULL)
 {
 }
 
-LLTexLayer::LLTexLayer(const LLTexLayer &layer) :
-	mTexLayerSet( layer.mTexLayerSet )
+LLTexLayer::LLTexLayer(const LLTexLayer &layer, LLWearable *wearable) :
+	LLTexLayerInterface( layer, wearable ),
+	mLocalTextureObject(NULL)
 {
-	setInfo(layer.getInfo());
-
-	
-	mHasMorph = layer.mHasMorph;
+}
 
+LLTexLayer::LLTexLayer(const LLTexLayerTemplate &layer_template, LLLocalTextureObject *lto, LLWearable *wearable) :
+	LLTexLayerInterface( layer_template, wearable ),
+	mLocalTextureObject(lto)
+{
 }
 
 LLTexLayer::~LLTexLayer()
@@ -1267,44 +1237,9 @@ LLTexLayer::~LLTexLayer()
 // setInfo
 //-----------------------------------------------------------------------------
 
-BOOL LLTexLayer::setInfo(const LLTexLayerInfo* info)
+BOOL LLTexLayer::setInfo(const LLTexLayerInfo* info, LLWearable* wearable  )
 {
-	llassert(mInfo == NULL);
-	mInfo = info;
-	//mID = info->mID; // No ID
-
-	if (info->mRenderPass == LLTexLayer::RP_BUMP)
-		mTexLayerSet->setBump(TRUE);
-
-		mParamColorList.reserve(mInfo->mParamColorInfoList.size());
-	for (param_color_info_list_t::const_iterator iter = mInfo->mParamColorInfoList.begin(); 
-		 iter != mInfo->mParamColorInfoList.end(); 
-		 iter++)
-	{
-			LLTexLayerParamColor* param_color = new LLTexLayerParamColor(this);
-			if (!param_color->setInfo(*iter))
-			{
-				mInfo = NULL;
-				return FALSE;
-			}
-			mParamColorList.push_back( param_color );
-		}
-
-		mParamAlphaList.reserve(mInfo->mParamAlphaInfoList.size());
-	for (param_alpha_info_list_t::const_iterator iter = mInfo->mParamAlphaInfoList.begin(); 
-		 iter != mInfo->mParamAlphaInfoList.end(); 
-		 iter++)
-		{
-			LLTexLayerParamAlpha* param_alpha = new LLTexLayerParamAlpha( this );
-			if (!param_alpha->setInfo(*iter))
-			{
-				mInfo = NULL;
-				return FALSE;
-			}
-			mParamAlphaList.push_back( param_alpha );
-		}
-	
-	return TRUE;
+	return LLTexLayerInterface::setInfo(info, wearable);
 }
 
 //static 
@@ -1312,12 +1247,12 @@ void LLTexLayer::calculateTexLayerColor(const param_color_list_t &param_list, LL
 {
 	for (param_color_list_t::const_iterator iter = param_list.begin();
 		 iter != param_list.end(); iter++)
-{
+	{
 		const LLTexLayerParamColor* param = *iter;
 		LLColor4 param_net = param->getNetColor();
 		const LLTexLayerParamColorInfo *info = (LLTexLayerParamColorInfo *)param->getInfo();
 		switch(info->getOperation())
-	{
+		{
 			case LLTexLayerParamColor::OP_ADD:
 				net_color += param_net;
 				break;
@@ -1330,13 +1265,14 @@ void LLTexLayer::calculateTexLayerColor(const param_color_list_t &param_list, LL
 			default:
 				llassert(0);
 				break;
-	}
+		}
 	}
 	net_color.clamp();
 }
 
-void LLTexLayer::deleteCaches()
+/*virtual*/ void LLTexLayer::deleteCaches()
 {
+	// Only need to delete caches for alpha params. Color params don't hold extra memory
 	for (param_alpha_list_t::iterator iter = mParamAlphaList.begin();
 		 iter != mParamAlphaList.end(); iter++ )
 	{
@@ -1373,7 +1309,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 	{
 		// If we have alpha masks, but we're skipping all of them, skip the whole layer.
 		// However, we can't do this optimization if we have morph masks that need updating.
-		if (!mHasMorph)
+/*		if (!mHasMorph)
 		{
 			BOOL skip_layer = TRUE;
 
@@ -1394,7 +1330,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 			{
 				return success;
 			}
-		}
+		}//*/
 
 		renderMorphMasks(x, y, width, height, net_color, render_morph);
 		alpha_mask_specified = TRUE;
@@ -1414,7 +1350,19 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 	{
 		{
 			LLViewerTexture* tex = NULL;
-			if( mTexLayerSet->getAvatar()->getLocalTextureGL((ETextureIndex)getInfo()->mLocalTexture, &tex ) )
+			if (mLocalTextureObject && mLocalTextureObject->getImage())
+			{
+				tex = mLocalTextureObject->getImage();
+				if (mLocalTextureObject->getID() == IMG_DEFAULT_AVATAR)
+				{
+					tex = NULL;
+				}
+			}
+			else
+			{
+				llinfos << "lto not defined or image not defined: " << getInfo()->getLocalTexture() << " lto: " << mLocalTextureObject << llendl;
+			}
+//			if( mTexLayerSet->getAvatar()->getLocalTextureGL((ETextureIndex)getInfo()->mLocalTexture, &image_gl ) )
 			{
 				if( tex )
 				{
@@ -1431,10 +1379,10 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 					gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 				}
 			}
-			else
-			{
-				success = FALSE;
-			}
+//			else
+//			{
+//				success = FALSE;
+//			}
 		}
 	}
 
@@ -1484,12 +1432,13 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
 U8*	LLTexLayer::getAlphaData()
 {
 	LLCRC alpha_mask_crc;
-	const LLUUID& uuid = mTexLayerSet->getAvatar()->getLocalTextureID((ETextureIndex)getInfo()->mLocalTexture);
+	const LLUUID& uuid = getUUID();
 	alpha_mask_crc.update((U8*)(&uuid.mData), UUID_BYTES);
 
 	for (param_alpha_list_t::const_iterator iter = mParamAlphaList.begin(); iter != mParamAlphaList.end(); iter++)
 	{
 		const LLTexLayerParamAlpha* param = *iter;
+		// MULTI-WEARABLE: verify visual parameters used here
 		F32 param_weight = param->getWeight();
 		alpha_mask_crc.update((U8*)&param_weight, sizeof(F32));
 	}
@@ -1544,7 +1493,7 @@ BOOL LLTexLayer::findNetColor(LLColor4* net_color) const
 	return FALSE; // No need to draw a separate colored polygon
 }
 
-BOOL LLTexLayer::blendAlphaTexture(S32 width, S32 height)
+BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
 {
 	BOOL success = TRUE;
 
@@ -1569,17 +1518,14 @@ BOOL LLTexLayer::blendAlphaTexture(S32 width, S32 height)
 	{
 		if (getInfo()->mLocalTexture >=0 && getInfo()->mLocalTexture < TEX_NUM_INDICES)
 		{
-			LLViewerTexture* tex = NULL;
-			if (mTexLayerSet->getAvatar()->getLocalTextureGL((ETextureIndex)getInfo()->mLocalTexture, &tex))
+			LLViewerTexture* tex = mLocalTextureObject->getImage();
+			if (tex)
 			{
-				if (tex)
-				{
-					LLGLSNoAlphaTest gls_no_alpha_test;
-					gGL.getTexUnit(0)->bind(tex);
-					gl_rect_2d_simple_tex( width, height );
-					gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-					success = TRUE;
-				}
+				LLGLSNoAlphaTest gls_no_alpha_test;
+				gGL.getTexUnit(0)->bind(tex);
+				gl_rect_2d_simple_tex( width, height );
+				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+				success = TRUE;
 			}
 		}
 	}
@@ -1587,6 +1533,10 @@ BOOL LLTexLayer::blendAlphaTexture(S32 width, S32 height)
 	return success;
 }
 
+/*virtual*/ void LLTexLayer::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
+{
+	addAlphaMask(data, originX, originY, width, height, render_morph);
+}
 
 BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph)
 {
@@ -1627,23 +1577,20 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 	// Accumulate the alpha component of the texture
 	if( getInfo()->mLocalTexture != -1 )
 	{
-			LLViewerTexture* tex = NULL;
-			if( mTexLayerSet->getAvatar()->getLocalTextureGL((ETextureIndex)getInfo()->mLocalTexture, &tex ) )
+			LLViewerTexture* tex = mLocalTextureObject->getImage();
+			if( tex && (tex->getComponents() == 4) )
 			{
-				if( tex && (tex->getComponents() == 4) )
-				{
-					LLGLSNoAlphaTest gls_no_alpha_test;
+				LLGLSNoAlphaTest gls_no_alpha_test;
 
-					LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
-					
-					gGL.getTexUnit(0)->bind(tex);
-					gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
+				LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
+				
+				gGL.getTexUnit(0)->bind(tex);
+				gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
 
-					gl_rect_2d_simple_tex( width, height );
+				gl_rect_2d_simple_tex( width, height );
 
-					gGL.getTexUnit(0)->setTextureAddressMode(old_mode);
-					gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				}
+				gGL.getTexUnit(0)->setTextureAddressMode(old_mode);
+				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 			}
 			else
 			{
@@ -1686,10 +1633,10 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 
 	gGL.setColorMask(true, true);
 	
-	if (render_morph && mHasMorph)
+	if (render_morph && mHasMorph && success)
 	{
 		LLCRC alpha_mask_crc;
-		const LLUUID& uuid = mTexLayerSet->getAvatar()->getLocalTextureID((ETextureIndex)getInfo()->mLocalTexture);
+		const LLUUID& uuid = getUUID();
 		alpha_mask_crc.update((U8*)(&uuid.mData), UUID_BYTES);
 		
 		for (param_alpha_list_t::const_iterator iter = mParamAlphaList.begin(); iter != mParamAlphaList.end(); iter++)
@@ -1726,106 +1673,269 @@ BOOL LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
 	return success;
 }
 
-// Returns TRUE on success.
-BOOL LLTexLayer::renderImageRaw( U8* in_data, S32 in_width, S32 in_height, S32 in_components, S32 width, S32 height, BOOL is_mask )
+void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
 {
-	if (!in_data)
+	S32 size = width * height;
+	U8* alphaData = getAlphaData();
+	if (!alphaData && hasAlphaParams())
 	{
-		return FALSE;
+		LLColor4 net_color;
+		findNetColor( &net_color );
+		// TODO: eliminate need for layer morph mask valid flag
+		invalidateMorphMasks();
+		renderMorphMasks(originX, originY, width, height, net_color, render_morph);
+		alphaData = getAlphaData();
 	}
-	GLenum format_options[4] = { GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA };
-	GLenum format = format_options[in_components-1];
-	if( is_mask )
+	if (alphaData)
 	{
-		llassert( 1 == in_components );
-		format = GL_ALPHA;
+		for( S32 i = 0; i < size; i++ )
+		{
+			U8 curAlpha = data[i];
+			U16 resultAlpha = curAlpha;
+			resultAlpha *= (alphaData[i] + 1);
+			resultAlpha = resultAlpha >> 8;
+			data[i] = (U8)resultAlpha;
+		}
 	}
+}
 
-	if( (in_width != SCRATCH_TEX_WIDTH) || (in_height != SCRATCH_TEX_HEIGHT) )
+// private helper function
+LLUUID LLTexLayer::getUUID()
+{
+	LLUUID uuid;
+	if( getInfo()->mLocalTexture != -1 )
 	{
-		LLGLSNoAlphaTest gls_no_alpha_test;
+			LLViewerTexture* tex = mLocalTextureObject->getImage();
+			if (tex)
+			{
+				uuid = mLocalTextureObject->getID();
+			}
+	}
+	if( !getInfo()->mStaticImageFileName.empty() )
+	{
+			LLViewerTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
+			if( tex )
+			{
+				uuid = tex->getID();
+			}
+	}
+	return uuid;
+}
 
-		GLenum internal_format_options[4] = { GL_LUMINANCE8, GL_LUMINANCE8_ALPHA8, GL_RGB8, GL_RGBA8 };
-		GLenum internal_format = internal_format_options[in_components-1];
-		if( is_mask )
-		{
-			llassert( 1 == in_components );
-			internal_format = GL_ALPHA8;
-		}
-		
-		U32 name = 0;
-		LLImageGL::generateTextures(1, &name );
-		stop_glerror();
 
-		gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, name);
-		stop_glerror();
+//-----------------------------------------------------------------------------
+// LLTexLayerTemplate
+// A single texture layer, consisting of:
+//		* color, consisting of either
+//			* one or more color parameters (weighted colors)
+//			* a reference to a global color
+//			* a fixed color with non-zero alpha
+//			* opaque white (the default)
+//		* (optional) a texture defined by either
+//			* a GUID
+//			* a texture entry index (TE)
+//		* (optional) one or more alpha parameters (weighted alpha textures)
+//-----------------------------------------------------------------------------
+LLTexLayerTemplate::LLTexLayerTemplate(LLTexLayerSet* layer_set) :
+	LLTexLayerInterface(layer_set)
+{
+}
 
-		LLImageGL::setManualImage(
-			GL_TEXTURE_2D, 0, internal_format, 
-			in_width, in_height,
-			format, GL_UNSIGNED_BYTE, in_data );
-		stop_glerror();
+LLTexLayerTemplate::LLTexLayerTemplate(const LLTexLayerTemplate &layer) :
+	LLTexLayerInterface(layer)
+{
+}
 
-		gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
-		
-		gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
+LLTexLayerTemplate::~LLTexLayerTemplate()
+{
+}
 
-		gl_rect_2d_simple_tex( width, height );
+//-----------------------------------------------------------------------------
+// setInfo
+//-----------------------------------------------------------------------------
 
-		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+/*virtual*/ BOOL LLTexLayerTemplate::setInfo(const LLTexLayerInfo* info, LLWearable* wearable  )
+{
+	return LLTexLayerInterface::setInfo(info, wearable);
+}
 
-		LLImageGL::deleteTextures(1, &name );
-		stop_glerror();
+U32 LLTexLayerTemplate::updateWearableCache()
+{
+	mWearableCache.clear();
+
+	S32 te = mInfo->mLocalTexture;
+	if (te == -1)
+	{
+		//this isn't a cloneable layer 
+		return 0;
 	}
-	else
+	EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType((ETextureIndex)te);
+	U32 num_wearables = gAgentWearables.getWearableCount(wearable_type);
+	U32 added = 0;
+	for (U32 i = 0; i < num_wearables; i++)
 	{
-		LLGLSNoAlphaTest gls_no_alpha_test;
-
-		if( !mTexLayerSet->getAvatar()->bindScratchTexture(format) )
+		LLWearable*  wearable = gAgentWearables.getWearable(wearable_type, i);
+		if (!wearable)
 		{
-			return FALSE;
+			continue;
 		}
+		mWearableCache.push_back(wearable);
+		added++;
+	}
+	return added;
+}
+LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)
+{
+	if (mWearableCache.size() <= i || i < 0)
+	{
+		return NULL;
+	}
+	LLWearable *wearable = mWearableCache[i];
+	LLLocalTextureObject *lto = NULL;
+	LLTexLayer *layer = NULL;
+	if (wearable)
+	{
+		 lto = wearable->getLocalTextureObject(mInfo->mLocalTexture);
+	}
+	if (lto)
+	{
+		layer = lto->getTexLayer(getName());
+	}
+	return layer;
+}
 
-		glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, in_width, in_height, format, GL_UNSIGNED_BYTE, in_data );
-		stop_glerror();
+/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph)
+{
+	BOOL success = TRUE;
+	updateWearableCache();
+	for (wearable_cache_t::const_iterator iter = mWearableCache.begin(); iter!= mWearableCache.end(); iter++)
+	{
+		LLWearable* wearable = NULL;
+		LLLocalTextureObject *lto = NULL;
+		LLTexLayer *layer = NULL;
+		wearable = *iter;
+		if (wearable)
+		{
+			lto = wearable->getLocalTextureObject(mInfo->mLocalTexture);
+		}
+		if (lto)
+		{
+			layer = lto->getTexLayer(getName());
+		}
+		if (layer)
+		{
+			wearable->writeToAvatar(FALSE, FALSE);
+			layer->setLTO(lto);
+			success &= layer->render(x,y,width,height,render_morph);
+		}
+	}
 
-		gl_rect_2d_simple_tex( width, height );
+	return success;
+}
 
-		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+/*virtual*/ BOOL LLTexLayerTemplate::blendAlphaTexture( S32 x, S32 y, S32 width, S32 height) // Multiplies a single alpha texture against the frame buffer
+{
+	BOOL success = TRUE;
+	U32 num_wearables = updateWearableCache();
+	for (U32 i = 0; i < num_wearables; i++)
+	{
+		LLTexLayer *layer = getLayer(i);
+		if (layer)
+		{
+			success &= layer->blendAlphaTexture(x,y,width,height);
+		}
 	}
-
-	return TRUE;
+	return success;
 }
 
-void LLTexLayer::requestUpdate()
+/*virtual*/ void LLTexLayerTemplate::gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph)
 {
-	mTexLayerSet->requestUpdate();
+	U32 num_wearables = updateWearableCache();
+	for (U32 i = 0; i < num_wearables; i++)
+	{
+		LLTexLayer *layer = getLayer(i);
+		if (layer)
+		{
+			layer->addAlphaMask(data, originX, originY, width, height, render_morph);
+		}
+	}
 }
 
-const std::string& LLTexLayer::getName() const 
+/*virtual*/ void LLTexLayerTemplate::setHasMorph(BOOL newval)
 { 
-	return mInfo->mName; 
+	mHasMorph = newval;
+	U32 num_wearables = updateWearableCache();
+	for (U32 i = 0; i < num_wearables; i++)
+	{
+		LLTexLayer *layer = getLayer(i);
+		if (layer)
+		{	
+			layer->setHasMorph(newval);
+		}
+	}
 }
 
-LLTexLayer::ERenderPass	LLTexLayer::getRenderPass() const 
+/*virtual*/ void LLTexLayerTemplate::deleteCaches()
 {
-	return mInfo->mRenderPass; 
+	U32 num_wearables = updateWearableCache();
+	for (U32 i = 0; i < num_wearables; i++)
+	{
+		LLTexLayer *layer = getLayer(i);
+		if (layer)
+		{
+			layer->deleteCaches();
+		}
+	}
 }
-const std::string& LLTexLayer::getGlobalColor() const 
+
+
+
+//-----------------------------------------------------------------------------
+// finds a specific layer based on a passed in name
+//-----------------------------------------------------------------------------
+LLTexLayerInterface*  LLTexLayerSet::findLayerByName(std::string name)
 {
-	return mInfo->mGlobalColor; 
+	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
+	{
+		LLTexLayerInterface* layer = *iter;
+
+		if (layer->getName().compare(name) == 0)
+		{
+			return layer;
+		}
+	}
+	for( layer_list_t::iterator iter = mMaskLayerList.begin(); iter != mMaskLayerList.end(); iter++ )
+	{
+		LLTexLayerInterface* layer = *iter;
+
+		if (layer->getName().compare(name) == 0)
+		{
+			return layer;
+		}
+	}
+	return NULL;
 }
 
-void LLTexLayer::invalidateMorphMasks()
+void LLTexLayerSet::cloneTemplates(LLLocalTextureObject *lto, LLVOAvatarDefines::ETextureIndex tex_index, LLWearable *wearable)
 {
-	mMorphMasksValid = FALSE;
+	// initialize all texlayers with this texture type for this LTO
+	for( LLTexLayerSet::layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
+	{
+		LLTexLayerTemplate* layer = (LLTexLayerTemplate*)*iter;
+		if (layer->getInfo()->getLocalTexture() == (S32) tex_index)
+		{
+			lto->addTexLayer(layer, wearable);
+		}
 	}
-
-BOOL LLTexLayer::isVisibilityMask() const 
+	for( LLTexLayerSet::layer_list_t::iterator iter = mMaskLayerList.begin(); iter != mMaskLayerList.end(); iter++ )
 	{
-	return mInfo->mIsVisibilityMask;
+		LLTexLayerTemplate* layer = (LLTexLayerTemplate*)*iter;
+		if (layer->getInfo()->getLocalTexture() == (S32) tex_index)
+		{
+			lto->addTexLayer(layer, wearable);
+		}
+	}
 }
-
 //-----------------------------------------------------------------------------
 // LLTexLayerStaticImageList
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h
index 6922eae0e14f83ec200b193c33dc3a31e1a9b11d..2269c3c9a554b2b72fd6f662ba02781a19386226 100644
--- a/indra/newview/lltexlayer.h
+++ b/indra/newview/lltexlayer.h
@@ -52,19 +52,15 @@ class LLTexLayerParamColor;
 class LLTexLayerParamColorInfo;
 class LLTexLayerParamAlpha;
 class LLTexLayerParamAlphaInfo;
-
+class LLWearable;
+class LLViewerVisualParam;
 
 typedef std::vector<LLTexLayerParamColor *> param_color_list_t;
 typedef std::vector<LLTexLayerParamAlpha *> param_alpha_list_t;
 typedef std::vector<LLTexLayerParamColorInfo *> param_color_info_list_t;
 typedef std::vector<LLTexLayerParamAlphaInfo *> param_alpha_info_list_t;
 
-//-----------------------------------------------------------------------------
-// LLTexLayer
-// A single texture layer
-// Only exists for llvoavatarself
-
-class LLTexLayer
+class LLTexLayerInterface 
 {
 public:
 	enum ERenderPass 
@@ -74,36 +70,36 @@ class LLTexLayer
 		RP_SHINE
 	};
 
-	LLTexLayer(LLTexLayerSet* const layer_set);
-	LLTexLayer(const LLTexLayer &layer);
-	~LLTexLayer();
+	LLTexLayerInterface(LLTexLayerSet* const layer_set);
+	LLTexLayerInterface(const LLTexLayerInterface &layer, LLWearable *wearable);
+	virtual ~LLTexLayerInterface() {}
 
 	const LLTexLayerInfo* 	getInfo() const { return mInfo; }
-	BOOL					setInfo(const LLTexLayerInfo *info); // This sets mInfo and calls initialization functions
-	BOOL					render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph);
+	virtual BOOL			setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
+	virtual BOOL			render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph) = 0;
 	void					requestUpdate();
 	LLTexLayerSet*			const getTexLayerSet() const { return mTexLayerSet; }
 
-	void					deleteCaches();
-	U8*						getAlphaData();
+	virtual void			deleteCaches() = 0;
 	void					invalidateMorphMasks();
-	void					setHasMorph(BOOL newval) { mHasMorph = newval; }
+	virtual void			setHasMorph(BOOL newval) { mHasMorph = newval; }
 	BOOL					isMorphValid()			 { return mMorphMasksValid; }
 
 	const std::string&		getName() const;
 	ERenderPass				getRenderPass() const;
-	const std::string&			getGlobalColor() const;
+	const std::string&		getGlobalColor() const;
 
-	BOOL					findNetColor(LLColor4* color) const;
-	BOOL					renderImageRaw(U8* in_data, S32 in_width, S32 in_height, S32 in_components, S32 width, S32 height, BOOL is_mask);
-	BOOL					blendAlphaTexture(S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
-	BOOL					renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph);
+	virtual BOOL			blendAlphaTexture( S32 x, S32 y, S32 width, S32 height) = 0;
+	virtual void			gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph) = 0;
 	BOOL					hasAlphaParams() const { return !mParamAlphaList.empty(); }
 	BOOL					isVisibilityMask() const;
 
-	static void calculateTexLayerColor(const param_color_list_t &param_list, LLColor4 &net_color);
+	LLTexLayerSet*			getLayerSet() {return mTexLayerSet;}
 
-private:
+	LLViewerVisualParam*	getVisualParamPtr(S32 index);
+
+
+protected:
 	LLTexLayerSet*			const mTexLayerSet;
 
 	// Layers can have either mParamColorList, mGlobalColor, or mFixedColor.  They are looked for in that order.
@@ -111,27 +107,96 @@ class LLTexLayer
 	// 						mGlobalColor name stored in mInfo
 	// 						mFixedColor value stored in mInfo
 	param_alpha_list_t		mParamAlphaList;
-	
+
 	BOOL					mMorphMasksValid;
-	typedef std::map<U32, U8*> alpha_cache_t;
-	alpha_cache_t			mAlphaCache;
 	BOOL					mStaticImageInvalid;
 
 	BOOL					mHasMorph;
 
 	const LLTexLayerInfo			*mInfo;
+
+};
+
+//-----------------------------------------------------------------------------
+// LLTexLayerTemplate
+// Template class 
+// Only exists for llvoavatarself
+
+class LLTexLayerTemplate : public LLTexLayerInterface
+{
+public:
+	LLTexLayerTemplate(LLTexLayerSet* const layer_set);
+	LLTexLayerTemplate(const LLTexLayerTemplate &layer);
+	/*virtual*/ ~LLTexLayerTemplate();
+
+	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ BOOL		setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
+	/*virtual*/ BOOL		blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
+	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
+	/*virtual*/ void		setHasMorph(BOOL newval);
+	/*virtual*/ void		deleteCaches();
+private:
+	U32 	updateWearableCache();
+	LLTexLayer* getLayer(U32 i);
+	typedef std::vector<LLWearable*> wearable_cache_t;
+	wearable_cache_t mWearableCache;
+
+};
+
+//-----------------------------------------------------------------------------
+// LLTexLayer
+// A single texture layer
+// Only exists for llvoavatarself
+
+class LLTexLayer : public LLTexLayerInterface
+{
+public:
+	LLTexLayer(LLTexLayerSet* const layer_set);
+	LLTexLayer(const LLTexLayer &layer, LLWearable *wearable);
+	LLTexLayer(const LLTexLayerTemplate &layer_template, LLLocalTextureObject *lto, LLWearable *wearable);
+	/*virtual*/ ~LLTexLayer();
+
+	/*virtual*/ BOOL		setInfo(const LLTexLayerInfo *info, LLWearable* wearable ); // This sets mInfo and calls initialization functions
+	/*virtual*/ BOOL		render(S32 x, S32 y, S32 width, S32 height, BOOL render_morph);
+
+	/*virtual*/ void		deleteCaches();
+	U8*						getAlphaData();
+
+	BOOL					findNetColor(LLColor4* color) const;
+	/*virtual*/ BOOL		blendAlphaTexture( S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
+	/*virtual*/ void		gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
+	BOOL					renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, BOOL render_morph);
+	void					addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, BOOL render_morph);
+
+	void					setLTO(LLLocalTextureObject *lto) { mLocalTextureObject = lto; }
+	LLLocalTextureObject* 	getLTO() { return mLocalTextureObject; }
+
+	static void calculateTexLayerColor(const param_color_list_t &param_list, LLColor4 &net_color);
+
+private:
+	LLUUID					getUUID();
+
+	typedef std::map<U32, U8*> alpha_cache_t;
+	alpha_cache_t			mAlphaCache;
+	LLLocalTextureObject 	*mLocalTextureObject;
 };
 
 // Make private
 class LLTexLayerInfo
 {
 	friend class LLTexLayer;
+	friend class LLTexLayerTemplate;
+	friend class LLTexLayerInterface;
 public:
 	LLTexLayerInfo();
 	~LLTexLayerInfo();
 
 	BOOL parseXml(LLXmlTreeNode* node);
 	BOOL createVisualParams(LLVOAvatar *avatar);
+	BOOL isUserSettable() { return mLocalTexture != -1;	}
+	S32  getLocalTexture() const { return mLocalTexture; }
+	BOOL getOnlyAlpha() const { return mUseLocalTextureAlphaOnly; }
+	std::string getName() const { return mName;	}
 
 private:
 	std::string				mName;
@@ -174,7 +239,7 @@ class LLTexLayerSet
 	BOOL					setInfo(const LLTexLayerSetInfo *info); // This sets mInfo and calls initialization functions
 
 	BOOL					render(S32 x, S32 y, S32 width, S32 height);
-	BOOL					renderBump(S32 x, S32 y, S32 width,S32 height);
+	void					renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height, bool forceClear = false);
 
 	BOOL					isBodyRegion(const std::string& region) const;
 	LLTexLayerSetBuffer*	getComposite();
@@ -191,28 +256,26 @@ class LLTexLayerSet
 	void					deleteCaches();
 	void					gatherMorphMaskAlpha(U8 *data, S32 width, S32 height);
 	void					applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components);
-	void					renderAlphaMaskTextures(S32 width, S32 height, bool forceClear = false);
-	LLTexLayer*				findLayerByName(std::string name);
+	LLTexLayerInterface*	findLayerByName(std::string name);
+	void					cloneTemplates(LLLocalTextureObject *lto, LLVOAvatarDefines::ETextureIndex tex_index, LLWearable* wearable);
 	
 	LLVOAvatarSelf*		    getAvatar()	const { return mAvatar; }
 	const std::string		getBodyRegion() const;
 	BOOL					hasComposite() const { return (mComposite.notNull()); }
-	void					setBump(BOOL b) { mHasBump = b; }
-	BOOL					hasBump() const { return mHasBump; }
 	LLVOAvatarDefines::EBakedTextureIndex getBakedTexIndex() { return mBakedTexIndex; }
 	void					setBakedTexIndex( LLVOAvatarDefines::EBakedTextureIndex index) { mBakedTexIndex = index; }
 
 public:
 	static BOOL		sHasCaches;
 
+	typedef std::vector<LLTexLayerInterface *> layer_list_t;
+
 private:
-	typedef std::vector<LLTexLayer *> layer_list_t;
 	layer_list_t			mLayerList;
 	layer_list_t			mMaskLayerList;
 	LLPointer<LLTexLayerSetBuffer>	mComposite;
 	LLVOAvatarSelf*	const	mAvatar; // Backlink only; don't make this an LLPointer.
 	BOOL					mUpdatesEnabled;
-	BOOL					mHasBump;
 
 	LLVOAvatarDefines::EBakedTextureIndex mBakedTexIndex;
 
@@ -245,14 +308,13 @@ class LLTexLayerSetInfo
 class LLTexLayerSetBuffer : public LLViewerDynamicTexture
 {
 public:
-	LLTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height, BOOL has_bump);
+	LLTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height);
 	virtual ~LLTexLayerSetBuffer();
 
 	virtual void			preRender(BOOL clear_depth);
 	virtual void			postRender(BOOL success);
 	virtual BOOL			render();
 	BOOL					updateImmediate();
-	void					bindBumpTexture(U32 stage);
 	bool					isInitialized(void) const;
 	BOOL					needsRender();
 	void					requestUpdate();
@@ -260,8 +322,7 @@ class LLTexLayerSetBuffer : public LLViewerDynamicTexture
 	void					cancelUpload();
 	BOOL					uploadPending() { return mUploadPending; }
 	BOOL					render( S32 x, S32 y, S32 width, S32 height );
-	void					readBackAndUpload(const U8* baked_bump_data);
-	void                    		createBumpTexture();
+	void					readBackAndUpload();
 
 	static void				onTextureUploadComplete(const LLUUID& uuid,
 													void* userdata,
@@ -276,17 +337,14 @@ class LLTexLayerSetBuffer : public LLViewerDynamicTexture
 	void					popProjection() const;
 
 private:
-	const BOOL              mHasBump;
 	LLTexLayerSet* const    mTexLayerSet;
 
 	BOOL					mNeedsUpdate;
 	BOOL					mNeedsUpload;
 	BOOL					mUploadPending;
 	LLUUID					mUploadID; // Identifys the current upload process (null if none).  Used to avoid overlaps (eg, when the user rapidly makes two changes outside of Face Edit)
-	LLPointer<LLViewerTexture>	mBumpTex; // zero if none
 
 	static S32				sGLByteCount;
-	static S32				sGLBumpByteCount;
 };
 
 //
diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp
index 7a1ee95a65e26b55e3b45342e36a1c453471ac3e..9cd73c465606a14284c800e3fb07429f695f02eb 100644
--- a/indra/newview/lltexlayerparams.cpp
+++ b/indra/newview/lltexlayerparams.cpp
@@ -33,13 +33,14 @@
 #include "llagent.h"
 #include "lltexlayer.h"
 #include "llvoavatarself.h"
+#include "llwearable.h"
 #include "lltexlayerparams.h"
 #include "llui.h"
 
 //-----------------------------------------------------------------------------
 // LLTexLayerParam
 //-----------------------------------------------------------------------------
-LLTexLayerParam::LLTexLayerParam(LLTexLayer *layer) :
+LLTexLayerParam::LLTexLayerParam(LLTexLayerInterface *layer) :
 	mTexLayer(layer),
 	mAvatar(NULL)
 {
@@ -47,6 +48,10 @@ LLTexLayerParam::LLTexLayerParam(LLTexLayer *layer) :
 	{
 		mAvatar = mTexLayer->getTexLayerSet()->getAvatar();
 	}
+	else
+	{
+		llerrs << "LLTexLayerParam constructor passed with NULL reference for layer!" << llendl;
+	}
 }
 
 LLTexLayerParam::LLTexLayerParam(LLVOAvatar *avatar) :
@@ -56,15 +61,19 @@ LLTexLayerParam::LLTexLayerParam(LLVOAvatar *avatar) :
 }
 
 
-BOOL LLTexLayerParam::setInfo(LLViewerVisualParamInfo *info)
+BOOL LLTexLayerParam::setInfo(LLViewerVisualParamInfo *info, BOOL add_to_avatar  )
 {	
 	LLViewerVisualParam::setInfo(info);
-	mAvatar->addVisualParam( this);
+
+	if (add_to_avatar)
+	{
+		mAvatar->addVisualParam( this);
+	}
+
 	return TRUE;
 }
 
 
-
 //-----------------------------------------------------------------------------
 // LLTexLayerParamAlpha
 //-----------------------------------------------------------------------------
@@ -102,7 +111,7 @@ void LLTexLayerParamAlpha::getCacheByteCount(S32* gl_bytes)
 	}
 }
 
-LLTexLayerParamAlpha::LLTexLayerParamAlpha(LLTexLayer* layer) :
+LLTexLayerParamAlpha::LLTexLayerParamAlpha(LLTexLayerInterface* layer) :
 	LLTexLayerParam(layer),
 	mCachedProcessedTexture(NULL),
 	mNeedsCreateTexture(FALSE),
@@ -131,6 +140,13 @@ LLTexLayerParamAlpha::~LLTexLayerParamAlpha()
 	sInstances.remove(this);
 }
 
+/*virtual*/ LLViewerVisualParam * 	LLTexLayerParamAlpha::cloneParam(LLWearable* wearable) const
+{
+	LLTexLayerParamAlpha *new_param = new LLTexLayerParamAlpha(mTexLayer);
+	*new_param = *this;
+	return new_param;
+}
+
 void LLTexLayerParamAlpha::deleteCaches()
 {
 	mStaticImageTGA = NULL; // deletes image
@@ -313,7 +329,7 @@ BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
 
 		// Don't keep the cache for other people's avatars
 		// (It's not really a "cache" in that case, but the logic is the same)
-		if (mAvatar->isSelf())
+		if (!mAvatar->isSelf())
 		{
 			mCachedProcessedTexture = NULL;
 		}
@@ -377,7 +393,7 @@ BOOL LLTexLayerParamAlphaInfo::parseXml(LLXmlTreeNode* node)
 
 
 
-LLTexLayerParamColor::LLTexLayerParamColor(LLTexLayer* layer) :
+LLTexLayerParamColor::LLTexLayerParamColor(LLTexLayerInterface* layer) :
 	LLTexLayerParam(layer),
 	mAvgDistortionVec(1.f, 1.f, 1.f)
 {
@@ -393,6 +409,13 @@ LLTexLayerParamColor::~LLTexLayerParamColor()
 {
 }
 
+/*virtual*/ LLViewerVisualParam * 	LLTexLayerParamColor::cloneParam(LLWearable* wearable) const
+{
+	LLTexLayerParamColor *new_param = new LLTexLayerParamColor(mTexLayer);
+	*new_param = *this;
+	return new_param;
+}
+
 LLColor4 LLTexLayerParamColor::getNetColor() const
 {
 	const LLTexLayerParamColorInfo *info = (LLTexLayerParamColorInfo *)getInfo();
diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h
index 49feb01b5e2820a22050218d4f4e632e19ab1ba4..589bd41054185bd8ebd893680b8982d0fa74746b 100644
--- a/indra/newview/lltexlayerparams.h
+++ b/indra/newview/lltexlayerparams.h
@@ -36,15 +36,18 @@
 
 class LLTexLayer;
 class LLVOAvatar;
+class LLWearable;
 
 class LLTexLayerParam : public LLViewerVisualParam
 {
 public: 
-	LLTexLayerParam(LLTexLayer *layer);
+	LLTexLayerParam(LLTexLayerInterface *layer);
 	LLTexLayerParam(LLVOAvatar *avatar);
-	/* Virtual */ BOOL setInfo(LLViewerVisualParamInfo *info);
+	/* Virtual */ BOOL setInfo(LLViewerVisualParamInfo *info, BOOL add_to_avatar  );
+	/*virtual*/ LLViewerVisualParam * 	cloneParam(LLWearable* wearable) const = 0;
+
 protected:
-	LLTexLayer*				mTexLayer;
+	LLTexLayerInterface*	mTexLayer;
 	LLVOAvatar*             mAvatar;
 };
 
@@ -54,10 +57,12 @@ class LLTexLayerParam : public LLViewerVisualParam
 class LLTexLayerParamAlpha : public LLTexLayerParam
 {
 public:
-	LLTexLayerParamAlpha( LLTexLayer* layer );
+	LLTexLayerParamAlpha( LLTexLayerInterface* layer );
 	LLTexLayerParamAlpha( LLVOAvatar* avatar );
 	/*virtual*/ ~LLTexLayerParamAlpha();
 
+	/*virtual*/ LLViewerVisualParam * 	cloneParam(LLWearable* wearable = NULL) const;
+
 	// LLVisualParam Virtual functions
 	///*virtual*/ BOOL		parseData(LLXmlTreeNode* node);
 	/*virtual*/ void		apply( ESex avatar_sex ) {}
@@ -129,10 +134,12 @@ class LLTexLayerParamColor : public LLTexLayerParam
 		OP_COUNT = 3 // Number of operations
 	};
 
-	LLTexLayerParamColor( LLTexLayer* layer );
+	LLTexLayerParamColor( LLTexLayerInterface* layer );
 	LLTexLayerParamColor( LLVOAvatar* avatar );
 	/* virtual */ ~LLTexLayerParamColor();
 
+	/*virtual*/ LLViewerVisualParam * 	cloneParam(LLWearable* wearable = NULL) const;
+
 	// LLVisualParam Virtual functions
 	///*virtual*/ BOOL			parseData(LLXmlTreeNode* node);
 	/*virtual*/ void			apply( ESex avatar_sex ) {}
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index dc53358311a429b44ab7e1cd600131900ea739a0..c34517d1048f28f37f28fba1c926b93e823cfce5 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -54,6 +54,7 @@
 #include "llviewerwindow.h"
 #include "lltrans.h"
 #include "llappearancemgr.h"
+#include "llfloatercustomize.h"
 
 ///----------------------------------------------------------------------------
 /// Local function declarations, constants, enums, and typedefs
@@ -729,6 +730,14 @@ void WearOnAvatarCallback::fire(const LLUUID& inv_item)
 void ModifiedCOFCallback::fire(const LLUUID& inv_item)
 {
 	LLAppearanceManager::instance().updateAppearanceFromCOF();
+	if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() )
+	{
+		// If we're in appearance editing mode, the current tab may need to be refreshed
+		if (gFloaterCustomize)
+		{
+			gFloaterCustomize->switchToDefaultSubpart();
+		}
+	}
 }
 
 RezAttachmentCallback::RezAttachmentCallback(LLViewerJointAttachment *attachmentp)
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index c2def610dc83dbf437b0fc3069530476f59729e5..2e45a61f1b33d3110283c928715648462209da3d 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6910,11 +6910,12 @@ void handle_debug_avatar_textures(void*)
 
 void handle_grab_texture(void* data)
 {
-	ETextureIndex index = (ETextureIndex)((intptr_t)data);
+	ETextureIndex tex_index = (ETextureIndex)((intptr_t)data);
 	const LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
 	if ( avatar )
 	{
-		const LLUUID& asset_id = avatar->grabLocalTexture(index);
+		// MULTI-WEARABLE: change to support an index
+		const LLUUID& asset_id = avatar->grabLocalTexture(tex_index, 0);
 		LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl;
 		LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE;
 		LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE;
@@ -6922,7 +6923,7 @@ void handle_grab_texture(void* data)
 		if(folder_id.notNull())
 		{
 			std::string name = "Unknown";
-			const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(index);
+			const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(tex_index);
 			if (texture_dict->mIsBakedTexture)
 			{
 				EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
@@ -6989,7 +6990,8 @@ BOOL enable_grab_texture(void* data)
 	const LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
 	if ( avatar )
 	{
-		return avatar->canGrabLocalTexture(index);
+		// MULTI-WEARABLE:
+		return avatar->canGrabLocalTexture(index,0);
 	}
 	return FALSE;
 }
diff --git a/indra/newview/llviewervisualparam.cpp b/indra/newview/llviewervisualparam.cpp
index 7d717ed6dc5a76aa0d26c5264d35fb45ed1beb94..b088ef073055aec203f9e9e8ac8b8f7a92ca5eb5 100644
--- a/indra/newview/llviewervisualparam.cpp
+++ b/indra/newview/llviewervisualparam.cpp
@@ -85,6 +85,12 @@ BOOL LLViewerVisualParamInfo::parseXml(LLXmlTreeNode *node)
 		mEditGroup = "";
 	}
 
+	static LLStdStringHandle cross_wearable_string = LLXmlTree::addAttributeString("cross_wearable");
+	if (!node->getFastAttributeBOOL(cross_wearable_string, mCrossWearable))
+	{
+		mCrossWearable = FALSE;
+	}
+
 	// Optional camera offsets from the current joint center.  Used for generating "hints" (thumbnails).
 	static LLStdStringHandle camera_distance_string = LLXmlTree::addAttributeString("camera_distance");
 	node->getFastAttributeF32( camera_distance_string, mCamDist );
@@ -112,6 +118,15 @@ BOOL LLViewerVisualParamInfo::parseXml(LLXmlTreeNode *node)
 	return TRUE;
 }
 
+/*virtual*/ void LLViewerVisualParamInfo::toStream(std::ostream &out)
+{
+	LLVisualParamInfo::toStream(out);
+
+	out << mWearableType << "\t";
+	out << mEditGroup << "\t";
+	out << mEditGroupDisplayOrder << "\t";
+}
+
 //-----------------------------------------------------------------------------
 // LLViewerVisualParam()
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llviewervisualparam.h b/indra/newview/llviewervisualparam.h
index 77a95db5649ffe41696b035f2266cc74c6c6596d..82a694e277700c84371761d59d477c29e352a32f 100644
--- a/indra/newview/llviewervisualparam.h
+++ b/indra/newview/llviewervisualparam.h
@@ -37,6 +37,8 @@
 #include "llstring.h"
 #include "llvisualparam.h"
 
+class LLWearable;
+
 //-----------------------------------------------------------------------------
 // LLViewerVisualParamInfo
 //-----------------------------------------------------------------------------
@@ -49,8 +51,11 @@ class LLViewerVisualParamInfo : public LLVisualParamInfo
 	
 	/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
 
+	/*virtual*/ void toStream(std::ostream &out);
+
 protected:
 	S32			mWearableType;
+	BOOL		mCrossWearable;
 	std::string	mEditGroup;
 	F32			mCamDist;
 	F32			mCamAngle;		// degrees
@@ -77,6 +82,8 @@ class LLViewerVisualParam : public LLVisualParam
 	LLViewerVisualParamInfo 	*getInfo() const { return (LLViewerVisualParamInfo*)mInfo; };
 	//   This sets mInfo and calls initialization functions
 	BOOL						setInfo(LLViewerVisualParamInfo *info);
+
+	virtual LLViewerVisualParam * 	cloneParam(LLWearable* wearable) const = 0;
 	
 	// LLVisualParam Virtual functions
 	///*virtual*/ BOOL			parseData(LLXmlTreeNode* node);
@@ -102,6 +109,8 @@ class LLViewerVisualParam : public LLVisualParam
 	BOOL				getShowSimple() const		{ return getInfo()->mShowSimple; }
 	F32					getSimpleMin() const		{ return getInfo()->mSimpleMin; }
 	F32					getSimpleMax() const		{ return getInfo()->mSimpleMax; }
+
+	BOOL				getCrossWearable() const 	{ return getInfo()->mCrossWearable; }
 };
 
 #endif // LL_LLViewerVisualParam_H
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 9437d8797e8bdcf51fb6cee380504d1bb003b1d9..2c578ebd2bff7fffab401b3fc3e90ee42eb0c65d 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3793,7 +3793,7 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)
 		}
 		// Can't test for baked hair being defined, since that won't always be the case (not all viewers send baked hair)
 		// TODO: 1.25 will be able to switch this logic back to calling isTextureVisible();
-		if (getImage(TEX_HAIR_BAKED)->getID() != IMG_INVISIBLE || LLDrawPoolAlpha::sShowDebugAlpha)
+		if (getImage(TEX_HAIR_BAKED, 0)->getID() != IMG_INVISIBLE || LLDrawPoolAlpha::sShowDebugAlpha)
 		{
 			num_indices += mMeshLOD[MESH_ID_HAIR]->render(mAdjustedPixelArea, first_pass, mIsDummy);
 			first_pass = FALSE;
@@ -3954,7 +3954,7 @@ void LLVOAvatar::updateTextures(LLAgent &agent)
 		{
 			if (layer_baked[i] && !mBakedTextureDatas[i].mIsLoaded)
 			{
-				gGL.getTexUnit(0)->bind(getImage( mBakedTextureDatas[i].mTextureIndex ));
+				gGL.getTexUnit(0)->bind(getImage( mBakedTextureDatas[i].mTextureIndex, 0 ));
 			}
 		}
 	}
@@ -3962,17 +3962,32 @@ void LLVOAvatar::updateTextures(LLAgent &agent)
 	mMaxPixelArea = 0.f;
 	mMinPixelArea = 99999999.f;
 	mHasGrey = FALSE; // debug
-	for (U32 index = 0; index < getNumTEs(); index++)
+	for (U32 texture = 0; texture < getNumTEs(); texture++)
 	{
-		LLViewerFetchedTexture *imagep = LLViewerTextureManager::staticCastToFetchedTexture(getImage(index), TRUE);
-		if (imagep)
+		EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType((ETextureIndex)texture);
+		U32 num_wearables = gAgentWearables.getWearableCount(wearable_type);
+		const LLTextureEntry *te = getTE(texture);
+		const F32 texel_area_ratio = fabs(te->mScaleS * te->mScaleT);
+		LLViewerFetchedTexture *imagep = NULL;
+		for (U32 wearable_index = 0; wearable_index < num_wearables; wearable_index++)
+		{
+			imagep = LLViewerTextureManager::staticCastToFetchedTexture(getImage(texture, wearable_index), TRUE);
+			if (imagep)
+			{
+				const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture((ETextureIndex)texture);
+				const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
+				if (texture_dict->mIsLocalTexture)
+				{
+					addLocalTextureStats((ETextureIndex)texture, imagep, texel_area_ratio, render_avatar, layer_baked[baked_index]);
+				}
+			}
+		}
+		if (isIndexBakedTexture((ETextureIndex) texture))
 		{
-			const LLTextureEntry *te = getTE(index);
-			const F32 texel_area_ratio = fabs(te->mScaleS * te->mScaleT);
 			const S32 boost_level = getAvatarBakedBoostLevel();
-			
+			imagep = LLViewerTextureManager::staticCastToFetchedTexture(getImage(texture,0), TRUE);
 			// Spam if this is a baked texture, not set to default image, without valid host info
-			if (isIndexBakedTexture((ETextureIndex)index)
+			if (isIndexBakedTexture((ETextureIndex)texture)
 				&& imagep->getID() != IMG_DEFAULT_AVATAR
 				&& !imagep->getTargetHost().isOk())
 			{
@@ -3982,25 +3997,7 @@ void LLVOAvatar::updateTextures(LLAgent &agent)
 										 << " on host " << getRegion()->getHost() << llendl;
 			}
 
-			/* switch(index)
-				case TEX_HEAD_BODYPAINT:
-					addLocalTextureStats( LOCTEX_HEAD_BODYPAINT, imagep, texel_area_ratio, render_avatar, head_baked ); */
-			const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture((ETextureIndex)index);
-			if (texture_dict->mIsUsedByBakedTexture)
-			{
-				const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
-				if (texture_dict->mIsLocalTexture)
-				{
-					addLocalTextureStats((ETextureIndex)index, imagep, texel_area_ratio, render_avatar, layer_baked[baked_index]);
-				}
-				else if (texture_dict->mIsBakedTexture)
-				{
-					if (layer_baked[baked_index])
-					{
-						addBakedTextureStats( imagep, mPixelArea, texel_area_ratio, boost_level );
-					}
-				}
-			}
+			addBakedTextureStats( imagep, mPixelArea, texel_area_ratio, boost_level );
 		}
 	}
 
@@ -4033,13 +4030,13 @@ void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel
 }
 
 //virtual	
-void LLVOAvatar::setImage(const U8 te, LLViewerTexture *imagep)
+void LLVOAvatar::setImage(const U8 te, LLViewerTexture *imagep, const U32 index)
 {
 	setTEImage(te, imagep);
 }
 
 //virtual 
-LLViewerTexture* LLVOAvatar::getImage(const U8 te) const
+LLViewerTexture* LLVOAvatar::getImage(const U8 te, const U32 index) const
 {
 	return getTEImage(te);
 }
@@ -4746,6 +4743,19 @@ BOOL LLVOAvatar::loadAvatar()
 			return FALSE;
 		}
 	}
+
+	// Uncomment to enable avatar_lad.xml debugging. 
+/*	std::ofstream file;
+	file.open("avatar_lad.log");
+	for( LLViewerVisualParam* param = (LLViewerVisualParam*) getFirstVisualParam(); 
+	param;
+	param = (LLViewerVisualParam*) getNextVisualParam() )
+	{
+		param->getInfo()->toStream(file);
+		file << std::endl;
+	}
+
+	file.close();*/
 	
 	return TRUE;
 }
@@ -5822,10 +5832,10 @@ void LLVOAvatar::updateMeshTextures()
 	// if user has never specified a texture, assign the default
 	for (U32 i=0; i < getNumTEs(); i++)
 	{
-		const LLViewerTexture* te_image = getImage(i);
+		const LLViewerTexture* te_image = getImage(i, 0);
 		if(!te_image || te_image->getID().isNull() || (te_image->getID() == IMG_DEFAULT))
 		{
-			setImage(i, LLViewerTextureManager::getFetchedTexture(i == TEX_HAIR ? IMG_DEFAULT : IMG_DEFAULT_AVATAR)); // IMG_DEFAULT_AVATAR = a special texture that's never rendered.
+			setImage(i, LLViewerTextureManager::getFetchedTexture(i == TEX_HAIR ? IMG_DEFAULT : IMG_DEFAULT_AVATAR), 0); // IMG_DEFAULT_AVATAR = a special texture that's never rendered.
 		}
 	}
 
@@ -5888,7 +5898,7 @@ void LLVOAvatar::updateMeshTextures()
 		}
 		else if (!self_customizing && is_layer_baked[i])
 		{
-			LLViewerFetchedTexture* baked_img = LLViewerTextureManager::staticCastToFetchedTexture(getImage( mBakedTextureDatas[i].mTextureIndex ), TRUE) ;
+			LLViewerFetchedTexture* baked_img = LLViewerTextureManager::staticCastToFetchedTexture(getImage( mBakedTextureDatas[i].mTextureIndex, 0 ), TRUE) ;
 			if( baked_img->getID() == mBakedTextureDatas[i].mLastTextureIndex )
 			{
 				// Even though the file may not be finished loading, we'll consider it loaded and use it (rather than doing compositing).
@@ -5923,7 +5933,7 @@ void LLVOAvatar::updateMeshTextures()
 	if (!is_layer_baked[BAKED_HAIR] || self_customizing)
 	{
 		const LLColor4 color = mTexHairColor ? mTexHairColor->getColor() : LLColor4(1,1,1,1);
-		LLViewerTexture* hair_img = getImage( TEX_HAIR );
+		LLViewerTexture* hair_img = getImage( TEX_HAIR, 0 );
 		for (U32 i = 0; i < mBakedTextureDatas[BAKED_HAIR].mMeshes.size(); i++)
 		{
 			mBakedTextureDatas[BAKED_HAIR].mMeshes[i]->setColor( color.mV[VX], color.mV[VY], color.mV[VZ], color.mV[VW] );
@@ -5947,7 +5957,10 @@ void LLVOAvatar::updateMeshTextures()
 		{
 			const ETextureIndex texture_index = *local_tex_iter;
 			const BOOL is_baked_ready = (is_layer_baked[baked_index] && mBakedTextureDatas[baked_index].mIsLoaded) || other_culled;
-			setLocalTexture(texture_index, getImage(texture_index), is_baked_ready );
+			if (isSelf())
+			{
+				setBakedReady(texture_index, is_baked_ready);
+			}
 		}
 	}
 	removeMissingBakedTextures();
@@ -5963,6 +5976,13 @@ void LLVOAvatar::setLocalTexture( ETextureIndex type, LLViewerTexture* in_tex, B
 	llassert(0);
 }
 
+//virtual 
+void	LLVOAvatar::setBakedReady(LLVOAvatarDefines::ETextureIndex type, BOOL baked_version_exists, U32 index)
+{
+	// invalid for anyone but self
+	llassert(0);
+}
+
 void LLVOAvatar::addChat(const LLChat& chat)
 {
 	std::deque<LLChat>::iterator chat_iter;
@@ -6068,9 +6088,9 @@ void LLVOAvatar::releaseComponentTextures()
 {
 	// ! BACKWARDS COMPATIBILITY !
 	// Detect if the baked hair texture actually wasn't sent, and if so set to default
-	if (isTextureDefined(TEX_HAIR_BAKED) && getImage(TEX_HAIR_BAKED)->getID() == getImage(TEX_SKIRT_BAKED)->getID())
+	if (isTextureDefined(TEX_HAIR_BAKED) && getImage(TEX_HAIR_BAKED,0)->getID() == getImage(TEX_SKIRT_BAKED,0)->getID())
 	{
-		if (getImage(TEX_HAIR_BAKED)->getID() != IMG_INVISIBLE)
+		if (getImage(TEX_HAIR_BAKED,0)->getID() != IMG_INVISIBLE)
 		{
 			// Regression case of messaging system. Expected 21 textures, received 20. last texture is not valid so set to default
 			setTETexture(TEX_HAIR_BAKED, IMG_DEFAULT_AVATAR);
@@ -6095,63 +6115,64 @@ void LLVOAvatar::releaseComponentTextures()
 	}
 }
 
-BOOL LLVOAvatar::teToColorParams( ETextureIndex te, const char* param_name[3] )
+//static
+BOOL LLVOAvatar::teToColorParams( ETextureIndex te, U32 *param_name )
 {
 	switch( te )
 	{
 		case TEX_UPPER_SHIRT:
-			param_name[0] = "shirt_red";
-			param_name[1] = "shirt_green";
-			param_name[2] = "shirt_blue";
+			param_name[0] = 803; //"shirt_red";
+			param_name[1] = 804; //"shirt_green";
+			param_name[2] = 805; //"shirt_blue";
 			break;
 
 		case TEX_LOWER_PANTS:
-			param_name[0] = "pants_red";
-			param_name[1] = "pants_green";
-			param_name[2] = "pants_blue";
+			param_name[0] = 806; //"pants_red";
+			param_name[1] = 807; //"pants_green";
+			param_name[2] = 808; //"pants_blue";
 			break;
 
 		case TEX_LOWER_SHOES:
-			param_name[0] = "shoes_red";
-			param_name[1] = "shoes_green";
-			param_name[2] = "shoes_blue";
+			param_name[0] = 812; //"shoes_red";
+			param_name[1] = 813; //"shoes_green";
+			param_name[2] = 817; //"shoes_blue";
 			break;
 
 		case TEX_LOWER_SOCKS:
-			param_name[0] = "socks_red";
-			param_name[1] = "socks_green";
-			param_name[2] = "socks_blue";
+			param_name[0] = 818; //"socks_red";
+			param_name[1] = 819; //"socks_green";
+			param_name[2] = 820; //"socks_blue";
 			break;
 
 		case TEX_UPPER_JACKET:
 		case TEX_LOWER_JACKET:
-			param_name[0] = "jacket_red";
-			param_name[1] = "jacket_green";
-			param_name[2] = "jacket_blue";
+			param_name[0] = 834; //"jacket_red";
+			param_name[1] = 835; //"jacket_green";
+			param_name[2] = 836; //"jacket_blue";
 			break;
 
 		case TEX_UPPER_GLOVES:
-			param_name[0] = "gloves_red";
-			param_name[1] = "gloves_green";
-			param_name[2] = "gloves_blue";
+			param_name[0] = 827; //"gloves_red";
+			param_name[1] = 829; //"gloves_green";
+			param_name[2] = 830; //"gloves_blue";
 			break;
 
 		case TEX_UPPER_UNDERSHIRT:
-			param_name[0] = "undershirt_red";
-			param_name[1] = "undershirt_green";
-			param_name[2] = "undershirt_blue";
+			param_name[0] = 821; //"undershirt_red";
+			param_name[1] = 822; //"undershirt_green";
+			param_name[2] = 823; //"undershirt_blue";
 			break;
 	
 		case TEX_LOWER_UNDERPANTS:
-			param_name[0] = "underpants_red";
-			param_name[1] = "underpants_green";
-			param_name[2] = "underpants_blue";
+			param_name[0] = 824; //"underpants_red";
+			param_name[1] = 825; //"underpants_green";
+			param_name[2] = 826; //"underpants_blue";
 			break;
 
 		case TEX_SKIRT:
-			param_name[0] = "skirt_red";
-			param_name[1] = "skirt_green";
-			param_name[2] = "skirt_blue";
+			param_name[0] = 921; //"skirt_red";
+			param_name[1] = 922; //"skirt_green";
+			param_name[2] = 923; //"skirt_blue";
 			break;
 
 		default:
@@ -6164,7 +6185,7 @@ BOOL LLVOAvatar::teToColorParams( ETextureIndex te, const char* param_name[3] )
 
 void LLVOAvatar::setClothesColor( ETextureIndex te, const LLColor4& new_color, BOOL set_by_user )
 {
-	const char* param_name[3];
+	U32 param_name[3];
 	if( teToColorParams( te, param_name ) )
 	{
 		setVisualParamWeight( param_name[0], new_color.mV[VX], set_by_user );
@@ -6176,7 +6197,7 @@ void LLVOAvatar::setClothesColor( ETextureIndex te, const LLColor4& new_color, B
 LLColor4 LLVOAvatar::getClothesColor( ETextureIndex te )
 {
 	LLColor4 color;
-	const char* param_name[3];
+	U32 param_name[3];
 	if( teToColorParams( te, param_name ) )
 	{
 		color.mV[VX] = getVisualParamWeight( param_name[0] );
@@ -6203,7 +6224,8 @@ void LLVOAvatar::dumpAvatarTEs( const std::string& context )
 		 iter++)
 	{
 		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second;
-		const LLViewerTexture* te_image = getImage(iter->first);
+		// TODO: handle multiple textures for self
+		const LLViewerTexture* te_image = getImage(iter->first,0);
 		if( !te_image )
 		{
 			llinfos << "       " << texture_dict->mName << ": null ptr" << llendl;
@@ -6250,23 +6272,9 @@ BOOL LLVOAvatar::isWearingWearableType(EWearableType type) const
 		 tex_iter != LLVOAvatarDictionary::getInstance()->getTextures().end();
 		 tex_iter++)
 	{
-		const LLVOAvatarDefines::ETextureIndex index = tex_iter->first;
 		const LLVOAvatarDictionary::TextureEntry *texture_dict = tex_iter->second;
 		if (texture_dict->mWearableType == type)
 		{
-			// If you're checking your own clothing, check the component texture
-			if (isSelf())
-			{
-				if (isTextureDefined(index))
-				{
-					return TRUE;
-				}
-				else
-				{
-					return FALSE;
-				}
-			}
-
 			// If you're checking another avatar's clothing, you don't have component textures.
 			// Thus, you must check to see if the corresponding baked texture is defined.
 			// NOTE: this is a poor substitute if you actually want to know about individual pieces of clothing
@@ -6369,7 +6377,7 @@ void LLVOAvatar::onFirstTEMessageReceived()
 			// (That is, don't do a transition from unbaked to baked.)
 			if (layer_baked)
 			{
-				LLViewerFetchedTexture* image = LLViewerTextureManager::staticCastToFetchedTexture(getImage( mBakedTextureDatas[i].mTextureIndex ), TRUE) ;
+				LLViewerFetchedTexture* image = LLViewerTextureManager::staticCastToFetchedTexture(getImage( mBakedTextureDatas[i].mTextureIndex, 0 ), TRUE) ;
 				mBakedTextureDatas[i].mLastTextureIndex = image->getID();
 				// If we have more than one texture for the other baked layers, we'll want to call this for them too.
 				if ( (i == BAKED_HEAD) || (i == BAKED_UPPER) || (i == BAKED_LOWER) )
@@ -6624,8 +6632,8 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture
 				if (texture_dict->mIsUsedByBakedTexture)
 				{
 					const ETextureIndex texture_index = iter->first;
-					const LLViewerTexture *baked_img = self->getImage(texture_index);
-					if (id == baked_img->getID())
+					const LLViewerTexture *baked_img = self->getImage(texture_index, 0);
+					if (baked_img && id == baked_img->getID())
 					{
 						const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
 						self->applyMorphMask(aux_src->getData(), aux_src->getWidth(), aux_src->getHeight(), 1, baked_index);
@@ -6634,7 +6642,6 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture
 						{
 							LLImageGL::deleteTextures(1, &(self->mBakedTextureDatas[baked_index].mMaskTexName));
 						}
-						
 						self->mBakedTextureDatas[baked_index].mMaskTexName = gl_name;
 						found_texture_id = true;
 						break;
@@ -6712,7 +6719,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
 		 mHeadMesh1.setTexture( head_baked ); */
 	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
 	{
-		LLViewerTexture* image_baked = getImage( mBakedTextureDatas[i].mTextureIndex );
+		LLViewerTexture* image_baked = getImage( mBakedTextureDatas[i].mTextureIndex, 0 );
 		if (id == image_baked->getID())
 		{
 			mBakedTextureDatas[i].mIsLoaded = true;
@@ -6724,14 +6731,14 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
 			}
 			if (mBakedTextureDatas[i].mTexLayerSet)
 			{
-				mBakedTextureDatas[i].mTexLayerSet->destroyComposite();
+				//mBakedTextureDatas[i].mTexLayerSet->destroyComposite();
 			}
 			const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)i);
 			for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin();
 				 local_tex_iter != baked_dict->mLocalTextures.end();
 				 local_tex_iter++)
 			{
-				setLocalTexture(*local_tex_iter, getImage(*local_tex_iter), TRUE);
+				this->setBakedReady(*local_tex_iter, TRUE);
 			}
 
 			// ! BACKWARDS COMPATIBILITY !
@@ -6787,7 +6794,8 @@ void LLVOAvatar::dumpArchetypeXML( void* )
 		{
 			if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex)te) == type)
 			{
-				LLViewerTexture* te_image = avatar->getImage((ETextureIndex)te);
+				// MULTIPLE_WEARABLES: extend to multiple wearables?
+				LLViewerTexture* te_image = avatar->getImage((ETextureIndex)te, 0);
 				if( te_image )
 				{
 					std::string uuid_str;
@@ -7763,7 +7771,7 @@ BOOL LLVOAvatar::isTextureDefined(LLVOAvatarDefines::ETextureIndex te, U32 index
 		return FALSE;
 	}
 
-	return (getImage(te)->getID() != IMG_DEFAULT_AVATAR && 
-			getImage(te)->getID() != IMG_DEFAULT);
+	return (getImage(te, index)->getID() != IMG_DEFAULT_AVATAR && 
+			getImage(te, index)->getID() != IMG_DEFAULT);
 }
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index ef5358198da1ab6947b8780f19bfd431d5248eff..1529beeac982e70f5bad8ecf9c7dea07defe96d9 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -268,12 +268,14 @@ class LLVOAvatar :
 public:
 	void				updateHeadOffset();
 	F32					getPelvisToFoot() const { return mPelvisToFoot; }
+
 	LLVector3			mHeadOffset; // current head position
 	LLViewerJoint		mRoot;
 protected:
 	static BOOL			parseSkeletonFile(const std::string& filename);
 	void				buildCharacter();
 	BOOL				loadAvatar();
+
 	BOOL				setupBone(const LLVOAvatarBoneInfo* info, LLViewerJoint* parent, S32 &current_volume_num, S32 &current_joint_num);
 	BOOL				buildSkeleton(const LLVOAvatarSkeletonInfo *info);
 private:
@@ -495,13 +497,15 @@ class LLVOAvatar :
 protected:
 	virtual void	setLocalTexture(LLVOAvatarDefines::ETextureIndex type, LLViewerTexture* tex, BOOL baked_version_exits, U32 index = 0);
 	virtual void	addLocalTextureStats(LLVOAvatarDefines::ETextureIndex type, LLViewerFetchedTexture* imagep, F32 texel_area_ratio, BOOL rendered, BOOL covered_by_baked, U32 index = 0);
+	// MULTI-WEARABLE: make self-only?
+	virtual void	setBakedReady(LLVOAvatarDefines::ETextureIndex type, BOOL baked_version_exists, U32 index = 0);
 
 	//--------------------------------------------------------------------
 	// Texture accessors
 	//--------------------------------------------------------------------
 private:
-	virtual	void				setImage(const U8 te, LLViewerTexture *imagep); 
-	virtual LLViewerTexture*	getImage(const U8 te) const;
+	virtual	void				setImage(const U8 te, LLViewerTexture *imagep, const U32 index); 
+	virtual LLViewerTexture*	getImage(const U8 te, const U32 index) const;
 
 	virtual const LLTextureEntry* getTexEntry(const U8 te_num) const;
 	virtual void setTexEntry(const U8 index, const LLTextureEntry &te);
@@ -605,7 +609,7 @@ class LLVOAvatar :
 public:
 	void			setClothesColor(LLVOAvatarDefines::ETextureIndex te, const LLColor4& new_color, BOOL set_by_user);
 	LLColor4		getClothesColor(LLVOAvatarDefines::ETextureIndex te);
-	BOOL			teToColorParams(LLVOAvatarDefines::ETextureIndex te, const char* param_name[3]);
+	static BOOL			teToColorParams(LLVOAvatarDefines::ETextureIndex te, U32 *param_name);
 
 	//--------------------------------------------------------------------
 	// Global colors
@@ -637,7 +641,7 @@ class LLVOAvatar :
  **/
 
 public:
-	BOOL			isWearingWearableType(EWearableType type ) const;
+	virtual BOOL			isWearingWearableType(EWearableType type ) const;
 	
 	//--------------------------------------------------------------------
 	// Attachments
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 76a4bfbf0c1484cbc30436d3c7797152b4d47935..457c6fe93edff8219efb77e567ed8bc7c6b15055 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -589,7 +589,7 @@ BOOL LLVOAvatarSelf::loadLayersets()
 			morph_iter++)
 		{
 			LLMaskedMorph *morph = *morph_iter;
-			LLTexLayer * layer = layer_set->findLayerByName(morph->mLayer);
+			LLTexLayerInterface* layer = layer_set->findLayerByName(morph->mLayer);
 			if (layer)
 			{
 				layer->setHasMorph(TRUE);
@@ -631,6 +631,71 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)
 	return LLVOAvatar::getJoint(name);
 }
 
+/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL set_by_user )
+{
+	if (!which_param)
+	{
+		return FALSE;
+	}
+	LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(which_param->getID());
+	return setParamWeight(param,weight,set_by_user);
+}
+
+/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user )
+{
+	if (!param_name)
+	{
+		return FALSE;
+	}
+	LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(param_name);
+	return setParamWeight(param,weight,set_by_user);
+}
+
+/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user )
+{
+	LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(index);
+	return setParamWeight(param,weight,set_by_user);
+}
+
+BOOL LLVOAvatarSelf::setParamWeight(LLViewerVisualParam *param, F32 weight, BOOL set_by_user )
+{
+	if (!param)
+	{
+		return FALSE;
+	}
+
+	if (param->getCrossWearable())
+	{
+		EWearableType type = (EWearableType)param->getWearableType();
+		U32 size = gAgentWearables.getWearableCount(type);
+		for (U32 count = 0; count < size; ++count)
+		{
+			LLWearable *wearable = gAgentWearables.getWearable(type,count);
+			if (wearable)
+			{
+				wearable->setVisualParamWeight(param->getID(), weight, set_by_user);
+			}
+		}
+	}
+
+	return LLCharacter::setVisualParamWeight(param,weight,set_by_user);
+}
+
+/*virtual*/ 
+void LLVOAvatarSelf::updateVisualParams()
+{
+	for (U32 type = 0; type < WT_COUNT; type++)
+	{
+		LLWearable *wearable = gAgentWearables.getTopWearable((EWearableType)type);
+		if (wearable)
+		{
+			wearable->writeToAvatar(FALSE, FALSE);
+		}
+	}
+
+	LLVOAvatar::updateVisualParams();
+}
+
 // virtual
 void LLVOAvatarSelf::requestStopMotion(LLMotion* motion)
 {
@@ -861,6 +926,11 @@ void LLVOAvatarSelf::updateAttachmentVisibility(U32 camera_mode)
 	}
 }
 
+/*virtual*/ BOOL LLVOAvatarSelf::isWearingWearableType(EWearableType type ) const
+{
+	return gAgentWearables.getWearableCount(type) > 0;
+}
+
 //-----------------------------------------------------------------------------
 // updatedWearable( EWearableType type )
 // forces an update to any baked textures relevant to type.
@@ -1105,6 +1175,25 @@ BOOL LLVOAvatarSelf::getLocalTextureGL(ETextureIndex type, LLViewerTexture** tex
 	return TRUE;
 }
 
+LLViewerFetchedTexture* LLVOAvatarSelf::getLocalTextureGL(LLVOAvatarDefines::ETextureIndex type, U32 index) const
+{
+	if (!isIndexLocalTexture(type))
+	{
+		return NULL;
+	}
+
+	const LLLocalTextureObject *local_tex_obj = getLocalTextureObject(type, index);
+	if (!local_tex_obj)
+	{
+		return NULL;
+	}
+	if (local_tex_obj->getID() == IMG_DEFAULT_AVATAR)
+	{
+		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR);
+	}
+	return local_tex_obj->getImage();
+}
+
 const LLUUID& LLVOAvatarSelf::getLocalTextureID(ETextureIndex type, U32 index) const
 {
 	if (!isIndexLocalTexture(type)) return IMG_DEFAULT_AVATAR;
@@ -1115,7 +1204,8 @@ const LLUUID& LLVOAvatarSelf::getLocalTextureID(ETextureIndex type, U32 index) c
 		return local_tex_obj->getImage()->getID();
 	}
 	return IMG_DEFAULT_AVATAR;
-}
+} 
+
 
 //-----------------------------------------------------------------------------
 // isLocalTextureDataAvailable()
@@ -1140,7 +1230,12 @@ BOOL LLVOAvatarSelf::isLocalTextureDataAvailable(const LLTexLayerSet* layerset)
 				 local_tex_iter++)
 			{
 				const ETextureIndex tex_index = *local_tex_iter;
-				ret &= (getLocalDiscardLevel(tex_index) >= 0);
+				const EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index);
+				const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);
+				for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)
+				{
+					ret &= (getLocalDiscardLevel(tex_index, wearable_index) >= 0);
+				}
 			}
 			return ret;
 		}
@@ -1166,9 +1261,15 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) cons
 				 local_tex_iter != baked_dict->mLocalTextures.end();
 				 local_tex_iter++)
 			{
-				if (getLocalDiscardLevel(*local_tex_iter) != 0)
+				const ETextureIndex tex_index = *local_tex_iter;
+				const EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index);
+				const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);
+				for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)
 				{
-					return FALSE;
+					if (getLocalDiscardLevel(*local_tex_iter, wearable_index) != 0)
+					{
+						return FALSE;
+					}
 				}
 			}
 			return TRUE;
@@ -1181,17 +1282,33 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) cons
 BOOL LLVOAvatarSelf::isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index) const
 {
 	LLUUID id;
+	BOOL isDefined = TRUE;
 	if (isIndexLocalTexture(type))
 	{
-		id = getLocalTextureID(type, index);
+		const EWearableType wearable_type = LLVOAvatarDictionary::getTEWearableType(type);
+		const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);
+		if (index >= wearable_count)
+		{
+			// invalid index passed in. check all textures of a given type
+			for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)
+			{
+				id = getLocalTextureID(type, wearable_index);
+				isDefined &= (id != IMG_DEFAULT_AVATAR && id != IMG_DEFAULT);
+			}
+		}
+		else
+		{
+			id = getLocalTextureID(type, index);
+			isDefined &= (id != IMG_DEFAULT_AVATAR && id != IMG_DEFAULT);
+		}
 	}
 	else
 	{
 		id = getTEImage(type)->getID();
+		isDefined &= (id != IMG_DEFAULT_AVATAR && id != IMG_DEFAULT);
 	}
-
-	return (id != IMG_DEFAULT_AVATAR && 
-			id != IMG_DEFAULT);
+	
+	return isDefined;
 }
 
 //-----------------------------------------------------------------------------
@@ -1202,7 +1319,8 @@ void LLVOAvatarSelf::requestLayerSetUploads()
 {
 	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
 	{
-		BOOL layer_baked = isTextureDefined(mBakedTextureDatas[i].mTextureIndex);
+		ETextureIndex tex_index = mBakedTextureDatas[i].mTextureIndex;
+		BOOL layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index));
 		if (!layer_baked && mBakedTextureDatas[i].mTexLayerSet)
 		{
 			mBakedTextureDatas[i].mTexLayerSet->requestUpload();
@@ -1277,7 +1395,8 @@ void LLVOAvatarSelf::setupComposites()
 {
 	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
 	{
-		BOOL layer_baked = isTextureDefined(mBakedTextureDatas[i].mTextureIndex);
+		ETextureIndex tex_index = mBakedTextureDatas[i].mTextureIndex;
+		BOOL layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index));
 		if (mBakedTextureDatas[i].mTexLayerSet)
 		{
 			mBakedTextureDatas[i].mTexLayerSet->setUpdatesEnabled(!layer_baked);
@@ -1298,15 +1417,15 @@ void LLVOAvatarSelf::updateComposites()
 }
 
 // virtual
-S32 LLVOAvatarSelf::getLocalDiscardLevel(ETextureIndex type, U32 index) const
+S32 LLVOAvatarSelf::getLocalDiscardLevel(ETextureIndex type, U32 wearable_index) const
 {
 	if (!isIndexLocalTexture(type)) return FALSE;
 
-	const LLLocalTextureObject *local_tex_obj = getLocalTextureObject(type, index);
+	const LLLocalTextureObject *local_tex_obj = getLocalTextureObject(type, wearable_index);
 	if (local_tex_obj)
 	{
 		if (type >= 0
-			&& getLocalTextureID(type,index) != IMG_DEFAULT_AVATAR
+			&& local_tex_obj->getID() != IMG_DEFAULT_AVATAR
 			&& !local_tex_obj->getImage()->isMissingAsset())
 		{
 			return local_tex_obj->getImage()->getDiscardLevel();
@@ -1370,7 +1489,7 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te
 			return;
 		}
 		EWearableType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType(type);
-		if (!gAgentWearables.getWearable(wearable_type,0))
+		if (!gAgentWearables.getWearable(wearable_type,index))
 		{
 			// no wearable is loaded, cannot set the texture.
 			return;
@@ -1382,6 +1501,13 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te
 			llerrs << "Unable to create LocalTextureObject for wearable type & index: (" << (U32) wearable_type << ", " << index << ")" << llendl;
 			return;
 		}
+		
+		LLTexLayerSet *layer_set = getLayerSet(type);
+		if (layer_set)
+		{
+			layer_set->cloneTemplates(local_tex_obj, type, gAgentWearables.getWearable(wearable_type,index));
+		}
+
 	}
 	if (!baked_version_ready)
 	{
@@ -1414,9 +1540,21 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te
 			tex->setMinDiscardLevel(desired_discard);
 		}
 	}
-	local_tex_obj->setBakedReady( baked_version_ready );
 	local_tex_obj->setImage(tex);
+	local_tex_obj->setID(tex->getID());
+	setBakedReady(type,baked_version_ready,index);
 }
+//virtual
+void	LLVOAvatarSelf::setBakedReady(LLVOAvatarDefines::ETextureIndex type, BOOL baked_version_exists, U32 index)
+{
+	if (!isIndexLocalTexture(type)) return;
+	LLLocalTextureObject *local_tex_obj = getLocalTextureObject(type,index);
+	if (local_tex_obj)
+	{
+		local_tex_obj->setBakedReady( baked_version_exists );
+	}
+}
+
 
 // virtual
 void LLVOAvatarSelf::dumpLocalTextures() const
@@ -1439,7 +1577,8 @@ void LLVOAvatarSelf::dumpLocalTextures() const
 
 		const std::string &name = texture_dict->mName;
 		const LLLocalTextureObject *local_tex_obj = getLocalTextureObject(iter->first, 0);
-		if (isTextureDefined(baked_equiv))
+		// index is baked texture - index is not relevant. putting in 0 as placeholder
+		if (isTextureDefined(baked_equiv, 0))
 		{
 #if LL_RELEASE_FOR_DOWNLOAD
 			// End users don't get to trivially see avatar texture IDs, makes textures
@@ -1499,6 +1638,31 @@ void LLVOAvatarSelf::onLocalTextureLoaded(BOOL success, LLViewerFetchedTexture *
 	}
 }
 
+/*virtual*/	void LLVOAvatarSelf::setImage(const U8 te, LLViewerTexture *imagep, const U32 index)
+{
+	if (isIndexLocalTexture((ETextureIndex)te))
+	{
+		setLocalTexture((ETextureIndex)te, imagep, FALSE ,index);
+	}
+	else 
+	{
+		setTEImage(te,imagep);
+	}
+}
+
+/*virtual*/ LLViewerTexture* LLVOAvatarSelf::getImage(const U8 te, const U32 index) const
+{
+	if (isIndexLocalTexture((ETextureIndex)te))
+	{
+		return getLocalTextureGL((ETextureIndex)te,index);
+	}
+	else 
+	{
+		return getTEImage(te);
+	}
+}
+
+
 // static
 void LLVOAvatarSelf::dumpTotalLocalTextureByteCount()
 {
@@ -1517,7 +1681,7 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
 		loading = TRUE;
 	}
 
-	if (!isTextureDefined(TEX_HAIR))
+	if (!isTextureDefined(TEX_HAIR, 0))
 	{
 		loading = TRUE;
 	}
@@ -1525,13 +1689,13 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
 	if (!mPreviousFullyLoaded)
 	{
 		if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_LOWER].mTexLayerSet) &&
-			(!isTextureDefined(TEX_LOWER_BAKED)))
+			(!isTextureDefined(TEX_LOWER_BAKED, 0)))
 		{
 			loading = TRUE;
 		}
 
 		if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_UPPER].mTexLayerSet) &&
-			(!isTextureDefined(TEX_UPPER_BAKED)))
+			(!isTextureDefined(TEX_UPPER_BAKED, 0)))
 		{
 			loading = TRUE;
 		}
@@ -1542,11 +1706,11 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
 				continue;
 
 			BakedTextureData& texture_data = mBakedTextureDatas[i];
-			if (!isTextureDefined(texture_data.mTextureIndex))
+			if (!isTextureDefined(texture_data.mTextureIndex, 0))
 				continue;
 
 			// Check for the case that texture is defined but not sufficiently loaded to display anything.
-			LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex );
+			LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 );
 			if (!baked_img || !baked_img->hasGLTexture())
 			{
 				loading = TRUE;
@@ -1570,9 +1734,9 @@ const LLUUID& LLVOAvatarSelf::grabLocalTexture(ETextureIndex type, U32 index) co
 BOOL LLVOAvatarSelf::canGrabLocalTexture(ETextureIndex type, U32 index) const
 {
 	// Check if the texture hasn't been baked yet.
-	if (!isTextureDefined(type))
+	if (!isTextureDefined(type, index))
 	{
-		lldebugs << "getTEImage( " << (U32) type << " )->getID() == IMG_DEFAULT_AVATAR" << llendl;
+		lldebugs << "getTEImage( " << (U32) type << ", " << index << " )->getID() == IMG_DEFAULT_AVATAR" << llendl;
 		return FALSE;
 	}
 
@@ -1596,6 +1760,7 @@ BOOL LLVOAvatarSelf::canGrabLocalTexture(ETextureIndex type, U32 index) const
 	{
 		const ETextureIndex t_index = (*iter);
 		lldebugs << "Checking index " << (U32) t_index << llendl;
+		// MULTI-WEARABLE: old method. replace.
 		const LLUUID& texture_id = getTEImage( t_index )->getID();
 		if (texture_id != IMG_DEFAULT_AVATAR)
 		{
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 17744cce1ba59ce36c48b2da82cdb364e3c79e67..88eb491f3545ffda4206f548379238196c4ab9aa 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -85,6 +85,16 @@ class LLVOAvatarSelf :
 	/*virtual*/ void 		requestStopMotion(LLMotion* motion);
 	/*virtual*/ LLJoint*	getJoint(const std::string &name);
 
+	/*virtual*/ BOOL setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL set_by_user = FALSE );
+	/*virtual*/ BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user = FALSE );
+	/*virtual*/ BOOL setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user = FALSE );
+	/*virtual*/ void updateVisualParams();
+
+private:
+	// helper function. Passed in param is assumed to be in avatar's parameter list.
+	BOOL setParamWeight(LLViewerVisualParam *param, F32 weight, BOOL set_by_user = FALSE );
+
+
 /**                    Initialization
  **                                                                            **
  *******************************************************************************/
@@ -160,31 +170,38 @@ class LLVOAvatarSelf :
 	//--------------------------------------------------------------------
 public:
 	/*virtual*/ bool	hasPendingBakedUploads() const;
-	S32					getLocalDiscardLevel(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const;
+	S32					getLocalDiscardLevel(LLVOAvatarDefines::ETextureIndex type, U32 index) const;
 	bool				areTexturesCurrent() const;
 	BOOL				isLocalTextureDataAvailable(const LLTexLayerSet* layerset) const;
 	BOOL				isLocalTextureDataFinal(const LLTexLayerSet* layerset) const;
-	/*virtual*/ BOOL    isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const;
+	// If you want to check all textures of a given type, pass gAgentWearables.getWearableCount() for index
+	/*virtual*/ BOOL    isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index) const;
 
 	//--------------------------------------------------------------------
 	// Local Textures
 	//--------------------------------------------------------------------
 public:
-	BOOL				getLocalTextureGL(LLVOAvatarDefines::ETextureIndex type, LLViewerTexture** image_gl_pp, U32 index = 0) const;
-	const LLUUID&		getLocalTextureID(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const;
-	void				setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_by_user, U32 index = 0);
-	const LLUUID&		grabLocalTexture(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const;
-	BOOL				canGrabLocalTexture(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const;
+	BOOL				getLocalTextureGL(LLVOAvatarDefines::ETextureIndex type, LLViewerTexture** image_gl_pp, U32 index) const;
+	LLViewerFetchedTexture*	getLocalTextureGL(LLVOAvatarDefines::ETextureIndex type, U32 index) const;
+	const LLUUID&		getLocalTextureID(LLVOAvatarDefines::ETextureIndex type, U32 index) const;
+	void				setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_by_user, U32 index);
+	const LLUUID&		grabLocalTexture(LLVOAvatarDefines::ETextureIndex type, U32 index) const;
+	BOOL				canGrabLocalTexture(LLVOAvatarDefines::ETextureIndex type, U32 index) const;
 protected:
-	/*virtual*/ void	setLocalTexture(LLVOAvatarDefines::ETextureIndex type, LLViewerTexture* tex, BOOL baked_version_exits, U32 index = 0);
+	/*virtual*/ void	setLocalTexture(LLVOAvatarDefines::ETextureIndex type, LLViewerTexture* tex, BOOL baked_version_exits, U32 index);
+	/*virtual*/ void	setBakedReady(LLVOAvatarDefines::ETextureIndex type, BOOL baked_version_exists, U32 index);
 	void				localTextureLoaded(BOOL succcess, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
 	void				getLocalTextureByteCount(S32* gl_byte_count) const;
-	/*virtual*/ void	addLocalTextureStats(LLVOAvatarDefines::ETextureIndex i, LLViewerFetchedTexture* imagep, F32 texel_area_ratio, BOOL rendered, BOOL covered_by_baked, U32 index = 0);
-	LLLocalTextureObject* getLocalTextureObject(LLVOAvatarDefines::ETextureIndex i, U32 index = 0) const;
+	/*virtual*/ void	addLocalTextureStats(LLVOAvatarDefines::ETextureIndex i, LLViewerFetchedTexture* imagep, F32 texel_area_ratio, BOOL rendered, BOOL covered_by_baked, U32 index);
+	LLLocalTextureObject* getLocalTextureObject(LLVOAvatarDefines::ETextureIndex i, U32 index) const;
 
 private:
 	static void			onLocalTextureLoaded(BOOL succcess, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
 
+	/*virtual*/	void				setImage(const U8 te, LLViewerTexture *imagep, const U32 index); 
+	/*virtual*/ LLViewerTexture*		getImage(const U8 te, const U32 index) const;
+
+
 	//--------------------------------------------------------------------
 	// Baked textures
 	//--------------------------------------------------------------------
@@ -203,7 +220,7 @@ class LLVOAvatarSelf :
 public:
 	void 				requestLayerSetUploads();
 	void				requestLayerSetUpdate(LLVOAvatarDefines::ETextureIndex i);
-protected:
+public:
 	LLTexLayerSet*		getLayerSet(LLVOAvatarDefines::ETextureIndex index) const;
 	
 	//--------------------------------------------------------------------
@@ -250,6 +267,7 @@ class LLVOAvatarSelf :
  **/
 
 public:
+	/*virtual*/ BOOL			isWearingWearableType(EWearableType type ) const;
 	void			wearableUpdated(EWearableType type);
 
 	//--------------------------------------------------------------------
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 0d3dd10a011ecbbd8ee728e18f276f6f2915a9f1..1675ee1adc539cf505f0a7f22ad0a5e6a05074c8 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -44,6 +44,9 @@
 #include "llwearable.h"
 #include "lldictionary.h"
 #include "lltrans.h"
+#include "lltexlayer.h"
+#include "llvisualparam.h"
+#include "lltexglobalcolor.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -129,17 +132,18 @@ BOOL LLWearable::exportFile(LLFILE* file) const
 	}
 
 	// parameters
-	S32 num_parameters = mVisualParamMap.size();
+	S32 num_parameters = mVisualParamIndexMap.size();
 	if( fprintf( file, "parameters %d\n", num_parameters ) < 0 )
 	{
 		return FALSE;
 	}
 
-	for (param_map_t::const_iterator iter = mVisualParamMap.begin();
-		 iter != mVisualParamMap.end(); ++iter)
+	for (VisualParamIndexMap_t::const_iterator iter = mVisualParamIndexMap.begin();
+		 iter != mVisualParamIndexMap.end(); ++iter)
 	{
 		S32 param_id = iter->first;
-		F32 param_weight = iter->second;
+		LLVisualParam* param = iter->second;
+		F32 param_weight = param->getWeight();
 		if( fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight ).c_str() ) < 0 )
 		{
 			return FALSE;
@@ -156,7 +160,7 @@ BOOL LLWearable::exportFile(LLFILE* file) const
 	for (te_map_t::const_iterator iter = mTEMap.begin(); iter != mTEMap.end(); ++iter)
 	{
 		S32 te = iter->first;
-		const LLUUID& image_id = iter->second.getID();
+		const LLUUID& image_id = iter->second->getID();
 		if( fprintf( file, "%d %s\n", te, image_id.asString().c_str()) < 0 )
 		{
 			return FALSE;
@@ -165,6 +169,42 @@ BOOL LLWearable::exportFile(LLFILE* file) const
 	return TRUE;
 }
 
+
+void LLWearable::createVisualParams()
+{
+	LLVOAvatar* avatar = gAgent.getAvatarObject();
+	for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); 
+	param;
+	param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
+	{
+		if( (param->getWearableType() == mType) )
+		{
+			if( mVisualParamIndexMap[param->getID()] )
+			{
+				delete mVisualParamIndexMap[param->getID()];
+			}
+			mVisualParamIndexMap[param->getID()] = param->cloneParam(this);
+		}
+	}
+
+	// resync driver parameters to point to the newly cloned driven parameters
+	for( VisualParamIndexMap_t::iterator param_iter = mVisualParamIndexMap.begin(); param_iter != mVisualParamIndexMap.end(); param_iter++ )
+	{
+		LLVisualParam* param = param_iter->second;
+		LLVisualParam*(LLWearable::*wearable_function)(S32)const = &LLWearable::getVisualParam; 
+		// need this line to disambiguate between versions of LLCharacter::getVisualParam()
+		LLVisualParam*(LLVOAvatarSelf::*avatar_function)(S32)const = &LLVOAvatarSelf::getVisualParam; 
+		if(!param->linkDrivenParams(boost::bind(wearable_function,(LLWearable*)this, _1), false))
+		{
+			if( !param->linkDrivenParams(boost::bind(avatar_function,(LLVOAvatarSelf*)avatar,_1 ), true))
+			{
+				llwarns << "could not link driven params for wearable " << getName() << llendl;
+				continue;
+			}
+		}
+	}
+}
+
 BOOL LLWearable::importFile( LLFILE* file )
 {
 	// *NOTE: changing the type or size of this buffer will require
@@ -287,7 +327,7 @@ BOOL LLWearable::importFile( LLFILE* file )
 	}
 	if( 0 <= type && type < WT_COUNT )
 	{
-		mType = (EWearableType)type;
+		setType((EWearableType)type);
 	}
 	else
 	{
@@ -296,7 +336,6 @@ BOOL LLWearable::importFile( LLFILE* file )
 		return FALSE;
 	}
 
-
 	// parameters header
 	S32 num_parameters = 0;
 	fields_read = fscanf( file, "parameters %d\n", &num_parameters );
@@ -306,6 +345,11 @@ BOOL LLWearable::importFile( LLFILE* file )
 		return FALSE;
 	}
 
+	if( num_parameters != mVisualParamIndexMap.size() )
+	{
+		llwarns << "Wearable parameter mismatch. Reading in " << num_parameters << " from file, but created " << mVisualParamIndexMap.size() << " from avatar parameters. " << llendl;
+	}
+
 	// parameters
 	S32 i;
 	for( i = 0; i < num_parameters; i++ )
@@ -318,7 +362,7 @@ BOOL LLWearable::importFile( LLFILE* file )
 			llwarns << "Bad Wearable asset: bad parameter, #" << i << llendl;
 			return FALSE;
 		}
-		mVisualParamMap[param_id] = param_weight;
+		mSavedVisualParamMap[param_id] = param_weight;
 	}
 
 	// textures header
@@ -349,11 +393,25 @@ BOOL LLWearable::importFile( LLFILE* file )
 			llwarns << "Bad Wearable asset: bad texture uuid: " << text_buffer << llendl;
 			return FALSE;
 		}
-
-		//TODO: check old values
-		mTEMap[te] = LLLocalTextureObject(NULL, NULL, NULL, LLUUID(text_buffer));
+		LLUUID id = LLUUID(text_buffer);
+		LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture( id );
+		if( mTEMap.find(te) != mTEMap.end() )
+		{
+			delete mTEMap[te];
+		}
+		if( mSavedTEMap.find(te) != mSavedTEMap.end() )
+		{
+			delete mSavedTEMap[te];
+		}
+		
+		mTEMap[te] = new LLLocalTextureObject(image, LLUUID(text_buffer));
+		mSavedTEMap[te] = new LLLocalTextureObject(image, LLUUID(text_buffer));
+		createLayers(te);
 	}
 
+	// copy all saved param values to working params
+	revertValues();
+
 	return TRUE;
 }
 
@@ -389,13 +447,13 @@ BOOL LLWearable::isOldVersion() const
 		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
 		{
 			param_count++;
-			if( !is_in_map(mVisualParamMap, param->getID() ) )
+			if( !is_in_map(mVisualParamIndexMap, param->getID() ) )
 			{
 				return TRUE;
 			}
 		}
 	}
-	if( param_count != mVisualParamMap.size() )
+	if( param_count != mVisualParamIndexMap.size() )
 	{
 		return TRUE;
 	}
@@ -442,13 +500,17 @@ BOOL LLWearable::isDirty() const
 		param;
 		param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
 	{
-		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
+		if( (param->getWearableType() == mType) 
+			&& (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) 
+			&& !param->getCrossWearable())
 		{
-			F32 weight = get_if_there(mVisualParamMap, param->getID(), param->getDefaultWeight());
-			weight = llclamp( weight, param->getMinWeight(), param->getMaxWeight() );
+			F32 current_weight = getVisualParamWeight(param->getID());
+			current_weight = llclamp( current_weight, param->getMinWeight(), param->getMaxWeight() );
+			F32 saved_weight = get_if_there(mSavedVisualParamMap, param->getID(), param->getDefaultWeight());
+			saved_weight = llclamp( saved_weight, param->getMinWeight(), param->getMaxWeight() );
 			
-			U8 a = F32_to_U8( param->getWeight(), param->getMinWeight(), param->getMaxWeight() );
-			U8 b = F32_to_U8( weight,             param->getMinWeight(), param->getMaxWeight() );
+			U8 a = F32_to_U8( saved_weight, param->getMinWeight(), param->getMaxWeight() );
+			U8 b = F32_to_U8( current_weight, param->getMinWeight(), param->getMaxWeight() );
 			if( a != b  )
 			{
 				return TRUE;
@@ -460,21 +522,24 @@ BOOL LLWearable::isDirty() const
 	{
 		if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == mType)
 		{
-			LLViewerTexture* avatar_image = avatar->getTEImage( te );
-			if( !avatar_image )
-			{
-				llassert( 0 );
-				continue;
-			}
-	
-			te_map_t::const_iterator iter = mTEMap.find(te);
-			if(iter != mTEMap.end())
+			te_map_t::const_iterator current_iter = mTEMap.find(te);
+			if(current_iter != mTEMap.end())
 			{
- 				const LLUUID& image_id = iter->second.getID();
- 				if (avatar_image->getID() != image_id)
- 				{
- 					return TRUE;
- 				}
+ 				const LLUUID& current_image_id = current_iter->second->getID();
+				te_map_t::const_iterator saved_iter = mSavedTEMap.find(te);
+				if(saved_iter != mSavedTEMap.end())
+				{
+					const LLUUID& saved_image_id = saved_iter->second->getID();
+					if (saved_image_id != current_image_id)
+					{
+						return TRUE;
+					}
+				}
+				else
+				{
+					// image found in current image list but not saved image list
+					return FALSE;
+				}
 			}
 		}
 	}
@@ -500,35 +565,47 @@ void LLWearable::setParamsToDefaults()
 		return;
 	}
 
-	mVisualParamMap.clear();
 	for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
 	{
 		if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
 		{
-			mVisualParamMap[param->getID()] = param->getDefaultWeight();
+			setVisualParamWeight(param->getID(),param->getDefaultWeight(), FALSE);
 		}
 	}
 }
 
 void LLWearable::setTexturesToDefaults()
 {
-	mTEMap.clear();
 	for( S32 te = 0; te < TEX_NUM_INDICES; te++ )
 	{
 		if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == mType)
 		{
-			mTEMap[te] = LLLocalTextureObject(NULL, NULL, NULL, LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te));
+			LLUUID id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te);
+			LLViewerFetchedTexture * image = LLViewerTextureManager::getFetchedTexture( id );
+			if( mTEMap.find(te) == mTEMap.end() )
+			{
+				mTEMap[te] = new LLLocalTextureObject(image, id);
+				createLayers(te);
+			}
+			else
+			{
+				// Local Texture Object already created, just set image and UUID
+				LLLocalTextureObject *lto = mTEMap[te];
+				lto->setID(id);
+				lto->setImage(image);
+			}
 		}
 	}
 }
 
 // Updates the user's avatar's appearance
-void LLWearable::writeToAvatar( BOOL set_by_user )
+void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater )
 {
 	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
 	llassert( avatar );
 	if( !avatar )
 	{
+		llerrs << "could not get avatar object to write to for wearable " << this->getName() << llendl;
 		return;
 	}
 
@@ -537,10 +614,11 @@ void LLWearable::writeToAvatar( BOOL set_by_user )
 	// Pull params
 	for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
 	{
-		if( (((LLViewerVisualParam*)param)->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
+		if( (((LLViewerVisualParam*)param)->getWearableType() == mType) )
 		{
 			S32 param_id = param->getID();
-			F32 weight = get_if_there(mVisualParamMap, param_id, param->getDefaultWeight());
+			F32 weight = getVisualParamWeight(param_id);
+
 			// only animate with user-originated changes
 			if (set_by_user)
 			{
@@ -568,20 +646,20 @@ void LLWearable::writeToAvatar( BOOL set_by_user )
 			LLUUID image_id;
 			if(iter != mTEMap.end())
 			{
-				image_id = iter->second.getID();
+				image_id = iter->second->getID();
 			}
 			else
 			{	
 				image_id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te);
 			}
 			LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE );
-			avatar->setLocalTextureTE(te, image, set_by_user);
+			// MULTI-WEARABLE: replace hard-coded 0
+			avatar->setLocalTextureTE(te, image, set_by_user, 0);
 		}
 	}
 
-	avatar->updateVisualParams();
 
-	if( gFloaterCustomize )
+	if( gFloaterCustomize && update_customize_floater )
 	{
 		LLViewerInventoryItem* item;
 		// MULTI_WEARABLE:
@@ -615,6 +693,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user )
 //	}
 }
 
+
 // Updates the user's avatar's appearance, replacing this wearables' parameters and textures with default values.
 // static 
 void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
@@ -645,16 +724,6 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
 		}
 	}
 
-	// Pull textures
-	LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( IMG_DEFAULT_AVATAR );
-	for( S32 te = 0; te < TEX_NUM_INDICES; te++ )
-	{
-		if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == type)
-		{
-			avatar->setLocalTextureTE(te, image, set_by_user);
-		}
-	}
-
 	if( gFloaterCustomize )
 	{
 		gFloaterCustomize->setWearable(type, NULL, PERM_ALL, TRUE);
@@ -669,53 +738,11 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
 //	}
 }
 
-
-
-// Updates asset from the user's avatar
-void LLWearable::readFromAvatar()
-{
-	LLVOAvatar* avatar = gAgent.getAvatarObject();
-	llassert( avatar );
-	if( !avatar )
-	{
-		return;
-	}
-
-	mDefinitionVersion = LLWearable::sCurrentDefinitionVersion;
-
-	mVisualParamMap.clear();
-	for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
-	{
-		if( (((LLViewerVisualParam*)param)->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
-		{
-			mVisualParamMap[param->getID()] = param->getWeight();
-		}
-	}
-
-	mTEMap.clear();
-	for( S32 te = 0; te < TEX_NUM_INDICES; te++ )
-	{
-		if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == mType)
-		{
-			LLViewerTexture* image = avatar->getTEImage( te );
-			if( image )
-			{
-				mTEMap[te] = LLLocalTextureObject(NULL, NULL, NULL, image->getID());
-			}
-		}
-	}
-
-	//if( gFloaterCustomize )
-	//{
-	//	mDescription = gFloaterCustomize->getWearableDescription( mType );
-	//}
-}
-
 // Does not copy mAssetID.
 // Definition version is current: removes obsolete enties and creates default values for new ones.
 void LLWearable::copyDataFrom(const LLWearable* src)
 {
-	LLVOAvatar* avatar = gAgent.getAvatarObject();
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
 	llassert( avatar );
 	if( !avatar )
 	{
@@ -730,37 +757,55 @@ void LLWearable::copyDataFrom(const LLWearable* src)
 	mSaleInfo = src->mSaleInfo;
 	mType = src->mType;
 
+	mSavedVisualParamMap.clear();
 	// Deep copy of mVisualParamMap (copies only those params that are current, filling in defaults where needed)
 	for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); 
 		param;
 		param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
 	{
-		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
+		if( (param->getWearableType() == mType) )
 		{
 			S32 id = param->getID();
-			F32 weight = get_if_there(src->mVisualParamMap, id, param->getDefaultWeight() );
-			mVisualParamMap[id] = weight;
+			F32 weight = src->getVisualParamWeight(id);
+			mSavedVisualParamMap[id] = weight;
+			
+			// Clones a visual param from src and adds it to this wearable. Value of param is taken from current value of source param, not saved.
+			addVisualParam(param->cloneParam(this));
 		}
 	}
 
+	destroyTextures();
 	// Deep copy of mTEMap (copies only those tes that are current, filling in defaults where needed)
 	for( S32 te = 0; te < TEX_NUM_INDICES; te++ )
 	{
 		if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == mType)
 		{
-			te_map_t::const_iterator iter = mTEMap.find(te);
+			te_map_t::const_iterator iter = src->mTEMap.find(te);
 			LLUUID image_id;
-			if(iter != mTEMap.end())
+			LLViewerFetchedTexture *image = NULL;
+			if(iter != src->mTEMap.end())
 			{
-				image_id = iter->second.getID();
+				image = src->getConstLocalTextureObject(te)->getImage();
+				image_id = src->getConstLocalTextureObject(te)->getID();
+				mTEMap[te] = new LLLocalTextureObject(image, image_id);
+				mSavedTEMap[te] = new LLLocalTextureObject(image, image_id);
+				mTEMap[te]->setBakedReady(src->getConstLocalTextureObject(te)->getBakedReady());
+				mTEMap[te]->setDiscard(src->getConstLocalTextureObject(te)->getDiscard());
 			}
 			else
 			{
 				image_id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te);
+				image = LLViewerTextureManager::getFetchedTexture( image_id );
+				mTEMap[te] = new LLLocalTextureObject(image, image_id);
+				mSavedTEMap[te] = new LLLocalTextureObject(image, image_id);
 			}
-			mTEMap[te] = LLLocalTextureObject(NULL, NULL, NULL, image_id);
+			createLayers(te);
 		}
 	}
+
+	// Probably reduntant, but ensure that the newly created wearable is not dirty by setting current value of params in new wearable
+	// to be the same as the saved values (which were loaded from src at param->cloneParam(this))
+	revertValues();
 }
 
 void LLWearable::setItemID(const LLUUID& item_id)
@@ -773,29 +818,263 @@ const LLUUID& LLWearable::getItemID() const
 	return mItemID;
 }
 
-LLLocalTextureObject* LLWearable::getLocalTextureObject(S32 index) const
+void LLWearable::setType(EWearableType type) 
+{ 
+	mType = type; 
+	createVisualParams();
+}
+
+LLLocalTextureObject* LLWearable::getLocalTextureObject(S32 index)
+{
+	te_map_t::iterator iter = mTEMap.find(index);
+	if( iter != mTEMap.end() )
+	{
+		LLLocalTextureObject* lto = iter->second;
+		return lto;
+	}
+	return NULL;
+}
+
+const LLLocalTextureObject* LLWearable::getConstLocalTextureObject(S32 index) const
 {
 	te_map_t::const_iterator iter = mTEMap.find(index);
 	if( iter != mTEMap.end() )
 	{
-		return (LLLocalTextureObject*) &iter->second;
+		const LLLocalTextureObject* lto = iter->second;
+		return lto;
 	}
 	return NULL;
 }
 
 void LLWearable::setLocalTextureObject(S32 index, LLLocalTextureObject *lto)
 {
+	if( mTEMap.find(index) != mTEMap.end() )
+	{
+		mTEMap.erase(index);
+	}
 	if( lto )
 	{
-		LLLocalTextureObject obj(*lto);
-		mTEMap[index] = obj;
+		mTEMap[index] = new LLLocalTextureObject(*lto);
+	}
+}
+
+
+void LLWearable::addVisualParam(LLVisualParam *param)
+{
+	if( mVisualParamIndexMap[param->getID()] )
+	{
+		delete mVisualParamIndexMap[param->getID()];
+	}
+	mVisualParamIndexMap[param->getID()] = param;
+}
+
+void LLWearable::setVisualParams()
+{
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+
+	for (VisualParamIndexMap_t::const_iterator iter = mVisualParamIndexMap.begin(); iter != mVisualParamIndexMap.end(); iter++)
+	{
+		S32 id = iter->first;
+		LLVisualParam *wearable_param = iter->second;
+		F32 value = wearable_param->getWeight();
+		avatar->setVisualParamWeight(id, value, FALSE);
+	}
+}
+
+
+void LLWearable::setVisualParamWeight(S32 param_index, F32 value, BOOL set_by_user)
+{
+	if( is_in_map(mVisualParamIndexMap, param_index ) )
+	{
+		LLVisualParam *wearable_param = mVisualParamIndexMap[param_index];
+		wearable_param->setWeight(value, set_by_user);
 	}
 	else
 	{
-		mTEMap.erase(index);
+		llerrs << "LLWearable::setVisualParam passed invalid parameter index: " << param_index << " for wearable type: " << this->getName() << llendl;
+	}
+}
+
+F32 LLWearable::getVisualParamWeight(S32 param_index) const
+{
+	if( is_in_map(mVisualParamIndexMap, param_index ) )
+	{
+		const LLVisualParam *wearable_param = mVisualParamIndexMap.find(param_index)->second;
+		return wearable_param->getWeight();
+	}
+	else
+	{
+		llwarns << "LLWerable::getVisualParam passed invalid parameter index: "  << param_index << " for wearable type: " << this->getName() << llendl;
+	}
+	return (F32)-1.0;
+}
+
+LLVisualParam* LLWearable::getVisualParam(S32 index) const
+{
+	VisualParamIndexMap_t::const_iterator iter = mVisualParamIndexMap.find(index);
+	return (iter == mVisualParamIndexMap.end()) ? NULL : iter->second;
+}
+
+
+void LLWearable::getVisualParams(visualParamCluster_t &list)
+{
+	VisualParamIndexMap_t::iterator iter = mVisualParamIndexMap.begin();
+	VisualParamIndexMap_t::iterator end = mVisualParamIndexMap.end();
+
+	// add all visual params to the passed-in vector
+	for( ; iter != end; ++iter )
+	{
+		list.push_back(iter->second);
+	}
+}
+
+LLColor4 LLWearable::getClothesColor(S32 te)
+{
+	LLColor4 color;
+	U32 param_name[3];
+	if( LLVOAvatar::teToColorParams( (LLVOAvatarDefines::ETextureIndex)te, param_name ) )
+	{
+		for( U8 index = 0; index < 3; index++ )
+		{
+			color.mV[index] = getVisualParamWeight(param_name[index]);
+		}
+	}
+	return color;
+}
+
+void LLWearable::setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by_user )
+{
+	U32 param_name[3];
+	if( LLVOAvatar::teToColorParams( (LLVOAvatarDefines::ETextureIndex)te, param_name ) )
+	{
+		for( U8 index = 0; index < 3; index++ )
+		{
+			setVisualParamWeight(param_name[index], new_color.mV[index], set_by_user);
+		}
+	}
+}
+
+void LLWearable::revertValues()
+{
+	//update saved settings so wearable is no longer dirty
+	for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++)
+	{
+		S32 id = iter->first;
+		F32 value = iter->second;
+		setVisualParamWeight(id, value, TRUE);
+	}
+
+	syncImages(mSavedTEMap, mTEMap);
+
+	if( gFloaterCustomize )
+	{
+		gFloaterCustomize->updateScrollingPanelList(TRUE);
 	}
 }
 
+BOOL LLWearable::isOnTop()
+{ 
+	return (this == gAgentWearables.getTopWearable(mType));
+}
+
+void LLWearable::createLayers(S32 te)
+{
+	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
+	LLTexLayerSet *layer_set = avatar->getLayerSet((ETextureIndex)te);
+	if( layer_set )
+	{
+		layer_set->cloneTemplates(mTEMap[te], (ETextureIndex)te, this);
+	}
+	else
+	{
+		llerrs << "could not find layerset for LTO in wearable!" << llendl;
+	}
+}
+
+void LLWearable::saveValues()
+{
+	//update saved settings so wearable is no longer dirty
+	mSavedVisualParamMap.clear();
+	for (VisualParamIndexMap_t::const_iterator iter = mVisualParamIndexMap.begin(); iter != mVisualParamIndexMap.end(); ++iter)
+	{
+		S32 id = iter->first;
+		LLVisualParam *wearable_param = iter->second;
+		F32 value = wearable_param->getWeight();
+		mSavedVisualParamMap[id] = value;
+	}
+
+	// Deep copy of mTEMap (copies only those tes that are current, filling in defaults where needed)
+	syncImages(mTEMap, mSavedTEMap);
+
+	if( gFloaterCustomize )
+	{
+		gFloaterCustomize->updateScrollingPanelList(TRUE);
+	}
+}
+
+void LLWearable::syncImages(te_map_t &src, te_map_t &dst)
+{
+	// Deep copy of src (copies only those tes that are current, filling in defaults where needed)
+	for( S32 te = 0; te < TEX_NUM_INDICES; te++ )
+	{
+		if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == mType)
+		{
+			te_map_t::const_iterator iter = src.find(te);
+			LLUUID image_id;
+			LLViewerFetchedTexture *image = NULL;
+			LLLocalTextureObject *lto = NULL;
+			if(iter != src.end())
+			{
+				// there's a Local Texture Object in the source image map. Use this to populate the values to store in the destination image map.
+				lto = iter->second;
+				image = lto->getImage();
+				image_id = lto->getID();
+			}
+			else
+			{
+				// there is no Local Texture Object in the source image map. Get defaults values for populating the destination image map.
+				image_id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te);
+				image = LLViewerTextureManager::getFetchedTexture( image_id );
+			}
+
+			if( dst.find(te) != dst.end() )
+			{
+				// there's already an entry in the destination map for the texture. Just update its values.
+				dst[te]->setImage(image);
+				dst[te]->setID(image_id);
+			}
+			else
+			{
+				// no entry found in the destination map, we need to create a new Local Texture Object
+				dst[te] = new LLLocalTextureObject(image, image_id);
+			}
+
+			if( lto )
+			{
+				// If we pulled values from a Local Texture Object in the source map, make sure the proper flags are set in the new (or updated) entry in the destination map.
+				dst[te]->setBakedReady(lto->getBakedReady());
+				dst[te]->setDiscard(lto->getDiscard());
+			}
+		}
+	}
+}
+
+void LLWearable::destroyTextures()
+{
+	for( te_map_t::iterator iter = mTEMap.begin(); iter != mTEMap.end(); ++iter )
+	{
+		LLLocalTextureObject *lto = iter->second;
+		delete lto;
+	}
+	mTEMap.clear();
+	for( te_map_t::iterator iter = mSavedTEMap.begin(); iter != mSavedTEMap.end(); ++iter )
+	{
+		LLLocalTextureObject *lto = iter->second;
+		delete lto;
+	}
+	mSavedTEMap.clear();
+}
+
 struct LLWearableSaveData
 {
 	EWearableType mType;
@@ -882,6 +1161,7 @@ void LLWearable::onSaveNewAssetComplete(const LLUUID& new_asset_id, void* userda
 
 	// delete the context data
 	delete data;
+
 }
 
 std::ostream& operator<<(std::ostream &s, const LLWearable &w)
@@ -893,11 +1173,12 @@ std::ostream& operator<<(std::ostream &s, const LLWearable &w)
 	//w.mSaleInfo
 
 	s << "    Params:" << "\n";
-	for (LLWearable::param_map_t::const_iterator iter = w.mVisualParamMap.begin();
-		 iter != w.mVisualParamMap.end(); ++iter)
+	for (LLWearable::VisualParamIndexMap_t::const_iterator iter = w.mVisualParamIndexMap.begin();
+		 iter != w.mVisualParamIndexMap.end(); ++iter)
 	{
 		S32 param_id = iter->first;
-		F32 param_weight = iter->second;
+		LLVisualParam *wearable_param = iter->second;
+		F32 param_weight = wearable_param->getWeight();
 		s << "        " << param_id << " " << param_weight << "\n";
 	}
 
@@ -906,7 +1187,7 @@ std::ostream& operator<<(std::ostream &s, const LLWearable &w)
 		 iter != w.mTEMap.end(); ++iter)
 	{
 		S32 te = iter->first;
-		const LLUUID& image_id = iter->second.getID();
+		const LLUUID& image_id = iter->second->getID();
 		s << "        " << te << " " << image_id << "\n";
 	}
 	return s;
diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h
index d7b4d3f91e14673e6014d6d447532ce3630bbe54..201f4f91ef762ae7998df09ed5c7b26dfb173a2e 100644
--- a/indra/newview/llwearable.h
+++ b/indra/newview/llwearable.h
@@ -43,6 +43,9 @@
 #include "lllocaltextureobject.h"
 
 class LLViewerInventoryItem;
+class LLVisualParam;
+class LLTexGlobalColorInfo;
+class LLTexGlobalColor;
 
 class LLWearable
 {
@@ -66,7 +69,7 @@ class LLWearable
 	const LLAssetID&			getAssetID() const { return mAssetID; }
 	const LLTransactionID&		getTransactionID() const { return mTransactionID; }
 	EWearableType				getType() const	{ return mType; }
-	void						setType(EWearableType type)	{ mType = type; }
+	void						setType(EWearableType type);
 	const std::string&			getName() const	{ return mName; }
 	void						setName(const std::string& name) { mName = name; }
 	const std::string&			getDescription() const { return mDescription; }
@@ -81,11 +84,12 @@ class LLWearable
 	LLLocalTextureObject*		getLocalTextureObject(S32 index) const;
 
 public:
+	typedef std::vector<LLVisualParam*> visualParamCluster_t;
+
 	BOOL				isDirty() const;
 	BOOL				isOldVersion() const;
 
-	void				writeToAvatar( BOOL set_by_user );
-	void				readFromAvatar();
+	void				writeToAvatar( BOOL set_by_user, BOOL update_customize_floater = TRUE );
 	void				removeFromAvatar( BOOL set_by_user )	{ LLWearable::removeFromAvatar( mType, set_by_user ); }
 	static void			removeFromAvatar( EWearableType type, BOOL set_by_user ); 
 
@@ -104,9 +108,36 @@ class LLWearable
 
 	friend std::ostream& operator<<(std::ostream &s, const LLWearable &w);
 	void				setItemID(const LLUUID& item_id);
+
+	LLLocalTextureObject* getLocalTextureObject(S32 index);
+	const LLLocalTextureObject* getConstLocalTextureObject(S32 index) const;
+
 	void				setLocalTextureObject(S32 index, LLLocalTextureObject *lto);
+	void				addVisualParam(LLVisualParam *param);
+	void				setVisualParams();
+	void 				setVisualParamWeight(S32 index, F32 value, BOOL set_by_user);
+	F32					getVisualParamWeight(S32 index) const;
+	LLVisualParam*		getVisualParam(S32 index) const;
+	void				getVisualParams(visualParamCluster_t &list);
+
+	LLColor4			getClothesColor(S32 te);
+	void 				setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by_user );
+
+	void				revertValues();
+
+	BOOL				isOnTop();
+
 
 private:
+	typedef std::map<S32, LLLocalTextureObject*> te_map_t;
+	typedef std::map<S32, LLVisualParam *>    VisualParamIndexMap_t;
+
+	void 				createLayers(S32 te);
+	void 				createVisualParams();
+	void				saveValues();
+	void				syncImages(te_map_t &src, te_map_t &dst);
+	void				destroyTextures();			
+
 	static S32			sCurrentDefinitionVersion;	// Depends on the current state of the avatar_lad.xml.
 	S32					mDefinitionVersion;			// Depends on the state of the avatar_lad.xml when this asset was created.
 	std::string			mName;
@@ -118,9 +149,12 @@ class LLWearable
 	EWearableType		mType;
 
 	typedef std::map<S32, F32> param_map_t;
-	param_map_t mVisualParamMap;	// maps visual param id to weight
-	typedef std::map<S32, LLLocalTextureObject> te_map_t;
+	param_map_t mSavedVisualParamMap; // last saved version of visual params
+
+	VisualParamIndexMap_t mVisualParamIndexMap;
+
 	te_map_t mTEMap;				// maps TE to LocalTextureObject
+	te_map_t mSavedTEMap;			// last saved version of TEMap
 	LLUUID				mItemID;  // ID of the inventory item in the agent's inventory
 };
 
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index 1275312676d93cfc3e3bcce17f79329768efb417..0257329dc1f808ce3d77f13e255410f340972da7 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -218,38 +218,19 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
 }
 
 
-LLWearable* LLWearableList::createCopyFromAvatar(const LLWearable* old_wearable, const std::string& new_name)
-{
-	lldebugs << "LLWearableList::createCopyFromAvatar()" << llendl;
-
-	LLWearable *wearable = generateNewWearable();
-	wearable->copyDataFrom( old_wearable );
-
-	LLPermissions perm(old_wearable->getPermissions());
-	perm.setOwnerAndGroup(LLUUID::null, gAgent.getID(), LLUUID::null, true);
-	wearable->setPermissions(perm);
-	wearable->readFromAvatar();  // update from the avatar
-   
-	if (!new_name.empty()) wearable->setName(new_name);
-
-	// Send to the dataserver
-	wearable->saveNewAsset();
-
-	return wearable;
-}
-
-
-LLWearable* LLWearableList::createCopy(const LLWearable* old_wearable)
+LLWearable* LLWearableList::createCopy(const LLWearable* old_wearable, const std::string& new_name)
 {
 	lldebugs << "LLWearableList::createCopy()" << llendl;
 
 	LLWearable *wearable = generateNewWearable();
 	wearable->copyDataFrom(old_wearable);
-	
+
 	LLPermissions perm(old_wearable->getPermissions());
 	perm.setOwnerAndGroup(LLUUID::null, gAgent.getID(), LLUUID::null, true);
 	wearable->setPermissions(perm);
 
+	if (!new_name.empty()) wearable->setName(new_name);
+
 	// Send to the dataserver
 	wearable->saveNewAsset();
 
@@ -273,7 +254,6 @@ LLWearable* LLWearableList::createNewWearable( EWearableType type )
 	wearable->setPermissions(perm);
 
 	// Description and sale info have default values.
-	
 	wearable->setParamsToDefaults();
 	wearable->setTexturesToDefaults();
 
diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h
index f844c0f44390a2448fed7e06e424d3d789787674..e5155c66a4b47ae9f5d1b4e4ecd6ae0c16891e74 100644
--- a/indra/newview/llwearablelist.h
+++ b/indra/newview/llwearablelist.h
@@ -53,8 +53,7 @@ class LLWearableList : public LLSingleton<LLWearableList>
 								 void(*asset_arrived_callback)(LLWearable*, void* userdata),
 								 void* userdata);
 
-	LLWearable*			createCopyFromAvatar(const LLWearable* old_wearable, const std::string& new_name = std::string());
-	LLWearable*			createCopy(const LLWearable* old_wearable);
+	LLWearable*			createCopy(const LLWearable* old_wearable, const std::string& new_name = std::string());
 	LLWearable*			createNewWearable(EWearableType type);
 	
 	// Callback
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index 3b6d5452e34b6661d73e5a4cdc74c3884b909d21..ba71754da84d58e785e9bde1b89f34b239335378 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -1156,21 +1156,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -1377,21 +1362,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -1524,21 +1494,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -1745,21 +1700,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -1966,21 +1906,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -2199,21 +2124,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -2420,21 +2330,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -2641,21 +2536,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -2862,21 +2742,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -3083,21 +2948,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
@@ -3385,21 +3235,6 @@ scratch and wear it.
              width="373">
                 Located in [PATH]
             </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top|right"
-             height="16"
-             increment="1"
-             initial_value="0"
-             label="Item"
-             label_width="30"
-             layout="topleft"
-             left_delta="2"
-             max_val="5"
-             name="index"
-             text_enabled_color="110, 15, 15, 255"
-             top_pad="6"
-             width="87" />
             <text
              type="string"
              length="1"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 72cbd3bcd5aff6caeb1a5cf3ff74a2fa58c65e68..04c7186b5f4b1eef0132cb2e462ed5e37b1b4733 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -610,6 +610,14 @@
          function="Inventory.DoToSelected"
          parameter="wear" />
     </menu_item_call>
+	<menu_item_call
+    label="Add"
+    layout="topleft"
+    name="Wearable Add">
+       <menu_item_call.on_click
+        function="Inventory.DoToSelected"
+        parameter="wear_add" />
+   </menu_item_call> 
     <menu_item_call
      label="Take Off"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
new file mode 100644
index 0000000000000000000000000000000000000000..40647e1b81cffa942c34d4549bcf2406b4d2b10e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_alpha_panel"
+	 top_pad="10"
+	 width="313" >
+   <panel
+      border="true"
+      follows="left|top|right" 
+      height="180" 
+      left="10" 
+      layout="topleft" 
+      name="avatar_alpha_color_panel"
+      top="0"
+      width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Lower Alpha"
+        layout="topleft"
+        left="10"
+        name="Lower Alpha"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <check_box
+        control_name="LowerAlphaTextureInvisible"
+        follows="left"
+        height="16"
+        layout="topleft"
+        left_pad="6"
+        name="lower alpha texture invisible"
+        top_delta="4"
+        width="16" />
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Upper Alpha"
+        layout="topleft"
+        left_pad="10"
+        name="Upper Alpha"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <check_box
+        control_name="UpperAlphaTextureInvisible"
+        follows="left"
+        height="16"
+        layout="topleft"
+        left_pad="6"
+        name="upper alpha texture invisible"
+        top_delta="4"
+        width="16" />
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Head Alpha"
+        layout="topleft"
+        left_pad="10"
+        name="Head Alpha"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <check_box
+        control_name="HeadAlphaTextureInvisible"
+        follows="left"
+        height="16"
+        layout="topleft"
+        left_pad="6"
+        name="head alpha texture invisible"
+        top_delta="4"
+        width="16" />
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Eye Alpha"
+        layout="topleft"
+        left="10"
+        name="Eye Alpha"
+        tool_tip="Click to choose a picture"
+        top="100"
+        width="64" />
+       <check_box
+        control_name="Eye AlphaTextureInvisible"
+        follows="left"
+        height="16"
+        layout="topleft"
+        left_pad="6"
+        name="eye alpha texture invisible"
+        top_delta="4"
+        width="16" />
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Hair Alpha"
+        layout="topleft"
+        left_pad="10"
+        name="Hair Alpha"
+        tool_tip="Click to choose a picture"
+        top_delta="-4"
+        width="64" />
+       <check_box
+        control_name="HairAlphaTextureInvisible"
+        follows="left"
+        height="16"
+        layout="topleft"
+        left_pad="6"
+        name="hair alpha texture invisible"
+        top_delta="4"
+        width="16" />
+	 </panel>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9789da579606e77a1b8357ac2da099024d40ebea
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_eyes_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_eye_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+             can_apply_immediately="true"
+             default_image_name="Default"
+             follows="left|top"
+             height="80"
+             label="Iris"
+             layout="topleft"
+             left="8"
+             name="Iris"
+             tool_tip="Click to choose a picture"
+             top_pad="10"
+             width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="eyes_main_tab"
+			title="Eyes">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="eyes_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e88c82d4061da08d7db3485b91bcb4c104ff809c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_gloves_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_gloves_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Fabric"
+        layout="topleft"
+        left="10"
+        name="Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="gloves_main_tab"
+			title="Gloves">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="gloves_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_hair.xml b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d2ee2ebf2af3d4f9205199b1c5dce0568498d358
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_hair_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_hair_color_panel"
+	  top="0"
+	  width="293" > 
+            <texture_picker
+             can_apply_immediately="true"
+             default_image_name="Default"
+             follows="left|top"
+             height="80"
+             label="Texture"
+             layout="topleft"
+             left="8"
+             name="Texture"
+             tool_tip="Click to choose a picture"
+             top="10"
+             width="64" />
+	 </panel>
+   <accordion 
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="hair_color_tab"
+			title="Color">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="hair_color_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="hair_style_tab"
+			title="Style">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="hair_style_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="hair_eyebrows_tab"
+			title="Eyebrows">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="hair_eyebrows_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="hair_facial_tab"
+			title="Facial">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="hair_facial_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
new file mode 100644
index 0000000000000000000000000000000000000000..70dab20351cde38680748acd8013c283d4d6b140
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_jacket_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_jacket_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Upper Fabric"
+        layout="topleft"
+        left="10"
+        name="Upper Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Lower Fabric"
+        layout="topleft"
+        left_pad="10"
+        name="Lower Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="jacket_main_tab"
+			title="Jacket">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="jacket_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0748757c708f56508cd164bd728bbda252120cbd
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_pants_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_pants_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Fabric"
+        layout="topleft"
+        left="10"
+        name="Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="pants_main_tab"
+			title="Pants">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="pants_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a9dfcb82d69097fd28289ffd54d21e8d6d3f1db9
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_shape_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+		 border="true"
+		 follows="top|left"
+		 height="50"
+		 left="10"
+		 layout="topleft"
+		 name="avatar_sex_panel"
+		 top="10"
+		 width="293" >
+   			<text 
+			 follows="top|left"
+			 height="16"
+			 layout="topleft"
+			 left="10"
+			 name="gender_text"
+			 width="303">
+				Gender:
+			</text>
+		   <radio_group
+			 follows="all"
+			 left="10"
+             height="34"
+             layout="topleft"
+             name="sex_radio"
+			 top_pad="3"
+			 width="200" >
+                <radio_item
+					follows="all"
+                 height="16"
+                 label="Female"
+                 layout="topleft"
+                 left="10"
+                 name="radio"
+                 width="82" />
+                <radio_item
+					follows="all"
+                 height="16"
+                 label="Male"
+                 layout="topleft"
+                 left_pad="10"
+                 name="radio2"
+                 width="82" />
+            </radio_group>
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="330"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_body_tab"
+			title="Body">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_body_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_head_tab"
+			title="Head">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_head_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_eyes_tab"
+			title="Eyes">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_eyes_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_ears_tab"
+			title="Ears">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_ears_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_nose_tab"
+			title="Nose">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_nose_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_mouth_tab"
+			title="Mouth">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_mouth_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_chin_tab"
+			title="Chin">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_chin_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_torso_tab"
+			title="Torso">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_torso_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shape_legs_tab"
+			title="Legs">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shape_legs_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
new file mode 100644
index 0000000000000000000000000000000000000000..140b5c5f946c2915b0f2bbea707ffdfa39ece3bc
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_shirt_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_shirt_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Fabric"
+        layout="topleft"
+        left="10"
+        name="Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shirt_main_tab"
+			title="Shirt">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shirt_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01f2c428f18b0a2f621ce665acc270a6c3bfde3f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_shoes_panel"
+	 top_pad="10"
+	 width="313" >
+   <panel
+      border="true"
+      follows="left|top|right" 
+      height="100" 
+      left="10" 
+      layout="topleft" 
+      name="avatar_shoes_color_panel"
+      top="0"
+      width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Fabric"
+        layout="topleft"
+        left="10"
+        name="Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="shoes_main_tab"
+			title="Shoes">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="shoes_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a00277f43296a80610e10847c853f5bf5405db6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_skin_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_skin_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        allow_no_texture="true"
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Head Tattoos"
+        layout="topleft"
+        left="10"
+        name="Head Tattoos"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="74" />
+       <texture_picker
+        allow_no_texture="true"
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Upper Tattoos"
+        layout="topleft"
+        left_pad="10"
+        name="Upper Tattoos"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="74" />
+       <texture_picker
+        allow_no_texture="true"
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Lower Tattoos"
+        layout="topleft"
+        left_pad="10"
+        name="Lower Tattoos"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="74" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="skin_color_tab"
+			title="Skin Color">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="skin_color_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="skin_face_tab"
+			title="Face Detail">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="skin_face_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="skin_makeup_tab"
+			title="Makeup">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="skin_makeup_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="skin_body_tab"
+			title="Body Detail">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="skin_body_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c04276525ab06ce186d4ecdb7415d6300ee3a207
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_skirt_panel"
+	 top_pad="10"
+	 width="313" >
+   <panel
+      border="true"
+      follows="left|top|right" 
+      height="100" 
+      left="10" 
+      layout="topleft" 
+      name="avatar_skirt_color_panel"
+      top="0"
+      width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Fabric"
+        layout="topleft"
+        left="10"
+        name="Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="skirt_main_tab"
+			title="Skirt">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="skirt_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7c95ac637de241816bdb4571983c42d641b1c393
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_socks_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_socks_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Fabric"
+        layout="topleft"
+        left="10"
+        name="Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="socks_main_tab"
+			title="Socks">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="socks_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b214cd3de07cd8420415263d305e4b0d00f3b986
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_tattoo_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_tattoo_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Head Tattoo"
+        layout="topleft"
+        left="10"
+        name="Head Tattoo"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Upper Tattoo"
+        layout="topleft"
+        left_pad="10"
+        name="Upper Tattoo"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Lower Tattoo"
+        layout="topleft"
+        left_pad="10"
+        name="Lower Tattoo"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+	 </panel>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5fe1c2caef749c8494d5420eacd40f5332f6cb20
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_underpants_panel"
+	 top_pad="10"
+	 width="313" >
+   <panel
+      border="true"
+      follows="left|top|right" 
+      height="100" 
+      left="10" 
+      layout="topleft" 
+      name="avatar_underpants_color_panel"
+      top="0"
+      width="293" >
+            <texture_picker
+             can_apply_immediately="true"
+             default_image_name="Default"
+             follows="left|top"
+             height="80"
+             label="Fabric"
+             layout="topleft"
+             left="10"
+             name="Fabric"
+             tool_tip="Click to choose a picture"
+             top="10"
+             width="64" />
+            <color_swatch
+             border_color="0.45098 0.517647 0.607843 1"
+             can_apply_immediately="true"
+             follows="left|top"
+             height="80"
+             label="Color/Tint"
+             layout="topleft"
+             left_pad="10"
+             name="Color/Tint"
+             tool_tip="Click to open Color Picker"
+             top="10"
+             width="64" />
+	 </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="underpants_main_tab"
+			title="Underpants">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="underpants_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
new file mode 100644
index 0000000000000000000000000000000000000000..097cb14ee6c81710c2a1f9de214c137b54efc8c4
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="10"
+	 name="edit_undershirt_panel"
+	 top_pad="10"
+	 width="313" >
+	 <panel
+	  border="true"
+	  follows="left|top|right" 
+	  height="100" 
+	  left="10" 
+	  layout="topleft" 
+	  name="avatar_undershirt_color_panel"
+	  top="0"
+	  width="293" >
+       <texture_picker
+        can_apply_immediately="true"
+        default_image_name="Default"
+        follows="left|top"
+        height="80"
+        label="Fabric"
+        layout="topleft"
+        left="10"
+        name="Fabric"
+        tool_tip="Click to choose a picture"
+        top="10"
+        width="64" />
+       <color_swatch
+        border_color="0.45098 0.517647 0.607843 1"
+        can_apply_immediately="true"
+        follows="left|top"
+        height="80"
+        label="Color/Tint"
+        layout="topleft"
+        left_pad="10"
+        name="Color/Tint"
+        tool_tip="Click to open Color Picker"
+        top="10"
+        width="64" />
+       </panel>
+	 <accordion
+		follows="left|top|right|bottom"
+		height ="340"
+		left="10"
+		name="wearable_accordion"
+		top_pad="10"
+		width="303">
+		<accordion_tab
+			can_resize="false"
+			layout="topleft"
+			min_height="150"
+			name="undershirt_main_tab"
+			title="Undershirt">
+			<scrolling_panel_list
+				draw_heading="false"
+				follows="all"
+				left="0"
+				name="undershirt_main_param_list"
+				top="0"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
new file mode 100644
index 0000000000000000000000000000000000000000..77b887de9ba6b49b0a43d4fcd7c1b7fb0c291db6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+	bevel_style="in"
+ follows="all"
+ height="570"
+ label="Wearable"
+ layout="topleft"
+left="0"
+ name="panel_edit_wearable"
+	top="0"
+ width="333">
+	<string
+		name="edit_shape_title">
+		Editing Shape
+	</string>
+	<string
+		name="edit_skin_title">
+		Editing Skin
+	</string>
+	<string
+		name="edit_hair_title">
+		Editing Hair
+	</string>
+	<string
+		name="edit_eyes_title">
+		Editing Eyes
+	</string>
+	<string
+		name="edit_shirt_title">
+		Editing Shirt
+	</string>
+	<string
+		name="edit_pants_title">
+		Editing Pants
+	</string>
+	<string
+		name="edit_shoes_title">
+		Editing Shoes
+	</string>
+	<string
+		name="edit_socks_title">
+		Editing Socks
+	</string>
+	<string
+		name="edit_jacket_title">
+		Editing Jacket
+	</string>
+	<string
+		name="edit_skirt_title">
+		Editing Skirt
+	</string>
+	<string
+		name="edit_gloves_title">
+		Editing Gloves
+	</string>
+	<string
+		name="edit_undershirt_title">
+		Editing Undershirt
+	</string>
+	<string
+		name="edit_underpants_title">
+		Editing Underpants
+	</string>
+	<string
+		name="edit_alpha_title">
+		Editing Alpha Mask
+	</string>
+	<string
+		name="edit_tattoo_title">
+		Editing Tattoo
+	</string>
+	<string
+		name="shape_desc_text">
+		Shape:
+	</string>
+	<string
+		name="skin_desc_text">
+		Skin:
+	</string>
+	<string
+		name="hair_desc_text">
+		Hair:
+	</string>
+	<string
+		name="eyes_desc_text">
+		Eyes:
+	</string>
+	<string
+		name="shirt_desc_text">
+		Shirt:
+	</string>
+	<string
+		name="pants_desc_text">
+		Pants:
+	</string>
+	<string
+		name="shoes_desc_text">
+		Shoes:
+	</string>
+	<string
+		name="socks_desc_text">
+		Socks:
+	</string>
+	<string
+		name="jacket_desc_text">
+		Jacket:
+	</string>
+	<string
+		name="skirt_skirt_desc_text">
+		Skirt:
+	</string>
+	<string
+		name="gloves_desc_text">
+		Gloves:
+	</string>
+	<string
+		name="undershirt_desc_text">
+		Undershirt:
+	</string>
+	<string
+		name="underpants_desc_text">
+		Underpants:
+	</string>
+	<string
+		name="alpha_desc_text">
+		Alpha Mask:
+	</string>
+	<string
+		name="tattoo_desc_text">
+		Tattoo:
+	</string>
+    <button
+     follows="top|left"
+     height="25"
+     width="25"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     name="back_btn"
+     picture_style="true"
+     left="10"
+     top="7" />
+	<text
+	 follows="top|left"
+	 font="SansSerifHugeBold"
+	 height="22"
+	 layout="topleft"
+	 left_pad="15"
+	 name="edit_wearable_title"
+	 text_color="white"
+	 value="Editing Shape"
+	 width="270" />
+     <panel
+         border="true"
+         follows="top|left"
+         height="60"
+         label="Shirt"
+         layout="topleft"
+		 left="10"
+         name="wearable_type_panel"
+		 top_pad="10"
+         width="313">
+		 <text
+		 follows="top|left"
+		 height="16"
+		 layout="topleft"
+		 left="10"
+		 name="description_text"
+		 value="Shape:"
+		 width="303" />
+		 <text_editor
+			 follows="all"
+			 height="23"
+			 left="10"
+			 layout="topleft"
+			 max_length="300"
+			 name="description"
+			 width="290" />
+	 </panel>
+	 <panel
+		 follows="all"
+		 height="400"
+		 layout="topleft"
+		 left="0"
+		 name="edit_subpanel_container"
+		 top_pad="10"
+		 width="333">
+		 <panel
+			 filename="panel_edit_shape.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_shape_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_skin.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_skin_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_hair.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_hair_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_eyes.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_eyes_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_shirt.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_shirt_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_pants.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_pants_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_shoes.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_shoes_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_socks.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_socks_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_jacket.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_jacket_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_skirt.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_skirt_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_gloves.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_gloves_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_undershirt.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_undershirt_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_underpants.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_underpants_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_alpha.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_alpha_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+		 <panel
+			 filename="panel_edit_tattoo.xml"
+			 follows="all"
+			 height="400"
+			 layout="topleft"
+			 left="0"
+			 name="edit_tattoo_panel"
+			 top="0"
+			 visible="false"
+			 width="333" />
+	 </panel>
+	 <panel
+		 follows="all"
+		 height="25"
+		 layout="bottom|left|right"
+		 left="0"
+		 name="button_panel"
+		 top_pad="10"
+		 width="333" >
+		 <button
+			 follows="bottomleft"
+			 layout="topleft"
+			 height="23"
+			 label="Save As"
+			 left="10"
+			 name="save_as_button"
+			 top="0"
+			 width="100" />
+		 <button
+			 follows="bottomleft"
+			 layout="topleft"
+			 height="23"
+			 label="Revert"
+			 left_pad="10"
+			 name="revert_button"
+			 width="100" />
+	 </panel>
+</panel>