diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 2f662b757b7a6c01e8c573287606d1c9414ba7e0..c4be1763535aa8fcccadb86fcac35e1ff4adcdd2 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -4179,7 +4179,6 @@ S32 LLVolume::getNumTriangles() const
 //-----------------------------------------------------------------------------
 void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
 										  std::vector<LLVector3> &normals,
-										  std::vector<S32> &segments,
 										  const LLVector3& obj_cam_vec_in,
 										  const LLMatrix4& mat_in,
 										  const LLMatrix3& norm_mat_in,
@@ -4198,7 +4197,6 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
 
 	vertices.clear();
 	normals.clear();
-	segments.clear();
 
 	if ((mParams.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH)
 	{
@@ -4399,8 +4397,6 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
 						norm_mat.rotate(n[v2], t);
 						t.normalize3fast();
 						normals.push_back(LLVector3(t[0], t[1], t[2]));
-
-						segments.push_back(vertices.size());
 					}
 				}		
 			}
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index 5bd65c2bf2cf94717e1e6ac1d6add0c36270b2f5..60b64b1285426f6921b37a7f2221490882dbda94 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -986,7 +986,6 @@ class LLVolume : public LLRefCount
 
 	void generateSilhouetteVertices(std::vector<LLVector3> &vertices, 
 									std::vector<LLVector3> &normals, 
-									std::vector<S32> &segments, 
 									const LLVector3& view_vec,
 									const LLMatrix4& mat,
 									const LLMatrix3& norm_mat,
diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
index eef6556fba41be835e81b053ebe3509d9fc9a146..ef823c28b1c48693e7e8151fefe8baade88988cf 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
@@ -9,7 +9,7 @@
 
 attribute vec4 object_weight;  
 
-uniform mat4 matrixPalette[64];
+uniform mat4 matrixPalette[32];
 
 mat4 getObjectSkinnedTransform()
 {
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp
index f209950cfa4cee9a4ca41d25dd808b73724c92b5..8c0ed298551cdb32294b472fd98a668a21516930 100644
--- a/indra/newview/llfilepicker.cpp
+++ b/indra/newview/llfilepicker.cpp
@@ -420,9 +420,9 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename)
 		{
 			wcsncpy( mFilesW,L"untitled.jpeg", FILENAME_BUFFER_SIZE);	/*Flawfinder: ignore*/
 		}
-		mOFN.lpstrDefExt = L"jpeg";
+		mOFN.lpstrDefExt = L"jpg";
 		mOFN.lpstrFilter =
-			L"JPEG Images (*.jpeg)\0*.jpeg\0" \
+			L"JPEG Images (*.jpg *.jpeg)\0*.jpg;*.jpeg\0" \
 			L"\0";
 		break;
 	case FFSAVE_AVI:
diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp
index b3b7645dd4f2f07f6576c809fc0ef10cd413eb59..ada0dcf5691f008529761f3ae567e8ce0fe5b257 100644
--- a/indra/newview/llfloaterregiondebugconsole.cpp
+++ b/indra/newview/llfloaterregiondebugconsole.cpp
@@ -3,31 +3,25 @@
  * @author Brad Kittenbrink <brad@lindenlab.com>
  * @brief Quick and dirty console for region debug settings
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010-2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * 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
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * 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
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index c9b99d83fff0ead06e701035da836db1fd69a4a6..f5e3d160fcc9b0249ef9af2fe8472ea8bb64805c 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -451,8 +451,7 @@ void LLFloaterTools::refresh()
 	if (sShowObjectCost)
 	{
 		std::string prim_cost_string;
-		S32 cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost();
-		LLResMgr::getInstance()->getIntegerString(prim_cost_string, cost);
+  		LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost());
 		getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string);
 	}
 
@@ -1010,6 +1009,35 @@ void LLFloaterTools::onClickGridOptions()
 	//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE);
 }
 
+S32 LLFloaterTools::calcRenderCost()
+{
+       S32 cost = 0;
+       std::set<LLUUID> textures;
+
+       for (LLObjectSelection::iterator selection_iter = LLSelectMgr::getInstance()->getSelection()->begin();
+                 selection_iter != LLSelectMgr::getInstance()->getSelection()->end();
+                 ++selection_iter)
+       {
+               LLSelectNode *select_node = *selection_iter;
+               if (select_node)
+               {
+                       LLViewerObject *vobj = select_node->getObject();
+                       if (vobj->getVolume())
+                       {
+                               LLVOVolume* volume = (LLVOVolume*) vobj;
+
+                               cost += volume->getRenderCost(textures);
+							   cost += textures.size() * LLVOVolume::ARC_TEXTURE_COST;
+							   textures.clear();
+                       }
+               }
+       }
+
+
+       return cost;
+}
+
+
 // static
 void LLFloaterTools::setEditTool(void* tool_pointer)
 {
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index d5595445e0311db3cbaf47a426c972376afdf32e..87c3d2ab47c71c39c48bcdcc38fedd35655f1233 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -114,6 +114,7 @@ class LLFloaterTools
 	static bool multipleFacesSelectedConfirm(const LLSD& notification, const LLSD& response);
 	static void setObjectType( LLPCode pcode );
 	void onClickGridOptions();
+	S32 calcRenderCost();
 
 public:
 	LLButton		*mBtnFocus;
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index 43a16f8ed830a0b46b846023a4fdae697944eba0..f1c7e952d17bc76236a6fd2b480206c71b020566 100644
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -901,32 +901,32 @@ void LLManipRotate::renderSnapGuides()
 					{
 						if (i == 0)
 						{
-							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Forward") : LLTrans::getString("East"), LLColor4::white);
+							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Forward") : LLTrans::getString("Direction_East"), LLColor4::white);
 						}
 						else if (i == 16)
 						{
 							if (constraint_axis.mV[VZ] > 0.f)
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Left") : LLTrans::getString("North"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Left") : LLTrans::getString("Direction_North"), LLColor4::white);
 							}
 							else
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Right") : LLTrans::getString("South"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Right") : LLTrans::getString("Direction_South"), LLColor4::white);
 							}
 						}
 						else if (i == 32)
 						{
-							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Back") : LLTrans::getString("West"), LLColor4::white);
+							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Back") : LLTrans::getString("Direction_West"), LLColor4::white);
 						}
 						else
 						{
 							if (constraint_axis.mV[VZ] > 0.f)
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Right") : LLTrans::getString("South"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Right") : LLTrans::getString("Direction_South"), LLColor4::white);
 							}
 							else
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Left") : LLTrans::getString("North"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Left") : LLTrans::getString("Direction_North"), LLColor4::white);
 							}
 						}
 					}
