diff --git a/doc/contributions.txt b/doc/contributions.txt
index 2a37015b014518390df6c385f1c7ad53b662a21b..99a0e7ad9ee3e879e5e2d2af687bab9d32fc0eb4 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -50,6 +50,9 @@ Alissa Sabre
         VWR-6430
         VWR-1843
         VWR-6668
+        VWR-7153
+        VWR-7168
+        VWR-7087
 Angus Boyd
 	VWR-592
 Argent Stonecutter
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index c495b7f7c6b302fe2394d68f22f95ce6b22fcb68..eb1fb6899152cb862d06c870eed9566124911030 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -20,16 +20,16 @@ else (STANDALONE)
       ${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release
       )
     set(APR_LIBRARIES 
-      debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apr-1
-      optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apr-1
+      debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apr-1.lib
+      optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apr-1.lib
       )
     set(APRUTIL_LIBRARIES 
-      debug ${WINLIBS_PREBUILT_DEBUG_DIR}/aprutil-1
-      optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/aprutil-1
+      debug ${WINLIBS_PREBUILT_DEBUG_DIR}/aprutil-1.lib
+      optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/aprutil-1.lib
       )
     set(APRICONV_LIBRARIES 
-      debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apriconv-1
-      optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apriconv-1
+      debug ${WINLIBS_PREBUILT_DEBUG_DIR}/apriconv-1.lib
+      optimized ${WINLIBS_PREBUILT_RELEASE_DIR}/apriconv-1.lib
       )
   elseif (DARWIN)
     set(APR_LIBRARIES 
diff --git a/indra/lib/python/indra/base/llsd.py b/indra/lib/python/indra/base/llsd.py
index 9561a56710e39f8347afbf42b0a49fbbdca877cc..8e71aee060e656096eb4bc24ed09f28d7ad37ae0 100644
--- a/indra/lib/python/indra/base/llsd.py
+++ b/indra/lib/python/indra/base/llsd.py
@@ -247,6 +247,78 @@ def format_xml(something):
         _g_xml_formatter = LLSDXMLFormatter()
     return _g_xml_formatter.format(something)
 
+class LLSDXMLPrettyFormatter(LLSDXMLFormatter):
+    def __init__(self, indent_atom = None):
+        # Call the super class constructor so that we have the type map
+        super(LLSDXMLPrettyFormatter, self).__init__()
+
+        # Override the type map to use our specialized formatters to
+        # emit the pretty output.
+        self.type_map[list] = self.PRETTY_ARRAY
+        self.type_map[tuple] = self.PRETTY_ARRAY
+        self.type_map[types.GeneratorType] = self.PRETTY_ARRAY,
+        self.type_map[dict] = self.PRETTY_MAP
+
+        # Private data used for indentation.
+        self._indent_level = 1
+        if indent_atom is None:
+            self._indent_atom = '  '
+        else:
+            self._indent_atom = indent_atom
+
+    def _indent(self):
+        "Return an indentation based on the atom and indentation level."
+        return self._indent_atom * self._indent_level
+
+    def PRETTY_ARRAY(self, v):
+        rv = []
+        rv.append('<array>\n')
+        self._indent_level = self._indent_level + 1
+        rv.extend(["%s%s\n" %
+                   (self._indent(),
+                    self.generate(item))
+                   for item in v])
+        self._indent_level = self._indent_level - 1
+        rv.append(self._indent())
+        rv.append('</array>')
+        return ''.join(rv)
+
+    def PRETTY_MAP(self, v):
+        rv = []
+        rv.append('<map>\n')
+        self._indent_level = self._indent_level + 1
+        keys = v.keys()
+        keys.sort()
+        rv.extend(["%s%s\n%s%s\n" %
+                   (self._indent(),
+                    self.elt('key', key),
+                    self._indent(),
+                    self.generate(v[key]))
+                   for key in keys])
+        self._indent_level = self._indent_level - 1
+        rv.append(self._indent())
+        rv.append('</map>')
+        return ''.join(rv)
+
+    def format(self, something):
+        data = []
+        data.append('<?xml version="1.0" ?>\n<llsd>')
+        data.append(self.generate(something))
+        data.append('</llsd>\n')
+        return '\n'.join(data)
+
+def format_pretty_xml(something):
+    """@brief Serialize a python object as 'pretty' llsd xml.
+
+    The output conforms to the LLSD DTD, unlike the output from the
+    standard python xml.dom DOM::toprettyxml() method which does not
+    preserve significant whitespace. 
+    This function is not necessarily suited for serializing very large
+    objects. It is not optimized by the cllsd module, and sorts on
+    dict (llsd map) keys alphabetically to ease human reading.
+    """
+    return LLSDXMLPrettyFormatter().format(something)
+
 class LLSDNotationFormatter(object):
     def __init__(self):
         self.type_map = {
@@ -834,6 +906,7 @@ def __str__(self):
 
     parse = staticmethod(parse)
     toXML = staticmethod(format_xml)
+    toPrettyXML = staticmethod(format_pretty_xml)
     toBinary = staticmethod(format_binary)
     toNotation = staticmethod(format_notation)
 
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index fa3a01c191262509af54c586ee214096815ed8e3..1d85bc0e7022a9edbc2d18f96189ea244bdccebe 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -1050,6 +1050,29 @@ namespace LLError
 	#endif
 		prefix << site.mFunction << ": ";
 
+		if (site.mPrintOnce)
+		{
+			std::map<std::string, unsigned int>::iterator messageIter = s.uniqueLogMessages.find(message);
+			if (messageIter != s.uniqueLogMessages.end())
+			{
+				messageIter->second++;
+				unsigned int num_messages = messageIter->second;
+				if (num_messages == 10 || num_messages == 50 || (num_messages % 100) == 0)
+				{
+					prefix << "ONCE (" << num_messages << "th time seen): ";
+				} 
+				else
+				{
+					return;
+				}
+			}
+			else 
+			{
+				prefix << "ONCE: ";
+				s.uniqueLogMessages[message] = 1;
+			}
+		}
+
 		if (site.mPrintOnce)
 		{
 			std::map<std::string, unsigned int>::iterator messageIter = s.uniqueLogMessages.find(message);
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
index 079f2b3258006a5153e1726115d39d0dd71b0b2e..4ca6a1243554fa13eccf1d5580dab6637e8129f3 100644
--- a/indra/llcommon/llmemory.cpp
+++ b/indra/llcommon/llmemory.cpp
@@ -314,72 +314,77 @@ U64 getCurrentRSS()
 
 #elif defined(LL_DARWIN)
 
-static U32 getPageSize()
-{
-	int ctl[2] = { CTL_HW, HW_PAGESIZE };
-	int page_size;
-	size_t size = sizeof(page_size);
-
-	if (sysctl(ctl, 2, &page_size, &size, NULL, 0) == -1)
-	{
-		llwarns << "Couldn't get page size" << llendl;
-		return 0;
-	} else {
-		return page_size;
-	}
-}
+// This can cause bad stalls! Replace with fast version
+
+// static U32 getPageSize()
+// {
+// 	int ctl[2] = { CTL_HW, HW_PAGESIZE };
+// 	int page_size;
+// 	size_t size = sizeof(page_size);
+
+// 	if (sysctl(ctl, 2, &page_size, &size, NULL, 0) == -1)
+// 	{
+// 		llwarns << "Couldn't get page size" << llendl;
+// 		return 0;
+// 	} else {
+// 		return page_size;
+// 	}
+// }
 
 U64 getCurrentRSS()
 {
-	task_t task = mach_task_self();
-	vm_address_t addr = VM_MIN_ADDRESS;
-	vm_size_t size = 0;
-	U64 residentPages = 0;
-
-	while (true)
-	{
-		mach_msg_type_number_t bcount = VM_REGION_BASIC_INFO_COUNT;
-		vm_region_basic_info binfo;
-		mach_port_t bobj;
-		kern_return_t ret;
+	// Stalls!!!
+	
+// 	task_t task = mach_task_self();
+// 	vm_address_t addr = VM_MIN_ADDRESS;
+// 	vm_size_t size = 0;
+// 	U64 residentPages = 0;
+
+// 	while (true)
+// 	{
+// 		mach_msg_type_number_t bcount = VM_REGION_BASIC_INFO_COUNT;
+// 		vm_region_basic_info binfo;
+// 		mach_port_t bobj;
+// 		kern_return_t ret;
 		
-		addr += size;
+// 		addr += size;
 		
-		ret = vm_region(task, &addr, &size, VM_REGION_BASIC_INFO,
-						(vm_region_info_t) &binfo, &bcount, &bobj);
+// 		ret = vm_region(task, &addr, &size, VM_REGION_BASIC_INFO,
+// 						(vm_region_info_t) &binfo, &bcount, &bobj);
 		
-		if (ret != KERN_SUCCESS)
-		{
-			break;
-		}
+// 		if (ret != KERN_SUCCESS)
+// 		{
+// 			break;
+// 		}
 		
-		if (bobj != MACH_PORT_NULL)
-		{
-			mach_port_deallocate(task, bobj);
-		}
+// 		if (bobj != MACH_PORT_NULL)
+// 		{
+// 			mach_port_deallocate(task, bobj);
+// 		}
 		
-		mach_msg_type_number_t ecount = VM_REGION_EXTENDED_INFO_COUNT;
-		vm_region_extended_info einfo;
-		mach_port_t eobj;
-
-		ret = vm_region(task, &addr, &size, VM_REGION_EXTENDED_INFO,
-						(vm_region_info_t) &einfo, &ecount, &eobj);
-
-		if (ret != KERN_SUCCESS)
-		{
-			llwarns << "vm_region failed" << llendl;
-			return 0;
-		}
+// 		mach_msg_type_number_t ecount = VM_REGION_EXTENDED_INFO_COUNT;
+// 		vm_region_extended_info einfo;
+// 		mach_port_t eobj;
+
+// 		ret = vm_region(task, &addr, &size, VM_REGION_EXTENDED_INFO,
+// 						(vm_region_info_t) &einfo, &ecount, &eobj);
+
+// 		if (ret != KERN_SUCCESS)
+// 		{
+// 			llwarns << "vm_region failed" << llendl;
+// 			return 0;
+// 		}
 		
-		if (eobj != MACH_PORT_NULL)
-		{
-			mach_port_deallocate(task, eobj);
-		}
+// 		if (eobj != MACH_PORT_NULL)
+// 		{
+// 			mach_port_deallocate(task, eobj);
+// 		}
 
-		residentPages += einfo.pages_resident;
-	}
+// 		residentPages += einfo.pages_resident;
+// 	}
 
-	return residentPages * getPageSize();
+// 	return residentPages * getPageSize();
+	return 0;
 }
 
 #elif defined(LL_LINUX)
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index d4bbef7e13d76ffe127541650b6bf56857ed94eb..2cdb55eb19fcebc2947f3be086dc1bda7dcf6e4e 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -34,7 +34,7 @@
 
 const S32 LL_VERSION_MAJOR = 1;
 const S32 LL_VERSION_MINOR = 20;
-const S32 LL_VERSION_PATCH = 6;
+const S32 LL_VERSION_PATCH = 9;
 const S32 LL_VERSION_BUILD = 0;
 
 const char * const LL_CHANNEL = "Second Life Release";
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index ecc4b09d109e7a95b3bd6a288ace710cbb0e4061..3b01140e3a639e4795fe9112e6b025fe8f91b0ee 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -4789,6 +4789,11 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 		mIndices.resize(num_indices);
 		mEdge.resize(num_indices);
 	}
+	else
+	{
+		mHasBinormals = FALSE;
+	}
+
 
 	LLVector3& face_min = mExtents[0];
 	LLVector3& face_max = mExtents[1];
diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt
index 9938a0198b00264b4b40b1f4a970fe7bff7147be..2dba8ef60dd08d6e7e9aeacf440d00949ea0b983 100644
--- a/indra/llrender/CMakeLists.txt
+++ b/indra/llrender/CMakeLists.txt
@@ -23,11 +23,10 @@ set(llrender_SOURCE_FILES
     llfont.cpp
     llfontgl.cpp
     llgldbg.cpp
-    llglimmediate.cpp
     llimagegl.cpp
+    llrender.cpp
     llrendertarget.cpp
     llvertexbuffer.cpp
-    llvertexprogramgl.cpp
     )
     
 set(llrender_HEADER_FILES
@@ -36,11 +35,10 @@ set(llrender_HEADER_FILES
     llfontgl.h
     llfont.h
     llgldbg.h
-    llglimmediate.h
     llimagegl.h
+    llrender.h
     llrendertarget.h
     llvertexbuffer.h
-    llvertexprogramgl.h
     )
 
 set_source_files_properties(${llrender_HEADER_FILES}
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 3a408b5550fc8be5662f0f9a2a27aa93ff88bf49..1e0d9767caaf75d61c36f9a346832b01dbdd650e 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -36,7 +36,7 @@
 #include "llfont.h"
 #include "llfontgl.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "v4color.h"
 #include "llstl.h"
 
@@ -665,7 +665,8 @@ S32 LLFontGL::render(const LLWString &wstr,
 	
 	mImageGLp->bind(0);
 	
- 	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Not guaranteed to be set correctly
+ 	// Not guaranteed to be set correctly
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	
 	cur_x = ((F32)x * sScaleX);
 	cur_y = ((F32)y * sScaleY);
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 55fa48f43753fd7a60f78781b4fdc3c782979b2d..dd9f22361f680575e479b54a73ca4ab810a0bd8f 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -41,7 +41,7 @@
 
 #include "llmath.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 
 //----------------------------------------------------------------------------
@@ -61,6 +61,8 @@ S32 LLImageGL::sCount					= 0;
 BOOL LLImageGL::sGlobalUseAnisotropic	= FALSE;
 F32 LLImageGL::sLastFrameTime			= 0.f;
 
+BOOL LLImageGL::sRefCheck = TRUE ;
+
 std::set<LLImageGL*> LLImageGL::sImageList;
 
 //----------------------------------------------------------------------------
@@ -130,13 +132,13 @@ void LLImageGL::bindExternalTexture(LLGLuint gl_name, S32 stage, LLGLenum bind_t
 	gGL.flush();
 	if (stage > 0)
 	{
-		glActiveTextureARB(GL_TEXTURE0_ARB + stage);
+		gGL.getTexUnit(stage)->activate();
 	}
 	glBindTexture(bind_target, gl_name);
 	sCurrentBoundTextures[stage] = gl_name;
 	if (stage > 0)
 	{
-		glActiveTextureARB(GL_TEXTURE0_ARB);
+		gGL.getTexUnit(0)->activate();
 	}
 }
 
@@ -149,9 +151,9 @@ void LLImageGL::unbindTexture(S32 stage, LLGLenum bind_target)
 		gGL.flush();
 		if (stage > 0)
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB + stage);
+			gGL.getTexUnit(stage)->activate();
 			glBindTexture(GL_TEXTURE_2D, 0);
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			gGL.getTexUnit(0)->activate();
 		}
 		else
 		{
@@ -276,7 +278,10 @@ LLImageGL::LLImageGL(const LLImageRaw* imageraw, BOOL usemipmaps)
 	setSize(0, 0, 0);
 	sImageList.insert(this);
 	sCount++;
+
+	sRefCheck = FALSE ;
 	createGLTexture(0, imageraw); 
+	sRefCheck = TRUE ;
 }
 
 LLImageGL::~LLImageGL()
@@ -304,7 +309,9 @@ void LLImageGL::init(BOOL usemipmaps)
 	mIsResident       = 0;
 	mClampS			  = FALSE;
 	mClampT			  = FALSE;
-	mMipFilterNearest  = FALSE;
+	mClampR			  = FALSE;
+	mMagFilterNearest  = FALSE;
+	mMinFilterNearest  = FALSE;
 	mWidth				= 0;
 	mHeight				= 0;
 	mComponents			= 0;
@@ -331,17 +338,19 @@ void LLImageGL::cleanup()
 
 //----------------------------------------------------------------------------
 
+//this function is used to check the size of a texture image.
+//so dim should be a positive number
 static bool check_power_of_two(S32 dim)
 {
-	while(dim > 1)
+	if(dim < 0)
 	{
-		if (dim & 1)
-		{
-			return false;
-		}
-		dim >>= 1;
+		return false ;
+	}
+	if(!dim)//0 is a power-of-two number
+	{
+		return true ;
 	}
-	return true;
+	return !(dim & (dim - 1)) ;
 }
 
 //static
@@ -418,6 +427,8 @@ void LLImageGL::dump()
 
 BOOL LLImageGL::bindTextureInternal(const S32 stage) const
 {
+	llassert_always(!sRefCheck || (getNumRefs() > 0 && getNumRefs() < 100000)) ;	
+	
 	if (gGLManager.mIsDisabled)
 	{
 		llwarns << "Trying to bind a texture while GL is disabled!" << llendl;
@@ -439,7 +450,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
 		gGL.flush();
 		if (stage > 0)
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB + stage);
+			gGL.getTexUnit(stage)->activate();
 		}
 	
 		glBindTexture(mBindTarget, mTexName);
@@ -448,7 +459,7 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
 
 		if (stage > 0)
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			gGL.getTexUnit(0)->activate();
 		}
 		
 		if (mLastBindTime != sLastFrameTime)
@@ -466,12 +477,12 @@ BOOL LLImageGL::bindTextureInternal(const S32 stage) const
 		gGL.flush();
 		if (stage > 0)
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB+stage);
+			gGL.getTexUnit(stage)->activate();
 		}
 		glBindTexture(mBindTarget, 0);
 		if (stage > 0)
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB+stage);
+			gGL.getTexUnit(0)->activate();
 		}
 		sCurrentBoundTextures[stage] = 0;
 		return FALSE;
@@ -941,7 +952,7 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_
 	setImage(data_in, data_hasmips);
 
 	setClamp(mClampS, mClampT);
-	setMipFilterNearest(mMipFilterNearest);
+	setMipFilterNearest(mMagFilterNearest);
 	
 	// things will break if we don't unbind after creation
 	unbindTexture(0, mBindTarget);
@@ -1044,8 +1055,23 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
 
 	S32 gl_discard = discard_level - mCurrentDiscardLevel;
 
+	//explicitly unbind texture 
+	LLImageGL::unbindTexture(0, mTarget);
 	llverify(bindTextureInternal(0));	
 
+	if (gDebugGL)
+	{
+		if (mTarget == GL_TEXTURE_2D)
+		{
+			GLint texname;
+			glGetIntegerv(GL_TEXTURE_BINDING_2D, &texname);
+			if (texname != mTexName)
+			{
+				llerrs << "Invalid texture bound!" << llendl;
+			}
+		}
+	}
+
 	LLGLint glwidth = 0;
 	glGetTexLevelParameteriv(mTarget, gl_discard, GL_TEXTURE_WIDTH, (GLint*)&glwidth);
 	if (glwidth == 0)
@@ -1153,25 +1179,55 @@ void LLImageGL::destroyGLTexture()
 
 //----------------------------------------------------------------------------
 
-void LLImageGL::setClamp(BOOL clamps, BOOL clampt)
+void LLImageGL::glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr)
+{
+	glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+	glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+	glTexParameteri (GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+}
+
+void LLImageGL::glClamp (BOOL clamps, BOOL clampt)
 {
-	mClampS = clamps;
-	mClampT = clampt;
 	if (mTexName != 0)
 	{
-		glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
-		glTexParameteri(mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+		glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_S, clamps ? GL_CLAMP_TO_EDGE : GL_REPEAT);
+		glTexParameteri (mBindTarget, GL_TEXTURE_WRAP_T, clampt ? GL_CLAMP_TO_EDGE : GL_REPEAT);
 	}
-	stop_glerror();
 }
 
-void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
+void LLImageGL::setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr)
+{
+	mClampS = clamps;
+	mClampT = clampt;
+	mClampR = clampr;
+	glClampCubemap (clamps, clampt, clampr);
+}
+
+void LLImageGL::setClamp(BOOL clamps, BOOL clampt)
+{
+	mClampS = clamps;
+	mClampT = clampt;
+	glClamp (clamps, clampt);
+}
+
+void LLImageGL::overrideClamp (BOOL clamps, BOOL clampt)
+{
+	glClamp (clamps, clampt);
+}
+
+void LLImageGL::restoreClamp (void)
+{
+	glClamp (mClampS, mClampT);
+}
+
+void LLImageGL::setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest)
 {
-	mMipFilterNearest = nearest;
+	mMagFilterNearest = mag_nearest;
+	mMinFilterNearest = min_nearest;
 
 	if (mTexName != 0)
 	{
-		if (min_nearest)
+		if (mMinFilterNearest)
 		{
 			glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 		}
@@ -1183,7 +1239,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
 		{
 			glTexParameteri(mBindTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 		}
-		if (mMipFilterNearest)
+		if (mMagFilterNearest)
 		{
 			glTexParameteri(mBindTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 		}
@@ -1193,7 +1249,7 @@ void LLImageGL::setMipFilterNearest(BOOL nearest, BOOL min_nearest)
 		}
 		if (gGLManager.mHasAnisotropic)
 		{
-			if (sGlobalUseAnisotropic && !mMipFilterNearest)
+			if (sGlobalUseAnisotropic && !mMagFilterNearest)
 			{
 				F32 largest_anisotropy;
 				glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest_anisotropy);
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index 82ea147d6ecca69fd0a677619f07cf0cfa41f866..c5fe9b7299c4d68d4b2d80c0ee50f5a7a9a4a939 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -81,6 +81,10 @@ class LLImageGL : public LLRefCount
 	virtual ~LLImageGL();
 	BOOL bindTextureInternal(const S32 stage = 0) const;
 
+private:
+	void glClamp (BOOL clamps, BOOL clampt);
+	void glClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE);
+
 public:
 	virtual void dump();	// debugging info to llinfos
 	virtual BOOL bind(const S32 stage = 0) const;
@@ -99,8 +103,11 @@ class LLImageGL : public LLRefCount
 	BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok); 
 	void destroyGLTexture();
 	
+	void setClampCubemap (BOOL clamps, BOOL clampt, BOOL clampr = FALSE);
 	void setClamp(BOOL clamps, BOOL clampt);
-	void setMipFilterNearest(BOOL nearest, BOOL min_nearest = FALSE);
+	void overrideClamp (BOOL clamps, BOOL clampt);
+	void restoreClamp (void);
+	void setMipFilterNearest(BOOL mag_nearest, BOOL min_nearest = FALSE);
 	void setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE);
 	void dontDiscard() { mDontDiscard = 1; }
 
@@ -117,7 +124,8 @@ class LLImageGL : public LLRefCount
 	
 	BOOL getClampS() const { return mClampS; }
 	BOOL getClampT() const { return mClampT; }
-	BOOL getMipFilterNearest() const { return mMipFilterNearest; }
+	BOOL getClampR() const { return mClampR; }
+	BOOL getMipFilterNearest() const { return mMagFilterNearest; }
 	
 	BOOL getHasGLTexture() const { return mTexName != 0; }
 	LLGLuint getTexName() const { return mTexName; }
@@ -167,7 +175,9 @@ class LLImageGL : public LLRefCount
 
 	S8 mClampS;					// Need to save clamp state
 	S8 mClampT;
-	S8 mMipFilterNearest;		// if TRUE, set magfilter to GL_NEAREST
+	S8 mClampR;
+	S8 mMagFilterNearest;		// if TRUE, set magfilter to GL_NEAREST
+	S8 mMinFilterNearest;		// if TRUE, set minfilter to GL_NEAREST
 	
 	LLGLint  mFormatInternal; // = GL internalformat
 	LLGLenum mFormatPrimary;  // = GL format (pixel data format)
@@ -197,6 +207,9 @@ class LLImageGL : public LLRefCount
 #else
 	BOOL getMissed() const { return FALSE; };
 #endif
+
+private://paranoia error check
+	static BOOL sRefCheck ;
 };
 
 #endif // LL_LLIMAGEGL_H
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1168155f8b75db8e30c0b7e9c57f0f40f385d39f
--- /dev/null
+++ b/indra/llrender/llrender.cpp
@@ -0,0 +1,704 @@
+/** 
+ * @file llrender.cpp
+ * @brief LLRender implementation
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2007, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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 "linden_common.h"
+
+#include "llrender.h"
+#include "llvertexbuffer.h"
+
+LLRender gGL;
+
+static const U32 LL_NUM_TEXTURE_LAYERS = 8; 
+
+static GLenum sGLCompareFunc[] =
+{
+	GL_NEVER,
+	GL_ALWAYS,
+	GL_LESS,
+	GL_LEQUAL,
+	GL_EQUAL,
+	GL_NOTEQUAL,
+	GL_GEQUAL,
+	GL_GREATER
+};
+
+const U32 immediate_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXCOORD;
+
+static GLenum sGLBlendFactor[] =
+{
+	GL_ONE,
+	GL_ZERO,
+	GL_DST_COLOR,
+	GL_SRC_COLOR,
+	GL_ONE_MINUS_DST_COLOR,
+	GL_ONE_MINUS_SRC_COLOR,
+	GL_DST_ALPHA,
+	GL_SRC_ALPHA,
+	GL_ONE_MINUS_DST_ALPHA,
+	GL_ONE_MINUS_SRC_ALPHA
+};
+
+LLTexUnit::LLTexUnit(U32 index)
+: mIsEnabled(false), mCurrBlendType(TB_MULT), 
+mCurrColorOp(TBO_MULT), mCurrAlphaOp(TBO_MULT),
+mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR),
+mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA),
+mCurrColorScale(1), mCurrAlphaScale(1)
+{
+	llassert_always(index < LL_NUM_TEXTURE_LAYERS);
+	mIndex = index;
+}
+
+U32 LLTexUnit::getIndex(void)
+{
+	return mIndex;
+}
+
+void LLTexUnit::enable(void)
+{
+	if (!mIsEnabled)
+	{
+		activate();
+		glEnable(GL_TEXTURE_2D);
+		mIsEnabled = true;
+	}
+}
+
+void LLTexUnit::disable(void)
+{
+	if (mIsEnabled)
+	{
+		activate();
+		glDisable(GL_TEXTURE_2D);
+		mIsEnabled = false;
+	}
+}
+
+void LLTexUnit::activate(void)
+{
+	//if (gGL.mCurrTextureUnitIndex != mIndex)
+	{
+		glActiveTextureARB(GL_TEXTURE0_ARB + mIndex);
+		gGL.mCurrTextureUnitIndex = mIndex;
+	}
+}
+
+// Useful for debugging that you've manually assigned a texture operation to the correct 
+// texture unit based on the currently set active texture in opengl.
+void LLTexUnit::debugTextureUnit(void)
+{
+	GLint activeTexture;
+	glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture);
+	if ((GL_TEXTURE0_ARB + mIndex) != activeTexture)
+	{
+		llerrs << "Incorrect Texture Unit!  Expected: " << (activeTexture - GL_TEXTURE0_ARB) << " Actual: " << mIndex << llendl;
+	}
+}
+
+void LLTexUnit::bindTexture(const LLImageGL* texture)
+{
+	if (texture != NULL)
+	{
+		activate();
+		texture->bind(mIndex);
+	}
+}
+
+void LLTexUnit::unbindTexture(void)
+{
+	activate();
+	glBindTexture(GL_TEXTURE_2D, 0);
+}
+
+void LLTexUnit::setTextureBlendType(eTextureBlendType type)
+{
+	// Do nothing if it's already correctly set.
+	if (mCurrBlendType == type)
+	{
+		return;
+	}
+
+	activate();
+	mCurrBlendType = type;
+	S32 scale_amount = 1;
+	switch (type) 
+	{
+		case TB_REPLACE:
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+			break;
+		case TB_ADD:
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
+			break;
+		case TB_MULT:
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+			break;
+		case TB_MULT_X2:
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+			scale_amount = 2;
+			break;
+		case TB_ALPHA_BLEND:
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
+			break;
+		case TB_COMBINE:
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
+			break;
+		default:
+			llerrs << "Unknown Texture Blend Type: " << type << llendl;
+			break;
+	}
+	setColorScale(scale_amount);
+	setAlphaScale(1);
+}
+
+GLint LLTexUnit::getTextureSource(eTextureBlendSrc src)
+{
+	switch(src)
+	{
+		// All four cases should return the same value.
+		case TBS_PREV_COLOR:
+		case TBS_PREV_ALPHA:
+		case TBS_ONE_MINUS_PREV_COLOR:
+		case TBS_ONE_MINUS_PREV_ALPHA:
+			return GL_PREVIOUS_ARB;
+
+		// All four cases should return the same value.
+		case TBS_TEX_COLOR:
+		case TBS_TEX_ALPHA:
+		case TBS_ONE_MINUS_TEX_COLOR:
+		case TBS_ONE_MINUS_TEX_ALPHA:
+			return GL_TEXTURE;
+
+		// All four cases should return the same value.
+		case TBS_VERT_COLOR:
+		case TBS_VERT_ALPHA:
+		case TBS_ONE_MINUS_VERT_COLOR:
+		case TBS_ONE_MINUS_VERT_ALPHA:
+			return GL_PRIMARY_COLOR_ARB;
+
+		// All four cases should return the same value.
+		case TBS_CONST_COLOR:
+		case TBS_CONST_ALPHA:
+		case TBS_ONE_MINUS_CONST_COLOR:
+		case TBS_ONE_MINUS_CONST_ALPHA:
+			return GL_CONSTANT_ARB;
+
+		default:
+			llwarns << "Unknown eTextureBlendSrc: " << src << ".  Using Vertex Color instead." << llendl;
+			return GL_PRIMARY_COLOR_ARB;
+	}
+}
+
+GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha)
+{
+	switch(src)
+	{
+		// All four cases should return the same value.
+		case TBS_PREV_COLOR:
+		case TBS_TEX_COLOR:
+		case TBS_VERT_COLOR:
+		case TBS_CONST_COLOR:
+			return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR;
+
+		// All four cases should return the same value.
+		case TBS_PREV_ALPHA:
+		case TBS_TEX_ALPHA:
+		case TBS_VERT_ALPHA:
+		case TBS_CONST_ALPHA:
+			return GL_SRC_ALPHA;
+
+		// All four cases should return the same value.
+		case TBS_ONE_MINUS_PREV_COLOR:
+		case TBS_ONE_MINUS_TEX_COLOR:
+		case TBS_ONE_MINUS_VERT_COLOR:
+		case TBS_ONE_MINUS_CONST_COLOR:
+			return (isAlpha) ? GL_ONE_MINUS_SRC_ALPHA : GL_ONE_MINUS_SRC_COLOR;
+
+		// All four cases should return the same value.
+		case TBS_ONE_MINUS_PREV_ALPHA:
+		case TBS_ONE_MINUS_TEX_ALPHA:
+		case TBS_ONE_MINUS_VERT_ALPHA:
+		case TBS_ONE_MINUS_CONST_ALPHA:
+			return GL_ONE_MINUS_SRC_ALPHA;
+
+		default:
+			llwarns << "Unknown eTextureBlendSrc: " << src << ".  Using Source Color or Alpha instead." << llendl;
+			return (isAlpha) ? GL_SRC_ALPHA: GL_SRC_COLOR;
+	}
+}
+
+void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha)
+{
+	activate();
+	if (mCurrBlendType != TB_COMBINE)
+	{
+		mCurrBlendType = TB_COMBINE;
+		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
+	}
+
+	// We want an early out, because this function does a LOT of stuff.
+	if ( (isAlpha && (mCurrAlphaOp == op) && (mCurrAlphaSrc1 == src1) && (mCurrAlphaSrc2 == src2) )
+		|| (!isAlpha && (mCurrColorOp == op) && (mCurrColorSrc1 == src1) && (mCurrColorSrc2 == src2) ))
+	{
+		return;
+	}
+
+	// Get the gl source enums according to the eTextureBlendSrc sources passed in
+	GLint source1 = getTextureSource(src1);
+	GLint source2 = getTextureSource(src2);
+	// Get the gl operand enums according to the eTextureBlendSrc sources passed in
+	GLint operand1 = getTextureSourceType(src1, isAlpha);
+	GLint operand2 = getTextureSourceType(src2, isAlpha);
+	// Default the scale amount to 1
+	S32 scale_amount = 1;
+	GLenum comb_enum, src0_enum, src1_enum, src2_enum, operand0_enum, operand1_enum, operand2_enum;
+	
+	if (isAlpha)
+	{
+		// Set enums to ALPHA ones
+		comb_enum = GL_COMBINE_ALPHA_ARB;
+		src0_enum = GL_SOURCE0_ALPHA_ARB;
+		src1_enum = GL_SOURCE1_ALPHA_ARB;
+		src2_enum = GL_SOURCE2_ALPHA_ARB;
+		operand0_enum = GL_OPERAND0_ALPHA_ARB;
+		operand1_enum = GL_OPERAND1_ALPHA_ARB;
+		operand2_enum = GL_OPERAND2_ALPHA_ARB;
+
+		// cache current combiner
+		mCurrAlphaOp = op;
+		mCurrAlphaSrc1 = src1;
+		mCurrAlphaSrc2 = src2;
+	}
+	else 
+	{
+		// Set enums to ALPHA ones
+		comb_enum = GL_COMBINE_RGB_ARB;
+		src0_enum = GL_SOURCE0_RGB_ARB;
+		src1_enum = GL_SOURCE1_RGB_ARB;
+		src2_enum = GL_SOURCE2_RGB_ARB;
+		operand0_enum = GL_OPERAND0_RGB_ARB;
+		operand1_enum = GL_OPERAND1_RGB_ARB;
+		operand2_enum = GL_OPERAND2_RGB_ARB;
+
+		// cache current combiner
+		mCurrColorOp = op;
+		mCurrColorSrc1 = src1;
+		mCurrColorSrc2 = src2;
+	}
+
+	switch(op)
+	{
+		case TBO_REPLACE:
+			// Slightly special syntax (no second sources), just set all and return.
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
+			glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
+			glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
+			(isAlpha) ? setAlphaScale(1) : setColorScale(1);
+			return;
+
+		case TBO_MULT:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
+			break;
+
+		case TBO_MULT_X2:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
+			scale_amount = 2;
+			break;
+
+		case TBO_MULT_X4:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_MODULATE);
+			scale_amount = 4;
+			break;
+
+		case TBO_ADD:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD);
+			break;
+
+		case TBO_ADD_SIGNED:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_ADD_SIGNED_ARB);
+			break;
+
+		case TBO_SUBTRACT:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_SUBTRACT_ARB);
+			break;
+
+		case TBO_LERP_VERT_ALPHA:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
+			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+			break;
+
+		case TBO_LERP_TEX_ALPHA:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_TEXTURE);
+			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+			break;
+
+		case TBO_LERP_PREV_ALPHA:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PREVIOUS_ARB);
+			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+			break;
+
+		case TBO_LERP_CONST_ALPHA:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_CONSTANT_ARB);
+			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, GL_SRC_ALPHA);
+			break;
+
+		case TBO_LERP_VERT_COLOR:
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_INTERPOLATE);
+			glTexEnvi(GL_TEXTURE_ENV, src2_enum, GL_PRIMARY_COLOR_ARB);
+			glTexEnvi(GL_TEXTURE_ENV, operand2_enum, (isAlpha) ? GL_SRC_ALPHA : GL_SRC_COLOR);
+			break;
+
+		default:
+			llwarns << "Unknown eTextureBlendOp: " << op << ".  Setting op to replace." << llendl;
+			// Slightly special syntax (no second sources), just set all and return.
+			glTexEnvi(GL_TEXTURE_ENV, comb_enum, GL_REPLACE);
+			glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
+			glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
+			(isAlpha) ? setAlphaScale(1) : setColorScale(1);
+			return;
+	}
+
+	// Set sources, operands, and scale accordingly
+	glTexEnvi(GL_TEXTURE_ENV, src0_enum, source1);
+	glTexEnvi(GL_TEXTURE_ENV, operand0_enum, operand1);
+	glTexEnvi(GL_TEXTURE_ENV, src1_enum, source2);
+	glTexEnvi(GL_TEXTURE_ENV, operand1_enum, operand2);
+	(isAlpha) ? setAlphaScale(scale_amount) : setColorScale(scale_amount);
+}
+
+void LLTexUnit::setColorScale(S32 scale)
+{
+	if (mCurrColorScale != scale)
+	{
+		mCurrColorScale = scale;
+		glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale );
+	}
+}
+
+void LLTexUnit::setAlphaScale(S32 scale)
+{
+	if (mCurrAlphaScale != scale)
+	{
+		mCurrAlphaScale = scale;
+		glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale );
+	}
+}
+
+LLRender::LLRender()
+{
+	mCount = 0;
+	mMode = LLVertexBuffer::TRIANGLES;
+	mBuffer = new LLVertexBuffer(immediate_mask, 0);
+	mBuffer->allocateBuffer(4096, 0, TRUE);
+	mBuffer->getVertexStrider(mVerticesp);
+	mBuffer->getTexCoordStrider(mTexcoordsp);
+	mBuffer->getColorStrider(mColorsp);
+
+	for (unsigned int i = 0; i < LL_NUM_TEXTURE_LAYERS; i++)
+	{
+		mTexUnits.push_back(new LLTexUnit(i));
+	}
+}
+
+LLRender::~LLRender()
+{
+	for (U32 i = 0; i < mTexUnits.size(); i++)
+	{
+		delete mTexUnits[i];
+	}
+}
+
+void LLRender::translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z)
+{
+	flush();
+	glTranslatef(x,y,z);
+}
+
+void LLRender::pushMatrix()
+{
+	flush();
+	glPushMatrix();
+}
+
+void LLRender::popMatrix()
+{
+	flush();
+	glPopMatrix();
+}
+
+void LLRender::setColorMask(bool writeColor, bool writeAlpha)
+{
+	setColorMask(writeColor, writeColor, writeColor, writeAlpha);
+}
+
+void LLRender::setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha)
+{
+	flush();
+	glColorMask(writeColorR, writeColorG, writeColorB, writeAlpha);
+}
+
+void LLRender::setSceneBlendType(eBlendType type)
+{
+	flush();
+	switch (type) 
+	{
+		case BT_ALPHA:
+			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+			break;
+		case BT_ADD:
+			glBlendFunc(GL_ONE, GL_ONE);
+			break;
+		case BT_ADD_WITH_ALPHA:
+			glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+			break;
+		case BT_MULT:
+			glBlendFunc(GL_DST_COLOR, GL_ZERO);
+			break;
+		case BT_MULT_X2:
+			glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
+			break;
+		case BT_REPLACE:
+			glBlendFunc(GL_ONE, GL_ZERO);
+			break;
+		default:
+			llerrs << "Unknown Scene Blend Type: " << type << llendl;
+			break;
+	}
+}
+
+void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
+{
+	flush();
+	if (func == CF_DEFAULT)
+	{
+		glAlphaFunc(GL_GREATER, 0.01f);
+	} 
+	else
+	{
+		glAlphaFunc(sGLCompareFunc[func], value);
+	}
+}
+
+void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
+{
+	flush();
+	glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]);
+}
+
+LLTexUnit* LLRender::getTexUnit(U32 index)
+{
+	if (index < mTexUnits.size())
+	{
+		return mTexUnits[index];
+	}
+	llerrs << "Non-existing texture unit layer requested: " << index << llendl;
+	return NULL;
+}
+
+void LLRender::begin(const GLuint& mode)
+{
+	if (mode != mMode)
+	{
+		if (mMode == LLVertexBuffer::QUADS ||
+			mMode == LLVertexBuffer::LINES ||
+			mMode == LLVertexBuffer::TRIANGLES ||
+			mMode == LLVertexBuffer::POINTS)
+		{
+			flush();
+		}
+		else if (mCount != 0)
+		{
+			llerrs << "gGL.begin() called redundantly." << llendl;
+		}
+		
+		mMode = mode;
+	}
+}
+
+void LLRender::end()
+{ 
+	if (mCount == 0)
+	{
+		return;
+		//IMM_ERRS << "GL begin and end called with no vertices specified." << llendl;
+	}
+
+	if ((mMode != LLVertexBuffer::QUADS && 
+		mMode != LLVertexBuffer::LINES &&
+		mMode != LLVertexBuffer::TRIANGLES &&
+		mMode != LLVertexBuffer::POINTS) ||
+		mCount > 2048)
+	{
+		flush();
+	}
+}
+void LLRender::flush()
+{
+	if (mCount > 0)
+	{
+#if 0
+		if (!glIsEnabled(GL_VERTEX_ARRAY))
+		{
+			llerrs << "foo 1" << llendl;
+		}
+
+		if (!glIsEnabled(GL_COLOR_ARRAY))
+		{
+			llerrs << "foo 2" << llendl;
+		}
+
+		if (!glIsEnabled(GL_TEXTURE_COORD_ARRAY))
+		{
+			llerrs << "foo 3" << llendl;
+		}
+
+		if (glIsEnabled(GL_NORMAL_ARRAY))
+		{
+			llerrs << "foo 7" << llendl;
+		}
+
+		GLvoid* pointer;
+
+		glGetPointerv(GL_VERTEX_ARRAY_POINTER, &pointer);
+		if (pointer != &(mBuffer[0].v))
+		{
+			llerrs << "foo 4" << llendl;
+		}
+
+		glGetPointerv(GL_COLOR_ARRAY_POINTER, &pointer);
+		if (pointer != &(mBuffer[0].c))
+		{
+			llerrs << "foo 5" << llendl;
+		}
+
+		glGetPointerv(GL_TEXTURE_COORD_ARRAY_POINTER, &pointer);
+		if (pointer != &(mBuffer[0].uv))
+		{
+			llerrs << "foo 6" << llendl;
+		}
+#endif
+				
+		mBuffer->setBuffer(immediate_mask);
+		mBuffer->drawArrays(mMode, 0, mCount);
+
+		mVerticesp[0] = mVerticesp[mCount];
+		mTexcoordsp[0] = mTexcoordsp[mCount];
+		mColorsp[0] = mColorsp[mCount];
+		mCount = 0;
+	}
+}
+void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
+{ 
+	if (mCount >= 4096)
+	{
+	//	llwarns << "GL immediate mode overflow.  Some geometry not drawn." << llendl;
+		return;
+	}
+
+	mVerticesp[mCount] = LLVector3(x,y,z);
+	mCount++;
+	if (mCount < 4096)
+	{
+		mVerticesp[mCount] = mVerticesp[mCount-1];
+		mColorsp[mCount] = mColorsp[mCount-1];
+		mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
+	}
+}
+void LLRender::vertex2i(const GLint& x, const GLint& y)
+{
+	vertex3f((GLfloat) x, (GLfloat) y, 0);	
+}
+
+void LLRender::vertex2f(const GLfloat& x, const GLfloat& y)
+{ 
+	vertex3f(x,y,0);
+}
+
+void LLRender::vertex2fv(const GLfloat* v)
+{ 
+	vertex3f(v[0], v[1], 0);
+}
+
+void LLRender::vertex3fv(const GLfloat* v)
+{
+	vertex3f(v[0], v[1], v[2]);
+}
+
+void LLRender::texCoord2f(const GLfloat& x, const GLfloat& y)
+{ 
+	mTexcoordsp[mCount] = LLVector2(x,y);
+}
+
+void LLRender::texCoord2i(const GLint& x, const GLint& y)
+{ 
+	texCoord2f((GLfloat) x, (GLfloat) y);
+}
+
+void LLRender::texCoord2fv(const GLfloat* tc)
+{ 
+	texCoord2f(tc[0], tc[1]);
+}
+
+void LLRender::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a)
+{
+	mColorsp[mCount] = LLColor4U(r,g,b,a);
+}
+void LLRender::color4ubv(const GLubyte* c)
+{
+	color4ub(c[0], c[1], c[2], c[3]);
+}
+
+void LLRender::color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a)
+{
+	color4ub((GLubyte) (llclamp(r, 0.f, 1.f)*255),
+		(GLubyte) (llclamp(g, 0.f, 1.f)*255),
+		(GLubyte) (llclamp(b, 0.f, 1.f)*255),
+		(GLubyte) (llclamp(a, 0.f, 1.f)*255));
+}
+
+void LLRender::color4fv(const GLfloat* c)
+{ 
+	color4f(c[0],c[1],c[2],c[3]);
+}
+
+void LLRender::color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b)
+{ 
+	color4f(r,g,b,1);
+}
+
+void LLRender::color3fv(const GLfloat* c)
+{ 
+	color4f(c[0],c[1],c[2],1);
+}
+
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
new file mode 100644
index 0000000000000000000000000000000000000000..2fa3237ef923b352134f2078a313f8af57a9ac83
--- /dev/null
+++ b/indra/llrender/llrender.h
@@ -0,0 +1,239 @@
+/** 
+ * @file llrender.h
+ * @brief LLRender definition
+ *
+ *	This class acts as a wrapper for OpenGL calls.
+ *	The goal of this class is to minimize the number of api calls due to legacy rendering
+ *	code, to define an interface for a multiple rendering API abstraction of the UI
+ *	rendering, and to abstract out direct rendering calls in a way that is cleaner and easier to maintain.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-2007, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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_LLGLRENDER_H
+#define LL_LLGLRENDER_H
+
+#include "stdtypes.h"
+#include "llgltypes.h"
+#include "llglheaders.h"
+#include "llvertexbuffer.h"
+
+class LLTexUnit
+{
+public:
+	typedef enum 
+	{
+		TB_REPLACE = 0,
+		TB_ADD,
+		TB_MULT,
+		TB_MULT_X2,
+		TB_ALPHA_BLEND,
+		TB_COMBINE			// Doesn't need to be set directly, setTexture___Blend() set TB_COMBINE automatically
+	} eTextureBlendType;
+
+	typedef enum 
+	{
+		TBO_REPLACE = 0,			// Use Source 1
+		TBO_MULT,					// Multiply: ( Source1 * Source2 )
+		TBO_MULT_X2,				// Multiply then scale by 2:  ( 2.0 * ( Source1 * Source2 ) )
+		TBO_MULT_X4,				// Multiply then scale by 4:  ( 4.0 * ( Source1 * Source2 ) )
+		TBO_ADD,					// Add: ( Source1 + Source2 )
+		TBO_ADD_SIGNED,				// Add then subtract 0.5: ( ( Source1 + Source2 ) - 0.5 )
+		TBO_SUBTRACT,				// Subtract Source2 from Source1: ( Source1 - Source2 )
+		TBO_LERP_VERT_ALPHA,		// Interpolate based on Vertex Alpha (VA): ( Source1 * VA + Source2 * (1-VA) )
+		TBO_LERP_TEX_ALPHA,			// Interpolate based on Texture Alpha (TA): ( Source1 * TA + Source2 * (1-TA) )
+		TBO_LERP_PREV_ALPHA,		// Interpolate based on Previous Alpha (PA): ( Source1 * PA + Source2 * (1-PA) )
+		TBO_LERP_CONST_ALPHA,		// Interpolate based on Const Alpha (CA): ( Source1 * CA + Source2 * (1-CA) )
+		TBO_LERP_VERT_COLOR			// Interpolate based on Vertex Col (VC): ( Source1 * VC + Source2 * (1-VC) )
+										// *Note* TBO_LERP_VERTEX_COLOR only works with setTextureColorBlend(),
+										// and falls back to TBO_LERP_VERTEX_ALPHA for setTextureAlphaBlend().
+	} eTextureBlendOp;
+
+	typedef enum 
+	{
+		TBS_PREV_COLOR = 0,			// Color from the previous texture stage
+		TBS_PREV_ALPHA,
+		TBS_ONE_MINUS_PREV_COLOR,
+		TBS_ONE_MINUS_PREV_ALPHA,
+		TBS_TEX_COLOR,				// Color from the texture bound to this stage
+		TBS_TEX_ALPHA,
+		TBS_ONE_MINUS_TEX_COLOR,
+		TBS_ONE_MINUS_TEX_ALPHA,
+		TBS_VERT_COLOR,				// The vertex color currently set
+		TBS_VERT_ALPHA,
+		TBS_ONE_MINUS_VERT_COLOR,
+		TBS_ONE_MINUS_VERT_ALPHA,
+		TBS_CONST_COLOR,			// The constant color value currently set
+		TBS_CONST_ALPHA,
+		TBS_ONE_MINUS_CONST_COLOR,
+		TBS_ONE_MINUS_CONST_ALPHA
+	} eTextureBlendSrc;
+
+	LLTexUnit(U32 index);
+	U32 getIndex(void);
+
+	void enable(void);
+	void disable(void);
+	void activate(void);
+
+	void bindTexture(const LLImageGL* texture);
+	void unbindTexture(void);
+
+	void setTextureBlendType(eTextureBlendType type);
+
+	inline void setTextureColorBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_COLOR)
+	{ setTextureCombiner(op, src1, src2, false); }
+
+	// NOTE: If *_COLOR enums are passed to src1 or src2, the corresponding *_ALPHA enum will be used instead.
+	inline void setTextureAlphaBlend(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2 = TBS_PREV_ALPHA)
+	{ setTextureCombiner(op, src1, src2, true); }	
+
+private:
+	U32					mIndex;
+	bool				mIsEnabled;
+	eTextureBlendType	mCurrBlendType;
+	eTextureBlendOp		mCurrColorOp;
+	eTextureBlendSrc	mCurrColorSrc1;
+	eTextureBlendSrc	mCurrColorSrc2;
+	eTextureBlendOp		mCurrAlphaOp;
+	eTextureBlendSrc	mCurrAlphaSrc1;
+	eTextureBlendSrc	mCurrAlphaSrc2;
+	S32					mCurrColorScale;
+	S32					mCurrAlphaScale;
+	
+	void debugTextureUnit(void);
+	void setColorScale(S32 scale);
+	void setAlphaScale(S32 scale);
+	GLint getTextureSource(eTextureBlendSrc src);
+	GLint getTextureSourceType(eTextureBlendSrc src, bool isAlpha = false);
+	void setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha = false);
+};
+
+class LLRender
+{
+	friend class LLTexUnit;
+public:
+	typedef enum 
+	{
+		CF_NEVER = 0,
+		CF_ALWAYS,
+		CF_LESS,
+		CF_LESS_EQUAL,
+		CF_EQUAL,
+		CF_NOT_EQUAL,
+		CF_GREATER_EQUAL,
+		CF_GREATER,
+		CF_DEFAULT
+	}  eCompareFunc;
+
+	typedef enum 
+	{
+		BT_ALPHA = 0,
+		BT_ADD,
+		BT_ADD_WITH_ALPHA,	// Additive blend modulated by the fragment's alpha.
+		BT_MULT,
+		BT_MULT_X2,
+		BT_REPLACE
+	} eBlendType;
+
+	typedef enum 
+	{
+		BF_ONE = 0,
+		BF_ZERO,
+		BF_DEST_COLOR,
+		BF_SOURCE_COLOR,
+		BF_ONE_MINUS_DEST_COLOR,
+		BF_ONE_MINUS_SOURCE_COLOR,
+		BF_DEST_ALPHA,
+		BF_SOURCE_ALPHA,
+		BF_ONE_MINUS_DEST_ALPHA,
+		BF_ONE_MINUS_SOURCE_ALPHA
+	} eBlendFactor;
+
+	LLRender();
+	~LLRender();
+
+	void translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z);
+	void pushMatrix();
+	void popMatrix();
+
+	void flush();
+
+	void begin(const GLuint& mode);
+	void end();
+	void vertex2i(const GLint& x, const GLint& y);
+	void vertex2f(const GLfloat& x, const GLfloat& y);
+	void vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z);
+	void vertex2fv(const GLfloat* v);
+	void vertex3fv(const GLfloat* v);
+	
+	void texCoord2i(const GLint& x, const GLint& y);
+	void texCoord2f(const GLfloat& x, const GLfloat& y);
+	void texCoord2fv(const GLfloat* tc);
+
+	void color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a);
+	void color4f(const GLfloat& r, const GLfloat& g, const GLfloat& b, const GLfloat& a);
+	void color4fv(const GLfloat* c);
+	void color3f(const GLfloat& r, const GLfloat& g, const GLfloat& b);
+	void color3fv(const GLfloat* c);
+	void color4ubv(const GLubyte* c);
+
+	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);
+
+	void blendFunc(eBlendFactor sfactor, eBlendFactor dfactor);
+
+	LLTexUnit* getTexUnit(U32 index);
+
+	typedef struct Vertex
+	{
+		GLfloat v[3];
+		GLubyte c[4];
+		GLfloat uv[2];
+	};
+
+public:
+
+private:
+	U32 mCount;
+	U32 mMode;
+	U32 mCurrTextureUnitIndex;
+	LLPointer<LLVertexBuffer> mBuffer;
+	LLStrider<LLVector3> mVerticesp;
+	LLStrider<LLVector2> mTexcoordsp;
+	LLStrider<LLColor4U> mColorsp;
+	std::vector<LLTexUnit*> mTexUnits;
+};
+
+
+
+extern LLRender gGL;
+
+#endif
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index 5111c7ae2d7023625c04cb12dbd98a9a6cf8ac1a..885ccde2d13ba202880c28ab020f3449cb4844e9 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -32,7 +32,7 @@
 #include "linden_common.h"
 
 #include "llrendertarget.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llgl.h"
 
 
@@ -181,6 +181,7 @@ void LLRenderTarget::clear()
 	{
 		LLGLEnable scissor(GL_SCISSOR_TEST);
 		glScissor(0, 0, mResX, mResY);
+		stop_glerror();
 		glClear(mask);
 	}
 }
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 2f053a6493c096bc6f136de0b20d4adac068dc9b..d79a0d603429a3e75bdd238fcdbc2ea5a48e7b50 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -38,7 +38,7 @@
 #include "llglheaders.h"
 #include "llmemory.h"
 #include "llmemtype.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 //============================================================================
 
@@ -768,11 +768,26 @@ U8* LLVertexBuffer::mapBuffer(S32 access)
 		sMapped = TRUE;*/
 		if (!mMappedData)
 		{
+			GLint buff;
+			glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
+			if (buff != mGLBuffer)
+			{
+				llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
+			}
+
+			
 			llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl;
 		}
 
 		if (!mMappedIndexData)
 		{
+			GLint buff;
+			glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
+			if (buff != mGLIndices)
+			{
+				llerrs << "Invalid GL index buffer bound: " << buff << llendl;
+			}
+
 			llerrs << "glMapBuffer returned NULL (no index data)" << llendl;
 		}
 
@@ -952,6 +967,22 @@ void LLVertexBuffer::setBuffer(U32 data_mask)
 			sIBOActive = TRUE;
 		}
 		
+		if (gDebugGL)
+		{
+			GLint buff;
+			glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff);
+			if (buff != mGLBuffer)
+			{
+				llerrs << "Invalid GL vertex buffer bound: " << buff << llendl;
+			}
+
+			glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, &buff);
+			if (buff != mGLIndices)
+			{
+				llerrs << "Invalid GL index buffer bound: " << buff << llendl;
+			}
+		}
+
 		if (mResized)
 		{
 			if (gDebugGL)
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 4fa2a3de924b4379699632045c00486958aee355..b8cf8f7984e6f0062579c998acc7e602f2cf2c70 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -45,7 +45,7 @@
 #include "llcriticaldamp.h"
 #include "llfocusmgr.h"
 #include "llwindow.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 static LLRegisterWidget<LLButton> r("button");
 
@@ -571,9 +571,9 @@ void LLButton::draw()
 			mImagep->draw(getLocalRect(), getEnabled() ? mImageColor : mDisabledImageColor  );
 			if (mCurGlowStrength > 0.01f)
 			{
-				glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+				gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
 				mImagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
-				glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+				gGL.setSceneBlendType(LLRender::BT_ALPHA);
 			}
 		}
 		else
@@ -581,9 +581,9 @@ void LLButton::draw()
 			mImagep->draw(0, 0, getEnabled() ? mImageColor : mDisabledImageColor );
 			if (mCurGlowStrength > 0.01f)
 			{
-				glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+				gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
 				mImagep->drawSolid(0, 0, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
-				glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+				gGL.setSceneBlendType(LLRender::BT_ALPHA);
 			}
 		}
 	}
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index 538641d060b9e0019f2fa697092db4fccd258f61..98a79fa65080d6568bb6775fb46cc9acb3d61ea5 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -783,8 +783,18 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
 			mList->highlightNthItem(mList->getItemIndex(last_selected_item));
 		}
 		result = mList->handleKeyHere(key, mask);
+
+		// will only see return key if it is originating from line editor
+		// since the dropdown button eats the key
+		if (key == KEY_RETURN)
+		{
+			// don't show list and don't eat key input when committing
+			// free-form text entry with RETURN since user already knows
+            // what they are trying to select
+			return FALSE;
+		}
 		// if selection has changed, pop open list
-		if (mList->getLastSelectedItem() != last_selected_item)
+		else if (mList->getLastSelectedItem() != last_selected_item)
 		{
 			showList();
 		}
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index c2b2e08755c84ac2277f8379de2da23565388b3a..62b86a6ad7d5927d052d7245980da452f057806b 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -46,7 +46,7 @@
 #include "llmenugl.h"
 
 #include "llmath.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llfocusmgr.h"
 #include "llfont.h"
 #include "llcoord.h"
diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp
index 3536e6bb03fd2b385a4d3a534dc8a7e44095e032..5bc2c5cf851a496b274fdaf17c70fa9cbc14830b 100644
--- a/indra/llui/llscrollbar.cpp
+++ b/indra/llui/llscrollbar.cpp
@@ -44,7 +44,7 @@
 #include "llfocusmgr.h"
 #include "llwindow.h"
 #include "llcontrol.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 LLScrollbar::LLScrollbar(
 		const LLString& name, LLRect rect,
@@ -518,9 +518,9 @@ void LLScrollbar::draw()
 		rounded_rect_imagep->draw(mThumbRect, mThumbColor);
 		if (mCurGlowStrength > 0.01f)
 		{
-			glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+			gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
 			rounded_rect_imagep->drawSolid(mThumbRect, LLColor4(1.f, 1.f, 1.f, mCurGlowStrength));
-			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+			gGL.setSceneBlendType(LLRender::BT_ALPHA);
 		}
 
 	}
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
index 72fe2040af04e7f5fd6e93b32805c4cf269a2215..3cb4ecc1721bc96dc6593cbae6a53093ae40a150 100644
--- a/indra/llui/llscrollcontainer.cpp
+++ b/indra/llui/llscrollcontainer.cpp
@@ -32,7 +32,7 @@
 
 #include "linden_common.h"
 
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llscrollcontainer.h"
 #include "llscrollbar.h"
 #include "llui.h"
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index c923f6b116b4d82df66edba63f24bebafbfab6b2..b4a2ed874aae8a6f764c4b2a76043e1b060a4ad6 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -42,7 +42,7 @@
 #include "llcheckboxctrl.h"
 #include "llclipboard.h"
 #include "llfocusmgr.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llresmgr.h"
 #include "llscrollbar.h"
 #include "llstring.h"
@@ -1110,6 +1110,8 @@ BOOL LLScrollListCtrl::selectItemRange( S32 first_index, S32 last_index )
 	for (item_list::iterator iter = mItemList.begin(); iter != mItemList.end(); iter++)
 	{
 		LLScrollListItem *itemp = *iter;
+	
+		llassert_always(itemp) ;
 		if( index >= first_index && index <= last_index )
 		{
 			if( itemp->getEnabled() )
diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp
index 336fdfe2c386c677ac19b4520f4c0bf455ae7f22..38608745c1c69ce10aeecc0e251ce44af59323e9 100644
--- a/indra/llui/llstyle.cpp
+++ b/indra/llui/llstyle.cpp
@@ -102,7 +102,7 @@ LLStyle &LLStyle::operator=(const LLStyle &rhs)
 		mItalic = rhs.mItalic;
 		mBold = rhs.mBold;
 		mUnderline = rhs.mUnderline;
-		mDropShadow = rhs.mUnderline;
+		mDropShadow = rhs.mDropShadow;
 		mIsEmbeddedItem = rhs.mIsEmbeddedItem;
 	}
 	
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index fabdbd6860f5e3da7ed6edd41f4f046712d1184d..ccf6e9016117d610bc1527c38aa9a7a7da9756bf 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -40,7 +40,7 @@
 #include "llcriticaldamp.h"
 #include "lluictrlfactory.h"
 #include "lltabcontainervertical.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 const F32 SCROLL_STEP_TIME = 0.4f;
 const F32 SCROLL_DELAY_TIME = 0.5f;
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 8264f0cf87fec4ac138803cf81659ada67a7ffe0..06df99608837f62c84cbec4562dba4be3627d48a 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -36,7 +36,7 @@
 #include "lltexteditor.h"
 
 #include "llfontgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llui.h"
 #include "lluictrlfactory.h"
 #include "llrect.h"
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 1a238ce7fa81aa406cbf9838977e69e0c657d9c5..6ef485d82cf08babcfcaf7160266d0014f0ad14f 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -41,7 +41,7 @@
 #include "audioengine.h"
 #include "v2math.h"
 #include "v4color.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llrect.h"
 #include "llimagegl.h"
 #include "lldir.h"
@@ -487,18 +487,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
 	
 	if (solid_color)
 	{
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-		glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-		glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_MODULATE);
-
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
-
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB,		GL_PRIMARY_COLOR_ARB);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB,	GL_SRC_ALPHA);
+		gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+		gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
 	}
 
 	gGL.pushMatrix();
@@ -634,7 +624,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLIma
 
 	if (solid_color)
 	{
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 	}
 }
 
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index fa78534a83070a73ea108ada3db6b98adf7b896a..a239968e5dbecab70c5e9b40f2a2462d71091933 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -37,7 +37,7 @@
 #include <cassert>
 #include <boost/tokenizer.hpp>
 
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llevent.h"
 #include "llfontgl.h"
 #include "llfocusmgr.h"
diff --git a/indra/llui/llviewborder.cpp b/indra/llui/llviewborder.cpp
index d3559baec631eae196a7c055ad2e1bb482b62c38..2148957ce32972ec69614dec1417d0de69743f6c 100644
--- a/indra/llui/llviewborder.cpp
+++ b/indra/llui/llviewborder.cpp
@@ -30,7 +30,7 @@
 
 #include "linden_common.h"
 #include "llviewborder.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llfocusmgr.h"
 
 static LLRegisterWidget<LLViewBorder> r("view_border");
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 3ed566062fd9edc7ba6d62620db00a7eea990fe1..e7150809167395d4bfb50ba6cda05150c8649e11 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -605,8 +605,6 @@ LLWindowWin32::LLWindowWin32(const char *title, const char *name, S32 x, S32 y,
 	// Initialize (boot strap) the Language text input management,
 	// based on the system's (or user's) default settings.
 	allowLanguageTextInput(NULL, FALSE);
-
-	SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer
 }
 
 
@@ -1349,6 +1347,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
 	//make sure multi sampling is disabled by default
 	glDisable(GL_MULTISAMPLE_ARB);
 
+	//register joystick timer callback
+	SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer
 
 	// ok to post quit messages now
 	mPostQuit = TRUE;
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index ef6e32a7a09d89bb940eba458c87080aa3b61b4d..cb0c4f001a407f9a15a256b9f4cee21558c45562 100644
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -58,36 +58,45 @@
 //this defines the current version of the settings file
 const S32 CURRENT_VERSION = 101;
 
-BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
+bool LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
 {
+	bool result = false;
 	switch (mType)
 	{
 	case TYPE_U32:
 	case TYPE_S32:
-		return a.asInteger() == b.asInteger();
+		result = a.asInteger() == b.asInteger();
+		break;
 	case TYPE_BOOLEAN:
-		return a.asBoolean() == b.asBoolean();
+		result = a.asBoolean() == b.asBoolean();
+		break;
 	case TYPE_F32:
-		return a.asReal() == b.asReal();
+		result = a.asReal() == b.asReal();
+		break;
 	case TYPE_VEC3:
 	case TYPE_VEC3D:
-		return LLVector3d(a) == LLVector3d(b);
+		result = LLVector3d(a) == LLVector3d(b);
+		break;
 	case TYPE_RECT:
-		return LLRect(a) == LLRect(b);
+		result = LLRect(a) == LLRect(b);
+		break;
 	case TYPE_COL4:
-		return LLColor4(a) == LLColor4(b);
+		result = LLColor4(a) == LLColor4(b);
+		break;
 	case TYPE_COL3:
-		return LLColor3(a) == LLColor3(b);
+		result = LLColor3(a) == LLColor3(b);
+		break;
 	case TYPE_COL4U:
-		return LLColor4U(a) == LLColor4U(b);
+		result = LLColor4U(a) == LLColor4U(b);
+		break;
 	case TYPE_STRING:
-		return a.asString() == b.asString();
+		result = a.asString() == b.asString();
+		break;
 	default:
-		// no-op
 		break;
 	}
 
-	return FALSE;
+	return result;
 }
 
 LLControlVariable::LLControlVariable(const LLString& name, eControlType type,
@@ -114,14 +123,34 @@ LLControlVariable::~LLControlVariable()
 
 void LLControlVariable::setValue(const LLSD& value, bool saved_value)
 {
-    bool value_changed = llsd_compare(getValue(), value) == FALSE;
+	// *FIX:MEP - The following is needed to make the LLSD::ImplString 
+	// work with boolean controls...
+	LLSD storable_value;
+	if(TYPE_BOOLEAN == type() && value.isString())
+	{
+		BOOL temp;
+		if(LLString::convertToBOOL(value.asString(), temp)) 
+		{
+			storable_value = temp;
+		}
+		else
+		{
+			storable_value = FALSE;
+		}
+	}
+	else
+	{
+		storable_value = value;
+	}
+
+	bool value_changed = llsd_compare(getValue(), storable_value) == FALSE;
 	if(saved_value)
 	{
     	// If we're going to save this value, return to default but don't fire
 		resetToDefault(false);
-	    if (llsd_compare(mValues.back(), value) == FALSE)
+	    if (llsd_compare(mValues.back(), storable_value) == FALSE)
 	    {
-		    mValues.push_back(value);
+		    mValues.push_back(storable_value);
 	    }
 	}
     else
@@ -129,7 +158,7 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value)
         // This is a unsaved value. Its needs to reside at
         // mValues[2] (or greater). It must not affect 
         // the result of getSaveValue()
-	    if (llsd_compare(mValues.back(), value) == FALSE)
+	    if (llsd_compare(mValues.back(), storable_value) == FALSE)
 	    {
             while(mValues.size() > 2)
             {
@@ -144,13 +173,14 @@ void LLControlVariable::setValue(const LLSD& value, bool saved_value)
             }
 
             // Add the 'un-save' value.
-            mValues.push_back(value);
+            mValues.push_back(storable_value);
 	    }
     }
 
+
     if(value_changed)
     {
-        mSignal(value); 
+        mSignal(storable_value); 
     }
 }
 
@@ -1147,3 +1177,4 @@ void main()
 #endif
 
 
+
diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h
index 7287731cfaa3c03db6d6e9c8104351d7cd846049..fdbbe11b916b145db82c3f480ebc0c16f11acedf 100644
--- a/indra/llxml/llcontrol.h
+++ b/indra/llxml/llcontrol.h
@@ -127,7 +127,7 @@ class LLControlVariable
 	{
 		mSignal(mValues.back());
 	}
-	BOOL llsd_compare(const LLSD& a, const LLSD& b);
+	bool llsd_compare(const LLSD& a, const LLSD& b);
 };
 
 //const U32 STRING_CACHE_SIZE = 10000;
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index 6012c011c1d878cf17a90c68bcea179686a7743e..7272173fed80b564b0a2a842fb723c6c0d34c620 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
 /* Localized versions of Info.plist keys */
 
 CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.19.1.84396";
-CFBundleGetInfoString = "Second Life version 1.19.1.84396, Copyright 2004-2008 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.20.6.86975";
+CFBundleGetInfoString = "Second Life version 1.20.6.86975, Copyright 2004-2008 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 62f5ea167de837292d19ebd005dcfd0e000b9706..fa505035457e0217ce52f203a064e021c90bb805 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>1.19.1.84396</string>
+	<string>1.20.6.86975</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
 </dict>
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index ec12794bc59805b4b33fae0f0b5b2880426b06d5..746e56d821301550104610f54e4b0f37df423d93 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -49,7 +49,7 @@
       <key>count</key>
       <integer>1</integer>
       <key>map-to</key>
-      <string>GridChoice</string>
+      <string>CmdLineGridChoice</string>
     </map>
 
     <key>loginuri</key>
@@ -61,7 +61,7 @@
       <key>compose</key>
       <boolean>true</boolean>
       <key>map-to</key>
-      <string>LoginURI</string>
+      <string>CmdLineLoginURI</string>
     </map>
 
     <key>helperuri</key>
@@ -71,7 +71,7 @@
       <key>count</key>
       <integer>1</integer>
       <key>map-to</key>
-      <string>HelperURI</string>
+      <string>CmdLineHelperURI</string>
     </map>
 
     <key>debugviews</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 165582c0a7eb5b763556c00a13cfe661c22e6952..987ae79d593cdc149c60aeb0e9a2ed4277412285 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1,3813 +1,4177 @@
+<?xml version="1.0" ?>
 <llsd>
+<map>
+    <key>AFKTimeout</key>
     <map>
+      <key>Comment</key>
+      <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>300.0</real>
+    </map>
     <key>AdvanceSnapshot</key>
-        <map>
-        <key>Comment</key>
-            <string>Display advanced parameter settings in snaphot interface</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>AFKTimeout</key>
-        <map>
-        <key>Comment</key>
-            <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>300</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display advanced parameter settings in snaphot interface</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AgentChatColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of chat messages from other residents</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
-    <key>IMChatColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of instant messages from other residents</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of chat messages from other residents</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>AllowIdleAFK</key>
-        <map>
-        <key>Comment</key>
-            <string>Automatically set AFK (away from keyboard) mode when idle</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Automatically set AFK (away from keyboard) mode when idle</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AllowMultipleViewers</key>
-        <map>
-        <key>Comment</key>
-            <string>Allow multiple viewers.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Allow multiple viewers.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AllowTapTapHoldRun</key>
-        <map>
-        <key>Comment</key>
-            <string>Tapping a direction key twice and holding it down makes avatar run</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Tapping a direction key twice and holding it down makes avatar run</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AnimateTextures</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable texture animation (debug)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable texture animation (debug)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AnimationDebug</key>
-        <map>
-        <key>Comment</key>
-            <string>Show active animations in a bubble above avatars head</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show active animations in a bubble above avatars head</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AppearanceCameraMovement</key>
-        <map>
-        <key>Comment</key>
-            <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ApplyColorImmediately</key>
-        <map>
-        <key>Comment</key>
-            <string>Preview selections in color picker immediately</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Preview selections in color picker immediately</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ApplyTextureImmediately</key>
-        <map>
-        <key>Comment</key>
-            <string>Preview selections in texture picker immediately</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Preview selections in texture picker immediately</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ArrowKeysMoveAvatar</key>
-        <map>
-        <key>Comment</key>
-            <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AskedAboutCrashReports</key>
-        <map>
-        <key>Comment</key>
-            <string>Turns off dialog asking if you want to enable crash reporting</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Turns off dialog asking if you want to enable crash reporting</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AsyncKeyboard</key>
-        <map>
-        <key>Comment</key>
-            <string>Improves responsiveness to keyboard input when at low framerates</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Improves responsiveness to keyboard input when at low framerates</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AuctionShowFence</key>
-        <map>
-        <key>Comment</key>
-            <string>When auctioning land, include parcel boundary marker in snapshot</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>When auctioning land, include parcel boundary marker in snapshot</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AudioLevelAmbient</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio level of environment sounds</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio level of environment sounds</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>AudioLevelDistance</key>
-        <map>
-        <key>Comment</key>
-            <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AudioLevelDoppler</key>
-        <map>
-        <key>Comment</key>
-            <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AudioLevelMaster</key>
-        <map>
-        <key>Comment</key>
-            <string>Master audio level, or overall volume</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Master audio level, or overall volume</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AudioLevelMedia</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio level of Quicktime movies</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio level of Quicktime movies</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AudioLevelMic</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio level of microphone input</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio level of microphone input</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AudioLevelMusic</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio level of streaming music</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio level of streaming music</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AudioLevelRolloff</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AudioLevelSFX</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio level of in-world sound effects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>AudioLevelUI</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio level of UI sound effects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio level of in-world sound effects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>AudioLevelUI</key>
+    <map>
+      <key>Comment</key>
+      <string>Audio level of UI sound effects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>AudioLevelVoice</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio level of voice chat</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio level of voice chat</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>AudioStreamingMusic</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable streaming audio</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable streaming audio</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AudioStreamingVideo</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable streaming video</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable streaming video</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AutoAcceptNewInventory</key>
-        <map>
-        <key>Comment</key>
-            <string>Automatically accept new notecards/textures/landmarks</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Automatically accept new notecards/textures/landmarks</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>AutoLeveling</key>
+    <map>
+      <key>Comment</key>
+      <string>Keep Flycam level.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AutoLoadWebProfiles</key>
-        <map>
-        <key>Comment</key>
-            <string>Automatically load ALL profile webpages without asking first.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Automatically load ALL profile webpages without asking first.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AutoLogin</key>
-        <map>
-        <key>Comment</key>
-            <string>Login automatically using last username/password combination</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Login automatically using last username/password combination</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AutoMimeDiscovery</key>
-        <map>
-          <key>Comment</key>
-              <string>Enable viewer mime type discovery of media URLs</string>
-          <key>Persist</key>
-              <integer>1</integer>
-          <key>Type</key>
-              <string>Boolean</string>
-          <key>Value</key>
-              <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable viewer mime type discovery of media URLs</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AutoPilotLocksCamera</key>
-        <map>
-        <key>Comment</key>
-            <string>Keep camera position locked when avatar walks to selected position</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Keep camera position locked when avatar walks to selected position</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AutoSnapshot</key>
-        <map>
-        <key>Comment</key>
-            <string>Update snapshot when camera stops moving, or any parameter changes</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Update snapshot when camera stops moving, or any parameter changes</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AutomaticFly</key>
-        <map>
-        <key>Comment</key>
-            <string>Fly by holding jump key or using &quot;Fly&quot; command (FALSE = fly by using &quot;Fly&quot; command only)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>AvatarAxisDeadZone0</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 0 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>AvatarAxisDeadZone1</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 1 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>AvatarAxisDeadZone2</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 2 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>AvatarAxisDeadZone3</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 3 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>AvatarAxisDeadZone4</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 4 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>AvatarAxisDeadZone5</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 5 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>AvatarAxisScale0</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 0 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>AvatarAxisScale1</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 1 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>AvatarAxisScale2</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 2 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>AvatarAxisScale3</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 3 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>AvatarAxisScale4</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 4 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>AvatarAxisScale5</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar axis 5 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>AvatarBacklight</key>
-        <map>
-        <key>Comment</key>
-            <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AvatarCompositeLimit</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum number of avatars to display appearance changes on the fly</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>5</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum number of avatars to display appearance changes on the fly</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>5</integer>
+    </map>
+    <key>AvatarFeathering</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar feathering (less is softer)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>16.0</real>
+    </map>
     <key>AvatarPickerSortOrder</key>
-        <map>
-        <key>Comment</key>
-            <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>2</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
     <key>AvatarSex</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>BackgroundChatColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of chat bubble background</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of chat bubble background</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>BackgroundYieldTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>40</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>40</integer>
+    </map>
     <key>BackwardBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>45</integer>
-                <integer>29</integer>
-                <integer>66</integer>
-                <integer>4</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>45</integer>
+        <integer>29</integer>
+        <integer>66</integer>
+        <integer>4</integer>
+      </array>
+    </map>
     <key>BasicHelpRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for help window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>404</integer>
-                <integer>467</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for help window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>404</integer>
+        <integer>467</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>BeaconAlwaysOn</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacons / highlighting always on</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Beacons / highlighting always on</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>BrowserHomePage</key>
-        <map>
-        <key>Comment</key>
-            <string>[NOT USED]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>http://www.secondlife.com</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[NOT USED]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://www.secondlife.com</string>
+    </map>
     <key>BrowserProxyAddress</key>
-        <map>
-        <key>Comment</key>
-            <string>Address for the Web Proxy]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Address for the Web Proxy]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>BrowserProxyEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Use Web Proxy</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use Web Proxy</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>BrowserProxyExclusions</key>
-        <map>
-        <key>Comment</key>
-            <string>[NOT USED]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[NOT USED]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>BrowserProxyPort</key>
-        <map>
-        <key>Comment</key>
-            <string>Port for Web Proxy</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>3128</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Port for Web Proxy</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>3128</integer>
+    </map>
     <key>BrowserProxySocks45</key>
-        <map>
-        <key>Comment</key>
-            <string>[NOT USED]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>5</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[NOT USED]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>5</integer>
+    </map>
+    <key>BuildAxisDeadZone0</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 0 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>BuildAxisDeadZone1</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 1 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>BuildAxisDeadZone2</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 2 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>BuildAxisDeadZone3</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 3 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>BuildAxisDeadZone4</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 4 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>BuildAxisDeadZone5</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 5 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>BuildAxisScale0</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 0 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>BuildAxisScale1</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 1 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>BuildAxisScale2</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 2 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>BuildAxisScale3</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 3 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>BuildAxisScale4</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 4 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>BuildAxisScale5</key>
+    <map>
+      <key>Comment</key>
+      <string>Build axis 5 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>BuildBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>BuildFeathering</key>
+    <map>
+      <key>Comment</key>
+      <string>Build feathering (less is softer)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>16.0</real>
+    </map>
     <key>ButtonFlashCount</key>
-        <map>
-        <key>Comment</key>
-            <string>Number of flashes after which flashing buttons stay lit up</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>3</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Number of flashes after which flashing buttons stay lit up</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>3</integer>
+    </map>
     <key>ButtonFlashRate</key>
-        <map>
-        <key>Comment</key>
-            <string>Frequency at which buttons flash (hz)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>2</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Frequency at which buttons flash (hz)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>2.0</real>
+    </map>
     <key>ButtonHPad</key>
-        <map>
-        <key>Comment</key>
-            <string>Default horizontal spacing between buttons (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>10</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Default horizontal spacing between buttons (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>10</integer>
+    </map>
     <key>ButtonHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>Default height for normal buttons (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>20</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Default height for normal buttons (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>20</integer>
+    </map>
     <key>ButtonHeightSmall</key>
-        <map>
-        <key>Comment</key>
-            <string>Default height for small buttons (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>16</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Default height for small buttons (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>16</integer>
+    </map>
     <key>ButtonVPad</key>
-        <map>
-        <key>Comment</key>
-            <string>Default vertical spacing between buttons (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Default vertical spacing between buttons (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>CacheLocation</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls the location of the local disk cache</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls the location of the local disk cache</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>CacheSize</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls amount of hard drive space reserved for local file caching in MB</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>500</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls amount of hard drive space reserved for local file caching in MB</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>500</integer>
+    </map>
     <key>CacheValidateCounter</key>
-        <map>
-        <key>Comment</key>
-            <string>Used to distribute cache validation</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Used to distribute cache validation</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>CameraMouseWheelZoom</key>
+    <map>
+      <key>Comment</key>
+      <string>Camera zooms in and out with mousewheel</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>CameraOffset</key>
-        <map>
-        <key>Comment</key>
-            <string>Render with camera offset from view frustum (rendering debug)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Render with camera offset from view frustum (rendering debug)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>CameraOffsetBuild</key>
-        <map>
-        <key>Comment</key>
-            <string>Default camera position relative to focus point when entering build mode</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3</string>
-        <key>Value</key>
-            <array>
-                <real>-6</real>
-                <real>0</real>
-                <real>6</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Default camera position relative to focus point when entering build mode</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>-6.0</real>
+        <real>0.0</real>
+        <real>6.0</real>
+      </array>
+    </map>
     <key>CameraOffsetDefault</key>
-        <map>
-        <key>Comment</key>
-            <string>Default camera offset from avatar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3</string>
-        <key>Value</key>
-            <array>
-                <real>-3</real>
-                <real>0</real>
-                <real>0.75</real>
-            </array>
-        </map>
-    <key>CameraPositionSmoothing</key>
-        <map>
-        <key>Comment</key>
-            <string>Smooths camera position over time</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1.0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Default camera offset from avatar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>-3.0</real>
+        <real>0.0</real>
+        <real>0.75</real>
+      </array>
+    </map>
     <key>CameraPosOnLogout</key>
-        <map>
-        <key>Comment</key>
-            <string>Camera position when last logged out (global coordinates)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3D</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0</real>
-                <real>0</real>
-            </array>
-        </map>
-    <key>CameraMouseWheelZoom</key>
-        <map>
-        <key>Comment</key>
-            <string>Camera zooms in and out with mousewheel</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Camera position when last logged out (global coordinates)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3D</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>0.0</real>
+      </array>
+    </map>
+    <key>CameraPositionSmoothing</key>
+    <map>
+      <key>Comment</key>
+      <string>Smooths camera position over time</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>ChatBarStealsFocus</key>
-        <map>
-        <key>Comment</key>
-            <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ChatBubbleOpacity</key>
-        <map>
-        <key>Comment</key>
-            <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>ChatFontSize</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of chat text in chat console (0 = small, 1 = big)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>ChatFullWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Chat console takes up full width of SL window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of chat text in chat console (0 = small, 1 = big)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>ChatFullWidth</key>
+    <map>
+      <key>Comment</key>
+      <string>Chat console takes up full width of SL window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ChatHistoryTornOff</key>
-        <map>
-        <key>Comment</key>
-            <string>Show chat history window separately from Communicate window.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show chat history window separately from Communicate window.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ChatOnlineNotification</key>
-        <map>
-        <key>Comment</key>
-            <string>Provide notifications for when friend log on and off of SL</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Provide notifications for when friend log on and off of SL</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ChatPersistTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Time for which chat stays visible in console (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>15</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Time for which chat stays visible in console (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>15.0</real>
+    </map>
     <key>ChatShowTimestamps</key>
-        <map>
-        <key>Comment</key>
-            <string>Show timestamps in chat</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show timestamps in chat</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ChatVisible</key>
-        <map>
-        <key>Comment</key>
-            <string>Chat bar is visible</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Chat bar is visible</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ChatterboxRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for chatterbox window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>350</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for chatterbox window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>350</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>CheesyBeacon</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable cheesy beacon effects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable cheesy beacon effects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ClientSettingsFile</key>
-        <map>
-        <key>Comment</key>
-            <string>Persisted client settings file name (per install).</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Persisted client settings file name (per install).</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>CloseChatOnReturn</key>
-        <map>
-        <key>Comment</key>
-            <string>Close chat after hitting return</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Close chat after hitting return</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>CloseSnapshotOnKeep</key>
-        <map>
-        <key>Comment</key>
-            <string>Close snapshot window after saving snapshot</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Close snapshot window after saving snapshot</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ClothingBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>CmdLineDisableVoice</key>
-        <map>
-        <key>Comment</key>
-            <string>Disable Voice.</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disable Voice.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>CmdLineGridChoice</key>
+    <map>
+      <key>Comment</key>
+      <string>The user's grid choice or ip address.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
+    <key>CmdLineHelperURI</key>
+    <map>
+      <key>Comment</key>
+      <string>Command line specified helper web CGI prefix to use.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
+    <key>CmdLineLoginURI</key>
+    <map>
+      <key>Comment</key>
+      <string>Command line specified login server and CGI prefix to use.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>LLSD</string>
+      <key>Value</key>
+      <array>
+        <string />
+      </array>
+    </map>
     <key>ColorPaletteEntry01</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry02</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0.5</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.5</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry03</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry04</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0.5</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.5</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry05</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0.5</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.5</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry06</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0.5</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.5</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry07</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry08</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.0</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry09</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0.5</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.5</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry10</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0.25</real>
-                <real>0.25</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.25</real>
+        <real>0.25</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry11</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0.5</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.5</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry12</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0.25</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.25</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry13</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry14</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0.25</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.25</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry15</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry16</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry17</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry18</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.75</real>
-                <real>0.75</real>
-                <real>0.75</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.75</real>
+        <real>0.75</real>
+        <real>0.75</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry19</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>0</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry20</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry21</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>1</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry22</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry23</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry24</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>0</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry25</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry26</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>1</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>1.0</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry27</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry28</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.5</real>
-                <real>0.5</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.5</real>
+        <real>0.5</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry29</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>0</real>
-                <real>0.5</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>0.5</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry30</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>0.5</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.5</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry31</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColorPaletteEntry32</key>
-        <map>
-        <key>Comment</key>
-            <string>Color picker palette entry</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color picker palette entry</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ColumnHeaderDropDownDelay</key>
-        <map>
-        <key>Comment</key>
-            <string>Time in seconds of mouse click before column header shows sort options list</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.300000011920928955078125</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Time in seconds of mouse click before column header shows sort options list</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.300000011921</real>
+    </map>
     <key>CompileOutputRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for script Recompile Everything output window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for script Recompile Everything output window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>CompressSnapshotsToDisk</key>
-        <map>
-        <key>Comment</key>
-            <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ConnectAsGod</key>
-        <map>
-        <key>Comment</key>
-            <string>Log in a god if you have god access.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Log in a god if you have god access.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ConnectionPort</key>
-        <map>
-        <key>Comment</key>
-            <string>Custom connection port number</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>13000</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Custom connection port number</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>13000</integer>
+    </map>
     <key>ConnectionPortEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Use the custom connection port?</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use the custom connection port?</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ConsoleBackgroundOpacity</key>
-        <map>
-        <key>Comment</key>
-            <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.4000000059604644775390625</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.40000000596</real>
+    </map>
     <key>ConsoleBufferSize</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of chat console history (lines of chat)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>40</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of chat console history (lines of chat)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>40</integer>
+    </map>
     <key>ConsoleMaxLines</key>
-        <map>
-        <key>Comment</key>
-            <string>Max number of lines of chat text visible in console.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>40</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Max number of lines of chat text visible in console.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>40</integer>
+    </map>
     <key>ContactsTornOff</key>
-        <map>
-        <key>Comment</key>
-            <string>Show contacts window separately from Communicate window.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show contacts window separately from Communicate window.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>CookiesEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Accept cookies from Web sites?</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>CrashLogBehavior</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Accept cookies from Web sites?</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>CreateToolCopyCenters</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>CreateToolCopyRotates</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>CreateToolCopySelection</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>CreateToolKeepSelected</key>
-        <map>
-        <key>Comment</key>
-            <string>After using create tool, keep the create tool active</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>After using create tool, keep the create tool active</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>Cursor3D</key>
+    <map>
+      <key>Comment</key>
+      <string>Tread Joystick values as absolute positions (not deltas).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>CustomServer</key>
-        <map>
-        <key>Comment</key>
-            <string>Specifies IP address or hostname of grid to which you connect</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Specifies IP address or hostname of grid to which you connect</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>DebugBeaconLineWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of lines for Debug Beacons</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of lines for Debug Beacons</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DebugInventoryFilters</key>
-        <map>
-        <key>Comment</key>
-            <string>Turn on debugging display for inventory filtering</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Turn on debugging display for inventory filtering</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DebugPermissions</key>
-        <map>
-        <key>Comment</key>
-            <string>Log permissions for selected inventory items</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Log permissions for selected inventory items</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DebugShowColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Show color under cursor</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show color under cursor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DebugShowRenderInfo</key>
-        <map>
-        <key>Comment</key>
-            <string>Show depth buffer contents</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show depth buffer contents</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DebugShowTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Show depth buffer contents</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show depth buffer contents</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DebugViews</key>
-        <map>
-        <key>Comment</key>
-            <string>Display debugging info for views.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display debugging info for views.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DebugWindowProc</key>
-        <map>
-        <key>Comment</key>
-            <string>Log windows messages</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Log windows messages</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DefaultObjectTexture</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture used as &apos;Default&apos; in texture picker. (UUID texture reference)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>89556747-24cb-43ed-920b-47caed15465f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture used as 'Default' in texture picker. (UUID texture reference)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>89556747-24cb-43ed-920b-47caed15465f</string>
+    </map>
     <key>DisableCameraConstraints</key>
-        <map>
-        <key>Comment</key>
-            <string>Disable the normal bounds put on the camera by avatar position</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disable the normal bounds put on the camera by avatar position</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DisableRendering</key>
-        <map>
-        <key>Comment</key>
-            <string>Disable GL rendering and GUI (load testing)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disable GL rendering and GUI (load testing)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DisableVerticalSync</key>
-        <map>
-        <key>Comment</key>
-            <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DisplayAvatarAgentTarget</key>
-        <map>
-        <key>Comment</key>
-            <string>Show avatar positioning locators (animation debug)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show avatar positioning locators (animation debug)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DisplayChat</key>
-        <map>
-        <key>Comment</key>
-            <string>Display Latest Chat message on LCD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display Latest Chat message on LCD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DisplayDebug</key>
-        <map>
-        <key>Comment</key>
-            <string>Display Network Information on LCD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display Network Information on LCD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DisplayDebugConsole</key>
-        <map>
-        <key>Comment</key>
-            <string>Display Console Debug Information on LCD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display Console Debug Information on LCD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DisplayIM</key>
-        <map>
-        <key>Comment</key>
-            <string>Display Latest IM message on LCD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>DisplayLinden</key>
-        <map>
-        <key>Comment</key>
-            <string>Display Account Information on LCD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display Latest IM message on LCD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>DisplayLinden</key>
+    <map>
+      <key>Comment</key>
+      <string>Display Account Information on LCD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DisplayRegion</key>
-        <map>
-        <key>Comment</key>
-            <string>Display Location information on LCD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display Location information on LCD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DisplayTimecode</key>
-        <map>
-        <key>Comment</key>
-            <string>Display timecode on screen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display timecode on screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>Disregard128DefaultDrawDistance</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether to use the auto default to 128 draw distance</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether to use the auto default to 128 draw distance</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>Disregard96DefaultDrawDistance</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether to use the auto default to 96 draw distance</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether to use the auto default to 96 draw distance</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>DoubleClickAutoPilot</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable double-click auto pilot</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable double-click auto pilot</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DragAndDropToolTipDelay</key>
-        <map>
-        <key>Comment</key>
-            <string>Seconds before displaying tooltip when performing drag and drop operation</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1000000014901161193847656</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Seconds before displaying tooltip when performing drag and drop operation</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.10000000149</real>
+    </map>
     <key>DropShadowButton</key>
-        <map>
-        <key>Comment</key>
-            <string>Drop shadow width for buttons (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>2</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Drop shadow width for buttons (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
     <key>DropShadowFloater</key>
-        <map>
-        <key>Comment</key>
-            <string>Drop shadow width for floaters (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>5</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Drop shadow width for floaters (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>5</integer>
+    </map>
     <key>DropShadowSlider</key>
-        <map>
-        <key>Comment</key>
-            <string>Drop shadow width for sliders (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>3</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Drop shadow width for sliders (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>3</integer>
+    </map>
     <key>DropShadowTooltip</key>
-        <map>
-        <key>Comment</key>
-            <string>Drop shadow width for tooltips (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>4</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Drop shadow width for tooltips (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>4</integer>
+    </map>
     <key>DynamicCameraStrength</key>
-        <map>
-        <key>Comment</key>
-            <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>2</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>2.0</real>
+    </map>
     <key>EditCameraMovement</key>
-        <map>
-        <key>Comment</key>
-            <string>When entering build mode, camera moves up above avatar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>When entering build mode, camera moves up above avatar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>EditLinkedParts</key>
-        <map>
-        <key>Comment</key>
-            <string>Select individual parts of linked objects</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Select individual parts of linked objects</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>EffectColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Particle effects color</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Particle effects color</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>EnablePushToTalk</key>
-        <map>
-        <key>Comment</key>
-            <string>Must hold down a key or moouse button when talking into your microphone</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Must hold down a key or moouse button when talking into your microphone</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>EnableRippleWater</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether to use ripple water shader or not</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>EnableVoiceChat</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable talking to other residents with a microphone</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable talking to other residents with a microphone</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>EnergyFromTop</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>20</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>20</integer>
+    </map>
     <key>EnergyHeight</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>40</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>40</integer>
+    </map>
     <key>EnergyWidth</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>175</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>175</integer>
+    </map>
+    <key>FPSLogFrequency</key>
+    <map>
+      <key>Comment</key>
+      <string>Seconds between display of FPS in log (0 for never)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>60.0</real>
+    </map>
     <key>FilterItemsPerFrame</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>500</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>500</integer>
+    </map>
     <key>FindLandArea</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables filtering of land search results by area</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables filtering of land search results by area</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FindLandPrice</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables filtering of land search results by price</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables filtering of land search results by price</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FindLandType</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls which type of land you are searching for in Find Land interface (&quot;All&quot;, &quot;Auction&quot;, &quot;For Sale&quot;)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>All</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale")</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>All</string>
+    </map>
     <key>FindPeopleOnline</key>
-        <map>
-        <key>Comment</key>
-            <string>Limits people search to only users who are logged on</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Limits people search to only users who are logged on</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FindPlacesPictures</key>
-        <map>
-        <key>Comment</key>
-            <string>Display only results of find places that have pictures</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display only results of find places that have pictures</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FirstLoginThisInstall</key>
-        <map>
-        <key>Comment</key>
-            <string>Specifies that you have not successfully logged in since you installed the latest update</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Specifies that you have not successfully logged in since you installed the latest update</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FirstName</key>
-        <map>
-        <key>Comment</key>
-            <string>Login first name</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Login first name</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>FirstPersonAvatarVisible</key>
-        <map>
-        <key>Comment</key>
-            <string>Display avatar and attachments below neck while in mouselook</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display avatar and attachments below neck while in mouselook</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FirstPersonBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FirstRunThisInstall</key>
-        <map>
-        <key>Comment</key>
-            <string>Specifies that you have not run the viewer since you installed the latest update</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Specifies that you have not run the viewer since you installed the latest update</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FixedWeather</key>
-        <map>
-        <key>Comment</key>
-            <string>Weather effects do not change over time</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Weather effects do not change over time</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FloaterAboutRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for About window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>440</integer>
-                <integer>470</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for About window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>440</integer>
+        <integer>470</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterActiveSpeakersRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for active speakers window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>300</integer>
-                <integer>250</integer>
-                <integer>0</integer>
-            </array>
-        </map>
-    <key>FloaterActiveSpeakersSortColumn</key>
-        <map>
-        <key>Comment</key>
-            <string>Column name to sort on</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>speaker_name</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for active speakers window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>300</integer>
+        <integer>250</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterActiveSpeakersSortAscending</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether to sort up or down</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether to sort up or down</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>FloaterActiveSpeakersSortColumn</key>
+    <map>
+      <key>Comment</key>
+      <string>Column name to sort on</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>speaker_name</string>
+    </map>
+    <key>FloaterAdvancedSkyRect</key>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Advanced Sky Editor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>50</integer>
+        <integer>220</integer>
+        <integer>450</integer>
+        <integer>0</integer>
+      </array>
+    </map>
+    <key>FloaterAdvancedWaterRect</key>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Advanced Water Editor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>50</integer>
+        <integer>220</integer>
+        <integer>450</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterAudioVolumeRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Audio Volume window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>440</integer>
-                <integer>470</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Audio Volume window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>440</integer>
+        <integer>470</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterBuildOptionsRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for build options window.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>0</integer>
-                <integer>0</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for build options window.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>0</integer>
+        <integer>0</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterBumpRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Bumps/Hits window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>180</integer>
-                <integer>400</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Bumps/Hits window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>180</integer>
+        <integer>400</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterBuyContentsRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Buy Contents window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>250</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Buy Contents window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>250</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterBuyRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for buy window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>250</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for buy window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>250</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterCameraRect3</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for camera control window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>64</integer>
-                <integer>176</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for camera control window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>64</integer>
+        <integer>176</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterChatRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for chat history</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>172</integer>
-                <integer>500</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for chat history</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>172</integer>
+        <integer>500</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterClothingRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for clothing window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>480</integer>
-                <integer>320</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for clothing window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>480</integer>
+        <integer>320</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterContactsRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for chat history</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>390</integer>
-                <integer>395</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for chat history</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>390</integer>
+        <integer>395</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterCustomizeAppearanceRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for avatar customization window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>540</integer>
-                <integer>494</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for avatar customization window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>540</integer>
+        <integer>494</integer>
+        <integer>0</integer>
+      </array>
+    </map>
+    <key>FloaterDayCycleRect</key>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Day Cycle Editor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>50</integer>
+        <integer>450</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
+    <key>FloaterEnvRect</key>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Environment Editor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>50</integer>
+        <integer>150</integer>
+        <integer>650</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterFindRect2</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Find window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>570</integer>
-                <integer>780</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Find window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>570</integer>
+        <integer>780</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterFriendsRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for friends window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>250</integer>
-                <integer>0</integer>
-            </array>
-        </map>
-    <key>FloaterGestureRect2</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for gestures window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>465</integer>
-                <integer>350</integer>
-                <integer>0</integer>
-            </array>
-        </map>
-    <key>FloaterHtmlRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for HTML window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>100</integer>
-                <integer>460</integer>
-                <integer>370</integer>
-                <integer>100</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for friends window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>250</integer>
+        <integer>0</integer>
+      </array>
+    </map>
+    <key>FloaterGestureRect2</key>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for gestures window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>465</integer>
+        <integer>350</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterHUDRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for HUD Floater window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>282</integer>
-                <integer>342</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for HUD Floater window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>282</integer>
+        <integer>342</integer>
+        <integer>0</integer>
+      </array>
+    </map>
+    <key>FloaterHtmlRect</key>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for HTML window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>100</integer>
+        <integer>460</integer>
+        <integer>370</integer>
+        <integer>100</integer>
+      </array>
+    </map>
     <key>FloaterIMRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for IM window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>160</integer>
-                <integer>500</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for IM window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>160</integer>
+        <integer>500</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterInspectRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Object Inspect window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>400</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Object Inspect window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>400</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterInventoryRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for inventory window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for inventory window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterJoystickRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for joystick controls window.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>0</integer>
-                <integer>0</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for joystick controls window.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>0</integer>
+        <integer>0</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterLagMeter</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for lag meter</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>142</integer>
-                <integer>350</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for lag meter</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>142</integer>
+        <integer>350</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterLandRect5</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for About Land window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>370</integer>
-                <integer>460</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for About Land window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>370</integer>
+        <integer>460</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterLandmarkRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for landmark picker</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>290</integer>
-                <integer>310</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for landmark picker</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>290</integer>
+        <integer>310</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterMediaRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for media browser window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>16</integer>
-                <integer>650</integer>
-                <integer>600</integer>
-                <integer>128</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for media browser window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>16</integer>
+        <integer>650</integer>
+        <integer>600</integer>
+        <integer>128</integer>
+      </array>
+    </map>
     <key>FloaterMiniMapRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for world map</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>225</integer>
-                <integer>200</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for world map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>225</integer>
+        <integer>200</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterMoveRect2</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for avatar control window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>58</integer>
-                <integer>135</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for avatar control window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>58</integer>
+        <integer>135</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterMuteRect3</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for mute window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>300</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for mute window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>300</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterOpenObjectRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Open Object window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>350</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Open Object window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>350</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterPayRectB</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for pay window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>150</integer>
-                <integer>400</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for pay window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>150</integer>
+        <integer>400</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterRegionInfo</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for region info window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>512</integer>
-                <integer>480</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for region info window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>512</integer>
+        <integer>480</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterScriptDebugRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Script Error/Debug window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>130</integer>
-                <integer>450</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Script Error/Debug window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>130</integer>
+        <integer>450</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FloaterSnapshotRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for snapshot window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>200</integer>
-                <integer>200</integer>
-                <integer>400</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for snapshot window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>200</integer>
+        <integer>200</integer>
+        <integer>400</integer>
+      </array>
+    </map>
     <key>FloaterViewBottom</key>
-        <map>
-        <key>Comment</key>
-            <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>-1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
     <key>FloaterWorldMapRect2</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for world map window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>0</integer>
-                <integer>0</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for world map window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>0</integer>
+        <integer>0</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>FlyBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FlycamAbsolute</key>
-        <map>
-        <key>Comment</key>
-            <string>Treat Flycam values as absolute positions (not deltas).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>AutoLeveling</key>
-        <map>
-        <key>Comment</key>
-            <string>Keep Flycam level.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>Cursor3D</key>
-        <map>
-        <key>Comment</key>
-            <string>Tread Joystick values as absolute positions (not deltas).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>ZoomDirect</key>
-        <map>
-        <key>Comment</key>
-            <string>Map Joystick zoom axis directly to camera zoom.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>JoystickInitialized</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether or not a joystick has been detected and initiailized.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string></string>
-        </map>
-    <key>JoystickEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables Joystick Input.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>JoystickFlycamEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables the Joystick to control the flycam.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <string>1</string>
-        </map>
-    <key>JoystickAvatarEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables the Joystick to control Avatar movmement.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <string>1</string>
-        </map>
-    <key>JoystickBuildEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables the Joystick to move edited objects.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <string>1</string>
-        </map>
-    <key>JoystickAxis0</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>JoystickAxis1</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>JoystickAxis2</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>2</integer>
-        </map>
-    <key>JoystickAxis3</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>4</integer>
-        </map>
-    <key>JoystickAxis4</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>3</integer>
-        </map>
-    <key>JoystickAxis5</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>5</integer>
-        </map>
-    <key>JoystickAxis6</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>-1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Treat Flycam values as absolute positions (not deltas).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FlycamAxisDeadZone0</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 0 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 0 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>FlycamAxisDeadZone1</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 1 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 1 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>FlycamAxisDeadZone2</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 2 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 2 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>FlycamAxisDeadZone3</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 3 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 3 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>FlycamAxisDeadZone4</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 4 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 4 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>FlycamAxisDeadZone5</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 5 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 5 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>FlycamAxisDeadZone6</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 6 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 6 dead zone.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>FlycamAxisScale0</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 0 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 0 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FlycamAxisScale1</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 1 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 1 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FlycamAxisScale2</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 2 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 2 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FlycamAxisScale3</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 3 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 3 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FlycamAxisScale4</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 4 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 4 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FlycamAxisScale5</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 5 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 5 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FlycamAxisScale6</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam axis 6 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam axis 6 scaler.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FlycamFeathering</key>
-        <map>
-        <key>Comment</key>
-            <string>Flycam feathering (less is softer)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>16</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Flycam feathering (less is softer)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>16.0</real>
+    </map>
     <key>FlycamZoomDirect</key>
-        <map>
-        <key>Comment</key>
-            <string>Map flycam zoom axis directly to camera zoom.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Map flycam zoom axis directly to camera zoom.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FlyingAtExit</key>
-        <map>
-        <key>Comment</key>
-            <string>Was flying when last logged out, so fly when logging in</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Was flying when last logged out, so fly when logging in</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FocusOffsetDefault</key>
-        <map>
-        <key>Comment</key>
-            <string>Default focus point offset relative to avatar (x-axis is forward)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Default focus point offset relative to avatar (x-axis is forward)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>FocusPosOnLogout</key>
-        <map>
-        <key>Comment</key>
-            <string>Camera focus point when last logged out (global coordinates)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3D</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>0</real>
-                <real>0</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Camera focus point when last logged out (global coordinates)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3D</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>0.0</real>
+      </array>
+    </map>
     <key>FolderAutoOpenDelay</key>
-        <map>
-        <key>Comment</key>
-            <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.75</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.75</real>
+    </map>
     <key>FolderLoadingMessageWaitTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Seconds to wait before showing the LOADING... text in folder views</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Seconds to wait before showing the LOADING... text in folder views</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>FontMonospace</key>
-        <map>
-        <key>Comment</key>
-            <string>Name of monospace font (Truetype file name)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>profontwindows.ttf</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Name of monospace font (Truetype file name)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>profontwindows.ttf</string>
+    </map>
     <key>FontSansSerif</key>
-        <map>
-        <key>Comment</key>
-            <string>Name of san-serif font (Truetype file name)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>MtBkLfRg.ttf</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Name of san-serif font (Truetype file name)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>MtBkLfRg.ttf</string>
+    </map>
     <key>FontSansSerifBold</key>
-        <map>
-        <key>Comment</key>
-            <string>Name of bold font (Truetype file name)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>MtBdLfRg.ttf</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Name of bold font (Truetype file name)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>MtBdLfRg.ttf</string>
+    </map>
     <key>FontSansSerifFallback</key>
-        <map>
-        <key>Comment</key>
-            <string>Name of san-serif font (Truetype file name)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string></string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Name of san-serif font (Truetype file name)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>FontSansSerifFallbackScale</key>
-        <map>
-        <key>Comment</key>
-            <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>FontScreenDPI</key>
-        <map>
-        <key>Comment</key>
-            <string>Font resolution, higher is bigger (pixels per inch)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>96</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Font resolution, higher is bigger (pixels per inch)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>96.0</real>
+    </map>
     <key>FontSizeHuge</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of huge font (points, or 1/72 of an inch)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>16</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of huge font (points, or 1/72 of an inch)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>16.0</real>
+    </map>
     <key>FontSizeLarge</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of large font (points, or 1/72 of an inch)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>12</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of large font (points, or 1/72 of an inch)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>12.0</real>
+    </map>
     <key>FontSizeMedium</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of medium font (points, or 1/72 of an inch)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>10</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of medium font (points, or 1/72 of an inch)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>10.0</real>
+    </map>
     <key>FontSizeMonospace</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of monospaced font (points, or 1/72 of an inch)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>9</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of monospaced font (points, or 1/72 of an inch)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>9.0</real>
+    </map>
     <key>FontSizeSmall</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of small font (points, or 1/72 of an inch)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>9</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of small font (points, or 1/72 of an inch)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>9.0</real>
+    </map>
     <key>ForceShowGrid</key>
-        <map>
-        <key>Comment</key>
-            <string>Always show grid dropdown on login screen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Always show grid dropdown on login screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ForwardBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>45</integer>
-                <integer>54</integer>
-                <integer>66</integer>
-                <integer>29</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>45</integer>
+        <integer>54</integer>
+        <integer>66</integer>
+        <integer>29</integer>
+      </array>
+    </map>
     <key>FreezeTime</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FullScreen</key>
-        <map>
-        <key>Comment</key>
-            <string>Run SL in fullscreen mode</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Run SL in fullscreen mode</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>FullScreenAspectRatio</key>
-        <map>
-        <key>Comment</key>
-            <string>Aspect ratio of fullscreen display (width / height)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1.33329999446868896484375</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Aspect ratio of fullscreen display (width / height)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.33329999447</real>
+    </map>
     <key>FullScreenAutoDetectAspectRatio</key>
-        <map>
-        <key>Comment</key>
-            <string>Automatically detect proper aspect ratio for fullscreen display</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Automatically detect proper aspect ratio for fullscreen display</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FullScreenHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>Fullscreen resolution in height</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>768</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Fullscreen resolution in height</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>768</integer>
+    </map>
     <key>FullScreenWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Fullscreen resolution in width</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1024</integer>
-        </map>
-    <key>GridChoice</key>
-        <map>
-        <key>Comment</key>
-            <string>The user&apos;s grid choice or ip address.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Fullscreen resolution in width</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>1024</integer>
+    </map>
     <key>GridCrossSections</key>
-        <map>
-        <key>Comment</key>
-            <string>Highlight cross sections of prims with grid manipulation plane.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Highlight cross sections of prims with grid manipulation plane.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>GridDrawSize</key>
-        <map>
-        <key>Comment</key>
-            <string>Visible extent of 2D snap grid (meters)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>12</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Visible extent of 2D snap grid (meters)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>12.0</real>
+    </map>
     <key>GridMode</key>
-        <map>
-        <key>Comment</key>
-            <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>GridOpacity</key>
-        <map>
-        <key>Comment</key>
-            <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.699999988079071044921875</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.699999988079</real>
+    </map>
     <key>GridResolution</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of single grid step (meters)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of single grid step (meters)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>GridSubUnit</key>
-        <map>
-        <key>Comment</key>
-            <string>Display fractional grid steps, relative to grid size</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display fractional grid steps, relative to grid size</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>GridSubdivision</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>32</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>32</integer>
+    </map>
     <key>GroupNotifyBoxHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>Height of group notice messages</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>260</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Height of group notice messages</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>260</integer>
+    </map>
     <key>GroupNotifyBoxWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Width of group notice messages</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>400</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Width of group notice messages</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>400</integer>
+    </map>
     <key>HTMLLinkColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of hyperlinks</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.60000002384185791015625</real>
-                <real>0.60000002384185791015625</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of hyperlinks</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.600000023842</real>
+        <real>0.600000023842</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>HelpHomeURL</key>
-        <map>
-        <key>Comment</key>
-            <string>URL of initial help page</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>help/index.html</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>URL of initial help page</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>help/index.html</string>
+    </map>
     <key>HelpLastVisitedURL</key>
-        <map>
-        <key>Comment</key>
-            <string>URL of last help page, will be shown next time help is accessed</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>help/index.html</string>
-        </map>
-    <key>HelperURI</key>
-        <map>
-        <key>Comment</key>
-            <string>helper web CGI prefix to use</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>URL of last help page, will be shown next time help is accessed</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>help/index.html</string>
+    </map>
     <key>HighResSnapshot</key>
-        <map>
-        <key>Comment</key>
-            <string>Double resolution of snapshot from current window resolution</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Double resolution of snapshot from current window resolution</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>HtmlFindRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for HTML find window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>16</integer>
-                <integer>650</integer>
-                <integer>600</integer>
-                <integer>128</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for HTML find window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>16</integer>
+        <integer>650</integer>
+        <integer>600</integer>
+        <integer>128</integer>
+      </array>
+    </map>
     <key>HtmlHelpLastPage</key>
-        <map>
-        <key>Comment</key>
-            <string>Last URL visited via help system</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Last URL visited via help system</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>HtmlHelpRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for HTML help window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>16</integer>
-                <integer>650</integer>
-                <integer>600</integer>
-                <integer>128</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for HTML help window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>16</integer>
+        <integer>650</integer>
+        <integer>600</integer>
+        <integer>128</integer>
+      </array>
+    </map>
     <key>HtmlReleaseMessage</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for HTML Release Message Floater window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>46</integer>
-                <integer>520</integer>
-                <integer>400</integer>
-                <integer>128</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for HTML Release Message Floater window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>46</integer>
+        <integer>520</integer>
+        <integer>400</integer>
+        <integer>128</integer>
+      </array>
+    </map>
+    <key>IMChatColor</key>
+    <map>
+      <key>Comment</key>
+      <string>Color of instant messages from other residents</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>IMInChatHistory</key>
-        <map>
-        <key>Comment</key>
-            <string>Copy IM into chat history</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Copy IM into chat history</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>IMShowTimestamps</key>
-        <map>
-        <key>Comment</key>
-            <string>Show timestamps in IM</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show timestamps in IM</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>IgnorePixelDepth</key>
-        <map>
-        <key>Comment</key>
-            <string>Ignore pixel depth settings.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Ignore pixel depth settings.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ImagePipelineUseHTTP</key>
-        <map>
-        <key>Comment</key>
-            <string>If TRUE use HTTP GET to fetch textures from the server</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>If TRUE use HTTP GET to fetch textures from the server</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>InBandwidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Incoming bandwidth throttle (bps)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Incoming bandwidth throttle (bps)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.0</real>
+    </map>
     <key>InventoryAutoOpenDelay</key>
-        <map>
-        <key>Comment</key>
-            <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>InventorySortOrder</key>
-        <map>
-        <key>Comment</key>
-            <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>7</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>7</integer>
+    </map>
     <key>InvertMouse</key>
-        <map>
-        <key>Comment</key>
-            <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>JoystickAvatarEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables the Joystick to control Avatar movmement.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <string>1</string>
+    </map>
+    <key>JoystickAxis0</key>
+    <map>
+      <key>Comment</key>
+      <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>JoystickAxis1</key>
+    <map>
+      <key>Comment</key>
+      <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>JoystickAxis2</key>
+    <map>
+      <key>Comment</key>
+      <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
+    <key>JoystickAxis3</key>
+    <map>
+      <key>Comment</key>
+      <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>4</integer>
+    </map>
+    <key>JoystickAxis4</key>
+    <map>
+      <key>Comment</key>
+      <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>3</integer>
+    </map>
+    <key>JoystickAxis5</key>
+    <map>
+      <key>Comment</key>
+      <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>5</integer>
+    </map>
+    <key>JoystickAxis6</key>
+    <map>
+      <key>Comment</key>
+      <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
+    <key>JoystickBuildEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables the Joystick to move edited objects.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <string>1</string>
+    </map>
+    <key>JoystickEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables Joystick Input.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>JoystickFlycamEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>Enables the Joystick to control the flycam.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <string>1</string>
+    </map>
+    <key>JoystickInitialized</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether or not a joystick has been detected and initiailized.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>KeepAspectForSnapshot</key>
-        <map>
-        <key>Comment</key>
-            <string>Use full window when taking snapshot, regardless of requested image size</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use full window when taking snapshot, regardless of requested image size</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>LCDDestination</key>
-        <map>
-        <key>Comment</key>
-            <string>Which LCD to use</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Which LCD to use</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>LSLHelpRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for LSL help window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>400</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for LSL help window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>400</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>LSLHelpURL</key>
-        <map>
-        <key>Comment</key>
-            <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
+    </map>
     <key>LagMeterShrunk</key>
-        <map>
-        <key>Comment</key>
-            <string>Last large/small state for lag meter</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Last large/small state for lag meter</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>Language</key>
-        <map>
-        <key>Comment</key>
-            <string>Language specifier (for XUI)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>default</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Language specifier (for XUI)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>default</string>
+    </map>
     <key>LanguageIsPublic</key>
         <map>
         <key>Comment</key>
@@ -3820,6398 +4184,6035 @@
             <integer>1</integer>
         </map>
     <key>LastFeatureVersion</key>
-        <map>
-        <key>Comment</key>
-            <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>LastFindPanel</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls which find operation appears by default when clicking &quot;Find&quot; button </string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>find_all_panel</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls which find operation appears by default when clicking "Find" button </string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>find_all_panel</string>
+    </map>
     <key>LastName</key>
-        <map>
-        <key>Comment</key>
-            <string>Login last name</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Login last name</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>LastPrefTab</key>
-        <map>
-        <key>Comment</key>
-            <string>Last selected tab in preferences window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Last selected tab in preferences window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>LastRunVersion</key>
-        <map>
-        <key>Comment</key>
-            <string>Version number of last instance of the viewer that you ran</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>0.0.0</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Version number of last instance of the viewer that you ran</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>0.0.0</string>
+    </map>
     <key>LastSnapshotHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>The height of the last snapshot, in px</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>768</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>The height of the last snapshot, in px</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>768</integer>
+    </map>
     <key>LastSnapshotType</key>
-        <map>
-        <key>Comment</key>
-            <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>LastSnapshotWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>The width of the last snapshot, in px</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1024</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>The width of the last snapshot, in px</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>1024</integer>
+    </map>
     <key>LeftClickShowMenu</key>
-        <map>
-        <key>Comment</key>
-            <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>LimitDragDistance</key>
-        <map>
-        <key>Comment</key>
-            <string>Limit translation of object via translate tool</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Limit translation of object via translate tool</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>LimitSelectDistance</key>
-        <map>
-        <key>Comment</key>
-            <string>Disallow selection of objects beyond max select distance</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disallow selection of objects beyond max select distance</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>LipSyncAah</key>
-        <map>
-        <key>Comment</key>
-            <string>Aah (jaw opening) babble loop</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>257998776531013446642343</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Aah (jaw opening) babble loop</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>257998776531013446642343</string>
+    </map>
     <key>LipSyncAahPowerTransfer</key>
+    <map>
+      <key>Comment</key>
+      <string>Transfer curve for Voice Interface power to aah lip sync amplitude</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>0000123456789</string>
+    </map>
+    <key>LipSyncEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>0 disable lip-sync, 1 enable babble loop</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>LipSyncOoh</key>
+    <map>
+      <key>Comment</key>
+      <string>Ooh (mouth width) babble loop</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>1247898743223344444443200000</string>
+    </map>
+    <key>LipSyncOohAahRate</key>
+    <map>
+      <key>Comment</key>
+      <string>Rate to babble Ooh and Aah (/sec)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>24.0</real>
+    </map>
+    <key>LipSyncOohPowerTransfer</key>
+    <map>
+      <key>Comment</key>
+      <string>Transfer curve for Voice Interface power to ooh lip sync amplitude</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>0012345566778899</string>
+    </map>
+    <key>LocalCacheVersion</key>
+    <map>
+      <key>Comment</key>
+      <string>Version number of cache</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>LogMessages</key>
+    <map>
+      <key>Comment</key>
+      <string>Log network traffic</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>LoginAsGod</key>
+    <map>
+      <key>Comment</key>
+      <string>Attempt to login with god powers (Linden accounts only)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>LoginLastLocation</key>
+    <map>
+      <key>Comment</key>
+      <string>Login at same location you last logged out</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>LoginPage</key>
+    <map>
+      <key>Comment</key>
+      <string>Login authentication page.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
+    <key>LosslessJ2CUpload</key>
+    <map>
+      <key>Comment</key>
+      <string>Use lossless compression for small image uploads</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>MainloopTimeoutDefault</key>
+    <map>
+      <key>Comment</key>
+      <string>Timeout duration for mainloop lock detection, in seconds.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>20.0</real>
+    </map>
+    <key>MainloopTimeoutDefault</key>
         <map>
         <key>Comment</key>
-            <string>Transfer curve for Voice Interface power to aah lip sync amplitude</string>
+            <string>Timeout duration for mainloop lock detection, in seconds.</string>
         <key>Persist</key>
             <integer>1</integer>
         <key>Type</key>
-            <string>String</string>
+            <string>F32</string>
         <key>Value</key>
-            <string>0000123456789</string>
-        </map>
-    <key>LipSyncEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>0 disable lip-sync, 1 enable babble loop</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>LipSyncOoh</key>
-        <map>
-        <key>Comment</key>
-            <string>Ooh (mouth width) babble loop</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>1247898743223344444443200000</string>
-        </map>
-    <key>LipSyncOohAahRate</key>
-        <map>
-        <key>Comment</key>
-            <string>Rate to babble Ooh and Aah (/sec)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>24.0</real>
-        </map>
-    <key>LipSyncOohPowerTransfer</key>
-        <map>
-        <key>Comment</key>
-            <string>Transfer curve for Voice Interface power to ooh lip sync amplitude</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>0012345566778899</string>
-        </map>
-    <key>LocalCacheVersion</key>
-        <map>
-        <key>Comment</key>
-            <string>Version number of cache</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>LogMessages</key>
-        <map>
-        <key>Comment</key>
-            <string>Log network traffic</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>LoginAsGod</key>
-        <map>
-        <key>Comment</key>
-            <string>Attempt to login with god powers (Linden accounts only)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>LoginLastLocation</key>
-        <map>
-        <key>Comment</key>
-            <string>Login at same location you last logged out</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>LoginPage</key>
-        <map>
-        <key>Comment</key>
-            <string>Login authentication page.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
-    <key>LoginURI</key>
-        <map>
-        <key>Comment</key>
-            <string>login server and CGI prefix to use</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
-    <key>LosslessJ2CUpload</key>
-        <map>
-        <key>Comment</key>
-            <string>Use lossless compression for small image uploads</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>MainloopTimeoutDefault</key>
-        <map>
-        <key>Comment</key>
-            <string>Timeout duration for mainloop lock detection, in seconds.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>10.0</real>
+            <real>10.0</real>
         </map>
     <key>MapOverlayIndex</key>
-        <map>
-        <key>Comment</key>
-            <string>Currently selected world map type</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Currently selected world map type</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MapScale</key>
-        <map>
-        <key>Comment</key>
-            <string>World map zoom level (pixels per region)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>128</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>World map zoom level (pixels per region)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>128.0</real>
+    </map>
     <key>MapShowClassifieds</key>
-        <map>
-        <key>Comment</key>
-            <string>Show locations associated with classified ads on world map</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show locations associated with classified ads on world map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>MapShowEvents</key>
-        <map>
-        <key>Comment</key>
-            <string>Show events on world map</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show events on world map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>MapShowInfohubs</key>
-        <map>
-        <key>Comment</key>
-            <string>Show infohubs on the world map</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show infohubs on the world map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>MapShowLandForSale</key>
-        <map>
-        <key>Comment</key>
-            <string>Show land for sale on world map</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show land for sale on world map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MapShowPeople</key>
-        <map>
-        <key>Comment</key>
-            <string>Show other users on world map</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show other users on world map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>MapShowTelehubs</key>
-        <map>
-        <key>Comment</key>
-            <string>Show telehubs on world map</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show telehubs on world map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>Marker</key>
-        <map>
-        <key>Comment</key>
-            <string>[NOT USED]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[NOT USED]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>MaxDragDistance</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>48</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>48.0</real>
+    </map>
     <key>MaxSelectDistance</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum allowed selection distance (meters from avatar)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>64</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum allowed selection distance (meters from avatar)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>64.0</real>
+    </map>
     <key>MeanCollisionBump</key>
-        <map>
-        <key>Comment</key>
-            <string>You have experienced an abuse of being bumped by an object or avatar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>You have experienced an abuse of being bumped by an object or avatar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MeanCollisionPhysical</key>
-        <map>
-        <key>Comment</key>
-            <string>You have experienced an abuse from a physical object</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>You have experienced an abuse from a physical object</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MeanCollisionPushObject</key>
-        <map>
-        <key>Comment</key>
-            <string>You have experienced an abuse of being pushed by a scripted object</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>You have experienced an abuse of being pushed by a scripted object</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MeanCollisionScripted</key>
+    <map>
+      <key>Comment</key>
+      <string>You have experienced an abuse from a scripted object</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>MeanCollisionSelected</key>
+    <map>
+      <key>Comment</key>
+      <string>You have experienced an abuse of being pushed via a selected object</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>MemoryLogFrequency</key>
         <map>
         <key>Comment</key>
-            <string>You have experienced an abuse from a scripted object</string>
+            <string>Seconds between display of Memory in log (0 for never)</string>
         <key>Persist</key>
             <integer>1</integer>
         <key>Type</key>
-            <string>Boolean</string>
+            <string>F32</string>
         <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>MeanCollisionSelected</key>
-        <map>
-        <key>Comment</key>
-            <string>You have experienced an abuse of being pushed via a selected object</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
+            <real>600.0</real>
         </map>
     <key>MenuAccessKeyTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.25</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.25</real>
+    </map>
     <key>MenuBarHeight</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>18</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>18</integer>
+    </map>
     <key>MenuBarWidth</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>410</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>410</integer>
+    </map>
     <key>MiniMapRotate</key>
-        <map>
-        <key>Comment</key>
-            <string>Rotate miniature world map to avatar direction</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rotate miniature world map to avatar direction</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>MiniMapScale</key>
-        <map>
-        <key>Comment</key>
-            <string>Miniature world map zoom levle (pixels per region)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>128</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Miniature world map zoom levle (pixels per region)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>128.0</real>
+    </map>
     <key>MouseSensitivity</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>3</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>3.0</real>
+    </map>
     <key>MouseSmooth</key>
-        <map>
-        <key>Comment</key>
-            <string>Smooths out motion of mouse when in mouselook mode.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Smooths out motion of mouse when in mouselook mode.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MouseSun</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MouselookBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MoveDownBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>91</integer>
-                <integer>29</integer>
-                <integer>116</integer>
-                <integer>4</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>91</integer>
+        <integer>29</integer>
+        <integer>116</integer>
+        <integer>4</integer>
+      </array>
+    </map>
     <key>MoveUpBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>91</integer>
-                <integer>54</integer>
-                <integer>116</integer>
-                <integer>29</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>91</integer>
+        <integer>54</integer>
+        <integer>116</integer>
+        <integer>29</integer>
+      </array>
+    </map>
     <key>MuteAmbient</key>
-        <map>
-        <key>Comment</key>
-            <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MuteAudio</key>
-        <map>
-        <key>Comment</key>
-            <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MuteMedia</key>
-        <map>
-        <key>Comment</key>
-            <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MuteMusic</key>
-        <map>
-        <key>Comment</key>
-            <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MuteSounds</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound effects play at 0 volume</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound effects play at 0 volume</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MuteUI</key>
-        <map>
-        <key>Comment</key>
-            <string>UI sound effects play at 0 volume</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>UI sound effects play at 0 volume</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MuteVoice</key>
-        <map>
-        <key>Comment</key>
-            <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>MuteWhenMinimized</key>
-        <map>
-        <key>Comment</key>
-            <string>Mute audio when SL window is minimized</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Mute audio when SL window is minimized</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>NewCacheLocation</key>
-        <map>
-        <key>Comment</key>
-            <string>Change the location of the local disk cache to this</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Change the location of the local disk cache to this</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>NextLoginLocation</key>
-        <map>
-        <key>Comment</key>
-            <string>Location to log into by default.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Location to log into by default.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>NoAudio</key>
-        <map>
-        <key>Comment</key>
-            <string>Disable audio playback.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disable audio playback.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NoHardwareProbe</key>
-        <map>
-        <key>Comment</key>
-            <string>Disable hardware probe.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disable hardware probe.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NoInventoryLibrary</key>
-        <map>
-        <key>Comment</key>
-            <string>Do not request inventory library.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Do not request inventory library.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NoPreload</key>
-        <map>
-        <key>Comment</key>
-            <string>Disable sound and image preload.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disable sound and image preload.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NoQuickTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Disable quicktime playback.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Disable quicktime playback.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NoVerifySSLCert</key>
-        <map>
-        <key>Comment</key>
-            <string>Do not verify SSL peers.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Do not verify SSL peers.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NotecardEditorRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for notecard editor</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>400</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for notecard editor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>400</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>NotifyBoxHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>Height of notification messages</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>200</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Height of notification messages</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>200</integer>
+    </map>
     <key>NotifyBoxWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Width of notification messages</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>350</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Width of notification messages</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>350</integer>
+    </map>
     <key>NotifyMoneyChange</key>
-        <map>
-        <key>Comment</key>
-            <string>Pop up notifications for all L$ transactions</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Pop up notifications for all L$ transactions</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>NotifyTipDuration</key>
-        <map>
-        <key>Comment</key>
-            <string>Length of time that notification tips stay on screen (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>4</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Length of time that notification tips stay on screen (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>4.0</real>
+    </map>
     <key>NumSessions</key>
-        <map>
-        <key>Comment</key>
-            <string>Number of successful logins to Second Life</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Number of successful logins to Second Life</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NumpadControl</key>
-        <map>
-        <key>Comment</key>
-            <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ObjectChatColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of chat messages from objects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.699999988079071044921875</real>
-                <real>0.89999997615814208984375</real>
-                <real>0.699999988079071044921875</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of chat messages from objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.699999988079</real>
+        <real>0.899999976158</real>
+        <real>0.699999988079</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>OpenDebugStatAdvanced</key>
-        <map>
-        <key>Comment</key>
-            <string>Expand advanced performance stats display</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Expand advanced performance stats display</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>OpenDebugStatBasic</key>
-        <map>
-        <key>Comment</key>
-            <string>Expand basic performance stats display</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Expand basic performance stats display</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>OpenDebugStatNet</key>
-        <map>
-        <key>Comment</key>
-            <string>Expand network stats display</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Expand network stats display</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>OpenDebugStatRender</key>
-        <map>
-        <key>Comment</key>
-            <string>Expand render stats display</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Expand render stats display</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>OpenDebugStatSim</key>
-        <map>
-        <key>Comment</key>
-            <string>Expand simulator performance stats display</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Expand simulator performance stats display</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>OutBandwidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Outgoing bandwidth throttle (bps)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Outgoing bandwidth throttle (bps)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.0</real>
+    </map>
     <key>OverdrivenColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of various indicators when resident is speaking too loud.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>0</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of various indicators when resident is speaking too loud.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>OverlayTitle</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls watermark text message displayed on screen when &quot;ShowOverlayTitle&quot; is enabled (one word, underscores become spaces)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>Set_via_OverlayTitle_in_settings.xml</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>Set_via_OverlayTitle_in_settings.xml</string>
+    </map>
     <key>PTTCurrentlyEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>PacketDropPercentage</key>
-        <map>
-        <key>Comment</key>
-            <string>Percentage of packets dropped by the client.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Percentage of packets dropped by the client.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.0</real>
+    </map>
+    <key>ParcelMediaAutoPlayEnable</key>
+    <map>
+      <key>Comment</key>
+      <string>Auto play parcel media when available</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>PerAccountSettingsFile</key>
-        <map>
-        <key>Comment</key>
-            <string>Persisted client settings file name (per user).</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Persisted client settings file name (per user).</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>PermissionsCautionEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>PermissionsCautionNotifyBoxHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>Height of caution-style notification messages</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>344</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Height of caution-style notification messages</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>344</integer>
+    </map>
     <key>PermissionsManagerRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for permissions manager window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>85</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for permissions manager window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>85</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PickerContextOpacity</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.3499999940395355224609375</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.34999999404</real>
+    </map>
     <key>PieMenuLineWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Width of lines in pie menu display (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>2.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Width of lines in pie menu display (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>2.5</real>
+    </map>
     <key>PinTalkViewOpen</key>
-        <map>
-        <key>Comment</key>
-            <string>Stay in IM after hitting return</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Stay in IM after hitting return</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>PingInterpolate</key>
-        <map>
-        <key>Comment</key>
-            <string>Extrapolate object position along velocity vector based on ping delay</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Extrapolate object position along velocity vector based on ping delay</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>PitchFromMousePosition</key>
-        <map>
-        <key>Comment</key>
-            <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>90</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>90.0</real>
+    </map>
     <key>PlayTypingAnim</key>
-        <map>
-        <key>Comment</key>
-            <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>PrecachingDelay</key>
-        <map>
-        <key>Comment</key>
-            <string>Delay when logging in to load world before showing it (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>6</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Delay when logging in to load world before showing it (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>6.0</real>
+    </map>
     <key>PreviewAnimRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for animation preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>85</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for animation preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>85</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewClassifiedRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for URL preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>530</integer>
-                <integer>420</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for URL preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>530</integer>
+        <integer>420</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewEventRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for Event preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>530</integer>
-                <integer>420</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for Event preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>530</integer>
+        <integer>420</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewLandmarkRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for landmark preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>90</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for landmark preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>90</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewObjectRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for object preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>85</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for object preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>85</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewScriptRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for script preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>550</integer>
-                <integer>500</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for script preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>550</integer>
+        <integer>500</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewSoundRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for sound preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>85</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for sound preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>85</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewTextureRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for texture preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>400</integer>
-                <integer>400</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for texture preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>400</integer>
+        <integer>400</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewURLRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for URL preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>90</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for URL preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>90</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PreviewWearableRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for wearable preview window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>85</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for wearable preview window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>85</integer>
+        <integer>300</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>ProbeHardwareOnStartup</key>
-        <map>
-        <key>Comment</key>
-            <string>Query current hardware configuration on application startup</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Query current hardware configuration on application startup</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>PropertiesRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for inventory item properties window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>320</integer>
-                <integer>350</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for inventory item properties window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>320</integer>
+        <integer>350</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>PurgeCacheOnNextStartup</key>
-        <map>
-        <key>Comment</key>
-            <string>Clear local file cache next time viewer is run</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Clear local file cache next time viewer is run</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>PurgeCacheOnStartup</key>
-        <map>
-        <key>Comment</key>
-            <string>Clear local file cache every time viewer is run</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Clear local file cache every time viewer is run</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>PushToTalkButton</key>
-        <map>
-        <key>Comment</key>
-            <string>Which button or keyboard key is used for push-to-talk</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>MiddleMouse</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Which button or keyboard key is used for push-to-talk</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>MiddleMouse</string>
+    </map>
     <key>PushToTalkToggle</key>
-        <map>
-        <key>Comment</key>
-            <string>Should the push-to-talk button behave as a toggle</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Should the push-to-talk button behave as a toggle</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>QAMode</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable Testing Features.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable Testing Features.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>QuietSnapshotsToDisk</key>
-        <map>
-        <key>Comment</key>
-            <string>Take snapshots to disk without playing animation or sound</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Take snapshots to disk without playing animation or sound</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>QuitAfterSeconds</key>
-        <map>
-        <key>Comment</key>
-            <string>The duration allowed before quitting.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>The duration allowed before quitting.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.0</real>
+    </map>
     <key>RadioLandBrushAction</key>
-        <map>
-        <key>Comment</key>
-            <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RadioLandBrushSize</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RecentItemsSortOrder</key>
-        <map>
-        <key>Comment</key>
-            <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RectangleSelectInclusive</key>
-        <map>
-        <key>Comment</key>
-            <string>Select objects that have at least one vertex inside selection rectangle</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Select objects that have at least one vertex inside selection rectangle</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RegionTextureSize</key>
-        <map>
-        <key>Comment</key>
-            <string>Terrain texture dimensions (power of 2)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>256</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Terrain texture dimensions (power of 2)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>256</integer>
+    </map>
     <key>RememberPassword</key>
-        <map>
-        <key>Comment</key>
-            <string>Keep password (in encrypted form) for next login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Keep password (in encrypted form) for next login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderAnisotropic</key>
-        <map>
-        <key>Comment</key>
-            <string>Render textures using anisotropic filtering</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Render textures using anisotropic filtering</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderAppleUseMultGL</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderAvatarCloth</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls if avatars use wavy cloth</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls if avatars use wavy cloth</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderAvatarLODFactor</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>RenderAvatarMaxVisible</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum number of avatars to display at any one time</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>35</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum number of avatars to display at any one time</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>35</integer>
+    </map>
     <key>RenderAvatarVP</key>
-        <map>
-        <key>Comment</key>
-            <string>Use vertex programs to perform hardware skinning of avatar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use vertex programs to perform hardware skinning of avatar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderBumpmapMinDistanceSquared</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>100</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>100.0</real>
+    </map>
     <key>RenderCubeMap</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether we can render the cube map or not</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether we can render the cube map or not</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderCustomSettings</key>
-        <map>
-        <key>Comment</key>
-            <string>Do you want to set the graphics settings yourself</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-     <key>RenderDebugGL</key>
-      <map>
-        <key>Comment</key>
-        <string>Enable strict GL debugging.</string>
-        <key>Persist</key>
-        <integer>1</integer>
-        <key>Type</key>
-        <string>Boolean</string>
-        <key>Value</key>
-        <integer>0</integer>
-      </map>
-      <key>RenderDebugPipeline</key>
-      <map>
-        <key>Comment</key>
-        <string>Enable strict pipeline debugging.</string>
-        <key>Persist</key>
-        <integer>1</integer>
-        <key>Type</key>
-        <string>Boolean</string>
-        <key>Value</key>
-        <integer>0</integer>
-      </map>
+    <map>
+      <key>Comment</key>
+      <string>Do you want to set the graphics settings yourself</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>RenderDebugGL</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable strict GL debugging.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>RenderDebugPipeline</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable strict pipeline debugging.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderDebugTextureBind</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable texture bind performance test.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable texture bind performance test.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>RenderDeferred</key>
+    <map>
+      <key>Comment</key>
+      <string>Use deferred rendering pipeline.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderDynamicLOD</key>
-        <map>
-        <key>Comment</key>
-            <string>Dynamically adjust level of detail.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Dynamically adjust level of detail.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderDynamicReflections</key>
-        <map>
-        <key>Comment</key>
-            <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>RenderFSAASamples</key>
+    <map>
+      <key>Comment</key>
+      <string>Number of samples to use for FSAA (0 = no AA).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderFarClip</key>
-        <map>
-        <key>Comment</key>
-            <string>Distance of far clip plane from camera (meters)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>256</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Distance of far clip plane from camera (meters)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>256.0</real>
+    </map>
+    <key>RenderFastAlpha</key>
+    <map>
+      <key>Comment</key>
+      <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderFastUI</key>
-        <map>
-        <key>Comment</key>
-            <string>[NOT USED]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[NOT USED]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderFlexTimeFactor</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderFogRatio</key>
-        <map>
-        <key>Comment</key>
-            <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>4.0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>4.0</real>
+    </map>
     <key>RenderGamma</key>
-        <map>
-        <key>Comment</key>
-            <string>Sets gamma exponent for renderer</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sets gamma exponent for renderer</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.0</real>
+    </map>
     <key>RenderGammaFull</key>
-        <map>
-        <key>Comment</key>
-            <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderGlow</key>
-        <map>
-        <key>Comment</key>
-            <string>Render bloom post effect.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Render bloom post effect.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderGlowIterations</key>
-        <map>
-        <key>Comment</key>
-            <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>2</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
     <key>RenderGlowLumWeights</key>
-        <map>
-        <key>Comment</key>
-            <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3</string>
-        <key>Value</key>
-            <array>
-                <real>0.299</real>
-                <real>0.587</real>
-                <real>0.114</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>0.299</real>
+        <real>0.587</real>
+        <real>0.114</real>
+      </array>
+    </map>
     <key>RenderGlowMaxExtractAlpha</key>
-        <map>
-        <key>Comment</key>
-            <string>Max glow alpha value for brightness extraction to auto-glow.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.065</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Max glow alpha value for brightness extraction to auto-glow.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.065</real>
+    </map>
     <key>RenderGlowMinLuminance</key>
-        <map>
-        <key>Comment</key>
-            <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1.0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderGlowResolutionPow</key>
-        <map>
-        <key>Comment</key>
-            <string>Glow map resolution power of two.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>9</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Glow map resolution power of two.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>9</integer>
+    </map>
     <key>RenderGlowStrength</key>
-        <map>
-        <key>Comment</key>
-            <string>Additive strength of glow.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.35</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Additive strength of glow.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.35</real>
+    </map>
     <key>RenderGlowWarmthAmount</key>
-        <map>
-        <key>Comment</key>
-            <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.0</real>
+    </map>
     <key>RenderGlowWarmthWeights</key>
-        <map>
-        <key>Comment</key>
-            <string>Weight of each color channel used before finding the max warmth</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3</string>
-        <key>Value</key>
-            <array>
-                <real>1.0</real>
-                <real>0.5</real>
-                <real>0.7</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Weight of each color channel used before finding the max warmth</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.5</real>
+        <real>0.7</real>
+      </array>
+    </map>
     <key>RenderGlowWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1.3</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.3</real>
+    </map>
     <key>RenderHUDInSnapshot</key>
-        <map>
-        <key>Comment</key>
-            <string>Display HUD attachments in snapshot</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display HUD attachments in snapshot</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderHiddenSelections</key>
-        <map>
-        <key>Comment</key>
-            <string>Show selection lines on objects that are behind other objects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show selection lines on objects that are behind other objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderHideGroupTitle</key>
-        <map>
-        <key>Comment</key>
-            <string>Don&apos;t show my group title in my name label</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Don't show my group title in my name label</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderHideGroupTitleAll</key>
-        <map>
-        <key>Comment</key>
-            <string>Show group titles in name labels</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show group titles in name labels</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderInitError</key>
-        <map>
-        <key>Comment</key>
-            <string>Error occured while initializing GL</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Error occured while initializing GL</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderLightRadius</key>
-        <map>
-        <key>Comment</key>
-            <string>Render the radius of selected lights</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Render the radius of selected lights</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <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>
+    <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>
-            <string>Maximum number of particles to display on screen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>4096</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum number of particles to display on screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>4096</integer>
+    </map>
     <key>RenderMaxVBOSize</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum size of a vertex buffer (in KB).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>32</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum size of a vertex buffer (in KB).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>32</integer>
+    </map>
     <key>RenderName</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>2</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
     <key>RenderNameFadeDuration</key>
-        <map>
-        <key>Comment</key>
-            <string>Time interval over which to fade avatar names (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Time interval over which to fade avatar names (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderNameHideSelf</key>
-        <map>
-        <key>Comment</key>
-            <string>Don&apos;t display own name above avatar</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Don't display own name above avatar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderNameShowTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Fade avatar names after specified time (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>10</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Fade avatar names after specified time (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>10.0</real>
+    </map>
     <key>RenderObjectBump</key>
-        <map>
-        <key>Comment</key>
-            <string>Show bumpmapping on primitives</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show bumpmapping on primitives</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderQualityPerformance</key>
-        <map>
-        <key>Comment</key>
-            <string>Which graphics settings you've chosen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Which graphics settings you've chosen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderReflectionDetail</key>
-        <map>
-        <key>Comment</key>
-            <string>Detail of reflection render pass.</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>
-            <string>Reflection map resolution.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>64</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Detail of reflection render pass.</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>
+      <string>Reflection map resolution.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>64</integer>
+    </map>
     <key>RenderResolutionDivisor</key>
-        <map>
-        <key>Comment</key>
-            <string>Divisor for rendering 3D scene at reduced resolution.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Divisor for rendering 3D scene at reduced resolution.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderShaderLODThreshold</key>
-        <map>
-        <key>Comment</key>
-            <string>Fraction of draw distance defining the switch to a different shader LOD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <integer>1.0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Fraction of draw distance defining the switch to a different shader LOD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>RenderShaderParticleThreshold</key>
+    <map>
+      <key>Comment</key>
+      <string>Fraction of draw distance to not use shader on particles</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.25</real>
+    </map>
     <key>RenderSunDynamicRange</key>
-        <map>
-        <key>Comment</key>
-            <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <integer>1.0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderTerrainDetail</key>
-        <map>
-        <key>Comment</key>
-            <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>2</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
     <key>RenderTerrainLODFactor</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1.0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderTerrainScale</key>
-        <map>
-        <key>Comment</key>
-            <string>Terrain detail texture scale</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>12</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Terrain detail texture scale</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>12.0</real>
+    </map>
+    <key>RenderTextureMemoryMultiple</key>
+    <map>
+      <key>Comment</key>
+      <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderTreeLODFactor</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>RenderUIInSnapshot</key>
-        <map>
-        <key>Comment</key>
-            <string>Display user interface in snapshot</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>RenderUseFarClip</key>
-        <map>
-        <key>Comment</key>
-            <string>If false, frustum culling will ignore far clip plane.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display user interface in snapshot</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>RenderUnloadedAvatar</key>
+    <map>
+      <key>Comment</key>
+      <string>Show avatars which haven't finished loading</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderUseFBO</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>RenderUseFarClip</key>
+    <map>
+      <key>Comment</key>
+      <string>If false, frustum culling will ignore far clip plane.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderUseImpostors</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether we want to use impostors for far away avatars.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether we want to use impostors for far away avatars.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderUseShaderLOD</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether we want to have different shaders for LOD</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether we want to have different shaders for LOD</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderUseShaderNearParticles</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether we want to use shaders on near particles</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>RenderShaderParticleThreshold</key>
-        <map>
-        <key>Comment</key>
-            <string>Fraction of draw distance to not use shader on particles</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.25</real>
-        </map>
-    <key>RenderUnloadedAvatar</key>
-        <map>
-        <key>Comment</key>
-            <string>Show avatars which haven't finished loading</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether we want to use shaders on near particles</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RenderVBOEnable</key>
-        <map>
-        <key>Comment</key>
-            <string>Use GL Vertex Buffer Objects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use GL Vertex Buffer Objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderVolumeLODFactor</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>RenderWater</key>
-        <map>
-        <key>Comment</key>
-            <string>Display water</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display water</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderWaterMipNormal</key>
-        <map>
-        <key>Comment</key>
-            <string>Use mip maps for water normal map.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</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>
+    <map>
+      <key>Comment</key>
+      <string>Use mip maps for water normal map.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderWaterRefResolution</key>
-        <map>
-        <key>Comment</key>
-            <string>Water planar reflection resolution.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>512</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Water planar reflection resolution.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <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>
-            <string>Make the agent rotate to its right.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Make the agent rotate to its right.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>RotationStep</key>
-        <map>
-        <key>Comment</key>
-            <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>RunBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
+    <key>RunBtnState</key>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </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>
+    <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>
-            <string>Reset preferences, run in safe mode.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Reset preferences, run in safe mode.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SaveMinidump</key>
-        <map>
-        <key>Comment</key>
-            <string>Save minidump for developer debugging on crash</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Save minidump for developer debugging on crash</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ScaleShowAxes</key>
-        <map>
-        <key>Comment</key>
-            <string>Show indicator of selected scale axis when scaling</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show indicator of selected scale axis when scaling</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ScaleStretchTextures</key>
-        <map>
-        <key>Comment</key>
-            <string>Stretch textures along with object when scaling</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Stretch textures along with object when scaling</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ScaleUniform</key>
-        <map>
-        <key>Comment</key>
-            <string>Scale selected objects evenly about center of selection</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Scale selected objects evenly about center of selection</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ScriptErrorColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of script error messages</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.8235294117</real>
-                <real>0.2745098039</real>
-                <real>0.2745098039</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of script error messages</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.8235294117</real>
+        <real>0.2745098039</real>
+        <real>0.2745098039</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>ScriptErrorsAsChat</key>
-        <map>
-        <key>Comment</key>
-            <string>Display script errors and warning in chat history</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display script errors and warning in chat history</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ScriptHelpFollowsCursor</key>
-        <map>
-        <key>Comment</key>
-            <string>Scripting help window updates contents based on script editor contents under text cursor</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Scripting help window updates contents based on script editor contents under text cursor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SearchURLDefault</key>
-        <map>
-        <key>Comment</key>
-            <string>URL to load for empty searches</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>http://secondlife.com/app/search/index.php?</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>URL to load for empty searches</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://secondlife.com/app/search/index.php?</string>
+    </map>
     <key>SearchURLQuery</key>
-        <map>
-        <key>Comment</key>
-            <string>URL to use for searches</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>URL to use for searches</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
+    </map>
     <key>SearchURLSuffix2</key>
-        <map>
-        <key>Comment</key>
-            <string>Parameters added to end of search queries</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Parameters added to end of search queries</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
+    </map>
     <key>SelectMovableOnly</key>
-        <map>
-        <key>Comment</key>
-            <string>Select only objects you can move</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Select only objects you can move</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SelectOwnedOnly</key>
-        <map>
-        <key>Comment</key>
-            <string>Select only objects you own</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Select only objects you own</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SelectionHighlightAlpha</key>
-        <map>
-        <key>Comment</key>
-            <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.4000000059604644775390625</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.40000000596</real>
+    </map>
     <key>SelectionHighlightAlphaTest</key>
-        <map>
-        <key>Comment</key>
-            <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>SelectionHighlightThickness</key>
-        <map>
-        <key>Comment</key>
-            <string>Thickness of selection highlight line (fraction of view distance)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.009999999776482582092285156</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Thickness of selection highlight line (fraction of view distance)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.00999999977648</real>
+    </map>
     <key>SelectionHighlightUAnim</key>
-        <map>
-        <key>Comment</key>
-            <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.0</real>
+    </map>
     <key>SelectionHighlightUScale</key>
-        <map>
-        <key>Comment</key>
-            <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
     <key>SelectionHighlightVAnim</key>
-        <map>
-        <key>Comment</key>
-            <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>SelectionHighlightVScale</key>
-        <map>
-        <key>Comment</key>
-            <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>ServerChoice</key>
-        <map>
-        <key>Comment</key>
-            <string>[DO NOT MODIFY] Controls which grid you connect to</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>ShowAllObjectHoverTip</key>
-        <map>
-        <key>Comment</key>
-            <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[DO NOT MODIFY] Controls which grid you connect to</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowActiveSpeakers</key>
-        <map>
-        <key>Comment</key>
-            <string>Display active speakers list on login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display active speakers list on login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>ShowAllObjectHoverTip</key>
+    <map>
+      <key>Comment</key>
+      <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowAxes</key>
-        <map>
-        <key>Comment</key>
-            <string>Render coordinate frame at your position</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Render coordinate frame at your position</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowCameraControls</key>
-        <map>
-        <key>Comment</key>
-            <string>Display camera controls on login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display camera controls on login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowChatHistory</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowCommunicate</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowConsoleWindow</key>
-        <map>
-        <key>Comment</key>
-            <string>Show log in separate OS window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show log in separate OS window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowCrosshairs</key>
-        <map>
-        <key>Comment</key>
-            <string>Display crosshairs when in mouselook mode</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display crosshairs when in mouselook mode</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowDebugConsole</key>
-        <map>
-        <key>Comment</key>
-            <string>Show log in SL window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show log in SL window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowDebugStats</key>
-        <map>
-        <key>Comment</key>
-            <string>Show performance stats display</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show performance stats display</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowDepthBuffer</key>
-        <map>
-        <key>Comment</key>
-            <string>Show depth buffer contents</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show depth buffer contents</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowDirectory</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowEmptyFoldersWhenSearching</key>
-        <map>
-        <key>Comment</key>
-            <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowHoverTips</key>
-        <map>
-        <key>Comment</key>
-            <string>Show descriptive tooltip when mouse hovers over items in world</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show descriptive tooltip when mouse hovers over items in world</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowInventory</key>
-        <map>
-        <key>Comment</key>
-            <string>Open inventory window on login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Open inventory window on login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowLandHoverTip</key>
-        <map>
-        <key>Comment</key>
-            <string>Show descriptive tooltip when mouse hovers over land</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show descriptive tooltip when mouse hovers over land</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowLeaders</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowMatureClassifieds</key>
-        <map>
-        <key>Comment</key>
-            <string>Display results of find classifieds that are flagged as mature</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display results of find classifieds that are flagged as mature</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowMatureEvents</key>
-        <map>
-        <key>Comment</key>
-            <string>Display results of find events that are flagged as mature</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display results of find events that are flagged as mature</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowMatureFindAll</key>
-        <map>
-        <key>Comment</key>
-            <string>Display results of find all that are in mature sims</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display results of find all that are in mature sims</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowMatureGroups</key>
-        <map>
-        <key>Comment</key>
-            <string>Display results of find groups that are in flagged as mature</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display results of find groups that are in flagged as mature</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowMatureSims</key>
-        <map>
-        <key>Comment</key>
-            <string>Display results of find places or find popular that are in mature sims</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display results of find places or find popular that are in mature sims</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowMiniMap</key>
-        <map>
-        <key>Comment</key>
-            <string>Display mini map on login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display mini map on login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowMovementControls</key>
-        <map>
-        <key>Comment</key>
-            <string>Display movement controls on login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display movement controls on login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowNearClip</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowNewInventory</key>
-        <map>
-        <key>Comment</key>
-            <string>Automatically views new notecards/textures/landmarks</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Automatically views new notecards/textures/landmarks</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowObjectUpdates</key>
-        <map>
-        <key>Comment</key>
-            <string>Show when update messages are received for individual objects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show when update messages are received for individual objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowOverlayTitle</key>
-        <map>
-        <key>Comment</key>
-            <string>Prints watermark text message on screen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-    <key>ShowParcelOwners</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Prints watermark text message on screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>ShowParcelOwners</key>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowPermissions</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowPropertyLines</key>
-        <map>
-        <key>Comment</key>
-            <string>Show line overlay demarking property boundaries</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show line overlay demarking property boundaries</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowSearchBar</key>
-        <map>
-        <key>Comment</key>
-            <string>Show the Search Bar in the Status Overlay</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show the Search Bar in the Status Overlay</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowSelectionBeam</key>
-        <map>
-        <key>Comment</key>
-            <string>Show selection particle beam when selecting or interacting with objects.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show selection particle beam when selecting or interacting with objects.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowStartLocation</key>
-        <map>
-        <key>Comment</key>
-            <string>Display starting location menu on login screen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display starting location menu on login screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowTangentBasis</key>
-        <map>
-        <key>Comment</key>
-            <string>Render normal and binormal (debugging bump mapping)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Render normal and binormal (debugging bump mapping)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowToolBar</key>
-        <map>
-        <key>Comment</key>
-            <string>Show toolbar at bottom of screen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show toolbar at bottom of screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowTools</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowVoiceChannelPopup</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls visibility of the current voice channel popup above the voice tab</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls visibility of the current voice channel popup above the voice tab</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowVolumeSettingsPopup</key>
-        <map>
-        <key>Comment</key>
-            <string>Show individual volume slider for voice, sound effects, etc</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show individual volume slider for voice, sound effects, etc</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowWorldMap</key>
-        <map>
-        <key>Comment</key>
-            <string>Display world map on login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display world map on login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ShowXUINames</key>
-        <map>
-        <key>Comment</key>
-            <string>Display XUI Names as Tooltips</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display XUI Names as Tooltips</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SitBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SkinFolder</key>
-        <map>
-        <key>Comment</key>
-            <string>The skin folder to use.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>The skin folder to use.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>SkyAmbientScale</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.300000011920928955078125</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.300000011921</real>
+    </map>
+    <key>SkyEditPresets</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether to be able to edit the sky defaults or not</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SkyNightColorShift</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls moonlight color (base color applied to moon as light source)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color3</string>
-        <key>Value</key>
-            <array>
-                <real>0.699999988079071044921875</real>
-                <real>0.699999988079071044921875</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls moonlight color (base color applied to moon as light source)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color3</string>
+      <key>Value</key>
+      <array>
+        <real>0.699999988079</real>
+        <real>0.699999988079</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>SkyOverrideSimSunPosition</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SkySunDefaultPosition</key>
-        <map>
-        <key>Comment</key>
-            <string>Default position of sun in sky (direction in world coordinates)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Vector3</string>
-        <key>Value</key>
-            <array>
-                <real>1</real>
-                <real>0</real>
-                <real>0.1</real>
-            </array>
-        </map>
-	<key>SkyUseClassicClouds</key>
-		<map>
-		<key>Comment</key>
-			<string>Whether to use the old Second Life particle clouds or not</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<integer>1</integer>
-		</map>
+    <map>
+      <key>Comment</key>
+      <string>Default position of sun in sky (direction in world coordinates)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Vector3</string>
+      <key>Value</key>
+      <array>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>0.1</real>
+      </array>
+    </map>
+    <key>SkyUseClassicClouds</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether to use the old Second Life particle clouds or not</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>SlideLeftBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>20</integer>
-                <integer>54</integer>
-                <integer>45</integer>
-                <integer>29</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>20</integer>
+        <integer>54</integer>
+        <integer>45</integer>
+        <integer>29</integer>
+      </array>
+    </map>
     <key>SlideRightBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>66</integer>
-                <integer>54</integer>
-                <integer>91</integer>
-                <integer>29</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>66</integer>
+        <integer>54</integer>
+        <integer>91</integer>
+        <integer>29</integer>
+      </array>
+    </map>
     <key>SmallAvatarNames</key>
-        <map>
-        <key>Comment</key>
-            <string>Display avatar name text in smaller font</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display avatar name text in smaller font</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>SnapEnabled</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable snapping to grid</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable snapping to grid</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>SnapMargin</key>
-        <map>
-        <key>Comment</key>
-            <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>10</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>10</integer>
+    </map>
     <key>SnapToMouseCursor</key>
-        <map>
-        <key>Comment</key>
-            <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SnapshotLocalLastResolution</key>
-        <map>
-        <key>Comment</key>
-            <string>Take next local snapshot at this resolution</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Take next local snapshot at this resolution</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SnapshotPostcardLastResolution</key>
-        <map>
-        <key>Comment</key>
-            <string>Take next postcard snapshot at this resolution</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Take next postcard snapshot at this resolution</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SnapshotQuality</key>
-        <map>
-        <key>Comment</key>
-            <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>75</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>75</integer>
+    </map>
     <key>SnapshotTextureLastResolution</key>
-        <map>
-        <key>Comment</key>
-            <string>Take next texture snapshot at this resolution</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Take next texture snapshot at this resolution</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>SpeakingColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of various indicators when resident is speaking on a voice channel.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0</real>
-                <real>1</real>
-                <real>0</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of various indicators when resident is speaking on a voice channel.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0</real>
+        <real>1.0</real>
+        <real>0.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>SpeedTest</key>
-        <map>
-        <key>Comment</key>
-            <string>Performance testing mode, no network</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Performance testing mode, no network</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>StatsAutoRun</key>
-        <map>
-        <key>Comment</key>
-            <string>Play back autopilot</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Play back autopilot</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>StatsFile</key>
-        <map>
-        <key>Comment</key>
-            <string>Filename for stats logging output</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>fs.txt</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Filename for stats logging output</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>fs.txt</string>
+    </map>
     <key>StatsNumRuns</key>
-        <map>
-        <key>Comment</key>
-            <string>Loop autopilot playback this number of times</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>-1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Loop autopilot playback this number of times</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
     <key>StatsPilotFile</key>
-        <map>
-        <key>Comment</key>
-            <string>Filename for stats logging autopilot path</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>pilot.txt</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Filename for stats logging autopilot path</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>pilot.txt</string>
+    </map>
     <key>StatsQuitAfterRuns</key>
-        <map>
-        <key>Comment</key>
-            <string>Quit application after this number of autopilot playback runs</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Quit application after this number of autopilot playback runs</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>StatsSessionTrackFrameStats</key>
-        <map>
-        <key>Comment</key>
-            <string>Track rendering and network statistics</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Track rendering and network statistics</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>StatsSummaryFile</key>
-        <map>
-        <key>Comment</key>
-            <string>Filename for stats logging summary</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>fss.txt</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Filename for stats logging summary</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>fss.txt</string>
+    </map>
     <key>StatusBarHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>Height of menu/status bar at top of screen (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>26</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Height of menu/status bar at top of screen (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>26</integer>
+    </map>
     <key>StatusBarPad</key>
-        <map>
-        <key>Comment</key>
-            <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>10</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>10</integer>
+    </map>
     <key>SystemChatColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of chat messages from SL System</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.800000011920928955078125</real>
-                <real>1</real>
-                <real>1</real>
-                <real>1</real>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of chat messages from SL System</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.800000011921</real>
+        <real>1.0</real>
+        <real>1.0</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>SystemLanguage</key>
-        <map>
-        <key>Comment</key>
-            <string>Language indicated by system settings (for XUI)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>en-us</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Language indicated by system settings (for XUI)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>en-us</string>
+    </map>
     <key>TabToTextFieldsOnly</key>
-        <map>
-        <key>Comment</key>
-            <string>TAB key takes you to next text entry field, instead of next widget</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>TAB key takes you to next text entry field, instead of next widget</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>TerrainColorHeightRange</key>
-        <map>
-        <key>Comment</key>
-            <string>Altitude range over which a given terrain texture has effect (meters)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>60</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Altitude range over which a given terrain texture has effect (meters)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>60.0</real>
+    </map>
     <key>TerrainColorStartHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>Starting altitude for terrain texturing (meters)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>20</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Starting altitude for terrain texturing (meters)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>20.0</real>
+    </map>
     <key>TextureMemory</key>
-        <map>
-        <key>Comment</key>
-            <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>TexturePickerRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for texture picker</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>290</integer>
-                <integer>350</integer>
-                <integer>0</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for texture picker</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>290</integer>
+        <integer>350</integer>
+        <integer>0</integer>
+      </array>
+    </map>
     <key>TexturePickerShowFolders</key>
-        <map>
-        <key>Comment</key>
-            <string>Show folders with no texures in texture picker</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show folders with no texures in texture picker</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>TexturePickerSortOrder</key>
-        <map>
-        <key>Comment</key>
-            <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>2</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>2</integer>
+    </map>
     <key>ThirdPersonBtnState</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ThrottleBandwidthKBPS</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>500</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>500.0</real>
+    </map>
     <key>ToolHelpRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>8</integer>
-                <integer>178</integer>
-                <integer>75</integer>
-                <integer>162</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>8</integer>
+        <integer>178</integer>
+        <integer>75</integer>
+        <integer>162</integer>
+      </array>
+    </map>
     <key>ToolTipDelay</key>
-        <map>
-        <key>Comment</key>
-            <string>Seconds before displaying tooltip when mouse stops over UI element</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.699999988079071044921875</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Seconds before displaying tooltip when mouse stops over UI element</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.699999988079</real>
+    </map>
     <key>ToolboxAutoMove</key>
-        <map>
-        <key>Comment</key>
-            <string>[NOT USED]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[NOT USED]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ToolboxRect</key>
-        <map>
-        <key>Comment</key>
-            <string>Rectangle for tools window</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>0</integer>
-                <integer>100</integer>
-                <integer>100</integer>
-                <integer>100</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Rectangle for tools window</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>0</integer>
+        <integer>100</integer>
+        <integer>100</integer>
+        <integer>100</integer>
+      </array>
+    </map>
     <key>ToolboxShowMore</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether to show additional build tool controls</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Whether to show additional build tool controls</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>TrackFocusObject</key>
-        <map>
-        <key>Comment</key>
-            <string>Camera tracks last object zoomed on</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Camera tracks last object zoomed on</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>TurnLeftBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>20</integer>
-                <integer>29</integer>
-                <integer>45</integer>
-                <integer>4</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>20</integer>
+        <integer>29</integer>
+        <integer>45</integer>
+        <integer>4</integer>
+      </array>
+    </map>
     <key>TurnRightBtnRect</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Rect</string>
-        <key>Value</key>
-            <array>
-                <integer>66</integer>
-                <integer>29</integer>
-                <integer>91</integer>
-                <integer>4</integer>
-            </array>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Rect</string>
+      <key>Value</key>
+      <array>
+        <integer>66</integer>
+        <integer>29</integer>
+        <integer>91</integer>
+        <integer>4</integer>
+      </array>
+    </map>
     <key>TypeAheadTimeout</key>
-        <map>
-        <key>Comment</key>
-            <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1.5</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.5</real>
+    </map>
     <key>UIAutoScale</key>
-        <map>
-        <key>Comment</key>
-            <string>Keep UI scale consistent across different resolutions</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Keep UI scale consistent across different resolutions</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>UIFloaterTestBool</key>
-        <map>
-        <key>Comment</key>
-            <string>Example saved setting for the test floater</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Example saved setting for the test floater</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UIImgBtnCloseActiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+    </map>
     <key>UIImgBtnCloseInactiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
+    </map>
     <key>UIImgBtnClosePressedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+    </map>
     <key>UIImgBtnForwardInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
+    </map>
     <key>UIImgBtnForwardOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
+    </map>
     <key>UIImgBtnJumpLeftInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
+    </map>
     <key>UIImgBtnJumpLeftOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
+    </map>
     <key>UIImgBtnJumpRightInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
+    </map>
     <key>UIImgBtnJumpRightOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
+    </map>
     <key>UIImgBtnLeftInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
+    </map>
     <key>UIImgBtnLeftOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
+    </map>
     <key>UIImgBtnMinimizeActiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
+    </map>
     <key>UIImgBtnMinimizeInactiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
+    </map>
     <key>UIImgBtnMinimizePressedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>39801651-26cb-4926-af57-7af9352c273c</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>39801651-26cb-4926-af57-7af9352c273c</string>
+    </map>
     <key>UIImgBtnMoveDownInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
+    </map>
     <key>UIImgBtnMoveDownOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
+    </map>
     <key>UIImgBtnMoveUpInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
+    </map>
     <key>UIImgBtnMoveUpOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
+    </map>
     <key>UIImgBtnPanDownInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+    </map>
     <key>UIImgBtnPanDownOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+    </map>
     <key>UIImgBtnPanLeftInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+    </map>
     <key>UIImgBtnPanLeftOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+    </map>
     <key>UIImgBtnPanRightInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+    </map>
     <key>UIImgBtnPanRightOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+    </map>
     <key>UIImgBtnPanUpInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
+    </map>
     <key>UIImgBtnPanUpOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
+    </map>
     <key>UIImgBtnRestoreActiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
+    </map>
     <key>UIImgBtnRestoreInactiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>0eafa471-70af-4882-b8c1-40a310929744</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>0eafa471-70af-4882-b8c1-40a310929744</string>
+    </map>
     <key>UIImgBtnRestorePressedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
+    </map>
     <key>UIImgBtnRightInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5e616d0d-4335-476f-9977-560bccd009da</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5e616d0d-4335-476f-9977-560bccd009da</string>
+    </map>
     <key>UIImgBtnRightOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
+    </map>
     <key>UIImgBtnScrollDownInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
+    </map>
     <key>UIImgBtnScrollDownOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
+    </map>
     <key>UIImgBtnScrollLeftInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
+    </map>
     <key>UIImgBtnScrollLeftOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
+    </map>
     <key>UIImgBtnScrollRightInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
+    </map>
     <key>UIImgBtnScrollRightOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
+    </map>
     <key>UIImgBtnScrollUpInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
+    </map>
     <key>UIImgBtnScrollUpOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
+    </map>
     <key>UIImgBtnSlideLeftInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
+    </map>
     <key>UIImgBtnSlideLeftOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>82476321-0374-4c26-9567-521535ab4cd7</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>82476321-0374-4c26-9567-521535ab4cd7</string>
+    </map>
     <key>UIImgBtnSlideRightInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
+    </map>
     <key>UIImgBtnSlideRightOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
+    </map>
     <key>UIImgBtnSpinDownInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
+    </map>
     <key>UIImgBtnSpinDownOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
+    </map>
     <key>UIImgBtnSpinUpInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
+    </map>
     <key>UIImgBtnSpinUpOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>56576e6e-6710-4e66-89f9-471b59122794</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>56576e6e-6710-4e66-89f9-471b59122794</string>
+    </map>
     <key>UIImgBtnTabBottomInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
+    </map>
     <key>UIImgBtnTabBottomOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
+    </map>
     <key>UIImgBtnTabBottomPartialInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
+    </map>
     <key>UIImgBtnTabBottomPartialOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
+    </map>
     <key>UIImgBtnTabTopInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
+    </map>
     <key>UIImgBtnTabTopOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
+    </map>
     <key>UIImgBtnTabTopPartialInUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
+    </map>
     <key>UIImgBtnTabTopPartialOutUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
+    </map>
     <key>UIImgBtnTearOffActiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
+    </map>
     <key>UIImgBtnTearOffInactiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
+    </map>
     <key>UIImgBtnTearOffPressedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
+    </map>
     <key>UIImgCheckboxActiveSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
+    </map>
     <key>UIImgCheckboxActiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
+    </map>
     <key>UIImgCheckboxInactiveSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
+    </map>
     <key>UIImgCheckboxInactiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
+    </map>
     <key>UIImgCreateSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
+    </map>
     <key>UIImgCreateUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
+    </map>
     <key>UIImgCrosshairsUUID</key>
-        <map>
-        <key>Comment</key>
-            <string>Image to use for crosshair display (UUID texture reference)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Image to use for crosshair display (UUID texture reference)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
+    </map>
     <key>UIImgDefaultEyesUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
+    </map>
     <key>UIImgDefaultGlovesUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDefaultHairUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
+    </map>
     <key>UIImgDefaultJacketUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDefaultPantsUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDefaultShirtUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDefaultShoesUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDefaultSkirtUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDefaultSocksUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDefaultUnderwearUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIImgDirectionArrowUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
+    </map>
     <key>UIImgFaceSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
+    </map>
     <key>UIImgFaceUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
+    </map>
     <key>UIImgFocusSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
+    </map>
     <key>UIImgFocusUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
+    </map>
     <key>UIImgGrabSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
+    </map>
     <key>UIImgGrabUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
+    </map>
     <key>UIImgMoveSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
+    </map>
     <key>UIImgMoveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
+    </map>
     <key>UIImgRadioActiveSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
+    </map>
     <key>UIImgRadioActiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
+    </map>
     <key>UIImgRadioInactiveSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
+    </map>
     <key>UIImgRadioInactiveUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
+    </map>
     <key>UIImgResizeBottomRightUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
+    </map>
     <key>UIImgRotateSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
+    </map>
     <key>UIImgRotateUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
+    </map>
     <key>UIImgScaleSelectedUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
+    </map>
     <key>UIImgScaleUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>88a90fef-b448-4883-9344-ecf378a60433</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>88a90fef-b448-4883-9344-ecf378a60433</string>
+    </map>
     <key>UIImgWhiteUUID</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
+    </map>
     <key>UIScaleFactor</key>
-        <map>
-        <key>Comment</key>
-            <string>Size of UI relative to default layout on 1024x768 screen</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Size of UI relative to default layout on 1024x768 screen</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>1.0</real>
+    </map>
     <key>UISndAlert</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for alerts (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for alerts (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
+    </map>
     <key>UISndBadKeystroke</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for invalid keystroke (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for invalid keystroke (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
+    </map>
     <key>UISndClick</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for mouse click (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for mouse click (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
+    </map>
     <key>UISndClickRelease</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for mouse button release (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for mouse button release (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
+    </map>
     <key>UISndDebugSpamToggle</key>
-        <map>
-        <key>Comment</key>
-            <string>Log UI sound effects as they are played</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Log UI sound effects as they are played</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UISndHealthReductionF</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for female pain (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for female pain (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
+    </map>
     <key>UISndHealthReductionM</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for male pain (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>e057c244-5768-1056-c37e-1537454eeb62</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for male pain (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>e057c244-5768-1056-c37e-1537454eeb62</string>
+    </map>
     <key>UISndHealthReductionThreshold</key>
-        <map>
-        <key>Comment</key>
-            <string>Amount of health reduction required to trigger &quot;pain&quot; sound</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>10</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Amount of health reduction required to trigger "pain" sound</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>10.0</real>
+    </map>
     <key>UISndInvalidOp</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for invalid operations (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for invalid operations (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
+    </map>
     <key>UISndMoneyChangeDown</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for L$ balance increase (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for L$ balance increase (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
+    </map>
     <key>UISndMoneyChangeThreshold</key>
-        <map>
-        <key>Comment</key>
-            <string>Amount of change in L$ balance required to trigger &quot;money&quot; sound</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>50</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Amount of change in L$ balance required to trigger "money" sound</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>50.0</real>
+    </map>
     <key>UISndMoneyChangeUp</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>77a018af-098e-c037-51a6-178f05877c6f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>77a018af-098e-c037-51a6-178f05877c6f</string>
+    </map>
     <key>UISndNewIncomingIMSession</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for new instant message session(uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for new instant message session(uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
+    </map>
     <key>UISndObjectCreate</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for object creation (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for object creation (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
+    </map>
     <key>UISndObjectDelete</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for object deletion (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for object deletion (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
+    </map>
     <key>UISndObjectRezIn</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for rezzing objects (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for rezzing objects (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
+    </map>
     <key>UISndObjectRezOut</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for derezzing objects (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>00000000-0000-0000-0000-000000000000</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for derezzing objects (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>00000000-0000-0000-0000-000000000000</string>
+    </map>
     <key>UISndPieMenuAppear</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for opening pie menu (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for opening pie menu (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
+    </map>
     <key>UISndPieMenuHide</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for closing pie menu (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>00000000-0000-0000-0000-000000000000</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for closing pie menu (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>00000000-0000-0000-0000-000000000000</string>
+    </map>
     <key>UISndPieMenuSliceHighlight0</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
+    </map>
     <key>UISndPieMenuSliceHighlight1</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
+    </map>
     <key>UISndPieMenuSliceHighlight2</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
+    </map>
     <key>UISndPieMenuSliceHighlight3</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
+    </map>
     <key>UISndPieMenuSliceHighlight4</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
+    </map>
     <key>UISndPieMenuSliceHighlight5</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
+    </map>
     <key>UISndPieMenuSliceHighlight6</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
+    </map>
     <key>UISndPieMenuSliceHighlight7</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
+    </map>
     <key>UISndSnapshot</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for taking a snapshot (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for taking a snapshot (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
+    </map>
     <key>UISndStartIM</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for starting a new IM session (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for starting a new IM session (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
+    </map>
     <key>UISndTeleportOut</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for teleporting (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for teleporting (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
+    </map>
     <key>UISndTyping</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
+    </map>
     <key>UISndWindowClose</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for closing a window (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for closing a window (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
+    </map>
     <key>UISndWindowOpen</key>
-        <map>
-        <key>Comment</key>
-            <string>Sound file for opening a window (uuid for sound asset)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Sound file for opening a window (uuid for sound asset)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
+    </map>
     <key>UseAltKeyForMenus</key>
-        <map>
-        <key>Comment</key>
-            <string>Access menus via keyboard by tapping Alt</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Access menus via keyboard by tapping Alt</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseChatBubbles</key>
-        <map>
-        <key>Comment</key>
-            <string>Show chat above avatars head in chat bubbles</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Show chat above avatars head in chat bubbles</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseDebugLogin</key>
-        <map>
-        <key>Comment</key>
-            <string>Provides extra control over which grid to connect to</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Provides extra control over which grid to connect to</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseDebugMenus</key>
-        <map>
-        <key>Comment</key>
-            <string>Turns on &quot;Debug&quot; menu</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Turns on "Debug" menu</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseDefaultColorPicker</key>
-        <map>
-        <key>Comment</key>
-            <string>Use color picker supplied by operating system</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use color picker supplied by operating system</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseEnergy</key>
-        <map>
-        <key>Comment</key>
-            <string />
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>UseExternalBrowser</key>
-        <map>
-        <key>Comment</key>
-            <string>Use default browser when opening web pages instead of in-world browser.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Use default browser when opening web pages instead of in-world browser.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseFreezeFrame</key>
-        <map>
-        <key>Comment</key>
-            <string>Freeze time when taking snapshots.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Freeze time when taking snapshots.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UseOcclusion</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable object culling based on occlusion (coverage) by other objects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable object culling based on occlusion (coverage) by other objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>UseStartScreen</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether to load a start screen image or not.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>UseWebPagesOnPrims</key>
-        <map>
-        <key>Comment</key>
-            <string>[NOT USED]</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[NOT USED]</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UserConnectionPort</key>
-        <map>
-        <key>Comment</key>
-            <string>Port that this client transmits on.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Port that this client transmits on.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>UserLogFile</key>
-        <map>
-        <key>Comment</key>
-            <string>User specified log file name.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string />
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>User specified log file name.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
     <key>UserLoginInfo</key>
-        <map>
-        <key>Comment</key>
-            <string>Users loging data.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>LLSD</string>
-        <key>Value</key>
-            <map />
-        </map>
-    <key>UseStartScreen</key>
-        <map>
-        <key>Comment</key>
-            <string>Whether to load a start screen image or not.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Users loging data.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>LLSD</string>
+      <key>Value</key>
+      <map>
+      </map>
+    </map>
     <key>VFSOldSize</key>
-        <map>
-        <key>Comment</key>
-            <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>VFSSalt</key>
-        <map>
-        <key>Comment</key>
-            <string>[DO NOT MODIFY] Controls local file caching behavior</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>[DO NOT MODIFY] Controls local file caching behavior</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>VectorizeEnable</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable general vector operations and data alignment.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable general vector operations and data alignment.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>VectorizePerfTest</key>
-        <map>
-        <key>Comment</key>
-            <string>Test SSE/vectorization performance and choose fastest version.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Test SSE/vectorization performance and choose fastest version.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>VectorizeProcessor</key>
-        <map>
-        <key>Comment</key>
-            <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
-        <key>Persist</key>
-            <integer>0</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>VectorizeSkin</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable vector operations for avatar skinning.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable vector operations for avatar skinning.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>VelocityInterpolate</key>
-        <map>
-        <key>Comment</key>
-            <string>Extrapolate object motion from last packet based on received velocity</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Extrapolate object motion from last packet based on received velocity</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>VerboseLogs</key>
-        <map>
-        <key>Comment</key>
-            <string>Display source file and line number for each log item for debugging purposes</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Display source file and line number for each log item for debugging purposes</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>VersionChannelName</key>
-        <map>
-        <key>Comment</key>
-            <string>Versioning Channel Name.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>Second Life Release</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Versioning Channel Name.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>Second Life Release</string>
+    </map>
     <key>VertexShaderEnable</key>
-        <map>
-        <key>Comment</key>
-            <string>Enable/disable all GLSL shaders (debug)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enable/disable all GLSL shaders (debug)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>VivoxDebugLevel</key>
-        <map>
-        <key>Comment</key>
-            <string>Logging level to use when launching the vivox daemon</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>-1</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Logging level to use when launching the vivox daemon</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>-1</string>
+    </map>
     <key>VivoxDebugServerName</key>
-        <map>
-        <key>Comment</key>
-            <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>bhd.vivox.com</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>bhd.vivox.com</string>
+    </map>
     <key>VoiceCallsFriendsOnly</key>
-        <map>
-        <key>Comment</key>
-            <string>Only accept voice calls from residents on your friends list</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Only accept voice calls from residents on your friends list</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>VoiceEarLocation</key>
-        <map>
-        <key>Comment</key>
-            <string>Location of the virtual ear for voice</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Location of the virtual ear for voice</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>VoiceHost</key>
-        <map>
-        <key>Comment</key>
-            <string>Client SLVoice host to connect to</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>127.0.0.1</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Client SLVoice host to connect to</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>127.0.0.1</string>
+    </map>
     <key>VoiceImageLevel0</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture UUID for voice image level 0</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture UUID for voice image level 0</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
+    </map>
     <key>VoiceImageLevel1</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture UUID for voice image level 1</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture UUID for voice image level 1</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+    </map>
     <key>VoiceImageLevel2</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture UUID for voice image level 2</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture UUID for voice image level 2</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+    </map>
     <key>VoiceImageLevel3</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture UUID for voice image level 3</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture UUID for voice image level 3</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+    </map>
     <key>VoiceImageLevel4</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture UUID for voice image level 4</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture UUID for voice image level 4</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+    </map>
     <key>VoiceImageLevel5</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture UUID for voice image level 5</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture UUID for voice image level 5</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+    </map>
     <key>VoiceImageLevel6</key>
-        <map>
-        <key>Comment</key>
-            <string>Texture UUID for voice image level 6</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Texture UUID for voice image level 6</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
+    </map>
     <key>VoiceInputAudioDevice</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio input device to use for voice</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>Default</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio input device to use for voice</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>Default</string>
+    </map>
     <key>VoiceOutputAudioDevice</key>
-        <map>
-        <key>Comment</key>
-            <string>Audio output device to use for voice</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>String</string>
-        <key>Value</key>
-            <string>Default</string>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Audio output device to use for voice</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>Default</string>
+    </map>
     <key>VoicePort</key>
-        <map>
-        <key>Comment</key>
-            <string>Client SLVoice port to connect to</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>U32</string>
-        <key>Value</key>
-            <integer>44124</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Client SLVoice port to connect to</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>44124</integer>
+    </map>
+    <key>WLSkyDetail</key>
+    <map>
+      <key>Comment</key>
+      <string>Controls vertex detail on the WindLight sky.  Lower numbers will give better performance and uglier skies.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>64</integer>
+    </map>
     <key>WarnAboutBadPCI</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables AboutBadPCI warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables AboutBadPCI warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnAboutDirectX9</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables AboutDirectX9 warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables AboutDirectX9 warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnAboutOldGraphicsDriver</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables AboutOldGraphicsDriver warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables AboutOldGraphicsDriver warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnAboutPCIGraphics</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables AboutPCIGraphics warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables AboutPCIGraphics warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnBrowserLaunch</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables BrowserLaunch warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables BrowserLaunch warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnDeedObject</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables DeedObject warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables DeedObject warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstAppearance</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstAppearance warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-    <key>WarnFirstMedia</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstMedia warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstAppearance warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstAttach</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstAttach warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstAttach warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstBalanceDecrease</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstBalanceDecrease warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstBalanceDecrease warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstBalanceIncrease</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstBalanceIncrease warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstBalanceIncrease warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstBuild</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstBuild warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstBuild warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstDebugMenus</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstDebugMenus warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstDebugMenus warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstFlexible</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstFlexible warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstFlexible warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstGoTo</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstGoTo warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstGoTo warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstInventory</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstInventory warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstInventory warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstLeftClickNoHit</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstLeftClickNoHit warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstLeftClickNoHit warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstMap</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstMap warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstMap warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstMedia</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstMedia warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstMedia warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstOverrideKeys</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstOverrideKeys warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstOverrideKeys warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstSandbox</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstSandbox warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstSandbox warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstSculptedPrim</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstSculptedPrim warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstSculptedPrim warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstSit</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstSit warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstSit warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstStreamingMusic</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstStreamingMusic warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstStreamingMusic warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstStreamingVideo</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstStreamingVideo warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstStreamingVideo warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstTeleport</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstTeleport warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstTeleport warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnFirstVoice</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables FirstVoice warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables FirstVoice warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnNewClassified</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables NewClassified warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables NewClassified warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnQuickTimeInstalled</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables QuickTimeInstalled warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Enables QuickTimeInstalled warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WarnReturnToOwner</key>
-        <map>
-        <key>Comment</key>
-            <string>Enables ReturnToOwner warning dialog</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
-	<key>WindLightUseAtmosShaders</key>
-		<map>
-		<key>Comment</key>
-			<string>Whether to enable or disable WindLight atmospheric shaders.</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<integer>1</integer>
-		</map>
+    <map>
+      <key>Comment</key>
+      <string>Enables ReturnToOwner warning dialog</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>WatchdogEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>Controls whether the thread watchdog timer is activated.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>WaterEditPresets</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether to be able to edit the water defaults or not</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>WaterGLFogDensityScale</key>
+    <map>
+      <key>Comment</key>
+      <string>Maps shader water fog density to gl fog density</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.02</real>
+    </map>
+    <key>WaterGLFogDepthFloor</key>
+    <map>
+      <key>Comment</key>
+      <string>Controls how dark water gl fog can get</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.25</real>
+    </map>
+    <key>WaterGLFogDepthScale</key>
+    <map>
+      <key>Comment</key>
+      <string>Controls how quickly gl fog gets dark under water</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>50.0</real>
+    </map>
+    <key>WindLightUseAtmosShaders</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether to enable or disable WindLight atmospheric shaders.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WindowHeight</key>
-        <map>
-        <key>Comment</key>
-            <string>SL viewer window height</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>700</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>SL viewer window height</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>700</integer>
+    </map>
     <key>WindowMaximized</key>
-        <map>
-        <key>Comment</key>
-            <string>SL viewer window maximized on login</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>SL viewer window maximized on login</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>WindowWidth</key>
-        <map>
-        <key>Comment</key>
-            <string>SL viewer window width</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>1000</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>SL viewer window width</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>1000</integer>
+    </map>
     <key>WindowX</key>
-        <map>
-        <key>Comment</key>
-            <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>10</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>10</integer>
+    </map>
     <key>WindowY</key>
-        <map>
-        <key>Comment</key>
-            <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>10</integer>
-        </map>
-    <key>WLSkyDetail</key>
-		<map>
-		<key>Comment</key>
-			<string>Controls vertex detail on the WindLight sky.  Lower numbers will give better performance and uglier skies.</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>U32</string>
-		<key>Value</key>
-			<integer>64</integer>
-		</map>
+    <map>
+      <key>Comment</key>
+      <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>10</integer>
+    </map>
     <key>XferThrottle</key>
-        <map>
-        <key>Comment</key>
-            <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>150000</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>150000.0</real>
+    </map>
     <key>YawFromMousePosition</key>
-        <map>
-        <key>Comment</key>
-            <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>90</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>90.0</real>
+    </map>
     <key>YieldTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Yield some time to the local host.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>S32</string>
-        <key>Value</key>
-            <integer>-1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Yield some time to the local host.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
+    <key>ZoomDirect</key>
+    <map>
+      <key>Comment</key>
+      <string>Map Joystick zoom axis directly to camera zoom.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ZoomTime</key>
-        <map>
-        <key>Comment</key>
-            <string>Time of transition between different camera modes (seconds)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.4000000059604644775390625</real>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Time of transition between different camera modes (seconds)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.40000000596</real>
+    </map>
     <key>llOwnerSayChatColor</key>
-        <map>
-        <key>Comment</key>
-            <string>Color of chat messages from objects only visible to the owner</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Color4</string>
-        <key>Value</key>
-            <array>
-                <real>0.9900000095367431640625</real>
-                <real>0.9900000095367431640625</real>
-                <real>0.689999997615814208984375</real>
-                <real>1</real>
-            </array>
-        </map>
-    <key>ParcelMediaAutoPlayEnable</key>
-        <map>
-        <key>Comment</key>
-            <string>Auto play parcel media when available</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Color of chat messages from objects only visible to the owner</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.990000009537</real>
+        <real>0.990000009537</real>
+        <real>0.689999997616</real>
+        <real>1.0</real>
+      </array>
+    </map>
     <key>particlesbeacon</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacon / Highlight particle generators</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Beacon / Highlight particle generators</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>physicalbeacon</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacon / Highlight physical objects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Beacon / Highlight physical objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>renderbeacons</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacon / Highlight particle generators</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Beacon / Highlight particle generators</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>renderhighlights</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacon / Highlight scripted objects with touch function</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Beacon / Highlight scripted objects with touch function</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>scriptsbeacon</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacon / Highlight scripted objects</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Beacon / Highlight scripted objects</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>scripttouchbeacon</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacon / Highlight scripted objects with touch function</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>1</integer>
-        </map>
+    <map>
+      <key>Comment</key>
+      <string>Beacon / Highlight scripted objects with touch function</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>soundsbeacon</key>
-        <map>
-        <key>Comment</key>
-            <string>Beacon / Highlight sound generators</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>Boolean</string>
-        <key>Value</key>
-            <integer>0</integer>
-        </map>
-	<key>SkyEditPresets</key>
-		<map>
-		<key>Comment</key>
-			<string>Whether to be able to edit the sky defaults or not</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<integer>0</integer>
-		</map>
-	<key>WaterGLFogDepthFloor</key>
-		<map>
-		<key>Comment</key>
-			<string>Controls how dark water gl fog can get</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>F32</string>
-		<key>Value</key>
-			<real>0.25</real>
-		</map>
-	<key>WaterGLFogDepthScale</key>
-		<map>
-		<key>Comment</key>
-			<string>Controls how quickly gl fog gets dark under water</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>F32</string>
-		<key>Value</key>
-			<real>50.0</real>
-		</map>
-	<key>WaterGLFogDensityScale</key>
-		<map>
-		<key>Comment</key>
-			<string>Maps shader water fog density to gl fog density</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>F32</string>
-		<key>Value</key>
-			<real>0.02</real>
-		</map>
-	<key>EnableRippleWater</key>
-		<map>
-		<key>Comment</key>
-			<string>Whether to use ripple water shader or not</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<integer>1</integer>
-		</map>
-	<key>WaterEditPresets</key>
-	    <map>
-	    <key>Comment</key>
-		    <string>Whether to be able to edit the water defaults or not</string>
-	    <key>Persist</key>
-		    <integer>1</integer>
-	    <key>Type</key>
-		    <string>Boolean</string>
-	    <key>Value</key>
-		    <integer>0</integer>
-	    </map>
-    <key>FloaterEnvRect</key>
-	    <map>
-	    <key>Comment</key>
-		    <string>Rectangle for Environment Editor</string>
-	    <key>Persist</key>
-		    <integer>1</integer>
-	    <key>Type</key>
-		    <string>Rect</string>
-	    <key>Value</key>
-            <array>
-                <integer>50</integer>
-                <integer>150</integer>
-                <integer>650</integer>
-                <integer>0</integer>
-            </array>
-	    </map>
-    <key>FloaterAdvancedSkyRect</key>
-	    <map>
-	    <key>Comment</key>
-		    <string>Rectangle for Advanced Sky Editor</string>
-	    <key>Persist</key>
-		    <integer>1</integer>
-	    <key>Type</key>
-		    <string>Rect</string>
-	    <key>Value</key>
-            <array>
-                <integer>50</integer>
-                <integer>220</integer>
-                <integer>450</integer>
-                <integer>0</integer>
-            </array>
-	    </map>
-    <key>FloaterDayCycleRect</key>
-	    <map>
-	    <key>Comment</key>
-		    <string>Rectangle for Day Cycle Editor</string>
-	    <key>Persist</key>
-		    <integer>1</integer>
-	    <key>Type</key>
-		    <string>Rect</string>
-	    <key>Value</key>
-            <array>
-                <integer>50</integer>
-                <integer>450</integer>
-                <integer>300</integer>
-                <integer>0</integer>
-            </array>
-	    </map>
-    <key>FloaterAdvancedWaterRect</key>
-	    <map>
-	    <key>Comment</key>
-		    <string>Rectangle for Advanced Water Editor</string>
-	    <key>Persist</key>
-		    <integer>1</integer>
-	    <key>Type</key>
-		    <string>Rect</string>
-	    <key>Value</key>
-            <array>
-                <integer>50</integer>
-                <integer>220</integer>
-                <integer>450</integer>
-                <integer>0</integer>
-            </array>
-	    </map>
-    <key>RenderFastAlpha</key>
-		<map>
-		<key>Comment</key>
-			<string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<integer>0</integer>
-		</map>
-    <key>RenderDeferred</key>
-		<map>
-		<key>Comment</key>
-			<string>Use deferred rendering pipeline.</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<integer>0</integer>
-		</map>
-    <key>RenderFSAASamples</key>
-		<map>
-		<key>Comment</key>
-			<string>Number of samples to use for FSAA (0 = no AA).</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>U32</string>
-		<key>Value</key>
-			<integer>0</integer>
-		</map>
-    <key>RenderTextureMemoryMultiple</key>
-		<map>
-		<key>Comment</key>
-			<string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>F32</string>
-		<key>Value</key>
-			<real>1.0</real>
-		</map>
-    <key>Disregard128DefaultDrawDistance</key>
-		<map>
-		<key>Comment</key>
-			<string>Whether to use the auto default to 128 draw distance</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<real>1</real>
-		</map>
-    <key>Disregard96DefaultDrawDistance</key>
-		<map>
-		<key>Comment</key>
-			<string>Whether to use the auto default to 96 draw distance</string>
-		<key>Persist</key>
-			<integer>1</integer>
-		<key>Type</key>
-			<string>Boolean</string>
-		<key>Value</key>
-			<real>1</real>
-		</map>
-
-    <key>AvatarAxisDeadZone0</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 0 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>AvatarAxisDeadZone1</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 1 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>AvatarAxisDeadZone2</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 2 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>AvatarAxisDeadZone3</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 3 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>AvatarAxisDeadZone4</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 4 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>AvatarAxisDeadZone5</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 5 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>AvatarAxisScale0</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 0 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>AvatarAxisScale1</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 1 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>AvatarAxisScale2</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 2 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>AvatarAxisScale3</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 3 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>AvatarAxisScale4</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 4 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>AvatarAxisScale5</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar axis 5 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>AvatarFeathering</key>
-        <map>
-        <key>Comment</key>
-            <string>Avatar feathering (less is softer)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>16</real>
-        </map>
-
-    <key>BuildAxisDeadZone0</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 0 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>BuildAxisDeadZone1</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 1 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>BuildAxisDeadZone2</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 2 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>BuildAxisDeadZone3</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 3 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>BuildAxisDeadZone4</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 4 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>BuildAxisDeadZone5</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 5 dead zone.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>0.1</real>
-        </map>
-    <key>BuildAxisScale0</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 0 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>BuildAxisScale1</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 1 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>BuildAxisScale2</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 2 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>BuildAxisScale3</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 3 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>BuildAxisScale4</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 4 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>BuildAxisScale5</key>
-        <map>
-        <key>Comment</key>
-            <string>Build axis 5 scaler.</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>1</real>
-        </map>
-    <key>BuildFeathering</key>
-        <map>
-        <key>Comment</key>
-            <string>Build feathering (less is softer)</string>
-        <key>Persist</key>
-            <integer>1</integer>
-        <key>Type</key>
-            <string>F32</string>
-        <key>Value</key>
-            <real>16</real>
-        </map>
-
+    <map>
+      <key>Comment</key>
+      <string>Beacon / Highlight sound generators</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
     </map>
+  </map>
 </llsd>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index a6173f45df39fdf3672453b538f54e11121f486a..2b5691ffe87b199c0e461a26e559cb7d79532437 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -64,7 +64,7 @@
 #include "llurldispatcher.h"
 #include "llurlhistory.h"
 #include "llfirstuse.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llweb.h"
 #include "llsecondlifeurls.h"
@@ -192,24 +192,6 @@
 // viewer.cpp - these are only used in viewer, should be easily moved.
 extern void disable_win_error_reporting();
 
-//#define APPLE_PREVIEW // Define this if you're doing a preview build on the Mac
-#if LL_RELEASE_FOR_DOWNLOAD
-// Default userserver for production builds is agni
-#ifndef APPLE_PREVIEW
-static EGridInfo GridDefaultChoice = GRID_INFO_AGNI;
-#else
-static EGridInfo GridDefaultChoice = GRID_INFO_ADITI;
-#endif
-#else
-// Default userserver for development builds is none
-static EGridInfo GridDefaultChoice = GRID_INFO_NONE;
-#endif
-
-#if LL_WINDOWS
-extern void create_console();
-#endif
-
-
 #if LL_DARWIN
 #include <Carbon/Carbon.h>
 extern void init_apple_menu(const char* product);
@@ -287,6 +269,7 @@ BOOL				gUseWireframe = FALSE;
 LLVFS* gStaticVFS = NULL;
 
 LLMemoryInfo gSysMemory;
+U64 gMemoryAllocated = 0; // updated in display_stats() in llviewerdisplay.cpp
 
 LLString gLastVersionChannel;
 
@@ -303,6 +286,7 @@ BOOL gPeriodicSlowFrame = FALSE;
 BOOL gCrashOnStartup = FALSE;
 BOOL gLLErrorActivated = FALSE;
 BOOL gLogoutInProgress = FALSE;
+
 ////////////////////////////////////////////////////////////
 // Internal globals... that should be removed.
 static LLString gArgs;
@@ -338,6 +322,48 @@ void idle_afk_check()
 	}
 }
 
+//this function checks if the system can allocate (num_chunk)MB memory successfully.
+//if this check fails, the allocated memory is NOT freed.
+void idle_mem_check(S32 num_chunk)
+{
+	//this flag signals if memory allocation check is necessary
+	static BOOL check = TRUE ;
+
+	if(!check) //if memory check fails before, do not repeat it.
+	{
+		return ;
+	}
+	check = FALSE ; //before memory check for this frame, turn off check signal for the next frame. 
+
+	S32 i = 0 ;
+	char**p = new char*[num_chunk] ;
+	if(!p)
+	{
+		return ;
+	}
+	for(i = 0 ; i < num_chunk ; i++)
+	{
+		//1MB per chunk
+		//if the allocation fails, the system should catch it.
+		p[i] = new char[1024 * 1024] ;
+
+		if(!p[i]) //in case that system try-catch is turned off
+		{
+			return ;
+		}
+	}
+
+	//release memory if the allocation check does not fail.
+	for(i = 0 ; i < num_chunk ; i++)
+	{
+		delete[] p[i] ;	
+	}
+	delete[] p ;
+
+	//memory check for this frame succeeds, turn on next frame check.
+	check = TRUE ;
+}
+
 // A callback set in LLAppViewer::init()
 static void ui_audio_callback(const LLUUID& uuid)
 {
@@ -369,6 +395,24 @@ void request_initial_instant_messages()
 	}
 }
 
+// A settings system callback for CrashSubmitBehavior
+bool handleCrashSubmitBehaviorChanged(const LLSD& newvalue)
+{
+	S32 cb = newvalue.asInteger();
+	const S32 NEVER_SUBMIT_REPORT = 2;
+	if(cb == NEVER_SUBMIT_REPORT)
+	{
+// 		LLWatchdog::getInstance()->cleanup(); // SJB: cleaning up a running watchdog is unsafe
+		LLAppViewer::instance()->destroyMainloopTimeout();
+	}
+	else if(gSavedSettings.getBOOL("WatchdogEnabled") == TRUE)
+	{
+// 		LLWatchdog::getInstance()->init();
+// 		LLAppViewer::instance()->initMainloopTimeout("Mainloop Resume");
+	}
+	return true;
+}
+
 // Use these strictly for things that are constructed at startup,
 // or for things that are performance critical.  JC
 static void settings_to_globals()
@@ -464,72 +508,32 @@ static void settings_modify()
 	gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk"));
 }
 
-void initGridChoice()
+void LLAppViewer::initGridChoice()
 {
-    LLString gridChoice = gSavedSettings.getString("GridChoice");
-    if(!gridChoice.empty())
-		// Used to show first chunk of each argument passed in the 
-		// window title.
-    {
-        // find the grid choice from the user setting.
-        int gridIndex = GRID_INFO_NONE; 
-        for(;gridIndex < GRID_INFO_OTHER; ++gridIndex )
-        {
-            if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str()))
-            {
-                gGridChoice = (EGridInfo)gridIndex;
-
-                if(GRID_INFO_LOCAL == gGridChoice)
-                {
-                    gGridName = LOOPBACK_ADDRESS_STRING;
-                    break;
-                }
-                else
-                {
-                    gGridName = gGridInfo[gGridChoice].mName;
-                    break;
-                }
-            }
-        }
-
-        if(GRID_INFO_OTHER == gridIndex)
-        {
-                // *FIX:MEP Can and should we validate that this is an IP address?
-                gGridChoice = (EGridInfo)gridIndex;
-                gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str());
-
-        }
-    }
-
-
-#if !LL_RELEASE_FOR_DOWNLOAD
-	if (gGridChoice == GRID_INFO_NONE)
-	{
-		// Development version: load last server choice by default (overridden by cmd line args)
-		S32 server = gSavedSettings.getS32("ServerChoice");
-		if (server != 0)
-			gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
-		if (server == GRID_INFO_OTHER)
+	// Load	up the initial grid	choice from:
+	//	- hard coded defaults...
+	//	- command line settings...
+	//	- if dev build,	persisted settings...
+
+	// Set the "grid choice", this is specified	by command line.
+	std::string	grid_choice	= gSavedSettings.getString("CmdLineGridChoice");
+	LLViewerLogin::getInstance()->setGridChoice(grid_choice);
+
+	// Load last server choice by default 
+	// ignored if the command line grid	choice has been	set
+	if(grid_choice.empty())
+	{
+		S32	server = gSavedSettings.getS32("ServerChoice");
+		server = llclamp(server, 0,	(S32)GRID_INFO_COUNT - 1);
+		if(server == GRID_INFO_OTHER)
 		{
 			LLString custom_server = gSavedSettings.getString("CustomServer");
-			if (custom_server.empty())
-			{
-				gGridName = "none";
-			}
-			else
-			{
-				gGridName = custom_server.c_str();
-			}
+			LLViewerLogin::getInstance()->setGridChoice(custom_server);
+		}
+		else if(server != 0)
+		{
+			LLViewerLogin::getInstance()->setGridChoice((EGridInfo)server);
 		}
-
-        gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
-	}
-#endif
-
-	if (gGridChoice == GRID_INFO_NONE)
-	{
-		gGridChoice = GridDefaultChoice;
-        gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
 	}
 }
 
@@ -577,7 +581,6 @@ LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
 
 LLAppViewer::LLAppViewer() : 
 	mMarkerFile(NULL),
-	mCrashBehavior(CRASH_BEHAVIOR_ASK),
 	mReportedCrash(false),
 	mNumSessions(0),
 	mPurgeCache(false),
@@ -586,7 +589,8 @@ LLAppViewer::LLAppViewer() :
 	mSavedFinalSnapshot(false),
 	mQuitRequested(false),
 	mLogoutRequestSent(false),
-	mYieldTime(-1)
+	mYieldTime(-1),
+	mMainloopTimeout(NULL)
 {
 	if(NULL != sInstance)
 	{
@@ -594,15 +598,11 @@ LLAppViewer::LLAppViewer() :
 	}
 
 	sInstance = this;
-
-	// Initialize the mainloop timeout. 
-	mMainloopTimeout = new LLWatchdogTimeout();
 }
 
 LLAppViewer::~LLAppViewer()
 {
-	// Initialize the mainloop timeout. 
-	delete mMainloopTimeout;
+	destroyMainloopTimeout();
 
 	// If we got to this destructor somehow, the app didn't hang.
 	removeMarkerFile();
@@ -610,13 +610,6 @@ LLAppViewer::~LLAppViewer()
 
 bool LLAppViewer::init()
 {
-    // *NOTE:Mani - LLCurl::initClass is not thread safe. 
-    // Called before threads are created.
-    LLCurl::initClass();
-
-    initThreads();
-
-
 	//
 	// Start of the application
 	//
@@ -629,7 +622,6 @@ bool LLAppViewer::init()
 	// that touches files should really go through the lldir API
 	gDirUtilp->initAppDirs("SecondLife");
 
-
 	initLogging();
 	
 	//
@@ -638,6 +630,12 @@ bool LLAppViewer::init()
     if (!initConfiguration())
 		return false;
 
+    // *NOTE:Mani - LLCurl::initClass is not thread safe. 
+    // Called before threads are created.
+    LLCurl::initClass();
+
+    initThreads();
+
     writeSystemInfo();
 
 	// Build a string representing the current version number.
@@ -888,10 +886,6 @@ bool LLAppViewer::init()
 
 bool LLAppViewer::mainLoop()
 {
-	mMainloopTimeout = new LLWatchdogTimeout();
-	// *FIX:Mani - Make this a setting, once new settings exist in this branch.
-	mMainloopTimeout->setTimeout(5);
-	
 	//-------------------------------------------
 	// Run main loop until time to quit
 	//-------------------------------------------
@@ -920,6 +914,8 @@ bool LLAppViewer::mainLoop()
 		{
 			LLFastTimer t(LLFastTimer::FTM_FRAME);
 			
+			pingMainloopTimeout("Main:GatherInput");
+			
 			{
 				LLFastTimer t2(LLFastTimer::FTM_MESSAGES);
 			#if LL_WINDOWS
@@ -940,8 +936,13 @@ bool LLAppViewer::mainLoop()
 			}
 #endif
 
+			//at the beginning of every frame, check if the system can successfully allocate 10 * 1 MB memory.
+			idle_mem_check(10) ;
+
 			if (!LLApp::isExiting())
 			{
+				pingMainloopTimeout("Main:JoystickKeyboard");
+				
 				// Scan keyboard for movement keys.  Command keys and typing
 				// are handled by windows callbacks.  Don't do this until we're
 				// done initializing.  JC
@@ -956,6 +957,8 @@ bool LLAppViewer::mainLoop()
 					gKeyboard->scanKeyboard();
 				}
 
+				pingMainloopTimeout("Main:Messages");
+				
 				// Update state based on messages, user input, object idle.
 				{
 					LLFastTimer t3(LLFastTimer::FTM_IDLE);
@@ -972,25 +975,34 @@ bool LLAppViewer::mainLoop()
 
 				if (gDoDisconnect && (LLStartUp::getStartupState() == STATE_STARTED))
 				{
+					pauseMainloopTimeout();
 					saveFinalSnapshot();
 					disconnectViewer();
+					resumeMainloopTimeout();
 				}
 
 				// Render scene.
 				if (!LLApp::isExiting())
 				{
+					pingMainloopTimeout("Main:Display");
 					display();
 
+					pingMainloopTimeout("Main:Snapshot");
 					LLFloaterSnapshot::update(); // take snapshots
 					
 #if LL_LCD_COMPILE
 					// update LCD Screen
+					pingMainloopTimeout("Main:LCD");
 					gLcdScreen->UpdateDisplay();
 #endif
 				}
 
 			}
 
+			pingMainloopTimeout("Main:Sleep");
+			
+			pauseMainloopTimeout();
+
 			// Sleep and run background threads
 			{
 				LLFastTimer t2(LLFastTimer::FTM_SLEEP);
@@ -1073,7 +1085,9 @@ bool LLAppViewer::mainLoop()
 				//LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering.
 				//LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering.
 
-				mMainloopTimeout->ping();
+				resumeMainloopTimeout();
+	
+				pingMainloopTimeout("Main:End");
 			}
 						
 		}
@@ -1098,7 +1112,7 @@ bool LLAppViewer::mainLoop()
 	
 	delete gServicePump;
 
-	mMainloopTimeout->stop();
+	destroyMainloopTimeout();
 
 	llinfos << "Exiting main_loop" << llendflush;
 
@@ -1400,7 +1414,12 @@ bool LLAppViewer::initThreads()
 	static const bool enable_threads = true;
 #endif
 
-	LLWatchdog::getInstance()->init();
+	const S32 NEVER_SUBMIT_REPORT = 2;
+	if(TRUE == gSavedSettings.getBOOL("WatchdogEnabled") 
+		&& (gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) != NEVER_SUBMIT_REPORT))
+	{
+		LLWatchdog::getInstance()->init();
+	}
 
 	LLVFSThread::initClass(enable_threads && true);
 	LLLFSThread::initClass(enable_threads && true);
@@ -1556,6 +1575,19 @@ bool LLAppViewer::initConfiguration()
 				 LLWindow::getFontListSans());
 #endif
 
+	//*FIX:Mani - Set default to disabling watchdog mainloop 
+	// timeout for mac and linux. There is no call stack info 
+	// on these platform to help debug.
+#ifndef	LL_RELEASE_FOR_DOWNLOAD
+	gSavedSettings.setBOOL("WatchdogEnabled", FALSE);
+#endif
+
+#ifndef LL_WINDOWS
+	gSavedSettings.setBOOL("WatchdogEnabled", FALSE);
+#endif
+
+	gCrashSettings.getControl(CRASH_BEHAVIOR_SETTING)->getSignal()->connect(boost::bind(&handleCrashSubmitBehaviorChanged, _1));	
+
 	// These are warnings that appear on the first experience of that condition.
 	// They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
 	// for disable/reset ability
@@ -1787,18 +1819,6 @@ bool LLAppViewer::initConfiguration()
         }
     }
 
-    const LLControlVariable* loginuri = gSavedSettings.getControl("LoginURI");
-    if(loginuri && LLString::null != loginuri->getValue().asString())
-    {   
-        addLoginURI(loginuri->getValue().asString());
-    }
-
-    const LLControlVariable* helperuri = gSavedSettings.getControl("HelperURI");
-    if(helperuri && LLString::null != helperuri->getValue().asString())
-    {   
-        setHelperURI(helperuri->getValue().asString());
-    }
-
     const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder");
     if(skinfolder && LLString::null != skinfolder->getValue().asString())
     {   
@@ -2180,10 +2200,6 @@ void LLAppViewer::cleanupSavedSettings()
 	{
 		gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance);
 	}
-
-	// *REMOVE: This is now done via LLAppViewer::setCrashBehavior()
-	// Left vestigially in case I borked it.
-	// gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, gCrashBehavior);
 }
 
 void LLAppViewer::removeCacheFiles(const char* file_mask)
@@ -2210,8 +2226,15 @@ void LLAppViewer::writeSystemInfo()
 	gDebugInfo["CPUInfo"]["CPUSSE"] = gSysCPU.hasSSE();
 	gDebugInfo["CPUInfo"]["CPUSSE2"] = gSysCPU.hasSSE2();
 	
-	gDebugInfo["RAMInfo"] = llformat("%u", gSysMemory.getPhysicalMemoryKB());
+	gDebugInfo["RAMInfo"]["Physical"] = (LLSD::Integer)(gSysMemory.getPhysicalMemoryKB());
+	gDebugInfo["RAMInfo"]["Allocated"] = (LLSD::Integer)(gMemoryAllocated>>10); // MB -> KB
 	gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple();
+		
+	// *FIX:Mani - move this ddown in llappviewerwin32
+#ifdef LL_WINDOWS
+	DWORD thread_id = GetCurrentThreadId();
+	gDebugInfo["MainloopThreadID"] = (S32)thread_id;
+#endif
 
 	// Dump some debugging info
 	LL_INFOS("SystemInfo") << gSecondLife
@@ -2242,7 +2265,10 @@ void LLAppViewer::handleSyncViewerCrash()
 void LLAppViewer::handleViewerCrash()
 {
 	llinfos << "Handle viewer crash entry." << llendl;
-	
+
+	// Make sure the watchdog gets turned off...
+// 	LLWatchdog::getInstance()->cleanup(); // SJB: This causes the Watchdog to hang for an extra 20-40s?!
+
 	LLAppViewer* pApp = LLAppViewer::instance();
 	if (pApp->beingDebugged())
 	{
@@ -2297,6 +2323,12 @@ void LLAppViewer::handleViewerCrash()
 		gDebugInfo["CurrentRegion"] = gAgent.getRegion()->getName();
 	}
 
+	if(LLAppViewer::instance()->mMainloopTimeout)
+	{
+		gDebugInfo["MainloopTimeoutState"] = LLAppViewer::instance()->mMainloopTimeout->getState();
+	}
+	
+    
 	//Write out the crash status file
 	//Use marker file style setup, as that's the simplest, especially since
 	//we're already in a crash situation	
@@ -2360,12 +2392,6 @@ void LLAppViewer::handleViewerCrash()
 	return;
 }
 
-void LLAppViewer::setCrashBehavior(S32 cb) 
-{ 
-	mCrashBehavior = cb; 
-	gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, mCrashBehavior);
-} 
-
 bool LLAppViewer::anotherInstanceRunning()
 {
 	// We create a marker file when the program starts and remove the file when it finishes.
@@ -2822,61 +2848,6 @@ const LLString& LLAppViewer::getWindowTitle() const
 	return gWindowTitle;
 }
 
-void LLAppViewer::resetURIs() const
-{
-    // Clear URIs when picking a new server
-	gLoginURIs.clear();
-	gHelperURI.clear();
-}
-
-const std::vector<std::string>& LLAppViewer::getLoginURIs() const
-{
-	if (gLoginURIs.empty())
-	{
-		// not specified on the command line, use value from table
-		gLoginURIs.push_back(gGridInfo[gGridChoice].mLoginURI);
-	}
-	return gLoginURIs;
-}
-
-const std::string& LLAppViewer::getHelperURI() const
-{
-	if (gHelperURI.empty())
-	{
-		// not specified on the command line, use value from table
-		gHelperURI = gGridInfo[gGridChoice].mHelperURI;
-	}
-	return gHelperURI;
-}
-
-void LLAppViewer::addLoginURI(const std::string& uri)
-{
-	// *NOTE:Mani - login uri trumps the --grid (gGridChoice) setting.
-	// Update gGridChoice to reflect the loginURI setting.
-    gLoginURIs.push_back(uri);
-	
-	const std::string& top_uri = getLoginURIs()[0];
-	int i = 0;
-	for(; i < GRID_INFO_COUNT; ++i)
-	{
-		if(top_uri == gGridInfo[i].mLoginURI)
-		{
-			gGridChoice = (EGridInfo)i;
-			break;
-		}
-	}
-
-	if(GRID_INFO_COUNT == i)
-	{
-		gGridChoice = GRID_INFO_OTHER;
-	}
-}
-
-void LLAppViewer::setHelperURI(const std::string& uri)
-{
-    gHelperURI = uri;
-}
-
 // Callback from a dialog indicating user was logged out.  
 void finish_disconnect(S32 option, void* userdata)
 {
@@ -3014,15 +2985,6 @@ void LLAppViewer::saveNameCache()
 	}
 }
 
-bool LLAppViewer::isInProductionGrid()
-{
-	// *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
-	// but it seems that loginURI trumps that.
-	const std::string& loginURI = getLoginURIs()[0];
-	return (loginURI == gGridInfo[GRID_INFO_AGNI].mLoginURI);
-}
-
-
 /*!	@brief		This class is an LLFrameTimer that can be created with
 				an elapsed time that starts counting up from the given value
 				rather than 0.0.
@@ -3531,6 +3493,8 @@ static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME;
 
 void LLAppViewer::idleNetwork()
 {
+	pingMainloopTimeout("idleNetwork");
+
 	gObjectList.mNumNewObjects = 0;
 	S32 total_decoded = 0;
 
@@ -3716,18 +3680,58 @@ void LLAppViewer::forceErrorSoftwareException()
     throw; 
 }
 
-void LLAppViewer::startMainloopTimeout(F32 secs)
+void LLAppViewer::initMainloopTimeout(const std::string& state, F32 secs)
 {
-	if(secs < 0.0f)
+	if(!mMainloopTimeout)
 	{
-		secs = gSavedSettings.getF32("MainloopTimeoutDefault");
+		mMainloopTimeout = new LLWatchdogTimeout();
+		resumeMainloopTimeout(state, secs);
+	}
+}
+
+void LLAppViewer::destroyMainloopTimeout()
+{
+	if(mMainloopTimeout)
+	{
+		delete mMainloopTimeout;
+		mMainloopTimeout = NULL;
+	}
+}
+
+void LLAppViewer::resumeMainloopTimeout(const std::string& state, F32 secs)
+{
+	if(mMainloopTimeout)
+	{
+		if(secs < 0.0f)
+		{
+			secs = gSavedSettings.getF32("MainloopTimeoutDefault");
+		}
+		
+		mMainloopTimeout->setTimeout(secs);
+		mMainloopTimeout->start(state);
+	}
+}
+
+void LLAppViewer::pauseMainloopTimeout()
+{
+	if(mMainloopTimeout)
+	{
+		mMainloopTimeout->stop();
 	}
-	
-	mMainloopTimeout->setTimeout(secs);
-	mMainloopTimeout->start();
 }
 
-void LLAppViewer::stopMainloopTimeout()
+void LLAppViewer::pingMainloopTimeout(const std::string& state, F32 secs)
 {
-	mMainloopTimeout->stop();
+	if(mMainloopTimeout)
+	{
+		if(secs < 0.0f)
+		{
+			secs = gSavedSettings.getF32("MainloopTimeoutDefault");
+		}
+
+		mMainloopTimeout->setTimeout(secs);
+		mMainloopTimeout->ping(state);
+	}
 }
+
+
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index de127e5cf8a1325b619399528c7ba714aed3382c..8ef22deb27b8413089d14488d79bbde45d0cb3f1 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -77,8 +77,6 @@ class LLAppViewer : public LLApp
 	// Report true if under the control of a debugger. A null-op default.
 	virtual bool beingDebugged() { return false; } 
 
-	S32 getCrashBehavior() const { return mCrashBehavior; } 
-	void setCrashBehavior(S32 cb);
 	virtual void handleCrashReporting() = 0; // What to do with crash report?
 	virtual void handleSyncCrashTrace() = 0; // any low-level crash-prep that has to happen in the context of the crashing thread before the crash report is delivered.
 	static void handleViewerCrash(); // Hey! The viewer crashed. Do this, soon.
@@ -96,13 +94,6 @@ class LLAppViewer : public LLApp
 	const LLString& getSecondLifeTitle() const; // The Second Life title.
 	const LLString& getWindowTitle() const; // The window display name.
 
-    // Helpers for URIs
-    void addLoginURI(const std::string& uri);
-    void setHelperURI(const std::string& uri);
-    const std::vector<std::string>& getLoginURIs() const;
-    const std::string& getHelperURI() const;
-    void resetURIs() const;
-
     void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.
     void badNetworkHandler(); // Cause a crash state due to bad network packet.
 
@@ -112,8 +103,6 @@ class LLAppViewer : public LLApp
     void loadNameCache();
     void saveNameCache();
 
-    bool isInProductionGrid();
-
 	void removeMarkerFile(bool leave_logout_marker = false);
 	
     // LLAppViewer testing helpers.
@@ -138,10 +127,13 @@ class LLAppViewer : public LLApp
 	std::string getSettingsFileName(const std::string& file);
 
 	// For thread debugging. 
-	// llstartup needs to control this.
-	// llworld, send_agent_pause() also controls this.
-	void startMainloopTimeout(F32 secs = -1.0f);
-	void stopMainloopTimeout();
+	// llstartup needs to control init.
+	// llworld, send_agent_pause() also controls pause/resume.
+	void initMainloopTimeout(const std::string& state, F32 secs = -1.0f);
+	void destroyMainloopTimeout();
+	void pauseMainloopTimeout();
+	void resumeMainloopTimeout(const std::string& state = "", F32 secs = -1.0f);
+	void pingMainloopTimeout(const std::string& state, F32 secs = -1.0f);
 
 protected:
 	virtual bool initWindow(); // Initialize the viewer's window.
@@ -159,6 +151,7 @@ class LLAppViewer : public LLApp
 
 	bool initThreads(); // Initialize viewer threads, return false on failure.
 	bool initConfiguration(); // Initialize settings from the command line/config file.
+	void initGridChoice();
 
 	bool initCache(); // Initialize local client cache.
 	void purgeCache(); // Clear the local cache. 
@@ -192,7 +185,6 @@ class LLAppViewer : public LLApp
 
 	
 	LLOSInfo mSysOSInfo; 
-	S32 mCrashBehavior;
 	bool mReportedCrash;
 
 	// Thread objects.
@@ -293,6 +285,7 @@ extern BOOL		gUseWireframe;
 extern LLVFS	*gStaticVFS;
 
 extern LLMemoryInfo gSysMemory;
+extern U64 gMemoryAllocated;
 
 extern LLString gLastVersionChannel;
 
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index cb44e2b1dea120c24644e33b1944c4f49a9817e1..0a2cb43c809541aa7d90c3fa9ca84b8a50b1c1ed 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -333,13 +333,15 @@ void LLAppViewerLinux::handleSyncCrashTrace()
 
 void LLAppViewerLinux::handleCrashReporting()
 {
+	const S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
+
 	// Always generate the report, have the logger do the asking, and
 	// don't wait for the logger before exiting (-> total cleanup).
-	if (CRASH_BEHAVIOR_NEVER_SEND != LLAppViewer::instance()->getCrashBehavior())
+	if (CRASH_BEHAVIOR_NEVER_SEND != cb)
 	{	
 		// launch the actual crash logger
 		const char* ask_dialog = "-dialog";
-		if (CRASH_BEHAVIOR_ASK != LLAppViewer::instance()->getCrashBehavior())
+		if (CRASH_BEHAVIOR_ASK != cb)
 			ask_dialog = ""; // omit '-dialog' option
 		std::string cmd =gDirUtilp->getAppRODataDir();
 		cmd += gDirUtilp->getDirDelimiter();
@@ -348,7 +350,7 @@ void LLAppViewerLinux::handleCrashReporting()
 			{cmd.c_str(),
 			 ask_dialog,
 			 "-user",
-			 (char*)gGridName.c_str(),
+			 (char*)LLViewerLogin::getInstance()->getGridLabel().c_str(),
 			 "-name",
 			 LLAppViewer::instance()->getSecondLifeTitle().c_str(),
 			 NULL};
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index dee36fa3c3114e7bd844ff5d40bfd61e2e018ec7..e2663f05bd5a06db8db99f9844e8efc355d0b73b 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -71,7 +71,6 @@ extern "C" {
 #endif
 #endif
 
-
 LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)
 {
     // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
@@ -421,9 +420,10 @@ void LLAppViewerWin32::handleCrashReporting()
 	exe_path += "win_crash_logger.exe";
 
 	std::string arg_string = "-user ";
-	arg_string += gGridName;
-
-	switch(getCrashBehavior())
+	arg_string += LLViewerLogin::getInstance()->getGridLabel();
+	
+	S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
+	switch(cb)
 	{
 	case CRASH_BEHAVIOR_ASK:
 	default:
diff --git a/indra/newview/llbox.cpp b/indra/newview/llbox.cpp
index 1a3cf36ce6939192250ffa541646a33071c542d4..95e16cf8725fa059946f575947b15ab301ba2cec 100644
--- a/indra/newview/llbox.cpp
+++ b/indra/newview/llbox.cpp
@@ -34,7 +34,7 @@
 #include "llbox.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llglheaders.h"
 
 LLBox		gBox;
diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index 8571046c6e0d7c935b8f99b0ee9943d68b5696c2..e4256b40f5b792f0e0eb562e62086d949675666e 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -39,7 +39,7 @@
 
 // Project includes
 #include "llui.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "lluiconstants.h"
 #include "llviewerwindow.h"
 #include "llviewercontrol.h"
diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp
index a6e002a04d809e8623d65f1f6e294828ef1a309a..f06a8abfe0f6da0f4dcfe4c90c8f6fa6cb424ed3 100644
--- a/indra/newview/llcommandlineparser.cpp
+++ b/indra/newview/llcommandlineparser.cpp
@@ -291,12 +291,15 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
     }
     catch(LLCLPLastOption&) 
     {
-        // Continue without parsing.
-		std::string msg = "Found tokens past last option. Ignoring.";
-        llwarns << msg << llendl;
-		mErrorMsg = msg;
-        // boost::po will have stored a mal-formed option. 
+		// This exception means a token was read after an option 
+		// that must be the last option was reached (see url and slurl options)
+
+        // boost::po will have stored a malformed option. 
         // All such options will be removed below.
+		// The last option read, the last_option option, and its value
+		// are put into the error message.
+		std::string last_option;
+		std::string last_value;
         for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();)
         {
             po::variables_map::iterator tempI = i++;
@@ -304,7 +307,27 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
             {
                 gVariableMap.erase(tempI);
             }
+			else
+			{
+				last_option = tempI->first;
+		        LLCommandLineParser::token_vector_t* tv = 
+				    boost::any_cast<LLCommandLineParser::token_vector_t>(&(tempI->second.value())); 
+				if(!tv->empty())
+				{
+					last_value = (*tv)[tv->size()-1];
+				}
+			}
         }
+
+		// Continue without parsing.
+		std::ostringstream msg;
+		msg << "Caught Error: Found options after last option: " 
+			<< last_option << " "
+			<< last_value;
+
+        llwarns << msg.str() << llendl;
+		mErrorMsg = msg.str();
+        return false;
     } 
     return true;
 }
diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index bbcb7e64d448f75c920f9d14ef3861f83788c021..c32bf7c2684009dce944969e38cf3010ded7bab0 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -44,7 +44,7 @@
 #include "lllineeditor.h"
 #include "llviewchildren.h"
 #include "llxmlrpctransaction.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
 
 
 const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0;
@@ -239,7 +239,7 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type,
 	static std::string transactionURI;
 	if (transactionURI.empty())
 	{
-		transactionURI = LLAppViewer::instance()->getHelperURI() + "currency.php";
+		transactionURI = LLViewerLogin::getInstance()->getHelperURI() + "currency.php";
 	}
 
 	delete mTransaction;
@@ -527,3 +527,4 @@ std::string LLCurrencyUIManager::errorURI()
 }
 
 
+
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index b0dd0a99ac96c352114b82380adc172cb742727e..a03adfa3388a5f75fbf13b7fac9ed3b3fd29b01f 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -122,6 +122,7 @@ void LLDrawable::destroy()
 		sNumZombieDrawables--;
 	}
 
+	LLFace::sDeleteLock = mFaces.size() ;
 	std::for_each(mFaces.begin(), mFaces.end(), DeletePointer());
 	mFaces.clear();
 		
@@ -184,6 +185,7 @@ void LLDrawable::cleanupReferences()
 {
 	LLFastTimer t(LLFastTimer::FTM_PIPELINE);
 	
+	LLFace::sDeleteLock = mFaces.size() ;
 	std::for_each(mFaces.begin(), mFaces.end(), DeletePointer());
 	mFaces.clear();
 
@@ -277,6 +279,7 @@ void LLDrawable::setNumFaces(const S32 newFaces, LLFacePool *poolp, LLViewerImag
 	}
 	else if (newFaces < (S32)mFaces.size())
 	{
+		LLFace::sDeleteLock = (S32)mFaces.size() - newFaces ;
 		std::for_each(mFaces.begin() + newFaces, mFaces.end(), DeletePointer());
 		mFaces.erase(mFaces.begin() + newFaces, mFaces.end());
 	}
@@ -288,6 +291,8 @@ void LLDrawable::setNumFaces(const S32 newFaces, LLFacePool *poolp, LLViewerImag
 			addFace(poolp, texturep);
 		}
 	}
+
+	llassert_always(mFaces.size() == newFaces);
 }
 
 void LLDrawable::setNumFacesFast(const S32 newFaces, LLFacePool *poolp, LLViewerImage *texturep)
@@ -298,6 +303,7 @@ void LLDrawable::setNumFacesFast(const S32 newFaces, LLFacePool *poolp, LLViewer
 	}
 	else if (newFaces < (S32)mFaces.size())
 	{
+		LLFace::sDeleteLock = (S32)mFaces.size() - newFaces ;
 		std::for_each(mFaces.begin() + newFaces, mFaces.end(), DeletePointer());
 		mFaces.erase(mFaces.begin() + newFaces, mFaces.end());
 	}
@@ -309,6 +315,8 @@ void LLDrawable::setNumFacesFast(const S32 newFaces, LLFacePool *poolp, LLViewer
 			addFace(poolp, texturep);
 		}
 	}
+
+	llassert_always(mFaces.size() == newFaces) ;
 }
 
 void LLDrawable::mergeFaces(LLDrawable* src)
@@ -329,8 +337,13 @@ void LLDrawable::deleteFaces(S32 offset, S32 count)
 {
 	face_list_t::iterator face_begin = mFaces.begin() + offset;
 	face_list_t::iterator face_end = face_begin + count;
+
+	S32 end = (S32)mFaces.size() ;
+	LLFace::sDeleteLock = count ;
 	std::for_each(face_begin, face_end, DeletePointer());
 	mFaces.erase(face_begin, face_end);
+
+	llassert_always(mFaces.size() == end - count) ;
 }
 
 void LLDrawable::update()
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 6cd2152a287d81acdba5d86906839664c68cc5d6..b7966f2b209a8fe8388a08e5dc3ada995f2a7ada 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -32,7 +32,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "lldrawpool.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llfasttimer.h"
 #include "llviewercontrol.h"
 
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 09901984c4ff6b9ca0e6a520d74819111d664741..5cc4e37c97571c9883dced8a29aa8d74445a8f7d 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -37,6 +37,7 @@
 #include "llviewercontrol.h"
 #include "llcriticaldamp.h"
 #include "llfasttimer.h"
+#include "llrender.h"
 
 #include "llcubemap.h"
 #include "llsky.h"
@@ -93,7 +94,7 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
 	{
 		// Start out with no shaders.
 		current_shader = target_shader = NULL;
-		glUseProgramObjectARB(0);
+		LLGLSLShader::bindNoShader();
 	}
 	gPipeline.enableLightsDynamic();
 }
@@ -105,7 +106,7 @@ void LLDrawPoolAlpha::endRenderPass( S32 pass )
 
 	if(gPipeline.canUseWindLightShaders()) 
 	{
-		glUseProgramObjectARB(0);
+		LLGLSLShader::bindNoShader();
 	}
 }
 
@@ -123,7 +124,7 @@ void LLDrawPoolAlpha::render(S32 pass)
 	{
 		if(gPipeline.canUseWindLightShaders()) 
 		{
-			glUseProgramObjectARB(0);
+			LLGLSLShader::bindNoShader();
 		}
 		gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
 		glColor4f(1,0,0,1);
@@ -207,18 +208,17 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
 		{
 			return;
 		}
-		// *TODO - Uhhh, we should always be doing some type of alpha rejection.  These should probably both be 0.01f
-		glAlphaFunc(GL_GREATER, 0.f);
+		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	}
 	else
 	{
 		if (LLPipeline::sImpostorRender)
 		{
-			glAlphaFunc(GL_GREATER, 0.5f);
+			gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
 		}
 		else
 		{
-			glAlphaFunc(GL_GREATER, 0.01f);
+			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 		}
 	}
 
@@ -230,7 +230,8 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
 
 		if (texture && params.mTexture.notNull())
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			llassert_always(gGL.getTexUnit(0)) ;
+			gGL.getTexUnit(0)->activate();
 			params.mTexture->bind();
 			params.mTexture->addTextureStats(params.mVSize);
 			if (params.mTextureMatrix)
@@ -283,7 +284,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
 		}
 		else if (!use_shaders && current_shader != NULL)
 		{
-			glUseProgramObjectARB(0);
+			LLGLSLShader::bindNoShader();
 			current_shader = NULL;
 		}
 
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 95e3bc2205c802ee964c2ae6766bb3d7ba82a9e8..f1d88aa54ac49624c4e47b20f5bdbf512c0a95e9 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -32,7 +32,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "lldrawpoolavatar.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llvoavatar.h"
 #include "m3math.h"
@@ -299,7 +299,7 @@ void LLDrawPoolAvatar::beginSkinned()
 		}
 		
 		sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP);
-		glActiveTextureARB(GL_TEXTURE0_ARB);
+		gGL.getTexUnit(0)->activate();
 	}
 	else
 	{
@@ -319,7 +319,7 @@ void LLDrawPoolAvatar::endSkinned()
 	{
 		sRenderingSkinned = FALSE;
 		sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP);
-		glActiveTextureARB(GL_TEXTURE0_ARB);
+		gGL.getTexUnit(0)->activate();
 		disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
 		if (sShaderLevel >= SHADER_LEVEL_BUMP)
 		{
@@ -343,7 +343,7 @@ void LLDrawPoolAvatar::endSkinned()
 		}
 	}
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 }
 
 
@@ -395,7 +395,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 		return;
 	}
 
-	if (!avatarp->isFullyLoaded())
+	if (!single_avatar && !avatarp->isFullyLoaded())
 	{
 		
 		/* // debug code to draw a cube in place of avatar
@@ -599,22 +599,12 @@ void LLDrawPoolAvatar::renderForSelect()
 	BOOL impostor = avatarp->isImpostor();
 	if (impostor)
 	{
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-		glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-		glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_MODULATE);
-
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PRIMARY_COLOR);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
-
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB,		GL_PRIMARY_COLOR_ARB);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB,	GL_SRC_ALPHA);
+		gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
+		gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
 
 		avatarp->renderImpostor(color);
 
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 		return;
 	}
 
@@ -623,8 +613,8 @@ void LLDrawPoolAvatar::renderForSelect()
 	{
 		gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX];
 	}
-	glAlphaFunc(GL_GEQUAL, 0.2f);
-	gGL.blendFunc(GL_ONE, GL_ZERO);
+	gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
+	gGL.setSceneBlendType(LLRender::BT_REPLACE);
 
 	glColor4ubv(color.mV);
 
@@ -645,11 +635,11 @@ void LLDrawPoolAvatar::renderForSelect()
 		disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
 	}
 
-	glAlphaFunc(GL_GREATER, 0.01f);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
 	// restore texture mode
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 3f520217118aafcfa93bacd9e26f75ae7186dfdf..1dfaf6569ea5bb322ce32026e1e2d2ec22e91bb9 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -41,7 +41,7 @@
 #include "m4math.h"
 #include "v4math.h"
 #include "llglheaders.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llagent.h"
 #include "llcubemap.h"
@@ -371,17 +371,8 @@ void LLDrawPoolBump::beginShiny(bool invisible)
 			cube_map->setMatrix(0);
 			cube_map->bind();
 
-			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,	GL_COMBINE_ARB);
-			
-			//use RGB from texture
-			glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,	GL_REPLACE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,	GL_TEXTURE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,	GL_SRC_COLOR);
-
-			// use alpha from color
-			glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_PRIMARY_COLOR);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+			gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
+			gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_ALPHA);
 		}
 	}
 }
@@ -443,15 +434,17 @@ void LLDrawPoolBump::endShiny(bool invisible)
 			}
 
 			shader->unbind();
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			gGL.getTexUnit(0)->activate();
 			glEnable(GL_TEXTURE_2D);
 		}
-
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		if (cube_channel >= 0)
+		{
+			gGL.getTexUnit(cube_channel)->setTextureBlendType(LLTexUnit::TB_MULT);
+		}
 	}
 	
 	LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 	
 	diffuse_channel = -1;
 	cube_channel = 0;
@@ -540,16 +533,16 @@ void LLDrawPoolBump::endFullbrightShiny()
 		{
 			shader->disableTexture(LLShaderMgr::DIFFUSE_MAP);
 		}
-		glActiveTextureARB(GL_TEXTURE0_ARB);
+		gGL.getTexUnit(0)->activate();
 		glEnable(GL_TEXTURE_2D);
 
 		shader->unbind();
 
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 	}
 	
 	LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 	diffuse_channel = -1;
 	cube_channel = 0;
@@ -614,6 +607,10 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params)
 		if( tex )
 		{
 			bump = gBumpImageList.getBrightnessDarknessImage( tex, bump_code );
+			//------------------------------------------
+			//error check to make sure bump is valid
+			llassert_always(!bump || bump->getNumRefs() == 1) ;			
+			//------------------------------------------
 		}
 		break;
 
@@ -628,6 +625,11 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params)
 
 	if (bump)
 	{
+		//------------------------------------------
+		//error check to make sure bump is valid
+		llassert_always(bump->getNumRefs() > 0 && bump->getNumRefs() < 100000) ;
+		//------------------------------------------
+
 		bump->bind(1);
 		bump->bind(0);
 		return TRUE;
@@ -650,37 +652,18 @@ void LLDrawPoolBump::beginBump()
 
 	// TEXTURE UNIT 0
 	// Output.rgb = texture at texture coord 0
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,	GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,	GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,	GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,	GL_SRC_ALPHA);
-
-	// Don't care about alpha output
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
 
 	// TEXTURE UNIT 1
-	glActiveTextureARB(GL_TEXTURE1_ARB);
-
+	gGL.getTexUnit(1)->activate();
+ 
 	glEnable(GL_TEXTURE_2D); // Texture unit 1
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,	GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,	GL_ADD_SIGNED_ARB);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,	GL_PREVIOUS_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,	GL_SRC_COLOR);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,	GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,	GL_ONE_MINUS_SRC_ALPHA);
-
-	// Don't care about alpha output
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
+	gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
 
 	// src	= tex0 + (1 - tex1) - 0.5
 	//		= (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
@@ -692,9 +675,8 @@ void LLDrawPoolBump::beginBump()
 	//		= 2 * ((1 + bump0 - bump1) / 2) * dst   [0 - 2 * dst]
 	//		= (1 + bump0 - bump1) * dst.rgb
 	//		= dst.rgb + dst.rgb * (bump0 - bump1)
-	gGL.blendFunc(GL_DST_COLOR, GL_SRC_COLOR);
-//	gGL.blendFunc(GL_ONE, GL_ZERO);  // temp
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.setSceneBlendType(LLRender::BT_MULT_X2);
+	gGL.getTexUnit(0)->activate();
 	stop_glerror();
 
 	LLViewerImage::unbindTexture(1, GL_TEXTURE_2D);
@@ -728,15 +710,15 @@ void LLDrawPoolBump::endBump()
 	}
 
 	// Disable texture unit 1
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glDisable(GL_TEXTURE_2D); // Texture unit 1
-	glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 	// Disable texture unit 0
-	glActiveTextureARB(GL_TEXTURE0_ARB);
-	glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->activate();
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 	
-	gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 }
 
 ////////////////////////////////////////////////////////////////
@@ -890,9 +872,15 @@ LLImageGL* LLBumpImageList::getBrightnessDarknessImage(LLViewerImage* src_image,
 		{
 			LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,1);
 			raw->clear(0x77, 0x77, 0x77, 0xFF);
+
+			//------------------------------
 			bump = new LLImageGL( raw, TRUE);
-			bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
+			//immediately assign bump to a global smart pointer in case some local smart pointer
+			//accidently releases it.
 			(*entries_list)[src_image->getID()] = bump;
+			//------------------------------
+
+			bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);			
 
 			// Note: this may create an LLImageGL immediately
 			src_image->setLoadedCallback( callback_func, 0, TRUE, new LLUUID(src_image->getID()) );
@@ -1047,10 +1035,15 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerImage *src_vi, LLIma
 				}
 			}
 
+			//---------------------------------------------------
 			LLImageGL* bump = new LLImageGL( TRUE);
-			bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
-			bump->createGLTexture(0, dst_image);
+			//immediately assign bump to a global smart pointer in case some local smart pointer
+			//accidently releases it.
 			iter->second = bump; // derefs (and deletes) old image
+			//---------------------------------------------------
+
+			bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
+			bump->createGLTexture(0, dst_image);			
 		}
 		else
 		{
@@ -1101,16 +1094,16 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
 	{
 		if (mShiny)
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			gGL.getTexUnit(0)->activate();
 			glMatrixMode(GL_TEXTURE);
 		}
 		else
 		{
-			glActiveTextureARB(GL_TEXTURE1_ARB);
+			gGL.getTexUnit(1)->activate();
 			glMatrixMode(GL_TEXTURE);
 			glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
 			gPipeline.mTextureMatrixOps++;
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			gGL.getTexUnit(0)->activate();
 		}
 
 		glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
@@ -1153,13 +1146,13 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
 	{
 		if (mShiny)
 		{
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			gGL.getTexUnit(0)->activate();
 		}
 		else
 		{
-			glActiveTextureARB(GL_TEXTURE1_ARB);
+			gGL.getTexUnit(1)->activate();
 			glLoadIdentity();
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			gGL.getTexUnit(0)->activate();
 		}
 		glLoadIdentity();
 		glMatrixMode(GL_MODELVIEW);
@@ -1172,9 +1165,9 @@ void LLDrawPoolInvisible::render(S32 pass)
   
 	U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
 	glStencilMask(0);
-	glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+	gGL.setColorMask(false, false);
 	pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE);
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+	gGL.setColorMask(true, false);
 	glStencilMask(0xFFFFFFFF);
 
 	if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
index a2a82eada5ec63438e68f6da1927aa99748a9a78..b53488604791831131c97e47669b35666a1da26f 100644
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -41,7 +41,7 @@
 #include "pipeline.h"
 #include "llspatialpartition.h"
 #include "llglslshader.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 
 static LLGLSLShader* simple_shader = NULL;
@@ -52,7 +52,7 @@ void LLDrawPoolGlow::render(S32 pass)
 	LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW);
 	LLGLEnable blend(GL_BLEND);
 	LLGLDisable test(GL_ALPHA_TEST);
-	gGL.blendFunc(GL_ONE, GL_ONE);
+	gGL.setSceneBlendType(LLRender::BT_ADD);
 	
 	U32 shader_level = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT);
 
@@ -66,11 +66,11 @@ void LLDrawPoolGlow::render(S32 pass)
 	}
 
 	LLGLDepthTest depth(GL_TRUE, GL_FALSE);
-	glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
+	gGL.setColorMask(false, true);
 	renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask());
 	
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setColorMask(true, false);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	
 	if (shader_level > 0 && fullbright_shader)
 	{
@@ -120,7 +120,7 @@ void LLDrawPoolSimple::beginRenderPass(S32 pass)
 		// don't use shaders!
 		if (gGLManager.mHasShaderObjects)
 		{
-			glUseProgramObjectARB(0);
+			LLGLSLShader::bindNoShader();
 		}		
 	}
 }
@@ -140,7 +140,7 @@ void LLDrawPoolSimple::render(S32 pass)
 {
 	LLGLDisable blend(GL_BLEND);
 	LLGLState alpha_test(GL_ALPHA_TEST, gPipeline.canUseWindLightShadersOnObjects());
-	glAlphaFunc(GL_GREATER, 0.5f);
+	gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
 
 	{ //render simple
 		LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE);
@@ -152,7 +152,7 @@ void LLDrawPoolSimple::render(S32 pass)
 		LLFastTimer t(LLFastTimer::FTM_RENDER_GRASS);
 		LLGLEnable test(GL_ALPHA_TEST);
 		LLGLEnable blend(GL_BLEND);
-		gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+		gGL.setSceneBlendType(LLRender::BT_ALPHA);
 		//render grass
 		LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
 	}			
@@ -172,6 +172,6 @@ void LLDrawPoolSimple::render(S32 pass)
 		renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
 	}
 
-	glAlphaFunc(GL_GREATER, 0.01f);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 }
 
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 828c9b0848930dafa6d7356dafdad6997aec9be6..585af6c47fd2d160246f00831c6e0dc06dac2728 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -90,7 +90,7 @@ void LLDrawPoolSky::render(S32 pass)
 		{
 			// Ironically, we must support shader objects to be
 			// able to use this call.
-			glUseProgramObjectARB(0);
+			LLGLSLShader::bindNoShader();
 		}
 		mShader = NULL;
 	}
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index c60ddbc517b17367dc8317dce0d0f6cac642c7b5..854067a32d8ea6fdc6d8bc32982645bb0a504cee 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -52,7 +52,7 @@
 #include "llworld.h"
 #include "pipeline.h"
 #include "llglslshader.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 const F32 DETAIL_SCALE = 1.f/16.f;
 int DebugDetailMap = 0;
@@ -69,14 +69,16 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) :
 	sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
 	sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
 	mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga",
-												   TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
-												   LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
+													TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
+													LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
+
 	mAlphaRampImagep->bind(0);
 	mAlphaRampImagep->setClamp(TRUE, TRUE);
 
 	m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c",
 													TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
 													LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
+
 	m2DAlphaRampImagep->bind(0);
 	m2DAlphaRampImagep->setClamp(TRUE, TRUE);
 	
@@ -239,7 +241,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	//
 	S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0);
 	LLViewerImage::bindTexture(detail_texture0p,detail0);
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 
 	glEnable(GL_TEXTURE_GEN_S);
 	glEnable(GL_TEXTURE_GEN_T);
@@ -259,7 +261,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	LLViewerImage::bindTexture(detail_texture1p,detail1);
 	
 	/// ALPHA TEXTURE COORDS 0:
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glMatrixMode(GL_MODELVIEW);
@@ -271,7 +273,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	glEnable(GL_TEXTURE_2D);
 	
 	/// ALPHA TEXTURE COORDS 1:
-	glActiveTextureARB(GL_TEXTURE2_ARB);
+	gGL.getTexUnit(2)->activate();
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glTranslatef(-2.f, 0.f, 0.f);
@@ -284,7 +286,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	LLViewerImage::bindTexture(detail_texture3p,detail3);
 	
 	/// ALPHA TEXTURE COORDS 2:
-	glActiveTextureARB(GL_TEXTURE3_ARB);
+	gGL.getTexUnit(3)->activate();
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glTranslatef(-1.f, 0.f, 0.f);
@@ -307,7 +309,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3);
 
 	LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE4_ARB);	
+	gGL.getTexUnit(4)->activate();
 	glDisable(GL_TEXTURE_2D); // Texture unit 4
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
@@ -316,7 +318,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	glMatrixMode(GL_MODELVIEW);
 
 	LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE3_ARB);
+	gGL.getTexUnit(3)->activate();
 	glDisable(GL_TEXTURE_2D);	
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
@@ -325,7 +327,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	glMatrixMode(GL_MODELVIEW);
 
 	LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE2_ARB);
+	gGL.getTexUnit(2)->activate();
 	glDisable(GL_TEXTURE_2D);		
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
@@ -334,7 +336,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	glMatrixMode(GL_MODELVIEW);
 
 	LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glDisable(GL_TEXTURE_2D);		
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
@@ -346,7 +348,7 @@ void LLDrawPoolTerrain::renderFullShader()
 	// Restore Texture Unit 0 defaults
 	
 	LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	glEnable(GL_TEXTURE_2D);
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
@@ -377,7 +379,7 @@ void LLDrawPoolTerrain::renderFull4TU()
 	tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
 	tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
 
-	gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
+	gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
 	
 	//----------------------------------------------------------------------------
 	// Pass 1/1
@@ -385,7 +387,7 @@ void LLDrawPoolTerrain::renderFull4TU()
 	//
 	// Stage 0: detail texture 0
 	//
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	LLViewerImage::bindTexture(detail_texture0p,0);
 	glClientActiveTextureARB(GL_TEXTURE0_ARB);
 	
@@ -397,36 +399,27 @@ void LLDrawPoolTerrain::renderFull4TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
 
 	//
 	// Stage 1: Generate alpha ramp for detail0/detail1 transition
 	//
+
 	LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 1
 	glClientActiveTextureARB(GL_TEXTURE1_ARB);
 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 
 	// Care about alpha only
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
 
 	//
 	// Stage 2: Interpolate detail1 with existing based on ramp
 	//
 	LLViewerImage::bindTexture(detail_texture1p,2);
-	glActiveTextureARB(GL_TEXTURE2_ARB);
+	gGL.getTexUnit(2)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 2
 	glClientActiveTextureARB(GL_TEXTURE2_ARB);
 
@@ -438,34 +431,20 @@ void LLDrawPoolTerrain::renderFull4TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_INTERPOLATE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB,		GL_PREVIOUS_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB,		GL_SRC_ALPHA);
+	gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_TEX_COLOR);
 
 	//
 	// Stage 3: Modulate with primary (vertex) color for lighting
 	//
 	LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture
-	glActiveTextureARB(GL_TEXTURE3_ARB);
+	gGL.getTexUnit(3)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 3
 	glClientActiveTextureARB(GL_TEXTURE3_ARB);
 
 	// Set alpha texture and do lighting modulation
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
+	gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	glClientActiveTextureARB(GL_TEXTURE0_ARB);
 
 	// GL_BLEND disabled by default
@@ -476,7 +455,7 @@ void LLDrawPoolTerrain::renderFull4TU()
 
 	// Stage 0: Write detail3 into base
 	//
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	LLViewerImage::bindTexture(detail_texture3p,0);
 	glClientActiveTextureARB(GL_TEXTURE0_ARB);
 
@@ -488,18 +467,13 @@ void LLDrawPoolTerrain::renderFull4TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
 
 	//
 	// Stage 1: Generate alpha ramp for detail2/detail3 transition
 	//
 	LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 1
 	glClientActiveTextureARB(GL_TEXTURE1_ARB);
 
@@ -511,25 +485,20 @@ void LLDrawPoolTerrain::renderFull4TU()
 	glTranslatef(-2.f, 0.f, 0.f);
 
 	// Care about alpha only
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
 
 
 	//
 	// Stage 2: Interpolate detail2 with existing based on ramp
 	//
 	LLViewerImage::bindTexture(detail_texture2p,2);
-	glActiveTextureARB(GL_TEXTURE2_ARB);
+	gGL.getTexUnit(2)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 2
-	glClientActiveTextureARB(GL_TEXTURE2_ARB);
 
+	glClientActiveTextureARB(GL_TEXTURE2_ARB);
 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+
 	glEnable(GL_TEXTURE_GEN_S);
 	glEnable(GL_TEXTURE_GEN_T);
 	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -537,26 +506,16 @@ void LLDrawPoolTerrain::renderFull4TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_INTERPOLATE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB,		GL_PREVIOUS_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB,		GL_ONE_MINUS_SRC_ALPHA);
-	
+	gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);	
 
 	//
 	// Stage 3: Generate alpha ramp for detail1/detail2 transition
 	//
 	LLViewerImage::bindTexture(m2DAlphaRampImagep,3);
-	glActiveTextureARB(GL_TEXTURE3_ARB);
-	
+	gGL.getTexUnit(3)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 3
-	glClientActiveTextureARB(GL_TEXTURE3_ARB);
 
+	glClientActiveTextureARB(GL_TEXTURE3_ARB);
 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 
 	// Set the texture matrix
@@ -565,18 +524,10 @@ void LLDrawPoolTerrain::renderFull4TU()
 	glTranslatef(-1.f, 0.f, 0.f);
   
 	// Set alpha texture and do lighting modulation
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
-
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
+	gGL.getTexUnit(3)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+
+	gGL.getTexUnit(0)->activate();
 	glClientActiveTextureARB(GL_TEXTURE0_ARB);
 	{
 		LLGLEnable blend(GL_BLEND);
@@ -586,19 +537,21 @@ void LLDrawPoolTerrain::renderFull4TU()
 	LLVertexBuffer::unbind();
 	// Disable multitexture
 	LLImageGL::unbindTexture(3, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE3_ARB);
+	gGL.getTexUnit(3)->activate();
 	glClientActiveTextureARB(GL_TEXTURE3_ARB);
 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 	glDisable(GL_TEXTURE_2D); // Texture unit 3
+
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glMatrixMode(GL_MODELVIEW);
 
 	LLImageGL::unbindTexture(2, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE2_ARB);
+	gGL.getTexUnit(2)->activate();
 	glClientActiveTextureARB(GL_TEXTURE2_ARB);
 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 	glDisable(GL_TEXTURE_2D); // Texture unit 2
+
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
 	glMatrixMode(GL_TEXTURE);
@@ -606,33 +559,34 @@ void LLDrawPoolTerrain::renderFull4TU()
 	glMatrixMode(GL_MODELVIEW);
 
 	LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE1_ARB);
-	glClientActiveTextureARB(GL_TEXTURE1_ARB);
-	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+	gGL.getTexUnit(1)->activate();
+ 	glClientActiveTextureARB(GL_TEXTURE1_ARB);
+ 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 	glDisable(GL_TEXTURE_2D); // Texture unit 1
+
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glMatrixMode(GL_MODELVIEW);
 
 	// Restore blend state
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	
 	//----------------------------------------------------------------------------
 	// Restore Texture Unit 0 defaults
 	
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
 	glClientActiveTextureARB(GL_TEXTURE0_ARB);
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
+	glDisableClientState(GL_NORMAL_ARRAY);
+
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glMatrixMode(GL_MODELVIEW);
 
-	// Restore non Texture Unit specific defaults
-	glDisableClientState(GL_NORMAL_ARRAY);
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
 void LLDrawPoolTerrain::renderFull2TU()
@@ -654,7 +608,7 @@ void LLDrawPoolTerrain::renderFull2TU()
 	tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
 	tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
 
-	gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
+	gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
 	
 	//----------------------------------------------------------------------------
 	// Pass 1/4
@@ -671,13 +625,7 @@ void LLDrawPoolTerrain::renderFull2TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
 
 	drawLoop();
 
@@ -693,22 +641,17 @@ void LLDrawPoolTerrain::renderFull2TU()
 	glDisable(GL_TEXTURE_GEN_T);
 	
 	// Care about alpha only
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
 
 
 	//
 	// Stage 1: Write detail1
 	//
 	LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glEnable(GL_TEXTURE_2D);		// Texture unit 1
+
 	glEnable(GL_TEXTURE_GEN_S);
 	glEnable(GL_TEXTURE_GEN_T);
 	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -716,18 +659,10 @@ void LLDrawPoolTerrain::renderFull2TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+	gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	{
 		LLGLEnable blend(GL_BLEND);
 		drawLoop();
@@ -739,26 +674,21 @@ void LLDrawPoolTerrain::renderFull2TU()
 	// Stage 0: Generate alpha ramp for detail1/detail2 transition
 	//
 	LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
+
 	// Set the texture matrix
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glTranslatef(-1.f, 0.f, 0.f);
 
 	// Care about alpha only
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
 
 	//
 	// Stage 1: Write detail2
 	//
-	
 	LLViewerImage::bindTexture(detail_texture2p,1);
+	gGL.getTexUnit(1)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 1
 	
 	glEnable(GL_TEXTURE_GEN_S);
@@ -768,16 +698,8 @@ void LLDrawPoolTerrain::renderFull2TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+	gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
 
 	{
 		LLGLEnable blend(GL_BLEND);
@@ -790,27 +712,22 @@ void LLDrawPoolTerrain::renderFull2TU()
 	//
 	// Stage 0: Generate alpha ramp for detail2/detail3 transition
 	//
-	LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
+	gGL.getTexUnit(0)->activate();
+	LLViewerImage::bindTexture(m2DAlphaRampImagep,0);	
 	// Set the texture matrix
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glTranslatef(-2.f, 0.f, 0.f);
 
 	// Care about alpha only
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
 
 	// Stage 1: Write detail3
-
 	LLViewerImage::bindTexture(detail_texture3p,1);
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 1
+
 	glEnable(GL_TEXTURE_GEN_S);
 	glEnable(GL_TEXTURE_GEN_T);
 	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -818,30 +735,24 @@ void LLDrawPoolTerrain::renderFull2TU()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+	gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	{
 		LLGLEnable blend(GL_BLEND);
 		drawLoop();
 	}
 	
 	// Restore blend state
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	
 	// Disable multitexture
+	
 	LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glDisable(GL_TEXTURE_2D); // Texture unit 1
+
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
 	glMatrixMode(GL_TEXTURE);
@@ -851,18 +762,16 @@ void LLDrawPoolTerrain::renderFull2TU()
 	//----------------------------------------------------------------------------
 	// Restore Texture Unit 0 defaults
 	
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glMatrixMode(GL_MODELVIEW);
-
-	// Restore non Texture Unit specific defaults
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
 
@@ -877,7 +786,7 @@ void LLDrawPoolTerrain::renderSimple()
 	mTexturep->addTextureStats(1024.f*1024.f);
 	mTexturep->bind(0);
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	glEnable(GL_TEXTURE_2D); // Texture unit 2
 	
 	LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent();
@@ -892,13 +801,7 @@ void LLDrawPoolTerrain::renderSimple()
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
 	
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
 
 	drawLoop();
 
@@ -906,15 +809,13 @@ void LLDrawPoolTerrain::renderSimple()
 	// Restore Texture Unit 0 defaults
 	
 	LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	glDisable(GL_TEXTURE_GEN_S);
 	glDisable(GL_TEXTURE_GEN_T);
 	glMatrixMode(GL_TEXTURE);
 	glLoadIdentity();
 	glMatrixMode(GL_MODELVIEW);
-
-	// Restore non Texture Unit specific defaults
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
 //============================================================================
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index eabc0f1268db3337daa021fc077f011355b6c406..1ebd0772a82f7ed8aef2ea7e9b85290fecb4293f 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -41,7 +41,7 @@
 #include "pipeline.h"
 #include "llviewercamera.h"
 #include "llglslshader.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 S32 LLDrawPoolTree::sDiffTex = 0;
 static LLGLSLShader* shader = NULL;
@@ -67,7 +67,7 @@ void LLDrawPoolTree::prerender()
 void LLDrawPoolTree::beginRenderPass(S32 pass)
 {
 	LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
-	glAlphaFunc(GL_GREATER, 0.5f);
+	gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
 	
 	if (LLPipeline::sUnderWaterRender)
 	{
@@ -106,7 +106,7 @@ void LLDrawPoolTree::render(S32 pass)
 void LLDrawPoolTree::endRenderPass(S32 pass)
 {
 	LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
-	glAlphaFunc(GL_GREATER, 0.01f);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	
 	if (gPipeline.canUseWindLightShadersOnObjects())
 	{
@@ -125,28 +125,18 @@ void LLDrawPoolTree::renderForSelect()
 
 	LLGLSObjectSelectAlpha gls_alpha;
 
-	gGL.blendFunc(GL_ONE, GL_ZERO);
-	glAlphaFunc(GL_GREATER, 0.5f);
+	gGL.setSceneBlendType(LLRender::BT_REPLACE);
+	gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_MODULATE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
 
 	renderTree(TRUE);
 
-	glAlphaFunc(GL_GREATER, 0.01f);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
 void LLDrawPoolTree::renderTree(BOOL selecting)
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 9ffa552895f507a6d8111ada3cb7a4fb7dda3b14..e76423c8eb35e7f87531d43114919119344befaa 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -37,6 +37,7 @@
 #include "lldir.h"
 #include "llerror.h"
 #include "m3math.h"
+#include "llrender.h"
 
 #include "llagent.h"		// for gAgent for getRegion for getWaterHeight
 #include "llcubemap.h"
@@ -166,7 +167,7 @@ void LLDrawPoolWater::render(S32 pass)
 	// Set up second pass first
 	mWaterImagep->addTextureStats(1024.f*1024.f);
 	mWaterImagep->bind(1);
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	
 	glEnable(GL_TEXTURE_2D); // Texture unit 1
 
@@ -198,18 +199,10 @@ void LLDrawPoolWater::render(S32 pass)
 	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
 	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_MODULATE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_REPLACE);
+	gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_PREVIOUS_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
-
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	
 	glClearStencil(1);
 	glClear(GL_STENCIL_BUFFER_BIT);
@@ -230,14 +223,14 @@ void LLDrawPoolWater::render(S32 pass)
 	}
 
 	// Now, disable texture coord generation on texture state 1
-	glActiveTextureARB(GL_TEXTURE1_ARB);
+	gGL.getTexUnit(1)->activate();
 	glDisable(GL_TEXTURE_2D); // Texture unit 1
 	glDisable(GL_TEXTURE_GEN_S); //texture unit 1
 	glDisable(GL_TEXTURE_GEN_T); //texture unit 1
 	LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
 
 	// Disable texture coordinate and color arrays
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
 
 	stop_glerror();
@@ -258,7 +251,7 @@ void LLDrawPoolWater::render(S32 pass)
 		glMatrixMode(GL_MODELVIEW);
 		LLOverrideFaceColor overrid(this, 1.f, 1.f, 1.f,  0.5f*up_dot);
 
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 		for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
 			 iter != mDrawFace.end(); iter++)
@@ -276,7 +269,7 @@ void LLDrawPoolWater::render(S32 pass)
 			}
 		}
 
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 		if (gSky.mVOSkyp->getCubeMap())
 		{
@@ -298,7 +291,7 @@ void LLDrawPoolWater::render(S32 pass)
 		renderReflection(refl_face);
 	}
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
 void LLDrawPoolWater::renderReflection(LLFace* face)
@@ -331,7 +324,7 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
 
 void LLDrawPoolWater::shade()
 {
-	glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+	gGL.setColorMask(true, true);
 
 	LLVOSky *voskyp = gSky.mVOSkyp;
 
@@ -396,9 +389,9 @@ void LLDrawPoolWater::shade()
 		
 	if (reftex > -1)
 	{
-		glActiveTextureARB(GL_TEXTURE0_ARB+reftex);
+		gGL.getTexUnit(reftex)->activate();
 		gPipeline.mWaterRef.bindTexture();
-		glActiveTextureARB(GL_TEXTURE0_ARB);
+		gGL.getTexUnit(0)->activate();
 	}	
 
 	//bind normal map
@@ -414,14 +407,8 @@ void LLDrawPoolWater::shade()
 
 	mWaterNormp->addTextureStats(1024.f*1024.f);
 	mWaterNormp->bind(bumpTex);
-	if (!gSavedSettings.getBOOL("RenderWaterMipNormal"))
-	{
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	}
-	else
-	{
-		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
-	}
+	mWaterNormp->setMipFilterNearest (mWaterNormp->getMipFilterNearest(),
+									  !gSavedSettings.getBOOL("RenderWaterMipNormal"));
 	
 	S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX);	
 	stop_glerror();
@@ -548,9 +535,9 @@ void LLDrawPoolWater::shade()
 	shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH);
 	shader->unbind();
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	glEnable(GL_TEXTURE_2D);
-	glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+	gGL.setColorMask(true, false);
 
 }
 
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index e2d0c6088ada3b922c546d1ce3051a59f6a40f91..09a87f2402db07ac7db7616c7d769c9b446b75d6 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -44,7 +44,7 @@
 #include "llagent.h"
 #include "llviewerregion.h"
 #include "llface.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 LLPointer<LLImageGL> LLDrawPoolWLSky::sCloudNoiseTexture = NULL;
 
@@ -153,7 +153,7 @@ void LLDrawPoolWLSky::renderStars(void) const
 {
 	LLGLSPipelineSkyBox gls_sky;
 	LLGLEnable blend(GL_BLEND);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	
 	// *NOTE: have to have bound the cloud noise texture already since register
 	// combiners blending below requires something to be bound
@@ -176,16 +176,8 @@ void LLDrawPoolWLSky::renderStars(void) const
 
 	// gl_FragColor.rgb = gl_Color.rgb;
 	// gl_FragColor.a = gl_Color.a * star_alpha.a;
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_CONSTANT);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
-	glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 2.0f);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_PREV_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
 	glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
 
 	gSky.mVOWLSkyp->drawStars();
@@ -193,8 +185,7 @@ void LLDrawPoolWLSky::renderStars(void) const
 	glPointSize(1.f);
 
 	// and disable the combiner states
-	glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 1.0f);
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
 void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
@@ -208,7 +199,7 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
 
 		LLGLEnable blend(GL_BLEND);
 		LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-		glAlphaFunc(GL_GREATER, 0.01f);
+		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 
 		sCloudNoiseTexture->bind();
 		shader->bind();
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 7b88349ef4139a1f61e13e2ef4e32ff4c570275e..039ed2862f10d11ad5075ac33b38985facec8b5b 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -40,9 +40,7 @@
 #include "llviewerimage.h"
 #include "llvertexbuffer.h"
 #include "llviewerdisplay.h"
-#include "llglimmediate.h"
-
-void render_ui_and_swap_if_needed();
+#include "llrender.h"
 
 // static
 LLDynamicTexture::instance_list_t LLDynamicTexture::sInstances[ LLDynamicTexture::ORDER_COUNT ];
@@ -219,9 +217,8 @@ BOOL LLDynamicTexture::updateAllInstances()
 			LLDynamicTexture *dynamicTexture = *iter;
 			if (dynamicTexture->needsRender())
 			{
-				render_ui_and_swap_if_needed();
 				glClear(GL_DEPTH_BUFFER_BIT);
-				gDisplaySwapBuffers = FALSE;
+				gDepthDirty = TRUE;
 				
 				
 				gGL.color4f(1,1,1,1);
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 723477a833ccc83c22e5f0a360f7c7e4320cf4f6..8474762d9b00e3829fed568fca7049e39a302727 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -42,7 +42,7 @@
 
 #include "lldrawpoolbump.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "lllightconstants.h"
 #include "llsky.h"
 #include "llviewercamera.h"
@@ -57,6 +57,7 @@
 extern BOOL gPickFaces;
 
 BOOL LLFace::sSafeRenderSelect = TRUE; // FALSE
+S32  LLFace::sDeleteLock = 0 ;
 
 #define DOTVEC(a,b) (a.mV[0]*b.mV[0] + a.mV[1]*b.mV[1] + a.mV[2]*b.mV[2])
 
@@ -177,6 +178,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
 
 void LLFace::destroy()
 {
+	llassert_always(sDeleteLock >= 1);
+	--sDeleteLock;
+	
 	mDrawablep = NULL;
 	mVObjp = NULL;
 
@@ -468,6 +472,7 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
 			if (pass == 0)
 			{
 				LLViewerImage::bindTexture(red_blue_imagep);
+				red_blue_imagep->setMipFilterNearest (TRUE, TRUE);
 			}
 			else // pass == 1
 			{
@@ -476,9 +481,8 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
 				glMatrixMode(GL_TEXTURE);
 				glPushMatrix();
 				glScalef(256.f, 256.f, 1.f);
+				green_imagep->setMipFilterNearest (TRUE, TRUE);
 			}
-			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 
 
 			if (!isState(GLOBAL))
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 070283ecd2692037e9158befb77b8d95a98d288e..34c81c3fdd77f99e1ec3c5049936204f93ef03ba 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -34,6 +34,7 @@
 
 #include "llstrider.h"
 
+#include "llrender.h"
 #include "v2math.h"
 #include "v3math.h"
 #include "v4math.h"
@@ -295,6 +296,9 @@ class LLFace
 				lhs->getTexture() < rhs->getTexture();
 		}
 	};
+
+public://paranoia check only
+	static S32 sDeleteLock ;
 };
 
 #endif // LL_LLFACE_H
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 8133c20bf70c1ba22a2e262209e6da33d7dd3bde..ad89d8220f2d00a9e05f511e55de995e8e3c0c65 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -37,7 +37,7 @@
 #include "llrect.h"
 #include "llerror.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llmath.h"
 #include "llfontgl.h"
 
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index c07319e2249e57c86e18accdf7161aac20971abf..3cd1158ec094c1e076b78ed739784f5cc4610cda 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -37,6 +37,7 @@
 #include "indra_constants.h"
 
 // viewer includes
+#include "llagent.h"	// for gAgent.inPrelude()
 #include "llnotify.h"
 #include "llviewercontrol.h"
 #include "llui.h"
@@ -107,12 +108,14 @@ void LLFirstUse::useBalanceDecrease(S32 delta)
 // static
 void LLFirstUse::useSit()
 {
-	if (gSavedSettings.getWarning("FirstSit"))
-	{
-		gSavedSettings.setWarning("FirstSit", FALSE);
-
-		LLNotifyBox::showXml("FirstSit");
-	}
+	// Our orientation island uses sitting to teach vehicle driving
+	// so just never show this message. JC
+	//if (gSavedSettings.getWarning("FirstSit"))
+	//{
+	//	gSavedSettings.setWarning("FirstSit", FALSE);
+
+	//	LLNotifyBox::showXml("FirstSit");
+	//}
 }
 
 // static
@@ -168,11 +171,16 @@ void LLFirstUse::useTeleport()
 // static
 void LLFirstUse::useOverrideKeys()
 {
-	if (gSavedSettings.getWarning("FirstOverrideKeys"))
+	// Our orientation island uses key overrides to teach vehicle driving
+	// so don't show this message until you get off OI. JC
+	if (!gAgent.inPrelude())
 	{
-		gSavedSettings.setWarning("FirstOverrideKeys", FALSE);
+		if (gSavedSettings.getWarning("FirstOverrideKeys"))
+		{
+			gSavedSettings.setWarning("FirstOverrideKeys", FALSE);
 
-		LLNotifyBox::showXml("FirstOverrideKeys");
+			LLNotifyBox::showXml("FirstOverrideKeys");
+		}
 	}
 }
 
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index 248e680c1b70f2e06dd8fac5ead4e0e2ffc5a0bb..b59648f433d97568f5f00f8660c2dc11bc8abd08 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -305,7 +305,7 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
 		new_res = mRenderRes;
 	}
 
-	if (!mInitialized)
+	if (!mInitialized || (mSimulateRes != new_res))
 	{
 		mSimulateRes = new_res;
 		setAttributesOfAllSections();
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index d9411b58d892483394ca610fa27e64fa18954d28..1e0ebb72488302a70ff9b6a3bd06a93b7a2e7e61 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -46,7 +46,7 @@
 #include "llcombobox.h"
 #include "lldrawable.h"
 #include "lldrawpoolavatar.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llface.h"
 #include "llkeyframemotion.h"
 #include "lllineeditor.h"
@@ -1037,7 +1037,7 @@ LLPreviewAnimation::LLPreviewAnimation(S32 width, S32 height) : LLDynamicTexture
 	mDummyAvatar = (LLVOAvatar*)gObjectList.createObjectViewer(LL_PCODE_LEGACY_AVATAR, gAgent.getRegion());
 	mDummyAvatar->createDrawable(&gPipeline);
 	mDummyAvatar->mIsDummy = TRUE;
-	mDummyAvatar->mSpecialRenderMode = 1;
+	mDummyAvatar->mSpecialRenderMode = 2;
 	mDummyAvatar->setPositionAgent(LLVector3::zero);
 	mDummyAvatar->slamPosition();
 	mDummyAvatar->updateJointLODs();
@@ -1135,6 +1135,7 @@ BOOL	LLPreviewAnimation::render()
 	if (avatarp->mDrawable.notNull())
 	{
 		LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool();
+		avatarp->dirtyMesh();
 		avatarPoolp->renderAvatars(avatarp);  // renders only one avatar
 	}
 
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index 33925fa305592564429e881e96d8afe3c6864a69..41bc0db6a60f82415c8450969a20e69e0f2128c1 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -53,7 +53,7 @@
 #include "llviewerdisplay.h"
 #include "llviewercontrol.h"
 #include "llui.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 ///----------------------------------------------------------------------------
 /// Local function declarations, constants, enums, and typedefs
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
index 9741fbb7c7a9cfeea30380f3ccc1cd4de68453f3..1ab42efef34debe948edb9cb5f227ab7572214b1 100644
--- a/indra/newview/llfloaterbuycurrency.cpp
+++ b/indra/newview/llfloaterbuycurrency.cpp
@@ -375,7 +375,7 @@ void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price)
 	{
 		LLStringBase<char>::format_map_t args;
 		args["[NAME]"] = name.c_str();
-		args["[PRICE]"] = price;
+		args["[PRICE]"] = llformat("%d", price);
 		gViewerWindow->alertXml("NotEnoughCurrency", args);
 		return;
 	}
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 4d8f85159faaecf33f63a22c53d5fbaa7700d03c..936aad6606328c68c032b541b656da98128bb21b 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -62,7 +62,7 @@
 #include "llwindow.h"
 #include "llworld.h"
 #include "llxmlrpctransaction.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
 #include "roles_constants.h"
 
 // NOTE: This is duplicated in lldatamoney.cpp ...
@@ -841,7 +841,7 @@ void LLFloaterBuyLandUI::startTransaction(TransactionType type,
 	static std::string transaction_uri;
 	if (transaction_uri.empty())
 	{
-		transaction_uri = LLAppViewer::instance()->getHelperURI() + "landtool.php";
+		transaction_uri = LLViewerLogin::getInstance()->getHelperURI() + "landtool.php";
 	}
 	
 	const char* method;
@@ -1363,3 +1363,4 @@ void LLFloaterBuyLandUI::onClickErrorWeb(void* data)
 }
 
 
+
diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp
index 3aaa14ab737b45883246e2dd2fb070e53c7d7a8f..fd428990f89305b8a1054dcd5ff660b8f8330966 100644
--- a/indra/newview/llfloaterchat.cpp
+++ b/indra/newview/llfloaterchat.cpp
@@ -207,7 +207,8 @@ void add_timestamped_line(LLViewerTextEditor* edit, const LLChat &chat, const LL
 	{
 		line = line.substr(chat.mFromName.length());
 		const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID);
-		edit->appendStyledText(chat.mFromName, false, false, &sourceStyle);
+		edit->appendStyledText(chat.mFromName, false, prepend_newline, &sourceStyle);
+		prepend_newline = false;
 	}
 	edit->appendColoredText(line, false, prepend_newline, color);
 }
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 5f6bf1cd28e1ea8953d62bf151a165d5f76f5bbe..ec659b5146099730565b670e5420fccd5fa471d3 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -39,7 +39,7 @@
 #include "llfontgl.h"
 #include "llsys.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "v3dmath.h"
 #include "lldir.h"
 #include "llui.h"
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index 790af6126429d004317f5a94058397af12cb8052..830b38faf8e945aed578573c810fcd40cce34391 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -43,7 +43,7 @@
 #include "llcombobox.h"
 #include "lldrawable.h"
 #include "lldrawpoolavatar.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llface.h"
 #include "lltextbox.h"
 #include "lltoolmgr.h"
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 9ff5739255496bad47f106e3de2c742c745cd7a2..925ba0156d70dcce8512a7a34a0816a88c7ebdfb 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -1147,7 +1147,7 @@ BOOL LLPanelRegionTextureInfo::validateTextureSizes()
 		{
 
 			LLString::format_map_t args;
-			args["[TEXTURE_NUM]"] = i+1;
+			args["[TEXTURE_NUM]"] = llformat("%d",i+1);
 			args["[TEXTURE_SIZE_X]"] = llformat("%d",width);
 			args["[TEXTURE_SIZE_Y]"] = llformat("%d",height);
 			gViewerWindow->alertXml("InvalidTerrainSize", args);
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 25b8abefc79eca1c4a4fc433ab04d275475d0de3..369ac4f3ee73b0174b4f52bc1f00729d713fc496 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -81,7 +81,7 @@
 #include "llselectmgr.h"
 #include "llviewerbuild.h"
 #include "lluictrlfactory.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
 
 #include "llassetuploadresponders.h"
 
@@ -656,7 +656,7 @@ LLSD LLFloaterReporter::gatherReport()
 	mCopyrightWarningSeen = FALSE;
 
 	std::ostringstream summary;
-    if (!LLAppViewer::instance()->isInProductionGrid())
+	if (!LLViewerLogin::getInstance()->isInProductionGrid())
 	{
 		summary << "Preview ";
 	}
@@ -898,7 +898,7 @@ void LLFloaterReporter::takeScreenshot()
 						mResourceDatap->mAssetInfo.mType);
 
 	// store in the image list so it doesn't try to fetch from the server
-	LLViewerImage* image_in_list = new LLViewerImage(mResourceDatap->mAssetInfo.mUuid, TRUE);
+	LLPointer<LLViewerImage> image_in_list = new LLViewerImage(mResourceDatap->mAssetInfo.mUuid, TRUE);
 	image_in_list->createGLTexture(0, raw);
 	gImageList.addImage(image_in_list); 
 
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index b2301808a1e2bb0f9f7542a8644a39c590b46f07..7dd4f293c45cc60e27557d49f23f37ace2a8b993 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -36,7 +36,7 @@
 #include "llfontgl.h"
 #include "llsys.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "v3dmath.h"
 #include "llmath.h"
 #include "lldir.h"
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp
index 6b51687c68197b7137e27464a9ead2488e179678..af3321c814cf11460384258c44dc5ae91f52fc9c 100644
--- a/indra/newview/llfloatertos.cpp
+++ b/indra/newview/llfloatertos.cpp
@@ -215,7 +215,7 @@ LLFloaterTOS::~LLFloaterTOS()
 	LLWebBrowserCtrl* web_browser = getChild<LLWebBrowserCtrl>("tos_html");
 	if ( web_browser )
 	{
-		web_browser->addObserver( this );		
+		web_browser->remObserver( this );		
 	};
 
 	// tell the responder we're not here anymore
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 848d01d5ac75e23ad54ca5a3b9420e8b6c7e5c34..401cc9fc6c854a0af3d79a6446204499ab786170 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -871,6 +871,8 @@ void LLFloaterWorldMap::buildLandmarkIDLists()
 	{
 		list->selectItemRange(1, -1);
 		list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
+
+		llassert_always(list->getItemCount() == 1) ;
 	}
 
 	mLandmarkItemIDList.reset();
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index c26a8dfc556afbacef5ef47cf93b1d4fba57f28c..a514d9b997294f54cdd02086b07b5d5d8c9a0cb9 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -40,7 +40,7 @@
 #include "llfocusmgr.h"
 #include "llfontgl.h"
 #include "llgl.h" 
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llinventory.h"
 
 #include "llcallbacklist.h"
@@ -349,10 +349,10 @@ void LLFolderViewItem::arrangeFromRoot()
 // UI. If open is TRUE, then folders are opened up along the way to
 // the selection.
 void LLFolderViewItem::setSelectionFromRoot(LLFolderViewItem* selection,
-											BOOL open,					/* Flawfinder: ignore */
+											BOOL openitem,
 											BOOL take_keyboard_focus)
 {
-	getRoot()->setSelection(selection, open, take_keyboard_focus);		/* Flawfinder: ignore */
+	getRoot()->setSelection(selection, openitem, take_keyboard_focus);
 }
 
 // helper function to change the selection from the root.
@@ -368,7 +368,7 @@ void LLFolderViewItem::extendSelectionFromRoot(LLFolderViewItem* selection)
 	getRoot()->extendSelection(selection, NULL, selected_items);
 }
 
-EInventorySortGroup LLFolderViewItem::getSortGroup() 
+EInventorySortGroup LLFolderViewItem::getSortGroup()  const
 { 
 	return SG_ITEM; 
 }
@@ -442,7 +442,7 @@ void LLFolderViewItem::dirtyFilter()
 // means 'deselect' for a leaf item. Do this optimization after
 // multiple selection is implemented to make sure it all plays nice
 // together.
-BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL open, BOOL take_keyboard_focus)
+BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus)
 {
 	if( selection == this )
 	{
@@ -548,7 +548,7 @@ void LLFolderViewItem::buildContextMenu(LLMenuGL& menu, U32 flags)
 	}
 }
 
-void LLFolderViewItem::open( void )		/* Flawfinder: ignore */
+void LLFolderViewItem::openItem( void )
 {
 	if( mListener )
 	{
@@ -989,9 +989,6 @@ LLFolderViewFolder::LLFolderViewFolder( const LLString& name, LLUIImagePtr icon,
 	mMostFilteredDescendantGeneration(-1)
 {
 	mType = "(folder)";
-
-	//mItems.setInsertBefore( &sort_item_name );
-	//mFolders.setInsertBefore( &folder_insert_before );
 }
 
 // Destroys the object
@@ -1000,10 +997,6 @@ LLFolderViewFolder::~LLFolderViewFolder( void )
 	// The LLView base class takes care of object destruction. make sure that we
 	// don't have mouse or keyboard focus
 	gFocusMgr.releaseFocusIfNeeded( this ); // calls onCommit()
-
-	//mItems.reset();
-	//mItems.removeAllNodes();
-	//mFolders.removeAllNodes();
 }
 
 // addToFolder() returns TRUE if it succeeds. FALSE otherwise
@@ -1048,9 +1041,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
 			// Add sizes of children
 			S32 parent_item_height = getRect().getHeight();
 
-			folders_t::iterator fit = mFolders.begin();
-			folders_t::iterator fend = mFolders.end();
-			for(; fit < fend; ++fit)
+			for(folders_t::iterator fit = mFolders.begin(); fit != mFolders.end(); ++fit)
 			{
 				LLFolderViewFolder* folderp = (*fit);
 				if (getRoot()->getDebugFilters())
@@ -1076,9 +1067,8 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
 					folderp->setOrigin( 0, child_top - folderp->getRect().getHeight() );
 				}
 			}
-			items_t::iterator iit = mItems.begin();
-			items_t::iterator iend = mItems.end();
-			for(;iit < iend; ++iit)
+			for(items_t::iterator iit = mItems.begin();
+				iit != mItems.end(); ++iit)
 			{
 				LLFolderViewItem* itemp = (*iit);
 				if (getRoot()->getDebugFilters())
@@ -1354,7 +1344,7 @@ BOOL LLFolderViewFolder::hasFilteredDescendants()
 
 // Passes selection information on to children and record selection
 // information if necessary.
-BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL open,		/* Flawfinder: ignore */
+BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem,
 									  BOOL take_keyboard_focus)
 {
 	BOOL rv = FALSE;
@@ -1378,7 +1368,7 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL open,		/
 		 iter != mFolders.end();)
 	{
 		folders_t::iterator fit = iter++;
-		if((*fit)->setSelection(selection, open, take_keyboard_focus))		/* Flawfinder: ignore */
+		if((*fit)->setSelection(selection, openitem, take_keyboard_focus))
 		{
 			rv = TRUE;
 			child_selected = TRUE;
@@ -1389,14 +1379,14 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL open,		/
 		 iter != mItems.end();)
 	{
 		items_t::iterator iit = iter++;
-		if((*iit)->setSelection(selection, open, take_keyboard_focus))		/* Flawfinder: ignore */
+		if((*iit)->setSelection(selection, openitem, take_keyboard_focus))
 		{
 			rv = TRUE;
 			child_selected = TRUE;
 			mNumDescendantsSelected++;
 		}
 	}
-	if(open && child_selected)		/* Flawfinder: ignore */
+	if(openitem && child_selected)
 	{
 		setOpenArrangeRecursively(TRUE);
 	}
@@ -1636,11 +1626,9 @@ void LLFolderViewFolder::destroyView()
 	while (!mFolders.empty())
 	{
 		LLFolderViewFolder *folderp = mFolders.back();
-		folderp->destroyView();
+		folderp->destroyView(); // removes entry from mFolders
 	}
 
-	mFolders.clear();
-
 	deleteAllChildren();
 	
 	if (mParentFolder)
@@ -1711,11 +1699,11 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )
 // This is only called for renaming an object because it won't work for date
 void LLFolderViewFolder::resort(LLFolderViewItem* item)
 {
-	std::sort(mItems.begin(), mItems.end(), mSortFunction);
-	std::sort(mFolders.begin(), mFolders.end(), mSortFunction);
+	mItems.sort(mSortFunction);
+	mFolders.sort(mSortFunction);
 }
 
-bool LLFolderViewFolder::isTrash()
+bool LLFolderViewFolder::isTrash() const
 {
 	if (mAmTrash == LLFolderViewFolder::UNKNOWN)
 	{
@@ -1740,8 +1728,8 @@ void LLFolderViewFolder::sortBy(U32 order)
 		(*fit)->sortBy(order);
 	}
 
-	std::sort(mFolders.begin(), mFolders.end(), mSortFunction);
-	std::sort(mItems.begin(), mItems.end(), mSortFunction);
+	mFolders.sort(mSortFunction);
+	mItems.sort(mSortFunction);
 
 	if (order & LLInventoryFilter::SO_DATE)
 	{
@@ -1776,12 +1764,12 @@ void LLFolderViewFolder::setItemSortOrder(U32 ordering)
 			(*fit)->setItemSortOrder(ordering);
 		}
 
-		std::sort(mFolders.begin(), mFolders.end(), mSortFunction);
-		std::sort(mItems.begin(), mItems.end(), mSortFunction);
+		mFolders.sort(mSortFunction);
+		mItems.sort(mSortFunction);
 	}
 }
 
-EInventorySortGroup LLFolderViewFolder::getSortGroup()
+EInventorySortGroup LLFolderViewFolder::getSortGroup() const
 {
 	if (isTrash())
 	{
@@ -1928,16 +1916,16 @@ void LLFolderViewFolder::toggleOpen()
 }
 
 // Force a folder open or closed
-void LLFolderViewFolder::setOpen(BOOL open)		/* Flawfinder: ignore */
+void LLFolderViewFolder::setOpen(BOOL openitem)
 {
-	setOpenArrangeRecursively(open);		/* Flawfinder: ignore */
+	setOpenArrangeRecursively(openitem);
 }
 
-void LLFolderViewFolder::setOpenArrangeRecursively(BOOL open, ERecurseType recurse)		/* Flawfinder: ignore */
+void LLFolderViewFolder::setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse)
 {
 	BOOL was_open = mIsOpen;
-	mIsOpen = open;		/* Flawfinder: ignore */
-	if(!was_open && open)		/* Flawfinder: ignore */
+	mIsOpen = openitem;
+	if(!was_open && openitem)
 	{
 		if(mListener)
 		{
@@ -1951,12 +1939,12 @@ void LLFolderViewFolder::setOpenArrangeRecursively(BOOL open, ERecurseType recur
 			 iter != mFolders.end();)
 		{
 			folders_t::iterator fit = iter++;
-			(*fit)->setOpenArrangeRecursively(open, RECURSE_DOWN);		/* Flawfinder: ignore */
+			(*fit)->setOpenArrangeRecursively(openitem, RECURSE_DOWN);		/* Flawfinder: ignore */
 		}
 	}
 	if (mParentFolder && (recurse == RECURSE_UP || recurse == RECURSE_UP_DOWN))
 	{
-		mParentFolder->setOpenArrangeRecursively(open, RECURSE_UP);		/* Flawfinder: ignore */
+		mParentFolder->setOpenArrangeRecursively(openitem, RECURSE_UP);
 	}
 	
 	if (was_open != mIsOpen)
@@ -1989,7 +1977,7 @@ BOOL LLFolderViewFolder::handleDragAndDropFromChild(MASK mask,
 	return TRUE;
 }
 
-void LLFolderViewFolder::open( void )		/* Flawfinder: ignore */
+void LLFolderViewFolder::openItem( void )
 {
 	toggleOpen();
 }
@@ -2687,10 +2675,10 @@ void LLFolderView::openFolder(const LLString& foldername)
 	}
 }
 
-void LLFolderView::setOpenArrangeRecursively(BOOL open, ERecurseType recurse)		/* Flawfinder: ignore */
+void LLFolderView::setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse)
 {
 	// call base class to do proper recursion
-	LLFolderViewFolder::setOpenArrangeRecursively(open, recurse);		/* Flawfinder: ignore */
+	LLFolderViewFolder::setOpenArrangeRecursively(openitem, recurse);
 	// make sure root folder is always open
 	mIsOpen = TRUE;
 }
@@ -2866,7 +2854,7 @@ LLFolderViewItem* LLFolderView::getCurSelectedItem( void )
 
 
 // Record the selected item and pass it down the hierachy.
-BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL open,		/* Flawfinder: ignore */
+BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL openitem,
 								BOOL take_keyboard_focus)
 {
 	if( selection == this )
@@ -2888,8 +2876,8 @@ BOOL LLFolderView::setSelection(LLFolderViewItem* selection, BOOL open,		/* Flaw
 		addToSelectionList(selection);
 	}
 
-	BOOL rv = LLFolderViewFolder::setSelection(selection, open, take_keyboard_focus);
-	if(open && selection)
+	BOOL rv = LLFolderViewFolder::setSelection(selection, openitem, take_keyboard_focus);
+	if(openitem && selection)
 	{
 		selection->getParentFolder()->requestArrange();
 	}
@@ -3349,7 +3337,7 @@ void LLFolderView::openSelectedItems( void )
 	{
 		if (mSelectedItems.size() == 1)
 		{
-			mSelectedItems.front()->open();		/* Flawfinder: ignore */
+			mSelectedItems.front()->openItem();
 		}
 		else
 		{
@@ -3371,7 +3359,7 @@ void LLFolderView::openSelectedItems( void )
 					LLFloater::setFloaterHost(multi_propertiesp);
 				else
 					LLFloater::setFloaterHost(multi_previewp);
-				(*item_it)->open();
+				(*item_it)->openItem();
 			}
 
 			LLFloater::setFloaterHost(NULL);
@@ -4358,7 +4346,7 @@ bool LLInventorySort::updateSort(U32 order)
 	return false;
 }
 
-bool LLInventorySort::operator()(LLFolderViewItem* a, LLFolderViewItem* b)
+bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolderViewItem* const& b)
 {
 	// We sort by name if we aren't sorting by date
 	// OR if these are folders and we are sorting folders by name.
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 8a04cc9b9c08831c629ba7f2650cb2953ee2b1fb..c6b1e5215714a9e0c9b27e09242ea1d3b3a2d853 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -295,7 +295,7 @@ class LLInventorySort
 	bool updateSort(U32 order);
 	U32 getSort() { return mSortOrder; }
 
-	bool operator()(LLFolderViewItem* a, LLFolderViewItem* b);
+	bool operator()(const LLFolderViewItem* const& a, const LLFolderViewItem* const& b);
 private:
 	U32  mSortOrder;
 	bool mByDate;
@@ -361,7 +361,7 @@ class LLFolderViewItem : public LLUICtrl
 	// the specified selected item appropriately for display and use
 	// in the UI. If open is TRUE, then folders are opened up along
 	// the way to the selection.
-	void setSelectionFromRoot(LLFolderViewItem* selection, BOOL open,		/* Flawfinder: ignore */
+	void setSelectionFromRoot(LLFolderViewItem* selection, BOOL openitem,
 		BOOL take_keyboard_focus = TRUE);
 
 	// helper function to change the selection from the root.
@@ -390,7 +390,7 @@ class LLFolderViewItem : public LLUICtrl
 	enum { ARRANGE = TRUE, DO_NOT_ARRANGE = FALSE };
 	virtual BOOL addToFolder(LLFolderViewFolder* folder, LLFolderView* root);
 
-	virtual EInventorySortGroup getSortGroup();
+	virtual EInventorySortGroup getSortGroup() const;
 
 	// Finds width and height of this object and it's children.  Also
 	// makes sure that this view and it's children are the right size.
@@ -409,7 +409,7 @@ class LLFolderViewItem : public LLUICtrl
 	// ignore. Returns TRUE if this object was affected. If open is
 	// TRUE, then folders are opened up along the way to the
 	// selection.
-	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL open,		/* Flawfinder: ignore */
+	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
 		BOOL take_keyboard_focus);
 
 	// This method is used to toggle the selection of an item. If
@@ -479,7 +479,7 @@ class LLFolderViewItem : public LLUICtrl
 	void rename(const LLString& new_name);
 
 	// open
-	virtual void open( void );		/* Flawfinder: ignore */
+	virtual void openItem( void );
 	virtual void preview(void);
 
 	// Show children (unfortunate that this is called "open")
@@ -544,8 +544,8 @@ class LLFolderViewFolder : public LLFolderViewItem
 	} ETrash;
 
 protected:
-	typedef std::vector<LLFolderViewItem*> items_t;
-	typedef std::vector<LLFolderViewFolder*> folders_t;
+	typedef std::list<LLFolderViewItem*> items_t;
+	typedef std::list<LLFolderViewFolder*> folders_t;
 	items_t mItems;
 	folders_t mFolders;
 	LLInventorySort	mSortFunction;
@@ -556,7 +556,7 @@ class LLFolderViewFolder : public LLFolderViewItem
 	F32			mTargetHeight;
 	F32			mAutoOpenCountdown;
 	time_t		mSubtreeCreationDate;
-	ETrash		mAmTrash;
+	mutable ETrash mAmTrash;
 	S32			mLastArrangeGeneration;
 	S32			mLastCalculatedWidth;
 	S32			mCompletedFilterGeneration;
@@ -590,7 +590,7 @@ class LLFolderViewFolder : public LLFolderViewItem
 	BOOL needsArrange();
 
 	// Returns the sort group (system, trash, folder) for this folder.
-	virtual EInventorySortGroup getSortGroup();
+	virtual EInventorySortGroup getSortGroup() const;
 
 	virtual void	setCompletedFilterGeneration(S32 generation, BOOL recurse_up);
 	virtual S32		getCompletedFilterGeneration() { return mCompletedFilterGeneration; }
@@ -606,8 +606,8 @@ class LLFolderViewFolder : public LLFolderViewItem
 	// Passes selection information on to children and record
 	// selection information if necessary. Returns TRUE if this object
 	// (or a child) was affected.
-	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL open,		/* Flawfinder: ignore */
-		BOOL take_keyboard_focus);
+	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
+							  BOOL take_keyboard_focus);
 
 	// This method is used to change the selection of an item. If
 	// selection is 'this', then note selection as true. Returns TRUE
@@ -660,7 +660,7 @@ class LLFolderViewFolder : public LLFolderViewItem
 	virtual void toggleOpen();
 
 	// Force a folder open or closed
-	virtual void setOpen(BOOL open = TRUE);		/* Flawfinder: ignore */
+	virtual void setOpen(BOOL openitem = TRUE);
 
 	// Called when a child is refreshed.
 	// don't rearrange child folder contents unless explicitly requested
@@ -670,7 +670,7 @@ class LLFolderViewFolder : public LLFolderViewItem
 	// method was written because the list iterators destroy the state
 	// of other iterations, thus, we can't arrange while iterating
 	// through the children (such as when setting which is selected.
-	virtual void setOpenArrangeRecursively(BOOL open, ERecurseType recurse = RECURSE_NO);		/* Flawfinder: ignore */
+	virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse = RECURSE_NO);
 
 	// Get the current state of the folder.
 	virtual BOOL isOpen() { return mIsOpen; }
@@ -686,7 +686,7 @@ class LLFolderViewFolder : public LLFolderViewItem
 	void applyFunctorRecursively(LLFolderViewFunctor& functor);
 	virtual void applyListenerFunctorRecursively(LLFolderViewListenerFunctor& functor);
 
-	virtual void open( void );		/* Flawfinder: ignore */
+	virtual void openItem( void );
 	virtual BOOL addItem(LLFolderViewItem* item); 
 	virtual BOOL addFolder( LLFolderViewFolder* folder);
 
@@ -703,7 +703,7 @@ class LLFolderViewFolder : public LLFolderViewItem
 	virtual void draw();
 
 	time_t getCreationDate() const;
-	bool isTrash();
+	bool isTrash() const;
 };
 
 
@@ -752,7 +752,7 @@ class LLFolderView : public LLFolderViewFolder, LLEditMenuHandler
 	void openFolder(const LLString& foldername);
 
 	virtual void toggleOpen() {};
-	virtual void setOpenArrangeRecursively(BOOL open, ERecurseType recurse);		/* Flawfinder: ignore */
+	virtual void setOpenArrangeRecursively(BOOL openitem, ERecurseType recurse);
 	virtual BOOL addFolder( LLFolderViewFolder* folder);
 
 	// Finds width and height of this object and it's children.  Also
@@ -769,7 +769,7 @@ class LLFolderView : public LLFolderViewFolder, LLEditMenuHandler
 	virtual LLFolderViewItem* getCurSelectedItem( void );
 
 	// Record the selected item and pass it down the hierachy.
-	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL open,		/* Flawfinder: ignore */
+	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
 		BOOL take_keyboard_focus);
 
 	// This method is used to toggle the selection of an item. Walks
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 21b98d6038bd34f8524d1b635e425378cd107766..f4ef00d31039ae34b2586f15b5645b5f0248c154 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -39,7 +39,7 @@
 #include "llviewercontrol.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llglheaders.h"
 #include "llparcel.h"
 #include "llui.h"
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index f48a404a61e27422f44679b0c5e810c73987f8de..432096e78101cb84b756da7c540be7c06cfd28e7 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -33,7 +33,7 @@
 
 #include "llhudeffectlookat.h"
 
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "message.h"
 #include "llagent.h"
diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp
index 72fe1b2e08bec3cca2dc9d6ed5e78ea958ecafec..93344db622b07df5899efffd08a481a61baa59b8 100644
--- a/indra/newview/llhudeffectpointat.cpp
+++ b/indra/newview/llhudeffectpointat.cpp
@@ -34,7 +34,7 @@
 #include "llhudeffectpointat.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llagent.h"
 #include "lldrawable.h"
diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp
index cbb9fb8619e53eea68c2f29e92e519e47a1e5d72..4cfd556eade1ec3baa2fcb96e0c7339bbbffe79a 100644
--- a/indra/newview/llhudicon.cpp
+++ b/indra/newview/llhudicon.cpp
@@ -34,7 +34,7 @@
 #include "llhudicon.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llviewerobject.h"
 #include "lldrawable.h"
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 252901085704aed4688f416ef972e5df37561b0d..df03f8d45eb2ed541bb6fa42c37bc2006ab6c7b0 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -33,7 +33,7 @@
 
 #include "llhudtext.h"
 
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llagent.h"
 #include "llviewercontrol.h"
@@ -308,7 +308,6 @@ void LLHUDText::renderText(BOOL for_select)
 				}
 				LLUI::popMatrix();
 
-				
 				LLImageGL::unbindTexture(0);
 				LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE);
 				
@@ -375,7 +374,7 @@ void LLHUDText::renderText(BOOL for_select)
 		
 	// Render label
 	{
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 		for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
 			segment_iter != mLabelSegments.end(); ++segment_iter )
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index e58db2988f1f8aa3a582d61ba2d36e952d4d6613..ebcbc202701e6774c61ae6093b00b3bdd969c54d 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -1488,14 +1488,15 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
 		// Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
 		if (!strcmp(name,SYSTEM_FROM))
 		{
-			mHistoryEditor->appendColoredText(name,false,false,color);
+			mHistoryEditor->appendColoredText(name,false,prepend_newline,color);
 		}
 		else
 		{
 			// Convert the name to a hotlink and add to message.
 			const LLStyleSP &source_style = LLStyleMap::instance().lookup(source);
-			mHistoryEditor->appendStyledText(name, false, false, &source_style);
+			mHistoryEditor->appendStyledText(name,false,prepend_newline,&source_style);
 		}
+		prepend_newline = false;
 	}
 	mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color);
 	
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index e9d5bfddd291af3ec202be7c5be8aa3c285d5bf1..8a685d54790bcf234e34d7dc546ab9bd2e7f708e 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -36,7 +36,7 @@
 // Library includes
 #include "llcoord.h"
 #include "indra_constants.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 // Project includes
 #include "llui.h"
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index c6c417d8f21c0a79d56e8ae5614231e17e270dac..b6980d03829ea20a10004e8836a567c029bd7966 100644
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -36,7 +36,7 @@
 #include "llmath.h"
 #include "v3math.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llprimitive.h"
 #include "llview.h"
 #include "llviewerimagelist.h"
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index 8bb5b18e8f445bf1fb72b1bc3bb37f5ad288bf1d..77e6112e9589b6554c05ca6074c1131ab2a4c4c7 100644
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -36,7 +36,7 @@
 // library includes
 #include "llmath.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "v4color.h"
 #include "llprimitive.h"
 #include "llview.h"
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index d857ca75109000b9f9dce782025634e1ed61c588..3a3a22081a64eae7e87272e9dbfd1c11113a336f 100644
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -38,7 +38,7 @@
 #include "v3math.h"
 #include "llquaternion.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "v4color.h"
 #include "llprimitive.h"
 
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 1659cc71ce0d04d06855d34de1655bb9f48611c9..e179e01030c3f5b9d5f3a31170e57762eabd110a 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -38,7 +38,7 @@
 #include "llmaniptranslate.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llagent.h"
 #include "llbbox.h"
@@ -1535,10 +1535,10 @@ void LLManipTranslate::renderSnapGuides()
 					LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER);
 					glBindTexture(GL_TEXTURE_2D, sGridTex);
 					gGL.flush();
-					gGL.blendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
+					gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
 					renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f);
 					gGL.flush();
-					gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+					gGL.setSceneBlendType(LLRender::BT_ALPHA);
 				}
 				
 				{
@@ -1649,7 +1649,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
 		LLGLEnable stencil(GL_STENCIL_TEST);
 		LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS);
 		glStencilFunc(GL_ALWAYS, 0, stencil_mask);
-		glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+		gGL.setColorMask(false, false);
 		LLImageGL::unbindTexture(0);
 		glColor4f(1,1,1,1);
 
@@ -1700,7 +1700,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
 			LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
 		}
 
-		glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+		gGL.setColorMask(true, false);
 	}
 	gGL.color4f(1,1,1,1);
 
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 6e10bfef5817f2984407ffd4713e6649fa4575f3..ee184e74b4f1ce29e64a2ea47e22f9a21e9c91f2 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -38,7 +38,7 @@
 #include "llui.h"
 #include "llmath.h"		// clampf()
 #include "llfocusmgr.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llagent.h"
 #include "llcallingcard.h"
@@ -299,7 +299,7 @@ void LLNetMap::draw()
 			gGL.end();
 
 			// Draw water
-			glAlphaFunc(GL_GREATER, ABOVE_WATERLINE_ALPHA / 255.f );
+			gGL.setAlphaRejectSettings(LLRender::CF_GREATER, ABOVE_WATERLINE_ALPHA / 255.f);
 			{
 				if (regionp->getLand().getWaterTexture())
 				{
@@ -316,7 +316,7 @@ void LLNetMap::draw()
 					gGL.end();
 				}
 			}
-			glAlphaFunc(GL_GREATER,0.01f);
+			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 		}
 		
 
diff --git a/indra/newview/lloverlaybar.cpp b/indra/newview/lloverlaybar.cpp
index 993125ce0a456ce83efdcc868eb86f2c7041c049..23ba7163c278b054ecaf73f46cc7786e943d56a2 100644
--- a/indra/newview/lloverlaybar.cpp
+++ b/indra/newview/lloverlaybar.cpp
@@ -37,7 +37,7 @@
 #include "lloverlaybar.h"
 
 #include "audioengine.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llagent.h"
 #include "llbutton.h"
 #include "llchatbar.h"
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index a94fcf7bc265534b0cb417b5e97b34ce1997abb2..a3526dff214c6144e0efe4f4b4e94fa2c8b7d112 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -133,83 +133,77 @@ void LLLoginHandler::parse(const LLSD& queryMap)
 	mFirstName = queryMap["first_name"].asString();
 	mLastName = queryMap["last_name"].asString();
 	
+	EGridInfo grid_choice = GRID_INFO_NONE;
 	if (queryMap["grid"].asString() == "aditi")
 	{
-		gGridChoice = GRID_INFO_ADITI;
+		grid_choice = GRID_INFO_ADITI;
 	}
 	else if (queryMap["grid"].asString() == "agni")
 	{
-		gGridChoice = GRID_INFO_AGNI;
+		grid_choice = GRID_INFO_AGNI;
 	}
 	else if (queryMap["grid"].asString() == "siva")
 	{
-		gGridChoice = GRID_INFO_SIVA;
+		grid_choice = GRID_INFO_SIVA;
 	}
 	else if (queryMap["grid"].asString() == "durga")
 	{
-		gGridChoice = GRID_INFO_DURGA;
+		grid_choice = GRID_INFO_DURGA;
 	}
 	else if (queryMap["grid"].asString() == "shakti")
 	{
-		gGridChoice = GRID_INFO_SHAKTI;
+		grid_choice = GRID_INFO_SHAKTI;
 	}
 	else if (queryMap["grid"].asString() == "soma")
 	{
-		gGridChoice = GRID_INFO_SOMA;
+		grid_choice = GRID_INFO_SOMA;
 	}
 	else if (queryMap["grid"].asString() == "ganga")
 	{
-		gGridChoice = GRID_INFO_GANGA;
+		grid_choice = GRID_INFO_GANGA;
 	}
 	else if (queryMap["grid"].asString() == "vaak")
 	{
-		gGridChoice = GRID_INFO_VAAK;
+		grid_choice = GRID_INFO_VAAK;
 	}
 	else if (queryMap["grid"].asString() == "uma")
 	{
-		gGridChoice = GRID_INFO_UMA;
+		grid_choice = GRID_INFO_UMA;
 	}
 	else if (queryMap["grid"].asString() == "mohini")
 	{
-		gGridChoice = GRID_INFO_MOHINI;
+		grid_choice = GRID_INFO_MOHINI;
 	}
 	else if (queryMap["grid"].asString() == "yami")
 	{
-		gGridChoice = GRID_INFO_YAMI;
+		grid_choice = GRID_INFO_YAMI;
 	}
 	else if (queryMap["grid"].asString() == "nandi")
 	{
-		gGridChoice = GRID_INFO_NANDI;
+		grid_choice = GRID_INFO_NANDI;
 	}
 	else if (queryMap["grid"].asString() == "mitra")
 	{
-		gGridChoice = GRID_INFO_MITRA;
+		grid_choice = GRID_INFO_MITRA;
 	}
 	else if (queryMap["grid"].asString() == "radha")
 	{
-		gGridChoice = GRID_INFO_RADHA;
+		grid_choice = GRID_INFO_RADHA;
 	}
 	else if (queryMap["grid"].asString() == "ravi")
 	{
-		gGridChoice = GRID_INFO_RAVI;
+		grid_choice = GRID_INFO_RAVI;
 	}
 	else if (queryMap["grid"].asString() == "aruna")
 	{
-		gGridChoice = GRID_INFO_ARUNA;
+		grid_choice = GRID_INFO_ARUNA;
 	}
-#if !LL_RELEASE_FOR_DOWNLOAD
-	if (gGridChoice > GRID_INFO_NONE && gGridChoice < GRID_INFO_LOCAL)
+
+	if(grid_choice != GRID_INFO_NONE)
 	{
-		gSavedSettings.setS32("ServerChoice", gGridChoice);
+		LLViewerLogin::getInstance()->setGridChoice(grid_choice);
 	}
-#endif
-	
- 	if (LLAppViewer::instance()->getLoginURIs().size() == 0)
- 	{
-		gGridName = gGridInfo[gGridChoice].mName;		/* Flawfinder: ignore */
- 	    LLAppViewer::instance()->resetURIs();
- 	}	    
-	
+
 	LLString startLocation = queryMap["location"].asString();
 
 	if (startLocation == "specify")
@@ -296,7 +290,15 @@ class LLIamHereLogin : public LLHTTPClient::Responder
 		{
 			mParent = parentIn;
 		};
-		
+
+		// We don't actually expect LLSD back, so need to override completedRaw
+		virtual void completedRaw(U32 status, const std::string& reason,
+								  const LLChannelDescriptors& channels,
+								  const LLIOPipe::buffer_ptr_t& buffer)
+		{
+			completed(status, reason, LLSD()); // will call result() or error()
+		}
+	
 		virtual void result( const LLSD& content )
 		{
 			if ( mParent )
@@ -794,7 +796,7 @@ BOOL LLPanelLogin::getServer(LLString &server, S32 &domain_name)
 
 			if ((S32)GRID_INFO_OTHER == domain_name)
 			{
-				server = gGridName;
+				server = LLViewerLogin::getInstance()->getGridLabel();
 			}
 		}
 		else
@@ -942,24 +944,16 @@ void LLPanelLogin::loadLoginPage()
 	LLString grid;
 	S32 grid_index;
 	getServer( grid, grid_index );
-	if( grid_index != (S32)GRID_INFO_OTHER )
-	{
-		grid = gGridInfo[grid_index].mLabel;
-	}
 
-	if(gGridChoice != (EGridInfo)grid_index)
+	gViewerWindow->setMenuBackgroundColor(false, !LLViewerLogin::getInstance()->isInProductionGrid());
+	gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
+
+	if (!grid.empty())
 	{
-		LLAppViewer::instance()->resetURIs();
-		gGridChoice = (EGridInfo)grid_index;
-		gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
-		gViewerWindow->setMenuBackgroundColor(false, 
-			!LLAppViewer::instance()->isInProductionGrid());
-		gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
+		char* curl_grid = curl_escape(grid.c_str(), 0);
+		oStr << "&grid=" << curl_grid;
+		curl_free(curl_grid);
 	}
-    
-	char* curl_grid = curl_escape(grid.c_str(), 0);
-	oStr << "&grid=" << curl_grid;
-	curl_free(curl_grid);
 
 #if USE_VIEWER_AUTH
 	LLURLSimString::sInstance.parse();
@@ -1087,15 +1081,6 @@ void LLPanelLogin::onClickConnect(void *)
 		if (!first.empty() && !last.empty())
 		{
 			// has both first and last name typed
-
-			// store off custom server entry, if currently selected
-			LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
-			S32 selected_server = combo->getValue();
-			if (selected_server == GRID_INFO_NONE)
-			{
-				LLString custom_server = combo->getValue().asString();
-				gSavedSettings.setString("CustomServer", custom_server);
-			}
 			sInstance->mCallback(0, sInstance->mCallbackData);
 		}
 		else
@@ -1180,6 +1165,26 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)
 // static
 void LLPanelLogin::onSelectServer(LLUICtrl*, void*)
 {
+	// The user twiddled with the grid choice ui.
+	// apply the selection to the grid setting.
+	LLString grid;
+	S32 grid_index;
+	getServer( grid, grid_index );
+
+	// This new seelction will override preset uris
+	// from the command line.
+	LLViewerLogin* vl = LLViewerLogin::getInstance();
+	vl->resetURIs();
+	if(grid_index != GRID_INFO_OTHER)
+	{
+		vl->setGridChoice((EGridInfo)grid_index);
+		grid = vl->getGridLabel();
+	}
+	else
+	{
+		vl->setGridChoice(grid);
+	}
+
 	// grid changed so show new splash screen (possibly)
 	loadLoginPage();
 }
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index d27b587a097c658fb255fefacef8c98177edcd4a..e5b063e6d7290d95bf605d8fdb186896d589e72d 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -36,7 +36,7 @@
 #include "indra_constants.h"
 #include "llmath.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llui.h"
 #include "llfontgl.h"
 #include "llimagegl.h"
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 103f350b0a7adc6df6a155c8a594abd9da4af574..a889388e858bf5b23e88ded21a5bb922d9651d1e 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -39,7 +39,7 @@
 #include "lldbstrings.h"
 #include "lleconomy.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llpermissions.h"
 #include "llpermissionsflags.h"
 #include "llundo.h"
@@ -1038,19 +1038,21 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
 
 	if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
 	{
-		LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
+		//LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
 		LLBBox bbox = mSavedSelectionBBox;
 		mGridOrigin = mSavedSelectionBBox.getCenterAgent();
 		mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
 
-		if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull())
+		// DEV-12570 Just taking the saved selection box rotation prevents
+		// wild rotations of linked sets while in local grid mode
+		//if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull())
 		{
 			mGridRotation = mSavedSelectionBBox.getRotation();
 		}
-		else //set to the root object
+		/*else //set to the root object
 		{
 			mGridRotation = root->getRenderRotation();			
-		}
+		}*/
 	}
 	else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
 	{
@@ -4806,7 +4808,7 @@ void LLSelectMgr::updateSilhouettes()
 		objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE);
 	}
 	
-	//glAlphaFunc(GL_GREATER, 0.01f);
+	//gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 }
 
 void LLSelectMgr::renderSilhouettes(BOOL for_hud)
@@ -4818,7 +4820,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 
 	LLViewerImage::bindTexture(mSilhouetteImagep);
 	LLGLSPipelineSelection gls_select;
-	glAlphaFunc(GL_GREATER, 0.0f);
+	gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
 	LLGLEnable blend(GL_BLEND);
 	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
 
@@ -4846,11 +4848,21 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 	if (mSelectedObjects->getNumNodes())
 	{
 		LLUUID inspect_item_id = LLFloaterInspect::getSelectedUUID();
+		
 		for (S32 pass = 0; pass < 2; pass++)
 		{
+			LLObjectSelection::iterator end_ = mSelectedObjects->end();		
+			S32 num_nodes = mSelectedObjects->getNumNodes() ;
+			LLObjectSelection::iterator prev_iter = mSelectedObjects->end();		
 			for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
 				 iter != mSelectedObjects->end(); iter++)
 			{
+				llassert_always(end_ == mSelectedObjects->end()) ;//mSelectedObjects should not grow
+				llassert_always(prev_iter != iter) ; //iter should move
+				llassert_always(num_nodes > 0) ; //iter should not circle inside mSelectedObjects.
+				num_nodes-- ;
+				prev_iter = iter ;
+
 				LLSelectNode* node = *iter;
 				LLViewerObject* objectp = node->getObject();
 				if (!objectp)
@@ -4924,7 +4936,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 	}
 
 	mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D);
-	glAlphaFunc(GL_GREATER, 0.01f);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 }
 
 void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point)
@@ -5289,7 +5301,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
 		if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible())
 		{
 			gGL.flush();
-			gGL.blendFunc(GL_SRC_COLOR, GL_ONE);
+			gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE);
 			LLGLEnable fog(GL_FOG);
 			glFogi(GL_FOG_MODE, GL_LINEAR);
 			float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec();
@@ -5299,7 +5311,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
 			glFogfv(GL_FOG_COLOR, fogCol.mV);
 
 			LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
-			glAlphaFunc(GL_GREATER, 0.01f);
+			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 			gGL.begin(LLVertexBuffer::LINES);
 			{
 				S32 i = 0;
@@ -5320,7 +5332,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
 		}
 
 		gGL.flush();
-		gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+		gGL.setSceneBlendType(LLRender::BT_ALPHA);
 		gGL.begin(LLVertexBuffer::TRIANGLES);
 		{
 			S32 i = 0;
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index ff53dfea2fea910f5d0b8175da94b79a80dc07f8..b6ef8337095c174d920dbe10667e62285ee1c913 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -43,7 +43,7 @@
 #include "llviewerregion.h"
 #include "llcamera.h"
 #include "pipeline.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "lloctree.h"
 
 const F32 SG_OCCLUSION_FUDGE = 1.01f;
@@ -60,6 +60,7 @@ const F32 SG_OCCLUSION_FUDGE = 1.01f;
 
 static U32 sZombieGroups = 0;
 U32 LLSpatialGroup::sNodeCount = 0;
+BOOL LLSpatialGroup::sNoDelete = FALSE;
 
 static F32 sLastMaxTexPriority = 1.f;
 static F32 sCurMaxTexPriority = 1.f;
@@ -295,6 +296,11 @@ S32 LLSphereAABB(const LLVector3& center, const LLVector3& size, const LLVector3
 
 LLSpatialGroup::~LLSpatialGroup()
 {
+	if (sNoDelete)
+	{
+		llerrs << "Illegal deletion of LLSpatialGroup!" << llendl;
+	}
+
 	if (isState(DEAD))
 	{
 		sZombieGroups--;
@@ -2006,7 +2012,7 @@ void renderOctree(LLSpatialGroup* group)
 	//render solid object bounding box, color
 	//coded by buffer usage and activity
 	LLGLDepthTest depth(GL_TRUE, GL_FALSE);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE);
+	gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
 	LLVector4 col;
 	if (group->mBuilt > 0.f)
 	{
@@ -2094,7 +2100,7 @@ void renderOctree(LLSpatialGroup* group)
 	drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f));
 	
 	glDepthMask(GL_TRUE);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
 	if (group->mBuilt <= 0.f)
 	{
@@ -2122,7 +2128,7 @@ void renderOctree(LLSpatialGroup* group)
 void renderVisibility(LLSpatialGroup* group, LLCamera* camera)
 {
 	LLGLEnable blend(GL_BLEND);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	LLGLEnable cull(GL_CULL_FACE);
 	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 
@@ -2498,7 +2504,7 @@ void LLSpatialPartition::renderDebug()
 	
 	LLGLDisable cullface(GL_CULL_FACE);
 	LLGLEnable blend(GL_BLEND);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	LLImageGL::unbindTexture(0);
 	gPipeline.disableLights();
 
@@ -2619,7 +2625,10 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset,
 
 LLDrawInfo::~LLDrawInfo()	
 {
-
+	if (LLSpatialGroup::sNoDelete)
+	{
+		llerrs << "LLDrawInfo deleted illegally!" << llendl;
+	}
 }
 
 LLVertexBuffer* LLGeometryManager::createVertexBuffer(U32 type_mask, U32 usage)
@@ -2813,7 +2822,16 @@ void LLCullResult::pushDrawInfo(U32 type, LLDrawInfo* draw_info)
 }
 
 
-
+void LLCullResult::assertDrawMapsEmpty()
+{
+	for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++)
+	{
+		if (mRenderMapSize[i] != 0)
+		{
+			llerrs << "Stale LLDrawInfo's in LLCullResult!" << llendl;
+		}
+	}
+}
 
 
 
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 7e1175a000b01aed670e38a52dbb7c4923a99843..6ea22c2f66fddd67b7d52d8a0dc120752014bb1c 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -127,6 +127,7 @@ class LLSpatialGroup : public LLOctreeListener<LLDrawable>
 	friend class LLSpatialPartition;
 public:
 	static U32 sNodeCount;
+	static BOOL sNoDelete; //deletion of spatial groups and draw info not allowed if TRUE
 
 	typedef std::vector<LLPointer<LLSpatialGroup> > sg_vector_t;
 	typedef std::set<LLPointer<LLSpatialGroup> > sg_set_t;
@@ -421,7 +422,7 @@ class LLCullResult
 	void pushDrawable(LLDrawable* drawable);
 	void pushBridge(LLSpatialBridge* bridge);
 	void pushDrawInfo(U32 type, LLDrawInfo* draw_info);
-
+	
 	U32 getVisibleGroupsSize()		{ return mVisibleGroupsSize; }
 	U32	getAlphaGroupsSize()		{ return mAlphaGroupsSize; }
 	U32	getDrawableGroupsSize()		{ return mDrawableGroupsSize; }
@@ -429,6 +430,8 @@ class LLCullResult
 	U32	getVisibleBridgeSize()		{ return mVisibleBridgeSize; }
 	U32	getRenderMapSize(U32 type)	{ return mRenderMapSize[type]; }
 
+	void assertDrawMapsEmpty();
+
 private:
 	U32					mVisibleGroupsSize;
 	U32					mAlphaGroupsSize;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 724b61481b7baf54fa91d0626d5fc8bc33a01269..7480d4dd7327f06df00f78c8666ed2fc7c0a2640 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -820,22 +820,28 @@ BOOL idle_startup()
 			LLString server_label;
 			S32 domain_name_index;
 			BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index );
-			gGridChoice = (EGridInfo) domain_name_index;
-			gSavedSettings.setS32("ServerChoice", gGridChoice);
-			if (gGridChoice == GRID_INFO_OTHER)
+			if((EGridInfo)domain_name_index == GRID_INFO_OTHER)
 			{
-				gGridName = server_label;/* Flawfinder: ignore */
+				// Since the grid chosen was an 'other', set the choice by string. 
+				LLViewerLogin::getInstance()->setGridChoice(server_label);
+			}
+			else
+			{
+				// Set the choice according to index.
+				LLViewerLogin::getInstance()->setGridChoice((EGridInfo)domain_name_index);
 			}
 			
 			if ( user_picked_server )
-			{   // User picked a grid from the popup, so clear the stored urls and they will be re-generated from gGridChoice
+			{   // User picked a grid from the popup, so clear the 
+				// stored uris and they will be re-generated from the GridChoice
 				sAuthUris.clear();
-				LLAppViewer::instance()->resetURIs();
+				LLViewerLogin::getInstance()->resetURIs();
 			}
 			
 			LLString location;
 			LLPanelLogin::getLocation( location );
 			LLURLSimString::setString( location );
+
 			// END TODO
 			LLPanelLogin::close();
 		}
@@ -915,7 +921,7 @@ BOOL idle_startup()
 	if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState())
 	{
 //#define LL_MINIMIAL_REQUESTED_OPTIONS
-		gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel;
+		gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
 
 		// *Note: this is where gUserAuth used to be created.
 		requested_options.clear();
@@ -949,7 +955,8 @@ BOOL idle_startup()
 			gSavedSettings.setBOOL("UseDebugMenus", TRUE);
 			requested_options.push_back("god-connect");
 		}
-		const std::vector<std::string>& uris = LLAppViewer::instance()->getLoginURIs();
+		std::vector<std::string> uris;
+		LLViewerLogin::getInstance()->getLoginURIs(uris);
 		std::vector<std::string>::const_iterator iter, end;
 		for (iter = uris.begin(), end = uris.end(); iter != end; ++iter)
 		{
@@ -1222,7 +1229,7 @@ BOOL idle_startup()
 				sAuthUriNum++;
 				std::ostringstream s;
 				LLString::format_map_t args;
-				args["[NUMBER]"] = sAuthUriNum + 1;
+				args["[NUMBER]"] = llformat("%d", sAuthUriNum + 1);
 				auth_desc = LLTrans::getString("LoginAttempt", args).c_str();
 				LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
 				return do_normal_idle;
@@ -1276,7 +1283,6 @@ BOOL idle_startup()
 				   save_password_to_disk(NULL);
 			}
 			gSavedSettings.setBOOL("RememberPassword", remember_password);
-			gSavedSettings.setBOOL("LoginLastLocation", gSavedSettings.getBOOL("LoginLastLocation"));
 
 			text = LLUserAuth::getInstance()->getResponse("agent_access");
 			if(text && (text[0] == 'M'))
@@ -2331,7 +2337,7 @@ BOOL idle_startup()
 		gDebugView->mFastTimerView->setVisible(TRUE);
 #endif
 
-		LLAppViewer::instance()->startMainloopTimeout();
+		LLAppViewer::instance()->initMainloopTimeout("Mainloop Init");
 
 		return do_normal_idle;
 	}
@@ -2362,33 +2368,13 @@ void login_show()
 	
 	LL_DEBUGS("AppInit") << "Setting Servers" << LL_ENDL;
 
-	if( GRID_INFO_OTHER == gGridChoice )
-	{
-		   LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER );
-	}
-	else
+	LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel().c_str(), LLViewerLogin::getInstance()->getGridChoice());
+
+	LLViewerLogin* vl = LLViewerLogin::getInstance();
+	for(int grid_index = GRID_INFO_ADITI; grid_index < GRID_INFO_OTHER; ++grid_index)
 	{
-		   LLPanelLogin::addServer( gGridInfo[gGridChoice].mLabel, gGridChoice );
+		LLPanelLogin::addServer(vl->getKnownGridLabel((EGridInfo)grid_index).c_str(), grid_index);
 	}
-
-	// Arg!  We hate loops!
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_ADITI].mLabel,        GRID_INFO_ADITI );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_AGNI].mLabel, GRID_INFO_AGNI );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_ARUNA].mLabel,        GRID_INFO_ARUNA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_DURGA].mLabel,        GRID_INFO_DURGA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_GANGA].mLabel,        GRID_INFO_GANGA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_MITRA].mLabel,       GRID_INFO_MITRA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_MOHINI].mLabel,       GRID_INFO_MOHINI );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_NANDI].mLabel,       GRID_INFO_NANDI );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_RADHA].mLabel,       GRID_INFO_RADHA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_RAVI].mLabel,       GRID_INFO_RAVI );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_SIVA].mLabel, GRID_INFO_SIVA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_SHAKTI].mLabel,       GRID_INFO_SHAKTI );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_SOMA].mLabel, GRID_INFO_SOMA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_UMA].mLabel,  GRID_INFO_UMA );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_VAAK].mLabel, GRID_INFO_VAAK );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_YAMI].mLabel, GRID_INFO_YAMI );
-	LLPanelLogin::addServer( gGridInfo[GRID_INFO_LOCAL].mLabel,        GRID_INFO_LOCAL );
 }
 
 // Callback for when login screen is closed.  Option 0 = connect, option 1 = quit.
@@ -2705,7 +2691,7 @@ void update_dialog_callback(S32 option, void *userdata)
 #endif
 	// *TODO change userserver to be grid on both viewer and sim, since
 	// userserver no longer exists.
-	query_map["userserver"] = gGridName;
+	query_map["userserver"] = LLViewerLogin::getInstance()->getGridLabel();
 	query_map["channel"] = gSavedSettings.getString("VersionChannelName");
 	// *TODO constantize this guy
 	LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
@@ -2798,9 +2784,6 @@ void update_dialog_callback(S32 option, void *userdata)
 
 	LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << LL_ENDL;
 	
-	// *REMOVE:Mani The following call is handled through ~LLAppViewer.
- 	// remove_marker_file(); // In case updater fails
-
 	// Run the auto-updater.
 	system(update_exe_path.c_str());		/* Flawfinder: ignore */
 	
@@ -2808,10 +2791,6 @@ void update_dialog_callback(S32 option, void *userdata)
 	OSMessageBox("Automatic updating is not yet implemented for Linux.\n"
 		"Please download the latest version from www.secondlife.com.",
 		NULL, OSMB_OK);
-
-	// *REMOVE:Mani The following call is handled through ~LLAppViewer.
-	// remove_marker_file();
-	
 #endif
 	LLAppViewer::instance()->forceQuit();
 }
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index 351d4b1a214a6a8295ccba83284966d274964a65..6c832492c0e7ea8af2a2a878b9226832e53f5ca3 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -15,7 +15,7 @@
  * online at http://secondlife.com/developers/opensource/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
+ * it is applied to this Source Code. View the full textof the exception
  * in the file doc/FLOSS-exception.txt in this software distribution, or
  * online at http://secondlife.com/developers/opensource/flossexception
  * 
diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp
index 2877fc66e359d02f674c681a0bbe715e552f84ac..6f952ea57d2b0d80dbb5023e587b4108e66a5c75 100644
--- a/indra/newview/llsurfacepatch.cpp
+++ b/indra/newview/llsurfacepatch.cpp
@@ -207,10 +207,11 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const
 void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal,
 						  LLVector2 *tex0, LLVector2 *tex1)
 {
-	if (!mSurfacep || !mSurfacep->getRegion())
+	if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge())
 	{
 		return; // failsafe
 	}
+	llassert_always(vertex && normal && tex0 && tex1);
 	
 	U32 surface_stride = mSurfacep->getGridsPerEdge();
 	U32 point_offset = x + y*surface_stride;
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 7a2d232de61d8c5d9d44af819b578e2d7f610976..6286289d6bd2c8d1b097491cd918ba6c7c9a2e9e 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -52,7 +52,7 @@
 #include "llxmltree.h"
 #include "pipeline.h"
 #include "v4coloru.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 //#include "../tools/imdebug/imdebug.h"
 
@@ -239,6 +239,9 @@ BOOL LLTexLayerSetBuffer::render()
 {
 	U8* baked_bump_data = NULL;
 
+	// Default color mask for tex layer render
+	gGL.setColorMask(true, true);
+
 	// do we need to upload, and do we have sufficient data to create an uploadable composite?
 	// When do we upload the texture if gAgent.mNumPendingQueries is non-zero?
 	BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal());
@@ -292,8 +295,8 @@ BOOL LLTexLayerSetBuffer::render()
 	}
 
 	// reset GL state
-	glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
-	gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );  
+	gGL.setColorMask(true, true);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
 	// we have valid texture data now
 	mInitialized = TRUE;
@@ -756,6 +759,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 
 	LLGLSUIDefault gls_ui;
 	LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
+	gGL.setColorMask(true, true);
 
 	// composite color layers
 	for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
@@ -774,8 +778,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 	{
 		LLGLSNoAlphaTest gls_no_alpha_test;
 		gGL.flush();
-		glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
-		gGL.blendFunc( GL_ONE, GL_ZERO );
+		gGL.setColorMask(false, true);
+		gGL.setSceneBlendType(LLRender::BT_REPLACE);
 
 		{
 			LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticAlphaFileName, TRUE );
@@ -793,8 +797,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 		LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
 
 		gGL.flush();
-		glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
-		gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+		gGL.setColorMask(true, true);
+		gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	}
 	else 
 	if( getInfo()->mClearAlpha )
@@ -803,12 +807,12 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
 		LLGLSNoTextureNoAlphaTest gls_no_alpha;
 		gGL.color4f( 0.f, 0.f, 0.f, 1.f );
 		gGL.flush();
-		glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
+		gGL.setColorMask(false, true);
 
 		gl_rect_2d_simple( width, height );
 		
 		gGL.flush();
-		glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+		gGL.setColorMask(true, true);
 	}
 	stop_glerror();
 
@@ -836,11 +840,11 @@ BOOL LLTexLayerSet::renderBump( S32 x, S32 y, S32 width, S32 height )
 	// Set the alpha channel to one (clean up after previous blending)
 	LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha;
 	gGL.color4f( 0.f, 0.f, 0.f, 1.f );
-	glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
+	gGL.setColorMask(false, true);
 
 	gl_rect_2d_simple( width, height );
 	
-	glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+	gGL.setColorMask(true, true);
 	stop_glerror();
 
 	return success;
@@ -1330,7 +1334,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
 		renderAlphaMasks( x, y, width, height, &net_color );
 		alpha_mask_specified = TRUE;
 		gGL.flush();
-		gGL.blendFunc( GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA );
+		gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA);
 	}
 
 	gGL.color4fv( net_color.mV);
@@ -1338,7 +1342,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
 	if( getInfo()->mWriteAllChannels )
 	{
 		gGL.flush();
-		gGL.blendFunc( GL_ONE, GL_ZERO );
+		gGL.setSceneBlendType(LLRender::BT_REPLACE);
 	}
 
 	if( (getInfo()->mLocalTexture != -1) && !getInfo()->mUseLocalTextureAlphaOnly )
@@ -1401,7 +1405,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
 	{
 		// Restore standard blend func value
 		gGL.flush();
-		gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+		gGL.setSceneBlendType(LLRender::BT_ALPHA);
 		stop_glerror();
 	}
 
@@ -1506,7 +1510,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
 
 	llassert( !mParamAlphaList.empty() );
 
-	glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE );
+	gGL.setColorMask(false, true);
 
 	alpha_list_t::iterator iter = mParamAlphaList.begin();
 	LLTexLayerParamAlpha* first_param = *iter;
@@ -1518,7 +1522,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
 	
 		// Clear the alpha
 		gGL.flush();
-		gGL.blendFunc( GL_ONE, GL_ZERO );
+		gGL.setSceneBlendType(LLRender::BT_REPLACE);
 
 		gGL.color4f( 0.f, 0.f, 0.f, 0.f );
 		gl_rect_2d_simple( width, height );
@@ -1536,7 +1540,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
 
 	// Approximates a min() function
 	gGL.flush();
-	gGL.blendFunc( GL_DST_ALPHA, GL_ZERO );
+	gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
 
 	// Accumulate the alpha component of the texture
 	if( getInfo()->mLocalTexture != -1 )
@@ -1601,7 +1605,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
 
 	LLGLSUIDefault gls_ui;
 
-	glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+	gGL.setColorMask(true, true);
 	
 	if (!mMorphMasksValid && !mMaskedMorphs.empty())
 	{
@@ -1963,11 +1967,11 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height )
 	gGL.flush();
 	if( getInfo()->mMultiplyBlend )
 	{
-		gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); // Multiplication: approximates a min() function
+		gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); // Multiplication: approximates a min() function
 	}
 	else
 	{
-		gGL.blendFunc( GL_ONE, GL_ONE );  // Addition: approximates a max() function
+		gGL.setSceneBlendType(LLRender::BT_ADD);  // Addition: approximates a max() function
 	}
 
 	if( !getInfo()->mStaticImageFileName.empty() && !mStaticImageInvalid)
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 86ef9e95cf7f46146df547e7a23fb0956d31052c..10801cfd4f15a380e73ec689c186fe835c2b3afc 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -39,6 +39,9 @@
 #include "lllfsthread.h"
 #include "llviewercontrol.h"
 
+// Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout
+#include "llappviewer.h" 
+
 #define USE_LFS_READ 0
 #define USE_LFS_WRITE 0
 
@@ -1153,6 +1156,9 @@ void LLTextureCache::purgeTextures(bool validate)
 		return;
 	}
 
+	// *FIX:Mani - watchdog off.
+	LLAppViewer::instance()->pauseMainloopTimeout();
+
 	LLMutexLock lock(&mHeaderMutex);
 	
 	S32 filesize = ll_apr_file_size(mTexturesDirEntriesFileName, NULL);
@@ -1273,6 +1279,9 @@ void LLTextureCache::purgeTextures(bool validate)
 	llassert(mTexturesSizeTotal == total_size);
 	
 	delete[] entries;
+
+	// *FIX:Mani - watchdog back on.
+	LLAppViewer::instance()->resumeMainloopTimeout();
 	
 	LL_INFOS("TextureCache") << "TEXTURE CACHE:"
 			<< " PURGED: " << purge_count
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 22c0e0861229f3f048955d3366fcafd6c4a13856..b89e93b9a43914cb2a9c4bed7235d5e8f8632970 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -34,7 +34,7 @@
 
 #include "lltexturectrl.h"
 
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llagent.h"
 #include "llviewerimagelist.h"
 #include "llcheckboxctrl.h"
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index bcb2185687002a1e8acceeb8b7f5d77895b96824..c5ae50c050007249f1bc9a2d3c2087659bf63180 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1341,13 +1341,13 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
 	}
 
 	S32 desired_size;
-	if ((desired_discard == 0) && worker && worker->mFileSize)
+	if (desired_discard == 0)
 	{
 		// if we want the entire image, and we know its size, then get it all
 		// (calcDataSizeJ2C() below makes assumptions about how the image
 		// was compressed - this code ensures that when we request the entire image,
 		// we really do get it.)
-		desired_size = worker->mFileSize;
+		desired_size = MAX_IMAGE_DATA_SIZE;
 	}
 	else if (w*h*c > 0)
 	{
@@ -1358,17 +1358,11 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
 	}
 	else
 	{
-		if (desired_discard == 0)
-		{
-			// If we want all of the image, request the maximum possible data
-			desired_size = MAX_IMAGE_DATA_SIZE;
-		}
-		else
-		{
-			desired_size = FIRST_PACKET_SIZE;
-			desired_discard = MAX_DISCARD_LEVEL;
-		}
+		desired_size = FIRST_PACKET_SIZE;
+		desired_discard = MAX_DISCARD_LEVEL;
 	}
+
+	
 	if (worker)
 	{
 		if (worker->wasAborted())
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index 7f571a1205038371d7a392c8117903f94ab1efb6..a9005ef71bb6b4f946c5325feab130ecb114122b 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -40,7 +40,7 @@
 #include "lllfsthread.h"
 #include "llui.h"
 #include "llimageworker.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llhoverview.h"
 #include "llselectmgr.h"
diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp
index 0224e1c9251e93ab44d8dd811d536e0badc0ce85..32b27fb876303bd241e4a528435a70dd96ce352f 100644
--- a/indra/newview/lltoolbrush.cpp
+++ b/indra/newview/lltoolbrush.cpp
@@ -35,7 +35,7 @@
 #include "lltoolselectland.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "message.h"
 
@@ -94,7 +94,6 @@ LLToolBrushLand::LLToolBrushLand()
 	mMouseX( 0 ),
 	mMouseY(0),
 	mGotHover(FALSE),
-	mLastShowParcelOwners(FALSE),
 	mBrushSelected(FALSE)
 {
 	mBrushIndex = gSavedSettings.getS32("RadioLandBrushSize");
@@ -104,7 +103,8 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,
 											  MASK mask)
 {
 	S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction");
-
+	
+	mLastAffectedRegions.clear();
 	determineAffectedRegions(mLastAffectedRegions, pos_global);
 	for(region_list_t::iterator iter = mLastAffectedRegions.begin();
 		iter != mLastAffectedRegions.end(); ++iter)
@@ -418,8 +418,6 @@ void LLToolBrushLand::handleSelect()
 	gFloaterTools->setStatusText("modifyland");
 //	if (!mBrushSelected)
 	{
-		mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
-		gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
 		mBrushSelected = TRUE;
 	}
 }
@@ -431,8 +429,6 @@ void LLToolBrushLand::handleDeselect()
 	{
 		gEditMenuHandler = NULL;
 	}
-	mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
-	gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
 	LLViewerParcelMgr::getInstance()->setSelectionVisible(TRUE);
 	mBrushSelected = FALSE;
 }
diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h
index 70e34725af4826866665a71b0fc6fa7919072f2b..3940f3ac894cf2bd2422440fe9ee2bcb72a6a688 100644
--- a/indra/newview/lltoolbrush.h
+++ b/indra/newview/lltoolbrush.h
@@ -97,7 +97,6 @@ class LLToolBrushLand : public LLTool, public LLEditMenuHandler, public LLSingle
 	S32 mMouseY;
 	S32 mBrushIndex;
 	BOOL mGotHover;
-	BOOL mLastShowParcelOwners;
 	BOOL mBrushSelected;
 	// Order doesn't matter and we do check for existance of regions, so use a set
 	region_list_t mLastAffectedRegions;
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index ad11f5ad43558a34e37e1dd2ec6f4f744840d5da..d8d271bfdab2a3ccfd3f6af60078ee369c833b12 100644
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -33,7 +33,7 @@
 
 // File includes
 #include "lltoolmorph.h" 
-#include "llglimmediate.h"
+#include "llrender.h"
 
 // Library includes
 #include "audioengine.h"
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 315136ed36b1ba17f6afbd54df23985b59cbcc74..310b677bff42a0c6e2921532712b57c5825cf6ef 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -309,6 +309,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
 	}
 	else if (mHitObjectID == gAgent.getID() )
 	{
+		llassert_always(gPieSelf) ;
 		gPieSelf->show(x, y, mPieMouseButtonDown);
 	}
 	else if (object)
diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp
index 28e4227db4767ddbac84ce441bfe470fc26ef9b2..38e9811b7344f141a663a14cffcc8813706355c1 100644
--- a/indra/newview/lltoolselectland.cpp
+++ b/indra/newview/lltoolselectland.cpp
@@ -61,8 +61,7 @@ LLToolSelectLand::LLToolSelectLand( )
 	mDragEndY(0),
 	mMouseOutsideSlop(FALSE),
 	mWestSouthBottom(),
-	mEastNorthTop(),
-	mLastShowParcelOwners(FALSE)
+	mEastNorthTop()
 { }
 
 LLToolSelectLand::~LLToolSelectLand()
@@ -216,17 +215,12 @@ void LLToolSelectLand::render()
 void LLToolSelectLand::handleSelect()
 {
 	gFloaterTools->setStatusText("selectland");
-	mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
-	gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
 }
 
 
 void LLToolSelectLand::handleDeselect()
 {
 	mSelection = NULL;
-	mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners");
-	//LLViewerParcelMgr::getInstance()->deselectLand();
-	gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners);
 }
 
 
diff --git a/indra/newview/lltoolselectland.h b/indra/newview/lltoolselectland.h
index 37d656289ba9346fb47bd5896922d4bd46857af2..bca0e133844726418b1b651dd75e3968ce9f0a25 100644
--- a/indra/newview/lltoolselectland.h
+++ b/indra/newview/lltoolselectland.h
@@ -74,7 +74,6 @@ class LLToolSelectLand
 	LLVector3d		mWestSouthBottom;		// global coords, from drag
 	LLVector3d		mEastNorthTop;			// global coords, from drag
 
-	BOOL			mLastShowParcelOwners;	// store last Show Parcel Owners setting
 	LLSafeHandle<LLParcelSelection> mSelection;		// hold on to a parcel selection
 };
 
diff --git a/indra/newview/lltoolselectrect.cpp b/indra/newview/lltoolselectrect.cpp
index 5f54d1f3ba17c52ec222518ccbf44cd787fc5525..67d9e2da657fdf4016f152fbecf74a131ba72c33 100644
--- a/indra/newview/lltoolselectrect.cpp
+++ b/indra/newview/lltoolselectrect.cpp
@@ -36,7 +36,7 @@
 
 // Library includes
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "lldarray.h"
 
 // Viewer includes
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 5647b6be5a8a0d415302835ba153feb6e8091dca..d1b87281f027623fad971489fabdb8894eb12d75 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -36,7 +36,7 @@
 #include "lldarray.h"
 #include "llfontgl.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llinventory.h"
 #include "llmemory.h"
 #include "llstring.h"
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 9ba25902afad7d19ef50ad55a4bb7e40763c0c61..cbba73b692258012312593648fb22d3dd894cf62 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -69,7 +69,7 @@
 #include "llappviewer.h"
 #include "llvosurfacepatch.h"
 #include "llvowlsky.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
 BOOL 				gHackGodmode = FALSE;
@@ -433,7 +433,7 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
 		gVoiceClient->setCaptureDevice(inputDevice);
 		std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
 		gVoiceClient->setRenderDevice(outputDevice);
-		gVoiceClient->setLipSyncEnabled(gSavedSettings.getU32("LipSyncEnabled"));
+		gVoiceClient->setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled"));
 	}
 	return true;
 }
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index a24f4b36de7f7ce58e583da26a64d5c7ec8f4a1f..c75bcdc9e89e88c49e1654b5ea5dbfbfeb3071c7 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -34,7 +34,7 @@
 #include "llviewerdisplay.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llglheaders.h"
 #include "llagent.h"
 #include "llviewercontrol.h"
@@ -81,8 +81,6 @@
 #include "llpostprocess.h"
 
 extern LLPointer<LLImageGL> gStartImageGL;
-extern BOOL gDisplaySwapBuffers;
-
 
 LLPointer<LLImageGL> gDisconnectedImagep = NULL;
 
@@ -96,14 +94,18 @@ const F32		RESTORE_GL_TIME = 5.f;	// Wait this long while reloading textures bef
 
 BOOL gForceRenderLandFence = FALSE;
 BOOL gDisplaySwapBuffers = FALSE;
+BOOL gDepthDirty = FALSE;
 BOOL gResizeScreenTexture = FALSE;
 BOOL gSnapshot = FALSE;
 
+U32 gRecentFrameCount = 0; // number of 'recent' frames
+LLFrameTimer gRecentFPSTime;
+LLFrameTimer gRecentMemoryTime;
+
 // Rendering stuff
 void pre_show_depth_buffer();
 void post_show_depth_buffer();
 void render_ui_and_swap();
-void render_ui_and_swap_if_needed();
 void render_hud_attachments();
 void render_ui_3d();
 void render_ui_2d();
@@ -142,7 +144,7 @@ void display_startup()
 	gPipeline.disableLights();
 
 	gViewerWindow->setup2DRender();
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 	gGL.color4f(1,1,1,1);
 	gViewerWindow->draw();
@@ -181,6 +183,26 @@ void display_update_camera()
 	LLWorld::getInstance()->setLandFarClip(final_far);
 }
 
+// Write some stats to llinfos
+void display_stats()
+{
+	F32 fps_log_freq = gSavedSettings.getF32("FPSLogFrequency");
+	if (fps_log_freq > 0.f && gRecentFPSTime.getElapsedTimeF32() >= fps_log_freq)
+	{
+		F32 fps = gRecentFrameCount / fps_log_freq;
+		llinfos << llformat("FPS: %.02f", fps) << llendl;
+		gRecentFrameCount = 0;
+		gRecentFPSTime.reset();
+	}
+	F32 mem_log_freq = gSavedSettings.getF32("MemoryLogFrequency");
+	if (mem_log_freq > 0.f && gRecentMemoryTime.getElapsedTimeF32() >= mem_log_freq)
+	{
+		gMemoryAllocated = getCurrentRSS();
+		U32 memory = (U32)(gMemoryAllocated / (1024*1024));
+		llinfos << llformat("MEMORY: %d MB", memory) << llendl;
+		gRecentMemoryTime.reset();
+	}
+}
 
 // Paint the display!
 void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
@@ -222,9 +244,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 	gViewerWindow->checkSettings();
 	
+	LLAppViewer::instance()->pingMainloopTimeout("Display:Pick");
 	gViewerWindow->performPick();
 	
 
+	LLAppViewer::instance()->pingMainloopTimeout("Display:CheckStates");
 	LLGLState::checkStates();
 	LLGLState::checkTextureChannels();
 	
@@ -256,6 +280,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	//
 	if (LLStartUp::getStartupState() < STATE_STARTED)
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Startup");
 		display_startup();
 		return;
 	}
@@ -267,6 +292,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	// Update GL Texture statistics (used for discard logic?)
 	//
 
+	LLAppViewer::instance()->pingMainloopTimeout("Display:TextureStats");
 	gFrameStats.start(LLFrameStats::UPDATE_TEX_STATS);
 	stop_glerror();
 
@@ -277,6 +303,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	
 	gPipeline.mBackfaceCull = TRUE;
 	gFrameCount++;
+	gRecentFrameCount++;
 	if (gFocusMgr.getAppHasFocus())
 	{
 		gForegroundFrameCount++;
@@ -289,6 +316,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 	if (gTeleportDisplay)
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Teleport");
 		const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before raising the curtain after we've actually already arrived.
 
 		S32 attach_count = 0;
@@ -367,6 +395,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	}
     else if(LLAppViewer::instance()->logoutRequestSent())
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Logout");
 		F32 percent_done = gLogoutTimer.getElapsedTimeF32() * 100.f / gLogoutMaxTime;
 		if (percent_done > 100.f)
 		{
@@ -383,6 +412,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	else
 	if (gRestoreGL)
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Display:RestoreGL");
 		F32 percent_done = gRestoreGLTimer.getElapsedTimeF32() * 100.f / RESTORE_GL_TIME;
 		if( percent_done > 100.f )
 		{
@@ -412,6 +442,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	//
 	//
 
+	LLAppViewer::instance()->pingMainloopTimeout("Display:Camera");
 	LLViewerCamera::getInstance()->setZoomParameters(zoom_factor, subfield);
 	LLViewerCamera::getInstance()->setNear(MIN_NEAR_PLANE);
 
@@ -423,9 +454,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 	if (gDisconnected)
 	{
-		render_ui_and_swap_if_needed();
-		gDisplaySwapBuffers = TRUE;
-		
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Disconnected");
+		render_ui_and_swap();
 		render_disconnected_background();
 	}
 	
@@ -434,6 +464,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	// Set rendering options
 	//
 	//
+	LLAppViewer::instance()->pingMainloopTimeout("Display:RenderSetup");
 	stop_glerror();
 	if (gSavedSettings.getBOOL("ShowDepthBuffer"))
 	{
@@ -462,10 +493,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	// do render-to-texture stuff here
 	if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_DYNAMIC_TEXTURES))
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Display:DynamicTextures");
 		LLFastTimer t(LLFastTimer::FTM_UPDATE_TEXTURES);
 		if (LLDynamicTexture::updateAllInstances())
 		{
-			glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+			gGL.setColorMask(true, true);
 			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 		}
 	}
@@ -474,6 +506,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	
 	if (!gDisconnected)
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Update");
 		if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
 		{ //don't draw hud objects in this frame
 			gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD);
@@ -511,9 +544,12 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 			}
 		}
 
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Cull");
+		
 		//Increment drawable frame counter
 		LLDrawable::incrementVisible();
 
+		LLSpatialGroup::sNoDelete = TRUE;
 		LLPipeline::sUseOcclusion = 
 				(!gUseWireframe
 				&& LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion") 
@@ -524,10 +560,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		LLVOAvatar::sMaxVisible = gSavedSettings.getS32("RenderAvatarMaxVisible");
 		
 		S32 occlusion = LLPipeline::sUseOcclusion;
-		if (!gDisplaySwapBuffers)
+		if (gDepthDirty)
 		{ //depth buffer is invalid, don't overwrite occlusion state
 			LLPipeline::sUseOcclusion = llmin(occlusion, 1);
 		}
+		gDepthDirty = FALSE;
 
 		static LLCullResult result;
 		gPipeline.updateCull(*LLViewerCamera::getInstance(), result, water_clip);
@@ -537,6 +574,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 						gPipeline.canUseVertexShaders() &&
 						LLPipeline::sRenderGlow;
 
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Swap");
+		
 		// now do the swap buffer (just before rendering to framebuffer)
 		{ //swap and flush state from previous frame
 			{
@@ -550,14 +589,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 				gPipeline.resizeScreenTexture();
 			}
 
-			glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+			gGL.setColorMask(true, true);
 			glClearColor(0,0,0,0);
 			
 			if (!for_snapshot)
 			{
-				render_ui_and_swap_if_needed();
-				gDisplaySwapBuffers = TRUE;
-				
 				glh::matrix4f proj = glh_get_current_projection();
 				glh::matrix4f mod = glh_get_current_modelview();
 				glViewport(0,0,512,512);
@@ -576,6 +612,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 		if (!for_snapshot)
 		{
+			LLAppViewer::instance()->pingMainloopTimeout("Display:Imagery");
 			gPipeline.processImagery(*LLViewerCamera::getInstance());
 			gPipeline.generateWaterReflection(*LLViewerCamera::getInstance());
 		}
@@ -587,6 +624,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		// Can put objects onto the retextured list.
 		//
 		// Doing this here gives hardware occlusion queries extra time to complete
+		LLAppViewer::instance()->pingMainloopTimeout("Display:UpdateImages");
 		gFrameStats.start(LLFrameStats::IMAGE_UPDATE);
 
 		{
@@ -610,6 +648,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		// In the case of alpha objects, z-sorts them first.
 		// Also creates special lists for outlines and selected face rendering.
 		//
+		LLAppViewer::instance()->pingMainloopTimeout("Display:StateSort");
 		{
 			gFrameStats.start(LLFrameStats::STATE_SORT);
 			gPipeline.stateSort(*LLViewerCamera::getInstance(), result);
@@ -631,6 +670,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		LLPipeline::sUseOcclusion = occlusion;
 
 		{
+			LLAppViewer::instance()->pingMainloopTimeout("Display:Sky");
 			LLFastTimer t(LLFastTimer::FTM_UPDATE_SKY);	
 			gSky.updateSky();
 		}
@@ -642,6 +682,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 			glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 		}
 
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Render");
+		
 		//// render frontmost floater opaque for occlusion culling purposes
 		//LLFloater* frontmost_floaterp = gFloaterView->getFrontmost();
 		//// assumes frontmost floater with focus is opaque
@@ -681,20 +723,20 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 		if (to_texture)
 		{
-			glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+			gGL.setColorMask(true, true);
 			gPipeline.mScreen.bindTarget();
 			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-			glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+			gGL.setColorMask(true, false);
 		}
 
 		if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot())
 				&& !gRestoreGL)
 		{
-			glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+			gGL.setColorMask(true, false);
 			LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
 			gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE);
 			LLPipeline::sUnderWaterRender = FALSE;
-			glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+			gGL.setColorMask(true, true);
 
 			//store this frame's modelview matrix for use
 			//when rendering next frame's occlusion queries
@@ -715,11 +757,19 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		/// 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->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
+
+		if (!for_snapshot)
+		{
+			render_ui_and_swap();
+		}
+
+		LLSpatialGroup::sNoDelete = FALSE;
 	}
 	gFrameStats.start(LLFrameStats::RENDER_UI);
 
 	if (gHandleKeysAsync)
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Display:Keystrokes");
 		process_keystrokes_async();
 		stop_glerror();
 	}
@@ -732,6 +782,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		send_agent_resume();
 		LLPipeline::sRenderFrameTest = FALSE;
 	}
+
+	display_stats();
+				
+	LLAppViewer::instance()->pingMainloopTimeout("Display:Done");
 }
 
 void render_hud_attachments()
@@ -926,19 +980,13 @@ void render_ui_and_swap()
 
 	glh_set_current_modelview(saved_view);
 	glPopMatrix();
-}
 
-void render_ui_and_swap_if_needed()
-{
 	if (gDisplaySwapBuffers)
 	{
-		render_ui_and_swap();
-		
-		{
-			LLFastTimer t(LLFastTimer::FTM_SWAP);
-			gViewerWindow->mWindow->swapBuffers();
-		}
+		LLFastTimer t(LLFastTimer::FTM_SWAP);
+		gViewerWindow->mWindow->swapBuffers();
 	}
+	gDisplaySwapBuffers = TRUE;
 }
 
 void renderCoordinateAxes()
@@ -1073,7 +1121,7 @@ void render_ui_2d()
 	}
 
 	stop_glerror();
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 	// render outline for HUD
 	if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->mHUDCurZoom < 0.98f)
@@ -1100,7 +1148,6 @@ void render_ui_2d()
 	LLFontGL::sCurOrigin.set(0, 0);
 }
 
-
 void render_disconnected_background()
 {
 	gGL.color4f(1,1,1,1);
diff --git a/indra/newview/llviewerdisplay.h b/indra/newview/llviewerdisplay.h
index 2190021fe4d9da51747d2bd6c8fd54cb84c37681..b97f75b2331c7cb4bc9b61b12c873fd5d480607f 100644
--- a/indra/newview/llviewerdisplay.h
+++ b/indra/newview/llviewerdisplay.h
@@ -40,6 +40,7 @@ void display_cleanup();
 void display(BOOL rebuild = TRUE, F32 zoom_factor = 1.f, int subfield = 0, BOOL for_snapshot = FALSE);
 
 extern BOOL gDisplaySwapBuffers;
+extern BOOL gDepthDirty;
 extern BOOL	gTeleportDisplay;
 extern LLFrameTimer	gTeleportDisplayTimer;
 extern BOOL			gForceRenderLandFence;
diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp
index 9bf392249eda154b34f3b8c3ceb1b12ac14e71cb..176bf9273aa213608cffa7d298dfec6df04224d2 100644
--- a/indra/newview/llviewerjoint.cpp
+++ b/indra/newview/llviewerjoint.cpp
@@ -37,7 +37,7 @@
 #include "llviewerjoint.h"
 
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llmath.h"
 #include "llglheaders.h"
 #include "llrendersphere.h"
@@ -272,12 +272,12 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass )
 					triangle_count += drawShape( pixelArea, first_pass);
 				}
 				// second pass writes to z buffer only
-				glColorMask(FALSE, FALSE, FALSE, FALSE);
+				gGL.setColorMask(false, false);
 				{
 					triangle_count += drawShape( pixelArea, FALSE );
 				}
 				// third past respects z buffer and writes color
-				glColorMask(TRUE, TRUE, TRUE, FALSE);
+				gGL.setColorMask(true, false);
 				{
 					LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
 					triangle_count += drawShape( pixelArea, FALSE );
diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp
index 9e5c207f7dab5161979c6148b8d856b767294a7f..ce61c3a2cd89e773a099a4f4f8fd7828cd4ca36c 100644
--- a/indra/newview/llviewerjointattachment.cpp
+++ b/indra/newview/llviewerjointattachment.cpp
@@ -38,7 +38,7 @@
 #include "llviewercontrol.h"
 #include "lldrawable.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "llvoavatar.h"
 #include "llvolume.h"
 #include "pipeline.h"
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index 19035e8fc803f96b2aaf82c8c05dc47984f4c5a7..d6032118c9f9ca352d7b9b5f8d76304ef9eced0b 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -36,6 +36,7 @@
 
 #include "imageids.h"
 #include "llfasttimer.h"
+#include "llrender.h"
 
 #include "llagent.h"
 #include "llapr.h"
@@ -545,17 +546,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
 		else
 		{
 			glColor4f(0.7f, 0.6f, 0.3f, 1.f);
-			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-			glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_INTERPOLATE_ARB);
-
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS_ARB);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,		GL_TEXTURE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB,		GL_SRC_COLOR);
-			
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB,		GL_TEXTURE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB,		GL_ONE_MINUS_SRC_ALPHA);
+			gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_LERP_TEX_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
 		}
 	}
 	else if( mLayerSet )
@@ -573,12 +564,10 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
 	else
 	if ( mTexture.notNull() )
 	{
-		mTexture->bind();
-		if (!mTexture->getClampS()) {
-			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-		}
-		if (!mTexture->getClampT()) {
-			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+		if (!mTexture->getClampS() || !mTexture->getClampT())
+		{
+			mTexture->bind();
+			mTexture->overrideClamp (TRUE, TRUE);
 		}
 	}
 	else
@@ -590,15 +579,8 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
 	{
 		if (isTransparent())
 		{
-			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-			glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_MODULATE);
-
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PREVIOUS_ARB);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);  // GL_TEXTURE_ENV_COLOR is set in renderPass1
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
+			gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+			gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
 		}
 		else
 		{
@@ -639,16 +621,13 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
 	
 	if (mTestImageName)
 	{
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 	}
 
-	if (mTexture.notNull()) {
-		if (!mTexture->getClampS()) {
-			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-		}
-		if (!mTexture->getClampT()) {
-			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-		}
+	if (mTexture.notNull())
+	{
+		mTexture->bind();
+		mTexture->restoreClamp();
 	}
 
 	return triangle_count;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 060b69db748b93bd5025b993b74ad8ab5dd49db9..645499d9430cc8e17cd7b8e1f171cae8e98533fc 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -700,7 +700,7 @@ void init_menus()
 	gPopupMenuView->setBackgroundColor( color );
 
 	// If we are not in production, use a different color to make it apparent.
-	if (LLAppViewer::instance()->isInProductionGrid())
+	if (LLViewerLogin::getInstance()->isInProductionGrid())
 	{
 		color = gColors.getColor( "MenuBarBgColor" );
 	}
@@ -722,7 +722,7 @@ void init_menus()
 	gViewerWindow->getRootView()->addChild(gMenuHolder);
    
     gViewerWindow->setMenuBackgroundColor(false, 
-        LLAppViewer::instance()->isInProductionGrid());
+        LLViewerLogin::getInstance()->isInProductionGrid());
 
 	// *TODO:Get the cost info from the server
 	const LLString upload_cost("10");
@@ -969,7 +969,7 @@ void init_client_menu(LLMenuGL* menu)
 
 
 #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-	if (!LLAppViewer::instance()->isInProductionGrid())
+	if (!LLViewerLogin::getInstance()->isInProductionGrid())
 	{
 		menu->append(new LLMenuItemCheckGL("Hacked Godmode",
 										   &handle_toggle_hacked_godmode,
@@ -1191,7 +1191,7 @@ void init_debug_ui_menu(LLMenuGL* menu)
 	menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
 	menu->append(new LLMenuItemCallGL( "Print Selected Object Info",	&print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
 	menu->append(new LLMenuItemCallGL( "Print Agent Info",			&print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
-	menu->append(new LLMenuItemCallGL( "Texture Memory Stats",  &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
+	menu->append(new LLMenuItemCallGL( "Memory Stats",  &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
 	menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot", 
 		menu_toggle_control, NULL, menu_check_control, 
 		(void*)"DoubleClickAutoPilot"));
@@ -1498,6 +1498,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
 
 	menu->appendMenu(sub_menu);
 
+	menu->append(new LLMenuItemCheckGL("Enable Lip Sync (Beta)", menu_toggle_control, NULL, menu_check_control, (void*)"LipSyncEnabled"));
 	menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun));
 	menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL));
 	menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL));
@@ -2762,7 +2763,7 @@ void set_god_level(U8 god_level)
     if(gViewerWindow)
     {
         gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT,
-            LLAppViewer::instance()->isInProductionGrid());
+            LLViewerLogin::getInstance()->isInProductionGrid());
     }
 
     LLString::format_map_t args;
@@ -4099,7 +4100,7 @@ BOOL enable_take()
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLAppViewer::instance()->isInProductionGrid() 
+		if (!LLViewerLogin::getInstance()->isInProductionGrid() 
             && gAgent.isGodlike())
 		{
 			return TRUE;
@@ -4656,7 +4657,7 @@ class LLObjectEnableDelete : public view_listener_t
 			TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-			(!LLAppViewer::instance()->isInProductionGrid()
+			(!LLViewerLogin::getInstance()->isInProductionGrid()
              && gAgent.isGodlike()) ||
 # endif
 			LLSelectMgr::getInstance()->canDoDelete();
@@ -6514,7 +6515,7 @@ class LLToolsEnableTakeCopy : public view_listener_t
 			all_valid = true;
 #ifndef HACKED_GODLIKE_VIEWER
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-			if (LLAppViewer::instance()->isInProductionGrid()
+			if (LLViewerLogin::getInstance()->isInProductionGrid()
                 || !gAgent.isGodlike())
 # endif
 			{
@@ -6618,7 +6619,7 @@ BOOL enable_save_into_inventory(void*)
 	return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-	if (!LLAppViewer::instance()->isInProductionGrid()
+	if (!LLViewerLogin::getInstance()->isInProductionGrid()
         && gAgent.isGodlike())
 	{
 		return TRUE;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 477f6c35c126ee5dbbf8a0a7afab4a4521cacf24..4c8e75016cfc97512549d4f64e24a9e29eeb6b19 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5194,10 +5194,12 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
 	msg->getVector3("Data", "SimPosition", pos);
 	msg->getVector3("Data", "LookAt", look_at);
 
-	// gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
-	// LLFloaterWorldMap::show(NULL, TRUE);
+	gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
+	LLFloaterWorldMap::show(NULL, TRUE);
 
-	LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
+	// remove above two lines and replace with below line
+	// to re-enable parcel browser for llMapDestination()
+	// LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
 	
 }
 
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index b0ebc64b7a58d369c6979f7035526fa824d4dd15..fed98d5daafb453a79c818deb275517281bd132c 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -33,8 +33,17 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llviewernetwork.h"
+#include "llviewercontrol.h"
 
-LLGridData gGridInfo[GRID_INFO_COUNT] = 
+struct LLGridData
+{
+	const char* mLabel;
+	const char* mName;
+	const char* mLoginURI;
+	const char* mHelperURI;
+};
+
+static LLGridData gGridInfo[GRID_INFO_COUNT] = 
 {
 	{ "None", "", "", ""},
 	{ "Aditi", 
@@ -111,8 +120,192 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =
 	  "" }
 };
 
-// Use this to figure out which domain name and login URI to use.
+#if LL_RELEASE_FOR_DOWNLOAD
+	// Default userserver for production builds is agni
+	const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_AGNI;
+#else
+	// Default userserver for development builds is none
+	const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_NONE;
+#endif
 
-EGridInfo gGridChoice = GRID_INFO_NONE;
-LLString gGridName;		/* Flawfinder: ignore */
 unsigned char gMACAddress[MAC_ADDRESS_BYTES];		/* Flawfinder: ignore */
+
+LLViewerLogin::LLViewerLogin() :
+	mGridChoice(DEFAULT_GRID_CHOICE)
+{
+}
+
+void LLViewerLogin::setGridChoice(EGridInfo grid)
+{	
+	if(grid < 0 || grid >= GRID_INFO_COUNT)
+	{
+		llerrs << "Invalid grid index specified." << llendl;
+	}
+
+	if(mGridChoice != grid)
+	{
+		mGridChoice = grid;
+		if(GRID_INFO_LOCAL == mGridChoice)
+		{
+			mGridName = LOOPBACK_ADDRESS_STRING;
+		}
+		else if(GRID_INFO_OTHER == mGridChoice)
+		{
+			// *FIX:Mani - could this possibly be valid?
+			mGridName = "other"; 
+		}
+		else
+		{
+			mGridName = gGridInfo[mGridChoice].mLabel;
+		}
+
+		gSavedSettings.setS32("ServerChoice", mGridChoice);
+		gSavedSettings.setString("CustomServer", "");
+	}
+}
+
+void LLViewerLogin::setGridChoice(const std::string& grid_name)
+{
+	// Set the grid choice based on a string.
+	// The string can be:
+	// - a grid label from the gGridInfo table 
+	// - an ip address
+    if(!grid_name.empty())
+    {
+        // find the grid choice from the user setting.
+        int grid_index = GRID_INFO_NONE; 
+        for(;grid_index < GRID_INFO_OTHER; ++grid_index)
+        {
+            if(0 == LLString::compareInsensitive(gGridInfo[grid_index].mLabel, grid_name.c_str()))
+            {
+				// Founding a matching label in the list...
+				setGridChoice((EGridInfo)grid_index);
+				break;
+            }
+        }
+
+        if(GRID_INFO_OTHER == grid_index)
+        {
+            // *FIX:MEP Can and should we validate that this is an IP address?
+            mGridChoice = GRID_INFO_OTHER;
+            mGridName = grid_name;
+			gSavedSettings.setS32("ServerChoice", mGridChoice);
+			gSavedSettings.setString("CustomServer", mGridName);
+        }
+    }
+}
+
+void LLViewerLogin::resetURIs()
+{
+    // Clear URIs when picking a new server
+	gSavedSettings.setValue("CmdLineLoginURI", LLSD::emptyArray());
+	gSavedSettings.setString("CmdLineHelperURI", "");
+}
+
+EGridInfo LLViewerLogin::getGridChoice() const
+{
+	return mGridChoice;
+}
+
+std::string LLViewerLogin::getGridLabel() const
+{
+	if(mGridChoice == GRID_INFO_NONE)
+	{
+		return "None";
+	}
+	else if(mGridChoice < GRID_INFO_OTHER)
+	{
+		return gGridInfo[mGridChoice].mLabel;
+	}
+
+	return mGridName;
+}
+
+std::string LLViewerLogin::getKnownGridLabel(EGridInfo grid_index) const
+{
+	if(grid_index > GRID_INFO_NONE && grid_index < GRID_INFO_OTHER)
+	{
+		return gGridInfo[grid_index].mLabel;
+	}
+	return gGridInfo[GRID_INFO_NONE].mLabel;
+}
+
+void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const
+{
+	// return the login uri set on the command line.
+	LLControlVariable* c = gSavedSettings.getControl("CmdLineLoginURI");
+	if(c)
+	{
+		LLSD v = c->getValue();
+		if(v.isArray())
+		{
+			for(LLSD::array_const_iterator itr = v.beginArray();
+				itr != v.endArray(); ++itr)
+			{
+				std::string uri = itr->asString();
+				if(!uri.empty())
+				{
+					uris.push_back(uri);
+				}
+			}
+		}
+		else
+		{
+			std::string uri = v.asString();
+			if(!uri.empty())
+			{
+				uris.push_back(uri);
+			}
+		}
+	}
+
+	// If there was no command line uri...
+	if(uris.empty())
+	{
+		// If its a known grid choice, get the uri from the table,
+		// else try the grid name.
+		if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER)
+		{
+			uris.push_back(gGridInfo[mGridChoice].mLoginURI);
+		}
+		else
+		{
+			uris.push_back(mGridName);
+		}
+	}
+}
+
+std::string LLViewerLogin::getHelperURI() const
+{
+	std::string helper_uri = gSavedSettings.getString("CmdLineHelperURI");
+	if (helper_uri.empty())
+	{
+		// grab URI from selected grid
+		if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER)
+		{
+			helper_uri = gGridInfo[mGridChoice].mHelperURI;
+		}
+
+		if (helper_uri.empty())
+		{
+			// what do we do with unnamed/miscellaneous grids?
+			// for now, operations that rely on the helper URI (currency/land purchasing) will fail
+		}
+	}
+	return helper_uri;
+}
+
+bool LLViewerLogin::isInProductionGrid()
+{
+	// *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);
+	LLString::toLower(uris[0]);
+	if((uris[0].find("agni") != std::string::npos))
+	{
+		return true;
+	}
+
+	return false;
+}
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index 4e6c87492185867e2f42953ccf5c1ccbe82354e6..05bb703bbb064b691a8050e73746b2f354bae544 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -59,18 +59,44 @@ enum EGridInfo
 	GRID_INFO_COUNT
 };
 
-
-struct LLGridData
+/**
+ * @brief A class to manage the viewer's login state.
+ * 
+ **/
+class LLViewerLogin : public LLSingleton<LLViewerLogin>
 {
-	const char* mLabel;
-	const char* mName;
-	const char* mLoginURI;
-	const char* mHelperURI;
-};
+public:
+	LLViewerLogin();
+
+	void setGridChoice(EGridInfo grid);
+	void setGridChoice(const std::string& grid_name);
+	void resetURIs();
+
+	/**
+	* @brief Get the enumeration of the grid choice.
+	* Should only return values > 0 && < GRID_INFO_COUNT
+	**/
+	EGridInfo getGridChoice() const;
 
-extern EGridInfo gGridChoice;
-extern LLGridData gGridInfo[];
-extern LLString gGridName;		/* Flawfinder: ignore */
+	/**
+	* @brief Get a readable label for the grid choice.
+	* Returns the readable name for the grid choice. 
+	* If the grid is 'other', returns something
+	* the string used to specifiy the grid.
+	**/
+	std::string getGridLabel() const; 
+
+	std::string getKnownGridLabel(EGridInfo grid_index) const; 
+
+	void getLoginURIs(std::vector<std::string>& uris) const;
+	std::string getHelperURI() const;
+
+	bool isInProductionGrid();
+
+private:
+	EGridInfo mGridChoice;
+	std::string mGridName;
+};
 
 const S32 MAC_ADDRESS_BYTES = 6;
 extern unsigned char gMACAddress[MAC_ADDRESS_BYTES];		/* Flawfinder: ignore */
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index af662d92aa6dee320fc6b0d14c6163eec83a9c3a..3a501a9045847757482f37be1ccad5165bc0bd7f 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -94,7 +94,7 @@
 #include "llworld.h"
 #include "llui.h"
 #include "pipeline.h"
-#include "llappviewer.h"
+#include "llviewernetwork.h"
 #include "llvowlsky.h"
 
 //#define DEBUG_UPDATE_TYPE
@@ -292,7 +292,7 @@ void LLViewerObject::markDead()
 		LLViewerObject *childp;
 		while (mChildList.size() > 0)
 		{
-			childp = mChildList[0];
+			childp = mChildList.back();
 			if (childp->getPCode() != LL_PCODE_LEGACY_AVATAR)
 			{
 				//llinfos << "Marking child " << childp->getLocalID() << " as dead." << llendl;
@@ -307,7 +307,7 @@ void LLViewerObject::markDead()
 				((LLVOAvatar*)childp)->getOffObject();
 				childp->setParent(NULL); // LLViewerObject::markDead 2
 			}
-			mChildList.erase(mChildList.begin());
+			mChildList.pop_back();
 		}
 
 		if (mDrawable.notNull())
@@ -4217,13 +4217,15 @@ void LLViewerObject::updateDrawable(BOOL force_damped)
 	{
 		BOOL damped_motion = 
 			!isChanged(SHIFTED) &&										// not shifted between regions this frame and...
-				(force_damped ||										// ...forced into damped motion by application logic or...
-					(!isSelected() &&									// ...not selected and...
-					(mDrawable->isRoot() ||								// ... is root or ...
-					!((LLViewerObject*)getParent())->isSelected()) &&	// ... parent is not selected and ...
+			(	force_damped ||										// ...forced into damped motion by application logic or...
+				(	!isSelected() &&									// ...not selected and...
+					(	mDrawable->isRoot() ||								// ... is root or ...
+						(getParent() && !((LLViewerObject*)getParent())->isSelected())// ... parent is not selected and ...
+					) &&	
 					getPCode() == LL_PCODE_VOLUME &&					// ...is a volume object and...
 					getVelocity().isExactlyZero() &&					// ...is not moving physically and...
-					mDrawable->getGeneration() != -1)					// ...was not created this frame.
+					mDrawable->getGeneration() != -1                    // ...was not created this frame.
+				)					
 			);
 		gPipeline.markMoved(mDrawable, damped_motion);
 	}
@@ -4570,7 +4572,7 @@ BOOL LLViewerObject::permYouOwner() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLAppViewer::instance()->isInProductionGrid()
+		if (!LLViewerLogin::getInstance()->isInProductionGrid()
             && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
@@ -4607,7 +4609,7 @@ BOOL LLViewerObject::permOwnerModify() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLAppViewer::instance()->isInProductionGrid()
+		if (!LLViewerLogin::getInstance()->isInProductionGrid()
             && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 	{
 			return TRUE;
@@ -4631,7 +4633,7 @@ BOOL LLViewerObject::permModify() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLAppViewer::instance()->isInProductionGrid()
+		if (!LLViewerLogin::getInstance()->isInProductionGrid()
             && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 	{
 			return TRUE;
@@ -4655,7 +4657,7 @@ BOOL LLViewerObject::permCopy() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLAppViewer::instance()->isInProductionGrid()
+		if (!LLViewerLogin::getInstance()->isInProductionGrid()
             && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
@@ -4679,7 +4681,7 @@ BOOL LLViewerObject::permMove() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLAppViewer::instance()->isInProductionGrid()
+		if (!LLViewerLogin::getInstance()->isInProductionGrid()
             && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
@@ -4703,7 +4705,7 @@ BOOL LLViewerObject::permTransfer() const
 		return TRUE;
 #else
 # ifdef TOGGLE_HACKED_GODLIKE_VIEWER
-		if (!LLAppViewer::instance()->isInProductionGrid()
+		if (!LLViewerLogin::getInstance()->isInProductionGrid()
             && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
 		{
 			return TRUE;
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 7a6f87e019f13c188030d075ca5e6ac809262e72..2345b4ea06d044544d07b25f23d26b76a2ce3e6a 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -36,7 +36,7 @@
 #include "message.h"
 #include "timing.h"
 #include "llfasttimer.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llviewercontrol.h"
 #include "llface.h"
@@ -685,6 +685,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
 			idle_iter != idle_list.end(); idle_iter++)
 		{
 			objectp = *idle_iter;
+			llassert_always(objectp) ;
 			if (!objectp->idleUpdate(agent, world, frame_time))
 			{
 				//  If Idle Update returns false, kill object!
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 0259d4896c65b70e9e30691704863dfacd07c5a7..ba6a6005bf9828416f49faec7b2e6bc3c3d2ff86 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -100,15 +100,17 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
 		// we have a player
 		if (parcel)
 		{
-			// we're in a parcel
-			bool new_parcel = false;
-			S32 parcelid = parcel->getLocalID();
-			
 			if(!gAgent.getRegion())
 			{
-				llerrs << "gAgent's region is NULL." << llendl ;				
+				sMediaRegionID = LLUUID() ;
+				stop() ;
+				return ;				
 			}
 
+			// we're in a parcel
+			bool new_parcel = false;
+			S32 parcelid = parcel->getLocalID();						
+
 			LLUUID regionid = gAgent.getRegion()->getRegionID();
 			if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
 			{
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
index 342d8c7222577c5f856903f9c7929102b55679c5..2b056a258351255c53ce9c8109917b5f911bc084 100644
--- a/indra/newview/llviewerparceloverlay.cpp
+++ b/indra/newview/llviewerparceloverlay.cpp
@@ -36,7 +36,7 @@
 // indra includes
 #include "llparcel.h"
 #include "llgl.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "v4color.h"
 #include "v2math.h"
 
@@ -71,7 +71,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_
 	mTexture = new LLImageGL(FALSE);
 	mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS);
 	mTexture->createGLTexture(0, mImageRaw);
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	gGL.getTexUnit(0)->activate();
 	mTexture->bind(0);
 	mTexture->setClamp(TRUE, TRUE);
 	mTexture->setMipFilterNearest(TRUE);
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index f5ea73f1fc8bf2747c9646b3dc84ea3c1886f257..b847f4d04cc82965036af67abd4e3a8519f09cbb 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -76,7 +76,74 @@ extern BOOL gNoRender;
 const F32 WATER_TEXTURE_SCALE = 8.f;			//  Number of times to repeat the water texture across a region
 const S16 MAX_MAP_DIST = 10;
 
+class BaseCapabilitiesComplete : public LLHTTPClient::Responder
+{
+	LOG_CLASS(BaseCapabilitiesComplete);
+public:
+    BaseCapabilitiesComplete(LLViewerRegion* region)
+		: mRegion(region)
+    { }
+	virtual ~BaseCapabilitiesComplete()
+	{
+		if(mRegion)
+		{
+			mRegion->setHttpResponderPtrNULL() ;
+		}
+	}
 
+	void setRegion(LLViewerRegion* region)
+	{
+		mRegion = region ;
+	}
+
+    void error(U32 statusNum, const std::string& reason)
+    {
+		LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
+		
+		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+		{
+			LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+		}
+    }
+
+    void result(const LLSD& content)
+    {
+		if(!mRegion || this != mRegion->getHttpResponderPtr())//region is removed or responder is not created.
+		{
+			return ;
+		}
+
+		LLSD::map_const_iterator iter;
+		for(iter = content.beginMap(); iter != content.endMap(); ++iter)
+		{
+			mRegion->setCapability(iter->first, iter->second);
+			LL_DEBUGS2("AppInit", "Capabilities") << "got capability for " 
+				<< iter->first << LL_ENDL;
+
+			/* HACK we're waiting for the ServerReleaseNotes */
+			if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage))
+			{
+				LLFloaterReleaseMsg::show();
+				LLFloaterReleaseMsg::sDisplayMessage = false;
+			}
+		}
+		
+		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+		{
+			LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+		}
+	}
+
+    static boost::intrusive_ptr<BaseCapabilitiesComplete> build(
+								LLViewerRegion* region)
+    {
+		return boost::intrusive_ptr<BaseCapabilitiesComplete>(
+							 new BaseCapabilitiesComplete(region));
+    }
+
+private:
+	LLViewerRegion* mRegion;
+};
 
 
 LLViewerRegion::LLViewerRegion(const U64 &handle,
@@ -103,7 +170,6 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
 	mEventPoll(NULL)
 {
 	mWidth = region_width_meters;
-
 	mOriginGlobal = from_region_handle(handle); 
 	updateRenderMatrix();
 
@@ -170,10 +236,13 @@ void LLViewerRegion::initStats()
 	mAlive = FALSE;					// can become false if circuit disconnects
 }
 
-
-
 LLViewerRegion::~LLViewerRegion() 
 {
+	if(mHttpResponderPtr)
+	{
+		(static_cast<BaseCapabilitiesComplete*>(mHttpResponderPtr.get()))->setRegion(NULL) ;
+	}
+
 	gVLManager.cleanupData(this);
 	// Can't do this on destruction, because the neighbor pointers might be invalid.
 	// This should be reference counted...
@@ -1303,87 +1372,6 @@ void LLViewerRegion::unpackRegionHandshake()
 	msg->sendReliable(host);
 }
 
-
-
-class BaseCapabilitiesComplete : public LLHTTPClient::Responder
-{
-	LOG_CLASS(BaseCapabilitiesComplete);
-public:
-    BaseCapabilitiesComplete(LLViewerRegion* region, LLSD requestedCaps)
-		: mRegion(region),
-		  mRequestedCaps(requestedCaps)
-    { }
-
-    void error(U32 statusNum, const std::string& reason)
-    {
-		LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
-		
-		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
-		{
-			LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
-		}
-    }
-
-    void result(const LLSD& content)
-    {
-		LLSD::map_const_iterator iter;
-		
-		for(iter = content.beginMap(); iter != content.endMap(); ++iter)
-		{
-			if (iter->second.asString().empty())
-			{
-				llwarns << "BaseCapabilitiesComplete::result EMPTY capability "
-						<< iter->first << llendl;
-				continue;
-			}
-
-			mRegion->setCapability(iter->first, iter->second);
-			LL_DEBUGS2("AppInit", "Capabilities") << "got capability for " 
-				<< iter->first << LL_ENDL;
-
-			/* HACK we're waiting for the ServerReleaseNotes */
-			if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage))
-			{
-				LLFloaterReleaseMsg::show();
-				LLFloaterReleaseMsg::sDisplayMessage = false;
-			}
-		}
-		
-		LLSD::array_const_iterator fail;
-		for (fail = mRequestedCaps.beginArray();
-			 fail != mRequestedCaps.endArray();
-			 ++fail)
-		{
-			std::string cap = fail->asString();
-			
-			if (mRegion->getCapability(cap).empty() &&
-				!LLViewerRegion::isSpecialCapabilityName(cap))
-			{
-				llwarns << "BaseCapabilitiesComplete::result FAILED to get "
-						<< "capability " << cap << llendl;
-			}
-		}
-		
-		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
-		{
-			LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
-		}
-	}
-
-    static boost::intrusive_ptr<BaseCapabilitiesComplete> build(
-		LLViewerRegion* region,
-		LLSD requestedCaps)
-    {
-		return boost::intrusive_ptr<BaseCapabilitiesComplete>(
-			new BaseCapabilitiesComplete(region, requestedCaps));
-    }
-
-private:
-	LLViewerRegion* mRegion;
-	LLSD mRequestedCaps;
-};
-
-
 void LLViewerRegion::setSeedCapability(const std::string& url)
 {
   if (getCapability("Seed") == url)
@@ -1435,8 +1423,8 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 
 	llinfos << "posting to seed " << url << llendl;
 
-	LLHTTPClient::post(url, capabilityNames,
-					   BaseCapabilitiesComplete::build(this, capabilityNames));
+	mHttpResponderPtr = BaseCapabilitiesComplete::build(this) ;
+	LLHTTPClient::post(url, capabilityNames, mHttpResponderPtr);
 }
 
 void LLViewerRegion::setCapability(const std::string& name, const std::string& url)
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index dedeb43523b8539a5e4e370623302b7417112632..d6e5e8320f71e55716ce5464306fa97a1340da8a 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -208,6 +208,9 @@ class LLViewerRegion
 
 	U32	getPacketsLost() const;
 
+	void setHttpResponderPtrNULL() {mHttpResponderPtr = NULL ;}
+	const LLHTTPClient::ResponderPtr getHttpResponderPtr() const {return mHttpResponderPtr ;}
+
 	// Get/set named capability URLs for this region.
 	void setSeedCapability(const std::string& url);
 	void setCapability(const std::string& name, const std::string& url);
@@ -374,6 +377,8 @@ class LLViewerRegion
 private:
 	//spatial partitions for objects in this region
 	std::vector<LLSpatialPartition*> mObjectPartition;
+
+	LLHTTPClient::ResponderPtr  mHttpResponderPtr ;
 };
 
 inline BOOL LLViewerRegion::getAllowDamage() const
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 8f675e66e7d80200fb2e4f041a8e45bf4f380377..8f79253cf30c165a4c37abf34bcaaee6805db76a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -43,7 +43,7 @@
 #include "llviewquery.h"
 #include "llxmltree.h"
 //#include "llviewercamera.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llvoiceclient.h"	// for push-to-talk button handling
 
@@ -182,6 +182,7 @@
 #include "llviewerdisplay.h"
 #include "llspatialpartition.h"
 #include "llviewerjoystick.h"
+#include "llviewernetwork.h"
 
 #if LL_WINDOWS
 #include "llwindebug.h"
@@ -191,12 +192,12 @@
 //
 // Globals
 //
-void render_ui_and_swap_if_needed();
 void render_ui_and_swap();
 LLBottomPanel* gBottomPanel = NULL;
 
 extern BOOL gDebugClicks;
 extern BOOL gDisplaySwapBuffers;
+extern BOOL gDepthDirty;
 extern BOOL gResizeScreenTexture;
 extern S32 gJamesInt;
 
@@ -1638,7 +1639,7 @@ LLViewerWindow::LLViewerWindow(
 
 void LLViewerWindow::initGLDefaults()
 {
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
 
 	F32 ambient[4] = {0.f,0.f,0.f,0.f };
@@ -1656,7 +1657,7 @@ void LLViewerWindow::initGLDefaults()
 
 	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
 	
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 	glCullFace(GL_BACK);
 
@@ -2198,7 +2199,7 @@ void LLViewerWindow::setNormalControlsVisible( BOOL visible )
 
 		// ...and set the menu color appropriately.
 		setMenuBackgroundColor(gAgent.getGodLevel() > GOD_NOT, 
-			LLAppViewer::instance()->isInProductionGrid());
+			LLViewerLogin::getInstance()->isInProductionGrid());
 	}
         
 	if ( gStatusBar )
@@ -2213,15 +2214,15 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)
    	LLString::format_map_t args;
     LLColor4 new_bg_color;
 
-    if(god_mode && LLAppViewer::instance()->isInProductionGrid())
+    if(god_mode && LLViewerLogin::getInstance()->isInProductionGrid())
     {
         new_bg_color = gColors.getColor( "MenuBarGodBgColor" );
     }
-    else if(god_mode && !LLAppViewer::instance()->isInProductionGrid())
+    else if(god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
     {
         new_bg_color = gColors.getColor( "MenuNonProductionGodBgColor" );
     }
-    else if(!god_mode && !LLAppViewer::instance()->isInProductionGrid())
+    else if(!god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
     {
         new_bg_color = gColors.getColor( "MenuNonProductionBgColor" );
     }
@@ -3386,9 +3387,8 @@ void LLViewerWindow::hitObjectOrLandGlobalAsync(S32 x, S32 y_from_bot, MASK mask
 		return;
 	}
 	
-	render_ui_and_swap_if_needed();
 	glClear(GL_DEPTH_BUFFER_BIT);
-	gDisplaySwapBuffers = FALSE;
+	gDepthDirty = TRUE;
 
 	S32 scaled_x = llround((F32)x * mDisplayScale.mV[VX]);
 	S32 scaled_y = llround((F32)y_from_bot * mDisplayScale.mV[VY]);
@@ -3538,7 +3538,7 @@ void LLViewerWindow::hitUIElementAsync(S32 x, S32 y_from_bot, MASK mask, void (*
 	const LLVector2& display_scale = getDisplayScale();
 	glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 	// make viewport big enough to handle antialiased frame buffers
 	glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4);
@@ -4281,7 +4281,8 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p
 	LLRect window_rect = mWindowRect;
 	mWindowRect.set(0, h, w, 0);
 	
-	gDisplaySwapBuffers = FALSE;	
+	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();
@@ -4349,6 +4350,7 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p
 	setup3DRender();
 	setupViewport();
 	gDisplaySwapBuffers = FALSE;
+	gDepthDirty = TRUE;
 
 	// POST SNAPSHOT
 	if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
@@ -4388,7 +4390,6 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	}
 
 	// PRE SNAPSHOT
-	render_ui_and_swap_if_needed();
 	gDisplaySwapBuffers = FALSE;
 	
 	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
@@ -4419,6 +4420,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	LLRect window_rect = mWindowRect;
 	BOOL use_fbo = FALSE;
 
+	LLRenderTarget target;
 	F32 scale_factor = 1.0f ;
 	if(!keep_window_aspect) //image cropping
 	{		
@@ -4427,37 +4429,39 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 		snapshot_height = (S32)(ratio * image_height) ;
 		scale_factor = llmax(1.0f, 1.0f / ratio) ;	
 	}
-
-	LLRenderTarget target;
-	if (gGLManager.mHasFramebufferObject && 
-		(image_width > window_width ||
-		image_height > window_height) &&
-		 !show_ui &&
-		 keep_window_aspect)
-	{
-		GLint max_size = 0;
-		glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &max_size);
-		
-		if (image_width <= max_size && image_height <= max_size)
-		{
-			use_fbo = TRUE;
-			
-			snapshot_width = image_width;
-			snapshot_height = image_height;
-			target.allocate(snapshot_width, snapshot_height, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB, TRUE);
-			window_width = snapshot_width;
-			window_height = snapshot_height;
-			scale_factor = 1.f;
-			mWindowRect.set(0, 0, snapshot_width, snapshot_height);
-			target.bindTarget();			
-		}
-		else //tiling
+	else //the scene(window) proportion needs to be maintained.
+	{
+		if(image_width > window_width || image_height > window_height) //need to enlarge the scene
 		{
-			F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
-			snapshot_width = (S32)(ratio * image_width) ;
-			snapshot_height = (S32)(ratio * image_height) ;
-			scale_factor = llmax(1.0f, 1.0f / ratio) ;	
+			if (gGLManager.mHasFramebufferObject && !show_ui)
+			{
+				GLint max_size = 0;
+				glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &max_size);
+		
+				if (image_width <= max_size && image_height <= max_size) //re-project the scene
+				{
+					use_fbo = TRUE;
+					
+					snapshot_width = image_width;
+					snapshot_height = image_height;
+					target.allocate(snapshot_width, snapshot_height, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB, TRUE);
+					window_width = snapshot_width;
+					window_height = snapshot_height;
+					scale_factor = 1.f;
+					mWindowRect.set(0, 0, snapshot_width, snapshot_height);
+					target.bindTarget();			
+				}
+			}
+
+			if(!use_fbo) //no re-projection, so tiling the scene
+			{
+				F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
+				snapshot_width = (S32)(ratio * image_width) ;
+				snapshot_height = (S32)(ratio * image_height) ;
+				scale_factor = llmax(1.0f, 1.0f / ratio) ;	
+			}
 		}
+		//else: keep the current scene scale, re-scale it if necessary after reading out.
 	}
 	
 	S32 buffer_x_offset = llfloor(((window_width - snapshot_width) * scale_factor) / 2.f);
@@ -4502,6 +4506,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 		for (int subimage_x = 0; subimage_x < scale_factor; ++subimage_x)
 		{
 			gDisplaySwapBuffers = FALSE;
+			gDepthDirty = TRUE;
 			if (type == SNAPSHOT_TYPE_OBJECT_ID)
 			{
 				glClearColor(0.f, 0.f, 0.f, 0.f);
@@ -4585,6 +4590,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 	}
 	gDisplaySwapBuffers = FALSE;
+	gDepthDirty = TRUE;
 
 	// POST SNAPSHOT
 	if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 91c70bd3158a0801b7055f0b0f8c5784325b0bf1..2e001a50c7c2807046751224b35ac55db20fa909 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -37,7 +37,7 @@
 
 #include "llvoavatar.h"
 
-#include "llglimmediate.h"
+#include "llrender.h"
 #include "audioengine.h"
 #include "imageids.h"
 #include "indra_constants.h"
@@ -2750,7 +2750,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()
 void LLVOAvatar::idleUpdateLipSync(bool voice_enabled)
 {
 	// Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync
-	if ( voice_enabled && (gVoiceClient->lipSyncEnabled() > 0) && gVoiceClient->getIsSpeaking( mID ) )
+	if ( voice_enabled && (gVoiceClient->lipSyncEnabled()) && gVoiceClient->getIsSpeaking( mID ) )
 	{
 		F32 ooh_morph_amount = 0.0f;
 		F32 aah_morph_amount = 0.0f;
@@ -4158,23 +4158,23 @@ U32 LLVOAvatar::renderTransparent()
 	BOOL first_pass = FALSE;
 	if( isWearingWearableType( WT_SKIRT ) )
 	{
-		glAlphaFunc(GL_GREATER,0.25f);
+		gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.25f);
 		num_indices += mSkirtLOD.render(mAdjustedPixelArea, FALSE);
 		first_pass = FALSE;
-		glAlphaFunc(GL_GREATER,0.01f);
+		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 	}
 
 	if (!mIsSelf || gAgent.needsRenderHead())
 	{
 		if (LLPipeline::sImpostorRender)
 		{
-			glAlphaFunc(GL_GREATER, 0.5f);
+			gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
 		}
 		num_indices += mEyeLashLOD.render(mAdjustedPixelArea, first_pass);
 		num_indices += mHairLOD.render(mAdjustedPixelArea, FALSE);
 		if (LLPipeline::sImpostorRender)
 		{
-			glAlphaFunc(GL_GREATER, 0.01f);
+			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 		}
 	}
 
@@ -4267,7 +4267,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)
 	up *= mImpostorDim.mV[1];
 
 	LLGLEnable test(GL_ALPHA_TEST);
-	glAlphaFunc(GL_GREATER, 0.f);
+	gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
 
 	gGL.color4f(1,1,1,1);
 	gGL.color4ubv(color.mV);
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 4d4808cdffe0bfda00c395d7c062d533e8ec87ac..b3b82d9c79c3c5f67654d3543d04b499d79cc577 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -850,7 +850,7 @@ LLVoiceClient::LLVoiceClient()
 	setCaptureDevice(captureDevice);
 	std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
 	setRenderDevice(renderDevice);
-	mLipSyncEnabled = gSavedSettings.getU32("LipSyncEnabled");
+	mLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
 	
 	mTuningMode = false;
 	mTuningEnergy = 0.0f;
@@ -1033,13 +1033,7 @@ void LLVoiceClient::userAuthorized(const std::string& firstName, const std::stri
 
 	LL_INFOS("Voice") << "name \"" << mAccountDisplayName << "\" , ID " << agentID << LL_ENDL;
 
-	std::string gridname = gGridName;
-	LLString::toLower(gridname);
-	if((gGridChoice == GRID_INFO_AGNI) || 
-		((gGridChoice == GRID_INFO_OTHER) && (gridname.find("agni") != std::string::npos)))
-	{
-		sConnectingToAgni = true;
-	}
+	sConnectingToAgni = LLViewerLogin::getInstance()->isInProductionGrid();
 
 	// MBW -- XXX -- Enable this when the bhd.vivox.com server gets a real ssl cert.	
 	if(sConnectingToAgni)
@@ -3632,12 +3626,12 @@ bool LLVoiceClient::voiceEnabled()
 	return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
 }
 
-void LLVoiceClient::setLipSyncEnabled(U32 enabled)
+void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
 {
 	mLipSyncEnabled = enabled;
 }
 
-U32 LLVoiceClient::lipSyncEnabled()
+BOOL LLVoiceClient::lipSyncEnabled()
 {
 	   
 	if ( mVoiceEnabled && stateDisabled != getState() )
@@ -3646,7 +3640,7 @@ U32 LLVoiceClient::lipSyncEnabled()
 	}
 	else
 	{
-		return 0;
+		return FALSE;
 	}
 }
 
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 3ac5f0cdbf7640c03eb598ced60c998ab2e00eff..8c3637830d53ae8c4620545494d2c48ad85b810a 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -210,8 +210,8 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
 		void setMicGain(F32 volume);
 		void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
 		void setVivoxDebugServerName(std::string &serverName);
-		void setLipSyncEnabled(U32 enabled);
-		U32 lipSyncEnabled();
+		void setLipSyncEnabled(BOOL enabled);
+		BOOL lipSyncEnabled();
 
 		// PTT key triggering
 		void keyDown(KEY key, MASK mask);
@@ -518,7 +518,7 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
 		
 		LLTimer		mUpdateTimer;
 		
-		U32			mLipSyncEnabled;
+		BOOL		mLipSyncEnabled;
 
 		typedef std::set<LLVoiceClientParticipantObserver*> observer_set_t;
 		observer_set_t mObservers;
diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp
index a0286d3e4b5149c06fe6de47d893e562a88ee6e5..40e405a313fa8fb27dde3f634574f64eea785998 100644
--- a/indra/newview/llvoicevisualizer.cpp
+++ b/indra/newview/llvoicevisualizer.cpp
@@ -45,7 +45,7 @@
 #include "llviewerimage.h"
 #include "llviewerimagelist.h"
 #include "llvoiceclient.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 //brent's wave image
 //29de489d-0491-fb00-7dab-f9e686d31e83
@@ -94,7 +94,7 @@ static bool handleVoiceVisualizerPrefsChanged(const LLSD& newvalue)
 // Initialize the statics
 //------------------------------------------------------------------
 bool LLVoiceVisualizer::sPrefsInitialized	= false;
-U32	 LLVoiceVisualizer::sLipSyncEnabled		= 0;
+BOOL LLVoiceVisualizer::sLipSyncEnabled		= FALSE;
 F32* LLVoiceVisualizer::sOoh				= NULL;
 F32* LLVoiceVisualizer::sAah				= NULL;
 U32	 LLVoiceVisualizer::sOohs				= 0;
@@ -225,7 +225,7 @@ void LLVoiceVisualizer::setSpeakingAmplitude( F32 a )
 //---------------------------------------------------
 void LLVoiceVisualizer::setPreferences( )
 {
-	sLipSyncEnabled = gSavedSettings.getU32("LipSyncEnabled");
+	sLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
 	sOohAahRate		= gSavedSettings.getF32("LipSyncOohAahRate");
 
 	std::string oohString = gSavedSettings.getString("LipSyncOoh");
@@ -290,7 +290,7 @@ void LLVoiceVisualizer::lipStringToF32s ( std::string& in_string, F32*& out_F32s
 //--------------------------------------------------------------------------
 void LLVoiceVisualizer::lipSyncOohAah( F32& ooh, F32& aah )
 {
-	if( ( sLipSyncEnabled == 1 ) && mCurrentlySpeaking )
+	if( ( sLipSyncEnabled == TRUE ) && mCurrentlySpeaking )
 	{
 		U32 transfer_index = (U32) (sOohPowerTransfersf * mSpeakingAmplitude);
 		if (transfer_index < 0)
diff --git a/indra/newview/llvoicevisualizer.h b/indra/newview/llvoicevisualizer.h
index bb2ce55d4afac1b0711793cd3d17224e77a7f013..72612d68c6b99ebad2096c83e2cf1c4bdfe62f0b 100644
--- a/indra/newview/llvoicevisualizer.h
+++ b/indra/newview/llvoicevisualizer.h
@@ -141,7 +141,7 @@ class LLVoiceVisualizer : public LLHUDEffect
 	// private static members 
 	//---------------------------------------------------
 
-		static U32	  sLipSyncEnabled;		 // 0 disabled, 1 babble loop
+		static BOOL	  sLipSyncEnabled;		 // 0 disabled, 1 babble loop
 		static bool	  sPrefsInitialized;	 // the first instance will initialize the static members
 		static F32*	  sOoh;					 // the babble loop of amplitudes for the ooh morph
 		static F32*	  sAah;					 // the babble loop of amplitudes for the ooh morph
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index 8915ae799dd216f103e2568f0e3cc0d94f70fe7b..968cc69d3aa044eb066eb5277f73c888920d3eee 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -960,12 +960,12 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)
 	LLStrider<LLColor4U> colors;
 	LLStrider<U16> indices;
 
-	buffer->getVertexStrider(vertices);
-	buffer->getNormalStrider(normals);
-	buffer->getTexCoordStrider(texcoords);
-	buffer->getTexCoord2Strider(texcoords2);
-	buffer->getColorStrider(colors);
-	buffer->getIndexStrider(indices);
+	llassert_always(buffer->getVertexStrider(vertices));
+	llassert_always(buffer->getNormalStrider(normals));
+	llassert_always(buffer->getTexCoordStrider(texcoords));
+	llassert_always(buffer->getTexCoord2Strider(texcoords2));
+	llassert_always(buffer->getColorStrider(colors));
+	llassert_always(buffer->getIndexStrider(indices));
 
 	U32 indices_index = 0;
 	U32 index_offset = 0;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index a440ae2957b0a73a36ad24ce29537e7c8eca22da..011773722596fe409a384d88ba908d8582aa808c 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1841,7 +1841,7 @@ F32 LLVOVolume::getBinRadius()
 		}
 		else
 		{
-			radius = 32.f;
+			radius = llmax(mDrawable->getRadius(), 32.f);
 		}
 	}
 	else
diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp
index ff34fd27beaf8adc6e10c3719ddfb8b8f54d5b6d..27a0155b14a0c3cdd6cf390c273d5245afb61150 100644
--- a/indra/newview/llwatchdog.cpp
+++ b/indra/newview/llwatchdog.cpp
@@ -33,6 +33,8 @@
 #include "llviewerprecompiledheaders.h"
 #include "llwatchdog.h"
 
+const U32 WATCHDOG_SLEEP_TIME_USEC = 1000000;
+
 // This class runs the watchdog timing thread.
 class LLWatchdogTimerThread : public LLThread
 {
@@ -74,6 +76,7 @@ LLWatchdogEntry::LLWatchdogEntry()
 
 LLWatchdogEntry::~LLWatchdogEntry()
 {
+	stop();
 }
 
 void LLWatchdogEntry::start()
@@ -87,8 +90,11 @@ void LLWatchdogEntry::stop()
 }
 
 // LLWatchdogTimeout
+const std::string UNINIT_STRING = "uninitialized";
+
 LLWatchdogTimeout::LLWatchdogTimeout() : 
-	mTimeout(0.0f) 
+	mTimeout(0.0f),
+	mPingState(UNINIT_STRING)
 {
 }
 
@@ -101,35 +107,46 @@ bool LLWatchdogTimeout::isAlive() const
 	return (mTimer.getStarted() && !mTimer.hasExpired()); 
 }
 
+void LLWatchdogTimeout::reset()
+{
+	mTimer.setTimerExpirySec(mTimeout); 
+}
+
 void LLWatchdogTimeout::setTimeout(F32 d) 
 {
 	mTimeout = d;
 }
 
-void LLWatchdogTimeout::start() 
+void LLWatchdogTimeout::start(const std::string& state) 
 {
 	// Order of operation is very impmortant here.
 	// After LLWatchdogEntry::start() is called
 	// LLWatchdogTimeout::isAlive() will be called asynchronously. 
 	mTimer.start(); 
-	mTimer.setTimerExpirySec(mTimeout); 
+	ping(state);
 	LLWatchdogEntry::start();
 }
+
 void LLWatchdogTimeout::stop() 
 {
 	LLWatchdogEntry::stop();
 	mTimer.stop();
 }
 
-void LLWatchdogTimeout::ping() 
+void LLWatchdogTimeout::ping(const std::string& state) 
 { 
-	mTimer.setTimerExpirySec(mTimeout); 
+	if(!state.empty())
+	{
+		mPingState = state;
+	}
+	reset();
 }
 
-// LlWatchdog
+// LLWatchdog
 LLWatchdog::LLWatchdog() :
 	mSuspectsAccessMutex(NULL),
-	mTimer(NULL)
+	mTimer(NULL),
+	mLastClockCount(0)
 {
 }
 
@@ -139,55 +156,112 @@ LLWatchdog::~LLWatchdog()
 
 void LLWatchdog::add(LLWatchdogEntry* e)
 {
-	mSuspectsAccessMutex->lock();
+	lockThread();
 	mSuspects.insert(e);
-	mSuspectsAccessMutex->unlock();
+	unlockThread();
 }
 
 void LLWatchdog::remove(LLWatchdogEntry* e)
 {
-	mSuspectsAccessMutex->lock();
+	lockThread();
     mSuspects.erase(e);
-	mSuspectsAccessMutex->unlock();
+	unlockThread();
 }
 
 void LLWatchdog::init()
 {
-	mSuspectsAccessMutex = new LLMutex(NULL);
-	mTimer = new LLWatchdogTimerThread();
-	mTimer->setSleepTime(1000);
-	mTimer->start();
+	if(!mSuspectsAccessMutex && !mTimer)
+	{
+		mSuspectsAccessMutex = new LLMutex(NULL);
+		mTimer = new LLWatchdogTimerThread();
+		mTimer->setSleepTime(WATCHDOG_SLEEP_TIME_USEC / 1000);
+		mLastClockCount = LLTimer::getTotalTime();
+
+		// mTimer->start() kicks off the thread, any code after
+		// start needs to use the mSuspectsAccessMutex
+		mTimer->start();
+	}
 }
 
 void LLWatchdog::cleanup()
 {
-	mTimer->stop();
-	delete mTimer;
-	delete mSuspectsAccessMutex;
+	if(mTimer)
+	{
+		mTimer->stop();
+		delete mTimer;
+		mTimer = NULL;
+	}
+
+	if(mSuspectsAccessMutex)
+	{
+		delete mSuspectsAccessMutex;
+		mSuspectsAccessMutex = NULL;
+	}
+
+	mLastClockCount = 0;
 }
 
 void LLWatchdog::run()
 {
-	mSuspectsAccessMutex->lock();
+	lockThread();
+
+	// Check the time since the last call to run...
+	// If the time elapsed is two times greater than the regualr sleep time
+	// reset the active timeouts.
+	const U32 TIME_ELAPSED_MULTIPLIER = 2;
+	U64 current_time = LLTimer::getTotalTime();
+	U64 current_run_delta = current_time - mLastClockCount;
+	mLastClockCount = current_time;
 	
-	SuspectsRegistry::iterator result = 
-		std::find_if(mSuspects.begin(), 
+	if(current_run_delta > (WATCHDOG_SLEEP_TIME_USEC * TIME_ELAPSED_MULTIPLIER))
+	{
+		llinfos << "Watchdog thread delayed: resetting entries." << llendl;
+		std::for_each(mSuspects.begin(), 
 			mSuspects.end(), 
-			std::not1(std::mem_fun(&LLWatchdogEntry::isAlive))
+			std::mem_fun(&LLWatchdogEntry::reset)
 			);
-
-	if(result != mSuspects.end())
+	}
+	else
 	{
-		// error!!!
-		mTimer->stop();
+		SuspectsRegistry::iterator result = 
+			std::find_if(mSuspects.begin(), 
+				mSuspects.end(), 
+				std::not1(std::mem_fun(&LLWatchdogEntry::isAlive))
+				);
+
+		if(result != mSuspects.end())
+		{
+			// error!!!
+			if(mTimer)
+			{
+				mTimer->stop();
+			}
 
-		llinfos << "Watchdog detected error:" << llendl;
+			llinfos << "Watchdog detected error:" << llendl;
 #ifdef LL_WINDOWS
-		RaiseException(0,0,0,0);
+			RaiseException(0,0,0,0);
 #else
-		raise(SIGQUIT);
+			raise(SIGQUIT);
 #endif
+		}
+	}
+
+
+	unlockThread();
+}
+
+void LLWatchdog::lockThread()
+{
+	if(mSuspectsAccessMutex != NULL)
+	{
+		mSuspectsAccessMutex->lock();
 	}
+}
 
-	mSuspectsAccessMutex->unlock();
+void LLWatchdog::unlockThread()
+{
+	if(mSuspectsAccessMutex != NULL)
+	{
+		mSuspectsAccessMutex->unlock();
+	}
 }
diff --git a/indra/newview/llwatchdog.h b/indra/newview/llwatchdog.h
index 0d897ca4c91d358f6405a1d9e871a3f8d3b08e9e..0bcf11c3a32cec3084432a1b37a7554edd4d4144 100644
--- a/indra/newview/llwatchdog.h
+++ b/indra/newview/llwatchdog.h
@@ -48,6 +48,7 @@ class LLWatchdogEntry
 	// This may mean that resources used by 
 	// isAlive and other method may need synchronization.
 	virtual bool isAlive() const = 0;
+	virtual void reset() = 0;
 	virtual void start();
 	virtual void stop();
 };
@@ -59,15 +60,18 @@ class LLWatchdogTimeout : public LLWatchdogEntry
 	virtual ~LLWatchdogTimeout();
 
 	/* virtual */ bool isAlive() const;
-	/* virtual */ void start(); 
+	/* virtual */ void reset();
+	/* virtual */ void start(const std::string& state); 
 	/* virtual */ void stop();
 
 	void setTimeout(F32 d);
-	void ping();
+	void ping(const std::string& state);
+	const std::string& getState() {return mPingState; }
 
 private:
 	LLTimer mTimer;
 	F32 mTimeout;
+	std::string mPingState;
 };
 
 class LLWatchdogTimerThread; // Defined in the cpp
@@ -86,10 +90,14 @@ class LLWatchdog : public LLSingleton<LLWatchdog>
 	void cleanup();
     
 private:
+	void lockThread();
+	void unlockThread();
+
 	typedef std::set<LLWatchdogEntry*> SuspectsRegistry;
 	SuspectsRegistry mSuspects;
 	LLMutex* mSuspectsAccessMutex;
 	LLWatchdogTimerThread* mTimer;
+	U64 mLastClockCount;
 };
 
 #endif // LL_LLTHREADWATCHDOG_H
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index a6fbe71d67fdff4122b8d7bc567561938072af21..28538608023c247c39a073074e670cc0db65812d 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -407,7 +407,7 @@ F32 LLWaterParamManager::getFogDensity(void)
 	F32 fogDensity = mCurParams.getFloat("waterFogDensity", err);
 	
 	// modify if we're underwater
-	const F32 water_height = gAgent.getRegion()->getWaterHeight();
+	const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
 	F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
 	if(camera_height <= water_height)
 	{
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index af554e51602646c300138e92d14198fab52d4ce1..f08408847885a818c4f865089e8e3a2c869d4836 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -846,7 +846,7 @@ struct LLWearableSaveData
 void LLWearable::saveNewAsset()
 {
 //	llinfos << "LLWearable::saveNewAsset() type: " << getTypeName() << llendl;
-	//dump();
+	//llinfos << *this << llendl;
 
 	char new_asset_id_string[UUID_STR_LENGTH];		/* Flawfinder: ignore */
 	mAssetID.toString(new_asset_id_string);
@@ -949,31 +949,32 @@ BOOL LLWearable::isMatchedToInventoryItem( LLViewerInventoryItem* item )
 		( mSaleInfo == item->getSaleInfo() );
 }
 
-void LLWearable::dump()
+std::ostream& operator<<(std::ostream &s, const LLWearable &w)
 {
-	llinfos << "wearable " << LLWearable::typeToTypeName( mType ) << llendl;
-	llinfos << "    Name: " << mName << llendl;
-	llinfos << "    Desc: " << mDescription << llendl;
-	//mPermissions
-	//mSaleInfo
+	s << "wearable " << LLWearable::typeToTypeName( w.mType ) << "\n";
+	s << "    Name: " << w.mName << "\n";
+	s << "    Desc: " << w.mDescription << "\n";
+	//w.mPermissions
+	//w.mSaleInfo
 
-	llinfos << "    Params:" << llendl;
-	for (param_map_t::iterator iter = mVisualParamMap.begin();
-		 iter != mVisualParamMap.end(); ++iter)
+	s << "    Params:" << "\n";
+	for (LLWearable::param_map_t::const_iterator iter = w.mVisualParamMap.begin();
+		 iter != w.mVisualParamMap.end(); ++iter)
 	{
 		S32 param_id = iter->first;
 		F32 param_weight = iter->second;
-		llinfos << "        " << param_id << " " << param_weight << llendl;
+		s << "        " << param_id << " " << param_weight << "\n";
 	}
 
-	llinfos << "    Textures:" << llendl;
-	for (te_map_t::iterator iter = mTEMap.begin();
-		 iter != mTEMap.end(); ++iter)
+	s << "    Textures:" << "\n";
+	for (LLWearable::te_map_t::const_iterator iter = w.mTEMap.begin();
+		 iter != w.mTEMap.end(); ++iter)
 	{
 		S32 te = iter->first;
-		LLUUID& image_id = iter->second;
-		llinfos << "        " << te << " " << image_id << llendl;
+		const LLUUID& image_id = iter->second;
+		s << "        " << te << " " << image_id << "\n";
 	}
+	return s;
 }
 
 
diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h
index fb66663fc26c340c3e566d2a6a89a138d9933ea8..059444d9414efe1cdccc2dcfbbfc35b1ae5a447b 100644
--- a/indra/newview/llwearable.h
+++ b/indra/newview/llwearable.h
@@ -118,7 +118,7 @@ class LLWearable
 
 	static void			setCurrentDefinitionVersion( S32 version ) { LLWearable::sCurrentDefinitionVersion = version; }
 
-	void				dump();
+	friend std::ostream& operator<<(std::ostream &s, const LLWearable &w);
 
 private:
 	static S32			sCurrentDefinitionVersion;	// Depends on the current state of the avatar_lad.xml.
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index 3ec5737acf706c593ad2f9706297aa3aaaedaf62..7fca271d3d26c7013fd35837a59644d4736b317c 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -57,13 +57,15 @@ struct LLWearableArrivedData
 		mAssetType( asset_type ),
 		mCallback( asset_arrived_callback ), 
 		mUserdata( userdata ),
-		mName( wearable_name )
+		mName( wearable_name ),
+		mRetries(0)
 		{}
 
 	LLAssetType::EType mAssetType;
 	void	(*mCallback)(LLWearable*, void* userdata);
 	void*	mUserdata;
 	LLString mName;
+	S32	mRetries;
 };
 
 
@@ -99,12 +101,12 @@ void LLWearableList::getAsset( const LLAssetID& assetID, const LLString& wearabl
 // static
 void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID& uuid, void* userdata, S32 status, LLExtStat ext_status )
 {
-	BOOL success = FALSE;
 	LLWearableArrivedData* data = (LLWearableArrivedData*) userdata;
-
+	LLWearable* wearable = NULL; // NULL indicates failure
+	
 	if( !filename )
 	{
-		llinfos << "Bad Wearable Asset: missing file." << llendl;
+		LL_WARNS("Wearable") << "Bad Wearable Asset: missing file." << LL_ENDL;
 	}
 	else
 	if( status >= 0 )
@@ -113,38 +115,16 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
 		LLFILE* fp = LLFile::fopen(filename, "rb");		/*Flawfinder: ignore*/
 		if( !fp )
 		{
-			llinfos << "Bad Wearable Asset: unable to open file: '" << filename << "'" << llendl;
+			LL_WARNS("Wearable") << "Bad Wearable Asset: unable to open file: '" << filename << "'" << LL_ENDL;
 		}
 		else
 		{
-			LLWearable *wearable = new LLWearable(uuid);
-			if( wearable->importFile( fp ) )
-			{
-//				llinfos << "processGetAssetReply()" << llendl;
-//				wearable->dump();
-
-				gWearableList.mList[ uuid ] = wearable;
-				if( data->mCallback )
-				{
-					data->mCallback( wearable, data->mUserdata );
-				}
-				success = TRUE;
-			}
-			else
+			wearable = new LLWearable(uuid);
+			bool res = wearable->importFile( fp );
+			if (!res)
 			{
-				LLString::format_map_t args;
-				// *TODO:translate
-				args["[TYPE]"] = LLAssetType::lookupHumanReadable(data->mAssetType);
-				if (data->mName.empty())
-				{
-					LLNotifyBox::showXml("FailedToLoadWearableUnnamed", args);
-				}
-				else
-				{
-					args["[DESC]"] = data->mName;
-					LLNotifyBox::showXml("FailedToLoadWearable", args);
-				}
 				delete wearable;
+				wearable = NULL;
 			}
 
 			fclose( fp );
@@ -162,44 +142,64 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
 		}
 		LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
 
-		llwarns << "Wearable download failed: " << LLAssetStorage::getErrorString( status ) << " " << uuid << llendl;
+		LL_WARNS("Wearable") << "Wearable download failed: " << LLAssetStorage::getErrorString( status ) << " " << uuid << LL_ENDL;
 		switch( status )
 		{
 		  case LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE:
 		  {
-			  LLString::format_map_t args;
-			  // *TODO:translate
-			  args["[TYPE]"] = LLAssetType::lookupHumanReadable(data->mAssetType);
-			  if (data->mName.empty())
+			  // Fail
+			  break;
+		  }
+		  default:
+		  {
+			  static const S32 MAX_RETRIES = 3;
+			  if (data->mRetries < MAX_RETRIES)
 			  {
-				  LLNotifyBox::showXml("FailedToFindWearableUnnamed", args);
+				  // Try again
+				  data->mRetries++;
+				  gAssetStorage->getAssetData(uuid,
+											  data->mAssetType,
+											  LLWearableList::processGetAssetReply,
+											  userdata);  // re-use instead of deleting.
+				  return;
 			  }
 			  else
 			  {
-				  args["[DESC]"] = data->mName;
-				  LLNotifyBox::showXml("FailedToFindWearable", args);
+				  // Fail
+				  break;
 			  }
-
-			  // Asset does not exist in the database.
-			  // Can't load asset, so return NULL
-			  if( data->mCallback )
-			  {
-				  data->mCallback( NULL, data->mUserdata );
-			  }
-			  break;
-		  }
-		  default:
-		  {
-			  // Try again
-			  gAssetStorage->getAssetData(uuid,
-										  data->mAssetType,
-										  LLWearableList::processGetAssetReply,
-										  userdata);  // re-use instead of deleting.
-			  return;
 		  }
 		}
 	}
 
+	if (wearable) // success
+	{
+		gWearableList.mList[ uuid ] = wearable;
+		LL_DEBUGS("Wearable") << "processGetAssetReply()" << LL_ENDL;
+		LL_DEBUGS("Wearable") << wearable << LL_ENDL;
+	}
+	else
+	{
+		LLString::format_map_t args;
+		// *TODO:translate
+		args["[TYPE]"] = LLAssetType::lookupHumanReadable(data->mAssetType);
+		if (data->mName.empty())
+		{
+			LLNotifyBox::showXml("FailedToFindWearableUnnamed", args);
+		}
+		else
+		{
+			args["[DESC]"] = data->mName;
+			LLNotifyBox::showXml("FailedToFindWearable", args);
+		}
+	}
+	// Always call callback; wearable will be NULL if we failed
+	{
+		if( data->mCallback )
+		{
+			data->mCallback( wearable, data->mUserdata );
+		}
+	}
 	delete data;
 }
 
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 3068f2cbb1887dcf66bc57cc3ded5a72246ff46f..7a2acbb094c195f4739370d750f57e781ba7eaa2 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -1113,7 +1113,7 @@ void send_agent_pause()
 {
 	// *NOTE:Mani Pausing the mainloop timeout. Otherwise a long modal event may cause
 	// the thread monitor to timeout.
-	LLAppViewer::instance()->stopMainloopTimeout();
+	LLAppViewer::instance()->pauseMainloopTimeout();
 	
 	// Note: used to check for LLWorld initialization before it became a singleton.
 	// Rather than just remove this check I'm changing it to assure that the message 
@@ -1171,7 +1171,7 @@ void send_agent_resume()
 	// Reset the FPS counter to avoid an invalid fps
 	LLViewerStats::getInstance()->mFPSStat.start();
 
-	LLAppViewer::instance()->startMainloopTimeout();
+	LLAppViewer::instance()->resumeMainloopTimeout();
 }
 
 
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index 16b277f6a628d13bbc444bd74a434389f7cf0121..1dd08604cdf95190f89737077d13891e544531ad 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -161,6 +161,11 @@ void LLWorldMap::reset()
 
 	mNeighborMapWidth = 0;
 	mNeighborMapHeight = 0;
+
+	for (S32 i=0; i<MAP_SIM_IMAGE_TYPES; i++)
+	{
+		mMapLayers[i].clear();
+	}
 }
 
 void LLWorldMap::eraseItems()
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 1db9e5db30c49fc8fb06fa63419e7b6859058972..04a09490eaae7665b77a2ec46557d55080eb4587 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -38,7 +38,7 @@
 #include "llmath.h"		// clampf()
 #include "llregionhandle.h"
 #include "lleventflags.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 #include "llagent.h"
 #include "llcallingcard.h"
@@ -307,17 +307,17 @@ void LLWorldMapView::draw()
 
 		// Clear the background alpha to 0
 		gGL.flush();
-		glColorMask(FALSE, FALSE, FALSE, TRUE);
-		glAlphaFunc(GL_GEQUAL, 0.00f);
-		gGL.blendFunc(GL_ONE, GL_ZERO);
+		gGL.setColorMask(false, true);
+		gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
+		gGL.setSceneBlendType(LLRender::BT_REPLACE);
 		gGL.color4f(0.0f, 0.0f, 0.0f, 0.0f);
 		gl_rect_2d(0, height, width, 0);
 	}
 
 	gGL.flush();
-	glAlphaFunc(GL_GEQUAL, 0.01f);
-	glColorMask(TRUE, TRUE, TRUE, TRUE);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+	gGL.setColorMask(true, true);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
 	F32 layer_alpha = 1.f;
 
@@ -382,7 +382,7 @@ void LLWorldMapView::draw()
 		// Draw map image into RGB
 		//gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 		gGL.flush();
-		glColorMask(TRUE, TRUE, TRUE, FALSE);
+		gGL.setColorMask(true, false);
 		gGL.color4f(1.f, 1.f, 1.f, layer_alpha);
 
 		gGL.begin(LLVertexBuffer::QUADS);
@@ -398,7 +398,7 @@ void LLWorldMapView::draw()
 
 		// draw an alpha of 1 where the sims are visible
 		gGL.flush();
-		glColorMask(FALSE, FALSE, FALSE, TRUE);
+		gGL.setColorMask(false, true);
 		gGL.color4f(1.f, 1.f, 1.f, 1.f);
 
 		gGL.begin(LLVertexBuffer::QUADS);
@@ -414,8 +414,8 @@ void LLWorldMapView::draw()
 	}
 
 	gGL.flush();
-	glAlphaFunc(GL_GEQUAL, 0.01f);
-	glColorMask(TRUE, TRUE, TRUE, TRUE);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+	gGL.setColorMask(true, true);
 
 #if 1
 	F32 sim_alpha = 1.f;
@@ -538,7 +538,7 @@ void LLWorldMapView::draw()
 			LLGLSUIDefault gls_ui;
 			LLViewerImage::bindTexture(simimage);
 
-			gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+			gGL.setSceneBlendType(LLRender::BT_ALPHA);
 			F32 alpha = sim_alpha * info->mAlpha;
 			gGL.color4f(1.f, 1.0f, 1.0f, alpha);
 
@@ -573,8 +573,8 @@ void LLWorldMapView::draw()
 			{
 				// draw an alpha of 1 where the sims are visible (except NULL sims)
 				gGL.flush();
-				gGL.blendFunc(GL_ONE, GL_ZERO);
-				glColorMask(FALSE, FALSE, FALSE, TRUE);
+				gGL.setSceneBlendType(LLRender::BT_REPLACE);
+				gGL.setColorMask(false, true);
 				gGL.color4f(1.f, 1.f, 1.f, 1.f);
 
 				LLGLSNoTexture gls_no_texture;
@@ -586,14 +586,14 @@ void LLWorldMapView::draw()
 				gGL.end();
 
 				gGL.flush();
-				glColorMask(TRUE, TRUE, TRUE, TRUE);
+				gGL.setColorMask(true, true);
 			}
 		}
 
 		if (info->mAccess == SIM_ACCESS_DOWN)
 		{
 			// Draw a transparent red square over down sims
-			gGL.blendFunc(GL_DST_ALPHA, GL_SRC_ALPHA);
+			gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
 			gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f);
 
 			LLGLSNoTexture gls_no_texture;
@@ -610,7 +610,7 @@ void LLWorldMapView::draw()
 			&& info->mAccess > SIM_ACCESS_PG
 			&& gAgent.isTeen())
 		{
-			gGL.blendFunc(GL_DST_ALPHA, GL_ZERO);
+			gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
 			
 			LLGLSNoTexture gls_no_texture;
 			gGL.color3f(1.f, 0.f, 0.f);
@@ -686,14 +686,14 @@ void LLWorldMapView::draw()
 	LLGLSUIDefault gls_ui;
 	{
 		LLGLSNoTexture gls_no_texture;
-		glAlphaFunc(GL_GEQUAL, 0.0f);
-		gGL.blendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);
+		gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
+		gGL.blendFunc(LLRender::BF_ONE_MINUS_DEST_ALPHA, LLRender::BF_DEST_ALPHA);
 		gGL.color4fv( mBackgroundColor.mV );
 		gl_rect_2d(0, height, width, 0);
 	}
 	
-	glAlphaFunc(GL_GEQUAL, 0.01f);
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
 	// Infohubs
 	if (gSavedSettings.getBOOL("MapShowInfohubs"))   //(gMapScale >= sThresholdB)
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 18b99d8b74f057da3b04e8e3876c46d5ac3633a5..643c1ec055558df70c8910b3c6d585f4a22b0d03 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -50,7 +50,7 @@
 #include "v3color.h"
 #include "llui.h" 
 #include "llglheaders.h"
-#include "llglimmediate.h"
+#include "llrender.h"
 
 // newview includes
 #include "llagent.h"
@@ -108,8 +108,6 @@
 //#define DEBUG_INDICES
 #endif
 
-void render_ui_and_swap_if_needed();
-
 const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f;
 const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f;
 const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;
@@ -506,11 +504,7 @@ void LLPipeline::createGLBuffers()
 				res = 128;
 				mCubeBuffer = new LLCubeMap();
 				mCubeBuffer->initGL();
-				glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mCubeBuffer->getGLName());
-				glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-				glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-				glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-				glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+				mCubeBuffer->setReflection();
 					
 				for (U32 i = 0; i < 6; i++)
 				{
@@ -1180,7 +1174,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
 	LLGLDisable test(GL_ALPHA_TEST);
 	LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
 
-	glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+	gGL.setColorMask(false, false);
 	LLGLDepthTest depth(GL_TRUE, GL_FALSE);
 
 	for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 
@@ -1238,7 +1232,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
 		sCull->pushDrawable(gSky.mVOGroundp->mDrawable);
 	}
 	
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+	gGL.setColorMask(true, false);
 	glPopMatrix();
 
 	if (to_texture)
@@ -1315,11 +1309,11 @@ void LLPipeline::doOcclusion(LLCamera& camera)
 	LLVertexBuffer::unbind();
 	if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION))
 	{
-		glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE);
+		gGL.setColorMask(true, false, false, false);
 	}
 	else
 	{
-		glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+		gGL.setColorMask(false, false);
 	}
 	LLGLDisable blend(GL_BLEND);
 	LLGLDisable test(GL_ALPHA_TEST);
@@ -1336,7 +1330,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
 		}
 	}
 
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+	gGL.setColorMask(true, false);
 	glFlush();
 }
 	
@@ -1550,10 +1544,8 @@ void LLPipeline::shiftObjects(const LLVector3 &offset)
 
 	assertInitialized();
 
-	//do a swap to indicate an invalid previous frame camera
-	render_ui_and_swap_if_needed();
 	glClear(GL_DEPTH_BUFFER_BIT);
-	gDisplaySwapBuffers = FALSE;
+	gDepthDirty = FALSE;
 
 	for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin();
 		 iter != mShiftList.end(); iter++)
@@ -1978,7 +1970,10 @@ void LLPipeline::postSort(LLCamera& camera)
 		}
 	}
 
-	//build render map
+	//rebuild groups
+	sCull->assertDrawMapsEmpty();
+
+	LLSpatialGroup::sNoDelete = FALSE;
 	for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
 	{
 		LLSpatialGroup* group = *i;
@@ -1989,6 +1984,18 @@ void LLPipeline::postSort(LLCamera& camera)
 		}
 		
 		group->rebuildGeom();
+	}
+	LLSpatialGroup::sNoDelete = TRUE;
+
+	//build render map
+	for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
+	{
+		LLSpatialGroup* group = *i;
+		if (sUseOcclusion && 
+			group->isState(LLSpatialGroup::OCCLUDED))
+		{
+			continue;
+		}
 		
 		for (LLSpatialGroup::draw_map_t::iterator j = group->mDrawMap.begin(); j != group->mDrawMap.end(); ++j)
 		{
@@ -2117,6 +2124,8 @@ void LLPipeline::postSort(LLCamera& camera)
 		} func;
 		LLSelectMgr::getInstance()->getSelection()->applyToTEs(&func);
 	}
+
+	LLSpatialGroup::sNoDelete = FALSE;
 }
 
 
@@ -2507,7 +2516,7 @@ void LLPipeline::renderDebug()
 
 	gGLLastMatrix = NULL;
 	glLoadMatrixd(gGLModelView);
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+	gGL.setColorMask(true, false);
 
 	// Debug stuff.
 	for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 
@@ -2578,7 +2587,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
 {
 	assertInitialized();
 
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+	gGL.setColorMask(true, false);
 	gPipeline.resetDrawOrders();
 
 	for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
@@ -2629,25 +2638,15 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
 	LLGLEnable alpha_test(GL_ALPHA_TEST);
 	if (gPickTransparent)
 	{
-		glAlphaFunc(GL_GEQUAL, 0.0f);
+		gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
 	}
 	else
 	{
-		glAlphaFunc(GL_GREATER, 0.2f);
+		gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f);
 	}
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,		GL_COMBINE_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB,		GL_REPLACE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB,		GL_MODULATE);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,		GL_PRIMARY_COLOR);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB,		GL_SRC_COLOR);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB,		GL_TEXTURE);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB,	GL_SRC_ALPHA);
-
-	glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB,		GL_PRIMARY_COLOR_ARB);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB,	GL_SRC_ALPHA);
+	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
+	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
 
 	U32 prim_mask = LLVertexBuffer::MAP_VERTEX | 
 					LLVertexBuffer::MAP_TEXCOORD;
@@ -2748,11 +2747,11 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
 		glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
 	}
 
-	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 	
 	LLVertexBuffer::unbind();
 	
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+	gGL.setColorMask(true, true);
 }
 
 void LLPipeline::renderFaceForUVSelect(LLFace* facep)
@@ -4127,10 +4126,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
 	glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
 	if (width != res)
 	{
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+		cube_map->setReflection();
 		
 		for (U32 i = 0; i < 6; i++)
 		{
@@ -4211,9 +4207,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
 		gPipeline.stateSort(cube_cam, result);
 		
 		glClearColor(0,0,0,0);
-		glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+		gGL.setColorMask(true, true);
 		glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
-		glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+		gGL.setColorMask(true, false);
 		stop_glerror();
 		gPipeline.renderGeom(cube_cam);
 	}
@@ -4329,7 +4325,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
 	U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes");
 	enableLightsFullbright(LLColor4::white);
 	LLGLDepthTest depth(GL_FALSE);
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+	gGL.setColorMask(true, true);
 	glMatrixMode(GL_PROJECTION);
 	glPushMatrix();
 	glLoadIdentity();
@@ -4343,10 +4339,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
 	glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
 	if (width != res)
 	{
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-		glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+		cube_out->setReflection();
 		
 		for (U32 i = 0; i < 6; i++)
 		{
@@ -4373,7 +4366,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
 
 	stop_glerror();
 	glViewport(0,0,res, res);
-	gGL.blendFunc(GL_ONE, GL_ONE);
+	gGL.setSceneBlendType(LLRender::BT_ADD);
 	cube_in->enableTexture(0);
 	//3-axis blur
 	for (U32 j = 0; j < 3; j++)
@@ -4403,7 +4396,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
 								gl_cube_face[i], 
 								j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0);
 			validate_framebuffer_object();
-			glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+			gGL.setColorMask(true, true);
 			glClear(GL_COLOR_BUFFER_BIT);
 			glLoadIdentity();
 			apply_cube_face_rotation(i);
@@ -4423,7 +4416,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
 	glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
 	
 	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
-	glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+	gGL.setColorMask(true, false);
 	glMatrixMode(GL_PROJECTION);
 	glPopMatrix();
 	glMatrixMode(GL_MODELVIEW);
@@ -4431,7 +4424,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
 
 	cube_in->disableTexture();
 	gViewerWindow->setupViewport();
-	gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
 	LLGLState::checkStates();
 	LLGLState::checkTextureChannels();
@@ -4472,7 +4465,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
 		tc2 /= (F32) res_mod;
 	}
 
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+	gGL.setColorMask(true, true);
 		
 	LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM);
 	gGL.color4f(1,1,1,1);
@@ -4491,7 +4484,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
 
 	LLGLDisable test(GL_ALPHA_TEST);
 
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+	gGL.setColorMask(true, true);
 	glClearColor(0,0,0,0);
 
 	if (for_snapshot)
@@ -4503,7 +4496,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
 			//glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
 			//LLGLDisable blend(GL_BLEND);
 			LLGLEnable blend(GL_BLEND);
-			gGL.blendFunc(GL_ONE, GL_ONE);
+			gGL.setSceneBlendType(LLRender::BT_ADD);
 			tc2.setVec(1,1);				
 			gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
 			gGL.color4f(1,1,1,1);
@@ -4521,7 +4514,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
 			gGL.end();
 
 			gGL.flush();
-			gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+			gGL.setSceneBlendType(LLRender::BT_ALPHA);
 		}
 
 		gGL.flush();
@@ -4553,8 +4546,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
 		gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount);
 		LLGLEnable blend_on(GL_BLEND);
 		LLGLEnable test(GL_ALPHA_TEST);
-		glAlphaFunc(GL_GREATER, 0.f);
-		gGL.blendFunc(GL_SRC_ALPHA, GL_ONE);
+		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+		gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
 		LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
 		
 		glDisable(GL_TEXTURE_2D);
@@ -4764,24 +4757,16 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
 		LLGLDisable blend(GL_BLEND);
 
 		//tex unit 0
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
-		glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
+		gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
 		
 		mGlow[1].bindTexture();
 		glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 		glTexCoordPointer(2, GL_FLOAT, 0, uv0);
-		glActiveTextureARB(GL_TEXTURE1_ARB);
+		gGL.getTexUnit(1)->activate();
 		glEnable(GL_TEXTURE_RECTANGLE_ARB);
 		
 		//tex unit 1
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
-		glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-		glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
-		glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
+		gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
 		
 		glClientActiveTextureARB(GL_TEXTURE1_ARB);
 		glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -4796,14 +4781,14 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
 		
 		glDisable(GL_TEXTURE_RECTANGLE_ARB);
 		glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
 		glClientActiveTextureARB(GL_TEXTURE0_ARB);
-		glActiveTextureARB(GL_TEXTURE0_ARB);
+		gGL.getTexUnit(0)->activate();
 		glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 	}
 	
-	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	glMatrixMode(GL_PROJECTION);
 	glPopMatrix();
 	glMatrixMode(GL_MODELVIEW);
@@ -4891,11 +4876,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 		{	//generate planar reflection map
 			LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
 			glClearColor(0,0,0,0);
-			glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+			gGL.setColorMask(true, true);
 			mWaterRef.bindTarget();
 			mWaterRef.getViewport(gGLViewport);
 			mWaterRef.clear();
-			glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+			gGL.setColorMask(true, false);
 
 			stop_glerror();
 
@@ -4997,11 +4982,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 			LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
 			LLColor4& col = LLDrawPoolWater::sWaterFogColor;
 			glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
-			glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+			gGL.setColorMask(true, true);
 			mWaterDis.bindTarget();
 			mWaterDis.getViewport(gGLViewport);
 			mWaterDis.clear();
-			glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
+			gGL.setColorMask(true, false);
 
 			if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate)
 			{
@@ -5176,7 +5161,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 	glh_set_current_modelview(mat);
 
 	glClearColor(0.0f,0.0f,0.0f,0.0f);
-	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+	gGL.setColorMask(true, true);
 	glStencilMask(0xFFFFFFFF);
 	glClearStencil(0);
 
@@ -5223,14 +5208,14 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 
 		if (muted)
 		{
-			glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+			gGL.setColorMask(true, true);
 		}
 		else
 		{
-			glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
+			gGL.setColorMask(false, true);
 		}
 		
-		gGL.blendFunc(GL_ONE, GL_ONE);
+		gGL.setSceneBlendType(LLRender::BT_ADD);
 		LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
 
 		LLGLDepthTest depth(GL_FALSE, GL_FALSE);
@@ -5246,7 +5231,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 		gGL.flush();
 
 
-		gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+		gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	}