diff --git a/.hgtags b/.hgtags
index c5a7203d87f25e5981a7bc0ccd8baece591be1cb..d3172eb75aa6e6b8eaaa26681f7d1ef8ad160c5f 100644
--- a/.hgtags
+++ b/.hgtags
@@ -3,6 +3,7 @@
 0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2
 12769e547e30067d494a6c01479a18107366ce2f beta-5
 17fc2908e9a1ef34a9f53a41a393caf5c3cac390 beta-3-5
+19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1
 1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3
 3469d90a115b900f8f250e137bbd9b684130f5d2 beta-4
 3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1
@@ -10,11 +11,13 @@
 4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0
 52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
 668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1
+6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2
 7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4
 7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa
 80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start
 b03065d018b8a2e28b7de85b293a4c992cb4c12d 2-1-release
 b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6
+bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release
 c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4
 d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo
 d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5
diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake
index 2a8abdac23aa47e70d5004b42c96640ee41ace7e..32c4bc81dfc4af75a888e511ba62beb7004a984f 100644
--- a/indra/cmake/ViewerMiscLibs.cmake
+++ b/indra/cmake/ViewerMiscLibs.cmake
@@ -7,3 +7,10 @@ if (NOT STANDALONE)
   use_prebuilt_binary(fontconfig)
 endif(NOT STANDALONE)
 
+if(VIEWER AND NOT STANDALONE)
+  if(EXISTS ${CMAKE_SOURCE_DIR}/newview/res/have_artwork_bundle.marker)
+    message(STATUS "We seem to have an artwork bundle in the tree - brilliant.")
+  else(EXISTS ${CMAKE_SOURCE_DIR}/newview/res/have_artwork_bundle.marker)
+    message(FATAL_ERROR "Didn't find an artwork bundle - this needs to be downloaded separately and unpacked into this tree.  You can probably get it from the same place you got your viewer source.  Thanks!")
+  endif(EXISTS ${CMAKE_SOURCE_DIR}/newview/res/have_artwork_bundle.marker)
+endif(VIEWER AND NOT STANDALONE)
diff --git a/indra/llcommon/lldarray.h b/indra/llcommon/lldarray.h
index 95c57de18950efb15aefdfceddb6c0f1caa686b5..a8cd03b42a92f7b0d53bded21676c8149a8d73d4 100644
--- a/indra/llcommon/lldarray.h
+++ b/indra/llcommon/lldarray.h
@@ -196,7 +196,7 @@ public:
 		{
 			U32 n = mVector.size();
 			mIndexMap[k] = n;
-			mVector.resize(n+1);
+			mVector.push_back(Type());
 			llassert(mVector.size() == mIndexMap.size());
 			return mVector[n];
 		}
diff --git a/indra/llcommon/llstrider.h b/indra/llcommon/llstrider.h
index 488b8d0f35a7b44eb9d4a40520367f582ead96c4..f4c43bac61f80e731842b260fd291e0c57422805 100644
--- a/indra/llcommon/llstrider.h
+++ b/indra/llcommon/llstrider.h
@@ -45,7 +45,7 @@ public:
 	void setStride (S32 skipBytes)	{ mSkip = (skipBytes ? skipBytes : sizeof(Object));}
 
 	void skip(const U32 index)     { mBytep += mSkip*index;}
-
+	U32 getSkip() const			   { return mSkip; }
 	Object* get()                  { return mObjectp; }
 	Object* operator->()           { return mObjectp; }
 	Object& operator *()           { return *mObjectp; }
diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h
index 2c2c81927222ea689e73fb048df3cb386b9e905f..b19ba3bf7407eddf5d34dd1ace14e527e1cddc79 100644
--- a/indra/llcommon/llversionserver.h
+++ b/indra/llcommon/llversionserver.h
@@ -30,7 +30,7 @@
 const S32 LL_VERSION_MAJOR = 2;
 const S32 LL_VERSION_MINOR = 1;
 const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 0;
+const S32 LL_VERSION_BUILD = 13828;
 
 const char * const LL_CHANNEL = "Second Life Server";
 
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index 2152feaf801c95e088c0a8af864133d54f8edafa..68e45f36e4f65b7e8a8a5663177f87c7a9dd1397 100644
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -369,6 +369,8 @@ void LLCrashLogger::updateApplication(const std::string& message)
 
 bool LLCrashLogger::init()
 {
+	LLCurl::initClass();
+
 	// We assume that all the logs we're looking for reside on the current drive
 	gDirUtilp->initAppDirs("SecondLife");
 
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index ede624141d4c6cbe5dbed7a7e2c7f2578f2e4247..488bd45d8f2aeb1836f78509a5e51a2ef2bd60ca 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -52,7 +52,6 @@ static const std::string PARCEL_OWNERSHIP_STATUS_STRING[LLParcel::OS_COUNT+1] =
 };
 
 // NOTE: Adding parcel categories also requires updating:
-// * floater_directory.xml category combobox
 // * floater_about_land.xml category combobox
 // * Web site "create event" tools
 // DO NOT DELETE ITEMS FROM THIS LIST WITHOUT DEEPLY UNDERSTANDING WHAT YOU'RE DOING.
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 39b7453ffc46461c502ba61d8e5628897bc54227..14e1ca8d43681ddb7ea7057a89cdb19fa80b88ad 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -80,6 +80,8 @@ const F32 SKEW_MAX	=  0.95f;
 const F32 SCULPT_MIN_AREA = 0.002f;
 const S32 SCULPT_MIN_AREA_DETAIL = 1;
 
+#define GEN_TRI_STRIP 0
+
 BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm)
 {    
 	LLVector3 test = (pt2-pt1)%(pt3-pt2);
@@ -1682,7 +1684,7 @@ LLVolume::LLVolume(const LLVolumeParams &params, const F32 detail, const BOOL ge
 	mGenerateSingleFace = generate_single_face;
 
 	generate();
-	if (mParams.getSculptID().isNull())
+	if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE)
 	{
 		createVolumeFaces();
 	}
@@ -1858,6 +1860,11 @@ void LLVolume::createVolumeFaces()
 			LLProfile::Face& face = mProfilep->mFaces[i];
 			vf.mBeginS = face.mIndex;
 			vf.mNumS = face.mCount;
+			if (vf.mNumS < 0)
+			{
+				llerrs << "Volume face corruption detected." << llendl;
+			}
+
 			vf.mBeginT = 0;
 			vf.mNumT= getPath().mPath.size();
 			vf.mID = i;
@@ -1901,6 +1908,10 @@ void LLVolume::createVolumeFaces()
 					if (face.mFlat && vf.mNumS > 2)
 					{ //flat inner faces have to copy vert normals
 						vf.mNumS = vf.mNumS*2;
+						if (vf.mNumS < 0)
+						{
+							llerrs << "Volume face corruption detected." << llendl;
+						}
 					}
 				}
 				else
@@ -4515,7 +4526,9 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
 
 	if (!partial_build)
 	{
+#if GEN_TRI_STRIP
 		mTriStrip.clear();
+#endif
 		S32 idxs[] = {0,1,(grid_size+1)+1,(grid_size+1)+1,(grid_size+1),0};
 		for(S32 gx = 0;gx<grid_size;gx++)
 		{
@@ -4529,6 +4542,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
 						mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]);
 					}
 					
+#if GEN_TRI_STRIP
 					if (gy == 0)
 					{
 						mTriStrip.push_back((gx+1)*(grid_size+1));
@@ -4544,6 +4558,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
 					{
 						mTriStrip.push_back(gy+1+gx*(grid_size+1));
 					}
+#endif
 				}
 				else
 				{
@@ -4552,6 +4567,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
 						mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]);
 					}
 
+#if GEN_TRI_STRIP
 					if (gy == 0)
 					{
 						mTriStrip.push_back(gx*(grid_size+1));
@@ -4566,15 +4582,18 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
 					{
 						mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1));
 					}
+#endif
 				}
 			}
 			
 		}
 
+#if GEN_TRI_STRIP
 		if (mTriStrip.size()%2 == 1)
 		{
 			mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
 		}
+#endif
 	}
 		
 	return TRUE;
@@ -4944,6 +4963,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 			mIndices[3*i+v2] = i + 1;
 		}
 
+#if GEN_TRI_STRIP
 		//make tri strip
 		if (mTypeMask & OPEN_MASK)
 		{
@@ -4986,6 +5006,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 				mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
 			}
 		}
+#endif
 	}
 		
 	return TRUE;
@@ -4993,6 +5014,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 
 void LLVolumeFace::makeTriStrip()
 {
+#if GEN_TRI_STRIP
 	for (U32 i = 0; i < mIndices.size(); i+=3)
 	{
 		U16 i0 = mIndices[i];
@@ -5021,6 +5043,7 @@ void LLVolumeFace::makeTriStrip()
 	{
 		mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
 	}
+#endif
 }
 
 void LLVolumeFace::createBinormals()
@@ -5106,12 +5129,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 		mHasBinormals = FALSE;
 	}
 
-
-	LLVector3& face_min = mExtents[0];
-	LLVector3& face_max = mExtents[1];
-
-	mCenter.clearVec();
-
 	S32 begin_stex = llfloor( profile[mBeginS].mV[2] );
 	S32 num_s = ((mTypeMask & INNER_MASK) && (mTypeMask & FLAT_MASK) && mNumS > 2) ? mNumS/2 : mNumS;
 
@@ -5167,15 +5184,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 		
 			mVertices[cur_vertex].mNormal = LLVector3(0,0,0);
 			mVertices[cur_vertex].mBinormal = LLVector3(0,0,0);
-			
-			if (cur_vertex == 0)
-			{
-				face_min = face_max = mesh[i].mPos;
-			}
-			else
-			{
-				update_min_max(face_min, face_max, mesh[i].mPos);
-			}
 
 			cur_vertex++;
 
@@ -5209,12 +5217,22 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 			mVertices[cur_vertex].mNormal = LLVector3(0,0,0);
 			mVertices[cur_vertex].mBinormal = LLVector3(0,0,0);
 
-			update_min_max(face_min,face_max,mesh[i].mPos);
-
 			cur_vertex++;
 		}
 	}
 	
+
+	//get bounding box for this side
+	LLVector3& face_min = mExtents[0];
+	LLVector3& face_max = mExtents[1];
+	mCenter.clearVec();
+
+	face_min = face_max = mVertices[0].mPosition;
+	for (U32 i = 1; i < mVertices.size(); ++i)
+	{
+		update_min_max(face_min, face_max, mVertices[i].mPosition);
+	}
+
 	mCenter = (face_min + face_max) * 0.5f;
 
 	S32 cur_index = 0;
@@ -5223,13 +5241,17 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 
 	if (!partial_build)
 	{
+#if GEN_TRI_STRIP
 		mTriStrip.clear();
+#endif
 
 		// Now we generate the indices.
 		for (t = 0; t < (mNumT-1); t++)
 		{
+#if GEN_TRI_STRIP
 			//prepend terminating index to strip
 			mTriStrip.push_back(mNumS*t);
+#endif
 
 			for (s = 0; s < (mNumS-1); s++)
 			{	
@@ -5240,6 +5262,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 				mIndices[cur_index++] = s+1 + mNumS*t;			//bottom right
 				mIndices[cur_index++] = s+1 + mNumS*(t+1);		//top right
 
+#if GEN_TRI_STRIP
 				if (s == 0)
 				{
 					mTriStrip.push_back(s+mNumS*t);
@@ -5247,6 +5270,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 				}
 				mTriStrip.push_back(s+1+mNumS*t);
 				mTriStrip.push_back(s+1+mNumS*(t+1));
+#endif
 				
 				mEdge[cur_edge++] = (mNumS-1)*2*t+s*2+1;						//bottom left/top right neighbor face 
 				if (t < mNumT-2) {												//top right/top left neighbor face 
@@ -5288,44 +5312,37 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 				}
 				mEdge[cur_edge++] = (mNumS-1)*2*t+s*2;							//top right/bottom left neighbor face	
 			}
+#if GEN_TRI_STRIP
 			//append terminating vertex to strip
 			mTriStrip.push_back(mNumS-1+mNumS*(t+1));
+#endif
 		}
 
+#if GEN_TRI_STRIP
 		if (mTriStrip.size()%2 == 1)
 		{
 			mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]);
 		}
+#endif
 	}
 
 	//generate normals 
 	for (U32 i = 0; i < mIndices.size()/3; i++) //for each triangle
 	{
-		const S32 i0 = mIndices[i*3+0];
-		const S32 i1 = mIndices[i*3+1];
-		const S32 i2 = mIndices[i*3+2];
-		const VertexData& v0 = mVertices[i0];
-		const VertexData& v1 = mVertices[i1];
-		const VertexData& v2 = mVertices[i2];
+		const U16* idx = &(mIndices[i*3]);
+			
+		VertexData* v[] = 
+		{	&mVertices[idx[0]], &mVertices[idx[1]], &mVertices[idx[2]] };
 					
 		//calculate triangle normal
-		LLVector3 norm = (v0.mPosition-v1.mPosition) % (v0.mPosition-v2.mPosition);
+		LLVector3 norm = (v[0]->mPosition-v[1]->mPosition) % (v[0]->mPosition-v[2]->mPosition);
 
-		for (U32 j = 0; j < 3; j++) 
-		{ //add triangle normal to vertices
-			const S32 idx = mIndices[i*3+j];
-			mVertices[idx].mNormal += norm; // * (weight_sum - d[j])/weight_sum;
-		}
+		v[0]->mNormal += norm;
+		v[1]->mNormal += norm;
+		v[2]->mNormal += norm;
 
 		//even out quad contributions
-		if ((i & 1) == 0) 
-		{
-			mVertices[i2].mNormal += norm;
-		}
-		else 
-		{
-			mVertices[i1].mNormal += norm;
-		}
+		v[i%2+1]->mNormal += norm;
 	}
 	
 	// adjust normals based on wrapping and stitching
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index 47b86bd53dc8a66cf830d197fa8305dc68f61102..0e5206a520cb9d19cd42d33ed52cab5c7301d516 100644
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -234,9 +234,14 @@ static void request(
 	lldebugs << LLURLRequest::actionAsVerb(method) << " " << url << " "
 		<< headers << llendl;
 
-    // Insert custom headers is the caller sent any
-    if (headers.isMap())
-    {
+	// Insert custom headers if the caller sent any
+	if (headers.isMap())
+	{
+		if (headers.has("Cookie"))
+		{
+			req->allowCookies();
+		}
+
         LLSD::map_const_iterator iter = headers.beginMap();
         LLSD::map_const_iterator end  = headers.endMap();
 
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index 393e6e98131f66dcbcf1764110bd9cd5f7a3eecd..a8d2a0a22409e03b021626f57e34d8f4223d2dc6 100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -438,13 +438,13 @@ void LLPumpIO::pump()
 	pump(DEFAULT_POLL_TIMEOUT);
 }
 
-static LLFastTimer::DeclareTimer FTM_PUMP("Pump");
+static LLFastTimer::DeclareTimer FTM_PUMP_IO("Pump IO");
 
 //timeout is in microseconds
 void LLPumpIO::pump(const S32& poll_timeout)
 {
 	LLMemType m1(LLMemType::MTYPE_IO_PUMP);
-	LLFastTimer t1(FTM_PUMP);
+	LLFastTimer t1(FTM_PUMP_IO);
 	//llinfos << "LLPumpIO::pump()" << llendl;
 
 	// Run any pending runners.
@@ -772,6 +772,8 @@ bool LLPumpIO::respond(
 	return true;
 }
 
+static LLFastTimer::DeclareTimer FTM_PUMP_CALLBACK_CHAIN("Chain");
+
 void LLPumpIO::callback()
 {
 	LLMemType m1(LLMemType::MTYPE_IO_PUMP);
@@ -793,6 +795,7 @@ void LLPumpIO::callback()
 		callbacks_t::iterator end = mCallbacks.end();
 		for(; it != end; ++it)
 		{
+			LLFastTimer t(FTM_PUMP_CALLBACK_CHAIN);
 			// it's always the first and last time for respone chains
 			(*it).mHead = (*it).mChainLinks.begin();
 			(*it).mInit = true;
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index 8adb3cda19a4639cecd2968adefbc448e41e3b95..cb9d1c3731faa614b0fa7473f32fe1e1d9461722 100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -245,6 +245,11 @@ void LLURLRequest::useProxy(const std::string &proxy)
     mDetail->mCurlRequest->setoptString(CURLOPT_PROXY, proxy);
 }
 
+void LLURLRequest::allowCookies()
+{
+	mDetail->mCurlRequest->setoptString(CURLOPT_COOKIEFILE, "");
+}
+
 // virtual
 LLIOPipe::EStatus LLURLRequest::handleError(
 	LLIOPipe::EStatus status,
diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h
index dad245f154b29736dc8202596dea0ce78eb93f11..ec5c2c1941493aa38331063e37a5bf4f0cdc9496 100644
--- a/indra/llmessage/llurlrequest.h
+++ b/indra/llmessage/llurlrequest.h
@@ -183,6 +183,11 @@ public:
      */
 	void useProxy(const std::string& proxy);
 
+	/**
+	 * @brief Turn on cookie handling for this request with CURLOPT_COOKIEFILE.
+	 */
+	void allowCookies();
+
 public:
 	/** 
 	 * @brief Give this pipe a chance to handle a generated error
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
index 921f407859f9bf70d109185e0437b501750c1c90..f535fb1672d2cadfe32457455af78d435a96c8cf 100644
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -280,6 +280,7 @@ public:
 
 	void setLightTexture(const LLUUID& id) { mLightTexture = id; }
 	LLUUID getLightTexture() const         { return mLightTexture; }
+	bool isLightSpotlight() const         { return mLightTexture.notNull(); }
 	void setParams(const LLVector3& params) { mParams = params; }
 	LLVector3 getParams() const			   { return mParams; }
 	
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index 163b79813ee5fc4068258d539b8ea5d944f2e6ca..b84e696e2d7031e68e840459cb8c101915874020 100644
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -253,10 +253,10 @@ F32 LLFontFreetype::getXAdvance(llwchar wch) const
 	}
 	else
 	{
-		gi = get_if_there(mCharGlyphInfoMap, (llwchar)0, (LLFontGlyphInfo*)NULL);
-		if (gi)
+		char_glyph_info_map_t::iterator found_it = mCharGlyphInfoMap.find((llwchar)0);
+		if (found_it != mCharGlyphInfoMap.end())
 		{
-			return gi->mXAdvance;
+			return found_it->second->mXAdvance;
 		}
 	}
 
diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h
index f3f62533dac39c10e883e394e82456ce6b9f4268..f1b23f22d50d36a092dc08a5bfc36c07b89c8b70 100644
--- a/indra/llrender/llfontfreetype.h
+++ b/indra/llrender/llfontfreetype.h
@@ -27,7 +27,7 @@
 #ifndef LL_LLFONTFREETYPE_H
 #define LL_LLFONTFREETYPE_H
 
-#include <map>
+#include <boost/unordered_map.hpp>
 #include "llpointer.h"
 #include "llstl.h"
 
@@ -164,7 +164,7 @@ private:
 
 	BOOL mValid;
 
-	typedef std::map<llwchar, LLFontGlyphInfo*> char_glyph_info_map_t;
+	typedef boost::unordered_map<llwchar, LLFontGlyphInfo*> char_glyph_info_map_t;
 	mutable char_glyph_info_map_t mCharGlyphInfoMap; // Information about glyph location in bitmap
 
 	mutable LLPointer<LLFontBitmapCache> mFontBitmapCachep;
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index a548e618b35d254febee4ce445983e45494b1010..386bb987f9beb250b9e65cbfefbf13462712cd67 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -141,6 +141,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, const LLRect& rect
 S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, const LLColor4 &color, HAlign halign, VAlign valign, U8 style, 
 					 ShadowType shadow, S32 max_chars, S32 max_pixels, F32* right_x, BOOL use_ellipses) const
 {
+	LLFastTimer _(FTM_RENDER_FONTS);
+
 	if(!sDisplayFont) //do not display texts
 	{
 		return wstr.length() ;
@@ -175,16 +177,18 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 
 	gGL.loadUIIdentity();
 	
-	gGL.translateUI(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY), sCurOrigin.mZ);
+	//gGL.translateUI(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY), sCurOrigin.mZ);
 
 	// this code snaps the text origin to a pixel grid to start with
-	F32 pixel_offset_x = llround((F32)sCurOrigin.mX) - (sCurOrigin.mX);
-	F32 pixel_offset_y = llround((F32)sCurOrigin.mY) - (sCurOrigin.mY);
-	gGL.translateUI(-pixel_offset_x, -pixel_offset_y, 0.f);
+	//F32 pixel_offset_x = llround((F32)sCurOrigin.mX) - (sCurOrigin.mX);
+	//F32 pixel_offset_y = llround((F32)sCurOrigin.mY) - (sCurOrigin.mY);
+	//gGL.translateUI(-pixel_offset_x, -pixel_offset_y, 0.f);
 
-	LLFastTimer t(FTM_RENDER_FONTS);
+	LLVector2 origin(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY));
+	// snap the text origin to a pixel grid to start with
+	origin.mV[VX] -= llround((F32)sCurOrigin.mX) - (sCurOrigin.mX);
+	origin.mV[VY] -= llround((F32)sCurOrigin.mY) - (sCurOrigin.mY);
 
-	gGL.color4fv( color.mV );
 
 	S32 chars_drawn = 0;
 	S32 i;
@@ -204,8 +208,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
  	// Not guaranteed to be set correctly
 	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	
-	cur_x = ((F32)x * sScaleX);
-	cur_y = ((F32)y * sScaleY);
+	cur_x = ((F32)x * sScaleX) + origin.mV[VX];
+	cur_y = ((F32)y * sScaleY) + origin.mV[VY];
 
 	// Offset y by vertical alignment.
 	switch (valign)
@@ -270,6 +274,15 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 
 	const LLFontGlyphInfo* next_glyph = NULL;
 
+	const S32 GLYPH_BATCH_SIZE = 30;
+	LLVector3 vertices[GLYPH_BATCH_SIZE * 4];
+	LLVector2 uvs[GLYPH_BATCH_SIZE * 4];
+	LLColor4U colors[GLYPH_BATCH_SIZE * 4];
+
+	LLColor4U text_color(color);
+
+	S32 bitmap_num = -1;
+	S32 glyph_count = 0;
 	for (i = begin_offset; i < begin_offset + length; i++)
 	{
 		llwchar wch = wstr[i];
@@ -286,8 +299,13 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 			break;
 		}
 		// Per-glyph bitmap texture.
-		LLImageGL *image_gl = mFontFreetype->getFontBitmapCache()->getImageGL(fgi->mBitmapNum);
-		gGL.getTexUnit(0)->bind(image_gl);
+		S32 next_bitmap_num = fgi->mBitmapNum;
+		if (next_bitmap_num != bitmap_num)
+		{
+			bitmap_num = next_bitmap_num;
+			LLImageGL *font_image = font_bitmap_cache->getImageGL(bitmap_num);
+			gGL.getTexUnit(0)->bind(font_image);
+		}
 	
 		if ((start_x + scaled_max_pixels) < (cur_x + fgi->mXBearing + fgi->mWidth))
 		{
@@ -307,7 +325,18 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 				    llround(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth,
 				    llround(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight);
 		
-		drawGlyph(screen_rect, uv_rect, color, style_to_add, shadow, drop_shadow_strength);
+		if (glyph_count >= GLYPH_BATCH_SIZE)
+		{
+			gGL.begin(LLRender::QUADS);
+			{
+				gGL.vertexBatchPreTransformed(vertices, uvs, colors, glyph_count * 4);
+			}
+			gGL.end();
+
+			glyph_count = 0;
+		}
+
+		drawGlyph(glyph_count, vertices, uvs, colors, screen_rect, uv_rect, text_color, style_to_add, shadow, drop_shadow_strength);
 
 		chars_drawn++;
 		cur_x += fgi->mXAdvance;
@@ -332,11 +361,19 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 		cur_render_y = cur_y;
 	}
 
+	gGL.begin(LLRender::QUADS);
+	{
+		gGL.vertexBatchPreTransformed(vertices, uvs, colors, glyph_count * 4);
+	}
+	gGL.end();
+
+
 	if (right_x)
 	{
-		*right_x = cur_x / sScaleX;
+		*right_x = (cur_x - origin.mV[VX]) / sScaleX;
 	}
 
+	//FIXME: add underline as glyph?
 	if (style_to_add & UNDERLINE)
 	{
 		F32 descender = mFontFreetype->getDescenderHeight();
@@ -356,7 +393,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
 		gGL.pushUIMatrix();
 		renderUTF8(std::string("..."), 
 				0,
-				cur_x / sScaleX, (F32)y,
+				(cur_x - origin.mV[VX]) / sScaleX, (F32)y,
 				color,
 				LEFT, valign,
 				style_to_add,
@@ -1085,95 +1122,95 @@ LLFontGL &LLFontGL::operator=(const LLFontGL &source)
 	return *this;
 }
 
-void LLFontGL::renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const
+void LLFontGL::renderQuad(LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const
 {
-	gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop);
-	gGL.vertex2f(llfont_round_x(screen_rect.mRight), 
-				llfont_round_y(screen_rect.mTop));
-
-	gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop);
-	gGL.vertex2f(llfont_round_x(screen_rect.mLeft), 
-				llfont_round_y(screen_rect.mTop));
-
-	gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom);
-	gGL.vertex2f(llfont_round_x(screen_rect.mLeft + slant_amt), 
-				llfont_round_y(screen_rect.mBottom));
-
-	gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom);
-	gGL.vertex2f(llfont_round_x(screen_rect.mRight + slant_amt), 
-				llfont_round_y(screen_rect.mBottom));
+	S32 index = 0;
+
+	vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mRight), llfont_round_y(screen_rect.mTop), 0.f);
+	uv_out[index] = LLVector2(uv_rect.mRight, uv_rect.mTop);
+	colors_out[index] = color;
+	index++;
+
+	vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mLeft), llfont_round_y(screen_rect.mTop), 0.f);
+	uv_out[index] = LLVector2(uv_rect.mLeft, uv_rect.mTop);
+	colors_out[index] = color;
+	index++;
+
+	vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mLeft), llfont_round_y(screen_rect.mBottom), 0.f);
+	uv_out[index] = LLVector2(uv_rect.mLeft, uv_rect.mBottom);
+	colors_out[index] = color;
+	index++;
+
+	vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mRight), llfont_round_y(screen_rect.mBottom), 0.f);
+	uv_out[index] = LLVector2(uv_rect.mRight, uv_rect.mBottom);
+	colors_out[index] = color;
 }
 
-void LLFontGL::drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, ShadowType shadow, F32 drop_shadow_strength) const
+void LLFontGL::drawGlyph(S32& glyph_count, LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_strength) const
 {
 	F32 slant_offset;
 	slant_offset = ((style & ITALIC) ? ( -mFontFreetype->getAscenderHeight() * 0.2f) : 0.f);
 
-	gGL.begin(LLRender::QUADS);
+	//FIXME: bold and drop shadow are mutually exclusive only for convenience
+	//Allow both when we need them.
+	if (style & BOLD)
 	{
-		//FIXME: bold and drop shadow are mutually exclusive only for convenience
-		//Allow both when we need them.
-		if (style & BOLD)
+		for (S32 pass = 0; pass < 2; pass++)
 		{
-			gGL.color4fv(color.mV);
-			for (S32 pass = 0; pass < 2; pass++)
-			{
-				LLRectf screen_rect_offset = screen_rect;
+			LLRectf screen_rect_offset = screen_rect;
 
-				screen_rect_offset.translate((F32)(pass * BOLD_OFFSET), 0.f);
-				renderQuad(screen_rect_offset, uv_rect, slant_offset);
-			}
+			screen_rect_offset.translate((F32)(pass * BOLD_OFFSET), 0.f);
+			renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect_offset, uv_rect, color, slant_offset);
+			glyph_count++;
 		}
-		else if (shadow == DROP_SHADOW_SOFT)
+	}
+	else if (shadow == DROP_SHADOW_SOFT)
+	{
+		LLColor4U shadow_color = LLFontGL::sShadowColor;
+		shadow_color.mV[VALPHA] = U8(color.mV[VALPHA] * drop_shadow_strength * DROP_SHADOW_SOFT_STRENGTH);
+		for (S32 pass = 0; pass < 5; pass++)
 		{
-			LLColor4 shadow_color = LLFontGL::sShadowColor;
-			shadow_color.mV[VALPHA] = color.mV[VALPHA] * drop_shadow_strength * DROP_SHADOW_SOFT_STRENGTH;
-			gGL.color4fv(shadow_color.mV);
-			for (S32 pass = 0; pass < 5; pass++)
-			{
-				LLRectf screen_rect_offset = screen_rect;
+			LLRectf screen_rect_offset = screen_rect;
 
-				switch(pass)
-				{
-				case 0:
-					screen_rect_offset.translate(-1.f, -1.f);
-					break;
-				case 1:
-					screen_rect_offset.translate(1.f, -1.f);
-					break;
-				case 2:
-					screen_rect_offset.translate(1.f, 1.f);
-					break;
-				case 3:
-					screen_rect_offset.translate(-1.f, 1.f);
-					break;
-				case 4:
-					screen_rect_offset.translate(0, -2.f);
-					break;
-				}
-			
-				renderQuad(screen_rect_offset, uv_rect, slant_offset);
+			switch(pass)
+			{
+			case 0:
+				screen_rect_offset.translate(-1.f, -1.f);
+				break;
+			case 1:
+				screen_rect_offset.translate(1.f, -1.f);
+				break;
+			case 2:
+				screen_rect_offset.translate(1.f, 1.f);
+				break;
+			case 3:
+				screen_rect_offset.translate(-1.f, 1.f);
+				break;
+			case 4:
+				screen_rect_offset.translate(0, -2.f);
+				break;
 			}
-			gGL.color4fv(color.mV);
-			renderQuad(screen_rect, uv_rect, slant_offset);
-		}
-		else if (shadow == DROP_SHADOW)
-		{
-			LLColor4 shadow_color = LLFontGL::sShadowColor;
-			shadow_color.mV[VALPHA] = color.mV[VALPHA] * drop_shadow_strength;
-			gGL.color4fv(shadow_color.mV);
-			LLRectf screen_rect_shadow = screen_rect;
-			screen_rect_shadow.translate(1.f, -1.f);
-			renderQuad(screen_rect_shadow, uv_rect, slant_offset);
-			gGL.color4fv(color.mV);
-			renderQuad(screen_rect, uv_rect, slant_offset);
-		}
-		else // normal rendering
-		{
-			gGL.color4fv(color.mV);
-			renderQuad(screen_rect, uv_rect, slant_offset);
+		
+			renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect_offset, uv_rect, shadow_color, slant_offset);
+			glyph_count++;
 		}
-
+		renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect, uv_rect, color, slant_offset);
+		glyph_count++;
+	}
+	else if (shadow == DROP_SHADOW)
+	{
+		LLColor4U shadow_color = LLFontGL::sShadowColor;
+		shadow_color.mV[VALPHA] = U8(color.mV[VALPHA] * drop_shadow_strength);
+		LLRectf screen_rect_shadow = screen_rect;
+		screen_rect_shadow.translate(1.f, -1.f);
+		renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect_shadow, uv_rect, shadow_color, slant_offset);
+		glyph_count++;
+		renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect, uv_rect, color, slant_offset);
+		glyph_count++;
+	}
+	else // normal rendering
+	{
+		renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect, uv_rect, color, slant_offset);
+		glyph_count++;
 	}
-	gGL.end();
 }
diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h
index 224ba51609218c51addcd01bc013acd3ab9e7e86..dc8d848ed25a11ba7a8589f17835d7f8e5937a38 100644
--- a/indra/llrender/llfontgl.h
+++ b/indra/llrender/llfontgl.h
@@ -211,8 +211,8 @@ private:
 	LLFontDescriptor mFontDescriptor;
 	LLPointer<LLFontFreetype> mFontFreetype;
 
-	void renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const;
-	void drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, ShadowType shadow, F32 drop_shadow_fade) const;
+	void renderQuad(LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const;
+	void drawGlyph(S32& glyph_count, LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_fade) const;
 
 	// Registry holds all instantiated fonts.
 	static LLFontRegistry* sFontRegistry;
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index ec1bd353cbaa73cd783a834ec67b28d071545291..c0edd92bc117421a3501d71cd992f2f901c6cce8 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -179,6 +179,9 @@ PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glRenderbufferStorageMultisampleEXT =
 // GL_EXT_framebuffer_blit
 PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebufferEXT = NULL;
 
+// GL_EXT_blend_func_separate
+PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT = NULL;
+
 // GL_ARB_draw_buffers
 PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB = NULL;
 
@@ -318,6 +321,7 @@ LLGLManager::LLGLManager() :
 	mHasCompressedTextures(FALSE),
 	mHasFramebufferObject(FALSE),
 	mHasFramebufferMultisample(FALSE),
+	mHasBlendFuncSeparate(FALSE),
 
 	mHasVertexBufferObject(FALSE),
 	mHasPBuffer(FALSE),
@@ -346,6 +350,8 @@ LLGLManager::LLGLManager() :
 
 	mHasSeparateSpecularColor(FALSE),
 
+	mDebugGPU(FALSE),
+
 	mDriverVersionMajor(1),
 	mDriverVersionMinor(0),
 	mDriverVersionRelease(0),
@@ -513,11 +519,23 @@ bool LLGLManager::initGL()
 		return false;
 	}
 	
+	setToDebugGPU();
 
 	initGLStates();
 	return true;
 }
 
+void LLGLManager::setToDebugGPU()
+{
+	//"MOBILE INTEL(R) 965 EXPRESS CHIP", 
+	if (mGLRenderer.find("INTEL") != std::string::npos && mGLRenderer.find("965") != std::string::npos)
+	{
+		mDebugGPU = TRUE ;
+	}
+
+	return ;
+}
+
 void LLGLManager::getGLInfo(LLSD& info)
 {
 	info["GLInfo"]["GLVendor"] = std::string((const char *)glGetString(GL_VENDOR));
@@ -626,6 +644,11 @@ void LLGLManager::initExtensions()
 	mHasDrawBuffers = TRUE;
 #else
 	mHasDrawBuffers = FALSE;
+# endif
+# if GL_EXT_blend_func_separate
+	mHasBlendFuncSeparate = TRUE;
+#else
+	mHasBlendFuncSeparate = FALSE;
 # endif
 	mHasMipMapGeneration = FALSE;
 	mHasSeparateSpecularColor = FALSE;
@@ -653,6 +676,7 @@ void LLGLManager::initExtensions()
 		&& ExtensionExists("GL_EXT_packed_depth_stencil", gGLHExts.mSysExts);
 	mHasFramebufferMultisample = mHasFramebufferObject && ExtensionExists("GL_EXT_framebuffer_multisample", gGLHExts.mSysExts);
 	mHasDrawBuffers = ExtensionExists("GL_ARB_draw_buffers", gGLHExts.mSysExts);
+	mHasBlendFuncSeparate = ExtensionExists("GL_EXT_blend_func_separate", gGLHExts.mSysExts);
 	mHasTextureRectangle = ExtensionExists("GL_ARB_texture_rectangle", gGLHExts.mSysExts);
 #if !LL_DARWIN
 	mHasPointParameters = !mIsATI && ExtensionExists("GL_ARB_point_parameters", gGLHExts.mSysExts);
@@ -676,6 +700,7 @@ void LLGLManager::initExtensions()
 		mHasFramebufferObject = FALSE;
 		mHasFramebufferMultisample = FALSE;
 		mHasDrawBuffers = FALSE;
+		mHasBlendFuncSeparate = FALSE;
 		mHasMipMapGeneration = FALSE;
 		mHasSeparateSpecularColor = FALSE;
 		mHasAnisotropic = FALSE;
@@ -700,6 +725,7 @@ void LLGLManager::initExtensions()
 		mHasShaderObjects = FALSE;
 		mHasVertexShader = FALSE;
 		mHasFragmentShader = FALSE;
+		mHasBlendFuncSeparate = FALSE;
 		LL_WARNS("RenderInit") << "GL extension support forced to SIMPLE level via LL_GL_BASICEXT" << LL_ENDL;
 	}
 	if (getenv("LL_GL_BLACKLIST"))	/* Flawfinder: ignore */
@@ -728,7 +754,8 @@ void LLGLManager::initExtensions()
 		if (strchr(blacklist,'r')) mHasDrawBuffers = FALSE;//S
 		if (strchr(blacklist,'s')) mHasFramebufferMultisample = FALSE;
 		if (strchr(blacklist,'t')) mHasTextureRectangle = FALSE;
-
+		if (strchr(blacklist,'u')) mHasBlendFuncSeparate = FALSE;//S
+		
 	}
 #endif // LL_LINUX || LL_SOLARIS
 	
@@ -776,6 +803,14 @@ void LLGLManager::initExtensions()
 	{
 		LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_fragment_shader" << LL_ENDL;
 	}
+	if (!mHasBlendFuncSeparate)
+	{
+		LL_INFOS("RenderInit") << "Couldn't initialize GL_EXT_blend_func_separate" << LL_ENDL;
+	}
+	if (!mHasDrawBuffers)
+	{
+		LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_draw_buffers" << LL_ENDL;
+	}
 
 	// Disable certain things due to known bugs
 	if (mIsIntel && mHasMipMapGeneration)
@@ -846,6 +881,10 @@ void LLGLManager::initExtensions()
 	{
 		glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC) GLH_EXT_GET_PROC_ADDRESS("glDrawBuffersARB");
 	}
+	if (mHasBlendFuncSeparate)
+	{
+		glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glBlendFuncSeparateEXT");
+	}
 #if (!LL_LINUX && !LL_SOLARIS) || LL_LINUX_NV_GL_HEADERS
 	// This is expected to be a static symbol on Linux GL implementations, except if we use the nvidia headers - bah
 	glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)GLH_EXT_GET_PROC_ADDRESS("glDrawRangeElements");
@@ -1008,24 +1047,9 @@ void flush_glerror()
 	glGetError();
 }
 
-void assert_glerror()
+void do_assert_glerror()
 {
-	if (!gGLActive)
-	{
-		//llwarns << "GL used while not active!" << llendl;
-
-		if (gDebugSession)
-		{
-			//ll_fail("GL used while not active");
-		}
-	}
-
-	if (gNoRender || !gDebugGL) 
-	{
-		return;
-	}
-	
-	if (!gGLManager.mInited)
+	if (LL_UNLIKELY(!gGLManager.mInited))
 	{
 		LL_ERRS("RenderInit") << "GL not initialized" << LL_ENDL;
 	}
@@ -1033,10 +1057,9 @@ void assert_glerror()
 	GLenum error;
 	error = glGetError();
 	BOOL quit = FALSE;
-	while (error)
+	while (LL_UNLIKELY(error))
 	{
 		quit = TRUE;
-#ifndef LL_LINUX // *FIX: !  This should be an error for linux as well.
 		GLubyte const * gl_error_msg = gluErrorString(error);
 		if (NULL != gl_error_msg)
 		{
@@ -1060,7 +1083,6 @@ void assert_glerror()
 			}
 		}
 		error = glGetError();
-#endif
 	}
 
 	if (quit)
@@ -1076,6 +1098,25 @@ void assert_glerror()
 	}
 }
 
+void assert_glerror()
+{
+	if (!gGLActive)
+	{
+		//llwarns << "GL used while not active!" << llendl;
+
+		if (gDebugSession)
+		{
+			//ll_fail("GL used while not active");
+		}
+	}
+
+	if (!gNoRender && gDebugGL) 
+	{
+		do_assert_glerror();
+	}
+}
+	
+
 void clear_glerror()
 {
 	//  Create or update texture to be used with this data 
@@ -1089,7 +1130,7 @@ void clear_glerror()
 //
 
 // Static members
-std::map<LLGLenum, LLGLboolean> LLGLState::sStateMap;
+boost::unordered_map<LLGLenum, LLGLboolean> LLGLState::sStateMap;
 
 GLboolean LLGLDepthTest::sDepthEnabled = GL_FALSE; // OpenGL default
 GLenum LLGLDepthTest::sDepthFunc = GL_LESS; // OpenGL default
@@ -1137,7 +1178,7 @@ void LLGLState::resetTextureStates()
 void LLGLState::dumpStates() 
 {
 	LL_INFOS("RenderState") << "GL States:" << LL_ENDL;
-	for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
+	for (boost::unordered_map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
 		 iter != sStateMap.end(); ++iter)
 	{
 		LL_INFOS("RenderState") << llformat(" 0x%04x : %s",(S32)iter->first,iter->second?"TRUE":"FALSE") << LL_ENDL;
@@ -1173,7 +1214,7 @@ void LLGLState::checkStates(const std::string& msg)
 		}
 	}
 	
-	for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
+	for (boost::unordered_map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
 		 iter != sStateMap.end(); ++iter)
 	{
 		LLGLenum state = iter->first;
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
index 46c57c758540d61b962efdda87ed4ebc3e3034b0..5e8965c06add464aa3d5bdedd1d39642ccf9b704 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -30,7 +30,7 @@
 // This file contains various stuff for handling gl extensions and other gl related stuff.
 
 #include <string>
-#include <map>
+#include <boost/unordered_map.hpp>
 #include <list>
 
 #include "llerror.h"
@@ -81,6 +81,7 @@ public:
 	BOOL mHasCompressedTextures;
 	BOOL mHasFramebufferObject;
 	BOOL mHasFramebufferMultisample;
+	BOOL mHasBlendFuncSeparate;
 	
 	// ARB Extensions
 	BOOL mHasVertexBufferObject;
@@ -113,6 +114,9 @@ public:
 
 	// Misc extensions
 	BOOL mHasSeparateSpecularColor;
+
+	//whether this GPU is in the debug list.
+	BOOL mDebugGPU;
 	
 	S32 mDriverVersionMajor;
 	S32 mDriverVersionMinor;
@@ -141,6 +145,7 @@ private:
 	void initExtensions();
 	void initGLStates();
 	void initGLImages();
+	void setToDebugGPU();
 };
 
 extern LLGLManager gGLManager;
@@ -234,7 +239,7 @@ public:
 	static void checkClientArrays(const std::string& msg = "", U32 data_mask = 0x0001);
 	
 protected:
-	static std::map<LLGLenum, LLGLboolean> sStateMap;
+	static boost::unordered_map<LLGLenum, LLGLboolean> sStateMap;
 	
 public:
 	enum { CURRENT_STATE = -2 };
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index 436c861ab4b7ffb6244c90d5a1b6f0bae08ddc4c..5a34b46d0cd3fc2d49c6494c1fc948f69f8a8f5d 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -210,6 +210,9 @@ extern PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImageARB;
 
 extern PFNGLCOLORTABLEEXTPROC glColorTableEXT;
 
+//GL_EXT_blend_func_separate
+extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
+
 //GL_EXT_framebuffer_object
 extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
 extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
@@ -243,7 +246,10 @@ extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
 # include "GL/glh_extensions.h"
 # undef __APPLE__
 
-#elif LL_LINUX 
+#elif LL_LINUX
+//----------------------------------------------------------------------------
+// LL_LINUX
+
 //----------------------------------------------------------------------------
 // Linux, MESA headers, but not necessarily assuming MESA runtime.
 // quotes so we get libraries/.../GL/ version
@@ -279,6 +285,7 @@ extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
 # define LL_LINUX_NV_GL_HEADERS 0
 #endif // LL_LINUX && defined(WINGDIAPI)
 
+
 #if LL_LINUX_NV_GL_HEADERS
 // Missing functions when using nvidia headers:
 extern PFNGLACTIVETEXTUREARBPROC	glActiveTextureARB;
@@ -439,6 +446,9 @@ extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
 extern PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glCompressedTexImage2DARB;
 extern PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImageARB;
 
+//GL_EXT_blend_func_separate
+extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
+
 //GL_EXT_framebuffer_object
 extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
 extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
@@ -467,7 +477,10 @@ extern PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebufferEXT;
 //GL_ARB_draw_buffers
 extern PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB;
 
+
 #elif LL_WINDOWS
+//----------------------------------------------------------------------------
+// LL_WINDOWS
 
 // windows gl headers depend on things like APIENTRY, so include windows.
 #define WIN32_LEAN_AND_MEAN
@@ -635,6 +648,9 @@ extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
 extern PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB;
 extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
 
+//GL_EXT_blend_func_separate
+extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
+
 //GL_EXT_framebuffer_object
 extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
 extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
@@ -663,6 +679,7 @@ extern PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebufferEXT;
 //GL_ARB_draw_buffers
 extern PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB;
 
+
 #elif LL_DARWIN
 //----------------------------------------------------------------------------
 // LL_DARWIN
@@ -679,6 +696,9 @@ extern PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB;
 // Note that they also must not be called on 10.3.9.  This should be taken care of by a runtime check for the existence of the GL extension.
 #include <AvailabilityMacros.h>
 
+//GL_EXT_blend_func_separate
+extern void glBlendFuncSeparateEXT(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+
 // GL_EXT_framebuffer_object
 extern GLboolean glIsRenderbufferEXT(GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
 extern void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 7860b32f343a2d2a6383b5a6f8a340f03bac8955..90fcf6ab3f180917a57bf95950d1e70800813dc9 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -144,12 +144,12 @@ void LLImageGL::checkTexSize(bool forced) const
 			if (gDebugSession)
 			{
 				gFailLog << "wrong texture size and discard level!" << 
-					mWidth << " Height: " << mHeight << " Current Level: " << mCurrentDiscardLevel << std::endl;
+					mWidth << " Height: " << mHeight << " Current Level: " << (S32)mCurrentDiscardLevel << std::endl;
 			}
 			else
 			{
 				llerrs << "wrong texture size and discard level: width: " << 
-					mWidth << " Height: " << mHeight << " Current Level: " << mCurrentDiscardLevel << llendl ;
+					mWidth << " Height: " << mHeight << " Current Level: " << (S32)mCurrentDiscardLevel << llendl ;
 			}
 		}
 
@@ -1051,8 +1051,12 @@ BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_
 {
 	if (gGL.getTexUnit(0)->bind(this, false, true))
 	{
-		checkTexSize(true) ;
-		llcallstacks << fb_x << " : " << fb_y << " : " << x_pos << " : " << y_pos << " : " << width << " : " << height << llcallstacksendl ;
+		if(gGLManager.mDebugGPU)
+		{
+			llinfos << "Calling glCopyTexSubImage2D(...)" << llendl ;
+			checkTexSize(true) ;
+			llcallstacks << fb_x << " : " << fb_y << " : " << x_pos << " : " << y_pos << " : " << width << " : " << height << llcallstacksendl ;
+		}
 
 		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, fb_x, fb_y, x_pos, y_pos, width, height);
 		mGLTextureCreated = true;
@@ -1648,7 +1652,7 @@ void LLImageGL::calcAlphaChannelOffsetAndStride()
 	}
 }
 
-void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
+void LLImageGL::analyzeAlpha(const void* data_in, U32 w, U32 h)
 {
 	if(!mNeedsAlphaAndPickMask)
 	{
@@ -1656,26 +1660,91 @@ void LLImageGL::analyzeAlpha(const void* data_in, S32 w, S32 h)
 	}
 
 	U32 length = w * h;
-	const GLubyte* current = ((const GLubyte*) data_in) + mAlphaOffset ;
+	U32 alphatotal = 0;
 	
-	S32 sample[16];
-	memset(sample, 0, sizeof(S32)*16);
-
-	for (U32 i = 0; i < length; i++)
+	U32 sample[16];
+	memset(sample, 0, sizeof(U32)*16);
+
+	// generate histogram of quantized alpha.
+	// also add-in the histogram of a 2x2 box-sampled version.  The idea is
+	// this will mid-skew the data (and thus increase the chances of not
+	// being used as a mask) from high-frequency alpha maps which
+	// suffer the worst from aliasing when used as alpha masks.
+	if (w >= 2 && h >= 2)
+	{
+		llassert(w%2 == 0);
+		llassert(h%2 == 0);
+		const GLubyte* rowstart = ((const GLubyte*) data_in) + mAlphaOffset;
+		for (U32 y = 0; y < h; y+=2)
+		{
+			const GLubyte* current = rowstart;
+			for (U32 x = 0; x < w; x+=2)
+			{
+				const U32 s1 = current[0];
+				alphatotal += s1;
+				const U32 s2 = current[w * mAlphaStride];
+				alphatotal += s2;
+				current += mAlphaStride;
+				const U32 s3 = current[0];
+				alphatotal += s3;
+				const U32 s4 = current[w * mAlphaStride];
+				alphatotal += s4;
+				current += mAlphaStride;
+
+				++sample[s1/16];
+				++sample[s2/16];
+				++sample[s3/16];
+				++sample[s4/16];
+
+				const U32 asum = (s1+s2+s3+s4);
+				alphatotal += asum;
+				sample[asum/(16*4)] += 4;
+			}
+			
+			rowstart += 2 * w * mAlphaStride;
+		}
+		length *= 2; // we sampled everything twice, essentially
+	}
+	else
 	{
-		++sample[*current/16];
-		current += mAlphaStride ;
+		const GLubyte* current = ((const GLubyte*) data_in) + mAlphaOffset;
+		for (U32 i = 0; i < length; i++)
+		{
+			const U32 s1 = *current;
+			alphatotal += s1;
+			++sample[s1/16];
+			current += mAlphaStride;
+		}
 	}
+	
+	// if more than 1/16th of alpha samples are mid-range, this
+	// shouldn't be treated as a 1-bit mask
 
-	U32 total = 0;
+	// also, if all of the alpha samples are clumped on one half
+	// of the range (but not at an absolute extreme), then consider
+	// this to be an intentional effect and don't treat as a mask.
+
+	U32 midrangetotal = 0;
 	for (U32 i = 4; i < 11; i++)
 	{
-		total += sample[i];
+		midrangetotal += sample[i];
+	}
+	U32 lowerhalftotal = 0;
+	for (U32 i = 0; i < 8; i++)
+	{
+		lowerhalftotal += sample[i];
+	}
+	U32 upperhalftotal = 0;
+	for (U32 i = 8; i < 16; i++)
+	{
+		upperhalftotal += sample[i];
 	}
 
-	if (total > length/16)
+	if (midrangetotal > length/16 || // lots of midrange, or
+	    (lowerhalftotal == length && alphatotal != 0) || // all close to transparent but not all totally transparent, or
+	    (upperhalftotal == length && alphatotal != 255*length)) // all close to opaque but not all totally opaque
 	{
-		mIsMask = FALSE;
+		mIsMask = FALSE; // not suitable for masking
 	}
 	else
 	{
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index 95379298ef68d8ea18cab0d6b6e97154c9868375..87a835cdccf101e6dc7c7b4a081d0749a8bf2984 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -85,7 +85,7 @@ public:
 protected:
 	virtual ~LLImageGL();
 
-	void analyzeAlpha(const void* data_in, S32 w, S32 h);
+	void analyzeAlpha(const void* data_in, U32 w, U32 h);
 	void calcAlphaChannelOffsetAndStride();
 
 public:
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index a829616df2835d5efdf7b953df06eadca6a343ea..e1f6964f838a80462023d18e767e08eb47304e37 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -772,8 +772,10 @@ LLRender::LLRender()
 
 	mCurrAlphaFunc = CF_DEFAULT;
 	mCurrAlphaFuncVal = 0.01f;
-	mCurrBlendSFactor = BF_UNDEF;
-	mCurrBlendDFactor = BF_UNDEF;
+	mCurrBlendColorSFactor = BF_UNDEF;
+	mCurrBlendAlphaSFactor = BF_UNDEF;
+	mCurrBlendColorDFactor = BF_UNDEF;
+	mCurrBlendAlphaDFactor = BF_UNDEF;
 }
 
 LLRender::~LLRender()
@@ -843,9 +845,9 @@ void LLRender::translateUI(F32 x, F32 y, F32 z)
 		llerrs << "Need to push a UI translation frame before offsetting" << llendl;
 	}
 
-	mUIOffset.front().mV[0] += x;
-	mUIOffset.front().mV[1] += y;
-	mUIOffset.front().mV[2] += z;
+	mUIOffset.back().mV[0] += x;
+	mUIOffset.back().mV[1] += y;
+	mUIOffset.back().mV[2] += z;
 }
 
 void LLRender::scaleUI(F32 x, F32 y, F32 z)
@@ -855,27 +857,27 @@ void LLRender::scaleUI(F32 x, F32 y, F32 z)
 		llerrs << "Need to push a UI transformation frame before scaling." << llendl;
 	}
 
-	mUIScale.front().scaleVec(LLVector3(x,y,z));
+	mUIScale.back().scaleVec(LLVector3(x,y,z));
 }
 
 void LLRender::pushUIMatrix()
 {
 	if (mUIOffset.empty())
 	{
-		mUIOffset.push_front(LLVector3(0,0,0));
+		mUIOffset.push_back(LLVector3(0,0,0));
 	}
 	else
 	{
-		mUIOffset.push_front(mUIOffset.front());
+		mUIOffset.push_back(mUIOffset.back());
 	}
 	
 	if (mUIScale.empty())
 	{
-		mUIScale.push_front(LLVector3(1,1,1));
+		mUIScale.push_back(LLVector3(1,1,1));
 	}
 	else
 	{
-		mUIScale.push_front(mUIScale.front());
+		mUIScale.push_back(mUIScale.back());
 	}
 }
 
@@ -885,8 +887,8 @@ void LLRender::popUIMatrix()
 	{
 		llerrs << "UI offset stack blown." << llendl;
 	}
-	mUIOffset.pop_front();
-	mUIScale.pop_front();
+	mUIOffset.pop_back();
+	mUIScale.pop_back();
 }
 
 LLVector3 LLRender::getUITranslation()
@@ -895,7 +897,7 @@ LLVector3 LLRender::getUITranslation()
 	{
 		llerrs << "UI offset stack empty." << llendl;
 	}
-	return mUIOffset.front();
+	return mUIOffset.back();
 }
 
 LLVector3 LLRender::getUIScale()
@@ -904,7 +906,7 @@ LLVector3 LLRender::getUIScale()
 	{
 		llerrs << "UI scale stack empty." << llendl;
 	}
-	return mUIScale.front();
+	return mUIScale.back();
 }
 
 
@@ -914,8 +916,8 @@ void LLRender::loadUIIdentity()
 	{
 		llerrs << "Need to push UI translation frame before clearing offset." << llendl;
 	}
-	mUIOffset.front().setVec(0,0,0);
-	mUIScale.front().setVec(1,1,1);
+	mUIOffset.back().setVec(0,0,0);
+	mUIScale.back().setVec(1,1,1);
 }
 
 void LLRender::setColorMask(bool writeColor, bool writeAlpha)
@@ -989,15 +991,44 @@ void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
 {
 	llassert(sfactor < BF_UNDEF);
 	llassert(dfactor < BF_UNDEF);
-	if (mCurrBlendSFactor != sfactor || mCurrBlendDFactor != dfactor)
+	if (mCurrBlendColorSFactor != sfactor || mCurrBlendColorDFactor != dfactor ||
+	    mCurrBlendAlphaSFactor != sfactor || mCurrBlendAlphaDFactor != dfactor)
 	{
-		mCurrBlendSFactor = sfactor;
-		mCurrBlendDFactor = dfactor;
+		mCurrBlendColorSFactor = sfactor;
+		mCurrBlendAlphaSFactor = sfactor;
+		mCurrBlendColorDFactor = dfactor;
+		mCurrBlendAlphaDFactor = dfactor;
 		flush();
 		glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]);
 	}
 }
 
+void LLRender::blendFunc(eBlendFactor color_sfactor, eBlendFactor color_dfactor,
+			 eBlendFactor alpha_sfactor, eBlendFactor alpha_dfactor)
+{
+	llassert(color_sfactor < BF_UNDEF);
+	llassert(color_dfactor < BF_UNDEF);
+	llassert(alpha_sfactor < BF_UNDEF);
+	llassert(alpha_dfactor < BF_UNDEF);
+	if (!gGLManager.mHasBlendFuncSeparate)
+	{
+		LL_WARNS_ONCE("render") << "no glBlendFuncSeparateEXT(), using color-only blend func" << llendl;
+		blendFunc(color_sfactor, color_dfactor);
+		return;
+	}
+	if (mCurrBlendColorSFactor != color_sfactor || mCurrBlendColorDFactor != color_dfactor ||
+	    mCurrBlendAlphaSFactor != alpha_sfactor || mCurrBlendAlphaDFactor != alpha_dfactor)
+	{
+		mCurrBlendColorSFactor = color_sfactor;
+		mCurrBlendAlphaSFactor = alpha_sfactor;
+		mCurrBlendColorDFactor = color_dfactor;
+		mCurrBlendAlphaDFactor = alpha_dfactor;
+		flush();
+		glBlendFuncSeparateEXT(sGLBlendFactor[color_sfactor], sGLBlendFactor[color_dfactor],
+				       sGLBlendFactor[alpha_sfactor], sGLBlendFactor[alpha_dfactor]);
+	}
+}
+
 LLTexUnit* LLRender::getTexUnit(U32 index)
 {
 	if (index < mTexUnits.size())
@@ -1173,18 +1204,79 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
 	}
 	else
 	{
-		LLVector3 vert = (LLVector3(x,y,z)+mUIOffset.front()).scaledVec(mUIScale.front());
+		LLVector3 vert = (LLVector3(x,y,z)+mUIOffset.back()).scaledVec(mUIScale.back());
 		mVerticesp[mCount] = vert;
 	}
 
 	mCount++;
-	if (mCount < 4096)
+	mVerticesp[mCount] = mVerticesp[mCount-1];
+	mColorsp[mCount] = mColorsp[mCount-1];
+	mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
+}
+
+void LLRender::vertexBatchPreTransformed(LLVector3* verts, S32 vert_count)
+{
+	if (mCount + vert_count > 4094)
 	{
-		mVerticesp[mCount] = mVerticesp[mCount-1];
-		mColorsp[mCount] = mColorsp[mCount-1];
+		//	llwarns << "GL immediate mode overflow.  Some geometry not drawn." << llendl;
+		return;
+	}
+
+	for (S32 i = 0; i < vert_count; i++)
+	{
+		mVerticesp[mCount] = verts[i];
+
+		mCount++;
 		mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
+		mColorsp[mCount] = mColorsp[mCount-1];
 	}
+
+	mVerticesp[mCount] = mVerticesp[mCount-1];
 }
+
+void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count)
+{
+	if (mCount + vert_count > 4094)
+	{
+		//	llwarns << "GL immediate mode overflow.  Some geometry not drawn." << llendl;
+		return;
+	}
+
+	for (S32 i = 0; i < vert_count; i++)
+	{
+		mVerticesp[mCount] = verts[i];
+		mTexcoordsp[mCount] = uvs[i];
+
+		mCount++;
+		mColorsp[mCount] = mColorsp[mCount-1];
+	}
+
+	mVerticesp[mCount] = mVerticesp[mCount-1];
+	mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
+}
+
+void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U* colors, S32 vert_count)
+{
+	if (mCount + vert_count > 4094)
+	{
+		//	llwarns << "GL immediate mode overflow.  Some geometry not drawn." << llendl;
+		return;
+	}
+
+	for (S32 i = 0; i < vert_count; i++)
+	{
+		mVerticesp[mCount] = verts[i];
+		mTexcoordsp[mCount] = uvs[i];
+		mColorsp[mCount] = colors[i];
+
+		mCount++;
+	}
+
+	mVerticesp[mCount] = mVerticesp[mCount-1];
+	mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
+	mColorsp[mCount] = mColorsp[mCount-1];
+}
+
 void LLRender::vertex2i(const GLint& x, const GLint& y)
 {
 	vertex3f((GLfloat) x, (GLfloat) y, 0);	
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index fb3a4d214d2b01fd72d2cf9b1a828bd8804ef942..2767aa64a8a675bf891e11a4b1ee3928f2938e98 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -311,13 +311,21 @@ public:
 	void color3fv(const GLfloat* c);
 	void color4ubv(const GLubyte* c);
 
+	void vertexBatchPreTransformed(LLVector3* verts, S32 vert_count);
+	void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count);
+	void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U*, S32 vert_count);
+
 	void setColorMask(bool writeColor, bool writeAlpha);
 	void setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha);
 	void setSceneBlendType(eBlendType type);
 
 	void setAlphaRejectSettings(eCompareFunc func, F32 value = 0.01f);
 
+	// applies blend func to both color and alpha
 	void blendFunc(eBlendFactor sfactor, eBlendFactor dfactor);
+	// applies separate blend functions to color and alpha
+	void blendFunc(eBlendFactor color_sfactor, eBlendFactor color_dfactor,
+		       eBlendFactor alpha_sfactor, eBlendFactor alpha_dfactor);
 
 	LLTexUnit* getTexUnit(U32 index);
 
@@ -356,13 +364,15 @@ private:
 	std::vector<LLTexUnit*>		mTexUnits;
 	LLTexUnit*			mDummyTexUnit;
 
-	eBlendFactor mCurrBlendSFactor;
-	eBlendFactor mCurrBlendDFactor;
+	eBlendFactor mCurrBlendColorSFactor;
+	eBlendFactor mCurrBlendColorDFactor;
+	eBlendFactor mCurrBlendAlphaSFactor;
+	eBlendFactor mCurrBlendAlphaDFactor;
 
 	F32				mMaxAnisotropy;
 
-	std::list<LLVector3> mUIOffset;
-	std::list<LLVector3> mUIScale;
+	std::vector<LLVector3> mUIOffset;
+	std::vector<LLVector3> mUIScale;
 
 };
 
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 0f41e278b60beb5116efd4ef898b66c5a92ef228..de4501dd0f76ea01aaac4bf56e3f2c1b2c9f867f 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -376,6 +376,11 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :
 	{
 		mUsage = 0 ; 
 	}
+
+	if (mUsage == GL_STREAM_DRAW_ARB && !sUseStreamDraw)
+	{
+		mUsage = 0;
+	}
 	
 	if (mUsage == GL_STREAM_DRAW_ARB && !sUseStreamDraw)
 	{
diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h
index e2de4b9d3b039aece8da55ff577a0df4fa710a69..1fe64c472edea53d99b2a7e8385c266e57a5ec5c 100644
--- a/indra/llui/llaccordionctrl.h
+++ b/indra/llui/llaccordionctrl.h
@@ -133,7 +133,7 @@ public:
 	 */
 	const LLAccordionCtrlTab* getExpandedTab() const;
 
-	const LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; }
+	LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; }
 
 	bool getFitParent() const {return mFitParent;}
 
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index 4e0537f5924be719b18a467e00b04cd977283e38..b7da5f4a1b8794db4c1748ee1ae83cd120a7d874 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -353,6 +353,7 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p)
 	,mPaddingBottom(p.padding_bottom)
 	,mCanOpenClose(true)
 	,mFitPanel(p.fit_panel)
+	,mSelectionEnabled(p.selection_enabled)
 	,mContainerPanel(NULL)
 	,mScrollbar(NULL)
 {
@@ -824,7 +825,7 @@ void LLAccordionCtrlTab::showAndFocusHeader()
 {
 	LLAccordionCtrlTabHeader* header = getChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);	
 	header->setFocus(true);
-	header->setSelected(true);
+	header->setSelected(mSelectionEnabled);
 
 	LLRect screen_rc;
 	LLRect selected_rc = header->getRect();
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index 8ae91ad6517d9b3fed41d9df4a83953ca5ab8498..d6ac8cbc8fac67b02f57d6996c335bcc645d582a 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -236,6 +236,8 @@ private:
 	bool mStoredOpenCloseState;
 	bool mWasStateStored;
 
+	bool mSelectionEnabled;
+
 	LLScrollbar*	mScrollbar;
 	LLView*			mContainerPanel;
 
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index ac5651e4b62ed42a307184dcbc2081dcdf6e4965..f0f34ebd4fab910d3e2d23f29ac989d058dd3df8 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -114,6 +114,7 @@ LLButton::LLButton(const LLButton::Params& p)
 	mFlashing( FALSE ),
 	mCurGlowStrength(0.f),
 	mNeedsHighlight(FALSE),
+	mMouseOver(false),
 	mUnselectedLabel(p.label()),
 	mSelectedLabel(p.label_selected()),
 	mGLFont(p.font),
@@ -498,7 +499,11 @@ void LLButton::onMouseEnter(S32 x, S32 y, MASK mask)
 	LLUICtrl::onMouseEnter(x, y, mask);
 
 	if (isInEnabledChain())
+	{
 		mNeedsHighlight = TRUE;
+	}
+
+	mMouseOver = true;
 }
 
 void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)
@@ -506,6 +511,7 @@ void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)
 	LLUICtrl::onMouseLeave(x, y, mask);
 
 	mNeedsHighlight = FALSE;
+	mMouseOver = true;
 }
 
 void LLButton::setHighlight(bool b)
@@ -559,14 +565,10 @@ void LLButton::draw()
 	}
 
 	// Unselected image assignments
-	S32 local_mouse_x;
-	S32 local_mouse_y;
-	LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
-
 	bool enabled = isInEnabledChain();
 
 	bool pressed = pressed_by_keyboard 
-					|| (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y))
+					|| (hasMouseCapture() && mMouseOver)
 					|| mForcePressedState;
 	bool selected = getToggleState();
 	
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 2d5fefa78c89fa4ac2b193c317d70a50a2b67a57..d87ceb7c422fe1a22931ec0ada2ee4541a27f2ab 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -350,6 +350,7 @@ private:
 	BOOL						mCommitOnReturn;
 	BOOL						mFadeWhenDisabled;
 	bool						mForcePressedState;
+	bool						mMouseOver;
 
 	LLFrameTimer				mFlashingTimer;
 };
diff --git a/indra/llui/llcallbackmap.h b/indra/llui/llcallbackmap.h
index eb8b423b292a66b4d35537d843ca9381061cf936..0a10877c092c6cb69f0df16fe43c99f2c8d28f1c 100644
--- a/indra/llui/llcallbackmap.h
+++ b/indra/llui/llcallbackmap.h
@@ -29,12 +29,13 @@
 
 #include <map>
 #include <string>
+#include <boost/function.hpp>
 
 class LLCallbackMap
 {
 public:
 	// callback definition.
-	typedef void* (*callback_t)(void* data);
+	typedef boost::function<void* (void* data)> callback_t;
 	
 	typedef std::map<std::string, LLCallbackMap> map_t;
 	typedef map_t::iterator map_iter_t;
diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
index bf55239f1bd15a9263b2df26e7559c80051ba652..ca2dc644a488e70e005caf5239c1e7d05d669a31 100644
--- a/indra/llui/lldockablefloater.cpp
+++ b/indra/llui/lldockablefloater.cpp
@@ -43,12 +43,13 @@ void LLDockableFloater::init(LLDockableFloater* thiz)
 	thiz->setCanClose(TRUE);
 	thiz->setCanDock(true);
 	thiz->setCanMinimize(TRUE);
+	thiz->setOverlapsScreenChannel(false);
+	thiz->mForceDocking = false;
 }
 
 LLDockableFloater::LLDockableFloater(LLDockControl* dockControl,
 		const LLSD& key, const Params& params) :
 	LLFloater(key, params), mDockControl(dockControl), mUniqueDocking(true)
-	, mOverlapsScreenChannel(false)
 {
 	init(this);
 	mUseTongue = true;
@@ -75,6 +76,12 @@ LLDockableFloater::~LLDockableFloater()
 
 BOOL LLDockableFloater::postBuild()
 {
+	// Remember we should force docking when the floater is opened for the first time
+	if (mIsDockedStateForcedCallback != NULL && mIsDockedStateForcedCallback())
+	{
+		mForceDocking = true;
+	}
+
 	mDockTongue = LLUI::getUIImage("windows/Flyout_Pointer.png");
 	LLFloater::setDocked(true);
 	return LLView::postBuild();
@@ -128,6 +135,14 @@ void LLDockableFloater::resetInstance()
 
 void LLDockableFloater::setVisible(BOOL visible)
 {
+	// Force docking if requested
+	if (visible && mForceDocking)
+	{
+		setCanDock(true);
+		setDocked(true);
+		mForceDocking = false;
+	}
+
 	if(visible && isDocked())
 	{
 		resetInstance();
diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h
index 86dcf670b1530d40d4f6bb370a5b3d0c5c8c1a3b..8deb6c1159fa111ec0698b97c274b5cb6bf1aa9a 100644
--- a/indra/llui/lldockablefloater.h
+++ b/indra/llui/lldockablefloater.h
@@ -124,6 +124,10 @@ protected:
 	void setDockControl(LLDockControl* dockControl);
 	const LLUIImagePtr& getDockTongue();
 
+	// Checks if docking should be forced.
+	// It may be useful e.g. if floater created in mouselook mode (see EXT-5609)
+	boost::function<BOOL ()> mIsDockedStateForcedCallback;
+
 private:
 	std::auto_ptr<LLDockControl> mDockControl;
 	LLUIImagePtr mDockTongue;
@@ -137,6 +141,9 @@ private:
 	bool mUseTongue;
 
 	bool mOverlapsScreenChannel;
+
+	// Force docking when the floater is being shown for the first time.
+	bool mForceDocking;
 };
 
 #endif /* LL_DOCKABLEFLOATER_H */
diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp
index 9ad7c01bd5109f6871d4ea31690d441e9c2e2cbd..42e6c3c78621fd5c73bec8dfba5d02a92cb72472 100644
--- a/indra/llui/lldraghandle.cpp
+++ b/indra/llui/lldraghandle.cpp
@@ -107,7 +107,7 @@ void LLDragHandleTop::setTitle(const std::string& title)
 		params.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT | FOLLOWS_RIGHT);
 		params.font_shadow(LLFontGL::DROP_SHADOW_SOFT);
 		params.use_ellipses = true;
-		params.allow_html = false; //cancel URL replacement in floater title
+		params.parse_urls = false; //cancel URL replacement in floater title
 		mTitleBox = LLUICtrlFactory::create<LLTextBox> (params);
 		addChild( mTitleBox );
 	}
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index b28399a36b6acb62e9dbddd7f807ce8894568852..c57c02f4b12e21d6a73e6e8c1b87c9dc00bcb179 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -607,8 +607,14 @@ void LLFlatListView::onItemMouseClick(item_pair_t* item_pair, MASK mask)
 		return;
 	}
 
-	if (!(mask & MASK_CONTROL) || !mMultipleSelection) resetSelection();
+	//no need to do additional commit on selection reset
+	if (!(mask & MASK_CONTROL) || !mMultipleSelection) resetSelection(true);
+
+	//only CTRL usage allows to deselect an item, usual clicking on an item cannot deselect it
+	if (mask & MASK_CONTROL)
 	selectItemPair(item_pair, select_item);
+	else
+		selectItemPair(item_pair, true);
 }
 
 void LLFlatListView::onItemRightMouseClick(item_pair_t* item_pair, MASK mask)
@@ -660,6 +666,14 @@ BOOL LLFlatListView::handleKeyHere(KEY key, MASK mask)
 			}
 			break;
 		}
+		case KEY_ESCAPE:
+		{
+			if (mask == MASK_NONE)
+			{
+				setFocus(FALSE); // pass focus to the game area (EXT-8357)
+			}
+			break;
+		}
 		default:
 			break;
 	}
@@ -775,6 +789,18 @@ bool LLFlatListView::selectItemPair(item_pair_t* item_pair, bool select)
 	return true;
 }
 
+void LLFlatListView::scrollToShowFirstSelectedItem()
+{
+	if (!mSelectedItemPairs.size())	return;
+
+	LLRect selected_rc = mSelectedItemPairs.front()->first->getRect();
+
+	if (selected_rc.isValid())
+	{
+		scrollToShowRect(selected_rc);
+	}
+}
+
 LLRect LLFlatListView::getLastSelectedItemRect()
 {
 	if (!mSelectedItemPairs.size())
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index afd0176d987c144f65aa65edc295e2e7c59e4ddd..051585369850a330d71a98e031fdc95cfdd62423 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -292,6 +292,7 @@ public:
 
 	bool updateValue(const LLSD& old_value, const LLSD& new_value);
 
+	void scrollToShowFirstSelectedItem();
 
 	void selectFirstItem	();
 	void selectLastItem		();
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 3cfb2c5d4a3bd9c4580d6402e9c4cc0eac56cbf1..e1203971ea1a2d387183e4072b0eb36dd64de4a7 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2279,6 +2279,7 @@ void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom)
 	S32 floater_header_size = default_params.header_height;
 	static LLUICachedControl<S32> minimized_width ("UIMinimizedWidth", 0);
 	LLRect snap_rect_local = getLocalSnapRect();
+	snap_rect_local.mTop += mMinimizePositionVOffset;
 	for(S32 col = snap_rect_local.mLeft;
 		col < snap_rect_local.getWidth() - minimized_width;
 		col += minimized_width)
@@ -2376,6 +2377,19 @@ BOOL LLFloaterView::allChildrenClosed()
 	return true;
 }
 
+void LLFloaterView::shiftFloaters(S32 x_offset, S32 y_offset)
+{
+	for (child_list_const_iter_t it = getChildList()->begin(); it != getChildList()->end(); ++it)
+	{
+		LLFloater* floaterp = dynamic_cast<LLFloater*>(*it);
+
+		if (floaterp && floaterp->isMinimized())
+		{
+			floaterp->translate(x_offset, y_offset);
+		}
+	}
+}
+
 void LLFloaterView::refresh()
 {
 	// Constrain children to be entirely on the screen
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 2deae29607c115f997ee816fdef48a8066d46c4b..5e482cbac342dcb9ac8d17ab51fe7c8b9979cd26 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -449,6 +449,7 @@ public:
 	// Given a child of gFloaterView, make sure this view can fit entirely onscreen.
 	void			adjustToFitScreen(LLFloater* floater, BOOL allow_partial_outside);
 
+	void			setMinimizePositionVerticalOffset(S32 offset) { mMinimizePositionVOffset = offset; }
 	void			getMinimizePosition( S32 *left, S32 *bottom);
 	void			restoreAll();		// un-minimize all floaters
 	typedef std::set<LLView*> skip_list_t;
@@ -465,6 +466,7 @@ public:
 	// attempt to close all floaters
 	void			closeAllChildren(bool app_quitting);
 	BOOL			allChildrenClosed();
+	void			shiftFloaters(S32 x_offset, S32 y_offset);
 
 	LLFloater* getFrontmost() const;
 	LLFloater* getBackmost() const;
@@ -484,6 +486,7 @@ private:
 	BOOL			mFocusCycleMode;
 	S32				mSnapOffsetBottom;
 	S32				mSnapOffsetRight;
+	S32				mMinimizePositionVOffset;
 };
 
 //
diff --git a/indra/llui/lllocalcliprect.cpp b/indra/llui/lllocalcliprect.cpp
index 1a311bb13a5d574d94a512b8581dba36158e1506..6841301219427752c66f74675a2f5201d15a7fae 100644
--- a/indra/llui/lllocalcliprect.cpp
+++ b/indra/llui/lllocalcliprect.cpp
@@ -27,33 +27,8 @@
 #include "lllocalcliprect.h"
 
 #include "llfontgl.h"
-#include "llgl.h"
 #include "llui.h"
 
-#include <stack>
-
-//---------------------------------------------------------------------------
-// LLScreenClipRect
-// implementation class in screen space
-//---------------------------------------------------------------------------
-class LLScreenClipRect
-{
-public:
-	LLScreenClipRect(const LLRect& rect, BOOL enabled = TRUE);
-	virtual ~LLScreenClipRect();
-
-private:
-	static void pushClipRect(const LLRect& rect);
-	static void popClipRect();
-	static void updateScissorRegion();
-
-private:
-	LLGLState		mScissorState;
-	BOOL			mEnabled;
-
-	static std::stack<LLRect> sClipRectStack;
-};
-
 /*static*/ std::stack<LLRect> LLScreenClipRect::sClipRectStack;
 
 
@@ -64,9 +39,9 @@ LLScreenClipRect::LLScreenClipRect(const LLRect& rect, BOOL enabled)
 	if (mEnabled)
 	{
 		pushClipRect(rect);
+		mScissorState.setEnabled(!sClipRectStack.empty());
+		updateScissorRegion();
 	}
-	mScissorState.setEnabled(!sClipRectStack.empty());
-	updateScissorRegion();
 }
 
 LLScreenClipRect::~LLScreenClipRect()
@@ -74,8 +49,8 @@ LLScreenClipRect::~LLScreenClipRect()
 	if (mEnabled)
 	{
 		popClipRect();
+		updateScissorRegion();
 	}
-	updateScissorRegion();
 }
 
 //static 
@@ -125,16 +100,11 @@ void LLScreenClipRect::updateScissorRegion()
 // LLLocalClipRect
 //---------------------------------------------------------------------------
 LLLocalClipRect::LLLocalClipRect(const LLRect& rect, BOOL enabled /* = TRUE */)
-{
-	LLRect screen(rect.mLeft + LLFontGL::sCurOrigin.mX, 
-		rect.mTop + LLFontGL::sCurOrigin.mY, 
-		rect.mRight + LLFontGL::sCurOrigin.mX, 
-		rect.mBottom + LLFontGL::sCurOrigin.mY);
-	mScreenClipRect = new LLScreenClipRect(screen, enabled);
-}
+:	LLScreenClipRect(LLRect(rect.mLeft + LLFontGL::sCurOrigin.mX, 
+					rect.mTop + LLFontGL::sCurOrigin.mY, 
+					rect.mRight + LLFontGL::sCurOrigin.mX, 
+					rect.mBottom + LLFontGL::sCurOrigin.mY), enabled)
+{}
 
 LLLocalClipRect::~LLLocalClipRect()
-{
-	delete mScreenClipRect;
-	mScreenClipRect = NULL;
-}
+{}
diff --git a/indra/llui/lllocalcliprect.h b/indra/llui/lllocalcliprect.h
index 0097958916ddd0392c524414086c7d0eb406d104..eeeaf2adb6053725abe1190cb4ff0ccb851c4d90 100644
--- a/indra/llui/lllocalcliprect.h
+++ b/indra/llui/lllocalcliprect.h
@@ -25,7 +25,9 @@
 #ifndef LLLOCALCLIPRECT_H
 #define LLLOCALCLIPRECT_H
 
+#include "llgl.h"
 #include "llrect.h"		// can't forward declare, it's templated
+#include <stack>
 
 // Clip rendering to a specific rectangle using GL scissor
 // Just create one of these on the stack:
@@ -33,15 +35,29 @@
 //     LLLocalClipRect(rect);
 //     draw();
 // }
-class LLLocalClipRect
+class LLScreenClipRect
 {
 public:
-	LLLocalClipRect(const LLRect& rect, BOOL enabled = TRUE);
-	~LLLocalClipRect();
+	LLScreenClipRect(const LLRect& rect, BOOL enabled = TRUE);
+	virtual ~LLScreenClipRect();
+
+private:
+	static void pushClipRect(const LLRect& rect);
+	static void popClipRect();
+	static void updateScissorRegion();
 
 private:
-	// implementation class
-	class LLScreenClipRect* mScreenClipRect;
+	LLGLState		mScissorState;
+	BOOL			mEnabled;
+
+	static std::stack<LLRect> sClipRectStack;
+};
+
+class LLLocalClipRect : public LLScreenClipRect
+{
+public:
+	LLLocalClipRect(const LLRect& rect, BOOL enabled = TRUE);
+	~LLLocalClipRect();
 };
 
 #endif
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index c53361038126443932dab821a31f3b17387ca396..3e652ea9603a351a3e5e7573174fcbccd4c6d4e5 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -52,6 +52,7 @@
 #include "llbutton.h"
 #include "llfontgl.h"
 #include "llresmgr.h"
+#include "lltrans.h"
 #include "llui.h"
 
 #include "llstl.h"
@@ -2266,8 +2267,9 @@ void LLMenuGL::createSpilloverBranch()
 		// technically, you can't tear off spillover menus, but we're passing the handle
 		// along just to be safe
 		LLMenuGL::Params p;
+		std::string label = LLTrans::getString("More");
 		p.name("More");
-		p.label("More"); // *TODO: Translate
+		p.label(label);
 		p.bg_color(mBackgroundColor);
 		p.bg_visible(true);
 		p.can_tear_off(false);
@@ -2276,7 +2278,7 @@ void LLMenuGL::createSpilloverBranch()
 
 		LLMenuItemBranchGL::Params branch_params;
 		branch_params.name = "More";
-		branch_params.label = "More"; // *TODO: Translate
+		branch_params.label = label;
 		branch_params.branch = mSpilloverMenu;
 		branch_params.font.style = "italic";
 
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 6fe36bbc0ceee3e734f3f6cff069776972d94a29..b2e08c48c5dcdf3e0c436e622b432359e7203866 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -655,7 +655,7 @@ void LLPanel::childSetEnabled(const std::string& id, bool enabled)
 
 void LLPanel::childSetTentative(const std::string& id, bool tentative)
 {
-	LLView* child = findChild<LLView>(id);
+	LLUICtrl* child = findChild<LLUICtrl>(id);
 	if (child)
 	{
 		child->setTentative(tentative);
@@ -854,13 +854,16 @@ LLPanel *LLPanel::childGetVisibleTab(const std::string& id) const
 	return NULL;
 }
 
-static LLPanel *childGetVisibleTabWithHelp(LLView *parent)
+LLPanel* LLPanel::childGetVisibleTabWithHelp()
 {
 	LLView *child;
 
-	// look through immediate children first for an active tab with help
-	for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child))
+	bfs_tree_iterator_t it = beginTreeBFS();
+	// skip ourselves
+	++it;
+	for (; it != endTreeBFS(); ++it)
 	{
+		child = *it;
 		LLPanel *curTabPanel = NULL;
 
 		// do we have a tab container?
@@ -884,36 +887,21 @@ static LLPanel *childGetVisibleTabWithHelp(LLView *parent)
 		}
 	}
 
-	// then try a bit harder and recurse through all children
-	for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child))
-	{
-		if (child->getVisible())
-		{
-			LLPanel* tab = ::childGetVisibleTabWithHelp(child);
-			if (tab)
-			{
-				return tab;
-			}
-		}
-	}
-
 	// couldn't find any active tabs with a help topic string
 	return NULL;
 }
 
-LLPanel *LLPanel::childGetVisibleTabWithHelp()
-{
-	// find a visible tab with a help topic (to determine help context)
-	return ::childGetVisibleTabWithHelp(this);
-}
 
-static LLPanel *childGetVisiblePanelWithHelp(LLView *parent)
+LLPanel *LLPanel::childGetVisiblePanelWithHelp()
 {
 	LLView *child;
 
-	// look through immediate children first for an active panel with help
-	for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child))
+	bfs_tree_iterator_t it = beginTreeBFS();
+	// skip ourselves
+	++it;
+	for (; it != endTreeBFS(); ++it)
 	{
+		child = *it;
 		// do we have a panel with a help topic?
 		LLPanel *panel = dynamic_cast<LLPanel *>(child);
 		if (panel && panel->getVisible() && !panel->getHelpTopic().empty())
@@ -922,39 +910,19 @@ static LLPanel *childGetVisiblePanelWithHelp(LLView *parent)
 		}
 	}
 
-	// then try a bit harder and recurse through all children
-	for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child))
-	{
-		if (child->getVisible())
-		{
-			LLPanel* panel = ::childGetVisiblePanelWithHelp(child);
-			if (panel)
-			{
-				return panel;
-			}
-		}
-	}
-
 	// couldn't find any active panels with a help topic string
 	return NULL;
 }
 
-LLPanel *LLPanel::childGetVisiblePanelWithHelp()
+void LLPanel::childSetAction(const std::string& id, const commit_signal_t::slot_type& function)
 {
-	// find a visible tab with a help topic (to determine help context)
-	return ::childGetVisiblePanelWithHelp(this);
-}
-
-void LLPanel::childSetPrevalidate(const std::string& id, bool (*func)(const LLWString &) )
-{
-	LLLineEditor* child = findChild<LLLineEditor>(id);
-	if (child)
+	LLButton* button = findChild<LLButton>(id);
+	if (button)
 	{
-		child->setPrevalidate(func);
+		button->setClickedCallback(function);
 	}
 }
 
-
 void LLPanel::childSetAction(const std::string& id, boost::function<void(void*)> function, void* value)
 {
 	LLButton* button = findChild<LLButton>(id);
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index ca8bb77b772386ad35c8d3cf558d68b1ad3a46d4..a7224648c146b5dfb5685f16250e2bbba3e55f9a 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -164,6 +164,7 @@ public:
 	std::string getString(const std::string& name) const;
 
 	// ** Wrappers for setting child properties by name ** -TomY
+	// WARNING: These are deprecated, please use getChild<T>("name")->doStuff() idiom instead
 
 	// LLView
 	void childSetVisible(const std::string& name, bool visible);
@@ -227,7 +228,8 @@ public:
 	void childSetPrevalidate(const std::string& id, bool (*func)(const LLWString &) );
 
 	// LLButton
-	void childSetAction(const std::string& id, boost::function<void(void*)> function, void* value = NULL);
+	void childSetAction(const std::string& id, boost::function<void(void*)> function, void* value);
+	void childSetAction(const std::string& id, const commit_signal_t::slot_type& function);
 
 	// LLTextBox
 	void childSetActionTextbox(const std::string& id, boost::function<void(void*)> function, void* value = NULL);
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index 3f4ab0fbc80da246a3d0c8b4eca2067f79124529..84e438cfb78ebd943464357011b0e3072ec395f4 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -129,6 +129,7 @@ LLScrollListCtrl::Params::Params()
 	search_column("search_column", 0),
 	sort_column("sort_column", -1),
 	sort_ascending("sort_ascending", true),
+	mouse_wheel_opaque("mouse_wheel_opaque", false),
 	commit_on_keyboard_movement("commit_on_keyboard_movement", true),
 	heading_height("heading_height"),
 	page_lines("page_lines", 0),
@@ -157,6 +158,7 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p)
 :	LLUICtrl(p),
 	mLineHeight(0),
 	mScrollLines(0),
+	mMouseWheelOpaque(p.mouse_wheel_opaque),
 	mPageLines(p.page_lines),
 	mMaxSelectable(0),
 	mAllowKeyboardMovement(TRUE),
@@ -1530,6 +1532,12 @@ BOOL LLScrollListCtrl::handleScrollWheel(S32 x, S32 y, S32 clicks)
 	BOOL handled = FALSE;
 	// Pretend the mouse is over the scrollbar
 	handled = mScrollbar->handleScrollWheel( 0, 0, clicks );
+
+	if (mMouseWheelOpaque)
+	{
+		return TRUE;
+	}
+
 	return handled;
 }
 
diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
index 30618866af8292f6ce5b2a565de3128ccff75daa..8a2f893ba2f8ee7131b95768a5bba9a3f4517e40 100644
--- a/indra/llui/llscrolllistctrl.h
+++ b/indra/llui/llscrolllistctrl.h
@@ -96,7 +96,8 @@ public:
 	{
 		// behavioral flags
 		Optional<bool>	multi_select,
-						commit_on_keyboard_movement;
+						commit_on_keyboard_movement,
+						mouse_wheel_opaque;
 
 		// display flags
 		Optional<bool>	has_border,
@@ -443,6 +444,7 @@ private:
 	BOOL			mCommitOnSelectionChange;
 	BOOL			mSelectionChanged;
 	BOOL			mNeedsScroll;
+	BOOL			mMouseWheelOpaque;
 	BOOL			mCanSelect;
 	const BOOL		mDisplayColumnHeaders;
 	BOOL			mColumnsDirty;
diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp
index 904c458e850098d8bf1e355bdf3b04a5bd05550c..d760178e358e8d703d11cff6e4d8636925301e71 100644
--- a/indra/llui/llsliderctrl.cpp
+++ b/indra/llui/llsliderctrl.cpp
@@ -229,6 +229,10 @@ void LLSliderCtrl::updateText()
 		std::string text = llformat(format.c_str(), displayed_value);
 		if( mEditor )
 		{
+			// Setting editor text here to "" before using actual text is here because if text which
+			// is set is the same as the one which is actually typed into lineeditor, LLLineEditor::setText()
+			// will exit at it's beginning, so text for revert on escape won't be saved. (EXT-8536)
+			mEditor->setText( LLStringUtil::null );
 			mEditor->setText( text );
 		}
 		else
diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp
index 93314d7bc079507256d5972bca6ffa664b0c1b23..5e09cee78b6d3bedbd05d60b182ccd095a99ed85 100644
--- a/indra/llui/llstyle.cpp
+++ b/indra/llui/llstyle.cpp
@@ -36,6 +36,8 @@ LLStyle::Params::Params()
 :	visible("visible", true),
 	drop_shadow("drop_shadow", LLFontGL::NO_SHADOW),
 	color("color", LLColor4::black),
+	readonly_color("readonly_color", LLColor4::black),
+	selected_color("selected_color", LLColor4::black),
 	font("font", LLFontGL::getFontMonospace()),
 	image("image"),
 	link_href("href")
@@ -43,12 +45,10 @@ LLStyle::Params::Params()
 
 
 LLStyle::LLStyle(const LLStyle::Params& p)
-:	mItalic(FALSE),
-	mBold(FALSE),
-	mUnderline(FALSE),
-	mVisible(p.visible),
-	mColor(p.color()),
-	mReadOnlyColor(p.readonly_color()),
+:	mVisible(p.visible),
+	mColor(p.color),
+	mReadOnlyColor(p.readonly_color),
+	mSelectedColor(p.selected_color),
 	mFont(p.font()),
 	mLink(p.link_href),
 	mDropShadow(p.drop_shadow),
diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h
index bfd0d72e85f3d5bdd15374c525f061a3c4bafea5..66cd639936ab6c73b5ddcccedd2f84b4a882e4af 100644
--- a/indra/llui/llstyle.h
+++ b/indra/llui/llstyle.h
@@ -41,7 +41,8 @@ public:
 		Optional<bool>					visible;
 		Optional<LLFontGL::ShadowType>	drop_shadow;
 		Optional<LLUIColor>				color,
-										readonly_color;
+										readonly_color,
+										selected_color;
 		Optional<const LLFontGL*>		font;
 		Optional<LLUIImage*>			image;
 		Optional<std::string>			link_href;
@@ -49,11 +50,14 @@ public:
 	};
 	LLStyle(const Params& p = Params());
 public:
-	const LLColor4& getColor() const { return mColor; }
-	void setColor(const LLColor4 &color) { mColor = color; }
+	const LLUIColor& getColor() const { return mColor; }
+	void setColor(const LLUIColor &color) { mColor = color; }
 
-	const LLColor4& getReadOnlyColor() const { return mReadOnlyColor; }
-	void setReadOnlyColor(const LLColor4& color) { mReadOnlyColor = color; }
+	const LLUIColor& getReadOnlyColor() const { return mReadOnlyColor; }
+	void setReadOnlyColor(const LLUIColor& color) { mReadOnlyColor = color; }
+
+	const LLUIColor& getSelectedColor() const { return mSelectedColor; }
+	void setSelectedColor(const LLUIColor& color) { mSelectedColor = color; }
 
 	BOOL isVisible() const;
 	void setVisible(BOOL is_visible);
@@ -73,41 +77,36 @@ public:
 
 	BOOL isImage() const { return mImagep.notNull(); }
 
-	// inlined here to make it easier to compare to member data below. -MG
 	bool operator==(const LLStyle &rhs) const
 	{
 		return 
 			mVisible == rhs.mVisible
 			&& mColor == rhs.mColor
 			&& mReadOnlyColor == rhs.mReadOnlyColor
+			&& mSelectedColor == rhs.mSelectedColor
 			&& mFont == rhs.mFont
 			&& mLink == rhs.mLink
 			&& mImagep == rhs.mImagep
-			&& mItalic == rhs.mItalic
-			&& mBold == rhs.mBold
-			&& mUnderline == rhs.mUnderline
 			&& mDropShadow == rhs.mDropShadow;
 	}
 
 	bool operator!=(const LLStyle& rhs) const { return !(*this == rhs); }
 
 public:	
-	BOOL        mItalic;
-	BOOL        mBold;
-	BOOL        mUnderline;
 	LLFontGL::ShadowType		mDropShadow;
 
 protected:
 	~LLStyle() { }
 
 private:
-	BOOL		mVisible;
-	LLUIColor	mColor;
-	LLUIColor   mReadOnlyColor;
-	std::string	mFontName;
-	const LLFontGL*   mFont;		// cached for performance
-	std::string	mLink;
-	LLUIImagePtr mImagep;
+	BOOL				mVisible;
+	LLUIColor			mColor;
+	LLUIColor   		mReadOnlyColor;
+	LLUIColor			mSelectedColor;
+	std::string			mFontName;
+	const LLFontGL*		mFont;
+	std::string			mLink;
+	LLUIImagePtr		mImagep;
 };
 
 typedef LLPointer<LLStyle> LLStyleSP;
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 60c313b6ce3a8c5153c083da191ab7074a9e2489..8d91aa228438f8a45b4079f45156816efcb3edcc 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -149,6 +149,8 @@ LLTextBase::Params::Params()
 	bg_readonly_color("bg_readonly_color"),
 	bg_writeable_color("bg_writeable_color"),
 	bg_focus_color("bg_focus_color"),
+	text_selected_color("text_selected_color"),
+	bg_selected_color("bg_selected_color"),
 	allow_scroll("allow_scroll", true),
 	plain_text("plain_text",false),
 	track_end("track_end", false),
@@ -161,11 +163,12 @@ LLTextBase::Params::Params()
 	font_shadow("font_shadow"),
 	wrap("wrap"),
 	use_ellipses("use_ellipses", false),
-	allow_html("allow_html", false),
+	parse_urls("parse_urls", false),
 	parse_highlights("parse_highlights", false)
 {
 	addSynonym(track_end, "track_bottom");
 	addSynonym(wrap, "word_wrap");
+	addSynonym(parse_urls, "allow_html");
 }
 
 
@@ -184,6 +187,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
 	mWriteableBgColor(p.bg_writeable_color),
 	mReadOnlyBgColor(p.bg_readonly_color),
 	mFocusBgColor(p.bg_focus_color),
+	mTextSelectedColor(p.text_selected_color),
+	mSelectedBGColor(p.bg_selected_color),
 	mReflowIndex(S32_MAX),
 	mCursorPos( 0 ),
 	mScrollNeeded(FALSE),
@@ -203,7 +208,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
 	mPlainText ( p.plain_text ),
 	mWordWrap(p.wrap),
 	mUseEllipses( p.use_ellipses ),
-	mParseHTML(p.allow_html),
+	mParseHTML(p.parse_urls),
 	mParseHighlights(p.parse_highlights),
 	mBGVisible(p.bg_visible),
 	mScroller(NULL),
@@ -263,9 +268,6 @@ void LLTextBase::initFromParams(const LLTextBase::Params& p)
 	{
 		mReadOnly = p.read_only;
 	}
-
-	// HACK:  text editors always need to be enabled so that we can scroll
-	LLView::setEnabled(true);
 }
 
 bool LLTextBase::truncate()
@@ -295,11 +297,14 @@ bool LLTextBase::truncate()
 
 const LLStyle::Params& LLTextBase::getDefaultStyleParams()
 {
+	//FIXME: convert mDefaultStyle to a flyweight http://www.boost.org/doc/libs/1_40_0/libs/flyweight/doc/index.html
+	//and eliminate color member values
 	if (mStyleDirty)
 	{
 		  mDefaultStyle
-				  .color(LLUIColor(&mFgColor))
+				  .color(LLUIColor(&mFgColor))						// pass linked color instead of copy of mFGColor
 				  .readonly_color(LLUIColor(&mReadOnlyFgColor))
+				  .selected_color(LLUIColor(&mTextSelectedColor))
 				  .font(mDefaultFont)
 				  .drop_shadow(mFontShadow);
 		  mStyleDirty = false;
@@ -397,7 +402,7 @@ void LLTextBase::drawSelectionBackground()
 		
 		// Draw the selection box (we're using a box instead of reversing the colors on the selected text).
 		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-		const LLColor4& color = mReadOnly ? mReadOnlyFgColor.get() : mFgColor.get();
+		const LLColor4& color = mSelectedBGColor;
 		F32 alpha = hasFocus() ? 0.7f : 0.3f;
 		alpha *= getDrawContext().mAlpha;
 		LLColor4 selection_color(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], alpha);
@@ -437,7 +442,6 @@ void LLTextBase::drawCursor()
 		}
 		else
 		{
-			//segmentp = mSegments.back();
 			return;
 		}
 
@@ -471,21 +475,8 @@ void LLTextBase::drawCursor()
 			{
 				LLColor4 text_color;
 				const LLFontGL* fontp;
-				if (segmentp)
-				{
 					text_color = segmentp->getColor();
 					fontp = segmentp->getStyle()->getFont();
-				}
-				else if (mReadOnly)
-				{
-					text_color = mReadOnlyFgColor.get();
-					fontp = mDefaultFont;
-				}
-				else
-				{
-					text_color = mFgColor.get();
-					fontp = mDefaultFont;
-				}
 				fontp->render(text, mCursorPos, cursor_rect, 
 					LLColor4(1.f - text_color.mV[VRED], 1.f - text_color.mV[VGREEN], 1.f - text_color.mV[VBLUE], alpha),
 					LLFontGL::LEFT, mVAlign,
@@ -1015,21 +1006,26 @@ void LLTextBase::draw()
 	if (mBGVisible)
 	{
 		// clip background rect against extents, if we support scrolling
-		LLLocalClipRect clip(doc_rect, mScroller != NULL);
-
+		LLRect bg_rect = mVisibleTextRect;
+		if (mScroller)
+		{
+			bg_rect.intersectWith(doc_rect);
+		}
 		LLColor4 bg_color = mReadOnly 
 							? mReadOnlyBgColor.get()
 							: hasFocus() 
 								? mFocusBgColor.get() 
 								: mWriteableBgColor.get();
-		gl_rect_2d(mVisibleTextRect, bg_color, TRUE);
+		gl_rect_2d(doc_rect, bg_color, TRUE);
 	}
 
 	// draw document view
 	LLUICtrl::draw();
 
 	{
-		// only clip if we support scrolling (mScroller != NULL)
+		// only clip if we support scrolling...
+		// since convention is that text boxes never vertically truncate their contents
+		// regardless of rect bounds
 		LLLocalClipRect clip(doc_rect, mScroller != NULL);
 		drawSelectionBackground();
 		drawText();
@@ -1493,23 +1489,32 @@ void LLTextBase::getSegmentAndOffset( S32 startpos, segment_set_t::iterator* seg
 
 LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index)
 {
+	static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment();
+
 	if (index > getLength()) { return mSegments.end(); }
 
 	// when there are no segments, we return the end iterator, which must be checked by caller
 	if (mSegments.size() <= 1) { return mSegments.begin(); }
 
-	segment_set_t::iterator it = mSegments.upper_bound(new LLIndexSegment(index));
+	//FIXME: avoid operator new somehow (without running into refcount problems)
+	index_segment->setStart(index);
+	index_segment->setEnd(index);
+	segment_set_t::iterator it = mSegments.upper_bound(index_segment);
 	return it;
 }
 
 LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 index) const
 {
+	static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment();
+
 	if (index > getLength()) { return mSegments.end(); }
 
 	// when there are no segments, we return the end iterator, which must be checked by caller
 	if (mSegments.size() <= 1) { return mSegments.begin(); }
 
-	LLTextBase::segment_set_t::const_iterator it =  mSegments.upper_bound(new LLIndexSegment(index));
+	index_segment->setStart(index);
+	index_segment->setEnd(index);
+	LLTextBase::segment_set_t::const_iterator it =  mSegments.upper_bound(index_segment);
 	return it;
 }
 
@@ -1645,7 +1650,7 @@ void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Para
 			}
 			else
 			{
-				appendAndHighlightText(match.getLabel(), part, link_params);
+				appendAndHighlightText(match.getLabel(), part, link_params, match.underlineOnHoverOnly());
 
 				// set the tooltip for the Url label
 				if (! match.getTooltip().empty())
@@ -1728,7 +1733,7 @@ void LLTextBase::appendWidget(const LLInlineViewSegment::Params& params, const s
 	insertStringNoUndo(getLength(), widget_wide_text, &segments);
 }
 
-void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params)
+void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only)
 {
 	// Save old state
 	S32 selection_start = mSelectionStart;
@@ -1759,7 +1764,17 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig
 
 			S32 cur_length = getLength();
 			LLStyleConstSP sp(new LLStyle(highlight_params));
-			LLTextSegmentPtr segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this);
+			LLTextSegmentPtr segmentp;
+			if(underline_on_hover_only)
+			{
+				highlight_params.font.style("NORMAL");
+				LLStyleConstSP normal_sp(new LLStyle(highlight_params));
+				segmentp = new LLOnHoverChangeableTextSegment(sp, normal_sp, cur_length, cur_length + wide_text.size(), *this);
+			}
+			else
+			{
+				segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this);
+			}
 			segment_vec_t segments;
 			segments.push_back(segmentp);
 			insertStringNoUndo(cur_length, wide_text, &segments);
@@ -1774,7 +1789,17 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig
 		S32 segment_start = old_length;
 		S32 segment_end = old_length + wide_text.size();
 		LLStyleConstSP sp(new LLStyle(style_params));
+		if (underline_on_hover_only)
+		{
+			LLStyle::Params normal_style_params(style_params);
+			normal_style_params.font.style("NORMAL");
+			LLStyleConstSP normal_sp(new LLStyle(normal_style_params));
+			segments.push_back(new LLOnHoverChangeableTextSegment(sp, normal_sp, segment_start, segment_end, *this ));
+		}
+		else
+		{
 		segments.push_back(new LLNormalTextSegment(sp, segment_start, segment_end, *this ));
+		}
 
 		insertStringNoUndo(getLength(), wide_text, &segments);
 	}
@@ -1798,7 +1823,7 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig
 	}
 }
 
-void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params)
+void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only)
 {
 	if (new_text.empty()) return; 
 
@@ -1810,7 +1835,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlig
 		if(pos!=start)
 		{
 			std::string str = std::string(new_text,start,pos-start);
-			appendAndHighlightTextImpl(str,highlight_part, style_params);
+			appendAndHighlightTextImpl(str,highlight_part, style_params, underline_on_hover_only);
 		}
 		appendLineBreakSegment(style_params);
 		start = pos+1;
@@ -1818,7 +1843,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlig
 	}
 
 	std::string str = std::string(new_text,start,new_text.length()-start);
-	appendAndHighlightTextImpl(str,highlight_part, style_params);
+	appendAndHighlightTextImpl(str,highlight_part, style_params, underline_on_hover_only);
 }
 
 
@@ -2272,6 +2297,7 @@ void LLTextBase::updateRects()
 	// allow horizontal scrolling?
 	// if so, use entire width of text contents
 	// otherwise, stop at width of mVisibleTextRect
+	//FIXME: consider use of getWordWrap() instead
 	doc_rect.mRight = mScroller 
 		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)
 		: mVisibleTextRect.getWidth();
@@ -2481,7 +2507,7 @@ F32 LLNormalTextSegment::drawClippedSegment(S32 seg_start, S32 seg_end, S32 sele
 
 		font->render(text, start, 
 			     rect,
-			     LLColor4( 1.f - color.mV[0], 1.f - color.mV[1], 1.f - color.mV[2], 1.f ),
+			     mStyle->getSelectedColor().get(),
 			     LLFontGL::LEFT, mEditor.mVAlign, 
 			     LLFontGL::NORMAL, 
 			     LLFontGL::NO_SHADOW, 
@@ -2678,6 +2704,33 @@ void LLNormalTextSegment::dump() const
 		llendl;
 }
 
+//
+// LLOnHoverChangeableTextSegment
+//
+
+LLOnHoverChangeableTextSegment::LLOnHoverChangeableTextSegment( LLStyleConstSP style, LLStyleConstSP normal_style, S32 start, S32 end, LLTextBase& editor ):
+	  LLNormalTextSegment(normal_style, start, end, editor),
+	  mHoveredStyle(style),
+	  mNormalStyle(normal_style){}
+
+/*virtual*/ 
+F32 LLOnHoverChangeableTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect)
+{
+	F32 result = LLNormalTextSegment::draw(start, end, selection_start, selection_end, draw_rect);
+	if (end == mEnd - mStart)
+	{
+		mStyle = mNormalStyle;
+	}
+	return result;
+}
+
+/*virtual*/
+BOOL LLOnHoverChangeableTextSegment::handleHover(S32 x, S32 y, MASK mask)
+{
+	mStyle = mHoveredStyle;
+	return LLNormalTextSegment::handleHover(x, y, mask);
+}
+
 
 //
 // LLInlineViewSegment
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 86ab8f357dd204f8abc8ff5ee57074e0bf104d7c..e5dfecad5490037e45dd9a2308493a8ae8f1816e 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -139,10 +139,25 @@ protected:
 	boost::signals2::connection mImageLoadedConnection;
 };
 
+// Text segment that changes it's style depending of mouse pointer position ( is it inside or outside segment)
+class LLOnHoverChangeableTextSegment : public LLNormalTextSegment
+{
+public:
+	LLOnHoverChangeableTextSegment( LLStyleConstSP style, LLStyleConstSP normal_style, S32 start, S32 end, LLTextBase& editor );
+	/*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
+	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
+protected:
+	// Style used for text when mouse pointer is over segment
+	LLStyleConstSP		mHoveredStyle;
+	// Style used for text when mouse pointer is outside segment
+	LLStyleConstSP		mNormalStyle;
+
+};
+
 class LLIndexSegment : public LLTextSegment
 {
 public:
-	LLIndexSegment(S32 pos) : LLTextSegment(pos, pos) {}
+	LLIndexSegment() : LLTextSegment(0, 0) {}
 };
 
 class LLInlineViewSegment : public LLTextSegment
@@ -235,7 +250,9 @@ public:
 								text_readonly_color,
 								bg_readonly_color,
 								bg_writeable_color,
-								bg_focus_color;
+								bg_focus_color,
+								text_selected_color,
+								bg_selected_color;
 
 		Optional<bool>			bg_visible,
 								border_visible,
@@ -245,7 +262,7 @@ public:
 								plain_text,
 								wrap,
 								use_ellipses,
-								allow_html,
+								parse_urls,
 								parse_highlights,
 								clip_partial;
 								
@@ -435,7 +452,7 @@ protected:
 	S32								insertStringNoUndo(S32 pos, const LLWString &wstr, segment_vec_t* segments = NULL); // returns num of chars actually inserted
 	S32 							removeStringNoUndo(S32 pos, S32 length);
 	S32								overwriteCharNoUndo(S32 pos, llwchar wc);
-	void							appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& stylep);
+	void							appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& stylep, bool underline_on_hover_only = false);
 
 
 	// manage segments 
@@ -478,7 +495,7 @@ protected:
 	void							replaceUrlLabel(const std::string &url, const std::string &label);
 	
 	void							appendTextImpl(const std::string &new_text, const LLStyle::Params& input_params = LLStyle::Params());
-	void							appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params);
+	void							appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only = false);
 	
 
 protected:
@@ -501,6 +518,8 @@ protected:
 	LLUIColor					mWriteableBgColor;
 	LLUIColor					mReadOnlyBgColor;
 	LLUIColor					mFocusBgColor;
+	LLUIColor					mTextSelectedColor;
+	LLUIColor					mSelectedBGColor;
 
 	// cursor
 	S32							mCursorPos;			// I-beam is just after the mCursorPos-th character.
diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp
index 3e2422c88bcae7a77302d59b0548491a4f0420fe..6a905b7ec0e952f5775a863c0aaad73472b9ab12 100644
--- a/indra/llui/lltextbox.cpp
+++ b/indra/llui/lltextbox.cpp
@@ -113,6 +113,17 @@ BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
 	return handled;
 }
 
+void LLTextBox::setEnabled(BOOL enabled)
+{
+	// just treat enabled as read-only flag
+	bool read_only = !enabled;
+	if (read_only != mReadOnly)
+	{
+		LLTextBase::setReadOnly(read_only);
+		updateSegments();
+	}
+}
+
 void LLTextBox::setText(const LLStringExplicit& text , const LLStyle::Params& input_params )
 {
 	// does string argument insertion
diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h
index 4634dd0ff26e0830775f30d210a08b1844fcb2e9..071e18c638ff1c69f4f0faa138628ea31f0c06e0 100644
--- a/indra/llui/lltextbox.h
+++ b/indra/llui/lltextbox.h
@@ -52,6 +52,8 @@ public:
 	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
 
+	/*virtual*/ void setEnabled(BOOL enabled);
+
 	/*virtual*/ void setText( const LLStringExplicit& text, const LLStyle::Params& input_params = LLStyle::Params() );
 	
 	void			setRightAlign()							{ mHAlign = LLFontGL::RIGHT; }
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index e09df60704105b98082cf8ca3a8de84582bf6ff4..94bf716e7d77863a4d32b77918f30042bc9efe49 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -283,6 +283,9 @@ void LLTextEditor::initFromParams( const LLTextEditor::Params& p)
 {
 	LLTextBase::initFromParams(p);
 
+	// HACK:  text editors always need to be enabled so that we can scroll
+	LLView::setEnabled(true);
+
 	if (p.commit_on_focus_lost.isProvided())
 	{
 		mCommitOnFocusLost = p.commit_on_focus_lost;
@@ -452,8 +455,13 @@ S32 LLTextEditor::nextWordPos(S32 cursorPos) const
 
 const LLTextSegmentPtr	LLTextEditor::getPreviousSegment() const
 {
+	static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment;
+
+	index_segment->setStart(mCursorPos);
+	index_segment->setEnd(mCursorPos);
+
 	// find segment index at character to left of cursor (or rightmost edge of selection)
-	segment_set_t::const_iterator it = mSegments.lower_bound(new LLIndexSegment(mCursorPos));
+	segment_set_t::const_iterator it = mSegments.lower_bound(index_segment);
 
 	if (it != mSegments.end())
 	{
diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp
index d7260369ec05cfa7b602cadbbec05b239269e006..4b9faa05605aae913e293c0a59ac4f0cf5529057 100644
--- a/indra/llui/lltextvalidate.cpp
+++ b/indra/llui/lltextvalidate.cpp
@@ -44,6 +44,7 @@ namespace LLTextValidate
 		declare("alpha_num_space", validateAlphaNumSpace);
 		declare("ascii_printable_no_pipe", validateASCIIPrintableNoPipe);
 		declare("ascii_printable_no_space", validateASCIIPrintableNoSpace);
+		declare("ascii_with_newline", validateASCIIWithNewLine);
 	}
 
 	// Limits what characters can be used to [1234567890.-] with [-] only valid in the first position.
@@ -293,4 +294,21 @@ namespace LLTextValidate
 		}
 		return rv;
 	}
+
+	// Used for multiline text stored on the server.
+	// Example is landmark description in Places SP.
+	bool validateASCIIWithNewLine(const LLWString &str)
+	{
+		bool rv = TRUE;
+		S32 len = str.length();
+		while(len--)
+		{
+			if (str[len] < 0x20 && str[len] != 0xA || str[len] > 0x7f)
+			{
+				rv = FALSE;
+				break;
+			}
+		}
+		return rv;
+	}
 }
diff --git a/indra/llui/lltextvalidate.h b/indra/llui/lltextvalidate.h
index 1b61eca05163c3bb67c41d0d87bd82aa87befdcb..84644be30c1007b0872ae7aa51ac158be07a832d 100644
--- a/indra/llui/lltextvalidate.h
+++ b/indra/llui/lltextvalidate.h
@@ -51,6 +51,7 @@ namespace LLTextValidate
 	bool	validateASCIIPrintableNoPipe(const LLWString &str); 
 	bool	validateASCIIPrintableNoSpace(const LLWString &str);
 	bool	validateASCII(const LLWString &str);
+	bool	validateASCIIWithNewLine(const LLWString &str);
 }
 
 
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 8ab4a119e53cddffda559be46a7bc06c29c81493..b02d3122fe1592b94a97135a6177f0db1dc7923f 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -180,7 +180,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
 	params.font = p.font;
 	params.use_ellipses = true;
 	params.wrap = p.wrap;
-	params.allow_html = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips
+	params.parse_urls = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips
 	mTextBox = LLUICtrlFactory::create<LLTextBox> (params);
 	addChild(mTextBox);
 	
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 03223b45f775f4b25a3a80021eef565e629394c0..d33d8e31785c83fe91f247046031d4d773fc43d9 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -460,7 +460,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 border_width, S32 border
 	gl_draw_scaled_image_with_border(x, y, width, height, image, color, solid_color, uv_rect, scale_rect);
 }
 
-void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4& color, BOOL solid_color, const LLRectf& uv_rect, const LLRectf& scale_rect)
+void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4& color, BOOL solid_color, const LLRectf& uv_outer_rect, const LLRectf& center_rect)
 {
 	stop_glerror();
 
@@ -470,36 +470,53 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
 		return;
 	}
 
+	// add in offset of current image to current ui translation
+	const LLVector3 ui_scale = gGL.getUIScale();
+	const LLVector3 ui_translation = (gGL.getUITranslation() + LLVector3(x, y, 0.f)).scaledVec(ui_scale);
+
+	F32 uv_width = uv_outer_rect.getWidth();
+	F32 uv_height = uv_outer_rect.getHeight();
+
 	// shrink scaling region to be proportional to clipped image region
-	LLRectf scale_rect_uv(
-		uv_rect.mLeft + (scale_rect.mLeft * uv_rect.getWidth()),
-		uv_rect.mBottom + (scale_rect.mTop * uv_rect.getHeight()),
-		uv_rect.mLeft + (scale_rect.mRight * uv_rect.getWidth()),
-		uv_rect.mBottom + (scale_rect.mBottom * uv_rect.getHeight()));
-
-	S32 image_natural_width = llround((F32)image->getWidth(0) * uv_rect.getWidth());
-	S32 image_natural_height = llround((F32)image->getHeight(0) * uv_rect.getHeight());
-
-	LLRect draw_rect(0, height, width, 0);
-	LLRect draw_scale_rect(llround(scale_rect_uv.mLeft * (F32)image->getWidth(0)),
-						llround(scale_rect_uv.mTop * (F32)image->getHeight(0)),
-						llround(scale_rect_uv.mRight * (F32)image->getWidth(0)),
-						llround(scale_rect_uv.mBottom * (F32)image->getHeight(0)));
-	// scale fixed region of image to drawn region
-	draw_scale_rect.mRight += width - image_natural_width;
-	draw_scale_rect.mTop += height - image_natural_height;
-
-	S32 border_shrink_width = llmax(0, draw_scale_rect.mLeft - draw_scale_rect.mRight);
-	S32 border_shrink_height = llmax(0, draw_scale_rect.mBottom - draw_scale_rect.mTop);
-
-	F32 shrink_width_ratio = scale_rect.getWidth() == 1.f ? 0.f : border_shrink_width / ((F32)image_natural_width * (1.f - scale_rect.getWidth()));
-	F32 shrink_height_ratio = scale_rect.getHeight() == 1.f ? 0.f : border_shrink_height / ((F32)image_natural_height * (1.f - scale_rect.getHeight()));
-
-	F32 shrink_scale = 1.f - llmax(shrink_width_ratio, shrink_height_ratio);
-	draw_scale_rect.mLeft = llround((F32)draw_scale_rect.mLeft * shrink_scale);
-	draw_scale_rect.mTop = llround(lerp((F32)height, (F32)draw_scale_rect.mTop, shrink_scale));
-	draw_scale_rect.mRight = llround(lerp((F32)width, (F32)draw_scale_rect.mRight, shrink_scale));
-	draw_scale_rect.mBottom = llround((F32)draw_scale_rect.mBottom * shrink_scale);
+	LLRectf uv_center_rect(
+		uv_outer_rect.mLeft + (center_rect.mLeft * uv_width),
+		uv_outer_rect.mBottom + (center_rect.mTop * uv_height),
+		uv_outer_rect.mLeft + (center_rect.mRight * uv_width),
+		uv_outer_rect.mBottom + (center_rect.mBottom * uv_height));
+
+	F32 image_width = image->getWidth(0);
+	F32 image_height = image->getHeight(0);
+
+	S32 image_natural_width = llround(image_width * uv_width);
+	S32 image_natural_height = llround(image_height * uv_height);
+
+	LLRectf draw_center_rect(	uv_center_rect.mLeft * image_width,
+								uv_center_rect.mTop * image_height,
+								uv_center_rect.mRight * image_width,
+								uv_center_rect.mBottom * image_height);
+
+	{	// scale fixed region of image to drawn region
+		draw_center_rect.mRight += width - image_natural_width;
+		draw_center_rect.mTop += height - image_natural_height;
+
+		F32 border_shrink_width = llmax(0.f, draw_center_rect.mLeft - draw_center_rect.mRight);
+		F32 border_shrink_height = llmax(0.f, draw_center_rect.mBottom - draw_center_rect.mTop);
+
+		F32 shrink_width_ratio = center_rect.getWidth() == 1.f ? 0.f : border_shrink_width / ((F32)image_natural_width * (1.f - center_rect.getWidth()));
+		F32 shrink_height_ratio = center_rect.getHeight() == 1.f ? 0.f : border_shrink_height / ((F32)image_natural_height * (1.f - center_rect.getHeight()));
+
+		F32 shrink_scale = 1.f - llmax(shrink_width_ratio, shrink_height_ratio);
+
+		draw_center_rect.mLeft = llround(ui_translation.mV[VX] + (F32)draw_center_rect.mLeft * shrink_scale * ui_scale.mV[VX]);
+		draw_center_rect.mTop = llround(ui_translation.mV[VY] + lerp((F32)height, (F32)draw_center_rect.mTop, shrink_scale) * ui_scale.mV[VY]);
+		draw_center_rect.mRight = llround(ui_translation.mV[VX] + lerp((F32)width, (F32)draw_center_rect.mRight, shrink_scale) * ui_scale.mV[VX]);
+		draw_center_rect.mBottom = llround(ui_translation.mV[VY] + (F32)draw_center_rect.mBottom * shrink_scale * ui_scale.mV[VY]);
+	}
+
+	LLRectf draw_outer_rect(ui_translation.mV[VX], 
+							ui_translation.mV[VY] + height * ui_scale.mV[VY], 
+							ui_translation.mV[VX] + width * ui_scale.mV[VX], 
+							ui_translation.mV[VY]);
 
 	LLGLSUIDefault gls_ui;
 	
@@ -509,136 +526,174 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
 		gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
 	}
 
-	gGL.pushUIMatrix();
-	{
-		gGL.translateUI((F32)x, (F32)y, 0.f);
+	gGL.getTexUnit(0)->bind(image);
 
-		gGL.getTexUnit(0)->bind(image);
+	gGL.color4fv(color.mV);
+	
+	const S32 NUM_VERTICES = 9 * 4; // 9 quads
+	LLVector2 uv[NUM_VERTICES];
+	LLVector3 pos[NUM_VERTICES];
 
-		gGL.color4fv(color.mV);
-		
-		gGL.begin(LLRender::QUADS);
-		{
-			// draw bottom left
-			gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom);
-			gGL.vertex2i(0, 0);
+	S32 index = 0;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mBottom);
-			gGL.vertex2i(draw_scale_rect.mLeft, 0);
+	gGL.begin(LLRender::QUADS);
+	{
+		// draw bottom left
+		uv[index] = LLVector2(uv_outer_rect.mLeft, uv_outer_rect.mBottom);
+		pos[index] = LLVector3(draw_outer_rect.mLeft, draw_outer_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mBottom);
-			gGL.vertex2i(0, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			// draw bottom middle
-			gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mBottom);
-			gGL.vertex2i(draw_scale_rect.mLeft, 0);
+		uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mBottom);
-			gGL.vertex2i(draw_scale_rect.mRight, 0);
+		// draw bottom middle
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			// draw bottom right
-			gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mBottom);
-			gGL.vertex2i(draw_scale_rect.mRight, 0);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom);
-			gGL.vertex2i(width, 0);
+		// draw bottom right
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mBottom);
-			gGL.vertex2i(width, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_outer_rect.mRight, uv_outer_rect.mBottom);
+		pos[index] = LLVector3(draw_outer_rect.mRight, draw_outer_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			// draw left 
-			gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mBottom);
-			gGL.vertex2i(0, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
+		// draw left 
+		uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mTop);
-			gGL.vertex2i(0, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+		index++;
 
-			// draw middle
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
+		// draw middle
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+		index++;
 
-			// draw right 
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mBottom);
-			gGL.vertex2i(width, draw_scale_rect.mBottom);
+		// draw right 
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mTop);
-			gGL.vertex2i(width, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mBottom);
+		pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f);
+		index++;
 
-			// draw top left
-			gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mTop);
-			gGL.vertex2i(0, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
+		// draw top left
+		uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mTop);
-			gGL.vertex2i(draw_scale_rect.mLeft, height);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop);
-			gGL.vertex2i(0, height);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f);
+		index++;
 
-			// draw top middle
-			gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_outer_rect.mLeft, uv_outer_rect.mTop);
+		pos[index] = LLVector3(draw_outer_rect.mLeft, draw_outer_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
+		// draw top middle
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mTop);
-			gGL.vertex2i(draw_scale_rect.mRight, height);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mTop);
-			gGL.vertex2i(draw_scale_rect.mLeft, height);
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f);
+		index++;
 
-			// draw top right
-			gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop);
-			gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop);
+		uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mTop);
-			gGL.vertex2i(width, draw_scale_rect.mTop);
+		// draw top right
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop);
-			gGL.vertex2i(width, height);
+		uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mTop);
+		pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f);
+		index++;
 
-			gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mTop);
-			gGL.vertex2i(draw_scale_rect.mRight, height);
-		}
-		gGL.end();
+		uv[index] = LLVector2(uv_outer_rect.mRight, uv_outer_rect.mTop);
+		pos[index] = LLVector3(draw_outer_rect.mRight, draw_outer_rect.mTop, 0.f);
+		index++;
+
+		uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mTop);
+		pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f);
+		index++;
+
+		gGL.vertexBatchPreTransformed(pos, uv, NUM_VERTICES);
 	}
-	gGL.popUIMatrix();
+	gGL.end();
 
 	if (solid_color)
 	{
@@ -668,25 +723,40 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre
 
 	if (degrees == 0.f)
 	{
-		gGL.pushUIMatrix();
-		gGL.translateUI((F32)x, (F32)y, 0.f);
-			
+		const S32 NUM_VERTICES = 4; // 9 quads
+		LLVector2 uv[NUM_VERTICES];
+		LLVector3 pos[NUM_VERTICES];
+
 		gGL.begin(LLRender::QUADS);
 		{
-			gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop);
-			gGL.vertex2i(width, height );
-
-			gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop);
-			gGL.vertex2i(0, height );
-
-			gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom);
-			gGL.vertex2i(0, 0);
-
-			gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom);
-			gGL.vertex2i(width, 0);
+			LLVector3 ui_scale = gGL.getUIScale();
+			LLVector3 ui_translation = gGL.getUITranslation();
+			ui_translation.mV[VX] += x;
+			ui_translation.mV[VY] += y;
+			ui_translation.scaleVec(ui_scale);
+			S32 index = 0;
+			S32 scaled_width = llround(width * ui_scale.mV[VX]);
+			S32 scaled_height = llround(height * ui_scale.mV[VY]);
+
+			uv[index] = LLVector2(uv_rect.mRight, uv_rect.mTop);
+			pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY] + scaled_height, 0.f);
+			index++;
+
+			uv[index] = LLVector2(uv_rect.mLeft, uv_rect.mTop);
+			pos[index] = LLVector3(ui_translation.mV[VX], ui_translation.mV[VY] + scaled_height, 0.f);
+			index++;
+
+			uv[index] = LLVector2(uv_rect.mLeft, uv_rect.mBottom);
+			pos[index] = LLVector3(ui_translation.mV[VX], ui_translation.mV[VY], 0.f);
+			index++;
+
+			uv[index] = LLVector2(uv_rect.mRight, uv_rect.mBottom);
+			pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY], 0.f);
+			index++;
+
+			gGL.vertexBatchPreTransformed(pos, uv, NUM_VERTICES);
 		}
 		gGL.end();
-		gGL.popUIMatrix();
 	}
 	else
 	{
@@ -755,25 +825,6 @@ void gl_stippled_line_3d( const LLVector3& start, const LLVector3& end, const LL
 	LLUI::setLineWidth(1.f);
 }
 
-
-void gl_rect_2d_xor(S32 left, S32 top, S32 right, S32 bottom)
-{
-	gGL.color4fv( LLColor4::white.mV );
-	glLogicOp( GL_XOR );
-	stop_glerror();
-
-	gGL.begin(LLRender::QUADS);
-		gGL.vertex2i(left, top);
-		gGL.vertex2i(left, bottom);
-		gGL.vertex2i(right, bottom);
-		gGL.vertex2i(right, top);
-	gGL.end();
-
-	glLogicOp( GL_COPY );
-	stop_glerror();
-}
-
-
 void gl_arc_2d(F32 center_x, F32 center_y, F32 radius, S32 steps, BOOL filled, F32 start_angle, F32 end_angle)
 {
 	if (end_angle < start_angle)
@@ -1007,42 +1058,6 @@ void gl_washer_segment_2d(F32 outer_radius, F32 inner_radius, F32 start_radians,
 	gGL.end();
 }
 
-// Draws spokes around a circle.
-void gl_washer_spokes_2d(F32 outer_radius, F32 inner_radius, S32 count, const LLColor4& inner_color, const LLColor4& outer_color)
-{
-	const F32 DELTA = F_TWO_PI / count;
-	const F32 HALF_DELTA = DELTA * 0.5f;
-	const F32 SIN_DELTA = sin( DELTA );
-	const F32 COS_DELTA = cos( DELTA );
-
-	F32 x1 = outer_radius * cos( HALF_DELTA );
-	F32 y1 = outer_radius * sin( HALF_DELTA );
-	F32 x2 = inner_radius * cos( HALF_DELTA );
-	F32 y2 = inner_radius * sin( HALF_DELTA );
-
-	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-
-	gGL.begin( LLRender::LINES  );
-	{
-		while( count-- )
-		{
-			gGL.color4fv(outer_color.mV);
-			gGL.vertex2f( x1, y1 );
-			gGL.color4fv(inner_color.mV);
-			gGL.vertex2f( x2, y2 );
-
-			F32 x1_new = x1 * COS_DELTA - y1 * SIN_DELTA;
-			y1 = x1 * SIN_DELTA +  y1 * COS_DELTA;
-			x1 = x1_new;
-
-			F32 x2_new = x2 * COS_DELTA - y2 * SIN_DELTA;
-			y2 = x2 * SIN_DELTA +  y2 * COS_DELTA;
-			x2 = x2_new;
-		}
-	}
-	gGL.end();
-}
-
 void gl_rect_2d_simple_tex( S32 width, S32 height )
 {
 	gGL.begin( LLRender::QUADS );
@@ -1230,6 +1245,7 @@ void gl_segmented_rect_2d_tex(const S32 left,
 	gGL.popUIMatrix();
 }
 
+//FIXME: rewrite to use scissor?
 void gl_segmented_rect_2d_fragment_tex(const S32 left, 
 									   const S32 top, 
 									   const S32 right, 
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index afec2e9c263977457678f98fe3515645baef45f5..fc545c85d5764a48c691284f571cc7db73697f14 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -90,7 +90,6 @@ void gl_ring( F32 radius, F32 width, const LLColor4& center_color, const LLColor
 void gl_corners_2d(S32 left, S32 top, S32 right, S32 bottom, S32 length, F32 max_frac);
 void gl_washer_2d(F32 outer_radius, F32 inner_radius, S32 steps, const LLColor4& inner_color, const LLColor4& outer_color);
 void gl_washer_segment_2d(F32 outer_radius, F32 inner_radius, F32 start_radians, F32 end_radians, S32 steps, const LLColor4& inner_color, const LLColor4& outer_color);
-void gl_washer_spokes_2d(F32 outer_radius, F32 inner_radius, S32 count, const LLColor4& inner_color, const LLColor4& outer_color);
 
 void gl_draw_image(S32 x, S32 y, LLTexture* image, const LLColor4& color = UI_VERTEX_COLOR, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f));
 void gl_draw_scaled_image(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4& color = UI_VERTEX_COLOR, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f));
@@ -99,7 +98,6 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre
 void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 border_width, S32 border_height, S32 width, S32 height, LLTexture* image, const LLColor4 &color, BOOL solid_color = FALSE, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f));
 void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4 &color, BOOL solid_color = FALSE, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f), const LLRectf& scale_rect = LLRectf(0.f, 1.f, 1.f, 0.f));
 
-void gl_rect_2d_xor(S32 left, S32 top, S32 right, S32 bottom);
 void gl_stippled_line_3d( const LLVector3& start, const LLVector3& end, const LLColor4& color, F32 phase = 0.f ); 
 
 void gl_rect_2d_simple_tex( S32 width, S32 height );
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index 294c96f8f43a424f2a6c496f20603bfa9b7908f0..3ac3bf8c41fe35e23017268cb2231d4ca61c49ce 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -95,6 +95,7 @@ LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)
 :	LLView(p),
 	mTentative(FALSE),
 	mIsChrome(FALSE),
+	mTabStop(FALSE),
     mViewModel(viewmodel),
 	mControlVariable(NULL),
 	mEnabledControlVariable(NULL),
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index 71fd5034dfffeb24e859fea95aa19680377d446c..76dfdf754c3dc70598ca5e6ccc91752ff479eb27 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -141,8 +141,6 @@ public:
 	// LLView interface
 	/*virtual*/ BOOL	setLabelArg( const std::string& key, const LLStringExplicit& text );
 	/*virtual*/ BOOL	isCtrl() const;
-	/*virtual*/ void	setTentative(BOOL b);
-	/*virtual*/ BOOL	getTentative() const;
 	/*virtual*/ void	onMouseEnter(S32 x, S32 y, MASK mask);
 	/*virtual*/ void	onMouseLeave(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL	canFocusChildren() const;
@@ -174,6 +172,8 @@ public:
 	void setMakeVisibleControlVariable(LLControlVariable* control);
 	void setMakeInvisibleControlVariable(LLControlVariable* control);
 
+	virtual void	setTentative(BOOL b);
+	virtual BOOL	getTentative() const;
 	virtual void	setValue(const LLSD& value);
 	virtual LLSD	getValue() const;
     /// When two widgets are displaying the same data (e.g. during a skin
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index a34ede439af18f4953a43e0a2b4ab29caf9eddd4..5680ab8bd4a3656f1c748a4a2760a016cd8c36f8 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -357,6 +357,12 @@ std::string LLUrlEntryAgent::getTooltip(const std::string &string) const
 	return LLTrans::getString("TooltipAgentUrl");
 }
 
+bool LLUrlEntryAgent::underlineOnHoverOnly(const std::string &string) const
+{
+	std::string url = getUrl(string);
+	return LLStringUtil::endsWith(url, "/about") || LLStringUtil::endsWith(url, "/inspect");
+}
+
 std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
 {
 	if (!gCacheName)
@@ -724,6 +730,19 @@ std::string LLUrlEntrySLLabel::getTooltip(const std::string &string) const
 	return LLUrlEntryBase::getTooltip(string);
 }
 
+bool LLUrlEntrySLLabel::underlineOnHoverOnly(const std::string &string) const
+{
+	std::string url = getUrl(string);
+	LLUrlMatch match;
+	if (LLUrlRegistry::instance().findUrl(url, match))
+	{
+		return match.underlineOnHoverOnly();
+	}
+
+	// unrecognized URL? should not happen
+	return LLUrlEntryBase::underlineOnHoverOnly(string);
+}
+
 //
 // LLUrlEntryWorldMap Describes secondlife:///<location> URLs
 //
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index d868e01aa686d59c8423d4bc6b2ec73d9e5587ec..e25eaa75558f559cb01e6c9a6745c495e2616f68 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -88,6 +88,9 @@ public:
 	/// is this a match for a URL that should not be hyperlinked?
 	bool isLinkDisabled() const { return mDisabledLink; }
 
+	/// Should this link text be underlined only when mouse is hovered over it?
+	virtual bool underlineOnHoverOnly(const std::string &string) const { return false; }
+
 	virtual LLUUID	getID(const std::string &string) const { return LLUUID::null; }
 
 protected:
@@ -167,6 +170,7 @@ public:
 	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
 	/*virtual*/ std::string getTooltip(const std::string &string) const;
 	/*virtual*/ LLUUID	getID(const std::string &string) const;
+	/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const;
 private:
 	void onAgentNameReceived(const LLUUID& id, const std::string& first,
 							 const std::string& last, BOOL is_group);
@@ -269,6 +273,7 @@ public:
 	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
 	/*virtual*/ std::string getUrl(const std::string &string) const;
 	/*virtual*/ std::string getTooltip(const std::string &string) const;
+	/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const;
 };
 
 ///
diff --git a/indra/llui/llurlmatch.cpp b/indra/llui/llurlmatch.cpp
index 4ec97091a39b273abe677544c25b6f468bf7e9d4..e53b0c43708a9166ad96e08a9a88bc6fb5d9d5c5 100644
--- a/indra/llui/llurlmatch.cpp
+++ b/indra/llui/llurlmatch.cpp
@@ -37,7 +37,8 @@ LLUrlMatch::LLUrlMatch() :
 	mIcon(""),
 	mMenuName(""),
 	mLocation(""),
-	mDisabledLink(false)
+	mDisabledLink(false),
+	mUnderlineOnHoverOnly(false)
 {
 }
 
@@ -45,7 +46,7 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,
 						   const std::string &label, const std::string &tooltip,
 						   const std::string &icon, const LLUIColor& color,
 						   const std::string &menu, const std::string &location,
-						   bool disabled_link, const LLUUID& id)
+						   bool disabled_link, const LLUUID& id, bool underline_on_hover_only)
 {
 	mStart = start;
 	mEnd = end;
@@ -58,4 +59,5 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,
 	mLocation = location;
 	mDisabledLink = disabled_link;
 	mID = id;
+	mUnderlineOnHoverOnly = underline_on_hover_only;
 }
diff --git a/indra/llui/llurlmatch.h b/indra/llui/llurlmatch.h
index 7a4f0bc10e7cfafaa4c6144be9859b215a8c05e5..d1b2112ee71104482bc2eea2574209a6fa76c1c3 100644
--- a/indra/llui/llurlmatch.h
+++ b/indra/llui/llurlmatch.h
@@ -80,12 +80,15 @@ public:
 	/// is this a match for a URL that should not be hyperlinked?
 	bool isLinkDisabled() const { return mDisabledLink; }
 
+	/// Should this link text be underlined only when mouse is hovered over it?
+	bool underlineOnHoverOnly() const { return mUnderlineOnHoverOnly; }
+
 	/// Change the contents of this match object (used by LLUrlRegistry)
 	void setValues(U32 start, U32 end, const std::string &url, const std::string &label,
 	               const std::string &tooltip, const std::string &icon,
 				   const LLUIColor& color, const std::string &menu, 
 				   const std::string &location, bool disabled_link
-				   , const LLUUID& id );
+				   , const LLUUID& id, bool underline_on_hover_only  = false );
 
 	const LLUUID& getID() const { return mID;}
 
@@ -102,6 +105,7 @@ private:
 	LLUUID		mID;
 	LLUIColor	mColor;
 	bool        mDisabledLink;
+	bool		mUnderlineOnHoverOnly;
 };
 
 #endif
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index 1c103a628b4152baa7157c57377e7c5e3a67b2bf..9d215cf7ef7a9a29cd0ab1fe18ce80bd9ae15b39 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -178,7 +178,8 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
 						match_entry->getMenuName(),
 						match_entry->getLocation(url),
 						match_entry->isLinkDisabled(),
-						match_entry->getID(url));
+						match_entry->getID(url),
+						match_entry->underlineOnHoverOnly(url));
 		return true;
 	}
 
@@ -213,7 +214,8 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr
 						match.getMenuName(),
 						match.getLocation(),
 						match.isLinkDisabled(),
-						match.getID());
+						match.getID(),
+						match.underlineOnHoverOnly());
 		return true;
 	}
 	return false;
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 42ce7b84feeb157ac9d1aecbef375db05a81194c..fe5ef269a9be23c36d41f20db24359fd88151190 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -397,28 +397,40 @@ bool LLCompareByTabOrder::operator() (const LLView* const a, const LLView* const
 	return (a_score == b_score) ? a < b : a_score < b_score;
 }
 
-bool LLView::trueToRoot(const boost::function<bool (const LLView*)>& predicate) const
+BOOL LLView::isInVisibleChain() const
 {
-	const LLView* cur_view = this;
-	while(cur_view)
+	BOOL visible = TRUE;
+
+	const LLView* viewp = this;
+	while(viewp)
 	{
-		if(!predicate(cur_view))
+		if (!viewp->getVisible())
 		{
-			return false;
+			visible = FALSE;
+			break;
 		}
-		cur_view = cur_view->getParent();
+		viewp = viewp->getParent();
 	}
-	return true;
-}
-
-BOOL LLView::isInVisibleChain() const
-{
-	return trueToRoot(&LLView::getVisible);
+	
+	return visible;
 }
 
 BOOL LLView::isInEnabledChain() const
 {
-	return trueToRoot(&LLView::getEnabled);
+	BOOL enabled = TRUE;
+
+	const LLView* viewp = this;
+	while(viewp)
+	{
+		if (!viewp->getEnabled())
+		{
+			enabled = FALSE;
+			break;
+		}
+		viewp = viewp->getParent();
+	}
+	
+	return enabled;
 }
 
 // virtual
@@ -427,17 +439,6 @@ BOOL LLView::canFocusChildren() const
 	return TRUE;
 }
 
-//virtual
-void LLView::setTentative(BOOL b)
-{
-}
-
-//virtual
-BOOL LLView::getTentative() const
-{
-	return FALSE;
-}
-
 //virtual
 void LLView::setEnabled(BOOL enabled)
 {
@@ -2778,6 +2779,19 @@ LLView::tree_post_iterator_t LLView::endTreeDFSPost()
 	return tree_post_iterator_t();
 }
 
+LLView::bfs_tree_iterator_t LLView::beginTreeBFS() 
+{ 
+	return bfs_tree_iterator_t(this, 
+							boost::bind(boost::mem_fn(&LLView::beginChild), _1), 
+							boost::bind(boost::mem_fn(&LLView::endChild), _1)); 
+}
+
+LLView::bfs_tree_iterator_t LLView::endTreeBFS() 
+{ 
+	// an empty iterator is an "end" iterator
+	return bfs_tree_iterator_t();
+}
+
 
 LLView::root_to_view_iterator_t LLView::beginRootToView()
 {
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index b9cecb0f846e87d28d13fcb7513bde8cbe2a36b5..f7175112bff5805219bf047f7ceedc8796adb251 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -267,7 +267,6 @@ public:
 	S32 getDefaultTabGroup() const				{ return mDefaultTabGroup; }
 	S32 getLastTabGroup()						{ return mLastTabGroup; }
 
-	bool        trueToRoot(const boost::function<bool (const LLView*)>& predicate) const;
 	BOOL		isInVisibleChain() const;
 	BOOL		isInEnabledChain() const;
 
@@ -283,8 +282,6 @@ public:
 	// children, etc.
 	virtual void deleteAllChildren();
 
-	virtual void	setTentative(BOOL b);
-	virtual BOOL	getTentative() const;
 	void 	setAllChildrenEnabled(BOOL b);
 
 	virtual void	setVisible(BOOL visible);
@@ -351,6 +348,10 @@ public:
 	tree_post_iterator_t beginTreeDFSPost();
 	tree_post_iterator_t endTreeDFSPost();
 
+	typedef LLTreeBFSIter<LLView, child_list_const_iter_t> bfs_tree_iterator_t;
+	bfs_tree_iterator_t beginTreeBFS();
+	bfs_tree_iterator_t endTreeBFS();
+
 
 	typedef LLTreeDownIter<LLView> root_to_view_iterator_t;
 	root_to_view_iterator_t beginRootToView();
diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp
index 65a755e134a899510924d675fcbfb06ae24f4b8f..53cecf9d4a70291fec32c2e5dddcdfacb4cca287 100644
--- a/indra/llwindow/llkeyboard.cpp
+++ b/indra/llwindow/llkeyboard.cpp
@@ -337,6 +337,13 @@ std::string LLKeyboard::stringFromKey(KEY key)
 		buffer[1] = '\0';
 		res = std::string(buffer);
 	}
+
+	LLKeyStringTranslatorFunc *trans = gKeyboard->mStringTranslator;
+	if (trans != NULL)
+	{
+		res = trans(res.c_str());
+	}
+
 	return res;
 }
 
diff --git a/indra/llxuixml/lltrans.h b/indra/llxuixml/lltrans.h
index 5c9069559836b6c288b0684e119b0854d93c7228..42c27b6976eb13eb908fc1499f6c7eee9c9e8d02 100644
--- a/indra/llxuixml/lltrans.h
+++ b/indra/llxuixml/lltrans.h
@@ -97,11 +97,12 @@ public:
 		return findString(result, xml_desc, empty);
 	}
 
-        static std::string getKeyboardString(const char* keystring)
-        {
-                // These map directly - no need to specialize
-                return getString( ll_safe_string(keystring) );
-        }
+	static std::string getKeyboardString(const char* keystring)
+	{
+		std::string key_str(keystring);
+		std::string trans_str;
+		return findString(trans_str, key_str) ? trans_str : key_str; 
+	}
 
 	// get the default args
 	static const LLStringUtil::format_map_t& getDefaultArgs()
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 1ee7586d5f3955a0017d6282bce01402fa8245f3..653bc13260e4db330679fa4a5d83a4d4b4bea508 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -190,7 +190,6 @@ set(viewer_SOURCE_FILES
     llfloaternamedesc.cpp
     llfloaternotificationsconsole.cpp
     llfloateropenobject.cpp
-    llfloaterparcel.cpp
     llfloaterpay.cpp
     llfloaterperms.cpp
     llfloaterpostcard.cpp
@@ -212,7 +211,6 @@ set(viewer_SOURCE_FILES
     llfloatertopobjects.cpp
     llfloatertos.cpp
     llfloateruipreview.cpp
-    llfloaterurldisplay.cpp
     llfloaterurlentry.cpp
     llfloatervoicedevicesettings.cpp
     llfloatervoiceeffect.cpp
@@ -349,7 +347,6 @@ set(viewer_SOURCE_FILES
     llpanelpermissions.cpp
     llpanelpick.cpp
     llpanelpicks.cpp
-    llpanelplace.cpp
     llpanelplaceinfo.cpp
     llpanelplaceprofile.cpp
     llpanelplaces.cpp
@@ -552,6 +549,7 @@ set(viewer_SOURCE_FILES
     llwearablelist.cpp
     llwearabletype.cpp
     llweb.cpp
+    llwebsharing.cpp
     llwind.cpp
     llwlanimator.cpp
     llwldaycycle.cpp
@@ -716,7 +714,6 @@ set(viewer_HEADER_FILES
     llfloaternamedesc.h
     llfloaternotificationsconsole.h
     llfloateropenobject.h
-    llfloaterparcel.h
     llfloaterpay.h
     llfloaterperms.h
     llfloaterpostcard.h
@@ -738,7 +735,6 @@ set(viewer_HEADER_FILES
     llfloatertopobjects.h
     llfloatertos.h
     llfloateruipreview.h
-    llfloaterurldisplay.h
     llfloaterurlentry.h
     llfloatervoicedevicesettings.h
     llfloatervoiceeffect.h
@@ -871,7 +867,6 @@ set(viewer_HEADER_FILES
     llpanelpermissions.h
     llpanelpick.h
     llpanelpicks.h
-    llpanelplace.h
     llpanelplaceinfo.h
     llpanelplaceprofile.h
     llpanelplaces.h
@@ -1076,6 +1071,7 @@ set(viewer_HEADER_FILES
     llwearablelist.h
     llwearabletype.h
     llweb.h
+    llwebsharing.h
     llwind.h
     llwlanimator.h
     llwldaycycle.h
diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake
index 8168e91a068d73a846cc02f54b314c5ab2235c7a..0b0d3e2adc59bfa7b8819ae61bef01686226984f 100644
--- a/indra/newview/ViewerInstall.cmake
+++ b/indra/newview/ViewerInstall.cmake
@@ -7,8 +7,8 @@ install(DIRECTORY skins app_settings linux_tools
         PATTERN ".svn" EXCLUDE
         )
 
-find_file(IS_ARTWORK_PRESENT NAMES avatar_lad.xml
-          PATHS ${VIEWER_DIR}/newview/character)
+find_file(IS_ARTWORK_PRESENT NAMES have_artwork_bundle.marker
+          PATHS ${VIEWER_DIR}/newview/res)
 
 if (IS_ARTWORK_PRESENT)
   install(DIRECTORY res res-sdl character
diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml
index 6368f7099e71eff6067b435e3b81b6254878a87d..587b2f2a896f896a494006b6ffbbbffe7728c7bf 100644
--- a/indra/newview/app_settings/high_graphics.xml
+++ b/indra/newview/app_settings/high_graphics.xml
@@ -12,8 +12,6 @@
 	<RenderFlexTimeFactor value="1"/>
 	<!--256... but they don't use this-->
 	<RenderGlowResolutionPow value="9"/>
-	<!--Sun/Moon only-->
-	<RenderLightingDetail value="1"/>
 	<!--Low number-->
 	<RenderMaxPartCount value="4096"/>
 	<!--bump okay-->
@@ -31,9 +29,14 @@
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="1.125"/>
 	<!--NO SHADERS-->
-	<RenderWaterReflections value="FALSE"/>
-	<!--NO SHADERS-->
 	<VertexShaderEnable value="TRUE"/>
 	<!--NO SHADERS-->
 	<WindLightUseAtmosShaders value="TRUE"/>
+  <!--Deferred Shading-->
+  <RenderDeferred value="FALSE"/>
+  <!--SSAO Disabled-->
+  <RenderDeferredSSAO value="FALSE"/>
+  <!--Sun Shadows-->
+  <RenderShadowDetail value="0"/>
+
 </settings>
diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml
index d02a13a67131183e48ab8fd9f282bc5340de94d7..a5bbdfc1d0b9611351a9c86701b01aad0638ccf7 100644
--- a/indra/newview/app_settings/low_graphics.xml
+++ b/indra/newview/app_settings/low_graphics.xml
@@ -14,8 +14,6 @@
 	<RenderFlexTimeFactor value="0.5"/>
 	<!--256... but they don't use this-->
 	<RenderGlowResolutionPow value="8"/>
-	<!--Sun/Moon only-->
-	<RenderLightingDetail value="0"/>
 	<!--Low number-->
 	<RenderMaxPartCount value="1024"/>
 	<!--bump okay-->
@@ -33,9 +31,14 @@
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="1.125"/>
 	<!--NO SHADERS-->
-	<RenderWaterReflections value="FALSE"/>
-	<!--NO SHADERS-->
 	<VertexShaderEnable value="FALSE"/>
 	<!--NO SHADERS-->
 	<WindLightUseAtmosShaders value="FALSE"/>
+  <!--No Deferred Shading-->
+  <RenderDeferred value="FALSE"/>
+  <!--SSAO Disabled-->
+  <RenderDeferredSSAO value="FALSE"/>
+  <!--No Shadows-->
+  <RenderShadowDetail value="0"/>
+
 </settings>
diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml
index 12da77da400d837673fda1a9f21ad218e01b0132..a1430a58f985d22bc551880f25f5d0c6d2ed006d 100644
--- a/indra/newview/app_settings/mid_graphics.xml
+++ b/indra/newview/app_settings/mid_graphics.xml
@@ -12,8 +12,6 @@
 	<RenderFlexTimeFactor value="1"/>
 	<!--256... but they don't use this-->
 	<RenderGlowResolutionPow value="8"/>
-	<!--Sun/Moon only-->
-	<RenderLightingDetail value="1"/>
 	<!--Low number-->
 	<RenderMaxPartCount value="2048"/>
 	<!--bump okay-->
@@ -31,9 +29,14 @@
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="1.125"/>
 	<!--NO SHADERS-->
-	<RenderWaterReflections value="FALSE"/>
-	<!--NO SHADERS-->
 	<VertexShaderEnable value="TRUE"/>
 	<!--NO SHADERS-->
 	<WindLightUseAtmosShaders value="FALSE"/>
+  <!--No Deferred Shading-->
+  <RenderDeferred value="FALSE"/>
+  <!--SSAO Disabled-->
+  <RenderDeferredSSAO value="FALSE"/>
+  <!--No Shadows-->
+  <RenderShadowDetail value="0"/>
+
 </settings>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 810b2d9a1dfe06a4e98d367e6b401e94ba79660e..07418d1b5e98354beae9e369027c4caf37ea9b65 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1741,6 +1741,17 @@
 		<key>Value</key>
 		<integer>0</integer>
 	</map>
+  <key>DebugAvatarLocalTexLoadedTime</key>
+  <map>
+    <key>Comment</key>
+    <string>Display time for loading avatar local textures.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
     <key>DebugBeaconLineWidth</key>
     <map>
       <key>Comment</key>
@@ -5373,17 +5384,6 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>MultipleAttachments</key>
-    <map>
-      <key>Comment</key>
-      <string>Allow multiple objects to be attached to a single attachment point.</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
    <key>MuteAmbient</key>
     <map>
       <key>Comment</key>
@@ -6748,7 +6748,7 @@
     <key>Type</key>
     <string>U32</string>
     <key>Value</key>
-    <integer>60</integer>
+    <integer>200</integer>
   </map>
   <key>RenderSSAOFactor</key>
   <map>
@@ -7123,6 +7123,64 @@
     <real>0.01</real>
   </map>
 
+  <key>RenderShadowBiasError</key>
+  <map>
+    <key>Comment</key>
+    <string>Error scale for shadow bias (based on altitude).</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>F32</string>
+    <key>Value</key>
+    <real>0</real>
+  </map>
+  <key>RenderShadowOffsetError</key>
+  <map>
+    <key>Comment</key>
+    <string>Error scale for shadow offset (based on altitude).</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>F32</string>
+    <key>Value</key>
+    <real>0</real>
+  </map>
+  
+  <key>RenderSpotLightsInNondeferred</key>
+  <map>
+    <key>Comment</key>
+    <string>Whether to support projectors as spotlights when Lighting and Shadows is disabled</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
+
+  <key>RenderSpotShadowBias</key>
+  <map>
+    <key>Comment</key>
+    <string>Bias value for shadows (prevent shadow acne).</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>F32</string>
+    <key>Value</key>
+    <real>0.0</real>
+  </map>
+  <key>RenderSpotShadowOffset</key>
+  <map>
+    <key>Comment</key>
+    <string>Offset value for shadows (prevent shadow acne).</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>F32</string>
+    <key>Value</key>
+    <real>0.04</real>
+  </map>
+
   <key>RenderShadowResolutionScale</key>
   <map>
     <key>Comment</key>
@@ -7135,8 +7193,6 @@
     <real>1.0</real>
   </map>
 
-
-
   <key>RenderDeferredTreeShadowBias</key>
   <map>
     <key>Comment</key>
@@ -7258,7 +7314,7 @@
     <key>Type</key>
     <string>F32</string>
     <key>Value</key>
-    <real>1</real>
+    <real>8</real>
   </map>
 
   <key>RenderDeferred</key>
@@ -7273,18 +7329,6 @@
     <integer>0</integer>
   </map>
 
-  <key>RenderDeferredShadow</key>
-  <map>
-    <key>Comment</key>
-    <string>Enable shadows in deferred renderer.</string>
-    <key>Persist</key>
-    <integer>1</integer>
-    <key>Type</key>
-    <string>Boolean</string>
-    <key>Value</key>
-    <integer>1</integer>
-  </map>
-
   <key>RenderDeferredGI</key>
   <map>
     <key>Comment</key>
@@ -7297,10 +7341,10 @@
     <integer>0</integer>
   </map>
 
-  <key>RenderDeferredSunShadow</key>
+  <key>RenderDeferredSun</key>
   <map>
     <key>Comment</key>
-    <string>Generate shadows from the sun.</string>
+    <string>Execute sunlight shader in deferred renderer.</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -7309,10 +7353,10 @@
     <integer>1</integer>
   </map>
 
-  <key>RenderDeferredSun</key>
+  <key>RenderDeferredAtmospheric</key>
   <map>
     <key>Comment</key>
-    <string>Execute sunlight shader in deferred renderer.</string>
+    <string>Execute atmospheric shader in deferred renderer.</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -7321,10 +7365,10 @@
     <integer>1</integer>
   </map>
 
-  <key>RenderDeferredAtmospheric</key>
+  <key>RenderDeferredSSAO</key>
   <map>
     <key>Comment</key>
-    <string>Execute atmospheric shader in deferred renderer.</string>
+    <string>Execute screen space ambient occlusion shader in deferred renderer.</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -7583,10 +7627,10 @@
       <key>Value</key>
       <real>256.0</real>
     </map>
-    <key>RenderFastAlpha</key>
+    <key>RenderAutoMaskAlphaNonDeferred</key>
     <map>
       <key>Comment</key>
-      <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
+      <string>Use alpha masks where appropriate, in the non-deferred (non-'Lighting and Shadows') graphics mode</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -7594,6 +7638,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>RenderAutoMaskAlphaDeferred</key>
+    <map>
+      <key>Comment</key>
+      <string>Use alpha masks where appropriate, in the deferred ('Lighting and Shadows') graphics mode</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderFastUI</key>
     <map>
       <key>Comment</key>
@@ -7855,17 +7910,6 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>RenderLightingDetail</key>
-    <map>
-      <key>Comment</key>
-      <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>S32</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
     <key>RenderMaxPartCount</key>
     <map>
       <key>Comment</key>
@@ -7965,6 +8009,18 @@
       <key>Value</key>
       <integer>2</integer>
     </map>
+    <key>RenderShadowDetail</key>
+    <map>
+      <key>Comment</key>
+      <string>Detail of shadows.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
+
     <key>RenderReflectionRes</key>
     <map>
       <key>Comment</key>
@@ -8095,7 +8151,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>RenderUIBuffer</key>
     <map>
@@ -8251,17 +8307,6 @@
       <key>Value</key>
       <integer>512</integer>
     </map>
-    <key>RenderWaterReflections</key>
-    <map>
-      <key>Comment</key>
-      <string>Reflect the environment in the water.</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
     <key>RotateRight</key>
     <map>
       <key>Comment</key>
@@ -8284,17 +8329,6 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
-    <key>RunMultipleThreads</key>
-    <map>
-      <key>Comment</key>
-      <string>If TRUE keep background threads active during render</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
     <key>SafeMode</key>
     <map>
       <key>Comment</key>
@@ -9461,6 +9495,28 @@
       <key>Value</key>
       <integer>75</integer>
     </map>
+    <key>SnapshotSharingEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable uploading of snapshots to a web service.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>SnapshotConfigURL</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to fetch Snapshot Sharing configuration data from.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://photos.apps.staging.avatarsunited.com/viewer_config</string>
+    </map>
     <key>SnapshotTextureLastResolution</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index 4fb109d687012081898b7e3aacdc8cdfef4590c4..fea2e1609082a1d2256bade99fe1ab95e42ff15c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -24,8 +24,6 @@ varying vec3 vary_fragcoord;
 varying vec3 vary_position;
 varying vec3 vary_light;
 
-uniform float alpha_soften;
-
 uniform mat4 inv_proj;
 
 vec4 getPosition(vec2 pos_screen)
@@ -57,15 +55,6 @@ void main()
 
 	color.rgb = scaleSoftClip(color.rgb);
 
-	if (samp_pos.z != 0.0 && gl_Color.a < 1.0)
-	{
-		float dist_factor = alpha_soften;
-		float a = gl_Color.a;
-		a *= a;
-		dist_factor *= 1.0/(1.0-a);
-		color.a *= min((pos.z-samp_pos.z)*dist_factor, 1.0);
-	}
-	
 	//gl_FragColor = gl_Color;
 	gl_FragColor = color;
 	//gl_FragColor = vec4(1,0,1,1);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
index 1a7d58b07badf728127947f7a185e8dab07635ca..04e556c11ad51880c832e6933a91b9dbd597ab2f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
@@ -9,7 +9,7 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
 void calcAtmospherics(vec3 inPositionEye);
 
 float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLight(vec3 v, vec3 n, vec4 lp, float la);
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
 
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
@@ -41,23 +41,22 @@ void main()
 	calcAtmospherics(pos.xyz);
 
 	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.));
-	vec4 col;
-	col.a = gl_Color.a;
-	
-	// Add windlight lights
-	col.rgb = atmosAmbient(vec3(0.));
-	col.rgb = scaleUpLight(col.rgb);
+
+	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a);
 
 	// Collect normal lights (need to be divided by two, as we later multiply by 2)
-	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation);
-	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation);
-	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation);
-	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].linearAttenuation);
- 	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].linearAttenuation);
- 	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].linearAttenuation);
+	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a);
+	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a);
+	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a);
+	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a);
+	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a);
+	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a);
 	col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz);
 	col.rgb = scaleDownLight(col.rgb);
 	
+	// Add windlight lights
+	col.rgb += atmosAmbient(vec3(0.));
+	
 	vary_light = gl_LightSource[0].position.xyz;
 	
 	vary_ambient = col.rgb*gl_Color.rgb;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
index c1988d3c783e4f9ddff80957ec8abfe5bf4b8a6a..650fbcc3f5c59f08d21ea090f91a4204338723f1 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
@@ -10,7 +10,7 @@ mat4 getSkinnedTransform();
 void calcAtmospherics(vec3 inPositionEye);
 
 float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLight(vec3 v, vec3 n, vec4 lp, float la);
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
 
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
@@ -47,23 +47,22 @@ void main()
 	calcAtmospherics(pos.xyz);
 
 	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.));
-	vec4 col;
-	col.a = gl_Color.a;
-	
-	// Add windlight lights
-	col.rgb = atmosAmbient(vec3(0.));
-	col.rgb = scaleUpLight(col.rgb);
+
+	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a);
 
 	// Collect normal lights (need to be divided by two, as we later multiply by 2)
-	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation);
-	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation);
-	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation);
-	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].linearAttenuation);
- 	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].linearAttenuation);
- 	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].linearAttenuation);
+	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a);
+	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a);
+	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a);
+	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a);
+	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a);
+	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a);
 	col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz);
 	col.rgb = scaleDownLight(col.rgb);
 	
+	// Add windlight lights
+	col.rgb += atmosAmbient(vec3(0.));
+	
 	vary_ambient = col.rgb*gl_Color.rgb;
 	vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a)));
 	
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
index 75df3889418feb0d1efc8e1cbb174bb809d13fbe..afbe08a5794c1b813929223920881d45c41c98f4 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -20,6 +20,7 @@ void main()
 	
 	gl_FragData[0] = vec4(diff.rgb, 0.0);
 	gl_FragData[1] = vec4(0,0,0,0);
-	gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0);
+	vec3 nvn = normalize(vary_normal);
+	gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
index 00083eb6b396e8ec84f627dbf3bf80d20dbc243a..085ffddeece06d39ab2d8f8a44ad79fac655aa08 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
@@ -10,7 +10,7 @@ uniform sampler2D diffuseMap;
 
 void main() 
 {
-	gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy).a);
-	//gl_FragColor = vec4(1,1,1,1);
+	//gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy).a);
+	gl_FragColor = vec4(1,1,1,1);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
index bd5e9dd75803c6b8ded976bd0d1f11cc41694ed4..d1c5d7cb195b4b19876c6ae4f100a3105ca1c440 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
@@ -10,13 +10,11 @@
 uniform sampler2DRect depthMap;
 uniform sampler2DRect normalMap;
 uniform sampler2DRect lightMap;
-uniform sampler2DRect giLightMap;
 
 uniform float dist_factor;
 uniform float blur_size;
 uniform vec2 delta;
-uniform vec3 kern[32];
-uniform int kern_length;
+uniform vec3 kern[4];
 uniform float kern_scale;
 
 varying vec2 vary_fragcoord;
@@ -39,7 +37,8 @@ vec4 getPosition(vec2 pos_screen)
 
 void main() 
 {
-	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	vec3 pos = getPosition(vary_fragcoord.xy).xyz;
 	vec4 ccol = texture2DRect(lightMap, vary_fragcoord.xy).rgba;
 	
@@ -50,7 +49,7 @@ void main()
 	vec2 defined_weight = kern[0].xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free'
 	vec4 col = defined_weight.xyxx * ccol;
 	
-	for (int i = 1; i < kern_length; i++)
+	for (int i = 1; i < 4; i++)
 	{
 		vec2 tc = vary_fragcoord.xy + kern[i].z*dlt;
 	        vec3 samppos = getPosition(tc).xyz; 
@@ -61,12 +60,22 @@ void main()
 			defined_weight += kern[i].xy;
 		}
 	}
+	for (int i = 1; i < 4; i++)
+	{
+		vec2 tc = vary_fragcoord.xy - kern[i].z*dlt;
+	        vec3 samppos = getPosition(tc).xyz; 
+		float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane
+		if (d*d <= 0.003)
+		{
+			col += texture2DRect(lightMap, tc)*kern[i].xyxx;
+			defined_weight += kern[i].xy;
+		}
+	}
 
 
 
 	col /= defined_weight.xyxx;
 	
 	gl_FragColor = col;
-	
-	//gl_FragColor = ccol;
 }
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
index 1c29dae5f7c55cec11d92de337f81400374bd94b..2197744a3726f88b816e767f4d05f651ede99808 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
@@ -14,14 +14,16 @@ varying vec3 vary_mat2;
 
 void main() 
 {
-	vec3 col = texture2D(diffuseMap, gl_TexCoord[0].xy).rgb;
+	vec3 col = gl_Color.rgb * texture2D(diffuseMap, gl_TexCoord[0].xy).rgb;
 	vec3 norm = texture2D(bumpMap, gl_TexCoord[0].xy).rgb * 2.0 - 1.0;
 
 	vec3 tnorm = vec3(dot(norm,vary_mat0),
-					  dot(norm,vary_mat1),
-					  dot(norm,vary_mat2));
+			  dot(norm,vary_mat1),
+			  dot(norm,vary_mat2));
 						
-	gl_FragData[0] = vec4(gl_Color.rgb*col, 0.0);
-	gl_FragData[1] = vec4(col*gl_Color.a, gl_Color.a);
-	gl_FragData[2] = vec4(normalize(tnorm)*0.5+0.5, 0.0);
+	gl_FragData[0] = vec4(col, 0.0);
+	gl_FragData[1] = gl_Color.aaaa; // spec
+	//gl_FragData[1] = vec4(vec3(gl_Color.a), gl_Color.a+(1.0-gl_Color.a)*gl_Color.a); // spec - from former class3 - maybe better, but not so well tested
+	vec3 nvn = normalize(tnorm);
+	gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
index 5895ebda84c2aac53b9dc5573bbc432f073dc3bd..3803119cda39713670917e172d205962d1921686 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -11,8 +11,10 @@ varying vec3 vary_normal;
 
 void main() 
 {
-	vec3 col = texture2D(diffuseMap, gl_TexCoord[0].xy).rgb;
-	gl_FragData[0] = vec4(gl_Color.rgb*col, 0.0);
-	gl_FragData[1] = vec4(col*(gl_Color.a*1.5), gl_Color.a);
-	gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0);
+	vec3 col = gl_Color.rgb * texture2D(diffuseMap, gl_TexCoord[0].xy).rgb;
+	gl_FragData[0] = vec4(col, 0.0);
+	gl_FragData[1] = gl_Color.aaaa; // spec
+	//gl_FragData[1] = vec4(vec3(gl_Color.a), gl_Color.a+(1.0-gl_Color.a)*gl_Color.a); // spec - from former class3 - maybe better, but not so well tested
+	vec3 nvn = normalize(vary_normal);
+	gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index e518bddb9840fa4608f1d814620b214e955b549c..0db9586a88d47091fac17fab44e4e9b38d406ca7 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -23,8 +23,6 @@ varying vec4 vary_position;
 varying vec3 vary_normal;
 varying vec3 vary_fragcoord;
 
-uniform float alpha_soften;
-
 uniform mat4 inv_proj;
 
 vec4 getPosition(vec2 pos_screen)
@@ -56,15 +54,6 @@ void main()
 
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
-	if (samp_pos.z != 0.0 && color.a < 1.0)
-	{
-		float dist_factor = alpha_soften;
-		float a = color.a;
-		a *= a;
-		dist_factor *= 1.0/(1.0-a);
-		color.a *= min((pos.z-samp_pos.z)*dist_factor, 1.0);
-	}
-
 	//gl_FragColor = gl_Color;
 	gl_FragColor = color;
 	//gl_FragColor = vec4(1,0,1,1);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
index b351eec6e54536d7e822822f381a6cf5d16b04ac..d4b153c4af9f7d00b853c68cbb40cc09ce831e7d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
@@ -159,7 +159,8 @@ void main()
 {
 	vec2 pos_screen = vary_fragcoord.xy;
 	vec4 pos = getPosition(pos_screen);
-	vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	
 	gl_FragData[0].xyz = giAmbient(pos, norm);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
index 8c140a7b4f02716fd690ea630fa91b09e9058716..508bbf415ea359c5d3bed932437c2baf0121e59e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -11,7 +11,8 @@ uniform sampler2D specularMap;
 
 void main() 
 {
-	gl_FragData[0] = texture2D(diffuseMap, gl_TexCoord[0].xy);
+	vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy);
+	gl_FragData[0] = vec4(col.rgb, col.a <= 0.5 ? 0.0 : 0.005);
 	gl_FragData[1] = texture2D(specularMap, gl_TexCoord[0].xy);
 	gl_FragData[2] = vec4(texture2D(normalMap, gl_TexCoord[0].xy).xyz, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 797b9e9f3bf88fe17740443abe5f6ceeeb6ce9d1..b494b521cab77e3f2ebaac631d609c9a6a1ddadd 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -53,7 +53,9 @@ void main()
 		discard;
 	}
 	
-	vec3 norm = normalize(texture2DRect(normalMap, frag.xy).xyz*2.0-1.0);
+	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = normalize(norm);
 	vec4 spec = texture2DRect(specularRect, frag.xy);
 	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
 	float noise = texture2D(noiseMap, frag.xy/128.0).b;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
index 28bcd720c0a294d9202c64486a01813d90cc12f9..82e9450e68473bc45095723b7cfe32c318b7c959 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
@@ -5,9 +5,10 @@
  * $License$
  */
 
-
 #version 120
 
+//class 1 -- no shadows
+
 #extension GL_ARB_texture_rectangle : enable
 
 uniform sampler2DRect diffuseRect;
@@ -26,12 +27,15 @@ uniform vec3 proj_n;
 uniform float proj_focus; //distance from plane to begin blurring
 uniform float proj_lod;  //(number of mips in proj map)
 uniform float proj_range; //range between near clip and far clip plane of projection
+uniform float proj_ambient_lod;
 uniform float proj_ambiance;
 uniform float near_clip;
 uniform float far_clip;
 
 uniform vec3 proj_origin; //origin of projection to be used for angular attenuation
 uniform float sun_wash;
+uniform int proj_shadow_idx;
+uniform float shadow_fade;
 
 varying vec4 vary_light;
 
@@ -40,6 +44,52 @@ uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
+vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
+{
+	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	
+	vec2 dist = tc-vec2(0.5);
+	
+	float det = max(1.0-lod/(proj_lod*0.5), 0.0);
+	
+	float d = dot(dist,dist);
+		
+	ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0)+det, 1.0);
+	
+	return ret;
+}
+
+vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
+{
+	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	
+	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
+	
+	float det = min(lod/(proj_lod*0.5), 1.0);
+	
+	float d = min(dist.x, dist.y);
+	
+	float edge = 0.25*det;
+		
+	ret *= clamp(d/edge, 0.0, 1.0);
+	
+	return ret;
+}
+
+vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
+{
+	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	
+	vec2 dist = tc-vec2(0.5);
+	
+	float d = dot(dist,dist);
+		
+	ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0);
+	
+	return ret;
+}
+
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).a;
@@ -68,7 +118,7 @@ void main()
 	{
 		discard;
 	}
-	
+		
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0;
 	
 	norm = normalize(norm);
@@ -83,7 +133,11 @@ void main()
 	proj_tc.xyz /= proj_tc.w;
 	
 	float fa = gl_Color.a+1.0;
-	float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
+	float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
+	if (dist_atten <= 0.0)
+	{
+		discard;
+	}
 	
 	lv = proj_origin-pos.xyz;
 	lv = normalize(lv);
@@ -101,32 +155,32 @@ void main()
 		proj_tc.y > 0.0)
 	{
 		float lit = 0.0;
+		float amb_da = proj_ambiance;
+		
 		if (da > 0.0)
 		{
 			float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0);
 			float lod = diff * proj_lod;
 			
-			vec4 plcol = texture2DLod(projectionMap, proj_tc.xy, lod);
+			vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod);
 		
 			vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a;
 			
 			lit = da * dist_atten * noise;
 			
 			col = lcol*lit*diff_tex;
+			amb_da += (da*0.5)*proj_ambiance;
 		}
 		
-		float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0);
-		float lod = diff * proj_lod;
-		vec4 amb_plcol = texture2DLod(projectionMap, proj_tc.xy, lod);
-		//float amb_da = mix(proj_ambiance, proj_ambiance*max(-da, 0.0), max(da, 0.0));
-		float amb_da = proj_ambiance;
-		
+		//float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0);
+		vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod);
+							
 		amb_da += (da*da*0.5+0.5)*proj_ambiance;
-			
+				
 		amb_da *= dist_atten * noise;
-		
+			
 		amb_da = min(amb_da, 1.0-lit);
-		
+			
 		col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a;
 	}
 	
@@ -144,35 +198,28 @@ void main()
 		{
 			vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds;
 			
-			vec3 stc = (proj_mat * vec4(pfinal.xyz, 1.0)).xyz;
+			vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0));
 
 			if (stc.z > 0.0)
 			{
-				stc.xy /= stc.z+proj_near;
-					
+				stc.xy /= stc.w;
+
+				float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0);
+				
+				stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
+								
 				if (stc.x < 1.0 &&
 					stc.y < 1.0 &&
 					stc.x > 0.0 &&
 					stc.y > 0.0)
 				{
-					vec4 scol = texture2DLod(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
+					vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
 					col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb;
 				}
 			}
 		}
 	}
 	
-	/*if (spec.a > 0.0)
-	{
-		//vec3 ref = reflect(normalize(pos), norm);
-		float sa = dot(normalize(lv-normalize(pos)),norm);;
-		//sa = max(sa, 0.0);
-		//sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0);
-		sa = texture2D(lightFunc, vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0);
-		sa *= noise;
-		col += da*sa*lcol*spec.rgb;
-	}*/
-	
 	gl_FragColor.rgb = col;	
 	gl_FragColor.a = 0.0;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
index 78256e20cc6af290298168401d8b20a334ecba39..3aecbc5f23cae2e022567dc0964097d783f126df 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -55,7 +55,8 @@ void main()
 		discard;
 	}
 	
-	vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	float da = dot(norm, lv);
 	if (da < 0.0)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
index 9612aee40597752615947db97084b37fcdc686ea..bd554c2d84ca26a6ea658399ccc16d4d214b564b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
@@ -38,10 +38,10 @@ vec4 getPosition(vec2 pos_screen)
 
 void main() 
 {
-	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	vec3 pos = getPosition(vary_fragcoord.xy).xyz;
 	
-	
 	vec3 ccol = texture2DRect(giLightMap, vary_fragcoord.xy).rgb;
 	vec2 dlt = kern_scale * delta/(1.0+norm.xy*norm.xy);
 	dlt /= max(-pos.z*dist_factor, 1.0);
@@ -51,9 +51,10 @@ void main()
 	for (int i = 0; i < kern_length; i++)
 	{
 		vec2 tc = vary_fragcoord.xy + kern[i].y*dlt;
-	    vec3 sampNorm = texture2DRect(normalMap, tc.xy).xyz*2.0-1.0;
+		vec3 sampNorm = texture2DRect(normalMap, tc.xy).xyz;
+		sampNorm = vec3((sampNorm.xy-0.5)*2.0,sampNorm.z); // unpack norm
 	    
-	    float d = dot(norm.xyz, sampNorm);
+		float d = dot(norm.xyz, sampNorm);
 		
 		if (d > 0.8)
 		{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index b4b0d0ce9de837d2644ff9aebb7c0a4dcd737719..bef91e735dc7751267bfa1fa302477c8dc2c2c4f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -11,6 +11,7 @@ uniform sampler2DRect diffuseRect;
 uniform sampler2DRect specularRect;
 uniform sampler2DRect positionMap;
 uniform sampler2DRect normalMap;
+uniform sampler2DRect lightMap;
 uniform sampler2DRect depthMap;
 uniform sampler2D	  noiseMap;
 uniform samplerCube environmentMap;
@@ -40,7 +41,7 @@ uniform float scene_light_strength;
 uniform vec3 env_mat[3];
 //uniform mat4 shadow_matrix[3];
 //uniform vec4 shadow_clip;
-//uniform mat3 ssao_effect_mat;
+uniform mat3 ssao_effect_mat;
 
 varying vec4 vary_light;
 varying vec2 vary_fragcoord;
@@ -55,9 +56,8 @@ vec3 vary_AtmosAttenuation;
 uniform mat4 inv_proj;
 uniform vec2 screen_res;
 
-vec4 getPosition(vec2 pos_screen)
-{ //get position in screen space (world units) given window coordinate and depth map
-	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+vec4 getPosition_d(vec2 pos_screen, float depth)
+{
 	vec2 sc = pos_screen.xy*2.0;
 	sc /= screen_res;
 	sc -= vec2(1.0,1.0);
@@ -68,6 +68,12 @@ vec4 getPosition(vec2 pos_screen)
 	return pos;
 }
 
+vec4 getPosition(vec2 pos_screen)
+{ //get position in screen space (world units) given window coordinate and depth map
+	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+	return getPosition_d(pos_screen, depth);
+}
+
 vec3 getPositionEye()
 {
 	return vary_PositionEye;
@@ -178,7 +184,17 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
 	temp2.x += .25;
 	
 	//increase ambient when there are more clouds
-	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5;	
+	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5;
+	
+	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas
+	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html
+	 * // The following line of code performs the equivalent of:
+	 * float ambAlpha = tmpAmbient.a;
+	 * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis
+	 * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue);
+	 * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha);
+	 */
+	tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a);
 
 	//haze color
 	setAdditiveColor(
@@ -241,8 +257,10 @@ vec3 scaleSoftClip(vec3 light)
 void main() 
 {
 	vec2 tc = vary_fragcoord.xy;
-	vec3 pos = getPosition(tc).xyz;
-	vec3 norm = texture2DRect(normalMap, tc).xyz*2.0-1.0;
+	float depth = texture2DRect(depthMap, tc.xy).a;
+	vec3 pos = getPosition_d(tc, depth).xyz;
+	vec3 norm = texture2DRect(normalMap, tc).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	//vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz;
 	
 	float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
@@ -250,23 +268,76 @@ void main()
 	vec4 diffuse = texture2DRect(diffuseRect, tc);
 	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
 	
-	calcAtmospherics(pos.xyz, 0.0);
+	vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
+	float scol = max(scol_ambocc.r, diffuse.a); 
+	float ambocc = scol_ambocc.g;
+	
+	calcAtmospherics(pos.xyz, ambocc);
 	
 	vec3 col = atmosAmbient(vec3(0));
-	col += atmosAffectDirectionalLight(clamp(da, diffuse.a, 1.0));
+	col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
 	
 	col *= diffuse.rgb;
 	
-	if (spec.a > 0.0)
+	if (spec.a > 0.0) // specular reflection
 	{
-		vec3 ref = normalize(reflect(pos.xyz, norm.xyz));
-		float sa = dot(ref, vary_light.xyz);
-		col.rgb += vary_SunlitColor*spec.rgb*texture2D(lightFunc, vec2(sa, spec.a)).a;
+		// the old infinite-sky shiny reflection
+		//
+		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+		float sa = dot(refnormpersp, vary_light.xyz);
+		vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+		/*
+		// screen-space cheap fakey reflection map
+		//
+		vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz));
+		depth -= 0.5; // unbias depth
+		// first figure out where we'll make our 2D guess from
+		vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth;
+		// Offset the guess source a little according to a trivial
+		// checkerboard dither function and spec.a.
+		// This is meant to be similar to sampling a blurred version
+		// of the diffuse map.  LOD would be better in that regard.
+		// The goal of the blur is to soften reflections in surfaces
+		// with low shinyness, and also to disguise our lameness.
+		float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0
+		float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5);
+		ref2d += vec2(checkoffset, checkoffset);
+		ref2d += tc.xy; // use as offset from destination
+		// Get attributes from the 2D guess point.
+		// We average two samples of diffuse (not of anything else) per
+		// pixel to try to reduce aliasing some more.
+		vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb +
+				     texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb);
+		float refdepth = texture2DRect(depthMap, ref2d).a;
+		vec3 refpos = getPosition_d(ref2d, refdepth).xyz;
+		vec3 refn = texture2DRect(normalMap, ref2d).rgb;
+		refn = normalize(vec3((refn.xy-0.5)*2.0,refn.z)); // unpack norm
+		// figure out how appropriate our guess actually was
+		float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos)));
+		// darken reflections from points which face away from the reflected ray - our guess was a back-face
+		//refapprop *= step(dot(refnorm, refn), 0.0);
+		refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant
+		// get appropriate light strength for guess-point.
+		// reflect light direction to increase the illusion that
+		// these are reflections.
+		vec3 reflight = reflect(lightnorm.xyz, norm.xyz);
+		float reflit = max(dot(refn, reflight.xyz), 0.0);
+		// apply sun color to guess-point, dampen according to inappropriateness of guess
+		float refmod = min(refapprop, reflit);
+		vec3 refprod = vary_SunlitColor * refcol.rgb * refmod;
+		vec3 ssshiny = (refprod * spec.a);
+		ssshiny *= 0.3; // dampen it even more
+		*/
+		vec3 ssshiny = vec3(0,0,0);
+
+		// add the two types of shiny together
+		col += (ssshiny + dumbshiny) * spec.rgb;
 	}
 	
 	col = atmosLighting(col);
 	col = scaleSoftClip(col);
-	
+		
 	gl_FragColor.rgb = col;
 	gl_FragColor.a = 0.0;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
index 2a7234fd83bdb3788c392b7935fec020ef5a32b1..1b95b253c3509c39387f3ebc0fd60baf9c890450 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
@@ -68,7 +68,8 @@ void main()
 		discard;
 	}
 	
-	vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
@@ -161,17 +162,6 @@ void main()
 		}
 	}
 	
-	/*if (spec.a > 0.0)
-	{
-		//vec3 ref = reflect(normalize(pos), norm);
-		float sa = dot(normalize(lv-normalize(pos)),norm);;
-		//sa = max(sa, 0.0);
-		//sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0);
-		sa = texture2D(lightFunc, vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0);
-		sa *= noise;
-		col += da*sa*lcol*spec.rgb;
-	}*/
-	
 	gl_FragColor.rgb = col;	
 	gl_FragColor.a = 0.0;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
index 22bdd2c7f3489743cf42e7c88f346d52f91aea95..56e4055c02c0ff7d53a55aa7e32de1a2c8444e82 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
@@ -5,196 +5,11 @@
  * $License$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
-uniform sampler2DRect depthMap;
-uniform sampler2DRect normalMap;
-uniform sampler2DRectShadow shadowMap0;
-uniform sampler2DRectShadow shadowMap1;
-uniform sampler2DRectShadow shadowMap2;
-uniform sampler2DRectShadow shadowMap3;
-uniform sampler2DRectShadow shadowMap4;
-uniform sampler2DRectShadow shadowMap5;
-uniform sampler2D noiseMap;
-
-uniform sampler2D		lightFunc;
-
-
-// Inputs
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
-uniform float ssao_radius;
-uniform float ssao_max_radius;
-uniform float ssao_factor;
-uniform float ssao_factor_inv;
-
-varying vec2 vary_fragcoord;
-varying vec4 vary_light;
-
-uniform mat4 inv_proj;
-uniform vec2 screen_res;
-
-uniform float shadow_bias;
-uniform float shadow_offset;
-
-vec4 getPosition(vec2 pos_screen)
-{
-	float depth = texture2DRect(depthMap, pos_screen.xy).a;
-	vec2 sc = pos_screen.xy*2.0;
-	sc /= screen_res;
-	sc -= vec2(1.0,1.0);
-	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
-	vec4 pos = inv_proj * ndc;
-	pos /= pos.w;
-	pos.w = 1.0;
-	return pos;
-}
+//class 1, no shadow, no SSAO, should never be called
 
-//calculate decreases in ambient lighting when crowded out (SSAO)
-float calcAmbientOcclusion(vec4 pos, vec3 norm)
-{
-	vec2 kern[8];
-	// exponentially (^2) distant occlusion samples spread around origin
-	kern[0] = vec2(-1.0, 0.0) * 0.125*0.125;
-	kern[1] = vec2(1.0, 0.0) * 0.250*0.250;
-	kern[2] = vec2(0.0, 1.0) * 0.375*0.375;
-	kern[3] = vec2(0.0, -1.0) * 0.500*0.500;
-	kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625;
-	kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750;
-	kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875;
-	kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000;
-
-	vec2 pos_screen = vary_fragcoord.xy;
-	vec3 pos_world = pos.xyz;
-	vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy;
-	
-	float angle_hidden = 0.0;
-	int points = 0;
-	
-	float scale = min(ssao_radius / -pos_world.z, ssao_max_radius);
-	
-	// it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations (unrolling?)
-	for (int i = 0; i < 8; i++)
-	{
-		vec2 samppos_screen = pos_screen + scale * reflect(kern[i], noise_reflect);
-		vec3 samppos_world = getPosition(samppos_screen).xyz; 
-		
-		vec3 diff = pos_world - samppos_world;
-		float dist2 = dot(diff, diff);
-		
-		// assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area
-		// --> solid angle shrinking by the square of distance
-		//radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2
-		//(k should vary inversely with # of samples, but this is taken care of later)
-		
-		//if (dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0)  // -0.05*norm to shift sample point back slightly for flat surfaces
-		//	angle_hidden += min(1.0/dist2, ssao_factor_inv); // dist != 0 follows from conditional.  max of 1.0 (= ssao_factor_inv * ssao_factor)
-		angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv);
-		
-		// 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion" 
-		points = points + int(diff.z > -1.0);
-	}
-	
-	angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0);
-	
-	return (1.0 - (float(points != 0) * angle_hidden));
-}
+#extension GL_ARB_texture_rectangle : enable
 
 void main() 
 {
-	vec2 pos_screen = vary_fragcoord.xy;
-	
-	//try doing an unproject here
-	
-	vec4 pos = getPosition(pos_screen);
-	
-    vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0;
-	
-	/*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL
-	{
-		gl_FragColor = vec4(0.0); // doesn't matter
-		return;
-	}*/
-	
-	float shadow = 1.0;
-    float dp_directional_light = max(0.0, dot(norm, vary_light.xyz));
-
-	vec4 spos = vec4(pos.xyz + norm.xyz * (-pos.z/64.0*shadow_offset+shadow_bias), 1.0);
-	
-	//vec3 debug = vec3(0,0,0);
-	
-	if (dp_directional_light == 0.0)
-	{
-		// if we know this point is facing away from the sun then we know it's in shadow without having to do a squirrelly shadow-map lookup
-		shadow = 0.0;
-	}
-	else if (spos.z > -shadow_clip.w)
-	{	
-		vec4 lpos;
-		
-		if (spos.z < -shadow_clip.z)
-		{
-			lpos = shadow_matrix[3]*spos;
-			lpos.xy *= screen_res;
-			shadow = shadow2DRectProj(shadowMap3, lpos).x;
-			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
-		}
-		else if (spos.z < -shadow_clip.y)
-		{
-			lpos = shadow_matrix[2]*spos;
-			lpos.xy *= screen_res;
-			shadow = shadow2DRectProj(shadowMap2, lpos).x;
-		}
-		else if (spos.z < -shadow_clip.x)
-		{
-			lpos = shadow_matrix[1]*spos;
-			lpos.xy *= screen_res;
-			shadow = shadow2DRectProj(shadowMap1, lpos).x;
-		}
-		else
-		{
-			lpos = shadow_matrix[0]*spos;
-			lpos.xy *= screen_res;
-			shadow = shadow2DRectProj(shadowMap0, lpos).x;
-		}
-
-		// take the most-shadowed value out of these two:
-		//  * the blurred sun shadow in the light (shadow) map
-		//  * an unblurred dot product between the sun and this norm
-		// the goal is to err on the side of most-shadow to fill-in shadow holes and reduce artifacting
-		shadow = min(shadow, dp_directional_light);
-		
-		/*debug.r = lpos.y / (lpos.w*screen_res.y);
-		
-		lpos.xy /= lpos.w*32.0;
-		if (fract(lpos.x) < 0.1 || fract(lpos.y) < 0.1)
-		{
-			debug.gb = vec2(0.5, 0.5);
-		}
-		
-		debug += (1.0-shadow)*0.5;*/
-		
-	}
-	else
-	{
-		// more distant than the shadow map covers - just use directional shading as shadow
-		shadow = dp_directional_light;
-	}
-	
-	gl_FragColor[0] = shadow;
-	gl_FragColor[1] = calcAmbientOcclusion(pos, norm);
-	
-	//spotlight shadow 1
-	vec4 lpos = shadow_matrix[4]*spos;
-	lpos.xy *= screen_res;
-	gl_FragColor[2] = shadow2DRectProj(shadowMap4, lpos).x; 
-	
-	//spotlight shadow 2
-	lpos = shadow_matrix[5]*spos;
-	lpos.xy *= screen_res;
-	gl_FragColor[3] = shadow2DRectProj(shadowMap5, lpos).x; 
-
-	//gl_FragColor.rgb = pos.xyz;
-	//gl_FragColor.b = shadow;
-	//gl_FragColor.rgb = debug;
+	gl_FragColor = vec4(0,0,0,0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..cdbed4b7917a529f9dcf73dffd107de53508a917
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
@@ -0,0 +1,124 @@
+/** 
+ * @file sunLightSSAOF.glsl
+ *
+ * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#extension GL_ARB_texture_rectangle : enable
+
+//class 1 -- no shadow, SSAO only
+
+uniform sampler2DRect depthMap;
+uniform sampler2DRect normalMap;
+uniform sampler2D noiseMap;
+
+uniform sampler2D		lightFunc;
+
+
+// Inputs
+uniform mat4 shadow_matrix[6];
+uniform vec4 shadow_clip;
+uniform float ssao_radius;
+uniform float ssao_max_radius;
+uniform float ssao_factor;
+uniform float ssao_factor_inv;
+
+varying vec2 vary_fragcoord;
+varying vec4 vary_light;
+
+uniform mat4 inv_proj;
+uniform vec2 screen_res;
+
+uniform float shadow_bias;
+uniform float shadow_offset;
+
+vec4 getPosition(vec2 pos_screen)
+{
+	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+	vec2 sc = pos_screen.xy*2.0;
+	sc /= screen_res;
+	sc -= vec2(1.0,1.0);
+	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
+	vec4 pos = inv_proj * ndc;
+	pos /= pos.w;
+	pos.w = 1.0;
+	return pos;
+}
+
+//calculate decreases in ambient lighting when crowded out (SSAO)
+float calcAmbientOcclusion(vec4 pos, vec3 norm)
+{
+	float ret = 1.0;
+	
+	float dist = dot(pos.xyz,pos.xyz);
+	
+	if (dist < 64.0*64.0)
+	{
+		vec2 kern[8];
+		// exponentially (^2) distant occlusion samples spread around origin
+		kern[0] = vec2(-1.0, 0.0) * 0.125*0.125;
+		kern[1] = vec2(1.0, 0.0) * 0.250*0.250;
+		kern[2] = vec2(0.0, 1.0) * 0.375*0.375;
+		kern[3] = vec2(0.0, -1.0) * 0.500*0.500;
+		kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625;
+		kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750;
+		kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875;
+		kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000;
+
+		vec2 pos_screen = vary_fragcoord.xy;
+		vec3 pos_world = pos.xyz;
+		vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy;
+		
+		float angle_hidden = 0.0;
+		int points = 0;
+		
+		float scale = min(ssao_radius / -pos_world.z, ssao_max_radius);
+		
+		// it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations (unrolling?)
+		for (int i = 0; i < 8; i++)
+		{
+			vec2 samppos_screen = pos_screen + scale * reflect(kern[i], noise_reflect);
+			vec3 samppos_world = getPosition(samppos_screen).xyz; 
+			
+			vec3 diff = pos_world - samppos_world;
+			float dist2 = dot(diff, diff);
+			
+			// assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area
+			// --> solid angle shrinking by the square of distance
+			//radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2
+			//(k should vary inversely with # of samples, but this is taken care of later)
+			
+			//if (dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0)  // -0.05*norm to shift sample point back slightly for flat surfaces
+			//	angle_hidden += min(1.0/dist2, ssao_factor_inv); // dist != 0 follows from conditional.  max of 1.0 (= ssao_factor_inv * ssao_factor)
+			angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv);
+			
+			// 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion" 
+			points = points + int(diff.z > -1.0);
+		}
+		
+		angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0);
+		
+		ret = (1.0 - (float(points != 0) * angle_hidden));
+		ret += max((dist-32.0*32.0)/(32.0*32.0), 0.0);
+	}
+	
+	return min(ret, 1.0);
+}
+
+void main() 
+{
+	vec2 pos_screen = vary_fragcoord.xy;
+	
+	//try doing an unproject here
+	
+	vec4 pos = getPosition(pos_screen);
+	
+	vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+		
+	gl_FragColor[0] = 1.0;
+	gl_FragColor[1] = calcAmbientOcclusion(pos, norm);
+	gl_FragColor[2] = 1.0; 
+	gl_FragColor[3] = 1.0;
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
index 3cccfb72020b5eb143cf17cd781d05ae27843883..fa0a60c98d913b572c9b65c2f6db6bb3dc797cbb 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
@@ -29,6 +29,7 @@ void main()
 	
 	gl_FragData[0] = vec4(outColor.rgb, 0.0);
 	gl_FragData[1] = vec4(outColor.rgb*0.2, 0.2);
-	gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0);
+	vec3 nvn = normalize(vary_normal);
+	gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
index 258acee08c1decb03f379ed31f3188bad9dbeda8..5b33ea5bfe259d5e1afec2cf1b84118971bf502f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
@@ -14,5 +14,6 @@ void main()
 	vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy);
 	gl_FragData[0] = vec4(gl_Color.rgb*col.rgb, col.a <= 0.5 ? 0.0 : 0.005);
 	gl_FragData[1] = vec4(0,0,0,0);
-	gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0);
+	vec3 nvn = normalize(vary_normal);
+	gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index d21575119ddab856fbd254de66ed0ceaca449672..361ae8dc843ec61724d27fa34eca92123ae29377 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -115,7 +115,7 @@ void main()
 	vec4 fb = texture2D(screenTex, distort2);
 	
 	//mix with reflection
-	// Note we actually want to use just df1, but multiplying by 0.999999 gets around and nvidia compiler bug
+	// Note we actually want to use just df1, but multiplying by 0.999999 gets around an nvidia compiler bug
 	color.rgb = mix(fb.rgb, refcol.rgb, df1 * 0.99999);
 	
 	float shadow = 1.0;
@@ -131,11 +131,11 @@ void main()
 	//color.rgb = scaleSoftClip(color.rgb);
 	//color.a = spec * sunAngle2;
 
-	//wavef.z = -0.25f;
-	wavef = normalize(wavef);
-	wavef = (norm_mat*vec4(wavef, 1.0)).xyz;
+	//wavef.z *= 0.1f;
+	//wavef = normalize(wavef);
+	vec3 screenspacewavef = (norm_mat*vec4(wavef, 1.0)).xyz;
 	
-	gl_FragData[0] = vec4(color.rgb, 0.75);
-	gl_FragData[1] = vec4(1,1,1, 0.8);
-	gl_FragData[2] = vec4(wavef*0.5+0.5, 0.0);
+	gl_FragData[0] = vec4(color.rgb, 0.5); // diffuse
+	gl_FragData[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
+	gl_FragData[2] = vec4(screenspacewavef.xy*0.5+0.5, screenspacewavef.z, screenspacewavef.z*0.5); // normalxyz, displace
 }
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl
index 3e8fdfb3e48e3235502d2665f9bed5552886b859..da49e59b89ec82f2e3876a34b61c901c548df48f 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl
@@ -12,7 +12,8 @@ float calcDirectionalLight(vec3 n, vec3 l)
 	return a;
 }
 
-float calcPointLight(vec3 v, vec3 n, vec4 lp, float la)
+
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight)
 {
 	//get light vector
 	vec3 lv = lp.xyz-v;
@@ -26,9 +27,13 @@ float calcPointLight(vec3 v, vec3 n, vec4 lp, float la)
 	//distance attenuation
 	float da = clamp(1.0/(la * d), 0.0, 1.0);
 	
+	// spotlight coefficient.
+	float spot = max(dot(-ln, lv), is_pointlight);
+	da *= spot*spot; // GL_SPOT_EXPONENT=2
+
 	//angular attenuation
 	da *= calcDirectionalLight(n, lv);
-	
+
 	return da;	
 }
 
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
index ad16de6d8160a7e34589fc82bec521af550f70c1..665fe16b4392f0b95ff72c0d7f7fc72c10cc7b6f 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
@@ -29,8 +29,6 @@ varying vec3 vary_fragcoord;
 varying vec3 vary_position;
 varying vec3 vary_light;
 
-uniform float alpha_soften;
-
 uniform float shadow_bias;
 
 uniform mat4 inv_proj;
@@ -115,15 +113,6 @@ void main()
 
 	color.rgb = scaleSoftClip(color.rgb);
 
-	if (samp_pos.z != 0.0 && gl_Color.a < 1.0)
-	{
-		float dist_factor = alpha_soften;
-		float a = gl_Color.a;
-		a *= a;
-		dist_factor *= 1.0/(1.0-a);
-		color.a *= min((pos.z-samp_pos.z)*dist_factor, 1.0);
-	}
-	
 	//gl_FragColor = gl_Color;
 	gl_FragColor = color;
 	//gl_FragColor = vec4(1,0,1,1)*shadow;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
index 5991e1f3b5eae3fd2b9d77079e2fe4849ad63e89..1fae8c4da3849a314452d10f6473dc22d569fcf9 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
@@ -9,7 +9,7 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
 void calcAtmospherics(vec3 inPositionEye);
 
 float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLight(vec3 v, vec3 n, vec4 lp, float la);
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
 
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
@@ -42,23 +42,21 @@ void main()
 	calcAtmospherics(pos.xyz);
 
 	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.));
-	vec4 col;
-	col.a = gl_Color.a;
-	
-	// Add windlight lights
-	col.rgb = atmosAmbient(vec3(0.));
-	col.rgb = scaleUpLight(col.rgb);
+	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a);
 
 	// Collect normal lights (need to be divided by two, as we later multiply by 2)
-	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation);
-	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation);
-	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation);
-	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].linearAttenuation);
- 	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].linearAttenuation);
- 	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].linearAttenuation);
+	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a);
+	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a);
+	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a);
+	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a);
+	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a);
+	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a);
 	col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz);
 	col.rgb = scaleDownLight(col.rgb);
 	
+	// Add windlight lights
+	col.rgb += atmosAmbient(vec3(0.));
+	
 	vary_light = gl_LightSource[0].position.xyz;
 	
 	vary_ambient = col.rgb*gl_Color.rgb;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
index a939499b1710a48337c8793a1ca5ef6ec00083df..f8dd1b74314003ab218ccb6be1aa7a3bb730d4c4 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
@@ -10,7 +10,7 @@ mat4 getSkinnedTransform();
 void calcAtmospherics(vec3 inPositionEye);
 
 float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLight(vec3 v, vec3 n, vec4 lp, float la);
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
 
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
@@ -53,23 +53,22 @@ void main()
 	calcAtmospherics(pos.xyz);
 
 	//vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.));
-	vec4 col;
-	col.a = gl_Color.a;
-	
-	// Add windlight lights
-	col.rgb = atmosAmbient(vec3(0.));
-	col.rgb = scaleUpLight(col.rgb);
+
+	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a);
 
 	// Collect normal lights (need to be divided by two, as we later multiply by 2)
-	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation);
-	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation);
-	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation);
-	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].linearAttenuation);
- 	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].linearAttenuation);
- 	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].linearAttenuation);
+	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a);
+	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a);
+	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a);
+	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a);
+	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a);
+	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a);
 	col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz);
 	col.rgb = scaleDownLight(col.rgb);
 	
+	// Add windlight lights
+	col.rgb += atmosAmbient(vec3(0.));
+	
 	vary_ambient = col.rgb*gl_Color.rgb;
 	vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a)));
 	
diff --git a/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl
index 0fad5b4b50be87187b9e320cd1aee3aa28e61db2..d1c5d7cb195b4b19876c6ae4f100a3105ca1c440 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl
@@ -37,7 +37,8 @@ vec4 getPosition(vec2 pos_screen)
 
 void main() 
 {
-	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	vec3 pos = getPosition(vary_fragcoord.xy).xyz;
 	vec4 ccol = texture2DRect(lightMap, vary_fragcoord.xy).rgba;
 	
diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl
index 02beddd43b35dba58858633821dd536b08ac1185..e32e9f4b32678051020c31f853c1e7422d10ec16 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl
@@ -31,7 +31,8 @@ float getDepth(vec2 pos_screen)
 
 void main() 
 {
-	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	float depth = getDepth(vary_fragcoord.xy);
 	
 	vec2 tc = vary_fragcoord.xy;
@@ -46,8 +47,12 @@ void main()
 	de = step(depth_cutoff, de);
 	
 	vec2 ne;
-	ne.x = dot(texture2DRect(normalMap, tc+vec2(-sc,-sc)).rgb*2.0-1.0, norm);
-	ne.y = dot(texture2DRect(normalMap, tc+vec2(sc,sc)).rgb*2.0-1.0, norm);
+	vec3 nexnorm = texture2DRect(normalMap, tc+vec2(-sc,-sc)).rgb;
+	nexnorm = vec3((nexnorm.xy-0.5)*2.0,nexnorm.z); // unpack norm
+	ne.x = dot(nexnorm, norm);
+	vec3 neynorm = texture2DRect(normalMap, tc+vec2(sc,sc)).rgb;
+	neynorm = vec3((neynorm.xy-0.5)*2.0,neynorm.z); // unpack norm
+	ne.y = dot(neynorm, norm);
 	
 	ne = 1.0-ne;
 	
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index 651959413cd06cad296bf3dfd2a4e3a89babe51e..22ffb58c635e2c7d37d4649d10b9271cb5998d6c 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -43,6 +43,52 @@ uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
+vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
+{
+	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	
+	vec2 dist = tc-vec2(0.5);
+	
+	float det = max(1.0-lod/(proj_lod*0.5), 0.0);
+	
+	float d = dot(dist,dist);
+		
+	ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0)+det, 1.0);
+	
+	return ret;
+}
+
+vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
+{
+	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	
+	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
+	
+	float det = min(lod/(proj_lod*0.5), 1.0);
+	
+	float d = min(dist.x, dist.y);
+	
+	float edge = 0.25*det;
+		
+	ret *= clamp(d/edge, 0.0, 1.0);
+	
+	return ret;
+}
+
+vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
+{
+	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	
+	vec2 dist = tc-vec2(0.5);
+	
+	float d = dot(dist,dist);
+		
+	ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0);
+	
+	return ret;
+}
+
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).a;
@@ -83,7 +129,8 @@ void main()
 		shadow = min(sh[proj_shadow_idx]+shadow_fade, 1.0);
 	}
 	
-	vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
@@ -126,7 +173,7 @@ void main()
 			float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0);
 			float lod = diff * proj_lod;
 			
-			vec4 plcol = texture2DLod(projectionMap, proj_tc.xy, lod);
+			vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod);
 		
 			vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a;
 			
@@ -137,7 +184,7 @@ void main()
 		}
 		
 		//float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0);
-		vec4 amb_plcol = texture2DLod(projectionMap, proj_tc.xy, proj_ambient_lod);
+		vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod);
 							
 		amb_da += (da*da*0.5+0.5)*proj_ambiance;
 				
@@ -167,22 +214,23 @@ void main()
 			if (stc.z > 0.0)
 			{
 				stc.xy /= stc.w;
-					
+
+				float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0);
+				
+				stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
+								
 				if (stc.x < 1.0 &&
 					stc.y < 1.0 &&
 					stc.x > 0.0 &&
 					stc.y > 0.0)
 				{
-					vec4 scol = texture2DLod(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
+					vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
 					col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb*shadow;
 				}
 			}
 		}
 	}
 	
-	//attenuate point light contribution by SSAO component
-	col *= texture2DRect(lightMap, frag.xy).g;
-	
 	gl_FragColor.rgb = col;	
 	gl_FragColor.a = 0.0;
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index 531f7376a37b2142323eb3a774d15538a848fae6..fd6ae2b96083ee8bc412f877f2b9779646771bb8 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -11,6 +11,7 @@ uniform sampler2DRect diffuseRect;
 uniform sampler2DRect specularRect;
 uniform sampler2DRect normalMap;
 uniform sampler2DRect lightMap;
+uniform sampler2DRect depthMap;
 uniform sampler2D	  noiseMap;
 uniform samplerCube environmentMap;
 uniform sampler2D	  lightFunc;
@@ -41,7 +42,6 @@ uniform vec3 env_mat[3];
 uniform vec4 shadow_clip;
 uniform mat3 ssao_effect_mat;
 
-uniform sampler2DRect depthMap;
 uniform mat4 inv_proj;
 uniform vec2 screen_res;
 
@@ -55,9 +55,8 @@ vec3 vary_AmblitColor;
 vec3 vary_AdditiveColor;
 vec3 vary_AtmosAttenuation;
 
-vec4 getPosition(vec2 pos_screen)
-{ //get position in screen space (world units) given window coordinate and depth map
-	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+vec4 getPosition_d(vec2 pos_screen, float depth)
+{
 	vec2 sc = pos_screen.xy*2.0;
 	sc /= screen_res;
 	sc -= vec2(1.0,1.0);
@@ -68,6 +67,12 @@ vec4 getPosition(vec2 pos_screen)
 	return pos;
 }
 
+vec4 getPosition(vec2 pos_screen)
+{ //get position in screen space (world units) given window coordinate and depth map
+	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+	return getPosition_d(pos_screen, depth);
+}
+
 vec3 getPositionEye()
 {
 	return vary_PositionEye;
@@ -251,8 +256,10 @@ vec3 scaleSoftClip(vec3 light)
 void main() 
 {
 	vec2 tc = vary_fragcoord.xy;
-	vec3 pos = getPosition(tc).xyz;
-	vec3 norm = texture2DRect(normalMap, tc).xyz*2.0-1.0;
+	float depth = texture2DRect(depthMap, tc.xy).a;
+	vec3 pos = getPosition_d(tc, depth).xyz;
+	vec3 norm = texture2DRect(normalMap, tc).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	//vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz;
 	
 	float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
@@ -271,24 +278,67 @@ void main()
 	
 	col *= diffuse.rgb;
 	
-	if (spec.a > 0.0)
+	if (spec.a > 0.0) // specular reflection
 	{
-		vec3 ref = normalize(reflect(pos.xyz, norm.xyz));
-		float sa = dot(ref, vary_light.xyz);
-		col.rgb += vary_SunlitColor*scol*spec.rgb*texture2D(lightFunc, vec2(sa, spec.a)).a;
+		// the old infinite-sky shiny reflection
+		//
+		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+		float sa = dot(refnormpersp, vary_light.xyz);
+		vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+		/*
+		// screen-space cheap fakey reflection map
+		//
+		vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz));
+		depth -= 0.5; // unbias depth
+		// first figure out where we'll make our 2D guess from
+		vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth;
+		// Offset the guess source a little according to a trivial
+		// checkerboard dither function and spec.a.
+		// This is meant to be similar to sampling a blurred version
+		// of the diffuse map.  LOD would be better in that regard.
+		// The goal of the blur is to soften reflections in surfaces
+		// with low shinyness, and also to disguise our lameness.
+		float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0
+		float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5);
+		ref2d += vec2(checkoffset, checkoffset);
+		ref2d += tc.xy; // use as offset from destination
+		// Get attributes from the 2D guess point.
+		// We average two samples of diffuse (not of anything else) per
+		// pixel to try to reduce aliasing some more.
+		vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb +
+				     texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb);
+		float refdepth = texture2DRect(depthMap, ref2d).a;
+		vec3 refpos = getPosition_d(ref2d, refdepth).xyz;
+		float refshad = texture2DRect(lightMap, ref2d).r;
+		vec3 refn = texture2DRect(normalMap, ref2d).rgb;
+		refn = vec3((refn.xy-0.5)*2.0,refn.z); // unpack norm
+		refn = normalize(refn);
+		// figure out how appropriate our guess actually was
+		float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos)));
+		// darken reflections from points which face away from the reflected ray - our guess was a back-face
+		//refapprop *= step(dot(refnorm, refn), 0.0);
+		refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant
+		// get appropriate light strength for guess-point
+		// reflect light direction to increase the illusion that
+		// these are reflections.
+		vec3 reflight = reflect(lightnorm.xyz, norm.xyz);
+		float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad);
+		// apply sun color to guess-point, dampen according to inappropriateness of guess
+		float refmod = min(refapprop, reflit);
+		vec3 refprod = vary_SunlitColor * refcol.rgb * refmod;
+		vec3 ssshiny = (refprod * spec.a);
+		ssshiny *= 0.3; // dampen it even more
+		*/
+		vec3 ssshiny = vec3(0,0,0);
+
+		// add the two types of shiny together
+		col += (ssshiny + dumbshiny) * spec.rgb;
 	}
 	
 	col = atmosLighting(col);
 	col = scaleSoftClip(col);
 		
 	gl_FragColor.rgb = col;
-	
-	//gl_FragColor.rgb = gi_col.rgb;
 	gl_FragColor.a = 0.0;
-	
-	//gl_FragColor.rg = scol_ambocc.rg;
-	//gl_FragColor.rgb = texture2DRect(lightMap, vary_fragcoord.xy).rgb;
-	//gl_FragColor.rgb = norm.rgb*0.5+0.5;
-	//gl_FragColor.rgb = vec3(ambocc);
-	//gl_FragColor.rgb = vec3(scol);
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index d6534083cfe220affb92736c0a6ef4b42de91712..8a90199b7caf1e6b450d911d71420fa13f9ca16c 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -82,7 +82,8 @@ void main()
 		discard;
 	}
 	
-	vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
@@ -179,21 +180,6 @@ void main()
 		}
 	}
 	
-	/*if (spec.a > 0.0)
-	{
-		//vec3 ref = reflect(normalize(pos), norm);
-		float sa = dot(normalize(lv-normalize(pos)),norm);;
-		//sa = max(sa, 0.0);
-		//sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0);
-		sa = texture2D(lightFunc, vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0);
-		sa *= noise;
-		col += da*sa*lcol*spec.rgb;
-	}*/
-	
-	//attenuate point light contribution by SSAO component
-	col *= texture2DRect(lightMap, frag.xy).g;
-	
-
 	gl_FragColor.rgb = col;	
 	gl_FragColor.a = 0.0;
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index a0026edcd2186c76264351f698cad8a60371bf46..7423347346bd8a3f56ce0fdb4003fa16d2f14630 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -7,6 +7,8 @@
 
 #extension GL_ARB_texture_rectangle : enable
 
+//class 2, shadows, no SSAO
+
 uniform sampler2DRect depthMap;
 uniform sampler2DRect normalMap;
 uniform sampler2DRectShadow shadowMap0;
@@ -39,6 +41,9 @@ uniform vec2 proj_shadow_res;
 uniform float shadow_bias;
 uniform float shadow_offset;
 
+uniform float spot_shadow_bias;
+uniform float spot_shadow_offset;
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).a;
@@ -52,56 +57,6 @@ vec4 getPosition(vec2 pos_screen)
 	return pos;
 }
 
-//calculate decreases in ambient lighting when crowded out (SSAO)
-float calcAmbientOcclusion(vec4 pos, vec3 norm)
-{
-	vec2 kern[8];
-	// exponentially (^2) distant occlusion samples spread around origin
-	kern[0] = vec2(-1.0, 0.0) * 0.125*0.125;
-	kern[1] = vec2(1.0, 0.0) * 0.250*0.250;
-	kern[2] = vec2(0.0, 1.0) * 0.375*0.375;
-	kern[3] = vec2(0.0, -1.0) * 0.500*0.500;
-	kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625;
-	kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750;
-	kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875;
-	kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000;
-
-	vec2 pos_screen = vary_fragcoord.xy;
-	vec3 pos_world = pos.xyz;
-	vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy;
-	
-	float angle_hidden = 0.0;
-	int points = 0;
-	
-	float scale = min(ssao_radius / -pos_world.z, ssao_max_radius);
-	
-	// it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations (unrolling?)
-	for (int i = 0; i < 8; i++)
-	{
-		vec2 samppos_screen = pos_screen + scale * reflect(kern[i], noise_reflect);
-		vec3 samppos_world = getPosition(samppos_screen).xyz; 
-		
-		vec3 diff = pos_world - samppos_world;
-		float dist2 = dot(diff, diff);
-		
-		// assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area
-		// --> solid angle shrinking by the square of distance
-		//radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2
-		//(k should vary inversely with # of samples, but this is taken care of later)
-		
-		//if (dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0)  // -0.05*norm to shift sample point back slightly for flat surfaces
-		//	angle_hidden += min(1.0/dist2, ssao_factor_inv); // dist != 0 follows from conditional.  max of 1.0 (= ssao_factor_inv * ssao_factor)
-		angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv);
-		
-		// 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion" 
-		points = points + int(diff.z > -1.0);
-	}
-	
-	angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0);
-	
-	return (1.0 - (float(points != 0) * angle_hidden));
-}
-
 float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl)
 {
 	stc.xyz /= stc.w;
@@ -123,7 +78,7 @@ float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl)
 float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl)
 {
 	stc.xyz /= stc.w;
-	stc.z += shadow_bias*scl;
+	stc.z += spot_shadow_bias*scl;
 	
 	float cs = shadow2D(shadowMap, stc.xyz).x;
 	float shadow = cs;
@@ -134,8 +89,7 @@ float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl)
 	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs);
 	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs);
 	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs);
-	
-			
+				
 	return shadow/5.0;
 	
 	//return shadow;
@@ -149,7 +103,10 @@ void main()
 	
 	vec4 pos = getPosition(pos_screen);
 	
-    vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0;
+	vec4 nmap4 = texture2DRect(normalMap, pos_screen);
+	nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
+	float displace = nmap4.w;
+	vec3 norm = nmap4.xyz;
 	
 	/*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL
 	{
@@ -158,9 +115,12 @@ void main()
 	}*/
 	
 	float shadow = 1.0;
-    float dp_directional_light = max(0.0, dot(norm, vary_light.xyz));
+	float dp_directional_light = max(0.0, dot(norm, vary_light.xyz));
 
-	vec4 spos = vec4(pos.xyz + vary_light.xyz * (1.0-dp_directional_light)*shadow_offset, 1.0);
+	vec3 shadow_pos = pos.xyz + displace*norm;
+	vec3 offset = vary_light.xyz * (1.0-dp_directional_light);
+	
+	vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0);
 	
 	if (spos.z > -shadow_clip.w)
 	{	
@@ -220,15 +180,17 @@ void main()
 	}
 	
 	gl_FragColor[0] = shadow;
-	gl_FragColor[1] = calcAmbientOcclusion(pos, norm);
+	gl_FragColor[1] = 1.0;
+	
+	spos = vec4(shadow_pos+norm*spot_shadow_offset, 1.0);
 	
 	//spotlight shadow 1
 	vec4 lpos = shadow_matrix[4]*spos;
-	gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.1).x; 
+	gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8); 
 	
 	//spotlight shadow 2
 	lpos = shadow_matrix[5]*spos;
-	gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.1).x; 
+	gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8); 
 
 	//gl_FragColor.rgb = pos.xyz;
 	//gl_FragColor.b = shadow;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..4e33a1af450b84a12097dd54695c69da4bfa6128
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -0,0 +1,257 @@
+/** 
+ * @file sunLightSSAOF.glsl
+ *
+ * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#extension GL_ARB_texture_rectangle : enable
+
+//class 2 -- shadows and SSAO
+
+uniform sampler2DRect depthMap;
+uniform sampler2DRect normalMap;
+uniform sampler2DRectShadow shadowMap0;
+uniform sampler2DRectShadow shadowMap1;
+uniform sampler2DRectShadow shadowMap2;
+uniform sampler2DRectShadow shadowMap3;
+uniform sampler2DShadow shadowMap4;
+uniform sampler2DShadow shadowMap5;
+uniform sampler2D noiseMap;
+
+uniform sampler2D		lightFunc;
+
+// Inputs
+uniform mat4 shadow_matrix[6];
+uniform vec4 shadow_clip;
+uniform float ssao_radius;
+uniform float ssao_max_radius;
+uniform float ssao_factor;
+uniform float ssao_factor_inv;
+
+varying vec2 vary_fragcoord;
+varying vec4 vary_light;
+
+uniform mat4 inv_proj;
+uniform vec2 screen_res;
+uniform vec2 shadow_res;
+uniform vec2 proj_shadow_res;
+
+uniform float shadow_bias;
+uniform float shadow_offset;
+
+uniform float spot_shadow_bias;
+uniform float spot_shadow_offset;
+
+vec4 getPosition(vec2 pos_screen)
+{
+	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+	vec2 sc = pos_screen.xy*2.0;
+	sc /= screen_res;
+	sc -= vec2(1.0,1.0);
+	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
+	vec4 pos = inv_proj * ndc;
+	pos /= pos.w;
+	pos.w = 1.0;
+	return pos;
+}
+
+//calculate decreases in ambient lighting when crowded out (SSAO)
+float calcAmbientOcclusion(vec4 pos, vec3 norm)
+{
+	float ret = 1.0;
+	
+	float dist = dot(pos.xyz,pos.xyz);
+	
+	if (dist < 64.0*64.0)
+	{
+		vec2 kern[8];
+		// exponentially (^2) distant occlusion samples spread around origin
+		kern[0] = vec2(-1.0, 0.0) * 0.125*0.125;
+		kern[1] = vec2(1.0, 0.0) * 0.250*0.250;
+		kern[2] = vec2(0.0, 1.0) * 0.375*0.375;
+		kern[3] = vec2(0.0, -1.0) * 0.500*0.500;
+		kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625;
+		kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750;
+		kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875;
+		kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000;
+
+		vec2 pos_screen = vary_fragcoord.xy;
+		vec3 pos_world = pos.xyz;
+		vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy;
+		
+		float angle_hidden = 0.0;
+		int points = 0;
+		
+		float scale = min(ssao_radius / -pos_world.z, ssao_max_radius);
+		
+		// it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations (unrolling?)
+		for (int i = 0; i < 8; i++)
+		{
+			vec2 samppos_screen = pos_screen + scale * reflect(kern[i], noise_reflect);
+			vec3 samppos_world = getPosition(samppos_screen).xyz; 
+			
+			vec3 diff = pos_world - samppos_world;
+			float dist2 = dot(diff, diff);
+			
+			// assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area
+			// --> solid angle shrinking by the square of distance
+			//radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2
+			//(k should vary inversely with # of samples, but this is taken care of later)
+			
+			//if (dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0)  // -0.05*norm to shift sample point back slightly for flat surfaces
+			//	angle_hidden += min(1.0/dist2, ssao_factor_inv); // dist != 0 follows from conditional.  max of 1.0 (= ssao_factor_inv * ssao_factor)
+			angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv);
+			
+			// 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion" 
+			points = points + int(diff.z > -1.0);
+		}
+		
+		angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0);
+		
+		ret = (1.0 - (float(points != 0) * angle_hidden));
+		ret += max((dist-32.0*32.0)/(32.0*32.0), 0.0);
+	}
+	
+	return min(ret, 1.0);
+}
+
+float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl)
+{
+	stc.xyz /= stc.w;
+	stc.z += shadow_bias*scl;
+	
+	float cs = shadow2DRect(shadowMap, stc.xyz).x;
+	float shadow = cs;
+
+	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, 1.5, 0.0)).x, cs);
+	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, -1.5, 0.0)).x, cs);
+	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, 1.5, 0.0)).x, cs);
+	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, -1.5, 0.0)).x, cs);
+			
+	return shadow/5.0;
+	
+	//return shadow;
+}
+
+float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl)
+{
+	stc.xyz /= stc.w;
+	stc.z += spot_shadow_bias*scl;
+	
+	float cs = shadow2D(shadowMap, stc.xyz).x;
+	float shadow = cs;
+
+	vec2 off = 1.5/proj_shadow_res;
+	
+	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs);
+	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs);
+	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs);
+	shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs);
+	
+			
+	return shadow/5.0;
+	
+	//return shadow;
+}
+
+void main() 
+{
+	vec2 pos_screen = vary_fragcoord.xy;
+	
+	//try doing an unproject here
+	
+	vec4 pos = getPosition(pos_screen);
+	
+	vec4 nmap4 = texture2DRect(normalMap, pos_screen);
+	nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
+	float displace = nmap4.w;
+	vec3 norm = nmap4.xyz;
+	
+	/*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL
+	{
+		gl_FragColor = vec4(0.0); // doesn't matter
+		return;
+	}*/
+	
+	float shadow = 1.0;
+	float dp_directional_light = max(0.0, dot(norm, vary_light.xyz));
+
+	vec3 shadow_pos = pos.xyz + displace*norm;
+	vec3 offset = vary_light.xyz * (1.0-dp_directional_light);
+	
+	vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0);
+	
+	if (spos.z > -shadow_clip.w)
+	{	
+		if (dp_directional_light == 0.0)
+		{
+			// if we know this point is facing away from the sun then we know it's in shadow without having to do a squirrelly shadow-map lookup
+			shadow = 0.0;
+		}
+		else
+		{
+			vec4 lpos;
+			
+			if (spos.z < -shadow_clip.z)
+			{
+				lpos = shadow_matrix[3]*spos;
+				lpos.xy *= shadow_res;
+				shadow = pcfShadow(shadowMap3, lpos, 0.25);
+				shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
+			}
+			else if (spos.z < -shadow_clip.y)
+			{
+				lpos = shadow_matrix[2]*spos;
+				lpos.xy *= shadow_res;
+				shadow = pcfShadow(shadowMap2, lpos, 0.5);
+			}
+			else if (spos.z < -shadow_clip.x)
+			{
+				lpos = shadow_matrix[1]*spos;
+				lpos.xy *= shadow_res;
+				shadow = pcfShadow(shadowMap1, lpos, 0.75);
+			}
+			else
+			{
+				lpos = shadow_matrix[0]*spos;
+				lpos.xy *= shadow_res;
+				shadow = pcfShadow(shadowMap0, lpos, 1.0);
+			}
+		
+			// take the most-shadowed value out of these two:
+			//  * the blurred sun shadow in the light (shadow) map
+			//  * an unblurred dot product between the sun and this norm
+			// the goal is to err on the side of most-shadow to fill-in shadow holes and reduce artifacting
+			shadow = min(shadow, dp_directional_light);
+			
+			//lpos.xy /= lpos.w*32.0;
+			//if (fract(lpos.x) < 0.1 || fract(lpos.y) < 0.1)
+			//{
+			//	shadow = 0.0;
+			//}
+			
+		}
+	}
+	else
+	{
+		// more distant than the shadow map covers
+		shadow = 1.0;
+	}
+	
+	gl_FragColor[0] = shadow;
+	gl_FragColor[1] = calcAmbientOcclusion(pos, norm);
+	
+	spos.xyz = shadow_pos+offset*spot_shadow_offset;
+	
+	//spotlight shadow 1
+	vec4 lpos = shadow_matrix[4]*spos;
+	gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8); 
+	
+	//spotlight shadow 2
+	lpos = shadow_matrix[5]*spos;
+	gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8); 
+
+	//gl_FragColor.rgb = pos.xyz;
+	//gl_FragColor.b = shadow;
+}
diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
index f4c59734a47c2773957b5ec594929bb6918e88f6..19800d96dc6321e7f5837bcb80e5af1fcdcb8822 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
@@ -6,7 +6,7 @@
  */
 
 float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLight(vec3 v, vec3 n, vec4 lp, float la);
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
 
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
@@ -18,9 +18,10 @@ vec4 sumLights(vec3 pos, vec3 norm, vec4 color, vec4 baseLight)
 	
 	// Collect normal lights (need to be divided by two, as we later multiply by 2)
 	col.rgb += gl_LightSource[1].diffuse.rgb * calcDirectionalLight(norm, gl_LightSource[1].position.xyz);
-	col.rgb += gl_LightSource[2].diffuse.rgb * calcPointLight(pos, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation);
-	col.rgb += gl_LightSource[3].diffuse.rgb * calcPointLight(pos, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation);
-	//col.rgb += gl_LightSource[4].diffuse.rgb * calcPointLight(pos, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation);
+
+	col.rgb += gl_LightSource[2].diffuse.rgb * calcPointLightOrSpotLight(pos, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a);
+	col.rgb += gl_LightSource[3].diffuse.rgb * calcPointLightOrSpotLight(pos, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a);
+	//col.rgb += gl_LightSource[4].diffuse.rgb * calcPointLightOrSpotLight(pos, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a);
 	col.rgb = scaleDownLight(col.rgb);
 
 	// Add windlight lights
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl
index 7325825d6d4e21c7b07cfefd0fbc840000dd84f7..66606233cdf8171763456ca2db7adee7aae37a41 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl
@@ -44,7 +44,8 @@ float getDepth(vec2 pos_screen)
 
 void main() 
 {
-	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	float depth = getDepth(vary_fragcoord.xy);
 		
 	vec3 ccol = texture2DRect(giLightMap, vary_fragcoord.xy).rgb;
@@ -56,9 +57,10 @@ void main()
 	for (int i = 0; i < kern_length; i++)
 	{
 		vec2 tc = vary_fragcoord.xy + kern[i].y*dlt;
-	    vec3 sampNorm = texture2DRect(normalMap, tc.xy).xyz*2.0-1.0;
-	    
-	   float d = dot(norm.xyz, sampNorm);
+		vec3 sampNorm = texture2DRect(normalMap, tc.xy).xyz;
+		sampNorm = vec3((sampNorm.xy-0.5)*2.0,sampNorm.z); // unpack norm
+		
+		float d = dot(norm.xyz, sampNorm);
 		
 		if (d > 0.5)
 		{
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl
index 939710cb56303208c8123a2499385573cfb06d0e..1b8354dbd10b503b675a8b71668114882eda8001 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl
@@ -178,7 +178,8 @@ void main()
 	
 	float rad = gi_range*0.5;
 	
-	vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0;
+	vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	float dist = max(length(pos.xyz)-rad, 0.0);
 	
 	float da = clamp(1.0-dist/rad, 0.0, 1.0);
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
index 96a083b52216947b72f53b67522fb86554de6b46..c88edd0a60b11c0d5219b643f88d898a30e13039 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
@@ -56,9 +56,8 @@ vec3 vary_AdditiveColor;
 vec3 vary_AtmosAttenuation;
 uniform float gi_ambiance;
 
-vec4 getPosition(vec2 pos_screen)
-{ //get position in screen space (world units) given window coordinate and depth map
-	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+vec4 getPosition_d(vec2 pos_screen, float depth)
+{
 	vec2 sc = pos_screen.xy*2.0;
 	sc /= screen_res;
 	sc -= vec2(1.0,1.0);
@@ -69,6 +68,12 @@ vec4 getPosition(vec2 pos_screen)
 	return pos;
 }
 
+vec4 getPosition(vec2 pos_screen)
+{ //get position in screen space (world units) given window coordinate and depth map
+	float depth = texture2DRect(depthMap, pos_screen.xy).a;
+	return getPosition_d(pos_screen, depth);
+}
+
 vec3 getPositionEye()
 {
 	return vary_PositionEye;
@@ -252,8 +257,10 @@ vec3 scaleSoftClip(vec3 light)
 void main() 
 {
 	vec2 tc = vary_fragcoord.xy;
-	vec3 pos = getPosition(tc).xyz;
-	vec3 norm = texture2DRect(normalMap, tc).xyz*2.0-1.0;
+	float depth = texture2DRect(depthMap, tc.xy).a;
+	vec3 pos = getPosition_d(tc, depth).xyz;
+	vec3 norm = texture2DRect(normalMap, tc).xyz;
+	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
 	//vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz;
 	
 	float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
@@ -274,11 +281,63 @@ void main()
 	
 	col *= diffuse.rgb;
 	
-	if (spec.a > 0.0)
+	if (spec.a > 0.0) // specular reflection
 	{
-		vec3 ref = normalize(reflect(pos.xyz, norm.xyz));
-		float sa = dot(ref, vary_light.xyz);
-		col.rgb += vary_SunlitColor*scol*spec.rgb*texture2D(lightFunc, vec2(sa, spec.a)).a;
+		// the old infinite-sky shiny reflection
+		//
+		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+		float sa = dot(refnormpersp, vary_light.xyz);
+		vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+		/*
+		// screen-space cheap fakey reflection map
+		//
+		vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz));
+		depth -= 0.5; // unbias depth
+		// first figure out where we'll make our 2D guess from
+		vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth;
+		// Offset the guess source a little according to a trivial
+		// checkerboard dither function and spec.a.
+		// This is meant to be similar to sampling a blurred version
+		// of the diffuse map.  LOD would be better in that regard.
+		// The goal of the blur is to soften reflections in surfaces
+		// with low shinyness, and also to disguise our lameness.
+		float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0
+		float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5);
+
+		ref2d += vec2(checkoffset, checkoffset);
+		ref2d += tc.xy; // use as offset from destination
+		// Get attributes from the 2D guess point.
+		// We average two samples of diffuse (not of anything else) per
+		// pixel to try to reduce aliasing some more.
+		vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb +
+				     texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb);
+		float refdepth = texture2DRect(depthMap, ref2d).a;
+		vec3 refpos = getPosition_d(ref2d, refdepth).xyz;
+		float refshad = texture2DRect(lightMap, ref2d).r;
+		vec3 refn = texture2DRect(normalMap, ref2d).rgb;
+		refn = vec3((refn.xy-0.5)*2.0,refn.z); // unpack norm
+		refn = normalize(refn);
+		// figure out how appropriate our guess actually was
+		float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos)));
+		// darken reflections from points which face away from the reflected ray - our guess was a back-face
+		//refapprop *= step(dot(refnorm, refn), 0.0);
+		refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant
+		// get appropriate light strength for guess-point.
+		// reflect light direction to increase the illusion that
+		// these are reflections.
+		vec3 reflight = reflect(lightnorm.xyz, norm.xyz);
+		float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad);
+		// apply sun color to guess-point, dampen according to inappropriateness of guess
+		float refmod = min(refapprop, reflit);
+		vec3 refprod = vary_SunlitColor * refcol.rgb * refmod;
+		vec3 ssshiny = (refprod * spec.a);
+		ssshiny *= 0.3; // dampen it even more
+		*/
+		vec3 ssshiny = vec3(0,0,0);
+
+		// add the two types of shiny together
+		col += (ssshiny + dumbshiny) * spec.rgb;
 	}
 	
 	col = atmosLighting(col);
diff --git a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl
index 258acee08c1decb03f379ed31f3188bad9dbeda8..5b33ea5bfe259d5e1afec2cf1b84118971bf502f 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl
@@ -14,5 +14,6 @@ void main()
 	vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy);
 	gl_FragData[0] = vec4(gl_Color.rgb*col.rgb, col.a <= 0.5 ? 0.0 : 0.005);
 	gl_FragData[1] = vec4(0,0,0,0);
-	gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0);
+	vec3 nvn = normalize(vary_normal);
+	gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl
index 1c5234c4502514cc941a91e8821647c082195d7f..f129a1517b3eb8437353f4b24723ee530e56e791 100644
--- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl
+++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl
@@ -6,7 +6,7 @@
  */
 
 float calcDirectionalLight(vec3 n, vec3 l);
-float calcPointLight(vec3 v, vec3 n, vec4 lp, float la);
+float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
 
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
@@ -15,24 +15,21 @@ vec3 scaleUpLight(vec3 light);
 
 vec4 sumLights(vec3 pos, vec3 norm, vec4 color, vec4 baseLight)
 {
-	vec4 col;
-	col.a = color.a;
+	vec4 col = vec4(0.0, 0.0, 0.0, color.a);
 	
-	// Add windlight lights
-	col.rgb = atmosAffectDirectionalLight(calcDirectionalLight(norm, gl_LightSource[0].position.xyz));
-	col.rgb += atmosAmbient(baseLight.rgb);
-	col.rgb = scaleUpLight(col.rgb);
-
 	// Collect normal lights (need to be divided by two, as we later multiply by 2)
-	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLight(pos, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation);
-	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLight(pos, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation);
-	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLight(pos, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation);
-	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLight(pos, norm, gl_LightSource[5].position, gl_LightSource[5].linearAttenuation);
- 	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLight(pos, norm, gl_LightSource[6].position, gl_LightSource[6].linearAttenuation);
- 	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLight(pos, norm, gl_LightSource[7].position, gl_LightSource[7].linearAttenuation);
+	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a);
+	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a);
+	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a);
+	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a);
+	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a);
+	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a);
 	col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz);
 	col.rgb = scaleDownLight(col.rgb);
-				
+
+	// Add windlight lights
+	col.rgb += atmosAffectDirectionalLight(calcDirectionalLight(norm, gl_LightSource[0].position.xyz));
+	col.rgb += atmosAmbient(baseLight.rgb);
 
 	col.rgb = min(col.rgb*color.rgb, 1.0);
 	
diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml
index f16ec6c30f20cdf668cf2f8cdc5f46b230eb08cd..f741089ca2b6098ad6068a1b621182a3a4b46d63 100644
--- a/indra/newview/app_settings/ultra_graphics.xml
+++ b/indra/newview/app_settings/ultra_graphics.xml
@@ -12,14 +12,12 @@
 	<RenderFlexTimeFactor value="1"/>
 	<!--256... but they don't use this-->
 	<RenderGlowResolutionPow value="9"/>
-	<!--Sun/Moon only-->
-	<RenderLightingDetail value="1"/>
 	<!--Low number-->
 	<RenderMaxPartCount value="4096"/>
 	<!--bump okay-->
 	<RenderObjectBump value="TRUE"/>
 	<!--NO SHADERS-->
-	<RenderReflectionDetail value="3"/>
+	<RenderReflectionDetail value="4"/>
 	<!--Simple-->
 	<RenderTerrainDetail value="1"/>
 	<!--Default for now-->
@@ -31,9 +29,14 @@
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="2.0"/>
 	<!--NO SHADERS-->
-	<RenderWaterReflections value="TRUE"/>
-	<!--NO SHADERS-->
 	<VertexShaderEnable value="TRUE"/>
 	<!--NO SHADERS-->
 	<WindLightUseAtmosShaders value="TRUE"/>
+  <!--Deferred Shading-->
+  <RenderDeferred value="TRUE"/>
+  <!--SSAO Enabled-->
+  <RenderDeferredSSAO value="TRUE"/>
+  <!--Full Shadows-->
+  <RenderShadowDetail value="2"/>
+
 </settings>
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index ccdb109d95d5d70b5e75660e2d7b21cbab39c81a..9440e877dfac4435dcac52e6c2c12cb40a5fd9e2 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -23,7 +23,7 @@ version 22
 // NOTE: All settings are set to the MIN of applied values, including 'all'!
 //
 list all
-RenderAnisotropic			1	0
+RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
 RenderAvatarMaxVisible      1   12
@@ -36,18 +36,16 @@ RenderFogRatio				1	4.0
 RenderGamma					1	0
 RenderGlowResolutionPow		1	9
 RenderGround				1	1
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	8192
 RenderNightBrightness		1	1.0
 RenderObjectBump			1	1
-RenderReflectionDetail		1	3
+RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVBOEnable				1	1
 RenderVolumeLODFactor		1	2.0
-RenderWaterReflections		1	1
 UseStartScreen				1	1
 UseOcclusion				1	1
 VertexShaderEnable			1	1
@@ -58,10 +56,12 @@ Disregard96DefaultDrawDistance	1	1
 RenderTextureMemoryMultiple		1	1.0
 RenderShaderLightingMaxLevel	1	3
 SkyUseClassicClouds			1	1
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
 WatchdogDisabled				1	1
 RenderUseStreamVBO			1	1
 
-
 //
 // Low Graphics Settings
 //
@@ -74,7 +74,6 @@ RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
 RenderGlowResolutionPow		1	8
-RenderLightingDetail		1	0
 RenderMaxPartCount			1	0
 RenderObjectBump			1	0
 RenderReflectionDetail		1	0
@@ -83,11 +82,14 @@ RenderTerrainLODFactor		1	1
 RenderTreeLODFactor			1	0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0
-RenderWaterReflections		1	0
 VertexShaderEnable			1	0
 WindLightUseAtmosShaders	1	0
 WLSkyDetail					1	48
 SkyUseClassicClouds			1	0
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
+
 
 //
 // Mid Graphics Settings
@@ -100,7 +102,6 @@ RenderAvatarVP				1	1
 RenderFarClip				1	96
 RenderFlexTimeFactor		1	1.0
 RenderGlowResolutionPow		1	8
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	2048
 RenderObjectBump			1	1
 RenderReflectionDetail		1	0
@@ -109,10 +110,13 @@ RenderTerrainLODFactor		1	1.0
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
-RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
 WLSkyDetail					1	48
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
+
 
 //
 // High Graphics Settings (purty)
@@ -125,7 +129,6 @@ RenderAvatarVP				1	1
 RenderFarClip				1	128
 RenderFlexTimeFactor		1	1.0
 RenderGlowResolutionPow		1	9
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	4096
 RenderObjectBump			1	1
 RenderReflectionDetail		1	2
@@ -134,10 +137,13 @@ RenderTerrainLODFactor		1	2.0
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
-RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	48
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
+
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -150,19 +156,20 @@ RenderAvatarVP				1	1
 RenderFarClip				1	256
 RenderFlexTimeFactor		1	1.0
 RenderGlowResolutionPow		1	9
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	8192
 RenderObjectBump			1	1
-RenderReflectionDetail		1	3
+RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
-RenderWaterReflections		1	1
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	128
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
 
 //
 // Class Unknown Hardware (unknown)
@@ -200,9 +207,12 @@ RenderVBOEnable				1	1
 list NoPixelShaders
 RenderAvatarVP				0	0
 RenderAvatarCloth			0	0
-RenderWaterReflections		0	0
+RenderReflectionDetail		0	0
 VertexShaderEnable			0	0
 WindLightUseAtmosShaders	0	0
+RenderDeferred				0	0
+RenderDeferredSSAO			0	0
+RenderShadowDetail			0	0
 
 //
 // No Vertex Shaders available
@@ -210,24 +220,30 @@ WindLightUseAtmosShaders	0	0
 list NoVertexShaders
 RenderAvatarVP				0	0
 RenderAvatarCloth			0	0
-RenderWaterReflections		0	0
+RenderReflectionDetail		0	0
 VertexShaderEnable			0	0
 WindLightUseAtmosShaders	0	0
+RenderDeferred				0	0
+RenderDeferredSSAO			0	0
+RenderShadowDetail			0	0
 
+//
 // "Default" setups for safe, low, medium, high
 //
 list safe
 RenderAnisotropic			1	0
 RenderAvatarCloth			0	0
 RenderAvatarVP				0	0
-RenderLightingDetail		1	0
 RenderObjectBump			0	0
 RenderMaxPartCount			1	1024
 RenderTerrainDetail 		1	0
 RenderUseImpostors			0	0
 RenderVBOEnable				1	0
-RenderWaterReflections		0	0
+RenderReflectionDetail		0	0
 WindLightUseAtmosShaders	0	0
+RenderDeferred				0	0
+RenderDeferredSSAO			0	0
+RenderShadowDetail			0	0
 
 //
 // CPU based feature masks
@@ -251,11 +267,9 @@ RenderVBOEnable				1	0
 
 list Intel
 RenderAnisotropic			1	0
-RenderLightingDetail		1	0
 
 list GeForce2
 RenderAnisotropic			1	0
-RenderLightingDetail		1	0
 RenderMaxPartCount			1	2048
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	1
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index 45de51f3cf191cbc2d22056a623dc154472c9c37..85b8564138f58f3ccfc3f2afd3b0c1d1d74b27a9 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -23,7 +23,7 @@ version 21
 // NOTE: All settings are set to the MIN of applied values, including 'all'!
 //
 list all
-RenderAnisotropic			1	0
+RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
 RenderAvatarMaxVisible      1   12
@@ -36,18 +36,16 @@ RenderFogRatio				1	4.0
 RenderGamma					1	0
 RenderGlowResolutionPow		1	9
 RenderGround				1	1
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	8192
 RenderNightBrightness		1	1.0
 RenderObjectBump			1	1
-RenderReflectionDetail		1	3
+RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVBOEnable				1	1
 RenderVolumeLODFactor		1	2.0
-RenderWaterReflections		1	1
 UseStartScreen				1	1
 UseOcclusion				1	1
 VertexShaderEnable			1	1
@@ -57,6 +55,10 @@ Disregard128DefaultDrawDistance	1	1
 Disregard96DefaultDrawDistance	1	1
 RenderTextureMemoryMultiple		1	1.0
 SkyUseClassicClouds			1	1
+RenderShaderLightingMaxLevel		1	3
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
 WatchdogDisabled				1	1
 
 //
@@ -71,7 +73,6 @@ RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
 RenderGlowResolutionPow		1	8
-RenderLightingDetail		1	0
 RenderMaxPartCount			1	0
 RenderObjectBump			1	0
 RenderReflectionDetail		1	0
@@ -80,11 +81,14 @@ RenderTerrainLODFactor		1	1
 RenderTreeLODFactor			1	0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0
-RenderWaterReflections		1	0
 VertexShaderEnable			1	0
 WindLightUseAtmosShaders	1	0
 WLSkyDetail					1	48
 SkyUseClassicClouds			1	0
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
+
 
 //
 // Mid Graphics Settings
@@ -97,7 +101,6 @@ RenderAvatarVP				1	1
 RenderFarClip				1	96
 RenderFlexTimeFactor		1	1.0
 RenderGlowResolutionPow		1	8
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	2048
 RenderObjectBump			1	1
 RenderReflectionDetail		1	0
@@ -106,10 +109,13 @@ RenderTerrainLODFactor		1	1.0
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
-RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
 WLSkyDetail					1	48
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
+
 
 //
 // High Graphics Settings (purty)
@@ -122,7 +128,6 @@ RenderAvatarVP				1	1
 RenderFarClip				1	128
 RenderFlexTimeFactor		1	1.0
 RenderGlowResolutionPow		1	9
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	4096
 RenderObjectBump			1	1
 RenderReflectionDetail		1	2
@@ -131,10 +136,13 @@ RenderTerrainLODFactor		1	2.0
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
-RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	48
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
+
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -147,19 +155,21 @@ RenderAvatarVP				1	1
 RenderFarClip				1	256
 RenderFlexTimeFactor		1	1.0
 RenderGlowResolutionPow		1	9
-RenderLightingDetail		1	1
 RenderMaxPartCount			1	8192
 RenderObjectBump			1	1
-RenderReflectionDetail		1	3
+RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
-RenderWaterReflections		1	1
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	128
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
+RenderShadowDetail			1	0
+
 
 //
 // Class Unknown Hardware (unknown)
@@ -197,9 +207,12 @@ RenderVBOEnable				1	1
 list NoPixelShaders
 RenderAvatarVP				0	0
 RenderAvatarCloth			0	0
-RenderWaterReflections		0	0
+RenderReflectionDetail		0	0
 VertexShaderEnable			0	0
 WindLightUseAtmosShaders	0	0
+RenderDeferred				0	0
+RenderDeferredSSAO			0	0
+RenderShadowDetail			0	0
 
 //
 // No Vertex Shaders available
@@ -207,9 +220,13 @@ WindLightUseAtmosShaders	0	0
 list NoVertexShaders
 RenderAvatarVP				0	0
 RenderAvatarCloth			0	0
-RenderWaterReflections		0	0
+RenderReflectionDetail		0	0
 VertexShaderEnable			0	0
 WindLightUseAtmosShaders	0	0
+RenderDeferred				0	0
+RenderDeferredSSAO			0	0
+RenderShadowDetail			0	0
+
 
 // "Default" setups for safe, low, medium, high
 //
@@ -217,14 +234,17 @@ list safe
 RenderAnisotropic			1	0
 RenderAvatarCloth			0	0
 RenderAvatarVP				0	0
-RenderLightingDetail		1	0
 RenderObjectBump			0	0
 RenderMaxPartCount			1	1024
 RenderTerrainDetail 		1	0
 RenderUseImpostors			0	0
 RenderVBOEnable				1	0
-RenderWaterReflections		0	0
+RenderReflectionDetail		0	0
 WindLightUseAtmosShaders	0	0
+RenderDeferred				0	0
+RenderDeferredSSAO			0	0
+RenderShadowDetail			0	0
+
 
 //
 // CPU based feature masks
@@ -248,13 +268,11 @@ RenderVBOEnable				1	0
 
 list Intel
 RenderAnisotropic			1	0
-RenderLightingDetail		1	0
 // Avoid some Intel crashes on Linux
 RenderCubeMap				0	0
 
 list GeForce2
 RenderAnisotropic			1	0
-RenderLightingDetail		1	0
 RenderMaxPartCount			1	2048
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	1
@@ -466,17 +484,47 @@ list NVIDIA_GeForce_Go_6
 RenderVBOEnable				1	0
 Disregard128DefaultDrawDistance	1	0
 
+list NVIDIA_GeForce_7000
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_7100
+RenderShaderLightingMaxLevel	1	2
 list NVIDIA_GeForce_7200
 Disregard128DefaultDrawDistance	1	0
+RenderShaderLightingMaxLevel	1	2
 list NVIDIA_GeForce_7300
 Disregard128DefaultDrawDistance	1	0
+RenderShaderLightingMaxLevel	1	2
 list NVIDIA_GeForce_7400
 Disregard128DefaultDrawDistance	1	0
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_7500
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_7600
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_7700
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_7800
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_7900
+RenderShaderLightingMaxLevel	1	2
 
 list NVIDIA_GeForce_Go_7200
 Disregard128DefaultDrawDistance	1	0
+RenderShaderLightingMaxLevel	1	2
 list NVIDIA_GeForce_Go_7300
 Disregard128DefaultDrawDistance	1	0
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_Go_7300_LE
+RenderShaderLightingMaxLevel	1	2
 list NVIDIA_GeForce_Go_7400
 Disregard128DefaultDrawDistance	1	0
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_Go_7600
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_Go_7700
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_Go_7800
+RenderShaderLightingMaxLevel	1	2
+list NVIDIA_GeForce_Go_7900
+RenderShaderLightingMaxLevel	1	2
 
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index e89b0cc49d5f4514104a63c3d82874af1022f86d..2095f3a81d83739c6fd7499424a144ec20ad64e8 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -371,6 +371,7 @@ list ATI_Radeon_X1500
 Disregard128DefaultDrawDistance	1	0
 list ATI_Radeon_X1600 
 Disregard128DefaultDrawDistance	1	0
+RenderUseFBO 					0	0
 list ATI_Radeon_X1700 
 Disregard128DefaultDrawDistance	1	0
 list ATI_Mobility_Radeon_X1xxx
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 42b78a84af2557bc0917ef90edf502441e0db610..37cd289b1ba9522cd3da8895e16c4cc661755379 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1779,6 +1779,8 @@ void LLAgent::endAnimationUpdateUI()
 			
 		}
 		gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR);
+
+		LLFloaterCamera::onAvatarEditingAppearance(false);
 	}
 
 	//---------------------------------------------------------------------
@@ -1885,6 +1887,8 @@ void LLAgent::endAnimationUpdateUI()
 		{
 			mPauseRequest = gAgentAvatarp->requestPause();
 		}
+
+		LLFloaterCamera::onAvatarEditingAppearance(true);
 	}
 
 	if (isAgentAvatarValid())
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 6c050a1309f05cdf251063a4af475f1d5ddca7f0..68e408d3e4aa9264e31cc8f6f465cba1e4e8c8cc 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -1143,10 +1143,9 @@ void LLAgentCamera::updateCamera()
 	static LLFastTimer::DeclareTimer ftm("Camera");
 	LLFastTimer t(ftm);
 
-	//Ventrella - changed camera_skyward to the new global "mCameraUpVector"
+	// - changed camera_skyward to the new global "mCameraUpVector"
 	mCameraUpVector = LLVector3::z_axis;
 	//LLVector3	camera_skyward(0.f, 0.f, 1.f);
-	//end Ventrella
 
 	U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode;
 
@@ -1156,10 +1155,8 @@ void LLAgentCamera::updateCamera()
 		gAgentAvatarp->isSitting() &&
 		camera_mode == CAMERA_MODE_MOUSELOOK)
 	{
-		//Ventrella
 		//changed camera_skyward to the new global "mCameraUpVector"
 		mCameraUpVector = mCameraUpVector * gAgentAvatarp->getRenderRotation();
-		//end Ventrella
 	}
 
 	if (cameraThirdPerson() && mFocusOnAvatar && LLFollowCamMgr::getActiveFollowCamParams())
@@ -1167,13 +1164,11 @@ void LLAgentCamera::updateCamera()
 		changeCameraToFollow();
 	}
 
-	//Ventrella
 	//NOTE - this needs to be integrated into a general upVector system here within llAgent. 
 	if ( camera_mode == CAMERA_MODE_FOLLOW && mFocusOnAvatar )
 	{
 		mCameraUpVector = mFollowCam.getUpVector();
 	}
-	//end Ventrella
 
 	if (mSitCameraEnabled)
 	{
@@ -1250,7 +1245,6 @@ void LLAgentCamera::updateCamera()
 	// lerp camera focus offset
 	mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(CAMERA_FOCUS_HALF_LIFE));
 
-	//Ventrella
 	if ( mCameraMode == CAMERA_MODE_FOLLOW )
 	{
 		if (isAgentAvatarValid())
@@ -1277,7 +1271,6 @@ void LLAgentCamera::updateCamera()
 			}
 		}
 	}
-	// end Ventrella
 
 	BOOL hit_limit;
 	LLVector3d camera_pos_global;
@@ -1408,10 +1401,8 @@ void LLAgentCamera::updateCamera()
 
 	// Move the camera
 
-	//Ventrella
 	LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent);
 	//LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent);
-	//end Ventrella
 	
 	// Change FOV
 	LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor));
@@ -1526,12 +1517,11 @@ LLVector3d LLAgentCamera::calcFocusPositionTargetGlobal()
 		clearFocusObject();
 	}
 
-	// Ventrella
 	if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar)
 	{
 		mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedFocus());
 		return mFocusTargetGlobal;
-	}// End Ventrella 
+	}
 	else if (mCameraMode == CAMERA_MODE_MOUSELOOK)
 	{
 		LLVector3d at_axis(1.0, 0.0, 0.0);
@@ -1700,11 +1690,10 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
 
 	LLVector3d camera_position_global;
 
-	// Ventrella 
 	if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar)
 	{
 		camera_position_global = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedPosition());
-	}// End Ventrella
+	}
 	else if (mCameraMode == CAMERA_MODE_MOUSELOOK)
 	{
 		if (!isAgentAvatarValid() || gAgentAvatarp->mDrawable.isNull())
@@ -2124,7 +2113,6 @@ void LLAgentCamera::changeCameraToDefault()
 }
 
 
-// Ventrella
 //-----------------------------------------------------------------------------
 // changeCameraToFollow()
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index a1ce556458474f7d9afdf86cd20b4268b0a0e7e8..4c2caae2c630f618683fe505b0fd6880c495bcac 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -382,7 +382,9 @@ void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32
 									const std::string new_name)
 {
 	LLWearable* old_wearable = getWearable(type, index);
-	if (old_wearable && (old_wearable->isDirty() || old_wearable->isOldVersion()))
+	if(!old_wearable) return;
+	bool name_changed = !new_name.empty() && (new_name != old_wearable->getName());
+	if (name_changed || old_wearable->isDirty() || old_wearable->isOldVersion())
 	{
 		LLUUID old_item_id = old_wearable->getItemID();
 		LLWearable* new_wearable = LLWearableList::instance().createCopy(old_wearable);
@@ -398,12 +400,10 @@ void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32
 		if (item)
 		{
 			std::string item_name = item->getName();
-			bool name_changed = false;
-			if (!new_name.empty() && (new_name != item->getName()))
+			if (name_changed)
 			{
 				llinfos << "saveWearable changing name from "  << item->getName() << " to " << new_name << llendl;
 				item_name = new_name;
-				name_changed = true;
 			}
 			// Update existing inventory item
 			LLPointer<LLViewerInventoryItem> template_item =
@@ -1750,7 +1750,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj
 			LLViewerObject *objectp = (*attachment_iter);
 			if (objectp)
 			{
-				LLUUID object_item_id = objectp->getItemID();
+				LLUUID object_item_id = objectp->getAttachmentItemID();
 				if (requested_item_ids.find(object_item_id) != requested_item_ids.end())
 				{
 					// Object currently worn, was requested.
@@ -1879,10 +1879,7 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra
 		msg->nextBlockFast(_PREHASH_ObjectData );
 		msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
 		msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner());
-		if (gSavedSettings.getBOOL("MultipleAttachments"))
-			msg->addU8Fast(_PREHASH_AttachmentPt, 0 | ATTACHMENT_ADD );
-		else
-			msg->addU8Fast(_PREHASH_AttachmentPt, 0 );	// Wear at the previous or default attachment point
+		msg->addU8Fast(_PREHASH_AttachmentPt, 0 );	// Wear at the previous or default attachment point
 		pack_permissions_slam(msg, item->getFlags(), item->getPermissions());
 		msg->addStringFast(_PREHASH_Name, item->getName());
 		msg->addStringFast(_PREHASH_Description, item->getDescription());
diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp
index 9e15f24bea246f11058e6d75a488196de8e796e9..f7ae320a6fc9f29f7740c93c8c3ed1157fb1cf00 100644
--- a/indra/newview/llagentwearablesfetch.cpp
+++ b/indra/newview/llagentwearablesfetch.cpp
@@ -209,7 +209,7 @@ void LLInitialWearablesFetch::processWearablesMessage()
 				{
 					LLViewerObject* attached_object = (*attachment_iter);
 					if (!attached_object) continue;
-					const LLUUID& item_id = attached_object->getItemID();
+					const LLUUID& item_id = attached_object->getAttachmentItemID();
 					if (item_id.isNull()) continue;
 					ids.push_back(item_id);
 				}
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 04a5bcc256d6d50b1674fa1691427f2b318d502e..94286fd799f8b120ce17d13066ae5aa6830345d1 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1006,7 +1006,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
 		addCOFItemLink(item_to_wear, do_update, cb);
 		break;
 	case LLAssetType::AT_OBJECT:
-		rez_attachment(item_to_wear, NULL);
+		rez_attachment(item_to_wear, NULL, replace);
 		break;
 	default: return false;;
 	}
@@ -1299,16 +1299,8 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id)
 		return false;
 	}
 
-	// Check whether the outfit contains any non-worn wearables.
-	LLInventoryModel::cat_array_t cats;
-	LLInventoryModel::item_array_t items;
-	LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ true);
-	gInventory.collectDescendentsIf(outfit_cat_id,
-		cats,
-		items,
-		LLInventoryModel::EXCLUDE_TRASH,
-		not_worn);
-	return items.size() > 0;
+	// Check whether the outfit contains the full set of body parts (shape+skin+hair+eyes).
+	return getCanMakeFolderIntoOutfit(outfit_cat_id);
 }
 
 void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category)
@@ -1602,46 +1594,56 @@ void item_array_diff(LLInventoryModel::item_array_t& full_list,
 	}
 }
 
-void LLAppearanceMgr::enforceItemCountLimits()
+S32 LLAppearanceMgr::findExcessOrDuplicateItems(const LLUUID& cat_id,
+												 LLAssetType::EType type,
+												 S32 max_items,
+												 LLInventoryModel::item_array_t& items_to_kill)
 {
-	S32 purge_count = 0;
-	
-	LLInventoryModel::item_array_t body_items;
-	getDescendentsOfAssetType(getCOF(), body_items, LLAssetType::AT_BODYPART, false);
-	LLInventoryModel::item_array_t curr_body_items = body_items;
-	removeDuplicateItems(body_items);
-	filterWearableItems(body_items, 1);
-	LLInventoryModel::item_array_t kill_body_items;
-	item_array_diff(curr_body_items,body_items,kill_body_items);
-	for (LLInventoryModel::item_array_t::iterator it = kill_body_items.begin();
-		 it != kill_body_items.end();
-		 ++it)
+	S32 to_kill_count = 0;
+
+	LLInventoryModel::item_array_t items;
+	getDescendentsOfAssetType(cat_id, items, type, false);
+	LLInventoryModel::item_array_t curr_items = items;
+	removeDuplicateItems(items);
+	if (max_items > 0)
 	{
-		LLViewerInventoryItem *item = *it;
-		llinfos << "purging dup body part " << item->getName() << llendl;
-		gInventory.purgeObject(item->getUUID());
-		purge_count++;
+		filterWearableItems(items, max_items);
 	}
-	
-	LLInventoryModel::item_array_t wear_items;
-	getDescendentsOfAssetType(getCOF(), wear_items, LLAssetType::AT_CLOTHING, false);
-	LLInventoryModel::item_array_t curr_wear_items = wear_items;
-	removeDuplicateItems(wear_items);
-	filterWearableItems(wear_items, LLAgentWearables::MAX_CLOTHING_PER_TYPE);
-	LLInventoryModel::item_array_t kill_wear_items;
-	item_array_diff(curr_wear_items,wear_items,kill_wear_items);
-	for (LLInventoryModel::item_array_t::iterator it = kill_wear_items.begin();
-		 it != kill_wear_items.end();
+	LLInventoryModel::item_array_t kill_items;
+	item_array_diff(curr_items,items,kill_items);
+	for (LLInventoryModel::item_array_t::iterator it = kill_items.begin();
+		 it != kill_items.end();
 		 ++it)
 	{
-		LLViewerInventoryItem *item = *it;
-		llinfos << "purging excess clothing item " << item->getName() << llendl;
-		gInventory.purgeObject(item->getUUID());
-		purge_count++;
+		items_to_kill.push_back(*it);
+		to_kill_count++;
 	}
+	return to_kill_count;
+}
+	
+												 
+void LLAppearanceMgr::enforceItemRestrictions()
+{
+	S32 purge_count = 0;
+	LLInventoryModel::item_array_t items_to_kill;
 
-	if (purge_count>0)
+	purge_count += findExcessOrDuplicateItems(getCOF(),LLAssetType::AT_BODYPART,
+											  1, items_to_kill);
+	purge_count += findExcessOrDuplicateItems(getCOF(),LLAssetType::AT_CLOTHING,
+											  LLAgentWearables::MAX_CLOTHING_PER_TYPE, items_to_kill);
+	purge_count += findExcessOrDuplicateItems(getCOF(),LLAssetType::AT_OBJECT,
+											  -1, items_to_kill);
+
+	if (items_to_kill.size()>0)
 	{
+		for (LLInventoryModel::item_array_t::iterator it = items_to_kill.begin();
+			 it != items_to_kill.end();
+			 ++it)
+		{
+			LLViewerInventoryItem *item = *it;
+			llinfos << "purging duplicate or excess item " << item->getName() << llendl;
+			gInventory.purgeObject(item->getUUID());
+		}
 		gInventory.notifyObservers();
 	}
 }
@@ -1664,7 +1666,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering)
 
 	// Remove duplicate or excess wearables. Should normally be enforced at the UI level, but
 	// this should catch anything that gets through.
-	enforceItemCountLimits();
+	enforceItemRestrictions();
 	
 	// update dirty flag to see if the state of the COF matches
 	// the saved outfit stored as a folder link
@@ -1830,9 +1832,9 @@ void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool
 	llinfos << "wearInventoryCategory( " << category->getName()
 			 << " )" << llendl;
 
-	callAfterCategoryFetch(category->getUUID(), boost::bind(&LLAppearanceMgr::wearCategoryFinal,
-															&LLAppearanceMgr::instance(),
-															category->getUUID(), copy, append));
+	callAfterCategoryFetch(category->getUUID(),boost::bind(&LLAppearanceMgr::wearCategoryFinal,
+														   &LLAppearanceMgr::instance(),
+														   category->getUUID(), copy, append));
 }
 
 void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append)
@@ -2498,29 +2500,17 @@ void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove)
 
 	switch (item_to_remove->getType())
 	{
-	case LLAssetType::AT_CLOTHING:
-		if (get_is_item_worn(id_to_remove))
-		{
-			//*TODO move here the exact removing code from LLWearableBridge::removeItemFromAvatar in the future
-			LLWearableBridge::removeItemFromAvatar(item_to_remove);
-		}
-		break;
-	case LLAssetType::AT_OBJECT:
-		gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
-		gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
-		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-		gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_to_remove->getLinkedUUID());
-		gMessageSystem->sendReliable( gAgent.getRegion()->getHost());
-
-		{
-			// this object might have been selected, so let the selection manager know it's gone now
-			LLViewerObject *found_obj = gObjectList.findObject(item_to_remove->getLinkedUUID());
-			if (found_obj)
+		case LLAssetType::AT_CLOTHING:
+			if (get_is_item_worn(id_to_remove))
 			{
-				LLSelectMgr::getInstance()->remove(found_obj);
-			};
-		}
-	default: break;
+				//*TODO move here the exact removing code from LLWearableBridge::removeItemFromAvatar in the future
+				LLWearableBridge::removeItemFromAvatar(item_to_remove);
+			}
+			break;
+		case LLAssetType::AT_OBJECT:
+			LLVOAvatarSelf::detachAttachmentIntoInventory(item_to_remove->getLinkedUUID());
+		default:
+			break;
 	}
 
 	// *HACK: Force to remove garbage from COF.
@@ -2660,7 +2650,6 @@ void LLAppearanceMgr::setAttachmentInvLinkEnable(bool val)
 	mAttachmentInvLinkEnabled = val;
 }
 
-// BAP TODO - mRegisteredAttachments is currently maintained but not used for anything.  Consider yanking.
 void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
 {
        llinfos << msg << llendl;
@@ -2680,7 +2669,6 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
 
 void LLAppearanceMgr::registerAttachment(const LLUUID& item_id)
 {
-       mRegisteredAttachments.insert(item_id);
 	   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
 
 	   if (mAttachmentInvLinkEnabled)
@@ -2698,7 +2686,6 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id)
 
 void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id)
 {
-       mRegisteredAttachments.erase(item_id);
 	   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
 
 	   if (mAttachmentInvLinkEnabled)
@@ -2711,18 +2698,6 @@ void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id)
 	   }
 }
 
-void LLAppearanceMgr::linkRegisteredAttachments()
-{
-	for (std::set<LLUUID>::iterator it = mRegisteredAttachments.begin();
-		 it != mRegisteredAttachments.end();
-		 ++it)
-	{
-		LLUUID item_id = *it;
-		addCOFItemLink(item_id, false);
-	}
-	mRegisteredAttachments.clear();
-}
-
 BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const
 {
 	return gInventory.isObjectDescendentOf(obj_id, getCOF());
@@ -2735,8 +2710,8 @@ bool LLAppearanceMgr::isLinkInCOF(const LLUUID& obj_id)
 	 LLInventoryModel::item_array_t items;
 	 LLLinkedItemIDMatches find_links(gInventory.getLinkedItemID(obj_id));
 	 gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(),
-	 cats,
-	 items,
+									 cats,
+									 items,
 	 LLInventoryModel::EXCLUDE_TRASH,
 	 find_links);
 
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index e7442537d28486bb824a588d02127b285e994bf2..78c2142ea563b52f2d37b137726a243110966d12 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -60,7 +60,11 @@ public:
 	void renameOutfit(const LLUUID& outfit_id);
 	void takeOffOutfit(const LLUUID& cat_id);
 	void addCategoryToCurrentOutfit(const LLUUID& cat_id);
-	void enforceItemCountLimits();
+	S32 findExcessOrDuplicateItems(const LLUUID& cat_id,
+								   LLAssetType::EType type,
+								   S32 max_items,
+								   LLInventoryModel::item_array_t& items_to_kill);
+	void enforceItemRestrictions();
 
 	// Copy all items and the src category itself.
 	void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
@@ -113,7 +117,6 @@ public:
 	void unregisterAttachment(const LLUUID& item_id);
 	void registerAttachment(const LLUUID& item_id);
 	void setAttachmentInvLinkEnable(bool val);
-	void linkRegisteredAttachments();
 
 	// utility function for bulk linking.
 	void linkAll(const LLUUID& category,
@@ -200,7 +203,6 @@ private:
 
 	void setOutfitLocked(bool locked);
 
-	std::set<LLUUID> mRegisteredAttachments;
 	bool mAttachmentInvLinkEnabled;
 	bool mOutfitIsDirty;
 	bool mIsInUpdateAppearanceFromCOF; // to detect recursive calls.
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 7f4ba2f2d2c216f51105e473488ce52d56fa7eff..bfe3e52657019fbb34f4f832005bf51a5706d821 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -955,6 +955,11 @@ static LLFastTimer::DeclareTimer FTM_LFS("LFS Thread");
 static LLFastTimer::DeclareTimer FTM_PAUSE_THREADS("Pause Threads");
 static LLFastTimer::DeclareTimer FTM_IDLE("Idle");
 static LLFastTimer::DeclareTimer FTM_PUMP("Pump");
+static LLFastTimer::DeclareTimer FTM_PUMP_ARES("Ares");
+static LLFastTimer::DeclareTimer FTM_PUMP_SERVICE("Service");
+static LLFastTimer::DeclareTimer FTM_SERVICE_CALLBACK("Callback");
+static LLFastTimer::DeclareTimer FTM_AGENT_AUTOPILOT("Autopilot");
+static LLFastTimer::DeclareTimer FTM_AGENT_UPDATE("Update");
 
 bool LLAppViewer::mainLoop()
 {
@@ -1064,10 +1069,20 @@ bool LLAppViewer::mainLoop()
 						LLMemType mt_ip(LLMemType::MTYPE_IDLE_PUMP);
 						pingMainloopTimeout("Main:ServicePump");				
 						LLFastTimer t4(FTM_PUMP);
-						gAres->process();
-						// this pump is necessary to make the login screen show up
-						gServicePump->pump();
-						gServicePump->callback();
+						{
+							LLFastTimer t(FTM_PUMP_ARES);
+							gAres->process();
+						}
+						{
+							LLFastTimer t(FTM_PUMP_SERVICE);
+							// this pump is necessary to make the login screen show up
+							gServicePump->pump();
+
+							{
+								LLFastTimer t(FTM_SERVICE_CALLBACK);
+								gServicePump->callback();
+							}
+						}
 					}
 					
 					resumeMainloopTimeout();
@@ -1102,8 +1117,7 @@ bool LLAppViewer::mainLoop()
 			{
 				LLMemType mt_sleep(LLMemType::MTYPE_SLEEP);
 				LLFastTimer t2(FTM_SLEEP);
-				bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads");
-
+				
 				// yield some time to the os based on command line option
 				if(mYieldTime >= 0)
 				{
@@ -1141,9 +1155,7 @@ bool LLAppViewer::mainLoop()
 				}
 
 				static const F64 FRAME_SLOW_THRESHOLD = 0.5; //2 frames per seconds				
-				const F64 min_frame_time = 0.0; //(.0333 - .0010); // max video frame rate = 30 fps
-				const F64 min_idle_time = 0.0; //(.0010); // min idle time = 1 ms
-				const F64 max_idle_time = run_multiple_threads ? min_idle_time : llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second
+				const F64 max_idle_time = llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second
 				idleTimer.reset();
 				bool is_slow = (frameTimer.getElapsedTimeF64() > FRAME_SLOW_THRESHOLD) ;
 				S32 total_work_pending = 0;
@@ -1181,34 +1193,24 @@ bool LLAppViewer::mainLoop()
 
 					total_work_pending += work_pending ;
 					total_io_pending += io_pending ;
-					F64 frame_time = frameTimer.getElapsedTimeF64();
-					F64 idle_time = idleTimer.getElapsedTimeF64();
-					if (frame_time >= min_frame_time &&
-						idle_time >= min_idle_time &&
-						(!work_pending || idle_time >= max_idle_time))
+					
+					if (!work_pending || idleTimer.getElapsedTimeF64() >= max_idle_time)
 					{
 						break;
 					}
 				}
 
-				 // Prevent the worker threads from running while rendering.
-				// if (LLThread::processorCount()==1) //pause() should only be required when on a single processor client...
-				if (run_multiple_threads == FALSE)
+				if(!total_work_pending) //pause texture fetching threads if nothing to process.
 				{
-					//LLFastTimer ftm(FTM_PAUSE_THREADS); //not necessary.
-	 				
-					if(!total_work_pending) //pause texture fetching threads if nothing to process.
-					{
-						LLAppViewer::getTextureCache()->pause();
-						LLAppViewer::getImageDecodeThread()->pause();
-						LLAppViewer::getTextureFetch()->pause(); 
-					}
-					if(!total_io_pending) //pause file threads if nothing to process.
-					{
-						LLVFSThread::sLocal->pause(); 
-						LLLFSThread::sLocal->pause(); 
-					}
-				}					
+					LLAppViewer::getTextureCache()->pause();
+					LLAppViewer::getImageDecodeThread()->pause();
+					LLAppViewer::getTextureFetch()->pause(); 
+				}
+				if(!total_io_pending) //pause file threads if nothing to process.
+				{
+					LLVFSThread::sLocal->pause(); 
+					LLLFSThread::sLocal->pause(); 
+				}									
 
 				if ((LLStartUp::getStartupState() >= STATE_CLEANUP) &&
 					(frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD))
@@ -3560,9 +3562,12 @@ void LLAppViewer::idle()
 			gAgent.moveYaw(-1.f);
 		}
 
-	    // Handle automatic walking towards points
-	    gAgentPilot.updateTarget();
-	    gAgent.autoPilot(&yaw);
+		{
+			LLFastTimer t(FTM_AGENT_AUTOPILOT);
+			// Handle automatic walking towards points
+			gAgentPilot.updateTarget();
+			gAgent.autoPilot(&yaw);
+		}
     
 	    static LLFrameTimer agent_update_timer;
 	    static U32 				last_control_flags;
@@ -3573,6 +3578,7 @@ void LLAppViewer::idle()
 		    
 	    if (flags_changed || (agent_update_time > (1.0f / (F32) AGENT_UPDATES_PER_SECOND)))
 	    {
+		    LLFastTimer t(FTM_AGENT_UPDATE);
 		    // Send avatar and camera info
 		    last_control_flags = gAgent.getControlFlags();
 		    send_agent_update(TRUE);
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 76ad9b4afb6ab9284c79cad76f6c475957417efd..1cd705c2f9d8b555f56a83cbb388e029083a00a2 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -378,7 +378,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
 	item->setShowProfileBtn(mShowProfileBtn);
 	item->showSpeakingIndicator(mShowSpeakingIndicator);
 
-	item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoucleClicked, this, _1, _2, _3, _4));
+	item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoubleClicked, this, _1, _2, _3, _4));
 
 	addItem(item, id, pos);
 }
@@ -441,7 +441,7 @@ void LLAvatarList::updateLastInteractionTimes()
 	}
 }
 
-void LLAvatarList::onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask)
+void LLAvatarList::onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask)
 {
 	mItemDoubleClickSignal(ctrl, x, y, mask);
 }
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 84800842e94503687c3b9d09040e19a052ecf3d9..83faa53c281a6f309899ca8902cfb3130160f1ce 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -104,7 +104,7 @@ protected:
 		uuid_vec_t& vadded,
 		uuid_vec_t& vremoved);
 	void updateLastInteractionTimes();
-	void onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask);
+	void onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask);
 
 private:
 
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 706f20404d3ac8a9d58ff3cb0c93e05fab31eee2..341913edf7b80723677976545d18e01a94c7d011 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -121,7 +121,7 @@ S32 LLAvatarListItem::notifyParent(const LLSD& info)
 
 void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
-	childSetVisible("hovered_icon", true);
+	getChildView("hovered_icon")->setVisible( true);
 	mInfoBtn->setVisible(mShowInfoBtn);
 	mProfileBtn->setVisible(mShowProfileBtn);
 
@@ -132,7 +132,7 @@ void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask)
 
 void LLAvatarListItem::onMouseLeave(S32 x, S32 y, MASK mask)
 {
-	childSetVisible("hovered_icon", false);
+	getChildView("hovered_icon")->setVisible( false);
 	mInfoBtn->setVisible(false);
 	mProfileBtn->setVisible(false);
 
@@ -309,7 +309,7 @@ void LLAvatarListItem::setValue( const LLSD& value )
 {
 	if (!value.isMap()) return;;
 	if (!value.has("selected")) return;
-	childSetVisible("selected_icon", value["selected"]);
+	getChildView("selected_icon")->setVisible( value["selected"]);
 }
 
 const LLUUID& LLAvatarListItem::getAvatarId() const
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index c4177a420bd549c9ec95ef5b8c3c2321de6f5f0b..6ee438723656d303f24fa8ec8b50cb22ac399e03 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -53,7 +53,7 @@ static void update_build_button_enable_state()
 {
 	bool can_edit = LLToolMgr::getInstance()->canEdit();
 
-	LLBottomTray::getInstance()->childSetEnabled("build_btn", can_edit);
+	LLBottomTray::getInstance()->getChildView("build_btn")->setEnabled(can_edit);
 }
 
 // Build time optimization, generate extern template once in .cpp file
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index f0e231e3d767e28bd8e75d7f7560b43c576ed6b2..c78f73c3b88d1e41ab9a19201a7383a17ca27667 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -290,7 +290,7 @@ void LLCallFloater::updateSession()
 
 	// Hide "Leave Call" button for nearby chat
 	bool is_local_chat = mVoiceType == VC_LOCAL_CHAT;
-	childSetVisible("leave_call_btn_panel", !is_local_chat);
+	getChildView("leave_call_btn_panel")->setVisible( !is_local_chat);
 
 	refreshParticipantList();
 	updateAgentModeratorState();
@@ -413,11 +413,11 @@ void LLCallFloater::initAgentData()
 
 	if ( mAgentPanel )
 	{
-		mAgentPanel->childSetValue("user_icon", gAgentID);
+		mAgentPanel->getChild<LLUICtrl>("user_icon")->setValue(gAgentID);
 
 		std::string name;
 		gCacheName->getFullName(gAgentID, name);
-		mAgentPanel->childSetValue("user_text", name);
+		mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(name);
 
 		mSpeakingIndicator = mAgentPanel->getChild<LLOutputMonitorCtrl>("speaking_indicator");
 		mSpeakingIndicator->setSpeakerId(gAgentID);
@@ -455,7 +455,7 @@ void LLCallFloater::updateAgentModeratorState()
 			}
 		}
 	}
-	mAgentPanel->childSetValue("user_text", name);
+	mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(name);
 }
 
 static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids)
@@ -760,7 +760,7 @@ void LLCallFloater::reset(const LLVoiceChannel::EState& new_state)
 	{
 		// hides "Leave Call" when call is ended in parcel with disabled voice- hiding usually happens in
 		// updateSession() which won't be called here because connect to nearby voice never happens 
-		childSetVisible("leave_call_btn_panel", false);
+		getChildView("leave_call_btn_panel")->setVisible( false);
 		// setting title to nearby chat an "no one near..." text- because in region with disabled
 		// voice we won't have chance to really connect to nearby, so VCP is changed here manually
 		setTitle(getString("title_nearby"));
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index 577b26a21140399068f4ea1b752c1885a80570e0..967db212447f87493714e757056ccc7dbef083cc 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -185,7 +185,7 @@ void LLChatBar::refresh()
 		gAgent.stopTyping();
 	}
 
-	childSetEnabled("Say", mInputEditor->getText().size() > 0);
+	getChildView("Say")->setEnabled(mInputEditor->getText().size() > 0);
 
 }
 
@@ -387,7 +387,7 @@ void LLChatBar::sendChat( EChatType type )
 		}
 	}
 
-	childSetValue("Chat Editor", LLStringUtil::null);
+	getChild<LLUICtrl>("Chat Editor")->setValue(LLStringUtil::null);
 
 	gAgent.stopTyping();
 
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 0fdef20f4ae4e8a15b0766c2907e00a72776fafe..1f67a659bd2a101bceef36f5c60729e31a86ab0e 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -693,8 +693,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 			{
 				LLStyle::Params link_params(style_params);
 				link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
-				// Convert the name to a hotlink and add to message.
-				mEditor->appendText(chat.mFromName + delimiter, false, link_params);
+				// Add link to avatar's inspector and delimiter to message.
+				mEditor->appendText(link_params.link_href, false, style_params);
+				mEditor->appendText(delimiter, false, style_params);
 			}
 			else
 			{
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index 04623c03be0cc2fc1ad23ce990282383d7b1ba52..194d461f9474457209e4ab2ff5a7a3461e19fc60 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -514,10 +514,10 @@ LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventory
 
 	//setting callbacks
 	//*TODO move that item panel's inner structure disclosing stuff into the panels
-	item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable);
-	item_panel->childSetAction("btn_move_up", mCOFCallbacks.mMoveWearableFurther);
-	item_panel->childSetAction("btn_move_down", mCOFCallbacks.mMoveWearableCloser);
-	item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable);
+	item_panel->childSetAction("btn_delete", boost::bind(mCOFCallbacks.mDeleteWearable));
+	item_panel->childSetAction("btn_move_up", boost::bind(mCOFCallbacks.mMoveWearableFurther));
+	item_panel->childSetAction("btn_move_down", boost::bind(mCOFCallbacks.mMoveWearableCloser));
+	item_panel->childSetAction("btn_edit", boost::bind(mCOFCallbacks.mEditWearable));
 	
 	//turning on gray separator line for the last item in the items group of the same wearable type
 	item_panel->setSeparatorVisible(last);
@@ -543,8 +543,8 @@ LLPanelBodyPartsListItem* LLCOFWearables::buildBodypartListItem(LLViewerInventor
 
 	//setting callbacks
 	//*TODO move that item panel's inner structure disclosing stuff into the panels
-	item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable);
-	item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable);
+	item_panel->childSetAction("btn_delete", boost::bind(mCOFCallbacks.mDeleteWearable));
+	item_panel->childSetAction("btn_edit", boost::bind(mCOFCallbacks.mEditWearable));
 
 	return item_panel;
 }
@@ -559,7 +559,7 @@ LLPanelDeletableWearableListItem* LLCOFWearables::buildAttachemntListItem(LLView
 
 	//setting callbacks
 	//*TODO move that item panel's inner structure disclosing stuff into the panels
-	item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable);
+	item_panel->childSetAction("btn_delete", boost::bind(mCOFCallbacks.mDeleteWearable));
 
 	return item_panel;
 }
@@ -605,7 +605,7 @@ void LLCOFWearables::addClothingTypesDummies(const LLAppearanceMgr::wearables_by
 		LLWearableType::EType w_type = static_cast<LLWearableType::EType>(type);
 		LLPanelInventoryListItemBase* item_panel = LLPanelDummyClothingListItem::create(w_type);
 		if(!item_panel) continue;
-		item_panel->childSetAction("btn_add", mCOFCallbacks.mAddWearable);
+		item_panel->childSetAction("btn_add", boost::bind(mCOFCallbacks.mAddWearable));
 		mClothing->addItem(item_panel, LLUUID::null, ADD_BOTTOM, false);
 	}
 }
@@ -657,20 +657,20 @@ LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
 	{
 		const LLAccordionCtrlTab* expanded_tab = mAccordionCtrl->getExpandedTab();
 
-		return get_if_there(mTab2AssetType, expanded_tab, LLAssetType::AT_NONE);
+	return get_if_there(mTab2AssetType, expanded_tab, LLAssetType::AT_NONE);
 	}
 
 	return LLAssetType::AT_NONE;
 }
 
 LLAssetType::EType LLCOFWearables::getSelectedAccordionAssetType()
-{
+	{
 	if (mAccordionCtrl != NULL)
 	{
 		const LLAccordionCtrlTab* selected_tab = mAccordionCtrl->getSelectedTab();
 
-		return get_if_there(mTab2AssetType, selected_tab, LLAssetType::AT_NONE);
-	}
+	return get_if_there(mTab2AssetType, selected_tab, LLAssetType::AT_NONE);
+}
 
 	return LLAssetType::AT_NONE;
 }
diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h
index e426b108100a18973bace0b077611533307d041f..d981fa4196d772891c3b7d3e74a1b5c8bf323196 100644
--- a/indra/newview/llcofwearables.h
+++ b/indra/newview/llcofwearables.h
@@ -54,7 +54,7 @@ public:
 		LLCOFCallbacks() {};
 		virtual ~LLCOFCallbacks() {};
 		
-		typedef boost::function<void (void*)> cof_callback_t;
+		typedef boost::function<void ()> cof_callback_t;
 
 		cof_callback_t mAddWearable;
 		cof_callback_t mMoveWearableCloser;
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index 117a0bb568d6eadc9c93c7fd90b60ccfc54d5f23..268d9958d196e8ce7bf48f76807707cd288b34b1 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -100,7 +100,7 @@ LLFloaterScriptQueue::~LLFloaterScriptQueue()
 BOOL LLFloaterScriptQueue::postBuild()
 {
 	childSetAction("close",onCloseBtn,this);
-	childSetEnabled("close",FALSE);
+	getChildView("close")->setEnabled(FALSE);
 	return TRUE;
 }
 
@@ -213,7 +213,7 @@ BOOL LLFloaterScriptQueue::nextObject()
 	{
 		mDone = true;
 		getChild<LLScrollListCtrl>("queue output")->setCommentText(getString("Done"));
-		childSetEnabled("close",TRUE);
+		getChildView("close")->setEnabled(TRUE);
 	}
 	return successful_start;
 }
diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index adb291ede8b19450a37d0039d131fc243c47909a..654daa770e4ec4298b25b2acd35610b7e17bcab7 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -406,8 +406,8 @@ void LLCurrencyUIManager::Impl::currencyKey(S32 value)
 		//cannot just simply refresh the whole UI, as the edit field will
 		// get reset and the cursor will change...
 		
-		mPanel.childHide("currency_est");
-		mPanel.childSetVisible("getting_data",TRUE);
+		mPanel.getChildView("currency_est")->setVisible(FALSE);
+		mPanel.getChildView("getting_data")->setVisible(TRUE);
 	}
 	
 	mCurrencyChanged = true;
@@ -436,13 +436,13 @@ void LLCurrencyUIManager::Impl::updateUI()
 {
 	if (mHidden)
 	{
-		mPanel.childHide("currency_action");
-		mPanel.childHide("currency_amt");
-		mPanel.childHide("currency_est");
+		mPanel.getChildView("currency_action")->setVisible(FALSE);
+		mPanel.getChildView("currency_amt")->setVisible(FALSE);
+		mPanel.getChildView("currency_est")->setVisible(FALSE);
 		return;
 	}
 
-	mPanel.childShow("currency_action");
+	mPanel.getChildView("currency_action")->setVisible(TRUE);
 
 	LLLineEditor* lindenAmount = mPanel.getChild<LLLineEditor>("currency_amt");
 	if (lindenAmount) 
@@ -465,17 +465,17 @@ void LLCurrencyUIManager::Impl::updateUI()
 		}
 	}
 
-	mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", getLocalEstimate());
-	mPanel.childSetVisible("currency_est", hasEstimate() && mUserCurrencyBuy > 0);
+	mPanel.getChild<LLUICtrl>("currency_est")->setTextArg("[LOCALAMOUNT]", getLocalEstimate());
+	mPanel.getChildView("currency_est")->setVisible( hasEstimate() && mUserCurrencyBuy > 0);
 
-	mPanel.childSetVisible("currency_links", mSupportsInternationalBilling);
-	mPanel.childSetVisible("exchange_rate_note", mSupportsInternationalBilling);
+	mPanel.getChildView("currency_links")->setVisible( mSupportsInternationalBilling);
+	mPanel.getChildView("exchange_rate_note")->setVisible( mSupportsInternationalBilling);
 
-	if (mPanel.childIsEnabled("buy_btn")
-		||mPanel.childIsVisible("currency_est")
-		|| mPanel.childIsVisible("error_web"))
+	if (mPanel.getChildView("buy_btn")->getEnabled()
+		||mPanel.getChildView("currency_est")->getVisible()
+		|| mPanel.getChildView("error_web")->getVisible())
 	{
-		mPanel.childSetVisible("getting_data",FALSE);
+		mPanel.getChildView("getting_data")->setVisible(FALSE);
 	}
 }
 
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 0447b06fccd887622e3deea4a3fec338bc7f5678..583bb541608ec7a66caa54b744921fd6d9b78f48 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -517,7 +517,7 @@ F32 LLDrawable::updateXform(BOOL undamped)
 		{
 			// snap to final position
 			dist_squared = 0.0f;
-			if (!isRoot())
+			if (getVOVolume() && !isRoot())
 			{ //child prim snapping to some position, needs a rebuild
 				gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE);
 			}
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 6d8344f4e85ccb27606e774ac1e06158348909ee..cb651f9d3a23773cfd4ff1105f2769c605ebe1fc 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -468,6 +468,7 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
 	{
 		if (params.mTexture.notNull())
 		{
+			params.mTexture->addTextureStats(params.mVSize);
 			gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ;
 			if (params.mTextureMatrix)
 			{
diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h
index 4a728bc8a5046f49ccf56985ba2ace053be807c7..221f81ec256c8fe30042e4f310ca89f8fa3bfe22 100644
--- a/indra/newview/lldrawpool.h
+++ b/indra/newview/lldrawpool.h
@@ -127,6 +127,7 @@ public:
 		PASS_FULLBRIGHT_SHINY,
 		PASS_SHINY,
 		PASS_BUMP,
+		PASS_POST_BUMP,
 		PASS_GLOW,
 		PASS_ALPHA,
 		PASS_ALPHA_MASK,
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 5d1a0ee9de47afab1b0f49b375979ea396d02a5d..a2428d2de0aa09c35f0886119bd72dbe88905518 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -54,7 +54,9 @@ static BOOL deferred_render = FALSE;
 
 LLDrawPoolAlpha::LLDrawPoolAlpha(U32 type) :
 		LLRenderPass(type), current_shader(NULL), target_shader(NULL),
-		simple_shader(NULL), fullbright_shader(NULL)
+		simple_shader(NULL), fullbright_shader(NULL),
+		mColorSFactor(LLRender::BF_UNDEF), mColorDFactor(LLRender::BF_UNDEF),
+		mAlphaSFactor(LLRender::BF_UNDEF), mAlphaDFactor(LLRender::BF_UNDEF)
 {
 
 }
@@ -172,9 +174,16 @@ void LLDrawPoolAlpha::render(S32 pass)
 
 	LLGLSPipelineAlpha gls_pipeline_alpha;
 
-	if (LLPipeline::sFastAlpha && !deferred_render)
+	gGL.setColorMask(true, true);
+
+	if (LLPipeline::sAutoMaskAlphaNonDeferred && !deferred_render)
 	{
-		LLGLDisable blend_disable(GL_BLEND);
+		mColorSFactor = LLRender::BF_ONE;  // }
+		mColorDFactor = LLRender::BF_ZERO; // } these are like disabling blend on the color channels, but we're still blending on the alpha channel so that we can suppress glow
+		mAlphaSFactor = LLRender::BF_ZERO;
+		mAlphaDFactor = LLRender::BF_ZERO; // block (zero-out) glow where the alpha test succeeds
+		gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
+
 		gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f);
 		if (mVertexShaderLevel > 0)
 		{
@@ -198,8 +207,17 @@ void LLDrawPoolAlpha::render(S32 pass)
 	}
 
 	LLGLDepthTest depth(GL_TRUE, LLDrawPoolWater::sSkipScreenCopy ? GL_TRUE : GL_FALSE);
+
+	mColorSFactor = LLRender::BF_SOURCE_ALPHA;           // } regular alpha blend
+	mColorDFactor = LLRender::BF_ONE_MINUS_SOURCE_ALPHA; // }
+	mAlphaSFactor = LLRender::BF_ZERO;                         // } glow suppression
+	mAlphaDFactor = LLRender::BF_ONE_MINUS_SOURCE_ALPHA;       // }
+	gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
+
 	renderAlpha(getVertexDataMask());
 
+	gGL.setColorMask(true, false);
+
 	if (deferred_render && current_shader != NULL)
 	{
 		gPipeline.unbindDeferredShader(*current_shader);
@@ -277,9 +295,18 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
 	for (LLCullResult::sg_list_t::iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i)
 	{
 		LLSpatialGroup* group = *i;
+		llassert(group);
+		llassert(group->mSpatialPartition);
+
 		if (group->mSpatialPartition->mRenderByGroup &&
-			!group->isDead())
+		    !group->isDead())
 		{
+			bool draw_glow_for_this_partition = mVertexShaderLevel > 0 && // no shaders = no glow.
+				// All particle systems seem to come off the wire with texture entries which claim that they glow.  This is probably a bug in the data.  Suppress.
+				group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_PARTICLE &&
+				group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_CLOUD &&
+				group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD_PARTICLE;
+
 			LLSpatialGroup::drawmap_elem_t& draw_info = group->mDrawMap[LLRenderPass::PASS_ALPHA];
 
 			for (LLSpatialGroup::drawmap_elem_t::iterator k = draw_info.begin(); k != draw_info.end(); ++k)	
@@ -288,96 +315,118 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
 
 				LLRenderPass::applyModelMatrix(params);
 
-				if (params.mFullbright)
 				{
-					// Turn off lighting if it hasn't already been so.
-					if (light_enabled || !initialized_lighting)
+					if (params.mFullbright)
+					{
+						// Turn off lighting if it hasn't already been so.
+						if (light_enabled || !initialized_lighting)
+						{
+							initialized_lighting = TRUE;
+							if (use_shaders) 
+							{
+								target_shader = fullbright_shader;
+							}
+							else
+							{
+								gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
+							}
+							light_enabled = FALSE;
+						}
+					}
+					// Turn on lighting if it isn't already.
+					else if (!light_enabled || !initialized_lighting)
 					{
 						initialized_lighting = TRUE;
 						if (use_shaders) 
 						{
-							target_shader = fullbright_shader;
+							target_shader = simple_shader;
 						}
 						else
 						{
-							gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
+							gPipeline.enableLightsDynamic();
 						}
-						light_enabled = FALSE;
+						light_enabled = TRUE;
 					}
-				}
-				// Turn on lighting if it isn't already.
-				else if (!light_enabled || !initialized_lighting)
-				{
-					initialized_lighting = TRUE;
-					if (use_shaders) 
-					{
-						target_shader = simple_shader;
-					}
-					else
-					{
-						gPipeline.enableLightsDynamic();
-					}
-					light_enabled = TRUE;
-				}
 
-				// If we need shaders, and we're not ALREADY using the proper shader, then bind it
-				// (this way we won't rebind shaders unnecessarily).
-				if(use_shaders && (current_shader != target_shader))
-				{
-					llassert(target_shader != NULL);
-					if (deferred_render && current_shader != NULL)
+					// If we need shaders, and we're not ALREADY using the proper shader, then bind it
+					// (this way we won't rebind shaders unnecessarily).
+					if(use_shaders && (current_shader != target_shader))
 					{
-						gPipeline.unbindDeferredShader(*current_shader);
-						diffuse_channel = 0;
-					}
-					current_shader = target_shader;
-					if (deferred_render)
-					{
-						gPipeline.bindDeferredShader(*current_shader);
-						diffuse_channel = current_shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
-					}
-					else
-					{
-						current_shader->bind();
+						llassert(target_shader != NULL);
+						if (deferred_render && current_shader != NULL)
+						{
+							gPipeline.unbindDeferredShader(*current_shader);
+							diffuse_channel = 0;
+						}
+						current_shader = target_shader;
+						if (deferred_render)
+						{
+							gPipeline.bindDeferredShader(*current_shader);
+							diffuse_channel = current_shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
+						}
+						else
+						{
+							current_shader->bind();
+						}
 					}
-				}
-				else if (!use_shaders && current_shader != NULL)
-				{
-					if (deferred_render)
+					else if (!use_shaders && current_shader != NULL)
 					{
-						gPipeline.unbindDeferredShader(*current_shader);
-						diffuse_channel = 0;
+						if (deferred_render)
+						{
+							gPipeline.unbindDeferredShader(*current_shader);
+							diffuse_channel = 0;
+						}
+						LLGLSLShader::bindNoShader();
+						current_shader = NULL;
 					}
-					LLGLSLShader::bindNoShader();
-					current_shader = NULL;
-				}
-
-				if (params.mGroup)
-				{
-					params.mGroup->rebuildMesh();
-				}
 
-				
-				if (params.mTexture.notNull())
-				{
-					gGL.getTexUnit(diffuse_channel)->bind(params.mTexture.get());
-					if(params.mTexture.notNull())
+					if (params.mGroup)
 					{
-						params.mTexture->addTextureStats(params.mVSize);
+						params.mGroup->rebuildMesh();
 					}
-					if (params.mTextureMatrix)
+
+					
+					if (params.mTexture.notNull())
 					{
-						gGL.getTexUnit(0)->activate();
-						glMatrixMode(GL_TEXTURE);
-						glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
-						gPipeline.mTextureMatrixOps++;
+						gGL.getTexUnit(diffuse_channel)->bind(params.mTexture.get());
+						if(params.mTexture.notNull())
+						{
+							params.mTexture->addTextureStats(params.mVSize);
+						}
+						if (params.mTextureMatrix)
+						{
+							gGL.getTexUnit(0)->activate();
+							glMatrixMode(GL_TEXTURE);
+							glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
+							gPipeline.mTextureMatrixOps++;
+						}
 					}
 				}
 
 				params.mVertexBuffer->setBuffer(mask);
 				params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
 				gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
+				
+				// If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow).  Interleaving these state-changing calls could be expensive, but glow must be drawn Z-sorted with alpha.
+				if (draw_glow_for_this_partition &&
+				    params.mGlowColor.mV[3] > 0)
+				{
+					// install glow-accumulating blend mode
+					gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE, // don't touch color
+						      LLRender::BF_ONE, LLRender::BF_ONE); // add to alpha (glow)
 
+					// glow doesn't use vertex colors from the mesh data
+					params.mVertexBuffer->setBuffer(mask & ~LLVertexBuffer::MAP_COLOR);
+					glColor4ubv(params.mGlowColor.mV);
+
+					// do the actual drawing, again
+					params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
+					gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
+
+					// restore our alpha blend mode
+					gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
+				}
+			
 				if (params.mTextureMatrix && params.mTexture.notNull())
 				{
 					gGL.getTexUnit(0)->activate();
diff --git a/indra/newview/lldrawpoolalpha.h b/indra/newview/lldrawpoolalpha.h
index 0477093afab5a9576439d95fa462f50df32ba6a8..12a7ae92b12f9dbd60fd7dee206acf55776c8ae7 100644
--- a/indra/newview/lldrawpoolalpha.h
+++ b/indra/newview/lldrawpoolalpha.h
@@ -28,6 +28,7 @@
 #define LL_LLDRAWPOOLALPHA_H
 
 #include "lldrawpool.h"
+#include "llrender.h"
 #include "llframetimer.h"
 
 class LLFace;
@@ -77,6 +78,12 @@ private:
 	LLGLSLShader* target_shader;
 	LLGLSLShader* simple_shader;
 	LLGLSLShader* fullbright_shader;	
+
+	// our 'normal' alpha blend function for this pass
+	LLRender::eBlendFactor mColorSFactor;
+	LLRender::eBlendFactor mColorDFactor;	
+	LLRender::eBlendFactor mAlphaSFactor;
+	LLRender::eBlendFactor mAlphaDFactor;
 };
 
 class LLDrawPoolAlphaPostWater : public LLDrawPoolAlpha
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 600ffa492eadacc75e41d454665c7b856f2260c9..8cf4dc1b95d13dc905cb23ad0aba19e49da71a8e 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -117,7 +117,7 @@ void LLDrawPoolAvatar::prerender()
 	
 	if (sShaderLevel > 0)
 	{
-		sBufferUsage = GL_STATIC_DRAW_ARB;
+		sBufferUsage = GL_DYNAMIC_DRAW_ARB;
 	}
 	else
 	{
@@ -151,6 +151,8 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass)
 {
 	LLFastTimer t(FTM_RENDER_CHARACTERS);
 	
+	sSkipTransparent = TRUE;
+
 	if (LLPipeline::sImpostorRender)
 	{
 		beginDeferredSkinned();
@@ -175,6 +177,8 @@ void LLDrawPoolAvatar::endDeferredPass(S32 pass)
 {
 	LLFastTimer t(FTM_RENDER_CHARACTERS);
 
+	sSkipTransparent = FALSE;
+
 	if (LLPipeline::sImpostorRender)
 	{
 		endDeferredSkinned();
@@ -244,7 +248,6 @@ S32 LLDrawPoolAvatar::getNumShadowPasses()
 void LLDrawPoolAvatar::beginShadowPass(S32 pass)
 {
 	LLFastTimer t(FTM_SHADOW_AVATAR);
-	
 	sVertexProgram = &gDeferredAvatarShadowProgram;
 	if (sShaderLevel > 0)
 	{
@@ -266,7 +269,6 @@ void LLDrawPoolAvatar::beginShadowPass(S32 pass)
 void LLDrawPoolAvatar::endShadowPass(S32 pass)
 {
 	LLFastTimer t(FTM_SHADOW_AVATAR);
-
 	if (sShaderLevel > 0)
 	{
 		sRenderingSkinned = FALSE;
@@ -304,6 +306,11 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)
 		return;
 	}
 	
+	if (sShaderLevel > 0)
+	{
+		gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
+	}
+
 	avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
 
 }
@@ -340,7 +347,7 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass)
 	switch (pass)
 	{
 	case 0:
-		beginFootShadow();
+		beginImpostor();
 		break;
 	case 1:
 		beginRigid();
@@ -364,7 +371,7 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass)
 	switch (pass)
 	{
 	case 0:
-		endFootShadow();
+		endImpostor();
 		break;
 	case 1:
 		endRigid();
@@ -374,7 +381,7 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass)
 	}
 }
 
-void LLDrawPoolAvatar::beginFootShadow()
+void LLDrawPoolAvatar::beginImpostor()
 {
 	if (!LLPipeline::sReflectionRender)
 	{
@@ -386,7 +393,7 @@ void LLDrawPoolAvatar::beginFootShadow()
 	diffuse_channel = 0;
 }
 
-void LLDrawPoolAvatar::endFootShadow()
+void LLDrawPoolAvatar::endImpostor()
 {
 	gPipeline.enableLightsDynamic();
 }
@@ -558,7 +565,6 @@ void LLDrawPoolAvatar::endSkinned()
 
 void LLDrawPoolAvatar::beginDeferredSkinned()
 {
-	sSkipTransparent = TRUE;
 	sShaderLevel = mVertexShaderLevel;
 	sVertexProgram = &gDeferredAvatarProgram;
 
@@ -573,7 +579,6 @@ void LLDrawPoolAvatar::beginDeferredSkinned()
 
 void LLDrawPoolAvatar::endDeferredSkinned()
 {
-	sSkipTransparent = FALSE;
 	// if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done
 	sRenderingSkinned = FALSE;
 	disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
@@ -687,10 +692,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 			}
 			avatarp->renderImpostor(LLColor4U(255,255,255,255), diffuse_channel);
 		}
-		else if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FOOT_SHADOWS) && !LLPipeline::sRenderDeferred)
-		{
-			avatarp->renderFootShadows();	
-		}
 		return;
 	}
 
@@ -844,9 +845,7 @@ LLColor3 LLDrawPoolAvatar::getDebugColor() const
 
 LLVertexBufferAvatar::LLVertexBufferAvatar()
 : LLVertexBuffer(sDataMask, 
-	LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0 ?	
-	GL_DYNAMIC_DRAW_ARB : 
-	GL_STREAM_DRAW_ARB)
+	GL_STREAM_DRAW_ARB) //avatars are always stream draw due to morph targets
 {
 
 }
diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h
index 171152b72da512c776ed67d49c1265ed8ff7e231..c46fed824e411191eed83dda8bf016c060852114 100644
--- a/indra/newview/lldrawpoolavatar.h
+++ b/indra/newview/lldrawpoolavatar.h
@@ -82,11 +82,11 @@ public:
 	/*virtual*/ void renderShadow(S32 pass);
 
 	void beginRigid();
-	void beginFootShadow();
+	void beginImpostor();
 	void beginSkinned();
 		
 	void endRigid();
-	void endFootShadow();
+	void endImpostor();
 	void endSkinned();
 
 	void beginDeferredImpostor();
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 7c09826c9d4f9442e04958a75c91ad94561ebc19..223e4a438cedd6288018999349d8f3b981fda887 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -88,7 +88,16 @@ void LLStandardBumpmap::shutdown()
 // static 
 void LLStandardBumpmap::restoreGL()
 {
-	llassert( LLStandardBumpmap::sStandardBumpmapCount == 0 );
+	addstandard();
+}
+
+// static
+void LLStandardBumpmap::addstandard()
+{
+	// can't assert; we destroyGL and restoreGL a lot during *first* startup, which populates this list already, THEN we explicitly init the list as part of *normal* startup.  Sigh.  So clear the list every time before we (re-)add the standard bumpmaps.
+	//llassert( LLStandardBumpmap::sStandardBumpmapCount == 0 );
+	clear();
+	llinfos << "Adding standard bumpmaps." << llendl;
 	gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("None");		// BE_NO_BUMP
 	gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("Brightness");	// BE_BRIGHTNESS
 	gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("Darkness");	// BE_DARKNESS
@@ -151,8 +160,9 @@ void LLStandardBumpmap::restoreGL()
 }
 
 // static
-void LLStandardBumpmap::destroyGL()
+void LLStandardBumpmap::clear()
 {
+	llinfos << "Clearing standard bumpmaps." << llendl;
 	for( U32 i = 0; i < LLStandardBumpmap::sStandardBumpmapCount; i++ )
 	{
 		gStandardBumpmapList[i].mLabel.assign("");
@@ -161,6 +171,12 @@ void LLStandardBumpmap::destroyGL()
 	sStandardBumpmapCount = 0;
 }
 
+// static
+void LLStandardBumpmap::destroyGL()
+{
+	clear();
+}
+
 
 
 ////////////////////////////////////////////////////////////////
@@ -613,9 +629,9 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params, S32 channel)
 }
 
 //static
-void LLDrawPoolBump::beginBump()
+void LLDrawPoolBump::beginBump(U32 pass)
 {	
-	if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP))
+	if (!gPipeline.hasRenderBatches(pass))
 	{
 		return;
 	}
@@ -658,9 +674,9 @@ void LLDrawPoolBump::beginBump()
 }
 
 //static
-void LLDrawPoolBump::renderBump()
+void LLDrawPoolBump::renderBump(U32 pass)
 {
-	if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP))
+	if (!gPipeline.hasRenderBatches(pass))
 	{
 		return;
 	}
@@ -673,13 +689,13 @@ void LLDrawPoolBump::renderBump()
 	/// Get rid of z-fighting with non-bump pass.
 	LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
 	glPolygonOffset(-1.0f, -1.0f);
-	renderBump(LLRenderPass::PASS_BUMP, sVertexMask);
+	renderBump(pass, sVertexMask);
 }
 
 //static
-void LLDrawPoolBump::endBump()
+void LLDrawPoolBump::endBump(U32 pass)
 {
-	if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP))
+	if (!gPipeline.hasRenderBatches(pass))
 	{
 		return;
 	}
@@ -696,6 +712,18 @@ void LLDrawPoolBump::endBump()
 	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 }
 
+S32 LLDrawPoolBump::getNumDeferredPasses()
+{ 
+	if (gSavedSettings.getBOOL("RenderObjectBump"))
+	{
+		return 1;
+	}
+	else
+	{
+		return 0;
+	}
+}
+
 void LLDrawPoolBump::beginDeferredPass(S32 pass)
 {
 	if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP))
@@ -750,21 +778,45 @@ void LLDrawPoolBump::renderDeferred(S32 pass)
 
 void LLDrawPoolBump::beginPostDeferredPass(S32 pass)
 {
-	beginFullbrightShiny();
+	switch (pass)
+	{
+	case 0:
+		beginFullbrightShiny();
+		break;
+	case 1:
+		beginBump(LLRenderPass::PASS_POST_BUMP);
+		break;
+	}
 }
 
 void LLDrawPoolBump::endPostDeferredPass(S32 pass)
 {
-	endFullbrightShiny();
+	switch (pass)
+	{
+	case 0:
+		endFullbrightShiny();
+		break;
+	case 1:
+		endBump(LLRenderPass::PASS_POST_BUMP);
+		break;
+	}
 }
 
 void LLDrawPoolBump::renderPostDeferred(S32 pass)
 {
-	renderFullbrightShiny();
+	switch (pass)
+	{
+	case 0:
+		renderFullbrightShiny();
+		break;
+	case 1:
+		renderBump(LLRenderPass::PASS_POST_BUMP);
+		break;
+	}
 }
 
 ////////////////////////////////////////////////////////////////
-// List of one-component bump-maps created from other texures.
+// List of bump-maps created from other textures.
 
 
 //const LLUUID TEST_BUMP_ID("3d33eaf2-459c-6f97-fd76-5fce3fc29447");
@@ -777,24 +829,32 @@ void LLBumpImageList::init()
 	LLStandardBumpmap::init();
 }
 
-void LLBumpImageList::shutdown()
+void LLBumpImageList::clear()
 {
+	llinfos << "Clearing dynamic bumpmaps." << llendl;
+	// these will be re-populated on-demand
 	mBrightnessEntries.clear();
 	mDarknessEntries.clear();
+
+	LLStandardBumpmap::clear();
+}
+
+void LLBumpImageList::shutdown()
+{
+	clear();
 	LLStandardBumpmap::shutdown();
 }
 
 void LLBumpImageList::destroyGL()
 {
-	mBrightnessEntries.clear();
-	mDarknessEntries.clear();
+	clear();
 	LLStandardBumpmap::destroyGL();
 }
 
 void LLBumpImageList::restoreGL()
 {
-	// Images will be recreated as they are needed.
 	LLStandardBumpmap::restoreGL();
+	// Images will be recreated as they are needed.
 }
 
 
@@ -846,6 +906,7 @@ void LLBumpImageList::updateImages()
 			}
 		}
 	}
+	
 	for (bump_image_map_t::iterator iter = mDarknessEntries.begin(); iter != mDarknessEntries.end(); )
 	{
 		bump_image_map_t::iterator curiter = iter++;
@@ -998,8 +1059,8 @@ void LLBumpImageList::generateNormalMapFromAlpha(LLImageRaw* src, LLImageRaw* nr
 
 			LLVector3 right = LLVector3(norm_scale, 0, (F32) src_data[(j*resX+rX)*src_cmp+src_cmp-1]-cH);
 			LLVector3 left = LLVector3(-norm_scale, 0, (F32) src_data[(j*resX+lX)*src_cmp+src_cmp-1]-cH);
-			LLVector3 up = LLVector3(0, -norm_scale, (F32) src_data[(rY*resX+i)*src_cmp+src_cmp-1]-cH);
-			LLVector3 down = LLVector3(0, norm_scale, (F32) src_data[(lY*resX+i)*src_cmp+src_cmp-1]-cH);
+			LLVector3 up = LLVector3(0, -norm_scale, (F32) src_data[(lY*resX+i)*src_cmp+src_cmp-1]-cH);
+			LLVector3 down = LLVector3(0, norm_scale, (F32) src_data[(rY*resX+i)*src_cmp+src_cmp-1]-cH);
 
 			LLVector3 norm = right%down + down%left + left%up + up%right;
 		
@@ -1024,7 +1085,7 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI
 	{
 		bump_image_map_t& entries_list(bump_code == BE_BRIGHTNESS ? gBumpImageList.mBrightnessEntries : gBumpImageList.mDarknessEntries );
 		bump_image_map_t::iterator iter = entries_list.find(source_asset_id);
-		if (iter != entries_list.end())
+		if (iter != entries_list.end()) // bump not cached yet
 		{
 			LLPointer<LLImageRaw> dst_image = new LLImageRaw(src->getWidth(), src->getHeight(), 1);
 			U8* dst_data = dst_image->getData();
@@ -1109,8 +1170,8 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI
 				F32 twice_one_over_range = 2.f / (maximum - minimum);
 				S32 i;
 
-				const F32 ARTIFICIAL_SCALE = 2.f;  // Advantage: exagerates the effect in midrange.  Disadvantage: clamps at the extremes.
-				if( BE_DARKNESS == bump_code )
+				const F32 ARTIFICIAL_SCALE = 2.f;  // Advantage: exaggerates the effect in midrange.  Disadvantage: clamps at the extremes.
+				if (BE_DARKNESS == bump_code)
 				{
 					for( i = minimum; i <= maximum; i++ )
 					{
@@ -1120,7 +1181,6 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI
 				}
 				else
 				{
-					// BE_LIGHTNESS
 					for( i = minimum; i <= maximum; i++ )
 					{
 						F32 minus_one_to_one = F32(i - minimum) * twice_one_over_range - 1.f;
@@ -1135,9 +1195,9 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI
 			}
 
 			//---------------------------------------------------
-			//immediately assign bump to a global smart pointer in case some local smart pointer
-			//accidently releases it.
-			LLPointer<LLViewerTexture> bump = LLViewerTextureManager::getLocalTexture( TRUE);
+			// immediately assign bump to a global smart pointer in case some local smart pointer
+			// accidentally releases it.
+			LLPointer<LLViewerTexture> bump = LLViewerTextureManager::getLocalTexture( TRUE );
 			
 			if (!LLPipeline::sRenderDeferred)
 			{
@@ -1146,8 +1206,8 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI
 			}
 			else
 			{
-				LLPointer<LLImageRaw> nrm_image = new LLImageRaw(src->getWidth(), src->getHeight(), 4);
-				generateNormalMapFromAlpha(src, nrm_image);
+				LLPointer<LLImageRaw> nrm_image = new LLImageRaw(dst_image->getWidth(), dst_image->getHeight(), 4);
+				generateNormalMapFromAlpha(dst_image, nrm_image);
 				bump->setExplicitFormat(GL_RGBA, GL_RGBA);
 				bump->createGLTexture(0, nrm_image);
 			}
diff --git a/indra/newview/lldrawpoolbump.h b/indra/newview/lldrawpoolbump.h
index d9c5e6ce870fc19ed07ff79cb29f7ae87a09289d..65a813ab9482c123defb5314ccd996176564e23f 100644
--- a/indra/newview/lldrawpoolbump.h
+++ b/indra/newview/lldrawpoolbump.h
@@ -69,16 +69,16 @@ public:
 	void renderFullbrightShiny();
 	void endFullbrightShiny();
 
-	void beginBump();
-	void renderBump();
-	void endBump();
+	void beginBump(U32 pass = LLRenderPass::PASS_BUMP);
+	void renderBump(U32 pass = LLRenderPass::PASS_BUMP);
+	void endBump(U32 pass = LLRenderPass::PASS_BUMP);
 
-	virtual S32 getNumDeferredPasses() { return 1; }
+	virtual S32 getNumDeferredPasses();
 	/*virtual*/ void beginDeferredPass(S32 pass);
 	/*virtual*/ void endDeferredPass(S32 pass);
 	/*virtual*/ void renderDeferred(S32 pass);
 
-	virtual S32 getNumPostDeferredPasses() { return 1; }
+	virtual S32 getNumPostDeferredPasses() { return 2; }
 	/*virtual*/ void beginPostDeferredPass(S32 pass);
 	/*virtual*/ void endPostDeferredPass(S32 pass);
 	/*virtual*/ void renderPostDeferred(S32 pass);
@@ -109,9 +109,12 @@ public:
 
 	static	U32 sStandardBumpmapCount;  // Number of valid values in gStandardBumpmapList[]
 
+	static void clear();
+	static void addstandard();
+
 	static void init();
 	static void shutdown();
-	static void	restoreGL();
+	static void restoreGL();
 	static void destroyGL();
 };
 
@@ -130,6 +133,7 @@ public:
 
 	void		init();
 	void		shutdown();
+	void            clear();
 	void		destroyGL();
 	void		restoreGL();
 	void		updateImages();
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
index 2c1430b83401954d912f5877b1acc76a4299ab08..2e83167851d7abd61941c00da7889d5a386dc7c7 100644
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -49,6 +49,10 @@ void LLDrawPoolGlow::render(S32 pass)
 	LLFastTimer t(FTM_RENDER_GLOW);
 	LLGLEnable blend(GL_BLEND);
 	LLGLDisable test(GL_ALPHA_TEST);
+	gGL.flush();
+	/// Get rid of z-fighting with non-glow pass.
+	LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
+	glPolygonOffset(-1.0f, -1.0f);
 	gGL.setSceneBlendType(LLRender::BT_ADD);
 	
 	U32 shader_level = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT);
@@ -141,7 +145,8 @@ void LLDrawPoolSimple::render(S32 pass)
 		renderTexture(LLRenderPass::PASS_SIMPLE, getVertexDataMask());
 
 		if (LLPipeline::sRenderDeferred)
-		{
+		{ //if deferred rendering is enabled, bump faces aren't registered as simple
+			//render bump faces here as simple so bump faces will appear under water
 			renderTexture(LLRenderPass::PASS_BUMP, getVertexDataMask());
 		}
 	}
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 466cb4709e0ddc5be8751a74101cc74f5d465d6c..ed35546ca31e911165b685818dda4a5114a699fb 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -161,12 +161,19 @@ void LLViewerDynamicTexture::postRender(BOOL success)
 			{
 				generateGLTexture() ;
 			}
-			if(!mGLTexturep->getHasGLTexture())
+			else if(!mGLTexturep->getHasGLTexture())
+			{
+				generateGLTexture() ;
+			}			
+			else if(mGLTexturep->getDiscardLevel() != 0)//do not know how it happens, but regenerate one if it does.
 			{
 				generateGLTexture() ;
 			}
-			llcallstacks << "class type: " << (S32)getType() << llcallstacksendl ;
 
+			if(gGLManager.mDebugGPU)
+			{
+				LLGLState::dumpStates() ;
+			}
 			success = mGLTexturep->setSubImageFromFrameBuffer(0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight);
 		}
 	}
@@ -205,11 +212,16 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
 		{
 			LLViewerDynamicTexture *dynamicTexture = *iter;
 			if (dynamicTexture->needsRender())
-			{
+			{				
+				if(gGLManager.mDebugGPU)
+				{				
+					llinfos << "class type: " << (S32)dynamicTexture->getType() << llendl;
+					LLGLState::dumpStates() ;
+				}
+
 				glClear(GL_DEPTH_BUFFER_BIT);
 				gDepthDirty = TRUE;
-				
-				
+								
 				gGL.color4f(1,1,1,1);
 				dynamicTexture->preRender();	// Must be called outside of startRender()
 				result = FALSE;
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 80cf99fc43d7c4e3d604530ee5ed975ea441242d..f0c2469977d35e1f1160ea62c82721ece9fb9031 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -28,6 +28,7 @@
 #include "llexpandabletextbox.h"
 
 #include "llscrollcontainer.h"
+#include "lltrans.h"
 #include "llwindow.h"
 #include "llviewerwindow.h"
 
@@ -111,7 +112,7 @@ LLExpandableTextBox::LLTextBoxEx::Params::Params()
 
 LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
 :	LLTextEditor(p),
-	mExpanderLabel(p.label),
+	mExpanderLabel(p.label.isProvided() ? p.label : LLTrans::getString("More")),
 	mExpanderVisible(false)
 {
 	setIsChrome(TRUE);
@@ -134,13 +135,7 @@ void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,cons
 	// LLTextBox::setText will obliterate the expander segment, so make sure
 	// we generate it again by clearing mExpanderVisible
 	mExpanderVisible = false;
-
-	// Workaround for EXT-8259: trim text before rendering it.
-	{
-		std::string trimmed_text(text);
-		LLStringUtil::trim(trimmed_text);
-		LLTextEditor::setText(trimmed_text, input_params);
-	}
+	LLTextEditor::setText(text, input_params);
 
 	// text contents have changed, segments are cleared out
 	// so hide the expander and determine if we need it
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index e0e7fb464794b39e67bf69a5ae985c68c98c0f45..defd882fe44f2ca00e36878573dfef0426a41b2b 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -856,6 +856,26 @@ void LLFace::updateRebuildFlags()
 	}
 }
 
+
+bool LLFace::canRenderAsMask()
+{
+	const LLTextureEntry* te = getTextureEntry();
+	return (
+		(
+		 (LLPipeline::sRenderDeferred && LLPipeline::sAutoMaskAlphaDeferred) ||
+		 
+		 (!LLPipeline::sRenderDeferred && LLPipeline::sAutoMaskAlphaNonDeferred)		 
+		 ) // do we want masks at all?
+		&&
+		(te->getColor().mV[3] == 1.0f) && // can't treat as mask if we have face alpha
+		!(LLPipeline::sRenderDeferred && te->getFullbright()) && // hack: alpha masking renders fullbright faces invisible in deferred rendering mode, need to figure out why - for now, avoid
+		(te->getGlow() == 0.f) && // glowing masks are hard to implement - don't mask
+
+		getTexture()->getIsAlphaMask() // texture actually qualifies for masking (lazily recalculated but expensive)
+		);
+}
+
+
 static LLFastTimer::DeclareTimer FTM_FACE_GET_GEOM("Face Geom");
 
 BOOL LLFace::getGeometryVolume(const LLVolume& volume,
@@ -1386,24 +1406,13 @@ F32 LLFace::getTextureVirtualSize()
 		face_area =  mPixelArea / llclamp(texel_area, 0.015625f, 128.f);
 	}
 
-	if(face_area > LLViewerTexture::sMaxSmallImageSize)
+	face_area = LLFace::adjustPixelArea(mImportanceToCamera, face_area) ;
+	if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping.
 	{
-		if(mImportanceToCamera < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res.
-		{
-			static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ;
-			face_area = llmin(face_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ;
-		}
-		else if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping.
-		{
-			if(mImportanceToCamera < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res.
-			{
-				face_area = LLViewerTexture::sMinLargeImageSize ;
-			}	
-			else if(mTexture.notNull() && mTexture->isLargeImage())
-			{		
-				face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius );
-			}			
-		}
+		if(mImportanceToCamera > LEAST_IMPORTANCE_FOR_LARGE_IMAGE && mTexture.notNull() && mTexture->isLargeImage())
+		{		
+			face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius );
+		}	
 	}
 
 	setVirtualSize(face_area) ;
@@ -1530,6 +1539,28 @@ F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist)
 	return importance ;
 }
 
+//static 
+F32 LLFace::adjustPixelArea(F32 importance, F32 pixel_area)
+{
+	if(pixel_area > LLViewerTexture::sMaxSmallImageSize)
+	{
+		if(importance < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res.
+		{
+			static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ;
+			pixel_area = llmin(pixel_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ;
+		}
+		else if(pixel_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping.
+		{
+			if(importance < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res.
+			{
+				pixel_area = LLViewerTexture::sMinLargeImageSize ;
+			}				
+		}
+	}
+
+	return pixel_area ;
+}
+
 BOOL LLFace::verify(const U32* indices_array) const
 {
 	BOOL ok = TRUE;
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 351d48a671995222523fa00071060db925f82cc2..d95057f3ef374657b33e4b718d49d4908f846e6a 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -132,10 +132,10 @@ public:
 	void			unsetFaceColor(); // switch back to material color
 	const LLColor4&	getFaceColor() const { return mFaceColor; } 
 	const LLColor4& getRenderColor() const;
-	
 
 	//for volumes
 	void updateRebuildFlags();
+	bool canRenderAsMask(); // logic helper
 	BOOL getGeometryVolume(const LLVolume& volume,
 						const S32 &f,
 						const LLMatrix4& mat_vert, const LLMatrix3& mat_normal,
@@ -207,7 +207,8 @@ private:
 	F32         adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius );
 	BOOL        calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ;
 public:
-	static F32  calcImportanceToCamera(F32 to_view_dir, F32 dist);
+	static F32 calcImportanceToCamera(F32 to_view_dir, F32 dist);
+	static F32 adjustPixelArea(F32 importance, F32 pixel_area) ;
 
 public:
 	
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 8e0b348037c5e207bf3e0a5c3d0d2dbfb54cfaf8..deebd69ec102be55808eb047daf07f6481bb7c2f 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -155,27 +155,27 @@ LLFloaterAnimPreview::LLFloaterAnimPreview(const std::string& filename) :
 //-----------------------------------------------------------------------------
 void LLFloaterAnimPreview::setAnimCallbacks()
 {
-	childSetCommitCallback("playback_slider", onSliderMove, this);
+	getChild<LLUICtrl>("playback_slider")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onSliderMove, this));
 	
-	childSetCommitCallback("preview_base_anim", onCommitBaseAnim, this);
-	childSetValue("preview_base_anim", "Standing");
+	getChild<LLUICtrl>("preview_base_anim")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitBaseAnim, this));
+	getChild<LLUICtrl>("preview_base_anim")->setValue("Standing");
 
-	childSetCommitCallback("priority", onCommitPriority, this);
-	childSetCommitCallback("loop_check", onCommitLoop, this);
-	childSetCommitCallback("loop_in_point", onCommitLoopIn, this);
-	childSetValidate("loop_in_point", boost::bind(&LLFloaterAnimPreview::validateLoopIn, this, _1));
-	childSetCommitCallback("loop_out_point", onCommitLoopOut, this);
-	childSetValidate("loop_out_point", boost::bind(&LLFloaterAnimPreview::validateLoopOut, this, _1));
+	getChild<LLUICtrl>("priority")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitPriority, this));
+	getChild<LLUICtrl>("loop_check")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoop, this));
+	getChild<LLUICtrl>("loop_in_point")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoopIn, this));
+	getChild<LLUICtrl>("loop_in_point")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateLoopIn, this, _1));
+	getChild<LLUICtrl>("loop_out_point")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoopOut, this));
+	getChild<LLUICtrl>("loop_out_point")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateLoopOut, this, _1));
 
-	childSetCommitCallback("hand_pose_combo", onCommitHandPose, this);
+	getChild<LLUICtrl>("hand_pose_combo")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitHandPose, this));
 	
-	childSetCommitCallback("emote_combo", onCommitEmote, this);
-	childSetValue("emote_combo", "[None]");
+	getChild<LLUICtrl>("emote_combo")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEmote, this));
+	getChild<LLUICtrl>("emote_combo")->setValue("[None]");
 
-	childSetCommitCallback("ease_in_time", onCommitEaseIn, this);
-	childSetValidate("ease_in_time", boost::bind(&LLFloaterAnimPreview::validateEaseIn, this, _1));
-	childSetCommitCallback("ease_out_time", onCommitEaseOut, this);
-	childSetValidate("ease_out_time", boost::bind(&LLFloaterAnimPreview::validateEaseOut, this, _1));
+	getChild<LLUICtrl>("ease_in_time")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEaseIn, this));
+	getChild<LLUICtrl>("ease_in_time")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateEaseIn, this, _1));
+	getChild<LLUICtrl>("ease_out_time")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEaseOut, this));
+	getChild<LLUICtrl>("ease_out_time")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateEaseOut, this, _1));
 }
 
 //-----------------------------------------------------------------------------
@@ -191,7 +191,7 @@ BOOL LLFloaterAnimPreview::postBuild()
 		return FALSE;
 	}
 
-	childSetCommitCallback("name_form", onCommitName, this);
+	getChild<LLUICtrl>("name_form")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitName, this));
 
 	childSetAction("ok_btn", onBtnOK, this);
 	setDefaultBtn();
@@ -203,17 +203,17 @@ BOOL LLFloaterAnimPreview::postBuild()
 	mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f);
 
 	mPlayButton = getChild<LLButton>( "play_btn");
-	mPlayButton->setClickedCallback(onBtnPlay, this);
+	mPlayButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnPlay, this));
 	mPlayButton->setVisible(true);
 
 	mPauseButton = getChild<LLButton>( "pause_btn");
-	mPauseButton->setClickedCallback(onBtnPause, this);
+	mPauseButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnPause, this));
 	mPauseButton->setVisible(false);
 	
 	mStopButton = getChild<LLButton>( "stop_btn");
-	mStopButton->setClickedCallback(onBtnStop, this);
+	mStopButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnStop, this));
 
-	childHide("bad_animation_text");
+	getChildView("bad_animation_text")->setVisible(FALSE);
 
 	std::string exten = gDirUtilp->getExtension(mFilename);
 	if (exten == "bvh")
@@ -305,19 +305,19 @@ BOOL LLFloaterAnimPreview::postBuild()
 		
 			mAnimPreview->setZoom(camera_zoom);
 
-			motionp->setName(childGetValue("name_form").asString());
+			motionp->setName(getChild<LLUICtrl>("name_form")->getValue().asString());
 			mAnimPreview->getDummyAvatar()->startMotion(mMotionID);
 			
 			getChild<LLSlider>("playback_slider")->setMinValue(0.0);
 			getChild<LLSlider>("playback_slider")->setMaxValue(1.0);
 
-			childSetValue("loop_check", LLSD(motionp->getLoop()));
-			childSetValue("loop_in_point", LLSD(motionp->getLoopIn() / motionp->getDuration() * 100.f));
-			childSetValue("loop_out_point", LLSD(motionp->getLoopOut() / motionp->getDuration() * 100.f));
-			childSetValue("priority", LLSD((F32)motionp->getPriority()));
-			childSetValue("hand_pose_combo", LLHandMotion::getHandPoseName(motionp->getHandPose()));
-			childSetValue("ease_in_time", LLSD(motionp->getEaseInDuration()));
-			childSetValue("ease_out_time", LLSD(motionp->getEaseOutDuration()));
+			getChild<LLUICtrl>("loop_check")->setValue(LLSD(motionp->getLoop()));
+			getChild<LLUICtrl>("loop_in_point")->setValue(LLSD(motionp->getLoopIn() / motionp->getDuration() * 100.f));
+			getChild<LLUICtrl>("loop_out_point")->setValue(LLSD(motionp->getLoopOut() / motionp->getDuration() * 100.f));
+			getChild<LLUICtrl>("priority")->setValue(LLSD((F32)motionp->getPriority()));
+			getChild<LLUICtrl>("hand_pose_combo")->setValue(LLHandMotion::getHandPoseName(motionp->getHandPose()));
+			getChild<LLUICtrl>("ease_in_time")->setValue(LLSD(motionp->getEaseInDuration()));
+			getChild<LLUICtrl>("ease_out_time")->setValue(LLSD(motionp->getEaseOutDuration()));
 			setEnabled(TRUE);
 			std::string seconds_string;
 			seconds_string = llformat(" - %.2f seconds", motionp->getDuration());
@@ -328,7 +328,7 @@ BOOL LLFloaterAnimPreview::postBuild()
 		{
 			mAnimPreview = NULL;
 			mMotionID.setNull();
-			childSetValue("bad_animation_text", getString("failed_to_initialize"));
+			getChild<LLUICtrl>("bad_animation_text")->setValue(getString("failed_to_initialize"));
 		}
 	}
 	else
@@ -340,13 +340,13 @@ BOOL LLFloaterAnimPreview::postBuild()
 				LLUIString out_str = getString("anim_too_long");
 				out_str.setArg("[LENGTH]", llformat("%.1f", loaderp->getDuration()));
 				out_str.setArg("[MAX_LENGTH]", llformat("%.1f", MAX_ANIM_DURATION));
-				childSetValue("bad_animation_text", out_str.getString());
+				getChild<LLUICtrl>("bad_animation_text")->setValue(out_str.getString());
 			}
 			else
 			{
 				LLUIString out_str = getString("failed_file_read");
 				out_str.setArg("[STATUS]", getString(STATUS[loaderp->getStatus()])); 
-				childSetValue("bad_animation_text", out_str.getString());
+				getChild<LLUICtrl>("bad_animation_text")->setValue(out_str.getString());
 			}
 		}
 
@@ -423,17 +423,17 @@ void LLFloaterAnimPreview::resetMotion()
 	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 	
 	// Set emotion
-	std::string emote = childGetValue("emote_combo").asString();
+	std::string emote = getChild<LLUICtrl>("emote_combo")->getValue().asString();
 	motionp->setEmote(mIDList[emote]);
 	
-	LLUUID base_id = mIDList[childGetValue("preview_base_anim").asString()];
+	LLUUID base_id = mIDList[getChild<LLUICtrl>("preview_base_anim")->getValue().asString()];
 	avatarp->deactivateAllMotions();
 	avatarp->startMotion(mMotionID, 0.0f);
 	avatarp->startMotion(base_id, BASE_ANIM_TIME_OFFSET);
-	childSetValue("playback_slider", 0.0f);
+	getChild<LLUICtrl>("playback_slider")->setValue(0.0f);
 
 	// Set pose
-	std::string handpose = childGetValue("hand_pose_combo").asString();
+	std::string handpose = getChild<LLUICtrl>("hand_pose_combo")->getValue().asString();
 	avatarp->startMotion( ANIM_AGENT_HAND_MOTION, 0.0f );
 	motionp->setHandPose(LLHandMotion::getHandPose(handpose));
 
@@ -552,24 +552,23 @@ void LLFloaterAnimPreview::onMouseCaptureLost()
 //-----------------------------------------------------------------------------
 // onBtnPlay()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onBtnPlay(void* user_data)
+void LLFloaterAnimPreview::onBtnPlay()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	if (previewp->mMotionID.notNull() && previewp->mAnimPreview)
+	if (mMotionID.notNull() && mAnimPreview)
 	{
-		LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
+		LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
 		
-		if (!avatarp->isMotionActive(previewp->mMotionID))
+		if (!avatarp->isMotionActive(mMotionID))
 		{
-			previewp->resetMotion();
-			previewp->mPauseRequest = NULL;
+			resetMotion();
+			mPauseRequest = NULL;
 		}
 		else if (avatarp->areAnimationsPaused())
 		{			
-			previewp->mPauseRequest = NULL;
+			mPauseRequest = NULL;
 		}
 	}
 }
@@ -577,21 +576,20 @@ void LLFloaterAnimPreview::onBtnPlay(void* user_data)
 //-----------------------------------------------------------------------------
 // onBtnPause()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onBtnPause(void* user_data)
+void LLFloaterAnimPreview::onBtnPause()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 	
-	if (previewp->mMotionID.notNull() && previewp->mAnimPreview)
+	if (mMotionID.notNull() && mAnimPreview)
 	{
-		LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
+		LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
 
-		if (avatarp->isMotionActive(previewp->mMotionID))
+		if (avatarp->isMotionActive(mMotionID))
 		{
 			if (!avatarp->areAnimationsPaused())
 			{
-				previewp->mPauseRequest = avatarp->requestPause();
+				mPauseRequest = avatarp->requestPause();
 			}
 		}
 	}
@@ -600,42 +598,40 @@ void LLFloaterAnimPreview::onBtnPause(void* user_data)
 //-----------------------------------------------------------------------------
 // onBtnStop()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onBtnStop(void* user_data)
+void LLFloaterAnimPreview::onBtnStop()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	if (previewp->mMotionID.notNull() && previewp->mAnimPreview)
+	if (mMotionID.notNull() && mAnimPreview)
 	{
-		LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-		previewp->resetMotion();
-		previewp->mPauseRequest = avatarp->requestPause();
+		LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+		resetMotion();
+		mPauseRequest = avatarp->requestPause();
 	}
 }
 
 //-----------------------------------------------------------------------------
 // onSliderMove()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onSliderMove(LLUICtrl* ctrl, void*user_data)
+void LLFloaterAnimPreview::onSliderMove()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	if (previewp->mAnimPreview)
+	if (mAnimPreview)
 	{
-		LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-		F32 slider_value = (F32)previewp->childGetValue("playback_slider").asReal();
-		LLUUID base_id = previewp->mIDList[previewp->childGetValue("preview_base_anim").asString()];
-		LLMotion* motionp = avatarp->findMotion(previewp->mMotionID);
+		LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+		F32 slider_value = (F32)getChild<LLUICtrl>("playback_slider")->getValue().asReal();
+		LLUUID base_id = mIDList[getChild<LLUICtrl>("preview_base_anim")->getValue().asString()];
+		LLMotion* motionp = avatarp->findMotion(mMotionID);
 		F32 duration = motionp->getDuration();// + motionp->getEaseOutDuration();
 		F32 delta_time = duration * slider_value;
 		avatarp->deactivateAllMotions();
 		avatarp->startMotion(base_id, delta_time + BASE_ANIM_TIME_OFFSET);
-		avatarp->startMotion(previewp->mMotionID, delta_time);
-		previewp->mPauseRequest = avatarp->requestPause();
-		previewp->refresh();
+		avatarp->startMotion(mMotionID, delta_time);
+		mPauseRequest = avatarp->requestPause();
+		refresh();
 	}
 
 }
@@ -643,29 +639,28 @@ void LLFloaterAnimPreview::onSliderMove(LLUICtrl* ctrl, void*user_data)
 //-----------------------------------------------------------------------------
 // onCommitBaseAnim()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitBaseAnim(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitBaseAnim()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	if (previewp->mAnimPreview)
+	if (mAnimPreview)
 	{
-		LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
+		LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
 
 		BOOL paused = avatarp->areAnimationsPaused();
 
 		// stop all other possible base motions
-		avatarp->stopMotion(previewp->mIDList["Standing"], TRUE);
-		avatarp->stopMotion(previewp->mIDList["Walking"], TRUE);
-		avatarp->stopMotion(previewp->mIDList["Sitting"], TRUE);
-		avatarp->stopMotion(previewp->mIDList["Flying"], TRUE);
+		avatarp->stopMotion(mIDList["Standing"], TRUE);
+		avatarp->stopMotion(mIDList["Walking"], TRUE);
+		avatarp->stopMotion(mIDList["Sitting"], TRUE);
+		avatarp->stopMotion(mIDList["Flying"], TRUE);
 
-		previewp->resetMotion();
+		resetMotion();
 
 		if (!paused)
 		{
-			previewp->mPauseRequest = NULL;
+			mPauseRequest = NULL;
 		}
 	}
 }
@@ -673,154 +668,145 @@ void LLFloaterAnimPreview::onCommitBaseAnim(LLUICtrl* ctrl, void* data)
 //-----------------------------------------------------------------------------
 // onCommitLoop()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitLoop(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitLoop()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 	
-	LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID);
+	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 
 	if (motionp)
 	{
-		motionp->setLoop(previewp->childGetValue("loop_check").asBoolean());
-		motionp->setLoopIn((F32)previewp->childGetValue("loop_in_point").asReal() * 0.01f * motionp->getDuration());
-		motionp->setLoopOut((F32)previewp->childGetValue("loop_out_point").asReal() * 0.01f * motionp->getDuration());
+		motionp->setLoop(getChild<LLUICtrl>("loop_check")->getValue().asBoolean());
+		motionp->setLoopIn((F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal() * 0.01f * motionp->getDuration());
+		motionp->setLoopOut((F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal() * 0.01f * motionp->getDuration());
 	}
 }
 
 //-----------------------------------------------------------------------------
 // onCommitLoopIn()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitLoopIn(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitLoopIn()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID);
+	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 
 	if (motionp)
 	{
-		motionp->setLoopIn((F32)previewp->childGetValue("loop_in_point").asReal() / 100.f);
-		previewp->resetMotion();
-		previewp->childSetValue("loop_check", LLSD(TRUE));
-		onCommitLoop(ctrl, data);
+		motionp->setLoopIn((F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal() / 100.f);
+		resetMotion();
+		getChild<LLUICtrl>("loop_check")->setValue(LLSD(TRUE));
+		onCommitLoop();
 	}
 }
 
 //-----------------------------------------------------------------------------
 // onCommitLoopOut()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitLoopOut(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitLoopOut()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID);
+	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 
 	if (motionp)
 	{
-		motionp->setLoopOut((F32)previewp->childGetValue("loop_out_point").asReal() * 0.01f * motionp->getDuration());
-		previewp->resetMotion();
-		previewp->childSetValue("loop_check", LLSD(TRUE));
-		onCommitLoop(ctrl, data);
+		motionp->setLoopOut((F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal() * 0.01f * motionp->getDuration());
+		resetMotion();
+		getChild<LLUICtrl>("loop_check")->setValue(LLSD(TRUE));
+		onCommitLoop();
 	}
 }
 
 //-----------------------------------------------------------------------------
 // onCommitName()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitName(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitName()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID);
+	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 
 	if (motionp)
 	{
-		motionp->setName(previewp->childGetValue("name_form").asString());
+		motionp->setName(getChild<LLUICtrl>("name_form")->getValue().asString());
 	}
 
-	previewp->doCommit();
+	doCommit();
 }
 
 //-----------------------------------------------------------------------------
 // onCommitHandPose()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitHandPose(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitHandPose()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	previewp->resetMotion(); // sets hand pose
+	resetMotion(); // sets hand pose
 }
 
 //-----------------------------------------------------------------------------
 // onCommitEmote()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitEmote(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitEmote()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	previewp->resetMotion(); // ssts emote
+	resetMotion(); // ssts emote
 }
 
 //-----------------------------------------------------------------------------
 // onCommitPriority()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitPriority(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitPriority()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID);
+	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 
-	motionp->setPriority(llfloor((F32)previewp->childGetValue("priority").asReal()));
+	motionp->setPriority(llfloor((F32)getChild<LLUICtrl>("priority")->getValue().asReal()));
 }
 
 //-----------------------------------------------------------------------------
 // onCommitEaseIn()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitEaseIn(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitEaseIn()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID);
+	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 
-	motionp->setEaseIn((F32)previewp->childGetValue("ease_in_time").asReal());
-	previewp->resetMotion();
+	motionp->setEaseIn((F32)getChild<LLUICtrl>("ease_in_time")->getValue().asReal());
+	resetMotion();
 }
 
 //-----------------------------------------------------------------------------
 // onCommitEaseOut()
 //-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onCommitEaseOut(LLUICtrl* ctrl, void* data)
+void LLFloaterAnimPreview::onCommitEaseOut()
 {
-	LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data;
-	if (!previewp->getEnabled())
+	if (!getEnabled())
 		return;
 
-	LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar();
-	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID);
+	LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
+	LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID);
 
-	motionp->setEaseOut((F32)previewp->childGetValue("ease_out_time").asReal());
-	previewp->resetMotion();
+	motionp->setEaseOut((F32)getChild<LLUICtrl>("ease_out_time")->getValue().asReal());
+	resetMotion();
 }
 
 //-----------------------------------------------------------------------------
@@ -836,8 +822,8 @@ bool LLFloaterAnimPreview::validateEaseIn(const LLSD& data)
 	
 	if (!motionp->getLoop())
 	{
-		F32 new_ease_in = llclamp((F32)childGetValue("ease_in_time").asReal(), 0.f, motionp->getDuration() - motionp->getEaseOutDuration());
-		childSetValue("ease_in_time", LLSD(new_ease_in));
+		F32 new_ease_in = llclamp((F32)getChild<LLUICtrl>("ease_in_time")->getValue().asReal(), 0.f, motionp->getDuration() - motionp->getEaseOutDuration());
+		getChild<LLUICtrl>("ease_in_time")->setValue(LLSD(new_ease_in));
 	}
 	
 	return true;
@@ -856,8 +842,8 @@ bool LLFloaterAnimPreview::validateEaseOut(const LLSD& data)
 	
 	if (!motionp->getLoop())
 	{
-		F32 new_ease_out = llclamp((F32)childGetValue("ease_out_time").asReal(), 0.f, motionp->getDuration() - motionp->getEaseInDuration());
-		childSetValue("ease_out_time", LLSD(new_ease_out));
+		F32 new_ease_out = llclamp((F32)getChild<LLUICtrl>("ease_out_time")->getValue().asReal(), 0.f, motionp->getDuration() - motionp->getEaseInDuration());
+		getChild<LLUICtrl>("ease_out_time")->setValue(LLSD(new_ease_out));
 	}
 
 	return true;
@@ -871,8 +857,8 @@ bool LLFloaterAnimPreview::validateLoopIn(const LLSD& data)
 	if (!getEnabled())
 		return false;
 
-	F32 loop_in_value = (F32)childGetValue("loop_in_point").asReal();
-	F32 loop_out_value = (F32)childGetValue("loop_out_point").asReal();
+	F32 loop_in_value = (F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal();
+	F32 loop_out_value = (F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal();
 
 	if (loop_in_value < 0.f)
 	{
@@ -887,7 +873,7 @@ bool LLFloaterAnimPreview::validateLoopIn(const LLSD& data)
 		loop_in_value = loop_out_value;
 	}
 
-	childSetValue("loop_in_point", LLSD(loop_in_value));
+	getChild<LLUICtrl>("loop_in_point")->setValue(LLSD(loop_in_value));
 	return true;
 }
 
@@ -899,8 +885,8 @@ bool LLFloaterAnimPreview::validateLoopOut(const LLSD& data)
 	if (!getEnabled())
 		return false;
 
-	F32 loop_out_value = (F32)childGetValue("loop_out_point").asReal();
-	F32 loop_in_value = (F32)childGetValue("loop_in_point").asReal();
+	F32 loop_out_value = (F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal();
+	F32 loop_in_value = (F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal();
 
 	if (loop_out_value < 0.f)
 	{
@@ -915,7 +901,7 @@ bool LLFloaterAnimPreview::validateLoopOut(const LLSD& data)
 		loop_out_value = loop_in_value;
 	}
 
-	childSetValue("loop_out_point", LLSD(loop_out_value));
+	getChild<LLUICtrl>("loop_out_point")->setValue(LLSD(loop_out_value));
 	return true;
 }
 
@@ -929,15 +915,15 @@ void LLFloaterAnimPreview::refresh()
 	bool show_play = true;
 	if (!mAnimPreview)
 	{
-		childShow("bad_animation_text");
+		getChildView("bad_animation_text")->setVisible(TRUE);
 		// play button visible but disabled
 		mPlayButton->setEnabled(FALSE);
 		mStopButton->setEnabled(FALSE);
-		childDisable("ok_btn");
+		getChildView("ok_btn")->setEnabled(FALSE);
 	}
 	else
 	{
-		childHide("bad_animation_text");
+		getChildView("bad_animation_text")->setVisible(FALSE);
 		// re-enabled in case previous animation was bad
 		mPlayButton->setEnabled(TRUE);
 		mStopButton->setEnabled(TRUE);
@@ -952,7 +938,7 @@ void LLFloaterAnimPreview::refresh()
 				if (motionp)
 				{
 					F32 fraction_complete = motionp->getLastUpdateTime() / motionp->getDuration();
-					childSetValue("playback_slider", fraction_complete);
+					getChild<LLUICtrl>("playback_slider")->setValue(fraction_complete);
 				}
 				show_play = false;
 			}
@@ -962,7 +948,7 @@ void LLFloaterAnimPreview::refresh()
 			// Motion just finished playing
 			mPauseRequest = avatarp->requestPause();
 		}
-		childEnable("ok_btn");
+		getChildView("ok_btn")->setEnabled(TRUE);
 		mAnimPreview->requestUpdate();
 	}
 	mPlayButton->setVisible(show_play);
@@ -993,8 +979,8 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata)
 			file.setMaxSize(size);
 			if (file.write((U8*)buffer, size))
 			{
-				std::string name = floaterp->childGetValue("name_form").asString();
-				std::string desc = floaterp->childGetValue("description_form").asString();
+				std::string name = floaterp->getChild<LLUICtrl>("name_form")->getValue().asString();
+				std::string desc = floaterp->getChild<LLUICtrl>("description_form")->getValue().asString();
 				LLAssetStorage::LLStoreAssetCallback callback = NULL;
 				S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
 				void *userdata = NULL;
diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloateranimpreview.h
index 80d4716ff2949f1a2b07e64b9c77fad37774a23b..f1ffb6547f2aabd3e1bf610013a1eaaa7c5b4a51 100644
--- a/indra/newview/llfloateranimpreview.h
+++ b/indra/newview/llfloateranimpreview.h
@@ -83,22 +83,22 @@ public:
 
 	void refresh();
 
-	static void	onBtnPlay(void*);
-	static void	onBtnPause(void*);	
-	static void	onBtnStop(void*);
-	static void onSliderMove(LLUICtrl*, void*);
-	static void onCommitBaseAnim(LLUICtrl*, void*);
-	static void onCommitLoop(LLUICtrl*, void*);
-	static void onCommitLoopIn(LLUICtrl*, void*);
-	static void onCommitLoopOut(LLUICtrl*, void*);
+	void onBtnPlay();
+	void onBtnPause();	
+	void onBtnStop();
+	void onSliderMove();
+	void onCommitBaseAnim();
+	void onCommitLoop();
+	void onCommitLoopIn();
+	void onCommitLoopOut();
 	bool validateLoopIn(const LLSD& data);
 	bool validateLoopOut(const LLSD& data);
-	static void onCommitName(LLUICtrl*, void*);
-	static void onCommitHandPose(LLUICtrl*, void*);
-	static void onCommitEmote(LLUICtrl*, void*);
-	static void onCommitPriority(LLUICtrl*, void*);
-	static void onCommitEaseIn(LLUICtrl*, void*);
-	static void onCommitEaseOut(LLUICtrl*, void*);
+	void onCommitName();
+	void onCommitHandPose();
+	void onCommitEmote();
+	void onCommitPriority();
+	void onCommitEaseIn();
+	void onCommitEaseOut();
 	bool validateEaseIn(const LLSD& data);
 	bool validateEaseOut(const LLSD& data);
 	static void	onBtnOK(void*);
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index 04611a33c087021afc7dd6d6d206454635608590..5cab770c42b3047b5517f806513db975b6c2c92c 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -109,20 +109,20 @@ void LLFloaterAuction::initialize()
 		mParcelID = parcelp->getLocalID();
 		mParcelUpdateCapUrl = region->getCapability("ParcelPropertiesUpdate");
 
-		childSetText("parcel_text", parcelp->getName());
-		childEnable("snapshot_btn");
-		childEnable("reset_parcel_btn");
-		childEnable("start_auction_btn");
+		getChild<LLUICtrl>("parcel_text")->setValue(parcelp->getName());
+		getChildView("snapshot_btn")->setEnabled(TRUE);
+		getChildView("reset_parcel_btn")->setEnabled(TRUE);
+		getChildView("start_auction_btn")->setEnabled(TRUE);
 
 		LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
 		if (panel)
 		{	// Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet
 			U32 estate_id = panel->getEstateID();
-			childSetEnabled("sell_to_anyone_btn", (estate_id == ESTATE_TEEN || estate_id == 0));
+			getChildView("sell_to_anyone_btn")->setEnabled((estate_id == ESTATE_TEEN || estate_id == 0));
 		}
 		else
 		{	// Don't have the panel up, so don't know if we're on the teen grid or not.  Default to enabling it
-			childEnable("sell_to_anyone_btn");
+			getChildView("sell_to_anyone_btn")->setEnabled(TRUE);
 		}
 	}
 	else
@@ -130,17 +130,17 @@ void LLFloaterAuction::initialize()
 		mParcelHost.invalidate();
 		if(parcelp && parcelp->getForSale())
 		{
-			childSetText("parcel_text", getString("already for sale"));
+			getChild<LLUICtrl>("parcel_text")->setValue(getString("already for sale"));
 		}
 		else
 		{
-			childSetText("parcel_text", LLStringUtil::null);
+			getChild<LLUICtrl>("parcel_text")->setValue(LLStringUtil::null);
 		}
 		mParcelID = -1;
-		childSetEnabled("snapshot_btn", false);
-		childSetEnabled("reset_parcel_btn", false);
-		childSetEnabled("sell_to_anyone_btn", false);
-		childSetEnabled("start_auction_btn", false);
+		getChildView("snapshot_btn")->setEnabled(false);
+		getChildView("reset_parcel_btn")->setEnabled(false);
+		getChildView("sell_to_anyone_btn")->setEnabled(false);
+		getChildView("start_auction_btn")->setEnabled(false);
 	}
 
 	mImageID.setNull();
@@ -153,9 +153,10 @@ void LLFloaterAuction::draw()
 
 	if(!isMinimized() && mImage.notNull()) 
 	{
-		LLRect rect;
-		if (childGetRect("snapshot_icon", rect))
+		LLView* snapshot_icon = findChildView("snapshot_icon");
+		if (snapshot_icon)
 		{
+			LLRect rect = snapshot_icon->getRect();
 			{
 				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 				gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f));
@@ -182,7 +183,7 @@ void LLFloaterAuction::onClickSnapshot(void* data)
 
 	LLPointer<LLImageRaw> raw = new LLImageRaw;
 
-	gForceRenderLandFence = self->childGetValue("fence_check").asBoolean();
+	gForceRenderLandFence = self->getChild<LLUICtrl>("fence_check")->getValue().asBoolean();
 	BOOL success = gViewerWindow->rawSnapshot(raw,
 											  gViewerWindow->getWindowWidthScaled(),
 											  gViewerWindow->getWindowHeightScaled(),
@@ -230,7 +231,7 @@ void LLFloaterAuction::onClickStartAuction(void* data)
 
 	if(self->mImageID.notNull())
 	{
-		LLSD parcel_name = self->childGetValue("parcel_text");
+		LLSD parcel_name = self->getChild<LLUICtrl>("parcel_text")->getValue();
 
 	// create the asset
 		std::string* name = new std::string(parcel_name.asString());
@@ -339,7 +340,7 @@ void LLFloaterAuction::doResetParcel()
 
 		std::string new_name(parcel_name.str().c_str());
 		body["name"] = new_name;
-		childSetText("parcel_text", new_name);	// Set name in dialog as well, since it won't get updated otherwise
+		getChild<LLUICtrl>("parcel_text")->setValue(new_name);	// Set name in dialog as well, since it won't get updated otherwise
 
 		body["sale_price"] = (S32) 0;
 		body["description"] = empty;
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 501cf4ce9915935303f0bd99b0f88ccaf036c4c4..9391c761b72381ce727ca67a8e650637437a231c 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -88,14 +88,14 @@ BOOL LLFloaterAvatarPicker::postBuild()
 	getChild<LLLineEditor>("Edit")->setKeystrokeCallback( boost::bind(&LLFloaterAvatarPicker::editKeystroke, this, _1, _2),NULL);
 
 	childSetAction("Find", boost::bind(&LLFloaterAvatarPicker::onBtnFind, this));
-	childDisable("Find");
+	getChildView("Find")->setEnabled(FALSE);
 	childSetAction("Refresh", boost::bind(&LLFloaterAvatarPicker::onBtnRefresh, this));
 	getChild<LLUICtrl>("near_me_range")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onRangeAdjust, this));
 	
 	LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>("SearchResults");
 	searchresults->setDoubleClickCallback( boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
 	searchresults->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
-	childDisable("SearchResults");
+	getChildView("SearchResults")->setEnabled(FALSE);
 	
 	LLScrollListCtrl* nearme = getChild<LLScrollListCtrl>("NearMe");
 	nearme->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
@@ -106,10 +106,10 @@ BOOL LLFloaterAvatarPicker::postBuild()
 	getChild<LLUICtrl>("Friends")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
 
 	childSetAction("ok_btn", boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
-	childDisable("ok_btn");
+	getChildView("ok_btn")->setEnabled(FALSE);
 	childSetAction("cancel_btn", boost::bind(&LLFloaterAvatarPicker::onBtnClose, this));
 
-	childSetFocus("Edit");
+	getChild<LLUICtrl>("Edit")->setFocus(TRUE);
 
 	LLPanel* search_panel = getChild<LLPanel>("SearchPanel");
 	if (search_panel)
@@ -139,7 +139,7 @@ void LLFloaterAvatarPicker::setOkBtnEnableCb(validate_callback_t cb)
 
 void LLFloaterAvatarPicker::onTabChanged()
 {
-	childSetEnabled("ok_btn", isSelectBtnEnabled());
+	getChildView("ok_btn")->setEnabled(isSelectBtnEnabled());
 }
 
 // Destroys the object
@@ -178,7 +178,7 @@ void LLFloaterAvatarPicker::onBtnSelect()
 	{
 		std::string acvtive_panel_name;
 		LLScrollListCtrl* list =  NULL;
-		LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs");
+		LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
 		if(active_panel)
 		{
 			acvtive_panel_name = active_panel->getName();
@@ -233,7 +233,7 @@ void LLFloaterAvatarPicker::onRangeAdjust()
 
 void LLFloaterAvatarPicker::onList()
 {
-	childSetEnabled("ok_btn", isSelectBtnEnabled());
+	getChildView("ok_btn")->setEnabled(isSelectBtnEnabled());
 }
 
 void LLFloaterAvatarPicker::populateNearMe()
@@ -267,14 +267,14 @@ void LLFloaterAvatarPicker::populateNearMe()
 
 	if (empty)
 	{
-		childDisable("NearMe");
-		childDisable("ok_btn");
+		getChildView("NearMe")->setEnabled(FALSE);
+		getChildView("ok_btn")->setEnabled(FALSE);
 		near_me_scroller->setCommentText(getString("no_one_near"));
 	}
 	else 
 	{
-		childEnable("NearMe");
-		childEnable("ok_btn");
+		getChildView("NearMe")->setEnabled(TRUE);
+		getChildView("ok_btn")->setEnabled(TRUE);
 		near_me_scroller->selectFirstItem();
 		onList();
 		near_me_scroller->setFocus(TRUE);
@@ -321,7 +321,7 @@ void LLFloaterAvatarPicker::draw()
 	}
 
 	LLFloater::draw();
-	if (!mNearMeListComplete && childGetVisibleTab("ResidentChooserTabs") == getChild<LLPanel>("NearMePanel"))
+	if (!mNearMeListComplete && getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel() == getChild<LLPanel>("NearMePanel"))
 	{
 		populateNearMe();
 	}
@@ -329,7 +329,7 @@ void LLFloaterAvatarPicker::draw()
 
 BOOL LLFloaterAvatarPicker::visibleItemsSelected() const
 {
-	LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs");
+	LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
 
 	if(active_panel == getChild<LLPanel>("SearchPanel"))
 	{
@@ -348,7 +348,7 @@ BOOL LLFloaterAvatarPicker::visibleItemsSelected() const
 
 void LLFloaterAvatarPicker::find()
 {
-	std::string text = childGetValue("Edit").asString();
+	std::string text = getChild<LLUICtrl>("Edit")->getValue().asString();
 
 	mQueryID.generate();
 
@@ -367,7 +367,7 @@ void LLFloaterAvatarPicker::find()
 	getChild<LLScrollListCtrl>("SearchResults")->deleteAllItems();
 	getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("searching"));
 	
-	childSetEnabled("ok_btn", FALSE);
+	getChildView("ok_btn")->setEnabled(FALSE);
 	mNumResultsReturned = 0;
 }
 
@@ -382,7 +382,7 @@ LLScrollListCtrl* LLFloaterAvatarPicker::getActiveList()
 {
 	std::string acvtive_panel_name;
 	LLScrollListCtrl* list = NULL;
-	LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs");
+	LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
 	if(active_panel)
 	{
 		acvtive_panel_name = active_panel->getName();
@@ -496,10 +496,10 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 		if (avatar_id.isNull())
 		{
 			LLStringUtil::format_map_t map;
-			map["[TEXT]"] = floater->childGetText("Edit");
+			map["[TEXT]"] = floater->getChild<LLUICtrl>("Edit")->getValue().asString();
 			avatar_name = floater->getString("not_found", map);
 			search_results->setEnabled(FALSE);
-			floater->childDisable("ok_btn");
+			floater->getChildView("ok_btn")->setEnabled(FALSE);
 		}
 		else
 		{
@@ -515,7 +515,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 
 	if (found_one)
 	{
-		floater->childEnable("ok_btn");
+		floater->getChildView("ok_btn")->setEnabled(TRUE);
 		search_results->selectFirstItem();
 		floater->onList();
 		search_results->setFocus(TRUE);
@@ -525,7 +525,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 //static
 void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data)
 {
-	childSetEnabled("Find", caller->getText().size() >= 3);
+	getChildView("Find")->setEnabled(caller->getText().size() >= 3);
 }
 
 // virtual
@@ -533,7 +533,7 @@ BOOL LLFloaterAvatarPicker::handleKeyHere(KEY key, MASK mask)
 {
 	if (key == KEY_RETURN && mask == MASK_NONE)
 	{
-		if (childHasFocus("Edit"))
+		if (getChild<LLUICtrl>("Edit")->hasFocus())
 		{
 			onBtnFind();
 		}
@@ -560,7 +560,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()
 	{
 		std::string acvtive_panel_name;
 		LLScrollListCtrl* list =  NULL;
-		LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs");
+		LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
 
 		if(active_panel)
 		{
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index 616383f1a5e511915e0c815390a4a023ad2efef9..32add5773710c11503e20353ea7c0fe50e045cee 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -56,8 +56,8 @@ LLFloaterBuy::LLFloaterBuy(const LLSD& key)
 
 BOOL LLFloaterBuy::postBuild()
 {
-	childDisable("object_list");
-	childDisable("item_list");
+	getChildView("object_list")->setEnabled(FALSE);
+	getChildView("item_list")->setEnabled(FALSE);
 
 	getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuy::onClickCancel, this));
 	getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuy::onClickBuy, this));
@@ -177,8 +177,8 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
 	// Add after columns added so appropriate heights are correct.
 	object_list->addElement(row);
 
-	floater->childSetTextArg("buy_text", "[AMOUNT]", llformat("%d", sale_info.getSalePrice()));
-	floater->childSetTextArg("buy_text", "[NAME]", owner_name);
+	floater->getChild<LLUICtrl>("buy_text")->setTextArg("[AMOUNT]", llformat("%d", sale_info.getSalePrice()));
+	floater->getChild<LLUICtrl>("buy_text")->setTextArg("[NAME]", owner_name);
 
 	// Must do this after the floater is created, because
 	// sometimes the inventory is already there and 
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 405d318720c83579f2d6205461e94c007f1998ec..77fb5590dfac0635b071bd77bc149906eeabc72b 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -63,9 +63,9 @@ BOOL LLFloaterBuyContents::postBuild()
 	getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuyContents::onClickCancel, this));
 	getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyContents::onClickBuy, this));
 
-	childDisable("item_list");
-	childDisable("buy_btn");
-	childDisable("wear_check");
+	getChildView("item_list")->setEnabled(FALSE);
+	getChildView("buy_btn")->setEnabled(FALSE);
+	getChildView("wear_check")->setEnabled(FALSE);
 
 	setDefaultBtn("cancel_btn"); // to avoid accidental buy (SL-43130)
 
@@ -123,9 +123,9 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info)
 		gCacheName->getGroupName(owner_id, owner_name);
 	}
 
-	floater->childSetTextArg("contains_text", "[NAME]", node->mName);
-	floater->childSetTextArg("buy_text", "[AMOUNT]", llformat("%d", sale_info.getSalePrice()));
-	floater->childSetTextArg("buy_text", "[NAME]", owner_name);
+	floater->getChild<LLUICtrl>("contains_text")->setTextArg("[NAME]", node->mName);
+	floater->getChild<LLUICtrl>("buy_text")->setTextArg("[AMOUNT]", llformat("%d", sale_info.getSalePrice()));
+	floater->getChild<LLUICtrl>("buy_text")->setTextArg("[NAME]", owner_name);
 
 	// Must do this after the floater is created, because
 	// sometimes the inventory is already there and 
@@ -163,7 +163,7 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
 	}
 
 	// default to turning off the buy button.
-	childDisable("buy_btn");
+	getChildView("buy_btn")->setEnabled(FALSE);
 
 	LLUUID owner_id;
 	BOOL is_group_owned;
@@ -204,7 +204,7 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
 
 		// There will be at least one item shown in the display, so go
 		// ahead and enable the buy button.
-		childEnable("buy_btn");
+		getChildView("buy_btn")->setEnabled(TRUE);
 
 		// Create the line in the list
 		LLSD row;
@@ -250,8 +250,8 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
 
 	if (wearable_count > 0)
 	{
-		childEnable("wear_check");
-		childSetValue("wear_check", LLSD(false) );
+		getChildView("wear_check")->setEnabled(TRUE);
+		getChild<LLUICtrl>("wear_check")->setValue(LLSD(false) );
 	}
 	
 	removeVOInventoryListener();
@@ -262,7 +262,7 @@ void LLFloaterBuyContents::onClickBuy()
 {
 	// Make sure this wasn't selected through other mechanisms 
 	// (ie, being the default button and pressing enter.
-	if(!childIsEnabled("buy_btn"))
+	if(!getChildView("buy_btn")->getEnabled())
 	{
 		// We shouldn't be enabled.  Just close.
 		closeFloater();
@@ -270,7 +270,7 @@ void LLFloaterBuyContents::onClickBuy()
 	}
 
 	// We may want to wear this item
-	if (childGetValue("wear_check"))
+	if (getChild<LLUICtrl>("wear_check")->getValue())
 	{
 		LLInventoryState::sWearNewClothing = TRUE;
 	}
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
index 35020d84e218522dc590c89a7923a668f8063b08..58c79fdf151b10350cb293c69815168f17832c97 100644
--- a/indra/newview/llfloaterbuycurrency.cpp
+++ b/indra/newview/llfloaterbuycurrency.cpp
@@ -156,7 +156,7 @@ void LLFloaterBuyCurrencyUI::draw()
 	}
 
 	// disable the Buy button when we are not able to buy
-	childSetEnabled("buy_btn", mManager.canBuy());
+	getChildView("buy_btn")->setEnabled(mManager.canBuy());
 
 	LLFloater::draw();
 }
@@ -172,27 +172,27 @@ void LLFloaterBuyCurrencyUI::updateUI()
 	mManager.updateUI(!hasError && !mManager.buying());
 
 	// hide most widgets - we'll turn them on as needed next
-	childHide("info_buying");
-	childHide("info_cannot_buy");
-	childHide("info_need_more");	
-	childHide("purchase_warning_repurchase");
-	childHide("purchase_warning_notenough");
-	childHide("contacting");
-	childHide("buy_action");
+	getChildView("info_buying")->setVisible(FALSE);
+	getChildView("info_cannot_buy")->setVisible(FALSE);
+	getChildView("info_need_more")->setVisible(FALSE);	
+	getChildView("purchase_warning_repurchase")->setVisible(FALSE);
+	getChildView("purchase_warning_notenough")->setVisible(FALSE);
+	getChildView("contacting")->setVisible(FALSE);
+	getChildView("buy_action")->setVisible(FALSE);
 
 	if (hasError)
 	{
 		// display an error from the server
-		childHide("normal_background");
-		childShow("error_background");
-		childShow("info_cannot_buy");
-		childShow("cannot_buy_message");
-		childHide("balance_label");
-		childHide("balance_amount");
-		childHide("buying_label");
-		childHide("buying_amount");
-		childHide("total_label");
-		childHide("total_amount");
+		getChildView("normal_background")->setVisible(FALSE);
+		getChildView("error_background")->setVisible(TRUE);
+		getChildView("info_cannot_buy")->setVisible(TRUE);
+		getChildView("cannot_buy_message")->setVisible(TRUE);
+		getChildView("balance_label")->setVisible(FALSE);
+		getChildView("balance_amount")->setVisible(FALSE);
+		getChildView("buying_label")->setVisible(FALSE);
+		getChildView("buying_amount")->setVisible(FALSE);
+		getChildView("total_label")->setVisible(FALSE);
+		getChildView("total_amount")->setVisible(FALSE);
 
         LLTextBox* message = getChild<LLTextBox>("cannot_buy_message");
         if (message)
@@ -200,67 +200,67 @@ void LLFloaterBuyCurrencyUI::updateUI()
 			message->setText(mManager.errorMessage());
 		}
 
-		childSetVisible("error_web", !mManager.errorURI().empty());
+		getChildView("error_web")->setVisible( !mManager.errorURI().empty());
 	}
 	else
 	{
 		// display the main Buy L$ interface
-		childShow("normal_background");
-		childHide("error_background");
-		childHide("cannot_buy_message");
-		childHide("error_web");
+		getChildView("normal_background")->setVisible(TRUE);
+		getChildView("error_background")->setVisible(FALSE);
+		getChildView("cannot_buy_message")->setVisible(FALSE);
+		getChildView("error_web")->setVisible(FALSE);
 
 		if (mHasTarget)
 		{
-			childShow("info_need_more");
+			getChildView("info_need_more")->setVisible(TRUE);
 		}
 		else
 		{
-			childShow("info_buying");
+			getChildView("info_buying")->setVisible(TRUE);
 		}
 
 		if (mManager.buying())
 		{
-			childSetVisible("contacting", true);
+			getChildView("contacting")->setVisible( true);
 		}
 		else
 		{
 			if (mHasTarget)
 			{
-				childSetVisible("buy_action", true);
-				childSetTextArg("buy_action", "[ACTION]", mTargetName);
+				getChildView("buy_action")->setVisible( true);
+				getChild<LLUICtrl>("buy_action")->setTextArg("[ACTION]", mTargetName);
 			}
 		}
 		
 		S32 balance = gStatusBar->getBalance();
-		childShow("balance_label");
-		childShow("balance_amount");
-		childSetTextArg("balance_amount", "[AMT]", llformat("%d", balance));
+		getChildView("balance_label")->setVisible(TRUE);
+		getChildView("balance_amount")->setVisible(TRUE);
+		getChild<LLUICtrl>("balance_amount")->setTextArg("[AMT]", llformat("%d", balance));
 		
 		S32 buying = mManager.getAmount();
-		childShow("buying_label");
-		childShow("buying_amount");
-		childSetTextArg("buying_amount", "[AMT]", llformat("%d", buying));
+		getChildView("buying_label")->setVisible(TRUE);
+		getChildView("buying_amount")->setVisible(TRUE);
+		getChild<LLUICtrl>("buying_amount")->setTextArg("[AMT]", llformat("%d", buying));
 		
 		S32 total = balance + buying;
-		childShow("total_label");
-		childShow("total_amount");
-		childSetTextArg("total_amount", "[AMT]", llformat("%d", total));
+		getChildView("total_label")->setVisible(TRUE);
+		getChildView("total_amount")->setVisible(TRUE);
+		getChild<LLUICtrl>("total_amount")->setTextArg("[AMT]", llformat("%d", total));
 
 		if (mHasTarget)
 		{
 			if (total >= mTargetPrice)
 			{
-				childSetVisible("purchase_warning_repurchase", true);
+				getChildView("purchase_warning_repurchase")->setVisible( true);
 			}
 			else
 			{
-				childSetVisible("purchase_warning_notenough", true);
+				getChildView("purchase_warning_notenough")->setVisible( true);
 			}
 		}
 	}
 
-	childSetVisible("getting_data", !mManager.canBuy() && !hasError);
+	getChildView("getting_data")->setVisible( !mManager.canBuy() && !hasError);
 }
 
 void LLFloaterBuyCurrencyUI::onClickBuy()
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 3f9d1dc8e889cffa5f6885651a2ae7c09ced13e3..69824b3843459a83775774359d247057a906b931 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -726,7 +726,7 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password)
 		return;
 	}
 	
-	BOOL remove_contribution = childGetValue("remove_contribution").asBoolean();
+	BOOL remove_contribution = getChild<LLUICtrl>("remove_contribution")->getValue().asBoolean();
 	mParcelBuyInfo = LLViewerParcelMgr::getInstance()->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(),
 						gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution);
 
@@ -1020,13 +1020,13 @@ void LLFloaterBuyLandUI::refreshUI()
 		
 		if (mParcelValid)
 		{
-			childSetText("info_parcel", mParcelLocation);
+			getChild<LLUICtrl>("info_parcel")->setValue(mParcelLocation);
 
 			LLStringUtil::format_map_t string_args;
 			string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea);
 			string_args["[AMOUNT2]"] = llformat("%d", mParcelSupportedObjects);
 		
-			childSetText("info_size", getString("meters_supports_object", string_args));
+			getChild<LLUICtrl>("info_size")->setValue(getString("meters_supports_object", string_args));
 
 			F32 cost_per_sqm = 0.0f;
 			if (mParcelActualArea > 0)
@@ -1045,17 +1045,17 @@ void LLFloaterBuyLandUI::refreshUI()
 			{
 				info_price_args["[SOLD_WITH_OBJECTS]"] = getString("sold_without_objects");
 			}
-			childSetText("info_price", getString("info_price_string", info_price_args));
-			childSetVisible("info_price", mParcelIsForSale);
+			getChild<LLUICtrl>("info_price")->setValue(getString("info_price_string", info_price_args));
+			getChildView("info_price")->setVisible( mParcelIsForSale);
 		}
 		else
 		{
-			childSetText("info_parcel", getString("no_parcel_selected"));
-			childSetText("info_size", LLStringUtil::null);
-			childSetText("info_price", LLStringUtil::null);
+			getChild<LLUICtrl>("info_parcel")->setValue(getString("no_parcel_selected"));
+			getChild<LLUICtrl>("info_size")->setValue(LLStringUtil::null);
+			getChild<LLUICtrl>("info_price")->setValue(LLStringUtil::null);
 		}
 		
-		childSetText("info_action",
+		getChild<LLUICtrl>("info_action")->setValue(
 			mCanBuy
 				?
 					mIsForGroup
@@ -1086,14 +1086,13 @@ void LLFloaterBuyLandUI::refreshUI()
 			message->setValue(LLSD(!mCanBuy ? mCannotBuyReason : "(waiting for data)"));
 		}
 
-		childSetVisible("error_web", 
-				mCannotBuyIsError && !mCannotBuyURI.empty());
+		getChildView("error_web")->setVisible(mCannotBuyIsError && !mCannotBuyURI.empty());
 	}
 	else
 	{
-		childHide("step_error");
-		childHide("error_message");
-		childHide("error_web");
+		getChildView("step_error")->setVisible(FALSE);
+		getChildView("error_message")->setVisible(FALSE);
+		getChildView("error_web")->setVisible(FALSE);
 	}
 	
 	
@@ -1104,8 +1103,8 @@ void LLFloaterBuyLandUI::refreshUI()
 			mSiteMembershipUpgrade
 				? LLViewChildren::BADGE_NOTE
 				: LLViewChildren::BADGE_OK);
-		childSetText("account_action", mSiteMembershipAction);
-		childSetText("account_reason", 
+		getChild<LLUICtrl>("account_action")->setValue(mSiteMembershipAction);
+		getChild<LLUICtrl>("account_reason")->setValue( 
 			mSiteMembershipUpgrade
 				?	getString("must_upgrade")
 				:	getString("cant_own_land")
@@ -1128,16 +1127,16 @@ void LLFloaterBuyLandUI::refreshUI()
 			levels->setCurrentByIndex(mUserPlanChoice);
 		}
 
-		childShow("step_1");
-		childShow("account_action");
-		childShow("account_reason");
+		getChildView("step_1")->setVisible(TRUE);
+		getChildView("account_action")->setVisible(TRUE);
+		getChildView("account_reason")->setVisible(TRUE);
 	}
 	else
 	{
-		childHide("step_1");
-		childHide("account_action");
-		childHide("account_reason");
-		childHide("account_level");
+		getChildView("step_1")->setVisible(FALSE);
+		getChildView("account_action")->setVisible(FALSE);
+		getChildView("account_reason")->setVisible(FALSE);
+		getChildView("account_level")->setVisible(FALSE);
 	}
 	
 	// section two: land use fees
@@ -1147,7 +1146,7 @@ void LLFloaterBuyLandUI::refreshUI()
 			mSiteLandUseUpgrade
 				? LLViewChildren::BADGE_NOTE
 				: LLViewChildren::BADGE_OK);
-		childSetText("land_use_action", mSiteLandUseAction);
+		getChild<LLUICtrl>("land_use_action")->setValue(mSiteLandUseAction);
 		
 		std::string message;
 		
@@ -1193,17 +1192,17 @@ void LLFloaterBuyLandUI::refreshUI()
 			}
 		}
 
-		childSetValue("land_use_reason", message);
+		getChild<LLUICtrl>("land_use_reason")->setValue(message);
 
-		childShow("step_2");
-		childShow("land_use_action");
-		childShow("land_use_reason");
+		getChildView("step_2")->setVisible(TRUE);
+		getChildView("land_use_action")->setVisible(TRUE);
+		getChildView("land_use_reason")->setVisible(TRUE);
 	}
 	else
 	{
-		childHide("step_2");
-		childHide("land_use_action");
-		childHide("land_use_reason");
+		getChildView("step_2")->setVisible(FALSE);
+		getChildView("land_use_action")->setVisible(FALSE);
+		getChildView("land_use_reason")->setVisible(FALSE);
 	}
 	
 	// section three: purchase & currency
@@ -1227,8 +1226,8 @@ void LLFloaterBuyLandUI::refreshUI()
 		LLStringUtil::format_map_t string_args;
 		string_args["[AMOUNT]"] = llformat("%d", mParcelPrice);
 		string_args["[SELLER]"] = mParcelSellerName;
-		childSetText("purchase_action", getString("pay_to_for_land", string_args));
-		childSetVisible("purchase_action", mParcelValid);
+		getChild<LLUICtrl>("purchase_action")->setValue(getString("pay_to_for_land", string_args));
+		getChildView("purchase_action")->setVisible( mParcelValid);
 		
 		std::string reasonString;
 
@@ -1237,7 +1236,7 @@ void LLFloaterBuyLandUI::refreshUI()
 			LLStringUtil::format_map_t string_args;
 			string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
 
-			childSetText("currency_reason", getString("have_enough_lindens", string_args));
+			getChild<LLUICtrl>("currency_reason")->setValue(getString("have_enough_lindens", string_args));
 		}
 		else
 		{
@@ -1245,9 +1244,9 @@ void LLFloaterBuyLandUI::refreshUI()
 			string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
 			string_args["[AMOUNT2]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
 			
-			childSetText("currency_reason", getString("not_enough_lindens", string_args));
+			getChild<LLUICtrl>("currency_reason")->setValue(getString("not_enough_lindens", string_args));
 
-			childSetTextArg("currency_est", "[LOCAL_AMOUNT]", mCurrency.getLocalEstimate());
+			getChild<LLUICtrl>("currency_est")->setTextArg("[LOCAL_AMOUNT]", mCurrency.getLocalEstimate());
 		}
 		
 		if (willHaveEnough)
@@ -1255,7 +1254,7 @@ void LLFloaterBuyLandUI::refreshUI()
 			LLStringUtil::format_map_t string_args;
 			string_args["[AMOUNT]"] = llformat("%d", finalBalance);
 
-			childSetText("currency_balance", getString("balance_left", string_args));
+			getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_left", string_args));
 
 		}
 		else
@@ -1263,30 +1262,30 @@ void LLFloaterBuyLandUI::refreshUI()
 			LLStringUtil::format_map_t string_args;
 			string_args["[AMOUNT]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
 	
-			childSetText("currency_balance", getString("balance_needed", string_args));
+			getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_needed", string_args));
 			
 		}
 
-		childSetValue("remove_contribution", LLSD(groupContributionEnough));
-		childSetEnabled("remove_contribution", groupContributionEnough);
+		getChild<LLUICtrl>("remove_contribution")->setValue(LLSD(groupContributionEnough));
+		getChildView("remove_contribution")->setEnabled(groupContributionEnough);
 		bool showRemoveContribution = mParcelIsGroupLand
 							&& (mParcelGroupContribution > 0);
-		childSetLabelArg("remove_contribution", "[AMOUNT]",
+		getChildView("remove_contribution")->setLabelArg("[AMOUNT]",
 							llformat("%d", minContribution));
-		childSetVisible("remove_contribution", showRemoveContribution);
+		getChildView("remove_contribution")->setVisible( showRemoveContribution);
 
-		childShow("step_3");
-		childShow("purchase_action");
-		childShow("currency_reason");
-		childShow("currency_balance");
+		getChildView("step_3")->setVisible(TRUE);
+		getChildView("purchase_action")->setVisible(TRUE);
+		getChildView("currency_reason")->setVisible(TRUE);
+		getChildView("currency_balance")->setVisible(TRUE);
 	}
 	else
 	{
-		childHide("step_3");
-		childHide("purchase_action");
-		childHide("currency_reason");
-		childHide("currency_balance");
-		childHide("remove_group_donation");
+		getChildView("step_3")->setVisible(FALSE);
+		getChildView("purchase_action")->setVisible(FALSE);
+		getChildView("currency_reason")->setVisible(FALSE);
+		getChildView("currency_balance")->setVisible(FALSE);
+		getChildView("remove_group_donation")->setVisible(FALSE);
 	}
 
 
@@ -1297,8 +1296,7 @@ void LLFloaterBuyLandUI::refreshUI()
 	    agrees_to_covenant = check->get();
 	}
 
-	childSetEnabled("buy_btn",
-		mCanBuy  &&  mSiteValid  &&  willHaveEnough  &&  !mTransaction && agrees_to_covenant);
+	getChildView("buy_btn")->setEnabled(mCanBuy  &&  mSiteValid  &&  willHaveEnough  &&  !mTransaction && agrees_to_covenant);
 }
 
 void LLFloaterBuyLandUI::startBuyPreConfirm()
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index 24fba61315151a8499f970258af6d0ff73fa8833..d4067452b08057247448766ac5fe598fc56e1404 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -56,6 +56,7 @@ const F32 CAMERA_BUTTON_DELAY = 0.0f;
 #define CONTROLS "controls"
 
 bool LLFloaterCamera::sFreeCamera = false;
+bool LLFloaterCamera::sAppearanceEditing = false;
 
 // Zoom the camera in and out
 class LLPanelCameraZoom
@@ -119,10 +120,15 @@ LLPanelCameraItem::LLPanelCameraItem(const LLPanelCameraItem::Params& p)
 	}
 }
 
+void set_view_visible(LLView* parent, const std::string& name, bool visible)
+{
+	parent->getChildView(name)->setVisible(visible);
+}
+
 BOOL LLPanelCameraItem::postBuild()
 {
-	setMouseEnterCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", true));
-	setMouseLeaveCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", false));
+	setMouseEnterCallback(boost::bind(set_view_visible, this, "hovered_icon", true));
+	setMouseLeaveCallback(boost::bind(set_view_visible, this, "hovered_icon", false));
 	setMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this));
 	setRightMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this));
 	return TRUE;
@@ -137,9 +143,9 @@ void LLPanelCameraItem::setValue(const LLSD& value)
 {
 	if (!value.isMap()) return;;
 	if (!value.has("selected")) return;
-	childSetVisible("selected_icon", value["selected"]);
-	childSetVisible("picture", !value["selected"]);
-	childSetVisible("selected_picture", value["selected"]);
+	getChildView("selected_icon")->setVisible( value["selected"]);
+	getChildView("picture")->setVisible( !value["selected"]);
+	getChildView("selected_picture")->setVisible( value["selected"]);
 }
 
 static LLRegisterPanelClassWrapper<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel");
@@ -237,6 +243,25 @@ void LLFloaterCamera::resetCameraMode()
 	floater_camera->switchMode(CAMERA_CTRL_MODE_PAN);
 }
 
+void LLFloaterCamera::onAvatarEditingAppearance(bool editing)
+{
+	sAppearanceEditing = editing;
+	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
+	if (!floater_camera) return;
+	floater_camera->handleAvatarEditingAppearance(editing);
+}
+
+void LLFloaterCamera::handleAvatarEditingAppearance(bool editing)
+{
+	//camera presets (rear, front, etc.)
+	getChildView("preset_views_list")->setEnabled(!editing);
+	getChildView("presets_btn")->setEnabled(!editing);
+
+	//camera modes (object view, mouselook view)
+	getChildView("camera_modes_list")->setEnabled(!editing);
+	getChildView("avatarview_btn")->setEnabled(!editing);
+}
+
 void LLFloaterCamera::update()
 {
 	ECameraControlMode mode = determineMode();
@@ -329,6 +354,9 @@ BOOL LLFloaterCamera::postBuild()
 
 	update();
 
+	// ensure that appearance mode is handled while building. See EXT-7796.
+	handleAvatarEditingAppearance(sAppearanceEditing);
+
 	return LLDockableFloater::postBuild();
 }
 
@@ -351,6 +379,12 @@ void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* pane
 
 ECameraControlMode LLFloaterCamera::determineMode()
 {
+	if (sAppearanceEditing)
+	{
+		// this is the only enabled camera mode while editing agent appearance.
+		return CAMERA_CTRL_MODE_PAN;
+	}
+
 	LLTool* curr_tool = LLToolMgr::getInstance()->getCurrentTool();
 	if (curr_tool == LLToolCamera::getInstance())
 	{
@@ -464,15 +498,15 @@ void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::stri
 
 void LLFloaterCamera::updateState()
 {
-	childSetVisible(ZOOM, CAMERA_CTRL_MODE_PAN == mCurrMode);
+	getChildView(ZOOM)->setVisible(CAMERA_CTRL_MODE_PAN == mCurrMode);
 	
 	bool show_presets = (CAMERA_CTRL_MODE_PRESETS == mCurrMode) || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
 																	&& CAMERA_CTRL_MODE_PRESETS == mPrevMode);
-	childSetVisible(PRESETS, show_presets);
+	getChildView(PRESETS)->setVisible(show_presets);
 	
 	bool show_camera_modes = CAMERA_CTRL_MODE_MODES == mCurrMode || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
 																	&& CAMERA_CTRL_MODE_MODES == mPrevMode);
-	childSetVisible("camera_modes_list", show_camera_modes);
+	getChildView("camera_modes_list")->setVisible( show_camera_modes);
 
 	updateItemsSelection();
 
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index a76e2f75ded366faacbad425b9c70861f236a518..424191ef2632b5cb99200d720ea43a2b25f0d5ab 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -62,6 +62,9 @@ public:
 	/** resets current camera mode to orbit mode */
 	static void resetCameraMode();
 
+	/** Called when Avatar is entered/exited editing appearance mode */
+	static void onAvatarEditingAppearance(bool editing);
+
 	/* determines actual mode and updates ui */
 	void update();
 
@@ -115,9 +118,12 @@ private:
 	// fills flatlist with items from given panel
 	void fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel);
 
+	void handleAvatarEditingAppearance(bool editing);
+
 	// set to true when free camera mode is selected in modes list
 	// remains true until preset camera mode is chosen, or pan button is clicked, or escape pressed
 	static bool sFreeCamera;
+	static bool sAppearanceEditing;
 	BOOL mClosed;
 	ECameraControlMode mPrevMode;
 	ECameraControlMode mCurrMode;
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 7b86d62c81c61a3cde10ab125b0a99c269c954f5..89e745f65116d6c614a2f6b488196dc69e6342a3 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -686,12 +686,12 @@ void LLFloaterColorPicker::drawPalette ()
 void LLFloaterColorPicker::updateTextEntry ()
 {
 	// set values in spinners
-	childSetValue("rspin", ( getCurR () * 255.0f ) );
-	childSetValue("gspin", ( getCurG () * 255.0f ) );
-	childSetValue("bspin", ( getCurB () * 255.0f ) );
-	childSetValue("hspin", ( getCurH () * 360.0f ) );
-	childSetValue("sspin", ( getCurS () * 100.0f ) );
-	childSetValue("lspin", ( getCurL () * 100.0f ) );
+	getChild<LLUICtrl>("rspin")->setValue(( getCurR () * 255.0f ) );
+	getChild<LLUICtrl>("gspin")->setValue(( getCurG () * 255.0f ) );
+	getChild<LLUICtrl>("bspin")->setValue(( getCurB () * 255.0f ) );
+	getChild<LLUICtrl>("hspin")->setValue(( getCurH () * 360.0f ) );
+	getChild<LLUICtrl>("sspin")->setValue(( getCurS () * 100.0f ) );
+	getChild<LLUICtrl>("lspin")->setValue(( getCurL () * 100.0f ) );
 }
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
index 8135fb85d1131d85d2e9fa7842f7a5743b6ce586..aacb543267bebaa1bfe1fbd3227b62d0d20ec744 100644
--- a/indra/newview/llfloaterdaycycle.cpp
+++ b/indra/newview/llfloaterdaycycle.cpp
@@ -152,11 +152,11 @@ void LLFloaterDayCycle::syncMenu()
 	// turn off Use Estate Time button if it's already being used
 	if(	LLWLParamManager::instance()->mAnimator.mUseLindenTime == true)
 	{
-		childDisable("WLUseLindenTime");
+		getChildView("WLUseLindenTime")->setEnabled(FALSE);
 	} 
 	else 
 	{
-		childEnable("WLUseLindenTime");
+		getChildView("WLUseLindenTime")->setEnabled(TRUE);
 	}
 }
 
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
index 2e0e7600d8ef687475c5a63226eafc6e5f4d343d..337d4934e15e02807c9bd4cd1ac30f7a4433504c 100644
--- a/indra/newview/llfloaterenvsettings.cpp
+++ b/indra/newview/llfloaterenvsettings.cpp
@@ -107,7 +107,7 @@ void LLFloaterEnvSettings::syncMenu()
 
 	// sync cloud coverage
 	bool err;
-	childSetValue("EnvCloudSlider", LLWLParamManager::instance()->mCurParams.getFloat("cloud_shadow", err));
+	getChild<LLUICtrl>("EnvCloudSlider")->setValue(LLWLParamManager::instance()->mCurParams.getFloat("cloud_shadow", err));
 
 	LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
 	// sync water params
@@ -116,43 +116,43 @@ void LLFloaterEnvSettings::syncMenu()
 	col.mV[3] = 1.0f;
 	colCtrl->set(col);
 
-	childSetValue("EnvWaterFogSlider", param_mgr->mFogDensity.mExp);
+	getChild<LLUICtrl>("EnvWaterFogSlider")->setValue(param_mgr->mFogDensity.mExp);
 	param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
 
 	// turn off Use Estate Time button if it's already being used
 	if(LLWLParamManager::instance()->mAnimator.mUseLindenTime)
 	{
-		childDisable("EnvUseEstateTimeButton");
+		getChildView("EnvUseEstateTimeButton")->setEnabled(FALSE);
 	} else {
-		childEnable("EnvUseEstateTimeButton");
+		getChildView("EnvUseEstateTimeButton")->setEnabled(TRUE);
 	}
 
 	if(!gPipeline.canUseVertexShaders())
 	{
-		childDisable("EnvWaterColor");
-		childDisable("EnvWaterColorText");
-		//childDisable("EnvAdvancedWaterButton");		
+		getChildView("EnvWaterColor")->setEnabled(FALSE);
+		getChildView("EnvWaterColorText")->setEnabled(FALSE);
+		//getChildView("EnvAdvancedWaterButton")->setEnabled(FALSE);		
 	}
 	else
 	{
-		childEnable("EnvWaterColor");
-		childEnable("EnvWaterColorText");
-		//childEnable("EnvAdvancedWaterButton");		
+		getChildView("EnvWaterColor")->setEnabled(TRUE);
+		getChildView("EnvWaterColorText")->setEnabled(TRUE);
+		//getChildView("EnvAdvancedWaterButton")->setEnabled(TRUE);		
 	}
 
 	// only allow access to these if they are using windlight
 	if(!gPipeline.canUseWindLightShaders())
 	{
 
-		childDisable("EnvCloudSlider");
-		childDisable("EnvCloudText");
-		//childDisable("EnvAdvancedSkyButton");
+		getChildView("EnvCloudSlider")->setEnabled(FALSE);
+		getChildView("EnvCloudText")->setEnabled(FALSE);
+		//getChildView("EnvAdvancedSkyButton")->setEnabled(FALSE);
 	}
 	else
 	{
-		childEnable("EnvCloudSlider");
-		childEnable("EnvCloudText");
-		//childEnable("EnvAdvancedSkyButton");
+		getChildView("EnvCloudSlider")->setEnabled(TRUE);
+		getChildView("EnvCloudText")->setEnabled(TRUE);
+		//getChildView("EnvAdvancedSkyButton")->setEnabled(TRUE);
 	}
 }
 
diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
index ade4492174377e8b3f96b455ff2016cb3bdba309..ee2ba2ba54e25a42f98720d6efa7581031321531 100644
--- a/indra/newview/llfloaterevent.cpp
+++ b/indra/newview/llfloaterevent.cpp
@@ -209,10 +209,10 @@ void LLFloaterEvent::processEventInfoReply(LLMessageSystem *msg, void **)
 		std::string desc = floater->mEventInfo.mSimName + llformat(" (%d, %d, %d)", region_x, region_y, region_z);
 		floater->mTBLocation->setText(desc);
 
-		floater->childSetVisible("rating_icon_m", FALSE);
-		floater->childSetVisible("rating_icon_r", FALSE);
-		floater->childSetVisible("rating_icon_pg", FALSE);
-		floater->childSetValue("rating_value", floater->getString("unknown"));
+		floater->getChildView("rating_icon_m")->setVisible( FALSE);
+		floater->getChildView("rating_icon_r")->setVisible( FALSE);
+		floater->getChildView("rating_icon_pg")->setVisible( FALSE);
+		floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("unknown"));
 
 		//for some reason there's not adult flags for now, so see if region is adult and then
 		//set flags
@@ -253,25 +253,25 @@ void LLFloaterEvent::regionInfoCallback(U32 event_id, U64 region_handle)
 		// update the event with the maturity info
 		if (sim_info->isAdult())
 		{
-			floater->childSetVisible("rating_icon_m", FALSE);
-			floater->childSetVisible("rating_icon_r", TRUE);
-			floater->childSetVisible("rating_icon_pg", FALSE);
-			floater->childSetValue("rating_value", floater->getString("adult"));
+			floater->getChildView("rating_icon_m")->setVisible( FALSE);
+			floater->getChildView("rating_icon_r")->setVisible( TRUE);
+			floater->getChildView("rating_icon_pg")->setVisible( FALSE);
+			floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("adult"));
 
 		}
 		else if (floater->mEventInfo.mEventFlags & EVENT_FLAG_MATURE)
 		{
-			floater->childSetVisible("rating_icon_m", TRUE);
-			floater->childSetVisible("rating_icon_r", FALSE);
-			floater->childSetVisible("rating_icon_pg", FALSE);
-			floater->childSetValue("rating_value", floater->getString("moderate"));
+			floater->getChildView("rating_icon_m")->setVisible( TRUE);
+			floater->getChildView("rating_icon_r")->setVisible( FALSE);
+			floater->getChildView("rating_icon_pg")->setVisible( FALSE);
+			floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("moderate"));
 		}
 		else
 		{
-			floater->childSetVisible("rating_icon_m", FALSE);
-			floater->childSetVisible("rating_icon_r", FALSE);
-			floater->childSetVisible("rating_icon_pg", TRUE);
-			floater->childSetValue("rating_value", floater->getString("general"));
+			floater->getChildView("rating_icon_m")->setVisible( FALSE);
+			floater->getChildView("rating_icon_r")->setVisible( FALSE);
+			floater->getChildView("rating_icon_pg")->setVisible( TRUE);
+			floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("general"));
 		}
 	}
 }
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 989f32c7c1bf0cf2623b03534b2178e29c7d354b..ef3c8b764e30cb29dbb6f832b118903d83faa7fc 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -188,8 +188,8 @@ BOOL LLFloaterGesture::postBuild()
 	getChild<LLUICtrl>("new_gesture_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickNew, this));
 	getChild<LLButton>("del_btn")->setClickedCallback(boost::bind(&LLFloaterGesture::onDeleteSelected, this));
 
-	childSetVisible("play_btn", true);
-	childSetVisible("stop_btn", false);
+	getChildView("play_btn")->setVisible( true);
+	getChildView("stop_btn")->setVisible( false);
 	setDefaultBtn("play_btn");
 	mGestureFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE, false);
 
@@ -557,13 +557,13 @@ void LLFloaterGesture::onCommitList()
 	mSelectedID = item_id;
 	if (LLGestureMgr::instance().isGesturePlaying(item_id))
 	{
-		childSetVisible("play_btn", false);
-		childSetVisible("stop_btn", true);
+		getChildView("play_btn")->setVisible( false);
+		getChildView("stop_btn")->setVisible( true);
 	}
 	else
 	{
-		childSetVisible("play_btn", true);
-		childSetVisible("stop_btn", false);
+		getChildView("play_btn")->setVisible( true);
+		getChildView("stop_btn")->setVisible( false);
 	}
 }
 
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index fa8d7a57d5efc681468182179a3b42a77dc1b3ad..f95112a8ab15f00eb383bd638fff44f6076b5a17 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -82,7 +82,7 @@ void LLFloaterGodTools::onOpen(const LLSD& key)
 {
 	center();
 	setFocus(TRUE);
-// 	LLPanel *panel = childGetVisibleTab("GodTools Tabs");
+// 	LLPanel *panel = getChild<LLTabContainer>("GodTools Tabs")->getCurrentPanel();
 // 	if (panel)
 // 		panel->setFocus(TRUE);
 	if (mPanelObjectTools)
@@ -128,7 +128,7 @@ LLFloaterGodTools::LLFloaterGodTools(const LLSD& key)
 BOOL LLFloaterGodTools::postBuild()
 {
 	sendRegionInfoRequest();
-	childShowTab("GodTools Tabs", "region");
+	getChild<LLTabContainer>("GodTools Tabs")->selectTabByName("region");
 	return TRUE;
 }
 // static
@@ -197,9 +197,9 @@ void LLFloaterGodTools::draw()
 
 void LLFloaterGodTools::showPanel(const std::string& panel_name)
 {
-	childShowTab("GodTools Tabs", panel_name);
+	getChild<LLTabContainer>("GodTools Tabs")->selectTabByName(panel_name);
 	openFloater();
-	LLPanel *panel = childGetVisibleTab("GodTools Tabs");
+	LLPanel *panel = getChild<LLTabContainer>("GodTools Tabs")->getCurrentPanel();
 	if (panel)
 		panel->setFocus(TRUE);
 }
@@ -410,17 +410,17 @@ LLPanelRegionTools::LLPanelRegionTools()
 BOOL LLPanelRegionTools::postBuild()
 {
 	getChild<LLLineEditor>("region name")->setKeystrokeCallback(onChangeSimName, this);
-	childSetPrevalidate("region name", &LLTextValidate::validateASCIIPrintableNoPipe);
-	childSetPrevalidate("estate", &LLTextValidate::validatePositiveS32);
-	childSetPrevalidate("parentestate", &LLTextValidate::validatePositiveS32);
-	childDisable("parentestate");
-	childSetPrevalidate("gridposx", &LLTextValidate::validatePositiveS32);
-	childDisable("gridposx");
-	childSetPrevalidate("gridposy", &LLTextValidate::validatePositiveS32);
-	childDisable("gridposy");
+	getChild<LLLineEditor>("region name")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("estate")->setPrevalidate(&LLTextValidate::validatePositiveS32);
+	getChild<LLLineEditor>("parentestate")->setPrevalidate(&LLTextValidate::validatePositiveS32);
+	getChildView("parentestate")->setEnabled(FALSE);
+	getChild<LLLineEditor>("gridposx")->setPrevalidate(&LLTextValidate::validatePositiveS32);
+	getChildView("gridposx")->setEnabled(FALSE);
+	getChild<LLLineEditor>("gridposy")->setPrevalidate(&LLTextValidate::validatePositiveS32);
+	getChildView("gridposy")->setEnabled(FALSE);
 	
-	childSetPrevalidate("redirectx", &LLTextValidate::validatePositiveS32);
-	childSetPrevalidate("redirecty", &LLTextValidate::validatePositiveS32);
+	getChild<LLLineEditor>("redirectx")->setPrevalidate(&LLTextValidate::validatePositiveS32);
+	getChild<LLLineEditor>("redirecty")->setPrevalidate(&LLTextValidate::validatePositiveS32);
 			 
 	return TRUE;
 }
@@ -447,42 +447,42 @@ void LLPanelRegionTools::refresh()
 void LLPanelRegionTools::clearAllWidgets()
 {
 	// clear all widgets
-	childSetValue("region name", "unknown");
-	childSetFocus("region name", FALSE);
+	getChild<LLUICtrl>("region name")->setValue("unknown");
+	getChild<LLUICtrl>("region name")->setFocus( FALSE);
 
-	childSetValue("check prelude", FALSE);
-	childDisable("check prelude");
+	getChild<LLUICtrl>("check prelude")->setValue(FALSE);
+	getChildView("check prelude")->setEnabled(FALSE);
 
-	childSetValue("check fixed sun", FALSE);
-	childDisable("check fixed sun");
+	getChild<LLUICtrl>("check fixed sun")->setValue(FALSE);
+	getChildView("check fixed sun")->setEnabled(FALSE);
 
-	childSetValue("check reset home", FALSE);
-	childDisable("check reset home");
+	getChild<LLUICtrl>("check reset home")->setValue(FALSE);
+	getChildView("check reset home")->setEnabled(FALSE);
 
-	childSetValue("check damage", FALSE);
-	childDisable("check damage");
+	getChild<LLUICtrl>("check damage")->setValue(FALSE);
+	getChildView("check damage")->setEnabled(FALSE);
 
-	childSetValue("check visible", FALSE);
-	childDisable("check visible");
+	getChild<LLUICtrl>("check visible")->setValue(FALSE);
+	getChildView("check visible")->setEnabled(FALSE);
 
-	childSetValue("block terraform", FALSE);
-	childDisable("block terraform");
+	getChild<LLUICtrl>("block terraform")->setValue(FALSE);
+	getChildView("block terraform")->setEnabled(FALSE);
 
-	childSetValue("block dwell", FALSE);
-	childDisable("block dwell");
+	getChild<LLUICtrl>("block dwell")->setValue(FALSE);
+	getChildView("block dwell")->setEnabled(FALSE);
 
-	childSetValue("is sandbox", FALSE);
-	childDisable("is sandbox");
+	getChild<LLUICtrl>("is sandbox")->setValue(FALSE);
+	getChildView("is sandbox")->setEnabled(FALSE);
 
-	childSetValue("billable factor", BILLABLE_FACTOR_DEFAULT);
-	childDisable("billable factor");
+	getChild<LLUICtrl>("billable factor")->setValue(BILLABLE_FACTOR_DEFAULT);
+	getChildView("billable factor")->setEnabled(FALSE);
 
-	childSetValue("land cost", PRICE_PER_METER_DEFAULT);
-	childDisable("land cost");
+	getChild<LLUICtrl>("land cost")->setValue(PRICE_PER_METER_DEFAULT);
+	getChildView("land cost")->setEnabled(FALSE);
 
-	childDisable("Apply");
-	childDisable("Bake Terrain");
-	childDisable("Autosave now");
+	getChildView("Apply")->setEnabled(FALSE);
+	getChildView("Bake Terrain")->setEnabled(FALSE);
+	getChildView("Autosave now")->setEnabled(FALSE);
 }
 
 
@@ -490,21 +490,21 @@ void LLPanelRegionTools::enableAllWidgets()
 {
 	// enable all of the widgets
 	
-	childEnable("check prelude");
-	childEnable("check fixed sun");
-	childEnable("check reset home");
-	childEnable("check damage");
-	childDisable("check visible"); // use estates to update...
-	childEnable("block terraform");
-	childEnable("block dwell");
-	childEnable("is sandbox");
+	getChildView("check prelude")->setEnabled(TRUE);
+	getChildView("check fixed sun")->setEnabled(TRUE);
+	getChildView("check reset home")->setEnabled(TRUE);
+	getChildView("check damage")->setEnabled(TRUE);
+	getChildView("check visible")->setEnabled(FALSE); // use estates to update...
+	getChildView("block terraform")->setEnabled(TRUE);
+	getChildView("block dwell")->setEnabled(TRUE);
+	getChildView("is sandbox")->setEnabled(TRUE);
 	
-	childEnable("billable factor");
-	childEnable("land cost");
+	getChildView("billable factor")->setEnabled(TRUE);
+	getChildView("land cost")->setEnabled(TRUE);
 
-	childDisable("Apply");	// don't enable this one
-	childEnable("Bake Terrain");
-	childEnable("Autosave now");
+	getChildView("Apply")->setEnabled(FALSE);	// don't enable this one
+	getChildView("Bake Terrain")->setEnabled(TRUE);
+	getChildView("Autosave now")->setEnabled(TRUE);
 }
 
 void LLPanelRegionTools::onSaveState(void* userdata)
@@ -524,74 +524,74 @@ void LLPanelRegionTools::onSaveState(void* userdata)
 
 const std::string LLPanelRegionTools::getSimName() const
 {
-	return childGetValue("region name");
+	return getChild<LLUICtrl>("region name")->getValue();
 }
 
 U32 LLPanelRegionTools::getEstateID() const
 {
-	U32 id = (U32)childGetValue("estate").asInteger();
+	U32 id = (U32)getChild<LLUICtrl>("estate")->getValue().asInteger();
 	return id;
 }
 
 U32 LLPanelRegionTools::getParentEstateID() const
 {
-	U32 id = (U32)childGetValue("parentestate").asInteger();
+	U32 id = (U32)getChild<LLUICtrl>("parentestate")->getValue().asInteger();
 	return id;
 }
 
 S32 LLPanelRegionTools::getRedirectGridX() const
 {
-	return childGetValue("redirectx").asInteger();
+	return getChild<LLUICtrl>("redirectx")->getValue().asInteger();
 }
 
 S32 LLPanelRegionTools::getRedirectGridY() const
 {
-	return childGetValue("redirecty").asInteger();
+	return getChild<LLUICtrl>("redirecty")->getValue().asInteger();
 }
 
 S32 LLPanelRegionTools::getGridPosX() const
 {
-	return childGetValue("gridposx").asInteger();
+	return getChild<LLUICtrl>("gridposx")->getValue().asInteger();
 }
 
 S32 LLPanelRegionTools::getGridPosY() const
 {
-	return childGetValue("gridposy").asInteger();
+	return getChild<LLUICtrl>("gridposy")->getValue().asInteger();
 }
 
 U32 LLPanelRegionTools::getRegionFlags() const
 {
 	U32 flags = 0x0;
-	flags = childGetValue("check prelude").asBoolean()  
+	flags = getChild<LLUICtrl>("check prelude")->getValue().asBoolean()  
 					? set_prelude_flags(flags)
 					: unset_prelude_flags(flags);
 
 	// override prelude
-	if (childGetValue("check fixed sun").asBoolean())
+	if (getChild<LLUICtrl>("check fixed sun")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_SUN_FIXED;
 	}
-	if (childGetValue("check reset home").asBoolean())
+	if (getChild<LLUICtrl>("check reset home")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_RESET_HOME_ON_TELEPORT;
 	}
-	if (childGetValue("check visible").asBoolean())
+	if (getChild<LLUICtrl>("check visible")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_EXTERNALLY_VISIBLE;
 	}
-	if (childGetValue("check damage").asBoolean())
+	if (getChild<LLUICtrl>("check damage")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_ALLOW_DAMAGE;
 	}
-	if (childGetValue("block terraform").asBoolean())
+	if (getChild<LLUICtrl>("block terraform")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_BLOCK_TERRAFORM;
 	}
-	if (childGetValue("block dwell").asBoolean())
+	if (getChild<LLUICtrl>("block dwell")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_BLOCK_DWELL;
 	}
-	if (childGetValue("is sandbox").asBoolean())
+	if (getChild<LLUICtrl>("is sandbox")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_SANDBOX;
 	}
@@ -601,35 +601,35 @@ U32 LLPanelRegionTools::getRegionFlags() const
 U32 LLPanelRegionTools::getRegionFlagsMask() const
 {
 	U32 flags = 0xffffffff;
-	flags = childGetValue("check prelude").asBoolean()
+	flags = getChild<LLUICtrl>("check prelude")->getValue().asBoolean()
 				? set_prelude_flags(flags)
 				: unset_prelude_flags(flags);
 
-	if (!childGetValue("check fixed sun").asBoolean())
+	if (!getChild<LLUICtrl>("check fixed sun")->getValue().asBoolean())
 	{
 		flags &= ~REGION_FLAGS_SUN_FIXED;
 	}
-	if (!childGetValue("check reset home").asBoolean())
+	if (!getChild<LLUICtrl>("check reset home")->getValue().asBoolean())
 	{
 		flags &= ~REGION_FLAGS_RESET_HOME_ON_TELEPORT;
 	}
-	if (!childGetValue("check visible").asBoolean())
+	if (!getChild<LLUICtrl>("check visible")->getValue().asBoolean())
 	{
 		flags &= ~REGION_FLAGS_EXTERNALLY_VISIBLE;
 	}
-	if (!childGetValue("check damage").asBoolean())
+	if (!getChild<LLUICtrl>("check damage")->getValue().asBoolean())
 	{
 		flags &= ~REGION_FLAGS_ALLOW_DAMAGE;
 	}
-	if (!childGetValue("block terraform").asBoolean())
+	if (!getChild<LLUICtrl>("block terraform")->getValue().asBoolean())
 	{
 		flags &= ~REGION_FLAGS_BLOCK_TERRAFORM;
 	}
-	if (!childGetValue("block dwell").asBoolean())
+	if (!getChild<LLUICtrl>("block dwell")->getValue().asBoolean())
 	{
 		flags &= ~REGION_FLAGS_BLOCK_DWELL;
 	}
-	if (!childGetValue("is sandbox").asBoolean())
+	if (!getChild<LLUICtrl>("is sandbox")->getValue().asBoolean())
 	{
 		flags &= ~REGION_FLAGS_SANDBOX;
 	}
@@ -638,86 +638,86 @@ U32 LLPanelRegionTools::getRegionFlagsMask() const
 
 F32 LLPanelRegionTools::getBillableFactor() const
 {
-	return (F32)childGetValue("billable factor").asReal();
+	return (F32)getChild<LLUICtrl>("billable factor")->getValue().asReal();
 }
 
 S32 LLPanelRegionTools::getPricePerMeter() const
 {
-	return childGetValue("land cost");
+	return getChild<LLUICtrl>("land cost")->getValue();
 }
 
 void LLPanelRegionTools::setSimName(const std::string& name)
 {
-	childSetValue("region name", name);
+	getChild<LLUICtrl>("region name")->setValue(name);
 }
 
 void LLPanelRegionTools::setEstateID(U32 id)
 {
-	childSetValue("estate", (S32)id);
+	getChild<LLUICtrl>("estate")->setValue((S32)id);
 }
 
 void LLPanelRegionTools::setGridPosX(S32 pos)
 {
-	childSetValue("gridposx", pos);
+	getChild<LLUICtrl>("gridposx")->setValue(pos);
 }
 
 void LLPanelRegionTools::setGridPosY(S32 pos)
 {
-	childSetValue("gridposy", pos);
+	getChild<LLUICtrl>("gridposy")->setValue(pos);
 }
 
 void LLPanelRegionTools::setRedirectGridX(S32 pos)
 {
-	childSetValue("redirectx", pos);
+	getChild<LLUICtrl>("redirectx")->setValue(pos);
 }
 
 void LLPanelRegionTools::setRedirectGridY(S32 pos)
 {
-	childSetValue("redirecty", pos);
+	getChild<LLUICtrl>("redirecty")->setValue(pos);
 }
 
 void LLPanelRegionTools::setParentEstateID(U32 id)
 {
-	childSetValue("parentestate", (S32)id);
+	getChild<LLUICtrl>("parentestate")->setValue((S32)id);
 }
 
 void LLPanelRegionTools::setCheckFlags(U32 flags)
 {
-	childSetValue("check prelude", is_prelude(flags) ? TRUE : FALSE);
-	childSetValue("check fixed sun", flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE);
-	childSetValue("check reset home", flags & REGION_FLAGS_RESET_HOME_ON_TELEPORT ? TRUE : FALSE);
-	childSetValue("check damage", flags & REGION_FLAGS_ALLOW_DAMAGE ? TRUE : FALSE);
-	childSetValue("check visible", flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE);
-	childSetValue("block terraform", flags & REGION_FLAGS_BLOCK_TERRAFORM ? TRUE : FALSE);
-	childSetValue("block dwell", flags & REGION_FLAGS_BLOCK_DWELL ? TRUE : FALSE);
-	childSetValue("is sandbox", flags & REGION_FLAGS_SANDBOX ? TRUE : FALSE );
+	getChild<LLUICtrl>("check prelude")->setValue(is_prelude(flags) ? TRUE : FALSE);
+	getChild<LLUICtrl>("check fixed sun")->setValue(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE);
+	getChild<LLUICtrl>("check reset home")->setValue(flags & REGION_FLAGS_RESET_HOME_ON_TELEPORT ? TRUE : FALSE);
+	getChild<LLUICtrl>("check damage")->setValue(flags & REGION_FLAGS_ALLOW_DAMAGE ? TRUE : FALSE);
+	getChild<LLUICtrl>("check visible")->setValue(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE);
+	getChild<LLUICtrl>("block terraform")->setValue(flags & REGION_FLAGS_BLOCK_TERRAFORM ? TRUE : FALSE);
+	getChild<LLUICtrl>("block dwell")->setValue(flags & REGION_FLAGS_BLOCK_DWELL ? TRUE : FALSE);
+	getChild<LLUICtrl>("is sandbox")->setValue(flags & REGION_FLAGS_SANDBOX ? TRUE : FALSE );
 }
 
 void LLPanelRegionTools::setBillableFactor(F32 billable_factor)
 {
-	childSetValue("billable factor", billable_factor);
+	getChild<LLUICtrl>("billable factor")->setValue(billable_factor);
 }
 
 void LLPanelRegionTools::setPricePerMeter(S32 price)
 {
-	childSetValue("land cost", price);
+	getChild<LLUICtrl>("land cost")->setValue(price);
 }
 
 void LLPanelRegionTools::onChangeAnything()
 {
 	if (gAgent.isGodlike())
 	{
-		childEnable("Apply");
+		getChildView("Apply")->setEnabled(TRUE);
 	}
 }
 
 void LLPanelRegionTools::onChangePrelude()
 {
 	// checking prelude auto-checks fixed sun
-	if (childGetValue("check prelude").asBoolean())
+	if (getChild<LLUICtrl>("check prelude")->getValue().asBoolean())
 	{
-		childSetValue("check fixed sun", TRUE);
-		childSetValue("check reset home", TRUE);
+		getChild<LLUICtrl>("check fixed sun")->setValue(TRUE);
+		getChild<LLUICtrl>("check reset home")->setValue(TRUE);
 		onChangeAnything();
 	}
 	// pass on to default onChange handler
@@ -730,7 +730,7 @@ void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
 	if (userdata && gAgent.isGodlike())
 	{
 		LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
-		region_tools->childEnable("Apply");
+		region_tools->getChildView("Apply")->setEnabled(TRUE);
 	}
 }
 
@@ -755,7 +755,7 @@ void LLPanelRegionTools::onApplyChanges()
 	LLViewerRegion *region = gAgent.getRegion();
 	if (region && gAgent.isGodlike())
 	{
-		childDisable("Apply");
+		getChildView("Apply")->setEnabled(FALSE);
 		god_tools->sendGodUpdateRegionInfo();
 		//LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools")->sendGodUpdateRegionInfo();
 	}
@@ -925,7 +925,7 @@ void LLPanelObjectTools::setTargetAvatar(const LLUUID &target_id)
 	mTargetAvatar = target_id;
 	if (target_id.isNull())
 	{
-		childSetValue("target_avatar_name", getString("no_target"));
+		getChild<LLUICtrl>("target_avatar_name")->setValue(getString("no_target"));
 	}
 } 
 
@@ -935,14 +935,14 @@ void LLPanelObjectTools::refresh()
 	LLViewerRegion *regionp = gAgent.getRegion();
 	if (regionp)
 	{
-		childSetText("region name", regionp->getName());
+		getChild<LLUICtrl>("region name")->setValue(regionp->getName());
 	}
 }
 
 
 U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const
 {
-	if (childGetValue("disable scripts").asBoolean())
+	if (getChild<LLUICtrl>("disable scripts")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_SKIP_SCRIPTS;
 	}
@@ -950,7 +950,7 @@ U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const
 	{
 		flags &= ~REGION_FLAGS_SKIP_SCRIPTS;
 	}
-	if (childGetValue("disable collisions").asBoolean())
+	if (getChild<LLUICtrl>("disable collisions")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_SKIP_COLLISIONS;
 	}
@@ -958,7 +958,7 @@ U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const
 	{
 		flags &= ~REGION_FLAGS_SKIP_COLLISIONS;
 	}
-	if (childGetValue("disable physics").asBoolean())
+	if (getChild<LLUICtrl>("disable physics")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_SKIP_PHYSICS;
 	}
@@ -972,36 +972,36 @@ U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const
 
 void LLPanelObjectTools::setCheckFlags(U32 flags)
 {
-	childSetValue("disable scripts", flags & REGION_FLAGS_SKIP_SCRIPTS ? TRUE : FALSE);
-	childSetValue("disable collisions", flags & REGION_FLAGS_SKIP_COLLISIONS ? TRUE : FALSE);
-	childSetValue("disable physics", flags & REGION_FLAGS_SKIP_PHYSICS ? TRUE : FALSE);
+	getChild<LLUICtrl>("disable scripts")->setValue(flags & REGION_FLAGS_SKIP_SCRIPTS ? TRUE : FALSE);
+	getChild<LLUICtrl>("disable collisions")->setValue(flags & REGION_FLAGS_SKIP_COLLISIONS ? TRUE : FALSE);
+	getChild<LLUICtrl>("disable physics")->setValue(flags & REGION_FLAGS_SKIP_PHYSICS ? TRUE : FALSE);
 }
 
 
 void LLPanelObjectTools::clearAllWidgets()
 {
-	childSetValue("disable scripts", FALSE);
-	childDisable("disable scripts");
+	getChild<LLUICtrl>("disable scripts")->setValue(FALSE);
+	getChildView("disable scripts")->setEnabled(FALSE);
 
-	childDisable("Apply");
-	childDisable("Set Target");
-	childDisable("Delete Target's Scripted Objects On Others Land");
-	childDisable("Delete Target's Scripted Objects On *Any* Land");
-	childDisable("Delete *ALL* Of Target's Objects");
+	getChildView("Apply")->setEnabled(FALSE);
+	getChildView("Set Target")->setEnabled(FALSE);
+	getChildView("Delete Target's Scripted Objects On Others Land")->setEnabled(FALSE);
+	getChildView("Delete Target's Scripted Objects On *Any* Land")->setEnabled(FALSE);
+	getChildView("Delete *ALL* Of Target's Objects")->setEnabled(FALSE);
 }
 
 
 void LLPanelObjectTools::enableAllWidgets()
 {
-	childEnable("disable scripts");
+	getChildView("disable scripts")->setEnabled(TRUE);
 
-	childDisable("Apply");	// don't enable this one
-	childEnable("Set Target");
-	childEnable("Delete Target's Scripted Objects On Others Land");
-	childEnable("Delete Target's Scripted Objects On *Any* Land");
-	childEnable("Delete *ALL* Of Target's Objects");
-	childEnable("Get Top Colliders");
-	childEnable("Get Top Scripts");
+	getChildView("Apply")->setEnabled(FALSE);	// don't enable this one
+	getChildView("Set Target")->setEnabled(TRUE);
+	getChildView("Delete Target's Scripted Objects On Others Land")->setEnabled(TRUE);
+	getChildView("Delete Target's Scripted Objects On *Any* Land")->setEnabled(TRUE);
+	getChildView("Delete *ALL* Of Target's Objects")->setEnabled(TRUE);
+	getChildView("Get Top Colliders")->setEnabled(TRUE);
+	getChildView("Get Top Scripts")->setEnabled(TRUE);
 }
 
 
@@ -1051,7 +1051,7 @@ void LLPanelObjectTools::onClickDeletePublicOwnedBy()
 			SWD_SCRIPTED_ONLY | SWD_OTHERS_LAND_ONLY;
 
 		LLSD args;
-		args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString();
+		args["AVATAR_NAME"] = getChild<LLUICtrl>("target_avatar_name")->getValue().asString();
 		LLSD payload;
 		payload["avatar_id"] = mTargetAvatar;
 		payload["flags"] = (S32)mSimWideDeletesFlags;
@@ -1071,7 +1071,7 @@ void LLPanelObjectTools::onClickDeleteAllScriptedOwnedBy()
 		mSimWideDeletesFlags = SWD_SCRIPTED_ONLY;
 
 		LLSD args;
-		args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString();
+		args["AVATAR_NAME"] = getChild<LLUICtrl>("target_avatar_name")->getValue().asString();
 		LLSD payload;
 		payload["avatar_id"] = mTargetAvatar;
 		payload["flags"] = (S32)mSimWideDeletesFlags;
@@ -1091,7 +1091,7 @@ void LLPanelObjectTools::onClickDeleteAllOwnedBy()
 		mSimWideDeletesFlags = 0;
 
 		LLSD args;
-		args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString();
+		args["AVATAR_NAME"] = getChild<LLUICtrl>("target_avatar_name")->getValue().asString();
 		LLSD payload;
 		payload["avatar_id"] = mTargetAvatar;
 		payload["flags"] = (S32)mSimWideDeletesFlags;
@@ -1142,14 +1142,14 @@ void LLPanelObjectTools::onClickSetBySelection(void* data)
 	args["[OBJECT]"] = node->mName;
 	args["[OWNER]"] = owner_name;
 	std::string name = LLTrans::getString("GodToolsObjectOwnedBy", args);
-	panelp->childSetValue("target_avatar_name", name);
+	panelp->getChild<LLUICtrl>("target_avatar_name")->setValue(name);
 }
 
 void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids)
 {
 	if (ids.empty() || names.empty()) return;
 	mTargetAvatar = ids[0];
-	childSetValue("target_avatar_name", names[0]);
+	getChild<LLUICtrl>("target_avatar_name")->setValue(names[0]);
 	refresh();
 }
 
@@ -1157,7 +1157,7 @@ void LLPanelObjectTools::onChangeAnything()
 {
 	if (gAgent.isGodlike())
 	{
-		childEnable("Apply");
+		getChildView("Apply")->setEnabled(TRUE);
 	}
 }
 
@@ -1169,7 +1169,7 @@ void LLPanelObjectTools::onApplyChanges()
 	if (region && gAgent.isGodlike())
 	{
 		// TODO -- implement this
-		childDisable("Apply");
+		getChildView("Apply")->setEnabled(FALSE);
 		god_tools->sendGodUpdateRegionInfo();
 		//LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools")->sendGodUpdateRegionInfo();
 	}
@@ -1202,7 +1202,7 @@ BOOL LLPanelRequestTools::postBuild()
 
 void LLPanelRequestTools::refresh()
 {
-	std::string buffer = childGetValue("destination");
+	std::string buffer = getChild<LLUICtrl>("destination")->getValue();
 	LLCtrlListInterface *list = childGetListInterface("destination");
 	if (!list) return;
 
@@ -1257,12 +1257,12 @@ void LLPanelRequestTools::sendRequest(const std::string& request,
 
 void LLPanelRequestTools::onClickRequest()
 {
-	const std::string dest = childGetValue("destination").asString();
+	const std::string dest = getChild<LLUICtrl>("destination")->getValue().asString();
 	if(dest == SELECTION)
 	{
-		std::string req =childGetValue("request");
+		std::string req =getChild<LLUICtrl>("request")->getValue();
 		req = req.substr(0, req.find_first_of(" "));
-		std::string param = childGetValue("parameter");
+		std::string param = getChild<LLUICtrl>("parameter")->getValue();
 		LLSelectMgr::getInstance()->sendGodlikeRequest(req, param);
 	}
 	else if(dest == AGENT_REGION)
@@ -1301,7 +1301,7 @@ void LLPanelRequestTools::sendRequest(const LLHost& host)
 {
 
 	// intercept viewer local actions here
-	std::string req = childGetValue("request");
+	std::string req = getChild<LLUICtrl>("request")->getValue();
 	if (req == "terrain download")
 	{
 		gXferManager->requestFile(std::string("terrain.raw"), std::string("terrain.raw"), LL_PATH_NONE,
@@ -1313,7 +1313,7 @@ void LLPanelRequestTools::sendRequest(const LLHost& host)
 	else
 	{
 		req = req.substr(0, req.find_first_of(" "));
-		sendRequest(req, childGetValue("parameter").asString(), host);
+		sendRequest(req, getChild<LLUICtrl>("parameter")->getValue().asString(), host);
 	}
 }
 
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index f3a3a3c41ad9e90288035c29a96f8337f7715339..3cd21545314481d26d4af793835bfb70a05c5b24 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -41,7 +41,6 @@
 #include "llbutton.h"
 #include "llgroupactions.h"
 #include "llscrolllistctrl.h"
-#include "llselectmgr.h"
 #include "lltextbox.h"
 #include "lluictrlfactory.h"
 #include "lltrans.h"
@@ -84,15 +83,13 @@ BOOL LLFloaterGroupPicker::postBuild()
 		list_ctrl->setContextMenu(LLScrollListCtrl::MENU_GROUP);
 	}
 	
-	LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterGroupPicker::onBtnCancel, this));
-
 	childSetAction("OK", onBtnOK, this);
 
 	childSetAction("Cancel", onBtnCancel, this);
 
 	setDefaultBtn("OK");
 
-	childEnable("OK");
+	getChildView("OK")->setEnabled(TRUE);
 
 	return TRUE;
 }
@@ -173,8 +170,8 @@ void LLPanelGroups::reset()
 	{
 		group_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
 	}
-	childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count()));
-	childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS));
+	getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
+	getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",MAX_AGENT_GROUPS));
 
 	init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID());
 	enableButtons();
@@ -184,8 +181,8 @@ BOOL LLPanelGroups::postBuild()
 {
 	childSetCommitCallback("group list", onGroupList, this);
 
-	childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count()));
-	childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS));
+	getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
+	getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",MAX_AGENT_GROUPS));
 
 	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("group list");
 	if (list)
@@ -225,25 +222,25 @@ void LLPanelGroups::enableButtons()
 
 	if(group_id != gAgent.getGroupID())
 	{
-		childEnable("Activate");
+		getChildView("Activate")->setEnabled(TRUE);
 	}
 	else
 	{
-		childDisable("Activate");
+		getChildView("Activate")->setEnabled(FALSE);
 	}
 	if (group_id.notNull())
 	{
-		childEnable("Info");
-		childEnable("IM");
-		childEnable("Leave");
+		getChildView("Info")->setEnabled(TRUE);
+		getChildView("IM")->setEnabled(TRUE);
+		getChildView("Leave")->setEnabled(TRUE);
 	}
 	else
 	{
-		childDisable("Info");
-		childDisable("IM");
-		childDisable("Leave");
+		getChildView("Info")->setEnabled(FALSE);
+		getChildView("IM")->setEnabled(FALSE);
+		getChildView("Leave")->setEnabled(FALSE);
 	}
-	childSetEnabled("Create", gAgent.canJoinGroups());
+	getChildView("Create")->setEnabled(gAgent.canJoinGroups());
 }
 
 
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index af761010c19431bac2b10efd8c518a7ec0f2cc92..2985626bd7701f89e8f02ff51802c875e20597ca 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -81,7 +81,7 @@ void LLFloaterHardwareSettings::refresh()
 	mFogRatio = gSavedSettings.getF32("RenderFogRatio");
 	mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup");
 
-	childSetValue("fsaa", (LLSD::Integer) mFSAASamples);
+	getChild<LLUICtrl>("fsaa")->setValue((LLSD::Integer) mFSAASamples);
 	refreshEnabledState();
 }
 
@@ -95,13 +95,13 @@ void LLFloaterHardwareSettings::refreshEnabledState()
 	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
 		!gGLManager.mHasVertexBufferObject)
 	{
-		childSetEnabled("vbo", FALSE);
+		getChildView("vbo")->setEnabled(FALSE);
 	}
 
 	// if no windlight shaders, turn off nighttime brightness, gamma, and fog distance
-	childSetEnabled("gamma", !gPipeline.canUseWindLightShaders());
-	childSetEnabled("(brightness, lower is brighter)", !gPipeline.canUseWindLightShaders());
-	childSetEnabled("fog", !gPipeline.canUseWindLightShaders());
+	getChildView("gamma")->setEnabled(!gPipeline.canUseWindLightShaders());
+	getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders());
+	getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders());
 
 }
 
@@ -124,9 +124,9 @@ void LLFloaterHardwareSettings::apply()
 {
 	// Anisotropic rendering
 	BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
-	LLImageGL::sGlobalUseAnisotropic = childGetValue("ani");
+	LLImageGL::sGlobalUseAnisotropic = getChild<LLUICtrl>("ani")->getValue();
 
-	U32 fsaa = (U32) childGetValue("fsaa").asInteger();
+	U32 fsaa = (U32) getChild<LLUICtrl>("fsaa")->getValue().asInteger();
 	U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples");
 
 	BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp
index 86e373cff6e1053ac117e2124135bcb65f474c20..cec98e999235d04c9962a693a3cfc44ea8f504e7 100644
--- a/indra/newview/llfloaterhelpbrowser.cpp
+++ b/indra/newview/llfloaterhelpbrowser.cpp
@@ -86,11 +86,11 @@ void LLFloaterHelpBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEven
 		break;
 
 	case MEDIA_EVENT_NAVIGATE_BEGIN:
-		childSetText("status_text", getString("loading_text"));
+		getChild<LLUICtrl>("status_text")->setValue(getString("loading_text"));
 		break;
 		
 	case MEDIA_EVENT_NAVIGATE_COMPLETE:
-		childSetText("status_text", getString("done_text"));
+		getChild<LLUICtrl>("status_text")->setValue(getString("done_text"));
 		break;
 
 	default:
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index c6f03e7308cdb5058f98b1ba7a748e2343072623..c7fbdd57459a322e887f6c5546637dc366c18bd8 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -103,7 +103,7 @@ BOOL LLFloaterImagePreview::postBuild()
 		PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
 	mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f);
 
-	childHide("bad_image_text");
+	getChildView("bad_image_text")->setVisible(FALSE);
 
 	if (mRawImagep.notNull() && gAgent.getRegion() != NULL)
 	{
@@ -114,19 +114,19 @@ BOOL LLFloaterImagePreview::postBuild()
 		mSculptedPreview->setPreviewTarget(mRawImagep, 2.0f);
 
 		if (mRawImagep->getWidth() * mRawImagep->getHeight () <= LL_IMAGE_REZ_LOSSLESS_CUTOFF * LL_IMAGE_REZ_LOSSLESS_CUTOFF)
-			childEnable("lossless_check");
+			getChildView("lossless_check")->setEnabled(TRUE);
 	}
 	else
 	{
 		mAvatarPreview = NULL;
 		mSculptedPreview = NULL;
-		childShow("bad_image_text");
-		childDisable("clothing_type_combo");
-		childDisable("ok_btn");
+		getChildView("bad_image_text")->setVisible(TRUE);
+		getChildView("clothing_type_combo")->setEnabled(FALSE);
+		getChildView("ok_btn")->setEnabled(FALSE);
 
 		if(!mImageLoadError.empty())
 		{
-			childSetValue("bad_image_text",mImageLoadError.c_str());
+			getChild<LLUICtrl>("bad_image_text")->setValue(mImageLoadError.c_str());
 		}
 	}
 	
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index a24048374d73bc76272c38d6d15d13721c7a3803..8e7f7e083ce8249c62c7c8d12491792ed0e04e2f 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -148,8 +148,8 @@ void LLFloaterInspect::onSelectObject()
 {
 	if(LLFloaterInspect::getSelectedUUID() != LLUUID::null)
 	{
-		childSetEnabled("button owner", true);
-		childSetEnabled("button creator", true);
+		getChildView("button owner")->setEnabled(true);
+		getChildView("button creator")->setEnabled(true);
 	}
 }
 
@@ -172,8 +172,8 @@ void LLFloaterInspect::refresh()
 	LLUUID creator_id;
 	std::string creator_name;
 	S32 pos = mObjectList->getScrollPos();
-	childSetEnabled("button owner", false);
-	childSetEnabled("button creator", false);
+	getChildView("button owner")->setEnabled(false);
+	getChildView("button creator")->setEnabled(false);
 	LLUUID selected_uuid;
 	S32 selected_index = mObjectList->getFirstSelectedIndex();
 	if(selected_index > -1)
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
index cc1958b396bacb6642c19bc03c73a535d1842bcf..e1994bb8bc05b2de6dc94d5128d0672485089a02 100644
--- a/indra/newview/llfloaterjoystick.cpp
+++ b/indra/newview/llfloaterjoystick.cpp
@@ -52,11 +52,11 @@ LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
 void LLFloaterJoystick::draw()
 {
 	bool joystick_inited = LLViewerJoystick::getInstance()->isJoystickInitialized();
-	childSetEnabled("enable_joystick", joystick_inited);
-	childSetEnabled("joystick_type", joystick_inited);
+	getChildView("enable_joystick")->setEnabled(joystick_inited);
+	getChildView("joystick_type")->setEnabled(joystick_inited);
 	std::string desc = LLViewerJoystick::getInstance()->getDescription();
 	if (desc.empty()) desc = getString("NoDevice");
-	childSetText("joystick_type", desc);
+	getChild<LLUICtrl>("joystick_type")->setValue(desc);
 
 	LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
 	for (U32 i = 0; i < 6; i++)
diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp
index dda4e8124236ad039cd3a22b2f45db516c534ce9..a92273521f954dce351d386af1a90e527d84317b 100644
--- a/indra/newview/llfloaterlagmeter.cpp
+++ b/indra/newview/llfloaterlagmeter.cpp
@@ -323,9 +323,9 @@ void LLFloaterLagMeter::updateControls(bool shrink)
 		setRect(r);
 		reshape(mMaxWidth, getRect().getHeight());
 		
-		childSetText("client", getString("client_text_msg", mStringArgs) + ":");
-		childSetText("network", getString("network_text_msg",mStringArgs) + ":");
-		childSetText("server", getString("server_text_msg", mStringArgs) + ":");
+		getChild<LLUICtrl>("client")->setValue(getString("client_text_msg", mStringArgs) + ":");
+		getChild<LLUICtrl>("network")->setValue(getString("network_text_msg",mStringArgs) + ":");
+		getChild<LLUICtrl>("server")->setValue(getString("server_text_msg", mStringArgs) + ":");
 
 		// usually "<<"
 		button->setLabel( getString("smaller_label", mStringArgs) );
@@ -338,9 +338,9 @@ void LLFloaterLagMeter::updateControls(bool shrink)
 		setRect(r);
 		reshape(mMinWidth, getRect().getHeight());
 		
-		childSetText("client", getString("client_text_msg", mStringArgs) );
-		childSetText("network",getString("network_text_msg",mStringArgs) );
-		childSetText("server", getString("server_text_msg", mStringArgs) );
+		getChild<LLUICtrl>("client")->setValue(getString("client_text_msg", mStringArgs) );
+		getChild<LLUICtrl>("network")->setValue(getString("network_text_msg",mStringArgs) );
+		getChild<LLUICtrl>("server")->setValue(getString("server_text_msg", mStringArgs) );
 
 		// usually ">>"
 		button->setLabel( getString("bigger_label", mStringArgs) );
@@ -350,15 +350,15 @@ void LLFloaterLagMeter::updateControls(bool shrink)
 
 //	self->mClientText->setVisible(self->mShrunk);
 //	self->mClientCause->setVisible(self->mShrunk);
-//	self->childSetVisible("client_help", self->mShrunk);
+//	self->getChildView("client_help")->setVisible( self->mShrunk);
 
 //	self->mNetworkText->setVisible(self->mShrunk);
 //	self->mNetworkCause->setVisible(self->mShrunk);
-//	self->childSetVisible("network_help", self->mShrunk);
+//	self->getChildView("network_help")->setVisible( self->mShrunk);
 
 //	self->mServerText->setVisible(self->mShrunk);
 //	self->mServerCause->setVisible(self->mShrunk);
-//	self->childSetVisible("server_help", self->mShrunk);
+//	self->getChildView("server_help")->setVisible( self->mShrunk);
 
 //	self->mShrunk = !self->mShrunk;
 }
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 027a32c832bba9b0b917e43c9dda7da5d347b17e..2f080ab334a9f039282e91f57a06ed7169231874 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -365,7 +365,7 @@ BOOL LLPanelLandGeneral::postBuild()
 {
 	mEditName = getChild<LLLineEditor>("Name");
 	mEditName->setCommitCallback(onCommitAny, this);	
-	childSetPrevalidate("Name", LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("Name")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe);
 
 	mEditDesc = getChild<LLTextEditor>("Description");
 	mEditDesc->setCommitOnFocusLost(TRUE);
@@ -382,7 +382,7 @@ BOOL LLPanelLandGeneral::postBuild()
 	mLandType = getChild<LLTextBox>("LandTypeText");
 	
 	mBtnProfile = getChild<LLButton>("Profile...");
-	mBtnProfile->setClickedCallback(onClickProfile, this);
+	mBtnProfile->setClickedCallback(boost::bind(&LLPanelLandGeneral::onClickProfile, this));
 
 	
 	mTextGroupLabel = getChild<LLTextBox>("Group:");
@@ -859,11 +859,9 @@ void LLPanelLandGeneral::onClickSetGroup()
 	}
 }
 
-// static
-void LLPanelLandGeneral::onClickProfile(void* data)
+void LLPanelLandGeneral::onClickProfile()
 {
-	LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data;
-	LLParcel* parcel = panelp->mParcel->getParcel();
+	LLParcel* parcel = mParcel->getParcel();
 	if (!parcel) return;
 
 	if (parcel->getIsGroupOwned())
@@ -914,13 +912,6 @@ void LLPanelLandGeneral::onClickScriptLimits(void* data)
 	}
 }
 
-BOOL LLPanelLandGeneral::enableDeedToGroup(void* data)
-{
-	LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data;
-	LLParcel* parcel = panelp->mParcel->getParcel();
-	return (parcel != NULL) && (parcel->getParcelFlag(PF_ALLOW_DEED_TO_GROUP));
-}
-
 // static
 void LLPanelLandGeneral::onClickDeed(void*)
 {
@@ -1134,7 +1125,7 @@ BOOL LLPanelLandObjects::postBuild()
 
 	mCleanOtherObjectsTime->setFocusLostCallback(boost::bind(onLostFocus, _1, this));
 	mCleanOtherObjectsTime->setCommitCallback(onCommitClean, this);
-	childSetPrevalidate("clean other time", LLTextValidate::validateNonNegativeS32);
+	getChild<LLLineEditor>("clean other time")->setPrevalidate(LLTextValidate::validateNonNegativeS32);
 	
 	mBtnRefresh = getChild<LLButton>("Refresh List");
 	mBtnRefresh->setClickedCallback(onClickRefresh, this);
@@ -2399,18 +2390,18 @@ void LLPanelLandAccess::refresh()
 		BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP);
 		BOOL public_access = !use_access_list && !use_group;
 		
-		childSetValue("public_access", public_access );
-		childSetValue("GroupCheck", use_group );
+		getChild<LLUICtrl>("public_access")->setValue(public_access );
+		getChild<LLUICtrl>("GroupCheck")->setValue(use_group );
 
 		std::string group_name;
 		gCacheName->getGroupName(parcel->getGroupID(), group_name);
-		childSetLabelArg("GroupCheck", "[GROUP]", group_name );
+		getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name );
 		
 		// Allow list
 		{
 			S32 count = parcel->mAccessList.size();
-			childSetToolTipArg("AccessList", "[LISTED]", llformat("%d",count));
-			childSetToolTipArg("AccessList", "[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST));
+			getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
+			getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
 
 			for (access_map_const_iterator cit = parcel->mAccessList.begin();
 				 cit != parcel->mAccessList.end(); ++cit)
@@ -2451,8 +2442,8 @@ void LLPanelLandAccess::refresh()
 		{
 			S32 count = parcel->mBanList.size();
 
-			childSetToolTipArg("BannedList", "[LISTED]", llformat("%d",count));
-			childSetToolTipArg("BannedList", "[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST));
+			getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
+			getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
 
 			for (access_map_const_iterator cit = parcel->mBanList.begin();
 				 cit != parcel->mBanList.end(); ++cit)
@@ -2511,27 +2502,27 @@ void LLPanelLandAccess::refresh()
 
 		if(parcel->getRegionDenyAnonymousOverride())
 		{
-			childSetValue("limit_payment", TRUE);
-			childSetLabelArg( "limit_payment", "[ESTATE_PAYMENT_LIMIT]", getString("access_estate_defined") );
+			getChild<LLUICtrl>("limit_payment")->setValue(TRUE);
+			getChild<LLUICtrl>("limit_payment")->setLabelArg("[ESTATE_PAYMENT_LIMIT]", getString("access_estate_defined") );
 		}
 		else
 		{
-			childSetValue("limit_payment", (parcel->getParcelFlag(PF_DENY_ANONYMOUS)));
-			childSetLabelArg( "limit_payment", "[ESTATE_PAYMENT_LIMIT]", std::string() );
+			getChild<LLUICtrl>("limit_payment")->setValue((parcel->getParcelFlag(PF_DENY_ANONYMOUS)));
+			getChild<LLUICtrl>("limit_payment")->setLabelArg("[ESTATE_PAYMENT_LIMIT]", std::string() );
 		}
 		if(parcel->getRegionDenyAgeUnverifiedOverride())
 		{
-			childSetValue("limit_age_verified", TRUE);
-			childSetLabelArg( "limit_age_verified", "[ESTATE_AGE_LIMIT]", getString("access_estate_defined") );
+			getChild<LLUICtrl>("limit_age_verified")->setValue(TRUE);
+			getChild<LLUICtrl>("limit_age_verified")->setLabelArg("[ESTATE_AGE_LIMIT]", getString("access_estate_defined") );
 		}
 		else
 		{
-			childSetValue("limit_age_verified", (parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED)));
-			childSetLabelArg( "limit_age_verified", "[ESTATE_AGE_LIMIT]", std::string() );
+			getChild<LLUICtrl>("limit_age_verified")->setValue((parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED)));
+			getChild<LLUICtrl>("limit_age_verified")->setLabelArg("[ESTATE_AGE_LIMIT]", std::string() );
 		}
 		
 		BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST);
-		childSetValue("PassCheck",  use_pass );
+		getChild<LLUICtrl>("PassCheck")->setValue(use_pass );
 		LLCtrlSelectionInterface* passcombo = childGetSelectionInterface("pass_combo");
 		if (passcombo)
 		{
@@ -2542,40 +2533,40 @@ void LLPanelLandAccess::refresh()
 		}
 		
 		S32 pass_price = parcel->getPassPrice();
-		childSetValue( "PriceSpin", (F32)pass_price );
+		getChild<LLUICtrl>("PriceSpin")->setValue((F32)pass_price );
 
 		F32 pass_hours = parcel->getPassHours();
-		childSetValue( "HoursSpin", pass_hours );
+		getChild<LLUICtrl>("HoursSpin")->setValue(pass_hours );
 	}
 	else
 	{
-		childSetValue("public_access", FALSE);
-		childSetValue("limit_payment", FALSE);
-		childSetValue("limit_age_verified", FALSE);
-		childSetValue("GroupCheck", FALSE);
-		childSetLabelArg("GroupCheck", "[GROUP]", LLStringUtil::null );
-		childSetValue("PassCheck", FALSE);
-		childSetValue("PriceSpin", (F32)PARCEL_PASS_PRICE_DEFAULT);
-		childSetValue( "HoursSpin", PARCEL_PASS_HOURS_DEFAULT );
-		childSetToolTipArg("AccessList", "[LISTED]", llformat("%d",0));
-		childSetToolTipArg("AccessList", "[MAX]", llformat("%d",0));
-		childSetToolTipArg("BannedList", "[LISTED]", llformat("%d",0));
-		childSetToolTipArg("BannedList", "[MAX]", llformat("%d",0));
+		getChild<LLUICtrl>("public_access")->setValue(FALSE);
+		getChild<LLUICtrl>("limit_payment")->setValue(FALSE);
+		getChild<LLUICtrl>("limit_age_verified")->setValue(FALSE);
+		getChild<LLUICtrl>("GroupCheck")->setValue(FALSE);
+		getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", LLStringUtil::null );
+		getChild<LLUICtrl>("PassCheck")->setValue(FALSE);
+		getChild<LLUICtrl>("PriceSpin")->setValue((F32)PARCEL_PASS_PRICE_DEFAULT);
+		getChild<LLUICtrl>("HoursSpin")->setValue(PARCEL_PASS_HOURS_DEFAULT );
+		getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",0));
+		getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",0));
+		getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",0));
+		getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",0));
 	}	
 }
 
 void LLPanelLandAccess::refresh_ui()
 {
-	childSetEnabled("public_access", FALSE);
-	childSetEnabled("limit_payment", FALSE);
-	childSetEnabled("limit_age_verified", FALSE);
-	childSetEnabled("GroupCheck", FALSE);
-	childSetEnabled("PassCheck", FALSE);
-	childSetEnabled("pass_combo", FALSE);
-	childSetEnabled("PriceSpin", FALSE);
-	childSetEnabled("HoursSpin", FALSE);
-	childSetEnabled("AccessList", FALSE);
-	childSetEnabled("BannedList", FALSE);
+	getChildView("public_access")->setEnabled(FALSE);
+	getChildView("limit_payment")->setEnabled(FALSE);
+	getChildView("limit_age_verified")->setEnabled(FALSE);
+	getChildView("GroupCheck")->setEnabled(FALSE);
+	getChildView("PassCheck")->setEnabled(FALSE);
+	getChildView("pass_combo")->setEnabled(FALSE);
+	getChildView("PriceSpin")->setEnabled(FALSE);
+	getChildView("HoursSpin")->setEnabled(FALSE);
+	getChildView("AccessList")->setEnabled(FALSE);
+	getChildView("BannedList")->setEnabled(FALSE);
 	
 	LLParcel *parcel = mParcel->getParcel();
 	if (parcel)
@@ -2583,73 +2574,73 @@ void LLPanelLandAccess::refresh_ui()
 		BOOL can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED);
 		BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED);
 	
-		childSetEnabled("public_access", can_manage_allowed);
-		BOOL public_access = childGetValue("public_access").asBoolean();
+		getChildView("public_access")->setEnabled(can_manage_allowed);
+		BOOL public_access = getChild<LLUICtrl>("public_access")->getValue().asBoolean();
 		if (public_access)
 		{
 			bool override = false;
 			if(parcel->getRegionDenyAnonymousOverride())
 			{
 				override = true;
-				childSetEnabled("limit_payment", FALSE);
+				getChildView("limit_payment")->setEnabled(FALSE);
 			}
 			else
 			{
-				childSetEnabled("limit_payment", can_manage_allowed);
+				getChildView("limit_payment")->setEnabled(can_manage_allowed);
 			}
 			if(parcel->getRegionDenyAgeUnverifiedOverride())
 			{
 				override = true;
-				childSetEnabled("limit_age_verified", FALSE);
+				getChildView("limit_age_verified")->setEnabled(FALSE);
 			}
 			else
 			{
-				childSetEnabled("limit_age_verified", can_manage_allowed);
+				getChildView("limit_age_verified")->setEnabled(can_manage_allowed);
 			}
 			if (override)
 			{
-				childSetToolTip("Only Allow", getString("estate_override"));
+				getChildView("Only Allow")->setToolTip(getString("estate_override"));
 			}
 			else
 			{
-				childSetToolTip("Only Allow", std::string());
+				getChildView("Only Allow")->setToolTip(std::string());
 			}
-			childSetEnabled("GroupCheck", FALSE);
-			childSetEnabled("PassCheck", FALSE);
-			childSetEnabled("pass_combo", FALSE);
-			childSetEnabled("AccessList", FALSE);
+			getChildView("GroupCheck")->setEnabled(FALSE);
+			getChildView("PassCheck")->setEnabled(FALSE);
+			getChildView("pass_combo")->setEnabled(FALSE);
+			getChildView("AccessList")->setEnabled(FALSE);
 		}
 		else
 		{
-			childSetEnabled("limit_payment", FALSE);
-			childSetEnabled("limit_age_verified", FALSE);
+			getChildView("limit_payment")->setEnabled(FALSE);
+			getChildView("limit_age_verified")->setEnabled(FALSE);
 
 			std::string group_name;
 			if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
 			{			
-				childSetEnabled("GroupCheck", can_manage_allowed);
+				getChildView("GroupCheck")->setEnabled(can_manage_allowed);
 			}
-			BOOL group_access = childGetValue("GroupCheck").asBoolean();
-			BOOL sell_passes = childGetValue("PassCheck").asBoolean();
-			childSetEnabled("PassCheck", can_manage_allowed);
+			BOOL group_access = getChild<LLUICtrl>("GroupCheck")->getValue().asBoolean();
+			BOOL sell_passes = getChild<LLUICtrl>("PassCheck")->getValue().asBoolean();
+			getChildView("PassCheck")->setEnabled(can_manage_allowed);
 			if (sell_passes)
 			{
-				childSetEnabled("pass_combo", group_access && can_manage_allowed);
-				childSetEnabled("PriceSpin", can_manage_allowed);
-				childSetEnabled("HoursSpin", can_manage_allowed);
+				getChildView("pass_combo")->setEnabled(group_access && can_manage_allowed);
+				getChildView("PriceSpin")->setEnabled(can_manage_allowed);
+				getChildView("HoursSpin")->setEnabled(can_manage_allowed);
 			}
 		}
-		childSetEnabled("AccessList", can_manage_allowed);
+		getChildView("AccessList")->setEnabled(can_manage_allowed);
 		S32 allowed_list_count = parcel->mAccessList.size();
-		childSetEnabled("add_allowed", can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
+		getChildView("add_allowed")->setEnabled(can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
 		BOOL has_selected = mListAccess->getSelectionInterface()->getFirstSelectedIndex() >= 0;
-		childSetEnabled("remove_allowed", can_manage_allowed && has_selected);
+		getChildView("remove_allowed")->setEnabled(can_manage_allowed && has_selected);
 		
-		childSetEnabled("BannedList", can_manage_banned);
+		getChildView("BannedList")->setEnabled(can_manage_banned);
 		S32 banned_list_count = parcel->mBanList.size();
-		childSetEnabled("add_banned", can_manage_banned && banned_list_count < PARCEL_MAX_ACCESS_LIST);
+		getChildView("add_banned")->setEnabled(can_manage_banned && banned_list_count < PARCEL_MAX_ACCESS_LIST);
 		has_selected = mListBanned->getSelectionInterface()->getFirstSelectedIndex() >= 0;
-		childSetEnabled("remove_banned", can_manage_banned && has_selected);
+		getChildView("remove_banned")->setEnabled(can_manage_banned && has_selected);
 	}
 }
 		
@@ -2663,7 +2654,7 @@ void LLPanelLandAccess::refreshNames()
 	{
 		gCacheName->getGroupName(parcel->getGroupID(), group_name);
 	}
-	childSetLabelArg("GroupCheck", "[GROUP]", group_name);
+	getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name);
 }
 
 
@@ -2686,13 +2677,13 @@ void LLPanelLandAccess::onCommitPublicAccess(LLUICtrl *ctrl, void *userdata)
 	}
 
 	// If we disabled public access, enable group access by default (if applicable)
-	BOOL public_access = self->childGetValue("public_access").asBoolean();
+	BOOL public_access = self->getChild<LLUICtrl>("public_access")->getValue().asBoolean();
 	if (public_access == FALSE)
 	{
 		std::string group_name;
 		if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
 		{
-			self->childSetValue("GroupCheck", public_access ? FALSE : TRUE);
+			self->getChild<LLUICtrl>("GroupCheck")->setValue(public_access ? FALSE : TRUE);
 		}
 	}
 	
@@ -2711,8 +2702,8 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
 	}
 
 	// Extract data from UI
-	BOOL public_access = self->childGetValue("public_access").asBoolean();
-	BOOL use_access_group = self->childGetValue("GroupCheck").asBoolean();
+	BOOL public_access = self->getChild<LLUICtrl>("public_access")->getValue().asBoolean();
+	BOOL use_access_group = self->getChild<LLUICtrl>("GroupCheck")->getValue().asBoolean();
 	if (use_access_group)
 	{
 		std::string group_name;
@@ -2730,13 +2721,13 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
 	{
 		use_access_list = FALSE;
 		use_access_group = FALSE;
-		limit_payment = self->childGetValue("limit_payment").asBoolean();
-		limit_age_verified = self->childGetValue("limit_age_verified").asBoolean();
+		limit_payment = self->getChild<LLUICtrl>("limit_payment")->getValue().asBoolean();
+		limit_age_verified = self->getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean();
 	}
 	else
 	{
 		use_access_list = TRUE;
-		use_pass_list = self->childGetValue("PassCheck").asBoolean();
+		use_pass_list = self->getChild<LLUICtrl>("PassCheck")->getValue().asBoolean();
 		if (use_access_group && use_pass_list)
 		{
 			LLCtrlSelectionInterface* passcombo = self->childGetSelectionInterface("pass_combo");
@@ -2750,8 +2741,8 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
 		}
 	}
 
-	S32 pass_price = llfloor((F32)self->childGetValue("PriceSpin").asReal());
-	F32 pass_hours = (F32)self->childGetValue("HoursSpin").asReal();
+	S32 pass_price = llfloor((F32)self->getChild<LLUICtrl>("PriceSpin")->getValue().asReal());
+	F32 pass_hours = (F32)self->getChild<LLUICtrl>("HoursSpin")->getValue().asReal();
 
 	// Push data into current parcel
 	parcel->setParcelFlag(PF_USE_ACCESS_GROUP,	use_access_group);
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 868b4cf29b4cb8dee7ff125bcfb83f7cbeafc5a3..309e0ee4e15fe65e9b84d0e23536d672609b14e8 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -138,9 +138,8 @@ public:
 	virtual void draw();
 
 	void setGroup(const LLUUID& group_id);
-	static void onClickProfile(void*);
-		   void onClickSetGroup();
-	static BOOL enableDeedToGroup(void*);
+	void onClickProfile();
+	void onClickSetGroup();
 	static void onClickDeed(void*);
 	static void onClickBuyLand(void* data);
 	static void onClickScriptLimits(void* data);
diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp
index 0ffb3492e041513b81804415e631b81c39b565c4..31f20fbd29e8f3d3a63410791e7c6bf949da2dac 100644
--- a/indra/newview/llfloaterlandholdings.cpp
+++ b/indra/newview/llfloaterlandholdings.cpp
@@ -139,8 +139,8 @@ void LLFloaterLandHoldings::refresh()
 		enable_btns = TRUE;
 	}
 
-	childSetEnabled("Teleport", enable_btns);
-	childSetEnabled("Show on Map", enable_btns);
+	getChildView("Teleport")->setEnabled(enable_btns);
+	getChildView("Show on Map")->setEnabled(enable_btns);
 
 	refreshAggregates();
 }
@@ -328,7 +328,7 @@ void LLFloaterLandHoldings::refreshAggregates()
 	S32 current_area = gStatusBar->getSquareMetersCommitted();
 	S32 available_area = gStatusBar->getSquareMetersLeft();
 
-	childSetTextArg("allowed_text", "[AREA]", llformat("%d",allowed_area));
-	childSetTextArg("current_text", "[AREA]", llformat("%d",current_area));
-	childSetTextArg("available_text", "[AREA]", llformat("%d",available_area));
+	getChild<LLUICtrl>("allowed_text")->setTextArg("[AREA]", llformat("%d",allowed_area));
+	getChild<LLUICtrl>("current_text")->setTextArg("[AREA]", llformat("%d",current_area));
+	getChild<LLUICtrl>("available_text")->setTextArg("[AREA]", llformat("%d",available_area));
 }
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 08307d11a782fc59666762d3593e59ab246fc336..434d0681ab0508902cc04d9713a0dc5bc723c690 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -59,12 +59,12 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)
 
 void LLFloaterMediaBrowser::draw()
 {
-	childSetEnabled("go", !mAddressCombo->getValue().asString().empty());
+	getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty());
 	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
 	if(parcel)
 	{
-		childSetVisible("parcel_owner_controls", LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA));
-		childSetEnabled("assign", !mAddressCombo->getValue().asString().empty());
+		getChildView("parcel_owner_controls")->setVisible( LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA));
+		getChildView("assign")->setEnabled(!mAddressCombo->getValue().asString().empty());
 	}
 	bool show_time_controls = false;
 	bool media_playing = false;
@@ -77,17 +77,17 @@ void LLFloaterMediaBrowser::draw()
 			media_playing = media_plugin->getStatus() == LLPluginClassMediaOwner::MEDIA_PLAYING;
 		}
 	}
-	childSetVisible("rewind", show_time_controls);
-	childSetVisible("play", show_time_controls && ! media_playing);
-	childSetVisible("pause", show_time_controls && media_playing);
-	childSetVisible("stop", show_time_controls);
-	childSetVisible("seek", show_time_controls);
+	getChildView("rewind")->setVisible( show_time_controls);
+	getChildView("play")->setVisible( show_time_controls && ! media_playing);
+	getChildView("pause")->setVisible( show_time_controls && media_playing);
+	getChildView("stop")->setVisible( show_time_controls);
+	getChildView("seek")->setVisible( show_time_controls);
 
-	childSetEnabled("play", ! media_playing);
-	childSetEnabled("stop", media_playing);
+	getChildView("play")->setEnabled(! media_playing);
+	getChildView("stop")->setEnabled(media_playing);
 
-	childSetEnabled("back", mBrowser->canNavigateBack());
-	childSetEnabled("forward", mBrowser->canNavigateForward());
+	getChildView("back")->setEnabled(mBrowser->canNavigateBack());
+	getChildView("forward")->setEnabled(mBrowser->canNavigateForward());
 
 	LLFloater::draw();
 }
@@ -167,8 +167,8 @@ void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEve
 	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
 	{
 		// This is the event these flags are sent with.
-		childSetEnabled("back", self->getHistoryBackAvailable());
-		childSetEnabled("forward", self->getHistoryForwardAvailable());
+		getChildView("back")->setEnabled(self->getHistoryBackAvailable());
+		getChildView("forward")->setEnabled(self->getHistoryForwardAvailable());
 	}
 }
 void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
@@ -186,9 +186,9 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 		LLURLHistory::removeURL("browser", mCurrentURL);
 		LLURLHistory::addURL("browser", mCurrentURL);
 	}
-	childSetEnabled("back", mBrowser->canNavigateBack());
-	childSetEnabled("forward", mBrowser->canNavigateForward());
-	childSetEnabled("reload", TRUE);
+	getChildView("back")->setEnabled(mBrowser->canNavigateBack());
+	getChildView("forward")->setEnabled(mBrowser->canNavigateForward());
+	getChildView("reload")->setEnabled(TRUE);
 }
 
 void LLFloaterMediaBrowser::onOpen(const LLSD& media_url)
diff --git a/indra/newview/llfloatermemleak.cpp b/indra/newview/llfloatermemleak.cpp
index c0ffa59883c22b5a60571547cd098f14b231af76..58931d112e954ddbb86255c25b8ee09f2890c442 100644
--- a/indra/newview/llfloatermemleak.cpp
+++ b/indra/newview/llfloatermemleak.cpp
@@ -58,7 +58,7 @@ LLFloaterMemLeak::LLFloaterMemLeak(const LLSD& key)
 BOOL LLFloaterMemLeak::postBuild(void) 
 {	
 	F32 a, b ;
-	a = childGetValue("leak_speed").asReal();
+	a = getChild<LLUICtrl>("leak_speed")->getValue().asReal();
 	if(a > (F32)(0xFFFFFFFF))
 	{
 		sMemLeakingSpeed = 0xFFFFFFFF ;
@@ -67,7 +67,7 @@ BOOL LLFloaterMemLeak::postBuild(void)
 	{
 		sMemLeakingSpeed = (U32)a ;
 	}
-	b = childGetValue("max_leak").asReal();
+	b = getChild<LLUICtrl>("max_leak")->getValue().asReal();
 	if(b > (F32)0xFFF)
 	{
 		sMaxLeakedMem = 0xFFFFFFFF ;
@@ -144,7 +144,7 @@ void LLFloaterMemLeak::idle()
 void LLFloaterMemLeak::onChangeLeakingSpeed()
 {
 	F32 tmp ;
-	tmp =childGetValue("leak_speed").asReal();
+	tmp =getChild<LLUICtrl>("leak_speed")->getValue().asReal();
 
 	if(tmp > (F32)0xFFFFFFFF)
 	{
@@ -161,7 +161,7 @@ void LLFloaterMemLeak::onChangeMaxMemLeaking()
 {
 
 	F32 tmp ;
-	tmp =childGetValue("max_leak").asReal();
+	tmp =getChild<LLUICtrl>("max_leak")->getValue().asReal();
 	if(tmp > (F32)0xFFF)
 	{
 		sMaxLeakedMem = 0xFFFFFFFF ;
@@ -200,22 +200,22 @@ void LLFloaterMemLeak::draw()
 	{
 		std::string bytes_string;
 		LLResMgr::getInstance()->getIntegerString(bytes_string, sTotalLeaked >> 10 );
-		childSetTextArg("total_leaked_label", "[SIZE]", bytes_string);
+		getChild<LLUICtrl>("total_leaked_label")->setTextArg("[SIZE]", bytes_string);
 	}
 	else
 	{
-		childSetTextArg("total_leaked_label", "[SIZE]", LLStringExplicit("0"));
+		getChild<LLUICtrl>("total_leaked_label")->setTextArg("[SIZE]", LLStringExplicit("0"));
 	}
 
 	if(sbAllocationFailed)
 	{
-		childSetTextArg("note_label_1", "[NOTE1]", LLStringExplicit("Memory leaking simulation stops. Reduce leaking speed or"));
-		childSetTextArg("note_label_2", "[NOTE2]", LLStringExplicit("increase max leaked memory, then press Start to continue."));
+		getChild<LLUICtrl>("note_label_1")->setTextArg("[NOTE1]", LLStringExplicit("Memory leaking simulation stops. Reduce leaking speed or"));
+		getChild<LLUICtrl>("note_label_2")->setTextArg("[NOTE2]", LLStringExplicit("increase max leaked memory, then press Start to continue."));
 	}
 	else
 	{
-		childSetTextArg("note_label_1", "[NOTE1]", LLStringExplicit(""));
-		childSetTextArg("note_label_2", "[NOTE2]", LLStringExplicit(""));
+		getChild<LLUICtrl>("note_label_1")->setTextArg("[NOTE1]", LLStringExplicit(""));
+		getChild<LLUICtrl>("note_label_2")->setTextArg("[NOTE2]", LLStringExplicit(""));
 	}
 
 	LLFloater::draw();
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index 956b387518352cdb5d00bf9486b7d16cf82b7fd1..ae95d4392accfcd2641fd5c23d3a216ab416bc90 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -99,7 +99,7 @@ BOOL LLFloaterNameDesc::postBuild()
 	r.setLeftTopAndSize( PREVIEW_HPAD, y, line_width, PREVIEW_LINE_HEIGHT );    
 
 	getChild<LLUICtrl>("name_form")->setCommitCallback(boost::bind(&LLFloaterNameDesc::doCommit, this));
-	childSetValue("name_form", LLSD(asset_name));
+	getChild<LLUICtrl>("name_form")->setValue(LLSD(asset_name));
 
 	LLLineEditor *NameEditor = getChild<LLLineEditor>("name_form");
 	if (NameEditor)
@@ -125,7 +125,7 @@ BOOL LLFloaterNameDesc::postBuild()
 	// Cancel button
 	getChild<LLUICtrl>("cancel_btn")->setCommitCallback(boost::bind(&LLFloaterNameDesc::onBtnCancel, this));
 
-	childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload() ));
+	getChild<LLUICtrl>("ok_btn")->setLabelArg("[AMOUNT]", llformat("%d", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload() ));
 	
 	setDefaultBtn("ok_btn");
 	
@@ -161,15 +161,15 @@ void LLFloaterNameDesc::doCommit()
 //-----------------------------------------------------------------------------
 void LLFloaterNameDesc::onBtnOK( )
 {
-	childDisable("ok_btn"); // don't allow inadvertent extra uploads
+	getChildView("ok_btn")->setEnabled(FALSE); // don't allow inadvertent extra uploads
 	
 	LLAssetStorage::LLStoreAssetCallback callback = NULL;
 	S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass).
 	void *nruserdata = NULL;
 	std::string display_name = LLStringUtil::null;
 	upload_new_resource(mFilenameAndPath, // file
-			    childGetValue("name_form").asString(), 
-			    childGetValue("description_form").asString(), 
+			    getChild<LLUICtrl>("name_form")->getValue().asString(), 
+			    getChild<LLUICtrl>("description_form")->getValue().asString(), 
 			    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
 			    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),
 			    display_name, callback, expected_upload_cost, nruserdata);
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index 8e92a20bc1c3760d681b8b5b4d09a7800396b6c3..d6f6ba9e5b5b41fb02b89b9712b16e6978b92c5e 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -69,7 +69,7 @@ LLFloaterOpenObject::~LLFloaterOpenObject()
 // virtual
 BOOL LLFloaterOpenObject::postBuild()
 {
-	childSetTextArg("object_name", "[DESC]", std::string("Object") ); // *Note: probably do not want to translate this
+	getChild<LLUICtrl>("object_name")->setTextArg("[DESC]", std::string("Object") ); // *Note: probably do not want to translate this
 	mPanelInventoryObject = getChild<LLPanelObjectInventory>("object_contents");
 	
 	refresh();
@@ -113,9 +113,9 @@ void LLFloaterOpenObject::refresh()
 		enabled = FALSE;
 	}
 	
-	childSetTextArg("object_name", "[DESC]", name);
-	childSetEnabled("copy_to_inventory_button", enabled);
-	childSetEnabled("copy_and_wear_button", enabled);
+	getChild<LLUICtrl>("object_name")->setTextArg("[DESC]", name);
+	getChildView("copy_to_inventory_button")->setEnabled(enabled);
+	getChildView("copy_and_wear_button")->setEnabled(enabled);
 
 }
 
diff --git a/indra/newview/llfloaterparcel.cpp b/indra/newview/llfloaterparcel.cpp
deleted file mode 100644
index c4a51e8e7fd388cffcdc1ab041b9b1d228e2d8fe..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterparcel.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/** 
- * @file llfloaterparcel.cpp
- * @brief LLFloaterParcel class implementation
- * Parcel information as shown in a floating window from secondlife:// command
- * handler.  
- *
- * $LicenseInfo:firstyear=2007&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"
-
-#include "llfloaterparcel.h"
-
-#include "llfloaterreg.h"
-
-// viewer project includes
-#include "llcommandhandler.h"
-#include "llpanelplace.h"
-#include "llsidetray.h"
-
-// linden library includes
-#include "lluuid.h"
-#include "lluictrlfactory.h"
-
-//-----------------------------------------------------------------------------
-// Globals
-//-----------------------------------------------------------------------------
-
-class LLParcelHandler : public LLCommandHandler
-{
-public:
-	// requires trusted browser to trigger
-	LLParcelHandler() : LLCommandHandler("parcel", UNTRUSTED_THROTTLE) { }
-	bool handle(const LLSD& params, const LLSD& query_map,
-				LLMediaCtrl* web)
-	{
-		if (params.size() < 2)
-		{
-			return false;
-		}
-		LLUUID parcel_id;
-		if (!parcel_id.set(params[0], FALSE))
-		{
-			return false;
-		}
-		if (params[1].asString() == "about")
-		{
-			if (parcel_id.notNull())
-			{
-				LLSD key;
-				key["type"] = "remote_place";
-				key["id"] = parcel_id;
-				LLSideTray::getInstance()->showPanel("panel_places", key);
-				return true;
-			}
-		}
-		return false;
-	}
-};
-LLParcelHandler gParcelHandler;
-
-//-----------------------------------------------------------------------------
-// Member functions
-//-----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-
-void* LLFloaterParcelInfo::createPanelPlace(void* data)
-{
-	LLFloaterParcelInfo* self = (LLFloaterParcelInfo*)data;
-	self->mPanelParcelp = new LLPanelPlace(); // allow edit self
-	LLUICtrlFactory::getInstance()->buildPanel(self->mPanelParcelp, "panel_place.xml");
-	return self->mPanelParcelp;
-}
-
-//----------------------------------------------------------------------------
-
-
-LLFloaterParcelInfo::LLFloaterParcelInfo(const LLSD& parcel_id)
-:	LLFloater(parcel_id),
-	mParcelID( parcel_id.asUUID() ),
-	mPanelParcelp(NULL)
-{
-	mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterParcelInfo::createPanelPlace, this);
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_url.xml");
-}
-
-// virtual
-LLFloaterParcelInfo::~LLFloaterParcelInfo()
-{
-
-}
-
-BOOL LLFloaterParcelInfo::postBuild()
-{
-	if (mPanelParcelp)
-	{
-		mPanelParcelp->setParcelID(mParcelID);
-	}
-	center();
-	return LLFloater::postBuild();
-}
-
-
diff --git a/indra/newview/llfloaterparcel.h b/indra/newview/llfloaterparcel.h
deleted file mode 100644
index 7463edcb9095e4978a7d6cc9462cbf89c1dcf693..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterparcel.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/** 
- * @file llfloaterparcel.h
- * @brief Parcel information as shown in a floating window from a sl-url.
- * Just a wrapper for LLPanelPlace, shared with the Find directory.
- *
- * $LicenseInfo:firstyear=2007&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_FLOATERPARCELINFO_H
-#define LL_FLOATERPARCELINFO_H
-
-#include "llfloater.h"
-
-class LLPanelPlace;
-
-class LLFloaterParcelInfo
-:	public LLFloater
-{
-public:
-	static	void*	createPanelPlace(void*	data);
-
-	LLFloaterParcelInfo( const LLSD& parcel_id );
-	/*virtual*/ ~LLFloaterParcelInfo();
-	
-	/*virtual*/ BOOL postBuild();
-	
-	void displayParcelInfo(const LLUUID& parcel_id);
-
-private:
-	LLUUID			mParcelID;			// for which parcel is this window?
-	LLPanelPlace*	mPanelParcelp;
-};
-
-
-#endif
diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp
index ebc0b90fa96ed0ae6626eaf13feb0871526a1cb5..151a76285b2eb4a6eac512f044d4f6fc114d5bc2 100644
--- a/indra/newview/llfloaterpay.cpp
+++ b/indra/newview/llfloaterpay.cpp
@@ -152,7 +152,7 @@ BOOL LLFloaterPay::postBuild()
 	mCallbackData.push_back(info);
 
 	childSetAction("fastpay 1",&LLFloaterPay::onGive,info);
-	childSetVisible("fastpay 1", FALSE);
+	getChildView("fastpay 1")->setVisible( FALSE);
 
 	mQuickPayButton[i] = getChild<LLButton>("fastpay 1");
 	mQuickPayInfo[i] = info;
@@ -162,7 +162,7 @@ BOOL LLFloaterPay::postBuild()
 	mCallbackData.push_back(info);
 
 	childSetAction("fastpay 5",&LLFloaterPay::onGive,info);
-	childSetVisible("fastpay 5", FALSE);
+	getChildView("fastpay 5")->setVisible( FALSE);
 
 	mQuickPayButton[i] = getChild<LLButton>("fastpay 5");
 	mQuickPayInfo[i] = info;
@@ -172,7 +172,7 @@ BOOL LLFloaterPay::postBuild()
 	mCallbackData.push_back(info);
 
 	childSetAction("fastpay 10",&LLFloaterPay::onGive,info);
-	childSetVisible("fastpay 10", FALSE);
+	getChildView("fastpay 10")->setVisible( FALSE);
 
 	mQuickPayButton[i] = getChild<LLButton>("fastpay 10");
 	mQuickPayInfo[i] = info;
@@ -182,14 +182,14 @@ BOOL LLFloaterPay::postBuild()
 	mCallbackData.push_back(info);
 
 	childSetAction("fastpay 20",&LLFloaterPay::onGive,info);
-	childSetVisible("fastpay 20", FALSE);
+	getChildView("fastpay 20")->setVisible( FALSE);
 
 	mQuickPayButton[i] = getChild<LLButton>("fastpay 20");
 	mQuickPayInfo[i] = info;
 	++i;
 
 
-	childSetVisible("amount text", FALSE);	
+	getChildView("amount text")->setVisible( FALSE);	
 
 	std::string last_amount;
 	if(sLastAmount > 0)
@@ -197,19 +197,19 @@ BOOL LLFloaterPay::postBuild()
 		last_amount = llformat("%d", sLastAmount);
 	}
 
-	childSetVisible("amount", FALSE);
+	getChildView("amount")->setVisible( FALSE);
 
 	getChild<LLLineEditor>("amount")->setKeystrokeCallback(&LLFloaterPay::onKeystroke, this);
-	childSetText("amount", last_amount);
-	childSetPrevalidate("amount", LLTextValidate::validateNonNegativeS32);
+	getChild<LLUICtrl>("amount")->setValue(last_amount);
+	getChild<LLLineEditor>("amount")->setPrevalidate(LLTextValidate::validateNonNegativeS32);
 
 	info = new LLGiveMoneyInfo(this, 0);
 	mCallbackData.push_back(info);
 
 	childSetAction("pay btn",&LLFloaterPay::onGive,info);
 	setDefaultBtn("pay btn");
-	childSetVisible("pay btn", FALSE);
-	childSetEnabled("pay btn", (sLastAmount > 0));
+	getChildView("pay btn")->setVisible( FALSE);
+	getChildView("pay btn")->setEnabled((sLastAmount > 0));
 
 	childSetAction("cancel btn",&LLFloaterPay::onCancel,this);
 
@@ -243,27 +243,27 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
 		
 		if (PAY_PRICE_HIDE == price)
 		{
-			self->childSetVisible("amount", FALSE);
-			self->childSetVisible("pay btn", FALSE);
-			self->childSetVisible("amount text", FALSE);
+			self->getChildView("amount")->setVisible( FALSE);
+			self->getChildView("pay btn")->setVisible( FALSE);
+			self->getChildView("amount text")->setVisible( FALSE);
 		}
 		else if (PAY_PRICE_DEFAULT == price)
 		{			
-			self->childSetVisible("amount", TRUE);
-			self->childSetVisible("pay btn", TRUE);
-			self->childSetVisible("amount text", TRUE);
+			self->getChildView("amount")->setVisible( TRUE);
+			self->getChildView("pay btn")->setVisible( TRUE);
+			self->getChildView("amount text")->setVisible( TRUE);
 		}
 		else
 		{
 			// PAY_PRICE_HIDE and PAY_PRICE_DEFAULT are negative values
 			// So we take the absolute value here after we have checked for those cases
 			
-			self->childSetVisible("amount", TRUE);
-			self->childSetVisible("pay btn", TRUE);
-			self->childSetEnabled("pay btn", TRUE);
-			self->childSetVisible("amount text", TRUE);
+			self->getChildView("amount")->setVisible( TRUE);
+			self->getChildView("pay btn")->setVisible( TRUE);
+			self->getChildView("pay btn")->setEnabled(TRUE);
+			self->getChildView("amount text")->setVisible( TRUE);
 
-			self->childSetText("amount", llformat("%d", llabs(price)));
+			self->getChild<LLUICtrl>("amount")->setValue(llformat("%d", llabs(price)));
 		}
 
 		S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_ButtonData);
@@ -286,7 +286,7 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
 				self->mQuickPayButton[i]->setLabelUnselected(button_str);
 				self->mQuickPayButton[i]->setVisible(TRUE);
 				self->mQuickPayInfo[i]->mAmount = pay_button;
-				self->childSetVisible("fastpay text",TRUE);
+				self->getChildView("fastpay text")->setVisible(TRUE);
 
 				if ( pay_button > max_pay_amount )
 				{
@@ -393,7 +393,7 @@ void LLFloaterPay::payViaObject(money_callback callback, LLSafeHandle<LLObjectSe
 	BOOL is_group = FALSE;
 	node->mPermissions->getOwnership(owner_id, is_group);
 	
-	floater->childSetText("object_name_text",node->mName);
+	floater->getChild<LLUICtrl>("object_name_text")->setValue(node->mName);
 
 	floater->finishPayUI(owner_id, is_group);
 }
@@ -409,11 +409,11 @@ void LLFloaterPay::payDirectly(money_callback callback,
 	floater->setCallback(callback);
 	floater->mObjectSelection = NULL;
 	
-	floater->childSetVisible("amount", TRUE);
-	floater->childSetVisible("pay btn", TRUE);
-	floater->childSetVisible("amount text", TRUE);
+	floater->getChildView("amount")->setVisible( TRUE);
+	floater->getChildView("pay btn")->setVisible( TRUE);
+	floater->getChildView("amount text")->setVisible( TRUE);
 
-	floater->childSetVisible("fastpay text",TRUE);
+	floater->getChildView("fastpay text")->setVisible(TRUE);
 	for(S32 i=0;i<MAX_PAY_BUTTONS;++i)
 	{
 		floater->mQuickPayButton[i]->setVisible(TRUE);
@@ -428,7 +428,7 @@ void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group)
 
 	// Make sure the amount field has focus
 
-	childSetFocus("amount", TRUE);
+	getChild<LLUICtrl>("amount")->setFocus( TRUE);
 	
 	LLLineEditor* amount = getChild<LLLineEditor>("amount");
 	amount->selectAll();
@@ -449,8 +449,8 @@ void LLFloaterPay::onCacheOwnerName(const LLUUID& owner_id,
 		setTitle(getString("payee_resident"));
 	}
 	
-	childSetTextArg("payee_name", "[FIRST]", firstname);
-	childSetTextArg("payee_name", "[LAST]", lastname);
+	getChild<LLUICtrl>("payee_name")->setTextArg("[FIRST]", firstname);
+	getChild<LLUICtrl>("payee_name")->setTextArg("[LAST]", lastname);
 }
 
 // static
@@ -470,8 +470,8 @@ void LLFloaterPay::onKeystroke(LLLineEditor*, void* data)
 	if(self)
 	{
 		// enable the Pay button when amount is non-empty and positive, disable otherwise
-		std::string amtstr = self->childGetText("amount");
-		self->childSetEnabled("pay btn", !amtstr.empty() && atoi(amtstr.c_str()) > 0);
+		std::string amtstr = self->getChild<LLUICtrl>("amount")->getValue().asString();
+		self->getChildView("pay btn")->setEnabled(!amtstr.empty() && atoi(amtstr.c_str()) > 0);
 	}
 }
 
@@ -494,7 +494,7 @@ void LLFloaterPay::give(S32 amount)
 		// text field.
 		if(amount == 0)
 		{
-			amount = atoi(childGetText("amount").c_str());
+			amount = atoi(getChild<LLUICtrl>("amount")->getValue().asString().c_str());
 		}
 		sLastAmount = amount;
 
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index 0a321b999f81d65680b788e4bc1e24b364406872..bcdcd50288adf6c53c786aaa0ac032c6c39484a3 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -93,16 +93,16 @@ BOOL LLFloaterPostcard::postBuild()
 	childSetAction("cancel_btn", onClickCancel, this);
 	childSetAction("send_btn", onClickSend, this);
 
-	childDisable("from_form");
+	getChildView("from_form")->setEnabled(FALSE);
 
 	std::string name_string;
 	LLAgentUI::buildFullname(name_string);
-	childSetValue("name_form", LLSD(name_string));
+	getChild<LLUICtrl>("name_form")->setValue(LLSD(name_string));
 
 	// For the first time a user focusess to .the msg box, all text will be selected.
 	getChild<LLUICtrl>("msg_form")->setFocusChangedCallback(boost::bind(onMsgFormFocusRecieved, _1, this));
 	
-	childSetFocus("to_form", TRUE);
+	getChild<LLUICtrl>("to_form")->setFocus(TRUE);
 
     return TRUE;
 }
@@ -209,8 +209,8 @@ void LLFloaterPostcard::onClickSend(void* data)
 	{
 		LLFloaterPostcard *self = (LLFloaterPostcard *)data;
 
-		std::string from(self->childGetValue("from_form").asString());
-		std::string to(self->childGetValue("to_form").asString());
+		std::string from(self->getChild<LLUICtrl>("from_form")->getValue().asString());
+		std::string to(self->getChild<LLUICtrl>("to_form")->getValue().asString());
 		
 		boost::regex emailFormat("[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}(,[ \t]*[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})*");
 		
@@ -226,7 +226,7 @@ void LLFloaterPostcard::onClickSend(void* data)
 			return;
 		}
 
-		std::string subject(self->childGetValue("subject_form").asString());
+		std::string subject(self->getChild<LLUICtrl>("subject_form")->getValue().asString());
 		if(subject.empty() || !self->mHasFirstMsgFocus)
 		{
 			LLNotificationsUtil::add("PromptMissingSubjMsg", LLSD(), LLSD(), boost::bind(&LLFloaterPostcard::missingSubjMsgAlertCallback, self, _1, _2));
@@ -269,11 +269,11 @@ void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data,
 		msg->addUUID("SessionID", gAgent.getSessionID());
 		msg->addUUID("AssetID", self->mAssetID);
 		msg->addVector3d("PosGlobal", self->mPosTakenGlobal);
-		msg->addString("To", self->childGetValue("to_form").asString());
-		msg->addString("From", self->childGetValue("from_form").asString());
-		msg->addString("Name", self->childGetValue("name_form").asString());
-		msg->addString("Subject", self->childGetValue("subject_form").asString());
-		msg->addString("Msg", self->childGetValue("msg_form").asString());
+		msg->addString("To", self->getChild<LLUICtrl>("to_form")->getValue().asString());
+		msg->addString("From", self->getChild<LLUICtrl>("from_form")->getValue().asString());
+		msg->addString("Name", self->getChild<LLUICtrl>("name_form")->getValue().asString());
+		msg->addString("Subject", self->getChild<LLUICtrl>("subject_form")->getValue().asString());
+		msg->addString("Msg", self->getChild<LLUICtrl>("msg_form")->getValue().asString());
 		msg->addBOOL("AllowPublish", FALSE);
 		msg->addBOOL("MaturePublish", FALSE);
 		gAgent.sendReliableMessage();
@@ -290,11 +290,11 @@ void LLFloaterPostcard::updateUserInfo(const std::string& email)
 		 iter != inst_list.end(); ++iter)
 	{
 		LLFloater* instance = *iter;
-		const std::string& text = instance->childGetValue("from_form").asString();
+		const std::string& text = instance->getChild<LLUICtrl>("from_form")->getValue().asString();
 		if (text.empty())
 		{
 			// there's no text in this field yet, pre-populate
-			instance->childSetValue("from_form", LLSD(email));
+			instance->getChild<LLUICtrl>("from_form")->setValue(LLSD(email));
 		}
 	}
 }
@@ -319,17 +319,17 @@ bool LLFloaterPostcard::missingSubjMsgAlertCallback(const LLSD& notification, co
 	if(0 == option)
 	{
 		// User clicked OK
-		if((childGetValue("subject_form").asString()).empty())
+		if((getChild<LLUICtrl>("subject_form")->getValue().asString()).empty())
 		{
 			// Stuff the subject back into the form.
-			childSetValue("subject_form", getString("default_subject"));
+			getChild<LLUICtrl>("subject_form")->setValue(getString("default_subject"));
 		}
 
 		if(!mHasFirstMsgFocus)
 		{
 			// The user never switched focus to the messagee window. 
 			// Using the default string.
-			childSetValue("msg_form", getString("default_message"));
+			getChild<LLUICtrl>("msg_form")->setValue(getString("default_message"));
 		}
 
 		sendPostcard();
@@ -351,11 +351,11 @@ void LLFloaterPostcard::sendPostcard()
 		LLSD body = LLSD::emptyMap();
 		// the capability already encodes: agent ID, region ID
 		body["pos-global"] = mPosTakenGlobal.getValue();
-		body["to"] = childGetValue("to_form").asString();
-		body["from"] = childGetValue("from_form").asString();
-		body["name"] = childGetValue("name_form").asString();
-		body["subject"] = childGetValue("subject_form").asString();
-		body["msg"] = childGetValue("msg_form").asString();
+		body["to"] = getChild<LLUICtrl>("to_form")->getValue().asString();
+		body["from"] = getChild<LLUICtrl>("from_form")->getValue().asString();
+		body["name"] = getChild<LLUICtrl>("name_form")->getValue().asString();
+		body["subject"] = getChild<LLUICtrl>("subject_form")->getValue().asString();
+		body["msg"] = getChild<LLUICtrl>("msg_form")->getValue().asString();
 		LLHTTPClient::post(url, body, new LLSendPostcardResponder(body, mAssetID, LLAssetType::AT_IMAGE_JPEG));
 	} 
 	else
diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp
index 5092bef72430f138a7944beff985d672d2a44167..7f27caf68f69fe863836f08d6d21b963e880c355 100644
--- a/indra/newview/llfloaterpostprocess.cpp
+++ b/indra/newview/llfloaterpostprocess.cpp
@@ -206,25 +206,25 @@ void LLFloaterPostProcess::syncMenu()
 	comboBox->selectByValue(gPostProcess->getSelectedEffect());
 
 	/// Sync Color Filter Menu
-	childSetValue("ColorFilterToggle", gPostProcess->tweaks.useColorFilter());
-	//childSetValue("ColorFilterGamma", gPostProcess->tweaks.gamma());
-	childSetValue("ColorFilterBrightness", gPostProcess->tweaks.brightness());
-	childSetValue("ColorFilterSaturation", gPostProcess->tweaks.saturation());
-	childSetValue("ColorFilterContrast", gPostProcess->tweaks.contrast());
-	childSetValue("ColorFilterBaseR", gPostProcess->tweaks.contrastBaseR());
-	childSetValue("ColorFilterBaseG", gPostProcess->tweaks.contrastBaseG());
-	childSetValue("ColorFilterBaseB", gPostProcess->tweaks.contrastBaseB());
-	childSetValue("ColorFilterBaseI", gPostProcess->tweaks.contrastBaseIntensity());
+	getChild<LLUICtrl>("ColorFilterToggle")->setValue(gPostProcess->tweaks.useColorFilter());
+	//getChild<LLUICtrl>("ColorFilterGamma")->setValue(gPostProcess->tweaks.gamma());
+	getChild<LLUICtrl>("ColorFilterBrightness")->setValue(gPostProcess->tweaks.brightness());
+	getChild<LLUICtrl>("ColorFilterSaturation")->setValue(gPostProcess->tweaks.saturation());
+	getChild<LLUICtrl>("ColorFilterContrast")->setValue(gPostProcess->tweaks.contrast());
+	getChild<LLUICtrl>("ColorFilterBaseR")->setValue(gPostProcess->tweaks.contrastBaseR());
+	getChild<LLUICtrl>("ColorFilterBaseG")->setValue(gPostProcess->tweaks.contrastBaseG());
+	getChild<LLUICtrl>("ColorFilterBaseB")->setValue(gPostProcess->tweaks.contrastBaseB());
+	getChild<LLUICtrl>("ColorFilterBaseI")->setValue(gPostProcess->tweaks.contrastBaseIntensity());
 	
 	/// Sync Night Vision Menu
-	childSetValue("NightVisionToggle", gPostProcess->tweaks.useNightVisionShader());
-	childSetValue("NightVisionBrightMult", gPostProcess->tweaks.brightMult());
-	childSetValue("NightVisionNoiseSize", gPostProcess->tweaks.noiseSize());
-	childSetValue("NightVisionNoiseStrength", gPostProcess->tweaks.noiseStrength());
+	getChild<LLUICtrl>("NightVisionToggle")->setValue(gPostProcess->tweaks.useNightVisionShader());
+	getChild<LLUICtrl>("NightVisionBrightMult")->setValue(gPostProcess->tweaks.brightMult());
+	getChild<LLUICtrl>("NightVisionNoiseSize")->setValue(gPostProcess->tweaks.noiseSize());
+	getChild<LLUICtrl>("NightVisionNoiseStrength")->setValue(gPostProcess->tweaks.noiseStrength());
 
 	/// Sync Bloom Menu
-	childSetValue("BloomToggle", LLSD(gPostProcess->tweaks.useBloomShader()));
-	childSetValue("BloomExtract", gPostProcess->tweaks.extractLow());
-	childSetValue("BloomSize", gPostProcess->tweaks.bloomWidth());
-	childSetValue("BloomStrength", gPostProcess->tweaks.bloomStrength());
+	getChild<LLUICtrl>("BloomToggle")->setValue(LLSD(gPostProcess->tweaks.useBloomShader()));
+	getChild<LLUICtrl>("BloomExtract")->setValue(gPostProcess->tweaks.extractLow());
+	getChild<LLUICtrl>("BloomSize")->setValue(gPostProcess->tweaks.bloomWidth());
+	getChild<LLUICtrl>("BloomStrength")->setValue(gPostProcess->tweaks.bloomStrength());
 }
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index ee8836bb4702706e16d13601c8b5ec7269378b97..3804a1b85840db0d9959b06eb1f4786ca830e5d3 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -138,7 +138,7 @@ LLVoiceSetKeyDialog::LLVoiceSetKeyDialog(const LLSD& key)
 BOOL LLVoiceSetKeyDialog::postBuild()
 {
 	childSetAction("Cancel", onCancel, this);
-	childSetFocus("Cancel");
+	getChild<LLUICtrl>("Cancel")->setFocus(TRUE);
 	
 	gFocusMgr.setKeystrokesOnly(TRUE);
 	
@@ -324,7 +324,7 @@ BOOL LLFloaterPreference::postBuild()
 		tabcontainer->selectFirstTab();
 
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
-	childSetText("cache_location", cache_location);
+	getChild<LLUICtrl>("cache_location")->setValue(cache_location);
 
 	// if floater is opened before login set default localized busy message
 	if (LLStartUp::getStartupState() < STATE_STARTED)
@@ -420,28 +420,28 @@ void LLFloaterPreference::apply()
 	fov_slider->setMaxValue(LLViewerCamera::getInstance()->getMaxView());
 	
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
-	childSetText("cache_location", cache_location);		
+	getChild<LLUICtrl>("cache_location")->setValue(cache_location);		
 	
-	LLViewerMedia::setCookiesEnabled(childGetValue("cookies_enabled"));
+	LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());
 	
 	if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port"))
 	{
-		bool proxy_enable = childGetValue("web_proxy_enabled");
-		std::string proxy_address = childGetValue("web_proxy_editor");
-		int proxy_port = childGetValue("web_proxy_port");
+		bool proxy_enable = getChild<LLUICtrl>("web_proxy_enabled")->getValue();
+		std::string proxy_address = getChild<LLUICtrl>("web_proxy_editor")->getValue();
+		int proxy_port = getChild<LLUICtrl>("web_proxy_port")->getValue();
 		LLViewerMedia::setProxyConfig(proxy_enable, proxy_address, proxy_port);
 	}
 	
 //	LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString());
 //	LLWStringUtil::replaceTabsWithSpaces(busy_response, 4);
 
-	gSavedSettings.setBOOL("PlainTextChatHistory", childGetValue("plain_text_chat_history").asBoolean());
+	gSavedSettings.setBOOL("PlainTextChatHistory", getChild<LLUICtrl>("plain_text_chat_history")->getValue().asBoolean());
 	
 	if(mGotPersonalInfo)
 	{ 
 //		gSavedSettings.setString("BusyModeResponse2", std::string(wstring_to_utf8str(busy_response)));
-		bool new_im_via_email = childGetValue("send_im_to_email").asBoolean();
-		bool new_hide_online = childGetValue("online_visibility").asBoolean();		
+		bool new_im_via_email = getChild<LLUICtrl>("send_im_to_email")->getValue().asBoolean();
+		bool new_hide_online = getChild<LLUICtrl>("online_visibility")->getValue().asBoolean();		
 	
 		if((new_im_via_email != mOriginalIMViaEmail)
 			||(new_hide_online != mOriginalHideOnlineStatus))
@@ -539,13 +539,13 @@ void LLFloaterPreference::onOpen(const LLSD& key)
 				maturity_list->deleteItems(LLSD(SIM_ACCESS_ADULT));
 			}
 		}
-		childSetVisible("maturity_desired_combobox", true);
-		childSetVisible("maturity_desired_textbox", false);
+		getChildView("maturity_desired_combobox")->setVisible( true);
+		getChildView("maturity_desired_textbox")->setVisible( false);
 	}
 	else
 	{
-		childSetText("maturity_desired_textbox",  maturity_combo->getSelectedItemLabel());
-		childSetVisible("maturity_desired_combobox", false);
+		getChild<LLUICtrl>("maturity_desired_textbox")->setValue(maturity_combo->getSelectedItemLabel());
+		getChildView("maturity_desired_combobox")->setVisible( false);
 	}
 
 	// Display selected maturity icons.
@@ -838,7 +838,7 @@ void LLFloaterPreference::buildPopupLists()
 
 void LLFloaterPreference::refreshEnabledState()
 {	
-	LLCheckBoxCtrl* ctrl_reflections = getChild<LLCheckBoxCtrl>("Reflections");
+	LLComboBox* ctrl_reflections = getChild<LLComboBox>("Reflections");
 	LLRadioGroup* radio_reflection_detail = getChild<LLRadioGroup>("ReflectionDetailRadio");
 	
 	// Reflections
@@ -851,7 +851,7 @@ void LLFloaterPreference::refreshEnabledState()
 	bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump");
 	getChild<LLCheckBoxCtrl>("BumpShiny")->setEnabled(bumpshiny ? TRUE : FALSE);
 	
-	radio_reflection_detail->setEnabled(ctrl_reflections->get() && reflections);
+	radio_reflection_detail->setEnabled(reflections);
 	
 	// Avatar Mode
 	// Enable Avatar Shaders
@@ -897,20 +897,47 @@ void LLFloaterPreference::refreshEnabledState()
 	// *HACK just checks to see if we can use shaders... 
 	// maybe some cards that use shaders, but don't support windlight
 	ctrl_wind_light->setEnabled(ctrl_shader_enable->getEnabled() && shaders);
+
+	//Deferred/SSAO/Shadows
+	LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
+	if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseFBO") &&
+	    LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
+		shaders)
+	{
+		BOOL enabled = (ctrl_wind_light->get()) ? TRUE : FALSE;
+
+		ctrl_deferred->setEnabled(enabled);
+	
+		LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO");
+		LLComboBox* ctrl_shadow = getChild<LLComboBox>("ShadowDetail");
+
+		enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO") && (ctrl_deferred->get() ? TRUE : FALSE);
+		
+		ctrl_ssao->setEnabled(enabled);
+
+		enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail");
+
+		ctrl_shadow->setEnabled(enabled);
+	}
+
+
 	// now turn off any features that are unavailable
 	disableUnavailableSettings();
 
-	childSetEnabled ("block_list", LLLoginInstance::getInstance()->authSuccess());
+	getChildView("block_list")->setEnabled(LLLoginInstance::getInstance()->authSuccess());
 }
 
 void LLFloaterPreference::disableUnavailableSettings()
 {	
-	LLCheckBoxCtrl* ctrl_reflections   = getChild<LLCheckBoxCtrl>("Reflections");
+	LLComboBox* ctrl_reflections   = getChild<LLComboBox>("Reflections");
 	LLCheckBoxCtrl* ctrl_avatar_vp     = getChild<LLCheckBoxCtrl>("AvatarVertexProgram");
 	LLCheckBoxCtrl* ctrl_avatar_cloth  = getChild<LLCheckBoxCtrl>("AvatarCloth");
 	LLCheckBoxCtrl* ctrl_shader_enable = getChild<LLCheckBoxCtrl>("BasicShaders");
 	LLCheckBoxCtrl* ctrl_wind_light    = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders");
 	LLCheckBoxCtrl* ctrl_avatar_impostors = getChild<LLCheckBoxCtrl>("AvatarImpostors");
+	LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
+	LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail");
+	LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO");
 
 	// if vertex shaders off, disable all shader related products
 	if(!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
@@ -922,13 +949,22 @@ void LLFloaterPreference::disableUnavailableSettings()
 		ctrl_wind_light->setValue(FALSE);
 		
 		ctrl_reflections->setEnabled(FALSE);
-		ctrl_reflections->setValue(FALSE);
+		ctrl_reflections->setValue(0);
 		
 		ctrl_avatar_vp->setEnabled(FALSE);
 		ctrl_avatar_vp->setValue(FALSE);
 		
 		ctrl_avatar_cloth->setEnabled(FALSE);
 		ctrl_avatar_cloth->setValue(FALSE);
+
+		ctrl_shadows->setEnabled(FALSE);
+		ctrl_shadows->setValue(0);
+		
+		ctrl_ssao->setEnabled(FALSE);
+		ctrl_ssao->setValue(FALSE);
+
+		ctrl_deferred->setEnabled(FALSE);
+		ctrl_deferred->setValue(FALSE);
 	}
 	
 	// disabled windlight
@@ -936,10 +972,47 @@ void LLFloaterPreference::disableUnavailableSettings()
 	{
 		ctrl_wind_light->setEnabled(FALSE);
 		ctrl_wind_light->setValue(FALSE);
+
+		//deferred needs windlight, disable deferred
+		ctrl_shadows->setEnabled(FALSE);
+		ctrl_shadows->setValue(0);
+		
+		ctrl_ssao->setEnabled(FALSE);
+		ctrl_ssao->setValue(FALSE);
+
+		ctrl_deferred->setEnabled(FALSE);
+		ctrl_deferred->setValue(FALSE);
+	}
+
+	// disabled deferred
+	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred"))
+	{
+		ctrl_shadows->setEnabled(FALSE);
+		ctrl_shadows->setValue(0);
+		
+		ctrl_ssao->setEnabled(FALSE);
+		ctrl_ssao->setValue(FALSE);
+
+		ctrl_deferred->setEnabled(FALSE);
+		ctrl_deferred->setValue(FALSE);
+	}
+	
+	// disabled deferred SSAO
+	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO"))
+	{
+		ctrl_ssao->setEnabled(FALSE);
+		ctrl_ssao->setValue(FALSE);
 	}
 	
+	// disabled deferred shadows
+	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"))
+	{
+		ctrl_shadows->setEnabled(FALSE);
+		ctrl_shadows->setValue(0);
+	}
+
 	// disabled reflections
-	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderWaterReflections"))
+	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail"))
 	{
 		ctrl_reflections->setEnabled(FALSE);
 		ctrl_reflections->setValue(FALSE);
@@ -953,13 +1026,25 @@ void LLFloaterPreference::disableUnavailableSettings()
 		
 		ctrl_avatar_cloth->setEnabled(FALSE);
 		ctrl_avatar_cloth->setValue(FALSE);
+
+		//deferred needs AvatarVP, disable deferred
+		ctrl_shadows->setEnabled(FALSE);
+		ctrl_shadows->setValue(0);
+		
+		ctrl_ssao->setEnabled(FALSE);
+		ctrl_ssao->setValue(FALSE);
+
+		ctrl_deferred->setEnabled(FALSE);
+		ctrl_deferred->setValue(FALSE);
 	}
+
 	// disabled cloth
 	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
 	{
 		ctrl_avatar_cloth->setEnabled(FALSE);
 		ctrl_avatar_cloth->setValue(FALSE);
 	}
+
 	// disabled impostors
 	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
 	{
@@ -1010,7 +1095,7 @@ void LLFloaterPreference::onClickSetKey()
 
 void LLFloaterPreference::setKey(KEY key)
 {
-	childSetValue("modifier_combo", LLKeyboard::stringFromKey(key));
+	getChild<LLUICtrl>("modifier_combo")->setValue(LLKeyboard::stringFromKey(key));
 	// update the control right away since we no longer wait for apply
 	getChild<LLUICtrl>("modifier_combo")->onCommit();
 }
@@ -1123,46 +1208,46 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
 	if(visibility == VISIBILITY_DEFAULT)
 	{
 		mOriginalHideOnlineStatus = false;
-		childEnable("online_visibility"); 	 
+		getChildView("online_visibility")->setEnabled(TRUE); 	 
 	}
 	else if(visibility == VISIBILITY_HIDDEN)
 	{
 		mOriginalHideOnlineStatus = true;
-		childEnable("online_visibility"); 	 
+		getChildView("online_visibility")->setEnabled(TRUE); 	 
 	}
 	else
 	{
 		mOriginalHideOnlineStatus = true;
 	}
 	
-	childEnable("include_im_in_chat_history");
-	childEnable("show_timestamps_check_im");
-	childEnable("friends_online_notify_checkbox");
-	
-	childSetValue("online_visibility", mOriginalHideOnlineStatus); 	 
-	childSetLabelArg("online_visibility", "[DIR_VIS]", mDirectoryVisibility);
-	childEnable("send_im_to_email");
-	childSetValue("send_im_to_email", im_via_email);
-	childEnable("plain_text_chat_history");
-	childSetValue("plain_text_chat_history", gSavedSettings.getBOOL("PlainTextChatHistory"));
-	childEnable("log_instant_messages");
-//	childEnable("log_chat");
-//	childEnable("busy_response");
-//	childEnable("log_instant_messages_timestamp");
-//	childEnable("log_chat_timestamp");
-	childEnable("log_chat_IM");
-	childEnable("log_date_timestamp");
-	
-//	childSetText("busy_response", gSavedSettings.getString("BusyModeResponse2"));
-	
-	childEnable("log_nearby_chat");
-	childEnable("log_instant_messages");
-	childEnable("show_timestamps_check_im");
-	childDisable("log_path_string");// LineEditor becomes readonly in this case.
-	childEnable("log_path_button");
+	getChildView("include_im_in_chat_history")->setEnabled(TRUE);
+	getChildView("show_timestamps_check_im")->setEnabled(TRUE);
+	getChildView("friends_online_notify_checkbox")->setEnabled(TRUE);
+	
+	getChild<LLUICtrl>("online_visibility")->setValue(mOriginalHideOnlineStatus); 	 
+	getChild<LLUICtrl>("online_visibility")->setLabelArg("[DIR_VIS]", mDirectoryVisibility);
+	getChildView("send_im_to_email")->setEnabled(TRUE);
+	getChild<LLUICtrl>("send_im_to_email")->setValue(im_via_email);
+	getChildView("plain_text_chat_history")->setEnabled(TRUE);
+	getChild<LLUICtrl>("plain_text_chat_history")->setValue(gSavedSettings.getBOOL("PlainTextChatHistory"));
+	getChildView("log_instant_messages")->setEnabled(TRUE);
+//	getChildView("log_chat")->setEnabled(TRUE);
+//	getChildView("busy_response")->setEnabled(TRUE);
+//	getChildView("log_instant_messages_timestamp")->setEnabled(TRUE);
+//	getChildView("log_chat_timestamp")->setEnabled(TRUE);
+	getChildView("log_chat_IM")->setEnabled(TRUE);
+	getChildView("log_date_timestamp")->setEnabled(TRUE);
+	
+//	getChild<LLUICtrl>("busy_response")->setValue(gSavedSettings.getString("BusyModeResponse2"));
+	
+	getChildView("log_nearby_chat")->setEnabled(TRUE);
+	getChildView("log_instant_messages")->setEnabled(TRUE);
+	getChildView("show_timestamps_check_im")->setEnabled(TRUE);
+	getChildView("log_path_string")->setEnabled(FALSE);// LineEditor becomes readonly in this case.
+	getChildView("log_path_button")->setEnabled(TRUE);
 	
 	std::string display_email(email);
-	childSetText("email_address",display_email);
+	getChild<LLUICtrl>("email_address")->setValue(display_email);
 
 }
 
@@ -1261,8 +1346,8 @@ BOOL LLPanelPreference::postBuild()
 	if(hasChild("voice_unavailable"))
 	{
 		BOOL voice_disabled = gSavedSettings.getBOOL("CmdLineDisableVoice");
-		childSetVisible("voice_unavailable", voice_disabled);
-		childSetVisible("enable_voice_check", !voice_disabled);
+		getChildView("voice_unavailable")->setVisible( voice_disabled);
+		getChildView("enable_voice_check")->setVisible( !voice_disabled);
 	}
 	
 	//////////////////////PanelSkins ///////////////////
@@ -1282,8 +1367,8 @@ BOOL LLPanelPreference::postBuild()
 
 	if(hasChild("online_visibility") && hasChild("send_im_to_email"))
 	{
-		childSetText("email_address",getString("log_in_to_change") );
-//		childSetText("busy_response", getString("log_in_to_change"));		
+		getChild<LLUICtrl>("email_address")->setValue(getString("log_in_to_change") );
+//		getChild<LLUICtrl>("busy_response")->setValue(getString("log_in_to_change"));		
 	}
 	
 	//////////////////////PanelPrivacy ///////////////////
@@ -1307,9 +1392,9 @@ BOOL LLPanelPreference::postBuild()
 	if (hasChild("modifier_combo"))
 	{
 		//localizing if push2talk button is set to middle mouse
-		if (MIDDLE_MOUSE_CV == childGetValue("modifier_combo").asString())
+		if (MIDDLE_MOUSE_CV == getChild<LLUICtrl>("modifier_combo")->getValue().asString())
 		{
-			childSetValue("modifier_combo", getString("middle_mouse"));
+			getChild<LLUICtrl>("modifier_combo")->setValue(getString("middle_mouse"));
 		}
 	}
 
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index ebe98eb2e1f012d63dd2ffbb7eee7e1c93cbfbec..e4e4713dbca833d2e43103066acec9b3e5880580 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -124,9 +124,9 @@ BOOL LLFloaterProperties::postBuild()
 {
 	// build the UI
 	// item name & description
-	childSetPrevalidate("LabelItemName",&LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("LabelItemName")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 	getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitName,this));
-	childSetPrevalidate("LabelItemDesc",&LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("LabelItemDesc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 	getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLFloaterProperties:: onCommitDescription, this));
 	// Creator information
 	getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLFloaterProperties::onClickCreator,this));
@@ -195,7 +195,7 @@ void LLFloaterProperties::refresh()
 		};
 		for(size_t t=0; t<LL_ARRAY_SIZE(enableNames); ++t)
 		{
-			childSetEnabled(enableNames[t],false);
+			getChildView(enableNames[t])->setEnabled(false);
 		}
 		const char* hideNames[]={
 			"BaseMaskDebug",
@@ -206,7 +206,7 @@ void LLFloaterProperties::refresh()
 		};
 		for(size_t t=0; t<LL_ARRAY_SIZE(hideNames); ++t)
 		{
-			childSetVisible(hideNames[t],false);
+			getChildView(hideNames[t])->setVisible(false);
 		}
 	}
 }
@@ -259,13 +259,13 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 											   GP_OBJECT_MANIPULATE)
 		&& is_obj_modify && is_complete;
 
-	childSetEnabled("LabelItemNameTitle",TRUE);
-	childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
-	childSetText("LabelItemName",item->getName());
-	childSetEnabled("LabelItemDescTitle",TRUE);
-	childSetEnabled("LabelItemDesc",is_modifiable);
-	childSetVisible("IconLocked",!is_modifiable);
-	childSetText("LabelItemDesc",item->getDescription());
+	getChildView("LabelItemNameTitle")->setEnabled(TRUE);
+	getChildView("LabelItemName")->setEnabled(is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
+	getChild<LLUICtrl>("LabelItemName")->setValue(item->getName());
+	getChildView("LabelItemDescTitle")->setEnabled(TRUE);
+	getChildView("LabelItemDesc")->setEnabled(is_modifiable);
+	getChildView("IconLocked")->setVisible(!is_modifiable);
+	getChild<LLUICtrl>("LabelItemDesc")->setValue(item->getDescription());
 
 	//////////////////
 	// CREATOR NAME //
@@ -277,17 +277,17 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	{
 		std::string name;
 		gCacheName->getFullName(item->getCreatorUUID(), name);
-		childSetEnabled("BtnCreator",TRUE);
-		childSetEnabled("LabelCreatorTitle",TRUE);
-		childSetEnabled("LabelCreatorName",TRUE);
-		childSetText("LabelCreatorName",name);
+		getChildView("BtnCreator")->setEnabled(TRUE);
+		getChildView("LabelCreatorTitle")->setEnabled(TRUE);
+		getChildView("LabelCreatorName")->setEnabled(TRUE);
+		getChild<LLUICtrl>("LabelCreatorName")->setValue(name);
 	}
 	else
 	{
-		childSetEnabled("BtnCreator",FALSE);
-		childSetEnabled("LabelCreatorTitle",FALSE);
-		childSetEnabled("LabelCreatorName",FALSE);
-		childSetText("LabelCreatorName",getString("unknown"));
+		getChildView("BtnCreator")->setEnabled(FALSE);
+		getChildView("LabelCreatorTitle")->setEnabled(FALSE);
+		getChildView("LabelCreatorName")->setEnabled(FALSE);
+		getChild<LLUICtrl>("LabelCreatorName")->setValue(getString("unknown"));
 	}
 
 	////////////////
@@ -304,17 +304,17 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 		{
 			gCacheName->getFullName(perm.getOwner(), name);
 		}
-		childSetEnabled("BtnOwner",TRUE);
-		childSetEnabled("LabelOwnerTitle",TRUE);
-		childSetEnabled("LabelOwnerName",TRUE);
-		childSetText("LabelOwnerName",name);
+		getChildView("BtnOwner")->setEnabled(TRUE);
+		getChildView("LabelOwnerTitle")->setEnabled(TRUE);
+		getChildView("LabelOwnerName")->setEnabled(TRUE);
+		getChild<LLUICtrl>("LabelOwnerName")->setValue(name);
 	}
 	else
 	{
-		childSetEnabled("BtnOwner",FALSE);
-		childSetEnabled("LabelOwnerTitle",FALSE);
-		childSetEnabled("LabelOwnerName",FALSE);
-		childSetText("LabelOwnerName",getString("public"));
+		getChildView("BtnOwner")->setEnabled(FALSE);
+		getChildView("LabelOwnerTitle")->setEnabled(FALSE);
+		getChildView("LabelOwnerName")->setEnabled(FALSE);
+		getChild<LLUICtrl>("LabelOwnerName")->setValue(getString("public"));
 	}
 	
 	//////////////////
@@ -324,7 +324,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	time_t time_utc = item->getCreationDate();
 	if (0 == time_utc)
 	{
-		childSetText("LabelAcquiredDate",getString("unknown"));
+		getChild<LLUICtrl>("LabelAcquiredDate")->setValue(getString("unknown"));
 	}
 	else
 	{
@@ -332,7 +332,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 		LLSD substitution;
 		substitution["datetime"] = (S32) time_utc;
 		LLStringUtil::format (timeStr, substitution);
-		childSetText ("LabelAcquiredDate", timeStr);
+		getChild<LLUICtrl>("LabelAcquiredDate")->setValue(timeStr);
 	}
 
 	///////////////////////
@@ -340,11 +340,11 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	///////////////////////
 	if(can_agent_manipulate)
 	{
-		childSetText("OwnerLabel",getString("you_can"));
+		getChild<LLUICtrl>("OwnerLabel")->setValue(getString("you_can"));
 	}
 	else
 	{
-		childSetText("OwnerLabel",getString("owner_can"));
+		getChild<LLUICtrl>("OwnerLabel")->setValue(getString("owner_can"));
 	}
 
 	U32 base_mask		= perm.getMaskBase();
@@ -353,13 +353,13 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	U32 everyone_mask	= perm.getMaskEveryone();
 	U32 next_owner_mask	= perm.getMaskNextOwner();
 
-	childSetEnabled("OwnerLabel",TRUE);
-	childSetEnabled("CheckOwnerModify",FALSE);
-	childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY)));
-	childSetEnabled("CheckOwnerCopy",FALSE);
-	childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY)));
-	childSetEnabled("CheckOwnerTransfer",FALSE);
-	childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
+	getChildView("OwnerLabel")->setEnabled(TRUE);
+	getChildView("CheckOwnerModify")->setEnabled(FALSE);
+	getChild<LLUICtrl>("CheckOwnerModify")->setValue(LLSD((BOOL)(owner_mask & PERM_MODIFY)));
+	getChildView("CheckOwnerCopy")->setEnabled(FALSE);
+	getChild<LLUICtrl>("CheckOwnerCopy")->setValue(LLSD((BOOL)(owner_mask & PERM_COPY)));
+	getChildView("CheckOwnerTransfer")->setEnabled(FALSE);
+	getChild<LLUICtrl>("CheckOwnerTransfer")->setValue(LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
 
 	///////////////////////
 	// DEBUG PERMISSIONS //
@@ -383,39 +383,39 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 
 		perm_string = "B: ";
 		perm_string += mask_to_string(base_mask);
-		childSetText("BaseMaskDebug",perm_string);
-		childSetVisible("BaseMaskDebug",TRUE);
+		getChild<LLUICtrl>("BaseMaskDebug")->setValue(perm_string);
+		getChildView("BaseMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "O: ";
 		perm_string += mask_to_string(owner_mask);
-		childSetText("OwnerMaskDebug",perm_string);
-		childSetVisible("OwnerMaskDebug",TRUE);
+		getChild<LLUICtrl>("OwnerMaskDebug")->setValue(perm_string);
+		getChildView("OwnerMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "G";
 		perm_string += overwrite_group ? "*: " : ": ";
 		perm_string += mask_to_string(group_mask);
-		childSetText("GroupMaskDebug",perm_string);
-		childSetVisible("GroupMaskDebug",TRUE);
+		getChild<LLUICtrl>("GroupMaskDebug")->setValue(perm_string);
+		getChildView("GroupMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "E";
 		perm_string += overwrite_everyone ? "*: " : ": ";
 		perm_string += mask_to_string(everyone_mask);
-		childSetText("EveryoneMaskDebug",perm_string);
-		childSetVisible("EveryoneMaskDebug",TRUE);
+		getChild<LLUICtrl>("EveryoneMaskDebug")->setValue(perm_string);
+		getChildView("EveryoneMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "N";
 		perm_string += slam_perm ? "*: " : ": ";
 		perm_string += mask_to_string(next_owner_mask);
-		childSetText("NextMaskDebug",perm_string);
-		childSetVisible("NextMaskDebug",TRUE);
+		getChild<LLUICtrl>("NextMaskDebug")->setValue(perm_string);
+		getChildView("NextMaskDebug")->setVisible(TRUE);
 	}
 	else
 	{
-		childSetVisible("BaseMaskDebug",FALSE);
-		childSetVisible("OwnerMaskDebug",FALSE);
-		childSetVisible("GroupMaskDebug",FALSE);
-		childSetVisible("EveryoneMaskDebug",FALSE);
-		childSetVisible("NextMaskDebug",FALSE);
+		getChildView("BaseMaskDebug")->setVisible(FALSE);
+		getChildView("OwnerMaskDebug")->setVisible(FALSE);
+		getChildView("GroupMaskDebug")->setVisible(FALSE);
+		getChildView("EveryoneMaskDebug")->setVisible(FALSE);
+		getChildView("NextMaskDebug")->setVisible(FALSE);
 	}
 
 	/////////////
@@ -425,18 +425,18 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	// Check for ability to change values.
 	if (is_link || cannot_restrict_permissions)
 	{
-		childSetEnabled("CheckShareWithGroup",FALSE);
-		childSetEnabled("CheckEveryoneCopy",FALSE);
+		getChildView("CheckShareWithGroup")->setEnabled(FALSE);
+		getChildView("CheckEveryoneCopy")->setEnabled(FALSE);
 	}
 	else if (is_obj_modify && can_agent_manipulate)
 	{
-		childSetEnabled("CheckShareWithGroup",TRUE);
-		childSetEnabled("CheckEveryoneCopy",(owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER));
+		getChildView("CheckShareWithGroup")->setEnabled(TRUE);
+		getChildView("CheckEveryoneCopy")->setEnabled((owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER));
 	}
 	else
 	{
-		childSetEnabled("CheckShareWithGroup",FALSE);
-		childSetEnabled("CheckEveryoneCopy",FALSE);
+		getChildView("CheckShareWithGroup")->setEnabled(FALSE);
+		getChildView("CheckEveryoneCopy")->setEnabled(FALSE);
 	}
 
 	// Set values.
@@ -446,7 +446,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 
 	if (is_group_copy && is_group_modify && is_group_move)
 	{
-		childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE));
+		getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)TRUE));
 
 		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
 		if(ctl)
@@ -456,7 +456,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	}
 	else if (!is_group_copy && !is_group_modify && !is_group_move)
 	{
-		childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE));
+		getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)FALSE));
 		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
 		if(ctl)
 		{
@@ -473,7 +473,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 		}
 	}
 	
-	childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY)));
+	getChild<LLUICtrl>("CheckEveryoneCopy")->setValue(LLSD((BOOL)(everyone_mask & PERM_COPY)));
 
 	///////////////
 	// SALE INFO //
@@ -485,40 +485,40 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	if (is_obj_modify && can_agent_sell 
 		&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
 	{
-		childSetEnabled("SaleLabel",is_complete);
-		childSetEnabled("CheckPurchase",is_complete);
+		getChildView("SaleLabel")->setEnabled(is_complete);
+		getChildView("CheckPurchase")->setEnabled(is_complete);
 
-		childSetEnabled("NextOwnerLabel",TRUE);
-		childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
-		childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions);
-		childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
+		getChildView("NextOwnerLabel")->setEnabled(TRUE);
+		getChildView("CheckNextOwnerModify")->setEnabled((base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
+		getChildView("CheckNextOwnerCopy")->setEnabled((base_mask & PERM_COPY) && !cannot_restrict_permissions);
+		getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
 
-		childSetEnabled("RadioSaleType",is_complete && is_for_sale);
-		childSetEnabled("TextPrice",is_complete && is_for_sale);
-		childSetEnabled("Edit Cost",is_complete && is_for_sale);
+		getChildView("RadioSaleType")->setEnabled(is_complete && is_for_sale);
+		getChildView("TextPrice")->setEnabled(is_complete && is_for_sale);
+		getChildView("Edit Cost")->setEnabled(is_complete && is_for_sale);
 	}
 	else
 	{
-		childSetEnabled("SaleLabel",FALSE);
-		childSetEnabled("CheckPurchase",FALSE);
+		getChildView("SaleLabel")->setEnabled(FALSE);
+		getChildView("CheckPurchase")->setEnabled(FALSE);
 
-		childSetEnabled("NextOwnerLabel",FALSE);
-		childSetEnabled("CheckNextOwnerModify",FALSE);
-		childSetEnabled("CheckNextOwnerCopy",FALSE);
-		childSetEnabled("CheckNextOwnerTransfer",FALSE);
+		getChildView("NextOwnerLabel")->setEnabled(FALSE);
+		getChildView("CheckNextOwnerModify")->setEnabled(FALSE);
+		getChildView("CheckNextOwnerCopy")->setEnabled(FALSE);
+		getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE);
 
-		childSetEnabled("RadioSaleType",FALSE);
-		childSetEnabled("TextPrice",FALSE);
-		childSetEnabled("Edit Cost",FALSE);
+		getChildView("RadioSaleType")->setEnabled(FALSE);
+		getChildView("TextPrice")->setEnabled(FALSE);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 	}
 
 	// Set values.
-	childSetValue("CheckPurchase", is_for_sale);
-	childSetEnabled("combobox sale copy", is_for_sale);
-	childSetEnabled("Edit Cost", is_for_sale);
-	childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
-	childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));
-	childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
+	getChild<LLUICtrl>("CheckPurchase")->setValue(is_for_sale);
+	getChildView("combobox sale copy")->setEnabled(is_for_sale);
+	getChildView("Edit Cost")->setEnabled(is_for_sale);
+	getChild<LLUICtrl>("CheckNextOwnerModify")->setValue(LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
+	getChild<LLUICtrl>("CheckNextOwnerCopy")->setValue(LLSD(BOOL(next_owner_mask & PERM_COPY)));
+	getChild<LLUICtrl>("CheckNextOwnerTransfer")->setValue(LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
 
 	LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");
 	if (is_for_sale)
@@ -526,12 +526,12 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 		radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
 		S32 numerical_price;
 		numerical_price = sale_info.getSalePrice();
-		childSetText("Edit Cost",llformat("%d",numerical_price));
+		getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",numerical_price));
 	}
 	else
 	{
 		radioSaleType->setSelectedIndex(-1);
-		childSetText("Edit Cost",llformat("%d",0));
+		getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",0));
 	}
 }
 
@@ -752,10 +752,10 @@ void LLFloaterProperties::updateSaleInfo()
 	LLSaleInfo sale_info(item->getSaleInfo());
 	if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
 	{
-		childSetValue("CheckPurchase",LLSD((BOOL)FALSE));
+		getChild<LLUICtrl>("CheckPurchase")->setValue(LLSD((BOOL)FALSE));
 	}
 
-	if((BOOL)childGetValue("CheckPurchase"))
+	if((BOOL)getChild<LLUICtrl>("CheckPurchase")->getValue())
 	{
 		// turn on sale info
 		LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index fa7a4a57591689f90a64a8ffc08daf989c9437a7..29ad0f3b9ca615ce685558fa141a337574311780 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -326,20 +326,20 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
 
 	// GENERAL PANEL
 	panel = tab->getChild<LLPanel>("General");
-	panel->childSetValue("region_text", LLSD(sim_name));
-	panel->childSetValue("region_type", LLSD(sim_type));
-	panel->childSetValue("version_channel_text", gLastVersionChannel);
-
-	panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE );
-	panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE );
-	panel->childSetValue("allow_damage_check", (region_flags & REGION_FLAGS_ALLOW_DAMAGE) ? TRUE : FALSE );
-	panel->childSetValue("restrict_pushobject", (region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE );
-	panel->childSetValue("allow_land_resell_check", (region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE );
-	panel->childSetValue("allow_parcel_changes_check", (region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE );
-	panel->childSetValue("block_parcel_search_check", (region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE );
-	panel->childSetValue("agent_limit_spin", LLSD((F32)agent_limit) );
-	panel->childSetValue("object_bonus_spin", LLSD(object_bonus_factor) );
-	panel->childSetValue("access_combo", LLSD(sim_access) );
+	panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name));
+	panel->getChild<LLUICtrl>("region_type")->setValue(LLSD(sim_type));
+	panel->getChild<LLUICtrl>("version_channel_text")->setValue(gLastVersionChannel);
+
+	panel->getChild<LLUICtrl>("block_terraform_check")->setValue((region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE );
+	panel->getChild<LLUICtrl>("block_fly_check")->setValue((region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE );
+	panel->getChild<LLUICtrl>("allow_damage_check")->setValue((region_flags & REGION_FLAGS_ALLOW_DAMAGE) ? TRUE : FALSE );
+	panel->getChild<LLUICtrl>("restrict_pushobject")->setValue((region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE );
+	panel->getChild<LLUICtrl>("allow_land_resell_check")->setValue((region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE );
+	panel->getChild<LLUICtrl>("allow_parcel_changes_check")->setValue((region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE );
+	panel->getChild<LLUICtrl>("block_parcel_search_check")->setValue((region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE );
+	panel->getChild<LLUICtrl>("agent_limit_spin")->setValue(LLSD((F32)agent_limit) );
+	panel->getChild<LLUICtrl>("object_bonus_spin")->setValue(LLSD(object_bonus_factor) );
+	panel->getChild<LLUICtrl>("access_combo")->setValue(LLSD(sim_access) );
 
 
  	// detect teen grid for maturity
@@ -347,32 +347,32 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
 	U32 parent_estate_id;
 	msg->getU32("RegionInfo", "ParentEstateID", parent_estate_id);
 	BOOL teen_grid = (parent_estate_id == 5);  // *TODO add field to estate table and test that
-	panel->childSetEnabled("access_combo", gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid));
+	panel->getChildView("access_combo")->setEnabled(gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid));
 	panel->setCtrlsEnabled(allow_modify);
 	
 
 	// DEBUG PANEL
 	panel = tab->getChild<LLPanel>("Debug");
 
-	panel->childSetValue("region_text", LLSD(sim_name) );
-	panel->childSetValue("disable_scripts_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) );
-	panel->childSetValue("disable_collisions_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) );
-	panel->childSetValue("disable_physics_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) );
+	panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name) );
+	panel->getChild<LLUICtrl>("disable_scripts_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) );
+	panel->getChild<LLUICtrl>("disable_collisions_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) );
+	panel->getChild<LLUICtrl>("disable_physics_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) );
 	panel->setCtrlsEnabled(allow_modify);
 
 	// TERRAIN PANEL
 	panel = tab->getChild<LLPanel>("Terrain");
 
-	panel->childSetValue("region_text", LLSD(sim_name));
-	panel->childSetValue("water_height_spin", LLSD(water_height));
-	panel->childSetValue("terrain_raise_spin", LLSD(terrain_raise_limit));
-	panel->childSetValue("terrain_lower_spin", LLSD(terrain_lower_limit));
-	panel->childSetValue("use_estate_sun_check", LLSD(use_estate_sun));
+	panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name));
+	panel->getChild<LLUICtrl>("water_height_spin")->setValue(LLSD(water_height));
+	panel->getChild<LLUICtrl>("terrain_raise_spin")->setValue(LLSD(terrain_raise_limit));
+	panel->getChild<LLUICtrl>("terrain_lower_spin")->setValue(LLSD(terrain_lower_limit));
+	panel->getChild<LLUICtrl>("use_estate_sun_check")->setValue(LLSD(use_estate_sun));
 
-	panel->childSetValue("fixed_sun_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED)));
-	panel->childSetEnabled("fixed_sun_check", allow_modify && !use_estate_sun);
-	panel->childSetValue("sun_hour_slider", LLSD(sun_hour));
-	panel->childSetEnabled("sun_hour_slider", allow_modify && !use_estate_sun);
+	panel->getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED)));
+	panel->getChildView("fixed_sun_check")->setEnabled(allow_modify && !use_estate_sun);
+	panel->getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour));
+	panel->getChildView("sun_hour_slider")->setEnabled(allow_modify && !use_estate_sun);
 	panel->setCtrlsEnabled(allow_modify);
 
 	floater->refreshFromRegion( gAgent.getRegion() );
@@ -479,7 +479,7 @@ void LLPanelRegionInfo::onChangeText(LLLineEditor* caller, void* user_data)
 BOOL LLPanelRegionInfo::postBuild()
 {
 	getChild<LLUICtrl>("apply_btn")->setCommitCallback(boost::bind(&LLPanelRegionInfo::onBtnSet, this));
-	childDisable("apply_btn");
+	getChildView("apply_btn")->setEnabled(FALSE);
 	refresh();
 	return TRUE;
 }
@@ -531,12 +531,12 @@ void LLPanelRegionInfo::sendEstateOwnerMessage(
 
 void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable)
 {
-	childSetEnabled(btn_name, enable);
+	getChildView(btn_name)->setEnabled(enable);
 }
 
 void LLPanelRegionInfo::disableButton(const std::string& btn_name)
 {
-	childDisable(btn_name);
+	getChildView(btn_name)->setEnabled(FALSE);
 }
 
 void LLPanelRegionInfo::initCtrl(const std::string& name)
@@ -557,14 +557,14 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region)
 {
 	BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
 	setCtrlsEnabled(allow_modify);
-	childDisable("apply_btn");
-	childSetEnabled("access_text", allow_modify);
-	// childSetEnabled("access_combo", allow_modify);
+	getChildView("apply_btn")->setEnabled(FALSE);
+	getChildView("access_text")->setEnabled(allow_modify);
+	// getChildView("access_combo")->setEnabled(allow_modify);
 	// now set in processRegionInfo for teen grid detection
-	childSetEnabled("kick_btn", allow_modify);
-	childSetEnabled("kick_all_btn", allow_modify);
-	childSetEnabled("im_btn", allow_modify);
-	childSetEnabled("manage_telehub_btn", allow_modify);
+	getChildView("kick_btn")->setEnabled(allow_modify);
+	getChildView("kick_all_btn")->setEnabled(allow_modify);
+	getChildView("im_btn")->setEnabled(allow_modify);
+	getChildView("manage_telehub_btn")->setEnabled(allow_modify);
 
 	// Data gets filled in by processRegionInfo
 
@@ -713,16 +713,16 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate()
 	std::string url = gAgent.getRegion()->getCapability("DispatchRegionInfo");
 	if (!url.empty())
 	{
-		body["block_terraform"] = childGetValue("block_terraform_check");
-		body["block_fly"] = childGetValue("block_fly_check");
-		body["allow_damage"] = childGetValue("allow_damage_check");
-		body["allow_land_resell"] = childGetValue("allow_land_resell_check");
-		body["agent_limit"] = childGetValue("agent_limit_spin");
-		body["prim_bonus"] = childGetValue("object_bonus_spin");
-		body["sim_access"] = childGetValue("access_combo");
-		body["restrict_pushobject"] = childGetValue("restrict_pushobject");
-		body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check");
-		body["block_parcel_search"] = childGetValue("block_parcel_search_check");
+		body["block_terraform"] = getChild<LLUICtrl>("block_terraform_check")->getValue();
+		body["block_fly"] = getChild<LLUICtrl>("block_fly_check")->getValue();
+		body["allow_damage"] = getChild<LLUICtrl>("allow_damage_check")->getValue();
+		body["allow_land_resell"] = getChild<LLUICtrl>("allow_land_resell_check")->getValue();
+		body["agent_limit"] = getChild<LLUICtrl>("agent_limit_spin")->getValue();
+		body["prim_bonus"] = getChild<LLUICtrl>("object_bonus_spin")->getValue();
+		body["sim_access"] = getChild<LLUICtrl>("access_combo")->getValue();
+		body["restrict_pushobject"] = getChild<LLUICtrl>("restrict_pushobject")->getValue();
+		body["allow_parcel_changes"] = getChild<LLUICtrl>("allow_parcel_changes_check")->getValue();
+		body["block_parcel_search"] = getChild<LLUICtrl>("block_parcel_search_check")->getValue();
 
 		LLHTTPClient::post(url, body, new LLHTTPClient::Responder());
 	}
@@ -731,33 +731,33 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate()
 		strings_t strings;
 		std::string buffer;
 
-		buffer = llformat("%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N"));
+		buffer = llformat("%s", (getChild<LLUICtrl>("block_terraform_check")->getValue().asBoolean() ? "Y" : "N"));
 		strings.push_back(strings_t::value_type(buffer));
 
-		buffer = llformat("%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N"));
+		buffer = llformat("%s", (getChild<LLUICtrl>("block_fly_check")->getValue().asBoolean() ? "Y" : "N"));
 		strings.push_back(strings_t::value_type(buffer));
 
-		buffer = llformat("%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N"));
+		buffer = llformat("%s", (getChild<LLUICtrl>("allow_damage_check")->getValue().asBoolean() ? "Y" : "N"));
 		strings.push_back(strings_t::value_type(buffer));
 
-		buffer = llformat("%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N"));
+		buffer = llformat("%s", (getChild<LLUICtrl>("allow_land_resell_check")->getValue().asBoolean() ? "Y" : "N"));
 		strings.push_back(strings_t::value_type(buffer));
 
-		F32 value = (F32)childGetValue("agent_limit_spin").asReal();
+		F32 value = (F32)getChild<LLUICtrl>("agent_limit_spin")->getValue().asReal();
 		buffer = llformat("%f", value);
 		strings.push_back(strings_t::value_type(buffer));
 
-		value = (F32)childGetValue("object_bonus_spin").asReal();
+		value = (F32)getChild<LLUICtrl>("object_bonus_spin")->getValue().asReal();
 		buffer = llformat("%f", value);
 		strings.push_back(strings_t::value_type(buffer));
 
-		buffer = llformat("%d", childGetValue("access_combo").asInteger());
+		buffer = llformat("%d", getChild<LLUICtrl>("access_combo")->getValue().asInteger());
 		strings.push_back(strings_t::value_type(buffer));
 
-		buffer = llformat("%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N"));
+		buffer = llformat("%s", (getChild<LLUICtrl>("restrict_pushobject")->getValue().asBoolean() ? "Y" : "N"));
 		strings.push_back(strings_t::value_type(buffer));
 
-		buffer = llformat("%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N"));
+		buffer = llformat("%s", (getChild<LLUICtrl>("allow_parcel_changes_check")->getValue().asBoolean() ? "Y" : "N"));
 		strings.push_back(strings_t::value_type(buffer));
 
 		LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
@@ -766,7 +766,7 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate()
 
 	// if we changed access levels, tell user about it
 	LLViewerRegion* region = gAgent.getRegion();
-	if (region && (childGetValue("access_combo").asInteger() != region->getSimAccess()) )
+	if (region && (getChild<LLUICtrl>("access_combo")->getValue().asInteger() != region->getSimAccess()) )
 	{
 		LLNotificationsUtil::add("RegionMaturityChange");
 	}	
@@ -799,18 +799,18 @@ bool LLPanelRegionDebugInfo::refreshFromRegion(LLViewerRegion* region)
 {
 	BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
 	setCtrlsEnabled(allow_modify);
-	childDisable("apply_btn");
-	childDisable("target_avatar_name");
+	getChildView("apply_btn")->setEnabled(FALSE);
+	getChildView("target_avatar_name")->setEnabled(FALSE);
 	
-	childSetEnabled("choose_avatar_btn", allow_modify);
-	childSetEnabled("return_scripts", allow_modify && !mTargetAvatar.isNull());
-	childSetEnabled("return_other_land", allow_modify && !mTargetAvatar.isNull());
-	childSetEnabled("return_estate_wide", allow_modify && !mTargetAvatar.isNull());
-	childSetEnabled("return_btn", allow_modify && !mTargetAvatar.isNull());
-	childSetEnabled("top_colliders_btn", allow_modify);
-	childSetEnabled("top_scripts_btn", allow_modify);
-	childSetEnabled("restart_btn", allow_modify);
-	childSetEnabled("cancel_restart_btn", allow_modify);
+	getChildView("choose_avatar_btn")->setEnabled(allow_modify);
+	getChildView("return_scripts")->setEnabled(allow_modify && !mTargetAvatar.isNull());
+	getChildView("return_other_land")->setEnabled(allow_modify && !mTargetAvatar.isNull());
+	getChildView("return_estate_wide")->setEnabled(allow_modify && !mTargetAvatar.isNull());
+	getChildView("return_btn")->setEnabled(allow_modify && !mTargetAvatar.isNull());
+	getChildView("top_colliders_btn")->setEnabled(allow_modify);
+	getChildView("top_scripts_btn")->setEnabled(allow_modify);
+	getChildView("restart_btn")->setEnabled(allow_modify);
+	getChildView("cancel_restart_btn")->setEnabled(allow_modify);
 
 	return LLPanelRegionInfo::refreshFromRegion(region);
 }
@@ -822,13 +822,13 @@ BOOL LLPanelRegionDebugInfo::sendUpdate()
 	strings_t strings;
 	std::string buffer;
 
-	buffer = llformat("%s", (childGetValue("disable_scripts_check").asBoolean() ? "Y" : "N"));
+	buffer = llformat("%s", (getChild<LLUICtrl>("disable_scripts_check")->getValue().asBoolean() ? "Y" : "N"));
 	strings.push_back(buffer);
 
-	buffer = llformat("%s", (childGetValue("disable_collisions_check").asBoolean() ? "Y" : "N"));
+	buffer = llformat("%s", (getChild<LLUICtrl>("disable_collisions_check")->getValue().asBoolean() ? "Y" : "N"));
 	strings.push_back(buffer);
 
-	buffer = llformat("%s", (childGetValue("disable_physics_check").asBoolean() ? "Y" : "N"));
+	buffer = llformat("%s", (getChild<LLUICtrl>("disable_physics_check")->getValue().asBoolean() ? "Y" : "N"));
 	strings.push_back(buffer);
 
 	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
@@ -846,7 +846,7 @@ void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& na
 {
 	if (ids.empty() || names.empty()) return;
 	mTargetAvatar = ids[0];
-	childSetValue("target_avatar_name", LLSD(names[0]));
+	getChild<LLUICtrl>("target_avatar_name")->setValue(LLSD(names[0]));
 	refreshFromRegion( gAgent.getRegion() );
 }
 
@@ -857,23 +857,23 @@ void LLPanelRegionDebugInfo::onClickReturn(void* data)
 	if (panelp->mTargetAvatar.isNull()) return;
 
 	LLSD args;
-	args["USER_NAME"] = panelp->childGetValue("target_avatar_name").asString();
+	args["USER_NAME"] = panelp->getChild<LLUICtrl>("target_avatar_name")->getValue().asString();
 	LLSD payload;
 	payload["avatar_id"] = panelp->mTargetAvatar;
 	
 	U32 flags = SWD_ALWAYS_RETURN_OBJECTS;
 
-	if (panelp->childGetValue("return_scripts").asBoolean())
+	if (panelp->getChild<LLUICtrl>("return_scripts")->getValue().asBoolean())
 	{
 		flags |= SWD_SCRIPTED_ONLY;
 	}
 	
-	if (panelp->childGetValue("return_other_land").asBoolean())
+	if (panelp->getChild<LLUICtrl>("return_other_land")->getValue().asBoolean())
 	{
 		flags |= SWD_OTHERS_LAND_ONLY;
 	}
 	payload["flags"] = int(flags);
-	payload["return_estate_wide"] = panelp->childGetValue("return_estate_wide").asBoolean();
+	payload["return_estate_wide"] = panelp->getChild<LLUICtrl>("return_estate_wide")->getValue().asBoolean();
 	LLNotificationsUtil::add("EstateObjectReturn", args, payload, 
 									boost::bind(&LLPanelRegionDebugInfo::callbackReturn, panelp, _1, _2));
 }
@@ -979,15 +979,15 @@ bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
 {
 	BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
 	setCtrlsEnabled(allow_modify);
-	childDisable("apply_btn");
+	getChildView("apply_btn")->setEnabled(FALSE);
 
 	if (region)
 	{
-		childSetValue("region_text", LLSD(region->getName()));
+		getChild<LLUICtrl>("region_text")->setValue(LLSD(region->getName()));
 	}
 	else
 	{
-		childSetValue("region_text", LLSD(""));
+		getChild<LLUICtrl>("region_text")->setValue(LLSD(""));
 	}
 
 	if (!region) return LLPanelRegionInfo::refreshFromRegion(region);
@@ -1011,9 +1011,9 @@ bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
 	for(S32 i = 0; i < CORNER_COUNT; ++i)
     {
 		buffer = llformat("height_start_spin_%d", i);
-		childSetValue(buffer, LLSD(compp->getStartHeight(i)));
+		getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getStartHeight(i)));
 		buffer = llformat("height_range_spin_%d", i);
-		childSetValue(buffer, LLSD(compp->getHeightRange(i)));
+		getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getHeightRange(i)));
 	}
 
 	// Call the parent for common book-keeping
@@ -1082,7 +1082,7 @@ BOOL LLPanelRegionTextureInfo::sendUpdate()
 	{
 		buffer = llformat("height_start_spin_%d", i);
 		std::string buffer2 = llformat("height_range_spin_%d", i);
-		std::string buffer3 = llformat("%d %f %f", i, (F32)childGetValue(buffer).asReal(), (F32)childGetValue(buffer2).asReal());
+		std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal());
 		strings.push_back(buffer3);
 	}
 	sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
@@ -1175,11 +1175,11 @@ bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
 	BOOL owner_or_god_or_manager = owner_or_god
 						|| (region && region->isEstateManager());
 	setCtrlsEnabled(owner_or_god_or_manager);
-	childDisable("apply_btn");
+	getChildView("apply_btn")->setEnabled(FALSE);
 
-	childSetEnabled("download_raw_btn", owner_or_god);
-	childSetEnabled("upload_raw_btn", owner_or_god);
-	childSetEnabled("bake_terrain_btn", owner_or_god);
+	getChildView("download_raw_btn")->setEnabled(owner_or_god);
+	getChildView("upload_raw_btn")->setEnabled(owner_or_god);
+	getChildView("bake_terrain_btn")->setEnabled(owner_or_god);
 
 	return LLPanelRegionInfo::refreshFromRegion(region);
 }
@@ -1192,17 +1192,17 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
 	strings_t strings;
 	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
 
-	buffer = llformat("%f", (F32)childGetValue("water_height_spin").asReal());
+	buffer = llformat("%f", (F32)getChild<LLUICtrl>("water_height_spin")->getValue().asReal());
 	strings.push_back(buffer);
-	buffer = llformat("%f", (F32)childGetValue("terrain_raise_spin").asReal());
+	buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_raise_spin")->getValue().asReal());
 	strings.push_back(buffer);
-	buffer = llformat("%f", (F32)childGetValue("terrain_lower_spin").asReal());
+	buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal());
 	strings.push_back(buffer);
-	buffer = llformat("%s", (childGetValue("use_estate_sun_check").asBoolean() ? "Y" : "N"));
+	buffer = llformat("%s", (getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean() ? "Y" : "N"));
 	strings.push_back(buffer);
-	buffer = llformat("%s", (childGetValue("fixed_sun_check").asBoolean() ? "Y" : "N"));
+	buffer = llformat("%s", (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean() ? "Y" : "N"));
 	strings.push_back(buffer);
-	buffer = llformat("%f", (F32)childGetValue("sun_hour_slider").asReal() );
+	buffer = llformat("%f", (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal() );
 	strings.push_back(buffer);
 
 	// Grab estate information in case the user decided to set the
@@ -1241,27 +1241,27 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
 
 void LLPanelRegionTerrainInfo::onChangeUseEstateTime()
 {
-	BOOL use_estate_sun = childGetValue("use_estate_sun_check").asBoolean();
-	childSetEnabled("fixed_sun_check", !use_estate_sun);
-	childSetEnabled("sun_hour_slider", !use_estate_sun);
+	BOOL use_estate_sun = getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean();
+	getChildView("fixed_sun_check")->setEnabled(!use_estate_sun);
+	getChildView("sun_hour_slider")->setEnabled(!use_estate_sun);
 	if (use_estate_sun)
 	{
-		childSetValue("fixed_sun_check", LLSD(FALSE));
-		childSetValue("sun_hour_slider", LLSD(0.f));
+		getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE));
+		getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f));
 	}
-	childEnable("apply_btn");
+	getChildView("apply_btn")->setEnabled(TRUE);
 }
 
 void LLPanelRegionTerrainInfo::onChangeFixedSun()
 {
 	// Just enable the apply button.  We let the sun-hour slider be enabled
 	// for both fixed-sun and non-fixed-sun. JC
-	childEnable("apply_btn");
+	getChildView("apply_btn")->setEnabled(TRUE);
 }
 
 void LLPanelRegionTerrainInfo::onChangeSunHour()
 {
-	childEnable("apply_btn");
+	getChildView("apply_btn")->setEnabled(TRUE);
 }
 
 // static
@@ -1357,19 +1357,19 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch)
 // Disables the sun-hour slider and the use fixed time check if the use global time is check
 void LLPanelEstateInfo::onChangeUseGlobalTime()
 {
-	bool enabled = !childGetValue("use_global_time_check").asBoolean();
-	childSetEnabled("sun_hour_slider", enabled);
-	childSetEnabled("fixed_sun_check", enabled);
-	childSetValue("fixed_sun_check", LLSD(FALSE));
+	bool enabled = !getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean();
+	getChildView("sun_hour_slider")->setEnabled(enabled);
+	getChildView("fixed_sun_check")->setEnabled(enabled);
+	getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE));
 	enableButton("apply_btn");
 }
 
 // Enables the sun-hour slider if the fixed-sun checkbox is set
 void LLPanelEstateInfo::onChangeFixedSun()
 {
-	bool enabled = !childGetValue("fixed_sun_check").asBoolean();
-	childSetEnabled("use_global_time_check", enabled);
-	childSetValue("use_global_time_check", LLSD(FALSE));
+	bool enabled = !getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
+	getChildView("use_global_time_check")->setEnabled(enabled);
+	getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(FALSE));
 	enableButton("apply_btn");
 }
 
@@ -1379,21 +1379,19 @@ void LLPanelEstateInfo::onChangeFixedSun()
 //---------------------------------------------------------------------------
 // Add/Remove estate access button callbacks
 //---------------------------------------------------------------------------
-void LLPanelEstateInfo::onClickEditSky(void* user_data)
+void LLPanelEstateInfo::onClickEditSky()
 {
 	LLFloaterReg::showInstance("env_windlight");
 }
 
-void LLPanelEstateInfo::onClickEditDayCycle(void* user_data)
+void LLPanelEstateInfo::onClickEditDayCycle()
 {
 	LLFloaterReg::showInstance("env_day_cycle");
 }
 
-// static
-void LLPanelEstateInfo::onClickAddAllowedAgent(void* user_data)
+void LLPanelEstateInfo::onClickAddAllowedAgent()
 {
-	LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data;
-	LLCtrlListInterface *list = self->childGetListInterface("allowed_avatar_name_list");
+	LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list");
 	if (!list) return;
 	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
 	{
@@ -1407,8 +1405,7 @@ void LLPanelEstateInfo::onClickAddAllowedAgent(void* user_data)
 	accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd");
 }
 
-// static
-void LLPanelEstateInfo::onClickRemoveAllowedAgent(void* user_data)
+void LLPanelEstateInfo::onClickRemoveAllowedAgent()
 {
 	accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list");
 }
@@ -1460,17 +1457,14 @@ bool LLPanelEstateInfo::addAllowedGroup(const LLSD& notification, const LLSD& re
 	return false;
 }
 
-// static
-void LLPanelEstateInfo::onClickRemoveAllowedGroup(void* user_data)
+void LLPanelEstateInfo::onClickRemoveAllowedGroup()
 {
 	accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list");
 }
 
-// static
-void LLPanelEstateInfo::onClickAddBannedAgent(void* user_data)
+void LLPanelEstateInfo::onClickAddBannedAgent()
 {
-	LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data;
-	LLCtrlListInterface *list = self->childGetListInterface("banned_avatar_name_list");
+	LLCtrlListInterface *list = childGetListInterface("banned_avatar_name_list");
 	if (!list) return;
 	if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
 	{
@@ -1482,17 +1476,15 @@ void LLPanelEstateInfo::onClickAddBannedAgent(void* user_data)
 	accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd");
 }
 
-// static
-void LLPanelEstateInfo::onClickRemoveBannedAgent(void* user_data)
+void LLPanelEstateInfo::onClickRemoveBannedAgent()
 {
 	accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list");
 }
 
 // static
-void LLPanelEstateInfo::onClickAddEstateManager(void* user_data)
+void LLPanelEstateInfo::onClickAddEstateManager()
 {
-	LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data;
-	LLCtrlListInterface *list = self->childGetListInterface("estate_manager_name_list");
+	LLCtrlListInterface *list = childGetListInterface("estate_manager_name_list");
 	if (!list) return;
 	if (list->getItemCount() >= ESTATE_MAX_MANAGERS)
 	{	// Tell user they can't add more managers
@@ -1507,7 +1499,7 @@ void LLPanelEstateInfo::onClickAddEstateManager(void* user_data)
 }
 
 // static
-void LLPanelEstateInfo::onClickRemoveEstateManager(void* user_data)
+void LLPanelEstateInfo::onClickRemoveEstateManager()
 {
 	accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list");
 }
@@ -1960,20 +1952,20 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
 	BOOL manager = (region && region->isEstateManager());
 	setCtrlsEnabled(god || owner || manager);
 	
-	childDisable("apply_btn");
-	childSetEnabled("add_allowed_avatar_btn",		god || owner || manager);
-	childSetEnabled("remove_allowed_avatar_btn",	god || owner || manager);
-	childSetEnabled("add_allowed_group_btn",		god || owner || manager);
-	childSetEnabled("remove_allowed_group_btn",		god || owner || manager);
-	childSetEnabled("add_banned_avatar_btn",		god || owner || manager);
-	childSetEnabled("remove_banned_avatar_btn",		god || owner || manager);
-	childSetEnabled("message_estate_btn",			god || owner || manager);
-	childSetEnabled("kick_user_from_estate_btn",	god || owner || manager);
+	getChildView("apply_btn")->setEnabled(FALSE);
+	getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager);
+	getChildView("remove_allowed_avatar_btn")->setEnabled(god || owner || manager);
+	getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager);
+	getChildView("remove_allowed_group_btn")->setEnabled(god || owner || manager);
+	getChildView("add_banned_avatar_btn")->setEnabled(god || owner || manager);
+	getChildView("remove_banned_avatar_btn")->setEnabled(god || owner || manager);
+	getChildView("message_estate_btn")->setEnabled(god || owner || manager);
+	getChildView("kick_user_from_estate_btn")->setEnabled(god || owner || manager);
 
 	// estate managers can't add estate managers
-	childSetEnabled("add_estate_manager_btn",		god || owner);
-	childSetEnabled("remove_estate_manager_btn",	god || owner);
-	childSetEnabled("estate_manager_name_list",		god || owner);
+	getChildView("add_estate_manager_btn")->setEnabled(god || owner);
+	getChildView("remove_estate_manager_btn")->setEnabled(god || owner);
+	getChildView("estate_manager_name_list")->setEnabled(god || owner);
 }
 
 bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
@@ -2048,8 +2040,8 @@ BOOL LLPanelEstateInfo::postBuild()
 		avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
 	}
 
-	childSetAction("add_allowed_avatar_btn", onClickAddAllowedAgent, this);
-	childSetAction("remove_allowed_avatar_btn", onClickRemoveAllowedAgent, this);
+	childSetAction("add_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddAllowedAgent, this));
+	childSetAction("remove_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedAgent, this));
 
 	getChild<LLUICtrl>("allowed_group_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
 	LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list");
@@ -2060,7 +2052,7 @@ BOOL LLPanelEstateInfo::postBuild()
 	}
 
 	getChild<LLUICtrl>("add_allowed_group_btn")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onClickAddAllowedGroup, this));
-	childSetAction("remove_allowed_group_btn", onClickRemoveAllowedGroup, this);
+	childSetAction("remove_allowed_group_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedGroup, this));
 
 	getChild<LLUICtrl>("banned_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
 	LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
@@ -2070,8 +2062,8 @@ BOOL LLPanelEstateInfo::postBuild()
 		banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
 	}
 
-	childSetAction("add_banned_avatar_btn", onClickAddBannedAgent, this);
-	childSetAction("remove_banned_avatar_btn", onClickRemoveBannedAgent, this);
+	childSetAction("add_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddBannedAgent, this));
+	childSetAction("remove_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveBannedAgent, this));
 
 	getChild<LLUICtrl>("estate_manager_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
 	LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list");
@@ -2081,28 +2073,28 @@ BOOL LLPanelEstateInfo::postBuild()
 		manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4);	// Allow extras for dupe issue
 	}
 
-	childSetAction("add_estate_manager_btn", onClickAddEstateManager, this);
-	childSetAction("remove_estate_manager_btn", onClickRemoveEstateManager, this);
-	childSetAction("message_estate_btn", onClickMessageEstate, this);
+	childSetAction("add_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickAddEstateManager, this));
+	childSetAction("remove_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveEstateManager, this));
+	childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this));
 	childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this));
 
-	childSetAction("WLEditSky", onClickEditSky, this);
-	childSetAction("WLEditDayCycle", onClickEditDayCycle, this);
+	childSetAction("WLEditSky", boost::bind(&LLPanelEstateInfo::onClickEditSky, this));
+	childSetAction("WLEditDayCycle", boost::bind(&LLPanelEstateInfo::onClickEditDayCycle, this));
 
 	return LLPanelRegionInfo::postBuild();
 }
 
 void LLPanelEstateInfo::refresh()
 {
-	bool public_access = childGetValue("externally_visible_check").asBoolean();
-	childSetEnabled("Only Allow", public_access);
-	childSetEnabled("limit_payment", public_access);
-	childSetEnabled("limit_age_verified", public_access);
+	bool public_access = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean();
+	getChildView("Only Allow")->setEnabled(public_access);
+	getChildView("limit_payment")->setEnabled(public_access);
+	getChildView("limit_age_verified")->setEnabled(public_access);
 	// if this is set to false, then the limit fields are meaningless and should be turned off
 	if (public_access == false)
 	{
-		childSetValue("limit_payment", false);
-		childSetValue("limit_age_verified", false);
+		getChild<LLUICtrl>("limit_payment")->setValue(false);
+		getChild<LLUICtrl>("limit_age_verified")->setValue(false);
 	}
 }
 
@@ -2225,19 +2217,19 @@ bool LLPanelEstateInfo::commitEstateInfoCaps()
 	LLSD body;
 	body["estate_name"] = getEstateName();
 
-	body["is_externally_visible"] = childGetValue("externally_visible_check").asBoolean();
-	body["allow_direct_teleport"] = childGetValue("allow_direct_teleport").asBoolean();
-	body["is_sun_fixed"         ] = childGetValue("fixed_sun_check").asBoolean();
-	body["deny_anonymous"       ] = childGetValue("limit_payment").asBoolean();
-	body["deny_age_unverified"  ] = childGetValue("limit_age_verified").asBoolean();
-	body["allow_voice_chat"     ] = childGetValue("voice_chat_check").asBoolean();
+	body["is_externally_visible"] = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean();
+	body["allow_direct_teleport"] = getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean();
+	body["is_sun_fixed"         ] = getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
+	body["deny_anonymous"       ] = getChild<LLUICtrl>("limit_payment")->getValue().asBoolean();
+	body["deny_age_unverified"  ] = getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean();
+	body["allow_voice_chat"     ] = getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean();
 	body["invoice"              ] = LLFloaterRegionInfo::getLastInvoice();
 
 	// block fly is in estate database but not in estate UI, so we're not supporting it
-	//body["block_fly"            ] = childGetValue("").asBoolean();
+	//body["block_fly"            ] = getChild<LLUICtrl>("")->getValue().asBoolean();
 
 	F32 sun_hour = getSunHour();
-	if (childGetValue("use_global_time_check").asBoolean())
+	if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean())
 	{
 		sun_hour = 0.f;			// 0 = global time
 	}
@@ -2277,7 +2269,7 @@ void LLPanelEstateInfo::commitEstateInfoDataserver()
 	msg->addString("Parameter", buffer);
 
 	F32 sun_hour = getSunHour();
-	if (childGetValue("use_global_time_check").asBoolean())
+	if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean())
 	{
 		sun_hour = 0.f;	// 0 = global time
 	}
@@ -2291,14 +2283,13 @@ void LLPanelEstateInfo::commitEstateInfoDataserver()
 
 void LLPanelEstateInfo::setEstateFlags(U32 flags)
 {
-	childSetValue("externally_visible_check", LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) );
-	childSetValue("fixed_sun_check", LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) );
-	childSetValue(
-		"voice_chat_check",
+	getChild<LLUICtrl>("externally_visible_check")->setValue(LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) );
+	getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) );
+	getChild<LLUICtrl>("voice_chat_check")->setValue(
 		LLSD(flags & REGION_FLAGS_ALLOW_VOICE ? TRUE : FALSE));
-	childSetValue("allow_direct_teleport", LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) );
-	childSetValue("limit_payment", LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) );
-	childSetValue("limit_age_verified", LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) );
+	getChild<LLUICtrl>("allow_direct_teleport")->setValue(LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) );
+	getChild<LLUICtrl>("limit_payment")->setValue(LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) );
+	getChild<LLUICtrl>("limit_age_verified")->setValue(LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) );
 
 	refresh();
 }
@@ -2307,32 +2298,32 @@ U32 LLPanelEstateInfo::computeEstateFlags()
 {
 	U32 flags = 0;
 
-	if (childGetValue("externally_visible_check").asBoolean())
+	if (getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_EXTERNALLY_VISIBLE;
 	}
 
-	if ( childGetValue("voice_chat_check").asBoolean() )
+	if ( getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean() )
 	{
 		flags |= REGION_FLAGS_ALLOW_VOICE;
 	}
 	
-	if (childGetValue("allow_direct_teleport").asBoolean())
+	if (getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_ALLOW_DIRECT_TELEPORT;
 	}
 
-	if (childGetValue("fixed_sun_check").asBoolean())
+	if (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_SUN_FIXED;
 	}
 	
-	if (childGetValue("limit_payment").asBoolean())
+	if (getChild<LLUICtrl>("limit_payment")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_DENY_ANONYMOUS;
 	}
 	
-	if (childGetValue("limit_age_verified").asBoolean())
+	if (getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean())
 	{
 		flags |= REGION_FLAGS_DENY_AGEUNVERIFIED;
 	}
@@ -2343,24 +2334,24 @@ U32 LLPanelEstateInfo::computeEstateFlags()
 
 BOOL LLPanelEstateInfo::getGlobalTime()
 {
-	return childGetValue("use_global_time_check").asBoolean();
+	return getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean();
 }
 
 void LLPanelEstateInfo::setGlobalTime(bool b)
 {
-	childSetValue("use_global_time_check", LLSD(b));
-	childSetEnabled("fixed_sun_check", LLSD(!b));
-	childSetEnabled("sun_hour_slider", LLSD(!b));
+	getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(b));
+	getChildView("fixed_sun_check")->setEnabled(LLSD(!b));
+	getChildView("sun_hour_slider")->setEnabled(LLSD(!b));
 	if (b)
 	{
-		childSetValue("sun_hour_slider", LLSD(0.f));
+		getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f));
 	}
 }
 
 
 BOOL LLPanelEstateInfo::getFixedSun()
 {
-	return childGetValue("fixed_sun_check").asBoolean();
+	return getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
 }
 
 void LLPanelEstateInfo::setSunHour(F32 sun_hour)
@@ -2369,61 +2360,61 @@ void LLPanelEstateInfo::setSunHour(F32 sun_hour)
 	{
 		sun_hour = 24.0f + sun_hour;
 	}
-	childSetValue("sun_hour_slider", LLSD(sun_hour));
+	getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour));
 }
 
 F32 LLPanelEstateInfo::getSunHour()
 {
-	if (childIsEnabled("sun_hour_slider"))
+	if (getChildView("sun_hour_slider")->getEnabled())
 	{
-		return (F32)childGetValue("sun_hour_slider").asReal();
+		return (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal();
 	}
 	return 0.f;
 }
 
 const std::string LLPanelEstateInfo::getEstateName() const
 {
-	return childGetValue("estate_name").asString();
+	return getChild<LLUICtrl>("estate_name")->getValue().asString();
 }
 
 void LLPanelEstateInfo::setEstateName(const std::string& name)
 {
-	childSetValue("estate_name", LLSD(name));
+	getChild<LLUICtrl>("estate_name")->setValue(LLSD(name));
 }
 
 const std::string LLPanelEstateInfo::getOwnerName() const
 {
-	return childGetValue("estate_owner").asString();
+	return getChild<LLUICtrl>("estate_owner")->getValue().asString();
 }
 
 void LLPanelEstateInfo::setOwnerName(const std::string& name)
 {
-	childSetValue("estate_owner", LLSD(name));
+	getChild<LLUICtrl>("estate_owner")->setValue(LLSD(name));
 }
 
 void LLPanelEstateInfo::setAccessAllowedEnabled(bool enable_agent,
 												bool enable_group,
 												bool enable_ban)
 {
-	childSetEnabled("allow_resident_label", enable_agent);
-	childSetEnabled("allowed_avatar_name_list", enable_agent);
-	childSetVisible("allowed_avatar_name_list", enable_agent);
-	childSetEnabled("add_allowed_avatar_btn", enable_agent);
-	childSetEnabled("remove_allowed_avatar_btn", enable_agent);
+	getChildView("allow_resident_label")->setEnabled(enable_agent);
+	getChildView("allowed_avatar_name_list")->setEnabled(enable_agent);
+	getChildView("allowed_avatar_name_list")->setVisible( enable_agent);
+	getChildView("add_allowed_avatar_btn")->setEnabled(enable_agent);
+	getChildView("remove_allowed_avatar_btn")->setEnabled(enable_agent);
 
 	// Groups
-	childSetEnabled("allow_group_label", enable_group);
-	childSetEnabled("allowed_group_name_list", enable_group);
-	childSetVisible("allowed_group_name_list", enable_group);
-	childSetEnabled("add_allowed_group_btn", enable_group);
-	childSetEnabled("remove_allowed_group_btn", enable_group);
+	getChildView("allow_group_label")->setEnabled(enable_group);
+	getChildView("allowed_group_name_list")->setEnabled(enable_group);
+	getChildView("allowed_group_name_list")->setVisible( enable_group);
+	getChildView("add_allowed_group_btn")->setEnabled(enable_group);
+	getChildView("remove_allowed_group_btn")->setEnabled(enable_group);
 
 	// Ban
-	childSetEnabled("ban_resident_label", enable_ban);
-	childSetEnabled("banned_avatar_name_list", enable_ban);
-	childSetVisible("banned_avatar_name_list", enable_ban);
-	childSetEnabled("add_banned_avatar_btn", enable_ban);
-	childSetEnabled("remove_banned_avatar_btn", enable_ban);
+	getChildView("ban_resident_label")->setEnabled(enable_ban);
+	getChildView("banned_avatar_name_list")->setEnabled(enable_ban);
+	getChildView("banned_avatar_name_list")->setVisible( enable_ban);
+	getChildView("add_banned_avatar_btn")->setEnabled(enable_ban);
+	getChildView("remove_banned_avatar_btn")->setEnabled(enable_ban);
 
 	// Update removal buttons if needed
 	if (enable_agent)
@@ -2485,7 +2476,7 @@ BOOL LLPanelEstateInfo::checkRemovalButton(std::string name)
 
 	// enable the remove button if something is selected
 	LLNameListCtrl* name_list = getChild<LLNameListCtrl>(name);
-	childSetEnabled(btn_name, name_list && name_list->getFirstSelected() ? TRUE : FALSE);
+	getChildView(btn_name)->setEnabled(name_list && name_list->getFirstSelected() ? TRUE : FALSE);
 
 	return (btn_name != "");
 }
@@ -3020,7 +3011,7 @@ bool LLDispatchSetEstateAccess::operator()(
 		args["[ALLOWEDAGENTS]"] = llformat ("%d", totalAllowedAgents);
 		args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_ACCESS_IDS);
 		std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args);
-		panel->childSetValue("allow_resident_label", LLSD(msg));
+		panel->getChild<LLUICtrl>("allow_resident_label")->setValue(LLSD(msg));
 
 		if (allowed_agent_name_list)
 		{
@@ -3031,7 +3022,7 @@ bool LLDispatchSetEstateAccess::operator()(
 				memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
 				allowed_agent_name_list->addNameItem(id);
 			}
-			panel->childSetEnabled("remove_allowed_avatar_btn", allowed_agent_name_list->getFirstSelected() ? TRUE : FALSE);
+			panel->getChildView("remove_allowed_avatar_btn")->setEnabled(allowed_agent_name_list->getFirstSelected() ? TRUE : FALSE);
 			allowed_agent_name_list->sortByColumnIndex(0, TRUE);
 		}
 	}
@@ -3045,7 +3036,7 @@ bool LLDispatchSetEstateAccess::operator()(
 		args["[ALLOWEDGROUPS]"] = llformat ("%d", num_allowed_groups);
 		args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_GROUP_IDS);
 		std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args);
-		panel->childSetValue("allow_group_label", LLSD(msg));
+		panel->getChild<LLUICtrl>("allow_group_label")->setValue(LLSD(msg));
 
 		if (allowed_group_name_list)
 		{
@@ -3056,7 +3047,7 @@ bool LLDispatchSetEstateAccess::operator()(
 				memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
 				allowed_group_name_list->addGroupNameItem(id);
 			}
-			panel->childSetEnabled("remove_allowed_group_btn", allowed_group_name_list->getFirstSelected() ? TRUE : FALSE);
+			panel->getChildView("remove_allowed_group_btn")->setEnabled(allowed_group_name_list->getFirstSelected() ? TRUE : FALSE);
 			allowed_group_name_list->sortByColumnIndex(0, TRUE);
 		}
 	}
@@ -3077,7 +3068,7 @@ bool LLDispatchSetEstateAccess::operator()(
 		std::string msg = llformat("Banned residents: (%d, max %d)",
 									totalBannedAgents,
 									ESTATE_MAX_ACCESS_IDS);
-		panel->childSetValue("ban_resident_label", LLSD(msg));
+		panel->getChild<LLUICtrl>("ban_resident_label")->setValue(LLSD(msg));
 
 		if (banned_agent_name_list)
 		{
@@ -3088,7 +3079,7 @@ bool LLDispatchSetEstateAccess::operator()(
 				memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
 				banned_agent_name_list->addNameItem(id);
 			}
-			panel->childSetEnabled("remove_banned_avatar_btn", banned_agent_name_list->getFirstSelected() ? TRUE : FALSE);
+			panel->getChildView("remove_banned_avatar_btn")->setEnabled(banned_agent_name_list->getFirstSelected() ? TRUE : FALSE);
 			banned_agent_name_list->sortByColumnIndex(0, TRUE);
 		}
 	}
@@ -3098,7 +3089,7 @@ bool LLDispatchSetEstateAccess::operator()(
 		std::string msg = llformat("Estate Managers: (%d, max %d)",
 									num_estate_managers,
 									ESTATE_MAX_MANAGERS);
-		panel->childSetValue("estate_manager_label", LLSD(msg));
+		panel->getChild<LLUICtrl>("estate_manager_label")->setValue(LLSD(msg));
 
 		LLNameListCtrl* estate_manager_name_list =
 			panel->getChild<LLNameListCtrl>("estate_manager_name_list");
@@ -3115,7 +3106,7 @@ bool LLDispatchSetEstateAccess::operator()(
 				memcpy(id.mData, strings[index++].data(), UUID_BYTES);		/* Flawfinder: ignore */
 				estate_manager_name_list->addNameItem(id);
 			}
-			panel->childSetEnabled("remove_estate_manager_btn", estate_manager_name_list->getFirstSelected() ? TRUE : FALSE);
+			panel->getChildView("remove_estate_manager_btn")->setEnabled(estate_manager_name_list->getFirstSelected() ? TRUE : FALSE);
 			estate_manager_name_list->sortByColumnIndex(0, TRUE);
 		}
 	}
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 342ce535fe8d56e0d95b829306b289706681ba30..2393c74c4509243c6c0886a774397e1e90aacd63 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -256,19 +256,19 @@ public:
 	void onChangeFixedSun();
 	void onChangeUseGlobalTime();
 	
-	static void onClickEditSky(void* userdata);
-	static void onClickEditSkyHelp(void* userdata);	
-	static void onClickEditDayCycle(void* userdata);
-	static void onClickEditDayCycleHelp(void* userdata);	
-
-	static void onClickAddAllowedAgent(void* user_data);
-	static void onClickRemoveAllowedAgent(void* user_data);
-		   void onClickAddAllowedGroup();
-	static void onClickRemoveAllowedGroup(void* user_data);
-	static void onClickAddBannedAgent(void* user_data);
-	static void onClickRemoveBannedAgent(void* user_data);
-	static void onClickAddEstateManager(void* user_data);
-	static void onClickRemoveEstateManager(void* user_data);
+	void onClickEditSky();
+	void onClickEditSkyHelp();	
+	void onClickEditDayCycle();
+	void onClickEditDayCycleHelp();
+
+	void onClickAddAllowedAgent();
+	void onClickRemoveAllowedAgent();
+	void onClickAddAllowedGroup();
+	void onClickRemoveAllowedGroup();
+	void onClickAddBannedAgent();
+	void onClickRemoveBannedAgent();
+	void onClickAddEstateManager();
+	void onClickRemoveEstateManager();
 	void onClickKickUser();
 
 	// Group picker callback is different, can't use core methods below
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index da0301394cc5cebc2112ba927ab302440bef5d37..97f192a70830089b93d2bb25d20e8e642af51696 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -122,7 +122,7 @@ BOOL LLFloaterReporter::postBuild()
 {
 	LLSLURL slurl;
 	LLAgentUI::buildSLURL(slurl);
-	childSetText("abuse_location_edit", slurl.getSLURLString());
+	getChild<LLUICtrl>("abuse_location_edit")->setValue(slurl.getSLURLString());
 
 	enableControls(TRUE);
 
@@ -131,7 +131,7 @@ BOOL LLFloaterReporter::postBuild()
 	LLViewerRegion *regionp = gAgent.getRegion();
 	if (regionp)
 	{
-		childSetText("sim_field", regionp->getName());
+		getChild<LLUICtrl>("sim_field")->setValue(regionp->getName());
 		pos -= regionp->getOriginGlobal();
 	}
 	setPosBox(pos);
@@ -142,13 +142,13 @@ BOOL LLFloaterReporter::postBuild()
 	setVisible(TRUE);
 
 	// Default text to be blank
-	childSetText("object_name", LLStringUtil::null);
-	childSetText("owner_name", LLStringUtil::null);
+	getChild<LLUICtrl>("object_name")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("owner_name")->setValue(LLStringUtil::null);
 	mOwnerName = LLStringUtil::null;
 
-	childSetFocus("summary_edit");
+	getChild<LLUICtrl>("summary_edit")->setFocus(TRUE);
 
-	mDefaultSummary = childGetText("details_edit");
+	mDefaultSummary = getChild<LLUICtrl>("details_edit")->getValue().asString();
 
 	// send a message and ask for information about this region - 
 	// result comes back in processRegionInfo(..)
@@ -178,7 +178,7 @@ BOOL LLFloaterReporter::postBuild()
 	// grab the user's name
 	std::string fullname;
 	LLAgentUI::buildFullname(fullname);
-	childSetText("reporter_field", fullname);
+	getChild<LLUICtrl>("reporter_field")->setValue(fullname);
 	
 	center();
 
@@ -206,22 +206,22 @@ LLFloaterReporter::~LLFloaterReporter()
 // virtual
 void LLFloaterReporter::draw()
 {
-	childSetEnabled("screen_check", TRUE );
+	getChildView("screen_check")->setEnabled(TRUE );
 
 	LLFloater::draw();
 }
 
 void LLFloaterReporter::enableControls(BOOL enable)
 {
-	childSetEnabled("category_combo", enable);
-	childSetEnabled("chat_check", enable);
-	childSetEnabled("screen_check",	enable);
-	childDisable("screenshot");
-	childSetEnabled("pick_btn",		enable);
-	childSetEnabled("summary_edit",	enable);
-	childSetEnabled("details_edit",	enable);
-	childSetEnabled("send_btn",		enable);
-	childSetEnabled("cancel_btn",	enable);
+	getChildView("category_combo")->setEnabled(enable);
+	getChildView("chat_check")->setEnabled(enable);
+	getChildView("screen_check")->setEnabled(enable);
+	getChildView("screenshot")->setEnabled(FALSE);
+	getChildView("pick_btn")->setEnabled(enable);
+	getChildView("summary_edit")->setEnabled(enable);
+	getChildView("details_edit")->setEnabled(enable);
+	getChildView("send_btn")->setEnabled(enable);
+	getChildView("cancel_btn")->setEnabled(enable);
 }
 
 void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
@@ -253,7 +253,7 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
 			LLViewerRegion *regionp = objectp->getRegion();
 			if (regionp)
 			{
-				childSetText("sim_field", regionp->getName());
+				getChild<LLUICtrl>("sim_field")->setValue(regionp->getName());
 				LLVector3d global_pos;
 				global_pos.setVec(objectp->getPositionRegion());
 				setPosBox(global_pos);
@@ -307,7 +307,7 @@ void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names,
 {
 	if (ids.empty() || names.empty()) return;
 
-	childSetText("abuser_name_edit", names[0] );
+	getChild<LLUICtrl>("abuser_name_edit")->setValue(names[0] );
 
 	mAbuserID = ids[0];
 
@@ -322,9 +322,9 @@ void LLFloaterReporter::setFromAvatar(const LLUUID& avatar_id, const std::string
 
 	std::string avatar_link =
 	  LLSLURL("agent", mObjectID, "inspect").getSLURLString();
-	childSetText("owner_name", avatar_link);
-	childSetText("object_name", avatar_name);
-	childSetText("abuser_name_edit", avatar_name);
+	getChild<LLUICtrl>("owner_name")->setValue(avatar_link);
+	getChild<LLUICtrl>("object_name")->setValue(avatar_name);
+	getChild<LLUICtrl>("abuser_name_edit")->setValue(avatar_name);
 }
 
 // static
@@ -348,9 +348,9 @@ void LLFloaterReporter::onClickSend(void *userdata)
 			if ( ! self->mCopyrightWarningSeen )
 			{
 
-				std::string details_lc = self->childGetText("details_edit");
+				std::string details_lc = self->getChild<LLUICtrl>("details_edit")->getValue().asString();
 				LLStringUtil::toLower( details_lc );
-				std::string summary_lc = self->childGetText("summary_edit");
+				std::string summary_lc = self->getChild<LLUICtrl>("summary_edit")->getValue().asString();
 				LLStringUtil::toLower( summary_lc );
 				if ( details_lc.find( "copyright" ) != std::string::npos ||
 					summary_lc.find( "copyright" ) != std::string::npos  ||
@@ -381,10 +381,10 @@ void LLFloaterReporter::onClickSend(void *userdata)
 		}
 		else
 		{
-			if(self->childGetValue("screen_check"))
+			if(self->getChild<LLUICtrl>("screen_check")->getValue())
 			{
-				self->childDisable("send_btn");
-				self->childDisable("cancel_btn");
+				self->getChildView("send_btn")->setEnabled(FALSE);
+				self->getChildView("cancel_btn")->setEnabled(FALSE);
 				// the callback from uploading the image calls sendReportViaLegacy()
 				self->uploadImage();
 			}
@@ -422,8 +422,8 @@ void LLFloaterReporter::onClickObjPicker(void *userdata)
 	LLToolObjPicker::getInstance()->setExitCallback(LLFloaterReporter::closePickTool, self);
 	LLToolMgr::getInstance()->setTransientTool(LLToolObjPicker::getInstance());
 	self->mPicking = TRUE;
-	self->childSetText("object_name", LLStringUtil::null);
-	self->childSetText("owner_name", LLStringUtil::null);
+	self->getChild<LLUICtrl>("object_name")->setValue(LLStringUtil::null);
+	self->getChild<LLUICtrl>("owner_name")->setValue(LLStringUtil::null);
 	self->mOwnerName = LLStringUtil::null;
 	LLButton* pick_btn = self->getChild<LLButton>("pick_btn");
 	if (pick_btn) pick_btn->setToggleState(TRUE);
@@ -469,7 +469,7 @@ void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_
 	// grab the user's name
 	std::string fullname;
 	LLAgentUI::buildFullname(fullname);
-	f->childSetText("reporter_field", fullname);
+	f->getChild<LLUICtrl>("reporter_field")->setValue(fullname);
 
 	if (avatar_name.empty())
 		// Request info for this object
@@ -498,11 +498,11 @@ void LLFloaterReporter::showFromAvatar(const LLUUID& avatar_id, const std::strin
 
 void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id)
 {
-	childSetText("object_name", object_name);
+	getChild<LLUICtrl>("object_name")->setValue(object_name);
 	std::string owner_link =
 		LLSLURL("agent", owner_id, "inspect").getSLURLString();
-	childSetText("owner_name", owner_link);
-	childSetText("abuser_name_edit", owner_name);
+	getChild<LLUICtrl>("owner_name")->setValue(owner_link);
+	getChild<LLUICtrl>("abuser_name_edit")->setValue(owner_name);
 	mAbuserID = owner_id;
 	mOwnerName = owner_name;
 }
@@ -511,7 +511,7 @@ void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name
 bool LLFloaterReporter::validateReport()
 {
 	// Ensure user selected a category from the list
-	LLSD category_sd = childGetValue("category_combo");
+	LLSD category_sd = getChild<LLUICtrl>("category_combo")->getValue();
 	U8 category = (U8)category_sd.asInteger();
 	if (category == 0)
 	{
@@ -520,32 +520,32 @@ bool LLFloaterReporter::validateReport()
 	}
 
 
-	if ( childGetText("abuser_name_edit").empty() )
+	if ( getChild<LLUICtrl>("abuser_name_edit")->getValue().asString().empty() )
 	{
 		LLNotificationsUtil::add("HelpReportAbuseAbuserNameEmpty");
 		return false;
 	};
 
-	if ( childGetText("abuse_location_edit").empty() )
+	if ( getChild<LLUICtrl>("abuse_location_edit")->getValue().asString().empty() )
 	{
 		LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty");
 		return false;
 	};
 
-	if ( childGetText("abuse_location_edit").empty() )
+	if ( getChild<LLUICtrl>("abuse_location_edit")->getValue().asString().empty() )
 	{
 		LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty");
 		return false;
 	};
 
 
-	if ( childGetText("summary_edit").empty() )
+	if ( getChild<LLUICtrl>("summary_edit")->getValue().asString().empty() )
 	{
 		LLNotificationsUtil::add("HelpReportAbuseSummaryEmpty");
 		return false;
 	};
 
-	if ( childGetText("details_edit") == mDefaultSummary )
+	if ( getChild<LLUICtrl>("details_edit")->getValue().asString() == mDefaultSummary )
 	{
 		LLNotificationsUtil::add("HelpReportAbuseDetailsEmpty");
 		return false;
@@ -591,17 +591,17 @@ LLSD LLFloaterReporter::gatherReport()
 
 	summary << ""
 		<< " |" << regionp->getName() << "|"								// region reporter is currently in.
-		<< " (" << childGetText("abuse_location_edit") << ")"				// region abuse occured in (freeform text - no LLRegionPicker tool)
+		<< " (" << getChild<LLUICtrl>("abuse_location_edit")->getValue().asString() << ")"				// region abuse occured in (freeform text - no LLRegionPicker tool)
 		<< " [" << category_name << "] "									// updated category
-		<< " {" << childGetText("abuser_name_edit") << "} "					// name of abuse entered in report (chosen using LLAvatarPicker)
-		<< " \"" << childGetValue("summary_edit").asString() << "\"";		// summary as entered
+		<< " {" << getChild<LLUICtrl>("abuser_name_edit")->getValue().asString() << "} "					// name of abuse entered in report (chosen using LLAvatarPicker)
+		<< " \"" << getChild<LLUICtrl>("summary_edit")->getValue().asString() << "\"";		// summary as entered
 
 
 	std::ostringstream details;
 
 	details << "V" << LLVersionInfo::getVersion() << std::endl << std::endl;	// client version moved to body of email for abuse reports
 
-	std::string object_name = childGetText("object_name");
+	std::string object_name = getChild<LLUICtrl>("object_name")->getValue().asString();
 	if (!object_name.empty() && !mOwnerName.empty())
 	{
 		details << "Object: " << object_name << "\n";
@@ -609,10 +609,10 @@ LLSD LLFloaterReporter::gatherReport()
 	}
 
 
-	details << "Abuser name: " << childGetText("abuser_name_edit") << " \n";
-	details << "Abuser location: " << childGetText("abuse_location_edit") << " \n";
+	details << "Abuser name: " << getChild<LLUICtrl>("abuser_name_edit")->getValue().asString() << " \n";
+	details << "Abuser location: " << getChild<LLUICtrl>("abuse_location_edit")->getValue().asString() << " \n";
 
-	details << childGetValue("details_edit").asString();
+	details << getChild<LLUICtrl>("details_edit")->getValue().asString();
 
 	std::string version_string;
 	version_string = llformat(
@@ -626,14 +626,14 @@ LLSD LLFloaterReporter::gatherReport()
 	// only send a screenshot ID if we're asked to and the email is 
 	// going to LL - Estate Owners cannot see the screenshot asset
 	LLUUID screenshot_id = LLUUID::null;
-	if (childGetValue("screen_check"))
+	if (getChild<LLUICtrl>("screen_check")->getValue())
 	{
-		screenshot_id = childGetValue("screenshot");
+		screenshot_id = getChild<LLUICtrl>("screenshot")->getValue();
 	};
 
 	LLSD report = LLSD::emptyMap();
 	report["report-type"] = (U8) mReportType;
-	report["category"] = childGetValue("category_combo");
+	report["category"] = getChild<LLUICtrl>("category_combo")->getValue();
 	report["position"] = mPosition.getValue();
 	report["check-flags"] = (U8)0; // this is not used
 	report["screenshot-id"] = screenshot_id;
@@ -715,7 +715,7 @@ public:
 
 void LLFloaterReporter::sendReportViaCaps(std::string url, std::string sshot_url, const LLSD& report)
 {
-	if(childGetValue("screen_check").asBoolean() && !sshot_url.empty())
+	if(getChild<LLUICtrl>("screen_check")->getValue().asBoolean() && !sshot_url.empty())
 	{
 		// try to upload screenshot
 		LLHTTPClient::post(sshot_url, report, new LLUserReportScreenshotResponder(report, 
@@ -847,7 +847,7 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos)
 		mPosition.mV[VX],
 		mPosition.mV[VY],
 		mPosition.mV[VZ]);
-	childSetText("pos_field", pos_string);
+	getChild<LLUICtrl>("pos_field")->setValue(pos_string);
 }
 
 // void LLFloaterReporter::setDescription(const std::string& description, LLMeanCollisionData *mcd)
@@ -855,7 +855,7 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos)
 // 	LLFloaterReporter *self = LLFloaterReg::findTypedInstance<LLFloaterReporter>("reporter");
 // 	if (self)
 // 	{
-// 		self->childSetText("details_edit", description);
+// 		self->getChild<LLUICtrl>("details_edit")->setValue(description);
 
 // 		for_each(self->mMCDList.begin(), self->mMCDList.end(), DeletePointer());
 // 		self->mMCDList.clear();
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index c0c664496d1e95383ee075d44d76ea83a3a63154..571f26e09ff68b4389c6cce6db6c2aa5cb65fa47 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -292,7 +292,7 @@ void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)
 			LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
 			if(panel_memory)
 			{
-				panel_memory->childSetValue("loading_text", LLSD(std::string("")));
+				panel_memory->getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string("")));
 
 				LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn");
 				if(btn)
@@ -489,7 +489,7 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
 			LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel");
 			if(panel)
 			{
-				panel->childSetValue("loading_text", LLSD(std::string("")));
+				panel->getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string("")));
 
 				LLButton* btn = panel->getChild<LLButton>("refresh_list_btn");
 				if(btn)
@@ -554,12 +554,12 @@ void LLPanelScriptLimitsRegionMemory::processParcelInfo(const LLParcelData& parc
 	if(!getLandScriptResources())
 	{
 		std::string msg_error = LLTrans::getString("ScriptLimitsRequestError");
-		childSetValue("loading_text", LLSD(msg_error));
+		getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error));
 	}
 	else
 	{
 		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
-		childSetValue("loading_text", LLSD(msg_waiting));
+		getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
 	}
 }
 
@@ -579,7 +579,7 @@ void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id)
 	else
 	{
 		std::string msg_error = LLTrans::getString("ScriptLimitsRequestError");
-		childSetValue("loading_text", LLSD(msg_error));
+		getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error));
 	}
 }
 
@@ -635,7 +635,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 	LLStringUtil::format_map_t args_parcels;
 	args_parcels["[PARCELS]"] = llformat ("%d", number_parcels);
 	std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels);
-	childSetValue("parcels_listed", LLSD(msg_parcels));
+	getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_parcels));
 
 	uuid_vec_t names_requested;
 
@@ -812,7 +812,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)
 		args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax);
 		args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available);
 		std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_parcel_memory);
-		childSetValue("memory_used", LLSD(msg_parcel_memory));
+		getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_parcel_memory));
 	}
 
 	if((mParcelURLsUsed >= 0) && (mParcelURLsMax >= 0))
@@ -824,7 +824,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)
 		args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax);
 		args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available);
 		std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls);
-		childSetValue("urls_used", LLSD(msg_parcel_urls));
+		getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_parcel_urls));
 	}
 }
 
@@ -835,7 +835,7 @@ BOOL LLPanelScriptLimitsRegionMemory::postBuild()
 	childSetAction("return_btn", onClickReturn, this);
 		
 	std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
-	childSetValue("loading_text", LLSD(msg_waiting));
+	getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
 
 	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
 	if(!list)
@@ -860,7 +860,7 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()
 	LLFloaterLand* instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land");
 	if(!instance)
 	{
-		childSetValue("loading_text", LLSD(std::string("")));
+		getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string("")));
 		//might have to do parent post build here
 		//if not logic below could use early outs
 		return FALSE;
@@ -879,7 +879,7 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()
 		if(region_id != current_region_id)
 		{
 			std::string msg_wrong_region = LLTrans::getString("ScriptLimitsRequestWrongRegion");
-			childSetValue("loading_text", LLSD(msg_wrong_region));
+			getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_wrong_region));
 			return FALSE;
 		}
 		
@@ -908,13 +908,13 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()
 					<< " does not support RemoteParcelRequest" << llendl;
 					
 			std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
-			childSetValue("loading_text", LLSD(msg_waiting));
+			getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
 		}
 	}
 	else
 	{
 		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestNoParcelSelected");
-		childSetValue("loading_text", LLSD(msg_waiting));
+		getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
 	}
 
 	return LLPanelScriptLimitsInfo::postBuild();
@@ -936,9 +936,9 @@ void LLPanelScriptLimitsRegionMemory::clearList()
 	
 	LLStringUtil::format_map_t args_parcel_memory;
 	std::string msg_empty_string("");
-	childSetValue("memory_used", LLSD(msg_empty_string));
-	childSetValue("urls_used", LLSD(msg_empty_string));
-	childSetValue("parcels_listed", LLSD(msg_empty_string));
+	getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_empty_string));
+	getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_empty_string));
+	getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_empty_string));
 
 	mObjectListItems.clear();
 }
@@ -1207,7 +1207,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)
 	
 	setAttachmentSummary(content);
 
-	childSetValue("loading_text", LLSD(std::string("")));
+	getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string("")));
 
 	LLButton* btn = getChild<LLButton>("refresh_list_btn");
 	if(btn)
@@ -1221,7 +1221,7 @@ BOOL LLPanelScriptLimitsAttachment::postBuild()
 	childSetAction("refresh_list_btn", onClickRefresh, this);
 		
 	std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
-	childSetValue("loading_text", LLSD(msg_waiting));
+	getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
 	return requestAttachmentDetails();
 }
 
@@ -1235,7 +1235,7 @@ void LLPanelScriptLimitsAttachment::clearList()
 	}
 
 	std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
-	childSetValue("loading_text", LLSD(msg_waiting));
+	getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
 }
 
 void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
@@ -1285,7 +1285,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
 		args_attachment_memory["[MAX]"] = llformat ("%d", mAttachmentMemoryMax);
 		args_attachment_memory["[AVAILABLE]"] = llformat ("%d", attachment_memory_available);
 		std::string msg_attachment_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_attachment_memory);
-		childSetValue("memory_used", LLSD(msg_attachment_memory));
+		getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_attachment_memory));
 	}
 
 	if((mAttachmentURLsUsed >= 0) && (mAttachmentURLsMax >= 0))
@@ -1297,7 +1297,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
 		args_attachment_urls["[MAX]"] = llformat ("%d", mAttachmentURLsMax);
 		args_attachment_urls["[AVAILABLE]"] = llformat ("%d", attachment_urls_available);
 		std::string msg_attachment_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_attachment_urls);
-		childSetValue("urls_used", LLSD(msg_attachment_urls));
+		getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_attachment_urls));
 	}
 }
 
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 31c82c14641382b3e56039c8253a09c9a0d2b2ba..7661e50eba72eaba6dee518b40fed11937e5704a 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -122,11 +122,11 @@ void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent eve
 	switch (event) 
 	{
 	case MEDIA_EVENT_NAVIGATE_BEGIN:
-		childSetText("status_text", getString("loading_text"));
+		getChild<LLUICtrl>("status_text")->setValue(getString("loading_text"));
 		break;
 		
 	case MEDIA_EVENT_NAVIGATE_COMPLETE:
-		childSetText("status_text", getString("done_text"));
+		getChild<LLUICtrl>("status_text")->setValue(getString("done_text"));
 		break;
 
 	default:
@@ -140,7 +140,7 @@ void LLFloaterSearch::godLevelChanged(U8 godlevel)
 	// changes god level, then give them a warning (we don't refresh
 	// the search as this might undo any page navigation or
 	// AJAX-driven changes since the last search).
-	childSetVisible("refresh_search", (godlevel != mSearchGodLevel));
+	getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
 }
 
 void LLFloaterSearch::search(const LLSD &key)
@@ -151,7 +151,7 @@ void LLFloaterSearch::search(const LLSD &key)
 	}
 
 	// reset the god level warning as we're sending the latest state
-	childHide("refresh_search");
+	getChildView("refresh_search")->setVisible(FALSE);
 	mSearchGodLevel = gAgent.getGodLevel();
 
 	// work out the subdir to use based on the requested category
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index af97fb90e1a1c9f684b3a0d8c808f1b61044a1d9..3d87904dbebbbd6b54b84de3c0b80caac8a0c815 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -157,7 +157,7 @@ BOOL LLFloaterSellLandUI::postBuild()
 {
 	childSetCommitCallback("sell_to", onChangeValue, this);
 	childSetCommitCallback("price", onChangeValue, this);
-	childSetPrevalidate("price", LLTextValidate::validateNonNegativeS32);
+	getChild<LLLineEditor>("price")->setPrevalidate(LLTextValidate::validateNonNegativeS32);
 	childSetCommitCallback("sell_objects", onChangeValue, this);
 	childSetAction("sell_to_select_agent", boost::bind( &LLFloaterSellLandUI::doSelectAgent, this));
 	childSetAction("cancel_btn", doCancel, this);
@@ -201,20 +201,20 @@ void LLFloaterSellLandUI::updateParcelInfo()
 	mParcelSoldWithObjects = parcelp->getSellWithObjects();
 	if (mParcelIsForSale)
 	{
-		childSetValue("price", mParcelPrice);
+		getChild<LLUICtrl>("price")->setValue(mParcelPrice);
 		if (mParcelSoldWithObjects)
 		{
-			childSetValue("sell_objects", "yes");
+			getChild<LLUICtrl>("sell_objects")->setValue("yes");
 		}
 		else
 		{
-			childSetValue("sell_objects", "no");
+			getChild<LLUICtrl>("sell_objects")->setValue("no");
 		}
 	}
 	else
 	{
-		childSetValue("price", "");
-		childSetValue("sell_objects", "none");
+		getChild<LLUICtrl>("price")->setValue("");
+		getChild<LLUICtrl>("sell_objects")->setValue("none");
 	}
 
 	mParcelSnapshot = parcelp->getSnapshotID();
@@ -226,7 +226,7 @@ void LLFloaterSellLandUI::updateParcelInfo()
 	{
 		std::string name;
 		gCacheName->getFullName(mAuthorizedBuyer, name);
-		childSetText("sell_to_agent", name);
+		getChild<LLUICtrl>("sell_to_agent")->setValue(name);
 	}
 }
 
@@ -247,7 +247,7 @@ void LLFloaterSellLandUI::setBadge(const char* id, Badge badge)
 		case BADGE_ERROR:	badgeName = badgeError;	break;
 	}
 	
-	childSetValue(id, badgeName);
+	getChild<LLUICtrl>(id)->setValue(badgeName);
 }
 
 void LLFloaterSellLandUI::refreshUI()
@@ -258,10 +258,10 @@ void LLFloaterSellLandUI::refreshUI()
 	LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("info_image");
 	snapshot->setImageAssetID(mParcelSnapshot);
 
-	childSetText("info_parcel", parcelp->getName());
-	childSetTextArg("info_size", "[AREA]", llformat("%d", mParcelActualArea));
+	getChild<LLUICtrl>("info_parcel")->setValue(parcelp->getName());
+	getChild<LLUICtrl>("info_size")->setTextArg("[AREA]", llformat("%d", mParcelActualArea));
 
-	std::string price_str = childGetValue("price").asString();
+	std::string price_str = getChild<LLUICtrl>("price")->getValue().asString();
 	bool valid_price = false;
 	valid_price = (price_str != "") && LLTextValidate::validateNonNegativeS32(utf8str_to_wstring(price_str));
 
@@ -269,14 +269,14 @@ void LLFloaterSellLandUI::refreshUI()
 	{
 		F32 per_meter_price = 0;
 		per_meter_price = F32(mParcelPrice) / F32(mParcelActualArea);
-		childSetTextArg("price_per_m", "[PER_METER]", llformat("%0.2f", per_meter_price));
-		childShow("price_per_m");
+		getChild<LLUICtrl>("price_per_m")->setTextArg("[PER_METER]", llformat("%0.2f", per_meter_price));
+		getChildView("price_per_m")->setVisible(TRUE);
 
 		setBadge("step_price", BADGE_OK);
 	}
 	else
 	{
-		childHide("price_per_m");
+		getChildView("price_per_m")->setVisible(FALSE);
 
 		if ("" == price_str)
 		{
@@ -290,26 +290,26 @@ void LLFloaterSellLandUI::refreshUI()
 
 	if (mSellToBuyer)
 	{
-		childSetValue("sell_to", "user");
-		childShow("sell_to_agent");
-		childShow("sell_to_select_agent");
+		getChild<LLUICtrl>("sell_to")->setValue("user");
+		getChildView("sell_to_agent")->setVisible(TRUE);
+		getChildView("sell_to_select_agent")->setVisible(TRUE);
 	}
 	else
 	{
 		if (mChoseSellTo)
 		{
-			childSetValue("sell_to", "anyone");
+			getChild<LLUICtrl>("sell_to")->setValue("anyone");
 		}
 		else
 		{
-			childSetValue("sell_to", "select");
+			getChild<LLUICtrl>("sell_to")->setValue("select");
 		}
-		childHide("sell_to_agent");
-		childHide("sell_to_select_agent");
+		getChildView("sell_to_agent")->setVisible(FALSE);
+		getChildView("sell_to_select_agent")->setVisible(FALSE);
 	}
 
 	// Must select Sell To: Anybody, or User (with a specified username)
-	std::string sell_to = childGetValue("sell_to").asString();
+	std::string sell_to = getChild<LLUICtrl>("sell_to")->getValue().asString();
 	bool valid_sell_to = "select" != sell_to &&
 		("user" != sell_to || mAuthorizedBuyer.notNull());
 
@@ -322,7 +322,7 @@ void LLFloaterSellLandUI::refreshUI()
 		setBadge("step_sell_to", BADGE_OK);
 	}
 
-	bool valid_sell_objects = ("none" != childGetValue("sell_objects").asString());
+	bool valid_sell_objects = ("none" != getChild<LLUICtrl>("sell_objects")->getValue().asString());
 
 	if (!valid_sell_objects)
 	{
@@ -335,11 +335,11 @@ void LLFloaterSellLandUI::refreshUI()
 
 	if (valid_sell_to && valid_price && valid_sell_objects)
 	{
-		childEnable("sell_btn");
+		getChildView("sell_btn")->setEnabled(TRUE);
 	}
 	else
 	{
-		childDisable("sell_btn");
+		getChildView("sell_btn")->setEnabled(FALSE);
 	}
 }
 
@@ -348,7 +348,7 @@ void LLFloaterSellLandUI::onChangeValue(LLUICtrl *ctrl, void *userdata)
 {
 	LLFloaterSellLandUI *self = (LLFloaterSellLandUI *)userdata;
 
-	std::string sell_to = self->childGetValue("sell_to").asString();
+	std::string sell_to = self->getChild<LLUICtrl>("sell_to")->getValue().asString();
 
 	if (sell_to == "user")
 	{
@@ -365,9 +365,9 @@ void LLFloaterSellLandUI::onChangeValue(LLUICtrl *ctrl, void *userdata)
 		self->mSellToBuyer = false;
 	}
 
-	self->mParcelPrice = self->childGetValue("price");
+	self->mParcelPrice = self->getChild<LLUICtrl>("price")->getValue();
 
-	if ("yes" == self->childGetValue("sell_objects").asString())
+	if ("yes" == self->getChild<LLUICtrl>("sell_objects")->getValue().asString())
 	{
 		self->mParcelSoldWithObjects = true;
 	}
@@ -396,7 +396,7 @@ void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& nam
 
 	mAuthorizedBuyer = ids[0];
 
-	childSetText("sell_to_agent", names[0]);
+	getChild<LLUICtrl>("sell_to_agent")->setValue(names[0]);
 
 	refreshUI();
 }
@@ -439,13 +439,13 @@ void LLFloaterSellLandUI::doSellLand(void *userdata)
 	LLParcel* parcel = self->mParcelSelection->getParcel();
 
 	// Do a confirmation
-	S32 sale_price = self->childGetValue("price");
+	S32 sale_price = self->getChild<LLUICtrl>("price")->getValue();
 	S32 area = parcel->getArea();
 	std::string authorizedBuyerName = "Anyone";
 	bool sell_to_anyone = true;
-	if ("user" == self->childGetValue("sell_to").asString())
+	if ("user" == self->getChild<LLUICtrl>("sell_to")->getValue().asString())
 	{
-		authorizedBuyerName = self->childGetText("sell_to_agent");
+		authorizedBuyerName = self->getChild<LLUICtrl>("sell_to_agent")->getValue().asString();
 		sell_to_anyone = false;
 	}
 
@@ -492,7 +492,7 @@ bool LLFloaterSellLandUI::onConfirmSale(const LLSD& notification, const LLSD& re
 	{
 		return false;
 	}
-	S32  sale_price	= childGetValue("price");
+	S32  sale_price	= getChild<LLUICtrl>("price")->getValue();
 
 	// Valid extracted data
 	if (sale_price < 0)
@@ -514,12 +514,12 @@ bool LLFloaterSellLandUI::onConfirmSale(const LLSD& notification, const LLSD& re
 	parcel->setParcelFlag(PF_FOR_SALE, TRUE);
 	parcel->setSalePrice(sale_price);
 	bool sell_with_objects = false;
-	if ("yes" == childGetValue("sell_objects").asString())
+	if ("yes" == getChild<LLUICtrl>("sell_objects")->getValue().asString())
 	{
 		sell_with_objects = true;
 	}
 	parcel->setSellWithObjects(sell_with_objects);
-	if ("user" == childGetValue("sell_to").asString())
+	if ("user" == getChild<LLUICtrl>("sell_to")->getValue().asString())
 	{
 		parcel->setAuthorizedBuyerID(mAuthorizedBuyer);
 	}
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
index 3bd5e900b41acb2e346a0300e149b84acdce4fb2..41a05055feff21da841317f9af9c4da87448ce61 100644
--- a/indra/newview/llfloatersettingsdebug.cpp
+++ b/indra/newview/llfloatersettingsdebug.cpp
@@ -121,49 +121,49 @@ void LLFloaterSettingsDebug::onCommitSettings()
 	switch(controlp->type())
 	{		
 	  case TYPE_U32:
-		controlp->set(childGetValue("val_spinner_1"));
+		controlp->set(getChild<LLUICtrl>("val_spinner_1")->getValue());
 		break;
 	  case TYPE_S32:
-		controlp->set(childGetValue("val_spinner_1"));
+		controlp->set(getChild<LLUICtrl>("val_spinner_1")->getValue());
 		break;
 	  case TYPE_F32:
-		controlp->set(LLSD(childGetValue("val_spinner_1").asReal()));
+		controlp->set(LLSD(getChild<LLUICtrl>("val_spinner_1")->getValue().asReal()));
 		break;
 	  case TYPE_BOOLEAN:
-		controlp->set(childGetValue("boolean_combo"));
+		controlp->set(getChild<LLUICtrl>("boolean_combo")->getValue());
 		break;
 	  case TYPE_STRING:
-		controlp->set(LLSD(childGetValue("val_text").asString()));
+		controlp->set(LLSD(getChild<LLUICtrl>("val_text")->getValue().asString()));
 		break;
 	  case TYPE_VEC3:
-		vector.mV[VX] = (F32)childGetValue("val_spinner_1").asReal();
-		vector.mV[VY] = (F32)childGetValue("val_spinner_2").asReal();
-		vector.mV[VZ] = (F32)childGetValue("val_spinner_3").asReal();
+		vector.mV[VX] = (F32)getChild<LLUICtrl>("val_spinner_1")->getValue().asReal();
+		vector.mV[VY] = (F32)getChild<LLUICtrl>("val_spinner_2")->getValue().asReal();
+		vector.mV[VZ] = (F32)getChild<LLUICtrl>("val_spinner_3")->getValue().asReal();
 		controlp->set(vector.getValue());
 		break;
 	  case TYPE_VEC3D:
-		vectord.mdV[VX] = childGetValue("val_spinner_1").asReal();
-		vectord.mdV[VY] = childGetValue("val_spinner_2").asReal();
-		vectord.mdV[VZ] = childGetValue("val_spinner_3").asReal();
+		vectord.mdV[VX] = getChild<LLUICtrl>("val_spinner_1")->getValue().asReal();
+		vectord.mdV[VY] = getChild<LLUICtrl>("val_spinner_2")->getValue().asReal();
+		vectord.mdV[VZ] = getChild<LLUICtrl>("val_spinner_3")->getValue().asReal();
 		controlp->set(vectord.getValue());
 		break;
 	  case TYPE_RECT:
-		rect.mLeft = childGetValue("val_spinner_1").asInteger();
-		rect.mRight = childGetValue("val_spinner_2").asInteger();
-		rect.mBottom = childGetValue("val_spinner_3").asInteger();
-		rect.mTop = childGetValue("val_spinner_4").asInteger();
+		rect.mLeft = getChild<LLUICtrl>("val_spinner_1")->getValue().asInteger();
+		rect.mRight = getChild<LLUICtrl>("val_spinner_2")->getValue().asInteger();
+		rect.mBottom = getChild<LLUICtrl>("val_spinner_3")->getValue().asInteger();
+		rect.mTop = getChild<LLUICtrl>("val_spinner_4")->getValue().asInteger();
 		controlp->set(rect.getValue());
 		break;
 	  case TYPE_COL4:
-		col3.setValue(childGetValue("val_color_swatch"));
-		col4 = LLColor4(col3, (F32)childGetValue("val_spinner_4").asReal());
+		col3.setValue(getChild<LLUICtrl>("val_color_swatch")->getValue());
+		col4 = LLColor4(col3, (F32)getChild<LLUICtrl>("val_spinner_4")->getValue().asReal());
 		controlp->set(col4.getValue());
 		break;
 	  case TYPE_COL3:
-		controlp->set(childGetValue("val_color_swatch"));
-		//col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
-		//col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
-		//col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
+		controlp->set(getChild<LLUICtrl>("val_color_swatch")->getValue());
+		//col3.mV[VRED] = (F32)floaterp->getChild<LLUICtrl>("val_spinner_1")->getValue().asC();
+		//col3.mV[VGREEN] = (F32)floaterp->getChild<LLUICtrl>("val_spinner_2")->getValue().asReal();
+		//col3.mV[VBLUE] = (F32)floaterp->getChild<LLUICtrl>("val_spinner_3")->getValue().asReal();
 		//controlp->set(col3.getValue());
 		break;
 	  default:
@@ -205,7 +205,7 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
 	spinner3->setVisible(FALSE);
 	spinner4->setVisible(FALSE);
 	color_swatch->setVisible(FALSE);
-	childSetVisible("val_text", FALSE);
+	getChildView("val_text")->setVisible( FALSE);
 	mComment->setText(LLStringUtil::null);
 
 	if (controlp)
@@ -213,7 +213,7 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
 		eControlType type = controlp->type();
 
 		//hide combo box only for non booleans, otherwise this will result in the combo box closing every frame
-		childSetVisible("boolean_combo", type == TYPE_BOOLEAN);
+		getChildView("boolean_combo")->setVisible( type == TYPE_BOOLEAN);
 		
 
 		mComment->setText(controlp->getComment());
@@ -279,23 +279,23 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
 			}
 			break;
 		  case TYPE_BOOLEAN:
-			if (!childHasFocus("boolean_combo"))
+			if (!getChild<LLUICtrl>("boolean_combo")->hasFocus())
 			{
 				if (sd.asBoolean())
 				{
-					childSetValue("boolean_combo", LLSD("true"));
+					getChild<LLUICtrl>("boolean_combo")->setValue(LLSD("true"));
 				}
 				else
 				{
-					childSetValue("boolean_combo", LLSD(""));
+					getChild<LLUICtrl>("boolean_combo")->setValue(LLSD(""));
 				}
 			}
 			break;
 		  case TYPE_STRING:
-			childSetVisible("val_text", TRUE);
-			if (!childHasFocus("val_text"))
+			getChildView("val_text")->setVisible( TRUE);
+			if (!getChild<LLUICtrl>("val_text")->hasFocus())
 			{
-				childSetValue("val_text", sd);
+				getChild<LLUICtrl>("val_text")->setValue(sd);
 			}
 			break;
 		  case TYPE_VEC3:
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index a5da861fb0be1b0b9d8b9d857aac9e9dd378dd15..f58f704ff29a4ef213a8d79a26f553df8da3415e 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -40,6 +40,7 @@
 #include "llbutton.h"
 #include "llcombobox.h"
 #include "lleconomy.h"
+#include "lllandmarkactions.h"
 #include "llsliderctrl.h"
 #include "llspinctrl.h"
 #include "llviewercontrol.h"
@@ -53,6 +54,7 @@
 #include "llradiogroup.h"
 #include "lltoolfocus.h"
 #include "lltoolmgr.h"
+#include "llwebsharing.h"
 #include "llworld.h"
 #include "llagentui.h"
 
@@ -80,8 +82,8 @@
 ///----------------------------------------------------------------------------
 /// Local function declarations, constants, enums, and typedefs
 ///----------------------------------------------------------------------------
-S32 LLFloaterSnapshot::sUIWinHeightLong = 526 ;
-S32 LLFloaterSnapshot::sUIWinHeightShort = LLFloaterSnapshot::sUIWinHeightLong - 230 ;
+S32 LLFloaterSnapshot::sUIWinHeightLong = 530 ;
+S32 LLFloaterSnapshot::sUIWinHeightShort = LLFloaterSnapshot::sUIWinHeightLong - 240 ;
 S32 LLFloaterSnapshot::sUIWinWidth = 215 ;
 
 LLSnapshotFloaterView* gSnapshotFloaterView = NULL;
@@ -109,7 +111,8 @@ public:
 	{
 		SNAPSHOT_POSTCARD,
 		SNAPSHOT_TEXTURE,
-		SNAPSHOT_LOCAL
+		SNAPSHOT_LOCAL,
+		SNAPSHOT_WEB
 	};
 
 
@@ -155,6 +158,7 @@ public:
 	void setSnapshotQuality(S32 quality);
 	void setSnapshotBufferType(LLViewerWindow::ESnapshotType type) { mSnapshotBufferType = type; }
 	void updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail = FALSE, F32 delay = 0.f);
+	void saveWeb();
 	LLFloaterPostcard* savePostcard();
 	void saveTexture();
 	BOOL saveLocal();
@@ -167,6 +171,9 @@ public:
 	// Returns TRUE when snapshot generated, FALSE otherwise.
 	static BOOL onIdle( void* snapshot_preview );
 
+	// callback for region name resolve
+	void regionNameCallback(LLImageJPEG* snapshot, LLSD& metadata, const std::string& name, S32 x, S32 y, S32 z);
+
 private:
 	LLColor4					mColor;
 	LLPointer<LLViewerTexture>	mViewerImage[2]; //used to represent the scene when the frame is frozen.
@@ -820,9 +827,19 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
 			// delete any existing image
 			previewp->mFormattedImage = NULL;
 			// now create the new one of the appropriate format.
-			// note: postcards hardcoded to use jpeg always.
-			LLFloaterSnapshot::ESnapshotFormat format = previewp->getSnapshotType() == SNAPSHOT_POSTCARD
-				? LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG : previewp->getSnapshotFormat();
+			// note: postcards and web hardcoded to use jpeg always.
+			LLFloaterSnapshot::ESnapshotFormat format;
+
+			if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD ||
+				previewp->getSnapshotType() == SNAPSHOT_WEB)
+			{
+				format = LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG;
+			}
+			else
+			{
+				format = previewp->getSnapshotFormat();
+			}
+
 			switch(format)
 			{
 			case LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG:
@@ -1015,6 +1032,33 @@ BOOL LLSnapshotLivePreview::saveLocal()
 	return success;
 }
 
+void LLSnapshotLivePreview::saveWeb()
+{
+	// *FIX: Will break if the window closes because of CloseSnapshotOnKeep!
+	// Needs to pass on ownership of the image.
+	LLImageJPEG* jpg = dynamic_cast<LLImageJPEG*>(mFormattedImage.get());
+	if(!jpg)
+	{
+		llwarns << "Formatted image not a JPEG" << llendl;
+		return;
+	}
+
+	LLSD metadata;
+	metadata["description"] = getChild<LLLineEditor>("description")->getText();
+
+	LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgentCamera.getCameraPositionGlobal(),
+		boost::bind(&LLSnapshotLivePreview::regionNameCallback, this, jpg, metadata, _1, _2, _3, _4));
+
+	gViewerWindow->playSnapshotAnimAndSound();
+}
+
+void LLSnapshotLivePreview::regionNameCallback(LLImageJPEG* snapshot, LLSD& metadata, const std::string& name, S32 x, S32 y, S32 z)
+{
+	metadata["slurl"] = LLSLURL(name, LLVector3d(x, y, z)).getSLURLString();
+
+	LLWebSharing::instance().shareSnapshot(snapshot, metadata);
+}
+
 ///----------------------------------------------------------------------------
 /// Class LLFloaterSnapshot::Impl
 ///----------------------------------------------------------------------------
@@ -1065,6 +1109,7 @@ public:
 
 private:
 	static LLSnapshotLivePreview::ESnapshotType getTypeIndex(LLFloaterSnapshot* floater);
+	static LLSD getTypeName(LLSnapshotLivePreview::ESnapshotType index);
 	static ESnapshotFormat getFormatIndex(LLFloaterSnapshot* floater);
 	static LLViewerWindow::ESnapshotType getLayerType(LLFloaterSnapshot* floater);
 	static void comboSetCustom(LLFloaterSnapshot *floater, const std::string& comboname);
@@ -1090,17 +1135,51 @@ LLSnapshotLivePreview* LLFloaterSnapshot::Impl::getPreviewView(LLFloaterSnapshot
 LLSnapshotLivePreview::ESnapshotType LLFloaterSnapshot::Impl::getTypeIndex(LLFloaterSnapshot* floater)
 {
 	LLSnapshotLivePreview::ESnapshotType index = LLSnapshotLivePreview::SNAPSHOT_POSTCARD;
-	LLSD value = floater->childGetValue("snapshot_type_radio");
+	LLSD value = floater->getChild<LLUICtrl>("snapshot_type_radio")->getValue();
+
 	const std::string id = value.asString();
 	if (id == "postcard")
+	{
 		index = LLSnapshotLivePreview::SNAPSHOT_POSTCARD;
+	}
 	else if (id == "texture")
+	{
 		index = LLSnapshotLivePreview::SNAPSHOT_TEXTURE;
+	}
 	else if (id == "local")
+	{
 		index = LLSnapshotLivePreview::SNAPSHOT_LOCAL;
+	}
+	else if (id == "share_to_web")
+	{
+		index = LLSnapshotLivePreview::SNAPSHOT_WEB;
+	}
+
 	return index;
 }
 
+// static
+LLSD LLFloaterSnapshot::Impl::getTypeName(LLSnapshotLivePreview::ESnapshotType index)
+{
+	std::string id;
+	switch (index)
+	{
+		case LLSnapshotLivePreview::SNAPSHOT_WEB:
+			id = "share_to_web";
+			break;
+		case LLSnapshotLivePreview::SNAPSHOT_POSTCARD:
+			id = "postcard";
+			break;
+		case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:
+			id = "texture";
+			break;
+		case LLSnapshotLivePreview::SNAPSHOT_LOCAL:
+		default:
+			id = "local";
+			break;
+	}
+	return LLSD(id);
+}
 
 // static
 LLFloaterSnapshot::ESnapshotFormat LLFloaterSnapshot::Impl::getFormatIndex(LLFloaterSnapshot* floater)
@@ -1126,7 +1205,7 @@ LLFloaterSnapshot::ESnapshotFormat LLFloaterSnapshot::Impl::getFormatIndex(LLFlo
 LLViewerWindow::ESnapshotType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSnapshot* floater)
 {
 	LLViewerWindow::ESnapshotType type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
-	LLSD value = floater->childGetValue("layer_types");
+	LLSD value = floater->getChild<LLUICtrl>("layer_types")->getValue();
 	const std::string id = value.asString();
 	if (id == "colors")
 		type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
@@ -1169,7 +1248,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
 		previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
 	}
 
-	bool use_freeze_frame = floaterp->childGetValue("freeze_frame_check").asBoolean();
+	bool use_freeze_frame = floaterp->getChild<LLUICtrl>("freeze_frame_check")->getValue().asBoolean();
 
 	if (use_freeze_frame)
 	{
@@ -1237,56 +1316,64 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
 void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
 {
 	LLRadioGroup* snapshot_type_radio = floater->getChild<LLRadioGroup>("snapshot_type_radio");
-	snapshot_type_radio->setSelectedIndex(gSavedSettings.getS32("LastSnapshotType"));
-	LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floater);
-	ESnapshotFormat shot_format = (ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); //getFormatIndex(floater);	LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
+	LLSnapshotLivePreview::ESnapshotType shot_type = (LLSnapshotLivePreview::ESnapshotType)gSavedSettings.getS32("LastSnapshotType");
+	snapshot_type_radio->setSelectedByValue(getTypeName(shot_type), true);
+
+	ESnapshotFormat shot_format = (ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat");
 	LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
 
-	floater->childSetVisible("postcard_size_combo", FALSE);
-	floater->childSetVisible("texture_size_combo", FALSE);
-	floater->childSetVisible("local_size_combo", FALSE);
+	floater->getChildView("share_to_web")->setVisible( gSavedSettings.getBOOL("SnapshotSharingEnabled"));
+
+	floater->getChildView("postcard_size_combo")->setVisible( FALSE);
+	floater->getChildView("texture_size_combo")->setVisible( FALSE);
+	floater->getChildView("local_size_combo")->setVisible( FALSE);
 
 	floater->getChild<LLComboBox>("postcard_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution"));
 	floater->getChild<LLComboBox>("texture_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution"));
 	floater->getChild<LLComboBox>("local_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));
 	floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat"));
 
-	floater->childSetVisible("upload_btn",			shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE);
-	floater->childSetVisible("send_btn",			shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD);
-	floater->childSetVisible("save_btn",			shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
-	floater->childSetEnabled("keep_aspect_check",	shot_type != LLSnapshotLivePreview::SNAPSHOT_TEXTURE && !floater->impl.mAspectRatioCheckOff);
-	floater->childSetEnabled("layer_types",			shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
+	// *TODO: Separate settings for Web images from postcards
+	floater->getChildView("send_btn")->setVisible(	shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD ||
+													shot_type == LLSnapshotLivePreview::SNAPSHOT_WEB);
+	floater->getChildView("upload_btn")->setVisible(shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE);
+	floater->getChildView("save_btn")->setVisible(	shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
+	floater->getChildView("keep_aspect_check")->setEnabled(shot_type != LLSnapshotLivePreview::SNAPSHOT_TEXTURE && !floater->impl.mAspectRatioCheckOff);
+	floater->getChildView("layer_types")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
 
 	BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot");
 	BOOL is_local = shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL;
-	BOOL show_slider = 
-		shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD
-		|| (is_local && shot_format == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG);
-
-	floater->childSetVisible("more_btn", !is_advance); // the only item hidden in advanced mode
-	floater->childSetVisible("less_btn",				is_advance);
-	floater->childSetVisible("type_label2",				is_advance);
-	floater->childSetVisible("format_label",			is_advance && is_local);
-	floater->childSetVisible("local_format_combo",		is_advance && is_local);
-	floater->childSetVisible("layer_types",				is_advance);
-	floater->childSetVisible("layer_type_label",		is_advance);
-	floater->childSetVisible("snapshot_width",			is_advance);
-	floater->childSetVisible("snapshot_height",			is_advance);
-	floater->childSetVisible("keep_aspect_check",		is_advance);
-	floater->childSetVisible("ui_check",				is_advance);
-	floater->childSetVisible("hud_check",				is_advance);
-	floater->childSetVisible("keep_open_check",			is_advance);
-	floater->childSetVisible("freeze_frame_check",		is_advance);
-	floater->childSetVisible("auto_snapshot_check",		is_advance);
-	floater->childSetVisible("image_quality_slider",	is_advance && show_slider);
+	BOOL show_slider = (shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD ||
+						shot_type == LLSnapshotLivePreview::SNAPSHOT_WEB ||
+					   (is_local && shot_format == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG));
+
+	floater->getChildView("more_btn")->setVisible( !is_advance); // the only item hidden in advanced mode
+	floater->getChildView("less_btn")->setVisible(				is_advance);
+	floater->getChildView("type_label2")->setVisible(				is_advance);
+	floater->getChildView("format_label")->setVisible(			is_advance && is_local);
+	floater->getChildView("local_format_combo")->setVisible(		is_advance && is_local);
+	floater->getChildView("layer_types")->setVisible(				is_advance);
+	floater->getChildView("layer_type_label")->setVisible(		is_advance);
+	floater->getChildView("snapshot_width")->setVisible(			is_advance);
+	floater->getChildView("snapshot_height")->setVisible(			is_advance);
+	floater->getChildView("keep_aspect_check")->setVisible(		is_advance);
+	floater->getChildView("ui_check")->setVisible(				is_advance);
+	floater->getChildView("hud_check")->setVisible(				is_advance);
+	floater->getChildView("keep_open_check")->setVisible(			is_advance);
+	floater->getChildView("freeze_frame_check")->setVisible(		is_advance);
+	floater->getChildView("auto_snapshot_check")->setVisible(		is_advance);
+	floater->getChildView("image_quality_slider")->setVisible(	is_advance && show_slider);
 
 	LLSnapshotLivePreview* previewp = getPreviewView(floater);
 	BOOL got_bytes = previewp && previewp->getDataSize() > 0;
 	BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
 
-	floater->childSetEnabled("send_btn",   shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD && got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE);
-	floater->childSetEnabled("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE  && got_snap);
-	floater->childSetEnabled("save_btn",   shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL    && got_snap);
+	// *TODO: Separate maximum size for Web images from postcards
+	floater->getChildView("send_btn")->setEnabled((shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD ||
+											shot_type == LLSnapshotLivePreview::SNAPSHOT_WEB) &&
+											got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE);
+	floater->getChildView("upload_btn")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE  && got_snap);
+	floater->getChildView("save_btn")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL    && got_snap);
 
 	LLLocale locale(LLLocale::USER_LOCALE);
 	std::string bytes_string;
@@ -1295,19 +1382,21 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
 		LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 );
 	}
 	S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
-	floater->childSetLabelArg("texture", "[AMOUNT]", llformat("%d",upload_cost));
-	floater->childSetLabelArg("upload_btn", "[AMOUNT]", llformat("%d",upload_cost));
-	floater->childSetTextArg("file_size_label", "[SIZE]", got_snap ? bytes_string : floater->getString("unknown"));
-	floater->childSetColor("file_size_label", 
+	floater->getChild<LLUICtrl>("texture")->setLabelArg("[AMOUNT]", llformat("%d",upload_cost));
+	floater->getChild<LLUICtrl>("upload_btn")->setLabelArg("[AMOUNT]", llformat("%d",upload_cost));
+	floater->getChild<LLUICtrl>("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown"));
+	floater->getChild<LLUICtrl>("file_size_label")->setColor(
 		shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD 
 		&& got_bytes
 		&& previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" ));
 
 	switch(shot_type)
 	{
+	  // *TODO: Separate settings for Web images from postcards
+	  case LLSnapshotLivePreview::SNAPSHOT_WEB:
 	  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD:
 		layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
-		floater->childSetValue("layer_types", "colors");
+		floater->getChild<LLUICtrl>("layer_types")->setValue("colors");
 		if(is_advance)
 		{			
 			setResolution(floater, "postcard_size_combo");
@@ -1315,7 +1404,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
 		break;
 	  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:
 		layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
-		floater->childSetValue("layer_types", "colors");
+		floater->getChild<LLUICtrl>("layer_types")->setValue("colors");
 		if(is_advance)
 		{
 			setResolution(floater, "texture_size_combo");			
@@ -1396,28 +1485,39 @@ void LLFloaterSnapshot::Impl::onClickKeep(void* data)
 {
 	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
 	LLSnapshotLivePreview* previewp = getPreviewView(view);
-	
+
 	if (previewp)
 	{
-		if (previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_POSTCARD)
+		switch (previewp->getSnapshotType())
 		{
-			LLFloaterPostcard* floater = previewp->savePostcard();
-			// if still in snapshot mode, put postcard floater in snapshot floaterview
-			// and link it to snapshot floater
-			if (floater && !gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
+		  case LLSnapshotLivePreview::SNAPSHOT_WEB:
+			previewp->saveWeb();
+			break;
+
+		  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD:
 			{
-				gFloaterView->removeChild(floater);
-				gSnapshotFloaterView->addChild(floater);
-				view->addDependentFloater(floater, FALSE);
+				LLFloaterPostcard* floater = previewp->savePostcard();
+				// if still in snapshot mode, put postcard floater in snapshot floaterview
+				// and link it to snapshot floater
+				if (floater && !gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
+				{
+					gFloaterView->removeChild(floater);
+					gSnapshotFloaterView->addChild(floater);
+					view->addDependentFloater(floater, FALSE);
+				}
 			}
-		}
-		else if (previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
-		{
+			break;
+
+		  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:
 			previewp->saveTexture();
-		}
-		else
-		{
+			break;
+
+		  case LLSnapshotLivePreview::SNAPSHOT_LOCAL:
 			previewp->saveLocal();
+			break;
+
+		  default:
+			break;
 		}
 
 		if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
@@ -1604,7 +1704,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde
 	if(0 == index) //current window size
 	{
 		view->impl.mAspectRatioCheckOff = true ;
-		view->childSetEnabled("keep_aspect_check", FALSE) ;
+		view->getChildView("keep_aspect_check")->setEnabled(FALSE) ;
 
 		if(previewp)
 		{
@@ -1616,7 +1716,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde
 		view->impl.mAspectRatioCheckOff = false ;
 		//if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE != gSavedSettings.getS32("LastSnapshotType"))
 		{
-			view->childSetEnabled("keep_aspect_check", TRUE) ;
+			view->getChildView("keep_aspect_check")->setEnabled(TRUE) ;
 
 			if(previewp)
 			{
@@ -1627,7 +1727,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde
 	else
 	{
 		view->impl.mAspectRatioCheckOff = true ;
-		view->childSetEnabled("keep_aspect_check", FALSE) ;
+		view->getChildView("keep_aspect_check")->setEnabled(FALSE) ;
 
 		if(previewp)
 		{
@@ -1642,18 +1742,22 @@ static std::string lastSnapshotWidthName()
 {
 	switch(gSavedSettings.getS32("LastSnapshotType"))
 	{
-	case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailWidth";
-	case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryWidth";
-	default:                                       return "LastSnapshotToDiskWidth";
+	  // *TODO: Separate settings for Web snapshots and postcards
+	  case LLSnapshotLivePreview::SNAPSHOT_WEB:		 return "LastSnapshotToEmailWidth";
+	  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailWidth";
+	  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryWidth";
+	  default:                                       return "LastSnapshotToDiskWidth";
 	}
 }
 static std::string lastSnapshotHeightName()
 {
 	switch(gSavedSettings.getS32("LastSnapshotType"))
 	{
-	case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailHeight";
-	case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryHeight";
-	default:                                       return "LastSnapshotToDiskHeight";
+	  // *TODO: Separate settings for Web snapshots and postcards
+	  case LLSnapshotLivePreview::SNAPSHOT_WEB:	     return "LastSnapshotToEmailHeight";
+	  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailHeight";
+	  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryHeight";
+	  default:                                       return "LastSnapshotToDiskHeight";
 	}
 }
 
@@ -1712,10 +1816,10 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
 			resetSnapshotSizeOnUI(view, width, height) ;
 		}
 		
-		if(view->childGetValue("snapshot_width").asInteger() != width || view->childGetValue("snapshot_height").asInteger() != height)
+		if(view->getChild<LLUICtrl>("snapshot_width")->getValue().asInteger() != width || view->getChild<LLUICtrl>("snapshot_height")->getValue().asInteger() != height)
 		{
-			view->childSetValue("snapshot_width", width);
-			view->childSetValue("snapshot_height", height);
+			view->getChild<LLUICtrl>("snapshot_width")->setValue(width);
+			view->getChild<LLUICtrl>("snapshot_height")->setValue(height);
 		}
 
 		if(original_width != width || original_height != height)
@@ -1767,7 +1871,7 @@ void LLFloaterSnapshot::Impl::onCommitSnapshotType(LLUICtrl* ctrl, void* data)
 //static 
 void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data)
 {
-	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;		
+	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
 	if (view)
 	{
 		gSavedSettings.setS32("SnapshotFormat", getFormatIndex(view));
@@ -1898,8 +2002,8 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
 	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;		
 	if (view)
 	{
-		S32 w = llfloor((F32)view->childGetValue("snapshot_width").asReal());
-		S32 h = llfloor((F32)view->childGetValue("snapshot_height").asReal());
+		S32 w = llfloor((F32)view->getChild<LLUICtrl>("snapshot_width")->getValue().asReal());
+		S32 h = llfloor((F32)view->getChild<LLUICtrl>("snapshot_height")->getValue().asReal());
 
 		LLSnapshotLivePreview* previewp = getPreviewView(view);
 		if (previewp)
@@ -1988,6 +2092,12 @@ LLFloaterSnapshot::~LLFloaterSnapshot()
 
 BOOL LLFloaterSnapshot::postBuild()
 {
+	// Kick start Web Sharing, to fetch its config data if it needs to.
+	if (gSavedSettings.getBOOL("SnapshotSharingEnabled"))
+	{
+		LLWebSharing::instance().init();
+	}
+
 	childSetCommitCallback("snapshot_type_radio", Impl::onCommitSnapshotType, this);
 	childSetCommitCallback("local_format_combo", Impl::onCommitSnapshotFormat, this);
 	
@@ -2002,34 +2112,34 @@ BOOL LLFloaterSnapshot::postBuild()
 	childSetAction("discard_btn", Impl::onClickDiscard, this);
 
 	childSetCommitCallback("image_quality_slider", Impl::onCommitQuality, this);
-	childSetValue("image_quality_slider", gSavedSettings.getS32("SnapshotQuality"));
+	getChild<LLUICtrl>("image_quality_slider")->setValue(gSavedSettings.getS32("SnapshotQuality"));
 
 	childSetCommitCallback("snapshot_width", Impl::onCommitCustomResolution, this);
 	childSetCommitCallback("snapshot_height", Impl::onCommitCustomResolution, this);
 
 	childSetCommitCallback("ui_check", Impl::onClickUICheck, this);
-	childSetValue("ui_check", gSavedSettings.getBOOL("RenderUIInSnapshot"));
+	getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot"));
 
 	childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this);
-	childSetValue("hud_check", gSavedSettings.getBOOL("RenderHUDInSnapshot"));
+	getChild<LLUICtrl>("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot"));
 
 	childSetCommitCallback("keep_open_check", Impl::onClickKeepOpenCheck, this);
-	childSetValue("keep_open_check", !gSavedSettings.getBOOL("CloseSnapshotOnKeep"));
+	getChild<LLUICtrl>("keep_open_check")->setValue(!gSavedSettings.getBOOL("CloseSnapshotOnKeep"));
 
 	childSetCommitCallback("keep_aspect_check", Impl::onClickKeepAspectCheck, this);
-	childSetValue("keep_aspect_check", gSavedSettings.getBOOL("KeepAspectForSnapshot"));
+	getChild<LLUICtrl>("keep_aspect_check")->setValue(gSavedSettings.getBOOL("KeepAspectForSnapshot"));
 
 	childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this);
-	childSetValue("layer_types", "colors");
-	childSetEnabled("layer_types", FALSE);
+	getChild<LLUICtrl>("layer_types")->setValue("colors");
+	getChildView("layer_types")->setEnabled(FALSE);
 
-	childSetValue("snapshot_width", gSavedSettings.getS32(lastSnapshotWidthName()));
-	childSetValue("snapshot_height", gSavedSettings.getS32(lastSnapshotHeightName()));
+	getChild<LLUICtrl>("snapshot_width")->setValue(gSavedSettings.getS32(lastSnapshotWidthName()));
+	getChild<LLUICtrl>("snapshot_height")->setValue(gSavedSettings.getS32(lastSnapshotHeightName()));
 
-	childSetValue("freeze_frame_check", gSavedSettings.getBOOL("UseFreezeFrame"));
+	getChild<LLUICtrl>("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame"));
 	childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this);
 
-	childSetValue("auto_snapshot_check", gSavedSettings.getBOOL("AutoSnapshot"));
+	getChild<LLUICtrl>("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot"));
 	childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this);
 
 	childSetCommitCallback("postcard_size_combo", Impl::onCommitResolution, this);
diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp
index d3d3b75a5070383ac3fd657b0213ad11294557d6..d945f1a2de21ba8c754340fd188c86961e86d163 100644
--- a/indra/newview/llfloatertelehub.cpp
+++ b/indra/newview/llfloatertelehub.cpp
@@ -106,19 +106,19 @@ void LLFloaterTelehub::refresh()
 	
 	BOOL have_selection = (object != NULL);
 	BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
-	childSetEnabled("connect_btn", have_selection && all_volume);
+	getChildView("connect_btn")->setEnabled(have_selection && all_volume);
 
 	BOOL have_telehub = mTelehubObjectID.notNull();
-	childSetEnabled("disconnect_btn", have_telehub);
+	getChildView("disconnect_btn")->setEnabled(have_telehub);
 
 	BOOL space_avail = (mNumSpawn < MAX_SPAWNPOINTS_PER_TELEHUB);
-	childSetEnabled("add_spawn_point_btn", have_selection && all_volume && space_avail);
+	getChildView("add_spawn_point_btn")->setEnabled(have_selection && all_volume && space_avail);
 
 	LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list");
 	if (list)
 	{
 		BOOL enable_remove = (list->getFirstSelected() != NULL);
-		childSetEnabled("remove_spawn_point_btn", enable_remove);
+		getChildView("remove_spawn_point_btn")->setEnabled(enable_remove);
 	}
 }
 
@@ -249,18 +249,18 @@ void LLFloaterTelehub::unpackTelehubInfo(LLMessageSystem* msg)
 
 	if (mTelehubObjectID.isNull())
 	{
-		childSetVisible("status_text_connected", false);
-		childSetVisible("status_text_not_connected", true);
-		childSetVisible("help_text_connected", false);
-		childSetVisible("help_text_not_connected", true);
+		getChildView("status_text_connected")->setVisible( false);
+		getChildView("status_text_not_connected")->setVisible( true);
+		getChildView("help_text_connected")->setVisible( false);
+		getChildView("help_text_not_connected")->setVisible( true);
 	}
 	else
 	{
-		childSetTextArg("status_text_connected", "[OBJECT]", mTelehubObjectName);
-		childSetVisible("status_text_connected", true);
-		childSetVisible("status_text_not_connected", false);
-		childSetVisible("help_text_connected", true);
-		childSetVisible("help_text_not_connected", false);
+		getChild<LLUICtrl>("status_text_connected")->setTextArg("[OBJECT]", mTelehubObjectName);
+		getChildView("status_text_connected")->setVisible( true);
+		getChildView("status_text_not_connected")->setVisible( false);
+		getChildView("help_text_connected")->setVisible( true);
+		getChildView("help_text_not_connected")->setVisible( false);
 	}
 
 	LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list");
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 41ca5b78f8ac07dceebdc228e79d715292c17458..58a0d08c7d91ca28cab4b7008d905facbed047fd 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -222,13 +222,13 @@ BOOL	LLFloaterTools::postBuild()
 	mTitleMedia			= getChild<LLMediaCtrl>("title_media");
 	
 	mCheckSelectIndividual	= getChild<LLCheckBoxCtrl>("checkbox edit linked parts");	
-	childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts"));
+	getChild<LLUICtrl>("checkbox edit linked parts")->setValue((BOOL)gSavedSettings.getBOOL("EditLinkedParts"));
 	mCheckSnapToGrid		= getChild<LLCheckBoxCtrl>("checkbox snap to grid");
-	childSetValue("checkbox snap to grid",(BOOL)gSavedSettings.getBOOL("SnapEnabled"));
+	getChild<LLUICtrl>("checkbox snap to grid")->setValue((BOOL)gSavedSettings.getBOOL("SnapEnabled"));
 	mCheckStretchUniform	= getChild<LLCheckBoxCtrl>("checkbox uniform");
-	childSetValue("checkbox uniform",(BOOL)gSavedSettings.getBOOL("ScaleUniform"));
+	getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform"));
 	mCheckStretchTexture	= getChild<LLCheckBoxCtrl>("checkbox stretch textures");
-	childSetValue("checkbox stretch textures",(BOOL)gSavedSettings.getBOOL("ScaleStretchTextures"));
+	getChild<LLUICtrl>("checkbox stretch textures")->setValue((BOOL)gSavedSettings.getBOOL("ScaleStretchTextures"));
 	mComboGridMode			= getChild<LLComboBox>("combobox grid mode");
 	mCheckStretchUniformLabel = getChild<LLTextBox>("checkbox uniform label");
 
@@ -248,21 +248,21 @@ BOOL	LLFloaterTools::postBuild()
 		}
 	}
 	mCheckCopySelection = getChild<LLCheckBoxCtrl>("checkbox copy selection");
-	childSetValue("checkbox copy selection",(BOOL)gSavedSettings.getBOOL("CreateToolCopySelection"));
+	getChild<LLUICtrl>("checkbox copy selection")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopySelection"));
 	mCheckSticky = getChild<LLCheckBoxCtrl>("checkbox sticky");
-	childSetValue("checkbox sticky",(BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected"));
+	getChild<LLUICtrl>("checkbox sticky")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected"));
 	mCheckCopyCenters = getChild<LLCheckBoxCtrl>("checkbox copy centers");
-	childSetValue("checkbox copy centers",(BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters"));
+	getChild<LLUICtrl>("checkbox copy centers")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters"));
 	mCheckCopyRotates = getChild<LLCheckBoxCtrl>("checkbox copy rotates");
-	childSetValue("checkbox copy rotates",(BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates"));
+	getChild<LLUICtrl>("checkbox copy rotates")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates"));
 
 	mRadioGroupLand			= getChild<LLRadioGroup>("land_radio_group");
 	mBtnApplyToSelection	= getChild<LLButton>("button apply to selection");
 	mSliderDozerSize		= getChild<LLSlider>("slider brush size");
-	childSetValue( "slider brush size", gSavedSettings.getF32("LandBrushSize"));
+	getChild<LLUICtrl>("slider brush size")->setValue(gSavedSettings.getF32("LandBrushSize"));
 	mSliderDozerForce		= getChild<LLSlider>("slider force");
 	// the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here
-	childSetValue( "slider force", log10(gSavedSettings.getF32("LandBrushForce")));
+	getChild<LLUICtrl>("slider force")->setValue(log10(gSavedSettings.getF32("LandBrushForce")));
 
 	mTab = getChild<LLTabContainer>("Object Info Tabs");
 	if(mTab)
@@ -415,25 +415,25 @@ void LLFloaterTools::refresh()
 	LLLocale locale(LLLocale::USER_LOCALE);
 	std::string obj_count_string;
 	LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
-	childSetTextArg("obj_count",  "[COUNT]", obj_count_string);	
+	getChild<LLUICtrl>("obj_count")->setTextArg("[COUNT]", obj_count_string);	
 	std::string prim_count_string;
 	LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
-	childSetTextArg("prim_count", "[COUNT]", prim_count_string);
+	getChild<LLUICtrl>("prim_count")->setTextArg("[COUNT]", prim_count_string);
 
 	// calculate selection rendering cost
 	if (sShowObjectCost)
 	{
 		std::string prim_cost_string;
 		LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost());
-		childSetTextArg("RenderingCost", "[COUNT]", prim_cost_string);
+		getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string);
 	}
 
 
 	// disable the object and prim counts if nothing selected
 	bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
-	childSetEnabled("obj_count", have_selection);
-	childSetEnabled("prim_count", have_selection);
-	childSetEnabled("RenderingCost", have_selection && sShowObjectCost);
+	getChildView("obj_count")->setEnabled(have_selection);
+	getChildView("prim_count")->setEnabled(have_selection);
+	getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost);
 
 	// Refresh child tabs
 	mPanelPermissions->refresh();
@@ -501,8 +501,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
 	mBtnFocus	->setToggleState( focus_visible );
 
 	mRadioGroupFocus->setVisible( focus_visible );
-	childSetVisible("slider zoom", focus_visible);
-	childSetEnabled("slider zoom", gCameraBtnZoom);
+	getChildView("slider zoom")->setVisible( focus_visible);
+	getChildView("slider zoom")->setEnabled(gCameraBtnZoom);
 
 	if (!gCameraBtnOrbit &&
 		!gCameraBtnPan &&
@@ -527,7 +527,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
 	}
 
 	// multiply by correction factor because volume sliders go [0, 0.5]
-	childSetValue( "slider zoom", gAgentCamera.getCameraZoomFraction() * 0.5f);
+	getChild<LLUICtrl>("slider zoom")->setValue(gAgentCamera.getCameraZoomFraction() * 0.5f);
 
 	// Move buttons
 	BOOL move_visible = (tool == LLToolGrab::getInstance());
@@ -565,7 +565,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
 	mBtnEdit	->setToggleState( edit_visible );
 	mRadioGroupEdit->setVisible( edit_visible );
 	bool linked_parts = gSavedSettings.getBOOL("EditLinkedParts");
-	childSetVisible("RenderingCost", !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost);
+	getChildView("RenderingCost")->setVisible( !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost);
 
 	if (mCheckSelectIndividual)
 	{
@@ -708,17 +708,17 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
 	if (mSliderDozerSize)
 	{
 		mSliderDozerSize	->setVisible( land_visible );
-		childSetVisible("Bulldozer:", land_visible);
-		childSetVisible("Dozer Size:", land_visible);
+		getChildView("Bulldozer:")->setVisible( land_visible);
+		getChildView("Dozer Size:")->setVisible( land_visible);
 	}
 	if (mSliderDozerForce)
 	{
 		mSliderDozerForce	->setVisible( land_visible );
-		childSetVisible("Strength:", land_visible);
+		getChildView("Strength:")->setVisible( land_visible);
 	}
 
-	childSetVisible("obj_count", !land_visible);
-	childSetVisible("prim_count", !land_visible);
+	getChildView("obj_count")->setVisible( !land_visible);
+	getChildView("prim_count")->setVisible( !land_visible);
 	mTab->setVisible(!land_visible);
 	mPanelLandInfo->setVisible(land_visible);
 }
@@ -1085,7 +1085,7 @@ void LLFloaterTools::getMediaState()
 		  &&first_object->permModify() 
 	      ))
 	{
-		childSetEnabled("Add_Media",  FALSE);
+		getChildView("Add_Media")->setEnabled(FALSE);
 		media_info->clear();
 		clearMediaSettings();
 		return;
@@ -1096,7 +1096,7 @@ void LLFloaterTools::getMediaState()
 	
 	if(!has_media_capability)
 	{
-		childSetEnabled("Add_Media",  FALSE);
+		getChildView("Add_Media")->setEnabled(FALSE);
 		LL_WARNS("LLFloaterTools: media") << "Media not enabled (no capability) in this region!" << LL_ENDL;
 		clearMediaSettings();
 		return;
@@ -1188,7 +1188,7 @@ void LLFloaterTools::getMediaState()
 	// update UI depending on whether "object" (prim or face) has media
 	// and whether or not you are allowed to edit it.
 	
-	childSetEnabled("Add_Media",  editable);
+	getChildView("Add_Media")->setEnabled(editable);
 	// IF all the faces have media (or all dont have media)
 	if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )
 	{
@@ -1215,10 +1215,10 @@ void LLFloaterTools::getMediaState()
 			mNeedMediaTitle = false;
 		}
 		
-		childSetEnabled("media_tex",  bool_has_media && editable);
-		childSetEnabled( "edit_media", bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable );
-		childSetEnabled( "delete_media", bool_has_media && editable );
-		childSetEnabled( "add_media", ( ! bool_has_media ) && editable );
+		getChildView("media_tex")->setEnabled(bool_has_media && editable);
+		getChildView("edit_media")->setEnabled(bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable );
+		getChildView("delete_media")->setEnabled(bool_has_media && editable );
+		getChildView("add_media")->setEnabled(( ! bool_has_media ) && editable );
 			// TODO: display a list of all media on the face - use 'identical' flag
 	}
 	else // not all face has media but at least one does.
@@ -1245,10 +1245,10 @@ void LLFloaterTools::getMediaState()
 			}
 		}
 		
-		childSetEnabled("media_tex",  TRUE);
-		childSetEnabled( "edit_media", LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo);
-		childSetEnabled( "delete_media", TRUE);
-		childSetEnabled( "add_media", FALSE );
+		getChildView("media_tex")->setEnabled(TRUE);
+		getChildView("edit_media")->setEnabled(LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo);
+		getChildView("delete_media")->setEnabled(TRUE);
+		getChildView("add_media")->setEnabled(FALSE );
 	}
 	media_info->setText(media_title);
 	
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 41869ac62b5383dafff17898868ff732efe2bcce..a984dd1d51783bffb75df19ae6a8f1e0a1a40739 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -92,7 +92,7 @@ LLFloaterTopObjects::~LLFloaterTopObjects()
 BOOL LLFloaterTopObjects::postBuild()
 {
 	LLScrollListCtrl *objects_list = getChild<LLScrollListCtrl>("objects_list");
-	childSetFocus("objects_list");
+	getChild<LLUICtrl>("objects_list")->setFocus(TRUE);
 	objects_list->setDoubleClickCallback(onDoubleClickObjectsList, this);
 	objects_list->setCommitOnSelectionChange(TRUE);
 
@@ -247,7 +247,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		LLUIString format = getString("top_scripts_text");
 		format.setArg("[COUNT]", llformat("%d", total_count));
 		format.setArg("[TIME]", llformat("%0.1f", mtotalScore));
-		childSetValue("title_text", LLSD(format));
+		getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
 	}
 	else
 	{
@@ -256,7 +256,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		list->setColumnLabel("mono_time", "");
 		LLUIString format = getString("top_colliders_text");
 		format.setArg("[COUNT]", llformat("%d", total_count));
-		childSetValue("title_text", LLSD(format));
+		getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
 	}
 }
 
@@ -276,13 +276,13 @@ void LLFloaterTopObjects::updateSelectionInfo()
 
 	std::string object_id_string = object_id.asString();
 
-	childSetValue("id_editor", LLSD(object_id_string));
+	getChild<LLUICtrl>("id_editor")->setValue(LLSD(object_id_string));
 	LLScrollListItem* sli = list->getFirstSelected();
 	llassert(sli);
 	if (sli)
 	{
-		childSetValue("object_name_editor", sli->getColumn(1)->getValue().asString());
-		childSetValue("owner_name_editor", sli->getColumn(2)->getValue().asString());
+		getChild<LLUICtrl>("object_name_editor")->setValue(sli->getColumn(1)->getValue().asString());
+		getChild<LLUICtrl>("owner_name_editor")->setValue(sli->getColumn(2)->getValue().asString());
 	}
 }
 
@@ -306,7 +306,7 @@ void LLFloaterTopObjects::doToObjects(int action, bool all)
 	LLViewerRegion* region = gAgent.getRegion();
 	if (!region) return;
 
-	LLCtrlListInterface *list = childGetListInterface("objects_list");
+	LLCtrlListInterface *list = getChild<LLUICtrl>("objects_list")->getListInterface();
 	if (!list || list->getItemCount() == 0) return;
 
 	uuid_vec_t::iterator id_itor;
@@ -451,14 +451,14 @@ void LLFloaterTopObjects::onRefresh()
 void LLFloaterTopObjects::onGetByObjectName()
 {
 	mFlags  = STAT_FILTER_BY_OBJECT;
-	mFilter = childGetText("object_name_editor");
+	mFilter = getChild<LLUICtrl>("object_name_editor")->getValue().asString();
 	onRefresh();
 }
 
 void LLFloaterTopObjects::onGetByOwnerName()
 {
 	mFlags  = STAT_FILTER_BY_OWNER;
-	mFilter = childGetText("owner_name_editor");
+	mFilter = getChild<LLUICtrl>("owner_name_editor")->getValue().asString();
 	onRefresh();
 }
 
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp
index 6e64291240e47322dc7df1de04dde0c00882b017..c5df7e16e97c639a0a9e6bdc06f97950446d055e 100644
--- a/indra/newview/llfloatertos.cpp
+++ b/indra/newview/llfloatertos.cpp
@@ -193,8 +193,8 @@ void LLFloaterTOS::draw()
 void LLFloaterTOS::updateAgree(LLUICtrl*, void* userdata )
 {
 	LLFloaterTOS* self = (LLFloaterTOS*) userdata;
-	bool agree = self->childGetValue("agree_chk").asBoolean(); 
-	self->childSetEnabled("Continue", agree);
+	bool agree = self->getChild<LLUICtrl>("agree_chk")->getValue().asBoolean(); 
+	self->getChildView("Continue")->setEnabled(agree);
 }
 
 // static
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index fadb250c48d78955eda215bf7facc382c441e15c..333e44e077dffac4a6dbdb870a3fd3bd7995f46d 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -469,7 +469,7 @@ BOOL LLFloaterUIPreview::postBuild()
 	// Set up overlap panel
 	mOverlapPanel = getChild<LLOverlapPanel>("overlap_panel");
 
-	childSetVisible("overlap_scroll", mHighlightingOverlaps);
+	getChildView("overlap_scroll")->setVisible( mHighlightingOverlaps);
 	
 	mDelim = gDirUtilp->getDirDelimiter();	// initialize delimiter to dir sep slash
 
@@ -1693,7 +1693,7 @@ void LLFloaterUIPreview::onClickToggleOverlapping()
 		setRect(LLRect(getRect().mLeft,getRect().mTop,getRect().mRight + mOverlapPanel->getRect().getWidth(),getRect().mBottom));
 		setResizeLimits(width + mOverlapPanel->getRect().getWidth(), height);
 	}
-	childSetVisible("overlap_scroll", mHighlightingOverlaps);
+	getChildView("overlap_scroll")->setVisible( mHighlightingOverlaps);
 }
 
 void LLFloaterUIPreview::findOverlapsInChildren(LLView* parent)
diff --git a/indra/newview/llfloaterurldisplay.cpp b/indra/newview/llfloaterurldisplay.cpp
deleted file mode 100644
index fffc4fd20a19b948862edc56a3616b913f4f83c5..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterurldisplay.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/** 
- * @file llfloaterurldisplay.h
- * @brief Probably should be called LLFloaterTeleport, or LLFloaterLandmark
- * as it gives you a preview of a potential teleport location.
- *
- * $LicenseInfo:firstyear=2007&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"
-
-#include "llregionhandle.h"
-#include "v3dmath.h"
-
-#include "llfloaterurldisplay.h"
-
-#include "llpanelplace.h"
-#include "lluictrlfactory.h"
-
-////////////////////////////////////////////////////////////////////////////
-// LLFloaterURLDisplay
-
-
-LLFloaterURLDisplay::LLFloaterURLDisplay(const LLSD& sd)
-	: LLFloater(sd)
-{	
-	mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterURLDisplay::createPlaceDetail, this);
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_url.xml");
-
-	// If positioned at 0,0 the teleport button is behind the toolbar.
-	LLRect r = getRect();
-	if (r.mBottom == 0 && r.mLeft == 0)
-	{
-		// first use, center it
-		center();
-	}
-	else
-	{
-		gFloaterView->adjustToFitScreen(this, FALSE);
-	}
-}
-
-LLFloaterURLDisplay::~LLFloaterURLDisplay()
-{
-}
-
-void LLFloaterURLDisplay::displayParcelInfo(U64 region_handle, const LLVector3& pos_local)
-{
-	mRegionHandle = region_handle;
-	mRegionPosition = pos_local;
-	LLVector3d pos_global = from_region_handle(region_handle);
-	pos_global += (LLVector3d)pos_local;
-
-	LLUUID region_id;			// don't know this
-	LLUUID landmark_asset_id;	// don't know this either
-	mPlacePanel->displayParcelInfo(pos_local, landmark_asset_id, region_id, pos_global);
-
-	this->setVisible(true);
-	this->setFrontmost(true);
-}
-
-void LLFloaterURLDisplay::setSnapshotDisplay(const LLUUID& snapshot_id)
-{
-	mPlacePanel->setSnapshot(snapshot_id);
-}
-
-void LLFloaterURLDisplay::setName(const std::string& name)
-{	// Set the name and also clear description
-	mPlacePanel->resetName(name);
-}
-
-void LLFloaterURLDisplay::setLocationString(const std::string& name)
-{
-	mPlacePanel->setLocationString(name);
-}
-
-// static
-void* LLFloaterURLDisplay::createPlaceDetail(void* userdata)
-{
-	LLFloaterURLDisplay *self = (LLFloaterURLDisplay*)userdata;
-	self->mPlacePanel = new LLPanelPlace();
-	LLUICtrlFactory::getInstance()->buildPanel(self->mPlacePanel, "panel_place.xml");
-
-	return self->mPlacePanel;
-}
diff --git a/indra/newview/llfloaterurldisplay.h b/indra/newview/llfloaterurldisplay.h
deleted file mode 100644
index 1bea4c4aa8d5bafc9377a0644bf1e69c5aae699f..0000000000000000000000000000000000000000
--- a/indra/newview/llfloaterurldisplay.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/** 
- * @file llfloaterurldisplay.h
- * @brief LLFloaterURLDisplay class implementation
- *
- * $LicenseInfo:firstyear=2006&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_LLFLOATERURLDISPLAY_H
-#define LL_LLFLOATERURLDISPLAY_H
-
-#include "llfloater.h"
-#include "v3math.h"
-
-class LLPanelPlace;
-class LLSD;
-class LLUUID;
-
-class LLFloaterURLDisplay : public LLFloater
-{
-	friend class LLFloaterReg;
-public:
-
-	void displayParcelInfo(U64 region_handle, const LLVector3& pos);
-	void setSnapshotDisplay(const LLUUID& snapshot_id);
-	void setName(const std::string& name);
-	void setLocationString(const std::string& name);
-
-	static void* createPlaceDetail(void* userdata);
-
-private:
-	LLFloaterURLDisplay(const LLSD& sd);
-	virtual ~LLFloaterURLDisplay();
-
-	LLVector3		mRegionPosition;
-	U64				mRegionHandle;
-	LLPanelPlace*	mPlacePanel;
-};
-
-#endif // LL_LLFLOATERURLDISPLAY_H
diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp
index 3c906501c75b2f65a178c55921ccfe690ba39ad9..40f6d0728631d444ec251e949f3cd7a2c1221b2f 100644
--- a/indra/newview/llfloaterurlentry.cpp
+++ b/indra/newview/llfloaterurlentry.cpp
@@ -105,7 +105,7 @@ BOOL LLFloaterURLEntry::postBuild()
 	// clear media list button
 	LLSD parcel_history = LLURLHistory::getURLHistory("parcel");
 	bool enable_clear_button = parcel_history.size() > 0 ? true : false;
-	childSetEnabled( "clear_btn", enable_clear_button );
+	getChildView("clear_btn")->setEnabled(enable_clear_button );
 
 	// OK button
 	childSetAction("ok_btn", onBtnOK, this);
@@ -157,7 +157,7 @@ void LLFloaterURLEntry::headerFetchComplete(U32 status, const std::string& mime_
 	}
 	// Decrement the cursor
 	getWindow()->decBusyCount();
-	childSetVisible("loading_label", false);
+	getChildView("loading_label")->setVisible( false);
 	closeFloater();
 }
 
@@ -230,13 +230,13 @@ void LLFloaterURLEntry::onBtnOK( void* userdata )
 	}
 
 	// Grey the buttons until we get the header response
-	self->childSetEnabled("ok_btn", false);
-	self->childSetEnabled("cancel_btn", false);
-	self->childSetEnabled("media_entry", false);
+	self->getChildView("ok_btn")->setEnabled(false);
+	self->getChildView("cancel_btn")->setEnabled(false);
+	self->getChildView("media_entry")->setEnabled(false);
 
 	// show progress bar here?
 	getWindow()->incBusyCount();
-	self->childSetVisible("loading_label", true);
+	self->getChildView("loading_label")->setVisible( true);
 }
 
 // static
@@ -278,7 +278,7 @@ bool LLFloaterURLEntry::callback_clear_url_list(const LLSD& notification, const
 		LLURLHistory::clear("parcel");
 
 		// cleared the list so disable Clear button
-		childSetEnabled( "clear_btn", false );
+		getChildView("clear_btn")->setEnabled(false );
 	}
 	return false;
 }
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
index 81a65f5469d416b1de722482b831ec490f512a6d..34277001ee64f063686a065d27d457d4d3bee5ed 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llfloatervoicedevicesettings.cpp
@@ -97,7 +97,7 @@ void LLPanelVoiceDeviceSettings::draw()
 
 	// let user know that volume indicator is not yet available
 	bool is_in_tuning_mode = LLVoiceClient::getInstance()->inTuningMode();
-	childSetVisible("wait_text", !is_in_tuning_mode);
+	getChildView("wait_text")->setVisible( !is_in_tuning_mode);
 
 	LLPanel::draw();
 
diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp
index 24d1707f64178cf85eea0a740ac5c1854ed39e85..2a3950f9b17180f0f465735702a82b529a163aa8 100644
--- a/indra/newview/llfloatervoiceeffect.cpp
+++ b/indra/newview/llfloatervoiceeffect.cpp
@@ -60,7 +60,7 @@ BOOL LLFloaterVoiceEffect::postBuild()
 {
 	setDefaultBtn("record_btn");
 	getChild<LLButton>("record_btn")->setFocus(true);
-	childSetTextArg("voice_morphing_link", "[URL]", LLTrans::getString("voice_morphing_url"));
+	getChild<LLUICtrl>("voice_morphing_link")->setTextArg("[URL]", LLTrans::getString("voice_morphing_url"));
 
 	mVoiceEffectList = getChild<LLScrollListCtrl>("voice_effect_list");
 	if (mVoiceEffectList)
diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
index ebcd9d40f203a49ad785d742749aafd04f5b2ace..9c3f943013a0b4d88bbeb25f22ae1da1eb062d1e 100644
--- a/indra/newview/llfloaterwater.cpp
+++ b/indra/newview/llfloaterwater.cpp
@@ -204,7 +204,7 @@ void LLFloaterWater::syncMenu()
 	param_mgr->mFogColor = current_params.getVector4(param_mgr->mFogColor.mName, err);
 
 	LLColor4 col = param_mgr->getFogColor();
-	childSetValue("WaterGlow", col.mV[3]);
+	getChild<LLUICtrl>("WaterGlow")->setValue(col.mV[3]);
 	col.mV[3] = 1.0f;
 	LLColorSwatchCtrl* colCtrl = getChild<LLColorSwatchCtrl>("WaterFogColor");
 
@@ -215,41 +215,41 @@ void LLFloaterWater::syncMenu()
 		log(current_params.getFloat(param_mgr->mFogDensity.mName, err)) / 
 		log(param_mgr->mFogDensity.mBase);
 	param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
-	childSetValue("WaterFogDensity", param_mgr->mFogDensity.mExp);
+	getChild<LLUICtrl>("WaterFogDensity")->setValue(param_mgr->mFogDensity.mExp);
 	
 	param_mgr->mUnderWaterFogMod.mX = 
 		current_params.getFloat(param_mgr->mUnderWaterFogMod.mName, err);
-	childSetValue("WaterUnderWaterFogMod", param_mgr->mUnderWaterFogMod.mX);
+	getChild<LLUICtrl>("WaterUnderWaterFogMod")->setValue(param_mgr->mUnderWaterFogMod.mX);
 
 	param_mgr->mNormalScale = current_params.getVector3(param_mgr->mNormalScale.mName, err);
-	childSetValue("WaterNormalScaleX", param_mgr->mNormalScale.mX);
-	childSetValue("WaterNormalScaleY", param_mgr->mNormalScale.mY);
-	childSetValue("WaterNormalScaleZ", param_mgr->mNormalScale.mZ);
+	getChild<LLUICtrl>("WaterNormalScaleX")->setValue(param_mgr->mNormalScale.mX);
+	getChild<LLUICtrl>("WaterNormalScaleY")->setValue(param_mgr->mNormalScale.mY);
+	getChild<LLUICtrl>("WaterNormalScaleZ")->setValue(param_mgr->mNormalScale.mZ);
 
 	// Fresnel
 	param_mgr->mFresnelScale.mX = current_params.getFloat(param_mgr->mFresnelScale.mName, err);
-	childSetValue("WaterFresnelScale", param_mgr->mFresnelScale.mX);
+	getChild<LLUICtrl>("WaterFresnelScale")->setValue(param_mgr->mFresnelScale.mX);
 	param_mgr->mFresnelOffset.mX = current_params.getFloat(param_mgr->mFresnelOffset.mName, err);
-	childSetValue("WaterFresnelOffset", param_mgr->mFresnelOffset.mX);
+	getChild<LLUICtrl>("WaterFresnelOffset")->setValue(param_mgr->mFresnelOffset.mX);
 
 	// Scale Above/Below
 	param_mgr->mScaleAbove.mX = current_params.getFloat(param_mgr->mScaleAbove.mName, err);
-	childSetValue("WaterScaleAbove", param_mgr->mScaleAbove.mX);
+	getChild<LLUICtrl>("WaterScaleAbove")->setValue(param_mgr->mScaleAbove.mX);
 	param_mgr->mScaleBelow.mX = current_params.getFloat(param_mgr->mScaleBelow.mName, err);
-	childSetValue("WaterScaleBelow", param_mgr->mScaleBelow.mX);
+	getChild<LLUICtrl>("WaterScaleBelow")->setValue(param_mgr->mScaleBelow.mX);
 
 	// blur mult
 	param_mgr->mBlurMultiplier.mX = current_params.getFloat(param_mgr->mBlurMultiplier.mName, err);
-	childSetValue("WaterBlurMult", param_mgr->mBlurMultiplier.mX);
+	getChild<LLUICtrl>("WaterBlurMult")->setValue(param_mgr->mBlurMultiplier.mX);
 
 	// wave directions
 	param_mgr->mWave1Dir = current_params.getVector2(param_mgr->mWave1Dir.mName, err);
-	childSetValue("WaterWave1DirX", param_mgr->mWave1Dir.mX);
-	childSetValue("WaterWave1DirY", param_mgr->mWave1Dir.mY);
+	getChild<LLUICtrl>("WaterWave1DirX")->setValue(param_mgr->mWave1Dir.mX);
+	getChild<LLUICtrl>("WaterWave1DirY")->setValue(param_mgr->mWave1Dir.mY);
 
 	param_mgr->mWave2Dir = current_params.getVector2(param_mgr->mWave2Dir.mName, err);
-	childSetValue("WaterWave2DirX", param_mgr->mWave2Dir.mX);
-	childSetValue("WaterWave2DirY", param_mgr->mWave2Dir.mY);
+	getChild<LLUICtrl>("WaterWave2DirX")->setValue(param_mgr->mWave2Dir.mX);
+	getChild<LLUICtrl>("WaterWave2DirY")->setValue(param_mgr->mWave2Dir.mY);
 
 	LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
 	textCtrl->setImageAssetID(param_mgr->getNormalMapID());
@@ -333,7 +333,7 @@ void LLFloaterWater::onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* col
 		std::string name = colorControl->mSliderName;
 		name.append("I");
 		
-		childSetValue(name, colorControl->mR);
+		getChild<LLUICtrl>(name)->setValue(colorControl->mR);
 	}
 
 	colorControl->update(LLWaterParamManager::instance()->mCurParams);
@@ -356,7 +356,7 @@ void LLFloaterWater::onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* col
 		std::string name = colorControl->mSliderName;
 		name.append("I");
 
-		childSetValue(name, colorControl->mG);
+		getChild<LLUICtrl>(name)->setValue(colorControl->mG);
 
 	}
 
@@ -380,7 +380,7 @@ void LLFloaterWater::onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* col
 		std::string name = colorControl->mSliderName;
 		name.append("I");
 
-		childSetValue(name, colorControl->mB);
+		getChild<LLUICtrl>(name)->setValue(colorControl->mB);
 	}
 
 	colorControl->update(LLWaterParamManager::instance()->mCurParams);
@@ -449,9 +449,9 @@ void LLFloaterWater::onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* col
 		}
 
 		// set the sliders to the new vals
-		childSetValue(rName, colorControl->mR);
-		childSetValue(gName, colorControl->mG);
-		childSetValue(bName, colorControl->mB);
+		getChild<LLUICtrl>(rName)->setValue(colorControl->mR);
+		getChild<LLUICtrl>(gName)->setValue(colorControl->mG);
+		getChild<LLUICtrl>(bName)->setValue(colorControl->mB);
 	}
 
 	// now update the current parameters and send them to shaders
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
index dae473c6f94a2d65536a23e0073e66ddde3081af..7131cb5de3b704ce36d6b8761798c9faa72fcd5b 100644
--- a/indra/newview/llfloaterwindlight.cpp
+++ b/indra/newview/llfloaterwindlight.cpp
@@ -272,31 +272,31 @@ void LLFloaterWindLight::syncMenu()
 
 	// blue horizon
 	param_mgr->mBlueHorizon = currentParams.getVector(param_mgr->mBlueHorizon.mName, err);
-	childSetValue("WLBlueHorizonR", param_mgr->mBlueHorizon.r / 2.0);
-	childSetValue("WLBlueHorizonG", param_mgr->mBlueHorizon.g / 2.0);
-	childSetValue("WLBlueHorizonB", param_mgr->mBlueHorizon.b / 2.0);
-	childSetValue("WLBlueHorizonI", 
+	getChild<LLUICtrl>("WLBlueHorizonR")->setValue(param_mgr->mBlueHorizon.r / 2.0);
+	getChild<LLUICtrl>("WLBlueHorizonG")->setValue(param_mgr->mBlueHorizon.g / 2.0);
+	getChild<LLUICtrl>("WLBlueHorizonB")->setValue(param_mgr->mBlueHorizon.b / 2.0);
+	getChild<LLUICtrl>("WLBlueHorizonI")->setValue(
 		std::max(param_mgr->mBlueHorizon.r / 2.0, 
 			std::max(param_mgr->mBlueHorizon.g / 2.0, 
 				param_mgr->mBlueHorizon.b / 2.0)));
 
 	// haze density, horizon, mult, and altitude
 	param_mgr->mHazeDensity = currentParams.getVector(param_mgr->mHazeDensity.mName, err);
-	childSetValue("WLHazeDensity", param_mgr->mHazeDensity.r);
+	getChild<LLUICtrl>("WLHazeDensity")->setValue(param_mgr->mHazeDensity.r);
 	param_mgr->mHazeHorizon = currentParams.getVector(param_mgr->mHazeHorizon.mName, err);
-	childSetValue("WLHazeHorizon", param_mgr->mHazeHorizon.r);
+	getChild<LLUICtrl>("WLHazeHorizon")->setValue(param_mgr->mHazeHorizon.r);
 	param_mgr->mDensityMult = currentParams.getVector(param_mgr->mDensityMult.mName, err);
-	childSetValue("WLDensityMult", param_mgr->mDensityMult.x * 
+	getChild<LLUICtrl>("WLDensityMult")->setValue(param_mgr->mDensityMult.x * 
 		param_mgr->mDensityMult.mult);
 	param_mgr->mMaxAlt = currentParams.getVector(param_mgr->mMaxAlt.mName, err);
-	childSetValue("WLMaxAltitude", param_mgr->mMaxAlt.x);
+	getChild<LLUICtrl>("WLMaxAltitude")->setValue(param_mgr->mMaxAlt.x);
 
 	// blue density
 	param_mgr->mBlueDensity = currentParams.getVector(param_mgr->mBlueDensity.mName, err);
-	childSetValue("WLBlueDensityR", param_mgr->mBlueDensity.r / 2.0);
-	childSetValue("WLBlueDensityG", param_mgr->mBlueDensity.g / 2.0);
-	childSetValue("WLBlueDensityB", param_mgr->mBlueDensity.b / 2.0);
-	childSetValue("WLBlueDensityI", 
+	getChild<LLUICtrl>("WLBlueDensityR")->setValue(param_mgr->mBlueDensity.r / 2.0);
+	getChild<LLUICtrl>("WLBlueDensityG")->setValue(param_mgr->mBlueDensity.g / 2.0);
+	getChild<LLUICtrl>("WLBlueDensityB")->setValue(param_mgr->mBlueDensity.b / 2.0);
+	getChild<LLUICtrl>("WLBlueDensityI")->setValue(
 		std::max(param_mgr->mBlueDensity.r / 2.0, 
 		std::max(param_mgr->mBlueDensity.g / 2.0, param_mgr->mBlueDensity.b / 2.0)));
 
@@ -304,93 +304,93 @@ void LLFloaterWindLight::syncMenu()
 	
 	// sunlight
 	param_mgr->mSunlight = currentParams.getVector(param_mgr->mSunlight.mName, err);
-	childSetValue("WLSunlightR", param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE);
-	childSetValue("WLSunlightG", param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE);
-	childSetValue("WLSunlightB", param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE);
-	childSetValue("WLSunlightI", 
+	getChild<LLUICtrl>("WLSunlightR")->setValue(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE);
+	getChild<LLUICtrl>("WLSunlightG")->setValue(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE);
+	getChild<LLUICtrl>("WLSunlightB")->setValue(param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE);
+	getChild<LLUICtrl>("WLSunlightI")->setValue(
 		std::max(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE, 
 		std::max(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE)));
 
 	// glow
 	param_mgr->mGlow = currentParams.getVector(param_mgr->mGlow.mName, err);
-	childSetValue("WLGlowR", 2 - param_mgr->mGlow.r / 20.0f);
-	childSetValue("WLGlowB", -param_mgr->mGlow.b / 5.0f);
+	getChild<LLUICtrl>("WLGlowR")->setValue(2 - param_mgr->mGlow.r / 20.0f);
+	getChild<LLUICtrl>("WLGlowB")->setValue(-param_mgr->mGlow.b / 5.0f);
 		
 	// ambient
 	param_mgr->mAmbient = currentParams.getVector(param_mgr->mAmbient.mName, err);
-	childSetValue("WLAmbientR", param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE);
-	childSetValue("WLAmbientG", param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE);
-	childSetValue("WLAmbientB", param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE);
-	childSetValue("WLAmbientI", 
+	getChild<LLUICtrl>("WLAmbientR")->setValue(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE);
+	getChild<LLUICtrl>("WLAmbientG")->setValue(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE);
+	getChild<LLUICtrl>("WLAmbientB")->setValue(param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE);
+	getChild<LLUICtrl>("WLAmbientI")->setValue(
 		std::max(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE, 
 		std::max(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE)));		
 
-	childSetValue("WLSunAngle", param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI);
-	childSetValue("WLEastAngle", param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI);
+	getChild<LLUICtrl>("WLSunAngle")->setValue(param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI);
+	getChild<LLUICtrl>("WLEastAngle")->setValue(param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI);
 
 	// Clouds
 
 	// Cloud Color
 	param_mgr->mCloudColor = currentParams.getVector(param_mgr->mCloudColor.mName, err);
-	childSetValue("WLCloudColorR", param_mgr->mCloudColor.r);
-	childSetValue("WLCloudColorG", param_mgr->mCloudColor.g);
-	childSetValue("WLCloudColorB", param_mgr->mCloudColor.b);
-	childSetValue("WLCloudColorI", 
+	getChild<LLUICtrl>("WLCloudColorR")->setValue(param_mgr->mCloudColor.r);
+	getChild<LLUICtrl>("WLCloudColorG")->setValue(param_mgr->mCloudColor.g);
+	getChild<LLUICtrl>("WLCloudColorB")->setValue(param_mgr->mCloudColor.b);
+	getChild<LLUICtrl>("WLCloudColorI")->setValue(
 		std::max(param_mgr->mCloudColor.r, 
 		std::max(param_mgr->mCloudColor.g, param_mgr->mCloudColor.b)));
 
 	// Cloud
 	param_mgr->mCloudMain = currentParams.getVector(param_mgr->mCloudMain.mName, err);
-	childSetValue("WLCloudX", param_mgr->mCloudMain.r);
-	childSetValue("WLCloudY", param_mgr->mCloudMain.g);
-	childSetValue("WLCloudDensity", param_mgr->mCloudMain.b);
+	getChild<LLUICtrl>("WLCloudX")->setValue(param_mgr->mCloudMain.r);
+	getChild<LLUICtrl>("WLCloudY")->setValue(param_mgr->mCloudMain.g);
+	getChild<LLUICtrl>("WLCloudDensity")->setValue(param_mgr->mCloudMain.b);
 
 	// Cloud Detail
 	param_mgr->mCloudDetail = currentParams.getVector(param_mgr->mCloudDetail.mName, err);
-	childSetValue("WLCloudDetailX", param_mgr->mCloudDetail.r);
-	childSetValue("WLCloudDetailY", param_mgr->mCloudDetail.g);
-	childSetValue("WLCloudDetailDensity", param_mgr->mCloudDetail.b);
+	getChild<LLUICtrl>("WLCloudDetailX")->setValue(param_mgr->mCloudDetail.r);
+	getChild<LLUICtrl>("WLCloudDetailY")->setValue(param_mgr->mCloudDetail.g);
+	getChild<LLUICtrl>("WLCloudDetailDensity")->setValue(param_mgr->mCloudDetail.b);
 
 	// Cloud extras
 	param_mgr->mCloudCoverage = currentParams.getVector(param_mgr->mCloudCoverage.mName, err);
 	param_mgr->mCloudScale = currentParams.getVector(param_mgr->mCloudScale.mName, err);
-	childSetValue("WLCloudCoverage", param_mgr->mCloudCoverage.x);
-	childSetValue("WLCloudScale", param_mgr->mCloudScale.x);
+	getChild<LLUICtrl>("WLCloudCoverage")->setValue(param_mgr->mCloudCoverage.x);
+	getChild<LLUICtrl>("WLCloudScale")->setValue(param_mgr->mCloudScale.x);
 
 	// cloud scrolling
 	bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX();
 	bool lockY = !param_mgr->mCurParams.getEnableCloudScrollY();
-	childSetValue("WLCloudLockX", lockX);
-	childSetValue("WLCloudLockY", lockY);
-	childSetValue("DrawClassicClouds", gSavedSettings.getBOOL("SkyUseClassicClouds"));
+	getChild<LLUICtrl>("WLCloudLockX")->setValue(lockX);
+	getChild<LLUICtrl>("WLCloudLockY")->setValue(lockY);
+	getChild<LLUICtrl>("DrawClassicClouds")->setValue(gSavedSettings.getBOOL("SkyUseClassicClouds"));
 	
 	// disable if locked, enable if not
 	if(lockX) 
 	{
-		childDisable("WLCloudScrollX");
+		getChildView("WLCloudScrollX")->setEnabled(FALSE);
 	} else {
-		childEnable("WLCloudScrollX");
+		getChildView("WLCloudScrollX")->setEnabled(TRUE);
 	}
 	if(lockY)
 	{
-		childDisable("WLCloudScrollY");
+		getChildView("WLCloudScrollY")->setEnabled(FALSE);
 	} else {
-		childEnable("WLCloudScrollY");
+		getChildView("WLCloudScrollY")->setEnabled(TRUE);
 	}
 
 	// *HACK cloud scrolling is off my an additive of 10
-	childSetValue("WLCloudScrollX", param_mgr->mCurParams.getCloudScrollX() - 10.0f);
-	childSetValue("WLCloudScrollY", param_mgr->mCurParams.getCloudScrollY() - 10.0f);
+	getChild<LLUICtrl>("WLCloudScrollX")->setValue(param_mgr->mCurParams.getCloudScrollX() - 10.0f);
+	getChild<LLUICtrl>("WLCloudScrollY")->setValue(param_mgr->mCurParams.getCloudScrollY() - 10.0f);
 
 	param_mgr->mDistanceMult = currentParams.getVector(param_mgr->mDistanceMult.mName, err);
-	childSetValue("WLDistanceMult", param_mgr->mDistanceMult.x);
+	getChild<LLUICtrl>("WLDistanceMult")->setValue(param_mgr->mDistanceMult.x);
 
 	// Tweak extras
 
 	param_mgr->mWLGamma = currentParams.getVector(param_mgr->mWLGamma.mName, err);
-	childSetValue("WLGamma", param_mgr->mWLGamma.x);
+	getChild<LLUICtrl>("WLGamma")->setValue(param_mgr->mWLGamma.x);
 
-	childSetValue("WLStarAlpha", param_mgr->mCurParams.getStarBrightness());
+	getChild<LLUICtrl>("WLStarAlpha")->setValue(param_mgr->mCurParams.getStarBrightness());
 
 	LLTabContainer* tab = getChild<LLTabContainer>("WindLight Tabs");
 	LLPanel* panel = getChild<LLPanel>("Scattering");
@@ -422,11 +422,11 @@ void LLFloaterWindLight::onColorControlRMoved(LLUICtrl* ctrl, WLColorControl* co
 		name.append("I");
 		
 		if(colorControl->isSunOrAmbientColor) {
-			childSetValue(name, colorControl->r / 3);
+			getChild<LLUICtrl>(name)->setValue(colorControl->r / 3);
 		} else if(colorControl->isBlueHorizonOrDensity) {
-			childSetValue(name, colorControl->r / 2);
+			getChild<LLUICtrl>(name)->setValue(colorControl->r / 2);
 		} else {
-			childSetValue(name, colorControl->r);
+			getChild<LLUICtrl>(name)->setValue(colorControl->r);
 		}
 	}
 
@@ -457,11 +457,11 @@ void LLFloaterWindLight::onColorControlGMoved(LLUICtrl* ctrl, WLColorControl* co
 		name.append("I");
 
 		if(colorControl->isSunOrAmbientColor) {
-			childSetValue(name, colorControl->g / 3);
+			getChild<LLUICtrl>(name)->setValue(colorControl->g / 3);
 		} else if(colorControl->isBlueHorizonOrDensity) {
-			childSetValue(name, colorControl->g / 2);
+			getChild<LLUICtrl>(name)->setValue(colorControl->g / 2);
 		} else {
-			childSetValue(name, colorControl->g);
+			getChild<LLUICtrl>(name)->setValue(colorControl->g);
 		}
 	}
 
@@ -492,11 +492,11 @@ void LLFloaterWindLight::onColorControlBMoved(LLUICtrl* ctrl, WLColorControl* co
 		name.append("I");
 
 		if(colorControl->isSunOrAmbientColor) {
-			childSetValue(name, colorControl->b / 3);
+			getChild<LLUICtrl>(name)->setValue(colorControl->b / 3);
 		} else if(colorControl->isBlueHorizonOrDensity) {
-			childSetValue(name, colorControl->b / 2);
+			getChild<LLUICtrl>(name)->setValue(colorControl->b / 2);
 		} else {
-			childSetValue(name, colorControl->b);
+			getChild<LLUICtrl>(name)->setValue(colorControl->b);
 		}
 	}
 
@@ -566,24 +566,24 @@ void LLFloaterWindLight::onColorControlIMoved(LLUICtrl* ctrl, WLColorControl* co
 		// divide sun color vals by three
 		if(colorControl->isSunOrAmbientColor) 
 		{
-			childSetValue(rName, colorControl->r/3);
-			childSetValue(gName, colorControl->g/3);
-			childSetValue(bName, colorControl->b/3);	
+			getChild<LLUICtrl>(rName)->setValue(colorControl->r/3);
+			getChild<LLUICtrl>(gName)->setValue(colorControl->g/3);
+			getChild<LLUICtrl>(bName)->setValue(colorControl->b/3);	
 		
 		} 
 		else if(colorControl->isBlueHorizonOrDensity) 
 		{
-			childSetValue(rName, colorControl->r/2);
-			childSetValue(gName, colorControl->g/2);
-			childSetValue(bName, colorControl->b/2);	
+			getChild<LLUICtrl>(rName)->setValue(colorControl->r/2);
+			getChild<LLUICtrl>(gName)->setValue(colorControl->g/2);
+			getChild<LLUICtrl>(bName)->setValue(colorControl->b/2);	
 		
 		} 
 		else 
 		{
 			// set the sliders to the new vals
-			childSetValue(rName, colorControl->r);
-			childSetValue(gName, colorControl->g);
-			childSetValue(bName, colorControl->b);
+			getChild<LLUICtrl>(rName)->setValue(colorControl->r);
+			getChild<LLUICtrl>(gName)->setValue(colorControl->g);
+			getChild<LLUICtrl>(bName)->setValue(colorControl->b);
 		}
 	}
 
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 942d246dc25643ac1a37964bd8897fbadd677a98..3afa31b873c0ecea0c744f689b9d61a1e1a48f25 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -242,7 +242,7 @@ BOOL LLFloaterWorldMap::postBuild()
 	landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
 
 	mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
-	childSetValue("zoom slider", LLWorldMapView::sMapScale);
+	getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale);
 
 	setDefaultBtn(NULL);
 
@@ -315,7 +315,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
 		const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 		LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id);
 
-		childSetFocus("location", TRUE);
+		getChild<LLUICtrl>("location")->setFocus( TRUE);
 		gFocusMgr.triggerFocusFlash();
 
 		buildAvatarIDList();
@@ -351,9 +351,9 @@ BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks)
 	{
 		if(mPanel->pointInView(x, y))
 		{
-			F32 slider_value = (F32)childGetValue("zoom slider").asReal();
+			F32 slider_value = (F32)getChild<LLUICtrl>("zoom slider")->getValue().asReal();
 			slider_value += ((F32)clicks * -0.3333f);
-			childSetValue("zoom slider", LLSD(slider_value));
+			getChild<LLUICtrl>("zoom slider")->setValue(LLSD(slider_value));
 			return TRUE;
 		}
 	}
@@ -381,32 +381,32 @@ void LLFloaterWorldMap::draw()
 	LLViewerRegion* regionp = gAgent.getRegion();
 	bool agent_on_prelude = (regionp && regionp->isPrelude());
 	bool enable_go_home = gAgent.isGodlike() || !agent_on_prelude;
-	childSetEnabled("Go Home", enable_go_home);
+	getChildView("Go Home")->setEnabled(enable_go_home);
 
 	updateLocation();
 	
 	LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); 
 	if (LLTracker::TRACKING_AVATAR == tracking_status)
 	{
-		childSetColor("avatar_icon", map_track_color);
+		getChild<LLUICtrl>("avatar_icon")->setColor( map_track_color);
 	}
 	else
 	{
-		childSetColor("avatar_icon", map_track_disabled_color);
+		getChild<LLUICtrl>("avatar_icon")->setColor( map_track_disabled_color);
 	}
 
 	if (LLTracker::TRACKING_LANDMARK == tracking_status)
 	{
-		childSetColor("landmark_icon", map_track_color);
+		getChild<LLUICtrl>("landmark_icon")->setColor( map_track_color);
 	}
 	else
 	{
-		childSetColor("landmark_icon", map_track_disabled_color);
+		getChild<LLUICtrl>("landmark_icon")->setColor( map_track_disabled_color);
 	}
 
 	if (LLTracker::TRACKING_LOCATION == tracking_status)
 	{
-		childSetColor("location_icon", map_track_color);
+		getChild<LLUICtrl>("location_icon")->setColor( map_track_color);
 	}
 	else
 	{
@@ -416,11 +416,11 @@ void LLFloaterWorldMap::draw()
 			double value = fmod(seconds, 2);
 			value = 0.5 + 0.5*cos(value * F_PI);
 			LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0);
-			childSetColor("location_icon", loading_color);
+			getChild<LLUICtrl>("location_icon")->setColor( loading_color);
 		}
 		else
 		{
-			childSetColor("location_icon", map_track_disabled_color);
+			getChild<LLUICtrl>("location_icon")->setColor( map_track_disabled_color);
 		}
 	}
 
@@ -430,16 +430,16 @@ void LLFloaterWorldMap::draw()
 		centerOnTarget(TRUE);
 	}
 
-	childSetEnabled("Teleport", (BOOL)tracking_status);
-//	childSetEnabled("Clear", (BOOL)tracking_status);
-	childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->isTracking());
-	childSetEnabled("copy_slurl", (mSLURL.isValid()) );
+	getChildView("Teleport")->setEnabled((BOOL)tracking_status);
+//	getChildView("Clear")->setEnabled((BOOL)tracking_status);
+	getChildView("Show Destination")->setEnabled((BOOL)tracking_status || LLWorldMap::getInstance()->isTracking());
+	getChildView("copy_slurl")->setEnabled((mSLURL.isValid()) );
 
 	setMouseOpaque(TRUE);
 	getDragHandle()->setMouseOpaque(TRUE);
 
 	//RN: snaps to zoom value because interpolation caused jitter in the text rendering
-	if (!mZoomTimer.getStarted() && mCurZoomVal != (F32)childGetValue("zoom slider").asReal())
+	if (!mZoomTimer.getStarted() && mCurZoomVal != (F32)getChild<LLUICtrl>("zoom slider")->getValue().asReal())
 	{
 		mZoomTimer.start();
 	}
@@ -449,7 +449,7 @@ void LLFloaterWorldMap::draw()
 		interp = 1.f;
 		mZoomTimer.stop();
 	}
-	mCurZoomVal = lerp(mCurZoomVal, (F32)childGetValue("zoom slider").asReal(), interp);
+	mCurZoomVal = lerp(mCurZoomVal, (F32)getChild<LLUICtrl>("zoom slider")->getValue().asReal(), interp);
 	F32 map_scale = 256.f*pow(2.f, mCurZoomVal);
 	LLWorldMapView::setScale( map_scale );
 
@@ -457,13 +457,13 @@ void LLFloaterWorldMap::draw()
 	// If above threshold level (i.e. low res) -> Disable all checkboxes
 	// If under threshold level (i.e. high res) -> Enable all checkboxes
 	bool enable = LLWorldMapView::showRegionInfo();
-	childSetEnabled("people_chk", enable);
-	childSetEnabled("infohub_chk", enable);
-	childSetEnabled("telehub_chk", enable);
-	childSetEnabled("land_for_sale_chk", enable);
-	childSetEnabled("event_chk", enable);
-	childSetEnabled("events_mature_chk", enable);
-	childSetEnabled("events_adult_chk", enable);
+	getChildView("people_chk")->setEnabled(enable);
+	getChildView("infohub_chk")->setEnabled(enable);
+	getChildView("telehub_chk")->setEnabled(enable);
+	getChildView("land_for_sale_chk")->setEnabled(enable);
+	getChildView("event_chk")->setEnabled(enable);
+	getChildView("events_mature_chk")->setEnabled(enable);
+	getChildView("events_adult_chk")->setEnabled(enable);
 	
 	LLFloater::draw();
 }
@@ -487,7 +487,7 @@ void LLFloaterWorldMap::trackAvatar( const LLUUID& avatar_id, const std::string&
 		// convenience.
 		if(gAgent.isGodlike())
 		{
-			childSetValue("spin z", LLSD(200.f));
+			getChild<LLUICtrl>("spin z")->setValue(LLSD(200.f));
 		}
 		// Don't re-request info if we already have it or we won't have it in time to teleport
 		if (mTrackedStatus != LLTracker::TRACKING_AVATAR || name != mTrackedAvatarName)
@@ -668,7 +668,7 @@ void LLFloaterWorldMap::updateLocation()
 				mSetToUserPosition = FALSE;
 
 				// Fill out the location field
-				childSetValue("location", agent_sim_name);
+				getChild<LLUICtrl>("location")->setValue(agent_sim_name);
 
 				// update the coordinate display with location of avatar in region
 				updateTeleportCoordsDisplay( agentPos );
@@ -701,7 +701,7 @@ void LLFloaterWorldMap::updateLocation()
 			}
 		}
 
-		childSetValue("location", sim_name);
+		getChild<LLUICtrl>("location")->setValue(sim_name);
 
 		// refresh coordinate display to reflect where user clicked.
 		LLVector3d coord_pos = LLTracker::getTrackedPositionGlobal();
@@ -736,7 +736,7 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3
 	else
 	{
 		// fill in UI based on URL
-		gFloaterWorldMap->childSetValue("location", region_name);
+		gFloaterWorldMap->getChild<LLUICtrl>("location")->setValue(region_name);
 
 		// Save local coords to highlight position after region global
 		// position is returned.
@@ -1133,7 +1133,7 @@ void LLFloaterWorldMap::onLocationFocusChanged( LLFocusableElement* focus )
 void LLFloaterWorldMap::updateSearchEnabled()
 {
 	if (childHasKeyboardFocus("location") && 
-		childGetValue("location").asString().length() > 0)
+		getChild<LLUICtrl>("location")->getValue().asString().length() > 0)
 	{
 		setDefaultBtn("DoSearch");
 	}
@@ -1154,14 +1154,14 @@ void LLFloaterWorldMap::onLocationCommit()
 	mCompletingRegionName = "";
 	mLastRegionName = "";
 
-	std::string str = childGetValue("location").asString();
+	std::string str = getChild<LLUICtrl>("location")->getValue().asString();
 
 	// Trim any leading and trailing spaces in the search target
 	std::string saved_str = str;
 	LLStringUtil::trim( str );
 	if ( str != saved_str )
 	{	// Set the value in the UI if any spaces were removed
-		childSetValue("location", str);
+		getChild<LLUICtrl>("location")->setValue(str);
 	}
 
 	LLStringUtil::toLower(str);
@@ -1301,7 +1301,7 @@ void LLFloaterWorldMap::teleport()
 		&& av_tracker.haveTrackingInfo() )
 	{
 		pos_global = av_tracker.getGlobalPos();
-		pos_global.mdV[VZ] = childGetValue("spin z");
+		pos_global.mdV[VZ] = getChild<LLUICtrl>("spin z")->getValue();
 	}
 	else if ( LLTracker::TRACKING_LANDMARK == tracking_status)
 	{
@@ -1470,7 +1470,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
 	if (!match.isUndefined())
 	{
 		list->selectByValue(match);
-		childSetFocus("search_results");
+		getChild<LLUICtrl>("search_results")->setFocus(TRUE);
 		onCommitSearchResult();
 	}
 
@@ -1518,7 +1518,7 @@ void LLFloaterWorldMap::onCommitSearchResult()
 			pos_global.mdV[VY] += (F64)pos_local.mV[VY];
 			pos_global.mdV[VZ] = (F64)pos_local.mV[VZ];
 
-			childSetValue("location", sim_name);
+			getChild<LLUICtrl>("location")->setValue(sim_name);
 			trackLocation(pos_global);
 			setDefaultBtn("Teleport");
 			break;
@@ -1533,13 +1533,13 @@ void LLFloaterWorldMap::onChangeMaturity()
 	bool can_access_mature = gAgent.canAccessMature();
 	bool can_access_adult = gAgent.canAccessAdult();
 
-	childSetVisible("events_mature_icon", can_access_mature);
-	childSetVisible("events_mature_label", can_access_mature);
-	childSetVisible("events_mature_chk", can_access_mature);
+	getChildView("events_mature_icon")->setVisible( can_access_mature);
+	getChildView("events_mature_label")->setVisible( can_access_mature);
+	getChildView("events_mature_chk")->setVisible( can_access_mature);
 
-	childSetVisible("events_adult_icon", can_access_adult);
-	childSetVisible("events_adult_label", can_access_adult);
-	childSetVisible("events_adult_chk", can_access_adult);
+	getChildView("events_adult_icon")->setVisible( can_access_adult);
+	getChildView("events_adult_label")->setVisible( can_access_adult);
+	getChildView("events_adult_chk")->setVisible( can_access_adult);
 
 	// disable mature / adult events.
 	if (!can_access_mature)
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index d71e288ffe925cd7f37781d322d10ba6a503dca1..5d8e3f9ab9b58c2ddc1acc0284349f7c275f90e6 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -56,6 +56,7 @@
 #include "llviewerwindow.h"
 #include "llvoavatar.h"
 #include "llfloaterproperties.h"
+#include "llnotificationsutil.h"
 
 // Linden library includes
 #include "lldbstrings.h"
@@ -98,7 +99,6 @@ void copy_selected_item(void* user_data);
 void open_selected_items(void* user_data);
 void properties_selected_items(void* user_data);
 void paste_items(void* user_data);
-void renamer_focus_lost( LLFocusableElement* handler, void* user_data );
 
 
 //---------------------------------------------------------------------------
@@ -178,7 +178,6 @@ LLFolderView::LLFolderView(const Params& p)
 	mSourceID(p.task_id),
 	mRenameItem( NULL ),
 	mNeedsScroll( FALSE ),
-	mEnableScroll( true ),
 	mUseLabelSuffix(p.use_label_suffix),
 	mPinningSelectedItem(FALSE),
 	mNeedsAutoSelect( FALSE ),
@@ -244,7 +243,7 @@ LLFolderView::LLFolderView(const Params& p)
 	text_p.name(std::string(p.name));
 	text_p.font(font);
 	text_p.visible(false);
-	text_p.allow_html(true);
+	text_p.parse_urls(true);
 	text_p.wrap(true); // allow multiline text. See EXT-7564, EXT-7047
 	// set text padding the same as in People panel. EXT-7047, EXT-4837
 	text_p.h_pad(STATUS_TEXT_HPAD);
@@ -269,6 +268,8 @@ LLFolderView::LLFolderView(const Params& p)
 // Destroys the object
 LLFolderView::~LLFolderView( void )
 {
+	closeRenamer();
+
 	// The release focus call can potentially call the
 	// scrollcontainer, which can potentially be called with a partly
 	// destroyed scollcontainer. Just null it out here, and no worries
@@ -284,8 +285,6 @@ LLFolderView::~LLFolderView( void )
 
 	LLView::deleteViewByHandle(mPopupMenuHandle);
 
-	gViewerWindow->removePopup(mRenamer);
-
 	mAutoOpenItems.removeAllNodes();
 	clearSelection();
 	mItems.clear();
@@ -992,12 +991,7 @@ void LLFolderView::finishRenamingItem( void )
 		mRenameItem->rename( mRenamer->getText() );
 	}
 
-	gViewerWindow->removePopup(mRenamer);
-
-	if( mRenameItem )
-	{
-		setSelectionFromRoot( mRenameItem, TRUE );
-	}
+	closeRenamer();
 
 	// List is re-sorted alphabeticly, so scroll to make sure the selected item is visible.
 	scrollToShowSelection();
@@ -1005,20 +999,26 @@ void LLFolderView::finishRenamingItem( void )
 
 void LLFolderView::closeRenamer( void )
 {
-	// will commit current name (which could be same as original name)
-	mRenamer->setFocus( FALSE );
-	mRenamer->setVisible( FALSE );
-	gViewerWindow->removePopup(mRenamer);
-
-	if( mRenameItem )
+	if (mRenamer && mRenamer->getVisible())
 	{
-		setSelectionFromRoot( mRenameItem, TRUE );
-		mRenameItem = NULL;
+		// Triggers onRenamerLost() that actually closes the renamer.
+		gViewerWindow->removePopup(mRenamer);
 	}
 }
 
 void LLFolderView::removeSelectedItems( void )
 {
+	if (mSelectedItems.empty()) return;
+	LLSD args;
+	args["QUESTION"] = LLTrans::getString(mSelectedItems.size() > 1 ? "DeleteItems" :  "DeleteItem");
+	LLNotificationsUtil::add("DeleteItems", args, LLSD(), boost::bind(&LLFolderView::onItemsRemovalConfirmation, this, _1, _2));
+}
+
+void LLFolderView::onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option != 0) return; // canceled
+
 	if(getVisible() && getEnabled())
 	{
 		// just in case we're removing the renaming item.
@@ -1438,8 +1438,7 @@ void LLFolderView::startRenamingSelectedItem( void )
 		mRenamer->setVisible( TRUE );
 		// set focus will fail unless item is visible
 		mRenamer->setFocus( TRUE );
-		mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1));
-		mRenamer->setFocusLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1));
+		mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this));
 		gViewerWindow->addPopup(mRenamer);
 	}
 }
@@ -1960,10 +1959,7 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 
 void LLFolderView::deleteAllChildren()
 {
-	if(mRenamer == gFocusMgr.getTopCtrl())
-	{
-		gViewerWindow->removePopup(mRenamer);
-	}
+	closeRenamer();
 	LLView::deleteViewByHandle(mPopupMenuHandle);
 	mPopupMenuHandle = LLHandle<LLView>();
 	mRenamer = NULL;
@@ -1974,7 +1970,9 @@ void LLFolderView::deleteAllChildren()
 
 void LLFolderView::scrollToShowSelection()
 {
-	if (mEnableScroll && mSelectedItems.size())
+	// If items are filtered while background fetch is in progress
+	// scrollbar resets to the first filtered item. See EXT-3981.
+	if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && mSelectedItems.size())
 	{
 		mNeedsScroll = TRUE;
 	}
@@ -2446,13 +2444,20 @@ S32	LLFolderView::notify(const LLSD& info)
 /// Local function definitions
 ///----------------------------------------------------------------------------
 
-void LLFolderView::onRenamerLost( LLFocusableElement* renamer)
+void LLFolderView::onRenamerLost()
 {
-	mRenameItem = NULL;
-	LLUICtrl* uictrl = dynamic_cast<LLUICtrl*>(renamer);
-	if (uictrl)
+	if (mRenamer && mRenamer->getVisible())
 	{
-		uictrl->setVisible(FALSE);
+		mRenamer->setVisible(FALSE);
+
+		// will commit current name (which could be same as original name)
+		mRenamer->setFocus(FALSE);
+	}
+
+	if( mRenameItem )
+	{
+		setSelectionFromRoot( mRenameItem, TRUE );
+		mRenameItem = NULL;
 	}
 }
 
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 9be83ba852ed22f166efa5f952bdd3108f7fb22a..980f9a34a6bb6e6ebf47795e25c040d4d651cffa 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -268,7 +268,6 @@ public:
 	void dumpSelectionInformation();
 
 	virtual S32	notify(const LLSD& info) ;
-	void setEnableScroll(bool enable_scroll) { mEnableScroll = enable_scroll; }
 	
 	bool useLabelSuffix() { return mUseLabelSuffix; }
 private:
@@ -278,7 +277,7 @@ protected:
 	LLScrollContainer* mScrollContainer;  // NULL if this is not a child of a scroll container.
 
 	void commitRename( const LLSD& data );
-	void onRenamerLost( LLFocusableElement* renamer);
+	void onRenamerLost();
 
 	void finishRenamingItem( void );
 	void closeRenamer( void );
@@ -288,6 +287,8 @@ protected:
 	
 	BOOL addNoOptions(LLMenuGL* menu) const;
 
+	void onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response);
+
 protected:
 	LLHandle<LLView>					mPopupMenuHandle;
 	
@@ -303,7 +304,6 @@ protected:
 	LLLineEditor*					mRenamer;
 
 	BOOL							mNeedsScroll;
-	bool							mEnableScroll;
 	BOOL							mPinningSelectedItem;
 	LLRect							mScrollConstraintRect;
 	BOOL							mNeedsAutoSelect;
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index f672ffe20f0e6be3c71e34147f09246eaefe7df0..2f856abe8fbbea272506d11e501c48140f385b68 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -293,6 +293,17 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud
 {
 	folderBuddiesMap.clear();
 
+	static bool syncronize_friends_folders = true;
+	if (syncronize_friends_folders)
+	{
+		// Checks whether "Friends" and "Friends/All" folders exist in "Calling Cards" folder,
+		// fetches their contents if needed and synchronizes it with buddies list.
+		// If the folders are not found they are created.
+		LLFriendCardsManager::instance().syncFriendCardsFolders();
+		syncronize_friends_folders = false;
+	}
+
+
 	LLInventoryModel::cat_array_t* listFolders;
 	LLInventoryModel::item_array_t* items;
 
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 3751a33a484f90eeab7e67254ce74c5e702ea121..4f9d51ce58227f2ee9315172ffd8066ca4a12f57 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -206,8 +206,8 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL
 	item->setName(name, mNameFilter);
 	item->setGroupIconID(icon_id);
 
-	item->childSetVisible("info_btn", false);
-	item->childSetVisible("profile_btn", false);
+	item->getChildView("info_btn")->setVisible( false);
+	item->getChildView("profile_btn")->setVisible( false);
 	item->setGroupIconVisible(mShowIcons);
 
 	addItem(item, id, pos);
@@ -317,16 +317,16 @@ void LLGroupListItem::setValue( const LLSD& value )
 {
 	if (!value.isMap()) return;
 	if (!value.has("selected")) return;
-	childSetVisible("selected_icon", value["selected"]);
+	getChildView("selected_icon")->setVisible( value["selected"]);
 }
 
 void LLGroupListItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
-	childSetVisible("hovered_icon", true);
+	getChildView("hovered_icon")->setVisible( true);
 	if (mGroupID.notNull()) // don't show the info button for the "none" group
 	{
 		mInfoBtn->setVisible(true);
-		childSetVisible("profile_btn", true);
+		getChildView("profile_btn")->setVisible( true);
 	}
 
 	LLPanel::onMouseEnter(x, y, mask);
@@ -334,9 +334,9 @@ void LLGroupListItem::onMouseEnter(S32 x, S32 y, MASK mask)
 
 void LLGroupListItem::onMouseLeave(S32 x, S32 y, MASK mask)
 {
-	childSetVisible("hovered_icon", false);
+	getChildView("hovered_icon")->setVisible( false);
 	mInfoBtn->setVisible(false);
-	childSetVisible("profile_btn", false);
+	getChildView("profile_btn")->setVisible( false);
 
 	LLPanel::onMouseLeave(x, y, mask);
 }
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index f748603bfaabc8dfa5351a4eeea8421fbfedace3..b00a663a9af78afb9ce9ed4691f8d52701dd2c4d 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -231,6 +231,25 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
 		new LLSessionTimeoutTimer(mSessionID, SESSION_INITIALIZATION_TIMEOUT);
 	}
 
+	// *WORKAROUND: for server hard-coded string in indra\newsim\llsimchatterbox.cpp
+	if (isAdHocSessionType() && IM_SESSION_INVITE == type)
+	{
+		// For an ad-hoc incoming chat name is received from the server and is in a form of "<Avatar's name> Conference"
+		// Lets update it to localize the "Conference" word. See EXT-8429.
+		S32 separator_index = mName.rfind(" ");
+		std::string name = mName.substr(0, separator_index);
+		++separator_index;
+		std::string conference_word = mName.substr(separator_index, mName.length());
+
+		// additional check that session name is what we expected
+		if ("Conference" == conference_word)
+		{
+			LLStringUtil::format_map_t args;
+			args["[AGENT_NAME]"] = name;
+			LLTrans::findString(mName, "conference-title-incoming", args);
+		}
+	}
+
 	if (IM_NOTHING_SPECIAL == type)
 	{
 		mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID);
@@ -996,19 +1015,6 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 
 	if (is_not_group_id)
 	{
-			
-#if 0
-		//use this code to add only online members	
-		LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
-		LLSpeakerMgr::speaker_list_t speaker_list;
-		speaker_mgr->getSpeakerList(&speaker_list, true);
-		for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
-		{
-			const LLPointer<LLSpeaker>& speakerp = *it;
-
-			LLRecentPeople::instance().add(speakerp->mID);
-		}
-#else
 		LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(im_session_id);
 		if( session == 0)//??? shouldn't really happen
 		{
@@ -1023,16 +1029,20 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 			// Concrete participants will be added into this list once they sent message in chat.
 			if (IM_SESSION_INVITE == dialog) return;
 
-			// implemented adding of all participants of an outgoing to Recent People List. See EXT-5694.
-			for(uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();
-				it!=session->mInitialTargetIDs.end();++it)
+			// Add only online members to recent (EXT-8658)
+			LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
+			LLSpeakerMgr::speaker_list_t speaker_list;
+			if(speaker_mgr != NULL)
+			{
+				speaker_mgr->getSpeakerList(&speaker_list, true);
+			}
+			for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
 			{
-				const LLUUID id = *it;
+				const LLPointer<LLSpeaker>& speakerp = *it;
 
-				LLRecentPeople::instance().add(id);
+				LLRecentPeople::instance().add(speakerp->mID);
 			}
 		}
-#endif
 	}
 
 	
@@ -1703,12 +1713,12 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 			old_caller_name = LLTextUtil::formatPhoneNumber(old_caller_name);
 		}
 
-		childSetTextArg("leaving", "[CURRENT_CHAT]", old_caller_name);
+		getChild<LLUICtrl>("leaving")->setTextArg("[CURRENT_CHAT]", old_caller_name);
 		show_oldchannel = true;
 	}
 	else
 	{
-		childSetTextArg("leaving", "[CURRENT_CHAT]", getString("localchat"));		
+		getChild<LLUICtrl>("leaving")->setTextArg("[CURRENT_CHAT]", getString("localchat"));		
 	}
 
 	if (!mPayload["disconnected_channel_name"].asString().empty())
@@ -1718,16 +1728,16 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 		{
 			channel_name = LLTextUtil::formatPhoneNumber(channel_name);
 		}
-		childSetTextArg("nearby", "[VOICE_CHANNEL_NAME]", channel_name);
+		getChild<LLUICtrl>("nearby")->setTextArg("[VOICE_CHANNEL_NAME]", channel_name);
 
 		// skipping "You will now be reconnected to nearby" in notification when call is ended by disabling voice,
 		// so no reconnection to nearby chat happens (EXT-4397)
 		bool voice_works = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
 		std::string reconnect_nearby = voice_works ? LLTrans::getString("reconnect_nearby") : std::string();
-		childSetTextArg("nearby", "[RECONNECT_NEARBY]", reconnect_nearby);
+		getChild<LLUICtrl>("nearby")->setTextArg("[RECONNECT_NEARBY]", reconnect_nearby);
 
 		const std::string& nearby_str = mPayload["ended_by_agent"] ? NEARBY_P2P_BY_AGENT : NEARBY_P2P_BY_OTHER;
-		childSetTextArg(nearby_str, "[RECONNECT_NEARBY]", reconnect_nearby);
+		getChild<LLUICtrl>(nearby_str)->setTextArg("[RECONNECT_NEARBY]", reconnect_nearby);
 	}
 
 	std::string callee_name = mPayload["session_name"].asString();
@@ -1747,8 +1757,8 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 	setTitle(callee_name);
 
 	LLSD callee_id = mPayload["other_user_id"];
-	childSetTextArg("calling", "[CALLEE_NAME]", callee_name);
-	childSetTextArg("connecting", "[CALLEE_NAME]", callee_name);
+	getChild<LLUICtrl>("calling")->setTextArg("[CALLEE_NAME]", callee_name);
+	getChild<LLUICtrl>("connecting")->setTextArg("[CALLEE_NAME]", callee_name);
 
 	// for outgoing group calls callee_id == group id == session id
 	setIcon(callee_id, callee_id);
@@ -1933,7 +1943,7 @@ BOOL LLIncomingCallDialog::postBuild()
 
 	//it's not possible to connect to existing Ad-Hoc/Group chat through incoming ad-hoc call
 	//and no IM for avaline
-	childSetVisible("Start IM", is_avatar && notify_box_type != "VoiceInviteAdHoc" && notify_box_type != "VoiceInviteGroup");
+	getChildView("Start IM")->setVisible( is_avatar && notify_box_type != "VoiceInviteAdHoc" && notify_box_type != "VoiceInviteGroup");
 
 	setCanDrag(FALSE);
 
@@ -1957,12 +1967,12 @@ void LLIncomingCallDialog::onOpen(const LLSD& key)
 	if (voice && !voice->getSessionName().empty())
 	{
 		args["[CURRENT_CHAT]"] = voice->getSessionName();
-		childSetText("question", getString(key["question_type"].asString(), args));
+		getChild<LLUICtrl>("question")->setValue(getString(key["question_type"].asString(), args));
 	}
 	else
 	{
 		args["[CURRENT_CHAT]"] = getString("localchat");
-		childSetText("question", getString(key["question_type"].asString(), args));
+		getChild<LLUICtrl>("question")->setValue(getString(key["question_type"].asString(), args));
 	}
 }
 
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index dfd39cc39ca5136528f01805bdc3638de0ab3a28..4ce94773bf296b4d2158c9db1ec6cdcf000ff6d8 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -227,7 +227,8 @@ public:
 	 * Get a session's name. 
 	 * For a P2P chat - it's an avatar's name, 
 	 * For a group chat - it's a group's name
-	 * For an ad-hoc chat - is received from the server and is in a from of "<Avatar's name> conference"
+	 * For an incoming ad-hoc chat - is received from the server and is in a from of "<Avatar's name> Conference"
+	 *	It is updated in LLIMModel::LLIMSession's constructor to localize the "Conference".
 	 */
 	const std::string& getName(const LLUUID& session_id) const;
 
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index d877d659c19647219262f0946e9214dce7ec3a38..b367d68b02ade89eebcaa59aaa23fb86225bf1fa 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -365,7 +365,7 @@ void LLInspectAvatar::requestUpdate()
 	//remove avatar id from cache to get fresh info
 	LLAvatarIconIDCache::getInstance()->remove(mAvatarID);
 
-	childSetValue("avatar_icon", LLSD(mAvatarID) );
+	getChild<LLUICtrl>("avatar_icon")->setValue(LLSD(mAvatarID) );
 
 	gCacheName->get(mAvatarID, FALSE,
 		boost::bind(&LLInspectAvatar::nameUpdatedCallback,
@@ -615,7 +615,7 @@ void LLInspectAvatar::nameUpdatedCallback(
 	if (id == mAvatarID)
 	{
 		mAvatarName = first + " " + last;
-		childSetValue("user_name", LLSD(mAvatarName) );
+		getChild<LLUICtrl>("user_name")->setValue(LLSD(mAvatarName) );
 	}
 }
 
diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp
index 1e9bbb7839486930eb993335c835a5af48c5ffb8..214b135bc1f02e01a7d8cd1d9a3a35a0b724d17e 100644
--- a/indra/newview/llinspectgroup.cpp
+++ b/indra/newview/llinspectgroup.cpp
@@ -233,7 +233,7 @@ void LLInspectGroup::nameUpdatedCallback(
 	if (id == mGroupID)
 	{
 		// group names are returned as a first name
-		childSetValue("group_name", LLSD(first) );
+		getChild<LLUICtrl>("group_name")->setValue(LLSD(first) );
 	}
 	
 	// Otherwise possibly a request for an older inspector, ignore it
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index beeac86f949b8d234e3f46ef7a9e365f5eecf4b5..aff0bc409976dc0b8f3dc47dac7e48a6b300d7a1 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1264,6 +1264,12 @@ BOOL LLItemBridge::isItemRenameable() const
 		{
 			return FALSE;
 		}
+
+		if (!item->isFinished()) // EXT-8662
+		{
+			return FALSE;
+		}
+
 		return (item->getPermissions().allowModifyBy(gAgent.getID()));
 	}
 	return FALSE;
@@ -3930,7 +3936,7 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action)
 		item = (LLViewerInventoryItem*)gInventory.getItem(object_id);
 		if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID()))
 		{
-			rez_attachment(item, NULL);
+			rez_attachment(item, NULL, true); // Replace if "Wear"ing.
 		}
 		else if(item && item->isFinished())
 		{
@@ -3946,23 +3952,16 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action)
 		}
 		gFocusMgr.setKeyboardFocus(NULL);
 	}
+	else if ("wear_add" == action)
+	{
+		LLAppearanceMgr::instance().wearItemOnAvatar(mUUID, true, false); // Don't replace if adding.
+	}
 	else if (isRemoveAction(action))
 	{
 		LLInventoryItem* item = gInventory.getItem(mUUID);
 		if(item)
 		{
-			gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
-			gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
-			gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
-			gMessageSystem->sendReliable( gAgent.getRegion()->getHost());
-
-			// this object might have been selected, so let the selection manager know it's gone now
-			LLViewerObject *found_obj = gObjectList.findObject(item->getLinkedUUID());
-			if (found_obj)
-			{
-				LLSelectMgr::getInstance()->remove(found_obj);
-			}
+			LLVOAvatarSelf::detachAttachmentIntoInventory(item->getLinkedUUID());
 		}
 	}
 	else LLItemBridge::performAction(model, action);
@@ -3979,6 +3978,11 @@ std::string LLObjectBridge::getLabelSuffix() const
 {
 	if (get_is_item_worn(mUUID))
 	{
+		if (!isAgentAvatarValid())
+		{
+			return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn");
+		}
+
 		std::string attachment_point_name = gAgentAvatarp->getAttachedPointName(mUUID);
 
 		// e.g. "(worn on ...)" / "(attached to ...)"
@@ -3992,10 +3996,19 @@ std::string LLObjectBridge::getLabelSuffix() const
 	}
 }
 
-void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment)
+void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment, bool replace)
 {
-	LLSD payload;
-	payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link.
+	const LLUUID& item_id = item->getLinkedUUID();
+
+	// Check for duplicate request.
+	if (isAgentAvatarValid() &&
+		(gAgentAvatarp->attachmentWasRequested(item_id) ||
+		 gAgentAvatarp->isWearingAttachment(item_id)))
+	{
+		llwarns << "duplicate attachment request, ignoring" << llendl;
+		return;
+	}
+	gAgentAvatarp->addAttachmentRequest(item_id);
 
 	S32 attach_pt = 0;
 	if (isAgentAvatarValid() && attachment)
@@ -4011,9 +4024,16 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach
 		}
 	}
 
+	if (!replace)
+	{
+		attach_pt |= ATTACHMENT_ADD;
+	}
+
+	LLSD payload;
+	payload["item_id"] = item_id; // Wear the base object in case this is a link.
 	payload["attachment_point"] = attach_pt;
 
-	if (!gSavedSettings.getBOOL("MultipleAttachments") &&
+	if (replace &&
 		(attachment && attachment->getNumObjects() > 0))
 	{
 		LLNotificationsUtil::add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez);
@@ -4037,13 +4057,13 @@ bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& respon
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
 	if (option == 0/*YES*/)
 	{
-		LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID());
+		LLUUID item_id = notification["payload"]["item_id"].asUUID();
+		LLViewerInventoryItem* itemp = gInventory.getItem(item_id);
 
 		if (itemp)
 		{
 			U8 attachment_pt = notification["payload"]["attachment_point"].asInteger();
-			if (gSavedSettings.getBOOL("MultipleAttachments"))
-				attachment_pt |= ATTACHMENT_ADD;
+			
 
 			LLMessageSystem* msg = gMessageSystem;
 			msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv);
@@ -4100,6 +4120,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			{
 				items.push_back(std::string("Wearable And Object Separator"));
 				items.push_back(std::string("Wearable And Object Wear"));
+				items.push_back(std::string("Wearable Add"));
 				items.push_back(std::string("Attach To"));
 				items.push_back(std::string("Attach To HUD"));
 				// commented out for DEV-32347
@@ -4108,6 +4129,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 				if (!gAgentAvatarp->canAttachMoreObjects())
 				{
 					disabled_items.push_back(std::string("Wearable And Object Wear"));
+					disabled_items.push_back(std::string("Wearable Add"));
 					disabled_items.push_back(std::string("Attach To"));
 					disabled_items.push_back(std::string("Attach To HUD"));
 				}
@@ -4310,19 +4332,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_
 				LLViewerInventoryItem *obj_item = obj_item_array.get(i);
 				if (get_is_item_worn(obj_item->getUUID()))
 				{
-					gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
-					gMessageSystem->nextBlockFast(_PREHASH_ObjectData );
-					gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-					gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item->getLinkedUUID() );
-					
-					gMessageSystem->sendReliable( gAgent.getRegion()->getHost() );
-					
-					// this object might have been selected, so let the selection manager know it's gone now
-					LLViewerObject *found_obj = gObjectList.findObject( obj_item->getLinkedUUID());
-					if (found_obj)
-					{
-						LLSelectMgr::getInstance()->remove(found_obj);
-					}
+					LLVOAvatarSelf::detachAttachmentIntoInventory(obj_item->getLinkedUUID());
 				}
 			}
 		}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 6ddd77284a0f6804036dbe0429c193663c5711e3..14abdd76b9e8970baec559f475f1589ed68e7b88 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -588,7 +588,8 @@ public:
 };
 
 void rez_attachment(LLViewerInventoryItem* item, 
-					LLViewerJointAttachment* attachment);
+					LLViewerJointAttachment* attachment,
+					bool replace = false);
 
 // Move items from an in-world object's "Contents" folder to a specified
 // folder in agent inventory.
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index e814cf012e22bd8340627615db6faa59f36f2d54..f3d9639deebcc550a4ad8dcd4321e2815e3bcef8 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -215,7 +215,13 @@ BOOL get_is_item_worn(const LLUUID& id)
 	const LLViewerInventoryItem* item = gInventory.getItem(id);
 	if (!item)
 		return FALSE;
-	
+
+	// Consider the item as worn if it has links in COF.
+	if (LLAppearanceMgr::instance().isLinkInCOF(id))
+	{
+		return TRUE;
+	}
+
 	switch(item->getType())
 	{
 		case LLAssetType::AT_OBJECT:
@@ -257,6 +263,16 @@ BOOL get_can_item_be_worn(const LLUUID& id)
 		return FALSE;
 	}
 	
+	const LLUUID trash_id = gInventory.findCategoryUUIDForType(
+			LLFolderType::FT_TRASH);
+
+	// item can't be worn if base obj in trash, see EXT-7015
+	if (gInventory.isObjectDescendentOf(item->getLinkedUUID(),
+			trash_id))
+	{
+		return false;
+	}
+
 	switch(item->getType())
 	{
 		case LLAssetType::AT_OBJECT:
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 853bf45c5eeb77d66f54cd57076e4ffb5dc7019b..cfe1747fd4d7435adb8e128c3cfac90a215742f9 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -295,6 +295,7 @@ public:
 
 	virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
 	{
+		//converting an inventory type to a bitmap filter mask
 		if(item && (mFilterMask & (1LL << item->getInventoryType())) )
 		{
 			return true;
diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp
index 2b81ba8a12657e1a3c5b522d58f95a42cceb1f8b..348d7ebcec1a3817309693519192e61b18592555 100644
--- a/indra/newview/llinventoryitemslist.cpp
+++ b/indra/newview/llinventoryitemslist.cpp
@@ -80,6 +80,37 @@ boost::signals2::connection LLInventoryItemsList::setRefreshCompleteCallback(con
 	return mRefreshCompleteSignal.connect(cb);
 }
 
+bool LLInventoryItemsList::selectItemByValue(const LLSD& value, bool select)
+{
+	if (!LLFlatListView::selectItemByValue(value, select) && !value.isUndefined())
+	{
+		mSelectTheseIDs.push_back(value);
+		return false;
+	}
+	return true;
+}
+
+void LLInventoryItemsList::updateSelection()
+{
+	if(mSelectTheseIDs.empty()) return;
+
+	std::vector<LLSD> cur;
+	getValues(cur);
+
+	for(std::vector<LLSD>::const_iterator cur_id_it = cur.begin(); cur_id_it != cur.end() && !mSelectTheseIDs.empty(); ++cur_id_it)
+	{
+		uuid_vec_t::iterator select_ids_it = std::find(mSelectTheseIDs.begin(), mSelectTheseIDs.end(), *cur_id_it);
+		if(select_ids_it != mSelectTheseIDs.end())
+		{
+			selectItemByUUID(*select_ids_it);
+			mSelectTheseIDs.erase(select_ids_it);
+		}
+	}
+
+	scrollToShowFirstSelectedItem();
+	mSelectTheseIDs.clear();
+}
+
 void LLInventoryItemsList::doIdle()
 {
 	if (!mNeedsRefresh) return;
@@ -148,6 +179,12 @@ void LLInventoryItemsList::refresh()
 	bool needs_refresh = add_limit_exceeded;
 	setNeedsRefresh(needs_refresh);
 	setForceRefresh(needs_refresh);
+
+	// After list building completed, select items that had been requested to select before list was build
+	if(!needs_refresh)
+	{
+		updateSelection();
+	}
 }
 
 void LLInventoryItemsList::computeDifference(
diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h
index ca90427659b1b593c9a0dc79820faa863e06d022..86e11dff1701ccfd95d4461054219d154f57eff8 100644
--- a/indra/newview/llinventoryitemslist.h
+++ b/indra/newview/llinventoryitemslist.h
@@ -64,6 +64,10 @@ public:
 	 */
 	void setForceRefresh(bool force_refresh){ mForceRefresh = force_refresh; }
 
+	virtual bool selectItemByValue(const LLSD& value, bool select = true);
+
+	void updateSelection();
+
 	/**
 	 * Idle routine used to refresh the list regardless of the current list
 	 * visibility, unlike draw() which is called only for the visible list.
@@ -100,6 +104,9 @@ protected:
 private:
 	uuid_vec_t mIDs; // IDs of items that were added in refreshList().
 					 // Will be used in refresh() to determine added and removed ids
+
+	uuid_vec_t mSelectTheseIDs; // IDs that will be selected if list is not loaded till now
+
 	bool mNeedsRefresh;
 
 	bool mForceRefresh;
diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp
index 901fa483a99a371d23ce3eeb8a834ad3fe8b6502..1ea91103f15a232ee408561951dfbb60a25a9390 100644
--- a/indra/newview/llinventorylistitem.cpp
+++ b/indra/newview/llinventorylistitem.cpp
@@ -232,6 +232,17 @@ const std::string& LLPanelInventoryListItemBase::getDescription() const
 	return inv_item->getDescription();
 }
 
+time_t LLPanelInventoryListItemBase::getCreationDate() const
+{
+	LLViewerInventoryItem* inv_item = getItem();
+	if (NULL == inv_item)
+	{
+		return 0;
+	}
+
+	return inv_item->getCreationDate();
+}
+
 LLViewerInventoryItem* LLPanelInventoryListItemBase::getItem() const
 {
 	return gInventory.getItem(mInventoryItemUUID);
diff --git a/indra/newview/llinventorylistitem.h b/indra/newview/llinventorylistitem.h
index 40bb52ddda86eb4c86af7428548fb8aea8a23cba..b1ef6c74ee83244f40ed7eb633603f4dd43e561f 100644
--- a/indra/newview/llinventorylistitem.h
+++ b/indra/newview/llinventorylistitem.h
@@ -146,6 +146,9 @@ public:
 	/** Get the description of a corresponding inventory item */
 	const std::string& getDescription() const;
 
+	/** Get the creation date of a corresponding inventory item */
+	time_t getCreationDate() const;
+
 	/** Get the associated inventory item */
 	LLViewerInventoryItem* getItem() const;
 
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index cb6a1fafe57a2d5e0e2bf6faf26d61011b572ef2..820520df9e2cbf40c2294d30903c6bfade102cf7 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -169,6 +169,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
 		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));
 	}
 	mFolderRoot->setSortOrder(getFilter()->getSortOrder());
+
+	// Initialize base class params.
+	LLPanel::initFromParams(params);
 }
 
 LLInventoryPanel::~LLInventoryPanel()
@@ -700,21 +703,6 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 	return handled;
 }
 
-// virtual
-void LLInventoryPanel::onMouseEnter(S32 x, S32 y, MASK mask)
-{
-	LLPanel::onMouseEnter(x, y, mask);
-	// don't auto-scroll a list when cursor is over Inventory. See EXT-3981.
-	mFolderRoot->setEnableScroll(false);
-}
-
-// virtual
-void LLInventoryPanel::onMouseLeave(S32 x, S32 y, MASK mask)
-{
-	LLPanel::onMouseLeave(x, y, mask);
-	mFolderRoot->setEnableScroll(true);
-}
-
 void LLInventoryPanel::onFocusLost()
 {
 	// inventory no longer handles cut/copy/paste/delete
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index f8aaae8fabb7715267232b1abde79ff4f7e13ed0..6545fc0d5e5508661190254bf4dfef33a3a9c4a9 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -115,10 +115,6 @@ public:
 								   void* cargo_data,
 								   EAcceptance* accept,
 								   std::string& tooltip_msg);
-
-	void onMouseEnter(S32 x, S32 y, MASK mask);
-	void onMouseLeave(S32 x, S32 y, MASK mask);
-
 	// LLUICtrl methods
 	 /*virtual*/ void onFocusLost();
 	 /*virtual*/ void onFocusReceived();
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 5981441e27c2d215882a3f9f062743663d6b38ea..a6ff76cf844da0f114c7d022854a69cd867afd23 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -61,7 +61,8 @@ LLMediaCtrl::Params::Params()
 	decouple_texture_size("decouple_texture_size", false),
 	texture_width("texture_width", 1024),
 	texture_height("texture_height", 1024),
-	caret_color("caret_color")
+	caret_color("caret_color"),
+	initial_mime_type("initial_mime_type")
 {
 	tab_stop(false);
 }
@@ -86,7 +87,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mDecoupleTextureSize ( false ),
 	mTextureWidth ( 1024 ),
 	mTextureHeight ( 1024 ),
-	mClearCache(false)
+	mClearCache(false),
+	mHomePageMimeType(p.initial_mime_type)
 {
 	{
 		LLColor4 color = p.caret_color().get();
@@ -95,7 +97,7 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 
 	setIgnoreUIScale(p.ignore_ui_scale);
 	
-	setHomePageUrl(p.start_url);
+	setHomePageUrl(p.start_url, p.initial_mime_type);
 	
 	setBorderVisible(p.border_visible);
 	
@@ -561,12 +563,12 @@ void LLMediaCtrl::navigateHome()
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-void LLMediaCtrl::setHomePageUrl( const std::string urlIn )
+void LLMediaCtrl::setHomePageUrl( const std::string& urlIn, const std::string& mime_type )
 {
 	mHomePageUrl = urlIn;
 	if (mMediaSource)
 	{
-		mMediaSource->setHomeURL(mHomePageUrl);
+		mMediaSource->setHomeURL(mHomePageUrl, mime_type);
 	}
 }
 
@@ -610,7 +612,7 @@ bool LLMediaCtrl::ensureMediaSourceExists()
 		if ( mMediaSource )
 		{
 			mMediaSource->setUsedInUI(true);
-			mMediaSource->setHomeURL(mHomePageUrl);
+			mMediaSource->setHomeURL(mHomePageUrl, mHomePageMimeType);
 			mMediaSource->setVisible( getVisible() );
 			mMediaSource->addObserver( this );
 			mMediaSource->setBackgroundColor( getBackgroundColor() );
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 9fc066c07f48b25a3e2e07fa18d0c51d048a9146..755d1e1b046b33fbf7b52865bd3c083648b759cc 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -57,6 +57,8 @@ public:
 								texture_height;
 		
 		Optional<LLUIColor>		caret_color;
+
+		Optional<std::string>	initial_mime_type;
 		
 		Params();
 	};
@@ -103,7 +105,7 @@ public:
 		// because we control the page content.  See DEV-9530.  JC.
 		void setTrusted( bool valIn );
 
-		void setHomePageUrl( const std::string urlIn );
+		void setHomePageUrl( const std::string& urlIn, const std::string& mime_type = LLStringUtil::null );
 		std::string getHomePageUrl();
 
 		// set/clear URL to visit when a 404 page is reached
@@ -167,6 +169,7 @@ public:
 		bool mForceUpdate;
 		bool mTrusted;
 		std::string mHomePageUrl;
+		std::string mHomePageMimeType;
 		std::string mCurrentNavUrl;
 		bool mIgnoreUIScale;
 		bool mAlwaysRefresh;
diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp
index da656d8b5e6edb09b35eddb42f84bd229b2628f6..31038b4aaca1c5e63653597c2f9ce0513762520b 100644
--- a/indra/newview/llmediadataclient.cpp
+++ b/indra/newview/llmediadataclient.cpp
@@ -52,6 +52,32 @@
 // - Any request that gets a 503 still goes through the retry logic
 //
 
+/***************************************************************************************************************
+	What's up with this queueing code?
+
+	First, a bit of background:
+
+	Media on a prim was added into the system in the Viewer 2.0 timeframe.  In order to avoid changing the 
+	network format of objects, an unused field in the object (the "MediaURL" string) was repurposed to 
+	indicate that the object had media data, and also hold a sequence number and the UUID of the agent 
+	who last updated the data.  The actual media data for objects is accessed via the "ObjectMedia" capability.  
+	Due to concerns about sim performance, requests to this capability are rate-limited to 5 requests every 
+	5 seconds per agent.
+
+	The initial implementation of LLMediaDataClient used a single queue to manage requests to the "ObjectMedia" cap.  
+	Requests to the cap were queued so that objects closer to the avatar were loaded in first, since they were most 
+	likely to be the ones the media performance manager would load.
+
+	This worked in some cases, but we found that it was possible for a scripted object that constantly updated its 
+	media data to starve other objects, since the same queue contained both requests to load previously unseen media 
+	data and requests to fetch media data in response to object updates.
+
+	The solution for this we came up with was to have two queues.  The sorted queue contains requests to fetch media 
+	data for objects that don't have it yet, and the round-robin queue contains requests to update media data for 
+	objects that have already completed their initial load.  When both queues are non-empty, the code ping-pongs 
+	between them so that updates can't completely block initial load-in.
+**************************************************************************************************************/
+
 //
 // Forward decls
 //
@@ -65,6 +91,54 @@ const U32 LLMediaDataClient::MAX_ROUND_ROBIN_QUEUE_SIZE = 10000;
 std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q);
 std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q);
 
+template <typename T>
+static typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type)
+{
+	for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter)
+	{
+		if(request->isMatch(*iter, match_type))
+		{
+			return iter;
+		}
+	}
+	
+	return c.end();
+}
+
+template <typename T>
+static typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type)
+{
+	for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter)
+	{
+		if(((*iter)->getID() == id) && ((match_type == LLMediaDataClient::Request::ANY) || (match_type == (*iter)->getType())))
+		{
+			return iter;
+		}
+	}
+	
+	return c.end();
+}
+
+// NOTE: remove_matching_requests will not work correctly for containers where deleting an element may invalidate iterators
+// to other elements in the container (such as std::vector).
+// If the implementation is changed to use a container with this property, this will need to be revisited.
+template <typename T>
+static void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type)
+{
+	for(typename T::iterator iter = c.begin(); iter != c.end();)
+	{
+		typename T::value_type i = *iter;
+		typename T::iterator next = iter;
+		next++;
+		if((i->getID() == id) && ((match_type == LLMediaDataClient::Request::ANY) || (match_type == i->getType())))
+		{
+			i->markDead();
+			c.erase(iter);
+		}
+		iter = next;
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////////////////
 //
 // LLMediaDataClient
@@ -81,117 +155,36 @@ LLMediaDataClient::LLMediaDataClient(F32 queue_timer_delay,
 	  mMaxNumRetries(max_retries),
 	  mMaxSortedQueueSize(max_sorted_queue_size),
 	  mMaxRoundRobinQueueSize(max_round_robin_queue_size),
-	  mQueueTimerIsRunning(false),
-	  mCurrentQueueIsTheSortedQueue(true)
+	  mQueueTimerIsRunning(false)
 {
 }
 
 LLMediaDataClient::~LLMediaDataClient()
 {
 	stopQueueTimer();
-
-	// This should clear the queue, and hopefully call all the destructors.
-	LL_DEBUGS("LLMediaDataClient") << "~LLMediaDataClient destructor: queue: " << 
-		(isEmpty() ? "<empty> " : "<not empty> ") << LL_ENDL;
-	
-	mSortedQueue.clear();
-	mRoundRobinQueue.clear();
 }
 
 bool LLMediaDataClient::isEmpty() const
 {
-	return mSortedQueue.empty() && mRoundRobinQueue.empty();
+	return mQueue.empty();
 }
 
 bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
 {
-	return (LLMediaDataClient::findOrRemove(mSortedQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()
-		|| (LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()));
-}
-
-bool LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
-{
-	bool removedFromSortedQueue = LLMediaDataClient::findOrRemove(mSortedQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
-	bool removedFromRoundRobinQueue = LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
-	return removedFromSortedQueue || removedFromRoundRobinQueue;
-}
-
-//static
-LLMediaDataClient::request_ptr_t LLMediaDataClient::findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, LLMediaDataClient::Request::Type type)
-{
-	request_ptr_t result;
-	request_queue_t::iterator iter = queue.begin();
-	request_queue_t::iterator end = queue.end();
-	while (iter != end)
-	{
-		if (obj->getID() == (*iter)->getObject()->getID() && (type == LLMediaDataClient::Request::ANY || type == (*iter)->getType()))
-		{
-			result = *iter;
-			if (remove) queue.erase(iter);
-			break;
-		}
-		iter++;
-	}
-	return result;
-}
-
-void LLMediaDataClient::request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload)
-{
-	if (object.isNull() || ! object->hasMedia()) return; 
+	if(find_matching_request(mQueue, object->getID()) != mQueue.end())
+		return true;
+	
+	if(find_matching_request(mUnQueuedRequests, object->getID()) != mUnQueuedRequests.end())
+		return true;
 	
-	// Push the object on the queue
-	enqueue(new Request(getCapabilityName(), payload, object, this));
+	return false;
 }
 
-void LLMediaDataClient::enqueue(const Request *request)
+void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
 {
-	if (request->isNew())
-	{		
-		// Add to sorted queue
-		if (LLMediaDataClient::findOrRemove(mSortedQueue, request->getObject(), true/*remove*/, request->getType()).notNull())
-		{
-			LL_DEBUGS("LLMediaDataClient") << "REMOVING OLD request for " << *request << " ALREADY THERE!" << LL_ENDL;
-		}
-		
-		LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL;
-		
-		// Sadly, we have to const-cast because items put into the queue are not const
-		mSortedQueue.push_back(const_cast<LLMediaDataClient::Request*>(request));
-		
-		LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mSortedQueue << LL_ENDL;
-	}
-	else {
-		if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize) 
-		{
-			LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL;
-			LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL;
-			return;
-		}
-				
-		// ROUND ROBIN: if it is there, and it is a GET request, leave it.  If not, put at front!		
-		request_ptr_t existing_request;
-		if (request->getType() == Request::GET)
-		{
-			existing_request = LLMediaDataClient::findOrRemove(mRoundRobinQueue, request->getObject(), false/*remove*/, request->getType());
-		}
-		if (existing_request.isNull())
-		{
-			LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL;
-			// Push the request on the pending queue
-			// Sadly, we have to const-cast because items put into the queue are not const
-			mRoundRobinQueue.push_front(const_cast<LLMediaDataClient::Request*>(request));
-			
-			LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL;			
-		}
-		else
-		{
-			LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL;
-						
-			existing_request->markSent(false);
-		}
-	}	
-	// Start the timer if not already running
-	startQueueTimer();
+	LL_DEBUGS("LLMediaDataClient") << "removing requests matching ID " << object->getID() << LL_ENDL;
+	remove_matching_requests(mQueue, object->getID());
+	remove_matching_requests(mUnQueuedRequests, object->getID());
 }
 
 void LLMediaDataClient::startQueueTimer() 
@@ -203,7 +196,7 @@ void LLMediaDataClient::startQueueTimer()
 		new QueueTimer(mQueueTimerDelay, this);
 	}
 	else { 
-		LL_DEBUGS("LLMediaDataClient") << "not starting queue timer (it's already running, right???)" << LL_ENDL;
+		LL_DEBUGS("LLMediaDataClient") << "queue timer is already running" << LL_ENDL;
 	}
 }
 
@@ -214,179 +207,138 @@ void LLMediaDataClient::stopQueueTimer()
 
 bool LLMediaDataClient::processQueueTimer()
 {
-	sortQueue();
-	
-	if(!isEmpty())
-	{
-		LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is:	  " << mSortedQueue.size() 
-			<< ", RR queue size is:	  " << mRoundRobinQueue.size() << LL_ENDL;
-		LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is:	  " << mSortedQueue << LL_ENDL;
-		LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, RR queue is:	  " << mRoundRobinQueue << LL_ENDL;
-	}
-	
+	if(isEmpty())
+		return true;
+
+	LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, queue size is:	  " << mQueue.size() << LL_ENDL;
+	LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is:	  " << mQueue << LL_ENDL;
+			
 	serviceQueue();
 	
-	LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, SORTED queue size is:	  " << mSortedQueue.size() 
-		<< ", RR queue size is:	  " << mRoundRobinQueue.size() << LL_ENDL;
-	LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is:	  " << mSortedQueue << LL_ENDL;
-	LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, RR queue is:	  " << mRoundRobinQueue << LL_ENDL;
+	LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, queue size is:	  " << mQueue.size() << LL_ENDL;
+	LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is:	  " << mQueue << LL_ENDL;
 	
 	return isEmpty();
 }
 
-void LLMediaDataClient::sortQueue()
+LLMediaDataClient::request_ptr_t LLMediaDataClient::dequeue()
 {
-	if(!mSortedQueue.empty())
+	request_ptr_t request;
+	request_queue_t *queue_p = getQueue();
+	
+	if (queue_p->empty())
 	{
-		// Score all items first
-		request_queue_t::iterator iter = mSortedQueue.begin();
-		request_queue_t::iterator end = mSortedQueue.end();
-		while (iter != end)
+		LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL;
+	}
+	else
+	{
+		request = queue_p->front();
+		
+		if(canServiceRequest(request))
 		{
-			(*iter)->updateScore();
-			iter++;
+			// We will be returning this request, so remove it from the queue.
+			queue_p->pop_front();
 		}
-		
-		// Re-sort the list...
-		// NOTE: should this be a stable_sort?  If so we need to change to using a vector.
-		mSortedQueue.sort(LLMediaDataClient::compareRequests);
-		
-		// ...then cull items over the max
-		U32 size = mSortedQueue.size();
-		if (size > mMaxSortedQueueSize) 
+		else
 		{
-			U32 num_to_cull = (size - mMaxSortedQueueSize);
-			LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT!  Culling " 
-				<< num_to_cull << " items" << LL_ENDL;
-			while (num_to_cull-- > 0)
-			{
-				mSortedQueue.pop_back();
-			}
+			// Don't return this request -- it's not ready to be serviced.
+			request = NULL;
 		}
 	}
+
+	return request;
 }
 
-// static
-bool LLMediaDataClient::compareRequests(const request_ptr_t &o1, const request_ptr_t &o2)
+void LLMediaDataClient::pushBack(request_ptr_t request)
 {
-	if (o2.isNull()) return true;
-	if (o1.isNull()) return false;
-	return ( o1->getScore() > o2->getScore() );
+	request_queue_t *queue_p = getQueue();
+	queue_p->push_front(request);
+}
+
+void LLMediaDataClient::trackRequest(request_ptr_t request)
+{
+	request_set_t::iterator iter = mUnQueuedRequests.find(request);
+	
+	if(iter != mUnQueuedRequests.end())
+	{
+		LL_WARNS("LLMediaDataClient") << "Tracking already tracked request: " << *request << LL_ENDL;
+	}
+	else
+	{
+		mUnQueuedRequests.insert(request);
+	}
+}
+
+void LLMediaDataClient::stopTrackingRequest(request_ptr_t request)
+{
+	request_set_t::iterator iter = mUnQueuedRequests.find(request);
+	
+	if (iter != mUnQueuedRequests.end())
+	{
+		mUnQueuedRequests.erase(iter);
+	}
+	else
+	{
+		LL_WARNS("LLMediaDataClient") << "Removing an untracked request: " << *request << LL_ENDL;
+	}
 }
 
 void LLMediaDataClient::serviceQueue()
 {	
-	request_queue_t *queue_p = getCurrentQueue();
+	// Peel one off of the items from the queue and execute it
+	request_ptr_t request;
 	
-	// quick retry loop for cases where we shouldn't wait for the next timer tick
-	while(true)
+	do
 	{
-		if (queue_p->empty())
+		request = dequeue();
+
+		if(request.isNull())
 		{
-			LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL;
-			break;
+			// Queue is empty.
+			return;
 		}
-		
-		// Peel one off of the items from the queue, and execute request
-		request_ptr_t request = queue_p->front();
-		llassert(!request.isNull());
-		const LLMediaDataClientObject *object = (request.isNull()) ? NULL : request->getObject();
-		llassert(NULL != object);
-		
-		// Check for conditions that would make us just pop and rapidly loop through
-		// the queue.
-		if(request.isNull() ||
-		   request->isMarkedSent() ||
-		   NULL == object ||
-		   object->isDead() ||
-		   !object->hasMedia())
+
+		if(request->isDead())
 		{
-			if (request.isNull()) 
-			{
-				LL_WARNS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL;
-			}
-			else {
-				LL_INFOS("LLMediaDataClient") << "Skipping : " << *request << " " 
-				<< ((request->isMarkedSent()) ? " request is marked sent" :
-					((NULL == object) ? " object is NULL " :
-					 ((object->isDead()) ? "object is dead" : 
-					  ((!object->hasMedia()) ? "object has no media!" : "BADNESS!")))) << LL_ENDL;
-			}
-			queue_p->pop_front();
-			continue;	// jump back to the start of the quick retry loop
+			LL_INFOS("LLMediaDataClient") << "Skipping dead request " << *request << LL_ENDL;
+			continue;
 		}
+
+	} while(false);
 		
-		// Next, ask if this is "interesting enough" to fetch.  If not, just stop
-		// and wait for the next timer go-round.  Only do this for the sorted 
-		// queue.
-		if (mCurrentQueueIsTheSortedQueue && !object->isInterestingEnough())
-		{
-			LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL;
-			break;
-		}
+	// try to send the HTTP message to the cap url
+	std::string url = request->getCapability();
+	if (!url.empty())
+	{
+		const LLSD &sd_payload = request->getPayload();
+		LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL;
 		
-		// Finally, try to send the HTTP message to the cap url
-		std::string url = request->getCapability();
-		bool maybe_retry = false;
-		if (!url.empty())
-		{
-			const LLSD &sd_payload = request->getPayload();
-			LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL;
-			
-			// Call the subclass for creating the responder
-			LLHTTPClient::post(url, sd_payload, createResponder(request));
-		}
-		else {
-			LL_INFOS("LLMediaDataClient") << "NOT Sending request for " << *request << ": empty cap url!" << LL_ENDL;
-			maybe_retry = true;
-		}
-
-		bool exceeded_retries = request->getRetryCount() > mMaxNumRetries;
-		if (maybe_retry && ! exceeded_retries) // Try N times before giving up 
+		// Add this request to the non-queued tracking list
+		trackRequest(request);
+		
+		// and make the post
+		LLHTTPClient::post(url, sd_payload, request->createResponder());
+	}
+	else 
+	{
+		// Cap url doesn't exist.
+		
+		if(request->getRetryCount() < mMaxNumRetries)
 		{
-			// We got an empty cap, but in that case we will retry again next
-			// timer fire.
+			LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " (empty cap url), will retry." << LL_ENDL; 
+			// Put this request back at the head of its queue, and retry next time the queue timer fires.
 			request->incRetryCount();
+			pushBack(request);
 		}
-		else {
-			if (exceeded_retries)
-			{
-				LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for " 
-					<< mMaxNumRetries << " tries...popping object id " << object->getID() << LL_ENDL; 
-				// XXX Should we bring up a warning dialog??
-			}
-			
-			queue_p->pop_front();
-			
-			if (! mCurrentQueueIsTheSortedQueue) {
-				// Round robin
-				request->markSent(true);
-				mRoundRobinQueue.push_back(request);				
-			}
+		else
+		{
+			// This request has exceeded its maxumim retry count.  It will be dropped.
+			LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for " << mMaxNumRetries << " tries, dropping request." << LL_ENDL; 
 		}
-		
- 		// end of quick loop -- any cases where we want to loop will use 'continue' to jump back to the start.
- 		break;
-	}
-	
-	swapCurrentQueue();
-}
 
-void LLMediaDataClient::swapCurrentQueue()
-{
-	// Swap
-	mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
-	// If its empty, swap back
-	if (getCurrentQueue()->empty()) 
-	{
-		mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
 	}
 }
 
-LLMediaDataClient::request_queue_t *LLMediaDataClient::getCurrentQueue()
-{
-	return (mCurrentQueueIsTheSortedQueue) ? &mSortedQueue : &mRoundRobinQueue;
-}
 
 // dump the queue
 std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q)
@@ -396,7 +348,7 @@ std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue
 	LLMediaDataClient::request_queue_t::const_iterator end = q.end();
 	while (iter != end)
 	{
-		s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")";
+		s << "\t" << i << "]: " << (*iter)->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")";
 		iter++;
 		i++;
 	}
@@ -416,18 +368,24 @@ LLMediaDataClient::QueueTimer::QueueTimer(F32 time, LLMediaDataClient *mdc)
 	mMDC->setIsRunning(true);
 }
 
-LLMediaDataClient::QueueTimer::~QueueTimer()
-{
-	LL_DEBUGS("LLMediaDataClient") << "~QueueTimer" << LL_ENDL;
-	mMDC->setIsRunning(false);
-	mMDC = NULL;
-}
-
 // virtual
 BOOL LLMediaDataClient::QueueTimer::tick()
 {
-	if (mMDC.isNull()) return TRUE;
-	return mMDC->processQueueTimer();
+	BOOL result = TRUE;
+	
+	if (!mMDC.isNull())
+	{
+		result = mMDC->processQueueTimer();
+	
+		if(result)
+		{
+			// This timer won't fire again.  
+			mMDC->setIsRunning(false);
+			mMDC = NULL;
+		}
+	}
+
+	return result;
 }
 
 
@@ -437,29 +395,30 @@ BOOL LLMediaDataClient::QueueTimer::tick()
 //
 //////////////////////////////////////////////////////////////////////////////////////
 
-LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr)
-: LLEventTimer(time), mResponder(mdr)
+LLMediaDataClient::RetryTimer::RetryTimer(F32 time, request_ptr_t request)
+: LLEventTimer(time), mRequest(request)
 {
+	mRequest->startTracking();
 }
 
-// virtual 
-LLMediaDataClient::Responder::RetryTimer::~RetryTimer() 
+// virtual
+BOOL LLMediaDataClient::RetryTimer::tick()
 {
-	LL_DEBUGS("LLMediaDataClient") << "~RetryTimer" << *(mResponder->getRequest()) << LL_ENDL;
-	
-	// XXX This is weird: Instead of doing the work in tick()  (which re-schedules
-	// a timer, which might be risky), do it here, in the destructor.  Yes, it is very odd.
-	// Instead of retrying, we just put the request back onto the queue
-	LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << " retrying" << LL_ENDL;
-	mResponder->getRequest()->reEnqueue();
+	mRequest->stopTracking();
+
+	if(mRequest->isDead())
+	{
+		LL_INFOS("LLMediaDataClient") << "RetryTimer fired for dead request: " << *mRequest << ", aborting." << LL_ENDL;
+	}
+	else
+	{
+		LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *mRequest << ", retrying." << LL_ENDL;
+		mRequest->reEnqueue();
+	}
 	
-	// Release the ref to the responder.
-	mResponder = NULL;
-}
+	// Release the ref to the request.
+	mRequest = NULL;
 
-// virtual
-BOOL LLMediaDataClient::Responder::RetryTimer::tick()
-{
 	// Don't fire again
 	return TRUE;
 }
@@ -472,56 +431,37 @@ BOOL LLMediaDataClient::Responder::RetryTimer::tick()
 //////////////////////////////////////////////////////////////////////////////////////
 /*static*/U32 LLMediaDataClient::Request::sNum = 0;
 
-LLMediaDataClient::Request::Request(const char *cap_name, 
-									const LLSD& sd_payload,
+LLMediaDataClient::Request::Request(Type in_type,
 									LLMediaDataClientObject *obj, 
-									LLMediaDataClient *mdc)
-: mCapName(cap_name), 
-  mPayload(sd_payload), 
+									LLMediaDataClient *mdc,
+									S32 face)
+: mType(in_type),
   mObject(obj),
   mNum(++sNum), 
   mRetryCount(0),
   mMDC(mdc),
-  mMarkedSent(false),
-  mScore((F64)0.0)
+  mScore((F64)0.0),
+  mFace(face)
 {
+	mObjectID = mObject->getID();
 }
 
-LLMediaDataClient::Request::~Request()
+const char *LLMediaDataClient::Request::getCapName() const
 {
-	LL_DEBUGS("LLMediaDataClient") << "~Request" << (*this) << LL_ENDL;
-	mMDC = NULL;
-	mObject = NULL;
+	if(mMDC)
+		return mMDC->getCapabilityName();
+	
+	return "";
 }
 
-
 std::string LLMediaDataClient::Request::getCapability() const
 {
-	return getObject()->getCapabilityUrl(getCapName());
-}
-
-// Helper function to get the "type" of request, which just pokes around to
-// discover it.
-LLMediaDataClient::Request::Type LLMediaDataClient::Request::getType() const
-{
-	if (0 == strcmp(mCapName, "ObjectMediaNavigate"))
+	if(mMDC)
 	{
-		return NAVIGATE;
-	}
-	else if (0 == strcmp(mCapName, "ObjectMedia"))
-	{
-		const std::string &verb = mPayload["verb"];
-		if (verb == "GET")
-		{
-			return GET;
-		}
-		else if (verb == "UPDATE")
-		{
-			return UPDATE;
-		}
+		return getObject()->getCapabilityUrl(getCapName());
 	}
-	llassert(false);
-	return GET;
+	
+	return "";
 }
 
 const char *LLMediaDataClient::Request::getTypeAsString() const
@@ -546,35 +486,30 @@ const char *LLMediaDataClient::Request::getTypeAsString() const
 }
 
 
-void LLMediaDataClient::Request::reEnqueue() const
+void LLMediaDataClient::Request::reEnqueue()
 {
-	// I sure hope this doesn't deref a bad pointer:
-	mMDC->enqueue(this);
+	if(mMDC)
+	{
+		mMDC->enqueue(this);
+	}
 }
 
 F32 LLMediaDataClient::Request::getRetryTimerDelay() const
 {
-	return (mMDC == NULL) ? LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY :
-	mMDC->mRetryTimerDelay; 
+	if(mMDC)
+		return mMDC->mRetryTimerDelay; 
+		
+	return 0.0f;
 }
 
 U32 LLMediaDataClient::Request::getMaxNumRetries() const
 {
-	return (mMDC == NULL) ? LLMediaDataClient::MAX_RETRIES : mMDC->mMaxNumRetries;
+	if(mMDC)
+		return mMDC->mMaxNumRetries;
+	
+	return 0;
 }
 
-void LLMediaDataClient::Request::markSent(bool flag)
-{
-	 if (mMarkedSent != flag)
-	 {
-		 mMarkedSent = flag;
-		 if (!mMarkedSent)
-		 {
-			 mNum = ++sNum;
-		 }
-	 }
-}
-		   
 void LLMediaDataClient::Request::updateScore()
 {				
 	F64 tmp = mObject->getMediaInterest();
@@ -585,15 +520,37 @@ void LLMediaDataClient::Request::updateScore()
 	}
 }
 		   
+void LLMediaDataClient::Request::markDead() 
+{ 
+	mMDC = NULL;
+}
+
+bool LLMediaDataClient::Request::isDead() 
+{ 
+	return ((mMDC == NULL) || mObject->isDead()); 
+}
+
+void LLMediaDataClient::Request::startTracking() 
+{ 
+	if(mMDC) 
+		mMDC->trackRequest(this); 
+}
+
+void LLMediaDataClient::Request::stopTracking() 
+{ 
+	if(mMDC) 
+		mMDC->stopTrackingRequest(this); 
+}
+
 std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &r)
 {
 	s << "request: num=" << r.getNum() 
 	<< " type=" << r.getTypeAsString() 
-	<< " ID=" << r.getObject()->getID() 
+	<< " ID=" << r.getID() 
+	<< " face=" << r.getFace() 
 	<< " #retries=" << r.getRetryCount();
 	return s;
 }
-
 			
 //////////////////////////////////////////////////////////////////////////////////////
 //
@@ -606,15 +563,17 @@ LLMediaDataClient::Responder::Responder(const request_ptr_t &request)
 {
 }
 
-LLMediaDataClient::Responder::~Responder()
-{
-	LL_DEBUGS("LLMediaDataClient") << "~Responder" << *(getRequest()) << LL_ENDL;
-	mRequest = NULL;
-}
-
 /*virtual*/
 void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
 {
+	mRequest->stopTracking();
+
+	if(mRequest->isDead())
+	{
+		LL_WARNS("LLMediaDataClient") << "dead request " << *mRequest << LL_ENDL;
+		return;
+	}
+	
 	if (status == HTTP_SERVICE_UNAVAILABLE)
 	{
 		F32 retry_timeout = mRequest->getRetryTimerDelay();
@@ -627,14 +586,16 @@ void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
 			
 			// Start timer (instances are automagically tracked by
 			// InstanceTracker<> and LLEventTimer)
-			new RetryTimer(F32(retry_timeout/*secs*/), this);
+			new RetryTimer(F32(retry_timeout/*secs*/), mRequest);
 		}
-		else {
+		else 
+		{
 			LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count " 
 				<< mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL;
 		}
 	}
-	else {
+	else 
+	{
 		std::string msg = boost::lexical_cast<std::string>(status) + ": " + reason;
 		LL_WARNS("LLMediaDataClient") << *mRequest << " http error(" << msg << ")" << LL_ENDL;
 	}
@@ -643,6 +604,14 @@ void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
 /*virtual*/
 void LLMediaDataClient::Responder::result(const LLSD& content)
 {
+	mRequest->stopTracking();
+
+	if(mRequest->isDead())
+	{
+		LL_WARNS("LLMediaDataClient") << "dead request " << *mRequest << LL_ENDL;
+		return;
+	}
+
 	LL_DEBUGS("LLMediaDataClientResponse") << *mRequest << " result : " << ll_print_sd(content) << LL_ENDL;
 }
 
@@ -653,9 +622,10 @@ void LLMediaDataClient::Responder::result(const LLSD& content)
 //
 //////////////////////////////////////////////////////////////////////////////////////
 
-LLMediaDataClient::Responder *LLObjectMediaDataClient::createResponder(const request_ptr_t &request) const
+void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object)
 {
-	return new LLObjectMediaDataClient::Responder(request);
+	// Create a get request and put it in the queue.
+	enqueue(new RequestGet(object, this));
 }
 
 const char *LLObjectMediaDataClient::getCapabilityName() const 
@@ -663,70 +633,286 @@ const char *LLObjectMediaDataClient::getCapabilityName() const
 	return "ObjectMedia";
 }
 
-void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object)
+LLObjectMediaDataClient::request_queue_t *LLObjectMediaDataClient::getQueue()
+{
+	return (mCurrentQueueIsTheSortedQueue) ? &mQueue : &mRoundRobinQueue;
+}
+
+void LLObjectMediaDataClient::sortQueue()
+{
+	if(!mQueue.empty())
+	{
+		// score all elements in the sorted queue.
+		for(request_queue_t::iterator iter = mQueue.begin(); iter != mQueue.end(); iter++)
+		{
+			(*iter)->updateScore();
+		}
+		
+		// Re-sort the list...
+		mQueue.sort(compareRequestScores);
+		
+		// ...then cull items over the max
+		U32 size = mQueue.size();
+		if (size > mMaxSortedQueueSize) 
+		{
+			U32 num_to_cull = (size - mMaxSortedQueueSize);
+			LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT!  Culling " 
+				<< num_to_cull << " items" << LL_ENDL;
+			while (num_to_cull-- > 0)
+			{
+				mQueue.back()->markDead();
+				mQueue.pop_back();
+			}
+		}
+	}
+	
+}
+
+// static
+bool LLObjectMediaDataClient::compareRequestScores(const request_ptr_t &o1, const request_ptr_t &o2)
 {
-	LLSD sd_payload;
-	sd_payload["verb"] = "GET";
-	sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
-	request(object, sd_payload);
+	if (o2.isNull()) return true;
+	if (o1.isNull()) return false;
+	return ( o1->getScore() > o2->getScore() );
 }
 
+void LLObjectMediaDataClient::enqueue(Request *request)
+{
+	if(request->isDead())
+	{
+		LL_DEBUGS("LLMediaDataClient") << "not queueing dead request " << *request << LL_ENDL;
+		return;
+	}
+
+	// Invariants:
+	// new requests always go into the sorted queue.
+	//  
+	
+	bool is_new = request->isNew();
+	
+	if(!is_new && (request->getType() == Request::GET))
+	{
+		// For GET requests that are not new, if a matching request is already in the round robin queue, 
+		// in flight, or being retried, leave it at its current position.
+		request_queue_t::iterator iter = find_matching_request(mRoundRobinQueue, request->getID(), Request::GET);
+		request_set_t::iterator iter2 = find_matching_request(mUnQueuedRequests, request->getID(), Request::GET);
+		
+		if( (iter != mRoundRobinQueue.end()) || (iter2 != mUnQueuedRequests.end()) )
+		{
+			LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL;
+
+			return;
+		}
+	}
+	
+	// TODO: should an UPDATE cause pending GET requests for the same object to be removed from the queue?
+	// IF the update will cause an object update message to be sent out at some point in the future, it probably should.
+	
+	// Remove any existing requests of this type for this object
+	remove_matching_requests(mQueue, request->getID(), request->getType());
+	remove_matching_requests(mRoundRobinQueue, request->getID(), request->getType());
+	remove_matching_requests(mUnQueuedRequests, request->getID(), request->getType());
+
+	if (is_new)
+	{
+		LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL;
+		
+		mQueue.push_back(request);
+		
+		LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mQueue << LL_ENDL;
+	}
+	else
+	{
+		if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize) 
+		{
+			LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL;
+			LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL;
+			return;
+		}
+				
+		LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL;
+		// Push the request on the pending queue
+		mRoundRobinQueue.push_back(request);
+		
+		LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL;			
+	}	
+	// Start the timer if not already running
+	startQueueTimer();
+}
+
+bool LLObjectMediaDataClient::canServiceRequest(request_ptr_t request) 
+{
+	if(mCurrentQueueIsTheSortedQueue)
+	{
+		if(!request->getObject()->isInterestingEnough())
+		{
+			LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL;
+			return false;
+		}
+	}
+	
+	return true; 
+};
+
+void LLObjectMediaDataClient::swapCurrentQueue()
+{
+	// Swap
+	mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
+	// If its empty, swap back
+	if (getQueue()->empty()) 
+	{
+		mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
+	}
+}
+
+bool LLObjectMediaDataClient::isEmpty() const
+{
+	return mQueue.empty() && mRoundRobinQueue.empty();
+}
+
+bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
+{
+	// First, call parent impl.
+	if(LLMediaDataClient::isInQueue(object))
+		return true;
+
+	if(find_matching_request(mRoundRobinQueue, object->getID()) != mRoundRobinQueue.end())
+		return true;
+	
+	return false;
+}
+
+void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
+{
+	// First, call parent impl.
+	LLMediaDataClient::removeFromQueue(object);
+	
+	remove_matching_requests(mRoundRobinQueue, object->getID());
+}
+
+bool LLObjectMediaDataClient::processQueueTimer()
+{
+	if(isEmpty())
+		return true;
+		
+	LL_DEBUGS("LLMediaDataClient") << "started, SORTED queue size is:	  " << mQueue.size() 
+		<< ", RR queue size is:	  " << mRoundRobinQueue.size() << LL_ENDL;
+	LL_DEBUGS("LLMediaDataClientQueue") << "    SORTED queue is:	  " << mQueue << LL_ENDL;
+	LL_DEBUGS("LLMediaDataClientQueue") << "    RR queue is:	  " << mRoundRobinQueue << LL_ENDL;
+
+//	purgeDeadRequests();
+
+	sortQueue();
+
+	LL_DEBUGS("LLMediaDataClientQueue") << "after sort, SORTED queue is:	  " << mQueue << LL_ENDL;
+	
+	serviceQueue();
+
+	swapCurrentQueue();
+	
+	LL_DEBUGS("LLMediaDataClient") << "finished, SORTED queue size is:	  " << mQueue.size() 
+		<< ", RR queue size is:	  " << mRoundRobinQueue.size() << LL_ENDL;
+	LL_DEBUGS("LLMediaDataClientQueue") << "    SORTED queue is:	  " << mQueue << LL_ENDL;
+	LL_DEBUGS("LLMediaDataClientQueue") << "    RR queue is:	  " << mRoundRobinQueue << LL_ENDL;
+	
+	return isEmpty();
+}
+
+LLObjectMediaDataClient::RequestGet::RequestGet(LLMediaDataClientObject *obj, LLMediaDataClient *mdc):
+	LLMediaDataClient::Request(LLMediaDataClient::Request::GET, obj, mdc)
+{
+}
+
+LLSD LLObjectMediaDataClient::RequestGet::getPayload() const
+{
+	LLSD result;
+	result["verb"] = "GET";
+	result[LLTextureEntry::OBJECT_ID_KEY] = mObject->getID();
+	
+	return result;
+}
+
+LLMediaDataClient::Responder *LLObjectMediaDataClient::RequestGet::createResponder()
+{
+	return new LLObjectMediaDataClient::Responder(this);
+}
+
+
 void LLObjectMediaDataClient::updateMedia(LLMediaDataClientObject *object)
 {
-	LLSD sd_payload;
-	sd_payload["verb"] = "UPDATE";
-	sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
+	// Create an update request and put it in the queue.
+	enqueue(new RequestUpdate(object, this));
+}
+
+LLObjectMediaDataClient::RequestUpdate::RequestUpdate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc):
+	LLMediaDataClient::Request(LLMediaDataClient::Request::UPDATE, obj, mdc)
+{
+}
+
+LLSD LLObjectMediaDataClient::RequestUpdate::getPayload() const
+{
+	LLSD result;
+	result["verb"] = "UPDATE";
+	result[LLTextureEntry::OBJECT_ID_KEY] = mObject->getID();
+
 	LLSD object_media_data;
 	int i = 0;
-	int end = object->getMediaDataCount();
+	int end = mObject->getMediaDataCount();
 	for ( ; i < end ; ++i) 
 	{
-		object_media_data.append(object->getMediaDataLLSD(i));
+		object_media_data.append(mObject->getMediaDataLLSD(i));
 	}
-	sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data;
-		
-	LL_DEBUGS("LLMediaDataClient") << "update media data: " << object->getID() << " " << ll_print_sd(sd_payload) << LL_ENDL;
 	
-	request(object, sd_payload);
+	result[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data;
+	
+	return result;
 }
 
+LLMediaDataClient::Responder *LLObjectMediaDataClient::RequestUpdate::createResponder()
+{
+	// This just uses the base class's responder.
+	return new LLMediaDataClient::Responder(this);
+}
+
+
 /*virtual*/
 void LLObjectMediaDataClient::Responder::result(const LLSD& content)
 {
-	const LLMediaDataClient::Request::Type type = getRequest()->getType();
-	llassert(type == LLMediaDataClient::Request::GET || type == LLMediaDataClient::Request::UPDATE)
-	if (type == LLMediaDataClient::Request::GET)
+	getRequest()->stopTracking();
+
+	if(getRequest()->isDead())
 	{
-		LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL;
+		LL_WARNS("LLMediaDataClient") << "dead request " << *(getRequest()) << LL_ENDL;
+		return;
+	}
+
+	// This responder is only used for GET requests, not UPDATE.
+
+	LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL;
+	
+	// Look for an error
+	if (content.has("error"))
+	{
+		const LLSD &error = content["error"];
+		LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" << 
+			error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
 		
-		// Look for an error
-		if (content.has("error"))
-		{
-			const LLSD &error = content["error"];
-			LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" << 
-				error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
-			
-			// XXX Warn user?
-		}
-		else {
-			// Check the data
-			const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY];
-			if (object_id != getRequest()->getObject()->getID()) 
-			{
-				// NOT good, wrong object id!!
-				LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL;
-				return;
-			}
-			
-			// Otherwise, update with object media data
-			getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY],
-															 content[LLTextureEntry::MEDIA_VERSION_KEY]);
-		}
+		// XXX Warn user?
 	}
-	else if (type == LLMediaDataClient::Request::UPDATE)
+	else 
 	{
-		// just do what our superclass does
-		LLMediaDataClient::Responder::result(content);
+		// Check the data
+		const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY];
+		if (object_id != getRequest()->getObject()->getID()) 
+		{
+			// NOT good, wrong object id!!
+			LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL;
+			return;
+		}
+		
+		// Otherwise, update with object media data
+		getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY],
+														 content[LLTextureEntry::MEDIA_VERSION_KEY]);
 	}
 }
 
@@ -736,38 +922,105 @@ void LLObjectMediaDataClient::Responder::result(const LLSD& content)
 // Subclass of LLMediaDataClient for the ObjectMediaNavigate cap
 //
 //////////////////////////////////////////////////////////////////////////////////////
-LLMediaDataClient::Responder *LLObjectMediaNavigateClient::createResponder(const request_ptr_t &request) const
-{
-	return new LLObjectMediaNavigateClient::Responder(request);
-}
 
 const char *LLObjectMediaNavigateClient::getCapabilityName() const 
 {
 	return "ObjectMediaNavigate";
 }
 
+void LLObjectMediaNavigateClient::enqueue(Request *request)
+{
+	if(request->isDead())
+	{
+		LL_DEBUGS("LLMediaDataClient") << "not queueing dead request " << *request << LL_ENDL;
+		return;
+	}
+	
+	// If there's already a matching request in the queue, remove it.
+	request_queue_t::iterator iter = find_matching_request(mQueue, request);
+	if(iter != mQueue.end())
+	{
+		LL_DEBUGS("LLMediaDataClient") << "removing matching queued request " << (**iter) << LL_ENDL;
+		mQueue.erase(iter);
+	}
+	else
+	{
+		request_set_t::iterator set_iter = find_matching_request(mUnQueuedRequests, request);
+		if(set_iter != mUnQueuedRequests.end())
+		{
+			LL_DEBUGS("LLMediaDataClient") << "removing matching unqueued request " << (**set_iter) << LL_ENDL;
+			mUnQueuedRequests.erase(set_iter);
+		}
+	}
+
+#if 0
+	// Sadly, this doesn't work.  It ends up creating a race condition when the user navigates and then hits the "back" button
+	// where the navigate-back appears to be spurious and doesn't get broadcast.	
+	if(request->getObject()->isCurrentMediaUrl(request->getFace(), request->getURL()))
+	{
+		// This navigate request is trying to send the face to the current URL.  Drop it.
+		LL_DEBUGS("LLMediaDataClient") << "dropping spurious request " << (*request) << LL_ENDL;
+	}
+	else
+#endif
+	{
+		LL_DEBUGS("LLMediaDataClient") << "queueing new request " << (*request) << LL_ENDL;
+		mQueue.push_back(request);
+		
+		// Start the timer if not already running
+		startQueueTimer();
+	}
+}
+
 void LLObjectMediaNavigateClient::navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url)
 {
-	LLSD sd_payload;
-	sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
-	sd_payload[LLMediaEntry::CURRENT_URL_KEY] = url;
-	sd_payload[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)texture_index;
+
+//	LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL;
 	
-	LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL;
+	// Create a get request and put it in the queue.
+	enqueue(new RequestNavigate(object, this, texture_index, url));
+}
+
+LLObjectMediaNavigateClient::RequestNavigate::RequestNavigate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc, U8 texture_index, const std::string &url):
+	LLMediaDataClient::Request(LLMediaDataClient::Request::NAVIGATE, obj, mdc, (S32)texture_index),
+	mURL(url)
+{
+}
+
+LLSD LLObjectMediaNavigateClient::RequestNavigate::getPayload() const
+{
+	LLSD result;
+	result[LLTextureEntry::OBJECT_ID_KEY] = getID();
+	result[LLMediaEntry::CURRENT_URL_KEY] = mURL;
+	result[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)getFace();
 	
-	request(object, sd_payload);
+	return result;
+}
+
+LLMediaDataClient::Responder *LLObjectMediaNavigateClient::RequestNavigate::createResponder()
+{
+	return new LLObjectMediaNavigateClient::Responder(this);
 }
 
 /*virtual*/
 void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason)
 {
+	getRequest()->stopTracking();
+
+	if(getRequest()->isDead())
+	{
+		LL_WARNS("LLMediaDataClient") << "dead request " << *(getRequest()) << LL_ENDL;
+		return;
+	}
+
 	// Bounce back (unless HTTP_SERVICE_UNAVAILABLE, in which case call base
 	// class
 	if (status == HTTP_SERVICE_UNAVAILABLE)
 	{
 		LLMediaDataClient::Responder::error(status, reason);
 	}
-	else {
+	else
+	{
 		// bounce the face back
 		LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: http code=" << status << LL_ENDL;
 		const LLSD &payload = getRequest()->getPayload();
@@ -779,6 +1032,14 @@ void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string
 /*virtual*/
 void LLObjectMediaNavigateClient::Responder::result(const LLSD& content)
 {
+	getRequest()->stopTracking();
+
+	if(getRequest()->isDead())
+	{
+		LL_WARNS("LLMediaDataClient") << "dead request " << *(getRequest()) << LL_ENDL;
+		return;
+	}
+
 	LL_INFOS("LLMediaDataClient") << *(getRequest()) << " NAVIGATE returned " << ll_print_sd(content) << LL_ENDL;
 	
 	if (content.has("error"))
@@ -793,14 +1054,17 @@ void LLObjectMediaNavigateClient::Responder::result(const LLSD& content)
 			// bounce the face back
 			getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
 		}
-		else {
+		else
+		{
 			LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: code=" << 
 				error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
 		}			 
+
 		// XXX Warn user?
 	}
-	else {
-		// just do what our superclass does
-		LLMediaDataClient::Responder::result(content);
+	else 
+	{
+		// No action required.
+		LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " result : " << ll_print_sd(content) << LL_ENDL;
 	}
 }
diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h
index 69579c57fd876cd7b1aa04533e07797e68efd97b..ab90915c555410284ee0fa339eddd47a98bf3598 100644
--- a/indra/newview/llmediadataclient.h
+++ b/indra/newview/llmediadataclient.h
@@ -28,7 +28,7 @@
 #define LL_LLMEDIADATACLIENT_H
 
 #include "llhttpclient.h"
-#include <queue>
+#include <set>
 #include "llrefcount.h"
 #include "llpointer.h"
 #include "lleventtimer.h"
@@ -42,6 +42,8 @@ public:
 	virtual U8 getMediaDataCount() const = 0;
 	// Get the media data at index, as an LLSD
 	virtual LLSD getMediaDataLLSD(U8 index) const = 0;
+	// Return true if the current URL for the face in the media data matches the specified URL.
+	virtual bool isCurrentMediaUrl(U8 index, const std::string &url) const = 0;
 	// Get this object's UUID
 	virtual LLUUID getID() const = 0;
 	// Navigate back to previous URL
@@ -67,6 +69,7 @@ public:
 	typedef LLPointer<LLMediaDataClientObject> ptr_t;
 };
 
+
 // This object creates a priority queue for requests.
 // Abstracts the Cap URL, the request, and the responder
 class LLMediaDataClient : public LLRefCount
@@ -87,31 +90,37 @@ public:
 					  U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
 					  U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE);
 	
-	// Make the request
-	void request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload);
-
 	F32 getRetryTimerDelay() const { return mRetryTimerDelay; }
 	
 	// Returns true iff the queue is empty
-	bool isEmpty() const;
+	virtual bool isEmpty() const;
 	
 	// Returns true iff the given object is in the queue
-	bool isInQueue(const LLMediaDataClientObject::ptr_t &object);
+	virtual bool isInQueue(const LLMediaDataClientObject::ptr_t &object);
 	
 	// Remove the given object from the queue. Returns true iff the given object is removed.
-	bool removeFromQueue(const LLMediaDataClientObject::ptr_t &object);
+	virtual void removeFromQueue(const LLMediaDataClientObject::ptr_t &object);
 	
 	// Called only by the Queue timer and tests (potentially)
-	bool processQueueTimer();
+	virtual bool processQueueTimer();
 	
 protected:
 	// Destructor
 	virtual ~LLMediaDataClient(); // use unref
     
-	// Request
+	class Responder;
+	
+	// Request (pure virtual base class for requests in the queue)
 	class Request : public LLRefCount
 	{
 	public:
+		// Subclasses must implement this to build a payload for their request type.
+		virtual LLSD getPayload() const = 0;
+		// and must create the correct type of responder.
+		virtual Responder *createResponder() = 0;
+
+		virtual std::string getURL() { return ""; }
+
         enum Type {
             GET,
             UPDATE,
@@ -119,50 +128,61 @@ protected:
 			ANY
         };
         
-		Request(const char *cap_name, const LLSD& sd_payload, LLMediaDataClientObject *obj, LLMediaDataClient *mdc);
-		const char *getCapName() const { return mCapName; }
-		const LLSD &getPayload() const { return mPayload; }
+	protected:
+		// The only way to create one of these is through a subclass.
+		Request(Type in_type, LLMediaDataClientObject *obj, LLMediaDataClient *mdc, S32 face = -1);
+	public:
 		LLMediaDataClientObject *getObject() const { return mObject; }
 
         U32 getNum() const { return mNum; }
-
 		U32 getRetryCount() const { return mRetryCount; }
 		void incRetryCount() { mRetryCount++; }
+        Type getType() const { return mType; }
+		F64 getScore() const { return mScore; }
 		
 		// Note: may return empty string!
 		std::string getCapability() const;
-        
-        Type getType() const;
+		const char *getCapName() const;
 		const char *getTypeAsString() const;
 		
 		// Re-enqueue thyself
-		void reEnqueue() const;
+		void reEnqueue();
 		
 		F32 getRetryTimerDelay() const;
 		U32 getMaxNumRetries() const;
 		
-		bool isNew() const { return mObject.notNull() ? mObject->isNew() : false; }
-		void markSent(bool flag);
-		bool isMarkedSent() const { return mMarkedSent; }
+		bool isObjectValid() const { return mObject.notNull() && (!mObject->isDead()); }
+		bool isNew() const { return isObjectValid() && mObject->isNew(); }
 		void updateScore();
-		F64 getScore() const { return mScore; }
 		
-	public:
+		void markDead();
+		bool isDead();
+		void startTracking();
+		void stopTracking();
+		
 		friend std::ostream& operator<<(std::ostream &s, const Request &q);
 		
-    protected:
-        virtual ~Request(); // use unref();
-        
-	private:
-		const char *mCapName;
-		LLSD mPayload;
+		const LLUUID &getID() const { return mObjectID; }
+		S32 getFace() const { return mFace; }
+		
+		bool isMatch (const Request* other, Type match_type = ANY) const 
+		{ 
+			return ((match_type == ANY) || (mType == other->mType)) && 
+					(mFace == other->mFace) && 
+					(mObjectID == other->mObjectID); 
+		}
+	protected:
 		LLMediaDataClientObject::ptr_t mObject;
+	private:
+		Type mType;
 		// Simple tracking
 		U32 mNum;
 		static U32 sNum;
         U32 mRetryCount;
 		F64 mScore;
-		bool mMarkedSent;
+		
+		LLUUID mObjectID;
+		S32 mFace;
 
 		// Back pointer to the MDC...not a ref!
 		LLMediaDataClient *mMDC;
@@ -179,48 +199,66 @@ protected:
 		//If we get back a normal response, handle it here.	 Default just logs it.
 		virtual void result(const LLSD& content);
 
-		const request_ptr_t &getRequest() const { return mRequest; }
+		request_ptr_t &getRequest() { return mRequest; }
 
-    protected:
-		virtual ~Responder();
-        
 	private:
+		request_ptr_t mRequest;
+	};
 
-		class RetryTimer : public LLEventTimer
-		{
-		public:
-			RetryTimer(F32 time, Responder *);
-			virtual ~RetryTimer();
-			virtual BOOL tick();
-		private:
-			// back-pointer
-			boost::intrusive_ptr<Responder> mResponder;
-		};
-		
+	class RetryTimer : public LLEventTimer
+	{
+	public:
+		RetryTimer(F32 time, request_ptr_t);
+		virtual BOOL tick();
+	private:
+		// back-pointer
 		request_ptr_t mRequest;
 	};
+		
 	
 protected:
+	typedef std::list<request_ptr_t> request_queue_t;
+	typedef std::set<request_ptr_t> request_set_t;
 
-	// Subclasses must override this factory method to return a new responder
-	virtual Responder *createResponder(const request_ptr_t &request) const = 0;
-	
 	// Subclasses must override to return a cap name
 	virtual const char *getCapabilityName() const = 0;
+
+	// Puts the request into a queue, appropriately handling duplicates, etc.
+	virtual void enqueue(Request*) = 0;
 	
-	virtual void sortQueue();
 	virtual void serviceQueue();
+
+	virtual request_queue_t *getQueue() { return &mQueue; };
+
+	// Gets the next request, removing it from the queue
+	virtual request_ptr_t dequeue();
 	
-private:
-	typedef std::list<request_ptr_t> request_queue_t;
-		
-	void enqueue(const Request*);
+	virtual bool canServiceRequest(request_ptr_t request) { return true; };
+
+	// Returns a request to the head of the queue (should only be used for requests that came from dequeue
+	virtual void pushBack(request_ptr_t request);
 	
-	// Return whether the given object is/was in the queue
-	static LLMediaDataClient::request_ptr_t findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, Request::Type type);
+	void trackRequest(request_ptr_t request);
+	void stopTrackingRequest(request_ptr_t request);
+	
+	request_queue_t mQueue;
+
+	const F32 mQueueTimerDelay;
+	const F32 mRetryTimerDelay;
+	const U32 mMaxNumRetries;
+	const U32 mMaxSortedQueueSize;
+	const U32 mMaxRoundRobinQueueSize;
+	
+	// Set for keeping track of requests that aren't in either queue.  This includes:
+	//	Requests that have been sent and are awaiting a response (pointer held by the Responder)
+	//  Requests that are waiting for their retry timers to fire (pointer held by the retry timer)
+	request_set_t mUnQueuedRequests;
+
+	void startQueueTimer();
+	void stopQueueTimer();
+
+private:
 	
-	// Comparator for sorting
-	static bool compareRequests(const request_ptr_t &o1, const request_ptr_t &o2);
 	static F64 getObjectScore(const LLMediaDataClientObject::ptr_t &obj);
     
 	friend std::ostream& operator<<(std::ostream &s, const Request &q);
@@ -231,57 +269,76 @@ private:
 	public:
 		QueueTimer(F32 time, LLMediaDataClient *mdc);
 		virtual BOOL tick();
-    protected:
-		virtual ~QueueTimer();
 	private:
 		// back-pointer
 		LLPointer<LLMediaDataClient> mMDC;
 	};
 	
-	void startQueueTimer();
-	void stopQueueTimer();
 	void setIsRunning(bool val) { mQueueTimerIsRunning = val; }
-	
-	void swapCurrentQueue();
-	request_queue_t *getCurrentQueue();
-	
-	const F32 mQueueTimerDelay;
-	const F32 mRetryTimerDelay;
-	const U32 mMaxNumRetries;
-	const U32 mMaxSortedQueueSize;
-	const U32 mMaxRoundRobinQueueSize;
-	
+		
 	bool mQueueTimerIsRunning;
-	
-	request_queue_t mSortedQueue;
-	request_queue_t mRoundRobinQueue;
-	bool mCurrentQueueIsTheSortedQueue;
-};
 
+	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY);
+	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY);
+	template <typename T> friend void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY);
+
+};
 
 // MediaDataClient specific for the ObjectMedia cap
 class LLObjectMediaDataClient : public LLMediaDataClient
 {
 public:
+    LOG_CLASS(LLObjectMediaDataClient);
     LLObjectMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
 							F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
 							U32 max_retries = MAX_RETRIES,
 							U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
 							U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
-		: LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
+		: LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries),
+		  mCurrentQueueIsTheSortedQueue(true)
 		{}
-    virtual ~LLObjectMediaDataClient() {}
     
 	void fetchMedia(LLMediaDataClientObject *object); 
     void updateMedia(LLMediaDataClientObject *object);
-    
-protected:
-	// Subclasses must override this factory method to return a new responder
-	virtual Responder *createResponder(const request_ptr_t &request) const;
+
+	class RequestGet: public Request
+	{
+	public:
+		RequestGet(LLMediaDataClientObject *obj, LLMediaDataClient *mdc);
+		/*virtual*/ LLSD getPayload() const;
+		/*virtual*/ Responder *createResponder();
+	};
+
+	class RequestUpdate: public Request
+	{
+	public:
+		RequestUpdate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc);
+		/*virtual*/ LLSD getPayload() const;
+		/*virtual*/ Responder *createResponder();
+	};
+
+	// Returns true iff the queue is empty
+	virtual bool isEmpty() const;
 	
+	// Returns true iff the given object is in the queue
+	virtual bool isInQueue(const LLMediaDataClientObject::ptr_t &object);
+	    
+	// Remove the given object from the queue. Returns true iff the given object is removed.
+	virtual void removeFromQueue(const LLMediaDataClientObject::ptr_t &object);
+
+	virtual bool processQueueTimer();
+
+	virtual bool canServiceRequest(request_ptr_t request);
+
+protected:
 	// Subclasses must override to return a cap name
 	virtual const char *getCapabilityName() const;
-    
+	
+	virtual request_queue_t *getQueue();
+
+	// Puts the request into the appropriate queue
+	virtual void enqueue(Request*);
+		    
     class Responder : public LLMediaDataClient::Responder
     {
     public:
@@ -289,6 +346,16 @@ protected:
             : LLMediaDataClient::Responder(request) {}
         virtual void result(const LLSD &content);
     };
+private:
+	// The Get/Update data client needs a second queue to avoid object updates starving load-ins.
+	void swapCurrentQueue();
+	
+	request_queue_t mRoundRobinQueue;
+	bool mCurrentQueueIsTheSortedQueue;
+
+	// Comparator for sorting
+	static bool compareRequestScores(const request_ptr_t &o1, const request_ptr_t &o2);
+	void sortQueue();
 };
 
 
@@ -296,6 +363,7 @@ protected:
 class LLObjectMediaNavigateClient : public LLMediaDataClient
 {
 public:
+    LOG_CLASS(LLObjectMediaNavigateClient);
 	// NOTE: from llmediaservice.h
 	static const int ERROR_PERMISSION_DENIED_CODE = 8002;
 	
@@ -306,14 +374,24 @@ public:
 								U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
 		: LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
 		{}
-    virtual ~LLObjectMediaNavigateClient() {}
     
     void navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url);
+
+	// Puts the request into the appropriate queue
+	virtual void enqueue(Request*);
+
+	class RequestNavigate: public Request
+	{
+	public:
+		RequestNavigate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc, U8 texture_index, const std::string &url);
+		/*virtual*/ LLSD getPayload() const;
+		/*virtual*/ Responder *createResponder();
+		/*virtual*/ std::string getURL() { return mURL; }
+	private:
+		std::string mURL;
+	};
     
 protected:
-	// Subclasses must override this factory method to return a new responder
-	virtual Responder *createResponder(const request_ptr_t &request) const;
-	
 	// Subclasses must override to return a cap name
 	virtual const char *getCapabilityName() const;
 
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index e4d6a45ee8df52296c5a575097a5bad95eb1fafc..18bba6e358c657091f06a286670a943e05680fc8 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -810,9 +810,9 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
 		}
 	}
 
-	childSetVisible("bg_icon", visible && fpVisible);
-	childSetVisible("bg_icon_no_fav_bevel", visible && !fpVisible);
-	childSetVisible("bg_icon_no_nav_bevel", !visible && fpVisible);
+	getChildView("bg_icon")->setVisible( visible && fpVisible);
+	getChildView("bg_icon_no_fav_bevel")->setVisible( visible && !fpVisible);
+	getChildView("bg_icon_no_nav_bevel")->setVisible( !visible && fpVisible);
 }
 
 void LLNavigationBar::showFavoritesPanel(BOOL visible)
@@ -877,9 +877,9 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
 		getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
 	}
 
-	childSetVisible("bg_icon", npVisible && visible);
-	childSetVisible("bg_icon_no_fav_bevel", npVisible && !visible);
-	childSetVisible("bg_icon_no_nav_bevel", !npVisible && visible);
+	getChildView("bg_icon")->setVisible( npVisible && visible);
+	getChildView("bg_icon_no_fav_bevel")->setVisible( npVisible && !visible);
+	getChildView("bg_icon_no_nav_bevel")->setVisible( !npVisible && visible);
 
 	fb->setVisible(visible);
 }
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 9bef0a6192e532f313368c4fab6b8aed23746371..4f9845d704297aeef8599bb2ffdbb91fe31d77a3 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -388,7 +388,7 @@ LLGestureComboList::~LLGestureComboList()
 LLCtrlListInterface* LLGestureComboList::getListInterface()
 {
 	return mList;
-};
+}
 
 LLNearbyChatBar::LLNearbyChatBar() 
 	: LLPanel()
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 3eda077b8787291f7e4f921daaba6480b120163d..51f9a03a9cff99e08126948b70ebb18a0da5a1b4 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -398,6 +398,12 @@ void LLOutfitsList::onOpen(const LLSD& /*info*/)
 
 		mIsInitialized = true;
 	}
+
+	LLAccordionCtrlTab* selected_tab = mAccordion->getSelectedTab();
+	if (!selected_tab) return;
+
+	// Pass focus to the selected outfit tab.
+	selected_tab->showAndFocusHeader();
 }
 
 void LLOutfitsList::refreshList(const LLUUID& category_id)
@@ -1050,25 +1056,37 @@ void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
 
 void LLOutfitsList::onCOFChanged()
 {
-	LLInventoryModel::changed_items_t changed_linked_items;
+	LLInventoryModel::cat_array_t cat_array;
+	LLInventoryModel::item_array_t item_array;
 
-	const LLInventoryModel::changed_items_t& changed_items = gInventory.getChangedIDs();
-	for (LLInventoryModel::changed_items_t::const_iterator iter = changed_items.begin();
-		 iter != changed_items.end();
-		 ++iter)
+	// Collect current COF items
+	gInventory.collectDescendents(
+		LLAppearanceMgr::instance().getCOF(),
+		cat_array,
+		item_array,
+		LLInventoryModel::EXCLUDE_TRASH);
+
+	uuid_vec_t vnew;
+	uuid_vec_t vadded;
+	uuid_vec_t vremoved;
+
+	// From gInventory we get the UUIDs of links that are currently in COF.
+	// These links UUIDs are not the same UUIDs that we have in each wearable items list.
+	// So we collect base items' UUIDs to find them or links that point to them in wearable
+	// items lists and update their worn state there.
+	for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin();
+		iter != item_array.end();
+		++iter)
 	{
-		LLViewerInventoryItem* item = gInventory.getItem(*iter);
-		if (item)
-		{
-			// From gInventory we get the UUIDs of new links added to COF
-			// or removed from COF. These links UUIDs are not the same UUIDs
-			// that we have in each wearable items list. So we collect base items
-			// UUIDs to find all items or links that point to same base items in wearable
-			// items lists and update their worn state there.
-			changed_linked_items.insert(item->getLinkedUUID());
-		}
+		vnew.push_back((*iter)->getLinkedUUID());
 	}
 
+	// We need to update only items that were added or removed from COF.
+	LLCommonUtils::computeDifference(vnew, mCOFLinkedItems, vadded, vremoved);
+
+	// Store the ids of items currently linked from COF.
+	mCOFLinkedItems = vnew;
+
 	for (outfits_map_t::iterator iter = mOutfitsMap.begin();
 			iter != mOutfitsMap.end();
 			++iter)
@@ -1079,9 +1097,13 @@ void LLOutfitsList::onCOFChanged()
 		LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
 		if (!list) continue;
 
+		// Append removed ids to added ids because we should update all of them.
+		vadded.reserve(vadded.size() + vremoved.size());
+		vadded.insert(vadded.end(), vremoved.begin(), vremoved.end());
+
 		// Every list updates the labels of changed items  or
 		// the links that point to these items.
-		list->updateChangedItems(changed_linked_items);
+		list->updateChangedItems(vadded);
 	}
 }
 
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index 25aeab2cb74c3700034a88130e36727a0f367d91..37b909c93e191fbebd7bb093b3e6552c0c20d936 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -209,6 +209,10 @@ private:
 	typedef outfits_map_t::value_type					outfits_map_value_t;
 	outfits_map_t					mOutfitsMap;
 
+	// IDs of original items which are worn and linked in COF.
+	// Used to monitor COF changes for updating items worn state. See EXT-8636.
+	uuid_vec_t						mCOFLinkedItems;
+
 	LLOutfitListGearMenu*			mGearMenu;
 	LLListContextMenu*				mOutfitMenu;
 
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 38a8e17827183f4f1d66f1f1419d24a1431dc069..68ca65420a8f757e390c18a241354b6b80ea9f1d 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -170,14 +170,14 @@ void LLPanelAvatarNotes::onOpen(const LLSD& key)
 	fillRightsData();
 
 	//Disable "Add Friend" button for friends.
-	childSetEnabled("add_friend", !LLAvatarActions::isFriend(getAvatarId()));
+	getChildView("add_friend")->setEnabled(!LLAvatarActions::isFriend(getAvatarId()));
 }
 
 void LLPanelAvatarNotes::fillRightsData()
 {
-	childSetValue("status_check", FALSE);
-	childSetValue("map_check", FALSE);
-	childSetValue("objects_check", FALSE);
+	getChild<LLUICtrl>("status_check")->setValue(FALSE);
+	getChild<LLUICtrl>("map_check")->setValue(FALSE);
+	getChild<LLUICtrl>("objects_check")->setValue(FALSE);
 
 	const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(getAvatarId());
 	// If true - we are viewing friend's profile, enable check boxes and set values.
@@ -185,9 +185,9 @@ void LLPanelAvatarNotes::fillRightsData()
 	{
 		S32 rights = relation->getRightsGrantedTo();
 
-		childSetValue("status_check",LLRelationship::GRANT_ONLINE_STATUS & rights ? TRUE : FALSE);
-		childSetValue("map_check",LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE);
-		childSetValue("objects_check",LLRelationship::GRANT_MODIFY_OBJECTS & rights ? TRUE : FALSE);
+		getChild<LLUICtrl>("status_check")->setValue(LLRelationship::GRANT_ONLINE_STATUS & rights ? TRUE : FALSE);
+		getChild<LLUICtrl>("map_check")->setValue(LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE);
+		getChild<LLUICtrl>("objects_check")->setValue(LLRelationship::GRANT_MODIFY_OBJECTS & rights ? TRUE : FALSE);
 
 	}
 
@@ -196,7 +196,7 @@ void LLPanelAvatarNotes::fillRightsData()
 
 void LLPanelAvatarNotes::onCommitNotes()
 {
-	std::string notes = childGetValue("notes_edit").asString();
+	std::string notes = getChild<LLUICtrl>("notes_edit")->getValue().asString();
 	LLAvatarPropertiesProcessor::getInstance()-> sendNotes(getAvatarId(),notes);
 }
 
@@ -211,8 +211,8 @@ void LLPanelAvatarNotes::rightsConfirmationCallback(const LLSD& notification,
 	}
 	else
 	{
-		childSetValue("objects_check",
-				childGetValue("objects_check").asBoolean() ? FALSE : TRUE);
+		getChild<LLUICtrl>("objects_check")->setValue(
+				getChild<LLUICtrl>("objects_check")->getValue().asBoolean() ? FALSE : TRUE);
 	}
 }
 
@@ -255,14 +255,14 @@ void LLPanelAvatarNotes::onCommitRights()
 
 	S32 rights = 0;
 
-	if(childGetValue("status_check").asBoolean())
+	if(getChild<LLUICtrl>("status_check")->getValue().asBoolean())
 		rights |= LLRelationship::GRANT_ONLINE_STATUS;
-	if(childGetValue("map_check").asBoolean())
+	if(getChild<LLUICtrl>("map_check")->getValue().asBoolean())
 		rights |= LLRelationship::GRANT_MAP_LOCATION;
-	if(childGetValue("objects_check").asBoolean())
+	if(getChild<LLUICtrl>("objects_check")->getValue().asBoolean())
 		rights |= LLRelationship::GRANT_MODIFY_OBJECTS;
 
-	bool allow_modify_objects = childGetValue("objects_check").asBoolean();
+	bool allow_modify_objects = getChild<LLUICtrl>("objects_check")->getValue().asBoolean();
 
 	// if modify objects checkbox clicked
 	if (buddy_relationship->isRightGrantedTo(
@@ -285,8 +285,8 @@ void LLPanelAvatarNotes::processProperties(void* data, EAvatarProcessorType type
 		LLAvatarNotes* avatar_notes = static_cast<LLAvatarNotes*>(data);
 		if(avatar_notes && getAvatarId() == avatar_notes->target_id)
 		{
-			childSetValue("notes_edit",avatar_notes->notes);
-			childSetEnabled("notes edit", true);
+			getChild<LLUICtrl>("notes_edit")->setValue(avatar_notes->notes);
+			getChildView("notes edit")->setEnabled(true);
 
 			LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
 		}
@@ -295,15 +295,15 @@ void LLPanelAvatarNotes::processProperties(void* data, EAvatarProcessorType type
 
 void LLPanelAvatarNotes::resetData()
 {
-	childSetValue("notes_edit",LLStringUtil::null);
+	getChild<LLUICtrl>("notes_edit")->setValue(LLStringUtil::null);
 	// Default value is TRUE
-	childSetValue("status_check", TRUE);
+	getChild<LLUICtrl>("status_check")->setValue(TRUE);
 }
 
 void LLPanelAvatarNotes::resetControls()
 {
 	//Disable "Add Friend" button for friends.
-	childSetEnabled("add_friend", TRUE);
+	getChildView("add_friend")->setEnabled(TRUE);
 
 	enableCheckboxes(false);
 }
@@ -335,9 +335,9 @@ void LLPanelAvatarNotes::onShareButtonClick()
 
 void LLPanelAvatarNotes::enableCheckboxes(bool enable)
 {
-	childSetEnabled("status_check", enable);
-	childSetEnabled("map_check", enable);
-	childSetEnabled("objects_check", enable);
+	getChildView("status_check")->setEnabled(enable);
+	getChildView("map_check")->setEnabled(enable);
+	getChildView("objects_check")->setEnabled(enable);
 }
 
 LLPanelAvatarNotes::~LLPanelAvatarNotes()
@@ -355,7 +355,7 @@ LLPanelAvatarNotes::~LLPanelAvatarNotes()
 // virtual, called by LLAvatarTracker
 void LLPanelAvatarNotes::changed(U32 mask)
 {
-	childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId()));
+	getChildView("teleport")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(getAvatarId()));
 
 	// update rights to avoid have checkboxes enabled when friendship is terminated. EXT-4947.
 	fillRightsData();
@@ -369,7 +369,7 @@ void LLPanelAvatarNotes::onChange(EStatusType status, const std::string &channel
 		return;
 	}
 
-	childSetEnabled("call", LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking());
+	getChildView("call")->setEnabled(LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking());
 }
 
 void LLPanelAvatarNotes::setAvatarId(const LLUUID& id)
@@ -451,17 +451,17 @@ void LLPanelProfileTab::updateButtons()
 	
 	if(LLAvatarActions::isFriend(getAvatarId()))
 	{
-		childSetEnabled("teleport", is_buddy_online);
+		getChildView("teleport")->setEnabled(is_buddy_online);
 	}
 	else
 	{
-		childSetEnabled("teleport", true);
+		getChildView("teleport")->setEnabled(true);
 	}
 
 	bool enable_map_btn = (is_buddy_online &&
 			       is_agent_mappable(getAvatarId()))
 		|| gAgent.isGodlike();
-	childSetEnabled("show_on_map_btn", enable_map_btn);
+	getChildView("show_on_map_btn")->setEnabled(enable_map_btn);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -522,7 +522,7 @@ void LLPanelAvatarProfile::onOpen(const LLSD& key)
 	mGroups.clear();
 
 	//Disable "Add Friend" button for friends.
-	childSetEnabled("add_friend", !LLAvatarActions::isFriend(getAvatarId()));
+	getChildView("add_friend")->setEnabled(!LLAvatarActions::isFriend(getAvatarId()));
 }
 
 void LLPanelAvatarProfile::updateData()
@@ -538,32 +538,32 @@ void LLPanelAvatarProfile::updateData()
 
 void LLPanelAvatarProfile::resetControls()
 {
-	childSetVisible("status_panel", true);
-	childSetVisible("profile_buttons_panel", true);
-	childSetVisible("title_groups_text", true);
-	childSetVisible("sl_groups", true);
-	childSetEnabled("add_friend", true);
+	getChildView("status_panel")->setVisible( true);
+	getChildView("profile_buttons_panel")->setVisible( true);
+	getChildView("title_groups_text")->setVisible( true);
+	getChildView("sl_groups")->setVisible( true);
+	getChildView("add_friend")->setEnabled(true);
 
-	childSetVisible("status_me_panel", false);
-	childSetVisible("profile_me_buttons_panel", false);
-	childSetVisible("account_actions_panel", false);
+	getChildView("status_me_panel")->setVisible( false);
+	getChildView("profile_me_buttons_panel")->setVisible( false);
+	getChildView("account_actions_panel")->setVisible( false);
 }
 
 void LLPanelAvatarProfile::resetData()
 {
 	mGroups.clear();
-	childSetValue("2nd_life_pic",LLUUID::null);
-	childSetValue("real_world_pic",LLUUID::null);
-	childSetValue("online_status",LLStringUtil::null);
-	childSetValue("status_message",LLStringUtil::null);
-	childSetValue("sl_description_edit",LLStringUtil::null);
-	childSetValue("fl_description_edit",LLStringUtil::null);
-	childSetValue("sl_groups",LLStringUtil::null);
-	childSetValue("homepage_edit",LLStringUtil::null);
-	childSetValue("register_date",LLStringUtil::null);
-	childSetValue("acc_status_text",LLStringUtil::null);
-	childSetTextArg("partner_text", "[FIRST]", LLStringUtil::null);
-	childSetTextArg("partner_text", "[LAST]", LLStringUtil::null);
+	getChild<LLUICtrl>("2nd_life_pic")->setValue(LLUUID::null);
+	getChild<LLUICtrl>("real_world_pic")->setValue(LLUUID::null);
+	getChild<LLUICtrl>("online_status")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("status_message")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("sl_description_edit")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("fl_description_edit")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("sl_groups")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("homepage_edit")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("register_date")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("acc_status_text")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("partner_text")->setTextArg("[FIRST]", LLStringUtil::null);
+	getChild<LLUICtrl>("partner_text")->setTextArg("[LAST]", LLStringUtil::null);
 }
 
 void LLPanelAvatarProfile::processProperties(void* data, EAvatarProcessorType type)
@@ -625,7 +625,7 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g
 		groups += group_url;
 	}
 
-	childSetValue("sl_groups", groups);
+	getChild<LLUICtrl>("sl_groups")->setValue(groups);
 }
 
 void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)
@@ -641,15 +641,15 @@ void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)
 	}
 	args["[AGE]"] = LLDateUtil::ageFromDate( avatar_data->born_on, LLDate::now());
 	std::string register_date = getString("RegisterDateFormat", args);
-	childSetValue("register_date", register_date );
-	childSetValue("sl_description_edit", avatar_data->about_text);
-	childSetValue("fl_description_edit",avatar_data->fl_about_text);
-	childSetValue("2nd_life_pic", avatar_data->image_id);
-	childSetValue("real_world_pic", avatar_data->fl_image_id);
-	childSetValue("homepage_edit", avatar_data->profile_url);
+	getChild<LLUICtrl>("register_date")->setValue(register_date );
+	getChild<LLUICtrl>("sl_description_edit")->setValue(avatar_data->about_text);
+	getChild<LLUICtrl>("fl_description_edit")->setValue(avatar_data->fl_about_text);
+	getChild<LLUICtrl>("2nd_life_pic")->setValue(avatar_data->image_id);
+	getChild<LLUICtrl>("real_world_pic")->setValue(avatar_data->fl_image_id);
+	getChild<LLUICtrl>("homepage_edit")->setValue(avatar_data->profile_url);
 
 	// Hide home page textbox if no page was set to fix "homepage URL appears clickable without URL - EXT-4734"
-	childSetVisible("homepage_edit", !avatar_data->profile_url.empty());
+	getChildView("homepage_edit")->setVisible( !avatar_data->profile_url.empty());
 }
 
 void LLPanelAvatarProfile::fillPartnerData(const LLAvatarData* avatar_data)
@@ -675,7 +675,7 @@ void LLPanelAvatarProfile::fillAccountStatus(const LLAvatarData* avatar_data)
 	// dataserver/lldataavatar.cpp for privacy considerations
 	args["[AGEVERIFICATION]"] = "";
 	std::string caption_text = getString("CaptionTextAcctInfo", args);
-	childSetValue("acc_status_text", caption_text);
+	getChild<LLUICtrl>("acc_status_text")->setValue(caption_text);
 }
 
 void LLPanelAvatarProfile::pay()
@@ -791,7 +791,7 @@ LLPanelAvatarProfile::~LLPanelAvatarProfile()
 // virtual, called by LLAvatarTracker
 void LLPanelAvatarProfile::changed(U32 mask)
 {
-	childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId()));
+	getChildView("teleport")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(getAvatarId()));
 }
 
 // virtual
@@ -802,7 +802,7 @@ void LLPanelAvatarProfile::onChange(EStatusType status, const std::string &chann
 		return;
 	}
 
-	childSetEnabled("call", LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking());
+	getChildView("call")->setEnabled(LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking());
 }
 
 void LLPanelAvatarProfile::setAvatarId(const LLUUID& id)
@@ -855,12 +855,12 @@ void LLPanelMyProfile::processProfileProperties(const LLAvatarData* avatar_data)
 
 void LLPanelMyProfile::resetControls()
 {
-	childSetVisible("status_panel", false);
-	childSetVisible("profile_buttons_panel", false);
-	childSetVisible("title_groups_text", false);
-	childSetVisible("sl_groups", false);
-	childSetVisible("status_me_panel", true);
-	childSetVisible("profile_me_buttons_panel", true);
+	getChildView("status_panel")->setVisible( false);
+	getChildView("profile_buttons_panel")->setVisible( false);
+	getChildView("title_groups_text")->setVisible( false);
+	getChildView("sl_groups")->setVisible( false);
+	getChildView("status_me_panel")->setVisible( true);
+	getChildView("profile_me_buttons_panel")->setVisible( true);
 }
 
 
diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp
index 6fe29ed6bb9b1a0141cf50f5ea407c1bc304b24e..fd2e961cb7a4d11d5969d164c18d8544ae32dbe5 100644
--- a/indra/newview/llpanelblockedlist.cpp
+++ b/indra/newview/llpanelblockedlist.cpp
@@ -126,7 +126,7 @@ void LLPanelBlockedList::refreshBlockedList()
 void LLPanelBlockedList::updateButtons()
 {
 	bool hasSelected = NULL != mBlockedList->getFirstSelected();
-	childSetEnabled("Unblock", hasSelected);
+	getChildView("Unblock")->setEnabled(hasSelected);
 }
 
 
@@ -263,7 +263,7 @@ void LLFloaterGetBlockedObjectName::applyBlocking()
 {
 	if (mGetObjectNameCallback)
 	{
-		const std::string& text = childGetValue("object_name").asString();
+		const std::string& text = getChild<LLUICtrl>("object_name")->getValue().asString();
 		mGetObjectNameCallback(text);
 	}
 	closeFloater();
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index f61fd1f39e9e6fd394cf657c67efcdac8c8a8e7e..bf7214eb3b970fa882dea4fe383e5f2bee9aeeb9 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -32,53 +32,34 @@
 
 #include "llpanelclassified.h"
 
-#include "lldir.h"
 #include "lldispatcher.h"
 #include "llfloaterreg.h"
 #include "llhttpclient.h"
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
 #include "llparcel.h"
-#include "lltabcontainer.h"
-#include "message.h"
 
 #include "llagent.h"
-#include "llavataractions.h"
-#include "llbutton.h"
-#include "llcheckboxctrl.h"
 #include "llclassifiedflags.h"
 #include "llclassifiedstatsresponder.h"
 #include "llcommandhandler.h" // for classified HTML detail page click tracking
-#include "llviewercontrol.h"
+#include "lliconctrl.h"
 #include "lllineeditor.h"
-#include "lltextbox.h"
 #include "llcombobox.h"
 #include "lltexturectrl.h"
 #include "lltexteditor.h"
-#include "lluiconstants.h"
-#include "llurldispatcher.h"	// for classified HTML detail click teleports
-#include "lluictrlfactory.h"
 #include "llviewerparcelmgr.h"
-#include "llviewerwindow.h"
-#include "llworldmap.h"
 #include "llfloaterworldmap.h"
 #include "llviewergenericmessage.h"	// send_generic_message
 #include "llviewerregion.h"
-#include "llviewerwindow.h"	// for window width, height
-#include "llappviewer.h"	// abortQuit()
 #include "lltrans.h"
 #include "llscrollcontainer.h"
 #include "llstatusbar.h"
 
 const S32 MINIMUM_PRICE_FOR_LISTING = 50;	// L$
-const S32 MATURE_UNDEFINED = -1;
-const S32 MATURE_CONTENT = 1;
-const S32 PG_CONTENT = 2;
-const S32 DECLINE_TO_STATE = 0;
 
 //static
-std::list<LLPanelClassified*> LLPanelClassified::sAllPanels;
-std::list<LLPanelClassifiedInfo*> LLPanelClassifiedInfo::sAllPanels;
+LLPanelClassifiedInfo::panel_list_t LLPanelClassifiedInfo::sAllPanels;
 
 // "classifiedclickthrough"
 // strings[0] = classified_id
@@ -125,1040 +106,6 @@ public:
 	}
 };
 
-
-/* Re-expose this if we need to have classified ad HTML detail
-   pages.  JC
-
-// We need to count classified teleport clicks from the search HTML detail pages,
-// so we need have a teleport that also sends a click count message.
-class LLClassifiedTeleportHandler : public LLCommandHandler
-{
-public:
-	// don't allow from external browsers because it moves you immediately
-	LLClassifiedTeleportHandler() : LLCommandHandler("classifiedteleport", UNTRUSTED_BLOCK) { }
-
-	bool handle(const LLSD& tokens, const LLSD& queryMap)
-	{
-		// Need at least classified id and region name, so 2 params
-		if (tokens.size() < 2) return false;
-		LLUUID classified_id = tokens[0].asUUID();
-		if (classified_id.isNull()) return false;
-		// *HACK: construct a SLURL to do the teleport
-		std::string url("secondlife:///app/teleport/");
-		// skip the uuid we took off above, rebuild URL
-		// separated by slashes.
-		for (S32 i = 1; i < tokens.size(); ++i)
-		{
-			url += tokens[i].asString();
-			url += "/";
-		}
-		llinfos << "classified teleport to " << url << llendl;
-		// *TODO: separately track old search, sidebar, and new search
-		// Right now detail HTML pages count as new search.
-		const bool from_search = true;
-		LLPanelClassified::sendClassifiedClickMessage(classified_id, "teleport", from_search);
-		// Invoke teleport
-		LLMediaCtrl* web = NULL;
-		const bool trusted_browser = true;
-		return LLURLDispatcher::dispatch(url, web, trusted_browser);
-	}
-};
-// Creating the object registers with the dispatcher.
-LLClassifiedTeleportHandler gClassifiedTeleportHandler;
-*/
-
-LLPanelClassified::LLPanelClassified(bool in_finder, bool from_search)
-:	LLPanel(),
-	mInFinder(in_finder),
-	mFromSearch(from_search),
-	mDirty(false),
-	mForceClose(false),
-	mLocationChanged(false),
-	mClassifiedID(),
-	mCreatorID(),
-	mPriceForListing(0),
-	mDataRequested(FALSE),
-	mPaidFor(FALSE),
-	mPosGlobal(),
-	mSnapshotCtrl(NULL),
-	mNameEditor(NULL),
-	mDescEditor(NULL),
-	mLocationEditor(NULL),
-	mCategoryCombo(NULL),
-	mMatureCombo(NULL),
-	mAutoRenewCheck(NULL),
-	mUpdateBtn(NULL),
-	mTeleportBtn(NULL),
-	mMapBtn(NULL),
-	mProfileBtn(NULL),
-	mInfoText(NULL),
-	mSetBtn(NULL),
-	mClickThroughText(NULL),
-	mTeleportClicksOld(0),
-	mMapClicksOld(0),
-	mProfileClicksOld(0),
-	mTeleportClicksNew(0),
-	mMapClicksNew(0),
-	mProfileClicksNew(0)
-
-{
-    sAllPanels.push_back(this);
-
-	std::string classified_def_file;
-	if (mInFinder)
-	{
-		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_classified.xml");
-	}
-	else
-	{
-		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_classified.xml");
-	}
-
-	// Register dispatcher
-	gGenericDispatcher.addHandler("classifiedclickthrough", 
-								  &sClassifiedClickThrough);
-}
-
-
-LLPanelClassified::~LLPanelClassified()
-{
-    sAllPanels.remove(this);
-}
-
-
-void LLPanelClassified::reset()
-{
-	mClassifiedID.setNull();
-	mCreatorID.setNull();
-	mParcelID.setNull();
-
-	// Don't request data, this isn't valid
-	mDataRequested = TRUE;
-
-	mDirty = false;
-	mPaidFor = FALSE;
-
-	mPosGlobal.clearVec();
-
-	clearCtrls();
-	resetDirty();
-}
-
-
-BOOL LLPanelClassified::postBuild()
-{
-    mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl");
-	mSnapshotCtrl->setCommitCallback(onCommitAny, this);
-	mSnapshotSize = mSnapshotCtrl->getRect();
-
-    mNameEditor = getChild<LLLineEditor>("given_name_editor");
-	mNameEditor->setMaxTextLength(DB_PARCEL_NAME_LEN);
-	mNameEditor->setCommitOnFocusLost(TRUE);
-	mNameEditor->setFocusReceivedCallback(boost::bind(focusReceived, _1, this));
-	mNameEditor->setCommitCallback(onCommitAny, this);
-	mNameEditor->setPrevalidate( LLTextValidate::validateASCII );
-
-    mDescEditor = getChild<LLTextEditor>("desc_editor");
-	mDescEditor->setCommitOnFocusLost(TRUE);
-	mDescEditor->setFocusReceivedCallback(boost::bind(focusReceived, _1, this));
-	mDescEditor->setCommitCallback(onCommitAny, this);
-	
-    mLocationEditor = getChild<LLLineEditor>("location_editor");
-
-    mSetBtn = getChild<LLButton>( "set_location_btn");
-    mSetBtn->setClickedCallback(onClickSet, this);
-
-    mTeleportBtn = getChild<LLButton>( "classified_teleport_btn");
-    mTeleportBtn->setClickedCallback(onClickTeleport, this);
-
-    mMapBtn = getChild<LLButton>( "classified_map_btn");
-    mMapBtn->setClickedCallback(onClickMap, this);
-
-	if(mInFinder)
-	{
-		mProfileBtn  = getChild<LLButton>( "classified_profile_btn");
-		mProfileBtn->setClickedCallback(onClickProfile, this);
-	}
-
-	mCategoryCombo = getChild<LLComboBox>( "classified_category_combo");
-	LLClassifiedInfo::cat_map::iterator iter;
-	for (iter = LLClassifiedInfo::sCategories.begin();
-		iter != LLClassifiedInfo::sCategories.end();
-		iter++)
-	{
-		mCategoryCombo->add(LLTrans::getString(iter->second), (void *)((intptr_t)iter->first), ADD_BOTTOM);
-	}
-	mCategoryCombo->setCurrentByIndex(0);
-	mCategoryCombo->setCommitCallback(onCommitAny, this);
-
-	mMatureCombo = getChild<LLComboBox>( "classified_mature_check");
-	mMatureCombo->setCurrentByIndex(0);
-	mMatureCombo->setCommitCallback(onCommitAny, this);
-	if (gAgent.wantsPGOnly())
-	{
-		// Teens don't get to set mature flag. JC
-		mMatureCombo->setVisible(FALSE);
-		mMatureCombo->setCurrentByIndex(PG_CONTENT);
-	}
-
-	if (!mInFinder)
-	{
-		mAutoRenewCheck = getChild<LLCheckBoxCtrl>( "auto_renew_check");
-		mAutoRenewCheck->setCommitCallback(onCommitAny, this);
-	}
-
-	mUpdateBtn = getChild<LLButton>("classified_update_btn");
-    mUpdateBtn->setClickedCallback(onClickUpdate, this);
-
-	if (!mInFinder)
-	{
-		mClickThroughText = getChild<LLTextBox>("click_through_text");
-	}
-	
-	resetDirty();
-    return TRUE;
-}
-
-BOOL LLPanelClassified::titleIsValid()
-{
-	// Disallow leading spaces, punctuation, etc. that screw up
-	// sort order.
-	const std::string& name = mNameEditor->getText();
-	if (name.empty())
-	{
-		LLNotificationsUtil::add("BlankClassifiedName");
-		return FALSE;
-	}
-	if (!isalnum(name[0]))
-	{
-		LLNotificationsUtil::add("ClassifiedMustBeAlphanumeric");
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-void LLPanelClassified::apply()
-{
-	// Apply is used for automatically saving results, so only
-	// do that if there is a difference, and this is a save not create.
-	if (checkDirty() && mPaidFor)
-	{
-		sendClassifiedInfoUpdate();
-	}
-}
-
-bool LLPanelClassified::saveCallback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
-	switch(option)
-	{
-		case 0: // Save
-			sendClassifiedInfoUpdate();
-			// fall through to close
-
-		case 1: // Don't Save
-			{
-				mForceClose = true;
-				// Close containing floater
-				LLFloater* parent_floater = gFloaterView->getParentFloater(this);
-				if (parent_floater)
-				{
-					parent_floater->closeFloater();
-				}
-			}
-			break;
-
-		case 2: // Cancel
-		default:
-            LLAppViewer::instance()->abortQuit();
-			break;
-	}
-	return false;
-}
-
-
-BOOL LLPanelClassified::canClose()
-{
-	if (mForceClose || !checkDirty()) 
-		return TRUE;
-
-	LLSD args;
-	args["NAME"] = mNameEditor->getText();
-	LLNotificationsUtil::add("ClassifiedSave", args, LLSD(), boost::bind(&LLPanelClassified::saveCallback, this, _1, _2));
-	return FALSE;
-}
-
-// Fill in some reasonable defaults for a new classified.
-void LLPanelClassified::initNewClassified()
-{
-	// TODO:  Don't generate this on the client.
-	mClassifiedID.generate();
-
-	mCreatorID = gAgent.getID();
-
-	mPosGlobal = gAgent.getPositionGlobal();
-
-	mPaidFor = FALSE;
-
-	// Try to fill in the current parcel
-	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-	if (parcel)
-	{
-		mNameEditor->setText(parcel->getName());
-		//mDescEditor->setText(parcel->getDesc());
-		mSnapshotCtrl->setImageAssetID(parcel->getSnapshotID());
-		//mPriceEditor->setText("0");
-		mCategoryCombo->setCurrentByIndex(0);
-	}
-
-	mUpdateBtn->setLabel(getString("publish_txt"));
-	
-	// simulate clicking the "location" button
-	LLPanelClassified::onClickSet(this);
-}
-
-
-void LLPanelClassified::setClassifiedID(const LLUUID& id)
-{
-	mClassifiedID = id;
-}
-
-//static
-void LLPanelClassified::setClickThrough(const LLUUID& classified_id,
-										S32 teleport,
-										S32 map,
-										S32 profile,
-										bool from_new_table)
-{
-	for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
-	{
-		LLPanelClassified* self = *iter;
-		// For top picks, must match pick id
-		if (self->mClassifiedID != classified_id)
-		{
-			continue;
-		}
-
-		// We need to check to see if the data came from the new stat_table 
-		// or the old classified table. We also need to cache the data from 
-		// the two separate sources so as to display the aggregate totals.
-
-		if (from_new_table)
-		{
-			self->mTeleportClicksNew = teleport;
-			self->mMapClicksNew = map;
-			self->mProfileClicksNew = profile;
-		}
-		else
-		{
-			self->mTeleportClicksOld = teleport;
-			self->mMapClicksOld = map;
-			self->mProfileClicksOld = profile;
-		}
-
-		if (self->mClickThroughText)
-		{
-			LLStringUtil::format_map_t args;
-			args["[TELEPORT]"] = llformat ("%d", self->mTeleportClicksNew + self->mTeleportClicksOld);
-			args["[MAP]"] = llformat ("%d", self->mMapClicksNew + self->mMapClicksOld);
-			args["[PROFILE]"] = llformat ("%d", self->mProfileClicksNew + self->mProfileClicksOld);
-			std::string msg = LLTrans::getString ("ClassifiedClicksTxt", args);
-			self->mClickThroughText->setText(msg);
-		}
-	}
-}
-
-// Schedules the panel to request data
-// from the server next time it is drawn.
-void LLPanelClassified::markForServerRequest()
-{
-	mDataRequested = FALSE;
-}
-
-
-std::string LLPanelClassified::getClassifiedName()
-{
-	return mNameEditor->getText();
-}
-
-
-void LLPanelClassified::sendClassifiedInfoRequest()
-{
-    LLMessageSystem *msg = gMessageSystem;
-
-	if (mClassifiedID != mRequestedID)
-	{
-		msg->newMessageFast(_PREHASH_ClassifiedInfoRequest);
-		msg->nextBlockFast(_PREHASH_AgentData);
-		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
-		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-		msg->nextBlockFast(_PREHASH_Data);
-		msg->addUUIDFast(_PREHASH_ClassifiedID, mClassifiedID);
-		gAgent.sendReliableMessage();
-
-		mDataRequested = TRUE;
-		mRequestedID = mClassifiedID;
-
-		// While we're at it let's get the stats from the new table if that
-		// capability exists.
-		std::string url = gAgent.getRegion()->getCapability("SearchStatRequest");
-		LLSD body;
-		body["classified_id"] = mClassifiedID;
-
-		if (!url.empty())
-		{
-			llinfos << "Classified stat request via capability" << llendl;
-			LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(mClassifiedID));
-		}
-	}
-}
-
-
-void LLPanelClassified::sendClassifiedInfoUpdate()
-{
-	// If we don't have a classified id yet, we'll need to generate one,
-	// otherwise we'll keep overwriting classified_id 00000 in the database.
-	if (mClassifiedID.isNull())
-	{
-		// TODO:  Don't do this on the client.
-		mClassifiedID.generate();
-	}
-
-	LLMessageSystem* msg = gMessageSystem;
-
-	msg->newMessageFast(_PREHASH_ClassifiedInfoUpdate);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->nextBlockFast(_PREHASH_Data);
-	msg->addUUIDFast(_PREHASH_ClassifiedID, mClassifiedID);
-	// TODO: fix this
-	U32 category = mCategoryCombo->getCurrentIndex() + 1;
-	msg->addU32Fast(_PREHASH_Category, category);
-	msg->addStringFast(_PREHASH_Name, mNameEditor->getText());
-	msg->addStringFast(_PREHASH_Desc, mDescEditor->getText());
-
-	// fills in on simulator if null
-	msg->addUUIDFast(_PREHASH_ParcelID, mParcelID);
-	// fills in on simulator if null
-	msg->addU32Fast(_PREHASH_ParentEstate, 0);
-	msg->addUUIDFast(_PREHASH_SnapshotID, mSnapshotCtrl->getImageAssetID());
-	msg->addVector3dFast(_PREHASH_PosGlobal, mPosGlobal);
-	BOOL mature = mMatureCombo->getCurrentIndex() == MATURE_CONTENT;
-	BOOL auto_renew = FALSE;
-	if (mAutoRenewCheck) 
-	{
-		auto_renew = mAutoRenewCheck->get();
-	}
-    // These flags doesn't matter here.
-    const bool adult_enabled = false;
-	const bool is_pg = false;
-	U8 flags = pack_classified_flags_request(auto_renew, is_pg, mature, adult_enabled);
-	msg->addU8Fast(_PREHASH_ClassifiedFlags, flags);
-	msg->addS32("PriceForListing", mPriceForListing);
-	gAgent.sendReliableMessage();
-
-	mDirty = false;
-}
-
-
-//static
-void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **)
-{
-	lldebugs << "processClassifiedInfoReply()" << llendl;
-    // Extract the agent id and verify the message is for this
-    // client.
-    LLUUID agent_id;
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
-    if (agent_id != gAgent.getID())
-    {
-        llwarns << "Agent ID mismatch in processClassifiedInfoReply"
-            << llendl;
-		return;
-    }
-
-    LLUUID classified_id;
-    msg->getUUIDFast(_PREHASH_Data, _PREHASH_ClassifiedID, classified_id);
-
-    LLUUID creator_id;
-    msg->getUUIDFast(_PREHASH_Data, _PREHASH_CreatorID, creator_id);
-
-    LLUUID parcel_id;
-    msg->getUUIDFast(_PREHASH_Data, _PREHASH_ParcelID, parcel_id);
-
-	std::string name;
-	msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name);
-
-	std::string desc;
-	msg->getStringFast(_PREHASH_Data, _PREHASH_Desc, desc);
-
-	LLUUID snapshot_id;
-	msg->getUUIDFast(_PREHASH_Data, _PREHASH_SnapshotID, snapshot_id);
-
-    // "Location text" is actually the original
-    // name that owner gave the parcel, and the location.
-	std::string location_text;
-
-    msg->getStringFast(_PREHASH_Data, _PREHASH_ParcelName, location_text);
-	if (!location_text.empty())
-	{
-		location_text.append(", ");
-	}
-
-	std::string sim_name;
-	msg->getStringFast(_PREHASH_Data, _PREHASH_SimName, sim_name);
-
-	LLVector3d pos_global;
-	msg->getVector3dFast(_PREHASH_Data, _PREHASH_PosGlobal, pos_global);
-
-    S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS;
-    S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS;
-	S32 region_z = llround((F32)pos_global.mdV[VZ]);
-
-	std::string buffer = llformat("%s (%d, %d, %d)", sim_name.c_str(), region_x, region_y, region_z);
-    location_text.append(buffer);
-
-	U8 flags;
-	msg->getU8Fast(_PREHASH_Data, _PREHASH_ClassifiedFlags, flags);
-	//BOOL enabled = is_cf_enabled(flags);
-	bool mature = is_cf_mature(flags);
-	bool auto_renew = is_cf_auto_renew(flags);
-
-	U32 date = 0;
-	msg->getU32Fast(_PREHASH_Data, _PREHASH_CreationDate, date);
-	time_t tim = date;
-
-	// future use
-	U32 expiration_date = 0;
-	msg->getU32("Data", "ExpirationDate", expiration_date);
-
-	U32 category = 0;
-	msg->getU32Fast(_PREHASH_Data, _PREHASH_Category, category);
-
-	S32 price_for_listing = 0;
-	msg->getS32("Data", "PriceForListing", price_for_listing);
-
-    // Look up the panel to fill in
-	for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
-	{
-		LLPanelClassified* self = *iter;
-		// For top picks, must match pick id
-		if (self->mClassifiedID != classified_id)
-		{
-			continue;
-		}
-
-        // Found the panel, now fill in the information
-		self->mClassifiedID = classified_id;
-		self->mCreatorID = creator_id;
-		self->mParcelID = parcel_id;
-		self->mPriceForListing = price_for_listing;
-		self->mSimName.assign(sim_name);
-		self->mPosGlobal = pos_global;
-
-		// Update UI controls
-        self->mNameEditor->setText(name);
-        self->mDescEditor->setText(desc);
-        self->mSnapshotCtrl->setImageAssetID(snapshot_id);
-        self->mLocationEditor->setText(location_text);
-		self->mLocationChanged = false;
-
-		self->mCategoryCombo->setCurrentByIndex(category - 1);
-		if(mature)
-		{
-			self->mMatureCombo->setCurrentByIndex(MATURE_CONTENT);
-		}
-		else
-		{
-			self->mMatureCombo->setCurrentByIndex(PG_CONTENT);
-		}
-		if (self->mAutoRenewCheck)
-		{
-			self->mAutoRenewCheck->set(auto_renew);
-		}
-
-		std::string dateStr = self->getString("dateStr");
-		LLSD substitution;
-		substitution["datetime"] = (S32) tim;
-		LLStringUtil::format (dateStr, substitution);
-
-		LLStringUtil::format_map_t string_args;
-		string_args["[DATE]"] = dateStr;
-		string_args["[AMT]"] = llformat("%d", price_for_listing);
-		self->childSetText("classified_info_text", self->getString("ad_placed_paid", string_args));
-
-		// If we got data from the database, we know the listing is paid for.
-		self->mPaidFor = TRUE;
-
-		self->mUpdateBtn->setLabel(self->getString("update_txt"));
-
-		self->resetDirty();
-
-		// I don't know if a second call is deliberate or a bad merge, so I'm leaving it here. 
-		self->resetDirty();
-    }
-}
-
-void LLPanelClassified::draw()
-{
-	refresh();
-
-	LLPanel::draw();
-}
-
-
-void LLPanelClassified::refresh()
-{
-	if (!mDataRequested)
-	{
-		sendClassifiedInfoRequest();
-	}
-
-    // Check for god mode
-    BOOL godlike = gAgent.isGodlike();
-	BOOL is_self = (gAgent.getID() == mCreatorID);
-
-    // Set button visibility/enablement appropriately
-	if (mInFinder)
-	{
-
-		// End user doesn't ned to see price twice, or date posted.
-
-		mSnapshotCtrl->setEnabled(godlike);
-		if(godlike)
-		{
-			//make it smaller, so text is more legible
-			mSnapshotCtrl->setOrigin(20, 175);
-			mSnapshotCtrl->reshape(300, 200);
-		}
-		else
-		{
-			mSnapshotCtrl->setOrigin(mSnapshotSize.mLeft, mSnapshotSize.mBottom);
-			mSnapshotCtrl->reshape(mSnapshotSize.getWidth(), mSnapshotSize.getHeight());
-			//normal
-		}
-		mNameEditor->setEnabled(godlike);
-		mDescEditor->setEnabled(godlike);
-		mCategoryCombo->setEnabled(godlike);
-		mCategoryCombo->setVisible(godlike);
-
-		mMatureCombo->setEnabled(godlike);
-		mMatureCombo->setVisible(godlike);
-
-		// Jesse (who is the only one who uses this, as far as we can tell
-		// Says that he does not want a set location button - he has used it
-		// accidently in the past.
-		mSetBtn->setVisible(FALSE);
-		mSetBtn->setEnabled(FALSE);
-
-		mUpdateBtn->setEnabled(godlike);
-		mUpdateBtn->setVisible(godlike);
-	}
-	else
-	{
-		mSnapshotCtrl->setEnabled(is_self);
-		mNameEditor->setEnabled(is_self);
-		mDescEditor->setEnabled(is_self);
-		//mPriceEditor->setEnabled(is_self);
-		mCategoryCombo->setEnabled(is_self);
-		mMatureCombo->setEnabled(is_self);
-
-		if( is_self )
-		{							
-			if( mMatureCombo->getCurrentIndex() == 0 )
-			{
-				// It's a new panel.
-				// PG regions should have PG classifieds. AO should have mature.
-								
-				setDefaultAccessCombo();
-			}
-		}
-		
-		if (mAutoRenewCheck)
-		{
-			mAutoRenewCheck->setEnabled(is_self);
-			mAutoRenewCheck->setVisible(is_self);
-		}
-		
-		mClickThroughText->setEnabled(is_self);
-		mClickThroughText->setVisible(is_self);
-
-		mSetBtn->setVisible(is_self);
-		mSetBtn->setEnabled(is_self);
-
-		mUpdateBtn->setEnabled(is_self && checkDirty());
-		mUpdateBtn->setVisible(is_self);
-	}
-}
-
-// static
-void LLPanelClassified::onClickUpdate(void* data)
-{
-	LLPanelClassified* self = (LLPanelClassified*)data;
-
-	if(self == NULL) return;
-
-	// Disallow leading spaces, punctuation, etc. that screw up
-	// sort order.
-	if ( ! self->titleIsValid() )
-	{
-		return;
-	};
-
-	// If user has not set mature, do not allow publish
-	if(self->mMatureCombo->getCurrentIndex() == DECLINE_TO_STATE)
-	{
-		// Tell user about it
-		LLNotificationsUtil::add("SetClassifiedMature", 
-				LLSD(), 
-				LLSD(), 
-				boost::bind(&LLPanelClassified::confirmMature, self, _1, _2));
-		return;
-	}
-
-	// Mature content flag is set, proceed
-	self->gotMature();
-}
-
-// Callback from a dialog indicating response to mature notification
-bool LLPanelClassified::confirmMature(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	
-	// 0 == Yes
-	// 1 == No
-	// 2 == Cancel
-	switch(option)
-	{
-	case 0:
-		mMatureCombo->setCurrentByIndex(MATURE_CONTENT);
-		break;
-	case 1:
-		mMatureCombo->setCurrentByIndex(PG_CONTENT);
-		break;
-	default:
-		return false;
-	}
-	
-	// If we got here it means they set a valid value
-	gotMature();
-	return false;
-}
-
-// Called after we have determined whether this classified has
-// mature content or not.
-void LLPanelClassified::gotMature()
-{
-	// if already paid for, just do the update
-	if (mPaidFor)
-	{
-		LLNotification::Params params("PublishClassified");
-		params.functor.function(boost::bind(&LLPanelClassified::confirmPublish, this, _1, _2));
-		LLNotifications::instance().forceResponse(params, 0);
-	}
-	else
-	{
-		// Ask the user how much they want to pay
-		LLFloaterPriceForListing::show( callbackGotPriceForListing, this );
-	}
-}
-
-// static
-void LLPanelClassified::callbackGotPriceForListing(S32 option, std::string text, void* data)
-{
-	LLPanelClassified* self = (LLPanelClassified*)data;
-
-	// Only do something if user hits publish
-	if (option != 0) return;
-
-	S32 price_for_listing = strtol(text.c_str(), NULL, 10);
-	if (price_for_listing < MINIMUM_PRICE_FOR_LISTING)
-	{
-		LLSD args;
-		std::string price_text = llformat("%d", MINIMUM_PRICE_FOR_LISTING);
-		args["MIN_PRICE"] = price_text;
-			
-		LLNotificationsUtil::add("MinClassifiedPrice", args);
-		return;
-	}
-
-	// price is acceptable, put it in the dialog for later read by 
-	// update send
-	self->mPriceForListing = price_for_listing;
-
-	LLSD args;
-	args["AMOUNT"] = llformat("%d", price_for_listing);
-	LLNotificationsUtil::add("PublishClassified", args, LLSD(), 
-									boost::bind(&LLPanelClassified::confirmPublish, self, _1, _2));
-}
-
-void LLPanelClassified::resetDirty()
-{
-	// Tell all the widgets to reset their dirty state since the ad was just saved
-	if (mSnapshotCtrl)
-		mSnapshotCtrl->resetDirty();
-	if (mNameEditor)
-		mNameEditor->resetDirty();
-	if (mDescEditor)
-		mDescEditor->resetDirty();
-	if (mLocationEditor)
-		mLocationEditor->resetDirty();
-	mLocationChanged = false;
-	if (mCategoryCombo)
-		mCategoryCombo->resetDirty();
-	if (mMatureCombo)
-		mMatureCombo->resetDirty();
-	if (mAutoRenewCheck)
-		mAutoRenewCheck->resetDirty();
-}
-
-// invoked from callbackConfirmPublish
-bool LLPanelClassified::confirmPublish(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	// Option 0 = publish
-	if (option != 0) return false;
-
-	sendClassifiedInfoUpdate();
-
-	// Big hack - assume that top picks are always in a browser,
-	// and non-finder-classifieds are always in a tab container.
-	if (! mInFinder)
-	{
-		LLTabContainer* tab = (LLTabContainer*)getParent();
-		tab->setCurrentTabName(mNameEditor->getText());
-	}
-
-	resetDirty();
-	return false;
-}
-
-
-// static
-void LLPanelClassified::onClickTeleport(void* data)
-{
-    LLPanelClassified* self = (LLPanelClassified*)data;
-	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
-	
-    if (!self->mPosGlobal.isExactlyZero()&&worldmap_instance)
-    {
-        gAgent.teleportViaLocation(self->mPosGlobal);		
-        worldmap_instance->trackLocation(self->mPosGlobal);
-		self->sendClassifiedClickMessage("teleport");
-    }
-}
-
-
-// static
-void LLPanelClassified::onClickMap(void* data)
-{
-	LLPanelClassified* self = (LLPanelClassified*)data;
-	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
-	if(worldmap_instance)
-	{
-		worldmap_instance->trackLocation(self->mPosGlobal);
-		LLFloaterReg::showInstance("world_map", "center");
-	}
-	self->sendClassifiedClickMessage("map");
-}
-
-// static
-void LLPanelClassified::onClickProfile(void* data)
-{
-	LLPanelClassified* self = (LLPanelClassified*)data;
-	LLAvatarActions::showProfile(self->mCreatorID);
-	self->sendClassifiedClickMessage("profile");
-}
-
-// static
-/*
-void LLPanelClassified::onClickLandmark(void* data)
-{
-    LLPanelClassified* self = (LLPanelClassified*)data;
-	create_landmark(self->mNameEditor->getText(), "", self->mPosGlobal);
-}
-*/
-
-// static
-void LLPanelClassified::onClickSet(void* data)
-{
-    LLPanelClassified* self = (LLPanelClassified*)data;
-
-	// Save location for later.
-	self->mPosGlobal = gAgent.getPositionGlobal();
-
-	std::string location_text;
-	std::string regionName = LLTrans::getString("ClassifiedUpdateAfterPublish");
-	LLViewerRegion* pRegion = gAgent.getRegion();
-	if (pRegion)
-	{
-		regionName = pRegion->getName();
-	}
-	location_text.assign(regionName);
-	location_text.append(", ");
-
-    S32 region_x = llround((F32)self->mPosGlobal.mdV[VX]) % REGION_WIDTH_UNITS;
-    S32 region_y = llround((F32)self->mPosGlobal.mdV[VY]) % REGION_WIDTH_UNITS;
-	S32 region_z = llround((F32)self->mPosGlobal.mdV[VZ]);
-   
-	location_text.append(self->mSimName);
-    location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));
-
-	self->mLocationEditor->setText(location_text);
-	self->mLocationChanged = true;
-	
-	self->setDefaultAccessCombo();	
-
-	// Set this to null so it updates on the next save.
-	self->mParcelID.setNull();
-
-	onCommitAny(NULL, data);
-}
-
-
-BOOL LLPanelClassified::checkDirty()
-{
-	mDirty = FALSE;
-	if	( mSnapshotCtrl )			mDirty |= mSnapshotCtrl->isDirty();
-	if	( mNameEditor )				mDirty |= mNameEditor->isDirty();
-	if	( mDescEditor )				mDirty |= mDescEditor->isDirty();
-	if	( mLocationEditor )			mDirty |= mLocationEditor->isDirty();
-	if  ( mLocationChanged )		mDirty |= TRUE;
-	if	( mCategoryCombo )			mDirty |= mCategoryCombo->isDirty();
-	if	( mMatureCombo )			mDirty |= mMatureCombo->isDirty();
-	if	( mAutoRenewCheck )			mDirty |= mAutoRenewCheck->isDirty();
-
-	return mDirty;
-}
-
-// static
-void LLPanelClassified::onCommitAny(LLUICtrl* ctrl, void* data)
-{
-	LLPanelClassified* self = (LLPanelClassified*)data;
-	if (self)
-	{
-		self->checkDirty();
-	}
-}
-
-// static
-void LLPanelClassified::focusReceived(LLFocusableElement* ctrl, void* data)
-{
-	// allow the data to be saved
-	onCommitAny((LLUICtrl*)ctrl, data);
-}
-
-
-void LLPanelClassified::sendClassifiedClickMessage(const std::string& type)
-{
-	// You're allowed to click on your own ads to reassure yourself
-	// that the system is working.
-	LLSD body;
-	body["type"] = type;
-	body["from_search"] = mFromSearch;
-	body["classified_id"] = mClassifiedID;
-	body["parcel_id"] = mParcelID;
-	body["dest_pos_global"] = mPosGlobal.getValue();
-	body["region_name"] = mSimName;
-
-	std::string url = gAgent.getRegion()->getCapability("SearchStatTracking");
-	llinfos << "LLPanelClassified::sendClassifiedClickMessage via capability" << llendl;
-	LLHTTPClient::post(url, body, new LLHTTPClient::Responder());
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////
-
-LLFloaterPriceForListing::LLFloaterPriceForListing()
-:	LLFloater(LLSD()),
-	mCallback(NULL),
-	mUserData(NULL)
-{ }
-
-//virtual
-LLFloaterPriceForListing::~LLFloaterPriceForListing()
-{ }
-
-//virtual
-BOOL LLFloaterPriceForListing::postBuild()
-{
-	LLLineEditor* edit = getChild<LLLineEditor>("price_edit");
-	if (edit)
-	{
-		edit->setPrevalidate(LLTextValidate::validateNonNegativeS32);
-		std::string min_price = llformat("%d", MINIMUM_PRICE_FOR_LISTING);
-		edit->setText(min_price);
-		edit->selectAll();
-		edit->setFocus(TRUE);
-	}
-
-	childSetAction("set_price_btn", onClickSetPrice, this);
-
-	childSetAction("cancel_btn", onClickCancel, this);
-
-	setDefaultBtn("set_price_btn");
-	return TRUE;
-}
-
-//static
-void LLFloaterPriceForListing::show( void (*callback)(S32, std::string, void*), void* userdata)
-{
-	LLFloaterPriceForListing *self = new LLFloaterPriceForListing();
-
-	// Builds and adds to gFloaterView
-	LLUICtrlFactory::getInstance()->buildFloater(self, "floater_price_for_listing.xml", NULL);
-	self->center();
-
-	self->mCallback = callback;
-	self->mUserData = userdata;
-}
-
-//static
-void LLFloaterPriceForListing::onClickSetPrice(void* data)
-{
-	buttonCore(0, data);
-}
-
-//static
-void LLFloaterPriceForListing::onClickCancel(void* data)
-{
-	buttonCore(1, data);
-}
-
-//static
-void LLFloaterPriceForListing::buttonCore(S32 button, void* data)
-{
-	LLFloaterPriceForListing* self = (LLFloaterPriceForListing*)data;
-
-	if (self->mCallback)
-	{
-		std::string text = self->childGetText("price_edit");
-		self->mCallback(button, text, self->mUserData);
-		self->closeFloater();
-	}
-}
-
-void LLPanelClassified::setDefaultAccessCombo()
-{
-	// PG regions should have PG classifieds. AO should have mature.
-
-	LLViewerRegion *regionp = gAgent.getRegion();
-
-	switch( regionp->getSimAccess() )
-	{
-		case SIM_ACCESS_PG:	
-			mMatureCombo->setCurrentByIndex(PG_CONTENT);
-			break;
-		case SIM_ACCESS_ADULT:
-			mMatureCombo->setCurrentByIndex(MATURE_CONTENT);
-			break;
-		default:
-			// You are free to move about the cabin.
-			break;
-	}
-}
-
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -1310,7 +257,7 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t
 			setSimName(c_info->sim_name);
 
 			setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
-			childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]);
+			getChild<LLUICtrl>("category")->setValue(LLClassifiedInfo::sCategories[c_info->category]);
 
 			static std::string mature_str = getString("type_mature");
 			static std::string pg_str = getString("type_pg");
@@ -1318,20 +265,20 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t
 			static std::string date_fmt = getString("date_fmt");
 
 			bool mature = is_cf_mature(c_info->flags);
-			childSetValue("content_type", mature ? mature_str : pg_str);
+			getChild<LLUICtrl>("content_type")->setValue(mature ? mature_str : pg_str);
 			getChild<LLIconCtrl>("content_type_moderate")->setVisible(mature);
 			getChild<LLIconCtrl>("content_type_general")->setVisible(!mature);
 
 			std::string auto_renew_str = is_cf_auto_renew(c_info->flags) ? 
 				getString("auto_renew_on") : getString("auto_renew_off");
-			childSetValue("auto_renew", auto_renew_str);
+			getChild<LLUICtrl>("auto_renew")->setValue(auto_renew_str);
 
 			price_str.setArg("[PRICE]", llformat("%d", c_info->price_for_listing));
-			childSetValue("price_for_listing", LLSD(price_str));
+			getChild<LLUICtrl>("price_for_listing")->setValue(LLSD(price_str));
 
 			std::string date_str = date_fmt;
 			LLStringUtil::format(date_str, LLSD().with("datetime", (S32) c_info->creation_date));
-			childSetText("creation_date", date_str);
+			getChild<LLUICtrl>("creation_date")->setValue(date_str);
 
 			setInfoLoaded(true);
 		}
@@ -1358,13 +305,13 @@ void LLPanelClassifiedInfo::resetData()
 	mMapClicksNew		= 0;
 	mProfileClicksNew	= 0;
 
-	childSetText("category", LLStringUtil::null);
-	childSetText("content_type", LLStringUtil::null);
-	childSetText("click_through_text", LLStringUtil::null);
-	childSetText("price_for_listing", LLStringUtil::null);
-	childSetText("auto_renew", LLStringUtil::null);
-	childSetText("creation_date", LLStringUtil::null);
-	childSetText("click_through_text", LLStringUtil::null);
+	getChild<LLUICtrl>("category")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("content_type")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("click_through_text")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("price_for_listing")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("auto_renew")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("creation_date")->setValue(LLStringUtil::null);
+	getChild<LLUICtrl>("click_through_text")->setValue(LLStringUtil::null);
 	getChild<LLIconCtrl>("content_type_moderate")->setVisible(FALSE);
 	getChild<LLIconCtrl>("content_type_general")->setVisible(FALSE);
 }
@@ -1373,40 +320,40 @@ void LLPanelClassifiedInfo::resetControls()
 {
 	bool is_self = getAvatarId() == gAgent.getID();
 
-	childSetEnabled("edit_btn", is_self);
-	childSetVisible("edit_btn", is_self);
-	childSetVisible("price_layout_panel", is_self);
-	childSetVisible("clickthrough_layout_panel", is_self);
+	getChildView("edit_btn")->setEnabled(is_self);
+	getChildView("edit_btn")->setVisible( is_self);
+	getChildView("price_layout_panel")->setVisible( is_self);
+	getChildView("clickthrough_layout_panel")->setVisible( is_self);
 }
 
 void LLPanelClassifiedInfo::setClassifiedName(const std::string& name)
 {
-	childSetValue("classified_name", name);
+	getChild<LLUICtrl>("classified_name")->setValue(name);
 }
 
 std::string LLPanelClassifiedInfo::getClassifiedName()
 {
-	return childGetValue("classified_name").asString();
+	return getChild<LLUICtrl>("classified_name")->getValue().asString();
 }
 
 void LLPanelClassifiedInfo::setDescription(const std::string& desc)
 {
-	childSetValue("classified_desc", desc);
+	getChild<LLUICtrl>("classified_desc")->setValue(desc);
 }
 
 std::string LLPanelClassifiedInfo::getDescription()
 {
-	return childGetValue("classified_desc").asString();
+	return getChild<LLUICtrl>("classified_desc")->getValue().asString();
 }
 
 void LLPanelClassifiedInfo::setClassifiedLocation(const std::string& location)
 {
-	childSetValue("classified_location", location);
+	getChild<LLUICtrl>("classified_location")->setValue(location);
 }
 
 std::string LLPanelClassifiedInfo::getClassifiedLocation()
 {
-	return childGetValue("classified_location").asString();
+	return getChild<LLUICtrl>("classified_location")->getValue().asString();
 }
 
 void LLPanelClassifiedInfo::setSnapshotId(const LLUUID& id)
@@ -1429,7 +376,7 @@ void LLPanelClassifiedInfo::draw()
 
 LLUUID LLPanelClassifiedInfo::getSnapshotId()
 {
-	return childGetValue("classified_snapshot").asUUID();
+	return getChild<LLUICtrl>("classified_snapshot")->getValue().asUUID();
 }
 
 // static
@@ -1484,9 +431,9 @@ void LLPanelClassifiedInfo::setClickThrough(
 		ct_str.setArg("[MAP]",		llformat("%d", self->mMapClicksNew + self->mMapClicksOld));
 		ct_str.setArg("[PROFILE]",	llformat("%d", self->mProfileClicksNew + self->mProfileClicksOld));
 
-		self->childSetText("click_through_text", ct_str.getString());
+		self->getChild<LLUICtrl>("click_through_text")->setValue(ct_str.getString());
 		// *HACK: remove this when there is enough room for click stats in the info panel
-		self->childSetToolTip("click_through_text", ct_str.getString());  
+		self->getChildView("click_through_text")->setToolTip(ct_str.getString());  
 
 		llinfos << "teleport: " << llformat("%d", self->mTeleportClicksNew + self->mTeleportClicksOld)
 				<< ", map: "    << llformat("%d", self->mMapClicksNew + self->mMapClicksOld)
@@ -1734,8 +681,8 @@ void LLPanelClassifiedEdit::fillIn(const LLSD& key)
 			region_name = region->getName();
 		}
 
-		childSetValue("classified_name", makeClassifiedName());
-		childSetValue("classified_desc", desc);
+		getChild<LLUICtrl>("classified_name")->setValue(makeClassifiedName());
+		getChild<LLUICtrl>("classified_desc")->setValue(desc);
 		setSnapshotId(snapshot_id);
 		setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal()));
 		// server will set valid parcel id
@@ -1750,8 +697,8 @@ void LLPanelClassifiedEdit::fillIn(const LLSD& key)
 		setCategory((U32)key["category"].asInteger());
 		setContentType((U32)key["content_type"].asInteger());
 		setClassifiedLocation(key["location_text"]);
-		childSetValue("auto_renew", key["auto_renew"]);
-		childSetValue("price_for_listing", key["price_for_listing"].asInteger());
+		getChild<LLUICtrl>("auto_renew")->setValue(key["auto_renew"]);
+		getChild<LLUICtrl>("price_for_listing")->setValue(key["price_for_listing"].asInteger());
 	}
 }
 
@@ -1782,7 +729,7 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key)
 	}
 
 	std::string save_btn_label = is_new ? getString("publish_label") : getString("save_label");
-	childSetLabelArg("save_changes_btn", "[LABEL]", save_btn_label);
+	getChild<LLUICtrl>("save_changes_btn")->setLabelArg("[LABEL]", save_btn_label);
 
 	enableVerbs(is_new);
 	enableEditing(is_new);
@@ -1821,16 +768,16 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t
 			bool auto_renew = is_cf_auto_renew(c_info->flags);
 
 			setContentType(mature ? CB_ITEM_MATURE : CB_ITEM_PG);
-			childSetValue("auto_renew", auto_renew);
-			childSetValue("price_for_listing", c_info->price_for_listing);
-			childSetEnabled("price_for_listing", isNew());
+			getChild<LLUICtrl>("auto_renew")->setValue(auto_renew);
+			getChild<LLUICtrl>("price_for_listing")->setValue(c_info->price_for_listing);
+			getChildView("price_for_listing")->setEnabled(isNew());
 
 			resetDirty();
 			setInfoLoaded(true);
 			enableVerbs(false);
 
 			// for just created classified - in case user opened edit panel before processProperties() callback 
-			childSetLabelArg("save_changes_btn", "[LABEL]", getString("save_label"));
+			getChild<LLUICtrl>("save_changes_btn")->setLabelArg("[LABEL]", getString("save_label"));
 		}
 	}
 }
@@ -1889,9 +836,9 @@ void LLPanelClassifiedEdit::resetControls()
 
 	getChild<LLComboBox>("category")->setCurrentByIndex(0);
 	getChild<LLComboBox>("content_type")->setCurrentByIndex(0);
-	childSetValue("auto_renew", false);
-	childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING);
-	childSetEnabled("price_for_listing", TRUE);
+	getChild<LLUICtrl>("auto_renew")->setValue(false);
+	getChild<LLUICtrl>("price_for_listing")->setValue(MINIMUM_PRICE_FOR_LISTING);
+	getChildView("price_for_listing")->setEnabled(TRUE);
 }
 
 bool LLPanelClassifiedEdit::canClose()
@@ -1930,7 +877,7 @@ void LLPanelClassifiedEdit::setContentType(U32 content_type)
 
 bool LLPanelClassifiedEdit::getAutoRenew()
 {
-	return childGetValue("auto_renew").asBoolean();
+	return getChild<LLUICtrl>("auto_renew")->getValue().asBoolean();
 }
 
 void LLPanelClassifiedEdit::sendUpdate()
@@ -1981,7 +928,7 @@ void LLPanelClassifiedEdit::setCategory(U32 category)
 
 U8 LLPanelClassifiedEdit::getFlags()
 {
-	bool auto_renew = childGetValue("auto_renew").asBoolean();
+	bool auto_renew = getChild<LLUICtrl>("auto_renew")->getValue().asBoolean();
 
 	LLComboBox* content_cb = getChild<LLComboBox>("content_type");
 	bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE;
@@ -1991,25 +938,25 @@ U8 LLPanelClassifiedEdit::getFlags()
 
 void LLPanelClassifiedEdit::enableVerbs(bool enable)
 {
-	childSetEnabled("save_changes_btn", enable);
+	getChildView("save_changes_btn")->setEnabled(enable);
 }
 
 void LLPanelClassifiedEdit::enableEditing(bool enable)
 {
-	childSetEnabled("classified_snapshot", enable);
-	childSetEnabled("classified_name", enable);
-	childSetEnabled("classified_desc", enable);
-	childSetEnabled("set_to_curr_location_btn", enable);
-	childSetEnabled("category", enable);
-	childSetEnabled("content_type", enable);
-	childSetEnabled("price_for_listing", enable);
-	childSetEnabled("auto_renew", enable);
+	getChildView("classified_snapshot")->setEnabled(enable);
+	getChildView("classified_name")->setEnabled(enable);
+	getChildView("classified_desc")->setEnabled(enable);
+	getChildView("set_to_curr_location_btn")->setEnabled(enable);
+	getChildView("category")->setEnabled(enable);
+	getChildView("content_type")->setEnabled(enable);
+	getChildView("price_for_listing")->setEnabled(enable);
+	getChildView("auto_renew")->setEnabled(enable);
 }
 
 void LLPanelClassifiedEdit::showEditing(bool show)
 {
-	childSetVisible("price_for_listing_label", show);
-	childSetVisible("price_for_listing", show);
+	getChildView("price_for_listing_label")->setVisible( show);
+	getChildView("price_for_listing")->setVisible( show);
 }
 
 std::string LLPanelClassifiedEdit::makeClassifiedName()
@@ -2038,12 +985,12 @@ std::string LLPanelClassifiedEdit::makeClassifiedName()
 
 S32 LLPanelClassifiedEdit::getPriceForListing()
 {
-	return childGetValue("price_for_listing").asInteger();
+	return getChild<LLUICtrl>("price_for_listing")->getValue().asInteger();
 }
 
 void LLPanelClassifiedEdit::setPriceForListing(S32 price)
 {
-	childSetValue("price_for_listing", price);
+	getChild<LLUICtrl>("price_for_listing")->setValue(price);
 }
 
 void LLPanelClassifiedEdit::onSetLocationClick()
@@ -2201,12 +1148,12 @@ BOOL LLPublishClassifiedFloater::postBuild()
 
 void LLPublishClassifiedFloater::setPrice(S32 price)
 {
-	childSetValue("price_for_listing", price);
+	getChild<LLUICtrl>("price_for_listing")->setValue(price);
 }
 
 S32 LLPublishClassifiedFloater::getPrice()
 {
-	return childGetValue("price_for_listing").asInteger();
+	return getChild<LLUICtrl>("price_for_listing")->getValue().asInteger();
 }
 
 void LLPublishClassifiedFloater::setPublishClickedCallback(const commit_signal_t::slot_type& cb)
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index b3aeaae3e559f6daa89fc091c0a32010446bdbba..cedd65c405a93dac67a68441dda8be66ceb67b96 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -27,174 +27,20 @@
 // Display of a classified used both for the global view in the
 // Find directory, and also for each individual user's classified in their
 // profile.
-
 #ifndef LL_LLPANELCLASSIFIED_H
 #define LL_LLPANELCLASSIFIED_H
 
 #include "llavatarpropertiesprocessor.h"
-#include "llpanel.h"
 #include "llclassifiedinfo.h"
-#include "v3dmath.h"
-#include "lluuid.h"
 #include "llfloater.h"
-//#include "llrect.h"
-
-class LLButton;
-class LLCheckBoxCtrl;
-class LLComboBox;
-class LLIconCtrl;
-class LLLineEditor;
-class LLTextBox;
-class LLTextEditor;
+#include "llpanel.h"
+#include "llrect.h"
+#include "lluuid.h"
+#include "v3dmath.h"
+
+class LLScrollContainer;
 class LLTextureCtrl;
 class LLUICtrl;
-class LLMessageSystem;
-class LLScrollContainer;
-
-// *TODO deprecated, should be removed.
-// New class implemented in ticket EXT-2095
-class LLPanelClassified : public LLPanel
-{
-public:
-    LLPanelClassified(bool in_finder, bool from_search);
-    /*virtual*/ ~LLPanelClassified();
-
-	void reset();
-
-    /*virtual*/ BOOL postBuild();
-
-    /*virtual*/ void draw();
-
-	/*virtual*/ void refresh();
-
-	void apply();
-
-	// If can close, return TRUE.  If cannot close, pop save/discard dialog
-	// and return FALSE.
-	BOOL canClose();
-
-	// Setup a new classified, including creating an id, giving a sane
-	// initial position, etc.
-	void initNewClassified();
-
-	void setClassifiedID(const LLUUID& id);
-	void setClickThroughText(const std::string& text);
-	static void setClickThrough(const LLUUID& classified_id,
-								S32 teleport, S32 map, S32 profile, bool from_new_table);
-
-	// check that the title is valid (E.G. starts with a number or letter)
-	BOOL titleIsValid();
-
-	// Schedules the panel to request data
-	// from the server next time it is drawn.
-	void markForServerRequest();
-
-	std::string getClassifiedName();
-	const LLUUID& getClassifiedID() const { return mClassifiedID; }
-
-    void sendClassifiedInfoRequest();
-	void sendClassifiedInfoUpdate();
-	void resetDirty();
-
-    static void processClassifiedInfoReply(LLMessageSystem* msg, void**);
-
-	// Confirmation dialogs flow in this order
-	bool confirmMature(const LLSD& notification, const LLSD& response);
-	void gotMature();
-	static void callbackGotPriceForListing(S32 option, std::string text, void* data);
-	bool confirmPublish(const LLSD& notification, const LLSD& response);
-
-	void sendClassifiedClickMessage(const std::string& type);
-
-protected:
-	bool saveCallback(const LLSD& notification, const LLSD& response);
-
-	static void onClickUpdate(void* data);
-    static void onClickTeleport(void* data);
-    static void onClickMap(void* data);
-	static void onClickProfile(void* data);
-    static void onClickSet(void* data);
-
-	static void focusReceived(LLFocusableElement* ctrl, void* data);
-	static void onCommitAny(LLUICtrl* ctrl, void* data);
-
-	void setDefaultAccessCombo(); // Default AO and PG regions to proper classified access
-	
-	BOOL checkDirty();		// Update and return mDirty
-
-protected:
-	bool mInFinder;
-	bool mFromSearch;		// from web-based "All" search sidebar
-	BOOL mDirty;
-	bool mForceClose;
-	bool mLocationChanged;
-	LLUUID mClassifiedID;
-	LLUUID mRequestedID;
-	LLUUID mCreatorID;
-	LLUUID mParcelID;
-	S32 mPriceForListing;
-
-	// Needed for stat tracking
-	S32 mTeleportClicksOld;
-	S32 mMapClicksOld;
-	S32 mProfileClicksOld;
-	S32 mTeleportClicksNew;
-	S32 mMapClicksNew;
-	S32 mProfileClicksNew;
-
-	// Data will be requested on first draw
-	BOOL mDataRequested;
-
-	// For avatar panel classifieds only, has the user been charged
-	// yet for this classified?  That is, have they saved once?
-	BOOL mPaidFor;
-
-	std::string mSimName;
-	LLVector3d mPosGlobal;
-
-	// Values the user may change
-	LLTextureCtrl*	mSnapshotCtrl;
-	LLLineEditor*	mNameEditor;
-	LLTextEditor*	mDescEditor;
-	LLLineEditor*	mLocationEditor;
-	LLComboBox*		mCategoryCombo;
-	LLComboBox*		mMatureCombo;
-	LLCheckBoxCtrl* mAutoRenewCheck;
-
-	LLButton*    mUpdateBtn;
-	LLButton*    mTeleportBtn;
-	LLButton*    mMapBtn;
-	LLButton*	 mProfileBtn;
-
-	LLTextBox*		mInfoText;
-	LLButton*		mSetBtn;
-	LLTextBox*		mClickThroughText;
-
-	LLRect		mSnapshotSize;
-	typedef std::list<LLPanelClassified*> panel_list_t;
-	static panel_list_t sAllPanels;
-};
-
-
-class LLFloaterPriceForListing
-: public LLFloater
-{
-public:
-	LLFloaterPriceForListing();
-	virtual ~LLFloaterPriceForListing();
-	virtual BOOL postBuild();
-
-	static void show( void (*callback)(S32 option, std::string value, void* userdata), void* userdata );
-
-private:
-	static void onClickSetPrice(void*);
-	static void onClickCancel(void*);
-	static void buttonCore(S32 button, void* data);
-
-private:
-	void (*mCallback)(S32 option, std::string, void*);
-	void* mUserData;
-};
 
 class LLPublishClassifiedFloater : public LLFloater
 {
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index 3952e80962c64bc81dda8f29fd236e836114c1c0..bf3bf38863e8f95c7ec80fcc18235999101baac0 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -107,7 +107,7 @@ void LLPanelContents::getState(LLViewerObject *objectp )
 {
 	if( !objectp )
 	{
-		childSetEnabled("button new script",FALSE);
+		getChildView("button new script")->setEnabled(FALSE);
 		return;
 	}
 
@@ -121,7 +121,7 @@ void LLPanelContents::getState(LLViewerObject *objectp )
 	BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
 
 	// Edit script button - ok if object is editable and there's an unambiguous destination for the object.
-	childSetEnabled("button new script",
+	getChildView("button new script")->setEnabled(
 		editable &&
 		all_volume &&
 		((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 85bddab02c1d648c9a9bc6a8bd546aa57d10de75..90ed8b9e587a106dca3b0330913081c165d139bf 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -838,6 +838,15 @@ void LLPanelEditWearable::draw()
 	LLPanel::draw();
 }
 
+void LLPanelEditWearable::setVisible(BOOL visible)
+{
+	if (!visible)
+	{
+		showWearable(mWearablePtr, FALSE);
+	}
+	LLPanel::setVisible(visible);
+}
+
 void LLPanelEditWearable::setWearable(LLWearable *wearable)
 {
 	showWearable(mWearablePtr, FALSE);
@@ -1209,9 +1218,9 @@ void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type)
 	// Toggle controls specific to shape editing panel.
 	{
 		bool is_shape = (type == LLWearableType::WT_SHAPE);
-		childSetVisible("sex_radio", is_shape);
-		childSetVisible("female_icon", is_shape);
-		childSetVisible("male_icon", is_shape);
+		getChildView("sex_radio")->setVisible( is_shape);
+		getChildView("female_icon")->setVisible( is_shape);
+		getChildView("male_icon")->setVisible( is_shape);
 	}
 }
 
@@ -1411,7 +1420,7 @@ void LLPanelEditWearable::updateVerbs()
 	BOOL is_dirty = isDirty();
 
 	mBtnRevert->setEnabled(is_dirty);
-	childSetEnabled("save_as_button", is_dirty && can_copy);
+	getChildView("save_as_button")->setEnabled(is_dirty && can_copy);
 
 	if(isAgentAvatarValid())
 	{
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
index 2d586276a6442892e863806f71fbf0148a8e0f8c..43513d8ab3fb4d61585d04f28bae7c06e9ff3e04 100644
--- a/indra/newview/llpaneleditwearable.h
+++ b/indra/newview/llpaneleditwearable.h
@@ -71,6 +71,8 @@ public:
 	void				onSaveAsButtonClicked();
 	void				saveAsCallback(const LLSD& notification, const LLSD& response);
 
+	virtual void		setVisible(BOOL visible);
+
 
 private:
 	typedef std::map<F32, LLViewerVisualParam*> value_map_t;
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index c4bbdb37f873fc62c14b96db3562b99db9b395d2..572e7a6212d2f7d1e0477848e2d1c1b61bc461d0 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -388,8 +388,8 @@ void LLPanelFace::getState()
 		BOOL editable = objectp->permModify();
 
 		// only turn on auto-adjust button if there is a media renderer and the media is loaded
-		childSetEnabled("textbox autofix", editable);
-		childSetEnabled("button align", editable);
+		getChildView("textbox autofix")->setEnabled(editable);
+		getChildView("button align")->setEnabled(editable);
 		
 		//if ( LLMediaEngine::getInstance()->getMediaRenderer () )
 		//	if ( LLMediaEngine::getInstance()->getMediaRenderer ()->isLoaded () )
@@ -399,7 +399,7 @@ void LLPanelFace::getState()
 		//		
 		//		//mBtnAutoFix->setEnabled ( editable );
 		//	}
-		childSetEnabled("button apply",editable);
+		getChildView("button apply")->setEnabled(editable);
 
 		bool identical;
 		LLTextureCtrl*	texture_ctrl = getChild<LLTextureCtrl>("texture control");
@@ -439,8 +439,8 @@ void LLPanelFace::getState()
 
 			if(LLViewerMedia::textureHasMedia(id))
 			{
-				childSetEnabled("textbox autofix",editable);
-				childSetEnabled("button align",editable);
+				getChildView("textbox autofix")->setEnabled(editable);
+				getChildView("button align")->setEnabled(editable);
 			}
 			
 			if (identical)
@@ -499,8 +499,6 @@ void LLPanelFace::getState()
 
 		// Texture scale
 		{
-			childSetEnabled("tex scale",editable);
-			//mLabelTexScale->setEnabled( editable );
 			F32 scale_s = 1.f;
 			struct f2 : public LLSelectedTEGetFunctor<F32>
 			{
@@ -510,12 +508,12 @@ void LLPanelFace::getState()
 				}
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_s );
-			childSetValue("TexScaleU",editable ? llabs(scale_s) : 0);
-			childSetTentative("TexScaleU",LLSD((BOOL)(!identical)));
-			childSetEnabled("TexScaleU",editable);
-			childSetValue("checkbox flip s",LLSD((BOOL)(scale_s < 0 ? TRUE : FALSE )));
-			childSetTentative("checkbox flip s",LLSD((BOOL)((!identical) ? TRUE : FALSE )));
-			childSetEnabled("checkbox flip s",editable);
+			getChild<LLUICtrl>("TexScaleU")->setValue(editable ? llabs(scale_s) : 0);
+			getChild<LLUICtrl>("TexScaleU")->setTentative(LLSD((BOOL)(!identical)));
+			getChildView("TexScaleU")->setEnabled(editable);
+			getChild<LLUICtrl>("checkbox flip s")->setValue(LLSD((BOOL)(scale_s < 0 ? TRUE : FALSE )));
+			getChild<LLUICtrl>("checkbox flip s")->setTentative(LLSD((BOOL)((!identical) ? TRUE : FALSE )));
+			getChildView("checkbox flip s")->setEnabled(editable);
 		}
 
 		{
@@ -529,17 +527,17 @@ void LLPanelFace::getState()
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_t );
 
-			childSetValue("TexScaleV",llabs(editable ? llabs(scale_t) : 0));
-			childSetTentative("TexScaleV",LLSD((BOOL)(!identical)));
-			childSetEnabled("TexScaleV",editable);
-			childSetValue("checkbox flip t",LLSD((BOOL)(scale_t< 0 ? TRUE : FALSE )));
-			childSetTentative("checkbox flip t",LLSD((BOOL)((!identical) ? TRUE : FALSE )));
-			childSetEnabled("checkbox flip t",editable);
+			getChild<LLUICtrl>("TexScaleV")->setValue(llabs(editable ? llabs(scale_t) : 0));
+			getChild<LLUICtrl>("TexScaleV")->setTentative(LLSD((BOOL)(!identical)));
+			getChildView("TexScaleV")->setEnabled(editable);
+			getChild<LLUICtrl>("checkbox flip t")->setValue(LLSD((BOOL)(scale_t< 0 ? TRUE : FALSE )));
+			getChild<LLUICtrl>("checkbox flip t")->setTentative(LLSD((BOOL)((!identical) ? TRUE : FALSE )));
+			getChildView("checkbox flip t")->setEnabled(editable);
 		}
 
 		// Texture offset
 		{
-			childSetEnabled("tex offset",editable);
+			getChildView("tex offset")->setEnabled(editable);
 			F32 offset_s = 0.f;
 			struct f4 : public LLSelectedTEGetFunctor<F32>
 			{
@@ -549,9 +547,9 @@ void LLPanelFace::getState()
 				}
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_s );
-			childSetValue("TexOffsetU", editable ? offset_s : 0);
-			childSetTentative("TexOffsetU",!identical);
-			childSetEnabled("TexOffsetU",editable);
+			getChild<LLUICtrl>("TexOffsetU")->setValue(editable ? offset_s : 0);
+			getChild<LLUICtrl>("TexOffsetU")->setTentative(!identical);
+			getChildView("TexOffsetU")->setEnabled(editable);
 		}
 
 		{
@@ -564,14 +562,13 @@ void LLPanelFace::getState()
 				}
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_t );
-			childSetValue("TexOffsetV", editable ? offset_t : 0);
-			childSetTentative("TexOffsetV",!identical);
-			childSetEnabled("TexOffsetV",editable);
+			getChild<LLUICtrl>("TexOffsetV")->setValue(editable ? offset_t : 0);
+			getChild<LLUICtrl>("TexOffsetV")->setTentative(!identical);
+			getChildView("TexOffsetV")->setEnabled(editable);
 		}
 
 		// Texture rotation
 		{
-			childSetEnabled("tex rotate",editable);
 			F32 rotation = 0.f;
 			struct f6 : public LLSelectedTEGetFunctor<F32>
 			{
@@ -581,9 +578,9 @@ void LLPanelFace::getState()
 				}
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, rotation );
-			childSetValue("TexRot", editable ? rotation * RAD_TO_DEG : 0);
-			childSetTentative("TexRot",!identical);
-			childSetEnabled("TexRot",editable);
+			getChild<LLUICtrl>("TexRot")->setValue(editable ? rotation * RAD_TO_DEG : 0);
+			getChild<LLUICtrl>("TexRot")->setTentative(!identical);
+			getChildView("TexRot")->setEnabled(editable);
 		}
 
 		// Color swatch
@@ -609,13 +606,13 @@ void LLPanelFace::getState()
 		}
 		// Color transparency
 		{
-			childSetEnabled("color trans",editable);
+			getChildView("color trans")->setEnabled(editable);
 		}
 
 		F32 transparency = (1.f - color.mV[VALPHA]) * 100.f;
 		{
-			childSetValue("ColorTrans", editable ? transparency : 0);
-			childSetEnabled("ColorTrans",editable);
+			getChild<LLUICtrl>("ColorTrans")->setValue(editable ? transparency : 0);
+			getChildView("ColorTrans")->setEnabled(editable);
 		}
 
 		{
@@ -629,10 +626,10 @@ void LLPanelFace::getState()
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, glow );
 
-			childSetValue("glow",glow);
-			childSetEnabled("glow",editable);
-			childSetTentative("glow",!identical);
-			childSetEnabled("glow label",editable);
+			getChild<LLUICtrl>("glow")->setValue(glow);
+			getChildView("glow")->setEnabled(editable);
+			getChild<LLUICtrl>("glow")->setTentative(!identical);
+			getChildView("glow label")->setEnabled(editable);
 
 		}
 
@@ -657,9 +654,9 @@ void LLPanelFace::getState()
 			{
 				llwarns << "failed childGetSelectionInterface for 'combobox shininess'" << llendl;
 			}
-			childSetEnabled("combobox shininess",editable);
-			childSetTentative("combobox shininess",!identical);
-			childSetEnabled("label shininess",editable);
+			getChildView("combobox shininess")->setEnabled(editable);
+			getChild<LLUICtrl>("combobox shininess")->setTentative(!identical);
+			getChildView("label shininess")->setEnabled(editable);
 		}
 
 		{
@@ -682,9 +679,9 @@ void LLPanelFace::getState()
 			{
 				llwarns << "failed childGetSelectionInterface for 'combobox bumpiness'" << llendl;
 			}
-			childSetEnabled("combobox bumpiness",editable);
-			childSetTentative("combobox bumpiness",!identical);
-			childSetEnabled("label bumpiness",editable);
+			getChildView("combobox bumpiness")->setEnabled(editable);
+			getChild<LLUICtrl>("combobox bumpiness")->setTentative(!identical);
+			getChildView("label bumpiness")->setEnabled(editable);
 		}
 
 		{
@@ -708,19 +705,14 @@ void LLPanelFace::getState()
 			{
 				llwarns << "failed childGetSelectionInterface for 'combobox texgen'" << llendl;
 			}
-			childSetEnabled("combobox texgen",editable);
-			childSetTentative("combobox texgen",!identical);
-			childSetEnabled("tex gen",editable);
+			getChildView("combobox texgen")->setEnabled(editable);
+			getChild<LLUICtrl>("combobox texgen")->setTentative(!identical);
+			getChildView("tex gen")->setEnabled(editable);
 
 			if (selected_texgen == 1)
 			{
-				childSetText("tex scale",getString("string repeats per meter"));
-				childSetValue("TexScaleU", 2.0f * childGetValue("TexScaleU").asReal() );
-				childSetValue("TexScaleV", 2.0f * childGetValue("TexScaleV").asReal() );
-			}
-			else
-			{
-				childSetText("tex scale",getString("string repeats per face"));
+				getChild<LLUICtrl>("TexScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() );
+				getChild<LLUICtrl>("TexScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() );
 			}
 
 		}
@@ -736,14 +728,14 @@ void LLPanelFace::getState()
 			} func;
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, fullbrightf );
 
-			childSetValue("checkbox fullbright",(S32)fullbrightf);
-			childSetEnabled("checkbox fullbright",editable);
-			childSetTentative("checkbox fullbright",!identical);
+			getChild<LLUICtrl>("checkbox fullbright")->setValue((S32)fullbrightf);
+			getChildView("checkbox fullbright")->setEnabled(editable);
+			getChild<LLUICtrl>("checkbox fullbright")->setTentative(!identical);
 		}
 		
 		// Repeats per meter label
 		{
-			childSetEnabled("rpt",editable);
+			getChildView("rpt")->setEnabled(editable);
 		}
 
 		// Repeats per meter
@@ -763,14 +755,14 @@ void LLPanelFace::getState()
 			} func;			
 			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, repeats );
 			
-			childSetValue("rptctrl", editable ? repeats : 0);
-			childSetTentative("rptctrl",!identical);
+			getChild<LLUICtrl>("rptctrl")->setValue(editable ? repeats : 0);
+			getChild<LLUICtrl>("rptctrl")->setTentative(!identical);
 			LLComboBox*	mComboTexGen = getChild<LLComboBox>("combobox texgen");
 			if (mComboTexGen)
 			{
 				BOOL enabled = editable && (!mComboTexGen || mComboTexGen->getCurrentIndex() != 1);
-				childSetEnabled("rptctrl",enabled);
-				childSetEnabled("button apply",enabled);
+				getChildView("rptctrl")->setEnabled(enabled);
+				getChildView("button apply")->setEnabled(enabled);
 			}
 		}
 	}
@@ -794,21 +786,19 @@ void LLPanelFace::getState()
 			mColorSwatch->setFallbackImageName("locked_image.j2c" );
 			mColorSwatch->setValid(FALSE);
 		}
-		childSetEnabled("color trans",FALSE);
-		childSetEnabled("rpt",FALSE);
-		childSetEnabled("tex scale",FALSE);
-		childSetEnabled("tex offset",FALSE);
-		childSetEnabled("tex rotate",FALSE);
-		childSetEnabled("tex gen",FALSE);
-		childSetEnabled("label shininess",FALSE);
-		childSetEnabled("label bumpiness",FALSE);
-
-		childSetEnabled("textbox autofix",FALSE);
-
-		childSetEnabled("button align",FALSE);
-		childSetEnabled("button apply",FALSE);
-		//childSetEnabled("has media", FALSE);
-		//childSetEnabled("media info set", FALSE);
+		getChildView("color trans")->setEnabled(FALSE);
+		getChildView("rpt")->setEnabled(FALSE);
+		getChildView("tex offset")->setEnabled(FALSE);
+		getChildView("tex gen")->setEnabled(FALSE);
+		getChildView("label shininess")->setEnabled(FALSE);
+		getChildView("label bumpiness")->setEnabled(FALSE);
+
+		getChildView("textbox autofix")->setEnabled(FALSE);
+
+		getChildView("button align")->setEnabled(FALSE);
+		getChildView("button apply")->setEnabled(FALSE);
+		//getChildView("has media")->setEnabled(FALSE);
+		//getChildView("media info set")->setEnabled(FALSE);
 		
 	}
 }
@@ -938,7 +928,7 @@ void LLPanelFace::onClickApply(void* userdata)
 	gFocusMgr.setKeyboardFocus( NULL );
 
 	//F32 repeats_per_meter = self->mCtrlRepeatsPerMeter->get();
-	F32 repeats_per_meter = (F32)self->childGetValue( "rptctrl" ).asReal();//self->mCtrlRepeatsPerMeter->get();
+	F32 repeats_per_meter = (F32)self->getChild<LLUICtrl>("rptctrl")->getValue().asReal();//self->mCtrlRepeatsPerMeter->get();
 	LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter );
 }
 
diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp
index e71e57130f85b19efe22e02e82a5e0387a0669b6..2660814afc8d6719b3b5fcf96ccabe9536520190 100644
--- a/indra/newview/llpanelgenerictip.cpp
+++ b/indra/newview/llpanelgenerictip.cpp
@@ -38,7 +38,7 @@ LLPanelGenericTip::LLPanelGenericTip(
 {
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_generic_tip.xml");
 
-	childSetValue("message", notification->getMessage());
+	getChild<LLUICtrl>("message")->setValue(notification->getMessage());
 
 
 	S32 max_line_count =  gSavedSettings.getS32("TipToastMessageLineCount");
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 347937af013abc7a2485ed547b7c32265dd9e013..e42057e93ac7ffe8833444b091a36a8d4ada34cf 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -419,19 +419,14 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 
 	getChild<LLUICtrl>("prepend_founded_by")->setVisible(!is_null_group_id);
 
-	LLAccordionCtrl* tab_ctrl = findChild<LLAccordionCtrl>("group_accordion");
-	if(tab_ctrl)
-		tab_ctrl->reset();
+	LLAccordionCtrl* tab_ctrl = getChild<LLAccordionCtrl>("groups_accordion");
+	tab_ctrl->reset();
 
-	LLAccordionCtrlTab* tab_general = findChild<LLAccordionCtrlTab>("group_general_tab");
-	LLAccordionCtrlTab* tab_roles = findChild<LLAccordionCtrlTab>("group_roles_tab");
-	LLAccordionCtrlTab* tab_notices = findChild<LLAccordionCtrlTab>("group_notices_tab");
-	LLAccordionCtrlTab* tab_land = findChild<LLAccordionCtrlTab>("group_land_tab");
+	LLAccordionCtrlTab* tab_general = getChild<LLAccordionCtrlTab>("group_general_tab");
+	LLAccordionCtrlTab* tab_roles = getChild<LLAccordionCtrlTab>("group_roles_tab");
+	LLAccordionCtrlTab* tab_notices = getChild<LLAccordionCtrlTab>("group_notices_tab");
+	LLAccordionCtrlTab* tab_land = getChild<LLAccordionCtrlTab>("group_land_tab");
 
-
-	if(!tab_general || !tab_roles || !tab_notices || !tab_land)
-		return;
-	
 	if(mButtonJoin)
 		mButtonJoin->setVisible(false);
 
@@ -492,6 +487,8 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 			button_chat->setVisible(is_member);
 	}
 
+	tab_ctrl->arrange();
+
 	reposButtons();
 	update(GC_ALL);//show/hide "join" button if data is already ready
 }
@@ -542,6 +539,7 @@ void LLPanelGroup::draw()
 	{
 		mRefreshTimer.stop();
 		childEnable("btn_refresh");
+		childEnable("groups_accordion");
 	}
 
 	LLButton* button_apply = findChild<LLButton>("btn_apply");
@@ -570,6 +568,8 @@ void LLPanelGroup::refreshData()
 	
 	// 5 second timeout
 	childDisable("btn_refresh");
+	childDisable("groups_accordion");
+
 	mRefreshTimer.start();
 	mRefreshTimer.setTimerExpirySec(5);
 }
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 3c752f760609c9ef632026fb9f549481f2c6df7e..840b98213d66bb841a2a2cd29bfc46708dfe31b4 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -178,8 +178,7 @@ BOOL LLPanelGroupGeneral::postBuild()
 	mComboActiveTitle = getChild<LLComboBox>("active_title", recurse);
 	if (mComboActiveTitle)
 	{
-		mComboActiveTitle->setCommitCallback(onCommitTitle, this);
-		mComboActiveTitle->resetDirty();
+		mComboActiveTitle->setCommitCallback(onCommitAny, this);
 	}
 
 	mIncompleteMemberDataStr = getString("incomplete_member_data_str");
@@ -271,16 +270,6 @@ void LLPanelGroupGeneral::onCommitEnrollment(LLUICtrl* ctrl, void* data)
 	}
 }
 
-// static
-void LLPanelGroupGeneral::onCommitTitle(LLUICtrl* ctrl, void* data)
-{
-	LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data;
-	if (self->mGroupID.isNull() || !self->mAllowEdit) return;
-	LLGroupMgr::getInstance()->sendGroupTitleUpdate(self->mGroupID,self->mComboActiveTitle->getCurrentID());
-	self->update(GC_TITLES);
-	self->mComboActiveTitle->resetDirty();
-}
-
 // static
 void LLPanelGroupGeneral::onClickInfo(void *userdata)
 {
@@ -350,6 +339,13 @@ void LLPanelGroupGeneral::draw()
 
 bool LLPanelGroupGeneral::apply(std::string& mesg)
 {
+	if (!mGroupID.isNull() && mAllowEdit && mComboActiveTitle && mComboActiveTitle->isDirty())
+	{
+		LLGroupMgr::getInstance()->sendGroupTitleUpdate(mGroupID,mComboActiveTitle->getCurrentID());
+		update(GC_TITLES);
+		mComboActiveTitle->resetDirty();
+	}
+
 	BOOL has_power_in_group = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY);
 
 	if (has_power_in_group || mGroupID.isNull())
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index 3a2079d228f5bba99963a679f7a46617f4c4c7d7..cbf173f845cd889551edf9b1486b9b472ca3b1f9 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -71,7 +71,6 @@ private:
 	static void onFocusEdit(LLFocusableElement* ctrl, void* data);
 	static void onCommitAny(LLUICtrl* ctrl, void* data);
 	static void onCommitUserOnly(LLUICtrl* ctrl, void* data);
-	static void onCommitTitle(LLUICtrl* ctrl, void* data);
 	static void onCommitEnrollment(LLUICtrl* ctrl, void* data);
 	static void onClickInfo(void* userdata);
 	static void onReceiveNotices(LLUICtrl* ctrl, void* data);
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 3514664f019555b53723292ec7939d03caaa089e..d4736d22ae6dce6918c6a76e6e839b3078f627a4 100644
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -365,7 +365,7 @@ void LLPanelGroupLandMoney::impl::setYourContributionTextField(int contrib)
 
 void LLPanelGroupLandMoney::impl::setYourMaxContributionTextBox(int max)
 {
-	mPanel.childSetTextArg("your_contribution_max_value", "[AMOUNT]", llformat("%d", max));
+	mPanel.getChild<LLUICtrl>("your_contribution_max_value")->setTextArg("[AMOUNT]", llformat("%d", max));
 }
 
 //static
@@ -427,14 +427,14 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
 			
 			S32 total_contribution;
 			msg->getS32("QueryData", "ActualArea", total_contribution, 0);
-			mPanel.childSetTextArg("total_contributed_land_value", "[AREA]", llformat("%d", total_contribution));
+			mPanel.getChild<LLUICtrl>("total_contributed_land_value")->setTextArg("[AREA]", llformat("%d", total_contribution));
 
 			S32 committed;
 			msg->getS32("QueryData", "BillableArea", committed, 0);
-			mPanel.childSetTextArg("total_land_in_use_value", "[AREA]", llformat("%d", committed));
+			mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed));
 			
 			S32 available = total_contribution - committed;
-			mPanel.childSetTextArg("land_available_value", "[AREA]", llformat("%d", available));
+			mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available));
 
 			if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
 			{
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 9dc31f770f374fa3c52e02a1ccdc0575d723cf37..7489c02d8dd0bc1b38a27b8c9eceb08a30309d5c 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -83,7 +83,7 @@ void LLPanelChatControlPanel::updateCallButton()
 	
 	if (!session) 
 	{
-		childSetEnabled("call_btn", false);
+		getChildView("call_btn")->setEnabled(false);
 		return;
 	}
 
@@ -93,14 +93,14 @@ void LLPanelChatControlPanel::updateCallButton()
 	BOOL enable_connect = session_initialized
 		&& voice_enabled
 		&& callback_enabled;
-	childSetEnabled("call_btn", enable_connect);
+	getChildView("call_btn")->setEnabled(enable_connect);
 }
 
 void LLPanelChatControlPanel::updateButtons(bool is_call_started)
 {
-	childSetVisible("end_call_btn_panel", is_call_started);
-	childSetVisible("voice_ctrls_btn_panel", is_call_started);
-	childSetVisible("call_btn_panel", ! is_call_started);
+	getChildView("end_call_btn_panel")->setVisible( is_call_started);
+	getChildView("voice_ctrls_btn_panel")->setVisible( is_call_started);
+	getChildView("call_btn_panel")->setVisible( ! is_call_started);
 	updateCallButton();
 	
 }
@@ -156,7 +156,7 @@ BOOL LLPanelIMControlPanel::postBuild()
 	childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this));
 	childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this));
 	childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this));
-	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
+	getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
 
 	setFocusReceivedCallback(boost::bind(&LLPanelIMControlPanel::onFocusReceived, this));
 	
@@ -209,12 +209,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 	LLAvatarTracker::instance().addParticularFriendObserver(mAvatarID, this);
 
 	// Disable "Add friend" button for friends.
-	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID));
+	getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(mAvatarID));
 	
 	// Disable "Teleport" button if friend is offline
 	if(LLAvatarActions::isFriend(mAvatarID))
 	{
-		childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID));
+		getChildView("teleport_btn")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(mAvatarID));
 	}
 
 	getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID);
@@ -225,24 +225,24 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 		im_model.findIMSession(session_id);
 	if( im_session && !im_session->mOtherParticipantIsAvatar )
 	{
-		childSetEnabled("view_profile_btn", FALSE);
-		childSetEnabled("add_friend_btn", FALSE);
+		getChildView("view_profile_btn")->setEnabled(FALSE);
+		getChildView("add_friend_btn")->setEnabled(FALSE);
 
-		childSetEnabled("share_btn", FALSE);
-		childSetEnabled("teleport_btn", FALSE);
-		childSetEnabled("pay_btn", FALSE);
+		getChildView("share_btn")->setEnabled(FALSE);
+		getChildView("teleport_btn")->setEnabled(FALSE);
+		getChildView("pay_btn")->setEnabled(FALSE);
 	}
 }
 
 //virtual
 void LLPanelIMControlPanel::changed(U32 mask)
 {
-	childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID));
+	getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(mAvatarID));
 	
 	// Disable "Teleport" button if friend is offline
 	if(LLAvatarActions::isFriend(mAvatarID))
 	{
-		childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID));
+		getChildView("teleport_btn")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(mAvatarID));
 	}
 }
 
diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp
index e5c598d019744bfa198229b35226144196efba91..04c1a86f69fd73fee2dfc166aba0e7ea25ab45b2 100644
--- a/indra/newview/llpanelland.cpp
+++ b/indra/newview/llpanelland.cpp
@@ -58,15 +58,14 @@ public:
 
 BOOL	LLPanelLandInfo::postBuild()
 {
-
-	childSetAction("button buy land",onClickClaim,this);
-	childSetAction("button abandon land",onClickRelease,this);
-	childSetAction("button subdivide land",onClickDivide,this);
-	childSetAction("button join land",onClickJoin,this);
-	childSetAction("button about land",onClickAbout,this);
+	childSetAction("button buy land",boost::bind(onClickClaim));
+	childSetAction("button abandon land", boost::bind(onClickRelease));
+	childSetAction("button subdivide land", boost::bind(onClickDivide));
+	childSetAction("button join land", boost::bind(onClickJoin));
+	childSetAction("button about land", boost::bind(onClickAbout));
 
 	mCheckShowOwners = getChild<LLCheckBoxCtrl>("checkbox show owners");
-	childSetValue("checkbox show owners", gSavedSettings.getBOOL("ShowParcelOwners"));
+	getChild<LLUICtrl>("checkbox show owners")->setValue(gSavedSettings.getBOOL("ShowParcelOwners"));
 
 	return TRUE;
 }
@@ -120,17 +119,17 @@ void LLPanelLandInfo::refresh()
 	if (!parcel || !regionp)
 	{
 		// nothing selected, disable panel
-		childSetVisible("label_area_price",false);
-		childSetVisible("label_area",false);
+		getChildView("label_area_price")->setVisible(false);
+		getChildView("label_area")->setVisible(false);
 
 		//mTextPrice->setText(LLStringUtil::null);
-		childSetText("textbox price",LLStringUtil::null);
+		getChild<LLUICtrl>("textbox price")->setValue(LLStringUtil::null);
 
-		childSetEnabled("button buy land",FALSE);
-		childSetEnabled("button abandon land",FALSE);
-		childSetEnabled("button subdivide land",FALSE);
-		childSetEnabled("button join land",FALSE);
-		childSetEnabled("button about land",FALSE);
+		getChildView("button buy land")->setEnabled(FALSE);
+		getChildView("button abandon land")->setEnabled(FALSE);
+		getChildView("button subdivide land")->setEnabled(FALSE);
+		getChildView("button join land")->setEnabled(FALSE);
+		getChildView("button about land")->setEnabled(FALSE);
 	}
 	else
 	{
@@ -148,11 +147,11 @@ void LLPanelLandInfo::refresh()
 			
 		if (is_public)
 		{
-			childSetEnabled("button buy land",TRUE);
+			getChildView("button buy land")->setEnabled(TRUE);
 		}
 		else
 		{
-			childSetEnabled("button buy land",can_buy);
+			getChildView("button buy land")->setEnabled(can_buy);
 		}
 
 		BOOL owner_release = LLViewerParcelMgr::isParcelOwnedByAgent(parcel, GP_LAND_RELEASE);
@@ -164,16 +163,16 @@ void LLPanelLandInfo::refresh()
 		BOOL manager_divideable = ( gAgent.canManageEstate()
 								&& ((parcel->getOwnerID() == regionp->getOwner()) || owner_divide) );
 
-		childSetEnabled("button abandon land",owner_release || manager_releaseable || gAgent.isGodlike());
+		getChildView("button abandon land")->setEnabled(owner_release || manager_releaseable || gAgent.isGodlike());
 
 		// only mainland sims are subdividable by owner
 		if (regionp->getRegionFlags() && REGION_FLAGS_ALLOW_PARCEL_CHANGES)
 		{
-			childSetEnabled("button subdivide land",owner_divide || manager_divideable || gAgent.isGodlike());
+			getChildView("button subdivide land")->setEnabled(owner_divide || manager_divideable || gAgent.isGodlike());
 		}
 		else
 		{
-			childSetEnabled("button subdivide land",manager_divideable || gAgent.isGodlike());
+			getChildView("button subdivide land")->setEnabled(manager_divideable || gAgent.isGodlike());
 		}
 		
 		// To join land, must have something selected,
@@ -184,15 +183,15 @@ void LLPanelLandInfo::refresh()
 			//&& LLViewerParcelMgr::getInstance()->getSelfCount() > 1
 			&& !LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected())
 		{
-			childSetEnabled("button join land",TRUE);
+			getChildView("button join land")->setEnabled(TRUE);
 		}
 		else
 		{
 			lldebugs << "Invalid selection for joining land" << llendl;
-			childSetEnabled("button join land",FALSE);
+			getChildView("button join land")->setEnabled(FALSE);
 		}
 
-		childSetEnabled("button about land",TRUE);
+		getChildView("button about land")->setEnabled(TRUE);
 
 		// show pricing information
 		S32 area;
@@ -207,48 +206,48 @@ void LLPanelLandInfo::refresh()
 								   &dwell);
 		if(is_public || (is_for_sale && LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected()))
 		{
-			childSetTextArg("label_area_price","[PRICE]", llformat("%d",claim_price));
-			childSetTextArg("label_area_price","[AREA]", llformat("%d",area));
-			childSetVisible("label_area_price",true);
-			childSetVisible("label_area",false);
+			getChild<LLUICtrl>("label_area_price")->setTextArg("[PRICE]", llformat("%d",claim_price));
+			getChild<LLUICtrl>("label_area_price")->setTextArg("[AREA]", llformat("%d",area));
+			getChildView("label_area_price")->setVisible(true);
+			getChildView("label_area")->setVisible(false);
 		}
 		else
 		{
-			childSetVisible("label_area_price",false);
-			childSetTextArg("label_area","[AREA]", llformat("%d",area));
-			childSetVisible("label_area",true);
+			getChildView("label_area_price")->setVisible(false);
+			getChild<LLUICtrl>("label_area")->setTextArg("[AREA]", llformat("%d",area));
+			getChildView("label_area")->setVisible(true);
 		}
 	}
 }
 
 
 //static
-void LLPanelLandInfo::onClickClaim(void*)
+void LLPanelLandInfo::onClickClaim()
 {
 	LLViewerParcelMgr::getInstance()->startBuyLand();
 }
 
 
 //static
-void LLPanelLandInfo::onClickRelease(void*)
+void LLPanelLandInfo::onClickRelease()
 {
 	LLViewerParcelMgr::getInstance()->startReleaseLand();
 }
 
 // static
-void LLPanelLandInfo::onClickDivide(void*)
+void LLPanelLandInfo::onClickDivide()
 {
 	LLViewerParcelMgr::getInstance()->startDivideLand();
 }
 
 // static
-void LLPanelLandInfo::onClickJoin(void*)
+void LLPanelLandInfo::onClickJoin()
 {
 	LLViewerParcelMgr::getInstance()->startJoinLand();
 }
 
 //static
-void LLPanelLandInfo::onClickAbout(void*)
+void LLPanelLandInfo::onClickAbout()
 {
 	// Promote the rectangle selection to a parcel selection
 	if (!LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected())
diff --git a/indra/newview/llpanelland.h b/indra/newview/llpanelland.h
index 70512893939e5dcf8cbe659c1da75de98abebcda..2ab1618d47457ca20199ff68f617b02fa29d97f0 100644
--- a/indra/newview/llpanelland.h
+++ b/indra/newview/llpanelland.h
@@ -49,22 +49,13 @@ public:
 	LLCheckBoxCtrl	*mCheckShowOwners;
 
 protected:
-	static void onClickClaim(void*);
-	static void onClickRelease(void*);
-	static void onClickDivide(void*);
-	static void onClickJoin(void*);
-	static void onClickAbout(void*);
+	static void onClickClaim();
+	static void onClickRelease();
+	static void onClickDivide();
+	static void onClickJoin();
+	static void onClickAbout();
 
 protected:
-	//LLTextBox*		mTextPriceLabel;
-	//LLTextBox*		mTextPrice;
-
-	//LLButton*		mBtnClaimLand;
-	//LLButton*		mBtnReleaseLand;
-	//LLButton*		mBtnDivideLand;
-	//LLButton*		mBtnJoinLand;
-	//LLButton*		mBtnAbout;
-	
 	virtual BOOL	postBuild();
 
 	static LLPanelLandSelectObserver* sObserver;
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index e6281f4605decc1e289509ca2d4013f5cd6a68f7..b69cee95864c1048fa40c36c375cc5f2f6fb6ada 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -117,11 +117,54 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)
 	switch(type)
 	{
 		case CREATE_LANDMARK:
+		{
 			mCurrentTitle = getString("title_create_landmark");
 
 			mLandmarkTitle->setVisible(FALSE);
 			mLandmarkTitleEditor->setVisible(TRUE);
 			mNotesEditor->setEnabled(TRUE);
+
+			LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
+			std::string name = parcel_mgr->getAgentParcelName();
+			LLVector3 agent_pos = gAgent.getPositionAgent();
+
+			if (name.empty())
+			{
+				S32 region_x = llround(agent_pos.mV[VX]);
+				S32 region_y = llround(agent_pos.mV[VY]);
+				S32 region_z = llround(agent_pos.mV[VZ]);
+
+				std::string region_name;
+				LLViewerRegion* region = parcel_mgr->getSelectionRegion();
+				if (region)
+				{
+					region_name = region->getName();
+				}
+				else
+				{
+					region_name = getString("unknown");
+				}
+
+				mLandmarkTitleEditor->setText(llformat("%s (%d, %d, %d)",
+									  region_name.c_str(), region_x, region_y, region_z));
+			}
+			else
+			{
+				mLandmarkTitleEditor->setText(name);
+			}
+
+			std::string desc;
+			LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, agent_pos);
+			mNotesEditor->setText(desc);
+
+			// Moved landmark creation here from LLPanelLandmarkInfo::processParcelInfo()
+			// because we use only agent's current coordinates instead of waiting for
+			// remote parcel request to complete.
+			if (!LLLandmarkActions::landmarkAlreadyExists())
+			{
+				createLandmark(LLUUID());
+			}
+		}
 		break;
 
 		case LANDMARK:
@@ -186,28 +229,6 @@ void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data)
 	info["global_y"] = parcel_data.global_y;
 	info["global_z"] = parcel_data.global_z;
 	notifyParent(info);
-
-	if (mInfoType == CREATE_LANDMARK)
-	{
-		if (parcel_data.name.empty())
-		{
-			mLandmarkTitleEditor->setText(llformat("%s (%d, %d, %d)",
-								  parcel_data.sim_name.c_str(), region_x, region_y, region_z));
-		}
-		else
-		{
-			mLandmarkTitleEditor->setText(parcel_data.name);
-		}
-
-		std::string desc;
-		LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent());
-		mNotesEditor->setText(desc);
-
-		if (!LLLandmarkActions::landmarkAlreadyExists())
-		{
-			createLandmark(mFolderCombo->getValue().asUUID());
-		}
-	}
 }
 
 void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index d8250718251de6705022a7f50a743d31d8ed801a..43814ac652095650b994275b277d850114e6c37a 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -716,8 +716,8 @@ void LLLandmarksPanel::updateListCommands()
 	bool trash_enabled = isActionEnabled("delete");
 
 	// keep Options & Add Landmark buttons always enabled
-	mListCommands->childSetEnabled(ADD_FOLDER_BUTTON_NAME, add_folder_enabled);
-	mListCommands->childSetEnabled(TRASH_BUTTON_NAME, trash_enabled);
+	mListCommands->getChildView(ADD_FOLDER_BUTTON_NAME)->setEnabled(add_folder_enabled);
+	mListCommands->getChildView(TRASH_BUTTON_NAME)->setEnabled(trash_enabled);
 }
 
 void LLLandmarksPanel::onActionsButtonClick()
diff --git a/indra/newview/llpanellandmedia.cpp b/indra/newview/llpanellandmedia.cpp
index ef15f971c99b28bd73876eac52f6664b88f7f55b..f17defda5524ead4242349f12d2eb7a19ce152c0 100644
--- a/indra/newview/llpanellandmedia.cpp
+++ b/indra/newview/llpanellandmedia.cpp
@@ -139,7 +139,7 @@ void LLPanelLandMedia::refresh()
 		mMediaURLEdit->setText(parcel->getMediaURL());
 		mMediaURLEdit->setEnabled( FALSE );
 
-		childSetText("current_url", parcel->getMediaCurrentURL());
+		getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaCurrentURL());
 
 		mMediaDescEdit->setText(parcel->getMediaDesc());
 		mMediaDescEdit->setEnabled( can_change_media );
@@ -151,7 +151,7 @@ void LLPanelLandMedia::refresh()
 		}
 		setMediaType(mime_type);
 		mMediaTypeCombo->setEnabled( can_change_media );
-		childSetText("mime_type", mime_type);
+		getChild<LLUICtrl>("mime_type")->setValue(mime_type);
 
 		mMediaUrlCheck->set( parcel->getObscureMedia() );
 		mMediaUrlCheck->setEnabled( can_change_media );
@@ -249,7 +249,7 @@ void LLPanelLandMedia::setMediaType(const std::string& mime_type)
 		// localizable - "none" for example (see EXT-6542)
 		mime_str = LLMIMETypes::getDefaultMimeTypeTranslation();
 	}
-	childSetText("mime_type", mime_str);
+	getChild<LLUICtrl>("mime_type")->setValue(mime_str);
 }
 
 void LLPanelLandMedia::setMediaURL(const std::string& media_url)
@@ -263,7 +263,7 @@ void LLPanelLandMedia::setMediaURL(const std::string& media_url)
 
 	mMediaURLEdit->onCommit();
 	// LLViewerParcelMedia::sendMediaNavigateMessage(media_url);
-	childSetText("current_url", media_url);
+	getChild<LLUICtrl>("current_url")->setValue(media_url);
 }
 std::string LLPanelLandMedia::getMediaURL()
 {
@@ -274,11 +274,11 @@ std::string LLPanelLandMedia::getMediaURL()
 void LLPanelLandMedia::onCommitType(LLUICtrl *ctrl, void *userdata)
 {
 	LLPanelLandMedia *self = (LLPanelLandMedia *)userdata;
-	std::string current_type = LLMIMETypes::widgetType(self->childGetText("mime_type"));
+	std::string current_type = LLMIMETypes::widgetType(self->getChild<LLUICtrl>("mime_type")->getValue().asString());
 	std::string new_type = self->mMediaTypeCombo->getValue();
 	if(current_type != new_type)
 	{
-		self->childSetText("mime_type", LLMIMETypes::findDefaultMimeType(new_type));
+		self->getChild<LLUICtrl>("mime_type")->setValue(LLMIMETypes::findDefaultMimeType(new_type));
 	}
 	onCommitAny(ctrl, userdata);
 
@@ -298,7 +298,7 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata)
 	// Extract data from UI
 	std::string media_url	= self->mMediaURLEdit->getText();
 	std::string media_desc	= self->mMediaDescEdit->getText();
-	std::string mime_type	= self->childGetText("mime_type");
+	std::string mime_type	= self->getChild<LLUICtrl>("mime_type")->getValue().asString();
 	U8 media_auto_scale		= self->mMediaAutoScaleCheck->get();
 	U8 media_loop           = self->mMediaLoopCheck->get();
 	U8 obscure_media		= self->mMediaUrlCheck->get();
@@ -307,7 +307,7 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata)
 	LLUUID media_id			= self->mMediaTextureCtrl->getImageAssetID();
 
 
-	self->childSetText("mime_type", mime_type);
+	self->getChild<LLUICtrl>("mime_type")->setValue(mime_type);
 
 	// Remove leading/trailing whitespace (common when copying/pasting)
 	LLStringUtil::trim(media_url);
@@ -348,7 +348,7 @@ void LLPanelLandMedia::onResetBtn(void *userdata)
 	LLParcel* parcel = self->mParcel->getParcel();
 	// LLViewerMedia::navigateHome();
 	self->refresh();
-	self->childSetText("current_url", parcel->getMediaURL());
+	self->getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaURL());
 	// LLViewerParcelMedia::sendMediaNavigateMessage(parcel->getMediaURL());
 
 }
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 3af38f35eff10b26b6c4ffda6bba884cbb9589cc..be1afbd8d70aa473f0a80fe5bbc148e0ed08a3ad 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -205,7 +205,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	}
 
 #if !USE_VIEWER_AUTH
-	childSetPrevalidate("username_edit", LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("username_edit")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe);
 	getChild<LLLineEditor>("password_edit")->setKeystrokeCallback(onPassKey, this);
 
 	// change z sort of clickable text to be behind buttons
@@ -435,8 +435,8 @@ void LLPanelLogin::giveFocus()
 	if( sInstance )
 	{
 		// Grab focus and move cursor to first blank input field
-		std::string username = sInstance->childGetText("username_edit");
-		std::string pass = sInstance->childGetText("password_edit");
+		std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString();
+		std::string pass = sInstance->getChild<LLUICtrl>("password_edit")->getValue().asString();
 
 		BOOL have_username = !username.empty();
 		BOOL have_pass = !pass.empty();
@@ -466,7 +466,7 @@ void LLPanelLogin::giveFocus()
 // static
 void LLPanelLogin::showLoginWidgets()
 {
-	sInstance->childSetVisible("login_widgets", true);
+	sInstance->getChildView("login_widgets")->setVisible( true);
 	LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
 	sInstance->reshapeBrowser();
 	// *TODO: Append all the usual login parameters, like first_login=Y etc.
@@ -508,16 +508,16 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential,
 	LLSD identifier = credential->getIdentifier();
 	if((std::string)identifier["type"] == "agent") 
 	{
-		sInstance->childSetText("username_edit", (std::string)identifier["first_name"] + " " + 
+		sInstance->getChild<LLUICtrl>("username_edit")->setValue((std::string)identifier["first_name"] + " " + 
 								(std::string)identifier["last_name"]);	
 	}
 	else if((std::string)identifier["type"] == "account")
 	{
-		sInstance->childSetText("username_edit", (std::string)identifier["account_name"]);		
+		sInstance->getChild<LLUICtrl>("username_edit")->setValue((std::string)identifier["account_name"]);		
 	}
 	else
 	{
-	  sInstance->childSetText("username_edit", std::string());	
+	  sInstance->getChild<LLUICtrl>("username_edit")->setValue(std::string());	
 	}
 	// if the password exists in the credential, set the password field with
 	// a filler to get some stars
@@ -533,13 +533,13 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential,
 		// fill it with MAX_PASSWORD characters so we get a 
 		// nice row of asterixes.
 		const std::string filler("123456789!123456");
-		sInstance->childSetText("password_edit", std::string("123456789!123456"));
+		sInstance->getChild<LLUICtrl>("password_edit")->setValue(std::string("123456789!123456"));
 	}
 	else
 	{
-		sInstance->childSetText("password_edit", std::string());		
+		sInstance->getChild<LLUICtrl>("password_edit")->setValue(std::string());		
 	}
-	sInstance->childSetValue("remember_check", remember);
+	sInstance->getChild<LLUICtrl>("remember_check")->setValue(remember);
 }
 
 
@@ -566,9 +566,9 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential,
 		authenticator = credential->getAuthenticator();
 	}
 
-	std::string username = sInstance->childGetText("username_edit");
+	std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString();
 	LLStringUtil::trim(username);
-	std::string password = sInstance->childGetText("password_edit");
+	std::string password = sInstance->getChild<LLUICtrl>("password_edit")->getValue().asString();
 
 	LL_INFOS2("Credentials", "Authentication") << "retrieving username:" << username << LL_ENDL;
 	// determine if the username is a first/last form or not.
@@ -615,7 +615,7 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential,
 		}
 	}
 	credential = gSecAPIHandler->createCredential(LLGridManager::getInstance()->getGrid(), identifier, authenticator);
-	remember = sInstance->childGetValue("remember_check");
+	remember = sInstance->getChild<LLUICtrl>("remember_check")->getValue();
 }
 
 // static
@@ -643,9 +643,9 @@ BOOL LLPanelLogin::areCredentialFieldsDirty()
 	}
 	else
 	{
-		std::string username = sInstance->childGetText("username_edit");
+		std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString();
 		LLStringUtil::trim(username);
-		std::string password = sInstance->childGetText("password_edit");
+		std::string password = sInstance->getChild<LLUICtrl>("password_edit")->getValue().asString();
 		LLLineEditor* ctrl = sInstance->getChild<LLLineEditor>("username_edit");
 		if(ctrl && ctrl->isDirty())
 		{
@@ -693,12 +693,12 @@ void LLPanelLogin::updateLocationCombo( bool force_visible )
 	if ( ! force_visible )
 		show_start = gSavedSettings.getBOOL("ShowStartLocation");
 	
-	sInstance->childSetVisible("start_location_combo", show_start);
-	sInstance->childSetVisible("start_location_text", show_start);
+	sInstance->getChildView("start_location_combo")->setVisible( show_start);
+	sInstance->getChildView("start_location_text")->setVisible( show_start);
 	
 	BOOL show_server = gSavedSettings.getBOOL("ForceShowGrid");
-	sInstance->childSetVisible("server_combo_text", show_server);	
-	sInstance->childSetVisible("server_combo", show_server);
+	sInstance->getChildView("server_combo_text")->setVisible( show_server);	
+	sInstance->getChildView("server_combo")->setVisible( show_server);
 }
 
 // static
@@ -958,7 +958,7 @@ void LLPanelLogin::onClickConnect(void *)
 			return;
 		}
 		updateStartSLURL();
-		std::string username = sInstance->childGetText("username_edit");
+		std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString();
 
 		
 		if(username.empty())
@@ -1073,7 +1073,7 @@ void LLPanelLogin::updateServer()
 		if(sInstance && !sInstance->areCredentialFieldsDirty())
 		{
 			LLPointer<LLCredential> credential = gSecAPIHandler->loadCredential(LLGridManager::getInstance()->getGrid());	
-			bool remember = sInstance->childGetValue("remember_check");
+			bool remember = sInstance->getChild<LLUICtrl>("remember_check")->getValue();
 			sInstance->setFields(credential, remember);
 		}
 		// grid changed so show new splash screen (possibly)
@@ -1167,6 +1167,6 @@ void LLPanelLogin::updateLoginPanelLinks()
 	
 	// need to call through sInstance, as it's called from onSelectServer, which
 	// is static.
-	sInstance->childSetVisible("create_new_account_text", system_grid);
-	sInstance->childSetVisible("forgot_password_text", system_grid);
+	sInstance->getChildView("create_new_account_text")->setVisible( system_grid);
+	sInstance->getChildView("forgot_password_text")->setVisible( system_grid);
 }
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index f5e33034a3e1f9de4735a4be67c2e8cdacf0f8e2..27e054af349934b40c28ba0285bbf7c1669000f8 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -39,6 +39,7 @@
 #include "llinventorypanel.h"
 #include "llfiltereditor.h"
 #include "llfloaterreg.h"
+#include "lloutfitobserver.h"
 #include "llpreviewtexture.h"
 #include "llresmgr.h"
 #include "llscrollcontainer.h"
@@ -484,7 +485,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
 void LLPanelMainInventory::onFilterSelected()
 {
 	// Find my index
-	mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs");
+	mActivePanel = (LLInventoryPanel*)getChild<LLTabContainer>("inventory filter tabs")->getCurrentPanel();
 
 	if (!mActivePanel)
 	{
@@ -492,7 +493,7 @@ void LLPanelMainInventory::onFilterSelected()
 	}
 
 	BOOL recent_active = ("Recent Items" == mActivePanel->getName());
-	childSetVisible("add_btn_panel", !recent_active);
+	getChildView("add_btn_panel")->setVisible( !recent_active);
 
 	setFilterSubString(mFilterSubString);
 	LLInventoryFilter* filter = mActivePanel->getFilter();
@@ -584,7 +585,7 @@ void LLPanelMainInventory::updateItemcountText()
 	{
 		text = getString("ItemcountUnknown");
 	}
-	childSetText("ItemcountText",text);
+	getChild<LLUICtrl>("ItemcountText")->setValue(text);
 }
 
 void LLPanelMainInventory::setFilterTextFromFilter() 
@@ -651,7 +652,7 @@ void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_dat
 	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
 	if (!self) return;
 
-	bool since_logoff= self->childGetValue("check_since_logoff");
+	bool since_logoff= self->getChild<LLUICtrl>("check_since_logoff")->getValue();
 	
 	if (!since_logoff && 
 	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
@@ -691,7 +692,7 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
 	{
 		since_logoff = false;
 	}
-	self->childSetValue("check_since_logoff", since_logoff);
+	self->getChild<LLUICtrl>("check_since_logoff")->setValue(since_logoff);
 }
 
 void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
@@ -714,20 +715,20 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
 	// update the ui elements
 	setTitle(mFilter->getName());
 
-	childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
-
-	childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
-	childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
-	childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
-	childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
-	childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
-	childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
-	childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
-	childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
-	childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
-	childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
-	childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
-	childSetValue("check_since_logoff", mFilter->isSinceLogoff());
+	getChild<LLUICtrl>("check_animation")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION));
+
+	getChild<LLUICtrl>("check_calling_card")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD));
+	getChild<LLUICtrl>("check_clothing")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE));
+	getChild<LLUICtrl>("check_gesture")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE));
+	getChild<LLUICtrl>("check_landmark")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK));
+	getChild<LLUICtrl>("check_notecard")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD));
+	getChild<LLUICtrl>("check_object")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT));
+	getChild<LLUICtrl>("check_script")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_LSL));
+	getChild<LLUICtrl>("check_sound")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND));
+	getChild<LLUICtrl>("check_texture")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE));
+	getChild<LLUICtrl>("check_snapshot")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT));
+	getChild<LLUICtrl>("check_show_empty")->setValue(show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
+	getChild<LLUICtrl>("check_since_logoff")->setValue(mFilter->isSinceLogoff());
 	mSpinSinceHours->set((F32)(hours % 24));
 	mSpinSinceDays->set((F32)(hours / 24));
 }
@@ -738,32 +739,32 @@ void LLFloaterInventoryFinder::draw()
 	U32 filter = 0xffffffff;
 	BOOL filtered_by_all_types = TRUE;
 
-	if (!childGetValue("check_animation"))
+	if (!getChild<LLUICtrl>("check_animation")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_ANIMATION);
 		filtered_by_all_types = FALSE;
 	}
 
 
-	if (!childGetValue("check_calling_card"))
+	if (!getChild<LLUICtrl>("check_calling_card")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_clothing"))
+	if (!getChild<LLUICtrl>("check_clothing")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_WEARABLE);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_gesture"))
+	if (!getChild<LLUICtrl>("check_gesture")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_GESTURE);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_landmark"))
+	if (!getChild<LLUICtrl>("check_landmark")->getValue())
 
 
 	{
@@ -771,38 +772,38 @@ void LLFloaterInventoryFinder::draw()
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_notecard"))
+	if (!getChild<LLUICtrl>("check_notecard")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_NOTECARD);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_object"))
+	if (!getChild<LLUICtrl>("check_object")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_OBJECT);
 		filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_script"))
+	if (!getChild<LLUICtrl>("check_script")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_LSL);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_sound"))
+	if (!getChild<LLUICtrl>("check_sound")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_SOUND);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_texture"))
+	if (!getChild<LLUICtrl>("check_texture")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_TEXTURE);
 		filtered_by_all_types = FALSE;
 	}
 
-	if (!childGetValue("check_snapshot"))
+	if (!getChild<LLUICtrl>("check_snapshot")->getValue())
 	{
 		filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT);
 		filtered_by_all_types = FALSE;
@@ -842,12 +843,12 @@ void LLFloaterInventoryFinder::draw()
 
 BOOL LLFloaterInventoryFinder::getCheckShowEmpty()
 {
-	return childGetValue("check_show_empty");
+	return getChild<LLUICtrl>("check_show_empty")->getValue();
 }
 
 BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
 {
-	return childGetValue("check_since_logoff");
+	return getChild<LLUICtrl>("check_since_logoff")->getValue();
 }
 
 void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
@@ -862,17 +863,17 @@ void LLFloaterInventoryFinder::selectAllTypes(void* user_data)
 	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
 	if(!self) return;
 
-	self->childSetValue("check_animation", TRUE);
-	self->childSetValue("check_calling_card", TRUE);
-	self->childSetValue("check_clothing", TRUE);
-	self->childSetValue("check_gesture", TRUE);
-	self->childSetValue("check_landmark", TRUE);
-	self->childSetValue("check_notecard", TRUE);
-	self->childSetValue("check_object", TRUE);
-	self->childSetValue("check_script", TRUE);
-	self->childSetValue("check_sound", TRUE);
-	self->childSetValue("check_texture", TRUE);
-	self->childSetValue("check_snapshot", TRUE);
+	self->getChild<LLUICtrl>("check_animation")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_calling_card")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_clothing")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_gesture")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_landmark")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_notecard")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_object")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_script")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_sound")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_texture")->setValue(TRUE);
+	self->getChild<LLUICtrl>("check_snapshot")->setValue(TRUE);
 }
 
 //static
@@ -881,17 +882,17 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
 	LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data;
 	if(!self) return;
 
-	self->childSetValue("check_animation", FALSE);
-	self->childSetValue("check_calling_card", FALSE);
-	self->childSetValue("check_clothing", FALSE);
-	self->childSetValue("check_gesture", FALSE);
-	self->childSetValue("check_landmark", FALSE);
-	self->childSetValue("check_notecard", FALSE);
-	self->childSetValue("check_object", FALSE);
-	self->childSetValue("check_script", FALSE);
-	self->childSetValue("check_sound", FALSE);
-	self->childSetValue("check_texture", FALSE);
-	self->childSetValue("check_snapshot", FALSE);
+	self->getChild<LLUICtrl>("check_animation")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_calling_card")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_clothing")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_gesture")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_landmark")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_notecard")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_object")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_script")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_sound")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_texture")->setValue(FALSE);
+	self->getChild<LLUICtrl>("check_snapshot")->setValue(FALSE);
 }
 
 //////////////////////////////////////////////////////////////////////////////////
@@ -914,6 +915,9 @@ void LLPanelMainInventory::initListCommandsHandlers()
 	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
 	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+
+	// Update the trash button when selected item(s) get worn or taken off.
+	LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLPanelMainInventory::updateListCommands, this));
 }
 
 void LLPanelMainInventory::updateListCommands()
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 50f0a149954e479f94c3b74d20d1ab0ee43f6227..5cd4cea96d7bfbeb111ba20697c5d2494b7e0a12 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -140,10 +140,10 @@ void LLPanelMe::onSaveChangesClicked()
 	data.avatar_id = gAgent.getID();
 	data.image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_SECOND_LIFE)->getImageAssetID();
 	data.fl_image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_FIRST_LIFE)->getImageAssetID();
-	data.about_text = mEditPanel->childGetValue("sl_description_edit").asString();
-	data.fl_about_text = mEditPanel->childGetValue("fl_description_edit").asString();
-	data.profile_url = mEditPanel->childGetValue("homepage_edit").asString();
-	data.allow_publish = mEditPanel->childGetValue("show_in_search_checkbox");
+	data.about_text = mEditPanel->getChild<LLUICtrl>("sl_description_edit")->getValue().asString();
+	data.fl_about_text = mEditPanel->getChild<LLUICtrl>("fl_description_edit")->getValue().asString();
+	data.profile_url = mEditPanel->getChild<LLUICtrl>("homepage_edit")->getValue().asString();
+	data.allow_publish = mEditPanel->getChild<LLUICtrl>("show_in_search_checkbox")->getValue();
 
 	LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&data);
 	togglePanel(mEditPanel); // close
@@ -199,20 +199,20 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
 
 	// 'Home page' was hidden in LLPanelAvatarProfile::fillCommonData() to fix  EXT-4734
 	// Show 'Home page' in Edit My Profile (EXT-4873)
-	childSetVisible("homepage_edit", true);
+	getChildView("homepage_edit")->setVisible( true);
 
 	fillPartnerData(avatar_data);
 
 	fillAccountStatus(avatar_data);
 
-	childSetValue("show_in_search_checkbox", (BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH));
+	getChild<LLUICtrl>("show_in_search_checkbox")->setValue((BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH));
 
 	std::string first, last;
 	BOOL found = gCacheName->getName(avatar_data->avatar_id, first, last);
 	if (found)
 	{
-		childSetTextArg("name_text", "[FIRST]", first);
-		childSetTextArg("name_text", "[LAST]", last);
+		getChild<LLUICtrl>("name_text")->setTextArg("[FIRST]", first);
+		getChild<LLUICtrl>("name_text")->setTextArg("[LAST]", last);
 	}
 }
 
@@ -220,8 +220,8 @@ BOOL LLPanelMyProfileEdit::postBuild()
 {
 	initTexturePickerMouseEvents();
 
-	childSetTextArg("partner_edit_link", "[URL]", getString("partner_edit_link_url"));
-	childSetTextArg("my_account_link", "[URL]", getString("my_account_link_url"));
+	getChild<LLUICtrl>("partner_edit_link")->setTextArg("[URL]", getString("partner_edit_link_url"));
+	getChild<LLUICtrl>("my_account_link")->setTextArg("[URL]", getString("my_account_link_url"));
 
 	return LLPanelAvatarProfile::postBuild();
 }
@@ -250,8 +250,8 @@ void LLPanelMyProfileEdit::resetData()
 {
 	LLPanelMyProfile::resetData();
 
-	childSetTextArg("name_text", "[FIRST]", LLStringUtil::null);
-	childSetTextArg("name_text", "[LAST]", LLStringUtil::null);
+	getChild<LLUICtrl>("name_text")->setTextArg("[FIRST]", LLStringUtil::null);
+	getChild<LLUICtrl>("name_text")->setTextArg("[LAST]", LLStringUtil::null);
 }
 
 void LLPanelMyProfileEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
@@ -265,10 +265,10 @@ void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
 
 void LLPanelMyProfileEdit::enableEditing(bool enable)
 {
-	childSetEnabled("2nd_life_pic", enable);
-	childSetEnabled("real_world_pic", enable);
-	childSetEnabled("sl_description_edit", enable);
-	childSetEnabled("fl_description_edit", enable);
-	childSetEnabled("homepage_edit", enable);
-	childSetEnabled("show_in_search_checkbox", enable);
+	getChildView("2nd_life_pic")->setEnabled(enable);
+	getChildView("real_world_pic")->setEnabled(enable);
+	getChildView("sl_description_edit")->setEnabled(enable);
+	getChildView("fl_description_edit")->setEnabled(enable);
+	getChildView("homepage_edit")->setEnabled(enable);
+	getChildView("show_in_search_checkbox")->setEnabled(enable);
 }
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 3d79e104afc2508db8143d00db960876efb10933..92c8365a7089d6d6c240ce4757b20b17437c0d34 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -125,13 +125,13 @@ void LLPanelMediaSettingsGeneral::draw()
 	// enable/disable pixel values image entry based on auto scale checkbox 
 	if ( mAutoScale->getValue().asBoolean() == false )
 	{
-		childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, true );
-		childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, true );
+		getChildView( LLMediaEntry::WIDTH_PIXELS_KEY )->setEnabled( true );
+		getChildView( LLMediaEntry::HEIGHT_PIXELS_KEY )->setEnabled( true );
 	}
 	else
 	{
-		childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, false );
-		childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, false );
+		getChildView( LLMediaEntry::WIDTH_PIXELS_KEY )->setEnabled( false );
+		getChildView( LLMediaEntry::HEIGHT_PIXELS_KEY )->setEnabled( false );
 	};
 
 	// enable/disable UI based on type of media
@@ -152,17 +152,17 @@ void LLPanelMediaSettingsGeneral::draw()
 			bool show_time_controls = media_plugin->pluginSupportsMediaTime();
 			if ( show_time_controls )
 			{
-				childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, false );
+				getChildView( LLMediaEntry::CURRENT_URL_KEY )->setEnabled( false );
 				reset_button_is_active = false;
-				childSetEnabled( "current_url_label", false );
-				childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, true );
+				getChildView("current_url_label")->setEnabled(false );
+				getChildView( LLMediaEntry::AUTO_LOOP_KEY )->setEnabled( true );
 			}
 			else
 			{
-				childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, true );
+				getChildView( LLMediaEntry::CURRENT_URL_KEY )->setEnabled( true );
 				reset_button_is_active = true;
-				childSetEnabled( "current_url_label", true );
-				childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, false );
+				getChildView("current_url_label")->setEnabled(true );
+				getChildView( LLMediaEntry::AUTO_LOOP_KEY )->setEnabled( false );
 			};
 		};
 	};
@@ -179,18 +179,18 @@ void LLPanelMediaSettingsGeneral::draw()
 		// user has perms to press reset button and it is active
 		if ( user_can_press_reset )
 		{
-			childSetEnabled( "current_url_reset_btn", true );
+			getChildView("current_url_reset_btn")->setEnabled(true );
 		}
 		// user does not has perms to press reset button and it is active
 		else
 		{
-			childSetEnabled( "current_url_reset_btn", false );
+			getChildView("current_url_reset_btn")->setEnabled(false );
 		};
 	}
 	else
 	// reset button is inactive so we just slam it to off - other states don't matter
 	{
-		childSetEnabled( "current_url_reset_btn", false );
+		getChildView("current_url_reset_btn")->setEnabled(false );
 	};
 }
 
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index 9a0d2569d50955044f2024ff64b948ea05d38811..339376cbf6a5c7b947a7b209b4bb8c11a8a56696 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -93,7 +93,7 @@ void LLPanelMediaSettingsPermissions::draw()
 	// housekeeping
 	LLPanel::draw();
 
-	childSetText("perms_group_name",LLStringUtil::null);
+	getChild<LLUICtrl>("perms_group_name")->setValue(LLStringUtil::null);
 	LLUUID group_id;
 	BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
 	if (groups_identical)
@@ -101,7 +101,6 @@ void LLPanelMediaSettingsPermissions::draw()
 		if(mPermsGroupName)
 		{
 			mPermsGroupName->setNameID(group_id, true);
-			mPermsGroupName->setEnabled(true);
 		};
 	}
 	else
@@ -110,7 +109,6 @@ void LLPanelMediaSettingsPermissions::draw()
 		{
 			mPermsGroupName->setNameID(LLUUID::null, TRUE);
 			mPermsGroupName->refresh(LLUUID::null, LLStringUtil::null, LLStringUtil::null, true);
-			mPermsGroupName->setEnabled(false);
 		};
 	};
 }
@@ -136,6 +134,12 @@ void LLPanelMediaSettingsPermissions::clearValues( void* userdata, bool editable
 	self->mPermsGroupControl->setEnabled(editable);
 	self->mPermsWorldInteract->setEnabled(editable);
 	self->mPermsWorldControl->setEnabled(editable);
+
+	self->getChild< LLTextBox >("controls_label")->setEnabled(editable);
+	self->getChild< LLTextBox >("owner_label")->setEnabled(editable);
+	self->getChild< LLTextBox >("group_label")->setEnabled(editable);
+	self->getChild< LLNameBox >("perms_group_name")->setEnabled(editable);
+	self->getChild< LLTextBox >("anyone_label")->setEnabled(editable);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -210,13 +214,11 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me
 		self->mPermsWorldControl->setEnabled(false);
 	}
 	
-	
-	self->childSetEnabled("media_perms_label_owner", editable );
-	self->childSetText("media_perms_label_owner",  LLTrans::getString("Media Perms Owner") );
-	self->childSetEnabled("media_perms_label_group", editable );
-	self->childSetText("media_perms_label_group",  LLTrans::getString("Media Perms Group") );
-	self->childSetEnabled("media_perms_label_anyone", editable );
-	self->childSetText("media_perms_label_anyone", LLTrans::getString("Media Perms Anyone") );
+	self->getChild< LLTextBox >("controls_label")->setEnabled(editable);
+	self->getChild< LLTextBox >("owner_label")->setEnabled(editable);
+	self->getChild< LLTextBox >("group_label")->setEnabled(editable);
+	self->getChild< LLNameBox >("perms_group_name")->setEnabled(editable);
+	self->getChild< LLTextBox >("anyone_label")->setEnabled(editable);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index bc00d755339fd90f02463b989c2f23a9cbae9d5b..d756a1b931abd4f508728ee86b7055b36d2bb4cb 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -458,17 +458,17 @@ void LLPanelObject::getState( )
 	BOOL editable = root_objectp->permModify();
 
 	// Select Single Message
-	childSetVisible("select_single", FALSE);
-	childSetVisible("edit_object", FALSE);
+	getChildView("select_single")->setVisible( FALSE);
+	getChildView("edit_object")->setVisible( FALSE);
 	if (!editable || single_volume || selected_count <= 1)
 	{
-		childSetVisible("edit_object", TRUE);
-		childSetEnabled("edit_object", TRUE);
+		getChildView("edit_object")->setVisible( TRUE);
+		getChildView("edit_object")->setEnabled(TRUE);
 	}
 	else
 	{
-		childSetVisible("select_single", TRUE);
-		childSetEnabled("select_single", TRUE);
+		getChildView("select_single")->setVisible( TRUE);
+		getChildView("select_single")->setEnabled(TRUE);
 	}
 	// Lock checkbox - only modifiable if you own the object.
 	BOOL self_owned = (gAgent.getID() == owner_id);
@@ -987,19 +987,19 @@ void LLPanelObject::getState( )
 	mLabelSkew		->setEnabled( enabled );
 	mSpinSkew		->setEnabled( enabled );
 
-	childSetVisible("scale_hole", FALSE);
-	childSetVisible("scale_taper", FALSE);
+	getChildView("scale_hole")->setVisible( FALSE);
+	getChildView("scale_taper")->setVisible( FALSE);
 	if (top_size_x_visible || top_size_y_visible)
 	{
 		if (size_is_hole)
 		{
-			childSetVisible("scale_hole", TRUE);
-			childSetEnabled("scale_hole", enabled);
+			getChildView("scale_hole")->setVisible( TRUE);
+			getChildView("scale_hole")->setEnabled(enabled);
 		}
 		else
 		{
-			childSetVisible("scale_taper", TRUE);
-			childSetEnabled("scale_taper", enabled);
+			getChildView("scale_taper")->setVisible( TRUE);
+			getChildView("scale_taper")->setEnabled(enabled);
 		}
 	}
 	
@@ -1010,27 +1010,27 @@ void LLPanelObject::getState( )
 	mSpinShearX		->setEnabled( enabled );
 	mSpinShearY		->setEnabled( enabled );
 
-	childSetVisible("advanced_cut", FALSE);
-	childSetVisible("advanced_dimple", FALSE);
-	childSetVisible("advanced_slice", FALSE);
+	getChildView("advanced_cut")->setVisible( FALSE);
+	getChildView("advanced_dimple")->setVisible( FALSE);
+	getChildView("advanced_slice")->setVisible( FALSE);
 
 	if (advanced_cut_visible)
 	{
 		if (advanced_is_dimple)
 		{
-			childSetVisible("advanced_dimple", TRUE);
-			childSetEnabled("advanced_dimple", enabled);
+			getChildView("advanced_dimple")->setVisible( TRUE);
+			getChildView("advanced_dimple")->setEnabled(enabled);
 		}
 
 		else if (advanced_is_slice)
 		{
-			childSetVisible("advanced_slice", TRUE);
-			childSetEnabled("advanced_slice", enabled);
+			getChildView("advanced_slice")->setVisible( TRUE);
+			getChildView("advanced_slice")->setEnabled(enabled);
 		}
 		else
 		{
-			childSetVisible("advanced_cut", TRUE);
-			childSetEnabled("advanced_cut", enabled);
+			getChildView("advanced_cut")->setVisible( TRUE);
+			getChildView("advanced_cut")->setEnabled(enabled);
 		}
 	}
 	
@@ -1913,15 +1913,15 @@ void LLPanelObject::clearCtrls()
 	mLabelRadiusOffset->setEnabled( FALSE );
 	mLabelRevolutions->setEnabled( FALSE );
 
-	childSetVisible("select_single", FALSE);
-	childSetVisible("edit_object", TRUE);	
-	childSetEnabled("edit_object", FALSE);
+	getChildView("select_single")->setVisible( FALSE);
+	getChildView("edit_object")->setVisible( TRUE);	
+	getChildView("edit_object")->setEnabled(FALSE);
 	
-	childSetEnabled("scale_hole", FALSE);
-	childSetEnabled("scale_taper", FALSE);
-	childSetEnabled("advanced_cut", FALSE);
-	childSetEnabled("advanced_dimple", FALSE);
-	childSetVisible("advanced_slice", FALSE);
+	getChildView("scale_hole")->setEnabled(FALSE);
+	getChildView("scale_taper")->setEnabled(FALSE);
+	getChildView("advanced_cut")->setEnabled(FALSE);
+	getChildView("advanced_dimple")->setEnabled(FALSE);
+	getChildView("advanced_slice")->setVisible( FALSE);
 }
 
 //
diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp
index 08204e7e4d3df582d88385539c358ce03d60fffa..2f1300e0f2a4c9740617978f8c5da072627fa5e1 100644
--- a/indra/newview/llpanelonlinestatus.cpp
+++ b/indra/newview/llpanelonlinestatus.cpp
@@ -39,8 +39,8 @@ LLPanelOnlineStatus::LLPanelOnlineStatus(
 			"panel_online_status_toast.xml");
 
 
-	childSetValue("avatar_icon", notification->getPayload()["FROM_ID"]);
-	childSetValue("message", notification->getMessage());
+	getChild<LLUICtrl>("avatar_icon")->setValue(notification->getPayload()["FROM_ID"]);
+	getChild<LLUICtrl>("message")->setValue(notification->getMessage());
 
 	if (notification->getPayload().has("respond_on_mousedown")
 			&& notification->getPayload()["respond_on_mousedown"])
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index d67b95a70e2cd2c18186164b4909af7dd6fac39e..c9380bf6e6771c2467ae1dd6d81ce747a14120fc 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -36,6 +36,7 @@
 #include "lloutfitobserver.h"
 #include "llcofwearables.h"
 #include "llfilteredwearablelist.h"
+#include "llfolderviewitem.h"
 #include "llinventory.h"
 #include "llinventoryitemslist.h"
 #include "llviewercontrol.h"
@@ -79,6 +80,11 @@ const U64 ALL_ITEMS_MASK = WEARABLE_MASK | ATTACHMENT_MASK;
 
 static const std::string REVERT_BTN("revert_btn");
 
+
+///////////////////////////////////////////////////////////////////////////////
+// LLShopURLDispatcher
+///////////////////////////////////////////////////////////////////////////////
+
 class LLShopURLDispatcher
 {
 public:
@@ -138,6 +144,10 @@ std::string LLShopURLDispatcher::resolveURL(LLAssetType::EType asset_type, ESex
 	return gSavedSettings.getString(setting_name);
 }
 
+///////////////////////////////////////////////////////////////////////////////
+// LLPanelOutfitEditGearMenu
+///////////////////////////////////////////////////////////////////////////////
+
 class LLPanelOutfitEditGearMenu
 {
 public:
@@ -153,7 +163,6 @@ public:
 		if (menu)
 		{
 			populateCreateWearableSubmenus(menu);
-			menu->buildDrawLabels();
 		}
 
 		return menu;
@@ -202,6 +211,147 @@ private:
 	}
 };
 
+///////////////////////////////////////////////////////////////////////////////
+// LLAddWearablesGearMenu
+///////////////////////////////////////////////////////////////////////////////
+
+class LLAddWearablesGearMenu : public LLInitClass<LLAddWearablesGearMenu>
+{
+public:
+	static LLMenuGL* create(LLWearableItemsList* flat_list, LLInventoryPanel* inventory_panel)
+	{
+		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
+
+		llassert(flat_list);
+		llassert(inventory_panel);
+
+		LLHandle<LLView> flat_list_handle = flat_list->getHandle();
+		LLHandle<LLPanel> inventory_panel_handle = inventory_panel->getHandle();
+
+		registrar.add("AddWearable.Gear.Sort", boost::bind(onSort, flat_list_handle, inventory_panel_handle, _2));
+		enable_registrar.add("AddWearable.Gear.Check", boost::bind(onCheck, flat_list_handle, inventory_panel_handle, _2));
+		enable_registrar.add("AddWearable.Gear.Visible", boost::bind(onVisible, inventory_panel_handle, _2));
+
+		LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+			"menu_add_wearable_gear.xml",
+			LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
+
+		return menu;
+	}
+
+private:
+	static void onSort(LLHandle<LLView> flat_list_handle,
+					   LLHandle<LLPanel> inventory_panel_handle,
+					   LLSD::String sort_order_str)
+	{
+		if (flat_list_handle.isDead() || inventory_panel_handle.isDead()) return;
+
+		LLWearableItemsList* flat_list = dynamic_cast<LLWearableItemsList*>(flat_list_handle.get());
+		LLInventoryPanel* inventory_panel = dynamic_cast<LLInventoryPanel*>(inventory_panel_handle.get());
+
+		if (!flat_list || !inventory_panel) return;
+
+		LLWearableItemsList::ESortOrder	sort_order;
+
+		if ("by_most_recent" == sort_order_str)
+		{
+			sort_order = LLWearableItemsList::E_SORT_BY_MOST_RECENT;
+		}
+		else if ("by_name" == sort_order_str)
+		{
+			sort_order = LLWearableItemsList::E_SORT_BY_NAME;
+		}
+		else if ("by_type" == sort_order_str)
+		{
+			sort_order = LLWearableItemsList::E_SORT_BY_TYPE_NAME;
+		}
+		else
+		{
+			llwarns << "Unrecognized sort order action" << llendl;
+			return;
+		}
+
+		if (inventory_panel->getVisible())
+		{
+			inventory_panel->setSortOrder(sort_order);
+		}
+		else
+		{
+			flat_list->setSortOrder(sort_order);
+		}
+	}
+
+	static bool onCheck(LLHandle<LLView> flat_list_handle,
+						LLHandle<LLPanel> inventory_panel_handle,
+						LLSD::String sort_order_str)
+	{
+		if (flat_list_handle.isDead() || inventory_panel_handle.isDead()) return false;
+
+		LLWearableItemsList* flat_list = dynamic_cast<LLWearableItemsList*>(flat_list_handle.get());
+		LLInventoryPanel* inventory_panel = dynamic_cast<LLInventoryPanel*>(inventory_panel_handle.get());
+
+		if (!inventory_panel || !flat_list) return false;
+
+		// Inventory panel uses its own sort order independent from
+		// flat list view so this flag is used to distinguish between
+		// currently visible "tree" or "flat" representation of inventory.
+		bool inventory_tree_visible = inventory_panel->getVisible();
+
+		if (inventory_tree_visible)
+		{
+			U32 sort_order = inventory_panel->getSortOrder();
+
+			if ("by_most_recent" == sort_order_str)
+			{
+				return LLWearableItemsList::E_SORT_BY_MOST_RECENT & sort_order;
+			}
+			else if ("by_name" == sort_order_str)
+			{
+				// If inventory panel is not sorted by date then it is sorted by name.
+				return LLWearableItemsList::E_SORT_BY_MOST_RECENT & ~sort_order;
+			}
+			llwarns << "Unrecognized inventory panel sort order" << llendl;
+		}
+		else
+		{
+			LLWearableItemsList::ESortOrder	sort_order = flat_list->getSortOrder();
+
+			if ("by_most_recent" == sort_order_str)
+			{
+				return LLWearableItemsList::E_SORT_BY_MOST_RECENT == sort_order;
+			}
+			else if ("by_name" == sort_order_str)
+			{
+				return LLWearableItemsList::E_SORT_BY_NAME == sort_order;
+			}
+			else if ("by_type" == sort_order_str)
+			{
+				return LLWearableItemsList::E_SORT_BY_TYPE_NAME == sort_order;
+			}
+			llwarns << "Unrecognized wearable list sort order" << llendl;
+		}
+		return false;
+	}
+
+	static bool onVisible(LLHandle<LLPanel> inventory_panel_handle,
+						  LLSD::String sort_order_str)
+	{
+		if (inventory_panel_handle.isDead()) return false;
+
+		LLInventoryPanel* inventory_panel = dynamic_cast<LLInventoryPanel*>(inventory_panel_handle.get());
+
+		// Enable sorting by type only for the flat list of items
+		// because inventory panel doesn't support this kind of sorting.
+		return ( "by_type" == sort_order_str )
+				&&	( !inventory_panel || !inventory_panel->getVisible() );
+	}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// LLCOFDragAndDropObserver
+///////////////////////////////////////////////////////////////////////////////
+
 class LLCOFDragAndDropObserver : public LLInventoryAddItemByAssetObserver
 {
 public:
@@ -237,12 +387,17 @@ void LLCOFDragAndDropObserver::done()
 	LLAppearanceMgr::instance().updateAppearanceFromCOF();
 }
 
+///////////////////////////////////////////////////////////////////////////////
+// LLPanelOutfitEdit
+///////////////////////////////////////////////////////////////////////////////
+
 LLPanelOutfitEdit::LLPanelOutfitEdit()
 :	LLPanel(), 
 	mSearchFilter(NULL),
 	mCOFWearables(NULL),
 	mInventoryItemsPanel(NULL),
 	mGearMenu(NULL),
+	mAddWearablesGearMenu(NULL),
 	mCOFDragAndDropObserver(NULL),
 	mInitialized(false),
 	mAddWearablesPanel(NULL),
@@ -295,7 +450,7 @@ BOOL LLPanelOutfitEdit::postBuild()
 	mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.All"), new LLFindNonLinksByMask(ALL_ITEMS_MASK)));
 	mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Clothing"), new LLIsTypeActual(LLAssetType::AT_CLOTHING)));
 	mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Bodyparts"), new LLIsTypeActual(LLAssetType::AT_BODYPART)));
-	mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Objects"), new LLFindByMask(ATTACHMENT_MASK)));;
+	mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Objects"), new LLFindNonLinksByMask(ATTACHMENT_MASK)));;
 	mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("shape"), new LLFindActualWearablesOfType(LLWearableType::WT_SHAPE)));
 	mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("skin"), new LLFindActualWearablesOfType(LLWearableType::WT_SKIN)));
 	mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("hair"), new LLFindActualWearablesOfType(LLWearableType::WT_HAIR)));
@@ -320,7 +475,9 @@ BOOL LLPanelOutfitEdit::postBuild()
 
 	childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL);
 	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesFolderView, this), NULL);
+	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);
+	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
 	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
 	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
 	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
@@ -380,12 +537,26 @@ BOOL LLPanelOutfitEdit::postBuild()
 
 	childSetAction(REVERT_BTN, boost::bind(&LLAppearanceMgr::wearBaseOutfit, LLAppearanceMgr::getInstance()));
 
+	/*
+	 * By default AT_CLOTHING are sorted by (in in MY OUTFITS):
+	 *  - by type (types order determined in LLWearableType::EType)
+	 *  - each LLWearableType::EType by outer layer on top
+	 *
+	 * In Add More panel AT_CLOTHING should be sorted in a such way:
+	 *  - by type (types order determined in LLWearableType::EType)
+	 *  - each LLWearableType::EType by name (EXT-8205)
+	*/
+	mWearableListViewItemsComparator = new LLWearableItemTypeNameComparator();
+	mWearableListViewItemsComparator->setOrder(LLAssetType::AT_CLOTHING, LLWearableItemTypeNameComparator::ORDER_RANK_1, false, true);
+
 	mWearablesListViewPanel = getChild<LLPanel>("filtered_wearables_panel");
-	mWearableItemsList = getChild<LLInventoryItemsList>("list_view");
+	mWearableItemsList = getChild<LLWearableItemsList>("list_view");
 	mWearableItemsList->setCommitOnSelectionChange(true);
 	mWearableItemsList->setCommitCallback(boost::bind(&LLPanelOutfitEdit::updatePlusButton, this));
 	mWearableItemsList->setDoubleClickCallback(boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this));
 
+	mWearableItemsList->setComparator(mWearableListViewItemsComparator);
+
 	mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this));
 	return TRUE;
 }
@@ -423,35 +594,46 @@ void LLPanelOutfitEdit::showAddWearablesPanel(bool show_add_wearables)
 {
 	mAddWearablesPanel->setVisible(show_add_wearables);
 	
-	childSetValue("show_add_wearables_btn", show_add_wearables);
+	getChild<LLUICtrl>("show_add_wearables_btn")->setValue(show_add_wearables);
 
 	updateFiltersVisibility();
-	childSetVisible("filter_button", show_add_wearables);
+	getChildView("filter_button")->setVisible( show_add_wearables);
 
 	//search filter should be disabled
 	if (!show_add_wearables)
 	{
-		childSetValue("filter_button", false);
+		getChild<LLUICtrl>("filter_button")->setValue(false);
 
 		mFolderViewFilterCmbBox->setVisible(false);
 		mListViewFilterCmbBox->setVisible(false);
 
 		showWearablesFilter();
 
+		/*
+		 * By default AT_CLOTHING are sorted by (in in MY OUTFITS):
+		 *  - by type (types order determined in LLWearableType::EType)
+		 *  - each LLWearableType::EType by outer layer on top
+		 *
+		 * In Add More panel AT_CLOTHING should be sorted in a such way:
+		 *  - by type (types order determined in LLWearableType::EType)
+		 *  - each LLWearableType::EType by name (EXT-8205)
+		*/
+		mWearableItemsList->setSortOrder(LLWearableItemsList::E_SORT_BY_TYPE_NAME);
+
 		// Reset mWearableItemsList position to top. See EXT-8180.
 		mWearableItemsList->goToTop();
 	}
 
 	//switching button bars
-	childSetVisible("no_add_wearables_button_bar", !show_add_wearables);
-	childSetVisible("add_wearables_button_bar", show_add_wearables);
+	getChildView("no_add_wearables_button_bar")->setVisible( !show_add_wearables);
+	getChildView("add_wearables_button_bar")->setVisible( show_add_wearables);
 }
 
 void LLPanelOutfitEdit::showWearablesFilter()
 {
-	bool filter_visible = childGetValue("filter_button");
+	bool filter_visible = getChild<LLUICtrl>("filter_button")->getValue();
 
-	childSetVisible("filter_panel", filter_visible);
+	getChildView("filter_panel")->setVisible( filter_visible);
 
 	if(!filter_visible)
 	{
@@ -468,9 +650,7 @@ void LLPanelOutfitEdit::showWearablesListView()
 {
 	if(switchPanels(mInventoryItemsPanel, mWearablesListViewPanel))
 	{
-		mFolderViewBtn->setToggleState(FALSE);
-		mFolderViewBtn->setImageOverlay(getString("folder_view_off"), mFolderViewBtn->getImageOverlayHAlign());
-		mListViewBtn->setImageOverlay(getString("list_view_on"), mListViewBtn->getImageOverlayHAlign());
+		updateWearablesPanelVerbButtons();
 		updateFiltersVisibility();
 	}
 	mListViewBtn->setToggleState(TRUE);
@@ -480,9 +660,7 @@ void LLPanelOutfitEdit::showWearablesFolderView()
 {
 	if(switchPanels(mWearablesListViewPanel, mInventoryItemsPanel))
 	{
-		mListViewBtn->setToggleState(FALSE);
-		mListViewBtn->setImageOverlay(getString("list_view_off"), mListViewBtn->getImageOverlayHAlign());
-		mFolderViewBtn->setImageOverlay(getString("folder_view_on"), mFolderViewBtn->getImageOverlayHAlign());
+		updateWearablesPanelVerbButtons();
 		updateFiltersVisibility();
 	}
 	mFolderViewBtn->setToggleState(TRUE);
@@ -623,8 +801,17 @@ void LLPanelOutfitEdit::onShopButtonClicked()
 	if (isAgentAvatarValid())
 	{
 		// try to get wearable type from 'Add More' panel first (EXT-7639)
-		LLWearableType::EType type = getAddMorePanelSelectionType();
+		selection_info_t selection_info = getAddMorePanelSelectionType();
+
+		LLWearableType::EType type = selection_info.first;
 
+		if (selection_info.second > 1)
+		{
+			// the second argument is not important in this case: generic market place will be opened
+			url = url_resolver.resolveURL(LLWearableType::WT_NONE, SEX_FEMALE);
+		}
+		else
+		{
 		if (type == LLWearableType::WT_NONE)
 		{
 			type = getCOFWearablesSelectionType();
@@ -640,7 +827,9 @@ void LLPanelOutfitEdit::onShopButtonClicked()
 
 		if (url.empty())
 		{
-			url = url_resolver.resolveURL(mCOFWearables->getExpandedAccordionAssetType(), sex);
+				url = url_resolver.resolveURL(
+						mCOFWearables->getExpandedAccordionAssetType(), sex);
+			}
 		}
 	}
 	else
@@ -679,9 +868,9 @@ LLWearableType::EType LLPanelOutfitEdit::getCOFWearablesSelectionType() const
 	return type;
 }
 
-LLWearableType::EType LLPanelOutfitEdit::getAddMorePanelSelectionType() const
+LLPanelOutfitEdit::selection_info_t LLPanelOutfitEdit::getAddMorePanelSelectionType() const
 {
-	LLWearableType::EType type = LLWearableType::WT_NONE;
+	selection_info_t result = std::make_pair(LLWearableType::WT_NONE, 0);
 
 	if (mAddWearablesPanel != NULL && mAddWearablesPanel->getVisible())
 	{
@@ -689,9 +878,11 @@ LLWearableType::EType LLPanelOutfitEdit::getAddMorePanelSelectionType() const
 		{
 			std::set<LLUUID> selected_uuids = mInventoryItemsPanel->getRootFolder()->getSelectionList();
 
-			if (selected_uuids.size() == 1)
+			result.second = selected_uuids.size();
+
+			if (result.second == 1)
 			{
-				type = getWearableTypeByItemUUID(*(selected_uuids.begin()));
+				result.first = getWearableTypeByItemUUID(*(selected_uuids.begin()));
 			}
 		}
 		else if (mWearableItemsList != NULL && mWearableItemsList->getVisible())
@@ -699,14 +890,16 @@ LLWearableType::EType LLPanelOutfitEdit::getAddMorePanelSelectionType() const
 			std::vector<LLUUID> selected_uuids;
 			mWearableItemsList->getSelectedUUIDs(selected_uuids);
 
-			if (selected_uuids.size() == 1)
+			result.second = selected_uuids.size();
+
+			if (result.second == 1)
 			{
-				type = getWearableTypeByItemUUID(selected_uuids.front());
+				result.first = getWearableTypeByItemUUID(selected_uuids.front());
 			}
 		}
 	}
 
-	return type;
+	return result;
 }
 
 LLWearableType::EType LLPanelOutfitEdit::getWearableTypeByItemUUID(const LLUUID& item_uuid) const
@@ -743,7 +936,7 @@ void LLPanelOutfitEdit::updatePlusButton()
 	}
 
 	// If any of the selected items are not wearable (due to already being worn OR being of the wrong type), disable the add button.
-	uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(& get_can_item_be_worn, _1));
+	uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(&get_can_item_be_worn, _1));
 	bool can_add = ( unwearable_item == selected_items.end() );
 
 	mPlusBtn->setEnabled(can_add);
@@ -991,7 +1184,7 @@ void LLPanelOutfitEdit::updateVerbs()
 	bool has_baseoutfit = LLAppearanceMgr::getInstance()->getBaseOutfitUUID().notNull();
 
 	mSaveComboBtn->setSaveBtnEnabled(!outfit_locked && outfit_is_dirty);
-	childSetEnabled(REVERT_BTN, outfit_is_dirty && has_baseoutfit);
+	getChildView(REVERT_BTN)->setEnabled(outfit_is_dirty && has_baseoutfit);
 
 	mSaveComboBtn->setMenuItemEnabled("save_outfit", !outfit_locked && outfit_is_dirty);
 
@@ -1028,13 +1221,33 @@ void LLPanelOutfitEdit::resetAccordionState()
 
 void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button)
 {
-	if(!mGearMenu)
+	LLMenuGL* menu = NULL;
+
+	if (mAddWearablesPanel->getVisible())
 	{
-		mGearMenu = LLPanelOutfitEditGearMenu::create();
+		if (!mAddWearablesGearMenu)
+		{
+			mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel);
+		}
+
+		menu = mAddWearablesGearMenu;
+	}
+	else
+	{
+		if (!mGearMenu)
+		{
+			mGearMenu = LLPanelOutfitEditGearMenu::create();
+		}
+
+		menu = mGearMenu;
 	}
 
-	S32 menu_y = mGearMenu->getRect().getHeight() + clicked_button->getRect().getHeight();
-	LLMenuGL::showPopup(clicked_button, mGearMenu, 0, menu_y);
+	if (!menu) return;
+
+	menu->arrangeAndClear(); // update menu height
+	S32 menu_y = menu->getRect().getHeight() + clicked_button->getRect().getHeight();
+	menu->buildDrawLabels();
+	LLMenuGL::showPopup(clicked_button, menu, 0, menu_y);
 }
 
 void LLPanelOutfitEdit::onAddMoreButtonClicked()
@@ -1126,5 +1339,62 @@ void LLPanelOutfitEdit::onCOFChanged()
 	update();
 }
 
+void LLPanelOutfitEdit::updateWearablesPanelVerbButtons()
+{
+	if(mWearablesListViewPanel->getVisible())
+	{
+		mFolderViewBtn->setToggleState(FALSE);
+		mFolderViewBtn->setImageOverlay(getString("folder_view_off"), mFolderViewBtn->getImageOverlayHAlign());
+		mListViewBtn->setImageOverlay(getString("list_view_on"), mListViewBtn->getImageOverlayHAlign());
+	}
+	else if(mInventoryItemsPanel->getVisible())
+	{
+		mListViewBtn->setToggleState(FALSE);
+		mListViewBtn->setImageOverlay(getString("list_view_off"), mListViewBtn->getImageOverlayHAlign());
+		mFolderViewBtn->setImageOverlay(getString("folder_view_on"), mFolderViewBtn->getImageOverlayHAlign());
+	}
+}
+
+void LLPanelOutfitEdit::saveListSelection()
+{
+	if(mWearablesListViewPanel->getVisible())
+	{
+		std::set<LLUUID> selected_ids = mInventoryItemsPanel->getRootFolder()->getSelectionList();
+
+		if(!selected_ids.size()) return;
+
+		for (std::set<LLUUID>::const_iterator item_id = selected_ids.begin(); item_id != selected_ids.end(); ++item_id)
+		{
+			mWearableItemsList->selectItemByUUID(*item_id, true);
+		}
+		mWearableItemsList->scrollToShowFirstSelectedItem();
+	}
+	else if(mInventoryItemsPanel->getVisible())
+	{
+		std::vector<LLUUID> selected_ids;
+		mWearableItemsList->getSelectedUUIDs(selected_ids);
+
+		if(!selected_ids.size()) return;
+
+		mInventoryItemsPanel->clearSelection();
+		LLFolderView* root = mInventoryItemsPanel->getRootFolder();
+
+		if(!root) return;
+
+		for(std::vector<LLUUID>::const_iterator item_id = selected_ids.begin(); item_id != selected_ids.end(); ++item_id)
+		{
+			LLFolderViewItem* item = root->getItemByID(*item_id);
+			if (!item) continue;
+
+			LLFolderViewFolder* parent = item->getParentFolder();
+			if(parent)
+			{
+				parent->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP);
+			}
+			mInventoryItemsPanel->getRootFolder()->changeSelection(item, TRUE);
+		}
+		mInventoryItemsPanel->getRootFolder()->scrollToShowSelection();
+	}
+}
 
 // EOF
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 836bba8c4452cc7b37b342609b64f1c6ffb82f9d..2dca986e330b84a901075494a84e8f482f83179c 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -37,8 +37,8 @@
 #include "llremoteparcelrequest.h"
 #include "llinventory.h"
 #include "llinventoryfunctions.h"
-#include "llinventoryitemslist.h"
 #include "llinventorymodel.h"
+#include "llwearableitemslist.h"
 
 class LLButton;
 class LLCOFWearables;
@@ -58,6 +58,7 @@ class LLMenuGL;
 class LLFindNonLinksByMask;
 class LLFindWearablesOfType;
 class LLSaveOutfitComboBtn;
+class LLWearableItemTypeNameComparator;
 
 class LLPanelOutfitEdit : public LLPanel
 {
@@ -194,8 +195,17 @@ private:
 	void getCurrentItemUUID(LLUUID& selected_id);
 	void onCOFChanged();
 
+	/**
+	 * Method preserves selection while switching between folder/list view modes
+	*/
+	void saveListSelection();
+
+	void updateWearablesPanelVerbButtons();
+
+	typedef std::pair<LLWearableType::EType, size_t> selection_info_t;
+
 	LLWearableType::EType getCOFWearablesSelectionType() const;
-	LLWearableType::EType getAddMorePanelSelectionType() const;
+	selection_info_t getAddMorePanelSelectionType() const;
 	LLWearableType::EType getWearableTypeByItemUUID(const LLUUID& item_uuid) const;
 
 	LLTextBox*			mCurrentOutfitName;
@@ -214,8 +224,9 @@ private:
 	LLComboBox*			mListViewFilterCmbBox;
 
 	LLFilteredWearableListManager* 	mWearableListManager;
-	LLInventoryItemsList* 			mWearableItemsList;
+	LLWearableItemsList* 			mWearableItemsList;
 	LLPanel*						mWearablesListViewPanel;
+	LLWearableItemTypeNameComparator* mWearableListViewItemsComparator;
 
 	LLCOFDragAndDropObserver* mCOFDragAndDropObserver;
 
@@ -224,6 +235,7 @@ private:
 
 	LLCOFWearables*		mCOFWearables;
 	LLMenuGL*			mGearMenu;
+	LLMenuGL*			mAddWearablesGearMenu;
 	bool				mInitialized;
 	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
 
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 1c4476ca4942ac724a7e108714e0e8e5e2d0e3ac..8627274e8006691bf695dabbe23bb7448de18130 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -266,6 +266,7 @@ public:
 	friend class LLInventoryFriendCardObserver;
 	LLFriendListUpdater(callback_t cb)
 	:	LLAvatarListUpdater(cb, FRIEND_LIST_UPDATE_TIMEOUT)
+	,	mIsActive(false)
 	{
 		LLAvatarTracker::instance().addObserver(this);
 
@@ -284,9 +285,12 @@ public:
 
 	/*virtual*/ void changed(U32 mask)
 	{
-		// events can arrive quickly in bulk - we need not process EVERY one of them -
-		// so we wait a short while to let others pile-in, and process them in aggregate.
-		mEventTimer.start();
+		if (mIsActive)
+		{
+			// events can arrive quickly in bulk - we need not process EVERY one of them -
+			// so we wait a short while to let others pile-in, and process them in aggregate.
+			mEventTimer.start();
+		}
 
 		// save-up all the mask-bits which have come-in
 		mMask |= mask;
@@ -295,8 +299,12 @@ public:
 
 	/*virtual*/ BOOL tick()
 	{
+		if (!mIsActive) return FALSE;
+
 		if (mMask & (LLFriendObserver::ADD | LLFriendObserver::REMOVE | LLFriendObserver::ONLINE))
+		{
 			updateList();
+		}
 
 		// Stop updates.
 		mEventTimer.stop();
@@ -305,9 +313,20 @@ public:
 		return FALSE;
 	}
 
+	// virtual
+	void setActive(bool active)
+	{
+		mIsActive = active;
+		if (active)
+		{
+			tick();
+		}
+	}
+
 private:
 	U32 mMask;
 	LLInventoryFriendCardObserver* mInvObserver;
+	bool mIsActive;
 
 	/**
 	 *	This class is intended for updating Friend List when Inventory Friend Card is added/removed.
@@ -490,22 +509,25 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LL
 
 BOOL LLPanelPeople::postBuild()
 {
-	setVisibleCallback(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2));
-	
 	mFilterEditor = getChild<LLFilterEditor>("filter_input");
 	mFilterEditor->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2));
 
 	mTabContainer = getChild<LLTabContainer>("tabs");
 	mTabContainer->setCommitCallback(boost::bind(&LLPanelPeople::onTabSelected, this, _2));
 
-	mOnlineFriendList = getChild<LLPanel>(FRIENDS_TAB_NAME)->getChild<LLAvatarList>("avatars_online");
-	mAllFriendList = getChild<LLPanel>(FRIENDS_TAB_NAME)->getChild<LLAvatarList>("avatars_all");
+	LLPanel* friends_tab = getChild<LLPanel>(FRIENDS_TAB_NAME);
+	// updater is active only if panel is visible to user.
+	friends_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFriendListUpdater, _2));
+	mOnlineFriendList = friends_tab->getChild<LLAvatarList>("avatars_online");
+	mAllFriendList = friends_tab->getChild<LLAvatarList>("avatars_all");
 	mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online"));
 	mOnlineFriendList->setShowIcons("FriendsListShowIcons");
 	mAllFriendList->setNoItemsCommentText(getString("no_friends"));
 	mAllFriendList->setShowIcons("FriendsListShowIcons");
 
-	mNearbyList = getChild<LLPanel>(NEARBY_TAB_NAME)->getChild<LLAvatarList>("avatar_list");
+	LLPanel* nearby_tab = getChild<LLPanel>(NEARBY_TAB_NAME);
+	nearby_tab->setVisibleCallback(boost::bind(&Updater::setActive, mNearbyListUpdater, _2));
+	mNearbyList = nearby_tab->getChild<LLAvatarList>("avatar_list");
 	mNearbyList->setNoItemsCommentText(getString("no_one_near"));
 	mNearbyList->setNoItemsMsg(getString("no_one_near"));
 	mNearbyList->setNoFilteredItemsMsg(getString("no_one_filtered_near"));
@@ -794,8 +816,8 @@ void LLPanelPeople::updateButtons()
 		}
 
 		LLPanel* groups_panel = mTabContainer->getCurrentPanel();
-		groups_panel->childSetEnabled("activate_btn",	item_selected && !cur_group_active); // "none" or a non-active group selected
-		groups_panel->childSetEnabled("minus_btn",		item_selected && selected_id.notNull());
+		groups_panel->getChildView("activate_btn")->setEnabled(item_selected && !cur_group_active); // "none" or a non-active group selected
+		groups_panel->getChildView("minus_btn")->setEnabled(item_selected && selected_id.notNull());
 	}
 	else
 	{
@@ -811,10 +833,10 @@ void LLPanelPeople::updateButtons()
 		LLPanel* cur_panel = mTabContainer->getCurrentPanel();
 		if (cur_panel)
 		{
-			cur_panel->childSetEnabled("add_friend_btn", !is_friend);
+			cur_panel->getChildView("add_friend_btn")->setEnabled(!is_friend);
 			if (friends_tab_active)
 			{
-				cur_panel->childSetEnabled("del_btn", multiple_selected);
+				cur_panel->getChildView("del_btn")->setEnabled(multiple_selected);
 			}
 		}
 	}
@@ -949,28 +971,6 @@ void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save
 	}
 }
 
-void LLPanelPeople::onVisibilityChange(const LLSD& new_visibility)
-{
-	if (new_visibility.asBoolean() == FALSE)
-	{
-		// Don't update anything while we're invisible.
-		mNearbyListUpdater->setActive(FALSE);
-	}
-	else
-	{
-		reSelectedCurrentTab();
-	}
-}
-
-// Make the tab-container re-select current tab
-// for onTabSelected() callback to get called.
-// (currently this is needed to reactivate nearby list updates
-// when we get visible)
-void LLPanelPeople::reSelectedCurrentTab()
-{
-	mTabContainer->selectTab(mTabContainer->getCurrentPanelIndex());
-}
-
 bool LLPanelPeople::isRealGroup()
 {
 	return getCurrentItemID() != LLUUID::null;
@@ -1018,7 +1018,6 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)
 void LLPanelPeople::onTabSelected(const LLSD& param)
 {
 	std::string tab_name = getChild<LLPanel>(param.asString())->getName();
-	mNearbyListUpdater->setActive(tab_name == NEARBY_TAB_NAME);
 	updateButtons();
 
 	showFriendsAccordionsIfNeeded();
@@ -1382,8 +1381,6 @@ void	LLPanelPeople::onOpen(const LLSD& key)
 	
 	if (!tab_name.empty())
 		mTabContainer->selectTabByName(tab_name);
-	else
-		reSelectedCurrentTab();
 }
 
 bool LLPanelPeople::notifyChildren(const LLSD& info)
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index e93153704207622b1b567b66a53c70a748db8643..3b8b736be16c1c02f7fc65e7f614a324a133ddcb 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -85,10 +85,6 @@ private:
 	void					showGroupMenu(LLMenuGL* menu);
 	void					setSortOrder(LLAvatarList* list, ESortOrder order, bool save = true);
 
-	void					onVisibilityChange( const LLSD& new_visibility);
-
-	void					reSelectedCurrentTab();
-
 	// UI callbacks
 	void					onFilterEdit(const std::string& search_string);
 	void					onTabSelected(const LLSD& param);
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index 0317d1050c50ef1b2ad9fba3176740f6505df1bf..e35574be6cadf6dbe9ef8537822fe53d2e1d8519 100644
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -136,9 +136,9 @@ LLPanelPermissions::LLPanelPermissions() :
 BOOL LLPanelPermissions::postBuild()
 {
 	childSetCommitCallback("Object Name",LLPanelPermissions::onCommitName,this);
-	childSetPrevalidate("Object Name",LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("Object Name")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe);
 	childSetCommitCallback("Object Description",LLPanelPermissions::onCommitDesc,this);
-	childSetPrevalidate("Object Description",LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("Object Description")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe);
 
 	
 	getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLPanelPermissions::onClickGroup,this));
@@ -177,81 +177,81 @@ LLPanelPermissions::~LLPanelPermissions()
 
 void LLPanelPermissions::disableAll()
 {
-	childSetEnabled("perm_modify",						FALSE);
-	childSetText("perm_modify",							LLStringUtil::null);
-
-	childSetEnabled("Creator:",					   		FALSE);
-	childSetText("Creator Name",						LLStringUtil::null);
-	childSetEnabled("Creator Name",						FALSE);
-
-	childSetEnabled("Owner:",							FALSE);
-	childSetText("Owner Name",							LLStringUtil::null);
-	childSetEnabled("Owner Name",						FALSE);
-
-	childSetEnabled("Group:",							FALSE);
-	childSetText("Group Name Proxy",					LLStringUtil::null);
-	childSetEnabled("Group Name Proxy",					FALSE);
-	childSetEnabled("button set group",					FALSE);
-
-	childSetText("Object Name",							LLStringUtil::null);
-	childSetEnabled("Object Name",						FALSE);
-	childSetEnabled("Name:",						   	FALSE);
-	childSetText("Group Name",							LLStringUtil::null);
-	childSetEnabled("Group Name",						FALSE);
-	childSetEnabled("Description:",						FALSE);
-	childSetText("Object Description",					LLStringUtil::null);
-	childSetEnabled("Object Description",				FALSE);
-
-	childSetEnabled("Permissions:",						FALSE);
+	getChildView("perm_modify")->setEnabled(FALSE);
+	getChild<LLUICtrl>("perm_modify")->setValue(LLStringUtil::null);
+
+	getChildView("Creator:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Creator Name")->setValue(LLStringUtil::null);
+	getChildView("Creator Name")->setEnabled(FALSE);
+
+	getChildView("Owner:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Owner Name")->setValue(LLStringUtil::null);
+	getChildView("Owner Name")->setEnabled(FALSE);
+
+	getChildView("Group:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Group Name Proxy")->setValue(LLStringUtil::null);
+	getChildView("Group Name Proxy")->setEnabled(FALSE);
+	getChildView("button set group")->setEnabled(FALSE);
+
+	getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null);
+	getChildView("Object Name")->setEnabled(FALSE);
+	getChildView("Name:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null);
+	getChildView("Group Name")->setEnabled(FALSE);
+	getChildView("Description:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Object Description")->setValue(LLStringUtil::null);
+	getChildView("Object Description")->setEnabled(FALSE);
+
+	getChildView("Permissions:")->setEnabled(FALSE);
 		
-	childSetValue("checkbox share with group",			FALSE);
-	childSetEnabled("checkbox share with group",	   	FALSE);
-	childSetEnabled("button deed",						FALSE);
+	getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE);
+	getChildView("checkbox share with group")->setEnabled(FALSE);
+	getChildView("button deed")->setEnabled(FALSE);
 
-	childSetValue("checkbox allow everyone move",	   	FALSE);
-	childSetEnabled("checkbox allow everyone move",	   	FALSE);
-	childSetValue("checkbox allow everyone copy",	   	FALSE);
-	childSetEnabled("checkbox allow everyone copy",	   	FALSE);
+	getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE);
+	getChildView("checkbox allow everyone move")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE);
+	getChildView("checkbox allow everyone copy")->setEnabled(FALSE);
 
 	//Next owner can:
-	childSetEnabled("Next owner can:",					FALSE);
-	childSetValue("checkbox next owner can modify",		FALSE);
-	childSetEnabled("checkbox next owner can modify",  	FALSE);
-	childSetValue("checkbox next owner can copy",	   	FALSE);
-	childSetEnabled("checkbox next owner can copy",	   	FALSE);
-	childSetValue("checkbox next owner can transfer",  	FALSE);
-	childSetEnabled("checkbox next owner can transfer",	FALSE);
+	getChildView("Next owner can:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE);
+	getChildView("checkbox next owner can modify")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE);
+	getChildView("checkbox next owner can copy")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE);
+	getChildView("checkbox next owner can transfer")->setEnabled(FALSE);
 
 	//checkbox for sale
-	childSetValue("checkbox for sale",					FALSE);
-	childSetEnabled("checkbox for sale",			   	FALSE);
+	getChild<LLUICtrl>("checkbox for sale")->setValue(FALSE);
+	getChildView("checkbox for sale")->setEnabled(FALSE);
 
 	//checkbox include in search
-	childSetValue("search_check",			 			FALSE);
-	childSetEnabled("search_check",			 			FALSE);
+	getChild<LLUICtrl>("search_check")->setValue(FALSE);
+	getChildView("search_check")->setEnabled(FALSE);
 		
 	LLComboBox*	combo_sale_type = getChild<LLComboBox>("sale type");
 	combo_sale_type->setValue(LLSaleInfo::FS_COPY);
 	combo_sale_type->setEnabled(FALSE);
 		
-	childSetEnabled("Cost",								FALSE);
-	childSetText("Cost",							   	getString("Cost Default"));
-	childSetText("Edit Cost",							LLStringUtil::null);
-	childSetEnabled("Edit Cost",					   	FALSE);
+	getChildView("Cost")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
+	getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
+	getChildView("Edit Cost")->setEnabled(FALSE);
 		
-	childSetEnabled("label click action",				FALSE);
+	getChildView("label click action")->setEnabled(FALSE);
 	LLComboBox*	combo_click_action = getChild<LLComboBox>("clickaction");
 	if (combo_click_action)
 	{
 		combo_click_action->setEnabled(FALSE);
 		combo_click_action->clear();
 	}
-	childSetVisible("B:",								FALSE);
-	childSetVisible("O:",								FALSE);
-	childSetVisible("G:",								FALSE);
-	childSetVisible("E:",								FALSE);
-	childSetVisible("N:",								FALSE);
-	childSetVisible("F:",								FALSE);
+	getChildView("B:")->setVisible(								FALSE);
+	getChildView("O:")->setVisible(								FALSE);
+	getChildView("G:")->setVisible(								FALSE);
+	getChildView("E:")->setVisible(								FALSE);
+	getChildView("N:")->setVisible(								FALSE);
+	getChildView("F:")->setVisible(								FALSE);
 }
 
 void LLPanelPermissions::refresh()
@@ -317,23 +317,23 @@ void LLPanelPermissions::refresh()
 	{
 		++string_index;
 	}
-	childSetEnabled("perm_modify", 			   			TRUE);
-	childSetText("perm_modify",							MODIFY_INFO_STRINGS[string_index]);
+	getChildView("perm_modify")->setEnabled(TRUE);
+	getChild<LLUICtrl>("perm_modify")->setValue(MODIFY_INFO_STRINGS[string_index]);
 
-	childSetEnabled("Permissions:", 					TRUE);
+	getChildView("Permissions:")->setEnabled(TRUE);
 	
 	// Update creator text field
-	childSetEnabled("Creator:", 						TRUE);
+	getChildView("Creator:")->setEnabled(TRUE);
 	BOOL creators_identical;
 	std::string creator_name;
 	creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID,
 																	  creator_name);
 
-	childSetText("Creator Name",						creator_name);
-	childSetEnabled("Creator Name", 					TRUE);
+	getChild<LLUICtrl>("Creator Name")->setValue(creator_name);
+	getChildView("Creator Name")->setEnabled(TRUE);
 
 	// Update owner text field
-	childSetEnabled("Owner:", 							TRUE);
+	getChildView("Owner:")->setEnabled(TRUE);
 
 	std::string owner_name;
 	const BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name);
@@ -358,12 +358,12 @@ void LLPanelPermissions::refresh()
 			}
 		}
 	}
-	childSetText("Owner Name",						owner_name);
-	childSetEnabled("Owner Name", 					TRUE);
+	getChild<LLUICtrl>("Owner Name")->setValue(owner_name);
+	getChildView("Owner Name")->setEnabled(TRUE);
 
 	// update group text field
-	childSetEnabled("Group:", 						TRUE);
-	childSetText("Group Name", 						LLStringUtil::null);
+	getChildView("Group:")->setEnabled(TRUE);
+	getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null);
 	LLUUID group_id;
 	BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
 	if (groups_identical)
@@ -384,18 +384,18 @@ void LLPanelPermissions::refresh()
 		}
 	}
 	
-	childSetEnabled("button set group", owners_identical && (mOwnerID == gAgent.getID()));
+	getChildView("button set group")->setEnabled(owners_identical && (mOwnerID == gAgent.getID()));
 
-	childSetEnabled("Name:", 						TRUE);
+	getChildView("Name:")->setEnabled(TRUE);
 	LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name");
-	childSetEnabled("Description:", 				TRUE);
+	getChildView("Description:")->setEnabled(TRUE);
 	LLLineEditor* LineEditorObjectDesc = getChild<LLLineEditor>("Object Description");
 
 	if (is_one_object)
 	{
 		if (keyboard_focus_view != LineEditorObjectName)
 		{
-			childSetText("Object Name",nodep->mName);
+			getChild<LLUICtrl>("Object Name")->setValue(nodep->mName);
 		}
 
 		if (LineEditorObjectDesc)
@@ -408,7 +408,7 @@ void LLPanelPermissions::refresh()
 	}
 	else
 	{
-		childSetText("Object Name",					LLStringUtil::null);
+		getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null);
 		LineEditorObjectDesc->setText(LLStringUtil::null);
 	}
 
@@ -420,13 +420,13 @@ void LLPanelPermissions::refresh()
 	}
 	if (edit_name_desc)
 	{
-		childSetEnabled("Object Name", 				TRUE);
-		childSetEnabled("Object Description", 		TRUE);
+		getChildView("Object Name")->setEnabled(TRUE);
+		getChildView("Object Description")->setEnabled(TRUE);
 	}
 	else
 	{
-		childSetEnabled("Object Name", 				FALSE);
-		childSetEnabled("Object Description", 		FALSE);
+		getChildView("Object Name")->setEnabled(FALSE);
+		getChildView("Object Description")->setEnabled(FALSE);
 	}
 
 	S32 total_sale_price = 0;
@@ -448,9 +448,9 @@ void LLPanelPermissions::refresh()
 
 	if (!owners_identical)
 	{
-		childSetEnabled("Cost", 					FALSE);
-		childSetText("Edit Cost",					LLStringUtil::null);
-		childSetEnabled("Edit Cost", 				FALSE);
+		getChildView("Cost")->setEnabled(FALSE);
+		getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 	}
 	// You own these objects.
 	else if (self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))
@@ -458,11 +458,11 @@ void LLPanelPermissions::refresh()
 		// If there are multiple items for sale then set text to PRICE PER UNIT.
 		if (num_for_sale > 1)
 		{
-			childSetText("Cost",					getString("Cost Per Unit"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Per Unit"));
 		}
 		else
 		{
-			childSetText("Cost",					getString("Cost Default"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
 		}
 		
 		LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
@@ -486,35 +486,35 @@ void LLPanelPermissions::refresh()
 		// The edit fields are only enabled if you can sell this object
 		// and the sale price is not mixed.
 		BOOL enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : FALSE;
-		childSetEnabled("Cost",					enable_edit);
-		childSetEnabled("Edit Cost",			enable_edit);
+		getChildView("Cost")->setEnabled(enable_edit);
+		getChildView("Edit Cost")->setEnabled(enable_edit);
 	}
 	// Someone, not you, owns these objects.
 	else if (!public_owned)
 	{
-		childSetEnabled("Cost",					FALSE);
-		childSetEnabled("Edit Cost",			FALSE);
+		getChildView("Cost")->setEnabled(FALSE);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 		
 		// Don't show a price if none of the items are for sale.
 		if (num_for_sale)
-			childSetText("Edit Cost",			llformat("%d",total_sale_price));
+			getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",total_sale_price));
 		else
-			childSetText("Edit Cost",			LLStringUtil::null);
+			getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
 
 		// If multiple items are for sale, set text to TOTAL PRICE.
 		if (num_for_sale > 1)
-			childSetText("Cost",				getString("Cost Total"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Total"));
 		else
-			childSetText("Cost",				getString("Cost Default"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
 	}
 	// This is a public object.
 	else
 	{
-		childSetEnabled("Cost",					FALSE);
-		childSetText("Cost",					getString("Cost Default"));
+		getChildView("Cost")->setEnabled(FALSE);
+		getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
 		
-		childSetText("Edit Cost",				LLStringUtil::null);
-		childSetEnabled("Edit Cost",			FALSE);
+		getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 	}
 
 	// Enable and disable the permissions checkboxes
@@ -556,20 +556,20 @@ void LLPanelPermissions::refresh()
 	{
 		if (valid_base_perms)
 		{
-			childSetText("B:",								"B: " + mask_to_string(base_mask_on));
-			childSetVisible("B:",							TRUE);
+			getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on));
+			getChildView("B:")->setVisible(							TRUE);
 			
-			childSetText("O:",								"O: " + mask_to_string(owner_mask_on));
-			childSetVisible("O:",							TRUE);
+			getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on));
+			getChildView("O:")->setVisible(							TRUE);
 			
-			childSetText("G:",								"G: " + mask_to_string(group_mask_on));
-			childSetVisible("G:",							TRUE);
+			getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on));
+			getChildView("G:")->setVisible(							TRUE);
 			
-			childSetText("E:",								"E: " + mask_to_string(everyone_mask_on));
-			childSetVisible("E:",							TRUE);
+			getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on));
+			getChildView("E:")->setVisible(							TRUE);
 			
-			childSetText("N:",								"N: " + mask_to_string(next_owner_mask_on));
-			childSetVisible("N:",							TRUE);
+			getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on));
+			getChildView("N:")->setVisible(							TRUE);
 		}
 
 		U32 flag_mask = 0x0;
@@ -578,17 +578,17 @@ void LLPanelPermissions::refresh()
 		if (objectp->permCopy()) 		flag_mask |= PERM_COPY;
 		if (objectp->permTransfer()) 	flag_mask |= PERM_TRANSFER;
 
-		childSetText("F:",									"F:" + mask_to_string(flag_mask));
-		childSetVisible("F:",								TRUE);
+		getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask));
+		getChildView("F:")->setVisible(								TRUE);
 	}
 	else
 	{
-		childSetVisible("B:",								FALSE);
-		childSetVisible("O:",								FALSE);
-		childSetVisible("G:",								FALSE);
-		childSetVisible("E:",								FALSE);
-		childSetVisible("N:",								FALSE);
-		childSetVisible("F:",								FALSE);
+		getChildView("B:")->setVisible(								FALSE);
+		getChildView("O:")->setVisible(								FALSE);
+		getChildView("G:")->setVisible(								FALSE);
+		getChildView("E:")->setVisible(								FALSE);
+		getChildView("N:")->setVisible(								FALSE);
+		getChildView("F:")->setVisible(								FALSE);
 	}
 
 	BOOL has_change_perm_ability = FALSE;
@@ -608,65 +608,65 @@ void LLPanelPermissions::refresh()
 	if (!has_change_perm_ability && !has_change_sale_ability && !root_selected)
 	{
 		// ...must select root to choose permissions
-		childSetValue("perm_modify", 						getString("text modify warning"));
+		getChild<LLUICtrl>("perm_modify")->setValue(getString("text modify warning"));
 	}
 
 	if (has_change_perm_ability)
 	{
-		childSetEnabled("checkbox share with group",		TRUE);
-		childSetEnabled("checkbox allow everyone move",		owner_mask_on & PERM_MOVE);
-		childSetEnabled("checkbox allow everyone copy",		owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER);
+		getChildView("checkbox share with group")->setEnabled(TRUE);
+		getChildView("checkbox allow everyone move")->setEnabled(owner_mask_on & PERM_MOVE);
+		getChildView("checkbox allow everyone copy")->setEnabled(owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER);
 	}
 	else
 	{
-		childSetEnabled("checkbox share with group", 		FALSE);
-		childSetEnabled("checkbox allow everyone move", 	FALSE);
-		childSetEnabled("checkbox allow everyone copy", 	FALSE);
+		getChildView("checkbox share with group")->setEnabled(FALSE);
+		getChildView("checkbox allow everyone move")->setEnabled(FALSE);
+		getChildView("checkbox allow everyone copy")->setEnabled(FALSE);
 	}
 
 	if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER))
 	{
-		childSetEnabled("checkbox for sale", 				can_transfer || (!can_transfer && num_for_sale));
+		getChildView("checkbox for sale")->setEnabled(can_transfer || (!can_transfer && num_for_sale));
 		// Set the checkbox to tentative if the prices of each object selected
 		// are not the same.
-		childSetTentative("checkbox for sale", 				is_for_sale_mixed);
-		childSetEnabled("sale type", 						num_for_sale && can_transfer && !is_sale_price_mixed);
+		getChild<LLUICtrl>("checkbox for sale")->setTentative( 				is_for_sale_mixed);
+		getChildView("sale type")->setEnabled(num_for_sale && can_transfer && !is_sale_price_mixed);
 
-		childSetEnabled("Next owner can:", 					TRUE);
-		childSetEnabled("checkbox next owner can modify", 	base_mask_on & PERM_MODIFY);
-		childSetEnabled("checkbox next owner can copy", 	base_mask_on & PERM_COPY);
-		childSetEnabled("checkbox next owner can transfer", next_owner_mask_on & PERM_COPY);
+		getChildView("Next owner can:")->setEnabled(TRUE);
+		getChildView("checkbox next owner can modify")->setEnabled(base_mask_on & PERM_MODIFY);
+		getChildView("checkbox next owner can copy")->setEnabled(base_mask_on & PERM_COPY);
+		getChildView("checkbox next owner can transfer")->setEnabled(next_owner_mask_on & PERM_COPY);
 	}
 	else 
 	{
-		childSetEnabled("checkbox for sale",				FALSE);
-		childSetEnabled("sale type",						FALSE);
+		getChildView("checkbox for sale")->setEnabled(FALSE);
+		getChildView("sale type")->setEnabled(FALSE);
 
-		childSetEnabled("Next owner can:",					FALSE);
-		childSetEnabled("checkbox next owner can modify",	FALSE);
-		childSetEnabled("checkbox next owner can copy",		FALSE);
-		childSetEnabled("checkbox next owner can transfer",	FALSE);
+		getChildView("Next owner can:")->setEnabled(FALSE);
+		getChildView("checkbox next owner can modify")->setEnabled(FALSE);
+		getChildView("checkbox next owner can copy")->setEnabled(FALSE);
+		getChildView("checkbox next owner can transfer")->setEnabled(FALSE);
 	}
 
 	if (valid_group_perms)
 	{
 		if ((group_mask_on & PERM_COPY) && (group_mask_on & PERM_MODIFY) && (group_mask_on & PERM_MOVE))
 		{
-			childSetValue("checkbox share with group",		TRUE);
-			childSetTentative("checkbox share with group",	FALSE);
-			childSetEnabled("button deed",					gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+			getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox share with group")->setTentative(	FALSE);
+			getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
 		}
 		else if ((group_mask_off & PERM_COPY) && (group_mask_off & PERM_MODIFY) && (group_mask_off & PERM_MOVE))
 		{
-			childSetValue("checkbox share with group",		FALSE);
-			childSetTentative("checkbox share with group",	FALSE);
-			childSetEnabled("button deed",					FALSE);
+			getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox share with group")->setTentative(	FALSE);
+			getChildView("button deed")->setEnabled(FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox share with group",		TRUE);
-			childSetTentative("checkbox share with group",	TRUE);
-			childSetEnabled("button deed",					gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+			getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox share with group")->setTentative(	TRUE);
+			getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
 		}
 	}			
 
@@ -675,35 +675,35 @@ void LLPanelPermissions::refresh()
 		// Move
 		if (everyone_mask_on & PERM_MOVE)
 		{
-			childSetValue("checkbox allow everyone move",		TRUE);
-			childSetTentative("checkbox allow everyone move", 	FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( 	FALSE);
 		}
 		else if (everyone_mask_off & PERM_MOVE)
 		{
-			childSetValue("checkbox allow everyone move",		FALSE);
-			childSetTentative("checkbox allow everyone move", 	FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( 	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox allow everyone move",		TRUE);
-			childSetTentative("checkbox allow everyone move", 	TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( 	TRUE);
 		}
 
 		// Copy == everyone can't copy
 		if (everyone_mask_on & PERM_COPY)
 		{
-			childSetValue("checkbox allow everyone copy",		TRUE);
-			childSetTentative("checkbox allow everyone copy", 	!can_copy || !can_transfer);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( 	!can_copy || !can_transfer);
 		}
 		else if (everyone_mask_off & PERM_COPY)
 		{
-			childSetValue("checkbox allow everyone copy",		FALSE);
-			childSetTentative("checkbox allow everyone copy",	FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative(	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox allow everyone copy",		TRUE);
-			childSetTentative("checkbox allow everyone copy",	TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative(	TRUE);
 		}
 	}
 
@@ -712,52 +712,52 @@ void LLPanelPermissions::refresh()
 		// Modify == next owner canot modify
 		if (next_owner_mask_on & PERM_MODIFY)
 		{
-			childSetValue("checkbox next owner can modify",		TRUE);
-			childSetTentative("checkbox next owner can modify",	FALSE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setTentative(	FALSE);
 		}
 		else if (next_owner_mask_off & PERM_MODIFY)
 		{
-			childSetValue("checkbox next owner can modify",		FALSE);
-			childSetTentative("checkbox next owner can modify",	FALSE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setTentative(	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox next owner can modify",		TRUE);
-			childSetTentative("checkbox next owner can modify",	TRUE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setTentative(	TRUE);
 		}
 
 		// Copy == next owner cannot copy
 		if (next_owner_mask_on & PERM_COPY)
 		{			
-			childSetValue("checkbox next owner can copy",		TRUE);
-			childSetTentative("checkbox next owner can copy",	!can_copy);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setTentative(	!can_copy);
 		}
 		else if (next_owner_mask_off & PERM_COPY)
 		{
-			childSetValue("checkbox next owner can copy",		FALSE);
-			childSetTentative("checkbox next owner can copy",	FALSE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setTentative(	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox next owner can copy",		TRUE);
-			childSetTentative("checkbox next owner can copy",	TRUE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setTentative(	TRUE);
 		}
 
 		// Transfer == next owner cannot transfer
 		if (next_owner_mask_on & PERM_TRANSFER)
 		{
-			childSetValue("checkbox next owner can transfer",	TRUE);
-			childSetTentative("checkbox next owner can transfer", !can_transfer);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( !can_transfer);
 		}
 		else if (next_owner_mask_off & PERM_TRANSFER)
 		{
-			childSetValue("checkbox next owner can transfer",	FALSE);
-			childSetTentative("checkbox next owner can transfer", FALSE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox next owner can transfer",	TRUE);
-			childSetTentative("checkbox next owner can transfer", TRUE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( TRUE);
 		}
 	}
 
@@ -779,7 +779,7 @@ void LLPanelPermissions::refresh()
 		combo_sale_type->setTentative(				TRUE); // unfortunately this doesn't do anything at the moment.
 	}
 
-	childSetValue("checkbox for sale", (num_for_sale != 0));
+	getChild<LLUICtrl>("checkbox for sale")->setValue((num_for_sale != 0));
 
 	// HACK: There are some old objects in world that are set for sale,
 	// but are no-transfer.  We need to let users turn for-sale off, but only
@@ -789,7 +789,7 @@ void LLPanelPermissions::refresh()
 	{
 		if (num_for_sale && has_change_sale_ability)
 		{
-			childSetEnabled("checkbox for sale", true);
+			getChildView("checkbox for sale")->setEnabled(true);
 		}
 	}
 	
@@ -797,9 +797,9 @@ void LLPanelPermissions::refresh()
 	const BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
 	bool include_in_search;
 	const BOOL all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search);
-	childSetEnabled("search_check", 				has_change_sale_ability && all_volume);
-	childSetValue("search_check", 					include_in_search);
-	childSetTentative("search_check", 				!all_include_in_search);
+	getChildView("search_check")->setEnabled(has_change_sale_ability && all_volume);
+	getChild<LLUICtrl>("search_check")->setValue(include_in_search);
+	getChild<LLUICtrl>("search_check")->setTentative( 				!all_include_in_search);
 
 	// Click action (touch, sit, buy)
 	U8 click_action = 0;
@@ -812,8 +812,8 @@ void LLPanelPermissions::refresh()
 			combo_click_action->setValue(LLSD(combo_value));
 		}
 	}
-	childSetEnabled("label click action",			is_perm_modify && all_volume);
-	childSetEnabled("clickaction",					is_perm_modify && all_volume);
+	getChildView("label click action")->setEnabled(is_perm_modify && all_volume);
+	getChildView("clickaction")->setEnabled(is_perm_modify && all_volume);
 }
 
 
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index baff995d5c615588242b881127b3928afcb61e30..7615a93a49421f6a131aed3c58190ab11df90c59 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -244,13 +244,13 @@ void LLPanelPickInfo::resetControls()
 {
 	if(getAvatarId() == gAgent.getID())
 	{
-		childSetEnabled("edit_btn", TRUE);
-		childSetVisible("edit_btn", TRUE);
+		getChildView("edit_btn")->setEnabled(TRUE);
+		getChildView("edit_btn")->setVisible( TRUE);
 	}
 	else
 	{
-		childSetEnabled("edit_btn", FALSE);
-		childSetVisible("edit_btn", FALSE);
+		getChildView("edit_btn")->setEnabled(FALSE);
+		getChildView("edit_btn")->setVisible( FALSE);
 	}
 }
 
@@ -303,17 +303,17 @@ void LLPanelPickInfo::setSnapshotId(const LLUUID& id)
 
 void LLPanelPickInfo::setPickName(const std::string& name)
 {
-	childSetValue(XML_NAME, name);
+	getChild<LLUICtrl>(XML_NAME)->setValue(name);
 }
 
 void LLPanelPickInfo::setPickDesc(const std::string& desc)
 {
-	childSetValue(XML_DESC, desc);
+	getChild<LLUICtrl>(XML_DESC)->setValue(desc);
 }
 
 void LLPanelPickInfo::setPickLocation(const std::string& location)
 {
-	childSetValue(XML_LOCATION, location);
+	getChild<LLUICtrl>(XML_LOCATION)->setValue(location);
 }
 
 void LLPanelPickInfo::onClickMap()
@@ -396,8 +396,8 @@ void LLPanelPickEdit::onOpen(const LLSD& key)
 		}
 
 		setParcelID(parcel_id);
-		childSetValue("pick_name", pick_name.empty() ? region_name : pick_name);
-		childSetValue("pick_desc", pick_desc);
+		getChild<LLUICtrl>("pick_name")->setValue(pick_name.empty() ? region_name : pick_name);
+		getChild<LLUICtrl>("pick_desc")->setValue(pick_desc);
 		setSnapshotId(snapshot_id);
 		setPickLocation(createLocationText(getLocationNotice(), pick_name, region_name, getPosGlobal()));
 
@@ -425,8 +425,8 @@ void LLPanelPickEdit::setPickData(const LLPickData* pick_data)
 	mNeedData = false;
 
 	setParcelID(pick_data->parcel_id);
-	childSetValue("pick_name", pick_data->name);
-	childSetValue("pick_desc", pick_data->desc);
+	getChild<LLUICtrl>("pick_name")->setValue(pick_data->name);
+	getChild<LLUICtrl>("pick_desc")->setValue(pick_data->desc);
 	setSnapshotId(pick_data->snapshot_id);
 	setPosGlobal(pick_data->pos_global);
 	setPickLocation(createLocationText(LLStringUtil::null, pick_data->name,
@@ -508,8 +508,8 @@ void LLPanelPickEdit::sendUpdate()
 	//legacy var  need to be deleted
 	pick_data.top_pick = FALSE; 
 	pick_data.parcel_id = mParcelId;
-	pick_data.name = childGetValue(XML_NAME).asString();
-	pick_data.desc = childGetValue(XML_DESC).asString();
+	pick_data.name = getChild<LLUICtrl>(XML_NAME)->getValue().asString();
+	pick_data.desc = getChild<LLUICtrl>(XML_DESC)->getValue().asString();
 	pick_data.snapshot_id = mSnapshotCtrl->getImageAssetID();
 	pick_data.pos_global = getPosGlobal();
 	pick_data.sort_order = 0;
@@ -544,7 +544,7 @@ void LLPanelPickEdit::resetData()
 
 void LLPanelPickEdit::enableSaveButton(bool enable)
 {
-	childSetEnabled(XML_BTN_SAVE, enable);
+	getChildView(XML_BTN_SAVE)->setEnabled(enable);
 }
 
 void LLPanelPickEdit::onClickSetLocation()
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index ff069e34b7d20dc5bc03fc725884ac2a6559fba0..a5c3c9faefc00dc61fc81d08f05f3038b7952c42 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -212,7 +212,7 @@ void LLPanelPicks::updateData()
 		mNoPicks = false;
 		mNoClassifieds = false;
 
-		childSetValue("picks_panel_text", LLTrans::getString("PicksClassifiedsLoadingText"));
+		getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("PicksClassifiedsLoadingText"));
 
 		mPicksList->clear();
 		LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId());
@@ -231,7 +231,7 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
 		{
 			std::string name, second_name;
 			gCacheName->getName(getAvatarId(),name,second_name);
-			childSetTextArg("pick_title", "[NAME]",name);
+			getChild<LLUICtrl>("pick_title")->setTextArg("[NAME]", name);
 			
 			// Save selection, to be able to edit same item after saving changes. See EXT-3023.
 			LLUUID selected_id = mPicksList->getSelectedValue()[PICK_ID];
@@ -318,11 +318,11 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
 	{
 		if(getAvatarId() == gAgentID)
 		{
-			childSetValue("picks_panel_text", LLTrans::getString("NoPicksClassifiedsText"));
+			getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoPicksClassifiedsText"));
 		}
 		else
 		{
-			childSetValue("picks_panel_text", LLTrans::getString("NoAvatarPicksClassifiedsText"));
+			getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText"));
 		}
 	}
 }
@@ -454,22 +454,22 @@ void LLPanelPicks::onOpen(const LLSD& key)
 	BOOL self = (gAgent.getID() == id);
 
 	// only agent can edit her picks 
-	childSetEnabled("edit_panel", self);
-	childSetVisible("edit_panel", self);
+	getChildView("edit_panel")->setEnabled(self);
+	getChildView("edit_panel")->setVisible( self);
 
 	// Disable buttons when viewing profile for first time
 	if(getAvatarId() != id)
 	{
-		childSetEnabled(XML_BTN_INFO,FALSE);
-		childSetEnabled(XML_BTN_TELEPORT,FALSE);
-		childSetEnabled(XML_BTN_SHOW_ON_MAP,FALSE);
+		getChildView(XML_BTN_INFO)->setEnabled(FALSE);
+		getChildView(XML_BTN_TELEPORT)->setEnabled(FALSE);
+		getChildView(XML_BTN_SHOW_ON_MAP)->setEnabled(FALSE);
 	}
 
 	// and see a special title - set as invisible by default in xml file
 	if (self)
 	{
-		childSetVisible("pick_title", !self);
-		childSetVisible("pick_title_agent", self);
+		getChildView("pick_title")->setVisible( !self);
+		getChildView("pick_title_agent")->setVisible( self);
 
 		mPopupMenu->setItemVisible("pick_delete", TRUE);
 		mPopupMenu->setItemVisible("pick_edit", TRUE);
@@ -664,17 +664,17 @@ void LLPanelPicks::updateButtons()
 
 	if (getAvatarId() == gAgentID)
 	{
-		childSetEnabled(XML_BTN_DELETE, has_selected);
+		getChildView(XML_BTN_DELETE)->setEnabled(has_selected);
 	}
 
-	childSetEnabled(XML_BTN_INFO, has_selected);
-	childSetEnabled(XML_BTN_TELEPORT, has_selected);
-	childSetEnabled(XML_BTN_SHOW_ON_MAP, has_selected);
+	getChildView(XML_BTN_INFO)->setEnabled(has_selected);
+	getChildView(XML_BTN_TELEPORT)->setEnabled(has_selected);
+	getChildView(XML_BTN_SHOW_ON_MAP)->setEnabled(has_selected);
 
 	LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
 	if(c_item)
 	{
-		childSetEnabled(XML_BTN_INFO, isClassifiedPublished(c_item));
+		getChildView(XML_BTN_INFO)->setEnabled(isClassifiedPublished(c_item));
 	}
 }
 
@@ -695,8 +695,7 @@ void LLPanelPicks::buildPickPanel()
 
 void LLPanelPicks::onClickPlusBtn()
 {
-	LLRect rect;
-	childGetRect(XML_BTN_NEW, rect);
+	LLRect rect(getChildView(XML_BTN_NEW)->getRect());
 
 	mPlusMenu->updateParent(LLMenuGL::sMenuContainer);
 	mPlusMenu->setButtonRect(rect, this);
@@ -1074,7 +1073,7 @@ void LLPickItem::init(LLPickData* pick_data)
 void LLPickItem::setPickName(const std::string& name)
 {
 	mPickName = name;
-	childSetValue("picture_name",name);
+	getChild<LLUICtrl>("picture_name")->setValue(name);
 
 }
 
@@ -1095,7 +1094,7 @@ const LLUUID& LLPickItem::getSnapshotId()
 
 void LLPickItem::setPickDesc(const std::string& descr)
 {
-	childSetValue("picture_descr",descr);
+	getChild<LLUICtrl>("picture_descr")->setValue(descr);
 }
 
 void LLPickItem::setPickId(const LLUUID& id)
@@ -1115,7 +1114,7 @@ const LLVector3d& LLPickItem::getPosGlobal()
 
 const std::string LLPickItem::getDescription()
 {
-	return childGetValue("picture_descr").asString();
+	return getChild<LLUICtrl>("picture_descr")->getValue().asString();
 }
 
 void LLPickItem::update()
@@ -1142,10 +1141,15 @@ void LLPickItem::processProperties(void *data, EAvatarProcessorType type)
 	LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorID, this);
 }
 
+void set_child_visible(LLView* parent, const std::string& child_name, bool visible)
+{
+	parent->getChildView(child_name)->setVisible(visible);
+}
+
 BOOL LLPickItem::postBuild()
 {
-	setMouseEnterCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", true));
-	setMouseLeaveCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", false));
+	setMouseEnterCallback(boost::bind(&set_child_visible, this, "hovered_icon", true));
+	setMouseLeaveCallback(boost::bind(&set_child_visible, this, "hovered_icon", false));
 	return TRUE;
 }
 
@@ -1153,7 +1157,7 @@ void LLPickItem::setValue(const LLSD& value)
 {
 	if (!value.isMap()) return;;
 	if (!value.has("selected")) return;
-	childSetVisible("selected_icon", value["selected"]);
+	getChildView("selected_icon")->setVisible( value["selected"]);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1199,8 +1203,8 @@ void LLClassifiedItem::processProperties(void* data, EAvatarProcessorType type)
 
 BOOL LLClassifiedItem::postBuild()
 {
-	setMouseEnterCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", true));
-	setMouseLeaveCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", false));
+	setMouseEnterCallback(boost::bind(&set_child_visible, this, "hovered_icon", true));
+	setMouseLeaveCallback(boost::bind(&set_child_visible, this, "hovered_icon", false));
 	return TRUE;
 }
 
@@ -1208,7 +1212,7 @@ void LLClassifiedItem::setValue(const LLSD& value)
 {
 	if (!value.isMap()) return;;
 	if (!value.has("selected")) return;
-	childSetVisible("selected_icon", value["selected"]);
+	getChildView("selected_icon")->setVisible( value["selected"]);
 }
 
 void LLClassifiedItem::fillIn(LLPanelClassifiedEdit* panel)
@@ -1231,22 +1235,22 @@ void LLClassifiedItem::fillIn(LLPanelClassifiedEdit* panel)
 
 void LLClassifiedItem::setClassifiedName(const std::string& name)
 {
-	childSetValue("name", name);
+	getChild<LLUICtrl>("name")->setValue(name);
 }
 
 void LLClassifiedItem::setDescription(const std::string& desc)
 {
-	childSetValue("description", desc);
+	getChild<LLUICtrl>("description")->setValue(desc);
 }
 
 void LLClassifiedItem::setSnapshotId(const LLUUID& snapshot_id)
 {
-	childSetValue("picture", snapshot_id);
+	getChild<LLUICtrl>("picture")->setValue(snapshot_id);
 }
 
 LLUUID LLClassifiedItem::getSnapshotId()
 {
-	return childGetValue("picture");
+	return getChild<LLUICtrl>("picture")->getValue();
 }
 
 //EOF
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 79a291a622a7c973cb351c5a6403c0f2c54572a6..526ba48dcbce53906dfe8eac5b8cbf239c7dca55 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -269,11 +269,11 @@ public:
 
 	void setClassifiedName (const std::string& name);
 
-	std::string getClassifiedName() { return childGetValue("name").asString(); }
+	std::string getClassifiedName() { return getChild<LLUICtrl>("name")->getValue().asString(); }
 
 	void setDescription(const std::string& desc);
 
-	std::string getDescription() { return childGetValue("description").asString(); }
+	std::string getDescription() { return getChild<LLUICtrl>("description")->getValue().asString(); }
 
 	void setSnapshotId(const LLUUID& snapshot_id);
 
diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp
deleted file mode 100644
index a06c00b70532f6e9ef9e3fc93b7a9ad0c22a7605..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelplace.cpp
+++ /dev/null
@@ -1,421 +0,0 @@
-/** 
- * @file llpanelplace.cpp
- * @brief Display of a place in the Find directory.
- *
- * $LicenseInfo:firstyear=2004&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"
-
-#include "llpanelplace.h"
-
-#include "llviewercontrol.h"
-#include "llqueryflags.h"
-#include "llui.h"
-#include "llsecondlifeurls.h"
-#include "llfloater.h"
-#include "llfloaterreg.h"
-#include "llregionhandle.h"
-
-#include "llagent.h"
-#include "llviewerwindow.h"
-#include "llbutton.h"
-#include "llfloaterworldmap.h"
-#include "lllineeditor.h"
-#include "llnotificationsutil.h"
-#include "lluiconstants.h"
-#include "lltextbox.h"
-#include "lltexteditor.h"
-#include "lltexturectrl.h"
-#include "lltrans.h"
-#include "llworldmap.h"
-#include "llviewerregion.h"
-#include "llvoavatarself.h"
-#include "lluictrlfactory.h"
-//#include "llviewermenu.h"	// create_landmark()
-#include "llweb.h"
-#include "llsdutil.h"
-#include "llsdutil_math.h"
-
-LLPanelPlace::LLPanelPlace()
-:	LLPanel(),
-	mParcelID(),
-	mRequestedID(),
-	mRegionID(),
-	mPosGlobal(),
-	mPosRegion(),
-	mAuctionID(0),
-	mLandmarkAssetID()
-{}
-
-LLPanelPlace::~LLPanelPlace()
-{
-	if (mParcelID.notNull())
-	{
-		LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelID, this);
-	}
-}
-
-BOOL LLPanelPlace::postBuild()
-{
-	// Since this is only used in the directory browser, always
-	// disable the snapshot control. Otherwise clicking on it will
-	// open a texture picker.
-	mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl");
-	mSnapshotCtrl->setEnabled(FALSE);
-
-    mNameEditor = getChild<LLTextBox>("name_editor");
-	// Text boxes appear to have a " " in them by default.  This breaks the
-	// emptiness test for filling in data from the network.  Slam to empty.
-	mNameEditor->setText( LLStringUtil::null );
-
-    mDescEditor = getChild<LLTextEditor>("desc_editor");
-
-	mInfoEditor = getChild<LLTextBox>("info_editor");
-	mLandTypeEditor = getChild<LLTextBox>("land_type_display");
-
-    mLocationDisplay = getChild<LLTextBox>("location_editor");
-
-	mTeleportBtn = getChild<LLButton>( "teleport_btn");
-	mTeleportBtn->setClickedCallback(onClickTeleport, this);
-
-	mMapBtn = getChild<LLButton>( "map_btn");
-	mMapBtn->setClickedCallback(onClickMap, this);
-
-	//mLandmarkBtn = getChild<LLButton>( "landmark_btn");
-	//mLandmarkBtn->setClickedCallback(onClickLandmark, this);
-
-	mAuctionBtn = getChild<LLButton>( "auction_btn");
-	mAuctionBtn->setClickedCallback(onClickAuction, this);
-
-	// Default to no auction button.  We'll show it if we get an auction id
-	mAuctionBtn->setVisible(FALSE);
-
-	// Temporary text to explain why the description panel is blank.
-	// mDescEditor->setText("Parcel information not available without server update");
-
-	return TRUE;
-}
-
-void LLPanelPlace::displayItemInfo(const LLInventoryItem* pItem)
-{
-	if (pItem)
-	{
-		mNameEditor->setText(pItem->getName());
-		mDescEditor->setText(pItem->getDescription());
-	}
-}
-
-// Use this for search directory clicks, because we are totally
-// recycling the panel and don't need to use what's there.
-//
-// For SLURL clicks, don't call this, because we need to cache
-// the location info from the user.
-void LLPanelPlace::resetLocation()
-{
-	mParcelID.setNull();
-	mRequestedID.setNull();
-	mRegionID.setNull();
-	mLandmarkAssetID.setNull();
-	mPosGlobal.clearVec();
-	mPosRegion.clearVec();
-	mAuctionID = 0;
-	mNameEditor->setText( LLStringUtil::null );
-	mDescEditor->setText( LLStringUtil::null );
-	mInfoEditor->setText( LLStringUtil::null );
-	mLandTypeEditor->setText( LLStringUtil::null );
-	mLocationDisplay->setText( LLStringUtil::null );
-}
-
-
-// Set the name and clear other bits of info.  Used for SLURL clicks
-void LLPanelPlace::resetName(const std::string& name)
-{
-	setName(name);
-	if(mDescEditor)
-	{
-		mDescEditor->setText( LLStringUtil::null );
-	}
-	if(mNameEditor)
-	{
-		llinfos << "Clearing place name" << llendl;
-		mNameEditor->setText( LLStringUtil::null );
-	}
-	if(mInfoEditor)
-	{
-		mInfoEditor->setText( LLStringUtil::null );
-	}
-	if(mLandTypeEditor)
-	{
-		mLandTypeEditor->setText( LLStringUtil::null );
-	}
-}
-
-//virtual
-void LLPanelPlace::setParcelID(const LLUUID& parcel_id)
-{
-	mParcelID = parcel_id;
-	sendParcelInfoRequest();
-}
-
-void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id)
-{
-	mSnapshotCtrl->setImageAssetID(snapshot_id);
-}
-
-void LLPanelPlace::setLocationString(const std::string& location)
-{
-	mLocationDisplay->setText(location);
-}
-
-void LLPanelPlace::setLandTypeString(const std::string& land_type)
-{
-	mLandTypeEditor->setText(land_type);
-}
-
-void LLPanelPlace::sendParcelInfoRequest()
-{
-	if (mParcelID != mRequestedID)
-	{
-        //ext-4655, remove now incase this gets called twice without a remove
-        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedID, this);
-
-		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
-		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
-
-		mRequestedID = mParcelID;
-	}
-}
-
-//virtual
-void LLPanelPlace::setErrorStatus(U32 status, const std::string& reason)
-{
-	// We only really handle 404 and 499 errors
-	std::string error_text;
-	if(status == 404)
-	{
-		error_text = getString("server_error_text");
-	}
-	else if(status == 499)
-	{
-		error_text = getString("server_forbidden_text");
-	}
-	mDescEditor->setText(error_text);
-}
-
-//virtual
-void LLPanelPlace::processParcelInfo(const LLParcelData& parcel_data)
-{
-	mAuctionID = parcel_data.auction_id;
-
-	if(parcel_data.snapshot_id.notNull())
-	{
-		mSnapshotCtrl->setImageAssetID(parcel_data.snapshot_id);
-	}
-
-	if( !parcel_data.name.empty()
-	   && mNameEditor && mNameEditor->getText().empty())
-	{
-		mNameEditor->setText(parcel_data.name);
-	}
-
-	if( !parcel_data.desc.empty()
-		&& mDescEditor && mDescEditor->getText().empty())
-	{
-		mDescEditor->setText(parcel_data.desc);
-	}
-
-	std::string info_text;
-	LLUIString traffic = getString("traffic_text");
-	traffic.setArg("[TRAFFIC]", llformat("%d ", (int)parcel_data.dwell));
-	info_text = traffic;
-	LLUIString area = getString("area_text");
-	area.setArg("[AREA]", llformat("%d", parcel_data.actual_area));
-	info_text += area;
-	if (parcel_data.flags & DFQ_FOR_SALE)
-	{
-		LLUIString forsale = getString("forsale_text");
-		forsale.setArg("[PRICE]", llformat("%d", parcel_data.sale_price));
-		info_text += forsale;
-	}
-	if (parcel_data.auction_id != 0)
-	{
-		LLUIString auction = getString("auction_text");
-		auction.setArg("[ID]", llformat("%010d ", parcel_data.auction_id));
-		info_text += auction;
-	}
-	if (mInfoEditor)
-	{
-		mInfoEditor->setText(info_text);
-	}
-
-	// HACK: Flag 0x2 == adult region,
-	// Flag 0x1 == mature region, otherwise assume PG
-	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
-	if (parcel_data.flags & 0x2)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
-	}
-	else if (parcel_data.flags & 0x1)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
-	}
-
-	// Just use given region position for display
-	S32 region_x = llround(mPosRegion.mV[0]);
-	S32 region_y = llround(mPosRegion.mV[1]);
-	S32 region_z = llround(mPosRegion.mV[2]);
-
-	// If the region position is zero, grab position from the global
-	if(mPosRegion.isExactlyZero())
-	{
-		region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS;
-		region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS;
-		region_z = llround(parcel_data.global_z);
-	}
-
-	if(mPosGlobal.isExactlyZero())
-	{
-		mPosGlobal.setVec(parcel_data.global_x, parcel_data.global_y, parcel_data.global_z);
-	}
-
-	std::string location = llformat("%s %d, %d, %d (%s)",
-									parcel_data.sim_name.c_str(), region_x, region_y, region_z, rating.c_str());
-	if (mLocationDisplay)
-	{
-		mLocationDisplay->setText(location);
-	}
-
-	BOOL show_auction = (parcel_data.auction_id > 0);
-	mAuctionBtn->setVisible(show_auction);
-}
-
-
-void LLPanelPlace::displayParcelInfo(const LLVector3& pos_region,
-									 const LLUUID& landmark_asset_id,
-									 const LLUUID& region_id,
-									 const LLVector3d& pos_global)
-{
-	LLSD body;
-	mPosRegion = pos_region;
-	mPosGlobal = pos_global;
-	mLandmarkAssetID = landmark_asset_id;
-	std::string url = gAgent.getRegion()->getCapability("RemoteParcelRequest");
-	if (!url.empty())
-	{
-		body["location"] = ll_sd_from_vector3(pos_region);
-		if (!region_id.isNull())
-		{
-			body["region_id"] = region_id;
-		}
-		if (!pos_global.isExactlyZero())
-		{
-			U64 region_handle = to_region_handle(pos_global);
-			body["region_handle"] = ll_sd_from_U64(region_handle);
-		}
-		LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
-	}
-	else
-	{
-		mDescEditor->setText(getString("server_update_text"));
-	}
-	mSnapshotCtrl->setImageAssetID(LLUUID::null);
-}
-
-// static
-void LLPanelPlace::onClickTeleport(void* data)
-{
-	LLPanelPlace* self = (LLPanelPlace*)data;
-
-	LLView* parent_viewp = self->getParent();
-	LLFloater* parent_floaterp = dynamic_cast<LLFloater*>(parent_viewp);
-	if (parent_floaterp)
-	{
-		parent_floaterp->closeFloater();
-	}
-	// LLFloater* parent_floaterp = (LLFloater*)self->getParent();
-	parent_viewp->setVisible(false);
-	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
-	if(self->mLandmarkAssetID.notNull() && worldmap_instance)
-	{
-		gAgent.teleportViaLandmark(self->mLandmarkAssetID);
-		worldmap_instance->trackLandmark(self->mLandmarkAssetID);
-
-	}
-	else if (!self->mPosGlobal.isExactlyZero() && worldmap_instance)
-	{
-		gAgent.teleportViaLocation(self->mPosGlobal);
-		worldmap_instance->trackLocation(self->mPosGlobal);
-	}
-}
-
-// static
-void LLPanelPlace::onClickMap(void* data)
-{
-	LLPanelPlace* self = (LLPanelPlace*)data;
-	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
-	
-	if (!self->mPosGlobal.isExactlyZero() && worldmap_instance)
-	{
-		worldmap_instance->trackLocation(self->mPosGlobal);
-		LLFloaterReg::showInstance("world_map", "center");
-	}
-}
-
-// static
-/*
-void LLPanelPlace::onClickLandmark(void* data)
-{
-	LLPanelPlace* self = (LLPanelPlace*)data;
-
-	create_landmark(self->mNameEditor->getText(), "", self->mPosGlobal);
-}
-*/
-
-
-// static
-void LLPanelPlace::onClickAuction(void* data)
-{
-	LLPanelPlace* self = (LLPanelPlace*)data;
-	LLSD args;
-	args["AUCTION_ID"] = self->mAuctionID;
-
-	LLNotificationsUtil::add("GoToAuctionPage", args);
-}
-/*
-// static
-bool LLPanelPlace::callbackAuctionWebPage(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (0 == option)
-	{
-		std::string url;
-		url = LLNotifications::instance().getGlobalString("AUCTION_URL")  + llformat("%010d", response["auction_id"].asInteger());
-
-		llinfos << "Loading auction page " << url << llendl;
-
-		LLWeb::loadURL(url);
-	}
-	return false;
-}
-*/
-
diff --git a/indra/newview/llpanelplace.h b/indra/newview/llpanelplace.h
deleted file mode 100644
index 5afe1aa485a74db1177c6480f8c2c71eb2e0854f..0000000000000000000000000000000000000000
--- a/indra/newview/llpanelplace.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/** 
- * @file llpanelplace.h
- * @brief Display of a place in the Find directory.
- *
- * $LicenseInfo:firstyear=2004&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_LLPANELPLACE_H
-#define LL_LLPANELPLACE_H
-
-#include "llpanel.h"
-
-#include "v3dmath.h"
-#include "lluuid.h"
-
-#include "llremoteparcelrequest.h"
-
-class LLButton;
-class LLTextBox;
-class LLLineEditor;
-class LLTextEditor;
-class LLTextureCtrl;
-class LLMessageSystem;
-class LLInventoryItem;
-
-class LLPanelPlace : public LLPanel, LLRemoteParcelInfoObserver
-{
-public:
-	LLPanelPlace();
-	/*virtual*/ ~LLPanelPlace();
-
-	/*virtual*/ BOOL postBuild();
-
-	void resetLocation();
-		// Ignore all old location information, useful if you are 
-		// recycling an existing dialog and need to clear it.
-
-	/*virtual*/ void setParcelID(const LLUUID& parcel_id);
-		// Sends a request for data about the given parcel, which will
-		// only update the location if there is none already available.
-
-	void displayItemInfo(const LLInventoryItem* pItem);
-	void setRegionID(const LLUUID& region_id) { mRegionID = region_id; }
-	void setSnapshot(const LLUUID& snapshot_id);
-	void setLocationString(const std::string& location);
-	void setLandTypeString(const std::string& land_type);
-	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
-	void resetName(const std::string& name);
-
-	void sendParcelInfoRequest();
-	void displayParcelInfo(const LLVector3& pos_region,
-			const LLUUID& landmark_asset_id,
-			const LLUUID& region_id,
-			const LLVector3d& pos_global);
-	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
-
-	LLTextureCtrl *getSnapshotCtrl() const { return mSnapshotCtrl; }
-
-protected:
-	static void onClickTeleport(void* data);
-	static void onClickMap(void* data);
-	//static void onClickLandmark(void* data);
-	static void onClickAuction(void* data);
-
-	// Go to auction web page if user clicked OK
-	static bool callbackAuctionWebPage(const LLSD& notification, const LLSD& response);
-
-protected:
-	LLUUID			mParcelID;
-	LLUUID			mRequestedID;
-	LLUUID			mRegionID;
-	LLUUID			mLandmarkAssetID;
-	// Absolute position of the location for teleport, may not
-	// be available (hence zero)
-	LLVector3d		mPosGlobal;
-	// Region-local position for teleport, always available.
-	LLVector3		mPosRegion;
-	// Zero if this is not an auction
-	S32				mAuctionID;
-
-	LLTextureCtrl* mSnapshotCtrl;
-
-	LLTextBox* mNameEditor;
-	LLTextEditor* mDescEditor;
-	LLTextBox* mInfoEditor;
-	LLTextBox* mLandTypeEditor;
-	LLTextBox* mLocationDisplay; //not calling it "editor" because it isn't
-
-	LLButton*	mTeleportBtn;
-	LLButton*	mMapBtn;
-	//LLButton*	mLandmarkBtn;
-	LLButton*	mAuctionBtn;
-};
-
-#endif // LL_LLPANELPLACE_H
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 1076e17e1d73e0ee6cc198acf96dfc9ea5a2eb0c..bbaffda2f224b094344aebba254ccb4cdd851dfc 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -98,11 +98,11 @@ void LLPanelPlaceInfo::resetLocation()
 	mPosRegion.clearVec();
 
 	std::string loading = LLTrans::getString("LoadingData");
-	mMaturityRatingIcon->setValue(loading);
 	mMaturityRatingText->setValue(loading);
 	mRegionName->setText(loading);
 	mParcelName->setText(loading);
 	mDescEditor->setText(loading);
+	mMaturityRatingIcon->setValue(LLUUID::null);
 
 	mSnapshotCtrl->setImageAssetID(LLUUID::null);
 }
@@ -184,7 +184,21 @@ void LLPanelPlaceInfo::setErrorStatus(U32 status, const std::string& reason)
 	{
 		error_text = getString("server_forbidden_text");
 	}
+	else
+	{
+		error_text = getString("server_error_text");
+	}
+
 	mDescEditor->setText(error_text);
+
+	std::string not_available = getString("not_available");
+	mMaturityRatingText->setValue(not_available);
+	mRegionName->setText(not_available);
+	mParcelName->setText(not_available);
+	mMaturityRatingIcon->setValue(LLUUID::null);
+
+	// Enable "Back" button that was disabled when parcel request was sent.
+	getChild<LLButton>("back_btn")->setEnabled(TRUE);
 }
 
 // virtual
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index e244a6255e815248eac2b56ba8a64d21b958b2bc..5aed1e55e377889ab4d1ac7d1ef5d827359b5a43 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -49,6 +49,7 @@
 #include "llagent.h"
 #include "llagentpicksinfo.h"
 #include "llavatarpropertiesprocessor.h"
+#include "llcommandhandler.h"
 #include "llfloaterworldmap.h"
 #include "llinventorybridge.h"
 #include "llinventoryobserver.h"
@@ -61,6 +62,7 @@
 #include "llpanelplaceprofile.h"
 #include "llpanelteleporthistory.h"
 #include "llremoteparcelrequest.h"
+#include "llsidetray.h"
 #include "llteleporthistorystorage.h"
 #include "lltoggleablemenu.h"
 #include "llviewerinventory.h"
@@ -70,6 +72,7 @@
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
 
+// Constants
 static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;
 static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0;
 static const std::string AGENT_INFO_TYPE			= "agent";
@@ -78,6 +81,40 @@ static const std::string LANDMARK_INFO_TYPE			= "landmark";
 static const std::string REMOTE_PLACE_INFO_TYPE		= "remote_place";
 static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
 
+// Support for secondlife:///app/parcel/{UUID}/about SLapps
+class LLParcelHandler : public LLCommandHandler
+{
+public:
+	// requires trusted browser to trigger
+	LLParcelHandler() : LLCommandHandler("parcel", UNTRUSTED_THROTTLE) { }
+	bool handle(const LLSD& params, const LLSD& query_map,
+				LLMediaCtrl* web)
+	{
+		if (params.size() < 2)
+		{
+			return false;
+		}
+		LLUUID parcel_id;
+		if (!parcel_id.set(params[0], FALSE))
+		{
+			return false;
+		}
+		if (params[1].asString() == "about")
+		{
+			if (parcel_id.notNull())
+			{
+				LLSD key;
+				key["type"] = "remote_place";
+				key["id"] = parcel_id;
+				LLSideTray::getInstance()->showPanel("panel_places", key);
+				return true;
+			}
+		}
+		return false;
+	}
+};
+LLParcelHandler gParcelHandler;
+
 // Helper functions
 static bool is_agent_in_selected_parcel(LLParcel* parcel);
 static void onSLURLBuilt(std::string& slurl);
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 55cf58c2d0cd08e24cc9f34060a22c08f3370b32..c0f504fef66bf0be674c7eb5ec7205d73b25e7e1 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -117,8 +117,8 @@ BOOL LLPanelProfileView::postBuild()
 	getTabContainer()[PANEL_NOTES] = getChild<LLPanelAvatarNotes>(PANEL_NOTES);
 	
 	//*TODO remove this, according to style guide we don't use status combobox
-	getTabContainer()[PANEL_PROFILE]->childSetVisible("online_me_status_text", FALSE);
-	getTabContainer()[PANEL_PROFILE]->childSetVisible("status_combo", FALSE);
+	getTabContainer()[PANEL_PROFILE]->getChildView("online_me_status_text")->setVisible( FALSE);
+	getTabContainer()[PANEL_PROFILE]->getChildView("status_combo")->setVisible( FALSE);
 
 	mStatusText = getChild<LLTextBox>("status");
 	mStatusText->setVisible(false);
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index ba6d9428387687d48eb68ae4360041147d0a1477..a7cbf5229080fc87f3bcfb471d6ac73393f64297 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -164,7 +164,7 @@ void LLTeleportHistoryFlatItem::setValue(const LLSD& value)
 {
 	if (!value.isMap()) return;;
 	if (!value.has("selected")) return;
-	childSetVisible("selected_icon", value["selected"]);
+	getChildView("selected_icon")->setVisible( value["selected"]);
 }
 
 void LLTeleportHistoryFlatItem::setHighlightedText(const std::string& text)
@@ -188,7 +188,7 @@ void LLTeleportHistoryFlatItem::updateTitle()
 
 void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
-	childSetVisible("hovered_icon", true);
+	getChildView("hovered_icon")->setVisible( true);
 	mProfileBtn->setVisible(true);
 
 	LLPanel::onMouseEnter(x, y, mask);
@@ -196,7 +196,7 @@ void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
 
 void LLTeleportHistoryFlatItem::onMouseLeave(S32 x, S32 y, MASK mask)
 {
-	childSetVisible("hovered_icon", false);
+	getChildView("hovered_icon")->setVisible( false);
 	mProfileBtn->setVisible(false);
 
 	LLPanel::onMouseLeave(x, y, mask);
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 15f7195b1a34f7a1d3507408a81bea4a949b5990..0d17fb3e82b2ad10bc38261323d18c68cdc52ca2 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -155,6 +155,8 @@ BOOL LLPanelTopInfoBar::postBuild()
 	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
 			boost::bind(&LLPanelTopInfoBar::onAgentParcelChange, this));
 
+	setVisibleCallback(boost::bind(&LLPanelTopInfoBar::onVisibilityChange, this, _2));
+
 	return TRUE;
 }
 
@@ -168,6 +170,27 @@ void LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged()
 	setParcelInfoText(new_text);
 }
 
+// when panel is shown, all minimized floaters should be shifted downwards to prevent overlapping of
+// PanelTopInfoBar. See EXT-7951.
+void LLPanelTopInfoBar::onVisibilityChange(const LLSD& show)
+{
+	// this height is used as a vertical offset for ALREADY MINIMIZED floaters
+	// when PanelTopInfoBar visibility changes
+	S32 height = getRect().getHeight();
+
+	// this vertical offset is used for a start minimize position of floaters that
+	// are NOT MIMIMIZED YET
+	S32 minimize_pos_offset = 0;
+
+	if (show.asBoolean())
+	{
+		height = minimize_pos_offset = -height;
+	}
+
+	gFloaterView->shiftFloaters(0, height);
+	gFloaterView->setMinimizePositionVerticalOffset(minimize_pos_offset);
+}
+
 void LLPanelTopInfoBar::draw()
 {
 	updateParcelInfoText();
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index cf608b88e15e6ee87b2bf6c8f9a7817a18fd83ec..db922ef424af332b1e85d999a2d752fb8e62f973 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -52,6 +52,11 @@ public:
 	 */
 	void handleLoginComplete();
 
+	/**
+	 * Called when the top info bar gets shown or hidden
+	 */
+	void onVisibilityChange(const LLSD& show);
+
 private:
 	class LLParcelChangeObserver;
 
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index faf260881ec9efdd8fac0aaabc3290a53c1d1c61..065c4d0b92f3987f9fa555efd994eb8bc3d70d5d 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -79,21 +79,21 @@ BOOL	LLPanelVolume::postBuild()
 	{
 		childSetCommitCallback("Flexible1D Checkbox Ctrl",onCommitIsFlexible,this);
 		childSetCommitCallback("FlexNumSections",onCommitFlexible,this);
-		childSetValidate("FlexNumSections",precommitValidate);
+		getChild<LLUICtrl>("FlexNumSections")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("FlexGravity",onCommitFlexible,this);
-		childSetValidate("FlexGravity",precommitValidate);
+		getChild<LLUICtrl>("FlexGravity")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("FlexFriction",onCommitFlexible,this);
-		childSetValidate("FlexFriction",precommitValidate);
+		getChild<LLUICtrl>("FlexFriction")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("FlexWind",onCommitFlexible,this);
-		childSetValidate("FlexWind",precommitValidate);
+		getChild<LLUICtrl>("FlexWind")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("FlexTension",onCommitFlexible,this);
-		childSetValidate("FlexTension",precommitValidate);
+		getChild<LLUICtrl>("FlexTension")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("FlexForceX",onCommitFlexible,this);
-		childSetValidate("FlexForceX",precommitValidate);
+		getChild<LLUICtrl>("FlexForceX")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("FlexForceY",onCommitFlexible,this);
-		childSetValidate("FlexForceY",precommitValidate);
+		getChild<LLUICtrl>("FlexForceY")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("FlexForceZ",onCommitFlexible,this);
-		childSetValidate("FlexForceZ",precommitValidate);
+		getChild<LLUICtrl>("FlexForceZ")->setValidateBeforeCommit(precommitValidate);
 	}
 
 	// LIGHT Parameters
@@ -115,18 +115,18 @@ BOOL	LLPanelVolume::postBuild()
 		}
 
 		childSetCommitCallback("Light Intensity",onCommitLight,this);
-		childSetValidate("Light Intensity",precommitValidate);
+		getChild<LLUICtrl>("Light Intensity")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("Light Radius",onCommitLight,this);
-		childSetValidate("Light Radius",precommitValidate);
+		getChild<LLUICtrl>("Light Radius")->setValidateBeforeCommit(precommitValidate);
 		childSetCommitCallback("Light Falloff",onCommitLight,this);
-		childSetValidate("Light Falloff",precommitValidate);
+		getChild<LLUICtrl>("Light Falloff")->setValidateBeforeCommit(precommitValidate);
 		
 		childSetCommitCallback("Light FOV", onCommitLight, this);
-		childSetValidate("Light FOV", precommitValidate);
+		getChild<LLUICtrl>("Light FOV")->setValidateBeforeCommit( precommitValidate);
 		childSetCommitCallback("Light Focus", onCommitLight, this);
-		childSetValidate("Light Focus", precommitValidate);
+		getChild<LLUICtrl>("Light Focus")->setValidateBeforeCommit( precommitValidate);
 		childSetCommitCallback("Light Ambiance", onCommitLight, this);
-		childSetValidate("Light Ambiance", precommitValidate);
+		getChild<LLUICtrl>("Light Ambiance")->setValidateBeforeCommit( precommitValidate);
 	}
 	
 	// Start with everyone disabled
@@ -204,25 +204,25 @@ void LLPanelVolume::getState( )
 	// Select Single Message
 	if (single_volume)
 	{
-		childSetVisible("edit_object",true);
-		childSetEnabled("edit_object",true);
-		childSetVisible("select_single",false);
+		getChildView("edit_object")->setVisible(true);
+		getChildView("edit_object")->setEnabled(true);
+		getChildView("select_single")->setVisible(false);
 	}
 	else
 	{	
-		childSetVisible("edit_object",false);
-		childSetVisible("select_single",true);
-		childSetEnabled("select_single",true);
+		getChildView("edit_object")->setVisible(false);
+		getChildView("select_single")->setVisible(true);
+		getChildView("select_single")->setEnabled(true);
 	}
 	
 	// Light properties
 	BOOL is_light = volobjp && volobjp->getIsLight();
-	childSetValue("Light Checkbox Ctrl",is_light);
-	childSetEnabled("Light Checkbox Ctrl",editable && single_volume && volobjp);
+	getChild<LLUICtrl>("Light Checkbox Ctrl")->setValue(is_light);
+	getChildView("Light Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp);
 	
 	if (is_light && editable && single_volume)
 	{
-		childSetEnabled("label color",true);
+		getChildView("label color")->setEnabled(true);
 		//mLabelColor		 ->setEnabled( TRUE );
 		LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
 		if(LightColorSwatch)
@@ -240,22 +240,22 @@ void LLPanelVolume::getState( )
 			LightTextureCtrl->setImageAssetID(volobjp->getLightTextureID());
 		}
 
-		childSetEnabled("Light Intensity",true);
-		childSetEnabled("Light Radius",true);
-		childSetEnabled("Light Falloff",true);
+		getChildView("Light Intensity")->setEnabled(true);
+		getChildView("Light Radius")->setEnabled(true);
+		getChildView("Light Falloff")->setEnabled(true);
 
-		childSetEnabled("Light FOV", true);
-		childSetEnabled("Light Focus", true);
-		childSetEnabled("Light Ambiance", true);
+		getChildView("Light FOV")->setEnabled(true);
+		getChildView("Light Focus")->setEnabled(true);
+		getChildView("Light Ambiance")->setEnabled(true);
 		
-		childSetValue("Light Intensity",volobjp->getLightIntensity());
-		childSetValue("Light Radius",volobjp->getLightRadius());
-		childSetValue("Light Falloff",volobjp->getLightFalloff());
+		getChild<LLUICtrl>("Light Intensity")->setValue(volobjp->getLightIntensity());
+		getChild<LLUICtrl>("Light Radius")->setValue(volobjp->getLightRadius());
+		getChild<LLUICtrl>("Light Falloff")->setValue(volobjp->getLightFalloff());
 
 		LLVector3 params = volobjp->getSpotLightParams();
-		childSetValue("Light FOV", params.mV[0]);
-		childSetValue("Light Focus", params.mV[1]);
-		childSetValue("Light Ambiance", params.mV[2]);
+		getChild<LLUICtrl>("Light FOV")->setValue(params.mV[0]);
+		getChild<LLUICtrl>("Light Focus")->setValue(params.mV[1]);
+		getChild<LLUICtrl>("Light Ambiance")->setValue(params.mV[2]);
 
 		mLightSavedColor = volobjp->getLightColor();
 	}
@@ -265,7 +265,7 @@ void LLPanelVolume::getState( )
 		getChild<LLSpinCtrl>("Light Radius", true)->clear();
 		getChild<LLSpinCtrl>("Light Falloff", true)->clear();
 
-		childSetEnabled("label color",false);	
+		getChildView("label color")->setEnabled(false);	
 		LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
 		if(LightColorSwatch)
 		{
@@ -279,56 +279,56 @@ void LLPanelVolume::getState( )
 			LightTextureCtrl->setValid(FALSE);
 		}
 
-		childSetEnabled("Light Intensity",false);
-		childSetEnabled("Light Radius",false);
-		childSetEnabled("Light Falloff",false);
+		getChildView("Light Intensity")->setEnabled(false);
+		getChildView("Light Radius")->setEnabled(false);
+		getChildView("Light Falloff")->setEnabled(false);
 
-		childSetEnabled("Light FOV",false);
-		childSetEnabled("Light Focus",false);
-		childSetEnabled("Light Ambiance",false);
+		getChildView("Light FOV")->setEnabled(false);
+		getChildView("Light Focus")->setEnabled(false);
+		getChildView("Light Ambiance")->setEnabled(false);
 	}
 	
 	// Flexible properties
 	BOOL is_flexible = volobjp && volobjp->isFlexible();
-	childSetValue("Flexible1D Checkbox Ctrl",is_flexible);
+	getChild<LLUICtrl>("Flexible1D Checkbox Ctrl")->setValue(is_flexible);
 	if (is_flexible || (volobjp && volobjp->canBeFlexible()))
 	{
-		childSetEnabled("Flexible1D Checkbox Ctrl", editable && single_volume && volobjp);
+		getChildView("Flexible1D Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp);
 	}
 	else
 	{
-		childSetEnabled("Flexible1D Checkbox Ctrl", false);
+		getChildView("Flexible1D Checkbox Ctrl")->setEnabled(false);
 	}
 	if (is_flexible && editable && single_volume)
 	{
-		childSetVisible("FlexNumSections",true);
-		childSetVisible("FlexGravity",true);
-		childSetVisible("FlexTension",true);
-		childSetVisible("FlexFriction",true);
-		childSetVisible("FlexWind",true);
-		childSetVisible("FlexForceX",true);
-		childSetVisible("FlexForceY",true);
-		childSetVisible("FlexForceZ",true);
-
-		childSetEnabled("FlexNumSections",true);
-		childSetEnabled("FlexGravity",true);
-		childSetEnabled("FlexTension",true);
-		childSetEnabled("FlexFriction",true);
-		childSetEnabled("FlexWind",true);
-		childSetEnabled("FlexForceX",true);
-		childSetEnabled("FlexForceY",true);
-		childSetEnabled("FlexForceZ",true);
+		getChildView("FlexNumSections")->setVisible(true);
+		getChildView("FlexGravity")->setVisible(true);
+		getChildView("FlexTension")->setVisible(true);
+		getChildView("FlexFriction")->setVisible(true);
+		getChildView("FlexWind")->setVisible(true);
+		getChildView("FlexForceX")->setVisible(true);
+		getChildView("FlexForceY")->setVisible(true);
+		getChildView("FlexForceZ")->setVisible(true);
+
+		getChildView("FlexNumSections")->setEnabled(true);
+		getChildView("FlexGravity")->setEnabled(true);
+		getChildView("FlexTension")->setEnabled(true);
+		getChildView("FlexFriction")->setEnabled(true);
+		getChildView("FlexWind")->setEnabled(true);
+		getChildView("FlexForceX")->setEnabled(true);
+		getChildView("FlexForceY")->setEnabled(true);
+		getChildView("FlexForceZ")->setEnabled(true);
 
 		LLFlexibleObjectData *attributes = (LLFlexibleObjectData *)objectp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE);
 		
-		childSetValue("FlexNumSections",(F32)attributes->getSimulateLOD());
-		childSetValue("FlexGravity",attributes->getGravity());
-		childSetValue("FlexTension",attributes->getTension());
-		childSetValue("FlexFriction",attributes->getAirFriction());
-		childSetValue("FlexWind",attributes->getWindSensitivity());
-		childSetValue("FlexForceX",attributes->getUserForce().mV[VX]);
-		childSetValue("FlexForceY",attributes->getUserForce().mV[VY]);
-		childSetValue("FlexForceZ",attributes->getUserForce().mV[VZ]);
+		getChild<LLUICtrl>("FlexNumSections")->setValue((F32)attributes->getSimulateLOD());
+		getChild<LLUICtrl>("FlexGravity")->setValue(attributes->getGravity());
+		getChild<LLUICtrl>("FlexTension")->setValue(attributes->getTension());
+		getChild<LLUICtrl>("FlexFriction")->setValue(attributes->getAirFriction());
+		getChild<LLUICtrl>("FlexWind")->setValue(attributes->getWindSensitivity());
+		getChild<LLUICtrl>("FlexForceX")->setValue(attributes->getUserForce().mV[VX]);
+		getChild<LLUICtrl>("FlexForceY")->setValue(attributes->getUserForce().mV[VY]);
+		getChild<LLUICtrl>("FlexForceZ")->setValue(attributes->getUserForce().mV[VZ]);
 	}
 	else
 	{
@@ -341,14 +341,14 @@ void LLPanelVolume::getState( )
 		getChild<LLSpinCtrl>("FlexForceY", true)->clear();
 		getChild<LLSpinCtrl>("FlexForceZ", true)->clear();
 
-		childSetEnabled("FlexNumSections",false);
-		childSetEnabled("FlexGravity",false);
-		childSetEnabled("FlexTension",false);
-		childSetEnabled("FlexFriction",false);
-		childSetEnabled("FlexWind",false);
-		childSetEnabled("FlexForceX",false);
-		childSetEnabled("FlexForceY",false);
-		childSetEnabled("FlexForceZ",false);
+		getChildView("FlexNumSections")->setEnabled(false);
+		getChildView("FlexGravity")->setEnabled(false);
+		getChildView("FlexTension")->setEnabled(false);
+		getChildView("FlexFriction")->setEnabled(false);
+		getChildView("FlexWind")->setEnabled(false);
+		getChildView("FlexForceX")->setEnabled(false);
+		getChildView("FlexForceY")->setEnabled(false);
+		getChildView("FlexForceZ")->setEnabled(false);
 	}
 	
 	mObject = objectp;
@@ -378,11 +378,11 @@ void LLPanelVolume::refresh()
 
 	BOOL visible = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 0 ? TRUE : FALSE;
 
-	childSetVisible("label texture", visible);
-	childSetVisible("Light FOV", visible);
-	childSetVisible("Light Focus", visible);
-	childSetVisible("Light Ambiance", visible);
-	childSetVisible("light texture control", visible);
+	getChildView("label texture")->setVisible( visible);
+	getChildView("Light FOV")->setVisible( visible);
+	getChildView("Light Focus")->setVisible( visible);
+	getChildView("Light Ambiance")->setVisible( visible);
+	getChildView("light texture control")->setVisible( visible);
 
 }
 
@@ -397,13 +397,13 @@ void LLPanelVolume::clearCtrls()
 {
 	LLPanel::clearCtrls();
 
-	childSetEnabled("select_single",false);
-	childSetVisible("select_single",true);
-	childSetEnabled("edit_object",false);
-	childSetVisible("edit_object",false);
-	childSetEnabled("Light Checkbox Ctrl",false);
-	childSetEnabled("label color",false);
-	childSetEnabled("label color",false);
+	getChildView("select_single")->setEnabled(false);
+	getChildView("select_single")->setVisible(true);
+	getChildView("edit_object")->setEnabled(false);
+	getChildView("edit_object")->setVisible(false);
+	getChildView("Light Checkbox Ctrl")->setEnabled(false);
+	getChildView("label color")->setEnabled(false);
+	getChildView("label color")->setEnabled(false);
 	LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
 	if(LightColorSwatch)
 	{
@@ -417,19 +417,19 @@ void LLPanelVolume::clearCtrls()
 		LightTextureCtrl->setValid( FALSE );
 	}
 
-	childSetEnabled("Light Intensity",false);
-	childSetEnabled("Light Radius",false);
-	childSetEnabled("Light Falloff",false);
-
-	childSetEnabled("Flexible1D Checkbox Ctrl",false);
-	childSetEnabled("FlexNumSections",false);
-	childSetEnabled("FlexGravity",false);
-	childSetEnabled("FlexTension",false);
-	childSetEnabled("FlexFriction",false);
-	childSetEnabled("FlexWind",false);
-	childSetEnabled("FlexForceX",false);
-	childSetEnabled("FlexForceY",false);
-	childSetEnabled("FlexForceZ",false);
+	getChildView("Light Intensity")->setEnabled(false);
+	getChildView("Light Radius")->setEnabled(false);
+	getChildView("Light Falloff")->setEnabled(false);
+
+	getChildView("Flexible1D Checkbox Ctrl")->setEnabled(false);
+	getChildView("FlexNumSections")->setEnabled(false);
+	getChildView("FlexGravity")->setEnabled(false);
+	getChildView("FlexTension")->setEnabled(false);
+	getChildView("FlexFriction")->setEnabled(false);
+	getChildView("FlexWind")->setEnabled(false);
+	getChildView("FlexForceX")->setEnabled(false);
+	getChildView("FlexForceY")->setEnabled(false);
+	getChildView("FlexForceZ")->setEnabled(false);
 }
 
 //
@@ -445,7 +445,7 @@ void LLPanelVolume::sendIsLight()
 	}	
 	LLVOVolume *volobjp = (LLVOVolume *)objectp;
 	
-	BOOL value = childGetValue("Light Checkbox Ctrl");
+	BOOL value = getChild<LLUICtrl>("Light Checkbox Ctrl")->getValue();
 	volobjp->setIsLight(value);
 	llinfos << "update light sent" << llendl;
 }
@@ -459,7 +459,7 @@ void LLPanelVolume::sendIsFlexible()
 	}	
 	LLVOVolume *volobjp = (LLVOVolume *)objectp;
 	
-	BOOL is_flexible = childGetValue("Flexible1D Checkbox Ctrl");
+	BOOL is_flexible = getChild<LLUICtrl>("Flexible1D Checkbox Ctrl")->getValue();
 	//BOOL is_flexible = mCheckFlexible1D->get();
 
 	if (is_flexible)
@@ -551,9 +551,9 @@ void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata )
 	LLVOVolume *volobjp = (LLVOVolume *)objectp;
 	
 	
-	volobjp->setLightIntensity((F32)self->childGetValue("Light Intensity").asReal());
-	volobjp->setLightRadius((F32)self->childGetValue("Light Radius").asReal());
-	volobjp->setLightFalloff((F32)self->childGetValue("Light Falloff").asReal());
+	volobjp->setLightIntensity((F32)self->getChild<LLUICtrl>("Light Intensity")->getValue().asReal());
+	volobjp->setLightRadius((F32)self->getChild<LLUICtrl>("Light Radius")->getValue().asReal());
+	volobjp->setLightFalloff((F32)self->getChild<LLUICtrl>("Light Falloff")->getValue().asReal());
 
 	LLColorSwatchCtrl*	LightColorSwatch = self->getChild<LLColorSwatchCtrl>("colorswatch");
 	if(LightColorSwatch)
@@ -568,29 +568,29 @@ void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata )
 		LLUUID id = LightTextureCtrl->getImageAssetID();
 		if (id.notNull())
 		{
-			if (volobjp->getLightTextureID().isNull())
+			if (!volobjp->isLightSpotlight())
 			{ //this commit is making this a spot light, set UI to default params
 				volobjp->setLightTextureID(id);
 				LLVector3 spot_params = volobjp->getSpotLightParams();
-				self->childSetValue("Light FOV", spot_params.mV[0]);
-				self->childSetValue("Light Focus", spot_params.mV[1]);
-				self->childSetValue("Light Ambiance", spot_params.mV[2]);
+				self->getChild<LLUICtrl>("Light FOV")->setValue(spot_params.mV[0]);
+				self->getChild<LLUICtrl>("Light Focus")->setValue(spot_params.mV[1]);
+				self->getChild<LLUICtrl>("Light Ambiance")->setValue(spot_params.mV[2]);
 			}
 			else
 			{ //modifying existing params
 				LLVector3 spot_params;
-				spot_params.mV[0] = (F32) self->childGetValue("Light FOV").asReal();
-				spot_params.mV[1] = (F32) self->childGetValue("Light Focus").asReal();
-				spot_params.mV[2] = (F32) self->childGetValue("Light Ambiance").asReal();
+				spot_params.mV[0] = (F32) self->getChild<LLUICtrl>("Light FOV")->getValue().asReal();
+				spot_params.mV[1] = (F32) self->getChild<LLUICtrl>("Light Focus")->getValue().asReal();
+				spot_params.mV[2] = (F32) self->getChild<LLUICtrl>("Light Ambiance")->getValue().asReal();
 				volobjp->setSpotLightParams(spot_params);
 			}
 		}
-		else if (volobjp->getLightTextureID().notNull())
+		else if (volobjp->isLightSpotlight())
 		{ //no longer a spot light
 			volobjp->setLightTextureID(id);
-			//self->childDisable("Light FOV");
-			//self->childDisable("Light Focus");
-			//self->childDisable("Light Ambiance");
+			//self->getChildView("Light FOV")->setEnabled(FALSE);
+			//self->getChildView("Light Focus")->setEnabled(FALSE);
+			//self->getChildView("Light Ambiance")->setEnabled(FALSE);
 		}
 	}
 
@@ -623,14 +623,14 @@ void LLPanelVolume::onCommitFlexible( LLUICtrl* ctrl, void* userdata )
 		new_attributes = *attributes;
 
 
-		new_attributes.setSimulateLOD(self->childGetValue("FlexNumSections").asInteger());//(S32)self->mSpinSections->get());
-		new_attributes.setGravity((F32)self->childGetValue("FlexGravity").asReal());
-		new_attributes.setTension((F32)self->childGetValue("FlexTension").asReal());
-		new_attributes.setAirFriction((F32)self->childGetValue("FlexFriction").asReal());
-		new_attributes.setWindSensitivity((F32)self->childGetValue("FlexWind").asReal());
-		F32 fx = (F32)self->childGetValue("FlexForceX").asReal();
-		F32 fy = (F32)self->childGetValue("FlexForceY").asReal();
-		F32 fz = (F32)self->childGetValue("FlexForceZ").asReal();
+		new_attributes.setSimulateLOD(self->getChild<LLUICtrl>("FlexNumSections")->getValue().asInteger());//(S32)self->mSpinSections->get());
+		new_attributes.setGravity((F32)self->getChild<LLUICtrl>("FlexGravity")->getValue().asReal());
+		new_attributes.setTension((F32)self->getChild<LLUICtrl>("FlexTension")->getValue().asReal());
+		new_attributes.setAirFriction((F32)self->getChild<LLUICtrl>("FlexFriction")->getValue().asReal());
+		new_attributes.setWindSensitivity((F32)self->getChild<LLUICtrl>("FlexWind")->getValue().asReal());
+		F32 fx = (F32)self->getChild<LLUICtrl>("FlexForceX")->getValue().asReal();
+		F32 fy = (F32)self->getChild<LLUICtrl>("FlexForceY")->getValue().asReal();
+		F32 fz = (F32)self->getChild<LLUICtrl>("FlexForceZ")->getValue().asReal();
 		LLVector3 force(fx,fy,fz);
 
 		new_attributes.setUserForce(force);
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 8b1682b901817b1a9030345893767f4a0fe72a93..a6bc34c62e69e7df3d999663fc74fc369f1c8001 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -82,9 +82,58 @@ protected:
 	{
 		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 
+		functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);
+
 		registrar.add("Wearing.Edit", boost::bind(&edit_outfit));
+		registrar.add("Wearing.TakeOff", boost::bind(handleMultiple, take_off, mUUIDs));
+		registrar.add("Wearing.Detach", boost::bind(handleMultiple, take_off, mUUIDs));
+
+		LLContextMenu* menu = createFromFile("menu_wearing_tab.xml");
+
+		updateMenuItemsVisibility(menu);
 
-		return createFromFile("menu_wearing_tab.xml");
+		return menu;
+	}
+
+	void updateMenuItemsVisibility(LLContextMenu* menu)
+	{
+		bool bp_selected			= false;	// true if body parts selected
+		bool clothes_selected		= false;
+		bool attachments_selected	= false;
+
+		// See what types of wearables are selected.
+		for (uuid_vec_t::const_iterator it = mUUIDs.begin(); it != mUUIDs.end(); ++it)
+		{
+			LLViewerInventoryItem* item = gInventory.getItem(*it);
+
+			if (!item)
+			{
+				llwarns << "Invalid item" << llendl;
+				continue;
+			}
+
+			LLAssetType::EType type = item->getType();
+			if (type == LLAssetType::AT_CLOTHING)
+			{
+				clothes_selected = true;
+			}
+			else if (type == LLAssetType::AT_BODYPART)
+			{
+				bp_selected = true;
+			}
+			else if (type == LLAssetType::AT_OBJECT)
+			{
+				attachments_selected = true;
+			}
+		}
+
+		// Enable/disable some menu items depending on the selection.
+		bool allow_detach = !bp_selected && !clothes_selected && attachments_selected;
+		bool allow_take_off = !bp_selected && clothes_selected && !attachments_selected;
+
+		menu->setItemVisible("take_off",	allow_take_off);
+		menu->setItemVisible("detach",		allow_detach);
+		menu->setItemVisible("edit_outfit_separator", allow_take_off || allow_detach);
 	}
 };
 
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 49850748ee9cd211fe3eb4a2fd08ad2c6ceb1cdf..c8aa9ac91e6c34570384ee8fde3308886f92e4bb 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -689,11 +689,11 @@ void LLParticipantList::LLParticipantListMenu::show(LLView* spawning_view, const
 
 	if (is_muted)
 	{
-		LLMenuGL::sMenuContainer->childSetVisible("ModerateVoiceMuteSelected", false);
+		LLMenuGL::sMenuContainer->getChildView("ModerateVoiceMuteSelected")->setVisible( false);
 	}
 	else
 	{
-		LLMenuGL::sMenuContainer->childSetVisible("ModerateVoiceUnMuteSelected", false);
+		LLMenuGL::sMenuContainer->getChildView("ModerateVoiceUnMuteSelected")->setVisible( false);
 	}
 }
 
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index 4f3a2a40448226fcabd513d714bd9aa3becf2f17..69542764d2f03607a0c47bf437693e7004eae374 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -143,12 +143,12 @@ void LLPreview::onCommit()
 		}
 		
 		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
-		new_item->setDescription(childGetText("desc"));
+		new_item->setDescription(getChild<LLUICtrl>("desc")->getValue().asString());
 
-		std::string new_name = childGetText("name");
+		std::string new_name = getChild<LLUICtrl>("name")->getValue().asString();
 		if ( (new_item->getName() != new_name) && !new_name.empty())
 		{
-			new_item->rename(childGetText("name"));
+			new_item->rename(getChild<LLUICtrl>("name")->getValue().asString());
 		}
 
 		if(mObjectUUID.notNull())
@@ -180,7 +180,7 @@ void LLPreview::onCommit()
 					{
 						LLSelectMgr::getInstance()->deselectAll();
 						LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE );
-						LLSelectMgr::getInstance()->selectionSetObjectDescription( childGetText("desc") );
+						LLSelectMgr::getInstance()->selectionSetObjectDescription( getChild<LLUICtrl>("desc")->getValue().asString() );
 
 						LLSelectMgr::getInstance()->deselectAll();
 					}
@@ -226,10 +226,10 @@ void LLPreview::refreshFromItem()
 		LLUIString title = getString("Title", args);
 		setTitle(title.getString());
 	}
-	childSetText("desc",item->getDescription());
+	getChild<LLUICtrl>("desc")->setValue(item->getDescription());
 
 	BOOL can_agent_manipulate = item->getPermissions().allowModifyBy(gAgent.getID());
-	childSetEnabled("desc",can_agent_manipulate);
+	getChildView("desc")->setEnabled(can_agent_manipulate);
 }
 
 // static 
diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp
index a9984528885c18739c5d5b544620b1e13026dccf..b328f65349ad2e8a635203b30dd120cca69b0942 100644
--- a/indra/newview/llpreviewanim.cpp
+++ b/indra/newview/llpreviewanim.cpp
@@ -54,8 +54,8 @@ void LLPreviewAnim::endAnimCallback( void *userdata )
 	delete handlep; // done with the handle
 	if (self)
 	{
-		self->childSetValue("Anim play btn", FALSE);
-		self->childSetValue("Anim audition btn", FALSE);
+		self->getChild<LLUICtrl>("Anim play btn")->setValue(FALSE);
+		self->getChild<LLUICtrl>("Anim audition btn")->setValue(FALSE);
 	}
 }
 
@@ -66,14 +66,14 @@ BOOL LLPreviewAnim::postBuild()
 	if(item)
 	{
 		gAgentAvatarp->createMotion(item->getAssetUUID()); // preload the animation
-		childSetText("desc", item->getDescription());
+		getChild<LLUICtrl>("desc")->setValue(item->getDescription());
 	}
 
 	childSetAction("Anim play btn",playAnim, this);
 	childSetAction("Anim audition btn",auditionAnim, this);
 
 	childSetCommitCallback("desc", LLPreview::onText, this);
-	childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 	
 	return LLPreview::postBuild();
 }
@@ -115,7 +115,7 @@ void LLPreviewAnim::playAnim( void *userdata )
 			btn->toggleState();
 		}
 		
-		if (self->childGetValue("Anim play btn").asBoolean() ) 
+		if (self->getChild<LLUICtrl>("Anim play btn")->getValue().asBoolean() ) 
 		{
 			self->mPauseRequest = NULL;
 			gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START);
@@ -149,7 +149,7 @@ void LLPreviewAnim::auditionAnim( void *userdata )
 			btn->toggleState();
 		}
 		
-		if (self->childGetValue("Anim audition btn").asBoolean() ) 
+		if (self->getChild<LLUICtrl>("Anim audition btn")->getValue().asBoolean() ) 
 		{
 			self->mPauseRequest = NULL;
 			gAgentAvatarp->startMotion(item->getAssetUUID());
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index a8da9e5129271ae0f724f45326d957ddb0f28c57..3f4edbaf97d6e53eca83b45ee928b3e4846b1ccb 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -476,11 +476,11 @@ BOOL LLPreviewGesture::postBuild()
 
 	if (item) 
 	{
-		childSetText("desc", item->getDescription());
-		childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe);
+		getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+		getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 		
-		childSetText("name", item->getName());
-		childSetPrevalidate("name", &LLTextValidate::validateASCIIPrintableNoPipe);
+		getChild<LLUICtrl>("name")->setValue(item->getName());
+		getChild<LLLineEditor>("name")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 	}
 
 	return LLPreview::postBuild();
@@ -622,7 +622,7 @@ void LLPreviewGesture::refresh()
 	if (mPreviewGesture || !is_complete)
 	{
 		
-		childSetEnabled("desc", FALSE);
+		getChildView("desc")->setEnabled(FALSE);
 		//mDescEditor->setEnabled(FALSE);
 		mTriggerEditor->setEnabled(FALSE);
 		mReplaceText->setEnabled(FALSE);
@@ -653,7 +653,7 @@ void LLPreviewGesture::refresh()
 
 	BOOL modifiable = item->getPermissions().allowModifyBy(gAgent.getID());
 
-	childSetEnabled("desc", modifiable);
+	getChildView("desc")->setEnabled(modifiable);
 	mTriggerEditor->setEnabled(TRUE);
 	mLibraryList->setEnabled(modifiable);
 	mStepList->setEnabled(modifiable);
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 2089beba267eebcaab78540d93eeff4b3e422f9c..e85a6a7094e0a614f8375faeaa917fc8d2b84069 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -85,20 +85,20 @@ BOOL LLPreviewNotecard::postBuild()
 	ed->makePristine();
 
 	childSetAction("Save", onClickSave, this);
-	childSetVisible("lock", FALSE);	
+	getChildView("lock")->setVisible( FALSE);	
 
 	childSetAction("Delete", onClickDelete, this);
-	childSetEnabled("Delete", false);
+	getChildView("Delete")->setEnabled(false);
 
 	const LLInventoryItem* item = getItem();
 
 	childSetCommitCallback("desc", LLPreview::onText, this);
 	if (item)
 	{
-		childSetText("desc", item->getDescription());
-		childSetEnabled("Delete", true);
+		getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+		getChildView("Delete")->setEnabled(true);
 	}
-	childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 
 	return LLPreview::postBuild();
 }
@@ -114,10 +114,10 @@ void LLPreviewNotecard::setEnabled( BOOL enabled )
 
 	LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
 
-	childSetEnabled("Notecard Editor", enabled);
-	childSetVisible("lock", !enabled);
-	childSetEnabled("desc", enabled);
-	childSetEnabled("Save", enabled && editor && (!editor->isPristine()));
+	getChildView("Notecard Editor")->setEnabled(enabled);
+	getChildView("lock")->setVisible( !enabled);
+	getChildView("desc")->setEnabled(enabled);
+	getChildView("Save")->setEnabled(enabled && editor && (!editor->isPristine()));
 }
 
 
@@ -126,7 +126,7 @@ void LLPreviewNotecard::draw()
 	LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
 	BOOL changed = !editor->isPristine();
 
-	childSetEnabled("Save", changed && getEnabled());
+	getChildView("Save")->setEnabled(changed && getEnabled());
 	
 	LLPreview::draw();
 }
@@ -277,7 +277,7 @@ void LLPreviewNotecard::loadAsset()
 								GP_OBJECT_MANIPULATE))
 		{
 			editor->setEnabled(FALSE);
-			childSetVisible("lock", TRUE);
+			getChildView("lock")->setVisible( TRUE);
 		}
 	}
 	else
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 5cb93e823dcb8bc607f024febed262447055ef19..d280cf162541e59728bef11446f246dae24f68a0 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -213,7 +213,7 @@ void LLFloaterScriptSearch::onBtnSearch(void *userdata)
 void LLFloaterScriptSearch::handleBtnSearch()
 {
 	LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
-	mEditorCore->mEditor->selectNext(childGetText("search_text"), caseChk->get());
+	mEditorCore->mEditor->selectNext(getChild<LLUICtrl>("search_text")->getValue().asString(), caseChk->get());
 }
 
 // static 
@@ -226,7 +226,7 @@ void LLFloaterScriptSearch::onBtnReplace(void *userdata)
 void LLFloaterScriptSearch::handleBtnReplace()
 {
 	LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
-	mEditorCore->mEditor->replaceText(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
+	mEditorCore->mEditor->replaceText(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get());
 }
 
 // static 
@@ -239,7 +239,7 @@ void LLFloaterScriptSearch::onBtnReplaceAll(void *userdata)
 void LLFloaterScriptSearch::handleBtnReplaceAll()
 {
 	LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text");
-	mEditorCore->mEditor->replaceTextAll(childGetText("search_text"), childGetText("replace_text"), caseChk->get());
+	mEditorCore->mEditor->replaceTextAll(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get());
 }
 
 
@@ -451,7 +451,7 @@ bool LLScriptEdCore::hasChanged()
 void LLScriptEdCore::draw()
 {
 	BOOL script_changed	= hasChanged();
-	childSetEnabled("Save_btn",	script_changed);
+	getChildView("Save_btn")->setEnabled(script_changed);
 
 	if( mEditor->hasFocus() )
 	{
@@ -463,11 +463,11 @@ void LLScriptEdCore::draw()
 		args["[LINE]"] = llformat ("%d", line);
 		args["[COLUMN]"] = llformat ("%d", column);
 		cursor_pos = LLTrans::getString("CursorPos", args);
-		childSetText("line_col", cursor_pos);
+		getChild<LLUICtrl>("line_col")->setValue(cursor_pos);
 	}
 	else
 	{
-		childSetText("line_col", LLStringUtil::null);
+		getChild<LLUICtrl>("line_col")->setValue(LLStringUtil::null);
 	}
 
 	updateDynamicHelp();
@@ -660,7 +660,7 @@ void LLScriptEdCore::onBtnDynamicHelp()
 		if (parent)
 			parent->addDependentFloater(live_help_floater, TRUE);
 		live_help_floater->childSetCommitCallback("lock_check", onCheckLock, this);
-		live_help_floater->childSetValue("lock_check", gSavedSettings.getBOOL("ScriptHelpFollowsCursor"));
+		live_help_floater->getChild<LLUICtrl>("lock_check")->setValue(gSavedSettings.getBOOL("ScriptHelpFollowsCursor"));
 		live_help_floater->childSetCommitCallback("history_combo", onHelpComboCommit, this);
 		live_help_floater->childSetAction("back_btn", onClickBack, this);
 		live_help_floater->childSetAction("fwd_btn", onClickForward, this);
@@ -953,10 +953,10 @@ BOOL LLPreviewLSL::postBuild()
 	llassert(item);
 	if (item)
 	{
-		childSetText("desc", item->getDescription());
+		getChild<LLUICtrl>("desc")->setValue(item->getDescription());
 	}
 	childSetCommitCallback("desc", LLPreview::onText, this);
-	childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 
 	return LLPreview::postBuild();
 }
@@ -1034,8 +1034,8 @@ void LLPreviewLSL::loadAsset()
 			mScriptEd->mFunctions->setEnabled(FALSE);
 			mAssetStatus = PREVIEW_ASSET_LOADED;
 		}
-		childSetVisible("lock", !is_modifiable);
-		mScriptEd->childSetEnabled("Insert...", is_modifiable);
+		getChildView("lock")->setVisible( !is_modifiable);
+		mScriptEd->getChildView("Insert...")->setEnabled(is_modifiable);
 	}
 	else
 	{
@@ -1423,14 +1423,14 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) :
 BOOL LLLiveLSLEditor::postBuild()
 {
 	childSetCommitCallback("running", LLLiveLSLEditor::onRunningCheckboxClicked, this);
-	childSetEnabled("running", FALSE);
+	getChildView("running")->setEnabled(FALSE);
 
 	childSetAction("Reset",&LLLiveLSLEditor::onReset,this);
-	childSetEnabled("Reset", TRUE);
+	getChildView("Reset")->setEnabled(TRUE);
 
 	mMonoCheckbox =	getChild<LLCheckBoxCtrl>("mono");
 	childSetCommitCallback("mono", &LLLiveLSLEditor::onMonoCheckboxClicked, this);
-	childSetEnabled("mono", FALSE);
+	getChildView("mono")->setEnabled(FALSE);
 
 	mScriptEd->mEditor->makePristine();
 	mScriptEd->mEditor->setFocus(TRUE);
diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp
index bacdf20cae77db5d278891c6a339329782b443e6..6b53b459901847d7d86efe8389a3416d9ce8aa7f 100644
--- a/indra/newview/llpreviewsound.cpp
+++ b/indra/newview/llpreviewsound.cpp
@@ -54,7 +54,7 @@ BOOL	LLPreviewSound::postBuild()
 	const LLInventoryItem* item = getItem();
 	if (item)
 	{
-		childSetText("desc", item->getDescription());
+		getChild<LLUICtrl>("desc")->setValue(item->getDescription());
 		if (gAudiop)
 			gAudiop->preloadSound(item->getAssetUUID()); // preload the sound
 	}
@@ -69,7 +69,7 @@ BOOL	LLPreviewSound::postBuild()
 	button->setSoundFlags(LLView::SILENT);
 
 	childSetCommitCallback("desc", LLPreview::onText, this);
-	childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe);	
+	getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);	
 
 	return LLPreview::postBuild();
 }
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 2eb362cd7e6a63b95ed1ce5649a5fb93b2bd2e81..1155f35de857956f8022c42b69631778e3c80653 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -99,7 +99,7 @@ BOOL LLPreviewTexture::postBuild()
 	{
 		getChild<LLButton>("Keep")->setLabel(getString("Copy"));
 		childSetAction("Keep",LLPreview::onBtnCopyToInv,this);
-		childSetVisible("Discard", false);
+		getChildView("Discard")->setVisible( false);
 	}
 	else if (mShowKeepDiscard)
 	{
@@ -108,13 +108,13 @@ BOOL LLPreviewTexture::postBuild()
 	}
 	else
 	{
-		childSetVisible("Keep", false);
-		childSetVisible("Discard", false);
+		getChildView("Keep")->setVisible( false);
+		getChildView("Discard")->setVisible( false);
 	}
 	
 	childSetAction("save_tex_btn", LLPreviewTexture::onSaveAsBtn, this);
-	childSetVisible("save_tex_btn", true);
-	childSetEnabled("save_tex_btn", canSaveAs());
+	getChildView("save_tex_btn")->setVisible( true);
+	getChildView("save_tex_btn")->setEnabled(canSaveAs());
 	
 	if (!mCopyToInv) 
 	{
@@ -123,8 +123,8 @@ BOOL LLPreviewTexture::postBuild()
 		if (item)
 		{
 			childSetCommitCallback("desc", LLPreview::onText, this);
-			childSetText("desc", item->getDescription());
-			childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe);
+			getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+			getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 		}
 	}
 	
@@ -283,8 +283,7 @@ void LLPreviewTexture::reshape(S32 width, S32 height, BOOL called_from_parent)
 {
 	LLPreview::reshape(width, height, called_from_parent);
 
-	LLRect dim_rect;
-	childGetRect("dimensions", dim_rect);
+	LLRect dim_rect(getChildView("dimensions")->getRect());
 
 	S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE;
 
@@ -406,12 +405,11 @@ void LLPreviewTexture::updateDimensions()
 	
 	mUpdateDimensions = FALSE;
 
-	childSetTextArg("dimensions", "[WIDTH]", llformat("%d", mImage->getFullWidth()));
-	childSetTextArg("dimensions", "[HEIGHT]", llformat("%d", mImage->getFullHeight()));
+	getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]", llformat("%d", mImage->getFullWidth()));
+	getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight()));
 
 	
-	LLRect dim_rect;
-	childGetRect("dimensions", dim_rect);
+	LLRect dim_rect(getChildView("dimensions")->getRect());
 
 	S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE;
 
@@ -485,9 +483,8 @@ void LLPreviewTexture::updateDimensions()
 
 	// Hide the aspect ratio label if the window is too narrow
 	// Assumes the label should be to the right of the dimensions
-	LLRect aspect_label_rect;
-	childGetRect("aspect_ratio", aspect_label_rect);
-	childSetVisible("aspect_ratio", dim_rect.mRight < aspect_label_rect.mLeft);
+	LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect());
+	getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft);
 }
 
 
@@ -544,7 +541,7 @@ void LLPreviewTexture::loadAsset()
 	mAssetStatus = PREVIEW_ASSET_LOADING;
 	mUpdateDimensions = TRUE;
 	updateDimensions();
-	childSetEnabled("save_tex_btn", canSaveAs());
+	getChildView("save_tex_btn")->setEnabled(canSaveAs());
 }
 
 LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus()
diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp
index 27f871c017a09b941ea5bff7befec33abdb18d1e..d63a48647d558fad659ef2b058ff50f5e8cb3502 100644
--- a/indra/newview/llremoteparcelrequest.cpp
+++ b/indra/newview/llremoteparcelrequest.cpp
@@ -30,7 +30,6 @@
 
 #include "message.h"
 
-#include "llpanelplace.h"
 #include "llpanel.h"
 #include "llhttpclient.h"
 #include "llsdserialize.h"
diff --git a/indra/newview/llsaveoutfitcombobtn.cpp b/indra/newview/llsaveoutfitcombobtn.cpp
index bb084dc94d53c449e2d826c926763e146d9bb9ea..cbad85cfd3f794a23a38e7a5101f2f8b2f32bd46 100644
--- a/indra/newview/llsaveoutfitcombobtn.cpp
+++ b/indra/newview/llsaveoutfitcombobtn.cpp
@@ -88,5 +88,5 @@ void LLSaveOutfitComboBtn::setMenuItemEnabled(const std::string& item, bool enab
 
 void LLSaveOutfitComboBtn::setSaveBtnEnabled(bool enabled)
 {
-	mParent->childSetEnabled(SAVE_BTN, enabled);
+	mParent->getChildView(SAVE_BTN)->setEnabled(enabled);
 }
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 00afb00ddc90d5d06f44514c3e6a1d930bd240a4..2334f0cde5544ad7592c73acaab1bd6f56974cd3 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -26,6 +26,7 @@
 
 #include "llviewerprecompiledheaders.h"
 #include "llscriptfloater.h"
+#include "llagentcamera.h"
 
 #include "llbottomtray.h"
 #include "llchannelmanager.h"
@@ -65,6 +66,7 @@ LLScriptFloater::LLScriptFloater(const LLSD& key)
 {
 	setMouseDownCallback(boost::bind(&LLScriptFloater::onMouseDown, this));
 	setOverlapsScreenChannel(true);
+	mIsDockedStateForcedCallback = boost::bind(&LLAgentCamera::cameraMouselook, &gAgentCamera);
 }
 
 bool LLScriptFloater::toggle(const LLUUID& notification_id)
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index 504115896a719838e2822063131864d3c85f80af..2d8c9b0feceb2d026606c4725896bdb76a48c853 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -73,17 +73,17 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param
 	
 	mHintMin->setAllowsUpdates( FALSE );
 	mHintMax->setAllowsUpdates( FALSE );
-	childSetValue("param slider", weightToPercent(param->getWeight()));
+	getChild<LLUICtrl>("param slider")->setValue(weightToPercent(param->getWeight()));
 
 	std::string display_name = LLTrans::getString(param->getDisplayName());
-	childSetLabelArg("param slider", "[DESC]", display_name);
-	childSetEnabled("param slider", mAllowModify);
+	getChild<LLUICtrl>("param slider")->setLabelArg("[DESC]", display_name);
+	getChildView("param slider")->setEnabled(mAllowModify);
 	childSetCommitCallback("param slider", LLScrollingPanelParam::onSliderMoved, this);
 
 	std::string min_name = LLTrans::getString(param->getMinDisplayName());
 	std::string max_name = LLTrans::getString(param->getMaxDisplayName());
-	childSetValue("min param text", min_name);
-	childSetValue("max param text", max_name);
+	getChild<LLUICtrl>("min param text")->setValue(min_name);
+	getChild<LLUICtrl>("max param text")->setValue(max_name);
 
 	LLButton* less = getChild<LLButton>("less");
 	if (less)
@@ -120,14 +120,14 @@ void LLScrollingPanelParam::updatePanel(BOOL allow_modify)
 		return;
 	}
 	F32 current_weight = mWearable->getVisualParamWeight( param->getID() );
-	childSetValue("param slider", weightToPercent( current_weight ) );
+	getChild<LLUICtrl>("param slider")->setValue(weightToPercent( current_weight ) );
 	mHintMin->requestUpdate( sUpdateDelayFrames++ );
 	mHintMax->requestUpdate( sUpdateDelayFrames++ );
 
 	mAllowModify = allow_modify;
-	childSetEnabled("param slider", mAllowModify);
-	childSetEnabled("less", mAllowModify);
-	childSetEnabled("more", mAllowModify);
+	getChildView("param slider")->setEnabled(mAllowModify);
+	getChildView("less")->setEnabled(mAllowModify);
+	getChildView("more")->setEnabled(mAllowModify);
 }
 
 void LLScrollingPanelParam::setVisible( BOOL visible )
@@ -153,16 +153,16 @@ void LLScrollingPanelParam::draw()
 		return;
 	}
 	
-	childSetVisible("less", mHintMin->getVisible());
-	childSetVisible("more", mHintMax->getVisible());
+	getChildView("less")->setVisible( mHintMin->getVisible());
+	getChildView("more")->setVisible( mHintMax->getVisible());
 
 	// hide borders if texture has been loaded
-	childSetVisible("left_border", !mHintMin->getVisible());
-	childSetVisible("right_border", !mHintMax->getVisible());
+	getChildView("left_border")->setVisible( !mHintMin->getVisible());
+	getChildView("right_border")->setVisible( !mHintMax->getVisible());
 
 	// Draw all the children except for the labels
-	childSetVisible( "min param text", FALSE );
-	childSetVisible( "max param text", FALSE );
+	getChildView("min param text")->setVisible( FALSE );
+	getChildView("max param text")->setVisible( FALSE );
 	LLPanel::draw();
 
 	// Draw the hints over the "less" and "more" buttons.
@@ -184,10 +184,10 @@ void LLScrollingPanelParam::draw()
 
 
 	// Draw labels on top of the buttons
-	childSetVisible( "min param text", TRUE );
+	getChildView("min param text")->setVisible( TRUE );
 	drawChild(getChild<LLView>("min param text"));
 
-	childSetVisible( "max param text", TRUE );
+	getChildView("max param text")->setVisible( TRUE );
 	drawChild(getChild<LLView>("max param text"));
 }
 
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 85ae37f9a83a20256504cdaf505865953d33fbc0..c9b60bf7f5e213920884db082ffe355ed93393ee 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -3609,7 +3609,7 @@ void LLSelectMgr::selectionSetObjectSaleInfo(const LLSaleInfo& sale_info)
 // Attachments
 //----------------------------------------------------------------------
 
-void LLSelectMgr::sendAttach(U8 attachment_point)
+void LLSelectMgr::sendAttach(U8 attachment_point, bool replace)
 {
 	LLViewerObject* attach_object = mSelectedObjects->getFirstRootObject();
 
@@ -3623,9 +3623,12 @@ void LLSelectMgr::sendAttach(U8 attachment_point)
 	if (0 == attachment_point ||
 		get_if_there(gAgentAvatarp->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL))
 	{
-
-		if (gSavedSettings.getBOOL("MultipleAttachments"))
+		if (!replace || attachment_point != 0)
+		{
+			// If we know the attachment point then we got here by clicking an
+			// "Attach to..." context menu item, so we should add, not replace.
 			attachment_point |= ATTACHMENT_ADD;
+		}
 
 		sendListToRegions(
 			"ObjectAttach",
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index fc9879b75aac41e1534b39ecc0073f158071cd04..e6db264377b16f57eeb277df9f214e0320277b9f 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -606,7 +606,7 @@ public:
 	// verification only, if it doesn't match region info then sale is
 	// canceled
 	void sendBuy(const LLUUID& buyer_id, const LLUUID& category_id, const LLSaleInfo sale_info);
-	void sendAttach(U8 attachment_point);
+	void sendAttach(U8 attachment_point, bool replace);
 	void sendDetach();
 	void sendDropAttachment();
 	void sendLink();
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index fe7950c058128d4ed7eb273e419e85cd9de5daa0..7206e4fcaf936b81365ce21689552b1c68a381ce 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -468,7 +468,7 @@ void LLSidepanelAppearance::fetchInventory()
 			{
 				LLViewerObject* attached_object = (*attachment_iter);
 				if (!attached_object) continue;
-				const LLUUID& item_id = attached_object->getItemID();
+				const LLUUID& item_id = attached_object->getAttachmentItemID();
 				if (item_id.isNull()) continue;
 				ids.push_back(item_id);
 			}
@@ -496,8 +496,8 @@ void LLSidepanelAppearance::inventoryFetched()
 
 void LLSidepanelAppearance::setWearablesLoading(bool val)
 {
-	childSetVisible("wearables_loading_indicator", val);
-	childSetVisible("edit_outfit_btn", !val);
+	getChildView("wearables_loading_indicator")->setVisible( val);
+	getChildView("edit_outfit_btn")->setVisible( !val);
 
 	if (!val)
 	{
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index d98398c48459224fc01b06e66187e10bbb821084..731079fb5d6fc6a45c2e503e706903111f273ce9 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -104,9 +104,9 @@ BOOL LLSidepanelItemInfo::postBuild()
 {
 	LLSidepanelInventorySubpanel::postBuild();
 
-	childSetPrevalidate("LabelItemName",&LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("LabelItemName")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 	getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this));
-	childSetPrevalidate("LabelItemDesc",&LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("LabelItemDesc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 	getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this));
 	// Creator information
 	getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this));
@@ -187,7 +187,7 @@ void LLSidepanelItemInfo::refresh()
 
 		for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
 		{
-			childSetEnabled(no_item_names[t],false);
+			getChildView(no_item_names[t])->setEnabled(false);
 		}
 		
 		const std::string hide_names[]={
@@ -199,7 +199,7 @@ void LLSidepanelItemInfo::refresh()
 		};
 		for(size_t t=0; t<LL_ARRAY_SIZE(hide_names); ++t)
 		{
-			childSetVisible(hide_names[t],false);
+			getChildView(hide_names[t])->setVisible(false);
 		}
 	}
 
@@ -211,7 +211,7 @@ void LLSidepanelItemInfo::refresh()
 		};
 		for(size_t t=0; t<LL_ARRAY_SIZE(no_edit_mode_names); ++t)
 		{
-			childSetEnabled(no_edit_mode_names[t],false);
+			getChildView(no_edit_mode_names[t])->setEnabled(false);
 		}
 	}
 
@@ -259,13 +259,13 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 											   GP_OBJECT_MANIPULATE)
 		&& is_obj_modify && is_complete && not_in_trash;
 
-	childSetEnabled("LabelItemNameTitle",TRUE);
-	childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
-	childSetText("LabelItemName",item->getName());
-	childSetEnabled("LabelItemDescTitle",TRUE);
-	childSetEnabled("LabelItemDesc",is_modifiable);
-	childSetVisible("IconLocked",!is_modifiable);
-	childSetText("LabelItemDesc",item->getDescription());
+	getChildView("LabelItemNameTitle")->setEnabled(TRUE);
+	getChildView("LabelItemName")->setEnabled(is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
+	getChild<LLUICtrl>("LabelItemName")->setValue(item->getName());
+	getChildView("LabelItemDescTitle")->setEnabled(TRUE);
+	getChildView("LabelItemDesc")->setEnabled(is_modifiable);
+	getChildView("IconLocked")->setVisible(!is_modifiable);
+	getChild<LLUICtrl>("LabelItemDesc")->setValue(item->getDescription());
 
 	//////////////////
 	// CREATOR NAME //
@@ -277,17 +277,17 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	{
 		std::string name;
 		gCacheName->getFullName(item->getCreatorUUID(), name);
-		childSetEnabled("BtnCreator",TRUE);
-		childSetEnabled("LabelCreatorTitle",TRUE);
-		childSetEnabled("LabelCreatorName",TRUE);
-		childSetText("LabelCreatorName",name);
+		getChildView("BtnCreator")->setEnabled(TRUE);
+		getChildView("LabelCreatorTitle")->setEnabled(TRUE);
+		getChildView("LabelCreatorName")->setEnabled(TRUE);
+		getChild<LLUICtrl>("LabelCreatorName")->setValue(name);
 	}
 	else
 	{
-		childSetEnabled("BtnCreator",FALSE);
-		childSetEnabled("LabelCreatorTitle",FALSE);
-		childSetEnabled("LabelCreatorName",FALSE);
-		childSetText("LabelCreatorName",getString("unknown"));
+		getChildView("BtnCreator")->setEnabled(FALSE);
+		getChildView("LabelCreatorTitle")->setEnabled(FALSE);
+		getChildView("LabelCreatorName")->setEnabled(FALSE);
+		getChild<LLUICtrl>("LabelCreatorName")->setValue(getString("unknown"));
 	}
 
 	////////////////
@@ -304,17 +304,17 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 		{
 			gCacheName->getFullName(perm.getOwner(), name);
 		}
-		childSetEnabled("BtnOwner",TRUE);
-		childSetEnabled("LabelOwnerTitle",TRUE);
-		childSetEnabled("LabelOwnerName",TRUE);
-		childSetText("LabelOwnerName",name);
+		getChildView("BtnOwner")->setEnabled(TRUE);
+		getChildView("LabelOwnerTitle")->setEnabled(TRUE);
+		getChildView("LabelOwnerName")->setEnabled(TRUE);
+		getChild<LLUICtrl>("LabelOwnerName")->setValue(name);
 	}
 	else
 	{
-		childSetEnabled("BtnOwner",FALSE);
-		childSetEnabled("LabelOwnerTitle",FALSE);
-		childSetEnabled("LabelOwnerName",FALSE);
-		childSetText("LabelOwnerName",getString("public"));
+		getChildView("BtnOwner")->setEnabled(FALSE);
+		getChildView("LabelOwnerTitle")->setEnabled(FALSE);
+		getChildView("LabelOwnerName")->setEnabled(FALSE);
+		getChild<LLUICtrl>("LabelOwnerName")->setValue(getString("public"));
 	}
 	
 	////////////
@@ -323,11 +323,11 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 
 	if (object)
 	{
-		childSetText("origin",getString("origin_inworld"));
+		getChild<LLUICtrl>("origin")->setValue(getString("origin_inworld"));
 	}
 	else
 	{
-		childSetText("origin",getString("origin_inventory"));
+		getChild<LLUICtrl>("origin")->setValue(getString("origin_inventory"));
 	}
 
 	//////////////////
@@ -337,7 +337,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	time_t time_utc = item->getCreationDate();
 	if (0 == time_utc)
 	{
-		childSetText("LabelAcquiredDate",getString("unknown"));
+		getChild<LLUICtrl>("LabelAcquiredDate")->setValue(getString("unknown"));
 	}
 	else
 	{
@@ -345,7 +345,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 		LLSD substitution;
 		substitution["datetime"] = (S32) time_utc;
 		LLStringUtil::format (timeStr, substitution);
-		childSetText ("LabelAcquiredDate", timeStr);
+		getChild<LLUICtrl>("LabelAcquiredDate")->setValue(timeStr);
 	}
 	
 	//////////////////////////////////////
@@ -388,12 +388,12 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	{
 		for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t)
 		{
-			childSetVisible(perm_and_sale_items[t],false);
+			getChildView(perm_and_sale_items[t])->setVisible(false);
 		}
 		
 		for(size_t t=0; t<LL_ARRAY_SIZE(debug_items); ++t)
 		{
-			childSetVisible(debug_items[t],false);
+			getChildView(debug_items[t])->setVisible(false);
 		}
 		return;
 	}
@@ -401,7 +401,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	{
 		for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t)
 		{
-			childSetVisible(perm_and_sale_items[t],true);
+			getChildView(perm_and_sale_items[t])->setVisible(true);
 		}
 	}
 
@@ -410,11 +410,11 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	///////////////////////
 	if(can_agent_manipulate)
 	{
-		childSetText("OwnerLabel",getString("you_can"));
+		getChild<LLUICtrl>("OwnerLabel")->setValue(getString("you_can"));
 	}
 	else
 	{
-		childSetText("OwnerLabel",getString("owner_can"));
+		getChild<LLUICtrl>("OwnerLabel")->setValue(getString("owner_can"));
 	}
 
 	U32 base_mask		= perm.getMaskBase();
@@ -423,13 +423,13 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	U32 everyone_mask	= perm.getMaskEveryone();
 	U32 next_owner_mask	= perm.getMaskNextOwner();
 
-	childSetEnabled("OwnerLabel",TRUE);
-	childSetEnabled("CheckOwnerModify",FALSE);
-	childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY)));
-	childSetEnabled("CheckOwnerCopy",FALSE);
-	childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY)));
-	childSetEnabled("CheckOwnerTransfer",FALSE);
-	childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
+	getChildView("OwnerLabel")->setEnabled(TRUE);
+	getChildView("CheckOwnerModify")->setEnabled(FALSE);
+	getChild<LLUICtrl>("CheckOwnerModify")->setValue(LLSD((BOOL)(owner_mask & PERM_MODIFY)));
+	getChildView("CheckOwnerCopy")->setEnabled(FALSE);
+	getChild<LLUICtrl>("CheckOwnerCopy")->setValue(LLSD((BOOL)(owner_mask & PERM_COPY)));
+	getChildView("CheckOwnerTransfer")->setEnabled(FALSE);
+	getChild<LLUICtrl>("CheckOwnerTransfer")->setValue(LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
 
 	///////////////////////
 	// DEBUG PERMISSIONS //
@@ -453,39 +453,39 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 
 		perm_string = "B: ";
 		perm_string += mask_to_string(base_mask);
-		childSetText("BaseMaskDebug",perm_string);
-		childSetVisible("BaseMaskDebug",TRUE);
+		getChild<LLUICtrl>("BaseMaskDebug")->setValue(perm_string);
+		getChildView("BaseMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "O: ";
 		perm_string += mask_to_string(owner_mask);
-		childSetText("OwnerMaskDebug",perm_string);
-		childSetVisible("OwnerMaskDebug",TRUE);
+		getChild<LLUICtrl>("OwnerMaskDebug")->setValue(perm_string);
+		getChildView("OwnerMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "G";
 		perm_string += overwrite_group ? "*: " : ": ";
 		perm_string += mask_to_string(group_mask);
-		childSetText("GroupMaskDebug",perm_string);
-		childSetVisible("GroupMaskDebug",TRUE);
+		getChild<LLUICtrl>("GroupMaskDebug")->setValue(perm_string);
+		getChildView("GroupMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "E";
 		perm_string += overwrite_everyone ? "*: " : ": ";
 		perm_string += mask_to_string(everyone_mask);
-		childSetText("EveryoneMaskDebug",perm_string);
-		childSetVisible("EveryoneMaskDebug",TRUE);
+		getChild<LLUICtrl>("EveryoneMaskDebug")->setValue(perm_string);
+		getChildView("EveryoneMaskDebug")->setVisible(TRUE);
 		
 		perm_string = "N";
 		perm_string += slam_perm ? "*: " : ": ";
 		perm_string += mask_to_string(next_owner_mask);
-		childSetText("NextMaskDebug",perm_string);
-		childSetVisible("NextMaskDebug",TRUE);
+		getChild<LLUICtrl>("NextMaskDebug")->setValue(perm_string);
+		getChildView("NextMaskDebug")->setVisible(TRUE);
 	}
 	else
 	{
-		childSetVisible("BaseMaskDebug",FALSE);
-		childSetVisible("OwnerMaskDebug",FALSE);
-		childSetVisible("GroupMaskDebug",FALSE);
-		childSetVisible("EveryoneMaskDebug",FALSE);
-		childSetVisible("NextMaskDebug",FALSE);
+		getChildView("BaseMaskDebug")->setVisible(FALSE);
+		getChildView("OwnerMaskDebug")->setVisible(FALSE);
+		getChildView("GroupMaskDebug")->setVisible(FALSE);
+		getChildView("EveryoneMaskDebug")->setVisible(FALSE);
+		getChildView("NextMaskDebug")->setVisible(FALSE);
 	}
 
 	/////////////
@@ -495,18 +495,18 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	// Check for ability to change values.
 	if (is_link || cannot_restrict_permissions)
 	{
-		childSetEnabled("CheckShareWithGroup",FALSE);
-		childSetEnabled("CheckEveryoneCopy",FALSE);
+		getChildView("CheckShareWithGroup")->setEnabled(FALSE);
+		getChildView("CheckEveryoneCopy")->setEnabled(FALSE);
 	}
 	else if (is_obj_modify && can_agent_manipulate)
 	{
-		childSetEnabled("CheckShareWithGroup",TRUE);
-		childSetEnabled("CheckEveryoneCopy",(owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER));
+		getChildView("CheckShareWithGroup")->setEnabled(TRUE);
+		getChildView("CheckEveryoneCopy")->setEnabled((owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER));
 	}
 	else
 	{
-		childSetEnabled("CheckShareWithGroup",FALSE);
-		childSetEnabled("CheckEveryoneCopy",FALSE);
+		getChildView("CheckShareWithGroup")->setEnabled(FALSE);
+		getChildView("CheckEveryoneCopy")->setEnabled(FALSE);
 	}
 
 	// Set values.
@@ -516,7 +516,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 
 	if (is_group_copy && is_group_modify && is_group_move)
 	{
-		childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE));
+		getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)TRUE));
 
 		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
 		if(ctl)
@@ -526,7 +526,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	}
 	else if (!is_group_copy && !is_group_modify && !is_group_move)
 	{
-		childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE));
+		getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)FALSE));
 		LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup");
 		if(ctl)
 		{
@@ -543,7 +543,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 		}
 	}
 	
-	childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY)));
+	getChild<LLUICtrl>("CheckEveryoneCopy")->setValue(LLSD((BOOL)(everyone_mask & PERM_COPY)));
 
 	///////////////
 	// SALE INFO //
@@ -555,48 +555,48 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 	if (is_obj_modify && can_agent_sell 
 		&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
 	{
-		childSetEnabled("SaleLabel",is_complete);
-		childSetEnabled("CheckPurchase",is_complete);
+		getChildView("SaleLabel")->setEnabled(is_complete);
+		getChildView("CheckPurchase")->setEnabled(is_complete);
 
-		childSetEnabled("NextOwnerLabel",TRUE);
-		childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
-		childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions);
-		childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
+		getChildView("NextOwnerLabel")->setEnabled(TRUE);
+		getChildView("CheckNextOwnerModify")->setEnabled((base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
+		getChildView("CheckNextOwnerCopy")->setEnabled((base_mask & PERM_COPY) && !cannot_restrict_permissions);
+		getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
 
-		childSetEnabled("TextPrice",is_complete && is_for_sale);
-		childSetEnabled("Edit Cost",is_complete && is_for_sale);
+		getChildView("TextPrice")->setEnabled(is_complete && is_for_sale);
+		getChildView("Edit Cost")->setEnabled(is_complete && is_for_sale);
 	}
 	else
 	{
-		childSetEnabled("SaleLabel",FALSE);
-		childSetEnabled("CheckPurchase",FALSE);
+		getChildView("SaleLabel")->setEnabled(FALSE);
+		getChildView("CheckPurchase")->setEnabled(FALSE);
 
-		childSetEnabled("NextOwnerLabel",FALSE);
-		childSetEnabled("CheckNextOwnerModify",FALSE);
-		childSetEnabled("CheckNextOwnerCopy",FALSE);
-		childSetEnabled("CheckNextOwnerTransfer",FALSE);
+		getChildView("NextOwnerLabel")->setEnabled(FALSE);
+		getChildView("CheckNextOwnerModify")->setEnabled(FALSE);
+		getChildView("CheckNextOwnerCopy")->setEnabled(FALSE);
+		getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE);
 
-		childSetEnabled("TextPrice",FALSE);
-		childSetEnabled("Edit Cost",FALSE);
+		getChildView("TextPrice")->setEnabled(FALSE);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 	}
 
 	// Set values.
-	childSetValue("CheckPurchase", is_for_sale);
-	childSetEnabled("combobox sale copy", is_for_sale);
-	childSetEnabled("Edit Cost", is_for_sale);
-	childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
-	childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));
-	childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
+	getChild<LLUICtrl>("CheckPurchase")->setValue(is_for_sale);
+	getChildView("combobox sale copy")->setEnabled(is_for_sale);
+	getChildView("Edit Cost")->setEnabled(is_for_sale);
+	getChild<LLUICtrl>("CheckNextOwnerModify")->setValue(LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
+	getChild<LLUICtrl>("CheckNextOwnerCopy")->setValue(LLSD(BOOL(next_owner_mask & PERM_COPY)));
+	getChild<LLUICtrl>("CheckNextOwnerTransfer")->setValue(LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
 
 	if (is_for_sale)
 	{
 		S32 numerical_price;
 		numerical_price = sale_info.getSalePrice();
-		childSetText("Edit Cost",llformat("%d",numerical_price));
+		getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",numerical_price));
 	}
 	else
 	{
-		childSetText("Edit Cost",llformat("%d",0));
+		getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",0));
 	}
 }
 
@@ -817,10 +817,10 @@ void LLSidepanelItemInfo::updateSaleInfo()
 	LLSaleInfo sale_info(item->getSaleInfo());
 	if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
 	{
-		childSetValue("CheckPurchase",LLSD((BOOL)FALSE));
+		getChild<LLUICtrl>("CheckPurchase")->setValue(LLSD((BOOL)FALSE));
 	}
 
-	if((BOOL)childGetValue("CheckPurchase"))
+	if((BOOL)getChild<LLUICtrl>("CheckPurchase")->getValue())
 	{
 		// turn on sale info
 		LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index c55cc12401c2ee582f9eec3a4e95e7ab9c213b47..4552088cadfee9a602d180898175bb7c8f0f705a 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -101,9 +101,9 @@ BOOL LLSidepanelTaskInfo::postBuild()
 	mLabelGroupName = getChild<LLNameBox>("Group Name Proxy");
 
 	childSetCommitCallback("Object Name",						LLSidepanelTaskInfo::onCommitName,this);
-	childSetPrevalidate("Object Name",							LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("Object Name")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe);
 	childSetCommitCallback("Object Description",				LLSidepanelTaskInfo::onCommitDesc,this);
-	childSetPrevalidate("Object Description",					LLTextValidate::validateASCIIPrintableNoPipe);
+	getChild<LLLineEditor>("Object Description")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe);
 	getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this));
 	childSetCommitCallback("checkbox share with group",			&LLSidepanelTaskInfo::onCommitGroupShare,this);
 	childSetAction("button deed",								&LLSidepanelTaskInfo::onClickDeedToGroup,this);
@@ -138,81 +138,81 @@ BOOL LLSidepanelTaskInfo::postBuild()
 
 void LLSidepanelTaskInfo::disableAll()
 {
-	childSetEnabled("perm_modify",						FALSE);
-	childSetText("perm_modify",							LLStringUtil::null);
-
-	childSetEnabled("Creator:",					   		FALSE);
-	childSetText("Creator Name",						LLStringUtil::null);
-	childSetEnabled("Creator Name",						FALSE);
-
-	childSetEnabled("Owner:",							FALSE);
-	childSetText("Owner Name",							LLStringUtil::null);
-	childSetEnabled("Owner Name",						FALSE);
-
-	childSetEnabled("Group:",							FALSE);
-	childSetText("Group Name",							LLStringUtil::null);
-	childSetEnabled("Group Name",						FALSE);
-	childSetEnabled("button set group",					FALSE);
-
-	childSetText("Object Name",							LLStringUtil::null);
-	childSetEnabled("Object Name",						FALSE);
-	childSetEnabled("Name:",						   	FALSE);
-	childSetText("Group Name",							LLStringUtil::null);
-	childSetEnabled("Group Name",						FALSE);
-	childSetEnabled("Description:",						FALSE);
-	childSetText("Object Description",					LLStringUtil::null);
-	childSetEnabled("Object Description",				FALSE);
-
-	childSetEnabled("Permissions:",						FALSE);
+	getChildView("perm_modify")->setEnabled(FALSE);
+	getChild<LLUICtrl>("perm_modify")->setValue(LLStringUtil::null);
+
+	getChildView("Creator:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Creator Name")->setValue(LLStringUtil::null);
+	getChildView("Creator Name")->setEnabled(FALSE);
+
+	getChildView("Owner:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Owner Name")->setValue(LLStringUtil::null);
+	getChildView("Owner Name")->setEnabled(FALSE);
+
+	getChildView("Group:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null);
+	getChildView("Group Name")->setEnabled(FALSE);
+	getChildView("button set group")->setEnabled(FALSE);
+
+	getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null);
+	getChildView("Object Name")->setEnabled(FALSE);
+	getChildView("Name:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null);
+	getChildView("Group Name")->setEnabled(FALSE);
+	getChildView("Description:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Object Description")->setValue(LLStringUtil::null);
+	getChildView("Object Description")->setEnabled(FALSE);
+
+	getChildView("Permissions:")->setEnabled(FALSE);
 		
-	childSetValue("checkbox share with group",			FALSE);
-	childSetEnabled("checkbox share with group",	   	FALSE);
-	childSetEnabled("button deed",						FALSE);
+	getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE);
+	getChildView("checkbox share with group")->setEnabled(FALSE);
+	getChildView("button deed")->setEnabled(FALSE);
 
-	childSetValue("checkbox allow everyone move",	   	FALSE);
-	childSetEnabled("checkbox allow everyone move",	   	FALSE);
-	childSetValue("checkbox allow everyone copy",	   	FALSE);
-	childSetEnabled("checkbox allow everyone copy",	   	FALSE);
+	getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE);
+	getChildView("checkbox allow everyone move")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE);
+	getChildView("checkbox allow everyone copy")->setEnabled(FALSE);
 
 	//Next owner can:
-	childSetEnabled("Next owner can:",					FALSE);
-	childSetValue("checkbox next owner can modify",		FALSE);
-	childSetEnabled("checkbox next owner can modify",  	FALSE);
-	childSetValue("checkbox next owner can copy",	   	FALSE);
-	childSetEnabled("checkbox next owner can copy",	   	FALSE);
-	childSetValue("checkbox next owner can transfer",  	FALSE);
-	childSetEnabled("checkbox next owner can transfer",	FALSE);
+	getChildView("Next owner can:")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE);
+	getChildView("checkbox next owner can modify")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE);
+	getChildView("checkbox next owner can copy")->setEnabled(FALSE);
+	getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE);
+	getChildView("checkbox next owner can transfer")->setEnabled(FALSE);
 
 	//checkbox for sale
-	childSetValue("checkbox for sale",					FALSE);
-	childSetEnabled("checkbox for sale",			   	FALSE);
+	getChild<LLUICtrl>("checkbox for sale")->setValue(FALSE);
+	getChildView("checkbox for sale")->setEnabled(FALSE);
 
 	//checkbox include in search
-	childSetValue("search_check",			 			FALSE);
-	childSetEnabled("search_check",			 			FALSE);
+	getChild<LLUICtrl>("search_check")->setValue(FALSE);
+	getChildView("search_check")->setEnabled(FALSE);
 		
 	LLComboBox*	combo_sale_type = getChild<LLComboBox>("sale type");
 	combo_sale_type->setValue(LLSaleInfo::FS_COPY);
 	combo_sale_type->setEnabled(FALSE);
 		
-	childSetEnabled("Cost",								FALSE);
-	childSetText("Cost",							   	getString("Cost Default"));
-	childSetText("Edit Cost",							LLStringUtil::null);
-	childSetEnabled("Edit Cost",					   	FALSE);
+	getChildView("Cost")->setEnabled(FALSE);
+	getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
+	getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
+	getChildView("Edit Cost")->setEnabled(FALSE);
 		
-	childSetEnabled("label click action",				FALSE);
+	getChildView("label click action")->setEnabled(FALSE);
 	LLComboBox*	combo_click_action = getChild<LLComboBox>("clickaction");
 	if (combo_click_action)
 	{
 		combo_click_action->setEnabled(FALSE);
 		combo_click_action->clear();
 	}
-	childSetVisible("B:",								FALSE);
-	childSetVisible("O:",								FALSE);
-	childSetVisible("G:",								FALSE);
-	childSetVisible("E:",								FALSE);
-	childSetVisible("N:",								FALSE);
-	childSetVisible("F:",								FALSE);
+	getChildView("B:")->setVisible(								FALSE);
+	getChildView("O:")->setVisible(								FALSE);
+	getChildView("G:")->setVisible(								FALSE);
+	getChildView("E:")->setVisible(								FALSE);
+	getChildView("N:")->setVisible(								FALSE);
+	getChildView("F:")->setVisible(								FALSE);
 	
 	mOpenBtn->setEnabled(FALSE);
 	mPayBtn->setEnabled(FALSE);
@@ -283,23 +283,23 @@ void LLSidepanelTaskInfo::refresh()
 	{
 		++string_index;
 	}
-	childSetEnabled("perm_modify", 			   			TRUE);
-	childSetText("perm_modify",							MODIFY_INFO_STRINGS[string_index]);
+	getChildView("perm_modify")->setEnabled(TRUE);
+	getChild<LLUICtrl>("perm_modify")->setValue(MODIFY_INFO_STRINGS[string_index]);
 
-	childSetEnabled("Permissions:", 					TRUE);
+	getChildView("Permissions:")->setEnabled(TRUE);
 	
 	// Update creator text field
-	childSetEnabled("Creator:", 						TRUE);
+	getChildView("Creator:")->setEnabled(TRUE);
 	BOOL creators_identical;
 	std::string creator_name;
 	creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID,
 																	  creator_name);
 
-	childSetText("Creator Name",						creator_name);
-	childSetEnabled("Creator Name", 					TRUE);
+	getChild<LLUICtrl>("Creator Name")->setValue(creator_name);
+	getChildView("Creator Name")->setEnabled(TRUE);
 
 	// Update owner text field
-	childSetEnabled("Owner:", 							TRUE);
+	getChildView("Owner:")->setEnabled(TRUE);
 
 	std::string owner_name;
 	const BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name);
@@ -324,12 +324,12 @@ void LLSidepanelTaskInfo::refresh()
 			}
 		}
 	}
-	childSetText("Owner Name",						owner_name);
-	childSetEnabled("Owner Name", 					TRUE);
+	getChild<LLUICtrl>("Owner Name")->setValue(owner_name);
+	getChildView("Owner Name")->setEnabled(TRUE);
 
 	// update group text field
-	childSetEnabled("Group:", 						TRUE);
-	childSetText("Group Name", 						LLStringUtil::null);
+	getChildView("Group:")->setEnabled(TRUE);
+	getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null);
 	LLUUID group_id;
 	BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
 	if (groups_identical)
@@ -350,18 +350,18 @@ void LLSidepanelTaskInfo::refresh()
 		}
 	}
 	
-	childSetEnabled("button set group", owners_identical && (mOwnerID == gAgent.getID()));
+	getChildView("button set group")->setEnabled(owners_identical && (mOwnerID == gAgent.getID()));
 
-	childSetEnabled("Name:", 						TRUE);
+	getChildView("Name:")->setEnabled(TRUE);
 	LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name");
-	childSetEnabled("Description:", 				TRUE);
+	getChildView("Description:")->setEnabled(TRUE);
 	LLLineEditor* LineEditorObjectDesc = getChild<LLLineEditor>("Object Description");
 
 	if (is_one_object)
 	{
 		if (!LineEditorObjectName->hasFocus())
 		{
-			childSetText("Object Name",nodep->mName);
+			getChild<LLUICtrl>("Object Name")->setValue(nodep->mName);
 		}
 
 		if (LineEditorObjectDesc)
@@ -374,7 +374,7 @@ void LLSidepanelTaskInfo::refresh()
 	}
 	else
 	{
-		childSetText("Object Name",					LLStringUtil::null);
+		getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null);
 		LineEditorObjectDesc->setText(LLStringUtil::null);
 	}
 
@@ -386,13 +386,13 @@ void LLSidepanelTaskInfo::refresh()
 	}
 	if (edit_name_desc)
 	{
-		childSetEnabled("Object Name", 				TRUE);
-		childSetEnabled("Object Description", 		TRUE);
+		getChildView("Object Name")->setEnabled(TRUE);
+		getChildView("Object Description")->setEnabled(TRUE);
 	}
 	else
 	{
-		childSetEnabled("Object Name", 				FALSE);
-		childSetEnabled("Object Description", 		FALSE);
+		getChildView("Object Name")->setEnabled(FALSE);
+		getChildView("Object Description")->setEnabled(FALSE);
 	}
 
 	S32 total_sale_price = 0;
@@ -414,9 +414,9 @@ void LLSidepanelTaskInfo::refresh()
 
 	if (!owners_identical)
 	{
-		childSetEnabled("Cost", 					FALSE);
-		childSetText("Edit Cost",					LLStringUtil::null);
-		childSetEnabled("Edit Cost", 				FALSE);
+		getChildView("Cost")->setEnabled(FALSE);
+		getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 	}
 	// You own these objects.
 	else if (self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))
@@ -424,11 +424,11 @@ void LLSidepanelTaskInfo::refresh()
 		// If there are multiple items for sale then set text to PRICE PER UNIT.
 		if (num_for_sale > 1)
 		{
-			childSetText("Cost",					getString("Cost Per Unit"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Per Unit"));
 		}
 		else
 		{
-			childSetText("Cost",					getString("Cost Default"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
 		}
 		
 		LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
@@ -452,35 +452,35 @@ void LLSidepanelTaskInfo::refresh()
 		// The edit fields are only enabled if you can sell this object
 		// and the sale price is not mixed.
 		BOOL enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : FALSE;
-		childSetEnabled("Cost",					enable_edit);
-		childSetEnabled("Edit Cost",			enable_edit);
+		getChildView("Cost")->setEnabled(enable_edit);
+		getChildView("Edit Cost")->setEnabled(enable_edit);
 	}
 	// Someone, not you, owns these objects.
 	else if (!public_owned)
 	{
-		childSetEnabled("Cost",					FALSE);
-		childSetEnabled("Edit Cost",			FALSE);
+		getChildView("Cost")->setEnabled(FALSE);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 		
 		// Don't show a price if none of the items are for sale.
 		if (num_for_sale)
-			childSetText("Edit Cost",			llformat("%d",total_sale_price));
+			getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",total_sale_price));
 		else
-			childSetText("Edit Cost",			LLStringUtil::null);
+			getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
 
 		// If multiple items are for sale, set text to TOTAL PRICE.
 		if (num_for_sale > 1)
-			childSetText("Cost",				getString("Cost Total"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Total"));
 		else
-			childSetText("Cost",				getString("Cost Default"));
+			getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
 	}
 	// This is a public object.
 	else
 	{
-		childSetEnabled("Cost",					FALSE);
-		childSetText("Cost",					getString("Cost Default"));
+		getChildView("Cost")->setEnabled(FALSE);
+		getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
 		
-		childSetText("Edit Cost",				LLStringUtil::null);
-		childSetEnabled("Edit Cost",			FALSE);
+		getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
+		getChildView("Edit Cost")->setEnabled(FALSE);
 	}
 
 	// Enable and disable the permissions checkboxes
@@ -522,20 +522,20 @@ void LLSidepanelTaskInfo::refresh()
 	{
 		if (valid_base_perms)
 		{
-			childSetText("B:",								"B: " + mask_to_string(base_mask_on));
-			childSetVisible("B:",							TRUE);
+			getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on));
+			getChildView("B:")->setVisible(							TRUE);
 			
-			childSetText("O:",								"O: " + mask_to_string(owner_mask_on));
-			childSetVisible("O:",							TRUE);
+			getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on));
+			getChildView("O:")->setVisible(							TRUE);
 			
-			childSetText("G:",								"G: " + mask_to_string(group_mask_on));
-			childSetVisible("G:",							TRUE);
+			getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on));
+			getChildView("G:")->setVisible(							TRUE);
 			
-			childSetText("E:",								"E: " + mask_to_string(everyone_mask_on));
-			childSetVisible("E:",							TRUE);
+			getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on));
+			getChildView("E:")->setVisible(							TRUE);
 			
-			childSetText("N:",								"N: " + mask_to_string(next_owner_mask_on));
-			childSetVisible("N:",							TRUE);
+			getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on));
+			getChildView("N:")->setVisible(							TRUE);
 		}
 
 		U32 flag_mask = 0x0;
@@ -544,17 +544,17 @@ void LLSidepanelTaskInfo::refresh()
 		if (objectp->permCopy()) 		flag_mask |= PERM_COPY;
 		if (objectp->permTransfer()) 	flag_mask |= PERM_TRANSFER;
 
-		childSetText("F:",									"F:" + mask_to_string(flag_mask));
-		childSetVisible("F:",								TRUE);
+		getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask));
+		getChildView("F:")->setVisible(								TRUE);
 	}
 	else
 	{
-		childSetVisible("B:",								FALSE);
-		childSetVisible("O:",								FALSE);
-		childSetVisible("G:",								FALSE);
-		childSetVisible("E:",								FALSE);
-		childSetVisible("N:",								FALSE);
-		childSetVisible("F:",								FALSE);
+		getChildView("B:")->setVisible(								FALSE);
+		getChildView("O:")->setVisible(								FALSE);
+		getChildView("G:")->setVisible(								FALSE);
+		getChildView("E:")->setVisible(								FALSE);
+		getChildView("N:")->setVisible(								FALSE);
+		getChildView("F:")->setVisible(								FALSE);
 	}
 
 	BOOL has_change_perm_ability = FALSE;
@@ -574,65 +574,65 @@ void LLSidepanelTaskInfo::refresh()
 	if (!has_change_perm_ability && !has_change_sale_ability && !root_selected)
 	{
 		// ...must select root to choose permissions
-		childSetValue("perm_modify", 						getString("text modify warning"));
+		getChild<LLUICtrl>("perm_modify")->setValue(getString("text modify warning"));
 	}
 
 	if (has_change_perm_ability)
 	{
-		childSetEnabled("checkbox share with group",		TRUE);
-		childSetEnabled("checkbox allow everyone move",		owner_mask_on & PERM_MOVE);
-		childSetEnabled("checkbox allow everyone copy",		owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER);
+		getChildView("checkbox share with group")->setEnabled(TRUE);
+		getChildView("checkbox allow everyone move")->setEnabled(owner_mask_on & PERM_MOVE);
+		getChildView("checkbox allow everyone copy")->setEnabled(owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER);
 	}
 	else
 	{
-		childSetEnabled("checkbox share with group", 		FALSE);
-		childSetEnabled("checkbox allow everyone move", 	FALSE);
-		childSetEnabled("checkbox allow everyone copy", 	FALSE);
+		getChildView("checkbox share with group")->setEnabled(FALSE);
+		getChildView("checkbox allow everyone move")->setEnabled(FALSE);
+		getChildView("checkbox allow everyone copy")->setEnabled(FALSE);
 	}
 
 	if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER))
 	{
-		childSetEnabled("checkbox for sale", 				can_transfer || (!can_transfer && num_for_sale));
+		getChildView("checkbox for sale")->setEnabled(can_transfer || (!can_transfer && num_for_sale));
 		// Set the checkbox to tentative if the prices of each object selected
 		// are not the same.
-		childSetTentative("checkbox for sale", 				is_for_sale_mixed);
-		childSetEnabled("sale type", 						num_for_sale && can_transfer && !is_sale_price_mixed);
+		getChild<LLUICtrl>("checkbox for sale")->setTentative( 				is_for_sale_mixed);
+		getChildView("sale type")->setEnabled(num_for_sale && can_transfer && !is_sale_price_mixed);
 
-		childSetEnabled("Next owner can:", 					TRUE);
-		childSetEnabled("checkbox next owner can modify", 	base_mask_on & PERM_MODIFY);
-		childSetEnabled("checkbox next owner can copy", 	base_mask_on & PERM_COPY);
-		childSetEnabled("checkbox next owner can transfer", next_owner_mask_on & PERM_COPY);
+		getChildView("Next owner can:")->setEnabled(TRUE);
+		getChildView("checkbox next owner can modify")->setEnabled(base_mask_on & PERM_MODIFY);
+		getChildView("checkbox next owner can copy")->setEnabled(base_mask_on & PERM_COPY);
+		getChildView("checkbox next owner can transfer")->setEnabled(next_owner_mask_on & PERM_COPY);
 	}
 	else 
 	{
-		childSetEnabled("checkbox for sale",				FALSE);
-		childSetEnabled("sale type",						FALSE);
+		getChildView("checkbox for sale")->setEnabled(FALSE);
+		getChildView("sale type")->setEnabled(FALSE);
 
-		childSetEnabled("Next owner can:",					FALSE);
-		childSetEnabled("checkbox next owner can modify",	FALSE);
-		childSetEnabled("checkbox next owner can copy",		FALSE);
-		childSetEnabled("checkbox next owner can transfer",	FALSE);
+		getChildView("Next owner can:")->setEnabled(FALSE);
+		getChildView("checkbox next owner can modify")->setEnabled(FALSE);
+		getChildView("checkbox next owner can copy")->setEnabled(FALSE);
+		getChildView("checkbox next owner can transfer")->setEnabled(FALSE);
 	}
 
 	if (valid_group_perms)
 	{
 		if ((group_mask_on & PERM_COPY) && (group_mask_on & PERM_MODIFY) && (group_mask_on & PERM_MOVE))
 		{
-			childSetValue("checkbox share with group",		TRUE);
-			childSetTentative("checkbox share with group",	FALSE);
-			childSetEnabled("button deed",					gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+			getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox share with group")->setTentative(	FALSE);
+			getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
 		}
 		else if ((group_mask_off & PERM_COPY) && (group_mask_off & PERM_MODIFY) && (group_mask_off & PERM_MOVE))
 		{
-			childSetValue("checkbox share with group",		FALSE);
-			childSetTentative("checkbox share with group",	FALSE);
-			childSetEnabled("button deed",					FALSE);
+			getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox share with group")->setTentative(	FALSE);
+			getChildView("button deed")->setEnabled(FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox share with group",		TRUE);
-			childSetTentative("checkbox share with group",	TRUE);
-			childSetEnabled("button deed",					gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
+			getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox share with group")->setTentative(	TRUE);
+			getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer);
 		}
 	}			
 
@@ -641,35 +641,35 @@ void LLSidepanelTaskInfo::refresh()
 		// Move
 		if (everyone_mask_on & PERM_MOVE)
 		{
-			childSetValue("checkbox allow everyone move",		TRUE);
-			childSetTentative("checkbox allow everyone move", 	FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( 	FALSE);
 		}
 		else if (everyone_mask_off & PERM_MOVE)
 		{
-			childSetValue("checkbox allow everyone move",		FALSE);
-			childSetTentative("checkbox allow everyone move", 	FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( 	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox allow everyone move",		TRUE);
-			childSetTentative("checkbox allow everyone move", 	TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( 	TRUE);
 		}
 
 		// Copy == everyone can't copy
 		if (everyone_mask_on & PERM_COPY)
 		{
-			childSetValue("checkbox allow everyone copy",		TRUE);
-			childSetTentative("checkbox allow everyone copy", 	!can_copy || !can_transfer);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( 	!can_copy || !can_transfer);
 		}
 		else if (everyone_mask_off & PERM_COPY)
 		{
-			childSetValue("checkbox allow everyone copy",		FALSE);
-			childSetTentative("checkbox allow everyone copy",	FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative(	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox allow everyone copy",		TRUE);
-			childSetTentative("checkbox allow everyone copy",	TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative(	TRUE);
 		}
 	}
 
@@ -678,52 +678,52 @@ void LLSidepanelTaskInfo::refresh()
 		// Modify == next owner canot modify
 		if (next_owner_mask_on & PERM_MODIFY)
 		{
-			childSetValue("checkbox next owner can modify",		TRUE);
-			childSetTentative("checkbox next owner can modify",	FALSE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setTentative(	FALSE);
 		}
 		else if (next_owner_mask_off & PERM_MODIFY)
 		{
-			childSetValue("checkbox next owner can modify",		FALSE);
-			childSetTentative("checkbox next owner can modify",	FALSE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setTentative(	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox next owner can modify",		TRUE);
-			childSetTentative("checkbox next owner can modify",	TRUE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can modify")->setTentative(	TRUE);
 		}
 
 		// Copy == next owner cannot copy
 		if (next_owner_mask_on & PERM_COPY)
 		{			
-			childSetValue("checkbox next owner can copy",		TRUE);
-			childSetTentative("checkbox next owner can copy",	!can_copy);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setTentative(	!can_copy);
 		}
 		else if (next_owner_mask_off & PERM_COPY)
 		{
-			childSetValue("checkbox next owner can copy",		FALSE);
-			childSetTentative("checkbox next owner can copy",	FALSE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setTentative(	FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox next owner can copy",		TRUE);
-			childSetTentative("checkbox next owner can copy",	TRUE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can copy")->setTentative(	TRUE);
 		}
 
 		// Transfer == next owner cannot transfer
 		if (next_owner_mask_on & PERM_TRANSFER)
 		{
-			childSetValue("checkbox next owner can transfer",	TRUE);
-			childSetTentative("checkbox next owner can transfer", !can_transfer);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( !can_transfer);
 		}
 		else if (next_owner_mask_off & PERM_TRANSFER)
 		{
-			childSetValue("checkbox next owner can transfer",	FALSE);
-			childSetTentative("checkbox next owner can transfer", FALSE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( FALSE);
 		}
 		else
 		{
-			childSetValue("checkbox next owner can transfer",	TRUE);
-			childSetTentative("checkbox next owner can transfer", TRUE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE);
+			getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( TRUE);
 		}
 	}
 
@@ -745,7 +745,7 @@ void LLSidepanelTaskInfo::refresh()
 		combo_sale_type->setTentative(				TRUE); // unfortunately this doesn't do anything at the moment.
 	}
 
-	childSetValue("checkbox for sale", (num_for_sale != 0));
+	getChild<LLUICtrl>("checkbox for sale")->setValue((num_for_sale != 0));
 
 	// HACK: There are some old objects in world that are set for sale,
 	// but are no-transfer.  We need to let users turn for-sale off, but only
@@ -755,7 +755,7 @@ void LLSidepanelTaskInfo::refresh()
 	{
 		if (num_for_sale && has_change_sale_ability)
 		{
-			childSetEnabled("checkbox for sale", true);
+			getChildView("checkbox for sale")->setEnabled(true);
 		}
 	}
 	
@@ -763,9 +763,9 @@ void LLSidepanelTaskInfo::refresh()
 	const BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
 	bool include_in_search;
 	const BOOL all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search);
-	childSetEnabled("search_check", 				has_change_sale_ability && all_volume);
-	childSetValue("search_check", 					include_in_search);
-	childSetTentative("search_check", 				!all_include_in_search);
+	getChildView("search_check")->setEnabled(has_change_sale_ability && all_volume);
+	getChild<LLUICtrl>("search_check")->setValue(include_in_search);
+	getChild<LLUICtrl>("search_check")->setTentative( 				!all_include_in_search);
 
 	// Click action (touch, sit, buy)
 	U8 click_action = 0;
@@ -777,8 +777,8 @@ void LLSidepanelTaskInfo::refresh()
 			ComboClickAction->setCurrentByIndex((S32)click_action);
 		}
 	}
-	childSetEnabled("label click action",			is_perm_modify && all_volume);
-	childSetEnabled("clickaction",					is_perm_modify && all_volume);
+	getChildView("label click action")->setEnabled(is_perm_modify && all_volume);
+	getChildView("clickaction")->setEnabled(is_perm_modify && all_volume);
 
 	if (!getIsEditing())
 	{
@@ -804,7 +804,7 @@ void LLSidepanelTaskInfo::refresh()
 			};
 		for (size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
 		{
-			childSetEnabled(no_item_names[t],		FALSE);
+			getChildView(no_item_names[t])->setEnabled(	FALSE);
 		}
 	}
 	updateVerbs();
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 317b597a111b101d1e6b43f28679ab6e87051dc4..fb984a7c6289820a12a9fa3c143a670e1ec03f96 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -1508,6 +1508,7 @@ void LLSpatialGroup::checkOcclusion()
 {
 	if (LLPipeline::sUseOcclusion > 1)
 	{
+		LLFastTimer t(FTM_OCCLUSION_READBACK);
 		LLSpatialGroup* parent = getParent();
 		if (parent && parent->isOcclusionState(LLSpatialGroup::OCCLUDED))
 		{	//if the parent has been marked as occluded, the child is implicitly occluded
@@ -1515,7 +1516,6 @@ void LLSpatialGroup::checkOcclusion()
 		}
 		else if (isOcclusionState(QUERY_PENDING))
 		{	//otherwise, if a query is pending, read it back
-			LLFastTimer t(FTM_OCCLUSION_READBACK);
 			GLuint res = 1;
 			if (!isOcclusionState(DISCARD_QUERY) && mOcclusionQuery[LLViewerCamera::sCurCameraID])
 			{
@@ -1919,11 +1919,8 @@ public:
 			return;
 		}
 		
-		if (mRes == 2)
-		{
-			//fully in, don't traverse further (won't effect extents
-		}
-		else if (mRes && group->isState(LLSpatialGroup::SKIP_FRUSTUM_CHECK))
+		if ((mRes && group->isState(LLSpatialGroup::SKIP_FRUSTUM_CHECK)) ||
+			mRes == 2)
 		{	//don't need to do frustum check
 			LLSpatialGroup::OctreeTraveler::traverse(n);
 		}
@@ -3418,11 +3415,23 @@ LLCullResult::LLCullResult()
 void LLCullResult::clear()
 {
 	mVisibleGroupsSize = 0;
+	mVisibleGroupsEnd = mVisibleGroups.begin();
+
 	mAlphaGroupsSize = 0;
+	mAlphaGroupsEnd = mAlphaGroups.begin();
+
 	mOcclusionGroupsSize = 0;
+	mOcclusionGroupsEnd = mOcclusionGroups.begin();
+
 	mDrawableGroupsSize = 0;
+	mDrawableGroupsEnd = mDrawableGroups.begin();
+
 	mVisibleListSize = 0;
+	mVisibleListEnd = mVisibleList.begin();
+
 	mVisibleBridgeSize = 0;
+	mVisibleBridgeEnd = mVisibleBridge.begin();
+
 
 	for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++)
 	{
@@ -3431,6 +3440,7 @@ void LLCullResult::clear()
 			mRenderMap[i][j] = 0;
 		}
 		mRenderMapSize[i] = 0;
+		mRenderMapEnd[i] = mRenderMap[i].begin();
 	}
 }
 
@@ -3441,7 +3451,7 @@ LLCullResult::sg_list_t::iterator LLCullResult::beginVisibleGroups()
 
 LLCullResult::sg_list_t::iterator LLCullResult::endVisibleGroups()
 {
-	return mVisibleGroups.begin() + mVisibleGroupsSize;
+	return mVisibleGroupsEnd;
 }
 
 LLCullResult::sg_list_t::iterator LLCullResult::beginAlphaGroups()
@@ -3451,7 +3461,7 @@ LLCullResult::sg_list_t::iterator LLCullResult::beginAlphaGroups()
 
 LLCullResult::sg_list_t::iterator LLCullResult::endAlphaGroups()
 {
-	return mAlphaGroups.begin() + mAlphaGroupsSize;
+	return mAlphaGroupsEnd;
 }
 
 LLCullResult::sg_list_t::iterator LLCullResult::beginOcclusionGroups()
@@ -3461,7 +3471,7 @@ LLCullResult::sg_list_t::iterator LLCullResult::beginOcclusionGroups()
 
 LLCullResult::sg_list_t::iterator LLCullResult::endOcclusionGroups()
 {
-	return mOcclusionGroups.begin() + mOcclusionGroupsSize;
+	return mOcclusionGroupsEnd;
 }
 
 LLCullResult::sg_list_t::iterator LLCullResult::beginDrawableGroups()
@@ -3471,7 +3481,7 @@ LLCullResult::sg_list_t::iterator LLCullResult::beginDrawableGroups()
 
 LLCullResult::sg_list_t::iterator LLCullResult::endDrawableGroups()
 {
-	return mDrawableGroups.begin() + mDrawableGroupsSize;
+	return mDrawableGroupsEnd;
 }
 
 LLCullResult::drawable_list_t::iterator LLCullResult::beginVisibleList()
@@ -3481,7 +3491,7 @@ LLCullResult::drawable_list_t::iterator LLCullResult::beginVisibleList()
 
 LLCullResult::drawable_list_t::iterator LLCullResult::endVisibleList()
 {
-	return mVisibleList.begin() + mVisibleListSize;
+	return mVisibleListEnd;
 }
 
 LLCullResult::bridge_list_t::iterator LLCullResult::beginVisibleBridge()
@@ -3491,7 +3501,7 @@ LLCullResult::bridge_list_t::iterator LLCullResult::beginVisibleBridge()
 
 LLCullResult::bridge_list_t::iterator LLCullResult::endVisibleBridge()
 {
-	return mVisibleBridge.begin() + mVisibleBridgeSize;
+	return mVisibleBridgeEnd;
 }
 
 LLCullResult::drawinfo_list_t::iterator LLCullResult::beginRenderMap(U32 type)
@@ -3501,7 +3511,7 @@ LLCullResult::drawinfo_list_t::iterator LLCullResult::beginRenderMap(U32 type)
 
 LLCullResult::drawinfo_list_t::iterator LLCullResult::endRenderMap(U32 type)
 {
-	return mRenderMap[type].begin() + mRenderMapSize[type];
+	return mRenderMapEnd[type];
 }
 
 void LLCullResult::pushVisibleGroup(LLSpatialGroup* group)
@@ -3515,6 +3525,7 @@ void LLCullResult::pushVisibleGroup(LLSpatialGroup* group)
 		mVisibleGroups.push_back(group);
 	}
 	++mVisibleGroupsSize;
+	mVisibleGroupsEnd = mVisibleGroups.begin()+mVisibleGroupsSize;
 }
 
 void LLCullResult::pushAlphaGroup(LLSpatialGroup* group)
@@ -3528,6 +3539,7 @@ void LLCullResult::pushAlphaGroup(LLSpatialGroup* group)
 		mAlphaGroups.push_back(group);
 	}
 	++mAlphaGroupsSize;
+	mAlphaGroupsEnd = mAlphaGroups.begin()+mAlphaGroupsSize;
 }
 
 void LLCullResult::pushOcclusionGroup(LLSpatialGroup* group)
@@ -3541,6 +3553,7 @@ void LLCullResult::pushOcclusionGroup(LLSpatialGroup* group)
 		mOcclusionGroups.push_back(group);
 	}
 	++mOcclusionGroupsSize;
+	mOcclusionGroupsEnd = mOcclusionGroups.begin()+mOcclusionGroupsSize;
 }
 
 void LLCullResult::pushDrawableGroup(LLSpatialGroup* group)
@@ -3554,6 +3567,7 @@ void LLCullResult::pushDrawableGroup(LLSpatialGroup* group)
 		mDrawableGroups.push_back(group);
 	}
 	++mDrawableGroupsSize;
+	mDrawableGroupsEnd = mDrawableGroups.begin()+mDrawableGroupsSize;
 }
 
 void LLCullResult::pushDrawable(LLDrawable* drawable)
@@ -3567,6 +3581,7 @@ void LLCullResult::pushDrawable(LLDrawable* drawable)
 		mVisibleList.push_back(drawable);
 	}
 	++mVisibleListSize;
+	mVisibleListEnd = mVisibleList.begin()+mVisibleListSize;
 }
 
 void LLCullResult::pushBridge(LLSpatialBridge* bridge)
@@ -3580,6 +3595,7 @@ void LLCullResult::pushBridge(LLSpatialBridge* bridge)
 		mVisibleBridge.push_back(bridge);
 	}
 	++mVisibleBridgeSize;
+	mVisibleBridgeEnd = mVisibleBridge.begin()+mVisibleBridgeSize;
 }
 
 void LLCullResult::pushDrawInfo(U32 type, LLDrawInfo* draw_info)
@@ -3593,6 +3609,7 @@ void LLCullResult::pushDrawInfo(U32 type, LLDrawInfo* draw_info)
 		mRenderMap[type].push_back(draw_info);
 	}
 	++mRenderMapSize[type];
+	mRenderMapEnd[type] = mRenderMap[type].begin() + mRenderMapSize[type];
 }
 
 
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index cc634b784c70e626c8ac6fca897c942c954d2ec7..1a25f3f85dee6e17f9dfbc0595fcef8b4fb3affd 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -338,11 +338,11 @@ public:
 	F32 mBuilt;
 	OctreeNode* mOctreeNode;
 	LLSpatialPartition* mSpatialPartition;
-	LLVector3 mBounds[2];
-	LLVector3 mExtents[2];
+	LLVector3 mBounds[2]; // bounding box (center, size) of this node and all its children (tight fit to objects)
+	LLVector3 mExtents[2]; // extents (min, max) of this node and all its children
 	
-	LLVector3 mObjectExtents[2];
-	LLVector3 mObjectBounds[2];
+	LLVector3 mObjectExtents[2]; // extents (min, max) of objects in this node
+	LLVector3 mObjectBounds[2]; // bounding box (center, size) of objects in this node
 
 	LLPointer<LLVertexBuffer> mVertexBuffer;
 	F32*					mOcclusionVerts;
@@ -526,12 +526,19 @@ private:
 	U32					mRenderMapSize[LLRenderPass::NUM_RENDER_TYPES];
 
 	sg_list_t			mVisibleGroups;
+	sg_list_t::iterator mVisibleGroupsEnd;
 	sg_list_t			mAlphaGroups;
+	sg_list_t::iterator mAlphaGroupsEnd;
 	sg_list_t			mOcclusionGroups;
+	sg_list_t::iterator	mOcclusionGroupsEnd;
 	sg_list_t			mDrawableGroups;
+	sg_list_t::iterator mDrawableGroupsEnd;
 	drawable_list_t		mVisibleList;
+	drawable_list_t::iterator mVisibleListEnd;
 	bridge_list_t		mVisibleBridge;
+	bridge_list_t::iterator mVisibleBridgeEnd;
 	drawinfo_list_t		mRenderMap[LLRenderPass::NUM_RENDER_TYPES];
+	drawinfo_list_t::iterator mRenderMapEnd[LLRenderPass::NUM_RENDER_TYPES];
 };
 
 
@@ -598,14 +605,13 @@ public:
 //class for wrangling geometry out of volumes (implemented in LLVOVolume.cpp)
 class LLVolumeGeometryManager: public LLGeometryManager
 {
-public:
+ public:
 	virtual ~LLVolumeGeometryManager() { }
 	virtual void rebuildGeom(LLSpatialGroup* group);
 	virtual void rebuildMesh(LLSpatialGroup* group);
 	virtual void getGeometry(LLSpatialGroup* group);
 	void genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort = FALSE);
 	void registerFace(LLSpatialGroup* group, LLFace* facep, U32 type);
-
 };
 
 //spatial partition that uses volume geometry manager (implemented in LLVOVolume.cpp)
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 1c418feabd924fbe9d6298a79394a6da88fec081..196ed5e0bbdd6022b862accaf46acb709c4c0653 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -68,7 +68,10 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy
 
 void LLSpeaker::lookupName()
 {
-	gCacheName->get(mID, FALSE, boost::bind(&LLSpeaker::onAvatarNameLookup, this, _1, _2, _3, _4));
+	if (mDisplayName.empty())
+	{
+		gCacheName->get(mID, FALSE, boost::bind(&LLSpeaker::onAvatarNameLookup, this, _1, _2, _3, _4));
+	}
 }
 
 void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index e6f93d34ac82ebc7e92b8be149e41698724b78b7..975d1f9f32cf77eebfca8057baf5fde16890fdff 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -112,7 +112,6 @@
 #include "llinventorybridge.h"
 #include "llinventorymodel.h"
 #include "llinventorymodelbackgroundfetch.h"
-#include "llfriendcard.h"
 #include "llkeyboard.h"
 #include "llloginhandler.h"			// gLoginHandler, SLURL support
 #include "lllogininstance.h" // Host the login module.
@@ -122,7 +121,6 @@
 #include "llfloaterevent.h"
 #include "llpanelclassified.h"
 #include "llpanelpick.h"
-#include "llpanelplace.h"
 #include "llpanelgrouplandmoney.h"
 #include "llpanelgroupnotices.h"
 #include "llpreview.h"
@@ -1640,12 +1638,6 @@ bool idle_startup()
 		//all categories loaded. lets create "My Favorites" category
 		gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true);
 
-		// Checks whether "Friends" and "Friends/All" folders exist in "Calling Cards" folder,
-		// fetches their contents if needed and synchronizes it with buddies list.
-		// If the folders are not found they are created.
-		LLFriendCardsManager::instance().syncFriendCardsFolders();
-
-
 		// set up callbacks
 		llinfos << "Registering Callbacks" << llendl;
 		LLMessageSystem* msg = gMessageSystem;
@@ -2927,9 +2919,8 @@ bool process_login_success_response()
 	text = response["agent_region_access"].asString();
 	if (!text.empty())
 	{
-		U32 preferredMaturity =
-			llmin((U32)LLAgent::convertTextToMaturity(text[0]),
-			      gSavedSettings.getU32("PreferredMaturity"));
+		U32 preferredMaturity = (U32)LLAgent::convertTextToMaturity(text[0]);
+
 		gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
 	}
 	// During the AO transition, this flag will be true. Then the flag will
@@ -3142,6 +3133,13 @@ bool process_login_success_response()
 		}
 	}
 
+	// Set the location of the snapshot sharing config endpoint
+	std::string snapshot_config_url = response["snapshot_config_url"];
+	if(!snapshot_config_url.empty())
+	{
+		gSavedSettings.setString("SnapshotConfigURL", snapshot_config_url);
+	}
+
 	// Start the process of fetching the OpenID session cookie for this user login
 	std::string openid_url = response["openid_url"];
 	if(!openid_url.empty())
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index af011d8599d7849b34b890b47f80552d5f74c567..b622e9897126979517a9da81c10e96d9ecde42f7 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -105,8 +105,6 @@ const F32 ICON_TIMER_EXPIRY		= 3.f; // How long the balance and health icons sho
 const F32 ICON_FLASH_FREQUENCY	= 2.f;
 const S32 TEXT_HEIGHT = 18;
 
-static void onClickHealth(void*);
-static void onClickScriptDebug(void*);
 static void onClickVolume(void*);
 
 std::vector<std::string> LLStatusBar::sDays;
@@ -189,9 +187,6 @@ BOOL LLStatusBar::postBuild()
 
 	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2));
 
-	childSetAction("scriptout", onClickScriptDebug, this);
-	childSetAction("health", onClickHealth, this);
-
 	// Adding Net Stat Graph
 	S32 x = getRect().getWidth() - 2;
 	S32 y = 0;
@@ -229,7 +224,7 @@ BOOL LLStatusBar::postBuild()
 	mSGPacketLoss->mPerSec = FALSE;
 	addChild(mSGPacketLoss);
 
-	childSetActionTextbox("stat_btn", onClickStatGraph);
+	getChild<LLTextBox>("stat_btn")->setClickedCallback(onClickStatGraph);
 
 	mPanelVolumePulldown = new LLPanelVolumePulldown();
 	addChild(mPanelVolumePulldown);
@@ -241,14 +236,17 @@ BOOL LLStatusBar::postBuild()
 	mPanelNearByMedia->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
 	mPanelNearByMedia->setVisible(FALSE);
 
+	mScriptOut = getChildView("scriptout");
+
 	return TRUE;
 }
 
 // Per-frame updates of visibility
 void LLStatusBar::refresh()
 {
-	bool net_stats_visible = gSavedSettings.getBOOL("ShowNetStats");
-	
+	static LLCachedControl<bool> show_net_stats(gSavedSettings, "ShowNetStats", false);
+	bool net_stats_visible = show_net_stats;
+
 	if (net_stats_visible)
 	{
 		// Adding Net Stat Meter back in
@@ -260,26 +258,30 @@ void LLStatusBar::refresh()
 		mSGBandwidth->setThreshold(2, bwtotal);
 	}
 	
-	// Get current UTC time, adjusted for the user's clock
-	// being off.
-	time_t utc_time;
-	utc_time = time_corrected();
-
-	std::string timeStr = getString("time");
-	LLSD substitution;
-	substitution["datetime"] = (S32) utc_time;
-	LLStringUtil::format (timeStr, substitution);
-	mTextTime->setText(timeStr);
-
-	// set the tooltip to have the date
-	std::string dtStr = getString("timeTooltip");
-	LLStringUtil::format (dtStr, substitution);
-	mTextTime->setToolTip (dtStr);
+	// update clock every 10 seconds
+	if(mClockUpdateTimer.getElapsedTimeF32() > 10.f)
+	{
+		mClockUpdateTimer.reset();
+
+		// Get current UTC time, adjusted for the user's clock
+		// being off.
+		time_t utc_time;
+		utc_time = time_corrected();
+
+		std::string timeStr = getString("time");
+		LLSD substitution;
+		substitution["datetime"] = (S32) utc_time;
+		LLStringUtil::format (timeStr, substitution);
+		mTextTime->setText(timeStr);
+
+		// set the tooltip to have the date
+		std::string dtStr = getString("timeTooltip");
+		LLStringUtil::format (dtStr, substitution);
+		mTextTime->setToolTip (dtStr);
+	}
 
 	LLRect r;
 	const S32 MENU_RIGHT = gMenuBarView->getRightmostMenuEdge();
-	S32 x = MENU_RIGHT + MENU_PARCEL_SPACING;
-	S32 y = 0;
 
 	// reshape menu bar to its content's width
 	if (MENU_RIGHT != gMenuBarView->getRect().getWidth())
@@ -287,48 +289,9 @@ void LLStatusBar::refresh()
 		gMenuBarView->reshape(MENU_RIGHT, gMenuBarView->getRect().getHeight());
 	}
 
-	LLViewerRegion *region = gAgent.getRegion();
-	LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-
-	LLRect buttonRect;
-
-	if (LLHUDIcon::iconsNearby())
-	{
-		childGetRect( "scriptout", buttonRect );
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect("scriptout",r);
-		childSetVisible("scriptout", true);
-		x += buttonRect.getWidth();
-	}
-	else
-	{
-		childSetVisible("scriptout", false);
-	}
-
-	if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK &&
-		((region && region->getAllowDamage()) || (parcel && parcel->getAllowDamage())))
-	{
-		// set visibility based on flashing
-		if( mHealthTimer->hasExpired() )
-		{
-			childSetVisible("health", true);
-		}
-		else
-		{
-			BOOL flash = S32(mHealthTimer->getElapsedSeconds() * ICON_FLASH_FREQUENCY) & 1;
-			childSetVisible("health", flash);
-		}
-
-		// Health
-		childGetRect( "health", buttonRect );
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect("health", r);
-		x += buttonRect.getWidth();
-	}
-
 	mSGBandwidth->setVisible(net_stats_visible);
 	mSGPacketLoss->setVisible(net_stats_visible);
-	childSetEnabled("stat_btn", net_stats_visible);
+	getChildView("stat_btn")->setEnabled(net_stats_visible);
 
 	// update the master volume button state
 	bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute();
@@ -493,16 +456,6 @@ void LLStatusBar::onClickBuyCurrency()
 	LLBuyCurrencyHTML::openCurrencyFloater();
 }
 
-static void onClickHealth(void* )
-{
-	LLNotificationsUtil::add("NotSafe");
-}
-
-static void onClickScriptDebug(void*)
-{
-	LLFloaterScriptDebug::show(LLUUID::null);
-}
-
 void LLStatusBar::onMouseEnterVolume()
 {
 	LLButton* volbtn =  getChild<LLButton>( "volume_btn" );
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index dc95e2b383bc3c9d8e6fcfae286733962b82a3ad..c8c86dfd8c74fd1bfe6328fed80e2243f904e7b6 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -106,6 +106,8 @@ private:
 
 	LLButton	*mBtnVolume;
 	LLButton	*mMediaToggle;
+	LLView*		mScriptOut;
+	LLFrameTimer	mClockUpdateTimer;
 
 	S32				mBalance;
 	S32				mHealth;
diff --git a/indra/newview/llstylemap.cpp b/indra/newview/llstylemap.cpp
index 6ef42e37f83f269171f4caf9c4db1ca852a57a6e..43fe37ac77ba390ff7452ec5b3a3956759c072c1 100644
--- a/indra/newview/llstylemap.cpp
+++ b/indra/newview/llstylemap.cpp
@@ -40,20 +40,12 @@ const LLStyle::Params &LLStyleMap::lookupAgent(const LLUUID &source)
 	if (mMap.find(source) == mMap.end())
 	{
 		LLStyle::Params style_params;
-		if (source != LLUUID::null && source != gAgent.getID() )
+		if (source != LLUUID::null)
 		{
 			style_params.color.control = "HTMLLinkColor";
 			style_params.readonly_color.control = "HTMLLinkColor";
-			style_params.link_href = 
-					LLSLURL("agent", source, "inspect").getSLURLString();
+			style_params.link_href = LLSLURL("agent", source, "inspect").getSLURLString();
 		}
-		else
-		{
-			// Make the resident's own name white and don't make the name clickable.
-			style_params.color = LLColor4::white;
-			style_params.readonly_color = LLColor4::white;
-		}
-
 		mMap[source] = style_params;
 	}
 	return mMap[source];
diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp
index 9f8fc1810e5f3ce137fc063cfb5f38047ccdc20d..4a107fefa8c4bcfba3235ae359bbb86f548061bd 100644
--- a/indra/newview/llsyswellitem.cpp
+++ b/indra/newview/llsyswellitem.cpp
@@ -36,14 +36,12 @@
 //---------------------------------------------------------------------------------
 LLSysWellItem::LLSysWellItem(const Params& p) : LLPanel(p),
 												mTitle(NULL),
-												mCloseBtn(NULL),
-												mIcon(NULL)
+												mCloseBtn(NULL)
 {
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_sys_well_item.xml");
 
 	mTitle = getChild<LLTextBox>("title");
 	mCloseBtn = getChild<LLButton>("close_btn");
-	mIcon = getChild<LLIconCtrl>("icon");
 
 	mTitle->setValue(p.title);
 	mCloseBtn->setClickedCallback(boost::bind(&LLSysWellItem::onClickCloseBtn,this));
diff --git a/indra/newview/llsyswellitem.h b/indra/newview/llsyswellitem.h
index 54cfafe46e812249699e866d980afeeb9edd3e41..d961708a01dae7966ead36d7f332bf6c34df6885 100644
--- a/indra/newview/llsyswellitem.h
+++ b/indra/newview/llsyswellitem.h
@@ -73,7 +73,6 @@ private:
 
 	LLTextBox*	mTitle;
 	LLButton*	mCloseBtn;
-	LLIconCtrl*	mIcon;
 	LLUUID		mID;
 };
 
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 0d7b67d31d2120b1b7b4a7f3bdfd3219490cc8c0..500c2a7b863dcd74d7e29a3b22b48e5c4aa3225d 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -575,6 +575,10 @@ void LLTexLayerSetBuffer::doUpdate()
 	}
 
 	restartUpdateTimer();
+
+	// need to swtich to using this layerset if this is the first update
+	// after getting the lowest LOD
+	mTexLayerSet->getAvatar()->updateMeshTextures();
 	
 	// Print out notification that we uploaded this texture.
 	if (gSavedSettings.getBOOL("DebugAvatarRezTime"))
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 1056b93e3c82f3097be388830d43e8d155f2ea88..1625b4bafd475582045d358676e75d779c59f0cf 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -223,7 +223,7 @@ void LLFloaterTexturePicker::setImageID(const LLUUID& image_id)
 			if (itemp && !itemp->getPermissions().allowCopyBy(gAgent.getID()))
 			{
 				// no copy texture
-				childSetValue("apply_immediate_check", FALSE);
+				getChild<LLUICtrl>("apply_immediate_check")->setValue(FALSE);
 				mNoCopyTextureSelected = TRUE;
 			}
 			mInventoryPanel->setSelection(item_id, TAKE_FOCUS_NO);
@@ -233,7 +233,7 @@ void LLFloaterTexturePicker::setImageID(const LLUUID& image_id)
 
 void LLFloaterTexturePicker::setActive( BOOL active )					
 {
-	if (!active && childGetValue("Pipette").asBoolean())
+	if (!active && getChild<LLUICtrl>("Pipette")->getValue().asBoolean())
 	{
 		stopUsingPipette();
 	}
@@ -245,7 +245,7 @@ void LLFloaterTexturePicker::setCanApplyImmediately(BOOL b)
 	mCanApplyImmediately = b;
 	if (!mCanApplyImmediately)
 	{
-		childSetValue("apply_immediate_check", FALSE);
+		getChild<LLUICtrl>("apply_immediate_check")->setValue(FALSE);
 	}
 	updateFilterPermMask();
 }
@@ -400,7 +400,7 @@ BOOL LLFloaterTexturePicker::postBuild()
 
 
 	childSetCommitCallback("show_folders_check", onShowFolders, this);
-	childSetVisible("show_folders_check", FALSE);
+	getChildView("show_folders_check")->setVisible( FALSE);
 
 	mFilterEdit = getChild<LLFilterEditor>("inventory search editor");
 	mFilterEdit->setCommitCallback(boost::bind(&LLFloaterTexturePicker::onFilterEdit, this, _2));
@@ -439,12 +439,12 @@ BOOL LLFloaterTexturePicker::postBuild()
 
 	mNoCopyTextureSelected = FALSE;
 
-	childSetValue("apply_immediate_check", gSavedSettings.getBOOL("ApplyTextureImmediately"));
+	getChild<LLUICtrl>("apply_immediate_check")->setValue(gSavedSettings.getBOOL("ApplyTextureImmediately"));
 	childSetCommitCallback("apply_immediate_check", onApplyImmediateCheck, this);
 
 	if (!mCanApplyImmediately)
 	{
-		childSetEnabled("show_folders_check", FALSE);
+		getChildView("show_folders_check")->setEnabled(FALSE);
 	}
 
 	getChild<LLUICtrl>("Pipette")->setCommitCallback( boost::bind(&LLFloaterTexturePicker::onBtnPipette, this));
@@ -521,10 +521,10 @@ void LLFloaterTexturePicker::draw()
 	updateImageStats();
 
 	// if we're inactive, gray out "apply immediate" checkbox
-	childSetEnabled("show_folders_check", mActive && mCanApplyImmediately && !mNoCopyTextureSelected);
-	childSetEnabled("Select", mActive);
-	childSetEnabled("Pipette", mActive);
-	childSetValue("Pipette", LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance());
+	getChildView("show_folders_check")->setEnabled(mActive && mCanApplyImmediately && !mNoCopyTextureSelected);
+	getChildView("Select")->setEnabled(mActive);
+	getChildView("Pipette")->setEnabled(mActive);
+	getChild<LLUICtrl>("Pipette")->setValue(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance());
 
 	//BOOL allow_copy = FALSE;
 	if( mOwner ) 
@@ -541,9 +541,9 @@ void LLFloaterTexturePicker::draw()
 			mTentativeLabel->setVisible( FALSE  );
 		}
 
-		childSetEnabled("Default",  mImageAssetID != mOwner->getDefaultImageAssetID());
-		childSetEnabled("Blank",   mImageAssetID != mWhiteImageAssetID );
-		childSetEnabled("None", mOwner->getAllowNoTexture() && !mImageAssetID.isNull() );
+		getChildView("Default")->setEnabled(mImageAssetID != mOwner->getDefaultImageAssetID());
+		getChildView("Blank")->setEnabled(mImageAssetID != mWhiteImageAssetID );
+		getChildView("None")->setEnabled(mOwner->getAllowNoTexture() && !mImageAssetID.isNull() );
 
 		LLFloater::draw();
 
@@ -673,13 +673,13 @@ const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, BOOL co
 
 PermissionMask LLFloaterTexturePicker::getFilterPermMask()
 {
-	bool apply_immediate = childGetValue("apply_immediate_check").asBoolean();
+	bool apply_immediate = getChild<LLUICtrl>("apply_immediate_check")->getValue().asBoolean();
 	return apply_immediate ? mImmediateFilterPermMask : mNonImmediateFilterPermMask;
 }
 
 void LLFloaterTexturePicker::commitIfImmediateSet()
 {
-	bool apply_immediate = childGetValue("apply_immediate_check").asBoolean();
+	bool apply_immediate = getChild<LLUICtrl>("apply_immediate_check")->getValue().asBoolean();
 	if (!mNoCopyTextureSelected && apply_immediate && mOwner)
 	{
 		mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_CHANGE);
@@ -752,7 +752,7 @@ void LLFloaterTexturePicker::onBtnSelect(void* userdata)
 
 void LLFloaterTexturePicker::onBtnPipette()
 {
-	BOOL pipette_active = childGetValue("Pipette").asBoolean();
+	BOOL pipette_active = getChild<LLUICtrl>("Pipette")->getValue().asBoolean();
 	pipette_active = !pipette_active;
 	if (pipette_active)
 	{
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 5996fe3da7ef89970d069bf85f9223a4493ac06a..4e9ebce4d1037a164dfdf25e4dc8769f583f1cf2 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -48,6 +48,7 @@
 #include "llviewertexturelist.h"
 #include "llviewertexture.h"
 #include "llviewerregion.h"
+#include "llviewerstats.h"
 #include "llworld.h"
 
 //////////////////////////////////////////////////////////////////////////////
@@ -144,7 +145,7 @@ public:
 	~LLTextureFetchWorker();
 	void relese() { --mActiveCount; }
 
-	void callbackHttpGet(const LLChannelDescriptors& channels,
+	S32 callbackHttpGet(const LLChannelDescriptors& channels,
 						 const LLIOPipe::buffer_ptr_t& buffer,
 						 bool partial, bool success);
 	void callbackCacheRead(bool success, LLImageFormatted* image,
@@ -329,8 +330,9 @@ public:
 				worker->setGetStatus(status, reason);
 // 				llwarns << "CURL GET FAILED, status:" << status << " reason:" << reason << llendl;
 			}
-			mFetcher->removeFromHTTPQueue(mID);
-			worker->callbackHttpGet(channels, buffer, partial, success);
+			
+			S32 data_size = worker->callbackHttpGet(channels, buffer, partial, success);
+			mFetcher->removeFromHTTPQueue(mID, data_size);
 		}
 		else
 		{
@@ -589,7 +591,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 			return true; // abort
 		}
 	}
-	if(mImagePriority < 1.0f)
+	if(mImagePriority < F_ALMOST_ZERO)
 	{
 		if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR)
 		{
@@ -844,19 +846,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
 	{
 		if(mCanUseHTTP)
 		{
-			// *TODO: Integrate this with llviewerthrottle
-			// Note: LLViewerThrottle uses dynamic throttling which makes sense for UDP,
-			// but probably not for Textures.
-			// Set the throttle to the entire bandwidth, assuming UDP packets will get priority
-			// when they are needed
-			//F32 max_bandwidth = mFetcher->mMaxBandwidth;
-			if (mFetcher->isHTTPThrottled(mDesiredSize))// ||
-				//mFetcher->getTextureBandwidth() > max_bandwidth)
-			{
-				// Make normal priority and return (i.e. wait until there is room in the queue)
-				setPriority(LLWorkerThread::PRIORITY_NORMAL | mWorkPriority);
-				return false;
-			}
+			//NOTE:
+			//it seems ok to let sim control the UDP traffic
+			//so there is no throttle for http here.
+			//
 			
 			mFetcher->removeFromNetworkQueue(this, false);
 			
@@ -973,6 +966,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 					else
 					{
 						resetFormattedData();
+						mState = DONE;
 						return true; // failed
 					}
 				}
@@ -1265,8 +1259,7 @@ bool LLTextureFetchWorker::deleteOK()
 
 	if ((haveWork() &&
 		 // not ok to delete from these states
-		 ((mState == WAIT_HTTP_REQ) ||
-		  (mState >= WRITE_TO_CACHE && mState <= WAIT_ON_WRITE))))
+		 ((mState >= WRITE_TO_CACHE && mState <= WAIT_ON_WRITE))))
 	{
 		delete_ok = false;
 	}
@@ -1345,29 +1338,29 @@ bool LLTextureFetchWorker::processSimulatorPackets()
 
 //////////////////////////////////////////////////////////////////////////////
 
-void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels,
+S32 LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels,
 										   const LLIOPipe::buffer_ptr_t& buffer,
 										   bool partial, bool success)
 {
+	S32 data_size = 0 ;
+
 	LLMutexLock lock(&mWorkMutex);
 
 	if (mState != WAIT_HTTP_REQ)
 	{
 		llwarns << "callbackHttpGet for unrequested fetch worker: " << mID
 				<< " req=" << mSentRequest << " state= " << mState << llendl;
-		return;
+		return data_size;
 	}
 	if (mLoaded)
 	{
 		llwarns << "Duplicate callback for " << mID.asString() << llendl;
-		return; // ignore duplicate callback
+		return data_size ; // ignore duplicate callback
 	}
 	if (success)
 	{
 		// get length of stream:
-		S32 data_size = buffer->countAfter(channels.in(), NULL);
-
-		gTextureList.sTextureBits += data_size * 8; // Approximate - does not include header bits
+		data_size = buffer->countAfter(channels.in(), NULL);		
 	
 		LL_DEBUGS("Texture") << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
 		if (data_size > 0)
@@ -1404,6 +1397,8 @@ void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels,
 	}
 	mLoaded = TRUE;
 	setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
+
+	return data_size ;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1522,15 +1517,11 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
 	  mTextureCache(cache),
 	  mImageDecodeThread(imagedecodethread),
 	  mTextureBandwidth(0),
+	  mHTTPTextureBits(0),
 	  mCurlGetRequest(NULL)
 {
 	mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
 	mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), gSavedSettings.getU32("TextureLoggingThreshold"));
-	
-	for(S32 i = 0 ; i < TOTAL_TEXTURE_TYPES; i++)
-	{
-		mHTTPThrottleFlag[i] = FALSE ;
-	}
 }
 
 LLTextureFetch::~LLTextureFetch()
@@ -1672,69 +1663,11 @@ void LLTextureFetch::addToHTTPQueue(const LLUUID& id)
 	mHTTPTextureQueue.insert(id);
 }
 
-void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id)
+void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id, S32 received_size)
 {
 	LLMutexLock lock(&mNetworkQueueMutex);
 	mHTTPTextureQueue.erase(id);
-}
-
-void LLTextureFetch::clearHTTPThrottleFlag()
-{
-	static const F32 WAIT_TIME = 0.3f ; //seconds.
-	static LLFrameTimer timer ;
-
-	if(timer.getElapsedTimeF32() < WAIT_TIME) //wait for WAIT_TIME
-	{
-		return ;
-	}
-	timer.reset() ;
-
-	LLMutexLock lock(&mNetworkQueueMutex);
-	for(S32 i = 0 ; i < TOTAL_TEXTURE_TYPES; i++)//reset the http throttle flags.
-	{
-		mHTTPThrottleFlag[i] = FALSE ;
-	}
-}
-
-//check if need to throttle this fetching request.
-//rule: if a request can not be inserted into the http queue due to a full queue,
-//      block all future insertions of requests with larger fetching size requirement.
-//because:
-//      later insertions are usually at lower priorities; and
-//      small textures need chance to be fetched.
-bool LLTextureFetch::isHTTPThrottled(S32 requested_size)
-{
-	static const S32 SMALL_TEXTURE_MAX_SIZE = 64 * 64 * 4 ;
-	static const S32 MEDIUM_TEXTURE_MAX_SIZE = 256 * 256 * 4 ;
-	static const U32 MAX_HTTP_QUEUE_SIZE = 8 ;
-
-	//determine the class of the texture: SMALL, MEDIUM, or LARGE.
-	S32 type = LARGE_TEXTURE ;
-	if(requested_size <= SMALL_TEXTURE_MAX_SIZE)
-	{
-		type = SMALL_TEXTURE ;
-	}
-	else if(requested_size <= MEDIUM_TEXTURE_MAX_SIZE)
-	{
-		type = MEDIUM_TEXTURE ;
-	}
-
-	LLMutexLock lock(&mNetworkQueueMutex);
-
-	if(mHTTPTextureQueue.size() >= MAX_HTTP_QUEUE_SIZE)//if the http queue is full.
-	{
-		if(!mHTTPThrottleFlag[type + 1])
-		{
-			for(S32 i = type + 1 ; i < TOTAL_TEXTURE_TYPES; i++) //block all requests with fetching size larger than this request.		
-			{
-				mHTTPThrottleFlag[i] = TRUE ;			
-			}
-		}
-		
-		return true ;
-	}
-
-	return mHTTPThrottleFlag[type] ; //true if this request can not be inserted to the http queue.
+	mHTTPTextureBits += received_size * 8; // Approximate - does not include header bits	
 }
 
 void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel)
@@ -1882,12 +1815,19 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority)
 //virtual
 S32 LLTextureFetch::update(U32 max_time_ms)
 {
-	S32 res;
-	
 	static LLCachedControl<F32> band_width(gSavedSettings,"ThrottleBandwidthKBPS");
-	mMaxBandwidth = band_width ;
-	
-	res = LLWorkerThread::update(max_time_ms);
+
+	{
+		mNetworkQueueMutex.lock() ;
+		mMaxBandwidth = band_width ;
+
+		gTextureList.sTextureBits += mHTTPTextureBits ;
+		mHTTPTextureBits = 0 ;
+
+		mNetworkQueueMutex.unlock() ;
+	}
+
+	S32 res = LLWorkerThread::update(max_time_ms);
 	
 	if (!mDebugPause)
 	{
@@ -1903,7 +1843,6 @@ S32 LLTextureFetch::update(U32 max_time_ms)
 			lldebugs << "processed: " << processed << " messages." << llendl;
 		}
 	}
-	clearHTTPThrottleFlag();
 
 	return res;
 }
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index f148eaa918d65531b5d3290de8a5cb67c91fd885..796109df067b87d0d0214ad9d4ead01bffe705b1 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -88,9 +88,7 @@ protected:
 	void addToNetworkQueue(LLTextureFetchWorker* worker);
 	void removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel);
 	void addToHTTPQueue(const LLUUID& id);
-	void removeFromHTTPQueue(const LLUUID& id);
-	bool isHTTPThrottled(S32 requested_size);
-	void clearHTTPThrottleFlag();
+	void removeFromHTTPQueue(const LLUUID& id, S32 received_size = 0);
 	void removeRequest(LLTextureFetchWorker* worker, bool cancel);
 	// Called from worker thread (during doWork)
 	void processCurlRequests();	
@@ -130,15 +128,7 @@ private:
 	F32 mMaxBandwidth;
 	LLTextureInfo mTextureInfo;
 
-	enum
-	{
-		SMALL_TEXTURE = 0 , //size <= 64 * 64
-		MEDIUM_TEXTURE,     //size <= 256 * 256
-		LARGE_TEXTURE,      //size > 256 * 256
-		DUMMY,
-		TOTAL_TEXTURE_TYPES
-	};
-	BOOL mHTTPThrottleFlag[TOTAL_TEXTURE_TYPES];
+	U32 mHTTPTextureBits;
 };
 
 #endif // LL_LLTEXTUREFETCH_H
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index a6adf4826419ce80fbb029549370421d6d639bfc..4c75b07ae8e0de920ac3ca4fb56d573af2e7557f 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -124,7 +124,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 		pAttachLink->setValue(payload["inventory_name"]);
 
 		mInventoryOffer = new LLOfferInfo(payload["inventory_offer"]);
-		childSetActionTextbox("attachment", boost::bind(
+		getChild<LLTextBox>("attachment")->setClickedCallback(boost::bind(
 				&LLToastGroupNotifyPanel::onClickAttachment, this));
 
 		LLUIImagePtr attachIconImg = LLInventoryIcon::getIcon(mInventoryOffer->mType,
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 60df98ee99a7042692ff7f8c44944aeef0e38086..d8be70e54698b36ca8b3e7a438609811742aa33d 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -1554,7 +1554,7 @@ BOOL LLToolPie::pickRightMouseDownCallback()
 				mute_msg = LLTrans::getString("MuteObject2");
 			}
 			
-			gMenuHolder->childSetText("Object Mute", mute_msg);
+			gMenuHolder->getChild<LLUICtrl>("Object Mute")->setValue(mute_msg);
 			gMenuObject->show(x, y);
 
 			showVisualContextMenuEffect();
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index 123b47e97e9173b5d40ffe4309ab9f23f1534724..bd4d3c2b789cdb1c562bb1ad7205ae8a256f85b1 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -32,7 +32,6 @@
 #include "llcommandhandler.h"
 #include "llfloaterhelpbrowser.h"
 #include "llfloaterreg.h"
-#include "llfloaterurldisplay.h"
 #include "llfloaterworldmap.h"
 #include "llpanellogin.h"
 #include "llregionhandle.h"
@@ -177,10 +176,6 @@ bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, bool right_mouse)
 		return true;
 	}
 
-	// LLFloaterURLDisplay functionality moved to LLPanelPlaces in Side Tray.
-	//LLFloaterURLDisplay* slurl_displayp = LLFloaterReg::getTypedInstance<LLFloaterURLDisplay>("preview_url",LLSD());
-	//if(slurl_displayp) slurl_displayp->setName(region_name);
-
 	// Request a region handle by name
 	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(slurl.getRegion(),
 									  LLURLDispatcherImpl::regionNameCallback,
@@ -246,21 +241,6 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL&
 		key["z"] = global_pos.mdV[VZ];
 
 		LLSideTray::getInstance()->showPanel("panel_places", key);
-
-		// LLFloaterURLDisplay functionality moved to LLPanelPlaces in Side Tray.
-
-//		// display informational floater, allow user to click teleport btn
-//		LLFloaterURLDisplay* slurl_displayp = LLFloaterReg::getTypedInstance<LLFloaterURLDisplay>("preview_url",LLSD());
-//		if(slurl_displayp)
-//		{
-//			url_displayp->displayParcelInfo(region_handle, local_pos);
-//			if(snapshot_id.notNull())
-//			{
-//				url_displayp->setSnapshotDisplay(snapshot_id);
-//			}
-//			std::string locationString = llformat("%s %d, %d, %d", region_name.c_str(), x, y, z);
-//			url_displayp->setLocationString(locationString);
-//		}
 	}
 }
 
diff --git a/indra/newview/llviewchildren.cpp b/indra/newview/llviewchildren.cpp
index acc8d2359a591c825bbcf4e2dbb6e38d0d1d050b..5c5bbdc8f589ab25809a89efb95bf9e8e724bf59 100644
--- a/indra/newview/llviewchildren.cpp
+++ b/indra/newview/llviewchildren.cpp
@@ -49,12 +49,12 @@ LLViewChildren::LLViewChildren(LLPanel& parent)
 
 void LLViewChildren::show(const std::string& id, bool visible)
 {
-	mParent.childSetVisible(id, visible);
+	mParent.getChildView(id)->setVisible(visible);
 }
 
 void LLViewChildren::enable(const std::string& id, bool enabled)
 {
-	mParent.childSetEnabled(id, enabled);
+	mParent.getChildView(id)->setEnabled(enabled);
 }
 
 void LLViewChildren::setText(
diff --git a/indra/newview/llviewerattachmenu.cpp b/indra/newview/llviewerattachmenu.cpp
index 4847a3d721b2db46993748c35d89d249e23e76de..db7dc3fea61615b24efa0dd6dd936610715d863a 100644
--- a/indra/newview/llviewerattachmenu.cpp
+++ b/indra/newview/llviewerattachmenu.cpp
@@ -116,7 +116,7 @@ void LLViewerAttachMenu::attachObjects(const uuid_vec_t& items, const std::strin
 		LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getLinkedItem(id);
 		if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
 		{
-			rez_attachment(item, attachmentp);
+			rez_attachment(item, attachmentp); // don't replace if called from an "Attach To..." menu
 		}
 		else if(item && item->isFinished())
 		{
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index ac2037ef682bc233fa4491460617d631fda2e00a..522b5a7dfa5838424bb6139dcf1dff278c5c773e 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -37,6 +37,7 @@
 #include "llagent.h"
 #include "llagentcamera.h"
 #include "llconsole.h"
+#include "lldrawpoolbump.h"
 #include "lldrawpoolterrain.h"
 #include "llflexibleobject.h"
 #include "llfeaturemanager.h"
@@ -112,6 +113,10 @@ static bool handleTerrainDetailChanged(const LLSD& newvalue)
 
 static bool handleSetShaderChanged(const LLSD& newvalue)
 {
+	// changing shader level may invalidate existing cached bump maps, as the shader type determines the format of the bump map it expects - clear and repopulate the bump cache
+	gBumpImageList.destroyGL();
+	gBumpImageList.restoreGL();
+
 	LLViewerShaderMgr::instance()->setShaders();
 	return true;
 }
@@ -293,15 +298,6 @@ static bool handleWLSkyDetailChanged(const LLSD&)
 	return true;
 }
 
-static bool handleRenderLightingDetailChanged(const LLSD& newvalue)
-{
-	if (gPipeline.isInit())
-	{
-		gPipeline.setLightingDetail(newvalue.asInteger());
-	}
-	return true;
-}
-
 static bool handleResetVertexBuffersChanged(const LLSD&)
 {
 	if (gPipeline.isInit())
@@ -498,6 +494,10 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderUIBuffer")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
+	gSavedSettings.getControl("RenderSpecularResX")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
+	gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
+	gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
+	gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
@@ -518,7 +518,8 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _2));
 	gSavedSettings.getControl("RenderDynamicLOD")->getSignal()->connect(boost::bind(&handleRenderDynamicLODChanged, _2));
 	gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
-	gSavedSettings.getControl("RenderFastAlpha")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
+	gSavedSettings.getControl("RenderAutoMaskAlphaDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
+	gSavedSettings.getControl("RenderAutoMaskAlphaNonDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _2));
@@ -528,7 +529,8 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));
 	gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
 	gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
-	gSavedSettings.getControl("RenderDeferredShadow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
+	gSavedSettings.getControl("RenderShadowDetail")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
+	gSavedSettings.getControl("RenderDeferredSSAO")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderDeferredGI")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _2));
 	gSavedSettings.getControl("AuditTexture")->getSignal()->connect(boost::bind(&handleAuditTextureChanged, _2));
@@ -555,7 +557,6 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _2));
 	gSavedSettings.getControl("RenderUseStreamVBO")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _2));
-	gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _2));
 	gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _2));
 	gSavedSettings.getControl("JoystickAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
 	gSavedSettings.getControl("JoystickAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 8c59b52dc28f44e19979ecdbca0aed3520de6931..d0ad918c58b05dd954e791a5c21b54e36c0f74a1 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -589,7 +589,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 			LLPipeline::sUseOcclusion = 3;
 		}
 
-		LLPipeline::sFastAlpha = gSavedSettings.getBOOL("RenderFastAlpha");
+		LLPipeline::sAutoMaskAlphaDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaDeferred");
+		LLPipeline::sAutoMaskAlphaNonDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaNonDeferred");
 		LLPipeline::sUseFarClip = gSavedSettings.getBOOL("RenderUseFarClip");
 		LLVOAvatar::sMaxVisible = (U32)gSavedSettings.getS32("RenderAvatarMaxVisible");
 		LLPipeline::sDelayVBUpdate = gSavedSettings.getBOOL("RenderDelayVBUpdate");
@@ -861,12 +862,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 			}
 		}
 
-		/// We copy the frame buffer straight into a texture here,
-		/// and then display it again with compositor effects.
-		/// Using render to texture would be faster/better, but I don't have a 
-		/// grasp of their full display stack just yet.
-		// gPostProcess->apply(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
-		
 		if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
 		{
 			gPipeline.renderDeferredLighting();
@@ -928,9 +923,10 @@ void render_hud_attachments()
 		bool render_particles = gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES) && gSavedSettings.getBOOL("RenderHUDParticles");
 		
 		//only render hud objects
-		U32 mask = gPipeline.getRenderTypeMask();
+		gPipeline.pushRenderTypeMask();
+		
 		// turn off everything
-		gPipeline.setRenderTypeMask(0);
+		gPipeline.andRenderTypeMask(LLPipeline::END_RENDER_TYPES);
 		// turn on HUD
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD);
 		// turn on HUD particles
@@ -984,7 +980,8 @@ void render_hud_attachments()
 		render_hud_elements();
 
 		//restore type mask
-		gPipeline.setRenderTypeMask(mask);
+		gPipeline.popRenderTypeMask();
+
 		if (has_ui)
 		{
 			gPipeline.toggleRenderDebugFeature((void*) LLPipeline::RENDER_DEBUG_FEATURE_UI);
@@ -1109,7 +1106,7 @@ void render_ui(F32 zoom_factor, int subfield)
 		{
 			gPipeline.renderBloom(gSnapshot, zoom_factor, subfield);
 		}
-
+		
 		render_hud_elements();
 		render_hud_attachments();
 	}
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 2cc8f233e445f36dd585da09f4e0d21023325df7..b572a8cff6d4fe1b5f51a67434888328924408af 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -75,7 +75,6 @@
 #include "llfloaternotificationsconsole.h"
 #include "llfloateropenobject.h"
 #include "llfloaterpay.h"
-#include "llfloaterparcel.h"
 #include "llfloaterperms.h"
 #include "llfloaterpostcard.h"
 #include "llfloaterpostprocess.h"
@@ -95,7 +94,6 @@
 #include "llfloatertos.h"
 #include "llfloatertopobjects.h"
 #include "llfloateruipreview.h"
-#include "llfloaterurldisplay.h"
 #include "llfloatervoicedevicesettings.h"
 #include "llfloatervoiceeffect.h"
 #include "llfloaterwater.h"
@@ -196,14 +194,12 @@ void LLViewerFloaterReg::registerFloaters()
 
 	LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOpenObject>);
 	LLFloaterReg::add("outgoing_call", "floater_outgoing_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutgoingCallDialog>);
-	LLFloaterReg::add("parcel_info", "floater_preview_url.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterParcelInfo>);
 	LLFloaterPayUtil::registerFloater();
 
 	LLFloaterReg::add("postcard", "floater_postcard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostcard>);
 	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
 	LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);
 	LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);
-	LLFloaterReg::add("preview_url", "floater_preview_url.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterURLDisplay>);
 	LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);
 	LLFloaterReg::add("pref_voicedevicesettings", "floater_device_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceDeviceSettings>);
 	LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview");
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index efc5d87a53349152ccd5e1de4eb25fed2bd35576..75a5b14154fcc2b3660782808ffb9b2ae750325c 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -930,7 +930,7 @@ void ModifiedCOFCallback::fire(const LLUUID& inv_item)
 	gAgentWearables.editWearableIfRequested(inv_item);
 
 	// TODO: camera mode may not be changed if a debug setting is tweaked
-	if(gAgentCamera.cameraCustomizeAvatar())
+	if( gAgentCamera.cameraCustomizeAvatar() )
 	{
 		// If we're in appearance editing mode, the current tab may need to be refreshed
 		LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(LLSideTray::getInstance()->getPanel("sidepanel_appearance"));
diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp
index dada3ee3b991cc3f4ff2f6433b44feef7ce2f911..0cf5fe0ada5cb9401708095d827499cb0a7d711b 100644
--- a/indra/newview/llviewerjoint.cpp
+++ b/indra/newview/llviewerjoint.cpp
@@ -434,13 +434,13 @@ void LLViewerJoint::updateFaceSizes(U32 &num_vertices, U32& num_indices, F32 pix
 	}
 }
 
-void LLViewerJoint::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind)
+void LLViewerJoint::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind, bool terse_update)
 {
 	for (child_list_t::iterator iter = mChildren.begin();
 		 iter != mChildren.end(); ++iter)
 	{
 		LLViewerJoint* joint = (LLViewerJoint*)(*iter);
-		joint->updateFaceData(face, pixel_area, damp_wind);
+		joint->updateFaceData(face, pixel_area, damp_wind, terse_update);
 	}
 }
 
diff --git a/indra/newview/llviewerjoint.h b/indra/newview/llviewerjoint.h
index 4a5ebf2081840e6a0d386cee9fcb5f820894c197..76e3833acbf4fcaff77dd3796abd77c1a2c9df7c 100644
--- a/indra/newview/llviewerjoint.h
+++ b/indra/newview/llviewerjoint.h
@@ -120,7 +120,7 @@ public:
 	PickName getPickName() { return mPickName; }
 
 	virtual void updateFaceSizes(U32 &num_vertices, U32& num_indices, F32 pixel_area);
-	virtual void updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind = FALSE);
+	virtual void updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind = FALSE, bool terse_update = false);
 	virtual BOOL updateLOD(F32 pixel_area, BOOL activate);
 	virtual void updateJointGeometry();
 	virtual void dump();
diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp
index 01d07f93efc7141b4c18e544366dac7a05f051c5..ecb7e2064dad760251de17d13b8ca1c39ca9d291 100644
--- a/indra/newview/llviewerjointattachment.cpp
+++ b/indra/newview/llviewerjointattachment.cpp
@@ -29,12 +29,11 @@
 #include "llviewerjointattachment.h"
 
 #include "llagentconstants.h"
-
 #include "llviewercontrol.h"
 #include "lldrawable.h"
 #include "llgl.h"
 #include "llrender.h"
-#include "llvoavatar.h"
+#include "llvoavatarself.h"
 #include "llvolume.h"
 #include "pipeline.h"
 #include "llspatialpartition.h"
@@ -158,6 +157,9 @@ void LLViewerJointAttachment::setupDrawable(LLViewerObject *object)
 //-----------------------------------------------------------------------------
 BOOL LLViewerJointAttachment::addObject(LLViewerObject* object)
 {
+	object->extractAttachmentItemID();
+
+	// Same object reattached
 	if (isObjectAttached(object))
 	{
 		llinfos << "(same object re-attached)" << llendl;
@@ -165,20 +167,19 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object)
 		// Pass through anyway to let setupDrawable()
 		// re-connect object to the joint correctly
 	}
-
-	// Find the inventory item ID of the attached object
-	LLNameValue* item_id_nv = object->getNVPair("AttachItemID");
-	if( item_id_nv )
+	
+	// Two instances of the same inventory item attached --
+	// Request detach, and kill the object in the meantime.
+	if (getAttachedObject(object->getAttachmentItemID()))
 	{
-		const char* s = item_id_nv->getString();
-		if( s )
-		{
-			LLUUID item_id;
-			item_id.set(s);
-			object->setItemID(item_id);
-			lldebugs << "getNVPair( AttachItemID ) = " << item_id << llendl;
-		}
+		llinfos << "(same object re-attached)" << llendl;
+		object->markDead();
+
+		// If this happens to be attached to self, then detach.
+		LLVOAvatarSelf::detachAttachmentIntoInventory(object->getAttachmentItemID());
+		return FALSE;
 	}
+
 	mAttachedObjects.push_back(object);
 	setupDrawable(object);
 	
@@ -201,7 +202,7 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object)
 	}
 	calcLOD();
 	mUpdateXform = TRUE;
-
+	
 	return TRUE;
 }
 
@@ -297,7 +298,7 @@ void LLViewerJointAttachment::removeObject(LLViewerObject *object)
 	{
 		mUpdateXform = FALSE;
 	}
-	object->setItemID(LLUUID::null);
+	object->setAttachmentItemID(LLUUID::null);
 }
 
 //-----------------------------------------------------------------------------
@@ -423,7 +424,7 @@ const LLViewerObject *LLViewerJointAttachment::getAttachedObject(const LLUUID &o
 		 ++iter)
 	{
 		const LLViewerObject* attached_object = (*iter);
-		if (attached_object->getItemID() == object_id)
+		if (attached_object->getAttachmentItemID() == object_id)
 		{
 			return attached_object;
 		}
@@ -438,7 +439,7 @@ LLViewerObject *LLViewerJointAttachment::getAttachedObject(const LLUUID &object_
 		 ++iter)
 	{
 		LLViewerObject* attached_object = (*iter);
-		if (attached_object->getItemID() == object_id)
+		if (attached_object->getAttachmentItemID() == object_id)
 		{
 			return attached_object;
 		}
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index d2c29adf27b6a7a8ce4ad8fbdaac877a901ba989..ae2aa41b3a915c220d0106dd8e7e37053fd1cfb8 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -661,7 +661,9 @@ void LLViewerJointMesh::updateFaceSizes(U32 &num_vertices, U32& num_indices, F32
 //-----------------------------------------------------------------------------
 // updateFaceData()
 //-----------------------------------------------------------------------------
-void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind)
+static LLFastTimer::DeclareTimer FTM_AVATAR_FACE("Avatar Face");
+
+void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind, bool terse_update)
 {
 	mFace = face;
 
@@ -670,6 +672,8 @@ void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_w
 		return;
 	}
 
+	LLFastTimer t(FTM_AVATAR_FACE);
+
 	LLStrider<LLVector3> verticesp;
 	LLStrider<LLVector3> normalsp;
 	LLStrider<LLVector2> tex_coordsp;
@@ -688,29 +692,98 @@ void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_w
 			face->mVertexBuffer->getIndexStrider(indicesp);
 			stop_glerror();
 
-			for (U16 i = 0; i < mMesh->getNumVertices(); i++)
+			verticesp += mMesh->mFaceVertexOffset;
+			tex_coordsp += mMesh->mFaceVertexOffset;
+			normalsp += mMesh->mFaceVertexOffset;
+			vertex_weightsp += mMesh->mFaceVertexOffset;
+			clothing_weightsp += mMesh->mFaceVertexOffset;
+
+			const U32* __restrict coords = (U32*) mMesh->getCoords();
+			const U32* __restrict tex_coords = (U32*) mMesh->getTexCoords();
+			const U32* __restrict normals = (U32*) mMesh->getNormals();
+			const U32* __restrict weights = (U32*) mMesh->getWeights();
+			const U32* __restrict cloth_weights = (U32*) mMesh->getClothingWeights();
+
+			const U32 num_verts = mMesh->getNumVertices();
+
+			U32 i = 0;
+
+			const U32 skip = verticesp.getSkip()/sizeof(U32);
+
+			U32* __restrict v = (U32*) verticesp.get();
+			U32* __restrict n = (U32*) normalsp.get();
+			
+			if (terse_update)
 			{
-				verticesp[mMesh->mFaceVertexOffset + i] = *(mMesh->getCoords() + i);
-				tex_coordsp[mMesh->mFaceVertexOffset + i] = *(mMesh->getTexCoords() + i);
-				normalsp[mMesh->mFaceVertexOffset + i] = *(mMesh->getNormals() + i);
-				vertex_weightsp[mMesh->mFaceVertexOffset + i] = *(mMesh->getWeights() + i);
-				if (damp_wind)
+				for (S32 i = num_verts; i > 0; --i)
 				{
-					clothing_weightsp[mMesh->mFaceVertexOffset + i] = LLVector4(0,0,0,0);
+					//morph target application only, only update positions and normals
+					v[0] = coords[0]; 
+					v[1] = coords[1]; 
+					v[2] = coords[2];		
+					coords += 3;
+					v += skip;
 				}
-				else
+
+				for (S32 i = num_verts; i > 0; --i)
 				{
-					clothing_weightsp[mMesh->mFaceVertexOffset + i] = (*(mMesh->getClothingWeights() + i));
+					n[0] = normals[0]; 
+					n[1] = normals[1];
+					n[2] = normals[2];
+					normals += 3;
+					n += skip;
 				}
 			}
+			else
+				{
 
-			for (S32 i = 0; i < mMesh->getNumFaces(); i++)
-			{
-				for (U32 j = 0; j < 3; j++)
+				U32* __restrict tc = (U32*) tex_coordsp.get();
+				U32* __restrict vw = (U32*) vertex_weightsp.get();
+				U32* __restrict cw = (U32*) clothing_weightsp.get();
+				
+				do
+				{
+					v[0] = *(coords++); 
+					v[1] = *(coords++); 
+					v[2] = *(coords++);
+					v += skip;
+
+					tc[0] = *(tex_coords++); 
+					tc[1] = *(tex_coords++);
+					tc += skip;
+
+					n[0] = *(normals++); 
+					n[1] = *(normals++);
+					n[2] = *(normals++);
+					n += skip;
+
+					vw[0] = *(weights++);
+					vw += skip;
+
+					cw[0] = *(cloth_weights++);
+					cw[1] = *(cloth_weights++);
+					cw[2] = *(cloth_weights++);
+					cw[3] = *(cloth_weights++);
+					cw += skip;
+				}
+				while (++i < num_verts);
+
+				const U32 idx_count = mMesh->getNumFaces()*3;
+
+				indicesp += mMesh->mFaceIndexOffset;
+
+				U16* __restrict idx = indicesp.get();
+				S32* __restrict src_idx = (S32*) mMesh->getFaces();
+
+				i = 0;
+
+				const S32 offset = (S32) mMesh->mFaceVertexOffset;
+
+				do
 				{
-					U32 k = i*3+j+mMesh->mFaceIndexOffset;
-					indicesp[k] = mMesh->getFaces()[i][j] + mMesh->mFaceVertexOffset;
+					*(idx++) = *(src_idx++)+offset;
 				}
+				while (++i < idx_count);
 			}
 		}
 	}
diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h
index 1320bd03f96f658c7bba67a396ff9b0258866bb2..cab1205d61803c63081ac5eec61956ca90a4eb1f 100644
--- a/indra/newview/llviewerjointmesh.h
+++ b/indra/newview/llviewerjointmesh.h
@@ -134,7 +134,7 @@ public:
 	/*virtual*/ U32 drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy );
 
 	/*virtual*/ void updateFaceSizes(U32 &num_vertices, U32& num_indices, F32 pixel_area);
-	/*virtual*/ void updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind = FALSE);
+	/*virtual*/ void updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind = FALSE, bool terse_update = false);
 	/*virtual*/ BOOL updateLOD(F32 pixel_area, BOOL activate);
 	/*virtual*/ void updateJointGeometry();
 	/*virtual*/ void dump();
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 47a98ff8887412b397189d3dbfb409581cd61ccf..283669aaef52c1557585af027b5fe8e841bcd1ef 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -50,6 +50,7 @@
 #include "llvoavatar.h"
 #include "llvoavatarself.h"
 #include "llviewerregion.h"
+#include "llwebsharing.h"	// For LLWebSharing::setOpenIDCookie(), *TODO: find a better way to do this!
 
 #include "llevent.h"		// LLSimpleListener
 #include "llnotificationsutil.h"
@@ -1312,6 +1313,9 @@ void LLViewerMedia::setOpenIDCookie()
 		}
 		
 		getCookieStore()->setCookiesFromHost(sOpenIDCookie, authority.substr(host_start, host_end - host_start));
+
+		// *HACK: Doing this here is nasty, find a better way.
+		LLWebSharing::instance().setOpenIDCookie(sOpenIDCookie);
 	}
 }
 
@@ -2186,7 +2190,8 @@ void LLViewerMediaImpl::navigateReload()
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::navigateHome()
 {
-	navigateTo(mHomeURL, "", true, false);
+	bool rediscover_mimetype = mHomeMimeType.empty();
+	navigateTo(mHomeURL, mHomeMimeType, rediscover_mimetype, false);
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////
@@ -2298,6 +2303,8 @@ void LLViewerMediaImpl::navigateInternal()
 			// which is really not what we want.
 			LLSD headers = LLSD::emptyMap();
 			headers["Accept"] = "*/*";
+			// Allow cookies in the response, to prevent a redirect loop when accessing join.secondlife.com
+			headers["Cookie"] = "";
 			LLHTTPClient::getHeaderOnly( mMediaURL, new LLMimeDiscoveryResponder(this), headers, 10.0f);
 		}
 		else if("data" == scheme || "file" == scheme || "about" == scheme)
@@ -2906,14 +2913,23 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		{
 			LL_DEBUGS("Media") << "MEDIA_EVENT_NAVIGATE_COMPLETE, uri is: " << plugin->getNavigateURI() << LL_ENDL;
 
+			std::string url = plugin->getNavigateURI();
 			if(getNavState() == MEDIANAVSTATE_BEGUN)
 			{
-				mCurrentMediaURL = plugin->getNavigateURI();
-				setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED);
+				if(mCurrentMediaURL == url)
+				{
+					// This is a navigate that takes us to the same url as the previous navigate.
+					setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS);
+				}
+				else
+				{
+					mCurrentMediaURL = url;
+					setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED);
+				}
 			}
 			else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN)
 			{
-				mCurrentMediaURL = plugin->getNavigateURI();
+				mCurrentMediaURL = url;
 				setNavState(MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED);
 			}
 			else
@@ -2927,14 +2943,24 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		{
 			LL_DEBUGS("Media") << "MEDIA_EVENT_LOCATION_CHANGED, uri is: " << plugin->getLocation() << LL_ENDL;
 
+			std::string url = plugin->getLocation();
+
 			if(getNavState() == MEDIANAVSTATE_BEGUN)
 			{
-				mCurrentMediaURL = plugin->getLocation();
-				setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED);
+				if(mCurrentMediaURL == url)
+				{
+					// This is a navigate that takes us to the same url as the previous navigate.
+					setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS);
+				}
+				else
+				{
+					mCurrentMediaURL = url;
+					setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED);
+				}
 			}
 			else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN)
 			{
-				mCurrentMediaURL = plugin->getLocation();
+				mCurrentMediaURL = url;
 				setNavState(MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED);
 			}
 			else
@@ -3218,7 +3244,9 @@ void LLViewerMediaImpl::setNavState(EMediaNavState state)
 		case MEDIANAVSTATE_NONE: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_NONE" << llendl; break;
 		case MEDIANAVSTATE_BEGUN: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_BEGUN" << llendl; break;
 		case MEDIANAVSTATE_FIRST_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_FIRST_LOCATION_CHANGED" << llendl; break;
+		case MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS" << llendl; break;
 		case MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED" << llendl; break;
+		case MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS" << llendl; break;
 		case MEDIANAVSTATE_SERVER_SENT: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_SENT" << llendl; break;
 		case MEDIANAVSTATE_SERVER_BEGUN: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_BEGUN" << llendl; break;
 		case MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED" << llendl; break;
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index fbd0358302d55f3268375c1d449b0ec2f0f41434..e0cc26fa295f7dbf54f94ee033ed6e1673f84133 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -231,7 +231,7 @@ public:
 	std::string getCurrentMediaURL();
 	std::string getHomeURL() { return mHomeURL; }
 	std::string getMediaEntryURL() { return mMediaEntryURL; }
-    void setHomeURL(const std::string& home_url) { mHomeURL = home_url; };
+	void setHomeURL(const std::string& home_url, const std::string& mime_type = LLStringUtil::null) { mHomeURL = home_url; mHomeMimeType = mime_type;};
 	void clearCache();
 	std::string getMimeType() { return mMimeType; }
 	void scaleMouse(S32 *mouse_x, S32 *mouse_y);
@@ -356,7 +356,9 @@ public:
 		MEDIANAVSTATE_NONE,										// State is outside what we need to track for navigation.
 		MEDIANAVSTATE_BEGUN,									// a MEDIA_EVENT_NAVIGATE_BEGIN has been received which was not server-directed
 		MEDIANAVSTATE_FIRST_LOCATION_CHANGED,					// first LOCATION_CHANGED event after a non-server-directed BEGIN
+		MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS,			// Same as above, but the new URL is identical to the previously navigated URL.
 		MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED,			// we received a NAVIGATE_COMPLETE event before the first LOCATION_CHANGED
+		MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS,// Same as above, but the new URL is identical to the previously navigated URL.
 		MEDIANAVSTATE_SERVER_SENT,								// server-directed nav has been requested, but MEDIA_EVENT_NAVIGATE_BEGIN hasn't been received yet
 		MEDIANAVSTATE_SERVER_BEGUN,								// MEDIA_EVENT_NAVIGATE_BEGIN has been received which was server-directed
 		MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED,			// first LOCATION_CHANGED event after a server-directed BEGIN
@@ -393,6 +395,7 @@ private:
 	bool  mMovieImageHasMips;
 	std::string mMediaURL;			// The last media url set with NavigateTo
 	std::string mHomeURL;
+	std::string mHomeMimeType;		// forced mime type for home url
 	std::string mMimeType;
 	std::string mCurrentMediaURL;	// The most current media url from the plugin (via the "location changed" or "navigate complete" events).
 	std::string mCurrentMimeType;	// The MIME type that caused the currently loaded plugin to be loaded.
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 476e761c280ab58a8c70349bd666441e972b2a4c..c2750680282233fb6d3cc0090e95b99ecbb31ff3 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1077,6 +1077,8 @@ class LLAdvancedToggleWireframe : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		gUseWireframe = !(gUseWireframe);
+		LLPipeline::updateRenderDeferred();
+		gPipeline.resetVertexBuffers();
 		return true;
 	}
 };
@@ -2048,9 +2050,9 @@ class LLAdvancedEnableRenderDeferred: public view_listener_t
 };
 
 /////////////////////////////////////
-// Enable Global Illumination 	  ///
+// Enable Deferred Rendering sub-options
 /////////////////////////////////////
-class LLAdvancedEnableRenderDeferredGI: public view_listener_t
+class LLAdvancedEnableRenderDeferredOptions: public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
@@ -5846,6 +5848,7 @@ void handle_buy_land()
 class LLObjectAttachToAvatar : public view_listener_t
 {
 public:
+	LLObjectAttachToAvatar(bool replace) : mReplace(replace) {}
 	static void setObjectSelection(LLObjectSelectionHandle selection) { sObjectSelection = selection; }
 
 private:
@@ -5859,22 +5862,38 @@ private:
 			LLViewerJointAttachment* attachment_point = NULL;
 			if (index > 0)
 				attachment_point = get_if_there(gAgentAvatarp->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL);
-			confirm_replace_attachment(0, attachment_point);
+			confirmReplaceAttachment(0, attachment_point);
 		}
 		return true;
 	}
 
+	static void onNearAttachObject(BOOL success, void *user_data);
+	void confirmReplaceAttachment(S32 option, LLViewerJointAttachment* attachment_point);
+
+	struct CallbackData
+	{
+		CallbackData(LLViewerJointAttachment* point, bool replace) : mAttachmentPoint(point), mReplace(replace) {}
+
+		LLViewerJointAttachment*	mAttachmentPoint;
+		bool						mReplace;
+	};
+
 protected:
 	static LLObjectSelectionHandle sObjectSelection;
+	bool mReplace;
 };
 
 LLObjectSelectionHandle LLObjectAttachToAvatar::sObjectSelection;
 
-void near_attach_object(BOOL success, void *user_data)
+// static
+void LLObjectAttachToAvatar::onNearAttachObject(BOOL success, void *user_data)
 {
+	if (!user_data) return;
+	CallbackData* cb_data = static_cast<CallbackData*>(user_data);
+
 	if (success)
 	{
-		const LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data;
+		const LLViewerJointAttachment *attachment = cb_data->mAttachmentPoint;
 		
 		U8 attachment_id = 0;
 		if (attachment)
@@ -5894,12 +5913,15 @@ void near_attach_object(BOOL success, void *user_data)
 			// interpret 0 as "default location"
 			attachment_id = 0;
 		}
-		LLSelectMgr::getInstance()->sendAttach(attachment_id);
+		LLSelectMgr::getInstance()->sendAttach(attachment_id, cb_data->mReplace);
 	}		
 	LLObjectAttachToAvatar::setObjectSelection(NULL);
+
+	delete cb_data;
 }
 
-void confirm_replace_attachment(S32 option, void* user_data)
+// static
+void LLObjectAttachToAvatar::confirmReplaceAttachment(S32 option, LLViewerJointAttachment* attachment_point)
 {
 	if (option == 0/*YES*/)
 	{
@@ -5924,7 +5946,9 @@ void confirm_replace_attachment(S32 option, void* user_data)
 			delta = delta * 0.5f;
 			walkToSpot -= delta;
 
-			gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(walkToSpot), "Attach", NULL, near_attach_object, user_data, stop_distance);
+			// The callback will be called even if avatar fails to get close enough to the object, so we won't get a memory leak.
+			CallbackData* user_data = new CallbackData(attachment_point, mReplace);
+			gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(walkToSpot), "Attach", NULL, onNearAttachObject, user_data, stop_distance);
 			gAgentCamera.clearFocusObject();
 		}
 	}
@@ -6044,7 +6068,7 @@ static bool onEnableAttachmentLabel(LLUICtrl* ctrl, const LLSD& data)
 				const LLViewerObject* attached_object = (*attachment_iter);
 				if (attached_object)
 				{
-					LLViewerInventoryItem* itemp = gInventory.getItem(attached_object->getItemID());
+					LLViewerInventoryItem* itemp = gInventory.getItem(attached_object->getAttachmentItemID());
 					if (itemp)
 					{
 						label += std::string(" (") + itemp->getName() + std::string(")");
@@ -6163,14 +6187,14 @@ class LLAttachmentEnableDrop : public view_listener_t
 				{
 					// make sure item is in your inventory (it could be a delayed attach message being sent from the sim)
 					// so check to see if the item is in the inventory already
-					item = gInventory.getItem((*attachment_iter)->getItemID());
+					item = gInventory.getItem((*attachment_iter)->getAttachmentItemID());
 					if (!item)
 					{
 						// Item does not exist, make an observer to enable the pie menu 
 						// when the item finishes fetching worst case scenario 
 						// if a fetch is already out there (being sent from a slow sim)
 						// we refetch and there are 2 fetches
-						LLWornItemFetchedObserver* worn_item_fetched = new LLWornItemFetchedObserver((*attachment_iter)->getItemID());		
+						LLWornItemFetchedObserver* worn_item_fetched = new LLWornItemFetchedObserver((*attachment_iter)->getAttachmentItemID());		
 						worn_item_fetched->startFetch();
 						gInventory.addObserver(worn_item_fetched);
 					}
@@ -6517,7 +6541,7 @@ void handle_dump_attachments(void*)
 							!attached_object->mDrawable->isRenderType(0));
 			LLVector3 pos;
 			if (visible) pos = attached_object->mDrawable->getPosition();
-			llinfos << "ATTACHMENT " << key << ": item_id=" << attached_object->getItemID()
+			llinfos << "ATTACHMENT " << key << ": item_id=" << attached_object->getAttachmentItemID()
 					<< (attached_object ? " present " : " absent ")
 					<< (visible ? "visible " : "invisible ")
 					<<  " at " << pos
@@ -6528,7 +6552,7 @@ void handle_dump_attachments(void*)
 }
 
 
-// these are used in the gl menus to set control values.
+// these are used in the gl menus to set control values, generically.
 class LLToggleControl : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
@@ -6547,8 +6571,44 @@ class LLCheckControl : public view_listener_t
 		std::string callback_data = userdata.asString();
 		bool new_value = gSavedSettings.getBOOL(callback_data);
 		return new_value;
-}
+	}
+};
+
+// not so generic
+
+class LLAdvancedCheckRenderShadowOption: public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		std::string control_name = userdata.asString();
+		S32 current_shadow_level = gSavedSettings.getS32(control_name);
+		if (current_shadow_level == 0) // is off
+		{
+			return false;
+		}
+		else // is on
+		{
+			return true;
+		}
+	}
+};
 
+class LLAdvancedClickRenderShadowOption: public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		std::string control_name = userdata.asString();
+		S32 current_shadow_level = gSavedSettings.getS32(control_name);
+		if (current_shadow_level == 0) // upgrade to level 2
+		{
+			gSavedSettings.setS32(control_name, 2);
+		}
+		else // downgrade to level 0
+		{
+			gSavedSettings.setS32(control_name, 0);
+		}
+		return true;
+	}
 };
 
 void menu_toggle_attached_lights(void* user_data)
@@ -7873,7 +7933,7 @@ void initialize_menus()
 	// Help menu
 	// most items use the ShowFloater method
 
-	// Advance menu
+	// Advanced menu
 	view_listener_t::addMenu(new LLAdvancedToggleConsole(), "Advanced.ToggleConsole");
 	view_listener_t::addMenu(new LLAdvancedCheckConsole(), "Advanced.CheckConsole");
 	view_listener_t::addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole");
@@ -7900,12 +7960,13 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedSelectedTextureInfo(), "Advanced.SelectedTextureInfo");
 	view_listener_t::addMenu(new LLAdvancedToggleWireframe(), "Advanced.ToggleWireframe");
 	view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe");
+	// Develop > Render
 	view_listener_t::addMenu(new LLAdvancedToggleTextureAtlas(), "Advanced.ToggleTextureAtlas");
 	view_listener_t::addMenu(new LLAdvancedCheckTextureAtlas(), "Advanced.CheckTextureAtlas");
 	view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion");
 	view_listener_t::addMenu(new LLAdvancedEnableRenderFBO(), "Advanced.EnableRenderFBO");
 	view_listener_t::addMenu(new LLAdvancedEnableRenderDeferred(), "Advanced.EnableRenderDeferred");
-	view_listener_t::addMenu(new LLAdvancedEnableRenderDeferredGI(), "Advanced.EnableRenderDeferredGI");
+	view_listener_t::addMenu(new LLAdvancedEnableRenderDeferredOptions(), "Advanced.EnableRenderDeferredOptions");
 	view_listener_t::addMenu(new LLAdvancedToggleRandomizeFramerate(), "Advanced.ToggleRandomizeFramerate");
 	view_listener_t::addMenu(new LLAdvancedCheckRandomizeFramerate(), "Advanced.CheckRandomizeFramerate");
 	view_listener_t::addMenu(new LLAdvancedTogglePeriodicSlowFrame(), "Advanced.TogglePeriodicSlowFrame");
@@ -7914,6 +7975,8 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedToggleFrameTest(), "Advanced.ToggleFrameTest");
 	view_listener_t::addMenu(new LLAdvancedCheckFrameTest(), "Advanced.CheckFrameTest");
 	view_listener_t::addMenu(new LLAdvancedHandleAttachedLightParticles(), "Advanced.HandleAttachedLightParticles");
+	view_listener_t::addMenu(new LLAdvancedCheckRenderShadowOption(), "Advanced.CheckRenderShadowOption");
+	view_listener_t::addMenu(new LLAdvancedClickRenderShadowOption(), "Advanced.ClickRenderShadowOption");
 	
 
 	#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
@@ -8070,7 +8133,8 @@ void initialize_menus()
 	commit.add("Object.Touch", boost::bind(&handle_object_touch));
 	commit.add("Object.SitOrStand", boost::bind(&handle_object_sit_or_stand));
 	commit.add("Object.Delete", boost::bind(&handle_object_delete));
-	view_listener_t::addMenu(new LLObjectAttachToAvatar(), "Object.AttachToAvatar");
+	view_listener_t::addMenu(new LLObjectAttachToAvatar(true), "Object.AttachToAvatar");
+	view_listener_t::addMenu(new LLObjectAttachToAvatar(false), "Object.AttachAddToAvatar");
 	view_listener_t::addMenu(new LLObjectReturn(), "Object.Return");
 	view_listener_t::addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse");
 	view_listener_t::addMenu(new LLObjectMute(), "Object.Mute");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 2a6b2727417d0c6cde29b36fd628a3ce0d18c60f..92c61ddefebc854dcce52bf12fe26312c1369375 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3662,6 +3662,7 @@ const F32 THRESHOLD_HEAD_ROT_QDOT = 0.9997f;	// ~= 2.5 degrees -- if its less th
 const F32 MAX_HEAD_ROT_QDOT = 0.99999f;			// ~= 0.5 degrees -- if its greater than this then no need to update head_rot
 												// between these values we delay the updates (but no more than one second)
 
+static LLFastTimer::DeclareTimer FTM_AGENT_UPDATE_SEND("Send Message");
 
 void send_agent_update(BOOL force_send, BOOL send_reliable)
 {
@@ -3820,6 +3821,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
 
 	if (duplicate_count < DUP_MSGS && !gDisconnected)
 	{
+		LLFastTimer t(FTM_AGENT_UPDATE_SEND);
 		// Build the message
 		msg->newMessageFast(_PREHASH_AgentUpdate);
 		msg->nextBlockFast(_PREHASH_AgentData);
@@ -5311,10 +5313,10 @@ void process_economy_data(LLMessageSystem *msg, void** /*user_data*/)
 
 	LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is L$" << upload_cost << LL_ENDL;
 
-	gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost));
-	gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", llformat("%d", upload_cost));
-	gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", llformat("%d", upload_cost));
-	gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", llformat("%d", upload_cost));
+	gMenuHolder->getChild<LLUICtrl>("Upload Image")->setLabelArg("[COST]", llformat("%d", upload_cost));
+	gMenuHolder->getChild<LLUICtrl>("Upload Sound")->setLabelArg("[COST]", llformat("%d", upload_cost));
+	gMenuHolder->getChild<LLUICtrl>("Upload Animation")->setLabelArg("[COST]", llformat("%d", upload_cost));
+	gMenuHolder->getChild<LLUICtrl>("Bulk Upload")->setLabelArg("[COST]", llformat("%d", upload_cost));
 }
 
 void notify_cautioned_script_question(const LLSD& notification, const LLSD& response, S32 orig_questions, BOOL granted)
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index eade16a075289c8440912a6574267f48150f52e7..7f7c24571729686171a15dcc100df3ef68e3424e 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -44,6 +44,7 @@ const char* DEFAULT_SLURL_BASE = "https://%s/region/";
 const char* DEFAULT_APP_SLURL_BASE = "x-grid-location-info://%s/app";
 
 LLGridManager::LLGridManager()
+:	mIsInProductionGrid(false)
 {
 	// by default, we use the 'grids.xml' file in the user settings directory
 	// this file is an LLSD file containing multiple grid definitions.
@@ -303,6 +304,10 @@ void LLGridManager::initialize(const std::string& grid_file)
 		addGrid(grid);		
 	}
 
+	gSavedSettings.getControl("CurrentGrid")->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this));
+	// since above only triggers on changes, trigger the callback manually to initialize state
+	updateIsInProductionGrid();
+
 	LL_DEBUGS("GridManager") << "Selected grid is " << mGrid << LL_ENDL;		
 	setGridChoice(mGrid);
 	if(mGridList[mGrid][GRID_LOGIN_URI_VALUE].isArray())
@@ -554,23 +559,30 @@ std::string LLGridManager::getLoginPage()
 	return mGridList[mGrid][GRID_LOGIN_PAGE_VALUE];
 }
 
-bool LLGridManager::isInProductionGrid()
+void LLGridManager::updateIsInProductionGrid()
 {
+	mIsInProductionGrid = false;
+
 	// *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
 	// but it seems that loginURI trumps that.
 	std::vector<std::string> uris;
 	getLoginURIs(uris);
-	if (uris.size() < 1)
+	if (uris.empty())
 	{
-		return 1;
+		mIsInProductionGrid = true;
+		return;
 	}
 	LLStringUtil::toLower(uris[0]);
 	if((uris[0].find("agni") != std::string::npos))
 	{
-		return true;
+		mIsInProductionGrid = true;
+		return;
 	}
+}
 
-	return false;
+bool LLGridManager::isInProductionGrid()
+{
+	return mIsInProductionGrid;
 }
 
 void LLGridManager::saveFavorites()
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index 70b06b1dc20fc40d892b0dd7146709ccfb97af36..15e25b49524512fa9b07881f440fa54f5bba4a8b 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -131,6 +131,8 @@ public:
 
 protected:
 
+	void updateIsInProductionGrid();
+
 	// helper function for adding the predefined grids
 	void addSystemGrid(const std::string& label, 
 					   const std::string& name, 
@@ -143,6 +145,7 @@ protected:
 	std::string mGrid;
 	std::string mGridFile;
 	LLSD mGridList;
+	bool mIsInProductionGrid;
 };
 
 const S32 MAC_ADDRESS_BYTES = 6;
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 2a909f87819dd8e206d3cc6faa507f239ecf1b6b..25cc24da95c36f85c0dc0d15cd4d03d2b01e1971 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -5227,3 +5227,28 @@ void LLViewerObject::resetChildrenPosition(const LLVector3& offset, BOOL simplif
 	return ;
 }
 
+const LLUUID &LLViewerObject::getAttachmentItemID() const
+{
+	return mAttachmentItemID;
+}
+
+void LLViewerObject::setAttachmentItemID(const LLUUID &id)
+{
+	mAttachmentItemID = id;
+}
+
+const LLUUID &LLViewerObject::extractAttachmentItemID()
+{
+	LLUUID item_id = LLUUID::null;
+	LLNameValue* item_id_nv = getNVPair("AttachItemID");
+	if( item_id_nv )
+	{
+		const char* s = item_id_nv->getString();
+		if( s )
+		{
+			item_id.set(s);
+		}
+	}
+	setAttachmentItemID(item_id);
+	return getAttachmentItemID();
+}
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index c3c1b2d1067627f1699fb7d093b0beca1f90aa6a..bcc2cb164f2804cf0ce7a83f798f39c4c7a64b25 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -672,11 +672,15 @@ protected:
 private:	
 	static S32 sNumObjects;
 
+	//--------------------------------------------------------------------
+	// For objects that are attachments
+	//--------------------------------------------------------------------
 public:
-	const LLUUID &getItemID() const { return mAttachmentItemID; }
-	void setItemID(const LLUUID &id) { mAttachmentItemID = id; }
+	const LLUUID &getAttachmentItemID() const;
+	void setAttachmentItemID(const LLUUID &id);
+	const LLUUID &extractAttachmentItemID(); // find&set the inventory item ID of the attached object
 private:
-	LLUUID mAttachmentItemID; // ItemID when item is in user inventory.
+	LLUUID mAttachmentItemID; // ItemID of the associated object is in user inventory.
 };
 
 ///////////////////
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index 4c2ea272537d663a834a3d0b4b6d494bf9ced2e9..d078c153160eabfa54a62f52213620296b4a1495 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -311,10 +311,16 @@ S32 LLViewerShaderMgr::getVertexShaderLevel(S32 type)
 
 void LLViewerShaderMgr::setShaders()
 {
-	if (!gPipeline.mInitialized || !sInitialized)
+	//setShaders might be called redundantly by gSavedSettings, so return on reentrance
+	static bool reentrance = false;
+	
+	if (!gPipeline.mInitialized || !sInitialized || reentrance)
 	{
 		return;
 	}
+
+	reentrance = true;
+
 	// Make sure the compiled shader map is cleared before we recompile shaders.
 	mShaderObjects.clear();
 	
@@ -362,17 +368,11 @@ void LLViewerShaderMgr::setShaders()
 		S32 wl_class = 2;
 		S32 water_class = 2;
 		S32 deferred_class = 0;
-		if (!(LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders")
-			  && gSavedSettings.getBOOL("WindLightUseAtmosShaders")))
-		{
-			// user has disabled WindLight in their settings, downgrade
-			// windlight shaders to stub versions.
-			wl_class = 1;
-		}
-
-		if (LLPipeline::sRenderDeferred)
+		
+		if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
+		    gSavedSettings.getBOOL("RenderDeferred"))
 		{
-			if (gSavedSettings.getBOOL("RenderDeferredShadow"))
+			if (gSavedSettings.getS32("RenderShadowDetail") > 0)
 			{
 				if (gSavedSettings.getBOOL("RenderDeferredGI"))
 				{ //shadows + gi
@@ -387,6 +387,24 @@ void LLViewerShaderMgr::setShaders()
 			{ //no shadows
 				deferred_class = 1;
 			}
+
+			//make sure framebuffer objects are enabled
+			gSavedSettings.setBOOL("RenderUseFBO", TRUE);
+
+			//make sure hardware skinning is enabled
+			gSavedSettings.setBOOL("RenderAvatarVP", TRUE);
+			
+			//make sure atmospheric shaders are enabled
+			gSavedSettings.setBOOL("WindLightUseAtmosShaders", TRUE);
+		}
+
+
+		if (!(LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders")
+			  && gSavedSettings.getBOOL("WindLightUseAtmosShaders")))
+		{
+			// user has disabled WindLight in their settings, downgrade
+			// windlight shaders to stub versions.
+			wl_class = 1;
 		}
 
 		if(!gSavedSettings.getBOOL("EnableRippleWater"))
@@ -511,6 +529,8 @@ void LLViewerShaderMgr::setShaders()
 		gViewerWindow->setCursor(UI_CURSOR_ARROW);
 	}
 	gPipeline.createGLBuffers();
+
+	reentrance = false;
 }
 
 void LLViewerShaderMgr::unloadShaders()
@@ -967,10 +987,21 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 
 	if (success)
 	{
+		std::string fragment;
+
+		if (gSavedSettings.getBOOL("RenderDeferredSSAO"))
+		{
+			fragment = "deferred/sunLightSSAOF.glsl";
+		}
+		else
+		{
+			fragment = "deferred/sunLightF.glsl";
+		}
+
 		gDeferredSunProgram.mName = "Deferred Sun Shader";
 		gDeferredSunProgram.mShaderFiles.clear();
 		gDeferredSunProgram.mShaderFiles.push_back(make_pair("deferred/sunLightV.glsl", GL_VERTEX_SHADER_ARB));
-		gDeferredSunProgram.mShaderFiles.push_back(make_pair("deferred/sunLightF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredSunProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB));
 		gDeferredSunProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 		success = gDeferredSunProgram.createShader(NULL, NULL);
 	}
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 3e984b6fc37f67e157189728d67c9846890cee35..e55808597cd782e5957bd532350e79b3b26dd6e7 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -594,7 +594,7 @@ void update_statistics(U32 frame_count)
 		}
 	}
 	LLViewerStats::getInstance()->setStat(LLViewerStats::ST_ENABLE_VBO, (F64)gSavedSettings.getBOOL("RenderVBOEnable"));
-	LLViewerStats::getInstance()->setStat(LLViewerStats::ST_LIGHTING_DETAIL, (F64)gSavedSettings.getS32("RenderLightingDetail"));
+	LLViewerStats::getInstance()->setStat(LLViewerStats::ST_LIGHTING_DETAIL, (F64)gPipeline.getLightingDetail());
 	LLViewerStats::getInstance()->setStat(LLViewerStats::ST_DRAW_DIST, (F64)gSavedSettings.getF32("RenderFarClip"));
 	LLViewerStats::getInstance()->setStat(LLViewerStats::ST_CHAT_BUBBLES, (F64)gSavedSettings.getBOOL("UseChatBubbles"));
 #if 0 // 1.9.2
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index eeca8891c13f65bca06613d343415add2ffb1075..0ad54f238e537248adadc8d6909b28ffa7143f6b 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -808,7 +808,7 @@ void LLViewerTexture::generateGLTexture()
 LLImageGL* LLViewerTexture::getGLTexture() const
 {
 	llassert(mGLTexturep.notNull()) ;
-	
+
 	return mGLTexturep ;
 }
 
@@ -1484,53 +1484,62 @@ void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height)
 void LLViewerFetchedTexture::processTextureStats()
 {
 	if(mFullyLoaded)
-	{
-		if(mDesiredDiscardLevel <= mMinDesiredDiscardLevel)//already loaded
+	{		
+		if(mDesiredDiscardLevel > mMinDesiredDiscardLevel)//need to load more
 		{
-			return ;
+			mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ;
+			mFullyLoaded = FALSE ;
 		}
-		mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ;
-		mFullyLoaded = FALSE ;
-		return ;
-	}
-
-	updateVirtualSize() ;
-	
-	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
-	
-	if (textures_fullres)
-	{
-		mDesiredDiscardLevel = 0;
-	}
-	else if(!mFullWidth || !mFullHeight)
-	{
-		mDesiredDiscardLevel = 	getMaxDiscardLevel() ;
 	}
 	else
-	{	
-		if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)
+	{
+		updateVirtualSize() ;
+		
+		static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
+		
+		if (textures_fullres)
+		{
+			mDesiredDiscardLevel = 0;
+		}
+		else if(!mFullWidth || !mFullHeight)
 		{
-			if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
+			mDesiredDiscardLevel = 	getMaxDiscardLevel() ;
+		}
+		else
+		{	
+			if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)
 			{
-				mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
+				if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
+				{
+					mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
+				}
+				else
+				{
+					mDesiredDiscardLevel = 0;
+				}
 			}
-			else
+			else if(mKnownDrawSizeChanged)//known draw size is set
+			{			
+				mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2, 
+													 log((F32)mFullHeight / mKnownDrawHeight) / log_2) ;
+				mDesiredDiscardLevel = 	llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ;
+				mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ;
+			}
+			mKnownDrawSizeChanged = FALSE ;
+		
+			if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel))
 			{
-				mDesiredDiscardLevel = 0;
+				mFullyLoaded = TRUE ;
 			}
 		}
-		else if(mKnownDrawSizeChanged)//known draw size is set
-		{			
-			mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2, 
-					                             log((F32)mFullHeight / mKnownDrawHeight) / log_2) ;
-			mDesiredDiscardLevel = 	llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ;
-			mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ;
-		}
-		mKnownDrawSizeChanged = FALSE ;
-		
-		if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel))
+	}
+
+	if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0) //force to refetch the texture.
+	{
+		mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ;
+		if(getDiscardLevel() < 0 || getDiscardLevel() > mDesiredDiscardLevel)
 		{
-			mFullyLoaded = TRUE ;
+			mFullyLoaded = FALSE ;
 		}
 	}
 }
@@ -1713,6 +1722,11 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority)
 	llassert(!mInImageList); 
     
 	mDecodePriority = priority;
+
+	if(mDecodePriority < F_ALMOST_ZERO)
+	{
+		mStopFetchingTimer.reset() ;
+	}
 }
 
 void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority)
@@ -1904,7 +1918,12 @@ bool LLViewerFetchedTexture::updateFetch()
 // 				llinfos << "Calling updateRequestPriority() with decode_priority = 0.0f" << llendl;
 // 				calcDecodePriority();
 // 			}
-			LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority);
+			static const F32 MAX_HOLD_TIME = 5.0f ; //seconds to wait before canceling fecthing if decode_priority is 0.f.
+			if(decode_priority > 0.0f || mStopFetchingTimer.getElapsedTimeF32() > MAX_HOLD_TIME)
+			{
+				mStopFetchingTimer.reset() ;
+				LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority);
+			}
 		}
 	}
 
@@ -2064,6 +2083,36 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call
 	}
 }
 
+void LLViewerFetchedTexture::clearCallbackEntryList()
+{
+	if(mLoadedCallbackList.empty())
+	{
+		return ;
+	}
+
+	for(callback_list_t::iterator iter = mLoadedCallbackList.begin();
+			iter != mLoadedCallbackList.end(); )
+	{
+		LLLoadedCallbackEntry *entryp = *iter;
+			
+		// We never finished loading the image.  Indicate failure.
+		// Note: this allows mLoadedCallbackUserData to be cleaned up.
+		entryp->mCallback(FALSE, this, NULL, NULL, 0, TRUE, entryp->mUserData);
+		iter = mLoadedCallbackList.erase(iter) ;
+		delete entryp;
+	}
+	gTextureList.mCallbackList.erase(this);
+		
+	mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1;
+	mLoadedCallbackDesiredDiscardLevel = S8_MAX ;
+	if(mForceToSaveRawImage)
+	{
+		destroySavedRawImage() ;
+	}
+
+	return ;
+}
+
 void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::source_callback_list_t* callback_list)
 {
 	if(mLoadedCallbackList.empty() || !callback_list)
@@ -2071,7 +2120,7 @@ void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::so
 		return ;
 	}
 
-	S32 desired_discard = INVALID_DISCARD_LEVEL ;
+	S32 desired_discard = S8_MAX ;
 	S32 desired_raw_discard = INVALID_DISCARD_LEVEL ;
 	for(callback_list_t::iterator iter = mLoadedCallbackList.begin();
 			iter != mLoadedCallbackList.end(); )
@@ -2125,7 +2174,7 @@ void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::so
 void LLViewerFetchedTexture::unpauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list)
 {
 	if(!callback_list)
-	{
+{
 		mPauseLoadedCallBacks = FALSE ;
 		return ;
 	}
@@ -2154,7 +2203,7 @@ void LLViewerFetchedTexture::unpauseLoadedCallbacks(const LLLoadedCallbackEntry:
 void LLViewerFetchedTexture::pauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list)
 {
 	if(!callback_list)
-	{
+{
 		return ;
 	}
 
@@ -2641,6 +2690,12 @@ void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard, bool from_
 }
 void LLViewerFetchedTexture::destroySavedRawImage()
 {
+	clearCallbackEntryList() ;
+	//if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0 && mDesiredSavedRawDiscardLevel < getDiscardLevel())
+	//{
+	//	return ; //can not destroy the saved raw image before it is fully fetched, otherwise causing callbacks hanging there.
+	//}
+
 	mSavedRawImage = NULL ;
 	mForceToSaveRawImage  = FALSE ;
 	mSavedRawDiscardLevel = -1 ;
@@ -2891,7 +2946,7 @@ BOOL LLViewerLODTexture::isUpdateFrozen()
 void LLViewerLODTexture::processTextureStats()
 {
 	updateVirtualSize() ;
-
+	
 	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
 	
 	if (textures_fullres)
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index b8bdeedd0325e3cab3c23c89285e60f6f71683d5..7cb8bea4c8f91c419ac42d0e77a3f551b987b364 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -386,6 +386,7 @@ public:
 	void unpauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list);
 	bool doLoadedCallbacks();
 	void deleteCallbackEntry(const LLLoadedCallbackEntry::source_callback_list_t* callback_list);
+	void clearCallbackEntryList() ;
 
 	void addToCreateTexture();
 
@@ -556,6 +557,7 @@ protected:
 
 	// Timers
 	LLFrameTimer mLastPacketTimer;		// Time since last packet.
+	LLFrameTimer mStopFetchingTimer;	// Time since mDecodePriority == 0.f.
 
 	BOOL  mInImageList;				// TRUE if image is in list (in which case don't reset priority!)
 	BOOL  mNeedsCreateTexture;	
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 2981dc8c829e56efd737f5f393c961936fb28c65..13db913f605255feff69c80d6d26e85d73311389 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1342,7 +1342,7 @@ LLViewerWindow::LLViewerWindow(
 		gSavedSettings.getBOOL("DisableVerticalSync"),
 		!gNoRender,
 		ignore_pixel_depth,
-		gSavedSettings.getU32("RenderFSAASamples"));
+		0); //gSavedSettings.getU32("RenderFSAASamples"));
 
 	if (!LLAppViewer::instance()->restoreErrorTrap())
 	{
@@ -2476,17 +2476,6 @@ void LLViewerWindow::updateUI()
 	// only update mouse hover set when UI is visible (since we shouldn't send hover events to invisible UI
 	if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
 	{
-		// include all ancestors of captor_view as automatically having mouse
-		if (captor_view)
-		{
-			LLView* captor_parent_view = captor_view->getParent();
-			while(captor_parent_view)
-			{
-				mouse_hover_set.insert(captor_parent_view->getHandle());
-				captor_parent_view = captor_parent_view->getParent();
-			}
-		}
-
 		// aggregate visible views that contain mouse cursor in display order
 		LLPopupView::popup_list_t popups = mPopupView->getCurrentPopups();
 
@@ -3812,140 +3801,6 @@ void LLViewerWindow::playSnapshotAnimAndSound()
 BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type)
 {
 	return rawSnapshot(raw, preview_width, preview_height, FALSE, FALSE, show_ui, do_rebuild, type);
-	
-	// *TODO below code was broken in deferred pipeline
-	/*
-	if ((!raw) || preview_width < 10 || preview_height < 10)
-	{
-		return FALSE;
-	}
-
-	if(gResizeScreenTexture) //the window is resizing
-	{
-		return FALSE ;
-	}
-
-	setCursor(UI_CURSOR_WAIT);
-
-	// Hide all the UI widgets first and draw a frame
-	BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI);
-
-	if ( prev_draw_ui != show_ui)
-	{
-		LLPipeline::toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI);
-	}
-
-	BOOL hide_hud = !gSavedSettings.getBOOL("RenderHUDInSnapshot") && LLPipeline::sShowHUDAttachments;
-	if (hide_hud)
-	{
-		LLPipeline::sShowHUDAttachments = FALSE;
-	}
-
-	S32 render_name = gSavedSettings.getS32("RenderName");
-	gSavedSettings.setS32("RenderName", 0);
-	LLVOAvatar::updateFreezeCounter(1) ; //pause avatar updating for one frame
-	
-	S32 w = preview_width ;
-	S32 h = preview_height ;
-	LLVector2 display_scale = mDisplayScale ;
-	mDisplayScale.setVec((F32)w / mWindowRectRaw.getWidth(), (F32)h / mWindowRectRaw.getHeight()) ;
-	LLRect window_rect = mWindowRectRaw;
-	mWindowRectRaw.set(0, h, w, 0);
-	
-	gDisplaySwapBuffers = FALSE;
-	gDepthDirty = TRUE;
-	glClearColor(0.f, 0.f, 0.f, 0.f);
-	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-	setup3DRender();
-
-	LLFontGL::setFontDisplay(FALSE) ;
-	LLHUDText::setDisplayText(FALSE) ;
-	if (type == SNAPSHOT_TYPE_OBJECT_ID)
-	{
-		gObjectList.renderPickList(gViewerWindow->getWindowRectScaled(), FALSE, FALSE);
-	}
-	else
-	{
-		display(do_rebuild, 1.0f, 0, TRUE);
-		render_ui();
-	}
-
-	S32 glformat, gltype, glpixel_length ;
-	if(SNAPSHOT_TYPE_DEPTH == type)
-	{
-		glpixel_length = 4 ;
-		glformat = GL_DEPTH_COMPONENT ; 
-		gltype = GL_FLOAT ;
-	}
-	else
-	{
-		glpixel_length = 3 ;
-		glformat = GL_RGB ;
-		gltype = GL_UNSIGNED_BYTE ;
-	}
-
-	raw->resize(w, h, glpixel_length);
-	glReadPixels(0, 0, w, h, glformat, gltype, raw->getData());
-
-	if(SNAPSHOT_TYPE_DEPTH == type)
-	{
-		LLViewerCamera* camerap = LLViewerCamera::getInstance();
-		F32 depth_conversion_factor_1 = (camerap->getFar() + camerap->getNear()) / (2.f * camerap->getFar() * camerap->getNear());
-		F32 depth_conversion_factor_2 = (camerap->getFar() - camerap->getNear()) / (2.f * camerap->getFar() * camerap->getNear());
-
-		//calculate the depth 
-		for (S32 y = 0 ; y < h ; y++)
-		{
-			for(S32 x = 0 ; x < w ; x++)
-			{
-				S32 i = (w * y + x) << 2 ;
-				
-				F32 depth_float_i = *(F32*)(raw->getData() + i);
-				
-				F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float_i * depth_conversion_factor_2));
-				U8 depth_byte = F32_to_U8(linear_depth_float, camerap->getNear(), camerap->getFar());
-				*(raw->getData() + i + 0) = depth_byte;
-				*(raw->getData() + i + 1) = depth_byte;
-				*(raw->getData() + i + 2) = depth_byte;
-				*(raw->getData() + i + 3) = 255;
-			}
-		}		
-	}
-
-	LLFontGL::setFontDisplay(TRUE) ;
-	LLHUDText::setDisplayText(TRUE) ;
-	mDisplayScale.setVec(display_scale) ;
-	mWindowRectRaw = window_rect;	
-	setup3DRender();
-	gDisplaySwapBuffers = FALSE;
-	gDepthDirty = TRUE;
-
-	// POST SNAPSHOT
-	if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
-	{
-		LLPipeline::toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI);
-	}
-
-	if (hide_hud)
-	{
-		LLPipeline::sShowHUDAttachments = TRUE;
-	}
-
-	setCursor(UI_CURSOR_ARROW);
-
-	if (do_rebuild)
-	{
-		// If we had to do a rebuild, that means that the lists of drawables to be rendered
-		// was empty before we started.
-		// Need to reset these, otherwise we call state sort on it again when render gets called the next time
-		// and we stand a good chance of crashing on rebuild because the render drawable arrays have multiple copies of
-		// objects on them.
-		gPipeline.resetDrawOrders();
-	}
-	
-	gSavedSettings.setS32("RenderName", render_name);	
-	
-	return TRUE;*/
 }
 
 // Saves the image from the screen to the specified filename and path.
@@ -4590,23 +4445,26 @@ void LLViewerWindow::restartDisplay(BOOL show_progress_bar)
 
 BOOL LLViewerWindow::changeDisplaySettings(LLCoordScreen size, BOOL disable_vsync, BOOL show_progress_bar)
 {
-	BOOL was_maximized = gSavedSettings.getBOOL("WindowMaximized");
+	//BOOL was_maximized = gSavedSettings.getBOOL("WindowMaximized");
 
 	//gResizeScreenTexture = TRUE;
 
-	U32 fsaa = gSavedSettings.getU32("RenderFSAASamples");
-	U32 old_fsaa = mWindow->getFSAASamples();
+	//U32 fsaa = gSavedSettings.getU32("RenderFSAASamples");
+	//U32 old_fsaa = mWindow->getFSAASamples();
+
 	// if not maximized, use the request size
 	if (!mWindow->getMaximized())
 	{
 		mWindow->setSize(size);
 	}
 
-	if (fsaa == old_fsaa)
+	//if (fsaa == old_fsaa)
 	{
 		return TRUE;
 	}
 
+/*
+
 	// Close floaters that don't handle settings change
 	LLFloaterReg::hideInstance("snapshot");
 	
@@ -4622,13 +4480,13 @@ BOOL LLViewerWindow::changeDisplaySettings(LLCoordScreen size, BOOL disable_vsyn
 	LLCoordScreen old_pos;
 	mWindow->getSize(&old_size);
 
-	mWindow->setFSAASamples(fsaa);
+	//mWindow->setFSAASamples(fsaa);
 
 	result_first_try = mWindow->switchContext(false, size, disable_vsync);
 	if (!result_first_try)
 	{
 		// try to switch back
-		mWindow->setFSAASamples(old_fsaa);
+		//mWindow->setFSAASamples(old_fsaa);
 		result_second_try = mWindow->switchContext(false, old_size, disable_vsync);
 
 		if (!result_second_try)
@@ -4682,6 +4540,8 @@ BOOL LLViewerWindow::changeDisplaySettings(LLCoordScreen size, BOOL disable_vsyn
 	gFocusMgr.setKeyboardFocus(keyboard_focus);
 	
 	return success;
+
+	*/
 }
 
 F32	LLViewerWindow::getWorldViewAspectRatio() const
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 89ce889a618e7f8a9d7621a766cd473349cdec94..9af1198df1d9e5ec1362da718bf81bb2ed077c25 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -696,10 +696,8 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 		mBakedTextureDatas[i].mTextureIndex = LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)i);
 	}
 
-	mDirtyMesh = TRUE;	// Dirty geometry, need to regenerate.
+	mDirtyMesh = 2;	// Dirty geometry, need to regenerate.
 	mMeshTexturesDirty = FALSE;
-	mShadow0Facep = NULL;
-	mShadow1Facep = NULL;
 	mHeadp = NULL;
 
 	mIsBuilt = FALSE;
@@ -735,12 +733,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 
 	mRippleTimeLast = 0.f;
 
-	mShadowImagep = LLViewerTextureManager::getFetchedTextureFromFile("foot_shadow.j2c");
-	
-	// GL NOT ACTIVE HERE
-	//gGL.getTexUnit(0)->bind(mShadowImagep.get());
-	//mShadowImagep->setAddressMode(LLTexUnit::TAM_CLAMP);
-	
 	mInAir = FALSE;
 
 	mStepOnLand = TRUE;
@@ -1969,7 +1961,7 @@ void LLVOAvatar::updateMeshData()
 			}
 			if(num_vertices < 1)//skip empty meshes
 			{
-				break ;
+				continue ;
 			}
 			if(last_v_num > 0)//put the last inserted part into next vertex buffer.
 			{
@@ -1991,6 +1983,8 @@ void LLVOAvatar::updateMeshData()
 			// resize immediately
 			facep->setSize(num_vertices, num_indices);
 
+			bool terse_update = false;
+
 			if(facep->mVertexBuffer.isNull())
 			{
 				facep->mVertexBuffer = new LLVertexBufferAvatar();
@@ -1998,8 +1992,16 @@ void LLVOAvatar::updateMeshData()
 			}
 			else
 			{
+				if (facep->mVertexBuffer->getRequestedIndices() == num_indices &&
+					facep->mVertexBuffer->getRequestedVerts() == num_vertices)
+				{
+					terse_update = true;
+				}
+				else
+				{
 				facep->mVertexBuffer->resizeBuffer(num_vertices, num_indices) ;
 			}
+			}
 		
 			facep->setGeomIndex(0);
 			facep->setIndicesIndex(0);
@@ -2013,7 +2015,7 @@ void LLVOAvatar::updateMeshData()
 
 			for(S32 k = j ; k < part_index ; k++)
 			{
-				mMeshLOD[k]->updateFaceData(facep, mAdjustedPixelArea, k == MESH_ID_HAIR);
+				mMeshLOD[k]->updateFaceData(facep, mAdjustedPixelArea, k == MESH_ID_HAIR, terse_update);
 			}
 
 			stop_glerror();
@@ -2423,12 +2425,6 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
 	LLJoint::sNumUpdates = 0;
 	LLJoint::sNumTouches = 0;
 
-	// *NOTE: this is necessary for the floating name text above your head.
-	if (mDrawable.notNull())
-	{
-		gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_SHADOW, TRUE);
-	}
-
 	BOOL visible = isVisible() || mNeedsAnimUpdate;
 
 	// update attachments positions
@@ -2751,7 +2747,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 {
 	// update chat bubble
 	//--------------------------------------------------------------------
-	// draw text label over characters head
+	// draw text label over character's head
 	//--------------------------------------------------------------------
 	if (mChatTimer.getElapsedTimeF32() > BUBBLE_CHAT_TIME)
 	{
@@ -3781,13 +3777,20 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
 		return num_indices;
 	}
 
-	if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
+	LLFace* face = mDrawable->getFace(0);
+
+	bool needs_rebuild = !face || face->mVertexBuffer.isNull() || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY);
+
+	if (needs_rebuild || mDirtyMesh)
 	{	//LOD changed or new mesh created, allocate new vertex buffer if needed
+		if (needs_rebuild || mDirtyMesh >= 2 || mVisibilityRank <= 4)
+		{
 		updateMeshData();
-		mDirtyMesh = FALSE;
+			mDirtyMesh = 0;
 		mNeedsSkin = TRUE;
 		mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
 	}
+	}
 
 	if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) <= 0)
 	{
@@ -4034,54 +4037,6 @@ U32 LLVOAvatar::renderRigid()
 	return num_indices;
 }
 
-U32 LLVOAvatar::renderFootShadows()
-{
-	U32 num_indices = 0;
-
-	if (!mIsBuilt)
-	{
-		return 0;
-	}
-
-	if (isSelf() && (!gAgent.needsRenderAvatar() || !gAgent.needsRenderHead()))
-	{
-		return 0;
-	}
-	
-	if (!mIsBuilt)
-	{
-		return 0;
-	}
-	
-	// Don't render foot shadows if your lower body is completely invisible.
-	// (non-humanoid avatars rule!)
-	if (!isTextureVisible(TEX_LOWER_BAKED))
-	{
-		return 0;
-	}
-
-	// Update the shadow, tractor, and text label geometry.
-	if (mDrawable->isState(LLDrawable::REBUILD_SHADOW) && !isImpostor())
-	{
-		updateShadowFaces();
-		mDrawable->clearState(LLDrawable::REBUILD_SHADOW);
-	}
-
-	U32 foot_mask = LLVertexBuffer::MAP_VERTEX |
-					LLVertexBuffer::MAP_TEXCOORD0;
-
-	LLGLDepthTest test(GL_TRUE, GL_FALSE);
-	//render foot shadows
-	LLGLEnable blend(GL_BLEND);
-	gGL.getTexUnit(0)->bind(mShadowImagep, TRUE);
-	glColor4fv(mShadow0Facep->getRenderColor().mV);
-	mShadow0Facep->renderIndexed(foot_mask);
-	glColor4fv(mShadow1Facep->getRenderColor().mV);
-	mShadow1Facep->renderIndexed(foot_mask);
-	
-	return num_indices;
-}
-
 U32 LLVOAvatar::renderImpostor(LLColor4U color, S32 diffuse_channel)
 {
 	if (!mImpostor.isComplete())
@@ -4207,11 +4162,6 @@ void LLVOAvatar::updateTextures()
 	{
 		setDebugText(llformat("%4.0f:%4.0f", fsqrtf(mMinPixelArea),fsqrtf(mMaxPixelArea)));
 	}	
-	
-	if( render_avatar )
-	{
-		mShadowImagep->addTextureStats(mPixelArea);
-	}
 }
 
 
@@ -5478,7 +5428,7 @@ BOOL LLVOAvatar::updateJointLODs()
  		if (res)
 		{
 			sNumLODChangesThisFrame++;
-			dirtyMesh();
+			dirtyMesh(2);
 			return TRUE;
 		}
 	}
@@ -5502,18 +5452,9 @@ LLDrawable *LLVOAvatar::createDrawable(LLPipeline *pipeline)
 	mDrawable->addFace(poolp, NULL);
 	mDrawable->setRenderType(LLPipeline::RENDER_TYPE_AVATAR);
 	
-	LLFace *facep;
-
-	// Add faces for the foot shadows
-	facep = mDrawable->addFace((LLFacePool*) NULL, mShadowImagep);
-	mShadow0Facep = facep;
-
-	facep = mDrawable->addFace((LLFacePool*) NULL, mShadowImagep);
-	mShadow1Facep = facep;
-
 	mNumInitFaces = mDrawable->getNumFaces() ;
 
-	dirtyMesh();
+	dirtyMesh(2);
 	return mDrawable;
 }
 
@@ -5552,107 +5493,6 @@ BOOL LLVOAvatar::updateGeometry(LLDrawable *drawable)
 	return TRUE;
 }
 
-//-----------------------------------------------------------------------------
-// updateShadowFaces()
-//-----------------------------------------------------------------------------
-void LLVOAvatar::updateShadowFaces()
-{
-	LLFace *face0p = mShadow0Facep;
-	LLFace *face1p = mShadow1Facep;
-
-	//
-	// render avatar shadows
-	//
-	if (mInAir || mUpdatePeriod >= IMPOSTOR_PERIOD)
-	{
-		face0p->setSize(0, 0);
-		face1p->setSize(0, 0);
-		return;
-	}
-
-	LLSprite sprite(mShadowImagep.notNull() ? mShadowImagep->getID() : LLUUID::null);
-	sprite.setFollow(FALSE);
-	const F32 cos_angle = gSky.getSunDirection().mV[2];
-	F32 cos_elev = sqrt(1 - cos_angle * cos_angle);
-	if (cos_angle < 0) cos_elev = -cos_elev;
-	sprite.setSize(0.4f + cos_elev * 0.8f, 0.3f);
-	LLVector3 sun_vec = gSky.mVOSkyp ? gSky.mVOSkyp->getToSun() : LLVector3(0.f, 0.f, 0.f);
-
-	if (mShadowImagep->hasGLTexture())
-	{
-		LLVector3 normal;
-		LLVector3d shadow_pos;
-		LLVector3 shadow_pos_agent;
-		F32 foot_height;
-
-		if (mFootLeftp)
-		{
-			LLVector3 joint_world_pos = mFootLeftp->getWorldPosition();
-			// this only does a ray straight down from the foot, as our client-side ray-tracing is very limited now
-			// but we make an explicit ray trace call in expectation of future improvements
-			resolveRayCollisionAgent(gAgent.getPosGlobalFromAgent(joint_world_pos), 
-									 gAgent.getPosGlobalFromAgent(gSky.getSunDirection() + joint_world_pos), shadow_pos, normal);
-			shadow_pos_agent = gAgent.getPosAgentFromGlobal(shadow_pos);
-			foot_height = joint_world_pos.mV[VZ] - shadow_pos_agent.mV[VZ];
-
-			// Pull sprite in direction of surface normal
-			shadow_pos_agent += normal * SHADOW_OFFSET_AMT;
-
-			// Render sprite
-			sprite.setNormal(normal);
-			if (isSelf() && gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
-			{
-				sprite.setColor(0.f, 0.f, 0.f, 0.f);
-			}
-			else
-			{
-				sprite.setColor(0.f, 0.f, 0.f, clamp_rescale(foot_height, MIN_SHADOW_HEIGHT, MAX_SHADOW_HEIGHT, 0.5f, 0.f));
-			}
-			sprite.setPosition(shadow_pos_agent);
-
-			LLVector3 foot_to_knee = mKneeLeftp->getWorldPosition() - joint_world_pos;
-			//foot_to_knee.normalize();
-			foot_to_knee -= projected_vec(foot_to_knee, sun_vec);
-			sprite.setYaw(azimuth(sun_vec - foot_to_knee));
-		
-			sprite.updateFace(*face0p);
-		}
-
-		if (mFootRightp)
-		{
-			LLVector3 joint_world_pos = mFootRightp->getWorldPosition();
-			// this only does a ray straight down from the foot, as our client-side ray-tracing is very limited now
-			// but we make an explicit ray trace call in expectation of future improvements
-			resolveRayCollisionAgent(gAgent.getPosGlobalFromAgent(joint_world_pos), 
-									 gAgent.getPosGlobalFromAgent(gSky.getSunDirection() + joint_world_pos), shadow_pos, normal);
-			shadow_pos_agent = gAgent.getPosAgentFromGlobal(shadow_pos);
-			foot_height = joint_world_pos.mV[VZ] - shadow_pos_agent.mV[VZ];
-
-			// Pull sprite in direction of surface normal
-			shadow_pos_agent += normal * SHADOW_OFFSET_AMT;
-
-			// Render sprite
-			sprite.setNormal(normal);
-			if (isSelf() && gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
-			{
-				sprite.setColor(0.f, 0.f, 0.f, 0.f);
-			}
-			else
-			{
-				sprite.setColor(0.f, 0.f, 0.f, clamp_rescale(foot_height, MIN_SHADOW_HEIGHT, MAX_SHADOW_HEIGHT, 0.5f, 0.f));
-			}
-			sprite.setPosition(shadow_pos_agent);
-
-			LLVector3 foot_to_knee = mKneeRightp->getWorldPosition() - joint_world_pos;
-			//foot_to_knee.normalize();
-			foot_to_knee -= projected_vec(foot_to_knee, sun_vec);
-			sprite.setYaw(azimuth(sun_vec - foot_to_knee));
-	
-			sprite.updateFace(*face1p);
-		}
-	}
-}
-
 //-----------------------------------------------------------------------------
 // updateSexDependentLayerSets()
 //-----------------------------------------------------------------------------
@@ -5668,9 +5508,12 @@ void LLVOAvatar::updateSexDependentLayerSets( BOOL upload_bake )
 //-----------------------------------------------------------------------------
 void LLVOAvatar::dirtyMesh()
 {
-	mDirtyMesh = TRUE;
+	dirtyMesh(1);
+}
+void LLVOAvatar::dirtyMesh(S32 priority)
+{
+	mDirtyMesh = llmax(mDirtyMesh, priority);
 }
-
 //-----------------------------------------------------------------------------
 // hideSkirt()
 //-----------------------------------------------------------------------------
@@ -5704,6 +5547,7 @@ BOOL LLVOAvatar::setParent(LLViewerObject* parent)
 
 void LLVOAvatar::addChild(LLViewerObject *childp)
 {
+	childp->extractAttachmentItemID(); // find the inventory item this object is associated with.
 	LLViewerObject::addChild(childp);
 	if (childp->mDrawable)
 	{
@@ -5792,6 +5636,15 @@ BOOL LLVOAvatar::canAttachMoreObjects() const
 	return (getNumAttachments() < MAX_AGENT_ATTACHMENTS);
 }
 
+//-----------------------------------------------------------------------------
+// canAttachMoreObjects()
+// Returns true if we can attach <n> more objects.
+//-----------------------------------------------------------------------------
+BOOL LLVOAvatar::canAttachMoreObjects(U32 n) const
+{
+	return (getNumAttachments() + n) <= MAX_AGENT_ATTACHMENTS;
+}
+
 //-----------------------------------------------------------------------------
 // lazyAttach()
 //-----------------------------------------------------------------------------
@@ -6244,10 +6097,14 @@ void LLVOAvatar::updateMeshTextures()
 			// When an avatar is changing clothes and not in Appearance mode,
 			// use the last-known good baked texture until it finish the first
 			// render of the new layerset.
+
+			const BOOL layerset_invalid = !mBakedTextureDatas[i].mTexLayerSet 
+										  || !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()
+										  || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable();
+
 			use_lkg_baked_layer[i] = (!is_layer_baked[i] 
 									  && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) 
-									  && mBakedTextureDatas[i].mTexLayerSet 
-									  && !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized());
+									  && layerset_invalid);
 			if (use_lkg_baked_layer[i])
 			{
 				mBakedTextureDatas[i].mTexLayerSet->setUpdatesEnabled(TRUE);
@@ -7935,18 +7792,15 @@ BOOL LLVOAvatar::updateLOD()
 	BOOL res = updateJointLODs();
 
 	LLFace* facep = mDrawable->getFace(0);
-	if (facep->mVertexBuffer.isNull() ||
-		(LLVertexBuffer::sEnableVBOs &&
-		((facep->mVertexBuffer->getUsage() == GL_STATIC_DRAW ? TRUE : FALSE) !=
-		 (facep->getPool()->getVertexShaderLevel() > 0 ? TRUE : FALSE))))
+	if (facep->mVertexBuffer.isNull())
 	{
-		mDirtyMesh = TRUE;
+		dirtyMesh(2);
 	}
 
-	if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
+	if (mDirtyMesh >= 2 || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
 	{	//LOD changed or new mesh created, allocate new vertex buffer if needed
 		updateMeshData();
-		mDirtyMesh = FALSE;
+		mDirtyMesh = 0;
 		mNeedsSkin = TRUE;
 		mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
 	}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 0934f5df36d0ba5ebb247dd48b5d4c1681e152ef..6d9424c8beb4cf179cee13acf31f58ad08bcb517 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -336,7 +336,6 @@ private:
  **/
 
 public:
-	U32 		renderFootShadows();
 	U32 		renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
 	U32 		renderRigid();
 	U32 		renderSkinned(EAvatarRenderPass pass);
@@ -573,7 +572,8 @@ protected:
 	void 			releaseMeshData();
 	virtual void restoreMeshData();
 private:
-	BOOL 			mDirtyMesh;
+	void 			dirtyMesh(S32 priority); // Dirty the avatar mesh, with priority
+	S32 			mDirtyMesh; // 0 -- not dirty, 1 -- morphed, 2 -- LOD
 	BOOL			mMeshTexturesDirty;
 
 	typedef std::multimap<std::string, LLPolyMesh*> polymesh_map_t;
@@ -681,6 +681,7 @@ public:
 	void 				rebuildHUD();
 	void 				resetHUDAttachments();
 	BOOL				canAttachMoreObjects() const;
+	BOOL				canAttachMoreObjects(U32 n) const;
 protected:
 	U32					getNumAttachments() const; // O(N), not O(1)
 
@@ -1043,7 +1044,7 @@ protected: // Shared with LLVOAvatarSelf
  *******************************************************************************/
 
 }; // LLVOAvatar
+extern const F32 SELF_ADDITIONAL_PRI;
 extern const S32 MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL;
-extern const F32  SELF_ADDITIONAL_PRI;
 
 #endif // LL_VO_AVATAR_H
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index a28482b4de8ec8a5f01872fa8a1baf03313c984b..b6055d82e33ded221acccdbb6e33702243f6c92d 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1009,6 +1009,44 @@ BOOL LLVOAvatarSelf::isWearingAttachment(const LLUUID& inv_item_id) const
 	return FALSE;
 }
 
+//-----------------------------------------------------------------------------
+BOOL LLVOAvatarSelf::attachmentWasRequested(const LLUUID& inv_item_id) const
+{
+	const F32 REQUEST_EXPIRATION_SECONDS = 5.0;  // any request older than this is ignored/removed.
+	std::map<LLUUID,LLTimer>::iterator it = mAttachmentRequests.find(inv_item_id);
+	if (it != mAttachmentRequests.end())
+	{
+		const LLTimer& request_time = it->second;
+		F32 request_time_elapsed = request_time.getElapsedTimeF32();
+		if (request_time_elapsed > REQUEST_EXPIRATION_SECONDS)
+		{
+			mAttachmentRequests.erase(it);
+			return FALSE;
+		}
+		else
+		{
+			return TRUE;
+		}
+	}
+	else
+	{
+		return FALSE;
+	}
+}
+
+//-----------------------------------------------------------------------------
+void LLVOAvatarSelf::addAttachmentRequest(const LLUUID& inv_item_id)
+{
+	LLTimer current_time;
+	mAttachmentRequests[inv_item_id] = current_time;
+}
+
+//-----------------------------------------------------------------------------
+void LLVOAvatarSelf::removeAttachmentRequest(const LLUUID& inv_item_id)
+{
+	mAttachmentRequests.erase(inv_item_id);
+}
+
 //-----------------------------------------------------------------------------
 // getWornAttachment()
 //-----------------------------------------------------------------------------
@@ -1061,8 +1099,10 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 	// Should just be the last object added
 	if (attachment->isObjectAttached(viewer_object))
 	{
-		const LLUUID& attachment_id = viewer_object->getItemID();
+		const LLUUID& attachment_id = viewer_object->getAttachmentItemID();
 		LLAppearanceMgr::instance().registerAttachment(attachment_id);
+		// Clear any pending requests once the attachment arrives.
+		removeAttachmentRequest(attachment_id);
 	}
 
 	return attachment;
@@ -1071,7 +1111,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 //virtual
 BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 {
-	const LLUUID attachment_id = viewer_object->getItemID();
+	const LLUUID attachment_id = viewer_object->getAttachmentItemID();
 	if (LLVOAvatar::detachObject(viewer_object))
 	{
 		// the simulator should automatically handle permission revocation
@@ -1109,6 +1149,29 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 	return FALSE;
 }
 
+// static
+BOOL LLVOAvatarSelf::detachAttachmentIntoInventory(const LLUUID &item_id)
+{
+	LLInventoryItem* item = gInventory.getItem(item_id);
+	if (item)
+	{
+		gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv);
+		gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
+		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_id);
+		gMessageSystem->sendReliable(gAgent.getRegion()->getHost());
+		
+		// this object might have been selected, so let the selection manager know it's gone now
+		LLViewerObject *found_obj = gObjectList.findObject(item_id);
+		if (found_obj)
+		{
+			LLSelectMgr::getInstance()->remove(found_obj);
+		}
+		return TRUE;
+	}
+	return FALSE;
+}
+
 U32 LLVOAvatarSelf::getNumWearables(LLVOAvatarDefines::ETextureIndex i) const
 {
 	LLWearableType::EType type = LLVOAvatarDictionary::getInstance()->getTEWearableType(i);
@@ -1619,15 +1682,15 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te
 					if (isSelf())
 					{
 						if (gAgentAvatarp->isUsingBakedTextures())
-						{
-							requestLayerSetUpdate(type);
-						}
+					{
+						requestLayerSetUpdate(type);
+					}
 						else
-						{
-							LLVisualParamHint::requestHintUpdates();
-						}
+					{
+						LLVisualParamHint::requestHintUpdates();
 					}
 				}
+				}
 				else
 				{					
 					tex->setLoadedCallback(onLocalTextureLoaded, desired_discard, TRUE, FALSE, new LLAvatarTexData(getID(), type), NULL);
@@ -2139,6 +2202,11 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid )
 
 void LLVOAvatarSelf::outputRezDiagnostics() const
 {
+	if(!gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime"))
+	{
+		return ;
+	}
+
 	const F32 final_time = mDebugSelfLoadTimer.getElapsedTimeF32();
 	llinfos << "REZTIME: Myself rez stats:" << llendl;
 	llinfos << "\t Time from avatar creation to load wearables: " << (S32)mDebugTimeWearablesLoaded << llendl;
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 02d0a28f46ffe68b8495d50d70655812ffaa6b46..eb2475f666022181efc42456a912c95e15b03a54 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -285,10 +285,18 @@ protected:
 public:
 	void 				updateAttachmentVisibility(U32 camera_mode);
 	BOOL 				isWearingAttachment(const LLUUID& inv_item_id) const;
+	BOOL				attachmentWasRequested(const LLUUID& inv_item_id) const;
+	void				addAttachmentRequest(const LLUUID& inv_item_id);
+	void				removeAttachmentRequest(const LLUUID& inv_item_id);
 	LLViewerObject* 	getWornAttachment(const LLUUID& inv_item_id);
 	const std::string   getAttachedPointName(const LLUUID& inv_item_id) const;
 	/*virtual*/ const LLViewerJointAttachment *attachObject(LLViewerObject *viewer_object);
 	/*virtual*/ BOOL 	detachObject(LLViewerObject *viewer_object);
+	static BOOL			detachAttachmentIntoInventory(const LLUUID& item_id);
+
+private:
+	// Track attachments that have been requested but have not arrived yet.
+	mutable std::map<LLUUID,LLTimer> mAttachmentRequests;
 
 	//--------------------------------------------------------------------
 	// HUDs
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index a649c19014386fc87b01da308b892195163ef478..7ae8c2c07d93c8cff8ea54f5c4110dd02385e5e2 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -969,7 +969,10 @@ void LLVOSky::calcAtmospherics(void)
 		}
 
 		temp2.mV[1] = llmax(0.f, lighty);
-		temp2.mV[1] = 1.f / temp2.mV[1];
+		if(temp2.mV[1] > 0.f)
+		{
+			temp2.mV[1] = 1.f / temp2.mV[1];
+		}
 		componentMultBy(sunlight, componentExp((light_atten * -1.f) * temp2.mV[1]));
 
 		// Distance
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 3e0c65abffe87f1610d1bd0df45977bacd68152b..37a974be284ebe0e34107552189a247ef688ae3d 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -442,22 +442,35 @@ void LLVOTree::render(LLAgent &agent)
 
 void LLVOTree::setPixelAreaAndAngle(LLAgent &agent)
 {
-	// First calculate values as for any other object (for mAppAngle)
-	LLViewerObject::setPixelAreaAndAngle(agent);
-
-	// Re-calculate mPixelArea accurately
+	LLVector3 center = getPositionAgent();//center of tree.
+	LLVector3 viewer_pos_agent = gAgentCamera.getCameraPositionAgent();
+	LLVector3 lookAt = center - viewer_pos_agent;
+	F32 dist = lookAt.normVec() ;	
+	F32 cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ;	
 	
-	// This should be the camera's center, as soon as we move to all region-local.
-	LLVector3 relative_position = getPositionAgent() - gAgentCamera.getCameraPositionAgent();
-	F32 range_squared = relative_position.lengthSquared() ;				
+	F32 range = dist - getMinScale()/2;
+	if (range < F_ALMOST_ZERO || isHUDAttachment())		// range == zero
+	{
+		mAppAngle = 180.f;
+	}
+	else
+	{
+		mAppAngle = (F32) atan2( getMaxScale(), range) * RAD_TO_DEG;		
+	}
 
 	F32 max_scale = mBillboardScale * getMaxScale();
 	F32 area = max_scale * (max_scale*mBillboardRatio);
-
 	// Compute pixels per meter at the given range
-	F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() / tan(LLViewerCamera::getInstance()->getView());
+	F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() / (tan(LLViewerCamera::getInstance()->getView()) * dist);
+	mPixelArea = pixels_per_meter * pixels_per_meter * area ;	
+
+	F32 importance = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ;
+	mPixelArea = LLFace::adjustPixelArea(importance, mPixelArea) ;
+	if (mPixelArea > LLViewerCamera::getInstance()->getScreenPixelArea())
+	{
+		mAppAngle = 180.f;
+	}
 
-	mPixelArea = (pixels_per_meter) * (pixels_per_meter) * area / range_squared;
 #if 0
 	// mAppAngle is a bit of voodoo;
 	// use the one calculated LLViewerObject::setPixelAreaAndAngle above
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 4e3be0f703b53dcaefdbd416a7f59c7837796e58..761e12020bb3ed36776c6acb351a08a4a32d0fa2 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -87,8 +87,14 @@ static LLFastTimer::DeclareTimer FTM_GEN_VOLUME("Generate Volumes");
 class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
 {
 public:
-	LLMediaDataClientObjectImpl(LLVOVolume *obj, bool isNew) : mObject(obj), mNew(isNew) {}
-	LLMediaDataClientObjectImpl() { mObject = NULL; }
+	LLMediaDataClientObjectImpl(LLVOVolume *obj, bool isNew) : mObject(obj), mNew(isNew) 
+	{
+		mObject->addMDCImpl();
+	}
+	~LLMediaDataClientObjectImpl()
+	{
+		mObject->removeMDCImpl();
+	}
 	
 	virtual U8 getMediaDataCount() const 
 		{ return mObject->getNumTEs(); }
@@ -113,6 +119,18 @@ public:
 			}
 			return result;
 		}
+	virtual bool isCurrentMediaUrl(U8 index, const std::string &url) const
+		{
+			LLTextureEntry *te = mObject->getTE(index); 
+			if (te)
+			{
+				if (te->getMediaData())
+				{
+					return (te->getMediaData()->getCurrentURL() == url);
+				}
+			}
+			return url.empty();
+		}
 
 	virtual LLUUID getID() const
 		{ return mObject->getID(); }
@@ -187,6 +205,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re
 	mMediaImplList.resize(getNumTEs());
 	mLastFetchedMediaVersion = -1;
 	mIndexInTex = 0;
+	mMDCImplCount = 0;
 }
 
 LLVOVolume::~LLVOVolume()
@@ -212,9 +231,12 @@ void LLVOVolume::markDead()
 {
 	if (!mDead)
 	{
-		LLMediaDataClientObject::ptr_t obj = new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this), false);
-		if (sObjectMediaClient) sObjectMediaClient->removeFromQueue(obj);
-		if (sObjectMediaNavigateClient) sObjectMediaNavigateClient->removeFromQueue(obj);
+		if(getMDCImplCount() > 0)
+		{
+			LLMediaDataClientObject::ptr_t obj = new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this), false);
+			if (sObjectMediaClient) sObjectMediaClient->removeFromQueue(obj);
+			if (sObjectMediaNavigateClient) sObjectMediaNavigateClient->removeFromQueue(obj);
+		}
 		
 		// Detach all media impls from this object
 		for(U32 i = 0 ; i < mMediaImplList.size() ; i++)
@@ -2019,12 +2041,12 @@ void LLVOVolume::mediaNavigated(LLViewerMediaImpl *impl, LLPluginClassMedia* plu
 	}
 	else
 	{
-		llwarns << "Couldn't find media entry!" << llendl;
+		LL_WARNS("MediaOnAPrim") << "Couldn't find media entry!" << LL_ENDL;
 	}
 						
 	if(block_navigation)
 	{
-		llinfos << "blocking navigate to URI " << new_location << llendl;
+		LL_INFOS("MediaOnAPrim") << "blocking navigate to URI " << new_location << LL_ENDL;
 
 		// "bounce back" to the current URL from the media entry
 		mediaNavigateBounceBack(face_index);
@@ -2032,7 +2054,7 @@ void LLVOVolume::mediaNavigated(LLViewerMediaImpl *impl, LLPluginClassMedia* plu
 	else if (sObjectMediaNavigateClient)
 	{
 		
-		llinfos << "broadcasting navigate with URI " << new_location << llendl;
+		LL_DEBUGS("MediaOnAPrim") << "broadcasting navigate with URI " << new_location << LL_ENDL;
 
 		sObjectMediaNavigateClient->navigate(new LLMediaDataClientObjectImpl(this, false), face_index, new_location);
 	}
@@ -2054,14 +2076,19 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin,
 				}
 				break;
 				
+				case LLViewerMediaImpl::MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS:
+					// This navigate didn't change the current URL.  
+					LL_DEBUGS("MediaOnAPrim") << "	NOT broadcasting navigate (spurious)" << LL_ENDL;
+				break;
+				
 				case LLViewerMediaImpl::MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED:
 					// This is the first location changed event after the start of a server-directed nav.  Don't broadcast it.
-					llinfos << "	NOT broadcasting navigate (server-directed)" << llendl;
+					LL_INFOS("MediaOnAPrim") << "	NOT broadcasting navigate (server-directed)" << LL_ENDL;
 				break;
 				
 				default:
 					// This is a subsequent location-changed due to a redirect.	 Don't broadcast.
-					llinfos << "	NOT broadcasting navigate (redirect)" << llendl;
+					LL_INFOS("MediaOnAPrim") << "	NOT broadcasting navigate (redirect)" << LL_ENDL;
 				break;
 			}
 		}
@@ -2078,9 +2105,14 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin,
 				}
 				break;
 				
+				case LLViewerMediaImpl::MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS:
+					// This navigate didn't change the current URL.  
+					LL_DEBUGS("MediaOnAPrim") << "	NOT broadcasting navigate (spurious)" << LL_ENDL;
+				break;
+
 				case LLViewerMediaImpl::MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED:
 					// This is the the navigate complete event from a server-directed nav.  Don't broadcast it.
-					llinfos << "	NOT broadcasting navigate (server-directed)" << llendl;
+					LL_INFOS("MediaOnAPrim") << "	NOT broadcasting navigate (server-directed)" << LL_ENDL;
 				break;
 				
 				default:
@@ -2454,6 +2486,17 @@ void LLVOVolume::updateSpotLightPriority()
 }
 
 
+bool LLVOVolume::isLightSpotlight() const
+{
+	LLLightImageParams* params = (LLLightImageParams*) getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE);
+	if (params)
+	{
+		return params->isLightSpotlight();
+	}
+	return false;
+}
+
+
 LLViewerTexture* LLVOVolume::getLightTexture()
 {
 	LLUUID id = getLightTextureID();
@@ -2913,9 +2956,7 @@ F32 LLVOVolume::getBinRadius()
 		{
 			LLFace* face = mDrawable->getFace(i);
 			if (face->getPoolType() == LLDrawPool::POOL_ALPHA &&
-				(!LLPipeline::sFastAlpha || 
-				face->getFaceColor().mV[3] != 1.f ||
-				!face->getTexture()->getIsAlphaMask()))
+			    !face->canRenderAsMask())
 			{
 				alpha_wrap = TRUE;
 				break;
@@ -3191,11 +3232,10 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
 
 	S32 idx = draw_vec.size()-1;
 
-
 	BOOL fullbright = (type == LLRenderPass::PASS_FULLBRIGHT) ||
-					  (type == LLRenderPass::PASS_INVISIBLE) ||
-					  (type == LLRenderPass::PASS_ALPHA ? facep->isState(LLFace::FULLBRIGHT) : FALSE);
-
+		(type == LLRenderPass::PASS_INVISIBLE) ||
+		(type == LLRenderPass::PASS_ALPHA && facep->isState(LLFace::FULLBRIGHT));
+	
 	if (!fullbright && type != LLRenderPass::PASS_GLOW && !facep->mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL))
 	{
 		llwarns << "Non fullbright face has no normals!" << llendl;
@@ -3220,16 +3260,12 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
 		model_mat = &(drawable->getRegion()->mRenderMatrix);
 	}
 
-	U8 bump = (type == LLRenderPass::PASS_BUMP ? facep->getTextureEntry()->getBumpmap() : 0);
+
+	U8 bump = (type == LLRenderPass::PASS_BUMP || type == LLRenderPass::PASS_POST_BUMP) ? facep->getTextureEntry()->getBumpmap() : 0;
 	
 	LLViewerTexture* tex = facep->getTexture();
 
-	U8 glow = 0;
-		
-	if (type == LLRenderPass::PASS_GLOW)
-	{
-		glow = (U8) (facep->getTextureEntry()->getGlow() * 255);
-	}
+	U8 glow = (U8) (facep->getTextureEntry()->getGlow() * 255);
 
 	if (facep->mVertexBuffer.isNull())
 	{
@@ -3294,6 +3330,7 @@ void LLVolumeGeometryManager::getGeometry(LLSpatialGroup* group)
 static LLFastTimer::DeclareTimer FTM_REBUILD_VOLUME_VB("Volume");
 static LLFastTimer::DeclareTimer FTM_REBUILD_VBO("VBO Rebuilt");
 
+
 void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 {
 	if (group->changeLOD())
@@ -3419,10 +3456,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 
 				if (type == LLDrawPool::POOL_ALPHA)
 				{
-					if (LLPipeline::sFastAlpha &&
-					    (te->getColor().mV[VW] == 1.0f) &&
-					    (!te->getFullbright()) && // hack: alpha masking renders fullbright faces invisible, need to figure out why - for now, avoid
-					    facep->getTexture()->getIsAlphaMask())
+					if (facep->canRenderAsMask())
 					{ //can be treated as alpha mask
 						simple_faces.push_back(facep);
 					}
@@ -3524,6 +3558,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 }
 
 static LLFastTimer::DeclareTimer FTM_VOLUME_GEOM("Volume Geometry");
+static LLFastTimer::DeclareTimer FTM_VOLUME_GEOM_PARTIAL("Terse Rebuild");
+
 void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
 {
 	llassert(group);
@@ -3536,6 +3572,7 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
 		
 		for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)
 		{
+			LLFastTimer t(FTM_VOLUME_GEOM_PARTIAL);
 			LLDrawable* drawablep = *drawable_iter;
 
 			if (drawablep->isDead() || drawablep->isState(LLDrawable::FORCE_INVISIBLE) )
@@ -3763,15 +3800,12 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 
 			const LLTextureEntry* te = facep->getTextureEntry();
 
-			BOOL is_alpha = facep->getPoolType() == LLDrawPool::POOL_ALPHA ? TRUE : FALSE;
+			BOOL is_alpha = (facep->getPoolType() == LLDrawPool::POOL_ALPHA) ? TRUE : FALSE;
 		
 			if (is_alpha)
 			{
 				// can we safely treat this as an alpha mask?
-				if (LLPipeline::sFastAlpha &&
-				    (te->getColor().mV[VW] == 1.0f) &&
-				    (!te->getFullbright()) && // hack: alpha masking renders fullbright faces invisible, need to figure out why - for now, avoid
-				    facep->getTexture()->getIsAlphaMask())
+				if (facep->canRenderAsMask())
 				{
 					if (te->getFullbright())
 					{
@@ -3796,66 +3830,76 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 				&& group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD 
 				&& LLPipeline::sRenderBump 
 				&& te->getShiny())
-			{
+			{ //shiny
 				if (tex->getPrimaryFormat() == GL_ALPHA)
-				{
+				{ //invisiprim+shiny
 					registerFace(group, facep, LLRenderPass::PASS_INVISI_SHINY);
 					registerFace(group, facep, LLRenderPass::PASS_INVISIBLE);
 				}
 				else if (LLPipeline::sRenderDeferred)
-				{
-					if (te->getBumpmap())
-					{
-						registerFace(group, facep, LLRenderPass::PASS_BUMP);
-					}
-					else if (te->getFullbright())
-					{
+				{ //deferred rendering
+					if (te->getFullbright())
+					{ //register in post deferred fullbright shiny pass
 						registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT_SHINY);
+						if (te->getBumpmap())
+						{ //register in post deferred bump pass
+							registerFace(group, facep, LLRenderPass::PASS_POST_BUMP);
+						}
+					}
+					else if (te->getBumpmap())
+					{ //register in deferred bump pass
+						registerFace(group, facep, LLRenderPass::PASS_BUMP);
 					}
 					else
-					{
+					{ //register in deferred simple pass (deferred simple includes shiny)
 						llassert(mask & LLVertexBuffer::MAP_NORMAL);
 						registerFace(group, facep, LLRenderPass::PASS_SIMPLE);
 					}
 				}
 				else if (fullbright)
-				{						
+				{	//not deferred, register in standard fullbright shiny pass					
 					registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT_SHINY);
 				}
 				else
-				{
+				{ //not deferred or fullbright, register in standard shiny pass
 					registerFace(group, facep, LLRenderPass::PASS_SHINY);
 				}
 			}
 			else
-			{
+			{ //not alpha and not shiny
 				if (!is_alpha && tex->getPrimaryFormat() == GL_ALPHA)
-				{
+				{ //invisiprim
 					registerFace(group, facep, LLRenderPass::PASS_INVISIBLE);
 				}
 				else if (fullbright)
-				{
+				{ //fullbright
 					registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT);
+					if (LLPipeline::sRenderDeferred && LLPipeline::sRenderBump && te->getBumpmap())
+					{ //if this is the deferred render and a bump map is present, register in post deferred bump
+						registerFace(group, facep, LLRenderPass::PASS_POST_BUMP);
+					}
 				}
 				else
 				{
-					if (LLPipeline::sRenderDeferred && te->getBumpmap())
-					{
+					if (LLPipeline::sRenderDeferred && LLPipeline::sRenderBump && te->getBumpmap())
+					{ //non-shiny or fullbright deferred bump
 						registerFace(group, facep, LLRenderPass::PASS_BUMP);
 					}
 					else
-					{
+					{ //all around simple
 						llassert(mask & LLVertexBuffer::MAP_NORMAL);
 						registerFace(group, facep, LLRenderPass::PASS_SIMPLE);
 					}
 				}
 				
+				//not sure why this is here -- shiny HUD attachments maybe?  -- davep 5/11/2010
 				if (!is_alpha && te->getShiny() && LLPipeline::sRenderBump)
 				{
 					registerFace(group, facep, LLRenderPass::PASS_SHINY);
 				}
 			}
 			
+			//not sure why this is here, and looks like it might cause bump mapped objects to get rendered redundantly -- davep 5/11/2010
 			if (!is_alpha && !LLPipeline::sRenderDeferred)
 			{
 				llassert((mask & LLVertexBuffer::MAP_NORMAL) || fullbright);
@@ -3867,7 +3911,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 				}
 			}
 
-			if (LLPipeline::sRenderGlow && te->getGlow() > 0.f)
+			if (!is_alpha && LLPipeline::sRenderGlow && te->getGlow() > 0.f)
 			{
 				registerFace(group, facep, LLRenderPass::PASS_GLOW);
 			}
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index bf9536d0c2d190994b15cfdedacb9052bc64c99d..1e9b9737b166ee810552297384f37d0c9a5e121a 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -209,6 +209,7 @@ public:
 	LLColor3 getLightBaseColor() const; // not scaled by intensity
 	LLColor3 getLightColor() const; // scaled by intensity
 	LLUUID	getLightTextureID() const;
+	bool isLightSpotlight() const;
 	LLVector3 getSpotLightParams() const;
 	void	updateSpotLightPriority();
 	F32		getSpotLightPriority() const;
@@ -267,6 +268,10 @@ public:
 	
 	// Returns the "last fetched" media version, or -1 if not fetched yet
 	S32 getLastFetchedMediaVersion() const { return mLastFetchedMediaVersion; }
+
+	void addMDCImpl() { ++mMDCImplCount; }
+	void removeMDCImpl() { --mMDCImplCount; }
+	S32 getMDCImplCount() { return mMDCImplCount; }
 	
 protected:
 	S32	computeLODDetail(F32	distance, F32 radius);
@@ -300,6 +305,7 @@ private:
 	media_list_t mMediaImplList;
 	S32			mLastFetchedMediaVersion; // as fetched from the server, starts as -1
 	S32 mIndexInTex;
+	S32 mMDCImplCount;
 	// statics
 public:
 	static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop 
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 59c9a692fe1f58b47e13c0fbf0bbae8b7c0feec4..d1c0990f90d42089c8bde46ad51764a654ae305e 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -46,6 +46,7 @@
 #include "llvoavatarself.h"
 #include "llvoavatardefines.h"
 #include "llwearable.h"
+#include "llviewercontrol.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -438,8 +439,10 @@ BOOL LLWearable::importFile( LLFILE* file )
 			delete mSavedTEMap[te];
 		}
 
-		image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te), NULL);
-
+		if(gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime"))
+		{
+			image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te), NULL);
+		}
 		LLUUID textureid(text_buffer);
 		mTEMap[te] = new LLLocalTextureObject(image, textureid);
 		mSavedTEMap[te] = new LLLocalTextureObject(image, textureid);
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 29d2745d6e1bcc362d1db3a9798ea3fd191004c0..a49dc1b59da6907bd8d9e8a2c2f72afd2a1f4658 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -119,7 +119,11 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name,
 {
 	std::string search_label = name;
 
-	if (mWornIndicationEnabled && get_is_item_worn(mInventoryItemUUID))
+	// Updating item's worn status depending on whether it is linked in COF or not.
+	// We don't use get_is_item_worn() here because this update is triggered by
+	// an inventory observer upon link in COF beind added or removed so actual
+	// worn status of a linked item may still remain unchanged.
+	if (mWornIndicationEnabled && LLAppearanceMgr::instance().isLinkInCOF(mInventoryItemUUID))
 	{
 		search_label += LLTrans::getString("worn");
 		item_state = IS_WORN;
@@ -522,6 +526,8 @@ bool LLWearableItemTypeNameComparator::doCompare(const LLPanelInventoryListItemB
 	const LLWearableType::EType item_wearable_type2 = wearable_item2->getWearableType();
 
 	if (item_wearable_type1 != item_wearable_type2)
+		// If items are of different LLWearableType::EType types they are compared
+		// by LLWearableType::EType. types order determined in LLWearableType::EType.
 	{
 		// If items are of different LLWearableType::EType types they are compared
 		// by LLWearableType::EType. types order determined in LLWearableType::EType.
@@ -544,6 +550,7 @@ LLWearableItemTypeNameComparator::ETypeListOrder LLWearableItemTypeNameComparato
 {
 	wearable_type_order_map_t::const_iterator const_it = mWearableOrder.find(item_type);
 
+
 	if(const_it == mWearableOrder.end())
 	{
 		llwarns<<"Absent information about order rang of items of "<<LLAssetType::getDesc(item_type)<<" type"<<llendl;
@@ -557,32 +564,54 @@ bool LLWearableItemTypeNameComparator::sortAssetTypeByName(LLAssetType::EType it
 {
 	wearable_type_order_map_t::const_iterator const_it = mWearableOrder.find(item_type);
 
+
 	if(const_it == mWearableOrder.end())
 	{
 		llwarns<<"Absent information about sorting items of "<<LLAssetType::getDesc(item_type)<<" type"<<llendl;
 		return true;
 	}
 
+
 	return const_it->second.mSortAssetTypeByName;
-}
+	}
+
 
 bool LLWearableItemTypeNameComparator::sortWearableTypeByName(LLAssetType::EType item_type) const
 {
 	wearable_type_order_map_t::const_iterator const_it = mWearableOrder.find(item_type);
 
+
 	if(const_it == mWearableOrder.end())
 	{
 		llwarns<<"Absent information about sorting items of "<<LLAssetType::getDesc(item_type)<<" type"<<llendl;
 		return true;
-	}
+}
+
 
 	return const_it->second.mSortWearableTypeByName;
 }
+
+/*virtual*/
+bool LLWearableItemCreationDateComparator::doCompare(const LLPanelInventoryListItemBase* item1, const LLPanelInventoryListItemBase* item2) const
+{
+	time_t date1 = item1->getCreationDate();
+	time_t date2 = item2->getCreationDate();
+
+	if (date1 == date2)
+	{
+		return LLWearableItemNameComparator::doCompare(item1, item2);
+	}
+
+	return date1 > date2;
+}
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-static const LLWearableItemTypeNameComparator WEARABLE_TYPE_NAME_COMPARATOR;
+static LLWearableItemTypeNameComparator WEARABLE_TYPE_NAME_COMPARATOR;
+static const LLWearableItemTypeNameComparator WEARABLE_TYPE_LAYER_COMPARATOR;
+static const LLWearableItemNameComparator WEARABLE_NAME_COMPARATOR;
+static const LLWearableItemCreationDateComparator WEARABLE_CREATION_DATE_COMPARATOR;
 
 static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_items_list");
 
@@ -594,7 +623,7 @@ LLWearableItemsList::Params::Params()
 LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
 :	LLInventoryItemsList(p)
 {
-	setComparator(&WEARABLE_TYPE_NAME_COMPARATOR);
+	setSortOrder(E_SORT_BY_TYPE_LAYER, false);
 	mIsStandalone = p.standalone;
 	if (mIsStandalone)
 	{
@@ -602,6 +631,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
 		setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3));
 	}
 	mWornIndicationEnabled = p.worn_indication_enabled;
+	setNoItemsCommentText(LLTrans::getString("LoadingData"));
 }
 
 // virtual
@@ -643,10 +673,15 @@ void LLWearableItemsList::updateList(const LLUUID& category_id)
 		LLInventoryModel::EXCLUDE_TRASH,
 		collector);
 
+	if(item_array.empty() && gInventory.isCategoryComplete(category_id))
+	{
+		setNoItemsCommentText(LLTrans::getString("EmptyOutfitText"));
+	}
+
 	refreshList(item_array);
 }
 
-void LLWearableItemsList::updateChangedItems(const LLInventoryModel::changed_items_t& changed_items_uuids)
+void LLWearableItemsList::updateChangedItems(const uuid_vec_t& changed_items_uuids)
 {
 	// nothing to update
 	if (changed_items_uuids.empty()) return;
@@ -668,7 +703,7 @@ void LLWearableItemsList::updateChangedItems(const LLInventoryModel::changed_ite
 
 		LLUUID linked_uuid = inv_item->getLinkedUUID();
 
-		for (LLInventoryModel::changed_items_t::const_iterator iter = changed_items_uuids.begin();
+		for (uuid_vec_t::const_iterator iter = changed_items_uuids.begin();
 				iter != changed_items_uuids.end();
 				++iter)
 		{
@@ -694,6 +729,38 @@ void LLWearableItemsList::onRightClick(S32 x, S32 y)
 	ContextMenu::instance().show(this, selected_uuids, x, y);
 }
 
+void LLWearableItemsList::setSortOrder(ESortOrder sort_order, bool sort_now)
+{
+	switch (sort_order)
+	{
+	case E_SORT_BY_MOST_RECENT:
+		setComparator(&WEARABLE_CREATION_DATE_COMPARATOR);
+		break;
+	case E_SORT_BY_NAME:
+		setComparator(&WEARABLE_NAME_COMPARATOR);
+		break;
+	case E_SORT_BY_TYPE_LAYER:
+		setComparator(&WEARABLE_TYPE_LAYER_COMPARATOR);
+		break;
+	case E_SORT_BY_TYPE_NAME:
+	{
+		WEARABLE_TYPE_NAME_COMPARATOR.setOrder(LLAssetType::AT_CLOTHING, LLWearableItemTypeNameComparator::ORDER_RANK_1, false, true);
+		setComparator(&WEARABLE_TYPE_NAME_COMPARATOR);
+		break;
+	}
+
+	// No "default:" to raise compiler warning
+	// if we're not handling something
+	}
+
+	mSortOrder = sort_order;
+
+	if (sort_now)
+	{
+		sort();
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////
 /// ContextMenu
 //////////////////////////////////////////////////////////////////////////
@@ -764,6 +831,8 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
 	U32 n_links = 0;				// number of links among the selected items
 	U32 n_editable = 0;				// number of editable items among the selected ones
 
+	bool can_be_worn = true;
+
 	for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
 	{
 		LLUUID id = *it;
@@ -799,16 +868,22 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
 		{
 			++n_already_worn;
 		}
+
+		if (can_be_worn)
+		{
+			can_be_worn = get_can_item_be_worn(item->getLinkedUUID());
+		}
 	} // for
 
 	bool standalone = mParent ? mParent->isStandalone() : false;
+	bool wear_add_visible = mask & (MASK_CLOTHING|MASK_ATTACHMENT) && n_worn == 0 && can_be_worn && (n_already_worn != 0 || mask & MASK_ATTACHMENT);
 
 	// *TODO: eliminate multiple traversals over the menu items
-	setMenuItemVisible(menu, "wear_wear", 			n_already_worn == 0 && n_worn == 0);
+	setMenuItemVisible(menu, "wear_wear", 			n_already_worn == 0 && n_worn == 0 && can_be_worn);
 	setMenuItemEnabled(menu, "wear_wear", 			n_already_worn == 0 && n_worn == 0);
-	setMenuItemVisible(menu, "wear_add",			mask == MASK_CLOTHING && n_worn == 0 && n_already_worn != 0);
-	setMenuItemEnabled(menu, "wear_add",			n_items == 1 && canAddWearable(ids.front()) && n_already_worn != 0);
-	setMenuItemVisible(menu, "wear_replace",		n_worn == 0 && n_already_worn != 0);
+	setMenuItemVisible(menu, "wear_add",			wear_add_visible);
+	setMenuItemEnabled(menu, "wear_add",			canAddWearables(ids));
+	setMenuItemVisible(menu, "wear_replace",		n_worn == 0 && n_already_worn != 0 && can_be_worn);
 	//visible only when one item selected and this item is worn
 	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items && n_worn == 1);
 	setMenuItemEnabled(menu, "edit",				n_editable == 1 && n_worn == 1 && n_items == 1);
@@ -916,20 +991,61 @@ void LLWearableItemsList::ContextMenu::createNewWearable(const LLUUID& item_id)
 	LLAgentWearables::createWearable(item->getWearableType(), true);
 }
 
-// Can we wear another wearable of the given item's wearable type?
+// Returns true if all the given objects and clothes can be added.
 // static
-bool LLWearableItemsList::ContextMenu::canAddWearable(const LLUUID& item_id)
+bool LLWearableItemsList::ContextMenu::canAddWearables(const uuid_vec_t& item_ids)
 {
 	// TODO: investigate wearables may not be loaded at this point EXT-8231
 
-	LLViewerInventoryItem* item = gInventory.getItem(item_id);
-	if (!item || item->getType() != LLAssetType::AT_CLOTHING)
+	U32 n_objects = 0;
+	boost::unordered_map<LLWearableType::EType, U32> clothes_by_type;
+
+	// Count given clothes (by wearable type) and objects.
+	for (uuid_vec_t::const_iterator it = item_ids.begin(); it != item_ids.end(); ++it)
+	{
+		LLViewerInventoryItem* item = gInventory.getItem(*it);
+		if (!item)
+		{
+			return false;
+		}
+
+		if (item->getType() == LLAssetType::AT_OBJECT)
+		{
+			++n_objects;
+		}
+		else if (item->getType() == LLAssetType::AT_CLOTHING)
+		{
+			++clothes_by_type[item->getWearableType()];
+		}
+		else
+		{
+			llwarns << "Unexpected wearable type" << llendl;
+			return false;
+		}
+	}
+
+	// Check whether we can add all the objects.
+	if (!isAgentAvatarValid() || !gAgentAvatarp->canAttachMoreObjects(n_objects))
 	{
 		return false;
 	}
 
-	U32 wearable_count = gAgentWearables.getWearableCount(item->getWearableType());
-	return wearable_count < LLAgentWearables::MAX_CLOTHING_PER_TYPE;
+	// Check whether we can add all the clothes.
+	boost::unordered_map<LLWearableType::EType, U32>::const_iterator m_it;
+	for (m_it = clothes_by_type.begin(); m_it != clothes_by_type.end(); ++m_it)
+	{
+		LLWearableType::EType w_type	= m_it->first;
+		U32 n_clothes					= m_it->second;
+
+		U32 wearable_count = gAgentWearables.getWearableCount(w_type);
+		if ((wearable_count + n_clothes) > LLAgentWearables::MAX_CLOTHING_PER_TYPE)
+		{
+			return false;
+		}
+
+	}
+
+	return true;
 }
 
 // EOF
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index 854c37c2c1105e2b350e49236a902c732a955c83..2b05273dc7d0dee6388c2513fd89a773e4d87a0e 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -34,7 +34,6 @@
 // newview
 #include "llinventoryitemslist.h"
 #include "llinventorylistitem.h"
-#include "llinventorymodel.h"
 #include "lllistcontextmenu.h"
 #include "llwearabletype.h"
 
@@ -320,7 +319,7 @@ protected:
 	/**
 	 * All information about sort order is stored in mWearableOrder map
 	 *
-	 * mWearableOrder :      KYES              VALUES
+	 * mWearableOrder :      KEYS              VALUES
 	 *                  [LLAssetType] [struct LLWearableTypeOrder]
 	 *
 	 *---------------------------------------------------------------------------------------------
@@ -334,8 +333,8 @@ protected:
 	 *     For example by spec in MY OUTFITS the order within each items type(LLAssetType) is:
 	 *     1. AT_OBJECTS (abc order)
 	 *     2. AT_CLOTHINGS
-	 *       - by type (types order determined in LLWearableType::EType)
-	 *       - outer layer on top
+	 *         - by type (types order determined in LLWearableType::EType)
+	 *         - outer layer on top
 	 *     3. AT_BODYPARTS  (abc order)
 	 *---------------------------------------------------------------------------------------------
 	 *
@@ -374,6 +373,19 @@ private:
 	wearable_type_order_map_t mWearableOrder;
 };
 
+/**
+ * @class LLWearableItemCreationDateComparator
+ *
+ * Comparator for sorting wearable list items by creation date (newest go first).
+ */
+class LLWearableItemCreationDateComparator : public LLWearableItemNameComparator
+{
+	LOG_CLASS(LLWearableItemCreationDateComparator);
+
+protected:
+	/*virtual*/ bool doCompare(const LLPanelInventoryListItemBase* item1, const LLPanelInventoryListItemBase* item2) const;
+};
+
 /**
  * @class LLWearableItemsList
  *
@@ -414,7 +426,7 @@ public:
 		static void setMenuItemEnabled(LLContextMenu* menu, const std::string& name, bool val);
 		static void updateMask(U32& mask, LLAssetType::EType at);
 		static void createNewWearable(const LLUUID& item_id);
-		static bool canAddWearable(const LLUUID& item_id);
+		static bool canAddWearables(const uuid_vec_t& item_ids);
 
 		LLWearableItemsList*	mParent;
 	};
@@ -427,6 +439,14 @@ public:
 		Params();
 	};
 
+	typedef enum e_sort_order {
+		// Values should be compatible with InventorySortOrder setting.
+		E_SORT_BY_NAME			= 0,
+		E_SORT_BY_MOST_RECENT	= 1,
+		E_SORT_BY_TYPE_LAYER	= 2,
+		E_SORT_BY_TYPE_NAME 	= 3,
+	} ESortOrder;
+
 	virtual ~LLWearableItemsList();
 
 	/*virtual*/ void addNewItem(LLViewerInventoryItem* item, bool rearrange = true);
@@ -437,10 +457,14 @@ public:
 	 * Update items that match UUIDs from changed_items_uuids
 	 * or links that point at such items.
 	 */
-	void updateChangedItems(const LLInventoryModel::changed_items_t& changed_items_uuids);
+	void updateChangedItems(const uuid_vec_t& changed_items_uuids);
 
 	bool isStandalone() const { return mIsStandalone; }
 
+	ESortOrder getSortOrder() const { return mSortOrder; }
+
+	void setSortOrder(ESortOrder sort_order, bool sort_now = true);
+
 protected:
 	friend class LLUICtrlFactory;
 	LLWearableItemsList(const LLWearableItemsList::Params& p);
@@ -449,6 +473,8 @@ protected:
 
 	bool mIsStandalone;
 	bool mWornIndicationEnabled;
+
+	ESortOrder		mSortOrder;
 };
 
 #endif //LL_LLWEARABLEITEMSLIST_H
diff --git a/indra/newview/llwebsharing.cpp b/indra/newview/llwebsharing.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2b9e5cc8cb2ea233261853cd915021c5ee15c194
--- /dev/null
+++ b/indra/newview/llwebsharing.cpp
@@ -0,0 +1,609 @@
+/** 
+ * @file llwebsharing.cpp
+ * @author Aimee
+ * @brief Web Snapshot Sharing
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2010, 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 "llwebsharing.h"
+
+#include "llagentui.h"
+#include "llbufferstream.h"
+#include "llhttpclient.h"
+#include "llhttpstatuscodes.h"
+#include "llsdserialize.h"
+#include "llsdutil.h"
+#include "llurl.h"
+#include "llviewercontrol.h"
+
+#include <boost/regex.hpp>
+#include <boost/algorithm/string/replace.hpp>
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+class LLWebSharingConfigResponder : public LLHTTPClient::Responder
+{
+	LOG_CLASS(LLWebSharingConfigResponder);
+public:
+	/// Overrides the default LLSD parsing behaviour, to allow parsing a JSON response.
+	virtual void completedRaw(U32 status, const std::string& reason,
+							  const LLChannelDescriptors& channels,
+							  const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		LLSD content;
+		LLBufferStream istr(channels, buffer.get());
+		LLPointer<LLSDParser> parser = new LLSDNotationParser();
+
+		if (parser->parse(istr, content, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE)
+		{
+			LL_WARNS("WebSharing") << "Failed to deserialize LLSD from JSON response. " << " [" << status << "]: " << reason << LL_ENDL;
+		}
+		else
+		{
+			completed(status, reason, content);
+		}
+	}
+
+	virtual void error(U32 status, const std::string& reason)
+	{
+		LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
+	}
+
+	virtual void result(const LLSD& content)
+	{
+		LLWebSharing::instance().receiveConfig(content);
+	}
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+class LLWebSharingOpenIDAuthResponder : public LLHTTPClient::Responder
+{
+	LOG_CLASS(LLWebSharingOpenIDAuthResponder);
+public:
+	/* virtual */ void completedHeader(U32 status, const std::string& reason, const LLSD& content)
+	{
+		completed(status, reason, content);
+	}
+
+	/* virtual */ void completedRaw(U32 status, const std::string& reason,
+									const LLChannelDescriptors& channels,
+									const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		/// Left empty to override the default LLSD parsing behaviour.
+	}
+
+	virtual void error(U32 status, const std::string& reason)
+	{
+		if (HTTP_UNAUTHORIZED == status)
+		{
+			LL_WARNS("WebSharing") << "AU account not authenticated." << LL_ENDL;
+			// *TODO: No account found on AU, so start the account creation process here.
+		}
+		else
+		{
+			LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
+			LLWebSharing::instance().retryOpenIDAuth();
+		}
+
+	}
+
+	virtual void result(const LLSD& content)
+	{
+		if (content.has("set-cookie"))
+		{
+			// OpenID request succeeded and returned a session cookie.
+			LLWebSharing::instance().receiveSessionCookie(content["set-cookie"].asString());
+		}
+	}
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+class LLWebSharingSecurityTokenResponder : public LLHTTPClient::Responder
+{
+	LOG_CLASS(LLWebSharingSecurityTokenResponder);
+public:
+	/// Overrides the default LLSD parsing behaviour, to allow parsing a JSON response.
+	virtual void completedRaw(U32 status, const std::string& reason,
+							  const LLChannelDescriptors& channels,
+							  const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		LLSD content;
+		LLBufferStream istr(channels, buffer.get());
+		LLPointer<LLSDParser> parser = new LLSDNotationParser();
+
+		if (parser->parse(istr, content, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE)
+		{
+			LL_WARNS("WebSharing") << "Failed to deserialize LLSD from JSON response. " << " [" << status << "]: " << reason << LL_ENDL;
+			LLWebSharing::instance().retryOpenIDAuth();
+		}
+		else
+		{
+			completed(status, reason, content);
+		}
+	}
+
+	virtual void error(U32 status, const std::string& reason)
+	{
+		LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
+		LLWebSharing::instance().retryOpenIDAuth();
+	}
+
+	virtual void result(const LLSD& content)
+	{
+		if (content[0].has("st") && content[0].has("expires"))
+		{
+			const std::string& token   = content[0]["st"].asString();
+			const std::string& expires = content[0]["expires"].asString();
+			if (LLWebSharing::instance().receiveSecurityToken(token, expires))
+			{
+				// Sucessfully received a valid security token.
+				return;
+			}
+		}
+		else
+		{
+			LL_WARNS("WebSharing") << "No security token received." << LL_ENDL;
+		}
+
+		LLWebSharing::instance().retryOpenIDAuth();
+	}
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+class LLWebSharingUploadResponder : public LLHTTPClient::Responder
+{
+	LOG_CLASS(LLWebSharingUploadResponder);
+public:
+	/// Overrides the default LLSD parsing behaviour, to allow parsing a JSON response.
+	virtual void completedRaw(U32 status, const std::string& reason,
+							  const LLChannelDescriptors& channels,
+							  const LLIOPipe::buffer_ptr_t& buffer)
+	{
+/*
+		 // Dump the body, for debugging.
+
+		 LLBufferStream istr1(channels, buffer.get());
+		 std::ostringstream ostr;
+		 std::string body;
+
+		 while (istr1.good())
+		 {
+			char buf[1024];
+			istr1.read(buf, sizeof(buf));
+			body.append(buf, istr1.gcount());
+		 }
+		 LL_DEBUGS("WebSharing") << body << LL_ENDL;
+*/
+		LLSD content;
+		LLBufferStream istr(channels, buffer.get());
+		LLPointer<LLSDParser> parser = new LLSDNotationParser();
+
+		if (parser->parse(istr, content, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE)
+		{
+			LL_WARNS("WebSharing") << "Failed to deserialize LLSD from JSON response. " << " [" << status << "]: " << reason << LL_ENDL;
+		}
+		else
+		{
+			completed(status, reason, content);
+		}
+	}
+
+	virtual void error(U32 status, const std::string& reason)
+	{
+		LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
+	}
+
+	virtual void result(const LLSD& content)
+	{
+		if (content[0].has("result") && content[0].has("id") &&
+			content[0]["id"].asString() == "newMediaItem")
+		{
+			// *TODO: Upload successful, continue from here to post metadata and create AU activity.
+		}
+		else
+		{
+			LL_WARNS("WebSharing") << "Error [" << content[0]["code"].asString()
+								   << "]: " << content[0]["message"].asString() << LL_ENDL;
+		}
+	}
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+LLWebSharing::LLWebSharing()
+:	mConfig(),
+	mSecurityToken(LLSD::emptyMap()),
+	mEnabled(false),
+	mRetries(0),
+	mImage(NULL),
+	mMetadata(LLSD::emptyMap())
+{
+}
+
+void LLWebSharing::init()
+{
+	if (!mEnabled)
+	{
+		sendConfigRequest();
+	}
+}
+
+bool LLWebSharing::shareSnapshot(LLImageJPEG* snapshot, LLSD& metadata)
+{
+	LL_INFOS("WebSharing") << metadata << LL_ENDL;
+
+	if (mImage)
+	{
+		// *TODO: Handle this possibility properly, queue them up?
+		LL_WARNS("WebSharing") << "Snapshot upload already in progress." << LL_ENDL;
+		return false;
+	}
+
+	mImage = snapshot;
+	mMetadata = metadata;
+
+	// *TODO: Check whether we have a valid security token already and re-use it.
+	sendOpenIDAuthRequest();
+	return true;
+}
+
+bool LLWebSharing::setOpenIDCookie(const std::string& cookie)
+{
+	LL_DEBUGS("WebSharing") << "Setting OpenID cookie " << cookie << LL_ENDL;
+	mOpenIDCookie = cookie;
+	return validateConfig();
+}
+
+bool LLWebSharing::receiveConfig(const LLSD& config)
+{
+	LL_DEBUGS("WebSharing") << "Received config data: " << config << LL_ENDL;
+	mConfig = config;
+	return validateConfig();
+}
+
+bool LLWebSharing::receiveSessionCookie(const std::string& cookie)
+{
+	LL_DEBUGS("WebSharing") << "Received AU session cookie: " << cookie << LL_ENDL;
+	mSessionCookie = cookie;
+
+	// Fetch a security token using the new session cookie.
+	LLWebSharing::instance().sendSecurityTokenRequest();
+
+	return (!mSessionCookie.empty());
+}
+
+bool LLWebSharing::receiveSecurityToken(const std::string& token, const std::string& expires)
+{
+	mSecurityToken["st"] = token;
+	mSecurityToken["expires"] = LLDate(expires);
+
+	if (!securityTokenIsValid(mSecurityToken))
+	{
+		LL_WARNS("WebSharing") << "Invalid security token received: \"" << token << "\" Expires: " << expires << LL_ENDL;
+		return false;
+	}
+
+	LL_DEBUGS("WebSharing") << "Received security token: \"" << token << "\" Expires: " << expires << LL_ENDL;
+	mRetries = 0;
+
+	// Continue the upload process now that we have a security token.
+	sendUploadRequest();
+
+	return true;
+}
+
+void LLWebSharing::sendConfigRequest()
+{
+	std::string config_url = gSavedSettings.getString("SnapshotConfigURL");
+	LL_DEBUGS("WebSharing") << "Requesting Snapshot Sharing config data from: " << config_url << LL_ENDL;
+
+	LLSD headers = LLSD::emptyMap();
+	headers["Accept"] = "application/json";
+
+	LLHTTPClient::get(config_url, new LLWebSharingConfigResponder(), headers);
+}
+
+void LLWebSharing::sendOpenIDAuthRequest()
+{
+	std::string auth_url = mConfig["openIdAuthUrl"];
+	LL_DEBUGS("WebSharing") << "Starting OpenID Auth: " << auth_url << LL_ENDL;
+
+	LLSD headers = LLSD::emptyMap();
+	headers["Cookie"] = mOpenIDCookie;
+	headers["Accept"] = "*/*";
+
+	// Send request, successful login will trigger fetching a security token.
+	LLHTTPClient::get(auth_url, new LLWebSharingOpenIDAuthResponder(), headers);
+}
+
+bool LLWebSharing::retryOpenIDAuth()
+{
+	if (mRetries++ >= MAX_AUTH_RETRIES)
+	{
+		LL_WARNS("WebSharing") << "Exceeded maximum number of authorization attempts, aborting." << LL_ENDL;
+		mRetries = 0;
+		return false;
+	}
+
+	LL_WARNS("WebSharing") << "Authorization failed, retrying (" << mRetries << "/" << MAX_AUTH_RETRIES << ")" << LL_ENDL;
+	sendOpenIDAuthRequest();
+	return true;
+}
+
+void LLWebSharing::sendSecurityTokenRequest()
+{
+	std::string token_url = mConfig["securityTokenUrl"];
+	LL_DEBUGS("WebSharing") << "Fetching security token from: " << token_url << LL_ENDL;
+
+	LLSD headers = LLSD::emptyMap();
+	headers["Cookie"] = mSessionCookie;
+
+	headers["Accept"] = "application/json";
+	headers["Content-Type"] = "application/json";
+
+	std::ostringstream body;
+	body << "{ \"gadgets\": [{ \"url\":\""
+		 << mConfig["gadgetSpecUrl"].asString()
+		 << "\" }] }";
+
+	// postRaw() takes ownership of the buffer and releases it later.
+	size_t size = body.str().size();
+	U8 *data = new U8[size];
+	memcpy(data, body.str().data(), size);
+
+	// Send request, receiving a valid token will trigger snapshot upload.
+	LLHTTPClient::postRaw(token_url, data, size, new LLWebSharingSecurityTokenResponder(), headers);
+}
+
+void LLWebSharing::sendUploadRequest()
+{
+	LLUriTemplate upload_template(mConfig["openSocialRpcUrlTemplate"].asString());
+	std::string upload_url(upload_template.buildURI(mSecurityToken));
+
+	LL_DEBUGS("WebSharing") << "Posting upload to: " << upload_url << LL_ENDL;
+
+	static const std::string BOUNDARY("------------abcdef012345xyZ");
+
+	LLSD headers = LLSD::emptyMap();
+	headers["Cookie"] = mSessionCookie;
+
+	headers["Accept"] = "application/json";
+	headers["Content-Type"] = "multipart/form-data; boundary=" + BOUNDARY;
+
+	std::ostringstream body;
+	body << "--" << BOUNDARY << "\r\n"
+		 << "Content-Disposition: form-data; name=\"request\"\r\n\r\n"
+		 << "[{"
+		 <<	  "\"method\":\"mediaItems.create\","
+		 <<	  "\"params\": {"
+		 <<	    "\"userId\":[\"@me\"],"
+		 <<	    "\"groupId\":\"@self\","
+		 <<	    "\"mediaItem\": {"
+		 <<	      "\"mimeType\":\"image/jpeg\","
+		 <<	      "\"type\":\"image\","
+		 <<       "\"url\":\"@field:image1\""
+		 <<	    "}"
+		 <<	  "},"
+		 <<	  "\"id\":\"newMediaItem\""
+		 <<	"}]"
+		 <<	"--" << BOUNDARY << "\r\n"
+		 <<	"Content-Disposition: form-data; name=\"image1\"\r\n\r\n";
+
+	// Insert the image data.
+	// *FIX: Treating this as a string will probably screw it up ...
+	U8* image_data = mImage->getData();
+	for (S32 i = 0; i < mImage->getDataSize(); ++i)
+	{
+		body << image_data[i];
+	}
+
+	body <<	"\r\n--" << BOUNDARY << "--\r\n";
+
+	// postRaw() takes ownership of the buffer and releases it later.
+	size_t size = body.str().size();
+	U8 *data = new U8[size];
+	memcpy(data, body.str().data(), size);
+
+	// Send request, successful upload will trigger posting metadata.
+	LLHTTPClient::postRaw(upload_url, data, size, new LLWebSharingUploadResponder(), headers);
+}
+
+bool LLWebSharing::validateConfig()
+{
+	// Check the OpenID Cookie has been set.
+	if (mOpenIDCookie.empty())
+	{
+		mEnabled = false;
+		return mEnabled;
+	}
+
+	if (!mConfig.isMap())
+	{
+		mEnabled = false;
+		return mEnabled;
+	}
+
+	// Template to match the received config against.
+	LLSD required(LLSD::emptyMap());
+	required["gadgetSpecUrl"] = "";
+	required["loginTokenUrl"] = "";
+	required["openIdAuthUrl"] = "";
+	required["photoPageUrlTemplate"] = "";
+	required["openSocialRpcUrlTemplate"] = "";
+	required["securityTokenUrl"] = "";
+	required["tokenBasedLoginUrlTemplate"] = "";
+	required["viewerIdUrl"] = "";
+
+	std::string mismatch(llsd_matches(required, mConfig));
+	if (!mismatch.empty())
+	{
+		LL_WARNS("WebSharing") << "Malformed config data response: " << mismatch << LL_ENDL;
+		mEnabled = false;
+		return mEnabled;
+	}
+
+	mEnabled = true;
+	return mEnabled;
+}
+
+// static
+bool LLWebSharing::securityTokenIsValid(LLSD& token)
+{
+	return (token.has("st") &&
+			token.has("expires") &&
+			(token["st"].asString() != "") &&
+			(token["expires"].asDate() > LLDate::now()));
+}
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+LLUriTemplate::LLUriTemplate(const std::string& uri_template)
+	:
+	mTemplate(uri_template)
+{
+}
+
+std::string LLUriTemplate::buildURI(const LLSD& vars)
+{
+	// *TODO: Separate parsing the template from building the URI.
+	// Parsing only needs to happen on construction/assignnment.
+
+	static const std::string VAR_NAME_REGEX("[[:alpha:]][[:alnum:]\\._-]*");
+	// Capture var name with and without surrounding {}
+	static const std::string VAR_REGEX("\\{(" + VAR_NAME_REGEX + ")\\}");
+	// Capture delimiter and comma separated list of var names.
+	static const std::string JOIN_REGEX("\\{-join\\|(&)\\|(" + VAR_NAME_REGEX + "(?:," + VAR_NAME_REGEX + ")*)\\}");
+
+	std::string uri = mTemplate;
+	boost::smatch results;
+
+	// Validate and expand join operators : {-join|&|var1,var2,...}
+
+	boost::regex join_regex(JOIN_REGEX);
+
+	while (boost::regex_search(uri, results, join_regex))
+	{
+		// Extract the list of var names from the results.
+		std::string delim = results[1].str();
+		std::string var_list = results[2].str();
+
+		// Expand the list of vars into a query string with their values
+		std::string query = expandJoin(delim, var_list, vars);
+
+		// Substitute the query string into the template.
+		uri = boost::regex_replace(uri, join_regex, query, boost::format_first_only);
+	}
+
+	// Expand vars : {var1}
+
+	boost::regex var_regex(VAR_REGEX);
+
+	std::set<std::string> var_names;
+	std::string::const_iterator start = uri.begin();
+	std::string::const_iterator end = uri.end();
+
+	// Extract the var names used.
+	while (boost::regex_search(start, end, results, var_regex))
+	{
+		var_names.insert(results[1].str());
+		start = results[0].second;
+	}
+
+	// Replace each var with its value.
+	for (std::set<std::string>::const_iterator it = var_names.begin(); it != var_names.end(); ++it)
+	{
+		std::string var = *it;
+		if (vars.has(var))
+		{
+			boost::replace_all(uri, "{" + var + "}", vars[var].asString());
+		}
+	}
+
+	return uri;
+}
+
+std::string LLUriTemplate::expandJoin(const std::string& delim, const std::string& var_list, const LLSD& vars)
+{
+	std::ostringstream query;
+
+	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+	boost::char_separator<char> sep(",");
+	tokenizer var_names(var_list, sep);
+	tokenizer::const_iterator it = var_names.begin();
+
+	// First var does not need a delimiter
+	if (it != var_names.end())
+	{
+		const std::string& name = *it;
+		if (vars.has(name))
+		{
+			// URL encode the value before appending the name=value pair.
+			query << name << "=" << escapeURL(vars[name].asString());
+		}
+	}
+
+	for (++it; it != var_names.end(); ++it)
+	{
+		const std::string& name = *it;
+		if (vars.has(name))
+		{
+			// URL encode the value before appending the name=value pair.
+			query << delim << name << "=" << escapeURL(vars[name].asString());
+		}
+	}
+
+	return query.str();
+}
+
+// static
+std::string LLUriTemplate::escapeURL(const std::string& unescaped)
+{
+	char* escaped = curl_escape(unescaped.c_str(), unescaped.size());
+	std::string result = escaped;
+	curl_free(escaped);
+	return result;
+}
+
diff --git a/indra/newview/llwebsharing.h b/indra/newview/llwebsharing.h
new file mode 100644
index 0000000000000000000000000000000000000000..70046ff1d83b3ef59736b99b2935006554315463
--- /dev/null
+++ b/indra/newview/llwebsharing.h
@@ -0,0 +1,230 @@
+/** 
+ * @file llwebsharing.h
+ * @author Aimee
+ * @brief Web Snapshot Sharing
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2010, 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_LLWEBSHARING_H
+#define LL_LLWEBSHARING_H
+
+#include "llimagejpeg.h"
+#include "llsingleton.h"
+
+
+
+/**
+ * @class LLWebSharing
+ *
+ * Manages authentication to, and interaction with, a web service allowing the
+ * upload of snapshot images taken within the viewer, using OpenID and the
+ * OpenSocial APIs.
+ * http://www.opensocial.org/Technical-Resources/opensocial-spec-v09/RPC-Protocol.html
+ */
+class LLWebSharing : public LLSingleton<LLWebSharing>
+{
+	LOG_CLASS(LLWebSharing);
+public:
+	/*
+	 * Performs initial setup, by requesting config data from the web service if
+	 * it has not already been received.
+	 */
+	void init();
+
+	/*
+	 * @return true if both the OpenID cookie and config data have been received.
+	 */
+	bool enabled() const { return mEnabled; };
+
+	/*
+	 * Sets the OpenID cookie to use for login to the web service.
+	 *
+	 * @param cookie a string containing the OpenID cookie.
+	 *
+	 * @return true if both the OpenID cookie and config data have been received.
+	 */
+	bool setOpenIDCookie(const std::string& cookie);
+
+	/*
+	 * Receive config data used to connect to the web service.
+	 *
+	 * @param config an LLSD map of URL templates for the web service end-points.
+	 *
+	 * @return true if both the OpenID cookie and config data have been received.
+	 *
+	 * @see sendConfigRequest()
+	 */
+	bool receiveConfig(const LLSD& config);
+
+	/*
+	 * Receive the session cookie from the web service, which is the result of
+	 * the OpenID login process.
+	 *
+	 * @see sendOpenIDAuthRequest()
+	 */
+	bool receiveSessionCookie(const std::string& cookie);
+
+	/*
+	 * Receive a security token for the upload service.
+	 *
+	 * @see sendSecurityTokenRequest()
+	 */
+	bool receiveSecurityToken(const std::string& token, const std::string& expires);
+
+	/*
+	 * Restarts the authentication process if the maximum number of retries has
+	 * not been exceeded.
+	 *
+	 * @return true if retrying, false if LLWebSharing::MAX_AUTH_RETRIES has been exceeded.
+	 */
+	bool retryOpenIDAuth();
+
+	/*
+	 * Post a snapshot to the upload service.
+	 *
+	 * @return true if accepted for upload, false if already uploading another image.
+	 */
+	bool shareSnapshot(LLImageJPEG* snapshot, LLSD& metadata);
+
+private:
+	static const S32 MAX_AUTH_RETRIES = 4;
+
+	friend class LLSingleton<LLWebSharing>;
+
+	LLWebSharing();
+	~LLWebSharing() {};
+
+	/*
+	 * Request a map of URLs and URL templates to the web service end-points.
+	 *
+	 * @see receiveConfig()
+	 */
+	void sendConfigRequest();
+
+	/*
+	 * Initiate the OpenID login process.
+	 *
+	 * @see receiveSessionCookie()
+	 */
+	void sendOpenIDAuthRequest();
+
+	/*
+	 * Request a security token for the upload service.
+	 *
+	 * @see receiveSecurityToken()
+	 */
+	void sendSecurityTokenRequest();
+
+	/*
+	 * Request a security token for the upload service.
+	 *
+	 * @see receiveSecurityToken()
+	 */
+	void sendUploadRequest();
+
+	/*
+	 * Checks all necessary config information has been received, and sets mEnabled.
+	 *
+	 * @return true if both the OpenID cookie and config data have been received.
+	 */
+	bool validateConfig();
+
+	/*
+	 * Checks the security token is present and has not expired.
+	 *
+	 * @param token an LLSD map containing the token string and the time it expires.
+	 *
+	 * @return true if the token is not empty and has not expired.
+	 */
+	static bool securityTokenIsValid(LLSD& token);
+
+	std::string mOpenIDCookie;
+	std::string mSessionCookie;
+	LLSD mSecurityToken;
+
+	LLSD mConfig;
+	bool mEnabled;
+
+	LLPointer<LLImageJPEG> mImage;
+	LLSD mMetadata;
+
+	S32 mRetries;
+};
+
+/**
+ * @class LLUriTemplate
+ *
+ * @brief Builds complete URIs, given URI template and a map of keys and values
+ *        to use for substition.
+ *        Note: This is only a partial implementation of a draft standard required
+ *        by the web API used by LLWebSharing.
+ *        See: http://tools.ietf.org/html/draft-gregorio-uritemplate-03
+ *
+ * @see LLWebSharing
+ */
+class LLUriTemplate
+{
+	LOG_CLASS(LLUriTemplate);
+public:
+	LLUriTemplate(const std::string& uri_template);
+	~LLUriTemplate() {};
+
+	/*
+	 * Builds a complete URI from the template.
+	 *
+	 * @param vars an LLSD map of keys and values for substitution.
+	 *
+	 * @return a string containing the complete URI.
+	 */
+	std::string buildURI(const LLSD& vars);
+
+private:
+	/*
+	 * Builds a URL query string.
+	 *
+	 * @param delim    a string containing the separator to use between name=value pairs.
+	 * @param var_list a string containing a comma separated list of variable names.
+	 * @param vars     an LLSD map of keys and values for substitution.
+	 *
+	 * @return a URL query string.
+	 */
+	std::string expandJoin(const std::string& delim, const std::string& var_list, const LLSD& vars);
+
+	/*
+	 * URL escape the given string.
+	 * LLWeb::escapeURL() only does a partial escape, so this uses curl_escape() instead.
+	 */
+	static std::string escapeURL(const std::string& unescaped);
+
+	std::string mTemplate;
+};
+
+
+
+#endif // LL_LLWEBSHARING_H
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 5cd01d337bd2be8a4aa0b67d978744cff3d17825..2ad43ff3942d5e8bc9bb3b43738e788fafe3fbd3 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -1049,9 +1049,11 @@ void LLWorld::disconnectRegions()
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_ENABLE_SIMULATOR("Enable Sim");
 
 void process_enable_simulator(LLMessageSystem *msg, void **user_data)
 {
+	LLFastTimer t(FTM_ENABLE_SIMULATOR);
 	// enable the appropriate circuit for this simulator and 
 	// add its values into the gSimulator structure
 	U64		handle;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index a3b402c1a37480e6f5f0066a96ad9732c5dbb688..e4c2ca9ae39ec5a408a5209332dfabbcc1095093 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -185,6 +185,7 @@ std::string gPoolNames[] =
 };
 
 void drawBox(const LLVector3& c, const LLVector3& r);
+void drawBoxOutline(const LLVector3& pos, const LLVector3& size);
 
 U32 nhpo2(U32 v) 
 {
@@ -262,7 +263,8 @@ BOOL	LLPipeline::sRenderHighlight = TRUE;
 BOOL	LLPipeline::sForceOldBakedUpload = FALSE;
 S32		LLPipeline::sUseOcclusion = 0;
 BOOL	LLPipeline::sDelayVBUpdate = TRUE;
-BOOL	LLPipeline::sFastAlpha = TRUE;
+BOOL	LLPipeline::sAutoMaskAlphaDeferred = TRUE;
+BOOL	LLPipeline::sAutoMaskAlphaNonDeferred = FALSE;
 BOOL	LLPipeline::sDisableShaders = FALSE;
 BOOL	LLPipeline::sRenderBump = TRUE;
 BOOL	LLPipeline::sUseTriStrips = TRUE;
@@ -322,7 +324,6 @@ LLPipeline::LLPipeline() :
 	mInitialized(FALSE),
 	mVertexShadersEnabled(FALSE),
 	mVertexShadersLoaded(0),
-	mRenderTypeMask(0),
 	mRenderDebugFeatureMask(0),
 	mRenderDebugMask(0),
 	mOldRenderDebugMask(0),
@@ -376,7 +377,11 @@ void LLPipeline::init()
 	LLViewerStats::getInstance()->mTrianglesDrawnStat.reset();
 	resetFrameStats();
 
-	mRenderTypeMask = 0xffffffff;	// All render types start on
+	for (U32 i = 0; i < NUM_RENDER_TYPES; ++i)
+	{
+		mRenderTypeEnabled[i] = TRUE; //all rendering types start enabled
+	}
+
 	mRenderDebugFeatureMask = 0xffffffff; // All debugging features on
 	mRenderDebugMask = 0;	// All debug starts off
 
@@ -403,6 +408,8 @@ void LLPipeline::init()
 	{
 		mSpotLightFade[i] = 1.f;
 	}
+
+	setLightingDetail(-1);
 }
 
 LLPipeline::~LLPipeline()
@@ -505,6 +512,7 @@ void LLPipeline::destroyGL()
 }
 
 static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture");
+
 void LLPipeline::resizeScreenTexture()
 {
 	LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE);
@@ -561,9 +569,12 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 
 		F32 scale = gSavedSettings.getF32("RenderShadowResolutionScale");
 
+		//HACK: make alpha masking work on ATI depth shadows (work around for ATI driver bug)
+		U32 shadow_fmt = gGLManager.mIsATI ? GL_ALPHA : 0;
+
 		for (U32 i = 0; i < 4; i++)
 		{
-			mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+			mShadow[i].allocate(U32(resX*scale),U32(resY*scale), shadow_fmt, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
 		}
 
 
@@ -572,11 +583,9 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 
 		for (U32 i = 4; i < 6; i++)
 		{
-			mShadow[i].allocate(width, height, 0, TRUE, FALSE);
+			mShadow[i].allocate(width, height, shadow_fmt, TRUE, FALSE);
 		}
 
-
-
 		width = nhpo2(resX)/2;
 		height = nhpo2(resY)/2;
 		mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE);
@@ -621,9 +630,11 @@ void LLPipeline::updateRenderDeferred()
 {
 	BOOL deferred = (gSavedSettings.getBOOL("RenderDeferred") && 
 		LLRenderTarget::sUseFBO &&
+			 LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
 		gSavedSettings.getBOOL("VertexShaderEnable") && 
 		gSavedSettings.getBOOL("RenderAvatarVP") &&
-		gSavedSettings.getBOOL("WindLightUseAtmosShaders")) ? TRUE : FALSE;
+			 (gSavedSettings.getBOOL("WindLightUseAtmosShaders")) ? TRUE : FALSE) &&
+		!gUseWireframe;
 	
 	sRenderDeferred = deferred;			
 }
@@ -898,13 +909,18 @@ S32 LLPipeline::setLightingDetail(S32 level)
 
 	if (level < 0)
 	{
-		level = gSavedSettings.getS32("RenderLightingDetail");
+		if (gSavedSettings.getBOOL("VertexShaderEnable"))
+		{
+			level = 1;
+		}
+		else
+		{
+			level = 0;
+		}
 	}
 	level = llclamp(level, 0, getMaxLightingDetail());
 	if (level != mLightingDetail)
 	{
-		gSavedSettings.setS32("RenderLightingDetail", level);
-		
 		mLightingDetail = level;
 
 		if (mVertexShadersLoaded == 1)
@@ -1508,8 +1524,10 @@ BOOL LLPipeline::visibleObjectsInFrustum(LLCamera& camera)
 
 BOOL LLPipeline::getVisibleExtents(LLCamera& camera, LLVector3& min, LLVector3& max)
 {
-	min = LLVector3(F32_MAX, F32_MAX, F32_MAX);
-	max = LLVector3(-F32_MAX, -F32_MAX, -F32_MAX);
+	const F32 X = 65536.f;
+
+	min = LLVector3(X,X,X);
+	max = LLVector3(-X,-X,-X);
 
 	U32 saved_camera_id = LLViewerCamera::sCurCameraID;
 	LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
@@ -1948,23 +1966,31 @@ void LLPipeline::updateGeom(F32 max_dtime)
 void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
 {
 	LLMemType mt(LLMemType::MTYPE_PIPELINE_MARK_VISIBLE);
-	if(!drawablep || drawablep->isDead())
+
+	if(drawablep && !drawablep->isDead())
 	{
-		return;
-	}
-	
 	if (drawablep->isSpatialBridge())
 	{
-		LLDrawable* root = ((LLSpatialBridge*) drawablep)->mDrawable;
-
-		if (root && root->getParent() && root->getVObj() && root->getVObj()->isAttachment())
+			const LLDrawable* root = ((LLSpatialBridge*) drawablep)->mDrawable;
+			llassert(root); // trying to catch a bad assumption
+			if (root && //  // this test may not be needed, see above
+			    root->getVObj()->isAttachment())
+			{
+				LLDrawable* rootparent = root->getParent();
+				if (rootparent) // this IS sometimes NULL
+				{
+					LLViewerObject *vobj = rootparent->getVObj();
+					llassert(vobj); // trying to catch a bad assumption
+					if (vobj) // this test may not be needed, see above
 		{
-			LLVOAvatar* av = root->getParent()->getVObj()->asAvatar();
+						const LLVOAvatar* av = vobj->asAvatar();
 			if (av && av->isImpostor())
 			{
 				return;
 			}
 		}
+				}
+			}
 		sCull->pushBridge((LLSpatialBridge*) drawablep);
 	}
 	else
@@ -1974,6 +2000,7 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
 
 	drawablep->setVisible(camera);
 }
+}
 
 void LLPipeline::markMoved(LLDrawable *drawablep, BOOL damped_motion)
 {
@@ -2182,14 +2209,13 @@ static LLFastTimer::DeclareTimer FTM_RESET_DRAWORDER("Reset Draw Order");
 
 void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)
 {
-	const U32 face_mask = (1 << LLPipeline::RENDER_TYPE_AVATAR) |
-						  (1 << LLPipeline::RENDER_TYPE_GROUND) |
-						  (1 << LLPipeline::RENDER_TYPE_TERRAIN) |
-						  (1 << LLPipeline::RENDER_TYPE_TREE) |
-						  (1 << LLPipeline::RENDER_TYPE_SKY) |
-						  (1 << LLPipeline::RENDER_TYPE_WATER);
-
-	if (mRenderTypeMask & face_mask)
+	if (hasAnyRenderType(LLPipeline::RENDER_TYPE_AVATAR,
+					  LLPipeline::RENDER_TYPE_GROUND,
+					  LLPipeline::RENDER_TYPE_TERRAIN,
+					  LLPipeline::RENDER_TYPE_TREE,
+					  LLPipeline::RENDER_TYPE_SKY,
+					  LLPipeline::RENDER_TYPE_WATER,
+					  LLPipeline::END_RENDER_TYPES))
 	{
 		//clear faces from face pools
 		LLFastTimer t(FTM_RESET_DRAWORDER);
@@ -3409,26 +3435,14 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
 	gGLLastMatrix = NULL;
 	glLoadMatrixd(gGLModelView);
 
-	renderHighlights();
-	mHighlightFaces.clear();
-
-	renderDebug();
-
-	LLVertexBuffer::unbind();
-
-	if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
-	{
-		// Render debugging beacons.
-		gObjectList.renderObjectBeacons();
-		gObjectList.resetObjectBeacons();
-	}
-
 	if (occlude)
 	{
 		occlude = FALSE;
 		gGLLastMatrix = NULL;
 		glLoadMatrixd(gGLModelView);
 		doOcclusion(camera);
+		gGLLastMatrix = NULL;
+		glLoadMatrixd(gGLModelView);
 	}
 }
 
@@ -3591,12 +3605,17 @@ void LLPipeline::renderDebug()
 
 		for (U32 i = 0; i < 8; i++)
 		{
+			LLVector3* frust = mShadowCamera[i].mAgentFrustum;
+
 			if (i > 3)
+			{ //render shadow frusta as volumes
+				if (mShadowFrustPoints[i-4].empty())
 			{
+					continue;
+				}
+
 				gGL.color4fv(col+(i-4)*4);	
 			
-				LLVector3* frust = mShadowCamera[i].mAgentFrustum;
-
 				gGL.begin(LLRender::TRIANGLE_STRIP);
 				gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[4].mV);
 				gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[5].mV);
@@ -3624,31 +3643,49 @@ void LLPipeline::renderDebug()
 	
 			if (i < 4)
 			{
-				gGL.begin(LLRender::LINES);
 				
-				F32* c = col+i*4;
-				for (U32 j = 0; j < mShadowFrustPoints[i].size(); ++j)
+				if (i == 0 || !mShadowFrustPoints[i].empty())
 				{
+					//render visible point cloud
+					gGL.flush();
+					glPointSize(8.f);
+					gGL.begin(LLRender::POINTS);
 					
+					F32* c = col+i*4;
 					gGL.color3fv(c);
 
-					for (U32 k = 0; k < mShadowFrustPoints[i].size(); ++k)
-					{
-						if (j != k)
+					for (U32 j = 0; j < mShadowFrustPoints[i].size(); ++j)
 						{
 							gGL.vertex3fv(mShadowFrustPoints[i][j].mV);
-							gGL.vertex3fv(mShadowFrustPoints[i][k].mV);
+						
 						}
+					gGL.end();
+
+					gGL.flush();
+					glPointSize(1.f);
+
+					LLVector3* ext = mShadowExtents[i]; 
+					LLVector3 pos = (ext[0]+ext[1])*0.5f;
+					LLVector3 size = (ext[1]-ext[0])*0.5f;
+					drawBoxOutline(pos, size);
+
+					//render camera frustum splits as outlines
+					gGL.begin(LLRender::LINES);
+					gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[1].mV);
+					gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[2].mV);
+					gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[3].mV);
+					gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[0].mV);
+					gGL.vertex3fv(frust[4].mV); gGL.vertex3fv(frust[5].mV);
+					gGL.vertex3fv(frust[5].mV); gGL.vertex3fv(frust[6].mV);
+					gGL.vertex3fv(frust[6].mV); gGL.vertex3fv(frust[7].mV);
+					gGL.vertex3fv(frust[7].mV); gGL.vertex3fv(frust[4].mV);
+					gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[4].mV);
+					gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[5].mV);
+					gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[6].mV);
+					gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[7].mV);
+					gGL.end();
 					}
 
-					if (!mShadowFrustOrigin[i].isExactlyZero())
-					{
-						gGL.vertex3fv(mShadowFrustPoints[i][j].mV);
-						gGL.color4f(1,1,1,1);
-						gGL.vertex3fv(mShadowFrustOrigin[i].mV);
-					}
-				}
-				gGL.end();
 			}
 
 			/*for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); 
@@ -4560,32 +4597,42 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 			LLVector4 light_pos_gl(light_pos, 1.0f);
 	
 			F32 light_radius = llmax(light->getLightRadius(), 0.001f);
-			F32 atten, quad;
 
-#if 0 //1.9.1
-			if (pool->getVertexShaderLevel() > 0)
-			{
-				atten = light_radius;
-				quad = llmax(light->getLightFalloff(), 0.0001f);
-			}
-			else
-#endif
-			{
-				F32 x = (3.f * (1.f + light->getLightFalloff()));
-				atten = x / (light_radius); // % of brightness at radius
-				quad = 0.0f;
-			}
+			F32 x = (3.f * (1.f + light->getLightFalloff())); // why this magic?  probably trying to match a historic behavior.
+			float linatten = x / (light_radius); // % of brightness at radius
+
 			mHWLightColors[cur_light] = light_color;
 			S32 gllight = GL_LIGHT0+cur_light;
 			glLightfv(gllight, GL_POSITION, light_pos_gl.mV);
 			glLightfv(gllight, GL_DIFFUSE,  light_color.mV);
 			glLightfv(gllight, GL_AMBIENT,  LLColor4::black.mV);
-			glLightfv(gllight, GL_SPECULAR, LLColor4::black.mV);
 			glLightf (gllight, GL_CONSTANT_ATTENUATION,   0.0f);
-			glLightf (gllight, GL_LINEAR_ATTENUATION,     atten);
-			glLightf (gllight, GL_QUADRATIC_ATTENUATION,  quad);
+			glLightf (gllight, GL_LINEAR_ATTENUATION,     linatten);
+			glLightf (gllight, GL_QUADRATIC_ATTENUATION,  0.0f);
+			if (light->isLightSpotlight() // directional (spot-)light
+			    && (LLPipeline::sRenderDeferred || gSavedSettings.getBOOL("RenderSpotLightsInNondeferred"))) // these are only rendered as GL spotlights if we're in deferred rendering mode *or* the setting forces them on
+			{
+				LLVector3 spotparams = light->getSpotLightParams();
+				LLQuaternion quat = light->getRenderRotation();
+				LLVector3 at_axis(0,0,-1); // this matches deferred rendering's object light direction
+				at_axis *= quat;
+				//llinfos << "SPOT!!!!!!! fov: " << spotparams.mV[0] << " focus: " << spotparams.mV[1] << " dir: " << at_axis << llendl;
+				glLightfv(gllight, GL_SPOT_DIRECTION, at_axis.mV);
+				glLightf (gllight, GL_SPOT_EXPONENT,  2.0f); // 2.0 = good old dot product ^ 2
+				glLightf (gllight, GL_SPOT_CUTOFF,    90.0f); // hemisphere
+				const float specular[] = {0.f, 0.f, 0.f, 0.f};
+				glLightfv(gllight, GL_SPECULAR, specular);
+			}
+			else // omnidirectional (point) light
+			{
 			glLightf (gllight, GL_SPOT_EXPONENT,          0.0f);
 			glLightf (gllight, GL_SPOT_CUTOFF,            180.0f);
+
+				// we use specular.w = 1.0 as a cheap hack for the shaders to know that this is omnidirectional rather than a spotlight
+				const float specular[] = {0.f, 0.f, 0.f, 1.f};
+				glLightfv(gllight, GL_SPECULAR, specular);
+				//llinfos << "boring light" << llendl;
+			}
 			cur_light++;
 			if (cur_light >= 8)
 			{
@@ -4612,13 +4659,10 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 		LLVector4 light_pos_gl(light_pos, 1.0f);
 
 		F32 light_radius = 16.f;
-		F32 atten, quad;
 
-		{
 			F32 x = 3.f;
-			atten = x / (light_radius); // % of brightness at radius
-			quad = 0.0f;
-		}
+		float linatten = x / (light_radius); // % of brightness at radius
+
 		mHWLightColors[2] = light_color;
 		S32 gllight = GL_LIGHT2;
 		glLightfv(gllight, GL_POSITION, light_pos_gl.mV);
@@ -4626,8 +4670,8 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 		glLightfv(gllight, GL_AMBIENT,  LLColor4::black.mV);
 		glLightfv(gllight, GL_SPECULAR, LLColor4::black.mV);
 		glLightf (gllight, GL_CONSTANT_ATTENUATION,   0.0f);
-		glLightf (gllight, GL_LINEAR_ATTENUATION,     atten);
-		glLightf (gllight, GL_QUADRATIC_ATTENUATION,  quad);
+		glLightf (gllight, GL_LINEAR_ATTENUATION,     linatten);
+		glLightf (gllight, GL_QUADRATIC_ATTENUATION,  0.0f);
 		glLightf (gllight, GL_SPOT_EXPONENT,          0.0f);
 		glLightf (gllight, GL_SPOT_CUTOFF,            180.0f);
 	}
@@ -4748,16 +4792,16 @@ void LLPipeline::enableLightsFullbright(const LLColor4& color)
 	enableLights(mask);
 
 	glLightModelfv(GL_LIGHT_MODEL_AMBIENT,color.mV);
-	if (mLightingDetail >= 2)
+	/*if (mLightingDetail >= 2)
 	{
 		glColor4f(0.f, 0.f, 0.f, 1.f); // no local lighting by default
-	}
+	}*/
 }
 
 void LLPipeline::disableLights()
 {
 	enableLights(0); // no lighting (full bright)
-	glColor4f(1.f, 1.f, 1.f, 1.f); // lighting color = white by default
+	//glColor4f(1.f, 1.f, 1.f, 1.f); // lighting color = white by default
 }
 
 //============================================================================
@@ -4947,8 +4991,7 @@ void LLPipeline::setLight(LLDrawable *drawablep, BOOL is_light)
 //static
 void LLPipeline::toggleRenderType(U32 type)
 {
-	U32 bit = (1<<type);
-	gPipeline.mRenderTypeMask ^= bit;
+	gPipeline.mRenderTypeEnabled[type] = !gPipeline.mRenderTypeEnabled[type];
 }
 
 //static
@@ -5496,6 +5539,7 @@ void LLPipeline::bindScreenToTexture()
 }
 
 static LLFastTimer::DeclareTimer FTM_RENDER_BLOOM("Bloom");
+
 void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
 {
 	LLMemType mt_ru(LLMemType::MTYPE_PIPELINE_RENDER_BLOOM);
@@ -5818,6 +5862,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
 
 		gGL.getTexUnit(0)->activate();
 		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+
+		if (LLRenderTarget::sUseFBO)
+		{ //copy depth buffer from mScreen to framebuffer
+			LLRenderTarget::copyContentsToFramebuffer(mScreen, 0, 0, mScreen.getWidth(), mScreen.getHeight(), 
+				0, 0, mScreen.getWidth(), mScreen.getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST);
+		}
 	}
 	
 
@@ -5834,8 +5884,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
 
 }
 
+static LLFastTimer::DeclareTimer FTM_BIND_DEFERRED("Bind Deferred");
+
 void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRenderTarget* gi_source, LLRenderTarget* last_gi_post, U32 noise_map)
 {
+	LLFastTimer t(FTM_BIND_DEFERRED);
+
 	if (noise_map == 0xFFFFFFFF)
 	{
 		noise_map = mNoiseMap;
@@ -6173,11 +6227,16 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRen
 								matrix_nondiag, matrix_nondiag, matrix_diag};
 	shader.uniformMatrix3fv("ssao_effect_mat", 1, GL_FALSE, ssao_effect_mat);
 
+	F32 shadow_offset_error = 1.f + gSavedSettings.getF32("RenderShadowOffsetError") * fabsf(LLViewerCamera::getInstance()->getOrigin().mV[2]);
+	F32 shadow_bias_error = 1.f + gSavedSettings.getF32("RenderShadowBiasError") * fabsf(LLViewerCamera::getInstance()->getOrigin().mV[2]);
+
 	shader.uniform2f("screen_res", mDeferredScreen.getWidth(), mDeferredScreen.getHeight());
 	shader.uniform1f("near_clip", LLViewerCamera::getInstance()->getNear()*2.f);
-	shader.uniform1f("alpha_soften", gSavedSettings.getF32("RenderDeferredAlphaSoften"));
-	shader.uniform1f ("shadow_offset", gSavedSettings.getF32("RenderShadowOffset"));
-	shader.uniform1f("shadow_bias", gSavedSettings.getF32("RenderShadowBias"));
+	shader.uniform1f ("shadow_offset", gSavedSettings.getF32("RenderShadowOffset")*shadow_offset_error);
+	shader.uniform1f("shadow_bias", gSavedSettings.getF32("RenderShadowBias")*shadow_bias_error);
+	shader.uniform1f ("spot_shadow_offset", gSavedSettings.getF32("RenderSpotShadowOffset"));
+	shader.uniform1f("spot_shadow_bias", gSavedSettings.getF32("RenderSpotShadowBias"));	
+
 	shader.uniform1f("lum_scale", gSavedSettings.getF32("RenderLuminanceScale"));
 	shader.uniform1f("sun_lum_scale", gSavedSettings.getF32("RenderSunLuminanceScale"));
 	shader.uniform1f("sun_lum_offset", gSavedSettings.getF32("RenderSunLuminanceOffset"));
@@ -6271,8 +6330,6 @@ void LLPipeline::renderDeferredLighting()
 			glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], 0);
 		}
 
-		if (gSavedSettings.getBOOL("RenderDeferredShadow"))
-		{
 			glPushMatrix();
 			glLoadIdentity();
 			glMatrixMode(GL_PROJECTION);
@@ -6280,7 +6337,9 @@ void LLPipeline::renderDeferredLighting()
 			glLoadIdentity();
 
 			mDeferredLight[0].bindTarget();
-			if (gSavedSettings.getBOOL("RenderDeferredSun"))
+
+		if (gSavedSettings.getBOOL("RenderDeferredSSAO") || gSavedSettings.getS32("RenderShadowDetail") > 0)
+		{
 			{ //paint shadow/SSAO light map (direct lighting lightmap)
 				LLFastTimer ftm(FTM_SUN_SHADOW);
 				bindDeferredShader(gDeferredSunProgram, 0);
@@ -6321,18 +6380,22 @@ void LLPipeline::renderDeferredLighting()
 				
 				unbindDeferredShader(gDeferredSunProgram);
 			}
+		}
 			else
 			{
+			glClearColor(1,1,1,1);
 				mDeferredLight[0].clear(GL_COLOR_BUFFER_BIT);
+			glClearColor(0,0,0,0);
 			}
 
 			mDeferredLight[0].flush();
 
+		{ //global illumination specific block (still experimental)
 			if (gSavedSettings.getBOOL("RenderDeferredBlurLight") &&
 			    gSavedSettings.getBOOL("RenderDeferredGI"))
 			{
 				LLFastTimer ftm(FTM_EDGE_DETECTION);
-				//get edge map
+				//generate edge map
 				LLGLDisable blend(GL_BLEND);
 				LLGLDisable test(GL_ALPHA_TEST);
 				LLGLDepthTest depth(GL_FALSE);
@@ -6429,8 +6492,9 @@ void LLPipeline::renderDeferredLighting()
 					unbindDeferredShader(gDeferredPostGIProgram);
 				}
 			}
+		}
 
-			if (gSavedSettings.getBOOL("RenderDeferredBlurLight"))
+		if (gSavedSettings.getBOOL("RenderDeferredSSAO"))
 			{ //soften direct lighting lightmap
 				LLFastTimer ftm(FTM_SOFTEN_SHADOW);
 				//blur lightmap
@@ -6500,7 +6564,6 @@ void LLPipeline::renderDeferredLighting()
 			stop_glerror();
 			glPopMatrix();
 			stop_glerror();
-		}
 
 		//copy depth and stencil from deferred screen
 		//mScreen.copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(),
@@ -6509,11 +6572,15 @@ void LLPipeline::renderDeferredLighting()
 		if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2)
 		{
 			mDeferredLight[1].bindTarget();
-			mDeferredLight[1].clear(GL_COLOR_BUFFER_BIT);
+			// clear color buffer here (GI) - zeroing alpha (glow) is important or it will accumulate against sky
+			glClearColor(0,0,0,0);
+			mScreen.clear(GL_COLOR_BUFFER_BIT);
 		}
 		else
 		{
 			mScreen.bindTarget();
+			// clear color buffer here - zeroing alpha (glow) is important or it will accumulate against sky
+			glClearColor(0,0,0,0);
 			mScreen.clear(GL_COLOR_BUFFER_BIT);
 		}
 
@@ -6550,15 +6617,16 @@ void LLPipeline::renderDeferredLighting()
 			LLGLDisable stencil(GL_STENCIL_TEST);
 			gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
-			U32 render_mask = mRenderTypeMask;
-			mRenderTypeMask =	mRenderTypeMask & 
-								((1 << LLPipeline::RENDER_TYPE_SKY) |
-								(1 << LLPipeline::RENDER_TYPE_CLOUDS) |
-								(1 << LLPipeline::RENDER_TYPE_WL_SKY));
+			gPipeline.pushRenderTypeMask();
+			
+			gPipeline.andRenderTypeMask(LLPipeline::RENDER_TYPE_SKY,
+										LLPipeline::RENDER_TYPE_CLOUDS,
+										LLPipeline::RENDER_TYPE_WL_SKY,
+										LLPipeline::END_RENDER_TYPES);
 								
 			
 			renderGeomPostDeferred(*LLViewerCamera::getInstance());
-			mRenderTypeMask = render_mask;
+			gPipeline.popRenderTypeMask();
 		}
 
 		BOOL render_local = gSavedSettings.getBOOL("RenderDeferredLocalLights");
@@ -6603,6 +6671,15 @@ void LLPipeline::renderDeferredLighting()
 						continue;
 					}
 
+					if (volume->isAttachment())
+					{
+						if (!sRenderAttachedLights)
+						{
+							continue;
+						}
+					}
+
+
 					LLVector3 center = drawablep->getPositionAgent();
 					F32* c = center.mV;
 					F32 s = volume->getLightRadius()*1.5f;
@@ -6653,7 +6730,7 @@ void LLPipeline::renderDeferredLighting()
 					{ //draw box if camera is outside box
 						if (render_local)
 						{
-							if (volume->getLightTexture())
+							if (volume->isLightSpotlight())
 							{
 								drawablep->getVOVolume()->updateSpotLightPriority();
 								spot_lights.push_back(drawablep);
@@ -6670,7 +6747,7 @@ void LLPipeline::renderDeferredLighting()
 					}
 					else if (render_fullscreen)
 					{	
-						if (volume->getLightTexture())
+						if (volume->isLightSpotlight())
 						{
 							drawablep->getVOVolume()->updateSpotLightPriority();
 							fullscreen_spot_lights.push_back(drawablep);
@@ -6871,29 +6948,48 @@ void LLPipeline::renderDeferredLighting()
 		LLGLDisable blend(GL_BLEND);
 		LLGLDisable stencil(GL_STENCIL_TEST);
 
-		U32 render_mask = mRenderTypeMask;
-		mRenderTypeMask =	mRenderTypeMask & 
-							((1 << LLPipeline::RENDER_TYPE_ALPHA) |
-							(1 << LLPipeline::RENDER_TYPE_FULLBRIGHT) |
-							(1 << LLPipeline::RENDER_TYPE_VOLUME) |
-							(1 << LLPipeline::RENDER_TYPE_GLOW) |
-							(1 << LLPipeline::RENDER_TYPE_BUMP) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_ALPHA) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_BUMP) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_GLOW) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_GRASS) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_SHINY) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_INVISIBLE) |
-							(1 << LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY) |
-							(1 << LLPipeline::RENDER_TYPE_AVATAR));
+		pushRenderTypeMask();
+		andRenderTypeMask(LLPipeline::RENDER_TYPE_ALPHA,
+						 LLPipeline::RENDER_TYPE_FULLBRIGHT,
+						 LLPipeline::RENDER_TYPE_VOLUME,
+						 LLPipeline::RENDER_TYPE_GLOW,
+						 LLPipeline::RENDER_TYPE_BUMP,
+						 LLPipeline::RENDER_TYPE_PASS_SIMPLE,
+						 LLPipeline::RENDER_TYPE_PASS_ALPHA,
+						 LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK,
+						 LLPipeline::RENDER_TYPE_PASS_BUMP,
+						 LLPipeline::RENDER_TYPE_PASS_POST_BUMP,
+						 LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
+						 LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK,
+						 LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,
+						 LLPipeline::RENDER_TYPE_PASS_GLOW,
+						 LLPipeline::RENDER_TYPE_PASS_GRASS,
+						 LLPipeline::RENDER_TYPE_PASS_SHINY,
+						 LLPipeline::RENDER_TYPE_PASS_INVISIBLE,
+						 LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY,
+						 LLPipeline::RENDER_TYPE_AVATAR,
+						 END_RENDER_TYPES);
 		
 		renderGeomPostDeferred(*LLViewerCamera::getInstance());
-		mRenderTypeMask = render_mask;
+		popRenderTypeMask();
+	}
+
+	{
+		//render highlights, etc.
+		renderHighlights();
+		mHighlightFaces.clear();
+
+		renderDebug();
+
+		LLVertexBuffer::unbind();
+
+		if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
+		{
+			// Render debugging beacons.
+			gObjectList.renderObjectBeacons();
+			LLHUDObject::renderAll();
+			gObjectList.resetObjectBeacons();
+		}
 	}
 
 	mScreen.flush();
@@ -7129,7 +7225,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 
 		LLPipeline::sUseOcclusion = llmin(occlusion, 1);
 		
-		U32 type_mask = gPipeline.mRenderTypeMask;
+		gPipeline.pushRenderTypeMask();
 
 		glh::matrix4f projection = glh_get_current_projection();
 		glh::matrix4f mat;
@@ -7198,43 +7294,47 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 			glCullFace(GL_FRONT);
 
 			static LLCullResult ref_result;
-			U32 ref_mask = 0;
+		
 			if (LLDrawPoolWater::sNeedsDistortionUpdate)
 			{
 				//initial sky pass (no user clip plane)
 				{ //mask out everything but the sky
-					U32 tmp = mRenderTypeMask;
-					mRenderTypeMask = tmp & ((1 << LLPipeline::RENDER_TYPE_SKY) |
-										(1 << LLPipeline::RENDER_TYPE_WL_SKY));
+					gPipeline.pushRenderTypeMask();
+					gPipeline.andRenderTypeMask(LLPipeline::RENDER_TYPE_SKY,
+												LLPipeline::RENDER_TYPE_WL_SKY,
+												LLPipeline::END_RENDER_TYPES);
 					static LLCullResult result;
 					updateCull(camera, result);
 					stateSort(camera, result);
-					mRenderTypeMask = tmp & ((1 << LLPipeline::RENDER_TYPE_SKY) |
-										(1 << LLPipeline::RENDER_TYPE_CLOUDS) |
-										(1 << LLPipeline::RENDER_TYPE_WL_SKY));
+					andRenderTypeMask(LLPipeline::RENDER_TYPE_SKY,
+										LLPipeline::RENDER_TYPE_CLOUDS,
+										LLPipeline::RENDER_TYPE_WL_SKY,
+										LLPipeline::END_RENDER_TYPES);
+
 					renderGeom(camera, TRUE);
-					mRenderTypeMask = tmp;
+					gPipeline.popRenderTypeMask();
 				}
 
-				U32 mask = mRenderTypeMask;
-				mRenderTypeMask &=	~((1<<LLPipeline::RENDER_TYPE_WATER) |
-									  (1<<LLPipeline::RENDER_TYPE_GROUND) |
-									  (1<<LLPipeline::RENDER_TYPE_SKY) |
-									  (1<<LLPipeline::RENDER_TYPE_CLOUDS));	
+				gPipeline.pushRenderTypeMask();
 
-				if (gSavedSettings.getBOOL("RenderWaterReflections"))
-				{ //mask out selected geometry based on reflection detail
+				clearRenderTypeMask(LLPipeline::RENDER_TYPE_WATER,
+									LLPipeline::RENDER_TYPE_GROUND,
+									LLPipeline::RENDER_TYPE_SKY,
+									LLPipeline::RENDER_TYPE_CLOUDS,
+									LLPipeline::END_RENDER_TYPES);	
 
 					S32 detail = gSavedSettings.getS32("RenderReflectionDetail");
+				if (detail > 0)
+				{ //mask out selected geometry based on reflection detail
+					if (detail < 4)
+					{
+						clearRenderTypeMask(LLPipeline::RENDER_TYPE_PARTICLES, END_RENDER_TYPES);
 					if (detail < 3)
 					{
-						mRenderTypeMask &= ~(1 << LLPipeline::RENDER_TYPE_PARTICLES);
+							clearRenderTypeMask(LLPipeline::RENDER_TYPE_AVATAR, END_RENDER_TYPES);
 						if (detail < 2)
 						{
-							mRenderTypeMask &= ~(1 << LLPipeline::RENDER_TYPE_AVATAR);
-							if (detail < 1)
-							{
-								mRenderTypeMask &= ~(1 << LLPipeline::RENDER_TYPE_VOLUME);
+								clearRenderTypeMask(LLPipeline::RENDER_TYPE_VOLUME, END_RENDER_TYPES);
 							}
 						}
 					}
@@ -7245,19 +7345,18 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 					stateSort(camera, ref_result);
 				}
 				
-				ref_mask = mRenderTypeMask;
-				mRenderTypeMask = mask;
-			}
 			if (LLDrawPoolWater::sNeedsDistortionUpdate)
 			{
-				mRenderTypeMask = ref_mask;
-				if (gSavedSettings.getBOOL("RenderWaterReflections"))
+					if (gSavedSettings.getS32("RenderReflectionDetail") > 0)
 				{
 					gPipeline.grabReferences(ref_result);
 					LLGLUserClipPlane clip_plane(plane, mat, projection);
 					renderGeom(camera);
 				}
 			}	
+
+				gPipeline.popRenderTypeMask();
+			}	
 			glCullFace(GL_BACK);
 			glPopMatrix();
 			mWaterRef.flush();
@@ -7270,18 +7369,20 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 		if (last_update)
 		{
 			camera.setFar(camera_in.getFar());
-			mRenderTypeMask = type_mask & (~(1<<LLPipeline::RENDER_TYPE_WATER) |
-											(1<<LLPipeline::RENDER_TYPE_GROUND));	
+			clearRenderTypeMask(LLPipeline::RENDER_TYPE_WATER,
+								LLPipeline::RENDER_TYPE_GROUND,
+								END_RENDER_TYPES);	
 			stop_glerror();
 
 			LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? FALSE : TRUE;
 
 			if (LLPipeline::sUnderWaterRender)
 			{
-				mRenderTypeMask &=	~((1<<LLPipeline::RENDER_TYPE_GROUND) |
-									  (1<<LLPipeline::RENDER_TYPE_SKY) |
-									  (1<<LLPipeline::RENDER_TYPE_CLOUDS) |
-									  (1<<LLPipeline::RENDER_TYPE_WL_SKY));		
+				clearRenderTypeMask(LLPipeline::RENDER_TYPE_GROUND,
+									LLPipeline::RENDER_TYPE_SKY,
+									LLPipeline::RENDER_TYPE_CLOUDS,
+									LLPipeline::RENDER_TYPE_WL_SKY,
+									END_RENDER_TYPES);		
 			}
 			LLViewerCamera::updateFrustumPlanes(camera);
 
@@ -7322,7 +7423,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 		}
 		glClearColor(0.f, 0.f, 0.f, 0.f);
 		gViewerWindow->setup3DViewport();
-		mRenderTypeMask = type_mask;
+		gPipeline.popRenderTypeMask();
 		LLDrawPoolWater::sNeedsReflectionUpdate = FALSE;
 		LLDrawPoolWater::sNeedsDistortionUpdate = FALSE;
 		LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd));
@@ -7513,112 +7614,169 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
 	LLPipeline::sShadowRender = FALSE;
 }
 
-
+static LLFastTimer::DeclareTimer FTM_VISIBLE_CLOUD("Visible Cloud");
 BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector3& max, std::vector<LLVector3>& fp, LLVector3 light_dir)
 {
+	LLFastTimer t(FTM_VISIBLE_CLOUD);
 	//get point cloud of intersection of frust and min, max
 
-	//get set of planes
-	std::vector<LLPlane> ps;
-	
 	if (getVisibleExtents(camera, min, max))
 	{
 		return FALSE;
 	}
 
-	ps.push_back(LLPlane(min, LLVector3(-1,0,0)));
-	ps.push_back(LLPlane(min, LLVector3(0,-1,0)));
-	ps.push_back(LLPlane(min, LLVector3(0,0,-1)));
-	ps.push_back(LLPlane(max, LLVector3(1,0,0)));
-	ps.push_back(LLPlane(max, LLVector3(0,1,0)));
-	ps.push_back(LLPlane(max, LLVector3(0,0,1)));
+	//get set of planes on bounding box
+	std::vector<LLPlane> bp;
+		
+	bp.push_back(LLPlane(min, LLVector3(-1,0,0)));
+	bp.push_back(LLPlane(min, LLVector3(0,-1,0)));
+	bp.push_back(LLPlane(min, LLVector3(0,0,-1)));
+	bp.push_back(LLPlane(max, LLVector3(1,0,0)));
+	bp.push_back(LLPlane(max, LLVector3(0,1,0)));
+	bp.push_back(LLPlane(max, LLVector3(0,0,1)));
+	
+	//potential points
+	std::vector<LLVector3> pp;
 
-	/*if (!light_dir.isExactlyZero())
+	//add corners of AABB
+	pp.push_back(LLVector3(min.mV[0], min.mV[1], min.mV[2]));
+	pp.push_back(LLVector3(max.mV[0], min.mV[1], min.mV[2]));
+	pp.push_back(LLVector3(min.mV[0], max.mV[1], min.mV[2]));
+	pp.push_back(LLVector3(max.mV[0], max.mV[1], min.mV[2]));
+	pp.push_back(LLVector3(min.mV[0], min.mV[1], max.mV[2]));
+	pp.push_back(LLVector3(max.mV[0], min.mV[1], max.mV[2]));
+	pp.push_back(LLVector3(min.mV[0], max.mV[1], max.mV[2]));
+	pp.push_back(LLVector3(max.mV[0], max.mV[1], max.mV[2]));
+
+	//add corners of camera frustum
+	for (U32 i = 0; i < 8; i++)
 	{
-		LLPlane ucp;
-		LLPlane mcp;
+		pp.push_back(camera.mAgentFrustum[i]);
+	}
 
-		F32 maxd = -1.f;
-		F32 mind = 1.f;
 
-		for (U32 i = 0; i < ps.size(); ++i)
-		{  //pick the plane most aligned to lightDir for user clip plane
-			LLVector3 n(ps[i].mV);
-			F32 da = n*light_dir;
-			if (da > maxd)
+	//bounding box line segments
+	U32 bs[] = 
 			{
-				maxd = da;
-				ucp = ps[i];
-			}
-
-			if (da < mind)
+		0,1,
+		1,3,
+		3,2,
+		2,0,
+
+		4,5,
+		5,7,
+		7,6,
+		6,4,
+
+		0,4,
+		1,5,
+		3,7,
+		2,6
+	};
+
+	for (U32 i = 0; i < 12; i++)
+	{ //for each line segment in bounding box
+		for (U32 j = 0; j < 6; j++) 
+		{ //for each plane in camera frustum
+			const LLPlane& cp = camera.getAgentPlane(j);
+			const LLVector3& v1 = pp[bs[i*2+0]];
+			const LLVector3& v2 = pp[bs[i*2+1]];
+			const LLVector3 n(cp.mV);
+
+			LLVector3 line = v1-v2;
+
+			F32 d1 = line*n;
+			F32 d2 = -cp.dist(v2);
+
+			F32 t = d2/d1;
+
+			if (t > 0.f && t < 1.f)
 			{
-				mind = da;
-				mcp = ps[i];
+				LLVector3 intersect = v2+line*t;
+				pp.push_back(intersect);
+			}
 			}
 		}
 			
-		camera.setUserClipPlane(ucp);
-
-		ps.clear();
-		ps.push_back(ucp);
-		ps.push_back(mcp);
-	}*/
+	//camera frustum line segments
+	const U32 fs[] =
+	{
+		0,1,
+		1,2,
+		2,3,
+		3,1,
+
+		4,5,
+		5,6,
+		6,7,
+		7,4,
 	
-	for (U32 i = 0; i < 6; i++)
-	{
-		ps.push_back(camera.getAgentPlane(i));
-	}
-
-	//get set of points where planes intersect and points are not above any plane
-	fp.clear();
+		0,4,
+		1,5,
+		2,6,
+		3,7	
+	};
+
+	LLVector3 center = (max+min)*0.5f;
+	LLVector3 size = (max-min)*0.5f;
 	
-	for (U32 i = 0; i < ps.size(); ++i)
+	for (U32 i = 0; i < 12; i++)
 	{
-		for (U32 j = 0; j < ps.size(); ++j)
+		for (U32 j = 0; j < 6; ++j)
 		{
-			for (U32 k = 0; k < ps.size(); ++k)
+			const LLVector3& v1 = pp[fs[i*2+0]+8];
+			const LLVector3& v2 = pp[fs[i*2+1]+8];
+			const LLPlane& cp = bp[j];
+			const LLVector3 n(cp.mV);
+
+			LLVector3 line = v1-v2;
+
+			F32 d1 = line*n;
+			F32 d2 = -cp.dist(v2);
+
+			F32 t = d2/d1;
+
+			if (t > 0.f && t < 1.f)
 			{
-				if (i == j ||
-					i == k ||
-					k == j)
-				{
-					continue;
+				LLVector3 intersect = v2+line*t;
+				pp.push_back(intersect);
+			}	
+		}
 				}
 
-				LLVector3 n1,n2,n3;
-				F32 d1,d2,d3;
+	LLVector3 ext[] = { min-LLVector3(0.05f,0.05f,0.05f),
+		max+LLVector3(0.05f,0.05f,0.05f) };
 
-				n1.setVec(ps[i].mV);
-				n2.setVec(ps[j].mV);
-				n3.setVec(ps[k].mV);
+	for (U32 i = 0; i < pp.size(); ++i)
+	{
+		bool found = true;
 
-				d1 = ps[i].mV[3];
-				d2 = ps[j].mV[3];
-				d3 = ps[k].mV[3];
+		const F32* p = pp[i].mV;
 			
-				//get point of intersection of 3 planes "p"
-				LLVector3 p = (-d1*(n2%n3)-d2*(n3%n1)-d3*(n1%n2))/(n1*(n2%n3));
+		for (U32 j = 0; j < 3; ++j)
+		{
+			if (p[j] < ext[0].mV[j] ||
+				p[j] > ext[1].mV[j])
+			{
+				found = false;
+				break;
+			}
+		}
 				
-				if (llround(p*n1+d1, 0.0001f) == 0.f &&
-					llround(p*n2+d2, 0.0001f) == 0.f &&
-					llround(p*n3+d3, 0.0001f) == 0.f)
-				{ //point is on all three planes
-					BOOL found = TRUE;
-					for (U32 l = 0; l < ps.size() && found; ++l)
+		for (U32 j = 0; j < 6; ++j)
+		{
+			const LLPlane& cp = camera.getAgentPlane(j);
+			F32 dist = cp.dist(pp[i]);
+			if (dist > 0.05f) //point is above some plane, not contained
 					{
-						if (llround(ps[l].dist(p), 0.0001f) > 0.0f)
-						{ //point is above some plane, not contained
-							found = FALSE;	
+				found = false;
+				break;
 						}
 					}
 
 					if (found)
 					{
-						fp.push_back(p);
-					}
-				}
-			}
+			fp.push_back(pp[i]);
 		}
 	}
 	
@@ -7719,21 +7877,22 @@ void LLPipeline::generateGI(LLCamera& camera, LLVector3& lightDir, std::vector<L
 	sun_cam.ignoreAgentFrustumPlane(LLCamera::AGENT_PLANE_NEAR);
 	static LLCullResult result;
 
-	U32 type_mask = mRenderTypeMask;
+	pushRenderTypeMask();
 
-	mRenderTypeMask = type_mask & ((1<<LLPipeline::RENDER_TYPE_SIMPLE) |
-								   (1<<LLPipeline::RENDER_TYPE_FULLBRIGHT) |
-								   (1<<LLPipeline::RENDER_TYPE_BUMP) |
-								   (1<<LLPipeline::RENDER_TYPE_VOLUME) |
-								   (1<<LLPipeline::RENDER_TYPE_TREE) | 
-								   (1<<LLPipeline::RENDER_TYPE_TERRAIN) |
-								   (1<<LLPipeline::RENDER_TYPE_WATER) |
-								   (1<<LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW) |
-								   (1<<LLPipeline::RENDER_TYPE_AVATAR) |
-								   (1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) |
-									(1 << LLPipeline::RENDER_TYPE_PASS_BUMP) |
-									(1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) |
-									(1 << LLPipeline::RENDER_TYPE_PASS_SHINY));
+	andRenderTypeMask(LLPipeline::RENDER_TYPE_SIMPLE,
+								 LLPipeline::RENDER_TYPE_FULLBRIGHT,
+								 LLPipeline::RENDER_TYPE_BUMP,
+								 LLPipeline::RENDER_TYPE_VOLUME,
+								 LLPipeline::RENDER_TYPE_TREE, 
+								 LLPipeline::RENDER_TYPE_TERRAIN,
+								 LLPipeline::RENDER_TYPE_WATER,
+								 LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW,
+								 LLPipeline::RENDER_TYPE_AVATAR,
+								 LLPipeline::RENDER_TYPE_PASS_SIMPLE,
+								 LLPipeline::RENDER_TYPE_PASS_BUMP,
+								 LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
+								 LLPipeline::RENDER_TYPE_PASS_SHINY,
+								 END_RENDER_TYPES);
 
 
 	
@@ -7802,7 +7961,7 @@ void LLPipeline::generateGI(LLCamera& camera, LLVector3& lightDir, std::vector<L
 	LLPipeline::sShadowRender = FALSE;
 	sMinRenderSize = 0.f;
 
-	mRenderTypeMask = type_mask;
+	popRenderTypeMask();
 
 }
 
@@ -7886,30 +8045,11 @@ void LLPipeline::generateHighlight(LLCamera& camera)
 
 void LLPipeline::generateSunShadow(LLCamera& camera)
 {
-	if (!sRenderDeferred || !gSavedSettings.getBOOL("RenderDeferredShadow"))
+	if (!sRenderDeferred || gSavedSettings.getS32("RenderShadowDetail") <= 0)
 	{
 		return;
 	}
 
-	//temporary hack to disable shadows but keep local lights
-	static BOOL clear = TRUE;
-	BOOL gen_shadow = gSavedSettings.getBOOL("RenderDeferredSunShadow");
-	if (!gen_shadow)
-	{
-		if (clear)
-		{
-			clear = FALSE;
-			for (U32 i = 0; i < 6; i++)
-			{
-				mShadow[i].bindTarget();
-				mShadow[i].clear();
-				mShadow[i].flush();
-			}
-		}
-		return;
-	}
-	clear = TRUE;
-
 	F64 last_modelview[16];
 	F64 last_projection[16];
 	for (U32 i = 0; i < 16; i++)
@@ -7918,23 +8058,24 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 		last_projection[i] = gGLLastProjection[i];
 	}
 
-	U32 type_mask = mRenderTypeMask;
-	mRenderTypeMask = type_mask & ((1<<LLPipeline::RENDER_TYPE_SIMPLE) |
-								   (1<<LLPipeline::RENDER_TYPE_ALPHA) |
-								   (1<<LLPipeline::RENDER_TYPE_GRASS) |
-								   (1<<LLPipeline::RENDER_TYPE_FULLBRIGHT) |
-								   (1<<LLPipeline::RENDER_TYPE_BUMP) |
-								   (1<<LLPipeline::RENDER_TYPE_VOLUME) |
-								   (1<<LLPipeline::RENDER_TYPE_AVATAR) |
-								   (1<<LLPipeline::RENDER_TYPE_TREE) | 
-								   (1<<LLPipeline::RENDER_TYPE_TERRAIN) |
-								   (1<<LLPipeline::RENDER_TYPE_WATER) |
-								   (1<<LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW) |
-								   (1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) |
-								   (1 << LLPipeline::RENDER_TYPE_PASS_BUMP) |
-								   (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) |
-								   (1 << LLPipeline::RENDER_TYPE_PASS_SHINY) |
-								   (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY));
+	pushRenderTypeMask();
+	andRenderTypeMask(LLPipeline::RENDER_TYPE_SIMPLE,
+					LLPipeline::RENDER_TYPE_ALPHA,
+					LLPipeline::RENDER_TYPE_GRASS,
+					LLPipeline::RENDER_TYPE_FULLBRIGHT,
+					LLPipeline::RENDER_TYPE_BUMP,
+					LLPipeline::RENDER_TYPE_VOLUME,
+					LLPipeline::RENDER_TYPE_AVATAR,
+					LLPipeline::RENDER_TYPE_TREE, 
+					LLPipeline::RENDER_TYPE_TERRAIN,
+					LLPipeline::RENDER_TYPE_WATER,
+					LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW,
+					LLPipeline::RENDER_TYPE_PASS_SIMPLE,
+					LLPipeline::RENDER_TYPE_PASS_BUMP,
+					LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
+					LLPipeline::RENDER_TYPE_PASS_SHINY,
+					LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,
+					END_RENDER_TYPES);
 
 	gGL.setColorMask(false, false);
 
@@ -7986,17 +8127,32 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 	at.normVec();
 	
 	
+	LLCamera main_camera = camera;
+	
 	F32 near_clip = 0.f;
 	{
 		//get visible point cloud
 		std::vector<LLVector3> fp;
 
+		main_camera.calcAgentFrustumPlanes(main_camera.mAgentFrustum);
+		
 		LLVector3 min,max;
-		getVisiblePointCloud(camera,min,max,fp);
+		getVisiblePointCloud(main_camera,min,max,fp);
 
 		if (fp.empty())
 		{
-			mRenderTypeMask = type_mask;
+			if (!hasRenderDebugMask(RENDER_DEBUG_SHADOW_FRUSTA))
+			{
+				mShadowCamera[0] = main_camera;
+				mShadowExtents[0][0] = min;
+				mShadowExtents[0][1] = max;
+
+				mShadowFrustPoints[0].clear();
+				mShadowFrustPoints[1].clear();
+				mShadowFrustPoints[2].clear();
+				mShadowFrustPoints[3].clear();
+			}
+			popRenderTypeMask();
 			return;
 		}
 
@@ -8070,7 +8226,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 		shadow_cam = camera;
 		shadow_cam.setFar(16.f);
 	
-		LLViewerCamera::updateFrustumPlanes(shadow_cam);
+		LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE);
 
 		LLVector3* frust = shadow_cam.mAgentFrustum;
 
@@ -8082,10 +8238,11 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 		for (U32 i = 0; i < 4; i++)
 		{
 			LLVector3 delta = frust[i+4]-eye;
+			delta += (frust[i+4]-frust[(i+2)%4+4])*0.05f;
 			delta.normVec();
 			F32 dp = delta*pn;
-			frust[i] = eye + (delta*dist[j])/dp;
-			frust[i+4] = eye + (delta*dist[j+1])/dp;
+			frust[i] = eye + (delta*dist[j]*0.95f)/dp;
+			frust[i+4] = eye + (delta*dist[j+1]*1.05f)/dp;
 		}
 						
 		shadow_cam.calcAgentFrustumPlanes(frust);
@@ -8426,7 +8583,13 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 	}
 
 	
+	//hack to disable projector shadows 
+	static bool clear = true;
+	bool gen_shadow = gSavedSettings.getS32("RenderShadowDetail") > 1;
 
+	if (gen_shadow)
+	{
+		clear = true;
 	F32 fade_amt = gFrameIntervalSeconds * llmax(LLViewerCamera::getInstance()->getVelocityStat()->getCurrentPerSec(), 1.f);
 
 	//update shadow targets
@@ -8554,6 +8717,20 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 
 		mShadow[i+4].flush();
  	}
+	}
+	else
+	{
+		if (clear)
+		{
+			clear = false;
+			for (U32 i = 4; i < 6; i++)
+			{
+				mShadow[i].bindTarget();
+				mShadow[i].clear();
+				mShadow[i].flush();
+			}
+		}
+	}
 
 	if (!gSavedSettings.getBOOL("CameraOffset"))
 	{
@@ -8577,7 +8754,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 		gGLLastProjection[i] = last_projection[i];
 	}
 
-	mRenderTypeMask = type_mask;
+	popRenderTypeMask();
 }
 
 void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture)
@@ -8613,38 +8790,36 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 
 	assertInitialized();
 
-	U32 mask;
 	BOOL muted = LLMuteList::getInstance()->isMuted(avatar->getID());
 
+	pushRenderTypeMask();
+	
 	if (muted)
 	{
-		mask  = 1 << LLPipeline::RENDER_TYPE_AVATAR;
+		andRenderTypeMask(LLPipeline::RENDER_TYPE_AVATAR, END_RENDER_TYPES);
 	}
 	else
 	{
-		mask  = (1<<LLPipeline::RENDER_TYPE_VOLUME) |
-				(1<<LLPipeline::RENDER_TYPE_AVATAR) |
-				(1<<LLPipeline::RENDER_TYPE_BUMP) |
-				(1<<LLPipeline::RENDER_TYPE_GRASS) |
-				(1<<LLPipeline::RENDER_TYPE_SIMPLE) |
-				(1<<LLPipeline::RENDER_TYPE_FULLBRIGHT) |
-				(1<<LLPipeline::RENDER_TYPE_ALPHA) | 
-				(1<<LLPipeline::RENDER_TYPE_INVISIBLE) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_ALPHA) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_SHINY) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_INVISIBLE) |
-				(1 << LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY);
+		andRenderTypeMask(LLPipeline::RENDER_TYPE_VOLUME,
+						LLPipeline::RENDER_TYPE_AVATAR,
+						LLPipeline::RENDER_TYPE_BUMP,
+						LLPipeline::RENDER_TYPE_GRASS,
+						LLPipeline::RENDER_TYPE_SIMPLE,
+						LLPipeline::RENDER_TYPE_FULLBRIGHT,
+						LLPipeline::RENDER_TYPE_ALPHA, 
+						LLPipeline::RENDER_TYPE_INVISIBLE,
+						LLPipeline::RENDER_TYPE_PASS_SIMPLE,
+						LLPipeline::RENDER_TYPE_PASS_ALPHA,
+						LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK,
+						LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
+						LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK,
+						LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,
+						LLPipeline::RENDER_TYPE_PASS_SHINY,
+						LLPipeline::RENDER_TYPE_PASS_INVISIBLE,
+						LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY,
+						END_RENDER_TYPES);
 	}
 	
-	mask = mask & gPipeline.getRenderTypeMask();
-	U32 saved_mask = gPipeline.mRenderTypeMask;
-	gPipeline.mRenderTypeMask = mask;
-
 	S32 occlusion = sUseOcclusion;
 	sUseOcclusion = 0;
 	sReflectionRender = sRenderDeferred ? FALSE : TRUE;
@@ -8818,7 +8993,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 	sReflectionRender = FALSE;
 	sImpostorRender = FALSE;
 	sShadowRender = FALSE;
-	gPipeline.mRenderTypeMask = saved_mask;
+	popRenderTypeMask();
 
 	glMatrixMode(GL_PROJECTION);
 	glPopMatrix();
@@ -8859,4 +9034,121 @@ LLCullResult::sg_list_t::iterator LLPipeline::endAlphaGroups()
 	return sCull->endAlphaGroups();
 }
 
+BOOL LLPipeline::hasRenderType(const U32 type) const
+{
+	return mRenderTypeEnabled[type];
+}
+
+void LLPipeline::setRenderTypeMask(U32 type, ...)
+{
+	va_list args;
+
+	va_start(args, type);
+	while (type < END_RENDER_TYPES)
+	{
+		mRenderTypeEnabled[type] = TRUE;
+		type = va_arg(args, U32);
+	}
+	va_end(args);
+
+	if (type > END_RENDER_TYPES)
+	{
+		llerrs << "Invalid render type." << llendl;
+	}
+}
+
+BOOL LLPipeline::hasAnyRenderType(U32 type, ...) const
+{
+	va_list args;
+
+	va_start(args, type);
+	while (type < END_RENDER_TYPES)
+	{
+		if (mRenderTypeEnabled[type])
+		{
+			return TRUE;
+		}
+		type = va_arg(args, U32);
+	}
+	va_end(args);
+
+	if (type > END_RENDER_TYPES)
+	{
+		llerrs << "Invalid render type." << llendl;
+	}
+
+	return FALSE;
+}
+
+void LLPipeline::pushRenderTypeMask()
+{
+	std::string cur_mask;
+	cur_mask.assign((const char*) mRenderTypeEnabled, sizeof(mRenderTypeEnabled));
+	mRenderTypeEnableStack.push(cur_mask);
+}
+
+void LLPipeline::popRenderTypeMask()
+{
+	if (mRenderTypeEnableStack.empty())
+	{
+		llerrs << "Depleted render type stack." << llendl;
+	}
+
+	memcpy(mRenderTypeEnabled, mRenderTypeEnableStack.top().data(), sizeof(mRenderTypeEnabled));
+	mRenderTypeEnableStack.pop();
+}
+
+void LLPipeline::andRenderTypeMask(U32 type, ...)
+{
+	va_list args;
+
+	BOOL tmp[NUM_RENDER_TYPES];
+	for (U32 i = 0; i < NUM_RENDER_TYPES; ++i)
+	{
+		tmp[i] = FALSE;
+	}
+
+	va_start(args, type);
+	while (type < END_RENDER_TYPES)
+	{
+		if (mRenderTypeEnabled[type]) 
+		{
+			tmp[type] = TRUE;
+		}
+
+		type = va_arg(args, U32);
+	}
+	va_end(args);
+
+	if (type > END_RENDER_TYPES)
+	{
+		llerrs << "Invalid render type." << llendl;
+	}
+
+	for (U32 i = 0; i < LLPipeline::NUM_RENDER_TYPES; ++i)
+	{
+		mRenderTypeEnabled[i] = tmp[i];
+	}
+
+}
+
+void LLPipeline::clearRenderTypeMask(U32 type, ...)
+{
+	va_list args;
+
+	va_start(args, type);
+	while (type < END_RENDER_TYPES)
+	{
+		mRenderTypeEnabled[type] = FALSE;
+		
+		type = va_arg(args, U32);
+	}
+	va_end(args);
+
+	if (type > END_RENDER_TYPES)
+	{
+		llerrs << "Invalid render type." << llendl;
+	}
+}
+
 
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index c43e0c2cebc4fb21dd930cc9b05b262393ebf471..fe0683d29f2608165adb1c56921c56a788b7e3e4 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -40,6 +40,8 @@
 #include "lldrawable.h"
 #include "llrendertarget.h"
 
+#include <stack>
+
 class LLViewerTexture;
 class LLEdge;
 class LLFace;
@@ -271,12 +273,25 @@ public:
 	LLCullResult::sg_list_t::iterator beginAlphaGroups();
 	LLCullResult::sg_list_t::iterator endAlphaGroups();
 	
+
 	void addTrianglesDrawn(S32 index_count, U32 render_type = LLRender::TRIANGLES);
-	BOOL hasRenderType(const U32 type) const				{ return (type && (mRenderTypeMask & (1<<type))) ? TRUE : FALSE; }
+
 	BOOL hasRenderDebugFeatureMask(const U32 mask) const	{ return (mRenderDebugFeatureMask & mask) ? TRUE : FALSE; }
 	BOOL hasRenderDebugMask(const U32 mask) const			{ return (mRenderDebugMask & mask) ? TRUE : FALSE; }
-	void setRenderTypeMask(const U32 mask)					{ mRenderTypeMask = mask; }
-	U32  getRenderTypeMask() const							{ return mRenderTypeMask; }
+	
+
+
+	BOOL hasRenderType(const U32 type) const;
+	BOOL hasAnyRenderType(const U32 type, ...) const;
+
+	void setRenderTypeMask(U32 type, ...);
+	void orRenderTypeMask(U32 type, ...);
+	void andRenderTypeMask(U32 type, ...);
+	void clearRenderTypeMask(U32 type, ...);
+	
+	void pushRenderTypeMask();
+	void popRenderTypeMask();
+
 	static void toggleRenderType(U32 type);
 
 	// For UI control of render features
@@ -354,6 +369,7 @@ public:
 		RENDER_TYPE_PASS_FULLBRIGHT_SHINY		= LLRenderPass::PASS_FULLBRIGHT_SHINY,
 		RENDER_TYPE_PASS_SHINY					= LLRenderPass::PASS_SHINY,
 		RENDER_TYPE_PASS_BUMP					= LLRenderPass::PASS_BUMP,
+		RENDER_TYPE_PASS_POST_BUMP				= LLRenderPass::PASS_POST_BUMP,
 		RENDER_TYPE_PASS_GLOW					= LLRenderPass::PASS_GLOW,
 		RENDER_TYPE_PASS_ALPHA					= LLRenderPass::PASS_ALPHA,
 		RENDER_TYPE_PASS_ALPHA_MASK				= LLRenderPass::PASS_ALPHA_MASK,
@@ -364,7 +380,9 @@ public:
 		RENDER_TYPE_VOLUME,
 		RENDER_TYPE_PARTICLES,
 		RENDER_TYPE_CLOUDS,
-		RENDER_TYPE_HUD_PARTICLES
+		RENDER_TYPE_HUD_PARTICLES,
+		NUM_RENDER_TYPES,
+		END_RENDER_TYPES = NUM_RENDER_TYPES
 	};
 
 	enum LLRenderDebugFeatureMask
@@ -438,7 +456,8 @@ public:
 	static BOOL				sForceOldBakedUpload; // If true will not use capabilities to upload baked textures.
 	static S32				sUseOcclusion;  // 0 = no occlusion, 1 = read only, 2 = read/write
 	static BOOL				sDelayVBUpdate;
-	static BOOL				sFastAlpha;
+	static BOOL				sAutoMaskAlphaDeferred;
+	static BOOL				sAutoMaskAlphaNonDeferred;
 	static BOOL				sDisableShaders; // if TRUE, rendering will be done without shaders
 	static BOOL				sRenderBump;
 	static BOOL				sUseTriStrips;
@@ -527,7 +546,9 @@ public:
 	S32						mVertexShadersLoaded; // 0 = no, 1 = yes, -1 = failed
 
 protected:
-	U32						mRenderTypeMask;
+	BOOL					mRenderTypeEnabled[NUM_RENDER_TYPES];
+	std::stack<std::string> mRenderTypeEnableStack;
+
 	U32						mRenderDebugFeatureMask;
 	U32						mRenderDebugMask;
 
diff --git a/indra/newview/res/have_artwork_bundle.marker b/indra/newview/res/have_artwork_bundle.marker
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb238d536604121078647c2b7d742680abfd75
--- /dev/null
+++ b/indra/newview/res/have_artwork_bundle.marker
@@ -0,0 +1 @@
+If this file exists then you have the artwork bundle installed, which is packaged separately from the Viewer source in the open-source tree.  This marker is for the benefit of the build system so it can warn you properly if it's not there. :)
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index a575aabbca4c372b6c7d60d469ff4cd9e4757395..5e8cee1f5fac55c59663020cc3c5f1a37ec449a1 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -149,7 +149,7 @@ BEGIN
             VALUE "FileDescription", "Second Life"
             VALUE "FileVersion", "2.1.1.0"
             VALUE "InternalName", "Second Life"
-            VALUE "LegalCopyright", "Copyright © 2001-2010, Linden Research, Inc."
+            VALUE "LegalCopyright", "Copyright � 2001-2010, Linden Research, Inc."
             VALUE "OriginalFilename", "SecondLife.exe"
             VALUE "ProductName", "Second Life"
             VALUE "ProductVersion", "2.1.1.0"
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 2188c71ff9e39ffefe637af2d3a0307d98c7042b..5ba1fc9b21a20cc43bc212383da732ab0ce9d74b 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -113,7 +113,7 @@
      reference="LtYellow" />
     <color
      name="AgentLinkColor"
-     reference="White" />
+     reference="EmphasisColor" />
     <color
      name="AlertTextColor"
      value="0.58 0.66 0.84 1" />
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index b9bc45a10b0beb9776313b8f6daa3816c5e2022e..cae61468804f17ebf84fd7effd0a3ab85d8d97a2 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -21,7 +21,7 @@
   <string name="test_the_vlt">This string CHANGE2 is extracted.</string>
   <string name="testing_eli">Just a test. changes.</string>
   <chat_history
-   allow_html="true"
+   parse_urls="true"
    bg_readonly_color="ChatHistoryBgColor"
    bg_writeable_color="ChatHistoryBgColor" 
    border_visible="false"
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index b5be03346e2b46ea91d8fe95f8f2610c322d3b98..f4d65bdb3aadde2659ca38cbef70cc067f394cb0 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -73,7 +73,7 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
       help_topic="about_support_tab"
       name="support_panel">
       <text_editor
-        allow_html="true" 
+        parse_urls="true" 
        follows="top|left"
        font="SansSerif"
        height="343"
diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml
index 887cedc33fbff0d7af4eb112b04a8faf41e5037c..9864083442025df46b6906dece3fa709db63670a 100644
--- a/indra/newview/skins/default/xui/en/floater_event.xml
+++ b/indra/newview/skins/default/xui/en/floater_event.xml
@@ -244,7 +244,6 @@
        layout="topleft"
        left="6"
        name="event_desc"
-       textbox.label="More"
        width="322">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</expandable_text>
     </layout_panel>
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index c9b013099bc60c1a67c8edcd47cbe819a5c2eaea..6c1214f15220c6fbcb5818e65e7489eef354a668 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -67,7 +67,7 @@
          height="150"
          name="chat_history"
          parse_highlights="true"
-         allow_html="true"
+         parse_urls="true"
         left="1"
          width="249">
         </chat_history>
diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
index ec097a8e87683f68759b2a927c4b999f1b422b44..3b26c2ab5903e313e88e0290faca3a8b6e415389 100644
--- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
@@ -25,7 +25,7 @@
  single_instance="true"
  width="320">
   <chat_history
-    allow_html="true"
+    parse_urls="true"
     bg_readonly_color="ChatHistoryBgColor"
     bg_writeable_color="ChatHistoryBgColor"
     follows="all"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
index 691472633ed5318a7c6d75cf8d2c704142fd7465..19034019883ae0a3ee79985c64710aa492a66e56 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
@@ -96,19 +96,19 @@
      name="replace_text"
      tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture!"
      top_pad="10"
-     width="200">
+     width="210">
         Replace with:
     </text>
     <line_editor
      follows="left|top"
      height="20"
      layout="topleft"
-     left_delta="89"
+     left_delta="99"
      max_length="31"
      name="replace_editor"
      tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
      top_delta="-4"
-     width="175" />
+     width="165" />
     <text
      type="string"
      length="1"
@@ -120,25 +120,25 @@
      font.style="BOLD"
      name="key_label"
      top_pad="10"
-     width="100">
+     width="150">
         Shortcut Key:
     </text>
     <combo_box
      height="20"
      label="None"
      layout="topleft"
-     left_delta="89"
+     left_delta="154"
      name="modifier_combo"
      top_delta="-4"
-     width="75" />
+     width="55" />
     <combo_box
      height="20"
      label="None"
      layout="topleft"
-     left_pad="10"
+     left_pad="4"
      name="key_combo"
      top_delta="0"
-     width="75" />
+     width="50" />
     <text
      type="string"
      length="1"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index 0e8eef2a21b80018df7aa20e6746c3a96523fb07..e5a5fab9b9321f8294681324b9fd0895c5506fac 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -71,7 +71,7 @@
      left="4"
      max_length="65536"
      name="Notecard Editor"
-     allow_html="false" 
+     parse_urls="false" 
      tab_group="1"
      top="46"
      width="392"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 49b3b58113684ced5f0f06315987a5ecc70b08c2..354f1de85e163b986bff23c182f3df80841a0929 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -22,7 +22,7 @@
         Done
     </floater.string>
     <layout_stack
-     bottom="595"
+     height="580"
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
@@ -30,6 +30,7 @@
      top="20"
      width="630">
         <layout_panel
+         height="570"
          layout="topleft"
          left_delta="0"
          top_delta="0"
@@ -37,13 +38,12 @@
          user_resize="false"
          width="630">
             <web_browser
-             bottom="-10"
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
              name="browser"
              top="0"
-             height="555"
+             height="540"
              width="630" />
             <text
              follows="bottom|left"
@@ -51,7 +51,7 @@
              layout="topleft"
              left_delta="0"
              name="status_text"
-             top_pad="7"
+             top_pad="10"
              width="150" />
             <text
              visible="false"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 452b2ac664f9438e9a6bbbfcb898eb2535225027..857932e51a105838419e1edbf9211defcffbe33e 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -4,48 +4,52 @@
  can_minimize="false"
  can_close="true"
  follows="left|top"
- height="516"
+ height="520"
  layout="topleft"
  name="Snapshot"
  help_topic="snapshot"
  save_rect="true"
  save_visibility="true"
  title="SNAPSHOT PREVIEW"
- width="215">   
-    <floater.string
-     name="share_to_web_url" translate="false">
-http://pdp36.lindenlab.com:12777/
-    </floater.string>
+ width="215">
     <floater.string
      name="unknown">
         unknown
     </floater.string>
     <radio_group
-     height="58"
+     height="70"
      label="Snapshot type"
      layout="topleft"
      left="10"
      name="snapshot_type_radio"
-     top="25"
+     top="20"
      width="205">
+<!--
         <radio_item
-         bottom="19"
+         height="16"
+         label="Share to Web"
+         layout="topleft"
+         name="share_to_web"
+         top_pad="0" />
+-->
+         <radio_item
          height="16"
          label="Email"
          layout="topleft"
-         name="postcard" />
+         name="postcard"
+         top_pad="2" />
         <radio_item
-         bottom="38"
          height="16"
          label="My inventory (L$[AMOUNT])"
          layout="topleft"
-         name="texture" />
+         name="texture"
+         top_pad="2" />
         <radio_item
-         bottom="57"
          height="16"
          label="Save to my computer"
          layout="topleft"
-         name="local" />
+         name="local"
+         top_pad="2" />
     </radio_group>
   <ui_ctrl 
     height="90"
@@ -67,7 +71,7 @@ http://pdp36.lindenlab.com:12777/
      left_delta="0"
      halign="right"
      name="file_size_label"
-     top_pad="10"
+     top_pad="8"
      width="195">
         [SIZE] KB
     </text>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index a96dbe3553487ac379f0f1ce573bc9c111a13c78..514b0a501b63cc48a1ba3dec171dc5dbd98fd3b5 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2322,6 +2322,7 @@ even though the user gets a free copy.
              layout="topleft"
              left_pad="15"
              name="color trans"
+             text_readonly_color="LabelDisabledColor"
              top="6"
              width="110">
                 Transparency %
@@ -2346,6 +2347,7 @@ even though the user gets a free copy.
              layout="topleft"
              left_delta="0"
              name="glow label"
+             text_readonly_color="LabelDisabledColor"
              top_pad="8"
              width="80">
                 Glow
@@ -2376,6 +2378,7 @@ even though the user gets a free copy.
              layout="topleft"
              left="10"
              name="tex gen"
+             text_readonly_color="LabelDisabledColor"
              top_pad="5"
              width="90">
                 Mapping
@@ -2404,6 +2407,7 @@ even though the user gets a free copy.
              layout="topleft"
              name="label shininess"
              left_pad="4"
+             text_readonly_color="LabelDisabledColor"
              top_pad="-36"
              width="90">
                 Shininess
@@ -2440,6 +2444,7 @@ even though the user gets a free copy.
              layout="topleft"
              left_pad="4"
              name="label bumpiness"
+             text_readonly_color="LabelDisabledColor"
              top_pad="-36"
              width="90">
                 Bumpiness
@@ -2565,7 +2570,8 @@ even though the user gets a free copy.
              height="10"
              layout="topleft"
              left="10"
-             name="tex scale"
+             name="rpt"
+             text_readonly_color="LabelDisabledColor"
              top_pad="4"
              width="200">
                 Repeats / Face
@@ -2654,6 +2660,7 @@ even though the user gets a free copy.
              layout="topleft"
              left="10"
              name="tex offset"
+             text_readonly_color="LabelDisabledColor"
              width="200">
                 Texture Offset
             </text>
@@ -2737,9 +2744,9 @@ even though the user gets a free copy.
 			 follows="top|left"
 			 tool_tip="Edit this Media"
 			 height="12"
-			 image_disabled="Icon_Gear_Foreground"
-			 image_selected="Icon_Gear_Background"
-			 image_unselected="Icon_Gear_Press"
+             image_disabled="Icon_Gear_Background"
+             image_selected="Icon_Gear_Press"
+             image_unselected="Icon_Gear_Foreground"
 			 layout="topleft"
 			 left_pad="10"
 			 name="edit_media"
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index 8aeec46ba37080405c37af0b06927319fcd37a19..eb2e7ea7887fc79476e31c2234d38c9653cfb1b7 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -26,7 +26,7 @@ Owner [OWNER]
   <string name="Touch">Touch</string>
   <string name="Sit">Sit</string>
   <text
-     allow_html="false"
+     parse_urls="false"
      follows="all"
      font="SansSerifLarge"
      height="30"
diff --git a/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1925d3396fcfa39673474bc58a90c7c8c2f7e667
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ layout="topleft"
+ name="Add Wearable Gear Menu">
+    <menu_item_check
+     label="Sort by Most Recent"
+     layout="topleft"
+     name="sort_by_most_recent">
+        <on_check
+         function="AddWearable.Gear.Check"
+         parameter="by_most_recent" />
+        <on_click
+         function="AddWearable.Gear.Sort"
+         parameter="by_most_recent" />
+    </menu_item_check>
+    <menu_item_check
+     label="Sort by Name"
+     layout="topleft"
+     name="sort_by_name">
+        <on_check
+         function="AddWearable.Gear.Check"
+         parameter="by_name" />
+        <on_click
+         function="AddWearable.Gear.Sort"
+         parameter="by_name" />
+    </menu_item_check>
+    <menu_item_check
+     label="Sort by Type"
+     layout="topleft"
+     name="sort_by_type">
+        <on_check
+         function="AddWearable.Gear.Check"
+         parameter="by_type" />
+        <on_click
+         function="AddWearable.Gear.Sort"
+         parameter="by_type" />
+        <on_visible
+         function="AddWearable.Gear.Visible"
+         parameter="by_type" />
+    </menu_item_check>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
index 8ec768981969fb3345331221d7bc63b9d6943352..76f68c6d4bab1b8bcae779899d7df236bbefb0dd 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
@@ -88,6 +88,15 @@
     <menu_item_call.on_visible
      function="Object.EnableWear" />
   </menu_item_call>  
+  <menu_item_call
+   label="Add"
+   layout="topleft"
+   name="add">
+    <menu_item_call.on_click
+     function="Object.AttachAddToAvatar" />
+    <menu_item_call.on_visible
+     function="Object.EnableWear" />
+  </menu_item_call>
   <menu_item_call
    label="Report"
    layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index b6cc222e968aee1aaa765a1044eb2dbb22e24042..31f70d99caafb7ae3612f4b702e5304ba90475f6 100644
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -83,6 +83,15 @@
             <menu_item_call.on_enable
              function="Object.EnableWear" />
    </menu_item_call>
+   <menu_item_call
+      enabled="false"
+      label="Add"
+      name="Add">
+            <menu_item_call.on_click
+             function="Object.AttachAddToAvatar" />
+            <menu_item_call.on_enable
+             function="Object.EnableWear" />
+   </menu_item_call>
    <context_menu
          label="Attach  â–¶"
          name="Object Attach" />
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
index 3e38503e43df7cf7294f59e9f1119bb78e46a100..77cc3910fd384208b1f3f9fffcc85966280715a9 100644
--- a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
@@ -94,6 +94,9 @@
         <on_enable
          function="Places.LandmarksGear.Enable"
          parameter="expand" />
+        <on_visible
+         function="Places.LandmarksGear.Enable"
+         parameter="expand" />
     </menu_item_call>
     <menu_item_call
      label="Collapse"
@@ -105,6 +108,9 @@
         <on_enable
          function="Places.LandmarksGear.Enable"
          parameter="collapse" />
+        <on_visible
+         function="Places.LandmarksGear.Enable"
+         parameter="collapse" />
     </menu_item_call>
     <menu_item_call
      label="Expand all folders"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 63ff7047b48ff06f807bd49181adbe0acbaf46c5..0b85074eb6ce4249c9a75a31b6f09bf7a313ccec 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -29,7 +29,9 @@
             <menu_item_call.on_click
              function="BuyCurrency" />
         </menu_item_call>
+
         <menu_item_separator/>
+
         <menu_item_call
          label="My Profile"
          name="Profile">
@@ -124,7 +126,9 @@
             <menu_item_call.on_click
              function="Advanced.LeaveAdminStatus" />
         </menu_item_call>
+
         <menu_item_separator/>
+
         <menu_item_call
          label="Exit [APP_NAME]"
          name="Quit"
@@ -153,7 +157,9 @@
              function="SideTray.PanelPeopleTab"
              parameter="groups_panel" />
         </menu_item_call>
+
         <menu_item_separator/>
+
         <!--menu_item_call
          label="Chat"
          name="Chat">
@@ -251,7 +257,9 @@
              parameter="region_info" />
         </menu_item_call>
         </menu>
+
         <menu_item_separator/>
+
         <menu_item_call
              label="Buy This Land"
              name="Buy Land">
@@ -348,7 +356,9 @@
                control="NavBarShowParcelProperties" />
           </menu_item_check>
         </menu>
+
         <menu_item_separator/>
+
 	    <menu_item_call
 	     label="Teleport Home"
 	     name="Teleport Home"
@@ -387,7 +397,9 @@
              parameter="ShowNavbarFavoritesPanel" />
         </menu_item_check>
         <menu_item_separator/>-->
+
         <menu_item_separator/>
+
     <menu
          create_jump_keys="true"
          label="Sun"
@@ -430,7 +442,9 @@
                  function="World.EnvSettings"
                  parameter="default" />
             </menu_item_call>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Environment Editor"
              name="Environment Editor">
@@ -579,6 +593,7 @@
             </menu_item_call>
         </menu>
         <menu_item_separator/>
+
         <menu_item_call
            label="Focus on Selection"
            name="Focus on Selection"
@@ -599,7 +614,9 @@
           <menu_item_call.on_enable
              function="Tools.SomethingSelectedNoHUD" />
         </menu_item_call>
+
         <menu_item_separator/>
+
         <menu
          create_jump_keys="true"
          label="Object"
@@ -701,7 +718,9 @@
                function="EditableSelected" />
           </menu_item_call>
         </menu>
+
         <menu_item_separator/>
+
         <menu
          create_jump_keys="true"
          label="Options"
@@ -717,7 +736,9 @@
 				 function="ToggleControl"
 				 parameter="DebugPermissions" />
 			</menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_check
                  label="Select Only My Objects"
                  name="Select Only My Objects">
@@ -744,7 +765,9 @@
                     <menu_item_check.on_click
                      function="Tools.SelectBySurrounding" />
             </menu_item_check>
+
           <menu_item_separator/>
+
                 <menu_item_check
                  label="Show Hidden Selection"
                  name="Show Hidden Selection">
@@ -770,7 +793,9 @@
                      function="ToggleControl"
                      parameter="ShowSelectionBeam" />
                 </menu_item_check>
+
         <menu_item_separator/>
+
                 <menu_item_check
                  label="Snap to Grid"
                  name="Snap to Grid"
@@ -894,7 +919,9 @@
              function="Floater.Show"
              parameter="hud" />
         </menu_item_call>-->
+
         <menu_item_separator/>
+
         <menu_item_call
              label="Report Abuse"
              name="Report Abuse">
@@ -908,7 +935,9 @@
                  function="ShowHelp"
                  parameter="report_bug" />
             </menu_item_call>
+
         <menu_item_separator/>
+
         <menu_item_call
          label="About [APP_NAME]"
          name="About Second Life">
@@ -922,17 +951,6 @@
      name="Advanced"
      tear_off="true"
      visible="false">
-        <menu_item_check
-         label="Show Advanced Menu"
-         name="Show Advanced Menu"
-         shortcut="control|alt|shift|D">
-          <on_check
-           function="CheckControl"
-           parameter="UseDebugMenus" />
-          <on_click
-           function="ToggleControl"
-           parameter="UseDebugMenus" />
-        </menu_item_check>
         <menu_item_call
          label="Stop Animating Me"
          name="Stop Animating My Avatar">
@@ -959,7 +977,9 @@
            function="Floater.Show"
            parameter="window_size" />
         </menu_item_call>
+
         <menu_item_separator/>
+
         <menu_item_check
          label="Limit Select Distance"
          name="Limit Select Distance">
@@ -980,7 +1000,9 @@
              function="ToggleControl"
              parameter="DisableCameraConstraints" />
         </menu_item_check>
+
         <menu_item_separator/>
+
         <menu_item_check
          label="High-res Snapshot"
          name="HighResSnapshot">
@@ -1011,7 +1033,9 @@
              function="ToggleControl"
              parameter="CompressSnapshotsToDisk" />
         </menu_item_check>
+
         <menu_item_separator/>
+
         <menu
          create_jump_keys="true"
          label="Performance Tools"
@@ -1124,7 +1148,9 @@
                 <menu_item_check.on_click
                  function="View.ShowHoverTips" />
             </menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_check
              label="Show Land Tooltips"
              name="Land Tips">
@@ -1393,17 +1419,7 @@
                  function="Advanced.ToggleFeature"
                  parameter="flexible" />
             </menu_item_check>
-        </menu>
-        <menu_item_check
-         label="Run Multiple Threads"
-         name="Run Multiple Threads">
-            <menu_item_check.on_check
-             function="CheckControl"
-             parameter="RunMultipleThreads" />
-            <menu_item_check.on_click
-             function="ToggleControl"
-             parameter="RunMultipleThreads" />
-        </menu_item_check>
+        </menu>        
         <menu_item_check
          label="Use Plugin Read Thread"
          name="Use Plugin Read Thread">
@@ -1431,7 +1447,9 @@
              function="ToggleControl"
              parameter="MouseSmooth" />
         </menu_item_check>
+
         <menu_item_separator/>
+
         <menu
          label="Shortcuts"
          name="Shortcuts"
@@ -1475,19 +1493,9 @@
                 <menu_item_call.on_click
                  function="View.DefaultUISize" />
             </menu_item_call>
-            <!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility.  The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. -->
-            <menu_item_check
-               label="Show Advanced Menu - legacy shortcut"
-               name="Show Advanced Menu - legacy shortcut"
-               shortcut="control|alt|D">
-              <on_check
-		 function="CheckControl"
-		 parameter="UseDebugMenus" />
-              <on_click
-		 function="ToggleControl"
-		 parameter="UseDebugMenus" />
-            </menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_check
              label="Always Run"
              name="Always Run"
@@ -1508,7 +1516,9 @@
                 <menu_item_check.on_enable
                  function="Agent.enableFlying" />
             </menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Close Window"
              name="Close Window"
@@ -1527,7 +1537,9 @@
                 <menu_item_call.on_enable
                  function="File.EnableCloseAllWindows" />
             </menu_item_call>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Snapshot to Disk"
              name="Snapshot to Disk"
@@ -1536,7 +1548,9 @@
                 <menu_item_call.on_click
                  function="File.TakeSnapshotToDisk" />
             </menu_item_call>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Mouselook"
              name="Mouselook"
@@ -1573,7 +1587,9 @@
                 <menu_item_call.on_enable
                  function="View.EnableLastChatter" />
             </menu_item_call>
+
             <menu_item_separator/>
+
             <menu
              create_jump_keys="true"
              label="Select Build Tool"
@@ -1620,7 +1636,9 @@
                      parameter="land" />
                 </menu_item_call>
             </menu>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Zoom In"
              name="Zoom In"
@@ -1642,8 +1660,27 @@
                 <menu_item_call.on_click
                  function="View.ZoomOut" />
             </menu_item_call>
-        </menu>
+            <menu_item_separator
+             visible="false"/>
+            <!-- Made invisible to avoid a dissonance: menu item toggle menu where it is located. EXT-8069.
+              Can't be removed to keep sortcut workable.
+            -->
+            <menu_item_check
+             label="Show Advanced Menu"
+             name="Show Advanced Menu"
+             shortcut="control|alt|D"
+             visible="false">
+                <on_check
+                 function="CheckControl"
+                 parameter="UseDebugMenus" />
+                <on_click
+                 function="ToggleControl"
+                 parameter="UseDebugMenus" />
+        </menu_item_check>
+        </menu> <!--Shortcuts-->
+
         <menu_item_separator/>
+
         <menu_item_call
          label="Show Debug Settings"
          name="Debug Settings">
@@ -1662,6 +1699,7 @@
              function="ToggleControl"
              parameter="QAMode" />
         </menu_item_check>
+    
     </menu>
     <menu
      create_jump_keys="true"
@@ -1752,7 +1790,9 @@
                  function="Advanced.ToggleConsole"
                  parameter="memory view" />
             </menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Region Info to Debug Console"
              name="Region Info to Debug Console">
@@ -1774,7 +1814,9 @@
                  function="Advanced.DumpInfoToConsole"
                  parameter="capabilities" />
             </menu_item_call>
+
             <menu_item_separator/>
+
             <menu_item_check
              label="Camera"
              name="Camera">
@@ -1862,7 +1904,9 @@
                  function="ToggleControl"
                  parameter="DebugShowColor" />
             </menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_check
              label="Show Updates to Objects"
              name="Show Updates"
@@ -1874,7 +1918,9 @@
                  function="Advanced.ToggleShowObjectUpdates" />
             </menu_item_check>
         </menu>
+
         <menu_item_separator/>
+
         <menu
          create_jump_keys="true"
          label="Force an Error"
@@ -2168,9 +2214,12 @@
             <menu_item_check.on_enable
                  function="Advanced.EnableRenderFBO" />
            </menu_item_check>
+
+          <menu_item_separator />
+
           <menu_item_check
-                       label="Deferred Rendering"
-                       name="Deferred Rendering">
+                       label="Lighting and Shadows"
+                       name="Lighting and Shadows">
             <menu_item_check.on_check
              function="CheckControl"
              parameter="RenderDeferred" />
@@ -2181,7 +2230,31 @@
                  function="Advanced.EnableRenderDeferred" />
           </menu_item_check>
           <menu_item_check
-                   label="Global Illumination"
+                       label="   Shadows from Sun/Moon/Projectors"
+                       name="Shadows from Sun/Moon/Projectors">
+            <menu_item_check.on_check
+             function="Advanced.CheckRenderShadowOption"
+             parameter="RenderShadowDetail" />
+            <menu_item_check.on_click
+             function="Advanced.ClickRenderShadowOption"
+             parameter="RenderShadowDetail" />
+            <menu_item_check.on_enable
+                 function="Advanced.EnableRenderDeferredOptions" />
+          </menu_item_check>
+          <menu_item_check
+                   label="   SSAO and Shadow Smoothing"
+                   name="SSAO and Shadow Smoothing">
+            <menu_item_check.on_check
+             function="CheckControl"
+             parameter="RenderDeferredSSAO" />
+            <menu_item_check.on_click
+             function="ToggleControl"
+             parameter="RenderDeferredSSAO" />
+            <menu_item_check.on_enable
+                 function="Advanced.EnableRenderDeferredOptions" />
+          </menu_item_check>
+          <menu_item_check
+                   label="   Global Illumination (experimental)"
                    name="Global Illumination">
             <menu_item_check.on_check
              function="CheckControl"
@@ -2190,9 +2263,11 @@
              function="ToggleControl"
              parameter="RenderDeferredGI" />
             <menu_item_check.on_enable
-                 function="Advanced.EnableRenderDeferredGI" />
+                 function="Advanced.EnableRenderDeferredOptions" />
           </menu_item_check>
+
           <menu_item_separator />
+
           <menu_item_check
              label="Debug GL"
              name="Debug GL">
@@ -2214,14 +2289,24 @@
                  parameter="RenderDebugPipeline" />
             </menu_item_check>
             <menu_item_check
-             label="Fast Alpha"
-             name="Fast Alpha">
+             label="Automatic Alpha Masks (deferred)"
+             name="Automatic Alpha Masks (deferred)">
+                <menu_item_check.on_check
+                 function="CheckControl"
+                 parameter="RenderAutoMaskAlphaDeferred" />
+                <menu_item_check.on_click
+                 function="ToggleControl"
+                 parameter="RenderAutoMaskAlphaDeferred" />
+            </menu_item_check>
+            <menu_item_check
+             label="Automatic Alpha Masks (non-deferred)"
+             name="Automatic Alpha Masks (non-deferred)">
                 <menu_item_check.on_check
                  function="CheckControl"
-                 parameter="RenderFastAlpha" />
+                 parameter="RenderAutoMaskAlphaNonDeferred" />
                 <menu_item_check.on_click
                  function="ToggleControl"
-                 parameter="RenderFastAlpha" />
+                 parameter="RenderAutoMaskAlphaNonDeferred" />
             </menu_item_check>
             <menu_item_check
              label="Animation Textures"
@@ -2264,7 +2349,7 @@
                parameter="AuditTexture" />
             </menu_item_check>
             <menu_item_check
-             label="Texture Atlas"
+             label="Texture Atlas (experimental)"
              name="Texture Atlas">
               <menu_item_check.on_check
                function="CheckControl"
@@ -2320,7 +2405,9 @@
                  function="ToggleControl"
                  parameter="AgentPause" />
             </menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Enable Message Log"
              name="Enable Message Log">
@@ -2333,7 +2420,9 @@
                 <menu_item_call.on_click
                  function="Advanced.DisableMessageLog" />
             </menu_item_call>
+
             <menu_item_separator/>
+
             <menu_item_check
              label="Velocity Interpolate Objects"
              name="Velocity Interpolate Objects">
@@ -2354,7 +2443,9 @@
                  function="ToggleControl"
                  parameter="PingInterpolate" />
             </menu_item_check>
+
             <menu_item_separator/>
+
             <menu_item_call
              label="Drop a Packet"
              name="Drop a Packet"
@@ -2542,6 +2633,7 @@
             </menu_item_check>
 
             <menu_item_separator />
+
             <menu_item_check
              label="Debug SelectMgr"
              name="Debug SelectMgr">
@@ -2887,7 +2979,9 @@
                  function="Advanced.DumpAvatarLocalTextures" />
             </menu_item_call>
         </menu>
+
         <menu_item_separator/>
+
         <menu_item_check
          label="HTTP Textures"
          name="HTTP Textures">
@@ -2924,7 +3018,9 @@
              function="ToggleControl"
              parameter="ShowConsoleWindow" />
         </menu_item_check>
+
         <menu_item_separator/>
+
         <menu_item_check
          label="Show Admin Menu"
          name="View Admin Options">
@@ -3259,7 +3355,9 @@
                      name="PublicIssueTrackerHelp_url"
                      parameter="WebLaunchPublicIssueHelp,http://wiki.secondlife.com/wiki/Issue_tracker" />
                 </menu_item_call>
+
                 <menu_item_separator/>
+
                 <menu_item_call
                  label="Bug Reporting 101"
                  name="Bug Reporing 101">
diff --git a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml
index 8af2e1eaca41a871596628c598afe033d112687b..5feac53c33680ff0f6eb67ebdc2cf65c09c0a6ac 100644
--- a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml
@@ -13,7 +13,7 @@
      layout="topleft"
      name="wear_wear">
         <on_click
-         function="Wearable.Add" />
+         function="Wearable.Wear" />
     </menu_item_call>
     <menu_item_call
      label="Add"
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
index 85505f9972748c0dc4eff2c974ff7876ef3b15f4..2d54e6960139d5115a6db9dc011874ad0c3cc2b4 100644
--- a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
@@ -2,6 +2,24 @@
 <context_menu
  layout="topleft"
  name="Wearing">
+    <menu_item_call
+     label="Take Off"
+     layout="topleft"
+     name="take_off">
+        <on_click
+         function="Wearing.TakeOff" />
+    </menu_item_call>
+    <menu_item_call
+     label="Detach"
+     layout="topleft"
+     name="detach">
+        <on_click
+         function="Wearing.Detach"
+         parameter="detach"/>
+    </menu_item_call>
+    <menu_item_separator
+     layout="topleft"
+     name="edit_outfit_separator" />
     <menu_item_call
      label="Edit Outfit"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 3576462cca57611a3c2f797a97d7d6ed8d53a0ce..609a9b09be4e9af0504bf2c125b8c8408a08daba 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4021,6 +4021,19 @@ Are you sure you want to quit?
      <unique/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="DeleteItems"
+   type="alertmodal">
+    [QUESTION]
+    <usetemplate
+     ignoretext="Confirm before deleting items"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="OK"/>
+    <unique/>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="HelpReportAbuseEmailLL"
diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
index 06bd1e9ff44d342a4e3dc0d1628b40646cceb31f..20ff492c0f319933146f8754e53a0122e7c265a4 100644
--- a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
+++ b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
@@ -9,6 +9,7 @@
  layout="topleft"
  name="Mockup Tab"
  selection_enabled="true"
+ tab_stop="false"
  title="Mockup Tab"
  translate="false"
  width="0">
diff --git a/indra/newview/skins/default/xui/en/panel_bars.xml b/indra/newview/skins/default/xui/en/panel_bars.xml
deleted file mode 100644
index 96722ce278036f8d6e697b5cb5a2fab674340302..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_bars.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- follows="left|right|top|bottom"
- height="768"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- name="screen"
- width="1024">
-  <layout_stack name="menu_stack" orientation="vertical" height="768" border_size="0">
-    <panel auto_resize="false" width="1024" name="status_bar" filename="panel_status_bar.xml"/>
-    <panel auto_resize="false" width="1024" height="60" name="navigation bar" filename="panel_navigation_bar.xml"/>
-    <layout_stack name="hud_stack" orientation="horizontal" auto_resize="true" width="1024" height="500" follows="all">
-      <panel auto_resize="true" name="floater_view" height="500"/>
-      <panel auto_resize="false" filename="panel_side_tray.xml" height="500" width="333"/>
-    </layout_stack>
-  </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml
index 4f989a6f6f1630beb855ec6d011c8dcc567c70a2..216a265164449775c8ba3868ee98763cb09ec2b5 100644
--- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml
@@ -41,7 +41,7 @@
      height="16"
      layout="topleft"
      left_pad="5"
-     allow_html="false"
+     parse_urls="false"
      use_ellipses="true"
      name="item_name"
      text_color="white"
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index 9124ad528d904b6242a52e62ae8eeb5d3d2299ed..17e8d4d2df9dc4cca96b4a5dcd405086b262528a 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -21,7 +21,7 @@
          top="3"
          width="18" />
     <text
-      allow_html="false"
+      parse_urls="false"
       allow_scroll="false"
       v_pad = "7"
       read_only = "true"
@@ -38,16 +38,17 @@
       use_ellipses="true"
       valign="bottom" 
       value="Ericag Vader" />
-    <text
-            font="SansSerifSmall"
-         follows="right"
-         halign="right"
-         height="13"
-         layout="topleft"
-         left_pad="5"
-     name="time_box"
-     right="-5"
-     top="8"
-         value="23:30"
-         width="110" />
+  <text
+    allow_scroll="false"
+    font="SansSerifSmall"
+    follows="right"
+    halign="right"
+    height="13"
+    layout="topleft"
+    left_pad="5"
+    name="time_box"
+    right="-5"
+    top="8"
+    value="23:30"
+    width="110" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index e66cf400b45626407344bbb4fedc9d4d9d82afe0..268cb4e5f94270e1748ab3dfe73acddf62dde137 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -202,7 +202,7 @@
          value="Category:"
          width="140" />
         <text_editor
-         allow_html="true"
+         parse_urls="true"
          allow_scroll="false"
          bg_visible="false"
          follows="left|top|right"
@@ -371,7 +371,7 @@
          value="Description:"
          width="250" />
         <text_editor
-         allow_html="true"
+         parse_urls="true"
          allow_scroll="true"
          bg_visible="false"
          follows="all"
diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
index e390b9e8367fa69fd19f762fb05110e42b775f0a..27c653bc354ae3b8ef83f3ab34e83e88051fa716 100644
--- a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
@@ -65,7 +65,6 @@
      left="103"
      name="description"
      textbox.max_length="1024"
-     textbox.label="More"
      textbox.show_context_menu="false" 
      top_pad="0"
      width="178"
diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml
index 93d7720c57be9df39d4001558adc145a0b6ad65d..cc0541e65c03bdffc517b8cd8d8891097ff0390f 100644
--- a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml
@@ -53,7 +53,7 @@
      height="16"
      layout="topleft"
      left_pad="5"
-     allow_html="false"
+     parse_urls="false"
      use_ellipses="true"
      name="item_name"
      text_color="white"
diff --git a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml
index 75b5fd1532f668803408d5e93855e9402c236ccc..de2ff0afc934af7d23f5465f43bc5d704b810bf1 100644
--- a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml
@@ -53,7 +53,7 @@
      height="16"
      layout="topleft"
      left_pad="5"
-     allow_html="false"
+     parse_urls="false"
      use_ellipses="true"
      name="item_name"
      text_color="white"
diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml
index a5dd34bd224caf08f356b38fcb9333da276ff032..df459b4083688831ee3974603f41634774fb58fc 100644
--- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml
@@ -42,7 +42,7 @@
      height="16"
      layout="topleft"
      left_pad="5"
-     allow_html="false"
+     parse_urls="false"
      use_ellipses="true"
      name="item_name"
      text_color="LtGray_50"
diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
index b674b39d9b10268b4c3ee09c6b165d93a9f3c1e9..ab34cbf20e4fac571e27f0aaa3b8d8812913b485 100644
--- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
@@ -36,7 +36,7 @@
      top="2"
      width="20" />
    <text
-     allow_html="false"
+     parse_urls="false"
      follows="left|right"
      font="SansSerifSmall"
      height="15"
diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index 65b2e81d50281e1be293d64648bda473313c25f0..6f271a757c4d52e235157c5c71e64ff03f8826fb 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -50,7 +50,7 @@
          width="230" />
     </panel>
     <text_editor
-     allow_html="true"
+     parse_urls="true"
      enabled="true"
      follows="all"
      height="0"
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 18a2f37ba2d068849787fab8f312e504037f6f27..4af4774304cbb6baf3e6215599967fd52f92ca97 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -103,7 +103,7 @@ clicking on their names.
              height="23"
              follows="top|left"
              label="Invite"
-             left="0"
+             left="5"
              name="member_invite"
              width="100" />
             <button
diff --git a/indra/newview/skins/default/xui/en/panel_inventory_item.xml b/indra/newview/skins/default/xui/en/panel_inventory_item.xml
index f1b7b92ece296460a94b915662a045f483b96b6f..2e38835810c73ba2ad79a5ec9373a348c48ae750 100644
--- a/indra/newview/skins/default/xui/en/panel_inventory_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_inventory_item.xml
@@ -41,7 +41,7 @@
      height="20"
      layout="topleft"
      left_pad="5"
-     allow_html="false"
+     parse_urls="false"
      use_ellipses="true"
      name="item_name"
      text_color="white"
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index a0a1e2963a95f84fbd10cae7d56df1942cd166f8..c5d6aced7aff08471ccdf8297b6ec31ae9d5de89 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -139,7 +139,6 @@
              layout="topleft"
              left="10"
              name="description"
-             textbox.label="More"
              top_pad="10"
              value="Du waltz die spritz"
              width="280" />
@@ -236,7 +235,7 @@
                  value="Title:"
                  width="290" />
                 <text
-                 allow_html="false"
+                 parse_urls="false"
                  follows="left|top"
                  height="22"
                  layout="topleft"
@@ -276,7 +275,7 @@
                  name="notes_editor"
                  read_only="true"
                  text_readonly_color="white"
-                 text_type="ascii"
+                 text_type="ascii_with_newline"
                  top_pad="5"
                  width="290"
                  wrap="true" />
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml
index c5f44cd049a8f68d4978f98979f0c3b82f83a403..d3a58fed5842e2977ca7f992d0378f8faa450d76 100644
--- a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml
@@ -16,7 +16,8 @@
    follows="top|left"
    height="15"
    left="10"
-   name="controls_label">
+   name="controls_label" 
+   text_readonly_color="LabelDisabledColor">
     Controls:
   </text>
   <combo_box
@@ -46,7 +47,8 @@
    follows="top|left" 
    height="15" 
    left="10" 
-   name="owner_label">
+   name="owner_label" 
+   text_readonly_color="LabelDisabledColor">
     Owner
   </text>
   
@@ -83,8 +85,9 @@
    enabled="false"
    follows="top|left" 
    height="15" 
-   left="10" 
-   name="group_label">
+   left="10"
+   name="group_label" 
+   text_readonly_color="LabelDisabledColor">
     Group:
   </text>
   
@@ -95,6 +98,7 @@
    font="SansSerif"
    height="20" left="60" 
    name="perms_group_name"
+   text_readonly_color="LabelDisabledColor"
    value ="" 
    width="200" />
    
@@ -132,7 +136,8 @@
    follows="top|left" 
    height="15" 
    left="10" 
-   name="anyone_label">
+   name="anyone_label" 
+   text_readonly_color="LabelDisabledColor">
     Anyone
   </text>
   
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index 2e49fc8d6fff39c648a68a507a90bb884bda6b48..4629bb9cfeb23333a5cde3f7fac20a806a359c6c 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -118,7 +118,6 @@
                layout="topleft"
                left="107"
                textbox.max_length="512"
-               textbox.label="More"
                textbox.show_context_menu="true"
                name="sl_description_edit"
                top_pad="-3"
@@ -175,7 +174,6 @@
                layout="topleft"
                left="107"
                textbox.max_length="512"
-               textbox.label="More"
                textbox.show_context_menu="true"
                name="fl_description_edit"
                top_pad="-3"
@@ -317,7 +315,6 @@
             name="sl_groups"
           top_pad="0"
             translate="false"
-            textbox.label="More"
             textbox.show_context_menu="true"
             width="298"
             expanded_bg_visible="true"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 2c9d7e4b6a5ddc00fce2723ecc8213f51e919c30..082d51ed3ccdebf911034fe66eea8ce3af64c1c3 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -97,6 +97,8 @@
 	     name="location_combo"
 	     top_delta="0"
 	     width="266">
+         <combo_list
+         mouse_wheel_opaque="true"/>
 	     <!-- *TODO: Delete.  Let the location_input use the correct art sizes.
 	        <location_input.add_landmark_button
 	         height="18"
diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index 34738745ebc6e078497b6022eaa59e03912c4021..59ead84127a7273cd4227a76bc1cdd9001713e05 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -78,7 +78,7 @@
       width="285"
       wrap="true"
       parse_highlights="true"
-      allow_html="true"/>
+      parse_urls="true"/>
   </panel>
   <panel
     background_visible="false"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index f6f1c33fe3d5c8b2e0235e790a375786d0ea1653..95c8cb301d39453c142453941419c3d6eb712fcd 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -101,7 +101,7 @@
          follows="all"
          height="100"
          width="280"
-         allow_html="true"	
+         parse_urls="true"	
          hide_scrollbar="false"
          layout="topleft"
          left="10"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
index 292bd472071bc957c3f75c0cd2d9cf3d3ea8970c..de147908d84f844343fac4c8ef22d1ca9ae432f0 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
@@ -65,7 +65,6 @@
      left="103"
      name="picture_descr"
      textbox.max_length="1024"
-     textbox.label="More"
      textbox.show_context_menu="false" 
      top_pad="0"
      width="178"
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 35e80758966623665c40d42ee93d918a60e21c7c..c6e93af50a35c1ecd063e98d73a61538375d4e87 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -264,7 +264,7 @@
                 </layout_panel>
             </layout_stack>
             <text
-             allow_html="false"
+             parse_urls="false"
              follows="left|top|right"
              font="SansSerifLarge"
              height="14"
@@ -277,7 +277,7 @@
              value="SampleRegion"
              width="290" />
             <text
-             allow_html="false"
+             parse_urls="false"
              follows="left|top|right"
              height="14"
              layout="topleft"
@@ -293,7 +293,6 @@
              layout="topleft"
              left="5"
              name="description"
-             textbox.label="More"
              top_pad="10"
              value="Du waltz die spritz"
              width="300" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index f4694180a121d36fc2eebbfba1f2a607f610da69..113d5fb6dc37dc89f365320d441218d29063417f 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -155,7 +155,7 @@
 	 visiblity_control="ShowAdvancedGraphicsSettings"
      border="false"
 	 follows="top|left"
-     height="260"
+     height="283"
      label="CustomGraphics"
      layout="topleft"
      left="5"
@@ -211,119 +211,112 @@
 			<check_box.commit_callback
 			function="Pref.VertexShaderEnable" />
 		</check_box>
-		<check_box
-		control_name="RenderWaterReflections"
+<!-- DISABLED UNTIL WE REALLY WANT TO SUPPORT THIS
+    <check_box
+		control_name="RenderDeferred"
 		height="16"
 		initial_value="true"
-		label="Water reflections"
+		label="Lighting and Shadows"
 		layout="topleft"
 		left_delta="0"
-		name="Reflections"
+		name="UseLightShaders"
 		top_pad="1"
 		width="256">
-			<check_box.commit_callback
+      <check_box.commit_callback
 			function="Pref.VertexShaderEnable" />
-		</check_box>
-		<text
-		type="string"
-		length="1"
-		follows="left|top"
-		height="12"
-		layout="topleft"
-		left_delta="0"
-		name="ReflectionDetailText"
-		top_pad="7"
-		width="128">
-			Reflection detail:
-		</text>
-		<radio_group
-		control_name="RenderReflectionDetail"
-		draw_border="false"
-		height="70"
-		layout="topleft"
-		left_delta="-2"
-		name="ReflectionDetailRadio"
-		top_pad="3"
-		width="321">
-			<radio_item
-			height="16"
-			label="Terrain and trees"
-			layout="topleft"
-			left="3"
-			name="0"
-			top="3"
-			width="315" />
-			<radio_item
-			height="16"
-			label="All static objects"
-			layout="topleft"
-			left_delta="0"
-			name="1"
-			top_delta="16"
-			width="315" />
-			<radio_item
-			height="16"
-			label="All avatars and objects"
-			layout="topleft"
-			left_delta="0"
-			name="2"
-			top_delta="16"
-			width="315" />
-			<radio_item
-			height="16"
-			label="Everything"
-			layout="topleft"
-			left_delta="0"
-			name="3"
-			top_delta="16"
-			width="315" />
-		</radio_group>
-		<text
-		type="string"
-		length="1"
-		follows="left|top"
-		height="12"
-		layout="topleft"
-		left_delta="2"
-		name="AvatarRenderingText"
-		top_pad="5"
-		width="158">
-			Avatar rendering:
-		</text>
-		<check_box
-		control_name="RenderUseImpostors"
-		height="16"
-		initial_value="true"
-		label="Avatar impostors"
-		layout="topleft"
-		left_delta="0"
-		name="AvatarImpostors"
-		top_pad="7"
-		width="256" />
-		<check_box
-		control_name="RenderAvatarVP"
+    </check_box>
+    <check_box
+		control_name="RenderDeferredSSAO"
 		height="16"
 		initial_value="true"
-		label="Hardware skinning"
+		label="Ambient Occlusion"
 		layout="topleft"
 		left_delta="0"
-		name="AvatarVertexProgram"
+		name="UseSSAO"
 		top_pad="1"
 		width="256">
-			<check_box.commit_callback
+      <check_box.commit_callback
 			function="Pref.VertexShaderEnable" />
-		</check_box>
-		<check_box
-		control_name="RenderAvatarCloth"
-		height="16"
-		initial_value="true"
-		label="Avatar cloth"
-		layout="topleft"
-		left_delta="0"
-		name="AvatarCloth"
-		top_pad="1"
-		width="256" />
+    </check_box>
 
+     <text
+    type="string"
+    length="1"
+    top_pad="8"
+    follows="top|left"
+    height="23"
+    width="110"
+    word_wrap="true"
+    layout="topleft"
+    left="10"
+    name="shadows_label">
+        Shadows:
+      </text>
+      <combo_box
+      control_name="RenderShadowDetail"
+      height="23"
+      layout="topleft"
+      left="10"
+      top_pad="0" 
+      name="ShadowDetail"
+      width="150">
+        <combo_box.item
+        label="None"
+        name="0"
+        value="0"/>
+        <combo_box.item
+        label="Sun/Moon"
+        name="1"
+        value="1"/>
+        <combo_box.item
+        label="Sun/Moon + Projectors"
+        name="2"
+        value="2"/>
+      </combo_box>
+-->
+      <text
+  type="string"
+  length="1"
+  top_pad="8"
+  follows="top|left"
+  height="23"
+  width="110"
+  word_wrap="true"
+  layout="topleft"
+  left="10"
+  name="reflection_label">
+        Water Reflections:
+      </text>
+      <combo_box
+      control_name="RenderReflectionDetail"
+      height="23"
+      layout="topleft"
+      left_="10"
+      top_pad ="0"
+      name="Reflections"
+      width="150">
+        <combo_box.item
+        label="Minimal"
+        name="0"
+        value="0"/>
+        <combo_box.item
+        label="Terrain and trees"
+        name="1"
+        value="1"/>
+        <combo_box.item
+        label="All static objects"
+        name="2"
+        value="2"/>
+        <combo_box.item
+        label="All avatars and objects"
+        name="3"
+        value="3"/>
+        <combo_box.item
+        label="Everything"
+        name="4"
+        value="4"/>
+      </combo_box>
+    
 		<slider
 		control_name="RenderFarClip"
 		decimal_digits="0"
@@ -615,49 +608,58 @@
         width="128">
            Low
         </text>
-        <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left="200"
-        name="LightingDetailText"
+      <text
+      type="string"
+      length="1"
+      follows="left|top"
+      height="12"
+      layout="topleft"
+      left_delta="-260"
+      name="AvatarRenderingText"
         top_pad="18"
-        width="140">
-           Lighting detail:
-        </text>
-        <radio_group
-        control_name="RenderLightingDetail"
-        draw_border="false"
-        height="38"
-        layout="topleft"
-        name="LightingDetailRadio"
-        top_pad="5"
-        width="200">
-           <radio_item
-            height="16"
-            label="Sun and moon only"
-            layout="topleft"
-            name="SunMoon"
-            value="0"
-            top="3"
-            width="156" />
-           <radio_item
-            height="16"
-            label="Nearby local lights"
-            layout="topleft"
-            name="LocalLights"
-            value="1"
-            top_delta="16"
-            width="156" />
-        </radio_group>
+      width="128">
+        Avatar rendering:
+      </text>
+      <check_box
+      control_name="RenderUseImpostors"
+      height="16"
+      initial_value="true"
+      label="Avatar impostors"
+      layout="topleft"
+      left_delta="0"
+      name="AvatarImpostors"
+      top_pad="7"
+      width="256" />
+      <check_box
+      control_name="RenderAvatarVP"
+      height="16"
+      initial_value="true"
+      label="Hardware skinning"
+      layout="topleft"
+      left_delta="0"
+      name="AvatarVertexProgram"
+      top_pad="1"
+      width="256">
+        <check_box.commit_callback
+        function="Pref.VertexShaderEnable" />
+      </check_box>
+      <check_box
+      control_name="RenderAvatarCloth"
+      height="16"
+      initial_value="true"
+      label="Avatar cloth"
+      layout="topleft"
+      left_delta="0"
+      name="AvatarCloth"
+      top_pad="1"
+      width="256" />
         <text
         type="string"
         length="1"
         follows="left|top"
         height="12"
         layout="topleft"
+        left="358"
         left_pad="-30"
         name="TerrainDetailText"
         top="226"
@@ -687,7 +689,7 @@
             name="2"
             top_delta="16"
             width="50" />
-        </radio_group>
+        </radio_group> -->
 	</panel>
 	
         <button
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index fc33836c79d8b28c64d9fc65461b453a8cf5ff67..e41b80baf274cdbbc2e99a94dde901eb0c590f5d 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -108,7 +108,6 @@
                layout="topleft"
                left="107"
                textbox.max_length="512"
-               textbox.label="More"
                textbox.show_context_menu="true"
                name="sl_description_edit"
                top_pad="-3"
@@ -155,7 +154,6 @@
                layout="topleft"
                left="107"
                textbox.max_length="512"
-               textbox.label="More"
                textbox.show_context_menu="true"
                name="fl_description_edit"
                top_pad="-3"
@@ -295,7 +293,6 @@
             left="7"
             name="sl_groups"
             textbox.max_length="512"
-            textbox.label="More"
             textbox.show_context_menu="true"
             top_pad="0"
             translate="false"
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index c5f3fcc27df8db88e51b7c96d022ec3928865ab4..d38ad8c5f880a63c3a122f9401d6615ce40ff8a0 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -41,7 +41,7 @@
      height="20"
      layout="topleft"
      left_pad="5"
-     allow_html="false"
+     parse_urls="false"
      use_ellipses="true"
      name="region"
      text_color="white"
diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
index d8f4297e0ccbbad71ac5ca8ebc0d8e737ba05cbe..30d3064e143db7a716577268daa3da1193dbdb2e 100644
--- a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
@@ -36,7 +36,7 @@
     enabled="true"
     follows="right|top"
     height="18"
-    image_name="Parcel_VoiceNo_Light"
+    image_name="Parcel_VoiceNo_Dark"
     name="voice_icon"
     top="1"
     visible="false"
@@ -45,7 +45,7 @@
   <icon
     follows="right|top"
     height="18"
-    image_name="Parcel_FlyNo_Light"
+    image_name="Parcel_FlyNo_Dark"
     name="fly_icon"
     top="1"
     visible="false"
@@ -54,7 +54,7 @@
   <icon
     follows="right|top"
     height="18"
-    image_name="Parcel_PushNo_Light"
+    image_name="Parcel_PushNo_Dark"
     name="push_icon"
     top="1"
     visible="false"
@@ -63,7 +63,7 @@
   <icon
     follows="right|top"
     height="18"
-    image_name="Parcel_BuildNo_Light"
+    image_name="Parcel_BuildNo_Dark"
     name="build_icon"
     top="1"
     visible="false"
@@ -72,7 +72,7 @@
   <icon
     follows="right|top"
     height="18"
-    image_name="Parcel_ScriptsNo_Light"
+    image_name="Parcel_ScriptsNo_Dark"
     name="scripts_icon"
     top="1"
     visible="false"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 048de700453757122b2c52a39dd3e780a62b8896..676bef2d0be736242a364a42d14c28dcd8fc4cce 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2282,6 +2282,9 @@ 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>
@@ -3024,6 +3027,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
   <string name="conference-title">
     Ad-hoc Conference
   </string>
+  <string name="conference-title-incoming">
+    [AGENT_NAME] Conference
+  </string>
   <string name="inventory_item_offered-im">
     Inventory item offered
   </string>
@@ -3255,4 +3261,10 @@ Abuse Report</string>
   <string name="Notices">Notices</string>
   <string name="Chat">Chat</string>
 
+  <!-- Question strings for delete items notifications -->
+  <string name="DeleteItems">Delete selected items?</string>
+  <string name="DeleteItem">Delete selected item?</string>
+
+  <string name="EmptyOutfitText">There are no items in this outfit</string>
+
   </strings>
diff --git a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml
index c08267de82703c86b99c7fb257a960c1acb7be17..0eec002006d53c9465b04973c7de7acc72d0b2e7 100644
--- a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml
@@ -21,7 +21,7 @@
    height="16"
    layout="topleft"
    left="21"
-   allow_html="false"
+   parse_urls="false"
    use_ellipses="true"
    name="item_name"
    text_color="white"
diff --git a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml
index f7a05e9bc4176ae383b131420dac34d0999afe45..96d72c78a65561e33c2897805b9dc17e55a2c24e 100644
--- a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml
@@ -21,7 +21,7 @@
    height="16"
    layout="topleft"
    left="42"
-   allow_html="false"
+   parse_urls="false"
    use_ellipses="true"
    name="item_name"
    text_color="white"
diff --git a/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml
index 88a4682e134a0a4c043c863ea26f550e5b132ee4..0534485ddd5386c3e8db56c0ae1b3588aaecdcd2 100644
--- a/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml
@@ -33,7 +33,7 @@
    height="16"
    layout="topleft"
    left="45"
-   allow_html="false"
+   parse_urls="false"
    use_ellipses="true"
    name="item_name"
    text_color="white"
diff --git a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml
index 80a877a6c2ac042c0b19c257224060349fc7b34a..6c60624805000dab89ff16fa3145a56ec7cd2e3e 100644
--- a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml
@@ -22,7 +22,7 @@
     height="16"
     layout="topleft"
     left="41"
-    allow_html="false"
+    parse_urls="false"
     use_ellipses="true"
     name="item_name"
     text_color="LtGray_50"
diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
index 216c4dea95cf0abad0b35bbdb6050c447d4af267..c6331ec87b234164e225df0b6f9d3ade5549cd1f 100644
--- a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
+++ b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
@@ -2,10 +2,9 @@
 <expandable_text
  max_height="300" >
  <textbox
-  allow_html="true"
+  parse_urls="true"
   allow_scroll="true"
   bg_visible="false"
-  label="More" 
   follows="left|top|right"
   name="text"
   read_only="true"
diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
index 0a5930c820453b52ab146385f23700a66593de2f..da9059c819f55aff71c098909fe73469c1e30312 100644
--- a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
@@ -32,7 +32,7 @@
     height="20"
     layout="topleft"
     left="21"
-    allow_html="false"
+    parse_urls="false"
     use_ellipses="true"
     name="item_name"
     text_color="white"
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml
index 63166f32b7f3d9c1fb6ffcd099678fabe7ddd7ba..dd9367580792eeb4af5a65b2f8db675a58648133 100644
--- a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml
+++ b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml
@@ -12,6 +12,7 @@
              draw_stripes="true"
              scroll_bar_bg_visible="false"
              scroll_bar_bg_color="black"
+             mouse_wheel_opaque="false"
              background_visible="true"
              heading_height="23"
              draw_border="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
index bb46ec09541a6ec41a216563999542ff6123bab7..3878c7a144c9481355954fc7007243d27318a61b 100644
--- a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <simple_text_editor
-  allow_html="false" 
+  parse_urls="false" 
   mouse_opaque="true"
   font="SansSerifSmall"
   max_length="255" 
@@ -15,11 +15,13 @@
   default_color="TextDefaultColor"
   text_color="TextFgColor"
   text_readonly_color="TextFgReadOnlyColor"
+  text_selected_color="White" 
   h_pad="6" 
   v_pad="4"
   bg_visible="true"
   bg_readonly_color="TextBgReadOnlyColor"
   bg_writeable_color="TextBgWriteableColor"
+  bg_selected_color="EmphasisColor"
   bg_focus_color="TextBgFocusColor">
   <simple_text_editor.border
     bevel_style="in"
diff --git a/indra/newview/skins/default/xui/en/widgets/text.xml b/indra/newview/skins/default/xui/en/widgets/text.xml
index 3006df22b878e413c5c0a0fbce926fd92ddaf610..134f2d75229719c15a16315adf11c8e609b1354f 100644
--- a/indra/newview/skins/default/xui/en/widgets/text.xml
+++ b/indra/newview/skins/default/xui/en/widgets/text.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<text allow_html="true"
+<text parse_urls="true"
       mouse_opaque="false" 
       name="text_box" 
       font="SansSerifSmall"
@@ -8,7 +8,7 @@
       halign="left" 
       h_pad="0" 
       allow_scroll="false"
-      text_readonly_color="LabelDisabledColor"
+      text_readonly_color="LabelTextColor"
       bg_writeable_color="FloaterDefaultBackgroundColor" 
       use_ellipses="false"
       bg_visible="false" 
diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml
index 2ced8b1b4ba33661c0028aae6b8d0c5a41f70182..180120ec89d22d2e48514c1cfb6444b0a495590d 100644
--- a/indra/newview/skins/default/xui/en/widgets/text_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/text_editor.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <!-- Core parameters are in simple_text_editor.xml -->
 <text_editor
-  allow_html="false"
+  parse_urls="false"
+  text_readonly_color="LabelDisabledColor"
   show_context_menu="true"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml
index 91a943ef159f9a74e44e731ea40f1e199a52b74f..a4b0675fe47c2261cd11750551b46005f9be4d29 100644
--- a/indra/newview/skins/default/xui/fr/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml
@@ -24,7 +24,7 @@
 	<check_box label="Contenu adulte" name="mature_check" tool_tip="Cette carte postale est à caractère adulte."/>
 	<button label="?" name="publish_help_btn"/>
 	<text_editor name="msg_form">
-		Saisir ici votre message.
+		Saisir ici votre message
 	</text_editor>
 	<text name="fine_print">
 		Si le destinataire s&apos;inscrit sur [SECOND_LIFE], vous recevrez un bonus.
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
index 82f5bac047134f0fab02c2fe803bb8733cab9e58..de8d25a494cc775b36e312f4e02011d06c922b21 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
@@ -19,7 +19,7 @@
 		Prévisualiser
 	</floater.string>
 	<floater.string name="none_text">
-		- Aucun choix -
+		-Aucun choix-
 	</floater.string>
 	<floater.string name="Title">
 		Geste : [NAME]
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 92f02ad1faebbfe7e48d4f092a7b10af0ccf53e9..b0c8636ea30b19ac92dec5f7395a7668e33b68b9 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -48,8 +48,8 @@
 		Glissez pour déplacer, Maj-glissez pour copier.
 	</text>
 	<radio_group name="focus_radio_group">
-		<radio_item label="Zoom" name="radio zoom"/>
-		<radio_item label="Orbite (Ctrl)" name="radio orbit"/>
+		<radio_item label="Zoomer" name="radio zoom"/>
+		<radio_item label="Faire tourner la caméra (Ctrl)" name="radio orbit"/>
 		<radio_item label="Faire un panoramique (Ctrl+Maj)" name="radio pan"/>
 	</radio_group>
 	<radio_group name="move_radio_group">
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
index 257c44795f85ee5091d35ac72029b5f0fd1fbc7b..6492a83e063cd7d6ad6af46f2fef9ba41e63e87b 100644
--- a/indra/newview/skins/default/xui/fr/menu_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object.xml
@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
-	<menu_item_call label="Toucher" name="Object Touch">
-		<on_enable parameter="Toucher" name="EnableTouch"/>
-	</menu_item_call>
-	<menu_item_call label="Modifier" name="Edit..."/>
+	<menu_item_call label="Toucher" name="Object Touch"/>
+	<menu_item_call label="Éditer" name="Edit..."/>
 	<menu_item_call label="Construire" name="Build"/>
 	<menu_item_call label="Ouvrir" name="Open"/>
 	<menu_item_call label="M&apos;asseoir ici" name="Object Sit"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_picks.xml b/indra/newview/skins/default/xui/fr/menu_picks.xml
index adb1cec8f5663f9a640d0afeaa76bba41454ea6f..7d7174d43ccad934af05bb513a5ae3dcb23ccd83 100644
--- a/indra/newview/skins/default/xui/fr/menu_picks.xml
+++ b/indra/newview/skins/default/xui/fr/menu_picks.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Picks">
 	<menu_item_call label="Infos" name="pick_info"/>
-	<menu_item_call label="Éditer" name="pick_edit"/>
+	<menu_item_call label="Modifier" name="pick_edit"/>
 	<menu_item_call label="Téléporter" name="pick_teleport"/>
 	<menu_item_call label="Carte" name="pick_map"/>
 	<menu_item_call label="Supprimer" name="pick_delete"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index c1321b71ea84c792a1850d3d6e812b3122688c8a..259ac4cee638b39767afc9b8a900c8a43e98ac63 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -909,7 +909,7 @@ Fusionner le terrain ?
 	</notification>
 	<notification name="CannotSaveToAssetStore">
 		Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
-Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l&apos;élément endossable à nouveau d&apos;ici quelques minutes.
+Cette erreur est généralement temporaire. Veuillez modifier et sauvegarder l&apos;élément endossable à nouveau d&apos;ici quelques minutes.
 	</notification>
 	<notification name="YouHaveBeenLoggedOut">
 		Zut. Vous avez été déconnecté(e) de [SECOND_LIFE]
@@ -1917,7 +1917,7 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
 		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
 	</notification>
 	<notification name="WLNoEditDefault">
-		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+		Vous ne pouvez pas modifier ou supprimer un préréglage par défaut.
 	</notification>
 	<notification name="WLMissingSky">
 		Une dossier semble manquer au Cycle du jour : [SKY].
@@ -1953,7 +1953,7 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
 		Ce préréglage existe déjà !
 	</notification>
 	<notification name="WaterNoEditDefault">
-		Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+		Vous ne pouvez pas modifier ou supprimer un préréglage par défaut.
 	</notification>
 	<notification name="ChatterBoxSessionStartError">
 		Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
diff --git a/indra/newview/skins/default/xui/fr/panel_pick_info.xml b/indra/newview/skins/default/xui/fr/panel_pick_info.xml
index e9572caac76ff4862a02b5700770c48345de9fa5..3ca1e9a21b86ab019df9a1664331015933ae85e3 100644
--- a/indra/newview/skins/default/xui/fr/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/fr/panel_pick_info.xml
@@ -11,6 +11,6 @@
 	<panel name="buttons">
 		<button label="Téléporter" name="teleport_btn"/>
 		<button label="Carte" name="show_on_map_btn"/>
-		<button label="Éditer" name="edit_btn"/>
+		<button label="Modifier" name="edit_btn"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
index ea161ecae85fa09f80a5ac334d8caacf07aedc54..3b3b676aa15ac7e5cff98c3f8220413105c2b5db 100644
--- a/indra/newview/skins/default/xui/fr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
@@ -25,7 +25,7 @@
 			<menu_item_call label="Enregistrer" name="Save"/>
 			<menu_item_call label="Annuler tous les changements" name="Revert All Changes"/>
 		</menu>
-		<menu label="Éditer" name="Edit">
+		<menu label="Modifier" name="Edit">
 			<menu_item_call label="Annuler" name="Undo"/>
 			<menu_item_call label="Refaire" name="Redo"/>
 			<menu_item_call label="Couper" name="Cut"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
index ed2e037d3c0c0317715f69e65574d058b6fc8d3a..0f49061002e151c527ff4fe690cd42969292f65f 100644
--- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
@@ -18,8 +18,8 @@
 	<icon name="icon_bodypart" tool_tip="Części Ciała"/>
 	<check_box label="Ubranie" name="check_clothing"/>
 	<icon name="icon_clothing" tool_tip="Ubranie"/>
-	<check_box label="Gestury" name="check_gesture"/>
-	<icon name="icon_gesture" tool_tip="Gestury"/>
+	<check_box label="Gesturki" name="check_gesture"/>
+	<icon name="icon_gesture" tool_tip="Gesturki"/>
 	<check_box label="Noty" name="check_notecard"/>
 	<icon name="icon_notecard" tool_tip="Noty"/>
 	<check_box label="Obiekty" name="check_object"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml
index dccb7ed2bb8b5ff4ee86ad86b9548e94b876a13c..c9243fda65b8a63ae475113682d989d368685046 100644
--- a/indra/newview/skins/default/xui/pl/floater_pay.xml
+++ b/indra/newview/skins/default/xui/pl/floater_pay.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Give Money" title="">
 	<string name="payee_group">
-		Zapłać Grupie
+		Zapłać grupie
 	</string>
 	<string name="payee_resident">
 		Zapłać Rezydentowi
diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml
index d0c69a6c21a8975b85be74b7083046a0db8a9daa..19032b3e5deedf0314a69d686a275d05b220217c 100644
--- a/indra/newview/skins/default/xui/pl/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_pay_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Give Money" title="">
 	<string halign="left" name="payee_group" width="100">
-		Zapłać Grupie
+		Zapłać grupie
 	</string>
 	<string halign="left" name="payee_resident" width="120">
 		Zapłać Rezydentowi
@@ -11,7 +11,7 @@
 		[FIRST] [LAST]
 	</text>
 	<text halign="left" left="5" name="object_name_label" width="95">
-		Poprzez Obiekt:
+		Poprzez obiekt:
 	</text>
 	<icon name="icon_object" tool_tip="Obiekt"/>
 	<text left="105" name="object_name_text">
diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml
index a3515915bf70387047027fcb665c4b7084ba4f64..e3dce849331c1fc11a822c3657148034c3e1aa12 100644
--- a/indra/newview/skins/default/xui/pl/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="Post-Process Floater" title="USTAWIENIA PRZETWARZANIA KOŃCOWEGO">
 	<tab_container name="Post-Process Tabs">
-		<panel label="Kolor Filtru" name="wmiColorFilterPanel">
+		<panel label="Kolor filtra" name="wmiColorFilterPanel">
 			<check_box label="Udostępnij" name="wmiColorFilterToggle" />
 			<text name="wmiColorFilterBrightnessText">
 				Jasność
diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml
index 095974aa6133b6085101294a2b278417d8ac705e..fe796c6fa00c15d4a1fdc202e193c1f4112761de 100644
--- a/indra/newview/skins/default/xui/pl/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/pl/floater_postcard.xml
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ (EMAIL)">
 	<text name="to_label">
-		Email Odbiorcy:
+		Email odbiorcy:
 	</text>
 	<text name="from_label">
-		Twój Email:
+		Twój email:
 	</text>
 	<text name="name_label">
-		Twoje Dane:
+		Twoje dane:
 	</text>
 	<text name="subject_label">
 		Temat:
@@ -20,7 +20,7 @@
 		Wpisz treść swojej wiadomości tutaj
 	</text_editor>
 	<text name="fine_print">
-		Jeżeli Odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonus.
+		Jeżeli odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonus.
 	</text>
 	<button label="Anuluj" name="cancel_btn"/>
 	<button label="Wyślij" name="send_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml
index 9ae63031b6ac657caeaa02c66b6b878f88279578..817122566692449aaf893a50a1aebcbda58b4bf4 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml
@@ -67,7 +67,7 @@
 	<text name="help_label">
 		Wszystkie etapy nastąpią razem, chyba, że dodasz pauzy.
 	</text>
-	<check_box label="Aktywny" name="active_check" tool_tip="Aktywne gesty można włączać używając przypisanej frazy w czacie albo używając przypisanego klawisza skrótowego. W przypaku konfliktu przypisań gesty zazwyczaj nie będą działać."/>
+	<check_box label="Aktywna" name="active_check" tool_tip="Aktywne gesturki można włączać używając przypisanej frazy w czacie albo używając przypisanego klawisza skrótowego. W przypaku konfliktu przypisań gesty zazwyczaj nie będą działać."/>
 	<button label="Pokaż" name="preview_btn"/>
 	<button label="Zapisz" name="save_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
index d31cada96d44e7374fcd536e5de98250c0339397..a041472f68f70d7dee899b0efc74e13863bc4795 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GEST"/>
+<floater name="Gesture" title="GESTURKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
index d33b799476ef6e8bd78967de2087ce9b8adf22b9..9692fca9cd78e5ad7a166bb78e6ec6fc833b0cee 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTY">
+<floater name="Gesture" title="GESTURKI">
 	<text name="trigger_label">
 		Czat:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
index 6592d9dad0f97ff19e0d748d691c702c448be67a..a041472f68f70d7dee899b0efc74e13863bc4795 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTY"/>
+<floater name="Gesture" title="GESTURKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
index d02b3ca75ee2a80f3b0266a89aeb30c36921d5f8..3825fe742e4b31df1f6843fb47b3c17d2128079d 100644
--- a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
@@ -7,5 +7,5 @@
 		Opis:
 	</text>
 	<button label="Odtwarzaj" label_selected="Odtwarzaj" left_delta="-136" name="Sound play btn" tool_tip="Dźwięk będzie słyszalny przez wszystkich." width="130"/>
-	<button label="Odtwarzaj Lokalnie" label_selected="Odtwarzaj lokalnie" name="Sound audition btn" tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie."/>
+	<button label="Odtwarzaj lokalnie" label_selected="Odtwarzaj lokalnie" name="Sound audition btn" tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie."/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
index a6f8ba6c11d7bc3e73f53a403dd866f8bfcb5c26..a5b96601b88bb029937c3d5bc0ad8ff39319a0ac 100644
--- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
@@ -27,7 +27,7 @@
 	</text>
 	<button label="" label_selected="" name="pick_btn" tool_tip="Wybór obiektu - wybierz obiekt, którego dotyczy raport"/>
 	<text name="object_name_label">
-		Nazwa Obiektu:
+		Nazwa obiektu:
 	</text>
 	<text name="object_name">
 		Consetetur Sadipscing
@@ -67,8 +67,8 @@
 		<combo_box.item label="Prześladowanie &gt; Znieważanie Słowne" name="Harassment__Verbal_abuse"/>
 		<combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść lub postępowanie" name="Indecency__Broadly_offensive_content_or_conduct"/>
 		<combo_box.item label="Nieprzyzwoitość &gt; Niestosowne imię awatara" name="Indecency__Inappropriate_avatar_name"/>
-		<combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w Regionie &apos;PG&apos;" name="Indecency__Mature_content_in_PG_region"/>
-		<combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w Regionie &apos;Mature&apos;" name="Indecency__Inappropriate_content_in_Mature_region"/>
+		<combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w Regionie &apos;General&apos;" name="Indecency__Mature_content_in_PG_region"/>
+		<combo_box.item label="Nieprzyzwoitość &gt; Obraźliwa treść i postępowanie w Regionie &apos;Moderate&apos;" name="Indecency__Inappropriate_content_in_Mature_region"/>
 		<combo_box.item label="Naruszenie własności intelektualnej &gt; usunięcie treści" name="Intellectual_property_infringement_Content_Removal"/>
 		<combo_box.item label="Naruszenie własności intelektualnej &gt; CopyBot albo nadużycie przywilejów" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/>
 		<combo_box.item label="Nietolerancja" name="Intolerance"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml
index cb010daee4ed6247da146212da45fcd719e27ab4..901d61a1377923340882121d782780707de05bb4 100644
--- a/indra/newview/skins/default/xui/pl/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml
@@ -3,7 +3,7 @@
 	<check_box label="CapsLoock nieaktywny" name="case_text"/>
 	<button label="Szukaj" label_selected="Szukaj" name="search_btn"/>
 	<button label="Zamień" label_selected="Zamień" name="replace_btn"/>
-	<button label="Zamień Wszystko" label_selected="Zamień wszystko" name="replace_all_btn"/>
+	<button label="Zamień wszystko" label_selected="Zamień wszystko" name="replace_all_btn"/>
 	<text name="txt">
 		Szukaj
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
index eb1ed74797e2a01e3adf192d258ed5500a031b66..528e5a416b7368213d5409f0fac959d1f4b25474 100644
--- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
@@ -15,13 +15,13 @@
 				[AREA] m²
 			</text>
 			<text name="info_action">
-				Aby sprzedać tą Posiadłość:
+				Aby sprzedać tą posiadłość:
 			</text>
 			<text name="price_label">
 				1. Ustal cenÄ™:
 			</text>
 			<text name="price_text">
-				Wybierz właściwą cenę za tą Posiadłość.
+				Wybierz właściwą cenę za tą posiadłość.
 			</text>
 			<text name="price_ld">
 				L$
@@ -33,7 +33,7 @@
 				(L$[PER_METER] za m²)
 			</text>
 			<text name="sell_to_label">
-				2. Sprzedaj Posiadłość:
+				2. Sprzedaj posiadłość:
 			</text>
 			<text name="sell_to_text">
 				Wybierz sprzedaż dla kogokolwiek albo dla wybranego kupca.
@@ -45,14 +45,14 @@
 			</combo_box>
 			<button label="Wybierz" name="sell_to_select_agent"/>
 			<text name="sell_objects_label">
-				3. Obiekty sprzedawane razem z Posiadłością?
+				3. Obiekty sprzedawane razem z posiadłością?
 			</text>
 			<text name="sell_objects_text">
-				Przekazywalne obiekty właściciela Posiadłości zmienią właściciela.
+				Przekazywalne obiekty właściciela posiadłości zmienią właściciela.
 			</text>
 			<radio_group name="sell_objects">
 				<radio_item label="Nie, zatrzymaj obiekty" name="no"/>
-				<radio_item label="Tak, sprzedaj obiekty razem z Posiadłością" name="yes"/>
+				<radio_item label="Tak, sprzedaj obiekty razem z posiadłością" name="yes"/>
 			</radio_group>
 			<button label="Pokaż Obiekty" name="show_objects"/>
 			<text name="nag_message_label">
diff --git a/indra/newview/skins/default/xui/pl/floater_stats.xml b/indra/newview/skins/default/xui/pl/floater_stats.xml
index ee5fba4d63573740674cf3fbbd719042fe868443..886a30e5d9dff88fc1d8f1378fd0ff39501c38e5 100644
--- a/indra/newview/skins/default/xui/pl/floater_stats.xml
+++ b/indra/newview/skins/default/xui/pl/floater_stats.xml
@@ -30,18 +30,18 @@
 					<stat_bar label="Tesktura" name="texturekbitstat"/>
 					<stat_bar label="Asset" name="assetkbitstat"/>
 					<stat_bar label="Podkład" name="layerskbitstat"/>
-					<stat_bar label="Aktualna Ilość Wewnętrzna" name="actualinkbitstat"/>
-					<stat_bar label="Aktualna Ilość Zewnętrzna" name="actualoutkbitstat"/>
+					<stat_bar label="Aktualna ilość wewnętrzna" name="actualinkbitstat"/>
+					<stat_bar label="Aktualna ilość zewnętrzna" name="actualoutkbitstat"/>
 					<stat_bar label="VFS Pending Ops" name="vfspendingoperations"/>
 				</stat_view>
 			</stat_view>
 			<stat_view label="Symulator" name="sim">
-				<stat_bar label="Czas Rozszerzenia" name="simtimedilation"/>
-				<stat_bar label="Ilość Obrazów/Sec na Symulatorze (Sim FPS)" name="simfps"/>
-				<stat_bar label="Fizyka Obrazów/Sec" name="simphysicsfps"/>
-				<stat_view label="Szczegóły Fizyki" name="physicsdetail">
+				<stat_bar label="Czas rozszerzenia" name="simtimedilation"/>
+				<stat_bar label="Ilość obrazów/Sec na symulatorze (Sim FPS)" name="simfps"/>
+				<stat_bar label="Fizyka obrazów/Sec" name="simphysicsfps"/>
+				<stat_view label="Szczegóły fizyki" name="physicsdetail">
 					<stat_bar label="Pinned objects" name="physicspinnedtasks"/>
-					<stat_bar label="Niskie LOD Obiektów" name="physicslodtasks"/>
+					<stat_bar label="Niskie LOD obiektów" name="physicslodtasks"/>
 					<stat_bar label="Alokacja pamięci" name="physicsmemoryallocated"/>
 					<stat_bar label="Aktualizacja agentów/Sek" name="simagentups"/>
 					<stat_bar label="Główni agenci" name="simmainagents"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index 7e97297bca2422838614abc7ec1639173c2597f1..817a72efd960177950afbc770b067163e5f24552 100644
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -22,7 +22,7 @@
 		Kliknij in-world by zacząć budować
 	</floater.string>
 	<floater.string name="status_selectland">
-		Edytowanie Terenu:
+		Edytowanie terenu:
 	</floater.string>
 	<floater.string name="grid_screen_text">
 		Widok
@@ -71,7 +71,7 @@
 	<text label="RozciÄ…gnij 2 strony" name="checkbox uniform label">
 		RozciÄ…gnij 2 strony
 	</text>
-	<check_box initial_value="true" label="RozciÄ…gnij TeksturÄ™" name="checkbox stretch textures"/>
+	<check_box initial_value="true" label="RozciÄ…gnij teksturÄ™" name="checkbox stretch textures"/>
 	<check_box initial_value="true" label="Użyj siatki" name="checkbox snap to grid"/>
 	<combo_box name="combobox grid mode" tool_tip="Wybierz rodzaj linijki siatki dla pozycjonowania obiektu">
 		<combo_box.item label="Åšwiat" name="World"/>
@@ -218,11 +218,11 @@
 				<check_box label="Przesuń" name="checkbox allow everyone move"/>
 				<check_box label="Kopiuj" name="checkbox allow everyone copy"/>
 				<text name="Next owner can:">
-					Następny Właściciel:
+					Następny właściciel:
 				</text>
 				<check_box label="Zmienia" name="checkbox next owner can modify"/>
 				<check_box label="Kopiuje" name="checkbox next owner can copy"/>
-				<check_box label="Oddaje/Sprzedaje" name="checkbox next owner can transfer" tool_tip="Następny Właściciel może oddawać lub sprzedawać ten obiekt"/>
+				<check_box label="Oddaje/Sprzedaje" name="checkbox next owner can transfer" tool_tip="Następny właściciel może oddawać lub sprzedawać ten obiekt"/>
 				<text name="B:">
 					B:
 				</text>
@@ -299,7 +299,7 @@
 			<spinner name="Scale 1"/>
 			<spinner name="Skew"/>
 			<text name="Hollow Shape">
-				Kształt Wydrążenia
+				Kształt wydrążenia
 			</text>
 			<combo_box name="hole">
 				<combo_box.item label="Domyślny" name="Default"/>
@@ -399,7 +399,7 @@
 			<texture_picker label="Tekstura" name="texture control" tool_tip="Kliknij by wybrać obraz"/>
 			<color_swatch label="Kolor" name="colorswatch" tool_tip="Kliknij aby wybrać kolor"/>
 			<text left="170" name="color trans" width="99">
-				Przezroczystość%
+				Przezroczystość %
 			</text>
 			<spinner left="170" name="ColorTrans"/>
 			<text left="170" name="glow label">
@@ -431,9 +431,9 @@
 				<combo_box.item label="Najjaśniejsza" name="Brightness"/>
 				<combo_box.item label="Najciemniejsza" name="Darkness"/>
 				<combo_box.item label="Drewniano-ziarnista" name="woodgrain"/>
-				<combo_box.item label="Kory Drzewa" name="bark"/>
+				<combo_box.item label="Kory drzewa" name="bark"/>
 				<combo_box.item label="Cegieł" name="bricks"/>
-				<combo_box.item label="Planszy Szachowej" name="checker"/>
+				<combo_box.item label="Planszy szachowej" name="checker"/>
 				<combo_box.item label="Betonu" name="concrete"/>
 				<combo_box.item label="PÅ‚ytki/Kafelki" name="crustytile"/>
 				<combo_box.item label="Kamienia" name="cutstone"/>
@@ -441,7 +441,7 @@
 				<combo_box.item label="Żwiru" name="gravel"/>
 				<combo_box.item label="Skamieliny" name="petridish"/>
 				<combo_box.item label="Brzegu" name="siding"/>
-				<combo_box.item label="PÅ‚ytki Kamiennej" name="stonetile"/>
+				<combo_box.item label="PÅ‚ytki kamiennej" name="stonetile"/>
 				<combo_box.item label="Stucco" name="stucco"/>
 				<combo_box.item label="Suction" name="suction"/>
 				<combo_box.item label="Fali" name="weave"/>
@@ -478,7 +478,7 @@
 	</tab_container>
 	<panel name="land info panel">
 		<text name="label_parcel_info">
-			Informacje o Posiadłości
+			Informacje o posiadłości
 		</text>
 		<text name="label_area_price">
 			Cena: L$[PRICE] za [AREA] m²
@@ -487,16 +487,16 @@
 			Obszar: [AREA] m²
 		</text>
 		<button label="O Posiadłości" label_selected="O Posiadłości" name="button about land"/>
-		<check_box label="Pokaż Właścicieli" name="checkbox show owners" tool_tip="Pokoloruj Posiadłości zgodnie z przynależnością do Właściciela:   Zielony = Twoja Posiadłość  Morski = Posiadłość Twojej Grupy  Czerwony = Posiadłości innych  Żółty = Na sprzedaż  Fioletowy = Na aukcję  Szary = Publiczna"/>
+		<check_box label="Pokaż właścicieli" name="checkbox show owners" tool_tip="Pokoloruj posiadłości zgodnie z przynależnością do właściciela:   Zielony = Twoja posiadłość  Morski = posiadłość Twojej grupy  Czerwony = posiadłości innych  Żółty = Na sprzedaż  Fioletowy = Na aukcję  Szary = Publiczna"/>
 		<text name="label_parcel_modify">
-			Modyfikuj Posiadłość
+			Modyfikuj posiadłość
 		</text>
 		<button label="Podziel" label_selected="Podziel" name="button subdivide land"/>
 		<button label="ZÅ‚Ä…cz" label_selected="ZÅ‚Ä…cz" name="button join land"/>
 		<text name="label_parcel_trans">
-			Transakcje na Posiadłości
+			Transakcje na posiadłości
 		</text>
-		<button label="Kup Posiadłość" label_selected="Kup Posiadłość" name="button buy land"/>
-		<button label="Porzuć Posiadłość" label_selected="Porzuć Posiadłość" name="button abandon land"/>
+		<button label="Kup posiadłość" label_selected="Kup posiadłość" name="button buy land"/>
+		<button label="Porzuć posiadłość" label_selected="Porzuć posiadłość" name="button abandon land"/>
 	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
index 6afbce7e1064b287650e2f4f46fdda9a3cac7d12..2b06ae9f782ec7ae600abec27109c88f0e98d6a8 100644
--- a/indra/newview/skins/default/xui/pl/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
@@ -10,7 +10,7 @@
 		Czas
 	</floater.string>
 	<floater.string name="scripts_mono_time_label">
-		Mono Time
+		Czas Mono
 	</floater.string>
 	<floater.string name="top_colliders_title">
 		Główne kolizje
@@ -33,7 +33,7 @@
 		<scroll_list.columns label="Właściciel" name="owner"/>
 		<scroll_list.columns label="Miejsce" name="location"/>
 		<scroll_list.columns label="Czas" name="time"/>
-		<scroll_list.columns label="Mono Time" name="mono_time"/>
+		<scroll_list.columns label="Czas Mono" name="mono_time"/>
 		<scroll_list.columns label="URL" name="URLs"/>
 	</scroll_list>
 	<text name="id_text">
@@ -51,6 +51,6 @@
 	<button label="Odśwież" name="refresh_btn"/>
 	<button label="Zwróć wybrane" name="return_selected_btn"/>
 	<button label="Zwróć wszystko" name="return_all_btn"/>
-	<button label="Deaktywuj wybrane" name="disable_selected_btn"/>
-	<button label="Deaktywuj wszystko" name="disable_all_btn"/>
+	<button label="Dezaktywuj wybrane" name="disable_selected_btn"/>
+	<button label="Dezaktywuj wszystko" name="disable_all_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
index 49e523fae8bc75a18af9ec3eba05ff2d7f3ac726..930e90446483a382605f11018417ab882436057c 100644
--- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
@@ -77,7 +77,7 @@
 		</panel>
 		<panel label="ŚWIATŁO" name="Lighting">
 			<text name="SLCText">
-				Kolor słońca/księżyca
+				Kolor Słońca/Księżyca
 			</text>
 			<button label="?" name="WLSunlightColorHelp"/>
 			<text name="BHText">
@@ -97,7 +97,7 @@
 			<slider label="" name="WLSunlightB"/>
 			<slider label="" name="WLSunlightI"/>
 			<text name="TODText">
-				Pozycja słońca/księżyca
+				Pozycja Słońca/Księżyca
 			</text>
 			<button label="?" name="WLTimeOfDayHelp"/>
 			<slider label="" name="WLSunAngle"/>
@@ -127,7 +127,7 @@
 			<button label="?" name="WLEastAngleHelp"/>
 			<slider label="" name="WLEastAngle"/>
 			<text name="SunGlowText">
-				Blask słońca
+				Blask Słońca
 			</text>
 			<button label="?" name="WLSunGlowHelp"/>
 			<slider label="Ostrość" name="WLGlowB"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml
index 5bf394f45abfe9d477bbc344430c04e8109fe32f..4f533373658e2291033a2126f22f11b08abfb793 100644
--- a/indra/newview/skins/default/xui/pl/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml
@@ -17,13 +17,13 @@
 			Infohub
 		</text>
 		<text name="land_sale_label">
-			Sprzedaż Posiadłości
+			Sprzedaż posiadłości
 		</text>
 		<text name="auction_label">
-			aukcja Posiadłości
+			Aukcja posiadłości
 		</text>
 		<text name="by_owner_label">
-			przez Właściciela
+			przez właściciela
 		</text>
 		<button name="Go Home" tool_tip="Teleportuj do mojego Miejsca Startowego"/>
 		<text name="Home_label">
@@ -33,11 +33,11 @@
 			Wydarzenia:
 		</text>
 		<text name="pg_label">
-			Ogólne
+			General
 		</text>
 		<check_box initial_value="true" name="events_mature_chk"/>
 		<text name="events_mature_label">
-			Moderuj
+			Moderate
 		</text>
 		<text name="events_adult_label">
 			Adult
@@ -49,13 +49,13 @@
 		</text>
 	</panel>
 	<panel name="layout_panel_4">
-		<combo_box label="Dostępni Znajomi" name="friend combo" tool_tip="Pokaż znajomych na mapie">
-			<combo_box.item label="Moi Dostępni Znajomi" name="item1"/>
+		<combo_box label="Dostępni znajomi" name="friend combo" tool_tip="Pokaż znajomych na mapie">
+			<combo_box.item label="Moi dostępni znajomi" name="item1"/>
 		</combo_box>
-		<combo_box label="Zapisane Miejsca" name="landmark combo" tool_tip="Pokaż zapisane miejsce na mapie">
-			<combo_box.item label="Zapisane Miejsca" name="item1"/>
+		<combo_box label="Zapisane miejsca" name="landmark combo" tool_tip="Pokaż zapisane miejsce na mapie">
+			<combo_box.item label="Zapisane miejsca" name="item1"/>
 		</combo_box>
-		<search_editor label="Regiony Według Nazwy" name="location" tool_tip="Wpisz nazwę regionu"/>
+		<search_editor label="Regiony według nazwy" name="location" tool_tip="Wpisz nazwę regionu"/>
 		<button label="Znajdź" name="DoSearch" tool_tip="Szukaj regionu"/>
 		<button name="Clear" tool_tip="Wyczyść zapamiętane linie oraz zresetuj mapę"/>
 		<text name="events_label">
diff --git a/indra/newview/skins/default/xui/pl/inspect_avatar.xml b/indra/newview/skins/default/xui/pl/inspect_avatar.xml
index 3ee0b976eb76d2670dd0c273cc7dbca85627192f..778e500bc02f8d8ccfb610f61160c12e3de306de 100644
--- a/indra/newview/skins/default/xui/pl/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/pl/inspect_avatar.xml
@@ -10,8 +10,8 @@
 	<string name="Details">
 		[SL_PROFILE]
 	</string>
-	<slider name="volume_slider" tool_tip="Posiom Głośności" value="0.5"/>
-	<button label="Dodaj Znajomość" name="add_friend_btn"/>
+	<slider name="volume_slider" tool_tip="Poziom głośności" value="0.5"/>
+	<button label="Dodaj znajomość" name="add_friend_btn"/>
 	<button label="IM" name="im_btn"/>
 	<button label="Profil" name="view_profile_btn"/>
 	<panel name="moderator_panel">
diff --git a/indra/newview/skins/default/xui/pl/inspect_group.xml b/indra/newview/skins/default/xui/pl/inspect_group.xml
index 0a2a62ce74b3cf084af8a9c8ae72ffb512db94c1..63c79acc8c13c548644e23db37e9cda9825bd5c2 100644
--- a/indra/newview/skins/default/xui/pl/inspect_group.xml
+++ b/indra/newview/skins/default/xui/pl/inspect_group.xml
@@ -18,5 +18,5 @@
 	</string>
 	<button label="Dołącz" name="join_btn"/>
 	<button label="Opuść" name="leave_btn"/>
-	<button label="Zobacz Profil" name="view_profile_btn"/>
+	<button label="Zobacz profil" name="view_profile_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/inspect_object.xml b/indra/newview/skins/default/xui/pl/inspect_object.xml
index 4217731ef70896bca4a74403410fa5a62dca6c92..23d8ce77004e97fef09fab70c456268948dc71a1 100644
--- a/indra/newview/skins/default/xui/pl/inspect_object.xml
+++ b/indra/newview/skins/default/xui/pl/inspect_object.xml
@@ -8,7 +8,7 @@
 		Przez [CREATOR]
 	</string>
 	<string name="CreatorAndOwner">
-		Kreator [CREATOR]
+		Twórca [CREATOR]
 Właściciel [OWNER]
 	</string>
 	<string name="Price">
diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_other.xml b/indra/newview/skins/default/xui/pl/menu_attachment_other.xml
index 8a3269a923245920db3ce4f51a645af1c96f6cd7..aacdad97e3e932105f1cc6f0e5d18064d2d37fdd 100644
--- a/indra/newview/skins/default/xui/pl/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/pl/menu_attachment_other.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!-- *NOTE: See also menu_avatar_other.xml -->
 <context_menu name="Avatar Pie">
-	<menu_item_call label="Zobacz Profil" name="Profile..."/>
-	<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
+	<menu_item_call label="Zobacz profil" name="Profile..."/>
+	<menu_item_call label="Dodaj znajomość" name="Add Friend"/>
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Zadzwoń" name="Call"/>
-	<menu_item_call label="ZaproÅ› do Grupy" name="Invite..."/>
+	<menu_item_call label="ZaproÅ› do grupy" name="Invite..."/>
 	<menu_item_call label="Zablokuj" name="Avatar Mute"/>
 	<menu_item_call label="Raport" name="abuse"/>
 	<menu_item_call label="Unieruchom" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
index 39fe83ad2ff0de00d1af095b9e86d9ba470984bc..cdc01f286c114982ec2a577c32e2454d5045280b 100644
--- a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
@@ -7,9 +7,9 @@
 	<menu_item_call label="Zmień strój" name="Change Outfit"/>
 	<menu_item_call label="Edytuj mój strój" name="Edit Outfit"/>
 	<menu_item_call label="Edytuj mój kształt" name="Edit My Shape"/>
-	<menu_item_call label="Moi Znajomi" name="Friends..."/>
-	<menu_item_call label="Moje Grupy" name="Groups..."/>
-	<menu_item_call label="Mój Profil" name="Profile..."/>
+	<menu_item_call label="Moi znajomi" name="Friends..."/>
+	<menu_item_call label="Moje grupy" name="Groups..."/>
+	<menu_item_call label="Mój profil" name="Profile..."/>
 	<menu_item_call label="Debugowanie  tekstur" name="Debug..."/>
 	<menu_item_call label="Opuść" name="Drop"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml
index c9ad275a267d1b59338fff72e3327cdca5af0d85..e8d2b14231fd1e8ad90f2fc34fe5daabf042cd14 100644
--- a/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml
@@ -2,6 +2,6 @@
 <menu name="Avatar Icon Menu">
 	<menu_item_call label="Profil" name="Show Profile"/>
 	<menu_item_call label="Czat/IM..." name="Send IM"/>
-	<menu_item_call label="Dodaj Znajomość..." name="Add Friend"/>
+	<menu_item_call label="Dodaj znajomość..." name="Add Friend"/>
 	<menu_item_call label="Usuń..." name="Remove Friend"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_other.xml b/indra/newview/skins/default/xui/pl/menu_avatar_other.xml
index 9a1603e212aa0132df4883091facd53ee90fe5d3..dcf7921badc165902f342d4df3944ae8f3419129 100644
--- a/indra/newview/skins/default/xui/pl/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/pl/menu_avatar_other.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!-- *NOTE: See also menu_attachment_other.xml -->
 <context_menu name="Avatar Pie">
-	<menu_item_call label="Zobacz Profil" name="Profile..."/>
-	<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
+	<menu_item_call label="Zobacz profil" name="Profile..."/>
+	<menu_item_call label="Dodaj znajomość" name="Add Friend"/>
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Zadzwoń" name="Call"/>
-	<menu_item_call label="ZaproÅ› do Grupy" name="Invite..."/>
+	<menu_item_call label="ZaproÅ› do grupy" name="Invite..."/>
 	<menu_item_call label="Zablokuj" name="Avatar Mute"/>
 	<menu_item_call label="Raport" name="abuse"/>
 	<menu_item_call label="Unieruchom" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
index aa415db6eadf76265af31c7c66f02c8a289a3c17..1091eaa7fbca82ff78bf52dbb6ecb3ca7d063cac 100644
--- a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
@@ -3,7 +3,7 @@
 	<menu_item_call label="Wstań" name="Stand Up"/>
 	<context_menu label="Zdejmij  â–¶" name="Take Off &gt;">
 		<context_menu label="Ubrania  â–¶" name="Clothes &gt;">
-			<menu_item_call label="KoszulkÄ™" name="Shirt"/>
+			<menu_item_call label="KoszulÄ™" name="Shirt"/>
 			<menu_item_call label="Spodnie" name="Pants"/>
 			<menu_item_call label="Spódnicę" name="Skirt"/>
 			<menu_item_call label="Buty" name="Shoes"/>
@@ -13,18 +13,18 @@
 			<menu_item_call label="Podkoszulek" name="Self Undershirt"/>
 			<menu_item_call label="BieliznÄ™" name="Self Underpants"/>
 			<menu_item_call label="Tatuaż" name="Self Tattoo"/>
-			<menu_item_call label="Ubranie Przezroczyste" name="Self Alpha"/>
+			<menu_item_call label="Ubranie alpha" name="Self Alpha"/>
 			<menu_item_call label="Wszystko" name="All Clothes"/>
 		</context_menu>
 		<context_menu label="HUD  â–¶" name="Object Detach HUD"/>
 		<context_menu label="Odłącz ▶" name="Object Detach"/>
-		<menu_item_call label="Odłącz Wszystko" name="Detach All"/>
+		<menu_item_call label="Odłącz wszystko" name="Detach All"/>
 	</context_menu>
 	<menu_item_call label="Zmień strój" name="Chenge Outfit"/>
 	<menu_item_call label="Edytuj mój strój" name="Edit Outfit"/>
 	<menu_item_call label="Edytuj mój kształt" name="Edit My Shape"/>
-	<menu_item_call label="Moi Znajomi" name="Friends..."/>
-	<menu_item_call label="Moje Grupy" name="Groups..."/>
-	<menu_item_call label="Mój Profil" name="Profile..."/>
+	<menu_item_call label="Moi znajomi" name="Friends..."/>
+	<menu_item_call label="Moje grupy" name="Groups..."/>
+	<menu_item_call label="Mój profil" name="Profile..."/>
 	<menu_item_call label="Debugowanie tekstur" name="Debug..."/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml
index 7e1b37f2dd31812cee8f1e01b1a1b353e1bd6b4d..a4a6ea484df80961654b50390ccd7407f8794744 100644
--- a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="hide_camera_move_controls_menu">
-	<menu_item_check label="Przycisk Gestur" name="ShowGestureButton"/>
-	<menu_item_check label="Przycisk Ruchu" name="ShowMoveButton"/>
-	<menu_item_check label="Przycisk Widoku" name="ShowCameraButton"/>
-	<menu_item_check label="Przycisk Zdjęć" name="ShowSnapshotButton"/>
+	<menu_item_check label="Przycisk gesturki" name="ShowGestureButton"/>
+	<menu_item_check label="Przycisk ruchu" name="ShowMoveButton"/>
+	<menu_item_check label="Przycisk widoku" name="ShowCameraButton"/>
+	<menu_item_check label="Przycisk zdjęć" name="ShowSnapshotButton"/>
 	<menu_item_check label="Schowek" name="ShowSidebarButton"/>
 	<menu_item_check label="Buduj" name="ShowBuildButton"/>
 	<menu_item_check label="Szukaj" name="ShowSearchButton"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_cof_gear.xml b/indra/newview/skins/default/xui/pl/menu_cof_gear.xml
index e8aaa2cf827ccfb657e13ad5fb644ffa1ecfda16..9fba39be1ac3a325ee7246563876f3fe5fa14dde 100644
--- a/indra/newview/skins/default/xui/pl/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear COF">
-	<menu label="Nowe Ubranie" name="COF.Gear.New_Clothes"/>
+	<menu label="Nowe ubranie" name="COF.Gear.New_Clothes"/>
 	<menu label="Nowe części ciała" name="COF.Geear.New_Body_Parts"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_favorites.xml b/indra/newview/skins/default/xui/pl/menu_favorites.xml
index cbacaf4bebafdcb6970c1b91878a9817c124a333..7310ff5c2765b984bc26c51453dcf41089c6aab5 100644
--- a/indra/newview/skins/default/xui/pl/menu_favorites.xml
+++ b/indra/newview/skins/default/xui/pl/menu_favorites.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Popup">
 	<menu_item_call label="Teleportuj" name="Teleport To Landmark"/>
-	<menu_item_call label="Zobacz/Edytuj Ulubione Miejsce" name="Landmark Open"/>
+	<menu_item_call label="Zobacz/Edytuj Ulubione miejsce" name="Landmark Open"/>
 	<menu_item_call label="Kopiuj SLurl" name="Copy slurl"/>
 	<menu_item_call label="Pokaż na mapie" name="Show On Map"/>
 	<menu_item_call label="Kopiuj" name="Landmark Copy"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_group_plus.xml b/indra/newview/skins/default/xui/pl/menu_group_plus.xml
index 9d3859081e7b619e12db235183f5038b8805e175..83be4d38c515a9713f1b1aec807432df20ae8c46 100644
--- a/indra/newview/skins/default/xui/pl/menu_group_plus.xml
+++ b/indra/newview/skins/default/xui/pl/menu_group_plus.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="menu_group_plus">
-	<menu_item_call label="Dołącz do Grupy..." name="item_join"/>
-	<menu_item_call label="Nowa Grupa..." name="item_new"/>
+	<menu_item_call label="Dołącz do grupy..." name="item_join"/>
+	<menu_item_call label="Nowa grupa..." name="item_new"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml
index c53f72c043a7ecf22ce614384ebf813287ec8b0b..2b9a362123b23e779dd2701d2e98c53920b18a20 100644
--- a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml
+++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="IMChiclet Group Menu">
-	<menu_item_call label="O Grupie" name="Show Profile"/>
+	<menu_item_call label="O grupie" name="Show Profile"/>
 	<menu_item_call label="Pokaż sesję" name="Chat"/>
 	<menu_item_call label="Zakończ rozmowę" name="End Session"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml
index c0c812c0a771e948c4c39a100ef6b1d07a36146f..8924d6db3e1b1fa6b7156902b1122ccc265cffb4 100644
--- a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml
+++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="IMChiclet P2P Menu">
-	<menu_item_call label="Zobacz Profil" name="Show Profile"/>
-	<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
+	<menu_item_call label="Zobacz profil" name="Show Profile"/>
+	<menu_item_call label="Dodaj znajomość" name="Add Friend"/>
 	<menu_item_call label="Pokaż sesję" name="Send IM"/>
 	<menu_item_call label="Zakończ rozmowę" name="End Session"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml
index 9a102e14163a91453958ccf36d3df5cd53c75575..5c27d53d906dca7b13b9fc1135c249beb7b630c3 100644
--- a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
-	<menu_item_call label="Zobacz Profil" name="view_profile"/>
-	<menu_item_call label="Dodaj Znajomość" name="add_friend"/>
+	<menu_item_call label="Zobacz profil" name="view_profile"/>
+	<menu_item_call label="Dodaj znajomość" name="add_friend"/>
 	<menu_item_call label="IM" name="im"/>
 	<menu_item_call label="Zadzwoń" name="call"/>
 	<menu_item_call label="Teleportuj" name="teleport"/>
-	<menu_item_call label="ZaproÅ› do Grupy" name="invite_to_group"/>
+	<menu_item_call label="ZaproÅ› do grupy" name="invite_to_group"/>
 	<menu_item_call label="Zablokuj" name="block"/>
 	<menu_item_call label="Odblokuj" name="unblock"/>
 	<menu_item_call label="Raport" name="report"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml
index 2ea37026639a4cd9f9e720237244836c8d51b4ba..6d6377dbc319abff4eaa89dc64243888db648e2e 100644
--- a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml
@@ -2,8 +2,8 @@
 <menu name="Gear Menu">
 	<menu_item_call label="Wstań" name="stand_up"/>
 	<menu_item_call label="Zmień strój" name="change_outfit"/>
-	<menu_item_call label="Mój Profil" name="my_profile"/>
-	<menu_item_call label="Moi Znajomi" name="my_friends"/>
-	<menu_item_call label="Moje Grupy" name="my_groups"/>
+	<menu_item_call label="Mój profil" name="my_profile"/>
+	<menu_item_call label="Moi znajomi" name="my_friends"/>
+	<menu_item_call label="Moje grupy" name="my_groups"/>
 	<menu_item_call label="Debugowanie tekstur" name="Debug..."/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory.xml b/indra/newview/skins/default/xui/pl/menu_inventory.xml
index f1f7d0d85525d5d8cc09db3b549b3dcf1c2bf3cd..e47ffa0e188bfa756de60738fce87230005bdb48 100644
--- a/indra/newview/skins/default/xui/pl/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inventory.xml
@@ -8,13 +8,13 @@
 	<menu_item_call label="Zmień nazwę" name="Task Rename"/>
 	<menu_item_call label="Usuń" name="Task Remove"/>
 	<menu_item_call label="Opróżnij Kosz" name="Empty Trash"/>
-	<menu_item_call label="Opróżnij Folder Zgubione i Odnalezione" name="Empty Lost And Found"/>
+	<menu_item_call label="Opróżnij Folder Zgubione i odnalezione" name="Empty Lost And Found"/>
 	<menu_item_call label="Nowy folder" name="New Folder"/>
 	<menu_item_call label="Nowy skrypt" name="New Script"/>
 	<menu_item_call label="Nowa nota" name="New Note"/>
-	<menu_item_call label="Nowy gest" name="New Gesture"/>
+	<menu_item_call label="Nowa gesturka" name="New Gesture"/>
 	<menu label="Nowe Ubranie" name="New Clothes">
-		<menu_item_call label="Nowa koszulka" name="New Shirt"/>
+		<menu_item_call label="Nowa koszula" name="New Shirt"/>
 		<menu_item_call label="Nowe spodnie" name="New Pants"/>
 		<menu_item_call label="Nowe buty" name="New Shoes"/>
 		<menu_item_call label="Nowe skarpety" name="New Socks"/>
@@ -23,7 +23,7 @@
 		<menu_item_call label="Nowe rękawiczki" name="New Gloves"/>
 		<menu_item_call label="Nowy podkoszulek" name="New Undershirt"/>
 		<menu_item_call label="Nowa bielizna" name="New Underpants"/>
-		<menu_item_call label="Nowa maska Alpha" name="New Alpha Mask"/>
+		<menu_item_call label="Nowa maska alpha" name="New Alpha Mask"/>
 		<menu_item_call label="Nowy tatuaż" name="New Tattoo"/>
 	</menu>
 	<menu label="Nowa Część Ciała" name="New Body Parts">
@@ -39,7 +39,7 @@
 		<menu_item_call label="Spodnie" name="Pants"/>
 		<menu_item_call label="Kształt" name="Shape"/>
 		<menu_item_call label="Buty" name="Shoes"/>
-		<menu_item_call label="Koszulka" name="Shirt"/>
+		<menu_item_call label="Koszula" name="Shirt"/>
 		<menu_item_call label="Spódnica" name="Skirt"/>
 		<menu_item_call label="Bielizna" name="Underpants"/>
 		<menu_item_call label="Podkoszulek" name="Undershirt"/>
@@ -61,7 +61,7 @@
 	<menu_item_call label="Wklej jako link" name="Paste As Link"/>
 	<menu_item_call label="Usuń" name="Remove Link"/>
 	<menu_item_call label="Usuń" name="Delete"/>
-	<menu_item_call label="Skasuj Folder Systemu" name="Delete System Folder"/>
+	<menu_item_call label="Skasuj folder systemu" name="Delete System Folder"/>
 	<menu_item_call label="Rozpocznij konferencjÄ™ czatowÄ…" name="Conference Chat Folder"/>
 	<menu_item_call label="Odtwarzaj" name="Sound Play"/>
 	<menu_item_call label="O Miejscu" name="About Landmark"/>
@@ -76,7 +76,7 @@
 	<menu_item_call label="Odłącz od siebie" name="Detach From Yourself"/>
 	<menu_item_call label="Załóż" name="Wearable And Object Wear"/>
 	<menu label="Dołącz do" name="Attach To"/>
-	<menu label="Dołącz do Załączników HUD" name="Attach To HUD"/>
+	<menu label="Dołącz do załączników HUD" name="Attach To HUD"/>
 	<menu_item_call label="Edytuj" name="Wearable Edit"/>
 	<menu_item_call label="Dodaj" name="Wearable Add"/>
 	<menu_item_call label="Zdejmij" name="Take Off"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml
index 8f520113c06c1b236940bef1d6cd1259afa35103..4a56586aafc734e61412a951bd8de451a123aec6 100644
--- a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml
@@ -10,9 +10,9 @@
 	<menu_item_call label="Nowy folder" name="New Folder"/>
 	<menu_item_call label="Nowy skrypt" name="New Script"/>
 	<menu_item_call label="Nowa nota" name="New Note"/>
-	<menu_item_call label="Nowy gest" name="New Gesture"/>
+	<menu_item_call label="Nowa gesturka" name="New Gesture"/>
 	<menu label="Nowe Ubranie" name="New Clothes">
-		<menu_item_call label="Nowa koszulka" name="New Shirt"/>
+		<menu_item_call label="Nowa koszula" name="New Shirt"/>
 		<menu_item_call label="Nowe spodnie" name="New Pants"/>
 		<menu_item_call label="Nowe buty" name="New Shoes"/>
 		<menu_item_call label="Nowe skarpetki" name="New Socks"/>
@@ -21,7 +21,7 @@
 		<menu_item_call label="Nowe rękawiczki" name="New Gloves"/>
 		<menu_item_call label="Nowy podkoszulek" name="New Undershirt"/>
 		<menu_item_call label="Nowa bielizna" name="New Underpants"/>
-		<menu_item_call label="Nowe ubranie Przezroczyste" name="New Alpha"/>
+		<menu_item_call label="Nowa maska alpha" name="New Alpha"/>
 		<menu_item_call label="Nowy tatuaż" name="New Tattoo"/>
 	</menu>
 	<menu label="Nowa Część Ciała" name="New Body Parts">
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml
index 382a7506cca9bfa28469aae95656d61b3955f32f..d110a2f02e1e2de645aab3f3674034eb5ffac49d 100644
--- a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml
@@ -6,7 +6,7 @@
 	<menu_item_call label="Pokaż filtry" name="show_filters"/>
 	<menu_item_call label="Zresetuj filtry" name="reset_filters"/>
 	<menu_item_call label="Zamknij wszystkie foldery" name="close_folders"/>
-	<menu_item_call label="Opróżnij Zagubione i Odnalezione" name="empty_lostnfound"/>
+	<menu_item_call label="Opróżnij Zagubione i odnalezione" name="empty_lostnfound"/>
 	<menu_item_call label="Zapisz teksturÄ™ jako" name="Save Texture As"/>
 	<menu_item_call label="Udostępnij" name="Share"/>
 	<menu_item_call label="Znajdź oryginał" name="Find Original"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_land.xml b/indra/newview/skins/default/xui/pl/menu_land.xml
index 1e1ce73089c90b1d5a34530e258434364cdbb300..cbfecaee56855bd8427660cbad9a8869f54a3ea2 100644
--- a/indra/newview/skins/default/xui/pl/menu_land.xml
+++ b/indra/newview/skins/default/xui/pl/menu_land.xml
@@ -2,7 +2,7 @@
 <context_menu name="Land Pie">
 	<menu_item_call label="O Posiadłości" name="Place Information..."/>
 	<menu_item_call label="Usiądź tutaj" name="Sit Here"/>
-	<menu_item_call label="Kup Posiadłość" name="Land Buy"/>
+	<menu_item_call label="Kup posiadłość" name="Land Buy"/>
 	<menu_item_call label="Kup przepustkÄ™" name="Land Buy Pass"/>
 	<menu_item_call label="Buduj" name="Create"/>
 	<menu_item_call label="Edytuj teren" name="Edit Terrain"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_login.xml b/indra/newview/skins/default/xui/pl/menu_login.xml
index 810862dfd9653b9f907c1fc76bdd9d8ff995a539..0dd6117b8541cbb7937e64cd63695f0265feacde 100644
--- a/indra/newview/skins/default/xui/pl/menu_login.xml
+++ b/indra/newview/skins/default/xui/pl/menu_login.xml
@@ -8,7 +8,7 @@
 		<menu_item_call label="[SECOND_LIFE]: Pomoc" name="Second Life Help"/>
 		<menu_item_call label="O [APP_NAME]" name="About Second Life"/>
 	</menu>
-	<menu_item_check label="Pokaż Ustawienia Debugowania" name="Show Debug Menu"/>
+	<menu_item_check label="Pokaż ustawienia debugowania" name="Show Debug Menu"/>
 	<menu label="Debug" name="Debug">
 		<menu_item_call label="Ustawienia debugowania" name="Debug Settings"/>
 		<menu_item_call label="Ustawienia UI/kolor" name="UI/Color Settings"/>
@@ -17,7 +17,7 @@
 		<menu_item_call label="Wyświetl TOS" name="TOS"/>
 		<menu_item_call label="Wyświetl wiadomość krytyczną" name="Critical"/>
 		<menu_item_call label="Test przeglÄ…darki internetowej" name="Web Browser Test"/>
-		<menu_item_check label="Pokaż Siatkę" name="Show Grid Picker"/>
+		<menu_item_check label="Pokaż siatkę" name="Show Grid Picker"/>
 		<menu_item_call label="Pokaż konsolę Zawiadomień" name="Show Notifications Console"/>
 	</menu>
 </menu_bar>
diff --git a/indra/newview/skins/default/xui/pl/menu_navbar.xml b/indra/newview/skins/default/xui/pl/menu_navbar.xml
index f38b805ee22d78668c9371edb398574f280c004c..1d434670eeea01435f615e6c5f3c2b819cdca8a4 100644
--- a/indra/newview/skins/default/xui/pl/menu_navbar.xml
+++ b/indra/newview/skins/default/xui/pl/menu_navbar.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Navbar Menu">
 	<menu_item_check label="Pokaż współrzędne" name="Show Coordinates"/>
-	<menu_item_check label="Pokaż właściwości Posiadłości" name="Show Parcel Properties"/>
-	<menu_item_call label="Ulubione Miejsce" name="Landmark"/>
+	<menu_item_check label="Pokaż właściwości posiadłości" name="Show Parcel Properties"/>
+	<menu_item_call label="Landmark" name="Landmark"/>
 	<menu_item_call label="Wytnij" name="Cut"/>
 	<menu_item_call label="Kopiuj" name="Copy"/>
 	<menu_item_call label="Wklej" name="Paste"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml b/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml
index ed754e36a7ddb163da0291666c30e4f8576d5dd7..1a70e76ec7cb6a32136c781317a6e0f3dc2b86f2 100644
--- a/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml
@@ -10,10 +10,10 @@
 		<menu_item_call label="Nowe skarpetki" name="New Socks"/>
 		<menu_item_call label="Nowa kurtka" name="New Jacket"/>
 		<menu_item_call label="Nowa spódnica" name="New Skirt"/>
-		<menu_item_call label="Nowe  rękawiczki" name="New Gloves"/>
+		<menu_item_call label="Nowe rękawiczki" name="New Gloves"/>
 		<menu_item_call label="Nowa podkoszulka" name="New Undershirt"/>
 		<menu_item_call label="Nowa bielizna" name="New Underpants"/>
-		<menu_item_call label="Nowe alpha" name="New Alpha"/>
+		<menu_item_call label="Nowa maska alpha" name="New Alpha"/>
 		<menu_item_call label="Nowy tatuaż" name="New Tattoo"/>
 	</menu>
 	<menu label="Nowe części ciała" name="New Body Parts">
diff --git a/indra/newview/skins/default/xui/pl/menu_participant_list.xml b/indra/newview/skins/default/xui/pl/menu_participant_list.xml
index 59b4fec6b0d6b6fd3fb523dd30c912159fa42b30..fd6d4dcc3c456927dbfd1d204299a937e197eb5b 100644
--- a/indra/newview/skins/default/xui/pl/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/pl/menu_participant_list.xml
@@ -2,8 +2,8 @@
 <context_menu name="Participant List Context Menu">
 	<menu_item_check label="Sortuj według imienia" name="SortByName"/>
 	<menu_item_check label="Sortuj według ostatniego mówcy" name="SortByRecentSpeakers"/>
-	<menu_item_call label="Zobacz Profil" name="View Profile"/>
-	<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
+	<menu_item_call label="Zobacz profil" name="View Profile"/>
+	<menu_item_call label="Dodaj znajomość" name="Add Friend"/>
 	<menu_item_call label="IM" name="IM"/>
 	<menu_item_call label="Zadzwoń" name="Call"/>
 	<menu_item_call label="Udostępnij" name="Share"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups.xml b/indra/newview/skins/default/xui/pl/menu_people_groups.xml
index 567482dcda32603a4bf2003ed4943199abc2195a..ace5ebf888464b9c1aab41dd8797c22feaeb7301 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_groups.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="menu_group_plus">
-	<menu_item_call label="Zobacz Info" name="View Info"/>
+	<menu_item_call label="Zobacz info" name="View Info"/>
 	<menu_item_call label="Czat" name="Chat"/>
 	<menu_item_call label="Rozmowa" name="Call"/>
 	<menu_item_call label="Aktywuj" name="Activate"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml
index 4be60d9b8330300430e155bf546cee83c7ddded2..c70ea2315f4fd8f108729ef45d76f6a71da7ad10 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="menu_group_plus">
-	<menu_item_check label="Wyświetlaj ikonki Grupy" name="Display Group Icons"/>
-	<menu_item_call label="Opuść zaznaczone Grupy" name="Leave Selected Group"/>
+	<menu_item_check label="Wyświetlaj ikonki grupy" name="Display Group Icons"/>
+	<menu_item_call label="Opuść zaznaczone grupy" name="Leave Selected Group"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml
index afe3a5200b8c60cb0181620d583f7e0e23958a7a..a8cc6b4a60445eb63555393586764390c809574b 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Zobacz Profil" name="View Profile"/>
-	<menu_item_call label="Dodaj Znajomość" name="Add Friend"/>
-	<menu_item_call label="Usuń z listy Znajomych" name="Remove Friend"/>
+	<menu_item_call label="Zobacz profil" name="View Profile"/>
+	<menu_item_call label="Dodaj znajomość" name="Add Friend"/>
+	<menu_item_call label="Usuń z listy znajomych" name="Remove Friend"/>
 	<menu_item_call label="IM" name="IM"/>
 	<menu_item_call label="Zadzwoń" name="Call"/>
 	<menu_item_call label="Mapa" name="Map"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
index bc89402a96386804de8ae6ff0eaa637bff5e5458..c924185c6fabde84b2ee6035bf38cb1f87dedf6c 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="Dodaj Znajomych" name="Add Friends"/>
-	<menu_item_call label="Usuń Znajomych" name="Remove Friend"/>
+	<menu_item_call label="Dodaj znajomych" name="Add Friends"/>
+	<menu_item_call label="Usuń znajomych" name="Remove Friend"/>
 	<menu_item_call label="IM" name="IM"/>
 	<menu_item_call label="Zadzwoń" name="Call"/>
 	<menu_item_call label="Udostępnij" name="Share"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml
index 8f196612a8bcc6100be6ac78d851a82c7afd6877..e9c00f51a978c7ff28b5a47c8e373a9761fc05b3 100644
--- a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml
+++ b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="picks_plus_menu">
 	<menu_item_call label="Stwórz" name="create_pick"/>
-	<menu_item_call label="Nowa Reklama" name="create_classified"/>
+	<menu_item_call label="Nowa reklama" name="create_classified"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_place.xml b/indra/newview/skins/default/xui/pl/menu_place.xml
index 312bfc6bb01e7a52559d43007f7111de6b3dea3a..c3b72d6abbddafed423f8ada857be161387c422c 100644
--- a/indra/newview/skins/default/xui/pl/menu_place.xml
+++ b/indra/newview/skins/default/xui/pl/menu_place.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="place_overflow_menu">
-	<menu_item_call label="Zapisz Landmark" name="landmark"/>
+	<menu_item_call label="Zapisz landmark" name="landmark"/>
 	<menu_item_call label="Utwórz" name="pick"/>
-	<menu_item_call label="Kup PrzepustkÄ™" name="pass"/>
+	<menu_item_call label="Kup przepustkÄ™" name="pass"/>
 	<menu_item_call label="Edytuj" name="edit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml
index 6175671fb9fba15a65db40800037702edc47ab88..3d0c1c87fb199763200ed65e5e3e7a00f9ead0bc 100644
--- a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml
+++ b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="menu_folder_gear">
 	<menu_item_call label="Dodaj folder" name="add_folder"/>
-	<menu_item_call label="Dodaj do Landmarków" name="add_landmark"/>
+	<menu_item_call label="Dodaj do landmarków" name="add_landmark"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml
index d17b6c1033ad104ec22ae7d02aefe26528bccce0..65417cef221b0b058386038bec0db270060efbc9 100644
--- a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="menu_folder_gear">
-	<menu_item_call label="Dodaj do Landmarków" name="add_landmark"/>
+	<menu_item_call label="Dodaj do landmarków" name="add_landmark"/>
 	<menu_item_call label="Dodaj folder" name="add_folder"/>
 	<menu_item_call label="Wytnij" name="cut"/>
 	<menu_item_call label="Kopiuj" name="copy_folder"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml
index 0720aea8aac9ee8c4eddc8e93a3186546cef6789..36787dd0aa8cfa2e51ac43d7f4e047c18788e6c7 100644
--- a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml
@@ -3,10 +3,10 @@
 	<menu_item_call label="Teleportuj" name="teleport"/>
 	<menu_item_call label="Więcej informacji" name="more_info"/>
 	<menu_item_call label="Pokaż na mapie" name="show_on_map"/>
-	<menu_item_call label="Dodaj do Landmarków" name="add_landmark"/>
+	<menu_item_call label="Dodaj do landmarków" name="add_landmark"/>
 	<menu_item_call label="Dodaj folder" name="add_folder"/>
 	<menu_item_call label="Wytnij" name="cut"/>
-	<menu_item_call label="Kopiuj Landmark" name="copy_landmark"/>
+	<menu_item_call label="Kopiuj landmark" name="copy_landmark"/>
 	<menu_item_call label="Kopiuj SLurl" name="copy_slurl"/>
 	<menu_item_call label="Wklej" name="paste"/>
 	<menu_item_call label="Zmień nazwę" name="rename"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_slurl.xml b/indra/newview/skins/default/xui/pl/menu_slurl.xml
index 719959df6a0bd7ad3985bf43830f140417eb203e..862f538aa7730b3641bff874bd406d46551e01ea 100644
--- a/indra/newview/skins/default/xui/pl/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/pl/menu_slurl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Popup">
-	<menu_item_call label="O Miejscu" name="about_url"/>
-	<menu_item_call label="Teleportuj do Miejsca" name="teleport_to_url"/>
+	<menu_item_call label="O miejscu" name="about_url"/>
+	<menu_item_call label="Teleportuj do miejsca" name="teleport_to_url"/>
 	<menu_item_call label="Mapa" name="show_on_map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml
index 2161963a615b9f2e1801813ae89a6a4a325df068..0e58592d46a66a044465a2a1229051e5df44feef 100644
--- a/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml
@@ -2,5 +2,5 @@
 <menu name="Teleport History Gear Context Menu">
 	<menu_item_call label="Rozwiń wszystkie foldery" name="Expand all folders"/>
 	<menu_item_call label="Schowaj wszystkie foldery" name="Collapse all folders"/>
-	<menu_item_call label="Wyczyść Historię Teleportacji" name="Clear Teleport History"/>
+	<menu_item_call label="Wyczyść historię teleportacji" name="Clear Teleport History"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_text_editor.xml b/indra/newview/skins/default/xui/pl/menu_text_editor.xml
index 4529246b561abfa478558698c3cc882feb1e9147..812f87bc1a3183957ac62940e842beab7003539d 100644
--- a/indra/newview/skins/default/xui/pl/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/pl/menu_text_editor.xml
@@ -4,5 +4,5 @@
 	<menu_item_call label="Kopiuj" name="Copy"/>
 	<menu_item_call label="Wklej" name="Paste"/>
 	<menu_item_call label="Usuń" name="Delete"/>
-	<menu_item_call label="Zaznacz Wszystko" name="Select All"/>
+	<menu_item_call label="Zaznacz wszystko" name="Select All"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_agent.xml b/indra/newview/skins/default/xui/pl/menu_url_agent.xml
index 7c90e6582ddbac395ae663494a771c7ad607e40f..db729be725febdf25e91584d4788d05a523cb160 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_agent.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Pokaż Profil Rezydenta" name="show_agent"/>
+	<menu_item_call label="Pokaż profil Rezydenta" name="show_agent"/>
 	<menu_item_call label="Kopiuj nazwÄ™ do schowka" name="url_copy_label"/>
 	<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_group.xml b/indra/newview/skins/default/xui/pl/menu_url_group.xml
index 109f96e5625f8a02b0b15ed6ff2b8e85acc026d4..f340b3296aac7f193d7046cf0e4139110965292d 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_group.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_group.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Pokaż szczegóły o Grupie" name="show_group"/>
-	<menu_item_call label="Kopiuj GrupÄ™ do schowka" name="url_copy_label"/>
+	<menu_item_call label="Pokaż szczegóły o grupie" name="show_group"/>
+	<menu_item_call label="Kopiuj grupÄ™ do schowka" name="url_copy_label"/>
 	<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml
index ce3309cba02792e8f56e40a53920eeb26b982670..e36fa0dd2baddb63cb7a09f121dac47e099be005 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Pokaż obiekt w Szafie" name="show_item"/>
+	<menu_item_call label="Pokaż obiekt w szafie" name="show_item"/>
 	<menu_item_call label="Kopiuj nazwÄ™ do schowka" name="url_copy_label"/>
 	<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml
index 43b945b8bebf39dd1998048683781894bca1fa96..1b8dd6213723ea427d82b95527066d918c3a21c8 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Pokaż szczegóły o Miejscu" name="show_parcel"/>
+	<menu_item_call label="Pokaż szczegóły o miejscu" name="show_parcel"/>
 	<menu_item_call label="Pokaż na mapie" name="show_on_map"/>
 	<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml
index 456146d8e56af6fa4e93ea4b57a3b51431c0aa86..4d4a5b4c4d90b11c0895763bf83aafe22f57eefa 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Pokaż szczegóły o Miejscu" name="show_place"/>
+	<menu_item_call label="Pokaż szczegóły o miejscu" name="show_place"/>
 	<menu_item_call label="Pokaż na mapie" name="show_on_map"/>
 	<menu_item_call label="Teleportuj do miejsca" name="teleport_to_location"/>
 	<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_url_teleport.xml b/indra/newview/skins/default/xui/pl/menu_url_teleport.xml
index 7376fb3afc4d446d98c0d6c5fd5fb47a5f1e7b8b..e2255469300600f63e6d03878778526e85c1aa28 100644
--- a/indra/newview/skins/default/xui/pl/menu_url_teleport.xml
+++ b/indra/newview/skins/default/xui/pl/menu_url_teleport.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
 	<menu_item_call label="Teleportuj do tego miejsca" name="teleport"/>
-	<menu_item_call label="Pokaż na Mapie" name="show_on_map"/>
+	<menu_item_call label="Pokaż na mapie" name="show_on_map"/>
 	<menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index 97a94584c45ac083de98289dcfa647b5a05c05c6..a71961ada79c5af249e4ddd00a4af3685fd1e895 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -2,49 +2,49 @@
 <menu_bar name="Main Menu">
 	<menu label="Ja" name="Me">
 		<menu_item_call label="Ustawienia" name="Preferences"/>
-		<menu_item_call label="Moja Tablica" name="Manage My Account"/>
+		<menu_item_call label="Dashboard" name="Manage My Account"/>
 		<menu_item_call label="Kup L$" name="Buy and Sell L$"/>
 		<menu_item_call label="Mój Profil" name="Profile"/>
 		<menu_item_call label="Zmień strój" name="ChangeOutfit"/>
 		<menu_item_check label="Moja Szafa" name="Inventory"/>
 		<menu_item_check label="Moja Szafa" name="ShowSidetrayInventory"/>
-		<menu_item_check label="Moje Gesty" name="Gestures"/>
+		<menu_item_check label="Moje gesturki" name="Gestures"/>
 		<menu_item_check label="Mój głos" name="ShowVoice"/>
 		<menu label="Mój Status" name="Status">
-			<menu_item_call label="Tryb Oddalenia" name="Set Away"/>
-			<menu_item_call label="Tryb Pracy" name="Set Busy"/>
+			<menu_item_call label="Tryb oddalenia" name="Set Away"/>
+			<menu_item_call label="Tryb pracy" name="Set Busy"/>
 		</menu>
-		<menu_item_call label="Zażądaj Statusu Administratora" name="Request Admin Options"/>
-		<menu_item_call label="Wyłącz Status Administratora" name="Leave Admin Options"/>
+		<menu_item_call label="Zażądaj statusu administratora" name="Request Admin Options"/>
+		<menu_item_call label="Wyłącz atatus administratora" name="Leave Admin Options"/>
 		<menu_item_call label="Wyłącz [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="Komunikacja" name="Communicate">
 		<menu_item_call label="Znajomi" name="My Friends"/>
 		<menu_item_call label="Grupy" name="My Groups"/>
-		<menu_item_check label="Czat Lokalny" name="Nearby Chat"/>
-		<menu_item_call label="Osoby w Pobliżu" name="Active Speakers"/>
+		<menu_item_check label="Czat lokalny" name="Nearby Chat"/>
+		<menu_item_call label="Osoby w pobliżu" name="Active Speakers"/>
 	</menu>
 	<menu label="Åšwiat" name="World">
 		<menu_item_check label="Mini-Mapa" name="Mini-Map"/>
 		<menu_item_check label="Mapa Åšwiata" name="World Map"/>
-		<menu_item_call label="Zrób Zdjęcie" name="Take Snapshot"/>
-		<menu_item_call label="Zapamiętaj to Miejsce" name="Create Landmark Here"/>
+		<menu_item_call label="Zrób zdjęcie" name="Take Snapshot"/>
+		<menu_item_call label="Zapamiętaj to miejsce (LM)" name="Create Landmark Here"/>
 		<menu label="Miejsce" name="Land">
 			<menu_item_call label="Profil miejsca" name="Place Profile"/>
-			<menu_item_call label="O Posiadłości" name="About Land"/>
+			<menu_item_call label="O posiadłości" name="About Land"/>
 			<menu_item_call label="Region/MajÄ…tek" name="Region/Estate"/>
 		</menu>
-		<menu_item_call label="Kup Posiadłość" name="Buy Land"/>
-		<menu_item_call label="Moje Posiadłości" name="My Land"/>
+		<menu_item_call label="Kup posiadłość" name="Buy Land"/>
+		<menu_item_call label="Moje posiadłości" name="My Land"/>
 		<menu label="Pokaż" name="LandShow">
-			<menu_item_check label="Ustawienia Ruchu" name="Movement Controls"/>
-			<menu_item_check label="Zobacz Ustawienia" name="Camera Controls"/>
-			<menu_item_check label="Linie Bana" name="Ban Lines"/>
+			<menu_item_check label="Ustawienia ruchu" name="Movement Controls"/>
+			<menu_item_check label="Zobacz ustawienia" name="Camera Controls"/>
+			<menu_item_check label="Linie bana" name="Ban Lines"/>
 			<menu_item_check label="Emitery" name="beacons"/>
-			<menu_item_check label="Granice Posiadłości" name="Property Lines"/>
-			<menu_item_check label="Właściciele Posiadłości" name="Land Owners"/>
+			<menu_item_check label="Granice posiadłości" name="Property Lines"/>
+			<menu_item_check label="Właściciele posiadłości" name="Land Owners"/>
 			<menu_item_check label="Współrzędne" name="Coordinates"/>
-			<menu_item_check label="Właściwości Posiadłości" name="Parcel Properties"/>
+			<menu_item_check label="Właściwości posiadłości" name="Parcel Properties"/>
 		</menu>
 		<menu_item_call label="Teleportuj do Miejsca Startu" name="Teleport Home"/>
 		<menu_item_call label="Ustaw Miejsce Startu" name="Set Home to Here"/>
@@ -53,57 +53,57 @@
 			<menu_item_call label="Południe" name="Noon"/>
 			<menu_item_call label="Zachód Słońca" name="Sunset"/>
 			<menu_item_call label="Północ" name="Midnight"/>
-			<menu_item_call label="Używaj Czasu Regionu" name="Revert to Region Default"/>
-			<menu_item_call label="Edytor Åšrodowiska" name="Environment Editor"/>
+			<menu_item_call label="Używaj czasu Regionu" name="Revert to Region Default"/>
+			<menu_item_call label="Edytor środowiska" name="Environment Editor"/>
 		</menu>
 	</menu>
 	<menu label="Buduj" name="BuildTools">
 		<menu_item_check label="Buduj" name="Show Build Tools"/>
-		<menu label="Wybierz Narzędzie Budowania" name="Select Tool">
-			<menu_item_call label="Narzędzie Ogniskowej" name="Focus"/>
-			<menu_item_call label="Narzędzie Ruchu" name="Move"/>
-			<menu_item_call label="Narzędzie Edycji" name="Edit"/>
-			<menu_item_call label="Stwórz Narzędzie" name="Create"/>
-			<menu_item_call label="Narzędzie Posiadłości" name="Land"/>
+		<menu label="Wybierz narzędzie budowania" name="Select Tool">
+			<menu_item_call label="Narzędzie ogniskowej" name="Focus"/>
+			<menu_item_call label="Narzędzie ruchu" name="Move"/>
+			<menu_item_call label="Narzędzie edycji" name="Edit"/>
+			<menu_item_call label="Stwórz narzędzie" name="Create"/>
+			<menu_item_call label="Narzędzie posiadłości" name="Land"/>
 		</menu>
 		<menu_item_call label="Linkuj" name="Link"/>
 		<menu_item_call label="Rozlinkuj" name="Unlink"/>
-		<menu_item_check label="Edytuj Zgrupowane Obiekty" name="Edit Linked Parts"/>
-		<menu label="Wybierz Zlinkowane Części" name="Select Linked Parts">
-			<menu_item_call label="Wybierz Następną Część" name="Select Next Part"/>
-			<menu_item_call label="Zaznacz Poprzednią Część" name="Select Previous Part"/>
-			<menu_item_call label="Uwzględnij Następną Część" name="Include Next Part"/>
-			<menu_item_call label="Uwzględnij Poprzednią Część" name="Include Previous Part"/>
+		<menu_item_check label="Edytuj zlinkowane obiekty" name="Edit Linked Parts"/>
+		<menu label="Wybierz zlinkowane części" name="Select Linked Parts">
+			<menu_item_call label="Wybierz następną część" name="Select Next Part"/>
+			<menu_item_call label="Zaznacz poprzednią część" name="Select Previous Part"/>
+			<menu_item_call label="Uwzględnij następną część" name="Include Next Part"/>
+			<menu_item_call label="Uwzględnij poprzednią część" name="Include Previous Part"/>
 		</menu>
-		<menu_item_call label="Ogniskowa Selekcji" name="Focus on Selection"/>
-		<menu_item_call label="Przybliż do Selekcji" name="Zoom to Selection"/>
+		<menu_item_call label="Ogniskowa selekcji" name="Focus on Selection"/>
+		<menu_item_call label="Przybliż do selekcji" name="Zoom to Selection"/>
 		<menu label="Obiekt" name="Object">
 			<menu_item_call label="Kup" name="Menu Object Buy"/>
 			<menu_item_call label="Weź" name="Menu Object Take"/>
-			<menu_item_call label="Weź Kopię" name="Take Copy"/>
-			<menu_item_call label="Zapisz Obiekt do Szafy" name="Save Object Back to My Inventory"/>
-			<menu_item_call label="Zapisz do Treści Obiektu" name="Save Object Back to Object Contents"/>
+			<menu_item_call label="Weź kopię" name="Take Copy"/>
+			<menu_item_call label="Zapisz obiekt do Szafy" name="Save Object Back to My Inventory"/>
+			<menu_item_call label="Zapisz do treści obiektu" name="Save Object Back to Object Contents"/>
 		</menu>
 		<menu label="Skrypty" name="Scripts">
-			<menu_item_call label="Zrekompiluj Skrypt w Selekcji (Mono)" name="Mono"/>
-			<menu_item_call label="Zrekompiluj Skrypty" name="LSL"/>
-			<menu_item_call label="Reset Skryptów" name="Reset Scripts"/>
-			<menu_item_call label="Ustaw Uruchamienie Skryptów" name="Set Scripts to Running"/>
-			<menu_item_call label="Wstrzymaj Działanie Skryptów w Selekcji" name="Set Scripts to Not Running"/>
+			<menu_item_call label="Zrekompiluj skrypt w selekcji (Mono)" name="Mono"/>
+			<menu_item_call label="Zrekompiluj skrypty" name="LSL"/>
+			<menu_item_call label="Reset skryptów" name="Reset Scripts"/>
+			<menu_item_call label="Ustaw uruchamienie skryptów" name="Set Scripts to Running"/>
+			<menu_item_call label="Wstrzymaj działanie skryptów w selekcji" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Opcje" name="Options">
 			<menu_item_call label="Ustaw domyślne pozwolenia ładowania" name="perm prefs"/>
-			<menu_item_check label="Pokaż Zaawansowane Pozwolenia" name="DebugPermissions"/>
-			<menu_item_check label="Wybierz Tylko Moje Obiekty" name="Select Only My Objects"/>
-			<menu_item_check label="Wybierz Tylko Obiekty Przesuwalne" name="Select Only Movable Objects"/>
-			<menu_item_check label="Wybierz przez Otoczenie" name="Select By Surrounding"/>
-			<menu_item_check label="Zobacz UkrytÄ… SelekcjÄ™" name="Show Hidden Selection"/>
-			<menu_item_check label="Pokaż Promień Emitera dla Selekcji" name="Show Light Radius for Selection"/>
-			<menu_item_check label="Pokaż Emiter Selekcji" name="Show Selection Beam"/>
-			<menu_item_check label="Uruchom SiatkÄ™" name="Snap to Grid"/>
-			<menu_item_call label="PrzeciÄ…gnij Obiekt do Siatki" name="Snap Object XY to Grid"/>
-			<menu_item_call label="Wybierz Zaznaczenie Siatki" name="Use Selection for Grid"/>
-			<menu_item_call label="Opcje Siatki" name="Grid Options"/>
+			<menu_item_check label="Pokaż zaawansowane pozwolenia" name="DebugPermissions"/>
+			<menu_item_check label="Wybierz tylko moje obiekty" name="Select Only My Objects"/>
+			<menu_item_check label="Wybierz tylko obiekty przesuwalne" name="Select Only Movable Objects"/>
+			<menu_item_check label="Wybierz przez otoczenie" name="Select By Surrounding"/>
+			<menu_item_check label="Zobacz ukrytÄ… selekcjÄ™" name="Show Hidden Selection"/>
+			<menu_item_check label="Pokaż promień emitera dla selekcji" name="Show Light Radius for Selection"/>
+			<menu_item_check label="Pokaż emiter selekcji" name="Show Selection Beam"/>
+			<menu_item_check label="Uruchom siatkÄ™" name="Snap to Grid"/>
+			<menu_item_call label="PrzeciÄ…gnij obiekt do siatki" name="Snap Object XY to Grid"/>
+			<menu_item_call label="Wybierz zaznaczenie siatki" name="Use Selection for Grid"/>
+			<menu_item_call label="Opcje siatki" name="Grid Options"/>
 		</menu>
 		<menu label="Załaduj" name="Upload">
 			<menu_item_call label="teksturÄ™ (L$[COST])..." name="Upload Image"/>
@@ -115,39 +115,39 @@
 	<menu label="Pomoc" name="Help">
 		<menu_item_call label="[SECOND_LIFE] Portal Pomocy" name="Second Life Help"/>
 		<menu_item_call label="Złóż Raport o Nadużyciu" name="Report Abuse"/>
-		<menu_item_call label="Zgłoś Błędy Klienta" name="Report Bug"/>
+		<menu_item_call label="Zgłoś błędy klienta" name="Report Bug"/>
 		<menu_item_call label="O [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Zaawansowane" name="Advanced">
 		<menu_item_check label="Pokaż menu Zaawansowane" name="Show Advanced Menu"/>
-		<menu_item_call label="Zatrzymaj Wszystkie Animacje" name="Stop Animating My Avatar"/>
-		<menu_item_call label="Odswież Wyświetlanie Tekstur" name="Rebake Texture"/>
-		<menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/>
-		<menu_item_call label="Ustaw Rozmiar Interfejsu..." name="Set Window Size..."/>
-		<menu_item_check label="Ogranicz Dystans Selekcji" name="Limit Select Distance"/>
-		<menu_item_check label="Wyłącz Ograniczenia Zasięgu Kamery" name="Disable Camera Distance"/>
-		<menu_item_check label="Wysoka Rozdzielczość Zdjęć" name="HighResSnapshot"/>
-		<menu_item_check label="Zapisuj Zdjęcia na Dysk Twardy bez Efektu Dźwiękowego" name="QuietSnapshotsToDisk"/>
-		<menu_item_check label="Skompresuj Zdjęcie na Dysk Twardy" name="CompressSnapshotsToDisk"/>
+		<menu_item_call label="Zatrzymaj wszystkie animacje" name="Stop Animating My Avatar"/>
+		<menu_item_call label="Odswież wyświetlanie tekstur" name="Rebake Texture"/>
+		<menu_item_call label="Domyślne ustawienia rozmiaru interfejsu" name="Set UI Size to Default"/>
+		<menu_item_call label="Ustaw rozmiar interfejsu..." name="Set Window Size..."/>
+		<menu_item_check label="Ogranicz dystans selekcji" name="Limit Select Distance"/>
+		<menu_item_check label="Wyłącz ograniczenia zasięgu kamery" name="Disable Camera Distance"/>
+		<menu_item_check label="Wysoka rozdzielczość zdjęć" name="HighResSnapshot"/>
+		<menu_item_check label="Zapisuj zdjęcia na dysk twardy bez efektu dźwiękowego" name="QuietSnapshotsToDisk"/>
+		<menu_item_check label="Skompresuj zdjęcie na dysk twardy" name="CompressSnapshotsToDisk"/>
 		<menu label="Narzędzia" name="Performance Tools">
-			<menu_item_call label="Pomiar Lagów" name="Lag Meter"/>
+			<menu_item_call label="Pomiar lagów" name="Lag Meter"/>
 			<menu_item_check label="Statystyki" name="Statistics Bar"/>
-			<menu_item_check label="Pokaż Wartość Renderowania Awatara" name="Avatar Rendering Cost"/>
+			<menu_item_check label="Pokaż wartość renderowania awatara" name="Avatar Rendering Cost"/>
 		</menu>
-		<menu label="Podkreślanie i Widoczność" name="Highlighting and Visibility">
-			<menu_item_check label="Efekt Emiterów" name="Cheesy Beacon"/>
-			<menu_item_check label="Ukryj CzÄ…steczki" name="Hide Particles"/>
-			<menu_item_check label="Ukryj Zaznaczone" name="Hide Selected"/>
-			<menu_item_check label="Pokaż Przeźroczyste Obiekty" name="Highlight Transparent"/>
-			<menu_item_check label="Pokaż Załączniki HUD" name="Show HUD Attachments"/>
-			<menu_item_check label="Pokaż Celownik Myszki" name="ShowCrosshairs"/>
+		<menu label="Podkreślanie i widoczność" name="Highlighting and Visibility">
+			<menu_item_check label="Efekt emiterów" name="Cheesy Beacon"/>
+			<menu_item_check label="Ukryj czÄ…steczki" name="Hide Particles"/>
+			<menu_item_check label="Ukryj zaznaczone" name="Hide Selected"/>
+			<menu_item_check label="Pokaż przeźroczyste obiekty" name="Highlight Transparent"/>
+			<menu_item_check label="Pokaż załączniki HUD" name="Show HUD Attachments"/>
+			<menu_item_check label="Pokaż celownik myszki" name="ShowCrosshairs"/>
 		</menu>
-		<menu label="Rodzaje Renderowania" name="Rendering Types">
+		<menu label="Rodzaje renderowania" name="Rendering Types">
 			<menu_item_check label="Podstawowe" name="Simple"/>
-			<menu_item_check label="Maska Przezroczysta" name="Alpha"/>
+			<menu_item_check label="Maska alpha" name="Alpha"/>
 			<menu_item_check label="Drzewo" name="Tree"/>
 			<menu_item_check label="Awatary" name="Character"/>
-			<menu_item_check label="PÅ‚aszczyzna Powierzchni" name="SurfacePath"/>
+			<menu_item_check label="PÅ‚aszczyzna powierzchni" name="SurfacePath"/>
 			<menu_item_check label="Niebo" name="Sky"/>
 			<menu_item_check label="Woda" name="Water"/>
 			<menu_item_check label="Ziemia" name="Ground"/>
@@ -157,163 +157,163 @@
 			<menu_item_check label="CzÄ…steczki" name="Particles"/>
 			<menu_item_check label="Zderzenie" name="Bump"/>
 		</menu>
-		<menu label="Opcje Renderowania" name="Rendering Features">
+		<menu label="Opcje renderowania" name="Rendering Features">
 			<menu_item_check label="UI" name="UI"/>
 			<menu_item_check label="Zaznaczone" name="Selected"/>
 			<menu_item_check label="Podświetlenie" name="Highlighted"/>
-			<menu_item_check label="Tekstury Dynamiczne" name="Dynamic Textures"/>
-			<menu_item_check label="Cień Stopy" name="Foot Shadows"/>
+			<menu_item_check label="Tekstury dynamiczne" name="Dynamic Textures"/>
+			<menu_item_check label="Cień stopy" name="Foot Shadows"/>
 			<menu_item_check label="Mgła" name="Fog"/>
-			<menu_item_check label="Obiekty Elastyczne" name="Flexible Objects"/>
+			<menu_item_check label="Obiekty elastyczne" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Uruchom Wiele Wątków" name="Run Multiple Threads"/>
-		<menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/>
-		<menu_item_call label="Wyczyść Bufor Danych Grupy" name="ClearGroupCache"/>
-		<menu_item_check label="Wygładzanie Ruchu Myszki" name="Mouse Smoothing"/>
+		<menu_item_check label="Uruchom wiele wątków" name="Run Multiple Threads"/>
+		<menu_item_check label="Użyj plugin Read Thread" name="Use Plugin Read Thread"/>
+		<menu_item_call label="Wyczyść bufor danych grupy" name="ClearGroupCache"/>
+		<menu_item_check label="Wygładzanie ruchu myszki" name="Mouse Smoothing"/>
 		<menu label="Skróty" name="Shortcuts">
 			<menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/>
 			<menu_item_check label="Szukaj" name="Search"/>
-			<menu_item_call label="Zwolnij Klawisze" name="Release Keys"/>
-			<menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/>
+			<menu_item_call label="Zwolnij klawisze" name="Release Keys"/>
+			<menu_item_call label="Domyślne ustawienia rozmiaru interfejsu" name="Set UI Size to Default"/>
 			<menu_item_check label="Pokaż menu Zaawansowane" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Biegnij" name="Always Run"/>
-			<menu_item_check label="Zacznij Latać" name="Fly"/>
-			<menu_item_call label="Zamknij Okno" name="Close Window"/>
-			<menu_item_call label="Zamknij Wszystkie Okna" name="Close All Windows"/>
-			<menu_item_call label="Zapisz Zdjęcie na Dysk Twardy" name="Snapshot to Disk"/>
-			<menu_item_call label="Widok Panoramiczny" name="Mouselook"/>
-			<menu_item_check label="Wolna Kamera" name="Joystick Flycam"/>
-			<menu_item_call label="Reset Widoku" name="Reset View"/>
-			<menu_item_call label="Zobacz Ostatniego Rozmówcę" name="Look at Last Chatter"/>
-			<menu label="Wybierz Narzędzie Budowania" name="Select Tool">
-				<menu_item_call label="Narzędzie Ogniskowej" name="Focus"/>
-				<menu_item_call label="Narzędzie Ruchu" name="Move"/>
-				<menu_item_call label="Narzędzie Edycji" name="Edit"/>
-				<menu_item_call label="Stwórz Narzędzie" name="Create"/>
-				<menu_item_call label="Narzędzia Posiadłości" name="Land"/>
+			<menu_item_check label="Zacznij latać" name="Fly"/>
+			<menu_item_call label="Zamknij okno" name="Close Window"/>
+			<menu_item_call label="Zamknij wszystkie okna" name="Close All Windows"/>
+			<menu_item_call label="Zapisz zdjęcie na dysk twardy" name="Snapshot to Disk"/>
+			<menu_item_call label="Widok panoramiczny" name="Mouselook"/>
+			<menu_item_check label="Wolna kamera" name="Joystick Flycam"/>
+			<menu_item_call label="Reset widoku" name="Reset View"/>
+			<menu_item_call label="Zobacz ostatniego rozmówcę" name="Look at Last Chatter"/>
+			<menu label="Wybierz narzędzie budowania" name="Select Tool">
+				<menu_item_call label="Narzędzie ogniskowej" name="Focus"/>
+				<menu_item_call label="Narzędzie ruchu" name="Move"/>
+				<menu_item_call label="Narzędzie edycji" name="Edit"/>
+				<menu_item_call label="Stwórz narzędzie" name="Create"/>
+				<menu_item_call label="Narzędzia posiadłości" name="Land"/>
 			</menu>
 			<menu_item_call label="Przybliż" name="Zoom In"/>
-			<menu_item_call label="Domyślne Przybliżenie" name="Zoom Default"/>
+			<menu_item_call label="Domyślne przybliżenie" name="Zoom Default"/>
 			<menu_item_call label="Oddal" name="Zoom Out"/>
 		</menu>
-		<menu_item_call label="Pokaż Ustawienia Debugowania" name="Debug Settings"/>
-		<menu_item_check label="Pokaż Menu Progresu" name="Debug Mode"/>
+		<menu_item_call label="Pokaż ustawienia debugowania" name="Debug Settings"/>
+		<menu_item_check label="Pokaż menu progresu" name="Debug Mode"/>
 	</menu>
-	<menu label="Postęp..." name="Develop">
+	<menu label="Rozwinięcie..." name="Develop">
 		<menu label="Konsola" name="Consoles">
-			<menu_item_check label="Konsola Tekstur" name="Texture Console"/>
-			<menu_item_check label="Debugowanie Zdarzeń Konsoli" name="Debug Console"/>
-			<menu_item_call label="Konsola Powiadomień" name="Notifications"/>
-			<menu_item_check label="Konsola Rozmiaru Tekstury" name="Texture Size"/>
-			<menu_item_check label="Konsola Kategorii Tekstur" name="Texture Category"/>
-			<menu_item_check label="Szybkie Timery" name="Fast Timers"/>
+			<menu_item_check label="Konsola tekstur" name="Texture Console"/>
+			<menu_item_check label="Debugowanie zdarzeń konsoli" name="Debug Console"/>
+			<menu_item_call label="Konsola powiadomień" name="Notifications"/>
+			<menu_item_check label="Konsola rozmiaru tekstury" name="Texture Size"/>
+			<menu_item_check label="Konsola kategorii tekstur" name="Texture Category"/>
+			<menu_item_check label="Szybkie timery" name="Fast Timers"/>
 			<menu_item_check label="Pamięć" name="Memory"/>
-			<menu_item_call label="Info Regionu do Debugowania Konsoli" name="Region Info to Debug Console"/>
+			<menu_item_call label="Info Regionu do debugowania konsoli" name="Region Info to Debug Console"/>
 			<menu_item_check label="Kamera" name="Camera"/>
 			<menu_item_check label="Wiatr" name="Wind"/>
 			<menu_item_check label="Znak" name="Badge"/>
 		</menu>
-		<menu label="Pokaż Informacje" name="Display Info">
-			<menu_item_check label="Pokaż Czas" name="Show Time"/>
-			<menu_item_check label="Pokaż Informacje o Renderowaniu" name="Show Render Info"/>
-			<menu_item_check label="Pokaż Kolor pod Kursorem" name="Show Color Under Cursor"/>
-			<menu_item_check label="Pokaż Aktualizacje Obiektów" name="Show Updates"/>
+		<menu label="Pokaż informacje" name="Display Info">
+			<menu_item_check label="Pokaż czas" name="Show Time"/>
+			<menu_item_check label="Pokaż informacje o renderowaniu" name="Show Render Info"/>
+			<menu_item_check label="Pokaż kolor pod kursorem" name="Show Color Under Cursor"/>
+			<menu_item_check label="Pokaż aktualizacje obiektów" name="Show Updates"/>
 		</menu>
-		<menu label="Reset Błędu" name="Force Errors">
-			<menu_item_call label="Aktywacja Punktu Załamania" name="Force Breakpoint"/>
-			<menu_item_call label="Reset Błędów LL" name="Force LLError And Crash"/>
-			<menu_item_call label="Reset Błędów Pamięci" name="Force Bad Memory Access"/>
-			<menu_item_call label="Reset Pętli" name="Force Infinite Loop"/>
-			<menu_item_call label="Reset Sterowników" name="Force Driver Carsh"/>
-			<menu_item_call label="WyjÄ…tek Programu" name="Force Software Exception"/>
-			<menu_item_call label="Uruchom Rozłączenie" name="Force Disconnect Viewer"/>
-			<menu_item_call label="Symulacja Wycieku Pamięci" name="Memory Leaking Simulation"/>
+		<menu label="Reset błędu" name="Force Errors">
+			<menu_item_call label="Aktywacja punktu załamania" name="Force Breakpoint"/>
+			<menu_item_call label="Reset błędów LL" name="Force LLError And Crash"/>
+			<menu_item_call label="Reset błędów pamięci" name="Force Bad Memory Access"/>
+			<menu_item_call label="Reset pętli" name="Force Infinite Loop"/>
+			<menu_item_call label="Reset sterowników" name="Force Driver Carsh"/>
+			<menu_item_call label="WyjÄ…tek programu" name="Force Software Exception"/>
+			<menu_item_call label="Uruchom rozłączenie" name="Force Disconnect Viewer"/>
+			<menu_item_call label="Symulacja wycieku pamięci" name="Memory Leaking Simulation"/>
 		</menu>
-		<menu label="Test Renderowania" name="Render Tests">
-			<menu_item_check label="Kamera Poza Zasiegiem" name="Camera Offset"/>
-			<menu_item_check label="Losowa Ilość Klatek" name="Randomize Framerate"/>
-			<menu_item_check label="Test Klatki Obrazu" name="Frame Test"/>
+		<menu label="Test renderowania" name="Render Tests">
+			<menu_item_check label="Kamera poza zasiegiem" name="Camera Offset"/>
+			<menu_item_check label="Losowa ilość klatek" name="Randomize Framerate"/>
+			<menu_item_check label="Test klatki obrazu" name="Frame Test"/>
 		</menu>
 		<menu label="Renderowanie" name="Rendering">
 			<menu_item_check label="Osie" name="Axes"/>
-			<menu_item_check label="Tryb Obrazu Szkieletowego" name="Wireframe"/>
-			<menu_item_check label="Globalne Oświetlenie" name="Global Illumination"/>
-			<menu_item_check label="Tekstury Animacji" name="Animation Textures"/>
-			<menu_item_check label="Wyłącz Tekstury" name="Disable Textures"/>
-			<menu_item_check label="Renderowania Załączonego Światła" name="Render Attached Lights"/>
-			<menu_item_check label="Renderowanie Załączonych Cząsteczek" name="Render Attached Particles"/>
-			<menu_item_check label="Wyświetlaj Obiekty Odblaskowe" name="Hover Glow Objects"/>
+			<menu_item_check label="Tryb obrazu szkieletowego" name="Wireframe"/>
+			<menu_item_check label="Globalne oświetlenie" name="Global Illumination"/>
+			<menu_item_check label="Tekstury animacji" name="Animation Textures"/>
+			<menu_item_check label="Wyłącz tekstury" name="Disable Textures"/>
+			<menu_item_check label="Renderowania załączonego światła" name="Render Attached Lights"/>
+			<menu_item_check label="Renderowanie załączonych cząsteczek" name="Render Attached Particles"/>
+			<menu_item_check label="Wyświetlaj obiekty odblaskowe" name="Hover Glow Objects"/>
 		</menu>
 		<menu label="Sieć" name="Network">
-			<menu_item_check label="Zatrzymaj Awatara" name="AgentPause"/>
-			<menu_item_call label="Upuść Pakiet Pamięci" name="Drop a Packet"/>
+			<menu_item_check label="Zatrzymaj awatara" name="AgentPause"/>
+			<menu_item_call label="Upuść pakiet pamięci" name="Drop a Packet"/>
 		</menu>
-		<menu_item_call label="Zderzenia, Popchnięcia &amp;  Uderzenia" name="Bumps, Pushes &amp;amp; Hits"/>
+		<menu_item_call label="Zderzenia, popchnięcia &amp;  uderzenia" name="Bumps, Pushes &amp;amp; Hits"/>
 		<menu label="Åšwiat" name="World">
-			<menu_item_check label="Domyślne Ustawienia Środowiska Regionu" name="Sim Sun Override"/>
-			<menu_item_check label="Efekty Emiterów" name="Cheesy Beacon"/>
-			<menu_item_check label="Ustalona Pogoda" name="Fixed Weather"/>
-			<menu_item_call label="Zachowaj Bufor Pamięci Obiektów Regionu" name="Dump Region Object Cache"/>
+			<menu_item_check label="Domyślne ustawienia środowiska Regionu" name="Sim Sun Override"/>
+			<menu_item_check label="Efekty emiterów" name="Cheesy Beacon"/>
+			<menu_item_check label="Ustalona pogoda" name="Fixed Weather"/>
+			<menu_item_call label="Zachowaj bufor pamięci obiektów regionu" name="Dump Region Object Cache"/>
 		</menu>
 		<menu label="UI" name="UI">
-			<menu_item_call label="Test PrzeglÄ…darki Internetowej" name="Web Browser Test"/>
-			<menu_item_call label="Drukuj Zaznaczone Informacje o Obiekcie" name="Print Selected Object Info"/>
-			<menu_item_call label="Statystyki Pamięci" name="Memory Stats"/>
-			<menu_item_check label="Kliknij Podójnie by Uruchomić Auto-Pilota" name="Double-ClickAuto-Pilot"/>
-			<menu_item_check label="Debugowanie Zdarzeń Klikania" name="Debug Clicks"/>
-			<menu_item_check label="Debugowanie Zdarzeń Myszy" name="Debug Mouse Events"/>
+			<menu_item_call label="Test przeglÄ…darki internetowej" name="Web Browser Test"/>
+			<menu_item_call label="Drukuj zaznaczone informacje o obiekcie" name="Print Selected Object Info"/>
+			<menu_item_call label="Statystyki pamięci" name="Memory Stats"/>
+			<menu_item_check label="Kliknij podójnie by uruchomić auto-pilota" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Debugowanie zdarzeń klikania" name="Debug Clicks"/>
+			<menu_item_check label="Debugowanie zdarzeń myszy" name="Debug Mouse Events"/>
 		</menu>
 		<menu label="XUI" name="XUI">
-			<menu_item_call label="Załaduj Ustawienia Koloru" name="Reload Color Settings"/>
-			<menu_item_call label="Pokaż Test Czcionki" name="Show Font Test"/>
+			<menu_item_call label="Załaduj ustawienia koloru" name="Reload Color Settings"/>
+			<menu_item_call label="Pokaż test czcionki" name="Show Font Test"/>
 			<menu_item_call label="Załaduj z XML" name="Load from XML"/>
 			<menu_item_call label="Zapisz jako XML" name="Save to XML"/>
-			<menu_item_check label="Pokaż Nazwy XUI" name="Show XUI Names"/>
-			<menu_item_call label="Wyślij Wiadomość (IM) Testową" name="Send Test IMs"/>
+			<menu_item_check label="Pokaż nazwy XUI" name="Show XUI Names"/>
+			<menu_item_call label="Wyślij wiadomość (IM) testową" name="Send Test IMs"/>
 		</menu>
 		<menu label="Awatar" name="Character">
-			<menu label="Grab Baked Texture" name="Grab Baked Texture">
-				<menu_item_call label="Tęczówka Oka" name="Iris"/>
+			<menu label="Przesuń bakowaną teksturę" name="Grab Baked Texture">
+				<menu_item_call label="Tęczówka oka" name="Iris"/>
 				<menu_item_call label="GÅ‚owa" name="Head"/>
-				<menu_item_call label="Górna Część Ciała" name="Upper Body"/>
-				<menu_item_call label="Dolna Część Ciała" name="Lower Body"/>
+				<menu_item_call label="Górna część ciała" name="Upper Body"/>
+				<menu_item_call label="Dolna część ciała" name="Lower Body"/>
 				<menu_item_call label="Spódnica" name="Skirt"/>
 			</menu>
-			<menu label="Testy Postaci" name="Character Tests">
-				<menu_item_call label="Przesuń Geometrię Postaci" name="Toggle Character Geometry"/>
-				<menu_item_check label="Pozwól na Zaznaczanie Awatarów" name="Allow Select Avatar"/>
+			<menu label="Testy postaci" name="Character Tests">
+				<menu_item_call label="Przesuń geometrię postaci" name="Toggle Character Geometry"/>
+				<menu_item_check label="Pozwól na zaznaczanie awatarów" name="Allow Select Avatar"/>
 			</menu>
-			<menu_item_call label="Powrót do Domyślnych Parametrów" name="Force Params to Default"/>
-			<menu_item_check label="Info o Animacji" name="Animation Info"/>
-			<menu_item_check label="Wolne Animacje" name="Slow Motion Animations"/>
-			<menu_item_check label="Wyłącz Poziom Detalu" name="Disable LOD"/>
-			<menu_item_check label="Pokaż Szczegóły Kolizji" name="Show Collision Skeleton"/>
-			<menu_item_check label="Wyświetl Cel Aganta" name="Display Agent Target"/>
-			<menu_item_call label="Debugowanie Tekstur Awatara" name="Debug Avatar Textures"/>
+			<menu_item_call label="Powrót do domyślnych parametrów" name="Force Params to Default"/>
+			<menu_item_check label="Info o animacji" name="Animation Info"/>
+			<menu_item_check label="Wolne animacje" name="Slow Motion Animations"/>
+			<menu_item_check label="Wyłącz poziom detalu" name="Disable LOD"/>
+			<menu_item_check label="Pokaż szczegóły kolizji" name="Show Collision Skeleton"/>
+			<menu_item_check label="Wyświetl cel agenta" name="Display Agent Target"/>
+			<menu_item_call label="Debugowanie tekstur awatara" name="Debug Avatar Textures"/>
 		</menu>
 		<menu_item_check label="Tekstury HTTP" name="HTTP Textures"/>
 		<menu_item_check label="Aktywacja okna konsoli podczas następnego uruchomienia" name="Console Window"/>
-		<menu_item_check label="Pokaż Menu Administratora" name="View Admin Options"/>
-		<menu_item_call label="Uzyskaj Status Administratora" name="Request Admin Options"/>
-		<menu_item_call label="Opuść Status Administratora" name="Leave Admin Options"/>
+		<menu_item_check label="Pokaż menu administratora" name="View Admin Options"/>
+		<menu_item_call label="Uzyskaj status administratora" name="Request Admin Options"/>
+		<menu_item_call label="Opuść status administratora" name="Leave Admin Options"/>
 	</menu>
 	<menu label="Administrator" name="Admin">
 		<menu label="Object">
-			<menu_item_call label="Weź Kopię" name="Take Copy"/>
-			<menu_item_call label="Reset Właściciela" name="Force Owner To Me"/>
-			<menu_item_call label="Reset Przyzwolenia Właściciela" name="Force Owner Permissive"/>
+			<menu_item_call label="Weź kopię" name="Take Copy"/>
+			<menu_item_call label="Reset właściciela" name="Force Owner To Me"/>
+			<menu_item_call label="Reset przyzwolenia właściciela" name="Force Owner Permissive"/>
 			<menu_item_call label="Usuń" name="Delete"/>
 			<menu_item_call label="Zablokuj" name="Lock"/>
 		</menu>
 		<menu label="Posiadłość" name="Parcel">
-			<menu_item_call label="Reset Właściciela" name="Owner To Me"/>
-			<menu_item_call label="Ustawienia Treści Lindenów" name="Set to Linden Content"/>
-			<menu_item_call label="Odzyskaj Posiadłość Publiczną" name="Claim Public Land"/>
+			<menu_item_call label="Reset właściciela" name="Owner To Me"/>
+			<menu_item_call label="Ustawienia treści Lindenów" name="Set to Linden Content"/>
+			<menu_item_call label="Odzyskaj posiadłość publiczną" name="Claim Public Land"/>
 		</menu>
 		<menu label="Region" name="Region">
-			<menu_item_call label="Zachowaj Tymczasowo BazÄ™ Asset" name="Dump Temp Asset Data"/>
-			<menu_item_call label="Zachowaj Ustawienie Regionu" name="Save Region State"/>
+			<menu_item_call label="Zachowaj tymczasowo bazÄ™ asset" name="Dump Temp Asset Data"/>
+			<menu_item_call label="Zachowaj ustawienie Regionu" name="Save Region State"/>
 		</menu>
-		<menu_item_call label="Boskie Nadzędzia" name="God Tools"/>
+		<menu_item_call label="Boskie narzędzia" name="God Tools"/>
 	</menu>
 </menu_bar>
diff --git a/indra/newview/skins/default/xui/pl/mime_types_mac.xml b/indra/newview/skins/default/xui/pl/mime_types_mac.xml
index ae860249bb8da46a33c5c883072a391bd3ab86b3..7213b26165af2a2ee76533359973892ee98da4ef 100644
--- a/indra/newview/skins/default/xui/pl/mime_types_mac.xml
+++ b/indra/newview/skins/default/xui/pl/mime_types_mac.xml
@@ -19,7 +19,7 @@
 			To miejsce posiada zawartość filmową
 		</tooltip>
 		<playtip name="movie_playtip">
-			OglÄ…daj Film
+			OglÄ…daj film
 		</playtip>
 	</widgetset>
 	<widgetset name="image">
@@ -46,7 +46,7 @@
 	</widgetset>
 	<scheme name="rtsp">
 		<label name="rtsp_label">
-			Synchroniczne Strumienie Medialne
+			Synchroniczne strumienie mediów
 		</label>
 	</scheme>
 	<mimetype name="blank">
@@ -111,7 +111,7 @@
 	</mimetype>
 	<mimetype name="application/xhtml+xml">
 		<label name="application/xhtml+xml_label">
-			Strona Internetowa (XHTML)
+			Strona internetowa (XHTML)
 		</label>
 	</mimetype>
 	<mimetype name="application/x-director">
@@ -171,7 +171,7 @@
 	</mimetype>
 	<mimetype name="text/html">
 		<label name="text/html_label">
-			Strona Internetowa
+			Strona internetowa
 		</label>
 	</mimetype>
 	<mimetype name="text/plain">
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 14718e8f6fb1e5f0651d6c3fd1e1189c7b84de30..7fcd7b5e04d5031827910dc3fde0ecdba83ca1ba 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -67,8 +67,8 @@ Szczegóły błędu: Błąd o nazwie &apos;[_NAME]&apos; nie został odnaleziony
 		[MESSAGE]
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/>
 	</notification>
-	<notification name="BadInstallation">
-		Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę [http://get.secondlife.com download the latest version] by ściągnąć najnowszą wersje klienta.
+	<notification name="BadInstallation">		
+		Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę [http://get.secondlife.com pobierz najnowsza wersję] aby ściągnąć ostatnią wersję klienta.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="LoginFailedNoNetwork">
@@ -78,7 +78,7 @@ Sprawdź stan swojego połączenia sieciowego.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="MessageTemplateNotFound">
-		Wzór komunikatu dla [PATH] nie odnaleziony.
+		Wzór komunikatu dla [PATH] nie został odnaleziony.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="WearableSave">
@@ -103,7 +103,7 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz.
 	</notification>
 	<notification name="SaveClothingBodyChanges">
 		Zapisać wszystkie zmiany dotyczące ubrania/cześci ciała?
-		<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/>
+		<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie zapisuj" yestext="Zapisz"/>
 	</notification>
 	<notification name="FriendsAndGroupsOnly">
 		Osoby spoza listy znajomych, których rozmowy głosowe i IM są ignorowane, nie wiedzą o tym.
@@ -128,14 +128,14 @@ Czy chcesz dać prawa modyfikacji wybranym osobom?
 		<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
 	</notification>
 	<notification name="UnableToCreateGroup">
-		Założenie grupy niemożliwe.
+		Założenie grupy nie jest możliwe.
 [MESSAGE]
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="PanelGroupApply">
 		[NEEDS_APPLY_MESSAGE]
 [WANT_APPLY_MESSAGE]
-		<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Ignoruj Zmiany" yestext="Zastosuj Zmiany"/>
+		<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Ignoruj zmiany" yestext="Zastosuj zmiany"/>
 	</notification>
 	<notification name="MustSpecifyGroupNoticeSubject">
 		Aby wysłać ogłoszenie do grupy musisz nadać mu tytuł.
@@ -181,7 +181,7 @@ Chcesz kontynuować?
 	<notification name="JoinGroupNoCost">
 		Dołączasz do grupy [NAME].
 Czy chcesz kontynuować?
-		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Zaakceptuj"/>
+		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Akceptuj"/>
 	</notification>
 	<notification name="JoinGroupCannotAfford">
 		Członkostwo w tej grupie kosztuje [COST]L$
@@ -272,7 +272,7 @@ Skrypty muszą pozostać aktywne dla prawidłowego działania broni.
 	<notification name="MultipleFacesSelected">
 		Obecnie zaznaczono wiele powierzchni.
 Jeśli działanie będzie kontynuowane, oddzielne media będą ustawione na wielu powierzchniach obiektu. 
-W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z Wybierz Powierzchnię i kliknij na wybranej powierzchni obiektu oraz kliknij Dodaj.
+W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z Wybierz powierzchnię i kliknij na wybranej powierzchni obiektu oraz kliknij Dodaj.
 		<usetemplate ignoretext="Media zostanÄ… ustawione na wielu zaznaczonych powierzchniach" name="okcancelignore" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="MustBeInParcel">
@@ -343,11 +343,11 @@ Czy na pewno chcesz kontynuować?
 		<usetemplate ignoretext="Potwierdź przed usunięciem mediów z obiektu" name="okcancelignore" notext="Nie" yestext="Tak"/>
 	</notification>
 	<notification name="ClassifiedSave">
-		Zapisać zmiany w Reklamie [NAME]?
+		Zapisać zmiany w reklamie [NAME]?
 		<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/>
 	</notification>
 	<notification name="ClassifiedInsufficientFunds">
-		Nie posiadasz wystarczających środków aby dodać Reklamę.
+		Nie posiadasz wystarczających środków aby dodać reklamę.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="DeleteAvatarPick">
@@ -386,27 +386,27 @@ Pamiętaj: Opcja ta wyczyszcza bufor danych.
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="SaveChanges">
-		Zapisać Zmiany?
-		<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/>
+		Zapisać zmiany?
+		<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie zapisuj" yestext="Zapisz"/>
 	</notification>
 	<notification name="GestureSaveFailedTooManySteps">
-		Nie można zapisać gestu.
-Ten gest ma zbyt wiele etapów.
+		Nie można zapisać gesturki.
+Ta gesturka ma zbyt wiele etapów.
 Usuń kilka etapów i zapisz jeszcze raz.
 	</notification>
 	<notification name="GestureSaveFailedTryAgain">
-		Zapis gestu nie powiódł się. Spróbuj jeszcze raz za kilka minut.
+		Zapis gesturki nie powiódł się. Spróbuj jeszcze raz za kilka minut.
 	</notification>
 	<notification name="GestureSaveFailedObjectNotFound">
-		Nie można zapisać gestu ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony.
+		Nie można zapisać gesturki ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony.
 Obiekt może znajdować się zbyt daleko albo został usunięty.
 	</notification>
 	<notification name="GestureSaveFailedReason">
-		Nie można zapisać gestu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później.
+		Nie można zapisać gesturki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później.
 	</notification>
 	<notification name="SaveNotecardFailObjectNotFound">
 		Nie można zapisać notki ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony.
-Obiekt może znajdować się zbyt daleko albo został usuniety.
+Obiekt może znajdować się zbyt daleko albo został usunięty.
 	</notification>
 	<notification name="SaveNotecardFailReason">
 		Nie można zapisać notki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później.
@@ -422,19 +422,19 @@ Czy chcesz załadować ostatnią wersję zapisaną na serwerze?
 	</notification>
 	<notification name="SaveScriptFailObjectNotFound">
 		Nie można zapisać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony.
-Obiekt może znajdować się zbyt daleko albo został usuniety.
+Obiekt może znajdować się zbyt daleko albo został usunięty.
 	</notification>
 	<notification name="SaveBytecodeFailReason">
 		Nie można zapisać skompilowanego skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej.
 	</notification>
 	<notification name="StartRegionEmpty">
 		Oops, Twoje miejsce startu nie zostało określone.
-Wpisz proszÄ™ nazwÄ™ regionu w lokalizacjÄ™ startu w polu Lokalizacja Startu lub wybierz Moja Ostatnia Lokalizacja albo Miejsce Startu.
+Wpisz proszÄ™ nazwÄ™ regionu w lokalizacjÄ™ startu w polu Lokalizacja Startu lub wybierz Moja ostatnia lokalizacja albo Miejsce Startu.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="CouldNotStartStopScript">
 		Nie można uruchomić lub zatrzymać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony.
-Obiekt może znajdować się zbyt daleko albo został usuniety.
+Obiekt może znajdować się zbyt daleko albo został usunięty.
 	</notification>
 	<notification name="CannotDownloadFile">
 		Nie można załadować pliku
@@ -453,7 +453,7 @@ Po więcej info, odwiedź stronę [_URL] .
 	</notification>
 	<notification name="UnknownGPU">
 		Twój system jest wyposażony w kartę graficzną, która nie jest rozpoznana przez [APP_NAME].
-Zdarza się to częstow w przypadku nowego sprzętu, który nie był testowany z [APP_NAME].  Prawdopodobnie wystarczy dostosowanie ustawień grafiki aby działanie było poprawne.
+Zdarza się to często w przypadku nowego sprzętu, który nie był testowany z [APP_NAME].  Prawdopodobnie wystarczy dostosowanie ustawień grafiki aby działanie było poprawne.
 (Ja &gt; Właściwości &gt; Grafika).
 		<form name="form">
 			<ignore name="ignore" text="Karta graficzna nie została zidentyfikowana."/>
@@ -461,7 +461,7 @@ Zdarza się to częstow w przypadku nowego sprzętu, który nie był testowany z
 	</notification>
 	<notification name="DisplaySettingsNoShaders">
 		[APP_NAME] zawiesił się podczas inicjalizacji sterowników graficznych.
-Jakość grafiki została zmniejszona - może pomoże.
+Jakość grafiki została zmniejszona - może to pomóc.
 Pewne funkcje graficzne zostały wyłączone. Zalecamy aktualizcje sterowników graficznych.
 Możesz podnieść jakość grafiki pod Ustawienia &gt; Grafika.
 	</notification>
@@ -972,7 +972,7 @@ ze wszystkich posiadłości w tym symulatorze?
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="BlankClassifiedName">
-		Musisz nadać tytuł Twojej Reklamie.
+		Musisz nadać tytuł Twojej reklamie.
 	</notification>
 	<notification name="MinClassifiedPrice">
 		Minimalna cena za publikacjÄ™ wynosi [MIN_PRICE]L$.
@@ -1106,7 +1106,7 @@ Możesz normalnie używać [SECOND_LIFE], inni użytkownicy będą Cię widzieli
 
 Jeżeli używasz [SECOND_LIFE] po raz pierwszy to musisz stworzyć konto żeby móc się zalogować.
 Czy chcesz przejść na stronę [http://join.secondlife.com secondlife.com] żeby stworzyć nowe konto?
-		<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Nowe Konto..."/>
+		<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Nowe konto..."/>
 	</notification>
 	<notification name="LoginPacketNeverReceived">
 		Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID].
@@ -1223,14 +1223,14 @@ Zamień teksturę [TEXTURE_NUM] na 24-o bitową teksturę o wymiarze 512x512 lub
 [MAX_AGENTS] [LIST_TYPE] limit przekroczony o [NUM_EXCESS].
 	</notification>
 	<notification name="MaxAllowedGroupsOnRegion">
-		Możesz mieć maksymalnie [MAX_GROUPS] Dozwolonych Grup.
+		Możesz mieć maksymalnie [MAX_GROUPS] dozwolonych grup.
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Ustal"/>
 	</notification>
 	<notification name="MaxManagersOnRegion">
-		Możesz mieć maksymalnie [MAX_MANAGER] Zarządców Majątku.
+		Możesz mieć maksymalnie [MAX_MANAGER] zarządców Majątku.
 	</notification>
 	<notification name="OwnerCanNotBeDenied">
-		Nie możesz dodać właściciela majątku do listy &apos;Nieporządanych Rezydentów (banów)&apos; majątku.
+		Nie możesz dodać właściciela majątku do listy &apos;Niepożądanych Rezydentów (banów)&apos; majątku.
 	</notification>
 	<notification name="CanNotChangeAppearanceUntilLoaded">
 		Nie możesz zmienić wyglądu podczas ładowania ubrań i kształtów.
@@ -1239,7 +1239,7 @@ Zamień teksturę [TEXTURE_NUM] na 24-o bitową teksturę o wymiarze 512x512 lub
 		Tytuł Twojej reklamy musi zaczynać się od litery (A-Z) albo cyfry. Znaki przestankowe są niedozwolone.
 	</notification>
 	<notification name="CantSetBuyObject">
-		Nie możesz wybrać Kup Obiekt ponieważ obiekt nie jest na sprzedaż.
+		Nie możesz wybrać Kup obiekt ponieważ obiekt nie jest na sprzedaż.
 Wybierz obiekt na sprzedaż i spróbuj jeszcze raz.
 	</notification>
 	<notification name="FinishedRawDownload">
@@ -1307,7 +1307,7 @@ Pobrać i zapisać w folderze Aplikacji?
 		<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/>
 	</notification>
 	<notification name="DeedObjectToGroup">
-		Przekazanie tego obiektu spowoduje, że Grupa:
+		Przekazanie tego obiektu spowoduje, że grupa:
 * Otrzyma L$ zapłacone temu obiektowi
 		<usetemplate ignoretext="Proszę potwierdzić decyzję przed przepisaniem obiektu do grupy" name="okcancelignore" notext="Anuluj" yestext="Przekaż"/>
 	</notification>
@@ -1329,15 +1329,15 @@ Pobrać i zapisać w folderze Aplikacji?
 	</notification>
 	<notification name="WebLaunchPublicIssue">
 		Odwiedź [SECOND_LIFE] katalog publicznych problemów, gdzie możesz zgłaszać błędy i inne problemy.
-		<usetemplate ignoretext="Uruchom przeglądarkę internetową by wysłać Błędy Klienta" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+		<usetemplate ignoretext="Uruchom przeglądarkę internetową by wysłać Błędy klienta" name="okcancelignore" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="WebLaunchSupportWiki">
 		Otwórz oficjalny blog Lindenów żeby zobaczyć nowe wiadomości i informacje.
 		<usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć blog" name="okcancelignore" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="WebLaunchLSLGuide">
-		Czy chcesz otworzyć samouczek Języka Skryptowania?
-		<usetemplate ignoretext="Uruchom przeglądarkę internetową by samouczek Języka Skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/>
+		Czy chcesz otworzyć samouczek Języka skryptowania?
+		<usetemplate ignoretext="Uruchom przeglądarkę internetową by samouczek Języka skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="WebLaunchLSLWiki">
 		Czy napewno chcesz odwiedzić portal LSL Portal?
@@ -1385,7 +1385,7 @@ Chcesz opuścić grupę?
 		Tryb Pracy jest włączony.
 Czat i IM będą ukryte. Wysłane IM będą otrzymywały Twoją odpowiedź Trybu Pracy. Propozycje teleportacji będą odrzucone.
 Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywane w folderze &quot;Kosz&quot; w Twojej szafie.
-		<usetemplate ignoretext="Status zmieniony na Tryb Pracy" name="okignore" yestext="OK"/>
+		<usetemplate ignoretext="Status zmieniony na Tryb pracy" name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Należysz już do maksymalnej ilości grup. Opuść proszę przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów.
@@ -1466,7 +1466,7 @@ Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywa
 	</notification>
 	<notification name="TeleportToClassified">
 		Teleportuj do [CLASSIFIED]?
-		<usetemplate ignoretext="Potwierdź, że chcesz teleportować się do lokalizacji z Reklamy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
+		<usetemplate ignoretext="Potwierdź, że chcesz teleportować się do lokalizacji z reklamy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
 	</notification>
 	<notification name="TeleportToHistoryEntry">
 		Teleportuj do [HISTORY_ENTRY]?
@@ -1489,7 +1489,7 @@ Kontynuować?
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification label="Zmiana Dostępu do Majątku Lindenów" name="ChangeLindenAccess">
-		Dokonujesz zmiany w liście dostępu Regionu Głównego należącego do Lindenów (Regiony Główne, Teen Grid, Orientacja).
+		Dokonujesz zmiany w liście dostępu Regionu głównego należącego do Lindenów (Regiony Główne, Teen Grid, Orientacja).
 
 Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie i powinna być używana wyłącznie w celu zablokowania opcji pozwalającej na przeniesienie obiektów/L$ do/z sieci.
 Dodatkowo, zmiany dokonane w Regionie Głównym mogą spowodować problemy przestrzeni serwerowej innych regionów.
@@ -1560,7 +1560,7 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp
 
 W celu uzyskania dostępu do tego regiony zmień proszę swój status ustawień wieku. Będziesz mógł/mogła szukać i mieć dostęp do treści [REGIONMATURITY]. W celu cofnięcia zmian wybierz z menu Ja &gt; Ustawienia &gt; Ogólne.
 		<form name="form">
-			<button name="OK" text="Zmień Ustawienia"/>
+			<button name="OK" text="Zmień ustawienia"/>
 			<button default="true" name="Cancel" text="Zamknij"/>
 			<ignore name="ignore" text="Moje ustawienia wieku nie dopuszczajÄ… do regionu"/>
 		</form>
@@ -1693,7 +1693,7 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz.
 Zostaniesz właścicielem tego obiektu z następującymi prawami:
  Modyfikacje: [MODIFYPERM]
  Kopiowanie: [COPYPERM]
- Odsprzedawanie i Oddawanie: [RESELLPERM]
+ Odsprzedawanie i oddawanie: [RESELLPERM]
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="BuyOriginalNoOwner">
@@ -1701,7 +1701,7 @@ Zostaniesz właścicielem tego obiektu z następującymi prawami:
 Zostaniesz właścicielem tego obiektu z następującymi prawami:
  Modyfikacje: [MODIFYPERM]
  Kopiowanie: [COPYPERM]
- Odsprzedawanie i Oddawanie: [RESELLPERM]
+ Odsprzedawanie i oddawanie: [RESELLPERM]
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="BuyCopy">
@@ -1709,7 +1709,7 @@ Zostaniesz właścicielem tego obiektu z następującymi prawami:
 Obiekt zostanie skopiowany do Twojej szafy z następującymi prawami:
  Modyfikacje: [MODIFYPERM]
  Kopiowanie: [COPYPERM]
- Odsprzedawanie i Oddawanie: [RESELLPERM]
+ Odsprzedawanie i oddawanie: [RESELLPERM]
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="BuyCopyNoOwner">
@@ -1717,7 +1717,7 @@ Obiekt zostanie skopiowany do Twojej szafy z następującymi prawami:
 Obiekt zostanie skopiowany do Twojej szafy z następującymi prawami:
  Modyfikacje: [MODIFYPERM]
  Kopiowanie: [COPYPERM]
- Odsprzedawanie i Oddawanie: [RESELLPERM]
+ Odsprzedawanie i oddawanie: [RESELLPERM]
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="BuyContents">
@@ -1770,7 +1770,7 @@ Przenieść obiekty szafy?
 		<usetemplate ignoretext="Uprzedź przed przeniesieniem zawartości niekopiowalnej z obiektu, która może uszkodzić skrypty obiektu" name="okcancelignore" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="ClickActionNotPayable">
-		Uwaga: Opcja Zapłać Obiektowi została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money().
+		Uwaga: Opcja Zapłać obiektowi została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money().
 		<form name="form">
 			<ignore name="ignore" text="Opcja Zapłać Obiektowi została aktywowana podczas budowania obiektów bez skryptu z funkcją money()."/>
 		</form>
@@ -1836,18 +1836,18 @@ Linden Lab
 Chcesz go zamienić na wybrany obiekt?
 		<form name="form">
 			<ignore name="ignore" save_option="true" text="Obecnie masz już dołączony obiekt do tej części Twojego ciała.Chcesz go zamienić na wybrany obiekt?"/>
-			<button ignore="Zamień Automatycznie" name="Yes" text="OK"/>
-			<button ignore="Nie Zamieniaj" name="No" text="Anuluj"/>
+			<button ignore="Zamień automatycznie" name="Yes" text="OK"/>
+			<button ignore="Nie zamieniaj" name="No" text="Anuluj"/>
 		</form>
 	</notification>
 	<notification label="Ostrzeżenie Trybu Pracy" name="BusyModePay">
-		Jesteś w Trybie Pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę.
+		Jesteś w Trybie pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę.
 
-Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji?
+Chcesz wyłączyć Tryb pracy przed zakończeniem tej tranzakcji?
 		<form name="form">
 			<ignore name="ignore" save_option="true" text="Jesteś w Trybie Pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę. Chcesz wyłączyć Tryb Pracy przed zakończeniem tej transakcji?"/>
-			<button ignore="Zawsz wyłączaj Tryb Pracy" name="Yes" text="OK"/>
-			<button ignore="Nie wyłączaj Trybu Pracy" name="No" text="Anuluj"/>
+			<button ignore="Zawsz wyłączaj tryb pracy" name="Yes" text="OK"/>
+			<button ignore="Nie wyłączaj trybu pracy" name="No" text="Anuluj"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -1871,8 +1871,8 @@ Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji?
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/>
 	</notification>
 	<notification name="ConfirmEmptyLostAndFound">
-		Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i Odnalezione?
-		<usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i Odnalezione" name="okcancelignore" notext="Nie" yestext="Tak"/>
+		Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i odnalezione?
+		<usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i odnalezione" name="okcancelignore" notext="Nie" yestext="Tak"/>
 	</notification>
 	<notification name="CopySLURL">
 		Następujący link SLURL został skopiowany do schowka:
@@ -1898,14 +1898,14 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
 		Ten plik cyklu dziennego używa brakującego pliku nieba: [SKY].
 	</notification>
 	<notification name="PPSaveEffectAlert">
-		Efekt Post-Procesu już istnieje. Chcesz zapisać nowy na jego miejsce?
+		Efekt post-procesu już istnieje. Chcesz zapisać nowy na jego miejsce?
 		<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
 	</notification>
 	<notification name="NewSkyPreset">
 		Nazwij nowe niebo.
 		<form name="form">
 			<input name="message">
-				Nowe Ustawienie
+				Nowe ustawienie
 			</input>
 			<button name="OK" text="OK"/>
 			<button name="Cancel" text="Anuluj"/>
@@ -1918,7 +1918,7 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
 		Nazwij nowe ustawienie wody.
 		<form name="form">
 			<input name="message">
-				Nowe Ustawienie
+				Nowe ustawienie
 			</input>
 			<button name="OK" text="OK"/>
 			<button name="Cancel" text="Anuluj"/>
@@ -1987,10 +1987,10 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
 		Anulowane
 	</notification>
 	<notification name="CancelledSit">
-		Siadanie Anulowane
+		Siadanie anulowane
 	</notification>
 	<notification name="CancelledAttach">
-		Dołączenie Anulowane
+		Dołączenie anulowane
 	</notification>
 	<notification name="ReplacedMissingWearable">
 		Barkujące ubranie/części ciała zastąpiono domyślnymi obiektami.
@@ -2027,7 +2027,7 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
 		Gesturka [NAME] nie znaleziony w bazie danych.
 	</notification>
 	<notification name="UnableToLoadGesture">
-		Ładowanie gestu [NAME] nie powiodło się.
+		Ładowanie gesturki [NAME] nie powiodło się.
 	</notification>
 	<notification name="LandmarkMissing">
 		Miejsce (LM) nie znalezione w bazie danych.
@@ -2041,7 +2041,7 @@ Spróbuj jeszcze raz.
 Ponieważ to ma wpływ na wpisywane hasło, możesz chcieć go wyłączyć.
 	</notification>
 	<notification name="NotecardMissing">
-		Notka nie znaleziona w bazie danych.
+		Notka nie została znaleziona w bazie danych.
 	</notification>
 	<notification name="NotecardNoPermissions">
 		Nie masz pozwolenia na zobaczenie notki.
@@ -2131,7 +2131,7 @@ Spróbuj wybrać mniejszy obszar.
 		Pewne frazy podczas wyszukiwania zostały usunięte w związku z restrykcjami zawartymi w Standardach Społecznościowych (Community Standards).
 	</notification>
 	<notification name="NoContentToSearch">
-		Proszę wybrać przynajmiej jeden z podanych rodzajów treści jaką zawiera region podczas wyszukiwania (&apos;PG&apos;, &apos;Mature&apos;, lub &apos;Adult&apos;).
+		Proszę wybrać przynajmiej jeden z podanych rodzajów treści jaką zawiera region podczas wyszukiwania (&apos;General&apos;, &apos;Moderate&apos;, lub &apos;Adult&apos;).
 	</notification>
 	<notification name="GroupVote">
 		[NAME] zaprasza do głosowania nad propozycją:
@@ -2148,7 +2148,7 @@ Spróbuj wybrać mniejszy obszar.
 		[MESSAGE]
 	</notification>
 	<notification name="EventNotification">
-		Zawiadomienie o Imprezie:
+		Zawiadomienie o imprezie:
 
 [NAME]
 [DATE]
@@ -2167,12 +2167,12 @@ Spróbuj wybrać mniejszy obszar.
 		</form>
 	</notification>
 	<notification name="DeactivatedGesturesTrigger">
-		Zablokowane gesty z jednakowym aktywowaniem:
+		Zablokowane gesturki z jednakowym aktywowaniem:
 [NAMES]
 	</notification>
 	<notification name="NoQuickTime">
 		Wygląda na to, że QuickTime z Apple nie jest zainstalowany na Twoim komputerze.
-Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do [http://www.apple.com/quicktime QuickTime site] i zainstaluj odtwarzacz.
+Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do [http://www.apple.com/quicktime strona QuickTime] i zainstaluj odtwarzacz.
 	</notification>
 	<notification name="NoPlugin">
 		Nie znaleziono wtyczki mediów dla &quot;[MIME_TYPE]&quot; typu mime.  Media tego typu będą niedostępne.
@@ -2584,7 +2584,7 @@ Wybierz Zaakceptuj żeby zacząć czat albo Odmów żeby nie przyjąć zaproszen
 		Nie masz dostępu do posiadłości, nie należysz do właściwej grupy.
 	</notification>
 	<notification name="Cannot enter parcel: banned">
-		Masz wzbroniny dostęp to tej posiadłości (ban).
+		Masz wzbroniony wstęp na tą posiadłości (ban).
 	</notification>
 	<notification name="Cannot enter parcel: not on access list">
 		Nie masz dostępu do posiadłości, nie jesteś na liście dostępu.
diff --git a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml
index 57dc8a3dd7f639c144915b9626a3f5a27fdd1659..ab1d8d70072b08e1f56364af4337008e66cf630e 100644
--- a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml
+++ b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="panel_activeim_row">
 	<string name="unknown_obj">
-		Nieznany Obiekt
+		Nieznany obiekt
 	</string>
 	<text name="object_name">
-		Nienazwany Obiekt
+		Nienazwany obiekt
 	</text>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml
index 6cd47c6ce78f41036c63f90a5e2f22868eb085b4..ba0c85e4ef4811297922b339dd327d344648224d 100644
--- a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml
@@ -5,10 +5,10 @@
 			<button label="Dzwoń" name="call_btn"/>
 		</layout_panel>
 		<layout_panel name="end_call_btn_panel">
-			<button label="Zakończ Rozmowe" name="end_call_btn"/>
+			<button label="Zakończ rozmowę" name="end_call_btn"/>
 		</layout_panel>
 		<layout_panel name="voice_ctrls_btn_panel">
-			<button label="Przełączniki Głosu" name="voice_ctrls_btn"/>
+			<button label="Przełączniki głosu" name="voice_ctrls_btn"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml
index fa8dde77eb1f730fb63de6aa97f96d0c0eee535b..9074296bd53bc268d690771956b28a727c82f160 100644
--- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml
+++ b/indra/newview/skins/default/xui/pl/panel_audio_device.xml
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel name="device_settings">
 	<text name="Audio Devices">
-		UrzÄ…dzenia Audio
+		UrzÄ…dzenia audio
 	</text>
 	<text name="Input device (microphone):">
-		Urządzenia Wejściowe (mikrofon):
+		Urządzenia wejściowe (mikrofon):
 	</text>
 	<text name="Output device (speakers):">
-		Urządzenia Wyjściowe (głośniki):
+		Urządzenia wyjściowe (głośniki):
 	</text>
 	<text name="Input level:">
-		Poziom Wejścia
+		Poziom wejścia
 	</text>
 	<text_editor name="voice_intro_text1">
-		Użyj suwaka by dostosować jak głośno Cię słychać dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu.
+		Za pomocą suwaka ustaw poziom głośności Twojego mówienia dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu.
 	</text_editor>
 	<volume_slider name="mic_volume_slider"
 	     tool_tip="By zmienić poziom głośności użyj suwaka" />
diff --git a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml
index 122d834bdd4c161550c3db8ff5b4750e2ae4939b..62cb392ba742497284624d7c301387f267f7086c 100644
--- a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
 	<text name="title_text">
-		Lista Blokad
+		Lista blokad
 	</text>
-	<scroll_list name="blocked" tool_tip="Lista Zablokowanych Osób"/>
+	<scroll_list name="blocked" tool_tip="Lista zablokowanych osób"/>
 	<button label="Zablokuj Rezydenta..." label_selected="Zablokuj Rezydenta..." name="Block resident..." tool_tip="Wybierz Rezydenta aby zablokować"/>
 	<button label="Zablokuj obiekt według nazwy..." label_selected="Zablokuj obiekt według nazwy..." name="Block object by name..."/>
-	<button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń Rezydenta lub Obiekt z Listy Zablokowanych"/>
+	<button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń Rezydenta lub obiekt z listy zablokowanych"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
index cf73ae53dd2dbe00036736fb2f56e51c370b4966..a0f4eb5244efaf05ede7a7e5e361086c658c3b36 100644
--- a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
@@ -9,22 +9,22 @@
 			</talk_button>
 		</layout_panel>
 		<layout_panel name="gesture_panel">
-			<gesture_combo_list label="Gestury" name="Gesture" tool_tip="Pokazuje/Ukrywa gestury"/>
+			<gesture_combo_list label="Gesturki" name="Gesture" tool_tip="Pokazuje/Ukrywa gesturki"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj Ustawienia Ruchu"/>
+			<button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj ustawienia ruchu"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj Ustawienia Kamery"/>
+			<button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj ustawienia kamery"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Zrób Zdjęcie"/>
+			<button label="" name="snapshots" tool_tip="Zrób zdjęcie"/>
 		</layout_panel>
 		<layout_panel name="sidebar_btn_panel">
-			<button label="Schowek" name="sidebar_btn" tool_tip="Pokazuje/ukrywa Schowek"/>
+			<button label="Schowek" name="sidebar_btn" tool_tip="Pokazuje/ukrywa schowek"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Buduj" name="build_btn" tool_tip="Pokazuje/ukrywa Narzędzia Budowania"/>
+			<button label="Buduj" name="build_btn" tool_tip="Pokazuje/ukrywa narzędzia budowania"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
 			<button label="Szukaj" name="search_btn" tool_tip="Pokazuje/ukrywa Szukaj"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml
index 77d2e86b7e29a0ba44dda61e4164afe7eebf93c3..e32c12a8eecec6cf41b0d8b1fd2ef53648ffb3de 100644
--- a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml
+++ b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml
@@ -2,7 +2,7 @@
 <panel name="bottom_tray_lite">
 	<layout_stack name="toolbar_stack_lite">
 		<layout_panel name="gesture_panel">
-			<gesture_combo_list label="Gest" name="Gest" tool_tip="Pokaż/ukryj gestury"/>
+			<gesture_combo_list label="Gesturki" name="Gesturki" tool_tip="Pokaż/ukryj gesturki"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml
index ac2739633ee7725773b8b35930fa961b470b9d9e..a22d4b048273b634f8241b7d448d3c31f7d2b4cd 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="edit_alpha_panel">
 	<panel name="avatar_alpha_color_panel">
-		<texture_picker label="Alpha Dolnej Części Ciała" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-		<texture_picker label="Alpha Górnej Części Ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-		<texture_picker label="Alpha Głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-		<texture_picker label="Alpha Oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-		<texture_picker label="Alpha Włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+		<texture_picker label="Alpha dolnej części ciała" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+		<texture_picker label="Alpha górnej części ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+		<texture_picker label="Alpha głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+		<texture_picker label="Alpha oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
+		<texture_picker label="Alpha włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
index 6395d5c59ae1627add21e76bdda733642474c4ba..07f9b3a13f99f8a74de3d6a27e6db4b5bb4c43cb 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
@@ -10,7 +10,7 @@
 		Zapisz
 	</string>
 	<text name="title">
-		Edytuj ReklamÄ™
+		Edytuj reklamÄ™
 	</text>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
@@ -31,10 +31,10 @@
 			</text>
 			<button label="Ustaw na bieżącą lokalizację" name="set_to_curr_location_btn"/>
 			<text name="category_label" value="Kategoria:"/>
-			<text name="content_type_label" value="Typ Zawartości:"/>
-			<icons_combo_box label="Treść Ogólna" name="content_type">
-				<icons_combo_box.item label="Moderuj Treść" name="mature_ci" value="Mature"/>
-				<icons_combo_box.item label="Treść Ogólna" name="pg_ci" value="PG"/>
+			<text name="content_type_label" value="Typ zawartości:"/>
+			<icons_combo_box label="Treść General" name="content_type">
+				<icons_combo_box.item label="Treść Moderate" name="mature_ci" value="Mature"/>
+				<icons_combo_box.item label="Treść General" name="pg_ci" value="PG"/>
 			</icons_combo_box>
 			<text name="price_for_listing_label" value="Cena za wyświetlenie:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Cena za umieszczenie reklamy." value="50"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
index edd74157512ff7921b7ba6769382457514422060..c9790f5eba41dc39d06d96cce2530876542ff892 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
@@ -33,8 +33,8 @@
 					WWW:
 				</text>
 				<check_box label="Pokaż w wyszukiwarce" name="show_in_search_checkbox"/>
-				<text name="title_acc_status_text" value="Moje Konto:"/>
-				<text name="my_account_link" value="[[URL] idź do Dashboard]"/>
+				<text name="title_acc_status_text" value="Moje konto:"/>
+				<text name="my_account_link" value="[[URL] idź do dashboard]"/>
 				<text name="acc_status_text" value="Rezydent. Brak danych konta."/>
 				<text name="title_partner_text" value="Partner:"/>
 				<text name="partner_edit_link" value="[[URL] Edytuj]"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
index 194b26a97eac808a9c51dc3f5b1f45f507b8d5ee..da2c26f02b799a1be0df6853609d5fac0f2c21e9 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
@@ -40,7 +40,7 @@
 		Edycja bielizny
 	</string>
 	<string name="edit_alpha_title">
-		Edycja maski Alpha
+		Edycja maski alpha
 	</string>
 	<string name="edit_tattoo_title">
 		Edycja tatuażu
@@ -73,7 +73,7 @@
 		Kurtka:
 	</string>
 	<string name="skirt_desc_text">
-		spódnica:
+		Spódnica:
 	</string>
 	<string name="gloves_desc_text">
 		Rękawiczki:
@@ -85,13 +85,13 @@
 		Bielizna:
 	</string>
 	<string name="alpha_desc_text">
-		Maska Alpha:
+		Maska alpha:
 	</string>
 	<string name="tattoo_desc_text">
 		Tatuaż:
 	</string>
 	<labeled_back_button label="Zapisz" name="back_btn" tool_tip="Powrót do edycji stroju"/>
-	<text name="edit_wearable_title" value="Edycja Kształtu"/>
+	<text name="edit_wearable_title" value="Edycja kształtu"/>
 	<panel label="Koszula" name="wearable_type_panel">
 		<text name="description_text" value="Kształt:"/>
 		<radio_group name="sex_radio">
diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml
index fca0dad38037e27d0296dc48756bd3390edcf4e5..9d8dc69a3511bb0cde91014dc67682d1b468ff0d 100644
--- a/indra/newview/skins/default/xui/pl/panel_friends.xml
+++ b/indra/newview/skins/default/xui/pl/panel_friends.xml
@@ -3,11 +3,11 @@
 	<string name="Multiple">
 		Znajomi
 	</string>
-	<scroll_list name="friend_list" tool_tip="By wybrać wielu znajomych za jednym razem przetrzymaj klawisz shift lub control">
+	<scroll_list name="friend_list" tool_tip="Aby wybrać wielu znajomych za jednym razem przetrzymaj klawisz Shift lub Control">
 		<column name="icon_online_status" tool_tip="Status dostępności"/>
 		<column label="ImiÄ™" name="friend_name" tool_tip="ImiÄ™"/>
 		<column name="icon_visible_online" tool_tip="Ta osoba może widzieć czy jesteś w Second Life"/>
-		<column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Cię na mapie"/>
+		<column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Ciebie na mapie"/>
 		<column name="icon_edit_mine" tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty"/>
 		<column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby"/>
 	</scroll_list>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml
index b57ec8f2e697213f4822be1fe51135a235c6cfcd..4e373cdf8f7fe79904e33bce3937d4db2205413c 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml
@@ -8,10 +8,10 @@
 			<button label="Dzwoń" name="call_btn"/>
 		</layout_panel>
 		<layout_panel name="end_call_btn_panel">
-			<button label="Zakończ Rozmowę" name="end_call_btn"/>
+			<button label="Zakończ rozmowę" name="end_call_btn"/>
 		</layout_panel>
 		<layout_panel name="voice_ctrls_btn_panel">
-			<button label="Przełączniki Głosu" name="voice_ctrls_btn"/>
+			<button label="Przełączniki głosu" name="voice_ctrls_btn"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_general.xml b/indra/newview/skins/default/xui/pl/panel_group_general.xml
index 43f0103ab78c0e3a85b9d91e2a7e131e1bfa2a91..a4d76badf0dadf7259619ed2a2d277a43e65f393 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_general.xml
@@ -23,7 +23,7 @@ By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski.
 		<button label="DOŁĄCZ TERAZ!" name="btn_join"/>
 	</panel>
 	<text_editor name="charter">
-		Status Grupy
+		Status grupy
 	</text_editor>
 	<name_list name="visible_members">
 		<name_list.columns label="Członek" name="name"/>
@@ -34,7 +34,7 @@ By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski.
 		ja
 	</text>
 	<text name="active_title_label">
-		Mój Aktywny Tytuł:
+		Mój aktywny tytuł:
 	</text>
 	<combo_box name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/>
 	<check_box label="Otrzymuj grupowe ogłoszenia" name="receive_notices" tool_tip="Zaznacz jeżeli chcesz otrzymywać ogłoszenia z tej grupy.   Anuluj z zaznaczenia, jeżeli nie chcesz otrzymywać żadnych ogłoszeń z tej grupy."/>
@@ -50,8 +50,8 @@ By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski.
 			<combo_item name="select_mature">
 				- Wybierz klasyfikacjÄ™ wieku -
 			</combo_item>
-			<combo_box.item label="Treść &apos;Mature&apos;" name="mature"/>
-			<combo_box.item label="Treść &apos;PG&apos;" name="pg"/>
+			<combo_box.item label="Treść &apos;Moderate&apos;" name="mature"/>
+			<combo_box.item label="Treść &apos;General&apos;" name="pg"/>
 		</combo_box>
 		<check_box initial_value="true" label="Wyświetlaj w wyszukiwarce" name="show_in_group_list" tool_tip="Udostępnij info o grupie w wyszukiwarce"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
index 509c2893cf4fa332633089ef0feb9395fade4645..e637588cf0bc6eabdc12a4030c8ad595a9af8f36 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
@@ -27,9 +27,9 @@
 		</layout_panel>
 		<layout_panel name="button_row">
 			<button label="Czat" name="btn_chat"/>
-			<button label="Konferencja GÅ‚osowa" name="btn_call" tool_tip="Konferencja GÅ‚osowa"/>
+			<button label="Konferencja głosowa" name="btn_call" tool_tip="Konferencja głosowa"/>
 			<button label="Zapisz" label_selected="Zapisz" name="btn_apply"/>
-			<button label="Stwórz nową Grupę" name="btn_create" tool_tip="Stwórz nową Grupę"/>
+			<button label="Stwórz nową grupę" name="btn_create" tool_tip="Stwórz nową grupę"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_invite.xml b/indra/newview/skins/default/xui/pl/panel_group_invite.xml
index e520c06944f75b3d3e1238a57d4a764f381b31c4..1822551e8685efe7b06e176dd80d082822751790 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_invite.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Zaproszenie do Grupy" name="invite_panel">
 	<panel.string name="confirm_invite_owner_str">
-		Jesteś pewny, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna!
+		Jesteś pewny/a, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna!
 	</panel.string>
 	<panel.string name="loading">
 		(Å‚adowanie...)
@@ -18,10 +18,10 @@
 	<text name="role_text">
 		Wybierz rolę dla nowego członka:
 	</text>
-	<combo_box name="role_name" tool_tip="Wybierz z listy Role, które możesz przypisać Członkom"/>
+	<combo_box name="role_name" tool_tip="Wybierz z listy Role, które możesz przypisać członkom"/>
 	<button label="Wyślij Zaproszenia" name="ok_button"/>
 	<button label="Anuluj" name="cancel_button"/>
 	<string name="GroupInvitation">
-		Zaproszenie do Grupy
+		Zaproszenie do grupy
 	</string>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
index acceb88711089453a275e873bbfb62f1417cfe38..d29393de2ddcbafb51088fbb1196afbacaabf3d1 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Posiadłości i L$" name="land_money_tab">
 	<panel.string name="help_text">
-		Ostrzeżenie pojawia się kiedy Łączna Powierzchnia Posiadłości jest mniejsza lub = Kontrybucjom
+		Ostrzeżenie pojawia się kiedy łączna powierzchnia posiadłości jest mniejsza lub = Kontrybucjom
 	</panel.string>
 	<panel.string name="cant_view_group_land_text">
-		Nie masz pozwolenia na oglądanie Posiadłości Grupy.
+		Nie masz pozwolenia na oglądanie posiadłości grupy.
 	</panel.string>
 	<panel.string name="epmty_view_group_land_text">
 		Brak wstępu
 	</panel.string>
 	<panel.string name="cant_view_group_accounting_text">
-		Nie masz dostępu do konta, finansów Grupy.
+		Nie masz dostępu do konta, finansów grupy.
 	</panel.string>
 	<panel.string name="loading_txt">
 		Ładowanie...
@@ -33,19 +33,19 @@
 		</text>
 		<button label="Mapa" label_selected="Mapa" name="map_button"/>
 		<text name="total_land_in_use_label">
-			Używane Posiadłości:
+			Używane posiadłości:
 		</text>
 		<text name="total_land_in_use_value">
 			[AREA] m²
 		</text>
 		<text name="land_available_label">
-			Dostępne Posiadłości:
+			Dostępne posiadłości:
 		</text>
 		<text name="land_available_value">
 			[AREA] m²
 		</text>
 		<text name="your_contribution_label">
-			Twoje Kontrybucje:
+			Twoje kontrybucje:
 		</text>
 		<text name="your_contribution_units">
 			m²
@@ -54,10 +54,10 @@
 			([AMOUNT] max)
 		</text>
 		<text name="group_over_limit_text">
-			Należy zwięszyć kredyt na używanie Posiadłości.
+			Należy zwięszyć kredyt na używanie posiadłości.
 		</text>
 		<text name="group_money_heading">
-			L$ Grupy
+			L$ grupy
 		</text>
 	</panel>
 	<tab_container name="group_money_tab_container">
diff --git a/indra/newview/skins/default/xui/pl/panel_group_notices.xml b/indra/newview/skins/default/xui/pl/panel_group_notices.xml
index 1d727148e9dc2ea1c5fa67c22ed14ab018c5d4af..5b62d13880497f3e819baba3a0b1b2ea59a9977c 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_notices.xml
@@ -19,11 +19,11 @@ Limit dzienny ogłoszeń dla grupy wynosi 200.
 	<text name="notice_list_none_found">
 		Nie znaleziono
 	</text>
-	<button label="Stwórz Ogłoszenie" label_selected="Stwórz Nowe Ogłoszenie" name="create_new_notice" tool_tip="Stwórz Ogłoszenie"/>
+	<button label="Stwórz Ogłoszenie" label_selected="Stwórz nowe ogłoszenie" name="create_new_notice" tool_tip="Stwórz ogłoszenie"/>
 	<button label="Odśwież" label_selected="Odśwież Listę" name="refresh_notices" tool_tip="Użyj Odśwież by zobaczyć czy nowe ogłoszenia zostały wysłane."/>
-	<panel label="Stwórz Nowe Ogłoszenie" name="panel_create_new_notice">
+	<panel label="Stwórz nowe ogłoszenie" name="panel_create_new_notice">
 		<text name="lbl">
-			Stwórz Ogłoszenie
+			Stwórz ogłoszenie
 		</text>
 		<text name="lbl3">
 			Temat:
@@ -55,6 +55,6 @@ Limit dzienny ogłoszeń dla grupy wynosi 200.
 		<text name="lbl4">
 			Treść:
 		</text>
-		<button label="Otwórz Załącznik" label_selected="Otwórz Załącznik" name="open_attachment"/>
+		<button label="Otwórz załącznik" label_selected="Otwórz załącznik" name="open_attachment"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_notify.xml b/indra/newview/skins/default/xui/pl/panel_group_notify.xml
index d81c3f68f2b2700ec8071099303404a7221b2f22..d27a81217a4ca271d914a88aa063bfd33b2e4d92 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_notify.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="instant_message" name="panel_group_notify">
 	<panel label="header" name="header">
-		<text name="title" value="ImiÄ™ Nadawcy / Nazwa Grupy"/>
+		<text name="title" value="ImiÄ™ nadawcy / Nazwa grupy"/>
 	</panel>
 	<text name="attachment" value="Załącznik"/>
 	<button label="OK" name="btn_ok"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_roles.xml b/indra/newview/skins/default/xui/pl/panel_group_roles.xml
index 55266948639c15fd4d3e4f1176fb7508990fe925..9e9c79d26aa014c5577e1ea0954f147d9dbe15f0 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_roles.xml
@@ -9,20 +9,20 @@
 	<tab_container name="roles_tab_container">
 		<panel label="CZŁONKOWIE" name="members_sub_tab" tool_tip="Członkowie">
 			<panel.string name="help_text">
-				Możesz dodawać i usuwać Funkcje przypisane do Członków.
-Możesz wybrać wielu Członków naciskając Ctrl i klikając na ich imionach.
+				Możesz dodawać i usuwać funkcje przypisane do członków.
+Możesz wybrać wielu członków naciskając Ctrl i klikając na ich imionach.
 			</panel.string>
 			<panel.string name="donation_area">
 				[AREA] m²
 			</panel.string>
-			<filter_editor label="Filtruj Członków" name="filter_input"/>
+			<filter_editor label="Filtruj członków" name="filter_input"/>
 			<name_list name="member_list">
 				<name_list.columns label="Członek" name="name"/>
 				<name_list.columns label="Dotacje" name="donated"/>
 				<name_list.columns label="Status" name="online"/>
 			</name_list>
-			<button label="ZaproÅ› do Grupy" name="member_invite"/>
-			<button label="Usuń z Grupy" name="member_eject"/>
+			<button label="ZaproÅ› do grupy" name="member_invite"/>
+			<button label="Usuń z grupy" name="member_eject"/>
 		</panel>
 		<panel label="FUNKCJE" name="roles_sub_tab">
 			<panel.string name="help_text">
@@ -37,22 +37,22 @@ jedną lub wiele funkcji. Każda grupa może posiadać maksymalnie 10 funkcji,
 			<panel.string name="power_folder_icon">
 				Inv_FolderClosed
 			</panel.string>
-			<filter_editor label="Filtruj Funkcje" name="filter_input"/>
+			<filter_editor label="Filtruj funkcje" name="filter_input"/>
 			<scroll_list name="role_list">
 				<scroll_list.columns label="Funkcja" name="name"/>
 				<scroll_list.columns label="Tytuł" name="title"/>
 				<scroll_list.columns label="#" name="members"/>
 			</scroll_list>
-			<button label="Stwórz Nową Funkcję" name="role_create"/>
-			<button label="Usuń Funkcję" name="role_delete"/>
+			<button label="Stwórz nową funkcję" name="role_create"/>
+			<button label="Usuń funkcję" name="role_delete"/>
 		</panel>
 		<panel label="PRZYWILEJE" name="actions_sub_tab" tool_tip="Możesz sprawdzić szczegóły dotyczące dangego przywileju oraz jakie funkcje oraz jacy członkowie posiadają prawo korzystania z niego.">
 			<panel.string name="help_text">
-				Przywileje pozwalają Członkom przypisanym do Funkcji na wykonywanie różnych zadań.
-Istnieje wiele Przywilei.
+				Przywileje pozwalają członkom przypisanym do funkcji na wykonywanie różnych zadań.
+Istnieje wiele przywilejów.
 			</panel.string>
-			<filter_editor label="Filtruj Przywileje" name="filter_input"/>
-			<scroll_list name="action_list" tool_tip="Wybierz przywilej by zobaczyć szczegóły">
+			<filter_editor label="Filtruj przywileje" name="filter_input"/>
+			<scroll_list name="action_list" tool_tip="Wybierz przywilej aby zobaczyć szczegóły">
 				<scroll_list.columns label="" name="icon"/>
 				<scroll_list.columns label="" name="action"/>
 			</scroll_list>
@@ -69,18 +69,18 @@ Istnieje wiele Przywilei.
 		<text name="static2">
 			Przywileje
 		</text>
-		<scroll_list name="member_allowed_actions" tool_tip="By zobaczyć szczegóły, wybierz zakładkę Przywileje">
+		<scroll_list name="member_allowed_actions" tool_tip="Aby zobaczyć szczegóły, wybierz zakładkę Przywileje">
 			<scroll_list.columns label="" name="icon"/>
 			<scroll_list.columns label="" name="action"/>
 		</scroll_list>
 	</panel>
 	<panel name="roles_footer">
 		<text name="static">
-			Nazwa Funkcji
+			Nazwa funkcji
 		</text>
 		<line_editor name="role_name"/>
 		<text name="static3">
-			Nazwa Funkcji
+			Nazwa funkcji
 		</text>
 		<line_editor name="role_title"/>
 		<text name="static2">
@@ -88,13 +88,13 @@ Istnieje wiele Przywilei.
 		</text>
 		<text_editor name="role_description"/>
 		<text name="static4">
-			Przypisane Funkcje
+			Przypisane funkcje
 		</text>
-		<check_box label="Opcja widoczności jest aktywna" name="role_visible_in_list" tool_tip="Opcja ta pozwala określić widoczność członków pełniących tę funkcję dla ludzi spoza Grupy."/>
+		<check_box label="Opcja widoczności jest aktywna" name="role_visible_in_list" tool_tip="Opcja ta pozwala określić widoczność członków pełniących tę funkcję dla ludzi spoza grupy."/>
 		<text name="static5" tool_tip="Przywileje przypisane do wybranej Funkcji.">
-			Przypisane Przywileje
+			Przypisane przywileje
 		</text>
-		<scroll_list name="role_allowed_actions" tool_tip="By zobaczyć szczegóły dozwolonych przywilejów wybierz zakładkę Przywileje">
+		<scroll_list name="role_allowed_actions" tool_tip="Aby zobaczyć szczegóły dozwolonych przywilejów wybierz zakładkę Przywileje">
 			<scroll_list.columns label="" name="icon"/>
 			<scroll_list.columns label="" name="checkbox"/>
 			<scroll_list.columns label="" name="action"/>
@@ -102,7 +102,7 @@ Istnieje wiele Przywilei.
 	</panel>
 	<panel name="actions_footer">
 		<text_editor name="action_description">
-			Przywilej &apos;Usuń Członka z Grupy&apos;. Tylko Właściciel może usunąć innego Właściciela.
+			Przywilej &apos;Usuń członka z grupy&apos;. Tylko właściciel może usunąć innego właściciela.
 		</text_editor>
 		<text name="static2">
 			Funkcje z tym przywilejem
diff --git a/indra/newview/skins/default/xui/pl/panel_groups.xml b/indra/newview/skins/default/xui/pl/panel_groups.xml
index 9df90fc79710e22c27cc147e65af1362c8635b42..671d8fd2f020af970c230c096856876690d08f7a 100644
--- a/indra/newview/skins/default/xui/pl/panel_groups.xml
+++ b/indra/newview/skins/default/xui/pl/panel_groups.xml
@@ -10,7 +10,7 @@
 		Należysz do [COUNT] grup (maksimum to [MAX]).
 	</text>
 	<button label="Czat/IM" name="IM" tool_tip="Rozpocznij sesjÄ™ czatu (IM)" />
-	<button label="O Grupie" name="Info" />
+	<button label="O grupie" name="Info" />
 	<button label="Wybierz" name="Activate" />
 	<button label="Opuść" name="Leave" />
 	<button label="Stwórz..." name="Create" />
diff --git a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml
index 84d1982440795dc6db2603d45dae5489a80c8e53..4aadd3b93b24d3c1203d14f246dadeb20a625773 100644
--- a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml
@@ -23,7 +23,7 @@
 			<button label="Zakończ rozmowę" name="end_call_btn"/>
 		</layout_panel>
 		<layout_panel name="voice_ctrls_btn_panel">
-			<button label="Przełączniki Głosu" name="voice_ctrls_btn"/>
+			<button label="Przełączniki głosu" name="voice_ctrls_btn"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml
index 64479176fa184e3c2f34b6831d48ea1e39fd7908..3370f6f58ebd51a33ee5999dd27cab9a0bd5281b 100644
--- a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="landmark_info">
-	<string name="title_create_landmark" value="Zapamiętaj Miejsce"/>
-	<string name="title_edit_landmark" value="Edytuj Zapamiętane Miejsce"/>
-	<string name="title_landmark" value="Zapamiętane Miejsce (LM)"/>
+	<string name="title_create_landmark" value="Zapamiętaj miejsce (LM)"/>
+	<string name="title_edit_landmark" value="Edytuj landmarki"/>
+	<string name="title_landmark" value="Landmarki (LM)"/>
 	<string name="not_available" value="(N\A)"/>
 	<string name="unknown" value="(nieznane)"/>
 	<string name="public" value="(publiczne)"/>
@@ -19,7 +19,7 @@
 		[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
 	</string>
 	<button name="back_btn" tool_tip="Cofnij"/>
-	<text name="title" value="Profil Miejsca"/>
+	<text name="title" value="Profil miejsca"/>
 	<scroll_container name="place_scroll">
 		<panel name="scrolling_panel">
 			<text name="maturity_value" value="nieznany"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml
index 5e4955c28c004badf30138cad1da621c5e3387f0..b5899f1009f3fe954954ad4b1518963f20b09403 100644
--- a/indra/newview/skins/default/xui/pl/panel_login.xml
+++ b/indra/newview/skins/default/xui/pl/panel_login.xml
@@ -15,7 +15,7 @@
 			<text name="password_text">
 				Hasło:
 			</text>
-			<check_box label="Zapamiętaj Hasło" name="remember_check"/>
+			<check_box label="Zapamiętaj hasło" name="remember_check"/>
 			<button label="Połącz" name="connect_btn"/>
 			<text name="start_location_text">
 				Rozpocznij w:
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml
index 03b063ddfe230553d781bf45f8818823a22ab149..914a2aee7309a81330a9566aa571f82392d6d2b8 100644
--- a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Ogólne" name="Media Settings General">
 	<text name="home_label">
-		Strona Domowa:
+		Strona domowa:
 	</text>
 	<text name="home_fails_whitelist_label">
-		(ta strona nie została zaakceptowana przez filtr listy dostępowej)
+		(ta strona nie została zaakceptowana przez filtr listy dostępowej (Biała Lista)
 	</text>
 	<line_editor name="home_url" tool_tip="Strona domowa dla źródla mediów"/>
 	<text name="preview_label">
 		Pokaż
 	</text>
 	<text name="current_url_label">
-		Obecna Strona:
+		Obecna strona:
 	</text>
 	<text name="current_url" tool_tip="The current page for this media source" value=""/>
 	<button label="Zresetuj" name="current_url_reset_btn"/>
 	<check_box initial_value="false" label="Pętla" name="auto_loop"/>
-	<check_box initial_value="false" label="Interakcja Kliknięcia" name="first_click_interact"/>
+	<check_box initial_value="false" label="Interakcja kliknięcia" name="first_click_interact"/>
 	<check_box initial_value="false" label="Autopowiększenie" name="auto_zoom"/>
-	<check_box initial_value="false" label="Automatyczne Odtwarzanie Mediów" name="auto_play"/>
+	<check_box initial_value="false" label="Automatyczne odtwarzanie mediów" name="auto_play"/>
 	<text name="media_setting_note">
 		Pamiętaj: Rezydenci mogą zmienić to ustawienie
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml
index 6b93981accb3ffcb65941a82daa1843459e02625..a87c29d7b381bdb2ab3c1eed9a590384e36a83fb 100644
--- a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml
@@ -15,15 +15,15 @@
 		Właściciel
 	</text>
 	<check_box initial_value="false" label="Pozwól na nawigację &amp; interaktywność" name="perms_owner_interact"/>
-	<check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_owner_control"/>
+	<check_box initial_value="false" label="Pokaż pasek kontroli" name="perms_owner_control"/>
 	<text name="group_label">
 		Grupa:
 	</text>
-	<check_box initial_value="false" label="Pozwól na nawigację &amp; Interaktywność" name="perms_group_interact"/>
-	<check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_group_control"/>
+	<check_box initial_value="false" label="Pozwól na nawigację &amp; interaktywność" name="perms_group_interact"/>
+	<check_box initial_value="false" label="Pokaż pasek kontroli" name="perms_group_control"/>
 	<text name="anyone_label">
 		Każdy
 	</text>
 	<check_box initial_value="false" label="Pozwól na nawigację &amp; interaktywność" name="perms_anyone_interact"/>
-	<check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_anyone_control"/>
+	<check_box initial_value="false" label="Pokaż pasek kontroli" name="perms_anyone_control"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_my_profile.xml b/indra/newview/skins/default/xui/pl/panel_my_profile.xml
index 7ca762b8257b93a846cd477f0a627bbb9e79f3c3..fefab15af06a8da0dfe8c6293208c8ba4ef987b5 100644
--- a/indra/newview/skins/default/xui/pl/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_my_profile.xml
@@ -10,11 +10,11 @@
 			<scroll_container name="profile_scroll">
 				<panel name="scroll_content_panel">
 					<panel name="second_life_image_panel">
-						<icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/>
+						<icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij przycisk Edytuj profil by zmienić zdjęcie"/>
 						<text name="title_sl_descr_text" value="[SECOND_LIFE]:"/>
 					</panel>
 					<panel name="first_life_image_panel">
-						<icon label="" name="real_world_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/>
+						<icon label="" name="real_world_edit_icon" tool_tip="Kliknij przycisk Edytuj profil by zmienić zdjęcie"/>
 						<text name="title_rw_descr_text" value="Życie#1:"/>
 					</panel>
 					<text name="title_member_text" value="Urodziny:"/>
@@ -28,8 +28,8 @@
 			</scroll_container>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
-			<button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
-			<button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubrania itp."/>
+			<button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
+			<button label="Edytuj wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubrania itp."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml
index 2d1decd9604b7009dcfdefff66cb7872967ee53c..63cf96b5710b4d177ba0a3c4ab3eca5e20112df5 100644
--- a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml
@@ -7,5 +7,5 @@
 		320
 	</string>
 	<line_editor label="Kliknij tutaj aby rozmawiać." name="chat_box" tool_tip="Naciśnij Enter aby mówić, Ctrl + Enter aby krzyknąć"/>
-	<button name="show_nearby_chat" tool_tip="Pokazuje/ukrywa pobliski Czat"/>
+	<button name="show_nearby_chat" tool_tip="Pokazuje/ukrywa pobliski czat"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml
index a78ab4d6f83a653d9c3d90cb08e964c13975a44d..c9f951f7c6adc9cc665c07668c823718864dcf2a 100644
--- a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml
@@ -7,10 +7,10 @@
 		&lt;empty&gt;
 	</string>
 	<string name="parcel_media_name">
-		Strumień Mediów Posiadłości
+		Strumień mediów posiadłości
 	</string>
 	<string name="parcel_audio_name">
-		Strumień Audio Posiadłości
+		Strumień audio posiadłości
 	</string>
 	<string name="playing_suffix">
 		(odtwarzanie)
@@ -31,8 +31,8 @@
 		</text>
 		<combo_box name="show_combo">
 			<combo_box.item label="Wszystkie" name="All"/>
-			<combo_box.item label="Na obecnej Parceli" name="WithinParcel"/>
-			<combo_box.item label="Poza Posiadłością" name="OutsideParcel"/>
+			<combo_box.item label="Na obecnej posiadłości" name="WithinParcel"/>
+			<combo_box.item label="Poza posiadłością" name="OutsideParcel"/>
 			<combo_box.item label="Na innych awatarach" name="OnOthers"/>
 		</combo_box>
 		<scroll_list name="media_list">
diff --git a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml
index 2c5e2a3f612489eec74b0610d51b3d738fe546dd..31502cccba5e6a1c3ccb92a371b6c6fa93a41c68 100644
--- a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml
@@ -30,7 +30,7 @@
 					<button label="Dodaj..." name="show_add_wearables_btn" tool_tip="Otwórz/Zamknij"/>
 				</layout_panel>
 				<layout_panel name="filter_panel">
-					<filter_editor label="Filtruj częśći stroju w Szafie" name="look_item_filter"/>
+					<filter_editor label="Filtruj części stroju w Szafie" name="look_item_filter"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml
index 5b77c390ca086677d9b596a3de48c60bef534b63..2f8c008f98edbb074068420dd94acc503c741504 100644
--- a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="menu_gear_default">
-	<menu_item_call label="ZastÄ…p Obecne Ubranie" name="wear"/>
-	<menu_item_call label="Dodaj do Obecnego Ubrania" name="add"/>
-	<menu_item_call label="Usuń z Obecnego Ubrania" name="remove"/>
+	<menu_item_call label="Zastąp obecny strój" name="wear"/>
+	<menu_item_call label="Dodaj do obecnego stroju" name="add"/>
+	<menu_item_call label="Usuń z obecnego stroju" name="remove"/>
 	<menu_item_call label="Zmień nazwę" name="rename"/>
-	<menu_item_call label="Usuń Link" name="remove_link"/>
-	<menu_item_call label="Usuń Ubranie" name="delete"/>
+	<menu_item_call label="Usuń link" name="remove_link"/>
+	<menu_item_call label="Usuń strój" name="delete"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
index 50fc0ba8af6b3bf371dbce5213ca98ad39be8b42..19df36c9ee9ae84886dd00dbc5fdd01e439f2163 100644
--- a/indra/newview/skins/default/xui/pl/panel_people.xml
+++ b/indra/newview/skins/default/xui/pl/panel_people.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!-- Side tray panel -->
 <panel label="Ludzie" name="people_panel">
-	<string name="no_recent_people" value="Brak ostatnich rozmówców. Chcesz spotkać ludzi? Spróbuj [secondlife:///app/search/people Search] or the [secondlife:///app/worldmap Mapa Świata]."/>
+	<string name="no_recent_people" value="Brak ostatnich rozmówców. Chcesz spotkać ludzi? Spróbuj [secondlife:///app/search/people Szukaj] or the [secondlife:///app/worldmap Mapa Świata]."/>
 	<string name="no_filtered_recent_people" value="Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj]."/>
-	<string name="no_one_near" value="Nie ma nikogo w pobliżu. Chcesz spotkać ludzi? Spróbuj[secondlife:///app/search/people Search] lub [secondlife:///app/worldmap Mapa Świata]."/>
+	<string name="no_one_near" value="Nie ma nikogo w pobliżu. Chcesz spotkać ludzi? Spróbuj [secondlife:///app/search/people Szukaj] lub [secondlife:///app/worldmap Mapa Świata]."/>
 	<string name="no_one_filtered_near" value="Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj]."/>
-	<string name="no_friends_online" value="Brak dostępnych Znajomych"/>
-	<string name="no_friends" value="Brak Znajomych"/>
+	<string name="no_friends_online" value="Brak dostępnych znajomych"/>
+	<string name="no_friends" value="Brak znajomych"/>
 	<string name="no_friends_msg">
 		Wyszukaj znajomych [secondlife:///app/search/people Szukaj] lub kliknij prawym przyciskiem na Rezydenta aby zaproponować mu znajomość.
 Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
@@ -14,8 +14,8 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
 	<string name="no_filtered_friends_msg">
 		Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj].
 	</string>
-	<string name="people_filter_label" value="Filtruj Ludzi"/>
-	<string name="groups_filter_label" value="Filtruj Grupy"/>
+	<string name="people_filter_label" value="Filtruj ludzi"/>
+	<string name="groups_filter_label" value="Filtruj grupy"/>
 	<string name="no_filtered_groups_msg" value="Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj]."/>
 	<string name="no_groups_msg" value="Chcesz dołączyć do grup? Spróbuj [secondlife:///app/search/groups Szukaj]."/>
 	<filter_editor label="Filtr" name="filter_input"/>
@@ -23,7 +23,7 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
 		<panel label="W POBLIŻU" name="nearby_panel">
 			<panel label="bottom_panel" name="bottom_panel">
 				<button name="nearby_view_sort_btn" tool_tip="Opcje"/>
-				<button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/>
+				<button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do znajomych"/>
 			</panel>
 		</panel>
 		<panel label="ZNAJOMI" name="friends_panel">
@@ -47,7 +47,7 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
 		<panel label="OSTATNIE" name="recent_panel">
 			<panel label="bottom_panel" name="bottom_panel">
 				<button name="recent_viewsort_btn" tool_tip="Opcje"/>
-				<button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/>
+				<button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do znajomych"/>
 			</panel>
 		</panel>
 	</tab_container>
@@ -59,6 +59,6 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
 		<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportacjÄ™" width="70"/>
 		<button label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie" width="69"/>
 		<button label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencÄ™" width="124"/>
-		<button label="Rozmowa GÅ‚osowa" name="group_call_btn" tool_tip="Rozmowa GÅ‚osowa w tej Grupie" width="108"/>
+		<button label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa głosowa w tej grupie" width="108"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_place_profile.xml b/indra/newview/skins/default/xui/pl/panel_place_profile.xml
index 3714a141db89182bd7df7ee5a06b23a7050da8a9..7a71a100349bbcebe491d1ff59b47422757fa037 100644
--- a/indra/newview/skins/default/xui/pl/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_place_profile.xml
@@ -11,8 +11,8 @@
 	<string name="unknown" value="(nieznany)"/>
 	<string name="public" value="(publiczny)"/>
 	<string name="none_text" value="(żaden)"/>
-	<string name="sale_pending_text" value="(Sprzedaż w Toku Realizacji)"/>
-	<string name="group_owned_text" value="(Własność Grupy)"/>
+	<string name="sale_pending_text" value="(Sprzedaż w toku realizacji)"/>
+	<string name="group_owned_text" value="(Własność grupy)"/>
 	<string name="price_text" value="L$"/>
 	<string name="area_text" value="m²"/>
 	<string name="all_residents_text" value="Każdemu"/>
@@ -52,7 +52,7 @@
 					<panel name="parcel_characteristics_panel">
 						<text name="rating_label" value="Rodzaj:"/>
 						<text name="rating_value" value="nieznane"/>
-						<text name="voice_label" value="Komunikacja GÅ‚osowa:"/>
+						<text name="voice_label" value="Komunikacja głosowa:"/>
 						<text name="voice_value" value="WÅ‚Ä…czone"/>
 						<text name="fly_label" value="Lataj:"/>
 						<text name="fly_value" value="WÅ‚Ä…czone"/>
@@ -92,7 +92,7 @@
 						<text name="covenant_label" value="Umowa:"/>
 					</panel>
 				</accordion_tab>
-				<accordion_tab name="sales_tab" title="Na Sprzedaż">
+				<accordion_tab name="sales_tab" title="Na sprzedaż">
 					<panel name="sales_panel">
 						<text name="sales_price_label" value="Cena:"/>
 						<text name="area_label" value="Powierzchnia:"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml
index de4fa10b731f42ae1df1c7fbe5e51a1e0d925a8c..b267610d333f0903a53b556232638c24424e62df 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml
@@ -16,9 +16,9 @@
 	<check_box initial_value="prawda" label="Schowek" name="appearance_sidebar_positioning" tool_tip="Użyj automatycznego pozycjonowania kamery dla schowka"/>
 	<check_box label="Pokaż w trybie widoku panoramicznego" name="first_person_avatar_visible"/>
 	<check_box label="Aktywacja klawiszy strzałek do poruszania awatarem" name="arrow_keys_move_avatar_check"/>
-	<check_box label="kliknij-kliknij-przytrzymaj, aby uruchomić" name="tap_tap_hold_to_run"/>
+	<check_box label="Kliknij-kliknij-przytrzymaj, aby uruchomić" name="tap_tap_hold_to_run"/>
 	<check_box label="Poruszaj ustami awatara kiedy używana jest komunikacja głosowa" name="enable_lip_sync"/>
-	<check_box label="Czat Chmurkowy" name="bubble_text_chat"/>
+	<check_box label="Czat chmurkowy" name="bubble_text_chat"/>
 	<slider label="Intensywność" name="bubble_chat_opacity"/>
 	<color_swatch name="background" tool_tip="Wybierz kolor czatu w chmurce"/>
 	<text name="UI Size:">
@@ -31,7 +31,7 @@
 	</radio_group>
 	<check_box label="Włącz/Wyłącz głos:" name="push_to_talk_toggle_check" tool_tip="Jeżeli jesteś w trybie mówienia, w celu aktywacji lub deaktywacji swojego mikrofonu wybierz i wyłącz przycisk Mów tylko raz. Jeżeli nie jesteś w trybie mówienia, mikrofon przesyła Twój głos tylko w momencie aktywacji pełnej przycisku Mów."/>
 	<line_editor label="Naciśnij Mów by rozpocząć komunikację głosową" name="modifier_combo"/>
-	<button label="wybierz Klawisz" name="set_voice_hotkey_button"/>
-	<button label="Środkowy Przycisk Myszki" name="set_voice_middlemouse_button" tool_tip="Zresetuj do środkowego przycisku myszy"/>
+	<button label="Wybierz klawisz" name="set_voice_hotkey_button"/>
+	<button label="Środkowy przycisk myszki" name="set_voice_middlemouse_button" tool_tip="Zresetuj do środkowego przycisku myszy"/>
 	<button label="Inne urzÄ…dzenia" name="joystick_setup_button"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml
index e843342aa2b5372a14c7e77abddf4aaeccfd007e..d53a99e8c107764edef0eb232cb92664b7e1f4c5 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml
@@ -4,7 +4,7 @@
 		Powiadom mnie:
 	</text>
 	<check_box label="Kiedy wydajÄ™ lub otrzymujÄ™ L$" name="notify_money_change_checkbox"/>
-	<check_box label="Kiedy moi Znajomi zalogowujÄ… siÄ™ i wylogowujÄ…" name="friends_online_notify_checkbox"/>
+	<check_box label="Kiedy moi znajomi zalogowujÄ… siÄ™ i wylogowujÄ…" name="friends_online_notify_checkbox"/>
 	<text name="show_label">
 		Zawsze pokazuj:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
index e7134f23c339a0a13d194bffe95a2e5e081a8cc3..69686bcdbc280e5cf33bfeb027680a0b5f6396dc 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
@@ -24,16 +24,16 @@
 	</text>
 	<text name="maturity_desired_textbox"/>
 	<combo_box name="maturity_desired_combobox">
-		<combo_box.item label="&apos;PG&apos;, &apos;Mature&apos; oraz &apos;Adult&apos;" name="Desired_Adult"/>
-		<combo_box.item label="&apos;PG&apos; i &apos;Mature&apos;" name="Desired_Mature"/>
-		<combo_box.item label="&apos;PG&apos;" name="Desired_PG"/>
+		<combo_box.item label="&apos;General&apos;, &apos;Mature&apos; oraz &apos;Adult&apos;" name="Desired_Adult"/>
+		<combo_box.item label="&apos;General&apos; i &apos;Mature&apos;" name="Desired_Mature"/>
+		<combo_box.item label="&apos;General&apos;" name="Desired_PG"/>
 	</combo_box>
 	<text name="start_location_textbox">
 		Miejsce Startu:
 	</text>
 	<combo_box name="start_location_combo">
-		<combo_box.item label="Ostatnie Miejsce" name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca."/>
-		<combo_box.item label="Mój Start" name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu."/>
+		<combo_box.item label="Ostatnie Miejsce" name="MyLastLocation" tool_tip="Domyślnie loguj mnie w ostatnio odwiedzonym miejscu."/>
+		<combo_box.item label="Mój Start" name="MyHome" tool_tip="Domyślnie loguj mnie w moim Miejscu Startu."/>
 	</combo_box>
 	<check_box initial_value="true" label="Pokaż przy zalogowaniu" name="show_location_checkbox"/>
 	<text name="name_tags_textbox">
@@ -45,8 +45,8 @@
 		<radio_item label="Pokaż w skrócie" name="radio3" value="2"/>
 	</radio_group>
 	<check_box label="Wyświetl moje imię:" name="show_my_name_checkbox1"/>
-	<check_box initial_value="true" label="Używaj Małych Imion Awatarów" name="small_avatar_names_checkbox"/>
-	<check_box label="Wyświetl Tytuł Grupowy" name="show_all_title_checkbox1"/>
+	<check_box initial_value="true" label="Używaj małych imion awatarów" name="small_avatar_names_checkbox"/>
+	<check_box label="Wyświetl tytuł grupowy" name="show_all_title_checkbox1"/>
 	<text name="effects_color_textbox">
 		Kolor moich efektów:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
index 99b3074fcb3d65fc5983364e188c069200873e97..e60d540066d09f4797fa24079a0611670766b714 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
@@ -26,23 +26,23 @@
 		<text name="ShadersText">
 			Cieniowanie pixeli (shadery):
 		</text>
-		<check_box initial_value="true" label="Mapowanie Wypukłości i Połysk" name="BumpShiny"/>
-		<check_box initial_value="true" label="Podstawowe Shadery" name="BasicShaders" tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych."/>
-		<check_box initial_value="true" label="Shadery Atmosfery" name="WindLightUseAtmosShaders"/>
+		<check_box initial_value="true" label="Mapowanie wypukłości i połysk" name="BumpShiny"/>
+		<check_box initial_value="true" label="Podstawowe shadery" name="BasicShaders" tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych."/>
+		<check_box initial_value="true" label="Shadery atmosfery" name="WindLightUseAtmosShaders"/>
 		<check_box initial_value="true" label="Refleksy w wodzie" name="Reflections"/>
 		<text name="ReflectionDetailText">
 			Ustawienia refleksów:
 		</text>
 		<radio_group name="ReflectionDetailRadio">
 			<radio_item label="Teren i drzewa" name="0"/>
-			<radio_item label="Obiekty Statyczne" name="1"/>
-			<radio_item label="Awatary i Obiekty" name="2"/>
+			<radio_item label="Obiekty statyczne" name="1"/>
+			<radio_item label="Awatary i obiekty" name="2"/>
 			<radio_item label="Wszystko" name="3"/>
 		</radio_group>
 		<text name="AvatarRenderingText">
 			Rendering awatarów
 		</text>
-		<check_box initial_value="true" label="Impostoryzacja Awatarowa" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Impostoryzacja awatarowa" name="AvatarImpostors"/>
 		<check_box initial_value="true" label="Rendering awatara przez GPU" name="AvatarVertexProgram"/>
 		<check_box initial_value="true" label="Oddzielne warstwy ubrań" name="AvatarCloth"/>
 		<slider label="Pole widzenia:" name="DrawDistance"/>
@@ -51,7 +51,7 @@
 		</text>
 		<slider label="Liczba czÄ…steczek:" name="MaxParticleCount"/>
 		<slider label="Max. # awatarów bez impostoryzacji:" name="MaxNumberAvatarDrawn"/>
-		<slider label="Jakość Post-Procesu:" name="RenderPostProcess"/>
+		<slider label="Jakość post-procesu:" name="RenderPostProcess"/>
 		<text name="MeshDetailText">
 			Szczególy obiektów:
 		</text>
@@ -87,7 +87,7 @@
 		</text>
 		<radio_group name="LightingDetailRadio">
 			<radio_item label="Tylko Słońce i Księżyc" name="SunMoon" value="0"/>
-			<radio_item label="Tylko Bliskie Światła" name="LocalLights" value="1"/>
+			<radio_item label="Tylko bliskie światła" name="LocalLights" value="1"/>
 		</radio_group>
 		<text name="TerrainDetailText">
 			Szczegóły terenu:
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
index 9504019f79126ee0b70b65b4928446a4d29b02f7..fd9cdd6ff0af18a934e9b82ba1ef0f241b6e7b06 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
@@ -10,7 +10,7 @@
 	<check_box label="Mój status online jest dostępny tylko dla znajomych i grup do których należę" name="online_visibility"/>
 	<check_box label="Możliwość wysyłania wiadomości prywatnej (IM) oraz rozmowy głosowej tylko dla znajomych i grup do których należę" name="voice_call_friends_only_check"/>
 	<check_box label="Wyłącz mikrofon po zakończeniu rozmowy głosowej" name="auto_disengage_mic_check"/>
-	<check_box label="Akceptuj Ciasteczka" name="cookies_enabled"/>
+	<check_box label="Akceptuj ciasteczka" name="cookies_enabled"/>
 	<text name="Logs:">
 		Logi:
 	</text>
@@ -21,5 +21,5 @@
 		Lokalizacja zapisu:
 	</text>
 	<button label="PrzeglÄ…daj" label_selected="PrzeglÄ…daj" name="log_path_button"/>
-	<button label="Lista Zablokowanych" name="block_list"/>
+	<button label="Lista zablokowanych" name="block_list"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
index 98fdffeb50d030564130d35d44a804b797a90fc9..b6578d21cadcc5ec16e03cd56cc7f1f72e9a08f2 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Ustawienia" name="Input panel">
-	<button label="Ustawienia Joysticka" name="joystick_setup_button"/>
+	<button label="Ustawienia joysticka" name="joystick_setup_button"/>
 	<text name="Mouselook:">
 		Widok panoramiczny:
 	</text>
 	<text name=" Mouse Sensitivity">
-		Czułość Myszki
+		Czułość myszki
 	</text>
 	<slider name="mouse_sensitivity"/>
 	<check_box label="Zmień klawisze myszki" name="invert_mouse"/>
@@ -41,9 +41,9 @@
 	<check_box label="Zezwalaj na wtyczki" name="browser_plugins_enabled"/>
 	<check_box label="Akceptuj ciasteczka z Internetu" name="cookies_enabled"/>
 	<check_box label="Zezwalaj na Javascript" name="browser_javascript_enabled"/>
-	<check_box label="Używaj Serwera Proxy" name="web_proxy_enabled"/>
+	<check_box label="Używaj serwera proxy" name="web_proxy_enabled"/>
 	<text name="Proxy location">
-		Lokalizacja Proxy:
+		Lokalizacja proxy:
 	</text>
 	<line_editor name="web_proxy_editor" tool_tip="Nazwa lub IP proxy, którego chcesz użyć"/>
 	<spinner label="Numer portu:" name="web_proxy_port"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
index b0d02179fd44604cba2163c7eb4b6c645ed12197..eaf9ae809b3dda458ba3a852f6c1bb8f2fc44327 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
@@ -9,22 +9,22 @@
 	<check_box label="Odtwarzaj media audio" name="music_enabled"/>
 	<slider label="Media" name="Media Volume"/>
 	<check_box label="Odtwarzaj media" name="enable_media"/>
-	<slider label="Komunikacja GÅ‚osowa" name="Voice Volume"/>
+	<slider label="Komunikacja głosowa" name="Voice Volume"/>
 	<check_box label="Pozwól na rozmowy głosowe" name="enable_voice_check"/>
-	<check_box label="Automatycznie odtwarzaj media" name="media_auto_play_btn" tool_tip="Zaznacz tę funkcję by uruchomić automatyczne uruchamianie mediów" value="true"/>
+	<check_box label="Automatycznie odtwarzaj media" name="media_auto_play_btn" tool_tip="Zaznacz tę funkcję aby uruchomić automatyczne uruchamianie mediów" value="true"/>
 	<check_box label="Uruchom media załączone do innych awatarów" name="media_show_on_others_btn" tool_tip="Odznacz tę funkcję by ukryć media załączone to awatarów w publiżu" value="true"/>
 	<text name="voice_chat_settings">
-		Ustawienia Komunikacji GÅ‚osowej
+		Ustawienia komunikacji głosowej
 	</text>
 	<text name="Listen from">
 		Odtwarzaj z:
 	</text>
 	<radio_group name="ear_location">
-		<radio_item label="Pozycji kamery" name="0"/>
-		<radio_item label="Pozycji Awatara" name="1"/>
+		<radio_item label="pozycji kamery" name="0"/>
+		<radio_item label="pozycji awatara" name="1"/>
 	</radio_group>
-	<button label="Wejściowe/Wyjściowe Urządzenia" name="device_settings_btn"/>
-	<panel label="Ustawienia Sprzętowe" name="device_settings_panel">
+	<button label="Wejściowe/Wyjściowe urządzenia" name="device_settings_btn"/>
+	<panel label="Ustawienia sprzętowe" name="device_settings_panel">
 		<panel.string name="default_text">
 			Domyślne
 		</panel.string>
diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
index f10ce5ea4d05908627e6287e741e624a427a2dc1..a1a9be92426fae8cf91d7d2afce49bc5662327c4 100644
--- a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
@@ -25,7 +25,7 @@
 			<button name="fwd_btn" tool_tip="Przejdź do następnego"/>
 		</layout_panel>
 		<layout_panel name="home">
-			<button name="home_btn" tool_tip="Strona Domowa"/>
+			<button name="home_btn" tool_tip="Strona domowa"/>
 		</layout_panel>
 		<layout_panel name="media_stop">
 			<button name="media_stop_btn" tool_tip="Zatrzymaj media"/>
@@ -37,13 +37,13 @@
 			<button name="stop_btn" tool_tip="Zatrzymaj wczytywanie"/>
 		</layout_panel>
 		<layout_panel name="play">
-			<button name="play_btn" tool_tip="Odtwarzaj Media"/>
+			<button name="play_btn" tool_tip="Odtwarzaj media"/>
 		</layout_panel>
 		<layout_panel name="pause">
 			<button name="pause_btn" tool_tip="Wstrzymaj media"/>
 		</layout_panel>
 		<layout_panel name="media_address">
-			<line_editor name="media_address_url" tool_tip="URL Mediów"/>
+			<line_editor name="media_address_url" tool_tip="URL mediów"/>
 			<layout_stack name="media_address_url_icons">
 				<layout_panel>
 					<icon name="media_whitelist_flag" tool_tip="Biała Lista aktywna"/>
@@ -63,14 +63,14 @@
 			<button name="skip_forward_btn" tool_tip="Przewiń do przodu"/>
 		</layout_panel>
 		<layout_panel name="media_volume">
-			<button name="media_mute_button" tool_tip="Wycisz Media"/>
-			<slider name="volume_slider" tool_tip="Głośność Mediów"/>
+			<button name="media_mute_button" tool_tip="Wycisz media"/>
+			<slider name="volume_slider" tool_tip="Głośność mediów"/>
 		</layout_panel>
 		<layout_panel name="zoom_frame">
 			<button name="zoom_frame_btn" tool_tip="Przybliż do mediów"/>
 		</layout_panel>
 		<layout_panel name="close">
-			<button name="close_btn" tool_tip="Oddal"/>
+			<button name="close_btn" tool_tip="Oddal od mediów"/>
 		</layout_panel>
 		<layout_panel name="new_window">
 			<button name="new_window_btn" tool_tip="Otwórz URL w przeglądarce"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml
index 766ed948227baecd965da328c91e74b295fe52fd..97c2fdd417b971810c42422906b7de0177133c11 100644
--- a/indra/newview/skins/default/xui/pl/panel_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_profile.xml
@@ -34,8 +34,8 @@
 			<button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekty Rezydentowi"/>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
-			<button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
-			<button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubranie..."/>
+			<button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
+			<button label="Edytuj wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubranie..."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml
index 2b37dd96b724d0fa0ead8ef7ade73376e512e38e..932e3631abf6644f314a29e369dff4b093704651 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml
@@ -19,7 +19,7 @@
 		Umowa:
 	</text>
 	<text name="covenant_timestamp_text">
-		Ostatnia Modyfikacja Wed Dec 31 16:00:00 1969
+		Ostatnia modyfikacja Wed Dec 31 16:00:00 1969
 	</text>
 	<button label="?" name="covenant_help"/>
 	<text_editor name="covenant_editor">
diff --git a/indra/newview/skins/default/xui/pl/panel_region_estate.xml b/indra/newview/skins/default/xui/pl/panel_region_estate.xml
index a79627473877e365f688c891916881407456334b..1b64827725a70bb2d4878974dbabf371482d803a 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_estate.xml
@@ -29,10 +29,10 @@
 	<check_box label="Rezydenci, którzy dokonali weryfikacji wieku" name="limit_age_verified" tool_tip="Zbanuj Rezydentów, którzy nie zweryfikowali swojego wieku. Odwiedź stronę [SUPPORT_SITE] po więcej informacji."/>
 	<check_box label="Rozmowy dozwolone" name="voice_chat_check"/>
 	<button label="?" name="voice_chat_help"/>
-	<check_box label="Teleportacja Dozwolona" name="allow_direct_teleport"/>
+	<check_box label="Teleportacja dozwolona" name="allow_direct_teleport"/>
 	<button label="?" name="allow_direct_teleport_help"/>
 	<text name="abuse_email_text">
-		Email reporty o nadużyciach do:
+		Wysyłaj (email) reporty o nadużyciach do:
 	</text>
 	<line_editor name="abuse_email_address"/>
 	<string name="email_unsupported">
@@ -41,7 +41,7 @@
 	<button label="?" name="abuse_email_address_help"/>
 	<button label="Zastosuj" name="apply_btn"/>
 	<button label="Wyrzuć Rezydenta z Majątku..." name="kick_user_from_estate_btn"/>
-	<button label="Wyślij Wiadomość do Majątku..." name="message_estate_btn"/>
+	<button label="Wyślij wiadomość do Majątku..." name="message_estate_btn"/>
 	<text name="estate_manager_label">
 		ZarzÄ…dcy MajÄ…tku:
 	</text>
@@ -57,7 +57,7 @@
 	<button label="Usuń..." name="remove_allowed_avatar_btn"/>
 	<button label="Dodaj..." name="add_allowed_avatar_btn"/>
 	<text name="allow_group_label">
-		Dozwolone Grupy:
+		Dozwolone grupy:
 	</text>
 	<button label="?" name="allow_group_help"/>
 	<name_list name="allowed_group_name_list"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_general.xml b/indra/newview/skins/default/xui/pl/panel_region_general.xml
index 1410a2a88293772505e3107ec77e16dd13b06151..601571f62ee10e5d24144e0b840b924a71f18d62 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_general.xml
@@ -25,15 +25,15 @@
 	<check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/>
 	<check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/>
 	<check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy regionu i posiadłości w wynikach wyszukiwania"/>
-	<spinner label="Limit Gości" name="agent_limit_spin"/>
+	<spinner label="Limit gości" name="agent_limit_spin"/>
 	<spinner label="Ekstra obiekty" name="object_bonus_spin"/>
 	<text label="Ograniczenia wieku" name="access_text">
 		Rodzaj:
 	</text>
 	<icons_combo_box label="&apos;Mature&apos;" name="access_combo">
 		<icons_combo_box.item label="&apos;Adult&apos;" name="Adult" value="42"/>
-		<icons_combo_box.item label="&apos;Mature&apos;" name="Mature" value="21"/>
-		<icons_combo_box.item label="&apos;PG&apos;" name="PG" value="13"/>
+		<icons_combo_box.item label="&apos;Moderate&apos;" name="Mature" value="21"/>
+		<icons_combo_box.item label="&apos;General&apos;" name="PG" value="13"/>
 	</icons_combo_box>
 	<button label="Zastosuj" name="apply_btn"/>
 	<button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
index ffa8f1e18ad7cc8b683f67e04473977c06f75fa9..84d7d7ab6290b0f7f30c0ee49fb2e51f22a6efa3 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
@@ -25,15 +25,15 @@
 	<check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/>
 	<check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/>
 	<check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy Regionu i Posiadłości w wynikach wyszukiwania"/>
-	<spinner label="Limit Gości" name="agent_limit_spin"/>
+	<spinner label="Limit gości" name="agent_limit_spin"/>
 	<spinner label="Ekstra obiekty" name="object_bonus_spin"/>
 	<text label="Restrykcje wieku" name="access_text">
 		Rodzaj:
 	</text>
 	<combo_box label="Moderuj" name="access_combo">
 		<combo_box.item label="Adult" name="Adult"/>
-		<combo_box.item label="Moderuj" name="Mature"/>
-		<combo_box.item label="Ogólne" name="PG"/>
+		<combo_box.item label="Moderate" name="Mature"/>
+		<combo_box.item label="General" name="PG"/>
 	</combo_box>
 	<button label="Zastosuj" name="apply_btn"/>
 	<button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml
index 917ae917740d4bf7092405897a86f668c4769958..f22b4a59897313a8c88442e7c4a31b9c678921f6 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml
@@ -19,12 +19,12 @@
 	<slider label="Pora doby" name="sun_hour_slider" />
 	<button label="Zastosuj" name="apply_btn" />
 	<button label="Zapisz surowy teren..." name="download_raw_btn"
-	     tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" />
+	     tool_tip="Dostępne tylko dla właścicieli Majątku, nie dla zarządców" />
 	<button label="?" name="download_raw_help" />
 	<button label="Załaduj surowy teren..." name="upload_raw_btn"
-	     tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" />
+	     tool_tip="Dostępne tylko dla właścicieli Majątku, nie dla zarządców" />
 	<button label="?" name="upload_raw_help" />
-	<button label="Ustal Teren" name="bake_terrain_btn"
+	<button label="Ustal teren" name="bake_terrain_btn"
 	     tool_tip="Zapamiętaj obecny teren jako punkt odniesienia dla limitów podnoszenia i opuszczania" />
 	<button label="?" name="bake_terrain_help" />
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_texture.xml b/indra/newview/skins/default/xui/pl/panel_region_texture.xml
index 156f3db63f6c102f5039fe03c38be4b106265091..c6ed2457f1c37ab1302e354689d51f06ba3001fc 100644
--- a/indra/newview/skins/default/xui/pl/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/pl/panel_region_texture.xml
@@ -7,7 +7,7 @@
 		brak danych
 	</text>
 	<text name="detail_texture_text">
-		Tekstury Terenu (24-bitowe 512x512 pliki .tga wymagane)
+		Tekstury terenu (24-bitowe 512x512 pliki .tga wymagane)
 	</text>
 	<text name="height_text_lbl">
 		1 (Dół)
@@ -22,7 +22,7 @@
 		4 (Góra)
 	</text>
 	<text name="height_text_lbl5">
-		Zakres Poziomów dla Tekstury
+		Zakres poziomów dla tekstury
 	</text>
 	<text name="height_text_lbl6">
 		Północny-Zachód
diff --git a/indra/newview/skins/default/xui/pl/panel_script_ed.xml b/indra/newview/skins/default/xui/pl/panel_script_ed.xml
index 09c3d8ad04121b3b34b6a13c86f91f4d0ca07fcc..fa89a3f72767ad4824ff26b7ff522b1621248e2c 100644
--- a/indra/newview/skins/default/xui/pl/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/pl/panel_script_ed.xml
@@ -27,11 +27,11 @@
 		</menu>
 		<menu label="Edytuj" name="Edit">
 			<menu_item_call label="Cofnij" name="Undo"/>
-			<menu_item_call label="Do Przodu" name="Redo"/>
+			<menu_item_call label="Do przodu" name="Redo"/>
 			<menu_item_call label="Wytnij" name="Cut"/>
 			<menu_item_call label="Kopiuj" name="Copy"/>
 			<menu_item_call label="Wklej" name="Paste"/>
-			<menu_item_call label="Wybierz Wszystko" name="Select All"/>
+			<menu_item_call label="Wybierz wszystko" name="Select All"/>
 			<menu_item_call label="Odznacz" name="Deselect"/>
 			<menu_item_call label="Znajdź / Zamień..." name="Search / Replace..."/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml
index e1863517a240d4e62dd1d1222f1f665452c3bac1..a52d8aed3df589361b5d0463403d1e4051865533 100644
--- a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml
+++ b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="MÓJ AWATAR" name="script_limits_my_avatar_panel">
 	<text name="script_memory">
-		Zużycie Skryptów przez Awatara
+		Zużycie skryptów przez awatara
 	</text>
 	<text name="loading_text">
 		Ładowanie...
@@ -9,7 +9,7 @@
 	<scroll_list name="scripts_list">
 		<scroll_list.columns label="Rozmiar (kb)" name="size"/>
 		<scroll_list.columns label="URL" name="urls"/>
-		<scroll_list.columns label="Nazwa Obiektu" name="name"/>
+		<scroll_list.columns label="Nazwa obiektu" name="name"/>
 		<scroll_list.columns label="Lokalizacja" name="location"/>
 	</scroll_list>
 	<button label="Odśwież listę" name="refresh_list_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml
index 1419a9c9f6184764581a70372f9582098783f22a..070f025087cc9b6f8e7972885508cbf014e94f2a 100644
--- a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml
+++ b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="PAMIĘĆ REGIONU" name="script_limits_region_memory_panel">
 	<text name="script_memory">
-		Pamięć Skryptu Parceli
+		Pamięć skryptu na posiadłości
 	</text>
 	<text name="loading_text">
 		Ładowanie...
@@ -9,7 +9,7 @@
 	<scroll_list name="scripts_list">
 		<scroll_list.columns label="Rozmiar (kb)" name="size"/>
 		<scroll_list.columns label="URL" name="urls"/>
-		<scroll_list.columns label="Nazwa Obiektu" name="name"/>
+		<scroll_list.columns label="Nazwa obiektu" name="name"/>
 		<scroll_list.columns label="Właściciel" name="owner"/>
 		<scroll_list.columns label="Parcela" name="parcel"/>
 		<scroll_list.columns label="Lokalizacja" name="location"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray.xml b/indra/newview/skins/default/xui/pl/panel_side_tray.xml
index f34fd0e108d80ee2569ccaab4bf078e8aca190d6..ff4ca23a4d546d3d619eb44b23edbcd909d2b659 100644
--- a/indra/newview/skins/default/xui/pl/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_side_tray.xml
@@ -2,7 +2,7 @@
 <!-- Side tray cannot show background because it is always
 	partially on screen to hold tab buttons. -->
 <side_tray name="sidebar">
-	<sidetray_tab description="Przełącz Panel Boczny" name="sidebar_openclose" tab_title="Przełącz Panel Boczny"/>
+	<sidetray_tab description="Przełącz schowek" name="sidebar_openclose" tab_title="Przełącz schowek"/>
 	<sidetray_tab description="Miejsce Startu." name="sidebar_home" tab_title="Home">
 		<panel label="miejsce startu" name="panel_home"/>
 	</sidetray_tab>
@@ -24,6 +24,6 @@
 		<panel label="Edytuj SzafÄ™" name="sidepanel_inventory"/>
 	</sidetray_tab>
 	<sidetray_tab description="Zmień swój obecny wygląd i ubranie." name="sidebar_appearance" tab_title="My Appearance">
-		<panel label="Edytuj WyglÄ…d" name="sidepanel_appearance"/>
+		<panel label="Edytuj wyglÄ…d" name="sidepanel_appearance"/>
 	</sidetray_tab>
 </side_tray>
diff --git a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml
index 0f99f3911cea1ced9202e8d340fe7e8fce524760..9f7f7f1238a91f6b2c54a19aa68857383b98e9a6 100644
--- a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml
+++ b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml-->
 <panel name="panel_stand_stop_flying">
-	<button label="Wstań" name="stand_btn" tool_tip="Kliknij tutaj by wstać."/>
+	<button label="Wstań" name="stand_btn" tool_tip="Kliknij tutaj aby wstać."/>
 	<button label="Zatrzymaj latanie" name="stop_fly_btn" tool_tip="Zatrzymaj latanie"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_status_bar.xml b/indra/newview/skins/default/xui/pl/panel_status_bar.xml
index 241848c280dac709c12dbe679a102e6eaf89f905..5e97dd89611417c86518f7ff7feed0cdac136cea 100644
--- a/indra/newview/skins/default/xui/pl/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/pl/panel_status_bar.xml
@@ -25,9 +25,9 @@
 		<text name="balance" tool_tip="Mój bilans" value="L$20"/>
 		<button label="Kup L$" name="buyL" tool_tip="Kliknij aby kupić więcej L$"/>
 	</panel>
-	<text name="TimeText" tool_tip="Obecny Czas (Pacyficzny)">
+	<text name="TimeText" tool_tip="Obecny czas (Pacyficzny)">
 		24:00 AM PST
 	</text>
-	<button name="media_toggle_btn" tool_tip="Start/Stop Wszystkie Media (Muzyka, Video, WWW)"/>
-	<button name="volume_btn" tool_tip="Regulacja Głośności"/>
+	<button name="media_toggle_btn" tool_tip="Start/Stop wszystkie media (Muzyka, Video, WWW)"/>
+	<button name="volume_btn" tool_tip="Regulacja głośności"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/role_actions.xml b/indra/newview/skins/default/xui/pl/role_actions.xml
index ccfa5f222ed91e0c3570619aed5dec949219af1c..53530fff5ed7616f0d0da5a7d52fe35aa53c24f2 100644
--- a/indra/newview/skins/default/xui/pl/role_actions.xml
+++ b/indra/newview/skins/default/xui/pl/role_actions.xml
@@ -1,27 +1,27 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <role_actions>
-	<action_set description="Przywileje pozwajające na dodawanie i usuwanie Członków oraz pozwalają nowym Członkom na dodawanie się bez zaproszenia." name="Membership">
-		<action description="Zapraszanie do Grupy" longdescription="Zapraszanie nowych Ludzi do Grupy używając przycisku &apos;Zaproś&apos; w sekcji Ról  &gt; Członkowie" name="member invite"/>
-		<action description="Usuwanie z Grupy" longdescription="Usuwanie Członków z Grupy używając &apos;Usuń z Grupy&apos;; pod Członkowie &gt; Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej &apos;Odbieranie Funkcji&apos;." name="member eject"/>
+	<action_set description="Przywileje pozwajające na dodawanie i usuwanie członków oraz pozwalają nowym członkom na dodawanie się bez zaproszenia." name="Membership">
+		<action description="Zapraszanie do grupy" longdescription="Zapraszanie nowych ludzi do grupy używając przycisku &apos;Zaproś&apos; w sekcji Ról  &gt; Członkowie" name="member invite"/>
+		<action description="Usuwanie z grupy" longdescription="Usuwanie członków z grupy używając &apos;Usuń z Grupy&apos;; pod Członkowie &gt; Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej &apos;Odbieranie Funkcji&apos;." name="member eject"/>
 		<action description="Selekcja opcji &apos;Wolne Zapisy&apos; i wybór &apos;Opłaty Wstępnej&apos;" longdescription="Selekcja opcji &apos;Wolne Zapisy&apos; (pozwala nowym Członkom na dodawanie się bez zaproszenia) i wybór &apos;Opłaty Wstępnej&apos; w Ustawieniach Grupy w sekcji Ogólne." name="member options"/>
 	</action_set>
-	<action_set description="Przywileje pozwalające na dodawanie, usuwanie i edycję Funkcji w Grupie, oraz na nadawanie i odbieranie Funkcji, oraz na przypisywanie Przywilejów do Funkcji." name="Roles">
-		<action description="Dodawanie Funkcji" longdescription="Dodawanie nowych Funkcji pod Członkowie &gt; Funkcje." name="role create"/>
-		<action description="Usuwanie Funkcji" longdescription="Usuń Funkcje w zakładce Funkcje &gt; Funkcje" name="role delete"/>
-		<action description="Zmiany nazw Funkcji, Tytułów i Opisów i widoczność Członków w Informacjach o Grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji &gt; Funkcje po wybraniu Funkcje." name="role properties"/>
-		<action description="Przypisywanie Członków do posiadanych Funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited"/>
-		<action description="Przypisywanie Członków do wszystkich Funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member"/>
-		<action description="Odbieranie Funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member"/>
-		<action description="Dodawanie i Usuwanie Przywilejów z Funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie &gt; Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions"/>
+	<action_set description="Przywileje pozwalające na dodawanie, usuwanie i edycję funkcji w grupie, oraz na nadawanie i odbieranie funkcji, oraz na przypisywanie Przywilejów do Funkcji." name="Roles">
+		<action description="Dodawanie funkcji" longdescription="Dodawanie nowych funkcji pod Członkowie &gt; Funkcje." name="role create"/>
+		<action description="Usuwanie funkcji" longdescription="Usuń Funkcje w zakładce Funkcje &gt; Funkcje" name="role delete"/>
+		<action description="Zmiany nazw funkcji, tytułów i opisów i widoczność członków w informacjach o grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji &gt; Funkcje po wybraniu Funkcje." name="role properties"/>
+		<action description="Przypisywanie członków do posiadanych funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited"/>
+		<action description="Przypisywanie członków do wszystkich funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member"/>
+		<action description="Odbieranie funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member"/>
+		<action description="Dodawanie i usuwanie przywilejów z funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie &gt; Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na edycję atrybutów Grupy takich jak widoczność w wyszukiwarce, status i insygnia." name="Group Identity">
-		<action description="Zmiany Statusu Grupy, Insygniów, &apos;Widoczność w Wyszukiwarce&apos; i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity"/>
+		<action description="Zmiany statusu grupy, insygniów, &apos;Widoczność w Wyszukiwarce&apos; i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity"/>
 	</action_set>
-	<action_set description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż Posiadłości Grupy. Aby zobaczyć okno O Posiadłości wybierz grunt prawym klawiszem myszki i wybierz &apos;O Posiadłości&apos; albo wybierz ikonę &apos;i&apos; w głównym menu." name="Parcel Management">
-		<action description="Przypisywanie i kupowanie Posiadłości dla Grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości &gt; ustawienia Ogólne." name="land deed"/>
-		<action description="Oddawanie Posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release"/>
-		<action description="Sprzedaż Posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info"/>
-		<action description="Podział i Łączenie Posiadłości" longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, &apos;Edycja Terenu&apos;, i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij &apos;Podziel&apos;. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij &apos;Połącz&apos;." name="land divide join"/>
+	<action_set description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż posiadłości grupy. Aby zobaczyć okno O Posiadłości wybierz grunt prawym klawiszem myszki i wybierz &apos;O Posiadłości&apos; albo wybierz ikonę &apos;i&apos; w głównym menu." name="Parcel Management">
+		<action description="Przypisywanie i kupowanie posiadłości dla grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości &gt; ustawienia Ogólne." name="land deed"/>
+		<action description="Oddawanie posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release"/>
+		<action description="Sprzedaż posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info"/>
+		<action description="Podział i łączenie posiadłości" longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, &apos;Edycja Terenu&apos;, i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij &apos;Podziel&apos;. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij &apos;Połącz&apos;." name="land divide join"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na zmianę nazwy Posiadłości, widoczność w wyszukiwarce, widoczność w wyszukiwarce, wybór miejsce lądowania i zmianę ustawień teleportacji (TP)." name="Parcel Identity">
 		<action description="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii" longdescription="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii Posiadłości pod O Posiadłości &gt; Opcje." name="land find places"/>
@@ -33,44 +33,44 @@
 		<action description="Selekcja opcji &apos;Edycja Terenu&apos;" longdescription="Selekcja opcji &apos;Edycja Terenu&apos;. *UWAGA* O Posiadłości &gt; Opcje &gt; Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości &gt; Opcje." name="land edit"/>
 		<action description="Dodatkowe ustawienia O Posiadłości &gt; Opcje" longdescription="Selekcja opcji &apos;Bezpieczeństwo (brak uszkodzeń)&apos; &apos;Latanie&apos;, opcje dla innych Rezydentów: &apos;Tworzenie Obiektów&apos;; &apos;Edycja Terenu&apos;, &apos;Zapamiętywanie Miejsca (LM)&apos;, i &apos;Skrypty&apos; na Posiadłościach Grupy pod O Posiadłości &gt; Opcje." name="land options"/>
 	</action_set>
-	<action_set description="Przywileje pozwalające Członkom na omijanie ograniczeń na Posiadłościach Grupy." name="Parcel Powers">
-		<action description="Pozwól na Edycję Terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land"/>
-		<action description="Pozwól na Latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly"/>
-		<action description="Pozwól na Tworzenie Obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create"/>
-		<action description="Pozwól na Zapamiętywanie Miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark"/>
-		<action description="Pozwól na wybór Miejsca Startu na Posiadłościach Grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat &gt; Zapamiętaj Miejsce &gt; Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home"/>
+	<action_set description="Przywileje pozwalające członkom na omijanie ograniczeń na Posiadłościach Grupy." name="Parcel Powers">
+		<action description="Pozwól na edycję terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land"/>
+		<action description="Pozwól na latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly"/>
+		<action description="Pozwól na tworzenie obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create"/>
+		<action description="Pozwól na zapamiętywanie miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark"/>
+		<action description="Pozwól na wybór Miejsca Startu na posiadłościach grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat &gt; Zapamiętaj Miejsce &gt; Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na dawanie i odbieranie dostępu do Posiadłości Grupy zawierające możliwości unieruchomiania i wyrzucania Rezydentów." name="Parcel Access">
-		<action description="Zarządzanie Listą Dostępu do Posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage allowed"/>
-		<action description="Zarządzanie Listą Usuniętych z Posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage banned"/>
+		<action description="Zarządzanie listą dostępu do posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage allowed"/>
+		<action description="Zarządzanie listą usuniętych z posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage banned"/>
 		<action description="Selekcja opcji &apos;Wstęp Płatny&apos;" longdescription="Selekcja opcji &apos;Wstęp Płatny&apos;; pod O Posiadłości &gt; Dostęp." name="land manage passes"/>
-		<action description="Wyrzucanie i unieruchamianie Rezydentów na Posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając &apos;;Wyrzuć&apos; albo &apos;Unieruchom&apos;." name="land admin"/>
+		<action description="Wyrzucanie i unieruchamianie Rezydentów na posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając &apos;;Wyrzuć&apos; albo &apos;Unieruchom&apos;." name="land admin"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczanie roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczaniu roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Parcel Content">
-		<action description="Odsyłanie obiektów należących do Grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości &gt; Obiekty." name="land return group owned"/>
-		<action description="Odsyłanie obiektów przypisanych do Grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return group set"/>
-		<action description="Odsyłanie obiektów nie przypisanych do Grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return non group"/>
+		<action description="Odsyłanie obiektów należących do grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości &gt; Obiekty." name="land return group owned"/>
+		<action description="Odsyłanie obiektów przypisanych do grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return group set"/>
+		<action description="Odsyłanie obiektów nie przypisanych do grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return non group"/>
 		<action description="Ogrodnictwo używając roślin z Linden Lab" longdescription="Możliwość przemieszczenia roślin z Linden Lab. Obiekty te mogą zostać odnalezione w Twojej Szafie, w folderze Biblioteka &gt; Folderze Obiektów lub mogą zostać stworzone dzięki aktywacji Narzędzi Edycji." name="land gardening"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczenia roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczenia roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Object Management">
-		<action description="Przypisywanie obiektów do Grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji &gt; Ogólne" name="object deed"/>
+		<action description="Przypisywanie obiektów do grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji &gt; Ogólne" name="object deed"/>
 		<action description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy" longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy w Narzędziach Edycji &gt; Ogólne" name="object manipulate"/>
-		<action description="Sprzedaż obiektów należących do Grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji &gt; Ogólne." name="object set sale"/>
+		<action description="Sprzedaż obiektów należących do grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji &gt; Ogólne." name="object set sale"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na wybór opłat grupowych, otrzymywanie dochodu i ograniczanie dostępu do historii konta grupy." name="Accounting">
 		<action description="Opłaty grupowe i dochód grupowy" longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp." name="accounting accountable"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na wysyłanie, odbieranie i czytanie Notek Grupy." name="Notices">
-		<action description="Wysyłanie Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie &gt; Notek." name="notices send"/>
-		<action description="Odbieranie Notek i dostęp do dawniejszych Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie &gt; Notki." name="notices receive"/>
+		<action description="Wysyłanie notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie &gt; Notek." name="notices send"/>
+		<action description="Odbieranie notek i dostęp do dawniejszych notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie &gt; Notki." name="notices receive"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na zgłaszanie Propozycji, głosowanie nad Propozycjami i śledzenie historii głosowania." name="Proposals">
-		<action description="Zgłaszanie Propozycji" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie &gt; Propozycje." name="proposal start"/>
-		<action description="Głosowanie nad Propozycjami" longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie &gt; Propozycje." name="proposal vote"/>
+		<action description="Zgłaszanie propozycji" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie &gt; Propozycje." name="proposal start"/>
+		<action description="Głosowanie nad propozycjami" longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie &gt; Propozycje." name="proposal vote"/>
 	</action_set>
 	<action_set description="Przywileje kontrolujÄ…ce czat i rozmowy grupowe." name="Chat">
-		<action description="Dostęp do Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat"/>
-		<action description="Dostęp do Rozmów Grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat"/>
-		<action description="Moderator Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat"/>
+		<action description="Dostęp do czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat"/>
+		<action description="Dostęp do rozmów grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat"/>
+		<action description="Moderator czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat"/>
 	</action_set>
 </role_actions>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml
index 2fc07aaaca32904455900f346843e2e16c84d30a..cea903769c1830abd75ac946851b171c08ea6c33 100644
--- a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Ubrania" name="appearance panel">
-	<string name="No Outfit" value="Bez Ubrania"/>
+	<string name="No Outfit" value="Bez stroju"/>
 	<string name="Unsaved Changes" value="Zmiany niezachowane"/>
 	<string name="Now Wearing" value="Obecnie założone..."/>
 	<string name="Changing outfits" value="Zmiana stroju"/>
@@ -12,5 +12,5 @@
 		</text>
 		<button label="" name="edit_outfit_btn" tool_tip="Edytuj ten strój"/>
 	</panel>
-	<filter_editor label="PrzeglÄ…daj Ubrania" name="Filter"/>
+	<filter_editor label="PrzeglÄ…daj stroje" name="Filter"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
index 3282926bcd781361145315ffda8ba01b9683bf73..e39bbd75c5d0a198d6f3baa2cb8d983ff8e073f2 100644
--- a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
@@ -58,11 +58,11 @@
 			</text>
 			<check_box label="Udostępnij" name="CheckShareWithGroup" tool_tip="Pozwól wszystkim członkom ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz przypisać obiekt grupie aby aktywować ograniczenia wynikające z roli."/>
 			<text name="NextOwnerLabel">
-				Następny Właściciel:
+				Następny właściciel:
 			</text>
 			<check_box label="Modyfikuje" name="CheckNextOwnerModify"/>
 			<check_box label="Kopiuje" name="CheckNextOwnerCopy"/>
-			<check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny Właściciel może oddawać lub sprzedawać ten obiekt"/>
+			<check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny właściciel może oddawać lub sprzedawać ten obiekt"/>
 		</panel>
 		<check_box label="Na sprzedaż" name="CheckPurchase"/>
 		<combo_box name="combobox sale copy">
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
index 84b5471e492e6cb62106c47ddfbe22d6af263364..d8cf456c6462fd1277f08ecb4ab2a0029c25f6a9 100644
--- a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
@@ -83,7 +83,7 @@
 			<check_box label="Kopiuj" name="checkbox allow everyone copy"/>
 			<check_box label="Przesuń" name="checkbox allow everyone move"/>
 			<text name="GroupLabel">
-				Groupie:
+				Grupie:
 			</text>
 			<check_box label="Udostępnij" name="checkbox share with group" tool_tip="Udostępnij prawa do modyfikacji tego obiektu wszystkim członkom, którzy posiadają przywilej modyfikacji obiektów grupy. By ograniczyć, przypisz obiekt do grupy."/>
 			<text name="NextOwnerLabel">
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index e4423dc5ce11935a2d3b78f884c68b355539e025..e2689720bfb31b86974850c02e459ad55cf768ea 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -50,7 +50,7 @@
 		Ładowanie świata...
 	</string>
 	<string name="LoginInitializingBrowser">
-		Inicjalizacja PrzeglÄ…darki Internetu...
+		Inicjalizacja przeglÄ…darki internetowej...
 	</string>
 	<string name="LoginInitializingMultimedia">
 		Inicjalizacja multimediów...
@@ -62,22 +62,22 @@
 		Weryfikacja bufora danych na dysku (może trwać od 60 do 90 sekund)...
 	</string>
 	<string name="LoginProcessingResponse">
-		Przetwarzanie Odpowiedzi...
+		Przetwarzanie odpowiedzi...
 	</string>
 	<string name="LoginInitializingWorld">
-		Inicjalizacja świata...
+		Inicjacja świata...
 	</string>
 	<string name="LoginDecodingImages">
 		Przetwarzanie obrazów...
 	</string>
 	<string name="LoginInitializingQuicktime">
-		Inicjalizacja QuickTime...
+		Inicjacja QuickTime...
 	</string>
 	<string name="LoginQuicktimeNotFound">
-		QuickTime nie został znaleziony - inicjalizacja przerwana.
+		QuickTime nie został znaleziony - inicjacja przerwana.
 	</string>
 	<string name="LoginQuicktimeOK">
-		QuickTime zainicjalizowany.
+		QuickTime zainicjowany.
 	</string>
 	<string name="LoginWaitingForRegionHandshake">
 		Oczekiwanie na połączenie z regionem...
@@ -113,7 +113,7 @@
 		Logowanie nie powiodło się.
 	</string>
 	<string name="Quit">
-		Wyłącz Program
+		Wyłącz program
 	</string>
 	<string name="AgentLostConnection">
 		Ten region może mieć problemy. Sprawdź podłączenie do Internetu.
@@ -152,28 +152,28 @@
 		(Grupa)
 	</string>
 	<string name="TooltipForSaleL$">
-		Na Sprzedaż: L$[AMOUNT]
+		Na sprzedaż: L$[AMOUNT]
 	</string>
 	<string name="TooltipFlagGroupBuild">
-		Budowanie Grupowe
+		Budowanie grupowe
 	</string>
 	<string name="TooltipFlagNoBuild">
-		Budowanie Zabronione
+		Budowanie zabronione
 	</string>
 	<string name="TooltipFlagNoEdit">
-		Edycja Zabroniona
+		Edycja zabroniona
 	</string>
 	<string name="TooltipFlagNotSafe">
-		Niebezpieczny Obszar
+		Niebezpieczny obszar
 	</string>
 	<string name="TooltipFlagNoFly">
-		Latanie Zabronione
+		Latanie zabronione
 	</string>
 	<string name="TooltipFlagGroupScripts">
-		Skrypty Grupowe
+		Skrypty grupowe
 	</string>
 	<string name="TooltipFlagNoScripts">
-		Skrypty Zabronione
+		Skrypty zabronione
 	</string>
 	<string name="TooltipLand">
 		Posiadłość:
@@ -183,10 +183,10 @@
 	</string>
 	<string name="TooltipPrice" value="L$[AMOUNT]:"/>
 	<string name="TooltipHttpUrl">
-		Kliknij by zobaczyć zawartość tej strony internetowej
+		Kliknij aby zobaczyć zawartość tej strony internetowej
 	</string>
 	<string name="TooltipSLURL">
-		Kliknij by zobaczyć szczegóły tego miejsca
+		Kliknij aby zobaczyć szczegóły tego miejsca
 	</string>
 	<string name="TooltipAgentUrl">
 		Kliknij aby zobaczyc profil Rezydenta
@@ -210,35 +210,35 @@
 		Kliknij aby wysłać temu Rezydentowi zaproszenie do Znajomych
 	</string>
 	<string name="TooltipGroupUrl">
-		Kliknij by zobaczyć opis tej grupy
+		Kliknij aby zobaczyć opis tej grupy
 	</string>
 	<string name="TooltipEventUrl">
-		Klinij by zobaczyć szczegóły tego wydarzenia
+		Klinij aby zobaczyć szczegóły tego wydarzenia
 	</string>
 	<string name="TooltipClassifiedUrl">
-		Kliknij by zobaczyć tę reklamę
+		Kliknij aby zobaczyć tę reklamę
 	</string>
 	<string name="TooltipParcelUrl">
-		Kliknij by zobaczyć opis tej posiadłości
+		Kliknij aby zobaczyć opis tej posiadłości
 	</string>
 	<string name="TooltipTeleportUrl">
-		Kliknij by teleportować się do tego miejsca
+		Kliknij aby teleportować się do tego miejsca
 	</string>
 	<string name="TooltipObjectIMUrl">
-		Kliknij by zobaczyć opis tego obiektu
+		Kliknij aby zobaczyć opis tego obiektu
 	</string>
 	<string name="TooltipMapUrl">
-		Kliknij by zobaczyć to miejsce na mapie
+		Kliknij aby zobaczyć to miejsce na mapie
 	</string>
 	<string name="TooltipSLAPP">
-		Kliknij by uruchomić secondlife:// command
+		Kliknij aby uruchomić secondlife:// command
 	</string>
 	<string name="CurrentURL" value=" Obecny Adres: [CurrentURL]"/>
 	<string name="SLurlLabelTeleport">
 		Teleportuj do
 	</string>
 	<string name="SLurlLabelShowOnMap">
-		Pokaż na Mapie
+		Pokaż na mapie
 	</string>
 	<string name="SLappAgentMute">
 		Zablokuj
@@ -286,13 +286,13 @@
 		Wyszukiwanie...
 	</string>
 	<string name="NoneFound">
-		Nieodnaleziono.
+		Nie odnaleziono.
 	</string>
 	<string name="RetrievingData">
 		Odzyskiwanie danych...
 	</string>
 	<string name="ReleaseNotes">
-		O Tej Wersji
+		O tej wersji
 	</string>
 	<string name="RELEASE_NOTES_BASE_URL">
 		http://wiki.secondlife.com/wiki/Release_Notes/
@@ -310,7 +310,7 @@
 		(brak danych)
 	</string>
 	<string name="AvalineCaller">
-		Avaline Caller [ORDER]
+		Avaline [ORDER]
 	</string>
 	<string name="AssetErrorNone">
 		OK
@@ -322,7 +322,7 @@
 		Pobieranie danych: brak pliku
 	</string>
 	<string name="AssetErrorNotInDatabase">
-		Pobieranie danych: dane nie znalezione w bazie danych
+		Pobieranie danych: dane nie zostały znalezione w bazie danych
 	</string>
 	<string name="AssetErrorEOF">
 		Koniec pliku
@@ -364,22 +364,22 @@
 		ubrania
 	</string>
 	<string name="object">
-		obieku
+		obiek
 	</string>
 	<string name="note card">
 		notatki
 	</string>
 	<string name="folder">
-		folderu
+		folder
 	</string>
 	<string name="root">
 		podstawy
 	</string>
 	<string name="lsl2 script">
-		skryptu LSL2
+		skrypt LSL2
 	</string>
 	<string name="lsl bytecode">
-		kodu LSL
+		kod LSL
 	</string>
 	<string name="tga texture">
 		tekstury typu tga
@@ -391,22 +391,22 @@
 		zdjęcia
 	</string>
 	<string name="lost and found">
-		Zgubione i Odnalezione
+		Zgubione i odnalezione
 	</string>
 	<string name="targa image">
-		obrau typu targa
+		obraz typu targa
 	</string>
 	<string name="trash">
 		Kosz
 	</string>
 	<string name="jpeg image">
-		obrazu typu jpeg
+		obraz typu jpg
 	</string>
 	<string name="animation">
-		animacji
+		animacja
 	</string>
 	<string name="gesture">
-		gesturki
+		gesturka
 	</string>
 	<string name="simstate">
 		simstate
@@ -442,16 +442,16 @@
 		Salto
 	</string>
 	<string name="anim_express_laugh">
-		Åšmiech do Rozpuku
+		Åšmiech do rozpuku
 	</string>
 	<string name="anim_express_toothsmile">
-		Wielki Uśmiech
+		Wielki uśmiech
 	</string>
 	<string name="anim_blowkiss">
 		Całusek
 	</string>
 	<string name="anim_express_bored">
-		Ale Nudy!
+		Ale nudy!
 	</string>
 	<string name="anim_bow">
 		Ukłon
@@ -460,7 +460,7 @@
 		Oklaski
 	</string>
 	<string name="anim_courtbow">
-		Dworski Ukłon
+		Dworski ukłon
 	</string>
 	<string name="anim_express_cry">
 		PÅ‚acz
@@ -499,10 +499,10 @@
 		Zakłopotanie
 	</string>
 	<string name="anim_angry_fingerwag">
-		Grożenie Paluszkiem
+		Grożenie paluszkiem
 	</string>
 	<string name="anim_fist_pump">
-		Udało sie!
+		Udało się!
 	</string>
 	<string name="anim_yoga_float">
 		Yoga
@@ -517,7 +517,7 @@
 		Radocha
 	</string>
 	<string name="anim_kissmybutt">
-		Pocałuj Mnie Gdzieś
+		Pocałuj mnie gdzieś
 	</string>
 	<string name="anim_express_kiss">
 		Pocałunek
@@ -538,40 +538,40 @@
 		Nie-nie-nie
 	</string>
 	<string name="anim_punch_onetwo">
-		Za Ciosem Cios
+		Za ciosem cios
 	</string>
 	<string name="anim_express_open_mouth">
-		Szczęka Opada
+		Szczęka opada
 	</string>
 	<string name="anim_peace">
 		Pokój
 	</string>
 	<string name="anim_point_you">
-		Wskazuj na Innych
+		Wskazuj na innych
 	</string>
 	<string name="anim_point_me">
-		Wskazuj na Siebie
+		Wskazuj na siebie
 	</string>
 	<string name="anim_punch_l">
-		Uderz z Lewej
+		Uderz z lewej
 	</string>
 	<string name="anim_punch_r">
-		Uderz z Prawej
+		Uderz z prawej
 	</string>
 	<string name="anim_rps_countdown">
-		KPN Licz
+		KPN licz
 	</string>
 	<string name="anim_rps_paper">
-		KPN Papier
+		KPN papier
 	</string>
 	<string name="anim_rps_rock">
-		KPN Kamień
+		KPN kamień
 	</string>
 	<string name="anim_rps_scissors">
-		KPN Nożyce
+		KPN nożyce
 	</string>
 	<string name="anim_express_repulsed">
-		Odrzuca Mnie
+		Odrzuca mnie
 	</string>
 	<string name="anim_kick_roundhouse_r">
 		Kopniak
@@ -586,7 +586,7 @@
 		Krzycz
 	</string>
 	<string name="anim_express_shrug">
-		Wzrusz Ramionami
+		Wzrusz ramionami
 	</string>
 	<string name="anim_express_smile">
 		Uśmiechaj się
@@ -595,22 +595,22 @@
 		Pal
 	</string>
 	<string name="anim_smoke_inhale">
-		Pal i ZaciÄ…gaj siÄ™
+		Pal i zaciÄ…gaj siÄ™
 	</string>
 	<string name="anim_smoke_throw_down">
-		Rzuć Papierosa
+		Rzuć papierosa
 	</string>
 	<string name="anim_express_surprise">
 		Zaskoczenie
 	</string>
 	<string name="anim_sword_strike_r">
-		Uderz Mieczem
+		Uderz mieczem
 	</string>
 	<string name="anim_angry_tantrum">
 		Wściekłość
 	</string>
 	<string name="anim_express_tongue_out">
-		Pokaż Język
+		Pokaż język
 	</string>
 	<string name="anim_hello">
 		Pomachaj
@@ -622,10 +622,10 @@
 		Zagwiżdż
 	</string>
 	<string name="anim_express_wink">
-		Puść Oko
+		Puść oko
 	</string>
 	<string name="anim_wink_hollywood">
-		Puść Oko (Hollywood)
+		Puść oko (Hollywood)
 	</string>
 	<string name="anim_express_worry">
 		Zmartwienie
@@ -640,13 +640,13 @@
 		Ładowanie...
 	</string>
 	<string name="worldmap_offline">
-		Mapa Świata jest Niedostępna
+		Mapa Świata jest niedostępna
 	</string>
 	<string name="worldmap_item_tooltip_format">
 		[AREA] m² L$[PRICE]
 	</string>
 	<string name="worldmap_results_none_found">
-		Miejsce Nieodnalezione.
+		Miejsce nieodnalezione.
 	</string>
 	<string name="Ok">
 		OK
@@ -664,7 +664,7 @@
 		krzyczy:
 	</string>
 	<string name="ringing">
-		Łączenie z rozmowami głosem w świecie...
+		Łączenie z rozmowami głosem w Świecie...
 	</string>
 	<string name="connected">
 		Połączenie uzyskane.
@@ -703,7 +703,7 @@
 		Usuń prawo własności (zmień na publiczne)
 	</string>
 	<string name="LinkAndDelink">
-		Łącz / odłącz z innymi obiektów
+		Łącz / rozłącz z innymi obiektami
 	</string>
 	<string name="AddAndRemoveJoints">
 		Dodaj / usuń połączenia z innymi obiektami
@@ -718,10 +718,10 @@
 		Kontroluj kamerÄ™
 	</string>
 	<string name="SIM_ACCESS_PG">
-		&apos;PG&apos;
+		&apos;General&apos;
 	</string>
 	<string name="SIM_ACCESS_MATURE">
-		&apos;Mature&apos;
+		&apos;Moderate&apos;
 	</string>
 	<string name="SIM_ACCESS_ADULT">
 		&apos;Adult&apos;
@@ -742,7 +742,7 @@
 		Mainland / Region
 	</string>
 	<string name="all_files">
-		Wszystkie Pliki
+		Wszystkie pliki
 	</string>
 	<string name="sound_files">
 		Dźwięki
@@ -760,16 +760,16 @@
 		Załaduj
 	</string>
 	<string name="targa_image_files">
-		Obrazy Targa
+		Obrazy targa
 	</string>
 	<string name="bitmap_image_files">
-		Obrazy Bitmap
+		Obrazy bitmap
 	</string>
 	<string name="avi_movie_file">
 		Pliki filmowe AVI
 	</string>
 	<string name="xaf_animation_file">
-		Plik Animacji XAF
+		Plik animacji XAF
 	</string>
 	<string name="xml_file">
 		Plik XML
@@ -778,13 +778,13 @@
 		Plik RAW
 	</string>
 	<string name="compressed_image_files">
-		Obrazy Skomprensowane
+		Obrazy skomprensowane
 	</string>
 	<string name="load_files">
 		Załaduj pliki
 	</string>
 	<string name="choose_the_directory">
-		Wybierz Katalog
+		Wybierz katalog
 	</string>
 	<string name="AvatarSetNotAway">
 		Ustaw Nie Åšpij
@@ -838,7 +838,7 @@
 		Spódnica
 	</string>
 	<string name="alpha">
-		Ubranie Przezroczyste
+		Ubranie Alpha
 	</string>
 	<string name="tattoo">
 		Tatuaż
@@ -850,37 +850,37 @@
 		żadne
 	</string>
 	<string name="shirt_not_worn">
-		Koszula niezałożona
+		Koszula nie jest założona
 	</string>
 	<string name="pants_not_worn">
-		Spodnie niezałożone
+		Spodnie nie są założone
 	</string>
 	<string name="shoes_not_worn">
-		Buty niezałożone
+		Buty nie są założone
 	</string>
 	<string name="socks_not_worn">
-		Skarpetki niezałożone
+		Skarpetki nie są założone
 	</string>
 	<string name="jacket_not_worn">
-		Kurtka niezałożona
+		Kurtka nie jest założona
 	</string>
 	<string name="gloves_not_worn">
-		Rękawiczki niezałożone
+		Rękawiczki nie są założone
 	</string>
 	<string name="undershirt_not_worn">
-		Podkoszulek niezałożony
+		Podkoszulek nie jest założony
 	</string>
 	<string name="underpants_not_worn">
-		Bielizna niezałożona
+		Bielizna nie jest założona
 	</string>
 	<string name="skirt_not_worn">
-		Spódnica niezałożona
+		Spódnica nie jest założona
 	</string>
 	<string name="alpha_not_worn">
-		Alpha niezałożone
+		Alpha nie jest założone
 	</string>
 	<string name="tattoo_not_worn">
-		Tatuaż niezałożony
+		Tatuaż nie jest założony
 	</string>
 	<string name="invalid_not_worn">
 		nieważny
@@ -943,10 +943,10 @@
 		OK
 	</string>
 	<string name="GroupNotifyGroupNotice">
-		Ogłoszenie Grupowe
+		Ogłoszenie grupowe
 	</string>
 	<string name="GroupNotifyGroupNotices">
-		Ogłoszenia Grupowe
+		Ogłoszenia grupowe
 	</string>
 	<string name="GroupNotifySentBy">
 		Wysłane przez
@@ -955,40 +955,40 @@
 		Załączone:
 	</string>
 	<string name="GroupNotifyViewPastNotices">
-		Zobacz poprzednie zawiadomienia lub otrzymanen wiadomości tutaj.
+		Zobacz poprzednie zawiadomienia lub otrzymane wiadomości tutaj.
 	</string>
 	<string name="GroupNotifyOpenAttachment">
-		Otwórz Załącznik
+		Otwórz załącznik
 	</string>
 	<string name="GroupNotifySaveAttachment">
-		Zapisz Załącznik
+		Zapisz załącznik
 	</string>
 	<string name="TeleportOffer">
 		Oferta teleportacji
 	</string>
 	<string name="StartUpNotifications">
-		Nowe zawiadomienia zostały wysłane kiedy byłeś w trybie oddalenia...
+		Nowe zawiadomienia zostały wysłane kiedy byłeś/byłaś w trybie oddalenia...
 	</string>
 	<string name="OverflowInfoChannelString">
 		Masz jeszcze [%d] powiadomień
 	</string>
 	<string name="BodyPartsRightArm">
-		Prawe RamiÄ™
+		Prawe ramiÄ™
 	</string>
 	<string name="BodyPartsHead">
 		GÅ‚owa
 	</string>
 	<string name="BodyPartsLeftArm">
-		Lewe RamiÄ™
+		Lewe ramiÄ™
 	</string>
 	<string name="BodyPartsLeftLeg">
-		Lewa Noga
+		Lewa noga
 	</string>
 	<string name="BodyPartsTorso">
 		Tułów
 	</string>
 	<string name="BodyPartsRightLeg">
-		Prawa Noga
+		Prawa noga
 	</string>
 	<string name="GraphicsQualityLow">
 		Niska
@@ -1000,7 +1000,7 @@
 		Wysoka
 	</string>
 	<string name="LeaveMouselook">
-		Wybierz ESC by powrócić do trybu widoku normalne
+		Wybierz ESC aby powrócić do trybu widoku normalnego
 	</string>
 	<string name="InventoryNoMatchingItems">
 		Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/all/[SEARCH_TERM] Szukaj].
@@ -1031,18 +1031,18 @@
 	<string name="Chat" value=" Czat :"/>
 	<string name="Sound" value=" Dźwięk :"/>
 	<string name="Wait" value=" --- Zaczekaj :"/>
-	<string name="AnimFlagStop" value=" Zatrzymaj AnimacjÄ™ :"/>
-	<string name="AnimFlagStart" value=" Rozpocznij AnimacjÄ™ :"/>
+	<string name="AnimFlagStop" value=" Zatrzymaj animacjÄ™ :"/>
+	<string name="AnimFlagStart" value=" Rozpocznij animacjÄ™ :"/>
 	<string name="Wave" value=" Wave"/>
 	<string name="GestureActionNone" value="Żadne"/>
 	<string name="HelloAvatar" value=" Witaj, Awatarze!"/>
-	<string name="ViewAllGestures" value="  Zobacz Wszystkie &gt;&gt;"/>
+	<string name="ViewAllGestures" value="  Zobacz wszystkie &gt;&gt;"/>
 	<string name="GetMoreGestures" value="Więcej gesturek &gt;&gt;"/>
 	<string name="Animations" value=" Animacje,"/>
 	<string name="Calling Cards" value=" Wizytówki,"/>
 	<string name="Clothing" value=" Ubrania,"/>
 	<string name="Gestures" value=" Gesturki,"/>
-	<string name="Landmarks" value=" Ulubione Miejsca,"/>
+	<string name="Landmarks" value=" Ulubione miejsca,"/>
 	<string name="Notecards" value=" Notki,"/>
 	<string name="Objects" value=" Obiekty,"/>
 	<string name="Scripts" value=" Skrypty,"/>
@@ -1055,7 +1055,7 @@
 		Moja Szafa
 	</string>
 	<string name="InvFolder My Favorites">
-		Moje Ulubione
+		Moje ulubione
 	</string>
 	<string name="InvFolder Library">
 		Biblioteka
@@ -1070,7 +1070,7 @@
 		Wizytówki
 	</string>
 	<string name="InvFolder Landmarks">
-		Ulubione Miejsca
+		Landmarki
 	</string>
 	<string name="InvFolder Scripts">
 		Skrypty
@@ -1085,28 +1085,28 @@
 		Noty
 	</string>
 	<string name="InvFolder New Folder">
-		Nowy Folder
+		Nowy folder
 	</string>
 	<string name="InvFolder Inventory">
 		Szafa
 	</string>
 	<string name="InvFolder Uncompressed Images">
-		Nieskompresowane Obrazy
+		Nieskompresowane obrazy
 	</string>
 	<string name="InvFolder Body Parts">
-		Części Ciała
+		Części ciała
 	</string>
 	<string name="InvFolder Trash">
 		Kosz
 	</string>
 	<string name="InvFolder Photo Album">
-		Album ze Zdjęciami
+		Album ze zdjęciami
 	</string>
 	<string name="InvFolder Lost And Found">
-		Zagubione i Odnalezione
+		Zagubione i odnalezione
 	</string>
 	<string name="InvFolder Uncompressed Sounds">
-		Nieskompresowane Dźwięki
+		Nieskompresowane dźwięki
 	</string>
 	<string name="InvFolder Animations">
 		Animacje
@@ -1115,13 +1115,13 @@
 		Gesturki
 	</string>
 	<string name="InvFolder Current Outfit">
-		Obecne Ubranie
+		Obecny strój
 	</string>
 	<string name="InvFolder Initial Outfits">
 		PoczÄ…tkowe stroje
 	</string>
 	<string name="InvFolder My Outfits">
-		Moje Ubranie
+		Moje stroje
 	</string>
 	<string name="InvFolder Accessories">
 		Akcesoria
@@ -1169,34 +1169,34 @@
 		Ctrl
 	</string>
 	<string name="Chest">
-		Klatka Piersiowa
+		Klatka piersiowa
 	</string>
 	<string name="Skull">
 		Czaszka
 	</string>
 	<string name="Left Shoulder">
-		Lewe RamiÄ™
+		Lewe ramiÄ™
 	</string>
 	<string name="Right Shoulder">
-		Prawe RamiÄ™
+		Prawe ramiÄ™
 	</string>
 	<string name="Left Hand">
-		Lewa Dłoń
+		Lewa dłoń
 	</string>
 	<string name="Right Hand">
-		Prawa Dłoń
+		Prawa dłoń
 	</string>
 	<string name="Left Foot">
-		Lewa Stopa
+		Lewa stopa
 	</string>
 	<string name="Right Foot">
-		Prawa Stopa
+		Prawa stopa
 	</string>
 	<string name="Spine">
 		Kręgosłup
 	</string>
 	<string name="Pelvis">
-		Mednica
+		Miednica
 	</string>
 	<string name="Mouth">
 		Usta
@@ -1205,16 +1205,16 @@
 		Szczęka
 	</string>
 	<string name="Left Ear">
-		Lewe Ucho
+		Lewe ucho
 	</string>
 	<string name="Right Ear">
-		Prawe Ucho
+		Prawe ucho
 	</string>
 	<string name="Left Eyeball">
-		Lewe Oko
+		Lewe oko
 	</string>
 	<string name="Right Eyeball">
-		Prawe Oko
+		Prawe oko
 	</string>
 	<string name="Nose">
 		Nos
@@ -1223,40 +1223,40 @@
 		P RamiÄ™
 	</string>
 	<string name="R Forearm">
-		P PrzedramiÄ™
+		P przedramiÄ™
 	</string>
 	<string name="L Upper Arm">
-		L RamiÄ™
+		L ramiÄ™
 	</string>
 	<string name="L Forearm">
-		L PrzedramiÄ™
+		L przedramiÄ™
 	</string>
 	<string name="Right Hip">
-		Prawe Biodro
+		Prawe biodro
 	</string>
 	<string name="R Upper Leg">
-		P Udo
+		P udo
 	</string>
 	<string name="R Lower Leg">
-		P Dolna Noga
+		P dolna noga
 	</string>
 	<string name="Left Hip">
-		Lewe Biodro
+		Lewe biodro
 	</string>
 	<string name="L Upper Leg">
-		L Udo
+		L udo
 	</string>
 	<string name="L Lower Leg">
-		L Dolna Noga
+		L dolna noga
 	</string>
 	<string name="Stomach">
 		Brzuch
 	</string>
 	<string name="Left Pec">
-		Left Pec
+		Lewy Pec
 	</string>
 	<string name="Right Pec">
-		Right Pec
+		Prawy Pec
 	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS]
@@ -1328,49 +1328,49 @@
 		Proces
 	</string>
 	<string name="AcctTypeCharterMember">
-		Wyróżniony Członek
+		Wyróżniony członek
 	</string>
 	<string name="AcctTypeEmployee">
 		Pracownik Linden Lab
 	</string>
 	<string name="PaymentInfoUsed">
-		Dane Konta Używane
+		Dane konta używane
 	</string>
 	<string name="PaymentInfoOnFile">
-		Dane PÅ‚atnicze na Koncie
+		Dane płatnicze na koncie
 	</string>
 	<string name="NoPaymentInfoOnFile">
-		Brak Danych na Koncie
+		Brak danych na koncie
 	</string>
 	<string name="AgeVerified">
-		Weryfikacja Wieku Przeprowadzona
+		Weryfikacja wieku przeprowadzona
 	</string>
 	<string name="NotAgeVerified">
-		Brak Weryfikacji Wieku
+		Brak weryfikacji wieku
 	</string>
 	<string name="Center 2">
 		Åšrodek 2
 	</string>
 	<string name="Top Right">
-		Prawa Góra
+		Prawa góra
 	</string>
 	<string name="Top">
 		Góra
 	</string>
 	<string name="Top Left">
-		Lewa Góra
+		Lewa góra
 	</string>
 	<string name="Center">
 		Åšrodek
 	</string>
 	<string name="Bottom Left">
-		Lewy Dół
+		Lewy dół
 	</string>
 	<string name="Bottom">
 		Dół
 	</string>
 	<string name="Bottom Right">
-		Prawy Dół
+		Prawy dół
 	</string>
 	<string name="CompileQueueDownloadedCompiling">
 		Pobieranie zakończone, rozpoczęcie kompilacji
@@ -1391,7 +1391,7 @@
 		Nieznany błąd podczas próby pobierania
 	</string>
 	<string name="CompileQueueTitle">
-		Postęp Rekompilacji
+		Postęp rekompilacji
 	</string>
 	<string name="CompileQueueStart">
 		rekompiluj
@@ -1403,13 +1403,13 @@
 		zresetuj
 	</string>
 	<string name="RunQueueTitle">
-		Ustaw Uruchomiaj Progres
+		Ustaw uruchomiaj progres
 	</string>
 	<string name="RunQueueStart">
 		ustaw uruchom
 	</string>
 	<string name="NotRunQueueTitle">
-		Ustaw Nie Uruchamiaj Progres
+		Ustaw nie uruchamiaj progres
 	</string>
 	<string name="NotRunQueueStart">
 		ustaw nie uruchamiaj
@@ -1427,7 +1427,7 @@
 		Skrypt (obiekt poza zasięgiem)
 	</string>
 	<string name="GodToolsObjectOwnedBy">
-		Obiekt [OBJECT] należący [OWNER]
+		Obiekt [OBJECT] należący do [OWNER]
 	</string>
 	<string name="GroupsNone">
 		żadne
@@ -1483,10 +1483,10 @@
 		Grupy mające dostęp: ([ALLOWEDGROUPS], max [MAXACCESS])
 	</string>
 	<string name="ScriptLimitsParcelScriptMemory">
-		Pamięć Skryptów Parceli
+		Pamięć skryptów Posiadłości
 	</string>
 	<string name="ScriptLimitsParcelsOwned">
-		Parcele: [PARCELS]
+		Posiadłości: [PARCELS]
 	</string>
 	<string name="ScriptLimitsMemoryUsed">
 		Pamięć wykorzystana: [COUNT] kb z [MAX] kb; [AVAILABLE] kb pozostało
@@ -1495,7 +1495,7 @@
 		Pamięć wykorzystana: [COUNT] kb
 	</string>
 	<string name="ScriptLimitsParcelScriptURLs">
-		Skrypty URL Parceli
+		Skrypty URL Posiadłości
 	</string>
 	<string name="ScriptLimitsURLsUsed">
 		URL: [COUNT] z [MAX]; [AVAILABLE] dostępne
@@ -1516,7 +1516,7 @@
 		Wyszukiwanie informacji...
 	</string>
 	<string name="ScriptLimitsRequestDontOwnParcel">
-		Nie masz pozwolenia na sprawdzenie parceli.
+		Nie masz pozwolenia na sprawdzenie pasiadłości.
 	</string>
 	<string name="SITTING_ON">
 		Usiądź na
@@ -1528,22 +1528,22 @@
 		GÅ‚owa
 	</string>
 	<string name="ATTACH_LSHOULDER">
-		Lewe RamiÄ™
+		Lewe ramiÄ™
 	</string>
 	<string name="ATTACH_RSHOULDER">
-		RamiÄ™ Prawe
+		Prawe ramiÄ™
 	</string>
 	<string name="ATTACH_LHAND">
-		Ręka Lewa
+		Lewa ręka
 	</string>
 	<string name="ATTACH_RHAND">
-		Prawa Ręka
+		Prawa ręka
 	</string>
 	<string name="ATTACH_LFOOT">
-		Lewa Stopa
+		Lewa stopa
 	</string>
 	<string name="ATTACH_RFOOT">
-		Stopa Prawa
+		Prawa stopa
 	</string>
 	<string name="ATTACH_BACK">
 		Plecy
@@ -1558,22 +1558,22 @@
 		Podbródek
 	</string>
 	<string name="ATTACH_LEAR">
-		Ucho Lewe
+		Ucho lewe
 	</string>
 	<string name="ATTACH_REAR">
-		Prawe Ucho
+		Prawe ucho
 	</string>
 	<string name="ATTACH_LEYE">
-		Lewe Oko
+		Lewe oko
 	</string>
 	<string name="ATTACH_REYE">
-		Prawe Oko
+		Prawe oko
 	</string>
 	<string name="ATTACH_NOSE">
 		Nos
 	</string>
 	<string name="ATTACH_RUARM">
-		Ramię P Górne
+		Prawe górne ramię
 	</string>
 	<string name="ATTACH_RLARM">
 		Prawe dolne ramiÄ™
@@ -1588,19 +1588,19 @@
 		Biodro prawe
 	</string>
 	<string name="ATTACH_RULEG">
-		P Górna Noga
+		Prawa górna noga
 	</string>
 	<string name="ATTACH_RLLEG">
-		Noga P Dolna
+		Prawa dolna noga
 	</string>
 	<string name="ATTACH_LHIP">
-		Biodro Lewe
+		Biodro lewe
 	</string>
 	<string name="ATTACH_LULEG">
-		L Górna Noga
+		Lewa gorna noga
 	</string>
 	<string name="ATTACH_LLLEG">
-		Noga L Dolna
+		Lewa dolna noga
 	</string>
 	<string name="ATTACH_BELLY">
 		Brzuch
@@ -1612,28 +1612,28 @@
 		Lewa klatka
 	</string>
 	<string name="ATTACH_HUD_CENTER_2">
-		HUD Åšrodek 2
+		HUD środek 2
 	</string>
 	<string name="ATTACH_HUD_TOP_RIGHT">
-		HUD P Górny
+		HUD prawy górny
 	</string>
 	<string name="ATTACH_HUD_TOP_CENTER">
-		HUD Środek Górny
+		HUD środek górny
 	</string>
 	<string name="ATTACH_HUD_TOP_LEFT">
-		HUD L Góra
+		HUD lewa gora
 	</string>
 	<string name="ATTACH_HUD_CENTER_1">
-		HUD Åšrodek 1
+		HUD środek 1
 	</string>
 	<string name="ATTACH_HUD_BOTTOM_LEFT">
-		HUD Dolna L Strona
+		HUD lewa dolna strona
 	</string>
 	<string name="ATTACH_HUD_BOTTOM">
-		HUD Dolny
+		HUD dolny
 	</string>
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
-		HUD Dolna P Strona
+		HUD prawa dolna strona
 	</string>
 	<string name="Bad attachment point">
 		Nieprawidłowy punkt załączenia
@@ -1648,10 +1648,10 @@
 		Zawartość obiektu
 	</string>
 	<string name="PanelContentsNewScript">
-		Nowy Skrypt
+		Nowy skrypt
 	</string>
 	<string name="BusyModeResponseDefault">
-		Rezydent, do którego wysłałeś wiadomość prywatną znajduje się w trybie pracy. Oznacza to, iż Twoja wiadomość zostanie zapisana do przeglądnięcia poźniej.
+		Rezydent, do którego wysłałeś wiadomość prywatną znajduje się w trybie pracy. Oznacza to, iż Twoja wiadomość zostanie zapisana do przejrzenia poźniej.
 	</string>
 	<string name="NoOutfits">
 		Nie posiadasz jeszcze żadnych strojów. Spróbuj [secondlife:///app/search/all/ Szukaj]
@@ -1678,13 +1678,13 @@
 		Brak umowy dla tego majÄ…tku.
 	</string>
 	<string name="RegionNoCovenantOtherOwner">
-		Brak umowy dla tego majątku. Każda posiadłość w tym majątku została sprzedana przez Właściciela majątku nie Linden Lab. Skontaktuj się z właścicielem majątku w celu uzuskania szczegółów sprzedaży.
+		Brak umowy dla tego majątku. Każda posiadłość w tym majątku została sprzedana przez właściciela majątku nie Linden Lab. Skontaktuj się z właścicielem majątku w celu uzuskania szczegółów sprzedaży.
 	</string>
 	<string name="covenant_last_modified" value="Ostatnio modyfikowano:"/>
 	<string name="none_text" value=" (żadne) "/>
 	<string name="never_text" value=" (nigdy) "/>
 	<string name="GroupOwned">
-		Własność Grupy
+		Własność grupy
 	</string>
 	<string name="Public">
 		Publiczny
@@ -1768,7 +1768,7 @@
 		Zawartość
 	</string>
 	<string name="AcquiredItems">
-		Zdobyte Obiekty
+		Zdobyte obiekty
 	</string>
 	<string name="Cancel">
 		Anuluj
@@ -1814,7 +1814,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Shift+
 	</string>
 	<string name="FileSaved">
-		Zapisane Pliki
+		Zapisane pliki
 	</string>
 	<string name="Receiving">
 		Otrzymane
@@ -1832,13 +1832,13 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		PDT
 	</string>
 	<string name="Forward">
-		Do Przodu
+		Do przodu
 	</string>
 	<string name="Left">
-		W Lewo
+		W lewo
 	</string>
 	<string name="Right">
-		W Prawo
+		W prawo
 	</string>
 	<string name="Back">
 		Wróć
@@ -1856,10 +1856,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Wschód
 	</string>
 	<string name="Up">
-		W Górę
+		W górę
 	</string>
 	<string name="Down">
-		W Dół
+		W dół
 	</string>
 	<string name="Any Category">
 		Każda Kategoria
@@ -1868,7 +1868,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Zakupy
 	</string>
 	<string name="Land Rental">
-		Wynajem Ziemi
+		Wynajem ziemi
 	</string>
 	<string name="Property Rental">
 		Wynajem Posiadłości
@@ -1877,7 +1877,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Specjalne Oferty
 	</string>
 	<string name="New Products">
-		Nowe Produkty
+		Nowe produkty
 	</string>
 	<string name="Employment">
 		Praca
@@ -1895,7 +1895,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Żadne
 	</string>
 	<string name="Linden Location">
-		Linden Lokacja
+		Linden Lokalizacja
 	</string>
 	<string name="Adult">
 		&apos;Adult&apos;
@@ -1919,7 +1919,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Przyjazne dla nowych
 	</string>
 	<string name="Parks&amp;Nature">
-		Park i Natura
+		Parki i Natura
 	</string>
 	<string name="Residential">
 		Mieszkalna
@@ -1937,10 +1937,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Ty
 	</string>
 	<string name="Multiple Media">
-		Multi Media
+		Multimedia
 	</string>
 	<string name="Play Media">
-		Uruchom/Zatrzymaj Media
+		Uruchom/Zatrzymaj media
 	</string>
 	<string name="MBCmdLineError">
 		Podczas realizacji podanej komendy, wystąpił błąd.
@@ -1958,14 +1958,14 @@ Jeżeli nadal otrzymujesz ten komunikat, uruchom swój komputer ponownie.
 Jeżeli problem nadal występuje, proponujemy całkowite odinstalowanie aplikacji [APP_NAME] oraz ponowną jej instalację.
 	</string>
 	<string name="MBFatalError">
-		BÅ‚Ä…d Krytyczny
+		BÅ‚Ä…d krytyczny
 	</string>
 	<string name="MBRequiresAltiVec">
 		Aplikacja [APP_NAME] wymaga procesora z AltiVec (wersja G4 lub starsza).
 	</string>
 	<string name="MBAlreadyRunning">
 		Aplikacja [APP_NAME] została już uruchomiona.
-Sprawdź czy Twój pasek aplikacji nie ma zminimaliwoanych okien programu.
+Sprawdź czy Twój pasek aplikacji nie ma zminimalizowanych okien programu.
 Jeżeli nadal otrzymujesz ten komunikat, uruchom swój komputer ponownie.
 	</string>
 	<string name="MBFrozenCrashed">
@@ -1977,7 +1977,7 @@ Czy chcesz wysłać raport na temat zawieszenia?
 	</string>
 	<string name="MBNoDirectX">
 		Aplikacja [APP_NAME] nie wykryła oprogramowania DirectX 9.0b lub wersji nowszej.
-[APP_NAME] używa oprogramowaniau DirectX w celu detekcji dysku twardego i/lub nieaktualizowanych dysków twardych, które mogą przyczynić się do obniżenia stabilności, wydajności systemoweu oraz zawieszeń. Jeżeli chcesz uruchomić aplikację [APP_NAME] bez problemów, doradzamy korzystanie z uruchomionym oprogramowaniem min. DirectX 9.0b.
+[APP_NAME] używa oprogramowaniau DirectX w celu wykrycia dysku twardego i/lub nieaktualizowanych dysków twardych, które mogą przyczynić się do obniżenia stabilności, wydajności systemowej oraz zawieszeń. Jeżeli chcesz uruchomić aplikację [APP_NAME] bez problemów, doradzamy korzystanie z uruchomionym oprogramowaniem min. DirectX 9.0b.
 
 Czy chcesz kontynuować?
 	</string>
@@ -1995,7 +1995,7 @@ Prosimy o pobranie najnowszej wersji ze strony internetowej: www.secondlife.com.
 		BÅ‚Ä…d
 	</string>
 	<string name="MBFullScreenErr">
-		Niemożliwość uruchomienia trybu pełnoekranowego w proporcji [WIDTH] x [HEIGHT].
+		Nie można uruchomić trybu pełnoekranowego w proporcji [WIDTH] x [HEIGHT].
 Uruchomione w oknie.
 	</string>
 	<string name="MBDestroyWinFailed">
@@ -2014,11 +2014,11 @@ Uruchomione w oknie.
 		Brak otrzymania formatu pikselowego opisu
 	</string>
 	<string name="MBTrueColorWindow">
-		Aplikacja [APP_NAME] wymaga ustawienia Koloru na (32-bit) do uruchomienia.
+		Aplikacja [APP_NAME] wymaga ustawienia koloru na (32-bit) do uruchomienia.
 Sprawdź swoje ustawienia dla wyświetlacza i ustaw tryb koloru na 32-bity.
 	</string>
 	<string name="MBAlpha">
-		Aplikacja [APP_NAME] nie może zostać uruchomiona z powodu niemożliwości dostania się na kanał 8 bitowy alpha. Najcześciej jest to spowodowane błędami sterowników karty video.
+		Aplikacja [APP_NAME] nie może zostać uruchomiona, ponieważ nie jest możliwe dostanie się na kanał 8 bitowy alpha. Najcześciej jest to spowodowane błędami sterowników karty video.
 Upewnij się, że posiadasz najnowsze aktualizacje sterowników karty video.
 Dodatkowo, sprawdź czy Twój monitor posiada poprawną konfigurację koloru (32-bity) w Panelu Kontroli &gt; Display &gt; Ustawienia.
 Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
@@ -2068,34 +2068,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Pasemka
 	</string>
 	<string name="Beady Eyes">
-		Oczy Załzawione
+		Oczy załzawione
 	</string>
 	<string name="Belly Size">
-		Rozmiar Brzucha
+		Rozmiar brzucha
 	</string>
 	<string name="Big">
 		Duży
 	</string>
 	<string name="Big Butt">
-		Duży Pośladek
+		Duży pośladek
 	</string>
 	<string name="Big Hair Back">
-		Duże Włosy: z tyłu
+		Duże włosy: z tyłu
 	</string>
 	<string name="Big Hair Front">
-		Duże Włosy: z przodu
+		Duże włosy: z przodu
 	</string>
 	<string name="Big Hair Top">
-		Duże Włosy: z góry
+		Duże włosy: z góry
 	</string>
 	<string name="Big Head">
-		Duża Głowa
+		Duża głowa
 	</string>
 	<string name="Big Pectorals">
-		Duże Mięśnie Piersiowe
+		Duże mięśnie piersiowe
 	</string>
 	<string name="Big Spikes">
-		Duże Kolce
+		Duże kolce
 	</string>
 	<string name="Black">
 		Czarne
@@ -2104,7 +2104,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Blond
 	</string>
 	<string name="Blonde Hair">
-		WÅ‚osy Blond
+		WÅ‚osy blond
 	</string>
 	<string name="Blush">
 		Rumieniec
@@ -2125,10 +2125,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Piegi
 	</string>
 	<string name="Body Thick">
-		Zagęszczenie Ciała
+		Zagęszczenie ciała
 	</string>
 	<string name="Body Thickness">
-		Grubość Ciała
+		Grubość ciała
 	</string>
 	<string name="Body Thin">
 		Szczupłość
@@ -2155,25 +2155,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Rozmiar czoła
 	</string>
 	<string name="Bug Eyes">
-		Bug Eyes
+		Wytrzeszcz oczu
 	</string>
 	<string name="Bugged Eyes">
-		Bugged Eyes
+		Wytrzeszczone oczy
 	</string>
 	<string name="Bulbous">
 		Bulwiasty
 	</string>
 	<string name="Bulbous Nose">
-		Bulwiasty Nos
+		Bulwiasty nos
 	</string>
 	<string name="Bushy Eyebrows">
-		Bujne Brwi
+		Bujne brwi
 	</string>
 	<string name="Bushy Hair">
-		Bujne WÅ‚osy
+		Bujne włosy
 	</string>
 	<string name="Butt Size">
-		Rozmiar Pośladków
+		Rozmiar pośladków
 	</string>
 	<string name="bustle skirt">
 		Bustle Skirt
@@ -2224,7 +2224,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Rozszczepienie
 	</string>
 	<string name="Close Set Eyes">
-		Close Set Eyes
+		Oczy blisko ustawione
 	</string>
 	<string name="Closed">
 		Zamknięte
@@ -2236,10 +2236,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Zamknięte z przodu
 	</string>
 	<string name="Closed Left">
-		Lewe Oko zamknięte
+		Lewe oko zamknięte
 	</string>
 	<string name="Closed Right">
-		Prawe Oko zamknięte
+		Prawe oko zamknięte
 	</string>
 	<string name="Coin Purse">
 		Coin Purse
@@ -2251,10 +2251,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Kołnierz z przodu
 	</string>
 	<string name="Corner Down">
-		Corner Down
+		Kącik w dół
 	</string>
 	<string name="Corner Up">
-		Corner Up
+		Kącik w górę
 	</string>
 	<string name="Creased">
 		Pognieciony
@@ -2263,7 +2263,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Skrzywienie nosa
 	</string>
 	<string name="Cuff Flare">
-		Cuff Flare
+		Szeroki rękaw
 	</string>
 	<string name="Dark">
 		Ciemne
@@ -2278,7 +2278,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Glębokie
 	</string>
 	<string name="Default Heels">
-		Domyślne Buty na Obcasie
+		Domyślne buty na obcasie
 	</string>
 	<string name="Dense">
 		Gęstość
@@ -2347,13 +2347,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Długość rzęs
 	</string>
 	<string name="Eyeliner">
-		Eyeliner
+		Kredka do oczu
 	</string>
 	<string name="Eyeliner Color">
-		Kolor Eyeliner&apos;a
+		Kolor kredki do oczu&apos;a
 	</string>
 	<string name="Eyes Bugged">
-		Eyes Bugged
+		Wytrzeszczone oczy
 	</string>
 	<string name="Face Shear">
 		Usunięcie twarzy
@@ -2362,7 +2362,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Detale twarzy
 	</string>
 	<string name="Far Set Eyes">
-		Far Set Eyes
+		Oczy szeroko rozstawione
 	</string>
 	<string name="Fat Lips">
 		Grube usta
@@ -2371,7 +2371,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Kobieta
 	</string>
 	<string name="Fingerless">
-		Fingerless
+		Bez palców
 	</string>
 	<string name="Fingers">
 		Palce
@@ -2404,7 +2404,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Piegi
 	</string>
 	<string name="Front Fringe">
-		Przednia Grzywka
+		Przednia grzywka
 	</string>
 	<string name="Full Back">
 		Gęstość włosów po bokach
@@ -2497,13 +2497,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Wysokie obcasy
 	</string>
 	<string name="High Jaw">
-		High Jaw
+		Wysoka szczęka
 	</string>
 	<string name="High Platforms">
-		High Platforms
+		Wysokie obcasy
 	</string>
 	<string name="High and Tight">
-		High and Tight
+		Wysokie i wÄ…skie
 	</string>
 	<string name="Higher">
 		Wyżej
@@ -2524,7 +2524,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Wewnętrzna intensywność cienia
 	</string>
 	<string name="Inner Eye Corner">
-		Wenwętrzny bok oka
+		Wewnętrzny bok oka
 	</string>
 	<string name="Inner Eye Shadow">
 		Wewnętrzny cień oka
@@ -2539,25 +2539,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Zmarszczki na kurtce
 	</string>
 	<string name="Jaw Angle">
-		Jaw Angle
+		Kąt szczęki
 	</string>
 	<string name="Jaw Jut">
-		Jaw Jut
+		Wystająca szczęka
 	</string>
 	<string name="Jaw Shape">
-		Jaw Shape
+		Kształt szczęki
 	</string>
 	<string name="Join">
 		ZÅ‚Ä…cz
 	</string>
 	<string name="Jowls">
-		Jowls
+		Dolna część policzka
 	</string>
 	<string name="Knee Angle">
 		KÄ…t kolana
 	</string>
 	<string name="Knock Kneed">
-		Knock Kneed
+		Iksowate nogi
 	</string>
 	<string name="Large">
 		Duże
@@ -2566,7 +2566,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Duże dłonie
 	</string>
 	<string name="Left Part">
-		Left Part
+		Lewa część
 	</string>
 	<string name="Leg Length">
 		Długość nogi
@@ -2584,13 +2584,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Less Curtains
 	</string>
 	<string name="Less Freckles">
-		Mniej Piegów
+		Mniej piegów
 	</string>
 	<string name="Less Full">
-		Mniej Pełne
+		Mniej pełne
 	</string>
 	<string name="Less Gravity">
-		Mniej Ciężaru
+		Mniej ciężaru
 	</string>
 	<string name="Less Love">
 		Less Love
@@ -2602,7 +2602,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Mniej umięśnienia
 	</string>
 	<string name="Less Rosy">
-		Less Rosy
+		Mniej zaróżowione
 	</string>
 	<string name="Less Round">
 		Mniej zaaokrÄ…glone
@@ -2623,7 +2623,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Lżejsze
 	</string>
 	<string name="Lip Cleft">
-		Szerokość Rozszczepienia górnej wargi
+		Szerokość rozszczepienia górnej wargi
 	</string>
 	<string name="Lip Cleft Depth">
 		Głębokość rozszczepienia górnej wargi
@@ -2701,7 +2701,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Niska szczęka
 	</string>
 	<string name="Low Platforms">
-		Low Platforms
+		Niskie obcasy
 	</string>
 	<string name="Low and Loose">
 		Niskie i luźne
@@ -2710,10 +2710,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Niżej
 	</string>
 	<string name="Lower Bridge">
-		Lower Bridge
+		Dolny mostek
 	</string>
 	<string name="Lower Cheeks">
-		Lower Cheeks
+		Niższe policzki
 	</string>
 	<string name="Male">
 		Mężczyzna
@@ -2725,7 +2725,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Więcej
 	</string>
 	<string name="More Blush">
-		More Blush
+		Bardziej zarumienione
 	</string>
 	<string name="More Body Fat">
 		Więcej zawartości tkanki tłuszczowej
@@ -2734,13 +2734,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		More Curtains
 	</string>
 	<string name="More Eyeshadow">
-		More Eyeshadow
+		Ciemniejszy cień oczu
 	</string>
 	<string name="More Freckles">
 		Więcej piegów
 	</string>
 	<string name="More Full">
-		More Full
+		Bardziej pełne
 	</string>
 	<string name="More Gravity">
 		Więcej ciężaru
@@ -2761,7 +2761,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Więcej umięśnienia
 	</string>
 	<string name="More Rosy">
-		More Rosy
+		Bardziej zaróżowione
 	</string>
 	<string name="More Round">
 		Więcej zaokrąglenia
@@ -2770,7 +2770,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		More Saddle
 	</string>
 	<string name="More Sloped">
-		More Sloped
+		Bardziej spadziste
 	</string>
 	<string name="More Square">
 		Więcej kwadratowy
@@ -2779,7 +2779,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Więcej górnej wargi
 	</string>
 	<string name="More Vertical">
-		More Vertical
+		Bardziej pionowe
 	</string>
 	<string name="More Volume">
 		Więcej objętości
@@ -2791,10 +2791,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		WÄ…sy
 	</string>
 	<string name="Mouth Corner">
-		KÄ…ciki Ust
+		KÄ…ciki ust
 	</string>
 	<string name="Mouth Position">
-		Pozycja Ust
+		Pozycja ust
 	</string>
 	<string name="Mowhawk">
 		Mowhawk
@@ -2815,13 +2815,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		WÄ…skie
 	</string>
 	<string name="Narrow Back">
-		Wąski Tył
+		Wąski tył
 	</string>
 	<string name="Narrow Front">
-		Wąski Przód
+		Wąski przód
 	</string>
 	<string name="Narrow Lips">
-		WÄ…skie Usta
+		WÄ…skie usta
 	</string>
 	<string name="Natural">
 		Naturalne
@@ -2833,10 +2833,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Grubość karku
 	</string>
 	<string name="No Blush">
-		No Blush
+		Brak rumieńca
 	</string>
 	<string name="No Eyeliner">
-		Brak Eyeliner&apos;s
+		Brak kredki do oczu&apos;s
 	</string>
 	<string name="No Eyeshadow">
 		Brak cienia pod powiekÄ…
@@ -2938,7 +2938,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Zewnętrzny cień
 	</string>
 	<string name="Overbite">
-		Overbite
+		Przodozgryz górny
 	</string>
 	<string name="Package">
 		Package
@@ -2947,13 +2947,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Pomalowane paznokcie
 	</string>
 	<string name="Pale">
-		Pale
+		Blady
 	</string>
 	<string name="Pants Crotch">
 		Krocze spodni
 	</string>
 	<string name="Pants Fit">
-		Pants Fit
+		Dopasowanie spodni
 	</string>
 	<string name="Pants Length">
 		Długość spodni
@@ -2968,7 +2968,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Część
 	</string>
 	<string name="Part Bangs">
-		Part Bangs
+		Część grzywki
 	</string>
 	<string name="Pectorals">
 		Mięśnie klatki piersiowej
@@ -2977,7 +2977,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Pigment
 	</string>
 	<string name="Pigtails">
-		Pigtails
+		Warkocz
 	</string>
 	<string name="Pink">
 		Różowe
@@ -2986,16 +2986,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Róż
 	</string>
 	<string name="Platform Height">
-		Platform Height
+		Wysokie obcasy
 	</string>
 	<string name="Platform Width">
-		Platform Width
+		Szerokie obcasy
 	</string>
 	<string name="Pointy">
 		Pointy
 	</string>
 	<string name="Pointy Heels">
-		Pointy Heels
+		Obcasy pointy
 	</string>
 	<string name="Ponytail">
 		Kucyk
@@ -3004,22 +3004,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Poofy Skirt
 	</string>
 	<string name="Pop Left Eye">
-		Pop Left Eye
+		Wybałuszone lewe oko
 	</string>
 	<string name="Pop Right Eye">
-		Pop Right Eye
+		Wybałuszone prawe oko
 	</string>
 	<string name="Puffy">
-		Puffy
+		Opuchnięty
 	</string>
 	<string name="Puffy Eyelids">
-		Spuchnięte Powieki
+		Spuchnięte powieki
 	</string>
 	<string name="Rainbow Color">
-		Kolor Tęczy
+		Kolor tęczy
 	</string>
 	<string name="Red Hair">
-		Czerwone WÅ‚osy
+		Czerwone włosy
 	</string>
 	<string name="Regular">
 		Regularne
@@ -3040,13 +3040,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Rudy
 	</string>
 	<string name="Rumpled Hair">
-		Włosy w Nieładzie
+		Włosy w nieładzie
 	</string>
 	<string name="Saddle Bags">
 		Saddle Bags
 	</string>
 	<string name="Scrawny Leg">
-		Scrawny Leg
+		Koścista noga
 	</string>
 	<string name="Separate">
 		Odzielne
@@ -3085,13 +3085,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Przesuń w prawo
 	</string>
 	<string name="Shirt Bottom">
-		Dolna Część Koszulki
+		Dolna część koszuli
 	</string>
 	<string name="Shirt Fit">
-		Shirt Fit
+		Dopasowanie koszuli
 	</string>
 	<string name="Shirt Wrinkles">
-		Zmarszczki na koszulce
+		Zmarszczki na koszuli
 	</string>
 	<string name="Shoe Height">
 		Wysokość buta
@@ -3109,13 +3109,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Krótki kark
 	</string>
 	<string name="Short Pigtails">
-		Short Pigtails
+		Krótkie warkoczyki
 	</string>
 	<string name="Short Ponytail">
-		Krótki Kucyk
+		Krótki kucyk
 	</string>
 	<string name="Short Sideburns">
-		Krótkie Baczki
+		Krótkie baczki
 	</string>
 	<string name="Short Torso">
 		Krótki tułów
@@ -3133,19 +3133,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Baczki
 	</string>
 	<string name="Sides Hair">
-		Boczne WÅ‚osy
+		Boczne włosy
 	</string>
 	<string name="Sides Hair Down">
-		Boczne Włosy w Dół
+		Boczne włosy w dół
 	</string>
 	<string name="Sides Hair Up">
-		Boczne Włosy do Góry
+		Boczne włosy do góry
 	</string>
 	<string name="Skinny Neck">
-		Smukły Kark
+		Smukły kark
 	</string>
 	<string name="Skirt Fit">
-		Skirt Fit
+		Dopasowanie spódnicy
 	</string>
 	<string name="Skirt Length">
 		Długość spódnicy
@@ -3157,19 +3157,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Długość rękawów
 	</string>
 	<string name="Sleeve Looseness">
-		Luźność rękawów
+		Luźne rękawy
 	</string>
 	<string name="Slit Back">
-		Slit: Back
+		Rozcięcie: tył
 	</string>
 	<string name="Slit Front">
-		Slit: Front
+		Rozcięcie: przód
 	</string>
 	<string name="Slit Left">
-		Slit: Left
+		Rozcięcie: po prawej
 	</string>
 	<string name="Slit Right">
-		Slit: Right
+		Rozcięcie: po lewej
 	</string>
 	<string name="Small">
 		Małe
@@ -3190,13 +3190,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Długość skarpetek
 	</string>
 	<string name="Soulpatch">
-		Soulpatch
+		Zarost na dolnej wardze
 	</string>
 	<string name="Sparse">
-		Sparse
+		Rzadki
 	</string>
 	<string name="Spiked Hair">
-		Kolczaste WÅ‚osy
+		Kolczaste włosy
 	</string>
 	<string name="Square">
 		Kwadratowe
@@ -3211,13 +3211,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Rozciągnięta głowa
 	</string>
 	<string name="Sunken">
-		Sunken
+		Zapadnięte
 	</string>
 	<string name="Sunken Chest">
-		Sunken Chest
+		Zapadnięta klatka piersiowa
 	</string>
 	<string name="Sunken Eyes">
-		Sunken Eyes
+		Zapadnięte oczy
 	</string>
 	<string name="Sweep Back">
 		Sweep Back
@@ -3229,10 +3229,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Wysokość
 	</string>
 	<string name="Taper Back">
-		Taper Back
+		Zwężenie do przodu
 	</string>
 	<string name="Taper Front">
-		Taper Front
+		Zwężenie do tyłu
 	</string>
 	<string name="Thick Heels">
 		Grube obcasy
@@ -3295,7 +3295,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Uncreased
 	</string>
 	<string name="Underbite">
-		Underbite
+		Przodozgryz
 	</string>
 	<string name="Unnatural">
 		Nienaturalne
@@ -3322,7 +3322,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Wysokość talii
 	</string>
 	<string name="Well-Fed">
-		Well-Fed
+		Dobrze odżywiony
 	</string>
 	<string name="White Hair">
 		Białe włosy
@@ -3346,10 +3346,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Zmarszczki
 	</string>
 	<string name="LocationCtrlAddLandmarkTooltip">
-		Dodaj do Zapisanych Miejsc
+		Dodaj do landmarków
 	</string>
 	<string name="LocationCtrlEditLandmarkTooltip">
-		Edytuj Zapisane Miejsca
+		Edytuj Landmarki
 	</string>
 	<string name="LocationCtrlInfoBtnTooltip">
 		Zobacz więcej szczegółów na temat obecnej lokalizacji
@@ -3445,7 +3445,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Rozmowa głosowa...
 	</string>
 	<string name="connected-im">
-		Połączono, kliknij Zakończ Rozmowe aby się rozłączyć
+		Połączono, kliknij Zakończ rozmowę aby się rozłączyć
 	</string>
 	<string name="hang_up-im">
 		Rozmowa głosowa zakończona
@@ -3517,7 +3517,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		[SOURCES] powiedział/a coś nowego
 	</string>
 	<string name="session_initialization_timed_out_error">
-		Inicjalizacja sesji wygasła
+		Inicjacja sesji wygasła
 	</string>
 	<string name="voice_morphing_url">
 		http://secondlife.com/landing/voicemorphing
@@ -3538,7 +3538,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Zapłacono [AMOUNT]L$ [REASON].
 	</string>
 	<string name="for a parcel of land">
-		za posiadłość
+		za Posiadłość
 	</string>
 	<string name="for a land access pass">
 		za przepustkę na Posiadłość
@@ -3627,7 +3627,7 @@ Raport o Nadużyciu
 		Nowa spódnica
 	</string>
 	<string name="New Alpha">
-		Nowa Alpha
+		Nowa alpha
 	</string>
 	<string name="New Tattoo">
 		Nowy tatuaż
@@ -3636,7 +3636,7 @@ Raport o Nadużyciu
 		Nieaktualne ubranie/część ciała
 	</string>
 	<string name="New Gesture">
-		Nowy gest
+		Nowa gesturka
 	</string>
 	<string name="New Script">
 		Nowy skrypt
@@ -3675,7 +3675,7 @@ Raport o Nadużyciu
 		Mężczyzna - Get lost
 	</string>
 	<string name="Male - Blow kiss">
-		Mężczyzna - Blow kiss
+		Mężczyzna - Całusek
 	</string>
 	<string name="Male - Boo">
 		Mężczyzna - Boo
@@ -3717,7 +3717,7 @@ Raport o Nadużyciu
 		Kobieta - Get lost
 	</string>
 	<string name="Female - Blow kiss">
-		Kobieta - Blow kiss
+		Kobieta - Całusek
 	</string>
 	<string name="Female - Boo">
 		Kobieta - Boo
@@ -3802,7 +3802,7 @@ Raport o Nadużyciu
 		Funkcje
 	</string>
 	<string name="Group Identity">
-		Status Grupy
+		Status grupy
 	</string>
 	<string name="Parcel Management">
 		Parcel Management
diff --git a/indra/newview/skins/default/xui/pl/teleport_strings.xml b/indra/newview/skins/default/xui/pl/teleport_strings.xml
index 6c4723dd7ec919c175a96200054fdd4c1140a7a5..57fb55bf4ca5d731e649b681b3e9bb417dc163cb 100644
--- a/indra/newview/skins/default/xui/pl/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/pl/teleport_strings.xml
@@ -2,12 +2,12 @@
 <teleport_messages>
 	<message_set name="errors">
 		<message name="invalid_tport">
-			Przepraszamy, ale pojawił się błąd podczas Twojej próby teleportacji. By ponowić teleportację, wyloguj się i zaloguj ponownie.
-Jeżeli nadal otrzymujesz komunikat błędu teleportacji, sprawdź [SUPPORT_SITE].
+			Przepraszamy, ale pojawił się błąd podczas Twojej próby teleportacji. Aby ponowić teleportację, wyloguj się i zaloguj ponownie.
+Jeżeli nadal otrzymujesz komunikat o błędzie teleportacji, sprawdź [SUPPORT_SITE].
 		</message>
 		<message name="invalid_region_handoff">
-			Przepraszamy, ale pojawił się błąd podczas próby zmiany regionu. By ponowić próbę przejścia na drugi region, wyloguj się i zaloguj ponownie.
-Jeżeli nadal otrzymujesz komunikat błędu podczas przejścia na drugi region, sprawdź [SUPPORT_SITE].
+			Przepraszamy, ale pojawił się błąd podczas próby zmiany regionu. Aby ponowić próbę przejścia na drugi region, wyloguj się i zaloguj ponownie.
+Jeżeli nadal otrzymujesz komunikat o błędzie podczas przejścia na drugi region, sprawdź [SUPPORT_SITE].
 		</message>
 		<message name="blocked_tport">
 			Przepraszamy, teleportacja jest chwilowo niedostępna. Spróbuj jeszcze raz.
@@ -26,7 +26,7 @@ Jeśli nadal nie możesz się teleportować wyloguj się i ponownie zaloguj.
 			Czekamy na Twoje akcesoria. Możesz poczekać kilka minut lub zrobić relog przed następną próbą teleportacji.
 		</message>
 		<message name="too_many_uploads_tport">
-			Obecnie ten region ma problemy z ładowaniem obiektów w związku z czym teleportacja bardzo sie opóznia.
+			Obecnie ten region ma problemy z ładowaniem obiektów, w związku z czym teleportacja bardzo sie opóźnia.
 Spróbuj jeszcze raz za kilka minut albo teleportuj się do mniej zatłoczonego miejsca.
 		</message>
 		<message name="expired_tport">
@@ -36,7 +36,7 @@ Spróbuj jeszcze raz za kilka minut albo teleportuj się do mniej zatłoczonego
 			Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut.
 		</message>
 		<message name="no_host">
-			Nie możemy znaleść miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć.
+			Nie możemy znaleźć miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć.
 Spróbuj jeszcze raz za kilka minut.
 		</message>
 		<message name="no_inventory_host">
@@ -57,7 +57,7 @@ Spróbuj jeszcze raz za kilka minut.
 			Wysyłanie do miejsca startu.
 		</message>
 		<message name="sending_landmark">
-			Lokalizowanie zapamiętanego miejsca (LM).
+			Lokalizowanie landmarka(LM).
 		</message>
 		<message name="completing">
 			Finalizowanie teleportacji.
diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp
index 495073cf670eefa99fe6088aff8aab371741b9da..5f3dc5b1623feb8dd0e140dc21565c3fc8f4f45c 100644
--- a/indra/newview/tests/llmediadataclient_test.cpp
+++ b/indra/newview/tests/llmediadataclient_test.cpp
@@ -64,8 +64,8 @@
 
 #define MEDIA_DATA "\
 <array>														\
-<string>foo</string>										\
-<string>bar</string>										\
+<string>http://foo.example.com</string>										\
+<string>http://bar.example.com</string>										\
 <string>baz</string>										\
 </array>"
 
@@ -161,6 +161,8 @@ public:
 		{ return mRep["media_data"].size(); }
 	virtual LLSD getMediaDataLLSD(U8 index) const
 		{ return mRep["media_data"][(LLSD::Integer)index]; }
+	virtual bool isCurrentMediaUrl(U8 index, const std::string &url) const
+		{ return (mRep["media_data"][(LLSD::Integer)index].asString() == url); }
 	virtual LLUUID getID() const 
 		{ return mRep["uuid"]; }
 	virtual void mediaNavigateBounceBack(U8 index)
@@ -561,38 +563,39 @@ namespace tut
 			mdc->fetchMedia(o2);
 			mdc->fetchMedia(o3);
 			mdc->fetchMedia(o4);
+
+			ensure("is in queue 1", mdc->isInQueue(o1));
+			ensure("is in queue 2", mdc->isInQueue(o2));
+			ensure("is in queue 3", mdc->isInQueue(o3));
+			ensure("is in queue 4", mdc->isInQueue(o4));
+			ensure("post records", gPostRecords->size(), 0);
 			
-			// and mark the second and fourth ones dead.
+			// and mark the second and fourth ones dead.  Call removeFromQueue when marking dead, since this is what LLVOVolume will do.
 			dynamic_cast<LLMediaDataClientObjectTest*>(static_cast<LLMediaDataClientObject*>(o2))->markDead();
+			mdc->removeFromQueue(o2);
 			dynamic_cast<LLMediaDataClientObjectTest*>(static_cast<LLMediaDataClientObject*>(o4))->markDead();
+			mdc->removeFromQueue(o4);
 
+			// The removeFromQueue calls should remove the second and fourth ones
 			ensure("is in queue 1", mdc->isInQueue(o1));
-			ensure("is in queue 2", mdc->isInQueue(o2));
+			ensure("is not in queue 2", !mdc->isInQueue(o2));
 			ensure("is in queue 3", mdc->isInQueue(o3));
-			ensure("is in queue 4", mdc->isInQueue(o4));
+			ensure("is not in queue 4", !mdc->isInQueue(o4));
 			ensure("post records", gPostRecords->size(), 0);
 			
 			::pump_timers();
 			
-			// The first tick should remove the first one 
+			// The first tick should process the first item
 			ensure("is not in queue 1", !mdc->isInQueue(o1));
-			ensure("is in queue 2", mdc->isInQueue(o2));
+			ensure("is not in queue 2", !mdc->isInQueue(o2));
 			ensure("is in queue 3", mdc->isInQueue(o3));
-			ensure("is in queue 4", mdc->isInQueue(o4));
+			ensure("is not in queue 4", !mdc->isInQueue(o4));
 			ensure("post records", gPostRecords->size(), 1);
 			
 			::pump_timers();
 			
-			// The second tick should skip the second and remove the third
-			ensure("is not in queue 2", !mdc->isInQueue(o2));
+			// The second tick should process the third, emptying the queue
 			ensure("is not in queue 3", !mdc->isInQueue(o3));
-			ensure("is in queue 4", mdc->isInQueue(o4));
-			ensure("post records", gPostRecords->size(), 2);
-
-			::pump_timers();
-
-			// The third tick should skip the fourth one and empty the queue.
-			ensure("is not in queue 4", !mdc->isInQueue(o4));
 			ensure("post records", gPostRecords->size(), 2);
 
 			ensure("queue empty", mdc->isEmpty());
@@ -703,7 +706,7 @@ namespace tut
 			// queue up all 4 objects.  The first two should be in the sorted
 			// queue [2 1], the second in the round-robin queue.  The queues
 			// are serviced interleaved, so we should expect:
-			// 2, 4, 1, 3
+			// 2, 3, 1, 4
 			mdc->fetchMedia(o1);
 			mdc->fetchMedia(o2);
 			mdc->fetchMedia(o3);
@@ -722,8 +725,8 @@ namespace tut
 			++tick_num;
 			
 			// 1 The first tick should remove object 2
-			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
 			ensure(STR(tick_num) + ". is in queue 1", mdc->isInQueue(o1));
+			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
 			ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3));
 			ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4));
 			ensure(STR(tick_num) + ". post records", gPostRecords->size(), 1);
@@ -732,22 +735,21 @@ namespace tut
 			::pump_timers();
 			++tick_num;
 			
-			// 2 The second tick should send object 4, but it will still be
-			// "in the queue"
-			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
+			// 2 The second tick should send object 3
 			ensure(STR(tick_num) + ". is in queue 1", mdc->isInQueue(o1));
-			ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3));
+			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
+			ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3));
 			ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4));
 			ensure(STR(tick_num) + ". post records", gPostRecords->size(), 2);
-			ensure(STR(tick_num) + ". post object id", (*gPostRecords)[1]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_4));
+			ensure(STR(tick_num) + ". post object id", (*gPostRecords)[1]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_3));
 			
 			::pump_timers();
 			++tick_num;
 			
 			// 3 The third tick should remove object 1
-			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
 			ensure(STR(tick_num) + ". is not in queue 1", !mdc->isInQueue(o1));
-			ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3));
+			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
+			ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3));
 			ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4));
 			ensure(STR(tick_num) + ". post records", gPostRecords->size(), 3);
 			ensure(STR(tick_num) + ". post object id", (*gPostRecords)[2]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_1));
@@ -755,22 +757,20 @@ namespace tut
 			::pump_timers();
 			++tick_num;
 			
-			// 4 The fourth tick should send object 3, but it will still be
-			// "in the queue"
-			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
+			// 4 The fourth tick should send object 4
 			ensure(STR(tick_num) + ". is not in queue 1", !mdc->isInQueue(o1));
-			ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3));
-			ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4));
+			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
+			ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3));
+			ensure(STR(tick_num) + ". is not in queue 4", !mdc->isInQueue(o4));
 			ensure(STR(tick_num) + ". post records", gPostRecords->size(), 4);
-			ensure(STR(tick_num) + ". post object id", (*gPostRecords)[3]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_3));
+			ensure(STR(tick_num) + ". post object id", (*gPostRecords)[3]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_4));
 			
 			::pump_timers();
 			++tick_num;
 						
-			// 5 The fifth tick should now identify objects 3 and 4 as no longer
-			// needing "updating", and remove them from the queue
-			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
+			// 5 The fifth tick should not change the state of anything.
 			ensure(STR(tick_num) + ". is not in queue 1", !mdc->isInQueue(o1));
+			ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2));
 			ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3));
 			ensure(STR(tick_num) + ". is not in queue 4", !mdc->isInQueue(o4));
 			ensure(STR(tick_num) + ". post records", gPostRecords->size(), 4);
@@ -920,7 +920,7 @@ namespace tut
 			
 			// But, we need to clear the queue, or else we won't destroy MDC...
 			// this is a strange interplay between the queue timer and the MDC
-			ensure("o2 couldn't be removed from queue", mdc->removeFromQueue(o2));
+			mdc->removeFromQueue(o2);
 			// tick
 			::pump_timers();
 		}
@@ -929,4 +929,41 @@ namespace tut
 		ensure("refcount of o3", o3->getNumRefs(), 1);
 		ensure("refcount of o4", o4->getNumRefs(), 1);		
 	}
+
+	template<> template<>
+	void mediadataclient_object_t::test<13>()
+	{
+		//
+		// Test supression of redundant navigates.
+		//
+		LOG_TEST(13);
+		
+		LLMediaDataClientObject::ptr_t o1 = new LLMediaDataClientObjectTest(_DATA(VALID_OBJECT_ID_1,"1.0","true"));
+		{
+			LLPointer<LLObjectMediaNavigateClient> mdc = new LLObjectMediaNavigateClient(NO_PERIOD,NO_PERIOD);
+			const char *TEST_URL = "http://foo.example.com";
+			const char *TEST_URL_2 = "http://example.com";
+			mdc->navigate(o1, 0, TEST_URL);
+			mdc->navigate(o1, 1, TEST_URL);
+			mdc->navigate(o1, 0, TEST_URL_2);
+			mdc->navigate(o1, 1, TEST_URL_2);
+			
+			// This should add two requests to the queue, one for face 0 of the object and one for face 1.
+			
+			ensure("before pump: 1 is in queue", mdc->isInQueue(o1));
+
+			::pump_timers();
+
+			ensure("after first pump: 1 is in queue", mdc->isInQueue(o1));
+
+			::pump_timers();
+
+			ensure("after second pump: 1 is not in queue", !mdc->isInQueue(o1));
+
+			ensure("first post has correct url", (*gPostRecords)[0]["body"][LLMediaEntry::CURRENT_URL_KEY].asString(), std::string(TEST_URL_2));
+			ensure("second post has correct url", (*gPostRecords)[1]["body"][LLMediaEntry::CURRENT_URL_KEY].asString(), std::string(TEST_URL_2));
+
+		}		
+	}
+	
 }
diff --git a/indra/newview/tests/llsecapi_test.cpp b/indra/newview/tests/llsecapi_test.cpp
index d5b6555b6ef9a2df7cc42ed1ed9adac5644fddf0..90cacfe3c9f78fc4b21a3756d1c9b96fab780695 100644
--- a/indra/newview/tests/llsecapi_test.cpp
+++ b/indra/newview/tests/llsecapi_test.cpp
@@ -29,6 +29,7 @@
 #include "../llviewernetwork.h"
 #include "../test/lltut.h"
 #include "../llsecapi.h"
+#include "../llsechandler_basic.h"
 #include "../../llxml/llcontrol.h"
 
 
@@ -50,82 +51,21 @@ std::string LLControlGroup::getString(const std::string& name)
 
 
 LLControlGroup gSavedSettings("test");
-class LLSecAPIBasicHandler : public LLSecAPIHandler
-{
-protected:
-	LLPointer<LLCertificateChain> mCertChain;
-	LLPointer<LLCertificate> mCert;
-	LLPointer<LLCertificateStore> mCertStore;
-	LLSD mLLSD;
-	
-public:
-	LLSecAPIBasicHandler() {}
-	
-	virtual ~LLSecAPIBasicHandler() {}
-	
-	// instantiate a certificate from a pem string
-	virtual LLPointer<LLCertificate> getCertificate(const std::string& pem_cert) 
-	{ 
-		return mCert; 
-	}
-	
-	
-	// instiate a certificate from an openssl X509 structure
-	virtual LLPointer<LLCertificate> getCertificate(X509* openssl_cert) 
-	{	
-		return mCert; 
-	}
-	
-	
-	// instantiate a chain from an X509_STORE_CTX
-	virtual LLPointer<LLCertificateChain> getCertificateChain(const X509_STORE_CTX* chain) 
-	{ 
-		return mCertChain; 
-	}
-	
-	// instantiate a cert store given it's id.  if a persisted version
-	// exists, it'll be loaded.  If not, one will be created (but not
-	// persisted)
-	virtual LLPointer<LLCertificateStore> getCertificateStore(const std::string& store_id) 
-	{ 
-		return mCertStore; 
-	}
-	
-	// persist data in a protected store
-	virtual void setProtectedData(const std::string& data_type,
-								  const std::string& data_id,
-								  const LLSD& data) {}
-	
-	// retrieve protected data
-	virtual LLSD getProtectedData(const std::string& data_type,
-								  const std::string& data_id) 
-	{ 
-		return mLLSD;
-	}
-	
-	virtual void deleteProtectedData(const std::string& data_type,
-									 const std::string& data_id)
-	{
-	}
-	
-	virtual LLPointer<LLCredential> createCredential(const std::string& grid,
-													 const LLSD& identifier, 
-													 const LLSD& authenticator)
-	{
-		LLPointer<LLCredential> cred = NULL;
-		return cred;
-	}
-	
-	virtual LLPointer<LLCredential> loadCredential(const std::string& grid)
-	{
-		LLPointer<LLCredential> cred = NULL;
-		return cred;
-	}
-	
-	virtual void saveCredential(LLPointer<LLCredential> cred, bool save_authenticator) {}
-	
-	virtual void deleteCredential(LLPointer<LLCredential> cred) {}
-};
+
+LLSecAPIBasicHandler::LLSecAPIBasicHandler() {}
+void LLSecAPIBasicHandler::init() {}
+LLSecAPIBasicHandler::~LLSecAPIBasicHandler() {}
+LLPointer<LLCertificate> LLSecAPIBasicHandler::getCertificate(const std::string& pem_cert) { return NULL; }
+LLPointer<LLCertificate> LLSecAPIBasicHandler::getCertificate(X509* openssl_cert) { return NULL; }
+LLPointer<LLCertificateChain> LLSecAPIBasicHandler::getCertificateChain(const X509_STORE_CTX* chain) { return NULL; }
+LLPointer<LLCertificateStore> LLSecAPIBasicHandler::getCertificateStore(const std::string& store_id) { return NULL; }
+void LLSecAPIBasicHandler::setProtectedData(const std::string& data_type, const std::string& data_id, const LLSD& data) {}
+LLSD LLSecAPIBasicHandler::getProtectedData(const std::string& data_type, const std::string& data_id) { return LLSD(); }
+void LLSecAPIBasicHandler::deleteProtectedData(const std::string& data_type, const std::string& data_id) {}
+LLPointer<LLCredential> LLSecAPIBasicHandler::createCredential(const std::string& grid, const LLSD& identifier, const LLSD& authenticator) { return NULL; }
+LLPointer<LLCredential> LLSecAPIBasicHandler::loadCredential(const std::string& grid) { return NULL; }
+void LLSecAPIBasicHandler::saveCredential(LLPointer<LLCredential> cred, bool save_authenticator) {}
+void LLSecAPIBasicHandler::deleteCredential(LLPointer<LLCredential> cred) {}
 
 // -------------------------------------------------------------------------------------------
 // TUT
diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp
index 753151bdd8083c19e8aa2c65dd14ba6f6e3824e9..b5adb217fd629a0fc8585e719f1e3fb0ae4657d4 100644
--- a/indra/newview/tests/llslurl_test.cpp
+++ b/indra/newview/tests/llslurl_test.cpp
@@ -73,6 +73,11 @@ LLSD LLControlGroup::getLLSD(const std::string& name)
 	return LLSD();
 }
 
+LLPointer<LLControlVariable> LLControlGroup::getControl(const std::string& name)
+{
+	ctrl_name_table_t::iterator iter = mNameTable.find(name);
+	return iter == mNameTable.end() ? LLPointer<LLControlVariable>() : iter->second;
+}
 
 LLControlGroup gSavedSettings("test");
 
diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp
index 2320201ee8fe10f0c48c14805cdb64fa63216844..d5d6ca671d4a3c1400aff8305f0763e001074670 100644
--- a/indra/newview/tests/llviewernetwork_test.cpp
+++ b/indra/newview/tests/llviewernetwork_test.cpp
@@ -73,6 +73,11 @@ LLSD LLControlGroup::getLLSD(const std::string& name)
 	return LLSD();
 }
 
+LLPointer<LLControlVariable> LLControlGroup::getControl(const std::string& name)
+{
+	ctrl_name_table_t::iterator iter = mNameTable.find(name);
+	return iter == mNameTable.end() ? LLPointer<LLControlVariable>() : iter->second;
+}
 
 LLControlGroup gSavedSettings("test");