@@ -934,32 +934,32 @@ void LLManipRotate::renderSnapGuides()
 					{
 						if (i == 0)
 						{
-							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Left") : LLTrans::getString("North"), LLColor4::white);
+							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Left") : LLTrans::getString("Direction_North"), LLColor4::white);
 						}
 						else if (i == 16)
 						{
 							if (constraint_axis.mV[VX] > 0.f)
 							{
-								renderTickText(text_point, LLTrans::getString("Up"), LLColor4::white);
+								renderTickText(text_point, LLTrans::getString("Direction_Up"), LLColor4::white);
 							}
 							else
 							{
-								renderTickText(text_point, LLTrans::getString("Down"), LLColor4::white);
+								renderTickText(text_point, LLTrans::getString("Direction_Down"), LLColor4::white);
 							}
 						}
 						else if (i == 32)
 						{
-							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Right") : LLTrans::getString("South"), LLColor4::white);
+							renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Right") : LLTrans::getString("Direction_South"), LLColor4::white);
 						}
 						else
 						{
 							if (constraint_axis.mV[VX] > 0.f)
 							{
-								renderTickText(text_point, LLTrans::getString("Down"), LLColor4::white);
+								renderTickText(text_point, LLTrans::getString("Direction_Down"), LLColor4::white);
 							}
 							else
 							{
-								renderTickText(text_point, LLTrans::getString("Up"), LLColor4::white);
+								renderTickText(text_point, LLTrans::getString("Direction_Up"), LLColor4::white);
 							}
 						}
 					}
@@ -967,32 +967,32 @@ void LLManipRotate::renderSnapGuides()
 					{
 						if (i == 0)
 						{
-							renderTickText(text_point, LLTrans::getString("Up"), LLColor4::white);
+							renderTickText(text_point, LLTrans::getString("Direction_Up"), LLColor4::white);
 						}
 						else if (i == 16)
 						{
 							if (constraint_axis.mV[VY] > 0.f)
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Forward") : LLTrans::getString("East"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Forward") : LLTrans::getString("Direction_East"), LLColor4::white);
 							}
 							else
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Back") : LLTrans::getString("West"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Back") : LLTrans::getString("Direction_West"), LLColor4::white);
 							}
 						}
 						else if (i == 32)
 						{
-							renderTickText(text_point, LLTrans::getString("Down"), LLColor4::white);
+							renderTickText(text_point, LLTrans::getString("Direction_Down"), LLColor4::white);
 						}
 						else
 						{
 							if (constraint_axis.mV[VY] > 0.f)
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Back") : LLTrans::getString("West"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Back") : LLTrans::getString("Direction_West"), LLColor4::white);
 							}
 							else
 							{
-								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Forward") : LLTrans::getString("East"), LLColor4::white);
+								renderTickText(text_point, mObjectSelection->isAttachment() ? LLTrans::getString("Direction_Forward") : LLTrans::getString("Direction_East"), LLColor4::white);
 							}
 						}
 					}
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 8ffbd5510d907689e78733a49446898fc34130c5..746ba274ed9571dcd77596b88db4be505d1f3b4c 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -5204,7 +5204,6 @@ LLSelectNode::LLSelectNode(const LLSelectNode& nodep)
 
 	mSilhouetteVertices = nodep.mSilhouetteVertices;
 	mSilhouetteNormals = nodep.mSilhouetteNormals;
-	mSilhouetteSegments = nodep.mSilhouetteSegments;
 	mSilhouetteExists = nodep.mSilhouetteExists;
 	mObject = nodep.mObject;
 
@@ -5628,17 +5627,15 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
 			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 			gGL.begin(LLRender::LINES);
 			{
-				S32 i = 0;
-				for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++)
+				for(S32 i = 0; i < mSilhouetteVertices.size(); i += 2)
 				{
-					for(; i < mSilhouetteSegments[seg_num]; i++)
-					{
-						u_coord += u_divisor * LLSelectMgr::sHighlightUScale;
-
-						gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f);
-						gGL.texCoord2f( u_coord, v_coord );
-						gGL.vertex3fv( mSilhouetteVertices[i].mV );
-					}
+					u_coord += u_divisor * LLSelectMgr::sHighlightUScale;
+					gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f);
+					gGL.texCoord2f( u_coord, v_coord );
+					gGL.vertex3fv( mSilhouetteVertices[i].mV);
+					u_coord += u_divisor * LLSelectMgr::sHighlightUScale;
+					gGL.texCoord2f( u_coord, v_coord );
+					gGL.vertex3fv(mSilhouetteVertices[i+1].mV);
 				}
 			}
             gGL.end();
@@ -5649,51 +5646,50 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
 		gGL.setSceneBlendType(LLRender::BT_ALPHA);
 		gGL.begin(LLRender::TRIANGLES);
 		{
-			S32 i = 0;
-			for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++)
+			for(S32 i = 0; i < mSilhouetteVertices.size(); i+=2)
 			{
-				S32 first_i = i;
-				LLVector3 v;
-				LLVector2 t;
+				if (!mSilhouetteNormals[i].isFinite() ||
+					!mSilhouetteNormals[i+1].isFinite())
+				{ //skip skewed segments
+					continue;
+				}
 
-				for(; i < mSilhouetteSegments[seg_num]; i++)
-				{
+				LLVector3 v[4];
+				LLVector2 tc[4];
+				v[0] = mSilhouetteVertices[i] + (mSilhouetteNormals[i] * silhouette_thickness);
+				tc[0].set(u_coord, v_coord + LLSelectMgr::sHighlightVScale);
 
-					if (i == first_i) {
-					    LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness;
-						vert += mSilhouetteVertices[i];
+				v[1] = mSilhouetteVertices[i];
+				tc[1].set(u_coord, v_coord);
 
-						gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha);
-						gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale );
-						gGL.vertex3fv( vert.mV ); 
-						
-						u_coord += u_divisor * LLSelectMgr::sHighlightUScale;
+				u_coord += u_divisor * LLSelectMgr::sHighlightUScale;
 
-						gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2);
-						gGL.texCoord2f( u_coord, v_coord );
-						gGL.vertex3fv( mSilhouetteVertices[i].mV );
+				v[2] = mSilhouetteVertices[i+1] + (mSilhouetteNormals[i+1] * silhouette_thickness);
+				tc[2].set(u_coord, v_coord + LLSelectMgr::sHighlightVScale);
+				
+				v[3] = mSilhouetteVertices[i+1];
+				tc[3].set(u_coord,v_coord);
 
-						v = mSilhouetteVertices[i];
-						t = LLVector2(u_coord, v_coord);
-					}
-					else {
-                        LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness;
-						vert += mSilhouetteVertices[i];
-
-						gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha);
-						gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale );
-						gGL.vertex3fv( vert.mV ); 
-						gGL.vertex3fv( vert.mV ); 
-						
-						gGL.texCoord2fv(t.mV);
-						u_coord += u_divisor * LLSelectMgr::sHighlightUScale;
-						gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2);
-						gGL.vertex3fv(v.mV);
-						gGL.texCoord2f( u_coord, v_coord );
-						gGL.vertex3fv( mSilhouetteVertices[i].mV );
+				gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha);
+				gGL.texCoord2fv(tc[0].mV);
+				gGL.vertex3fv( v[0].mV ); 
+				
+				gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2);
+				gGL.texCoord2fv( tc[1].mV );
+				gGL.vertex3fv( v[1].mV );
 
-					}
-				}
+				gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha);
+				gGL.texCoord2fv( tc[2].mV );
+				gGL.vertex3fv( v[2].mV );
+
+				gGL.vertex3fv( v[2].mV );
+
+				gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2);
+				gGL.texCoord2fv( tc[1].mV );
+				gGL.vertex3fv( v[1].mV );
+
+				gGL.texCoord2fv( tc[3].mV );
+				gGL.vertex3fv( v[3].mV );			
 			}
 		}
 		gGL.end();
@@ -6395,7 +6391,7 @@ U32 LLObjectSelection::getSelectedObjectTriangleCount()
 	return count;
 }
 
-S32 LLObjectSelection::getSelectedObjectRenderCost()
+/*S32 LLObjectSelection::getSelectedObjectRenderCost()
 {
        S32 cost = 0;
        LLVOVolume::texture_cost_t textures;
@@ -6419,7 +6415,7 @@ S32 LLObjectSelection::getSelectedObjectRenderCost()
 
 
        return cost;
-}
+}*/
 
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index 85d8d3212d9a74112fc1e461bfd91e5dad7d8a1c..1b354f983a58e3aaad476687febc0e9c47727a1c 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -182,7 +182,6 @@ class LLSelectNode
 	std::vector<LLVector3>  mTextureScaleRatios;
 	std::vector<LLVector3>	mSilhouetteVertices;	// array of vertices to render silhouette of object
 	std::vector<LLVector3>	mSilhouetteNormals;	// array of normals to render silhouette of object
-	std::vector<S32>		mSilhouetteSegments;	// array of normals to render silhouette of object
 	BOOL					mSilhouetteExists;	// need to generate silhouette?
 
 protected:
diff --git a/indra/newview/llsimplestat.h b/indra/newview/llsimplestat.h
index a90e503adba7a429dd484ddf5eb13bce23e17d72..9d7780c4f935e8c89c08384839896ed4fd581838 100644
--- a/indra/newview/llsimplestat.h
+++ b/indra/newview/llsimplestat.h
@@ -2,31 +2,25 @@
  * @file llsimplestat.h
  * @brief Runtime statistics accumulation.
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * 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
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * 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
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index f7159ae32420e36e45c9cfed1608d9524e966e77..011aa47e3101e812c7e4ddc99403db7525aaf276 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -2,27 +2,27 @@
 * @file lltranslate.cpp
 * @brief Functions for translating text via Google Translate.
 *
-* $LicenseInfo:firstyear=2009&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-* 
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
 
 #include "llviewerprecompiledheaders.h"
 
diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h
index 2426bb71b6218dbdb7aa6f2625bf91b568c75707..e85a42e878d3116206c0cfc278d7497a8bc9904e 100644
--- a/indra/newview/lltranslate.h
+++ b/indra/newview/lltranslate.h
@@ -2,27 +2,27 @@
 * @file lltranslate.h
 * @brief Human language translation class and JSON response receiver.
 *
-* $LicenseInfo:firstyear=2009&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-* 
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-* $/LicenseInfo$
-*/
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
 
 #ifndef LL_LLTRANSLATE_H
 #define LL_LLTRANSLATE_H
diff --git a/indra/newview/llviewerassetstats.cpp b/indra/newview/llviewerassetstats.cpp
index 9d983022103b28d2072d57518eefdae2e610d49f..e621cf647ef777f1354e43fb0dceb9854c7a5304 100644
--- a/indra/newview/llviewerassetstats.cpp
+++ b/indra/newview/llviewerassetstats.cpp
@@ -2,31 +2,25 @@
  * @file llviewerassetstats.cpp
  * @brief 
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * 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
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * 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
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/llviewerassetstats.h b/indra/newview/llviewerassetstats.h
index 905ceefad511a45850b78315c12512a2b1e4614b..73ec5974b296928b227a890c3ff2b69bb8a59c46 100644
--- a/indra/newview/llviewerassetstats.h
+++ b/indra/newview/llviewerassetstats.h
@@ -2,31 +2,25 @@
  * @file llviewerassetstats.h
  * @brief Client-side collection of asset request statistics
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * 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
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * 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
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index dd6f7011a1ffa3a5b09265ab8a26e6e7099ac91a..ec264b1f075586764317c911c25ca63fc6742670 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -8241,7 +8241,7 @@ void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& d
 
 void LLVOAvatar::idleUpdateRenderCost()
 {
-	static const U32 ARC_BODY_PART_COST = 200;
+	static const U32 ARC_BODY_PART_COST = 20;
 	static const U32 ARC_LIMIT = 2048;
 
 	static std::set<LLUUID> all_textures;
@@ -8252,7 +8252,7 @@ void LLVOAvatar::idleUpdateRenderCost()
 	}
 
 	U32 cost = 0;
-	LLVOVolume::texture_cost_t textures;
+	std::set<LLUUID> textures;
 
 	for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++)
 	{
@@ -8293,21 +8293,15 @@ void LLVOAvatar::idleUpdateRenderCost()
 
 	}
 
-	for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter)
-	{
-		// add the cost of each individual texture in the linkset
-		cost += iter->second;
-	}
-
 	// Diagnostic output to identify all avatar-related textures.
 	// Does not affect rendering cost calculation.
 	// Could be wrapped in a debug option if output becomes problematic.
 	if (isSelf())
 	{
 		// print any attachment textures we didn't already know about.
-		for (LLVOVolume::texture_cost_t::iterator it = textures.begin(); it != textures.end(); ++it)
+		for (std::set<LLUUID>::iterator it = textures.begin(); it != textures.end(); ++it)
 		{
-			LLUUID image_id = it->first;
+			LLUUID image_id = *it;
 			if( image_id.isNull() || image_id == IMG_DEFAULT || image_id == IMG_DEFAULT_AVATAR)
 				continue;
 			if (all_textures.find(image_id) == all_textures.end())
@@ -8339,6 +8333,8 @@ void LLVOAvatar::idleUpdateRenderCost()
 		}
 	}
 
+	cost += textures.size() * LLVOVolume::ARC_TEXTURE_COST;
+
 	setDebugText(llformat("%d", cost));
 	F32 green = 1.f-llclamp(((F32) cost-(F32)ARC_LIMIT)/(F32)ARC_LIMIT, 0.f, 1.f);
 	F32 red = llmin((F32) cost/(F32)ARC_LIMIT, 1.f);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 55e68d61f9c1b8eab831b14b9a93e9d942e46e00..be987a23108b711b3c4eddddabb5b1e4e519aa12 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -2874,7 +2874,7 @@ void LLVOVolume::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_p
 			trans_mat.translate(getRegion()->getOriginAgent());
 		}
 
-		volume->generateSilhouetteVertices(nodep->mSilhouetteVertices, nodep->mSilhouetteNormals, nodep->mSilhouetteSegments, view_vector, trans_mat, mRelativeXformInvTrans, nodep->getTESelectMask());
+		volume->generateSilhouetteVertices(nodep->mSilhouetteVertices, nodep->mSilhouetteNormals, view_vector, trans_mat, mRelativeXformInvTrans, nodep->getTESelectMask());
 
 		nodep->mSilhouetteExists = TRUE;
 	}
@@ -2931,39 +2931,17 @@ const LLMatrix4 LLVOVolume::getRenderMatrix() const
 // total cost is returned value + 5 * size of the resulting set.
 // Cannot include cost of textures, as they may be re-used in linked
 // children, and cost should only be increased for unique textures  -Nyx
-U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
+U32 LLVOVolume::getRenderCost(std::set<LLUUID> &textures) const
 {
 	// base cost of each prim should be 10 points
 	static const U32 ARC_PRIM_COST = 10;
-
-	// Get access to params we'll need at various points.  
-	// Skip if this is object doesn't have a volume (e.g. is an avatar).
-	const BOOL has_volume = (getVolume() != NULL);
-	LLVolumeParams volume_params;
-	LLPathParams path_params;
-	LLProfileParams profile_params;
-
-	if (has_volume)
-	{
-		volume_params = getVolume()->getParams();
-		path_params = volume_params.getPathParams();
-		profile_params = volume_params.getProfileParams();
-	}
-	
 	// per-prim costs
 	static const U32 ARC_INVISI_COST = 1;
-	static const U32 ARC_PARTICLE_COST = 100;
-	static const U32 ARC_CUT_COST = 1;
-	static const U32 ARC_TEXTURE_COST = 5;
-
-	// per-prim multipliers
-	static const U32 ARC_HOLLOW_MULT = 2;
-	static const U32 ARC_CIRC_PROF_MULT = 2;
-	static const U32 ARC_CIRC_PATH_MULT = 2;
-	static const U32 ARC_GLOW_MULT = 2;
-	static const U32 ARC_BUMP_MULT = 2;
-	static const U32 ARC_FLEXI_MULT = 4;
-	static const U32 ARC_SHINY_MULT = 2;
+	static const U32 ARC_SHINY_COST = 1;
+	static const U32 ARC_GLOW_COST = 1;
+	static const U32 ARC_FLEXI_COST = 8;
+	static const U32 ARC_PARTICLE_COST = 16;
+	static const U32 ARC_BUMP_COST = 4;
 
 	// per-face costs
 	static const U32 ARC_PLANAR_COST = 1;
@@ -2979,68 +2957,9 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
 	U32 flexi = 0;
 	U32 animtex = 0;
 	U32 particles = 0;
+	U32 scale = 0;
 	U32 bump = 0;
 	U32 planar = 0;
-	U32 cuts = 0;
-	U32 hollow = 0;
-	U32 circular_profile = 0;
-	U32 circular_path = 0;
-
-	// these multipliers are variable and can be floating point
-	F32 scale = 0.f;
-	F32 twist = 0.f; 
-	F32 revolutions = 0.f;
-
-
-	const LLDrawable* drawablep = mDrawable;
-
-	if (isSculpted())
-	{
-		if (isMesh())
-		{
-			// base cost is dependent on mesh complexity
-			// note that 3 is the highest LOD as of the time of this coding.
-			S32 size = gMeshRepo.getMeshSize(volume_params.getSculptID(),3);
-			if ( size > 0)
-			{
-				if (gMeshRepo.getSkinInfo(volume_params.getSculptID()))
-				{
-					// weighted attachment - 1 point for every 3 bytes
-					shame = (U32)(size / 3.f);
-				}
-				else
-				{
-					// non-weighted attachment - 1 point for every 4 bytes
-					shame = (U32)(size / 4.f);
-				}
-
-				if (shame == 0)
-				{
-					// someone made a really tiny mesh. 
-					shame = 1;
-				}
-			}
-			else
-			{
-				// something went wrong - user should know their content isn't render-free
-				return 0;
-			}
-		}
-		else
-		{
-			const LLSculptParams *sculpt_params = (LLSculptParams *) getParameterEntry(LLNetworkData::PARAMS_SCULPT);
-			LLUUID sculpt_id = sculpt_params->getSculptTexture();
-			if (textures.find(sculpt_id) == textures.end())
-			{
-				LLViewerFetchedTexture *texture = LLViewerTextureManager::getFetchedTexture(sculpt_id);
-				if (texture)
-				{
-					S32 texture_cost = (S32)(ARC_TEXTURE_COST * (texture->getFullHeight() / 128.f + texture->getFullWidth() / 128.f + 1));
-					textures.insert(texture_cost_t::value_type(sculpt_id, texture_cost));
-				}
-			}
-		}
-	}
 
 	if (isFlexible())
 	{
@@ -3052,67 +2971,15 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
 	}
 
 	const LLVector3& sc = getScale();
-	scale += sc.mV[0] + sc.mV[1] + sc.mV[2];
-	if (scale > 4.f)
-	{
-		// scale is a multiplier, cap it at 4.
-		scale = 4.f;
-	}
-
-	// add points for cut prims
-	if (path_params.getBegin() != 0.f || path_params.getEnd() != 1.f)
-	{
-		++cuts;
-	}
-
-	if (profile_params.getBegin() != 0.f || profile_params.getEnd() != 1.f)
-	{
-		++cuts;
-	}
-
-	// double cost for hollow prims / sculpties
-	if (volume_params.getHollow() != 0.f)
-	{
-		hollow = 1;
-	}
-
-	F32 twist_mag = path_params.getTwistBegin() - path_params.getTwistEnd();
-	if (twist_mag < 0)
-	{
-		twist_mag *= -1.f;
-	}
-
-	// note magnitude of twist is [-1.f, 1.f]. which translates to [-180, 180] degrees.
-	// scale to degrees / 90 by multiplying by 2.
-	twist = twist_mag * 2.f;
-
-	// multiply by the number of revolutions in the prim. cap at 4.
-	revolutions = path_params.getRevolutions();
-	if (revolutions > 4.f)
-	{
-		revolutions = 4.f;
-	}
+	scale += (U32) sc.mV[0] + (U32) sc.mV[1] + (U32) sc.mV[2];
 
-	// double cost for circular profiles / sculpties
-	if (profile_params.getCurveType() == LL_PCODE_PROFILE_CIRCLE ||
-		profile_params.getCurveType() == LL_PCODE_PROFILE_CIRCLE_HALF)
-	{
-		circular_profile = 1;
-	}
-
-	// double cost for circular paths / sculpties
-	if (path_params.getCurveType() == LL_PCODE_PATH_CIRCLE ||
-		path_params.getCurveType() == LL_PCODE_PATH_CIRCLE2)
-	{
-		circular_path = 1;
-	}
+	const LLDrawable* drawablep = mDrawable;
 
-	// treat sculpties as hollow prims with circular paths & profiles
-	if (isSculpted() && !isMesh())
+	if (isSculpted())
 	{
-		hollow = 1;
-		circular_profile = 1;
-		circular_path = 1;
+		const LLSculptParams *sculpt_params = (LLSculptParams *) getParameterEntry(LLNetworkData::PARAMS_SCULPT);
+		LLUUID sculpt_id = sculpt_params->getSculptTexture();
+		textures.insert(sculpt_id);
 	}
 
 	for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
@@ -3123,11 +2990,7 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
 
 		if (img)
 		{
-			if (textures.find(img->getID()) == textures.end())
-			{
-				S32 texture_cost = (S32)(ARC_TEXTURE_COST * (img->getFullHeight() / 128.f + img->getFullWidth() / 128.f + 1));
-				textures.insert(texture_cost_t::value_type(img->getID(), texture_cost));
-			}
+			textures.insert(img->getID());
 		}
 
 		if (face->getPoolType() == LLDrawPool::POOL_ALPHA)
@@ -3136,24 +2999,21 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
 		}
 		else if (img && img->getPrimaryFormat() == GL_ALPHA)
 		{
-			invisi++;
+			invisi = 1;
 		}
 
 		if (te)
 		{
 			if (te->getBumpmap())
 			{
-				// bump is a multiplier, don't add per-face
 				bump = 1;
 			}
 			if (te->getShiny())
 			{
-				// shiny is a multiplier, don't add per-face
 				shiny = 1;
 			}
 			if (te->getGlow() > 0.f)
 			{
-				// glow is a multiplier, don't add per-face
 				glow = 1;
 			}
 			if (face->mTextureMatrix != NULL)
@@ -3167,70 +3027,37 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
 		}
 	}
 
-	// shame currently has the "base" cost of 10 for normal prims, variable for mesh
 
-	// add modifier settings
-	shame += cuts * ARC_CUT_COST;
-	shame += planar * ARC_PLANAR_COST;
-	shame += animtex * ARC_ANIM_TEX_COST;
-	shame += alpha * ARC_ALPHA_COST;
 	shame += invisi * ARC_INVISI_COST;
+	shame += shiny * ARC_SHINY_COST;
+	shame += glow * ARC_GLOW_COST;
+	shame += alpha * ARC_ALPHA_COST;
+	shame += flexi * ARC_FLEXI_COST;
+	shame += animtex * ARC_ANIM_TEX_COST;
+	shame += particles * ARC_PARTICLE_COST;
+	shame += bump * ARC_BUMP_COST;
+	shame += planar * ARC_PLANAR_COST;
+	shame += scale;
 
-	// multiply shame by multipliers
-	if (hollow)
-	{
-		shame *= hollow * ARC_HOLLOW_MULT;
-	}
-
-	if (circular_profile)
-	{
-		shame *= circular_profile * ARC_CIRC_PROF_MULT;
-	}
-
-	if (circular_path)
-	{
-		shame *= circular_path * ARC_CIRC_PATH_MULT;
-	}
-
-	if (glow)
-	{
-		shame *= glow * ARC_GLOW_MULT;
-	}
-
-	if (bump)
-	{
-		shame *= bump * ARC_BUMP_MULT;
-	}
-
-	if (flexi)
-	{
-		shame *= flexi * ARC_FLEXI_MULT;
-	}
-
-	if (shiny)
-	{
-		shame *= shiny * ARC_SHINY_MULT;
-	}
-
-	if (twist > 1.f)
-	{
-		shame = (U32)(shame * twist);
-	}
-
-	if (scale > 1.f)
-	{
-		shame = (U32)(shame *scale);
-	}
-
-	if (revolutions > 1.f)
+	LLViewerObject::const_child_list_t& child_list = getChildren();
+	for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
+		 iter != child_list.end(); 
+		 ++iter)
 	{
-		shame = (U32)(shame * revolutions);
+		const LLViewerObject* child_objectp = *iter;
+		const LLDrawable* child_drawablep = child_objectp->mDrawable;
+		if (child_drawablep)
+		{
+			const LLVOVolume* child_volumep = child_drawablep->getVOVolume();
+			if (child_volumep)
+			{
+				shame += child_volumep->getRenderCost(textures);
+			}
+		}
 	}
 
-	// add additional costs
-	shame += particles * ARC_PARTICLE_COST;
-
 	return shame;
+
 }
 
 F32 LLVOVolume::getStreamingCost()
@@ -3247,16 +3074,13 @@ F32 LLVOVolume::getStreamingCost()
 	return 0.f;
 }
 
-U32 LLVOVolume::getTriangleCount()
+U32 LLVOVolume::getTriangleCount() const
 {
 	U32 count = 0;
 	LLVolume* volume = getVolume();
 	if (volume)
 	{
-		for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i)
-		{
-			count += volume->getVolumeFace(i).mNumIndices/3;
-		}
+		count = volume->getNumTriangles();
 	}
 
 	return count;
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 5af88c6cbdb39676e7dac2dc5079d1e766d16870..0c12f14832fdab693b27292878402115f1623797 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -129,10 +129,9 @@ class LLVOVolume : public LLViewerObject
 	const LLMatrix4&	getRelativeXform() const				{ return mRelativeXform; }
 	const LLMatrix3&	getRelativeXformInvTrans() const		{ return mRelativeXformInvTrans; }
 	/*virtual*/	const LLMatrix4	getRenderMatrix() const;
-				typedef std::map<LLUUID, S32> texture_cost_t;
-				U32 	getRenderCost(texture_cost_t &textures) const;
+				U32 	getRenderCost(std::set<LLUUID> &textures) const;
 	/*virtual*/	F32		getStreamingCost();
-	/*virtual*/ U32		getTriangleCount();
+	/*virtual*/ U32		getTriangleCount() const;
 	/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, 
 										  S32 face = -1,                        // which face to check, -1 = ALL_SIDES
 										  BOOL pick_transparent = FALSE,
@@ -359,6 +358,8 @@ class LLVOVolume : public LLViewerObject
 	static LLPointer<LLObjectMediaDataClient> sObjectMediaClient;
 	static LLPointer<LLObjectMediaNavigateClient> sObjectMediaNavigateClient;
 
+	static const U32 ARC_TEXTURE_COST = 5;
+
 protected:
 	static S32 sNumLODChanges;
 	
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index ca58d8275be911118b7e7c83a7c2fb3a4d3f3d8b..69173d26f402e5fe38d2a46f9e8da5cdeb53ec2f 100755
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -1021,7 +1021,6 @@ S32 LLPipeline::getMaxLightingDetail() const
 S32 LLPipeline::setLightingDetail(S32 level)
 {
 	LLMemType mt_ld(LLMemType::MTYPE_PIPELINE_LIGHTING_DETAIL);
-	assertInitialized();
 
 	if (level < 0)
 	{
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 6f891b8d1b18552ef7a110991f27b992a58bf20a..aa02fc14e5e8eb02e046f7312b08b2f383c907bb 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -1843,34 +1843,34 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="PDT">
 		PDT
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Fremad
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		Venstre
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		Højre
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Bagud
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Nord
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Syd
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		Vest
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Øst
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		Op
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		Ned
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index e4676194aa8b0112e6b0ddc0f21c35af5643f868..7284e40be26cb87bbce31dc2ea5d27833c76ff81 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -1888,34 +1888,34 @@ Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
 	<string name="PDT">
 		PDT
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Vorwärts
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		Links
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		Rechts
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Hinten
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Norden
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Süden
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		Westen
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Osten
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		Nach oben
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		Nach unten
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index b745ee86b80a9b162e84e94848fe54807e1b1ef2..4b871343e2db310b989eb1bff8f24985226ed90e 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2323,9 +2323,6 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="accel-win-alt">Alt+</string>
 	<string name="accel-win-shift">Shift+</string>
 
-	<string name="Esc">Esc</string>
-	<string name="Home">Home</string>
-
 	<!-- Previews -->
 	<string name="FileSaved">File Saved</string>
 	<string name="Receiving">Receiving</string>
@@ -2337,16 +2334,16 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="PDT">PDT</string>
 
 	<!-- Directions, HUD -->
-	<string name="Forward">Forward</string>
-	<string name="Left">Left</string>
-	<string name="Right">Right</string>
-	<string name="Back">Back</string>
-	<string name="North">North</string>
-	<string name="South">South</string>
-	<string name="West">West</string>
-	<string name="East">East</string>
-	<string name="Up">Up</string>
-	<string name="Down">Down</string>
+	<string name="Direction_Forward">Forward</string>
+	<string name="Direction_Left">Left</string>
+	<string name="Direction_Right">Right</string>
+	<string name="Direction_Back">Back</string>
+	<string name="Direction_North">North</string>
+	<string name="Direction_South">South</string>
+	<string name="Direction_West">West</string>
+	<string name="Direction_East">East</string>
+	<string name="Direction_Up">Up</string>
+	<string name="Direction_Down">Down</string>
 
     <!-- Search Category Strings -->
 	<string name="Any Category">Any Category</string>
@@ -3315,4 +3312,119 @@ Abuse Report</string>
 
   <string name="EmptyOutfitText">There are no items in this outfit</string>
 
+  <!-- Key names begin -->
+  <string name="Esc">Esc</string>
+  <string name="Space">Space</string>
+  <string name="Enter">Enter</string>
+  <string name="Tab">Tab</string>
+  <string name="Ins">Ins</string>
+  <string name="Del">Del</string>
+  <string name="Backsp">Backsp</string>
+  <string name="Shift">Shift</string>
+  <string name="Ctrl">Ctrl</string>
+  <string name="Alt">Alt</string>
+  <string name="CapsLock">CapsLock</string>
+  <string name="Left">Left</string>
+  <string name="Right">Right</string>
+  <string name="Up">Up</string>
+  <string name="Down">Down</string>
+  <string name="Home">Home</string>
+  <string name="End">End</string>
+  <string name="PgUp">PgUp</string>
+  <string name="PgDn">PgDn</string>
+
+  <string name="F1">F1</string>
+  <string name="F2">F2</string>
+  <string name="F3">F3</string>
+  <string name="F4">F4</string>
+  <string name="F5">F5</string>
+  <string name="F6">F6</string>
+  <string name="F7">F7</string>
+  <string name="F8">F8</string>
+  <string name="F9">F9</string>
+  <string name="F10">F10</string>
+  <string name="F11">F11</string>
+  <string name="F12">F12</string>
+
+  <string name="Add">Add</string>
+  <string name="Subtract">Subtract</string>
+  <string name="Multiply">Multiply</string>
+  <string name="Divide">Divide</string>
+  <string name="PAD_DIVIDE">PAD_DIVIDE</string>
+  <string name="PAD_LEFT">PAD_LEFT</string>
+  <string name="PAD_RIGHT">PAD_RIGHT</string>
+  <string name="PAD_DOWN">PAD_DOWN</string>
+  <string name="PAD_UP">PAD_UP</string>
+  <string name="PAD_HOME">PAD_HOME</string>
+  <string name="PAD_END">PAD_END</string>
+  <string name="PAD_PGUP">PAD_PGUP</string>
+  <string name="PAD_PGDN">PAD_PGDN</string>
+  <string name="PAD_CENTER">PAD_CENTER</string>
+  <string name="PAD_INS">PAD_INS</string>
+  <string name="PAD_DEL">PAD_DEL</string>
+  <string name="PAD_Enter">PAD_Enter</string>
+  <string name="PAD_BUTTON0">PAD_BUTTON0</string>
+  <string name="PAD_BUTTON1">PAD_BUTTON1</string>
+  <string name="PAD_BUTTON2">PAD_BUTTON2</string>
+  <string name="PAD_BUTTON3">PAD_BUTTON3</string>
+  <string name="PAD_BUTTON4">PAD_BUTTON4</string>
+  <string name="PAD_BUTTON5">PAD_BUTTON5</string>
+  <string name="PAD_BUTTON6">PAD_BUTTON6</string>
+  <string name="PAD_BUTTON7">PAD_BUTTON7</string>
+  <string name="PAD_BUTTON8">PAD_BUTTON8</string>
+  <string name="PAD_BUTTON9">PAD_BUTTON9</string>
+  <string name="PAD_BUTTON10">PAD_BUTTON10</string>
+  <string name="PAD_BUTTON11">PAD_BUTTON11</string>
+  <string name="PAD_BUTTON12">PAD_BUTTON12</string>
+  <string name="PAD_BUTTON13">PAD_BUTTON13</string>
+  <string name="PAD_BUTTON14">PAD_BUTTON14</string>
+  <string name="PAD_BUTTON15">PAD_BUTTON15</string>
+
+  <string name="-">-</string>
+  <string name="=">=</string>
+  <string name="`">`</string>
+  <string name=";">;</string>
+  <string name="[">[</string>
+  <string name="]">]</string>
+  <string name="\">\</string>
+
+  <string name="0">0</string>
+  <string name="1">1</string>
+  <string name="2">2</string>
+  <string name="3">3</string>
+  <string name="4">4</string>
+  <string name="5">5</string>
+  <string name="6">6</string>
+  <string name="7">7</string>
+  <string name="8">8</string>
+  <string name="9">9</string>
+
+  <string name="A">A</string>
+  <string name="B">B</string>
+  <string name="C">C</string>
+  <string name="D">D</string>
+  <string name="E">E</string>
+  <string name="F">F</string>
+  <string name="G">G</string>
+  <string name="H">H</string>
+  <string name="I">I</string>
+  <string name="J">J</string>
+  <string name="K">K</string>
+  <string name="L">L</string>
+  <string name="M">M</string>
+  <string name="N">N</string>
+  <string name="O">O</string>
+  <string name="P">P</string>
+  <string name="Q">Q</string>
+  <string name="R">R</string>
+  <string name="S">S</string>
+  <string name="T">T</string>
+  <string name="U">U</string>
+  <string name="V">V</string>
+  <string name="W">W</string>
+  <string name="X">X</string>
+  <string name="Y">Y</string>
+  <string name="Z">Z</string>
+  <!-- Key names end -->
+
   </strings>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 810b1630dda07482c8ce7e9e3a6de791f1ff02a5..19adf29d29eb0e63619c94b375523bafd801a427 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -1846,34 +1846,34 @@ Se esperaba .wav, .tga, .bmp, .jpg, .jpeg, o .bvh
 	<string name="PDT">
 		PDT
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Adelante
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		Izquierda
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		Derecha
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Atrás
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Norte
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Sur
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		Oeste
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Este
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		Arriba
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		Abajo
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index d75f6c731de2e853373bd742ba2cdf4f15f18993..74c1fd8622d46e296945cabb29825341dd761220 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1888,34 +1888,34 @@
 	<string name="PDT">
 		PDT
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Vers l&apos;avant
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		Gauche
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		Droite
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Arrière
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Nord
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Sud
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		Ouest
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Est
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		Haut
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		Bas
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index dfe635182e60ccf3090e6ab955fc30000213e574..37dc90d05640f1be7783989adbc3847ead654720 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -1846,34 +1846,34 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="PDT">
 		Ora legale Pacifico
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Avanti
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		Sinistra
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		Destra
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Indietro
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Nord
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Sud
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		Ovest
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Est
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		Su
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		Giù
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 187f21257a33755e89a8f57faae26f910ea36dc8..75cb126874a5df754d5834d022fab95ff6652c29 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -1882,34 +1882,34 @@
 	<string name="PDT">
 		太平洋夏時間
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		前
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		å·¦
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		右
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		後ろ
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		北
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		南
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		西
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		東
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		上
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		下
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml
index 07265d27162a5d65edc62c7ae49144a6b1f9c557..87e3638a49e81b7a911a99ecb6f769e55b67cfe0 100644
--- a/indra/newview/skins/default/xui/nl/strings.xml
+++ b/indra/newview/skins/default/xui/nl/strings.xml
@@ -1441,34 +1441,34 @@ Verwacht .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="PDT">
 		PDT
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Vooruit
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		Links
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		Rechts
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Achteruit
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Noord
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Zuid
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		West
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Oost
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		Omhoog
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		Omlaag
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index d1fb382a2dafb3cbb713743f7f84f274205c7bda..e6019bf66d1159648c5e36247b645b9b1b25ddfb 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -1843,34 +1843,34 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="PDT">
 		PDT
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Do przodu
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		W lewo
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		W prawo
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Wróć
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Północ
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Południe
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		Zachód
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Wschód
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		W górę
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		W dół
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index ce2c2ddaa13f09cc3a604e17ca7931c4fea8394f..06123e0118b3c3c3af471d8616ea0427cd0addb7 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -1846,34 +1846,34 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="PDT">
 		PDT
 	</string>
-	<string name="Forward">
+	<string name="Direction_Forward">
 		Avante
 	</string>
-	<string name="Left">
+	<string name="Direction_Left">
 		Esquerda
 	</string>
-	<string name="Right">
+	<string name="Direction_Right">
 		Direita
 	</string>
-	<string name="Back">
+	<string name="Direction_Back">
 		Atrás
 	</string>
-	<string name="North">
+	<string name="Direction_North">
 		Norte
 	</string>
-	<string name="South">
+	<string name="Direction_South">
 		Sul
 	</string>
-	<string name="West">
+	<string name="Direction_West">
 		Oeste
 	</string>
-	<string name="East">
+	<string name="Direction_East">
 		Leste
 	</string>
-	<string name="Up">
+	<string name="Direction_Up">
 		Acima
 	</string>
-	<string name="Down">
+	<string name="Direction_Down">
 		Abaixo
 	</string>
 	<string name="Any Category">
diff --git a/indra/newview/tests/llsimplestat_test.cpp b/indra/newview/tests/llsimplestat_test.cpp
index 60a8cac995ba1ad1f280c21406a45f44b50f73d1..b556941f4afdd82caadc5580748a3b1232fdc30d 100644
--- a/indra/newview/tests/llsimplestat_test.cpp
+++ b/indra/newview/tests/llsimplestat_test.cpp
@@ -3,31 +3,25 @@
  * @date 2010-10-22
  * @brief Test cases for some of llsimplestat.h
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * 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
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * 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
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/tests/llviewerassetstats_test.cpp b/indra/newview/tests/llviewerassetstats_test.cpp
index 1bb4fb7c0cf1b64080674751bd34b6d46693c862..3faddc13c1bcf47cf20d86e2060cd8d5a8f3260b 100644
--- a/indra/newview/tests/llviewerassetstats_test.cpp
+++ b/indra/newview/tests/llviewerassetstats_test.cpp
@@ -3,31 +3,25 @@
  * @date 2010-10-28
  * @brief Test cases for some of newview/llviewerassetstats.cpp
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * 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
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * 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
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * 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.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */