diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h
index a0fb0860295e0a0417ce56f59df816347f794536..89b276e3b3055d701d6e17daa6d2869f0c7cfe25 100644
--- a/indra/llcommon/indra_constants.h
+++ b/indra/llcommon/indra_constants.h
@@ -339,7 +339,7 @@ const U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
 const U32 MAP_ITEM_CLASSIFIED = 0x08;
 
 // Crash reporter behavior
-const char* const CRASH_SETTINGS_FILE = "crash_settings.xml";
+const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
 const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior";
 const S32 CRASH_BEHAVIOR_ASK = 0;
 const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
diff --git a/indra/llcommon/llevent.h b/indra/llcommon/llevent.h
index 8ba883a0eeb0ab72bd494361c1d2a4a9dbf67915..741b40b78784d64be945f9ce0b88327ad2b92ab2 100644
--- a/indra/llcommon/llevent.h
+++ b/indra/llcommon/llevent.h
@@ -185,13 +185,6 @@ protected:
 	LLPointer<LLEventDispatcher> mDispatcher;
 };
 
-// Utility mixer class which fires & handles events
-class LLSimpleListenerObservable : public LLObservable, public LLSimpleListener
-{
-public:
-	virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) = 0;
-};
-
 class LLValueChangedEvent : public LLEvent
 {
 public:
diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp
index 2a18e5c64c9b2f7df4eaf11427d3cdc9d1602275..c44650009d168859672a55fccade69dece1193b5 100644
--- a/indra/llcommon/llfile.cpp
+++ b/indra/llcommon/llfile.cpp
@@ -271,9 +271,11 @@ void llofstream::open(const char* _Filename,	/* Flawfinder: ignore */
 
 void llofstream::close()
 {	// close the C stream
-	llassert(_Filebuffer);
-	if (_Filebuffer->close() == 0)
-		_Myios::setstate(ios_base::failbit);	/*Flawfinder: ignore*/
+	if(is_open())
+	{
+		if (_Filebuffer->close() == 0)
+			_Myios::setstate(ios_base::failbit);	/*Flawfinder: ignore*/
+	}
 }
 
 llofstream::llofstream(const char *_Filename,
@@ -285,7 +287,8 @@ llofstream::llofstream(const char *_Filename,
 }
 
 llofstream::~llofstream()
-{	// destroy the object
+{	
+	// destroy the object
 	close();
 	delete _Filebuffer;
 }
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 2bcc89b59fcfb3e89072b7f9d3edf65ff06db3d3..8ae6dd2ea5aa629f40a757b366ce27b742bce5dd 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -778,9 +778,8 @@ void LLButton::setToggleState(BOOL b)
 {
 	if( b != mToggleState )
 	{
-		mToggleState = b;
-		LLValueChangedEvent *evt = new LLValueChangedEvent(this, mToggleState);
-		fireEvent(evt, "");
+		setControlValue(b); // will fire LLControlVariable callbacks (if any)
+		mToggleState = b; // may or may not be redundant
 	}
 }
 
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 00b4c37bb0a127fe1bd5bc7ceb304e2a1e34797c..8c62a10f2bc69bc287261f3064ffb7d7769135e0 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -827,57 +827,33 @@ void LLMenuItemCallGL::setEnabledControl(LLString enabled_control, LLView *conte
 	// Register new listener
 	if (!enabled_control.empty())
 	{
-		LLControlBase *control = context->findControl(enabled_control);
-		if (control)
-		{
-			LLSD state = control->registerListener(this, "ENABLED");
-			setEnabled(state);
-		}
-		else
+		LLControlVariable *control = context->findControl(enabled_control);
+		if (!control)
 		{
 			context->addBoolControl(enabled_control, getEnabled());
 			control = context->findControl(enabled_control);
-			control->registerListener(this, "ENABLED");
+			llassert_always(control);
 		}
+		control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("enabled")));
+		setEnabled(control->getValue());
 	}
 }
 
-void LLMenuItemCallGL::setVisibleControl(LLString enabled_control, LLView *context)
+void LLMenuItemCallGL::setVisibleControl(LLString visible_control, LLView *context)
 {
 	// Register new listener
-	if (!enabled_control.empty())
+	if (!visible_control.empty())
 	{
-		LLControlBase *control = context->findControl(enabled_control);
-		if (control)
+		LLControlVariable *control = context->findControl(visible_control);
+		if (!control)
 		{
-			LLSD state = control->registerListener(this, "VISIBLE");
-			setVisible(state);
+			context->addBoolControl(visible_control, getVisible());
+			control = context->findControl(visible_control);
+			llassert_always(control);
 		}
-		else
-		{
-			context->addBoolControl(enabled_control, getEnabled());
-			control = context->findControl(enabled_control);
-			control->registerListener(this, "VISIBLE");
-		}
-	}
-}
-
-// virtual
-bool LLMenuItemCallGL::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-{
-	if (userdata.asString() == "ENABLED" && event->desc() == "value_changed")
-	{
-		LLSD state = event->getValue();
-		setEnabled(state);
-		return TRUE;
+		control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("visible")));
+		setVisible(control->getValue());
 	}
-	if (userdata.asString() == "VISIBLE" && event->desc() == "value_changed")
-	{
-		LLSD state = event->getValue();
-		setVisible(state);
-		return TRUE;
-	}
-	return LLMenuItemGL::handleEvent(event, userdata);
 }
 
 // virtual
@@ -1000,44 +976,35 @@ LLMenuItemCheckGL::LLMenuItemCheckGL ( const LLString& name,
 	setControlName(control_name, context);
 }
 
-void LLMenuItemCheckGL::setCheckedControl(LLString checked_control, LLView *context)
+//virtual
+void LLMenuItemCheckGL::setValue(const LLSD& value)
 {
-	// Register new listener
-	if (!checked_control.empty())
+	mChecked = value.asBoolean();
+	if(mChecked)
 	{
-		LLControlBase *control = context->findControl(checked_control);
-		if (control)
-		{
-			LLSD state = control->registerListener(this, "CHECKED");
-			mChecked = state;
-		}
-		else
-		{
-			context->addBoolControl(checked_control, mChecked);
-			control = context->findControl(checked_control);
-			control->registerListener(this, "CHECKED");
-		}
+		mDrawBoolLabel = BOOLEAN_TRUE_PREFIX;
+	}
+	else
+	{
+		mDrawBoolLabel.clear();
 	}
 }
 
-// virtual
-bool LLMenuItemCheckGL::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+void LLMenuItemCheckGL::setCheckedControl(LLString checked_control, LLView *context)
 {
-	if (userdata.asString() == "CHECKED" && event->desc() == "value_changed")
+	// Register new listener
+	if (!checked_control.empty())
 	{
-		LLSD state = event->getValue();
-		mChecked = state;
-		if(mChecked)
+		LLControlVariable *control = context->findControl(checked_control);
+		if (!control)
 		{
-			mDrawBoolLabel = BOOLEAN_TRUE_PREFIX;
-		}
-		else
-		{
-			mDrawBoolLabel.clear();
+			context->addBoolControl(checked_control, mChecked);
+			control = context->findControl(checked_control);
+			llassert_always(control);
 		}
-		return TRUE;
+		control->getSignal()->connect(boost::bind(&LLView::controlListener, _1, getHandle(), std::string("value")));
+		mChecked = control->getValue();
 	}
-	return LLMenuItemCallGL::handleEvent(event, userdata);
 }
 
 // virtual
@@ -1946,7 +1913,7 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
 							{
 								continue;
 							}
-							LLControlBase *control = parent->findControl(control_name);
+							LLControlVariable *control = parent->findControl(control_name);
 							if (!control)
 							{
 								parent->addBoolControl(control_name, FALSE);
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index e9b80e562bf455db88eddea30aa3fbb226c1cf20..33b226fd994cd845ab6b5febfad74437d545f286 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -225,7 +225,7 @@ private:
 // calls a user defined callback.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-class LLMenuItemCallGL : public LLMenuItemGL
+class LLMenuItemCallGL : public LLMenuItemGL, public LLObservable
 {
 public:
 	// normal constructor
@@ -291,7 +291,6 @@ public:
 
 	//virtual void draw();
 
-	virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
 
 private:
 	menu_callback			mCallback;
@@ -341,7 +340,7 @@ public:
 
 	void setCheckedControl(LLString checked_control, LLView *context);
 
-	virtual void setValue(const LLSD& value) { mChecked = value.asBoolean(); }
+	virtual void setValue(const LLSD& value);
 	virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_CHECK; }
 	virtual LLString getWidgetTag() const { return LL_MENU_ITEM_CHECK_GL_TAG; }
 
@@ -350,8 +349,6 @@ public:
 	// called to rebuild the draw label
 	virtual void buildDrawLabel( void );
 
-	virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
-
 private:
 	check_callback mCheckCallback;
 	BOOL mChecked;
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index aed7893df7a9457d4ec4e5370888913e179d52ad..1e9442805fc290f7e62a919c8d47fed28560a38f 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1555,16 +1555,11 @@ void gl_segmented_rect_3d_tex_top(const LLVector2& border_scale, const LLVector3
 	gl_segmented_rect_3d_tex(border_scale, border_width, border_height, width_vec, height_vec, ROUNDED_RECT_TOP);
 }
 
-class LLShowXUINamesListener: public LLSimpleListener
+bool handleShowXUINamesChanged(const LLSD& newvalue)
 {
-	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-	{
-		LLUI::sShowXUINames = (BOOL) event->getValue().asBoolean();
-		return true;
-	}
-};
-static LLShowXUINamesListener show_xui_names_listener;
-
+	LLUI::sShowXUINames = newvalue.asBoolean();
+	return true;
+}
 
 void LLUI::initClass(LLControlGroup* config, 
 					 LLControlGroup* colors, 
@@ -1584,7 +1579,7 @@ void LLUI::initClass(LLControlGroup* config,
 	LLFontGL::sShadowColor = colors->getColor("ColorDropShadow");
 
 	LLUI::sShowXUINames = LLUI::sConfigGroup->getBOOL("ShowXUINames");
-	LLUI::sConfigGroup->getControl("ShowXUINames")->addListener(&show_xui_names_listener);
+	LLUI::sConfigGroup->getControl("ShowXUINames")->getSignal()->connect(boost::bind(&handleShowXUINamesChanged, _1));
 }
 
 void LLUI::cleanupClass()
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 0a37c03ac5dae4cbd1a13467473aedd041e97afd..269796e5decdd17a973086ac5b56e1ba9943b0fc 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -2426,16 +2426,7 @@ LLSimpleListener* LLView::getListenerByName(const LLString& callback_name)
 	return callback;
 }
 
-void LLView::addListenerToControl(LLEventDispatcher *dispatcher, const LLString& name, LLSD filter, LLSD userdata)
-{
-	LLSimpleListener* listener = getListenerByName(name);
-	if (listener)
-	{
-		dispatcher->addListener(listener, filter, userdata);
-	}
-}
-
-LLControlBase *LLView::findControl(LLString name)
+LLControlVariable *LLView::findControl(LLString name)
 {
 	control_map_t::iterator itor = mFloaterControls.find(name);
 	if (itor != mFloaterControls.end())
@@ -2791,9 +2782,15 @@ LLFontGL::StyleFlags LLView::selectFontStyle(LLXMLNodePtr node)
 	return gl_font_style;
 }
 
-void LLView::setControlValue(const LLSD& value)
+bool LLView::setControlValue(const LLSD& value)
 {
-	LLUI::sConfigGroup->setValue(getControlName(), value);
+	LLString ctrlname = getControlName();
+	if (!ctrlname.empty())
+	{
+		LLUI::sConfigGroup->setValue(ctrlname, value);
+		return true;
+	}
+	return false;
 }
 
 //virtual
@@ -2804,43 +2801,57 @@ void LLView::setControlName(const LLString& control_name, LLView *context)
 		context = this;
 	}
 
-	// Unregister from existing listeners
 	if (!mControlName.empty())
 	{
-		clearDispatchers();
+		llwarns << "setControlName called twice on same control!" << llendl;
+		mControlConnection.disconnect(); // disconnect current signal
+		mControlName.clear();
 	}
-
+	
 	// Register new listener
 	if (!control_name.empty())
 	{
-		LLControlBase *control = context->findControl(control_name);
+		LLControlVariable *control = context->findControl(control_name);
 		if (control)
 		{
 			mControlName = control_name;
-			LLSD state = control->registerListener(this, "DEFAULT");
-			setValue(state);
+			mControlConnection = control->getSignal()->connect(boost::bind(&controlListener, _1, getHandle(), std::string("value")));
+			setValue(control->getValue());
 		}
 	}
 }
 
-// virtual
-bool LLView::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+// static
+bool LLView::controlListener(const LLSD& newvalue, LLHandle<LLView> handle, std::string type)
 {
-	if (userdata.asString() == "DEFAULT" && event->desc() == "value_changed")
+	LLView* view = handle.get();
+	if (view)
 	{
-		LLSD state = event->getValue();
-		setValue(state);
-		return TRUE;
+		if (type == "value")
+		{
+			view->setValue(newvalue);
+			return true;
+		}
+		else if (type == "enabled")
+		{
+			view->setEnabled(newvalue.asBoolean());
+			return true;
+		}
+		else if (type == "visible")
+		{
+			view->setVisible(newvalue.asBoolean());
+			return true;
+		}
 	}
-	return FALSE;
+	return false;
 }
 
 void LLView::addBoolControl(LLString name, bool initial_value)
 {
-	mFloaterControls[name] = new LLControl(name, TYPE_BOOLEAN, initial_value, "Internal floater control");
+	mFloaterControls[name] = new LLControlVariable(name, TYPE_BOOLEAN, initial_value, "Internal floater control");
 }
 
-LLControlBase *LLView::getControl(LLString name)
+LLControlVariable *LLView::getControl(LLString name)
 {
 	control_map_t::iterator itor = mFloaterControls.find(name);
 	if (itor != mFloaterControls.end())
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index c8556c7edc2ffd44e201e8d9819880d15f13d468..24a5eb4f89afe4433c48dfc9a8da5503bf32a3ff 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -65,7 +65,6 @@ const BOOL	NOT_MOUSE_OPAQUE = FALSE;
 
 const U32 GL_NAME_UI_RESERVED = 2;
 
-
 /*
 // virtual functions defined in LLView:
 
@@ -150,7 +149,7 @@ virtual BOOL	handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent);
 		*
 */
 
-class LLView : public LLMouseHandler, public LLMortician, public LLSimpleListenerObservable
+class LLView : public LLMouseHandler, public LLMortician
 {
 
 public:
@@ -294,7 +293,6 @@ public:
 	
 	LLHandle<LLView>	getHandle()				{ mHandle.bind(this); return mHandle; }
 
-
 	U32			getFollows() const				{ return mReshapeFlags; }
 	BOOL		followsLeft() const				{ return mReshapeFlags & FOLLOWS_LEFT; }
 	BOOL		followsRight() const			{ return mReshapeFlags & FOLLOWS_RIGHT; }
@@ -393,13 +391,13 @@ public:
 	void addListenerToControl(LLEventDispatcher *observer, const LLString& name, LLSD filter, LLSD userdata);
 
 	void addBoolControl(LLString name, bool initial_value);
-	LLControlBase *getControl(LLString name);
-	LLControlBase *findControl(LLString name);
+	LLControlVariable *getControl(LLString name);
+	LLControlVariable *findControl(LLString name);
 
-	void			setControlValue(const LLSD& value);
+	bool setControlValue(const LLSD& value);
 	virtual void	setControlName(const LLString& control, LLView *context);
 	virtual LLString getControlName() const { return mControlName; }
-	virtual bool	handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
+//	virtual bool	handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
 	virtual void	setValue(const LLSD& value);
 	virtual LLSD	getValue() const;
 
@@ -494,11 +492,12 @@ protected:
 	LLView* childrenHandleRightMouseDown(S32 x, S32 y, MASK mask);
 	LLView* childrenHandleRightMouseUp(S32 x, S32 y, MASK mask);
 
-	typedef std::map<LLString, LLControlBase*> control_map_t;
+	static bool controlListener(const LLSD& newvalue, LLHandle<LLView> handle, std::string type);
+
+	typedef std::map<LLString, LLControlVariable*> control_map_t;
 	control_map_t mFloaterControls;
 
 	virtual LLView* getChildByName(const LLString& name, BOOL recurse = FALSE) const;
-
 private:
 	LLView*		mParentView;
 	child_list_t mChildList;
@@ -537,9 +536,8 @@ private:
 	dispatch_list_t mDispatchList;
 
 	LLString		mControlName;
-
-
-// Just debugging stuff? We should try to hide anything that's not. -MG
+	boost::signals::connection mControlConnection;
+	
 public:
 	static BOOL	sDebugRects;	// Draw debug rects behind everything.
 	static BOOL sDebugKeys;
diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp
index b25ec4a86e481047416f0a86bf19e7314beb4987..bd4dfc2d78667f656dda360f94c4bf3305d99e11 100644
--- a/indra/llvfs/llvfile.cpp
+++ b/indra/llvfs/llvfile.cpp
@@ -45,7 +45,6 @@ const S32 LLVFile::APPEND		= 0x00000006;  // 0x00000004 & LLVFile::WRITE
 //----------------------------------------------------------------------------
 LLVFSThread* LLVFile::sVFSThread = NULL;
 BOOL LLVFile::sAllocdVFSThread = FALSE;
-BOOL LLVFile::ALLOW_ASYNC = TRUE;
 //----------------------------------------------------------------------------
 
 //============================================================================
diff --git a/indra/llvfs/llvfile.h b/indra/llvfs/llvfile.h
index 3d81483308e8cfe1b725f492d2c5ebea3d2117b5..cd4fc5917416a524c1446db679396490b4fbee12 100644
--- a/indra/llvfs/llvfile.h
+++ b/indra/llvfs/llvfile.h
@@ -78,8 +78,6 @@ public:
 	static const S32 WRITE;
 	static const S32 READ_WRITE;
 	static const S32 APPEND;
-
-	static BOOL ALLOW_ASYNC;
 	
 protected:
 	LLAssetType::EType mFileType;
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index 4ad44f455ff5c4e311f7b1d3911a75af989bee4a..9de426fc033a9191ee797f4b6d137e456d96e061 100644
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -57,19 +57,9 @@
 #endif
 
 //this defines the current version of the settings file
-U32	LLControlBase::sMaxControlNameLength = 0;
-
-//These lists are used to store the ID's of registered event listeners.
-std::list<S32>				LLControlBase::mFreeIDs;
-std::list<S32>				LLControlBase::mUsedIDs;
-
-S32							LLControlBase::mTopID;
-
-std::set<LLControlBase*>	LLControlBase::mChangedControls;
-
 const S32 CURRENT_VERSION = 101;
 
-BOOL LLControl::llsd_compare(const LLSD& a, const LLSD & b)
+BOOL LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
 {
 	switch (mType)
 	{
@@ -101,58 +91,154 @@ BOOL LLControl::llsd_compare(const LLSD& a, const LLSD & b)
 	return FALSE;
 }
 
-LLControlBase::~LLControlBase()
+LLControlVariable::LLControlVariable(const LLString& name, eControlType type,
+							 LLSD initial, const LLString& comment,
+							 BOOL persist)
+	: mName(name),
+	  mComment(comment),
+	  mType(type),
+	  mPersist(persist)
+{
+	if (mPersist && mComment.empty())
+	{
+		llerrs << "Must supply a comment for control " << mName << llendl;
+	}
+	//Push back versus setValue'ing here, since we don't want to call a signal yet
+	mValues.push_back(initial);
+}
+
+
+
+LLControlVariable::~LLControlVariable()
+{
+}
+
+void LLControlVariable::setValue(const LLSD& value, bool saved_value)
 {
+    bool value_changed = llsd_compare(getValue(), 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)
+	    {
+		    mValues.push_back(value);
+	    }
+	}
+    else
+    {
+        // 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)
+	    {
+            while(mValues.size() > 2)
+            {
+                // Remove any unsaved values.
+                mValues.pop_back();
+            }
+
+            if(mValues.size() < 2)
+            {
+                // Add the default to the 'save' value.
+                mValues.push_back(mValues[0]);
+            }
+
+            // Add the 'un-save' value.
+            mValues.push_back(value);
+	    }
+    }
+
+    if(value_changed)
+    {
+        mSignal(value); 
+    }
 }
 
-// virtual
-void LLControlBase::resetToDefault()
+void LLControlVariable::resetToDefault(bool fire_signal)
 {
+	//The first setting is always the default
+	//Pop to it and fire off the listener
+	while(mValues.size() > 1) mValues.pop_back();
+	if(fire_signal) firePropertyChanged();
+}
+
+bool LLControlVariable::isSaveValueDefault()
+{ 
+    return (mValues.size() ==  1) 
+        || ((mValues.size() > 1) && llsd_compare(mValues[1], mValues[0]));
 }
 
-LLControlGroup::LLControlGroup():	mNameTable()
+LLSD LLControlVariable::getSaveValue() const
 {
-	//mFreeStringOffset = 0;
+	//The first level of the stack is default
+	//We assume that the second level is user preferences that should be saved
+	if(mValues.size() > 1) return mValues[1];
+	return mValues[0];
 }
 
-LLControlGroup::~LLControlGroup()
+LLControlVariable*	LLControlGroup::getControl(const LLString& name)
+{
+	ctrl_name_table_t::iterator iter = mNameTable.find(name);
+	return iter == mNameTable.end() ? NULL : iter->second;
+}
+
+
+////////////////////////////////////////////////////////////////////////////
+
+LLControlGroup::LLControlGroup()
 {
+	mTypeString[TYPE_U32] = "U32";
+	mTypeString[TYPE_S32] = "S32";
+	mTypeString[TYPE_F32] = "F32";
+	mTypeString[TYPE_BOOLEAN] = "Boolean";
+	mTypeString[TYPE_STRING] = "String";
+	mTypeString[TYPE_VEC3] = "Vector3";
+    mTypeString[TYPE_VEC3D] = "Vector3D";
+	mTypeString[TYPE_RECT] = "Rect";
+	mTypeString[TYPE_COL4] = "Color4";
+	mTypeString[TYPE_COL3] = "Color3";
+	mTypeString[TYPE_COL4U] = "Color4u";
+	mTypeString[TYPE_LLSD] = "LLSD";
 }
 
-LLSD LLControlBase::registerListener(LLSimpleListenerObservable *listener, LLSD userdata)
+LLControlGroup::~LLControlGroup()
 {
-	// Symmetric listener relationship
-	addListener(listener, "", userdata);
-	listener->addListener(this, "", userdata);
-	return getValue();
+	cleanup();
 }
 
 void LLControlGroup::cleanup()
 {
+	for_each(mNameTable.begin(), mNameTable.end(), DeletePairedPointer());
 	mNameTable.clear();
 }
 
-LLControlBase*	LLControlGroup::getControl(const LLString& name)
+eControlType LLControlGroup::typeStringToEnum(const LLString& typestr)
 {
-	ctrl_name_table_t::iterator iter = mNameTable.find(name);
-	return iter == mNameTable.end() ? NULL : (LLControlBase*)iter->second;
+	for(int i = 0; i < (int)TYPE_COUNT; ++i)
+	{
+		if(mTypeString[i] == typestr) return (eControlType)i;
+	}
+	return (eControlType)-1;
+}
+
+LLString LLControlGroup::typeEnumToString(eControlType typeenum)
+{
+	return mTypeString[typeenum];
 }
 
 BOOL LLControlGroup::declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist)
 {
-	if(!mNameTable[name])
-	{
-		// if not, create the control and add it to the name table
-		LLControl* control = new LLControl(name, type, initial_val, comment, persist);
-		mNameTable[name] = control;
-		return TRUE;
-	}
-	else
+	if(mNameTable.find(name) != mNameTable.end())
 	{
 		llwarns << "LLControlGroup::declareControl: Control named " << name << " already exists." << llendl;
-		mNameTable.erase(name);
-		return FALSE;
+		mNameTable[name]->setValue(initial_val);
+		return TRUE;
 	}
+	// if not, create the control and add it to the name table
+	LLControlVariable* control = new LLControlVariable(name, type, initial_val, comment, persist);
+	mNameTable[name] = control;	
+	return TRUE;
 }
 
 BOOL LLControlGroup::declareU32(const LLString& name, const U32 initial_val, const LLString& comment, BOOL persist)
@@ -210,19 +296,14 @@ BOOL LLControlGroup::declareColor3(const LLString& name, const LLColor3 &initial
 	return declareControl(name, TYPE_COL3, initial_val.getValue(), comment, persist);
 }
 
-LLSD LLControlGroup::registerListener(const LLString& name, LLSimpleListenerObservable *listener)
+BOOL LLControlGroup::declareLLSD(const LLString& name, const LLSD &initial_val, const LLString& comment, BOOL persist )
 {
-	LLControlBase *control = getControl(name);
-	if (control)
-	{
-		return control->registerListener(listener);
-	}
-	return LLSD();
+	return declareControl(name, TYPE_LLSD, initial_val, comment, persist);
 }
 
 BOOL LLControlGroup::getBOOL(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_BOOLEAN))
 		return control->get().asBoolean();
@@ -235,7 +316,7 @@ BOOL LLControlGroup::getBOOL(const LLString& name)
 
 S32 LLControlGroup::getS32(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_S32))
 		return control->get().asInteger();
@@ -248,7 +329,7 @@ S32 LLControlGroup::getS32(const LLString& name)
 
 U32 LLControlGroup::getU32(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_U32))		
 		return control->get().asInteger();
@@ -261,7 +342,7 @@ U32 LLControlGroup::getU32(const LLString& name)
 
 F32 LLControlGroup::getF32(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_F32))
 		return (F32) control->get().asReal();
@@ -274,7 +355,7 @@ F32 LLControlGroup::getF32(const LLString& name)
 
 LLString LLControlGroup::findString(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_STRING))
 		return control->get().asString();
@@ -283,7 +364,7 @@ LLString LLControlGroup::findString(const LLString& name)
 
 LLString LLControlGroup::getString(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_STRING))
 		return control->get().asString();
@@ -309,7 +390,7 @@ LLString LLControlGroup::getText(const LLString& name)
 
 LLVector3 LLControlGroup::getVector3(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_VEC3))
 		return control->get();
@@ -322,7 +403,7 @@ LLVector3 LLControlGroup::getVector3(const LLString& name)
 
 LLVector3d LLControlGroup::getVector3d(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_VEC3D))
 		return control->get();
@@ -335,7 +416,7 @@ LLVector3d LLControlGroup::getVector3d(const LLString& name)
 
 LLRect LLControlGroup::getRect(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_RECT))
 		return control->get();
@@ -353,7 +434,7 @@ LLColor4 LLControlGroup::getColor(const LLString& name)
 
 	if (i != mNameTable.end())
 	{
-		LLControlBase* control = i->second;
+		LLControlVariable* control = i->second;
 
 		switch(control->mType)
 		{
@@ -381,7 +462,7 @@ LLColor4 LLControlGroup::getColor(const LLString& name)
 
 LLColor4U LLControlGroup::getColor4U(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_COL4U))
 		return control->get();
@@ -394,7 +475,7 @@ LLColor4U LLControlGroup::getColor4U(const LLString& name)
 
 LLColor4 LLControlGroup::getColor4(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_COL4))
 		return control->get();
@@ -407,7 +488,7 @@ LLColor4 LLControlGroup::getColor4(const LLString& name)
 
 LLColor3 LLControlGroup::getColor3(const LLString& name)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_COL3))
 		return control->get();
@@ -418,6 +499,16 @@ LLColor3 LLControlGroup::getColor3(const LLString& name)
 	}
 }
 
+LLSD LLControlGroup::getLLSD(const LLString& name)
+{
+	LLControlVariable* control = getControl(name);
+	
+	if (control && control->isType(TYPE_LLSD))
+		return control->getValue();
+	CONTROL_ERRS << "Invalid LLSD control " << name << llendl;
+	return LLSD();
+}
+
 BOOL LLControlGroup::controlExists(const LLString& name)
 {
 	ctrl_name_table_t::iterator iter = mNameTable.find(name);
@@ -430,7 +521,7 @@ BOOL LLControlGroup::controlExists(const LLString& name)
 
 void LLControlGroup::setBOOL(const LLString& name, BOOL val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_BOOLEAN))
 	{
@@ -445,7 +536,7 @@ void LLControlGroup::setBOOL(const LLString& name, BOOL val)
 
 void LLControlGroup::setS32(const LLString& name, S32 val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_S32))
 	{
@@ -460,7 +551,7 @@ void LLControlGroup::setS32(const LLString& name, S32 val)
 
 void LLControlGroup::setF32(const LLString& name, F32 val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_F32))
 	{
@@ -475,7 +566,7 @@ void LLControlGroup::setF32(const LLString& name, F32 val)
 
 void LLControlGroup::setU32(const LLString& name, U32 val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_U32))
 	{
@@ -490,7 +581,7 @@ void LLControlGroup::setU32(const LLString& name, U32 val)
 
 void LLControlGroup::setString(const LLString& name, const LLString &val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_STRING))
 	{
@@ -505,7 +596,7 @@ void LLControlGroup::setString(const LLString& name, const LLString &val)
 
 void LLControlGroup::setVector3(const LLString& name, const LLVector3 &val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_VEC3))
 	{
@@ -519,7 +610,7 @@ void LLControlGroup::setVector3(const LLString& name, const LLVector3 &val)
 
 void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_VEC3D))
 	{
@@ -533,7 +624,7 @@ void LLControlGroup::setVector3d(const LLString& name, const LLVector3d &val)
 
 void LLControlGroup::setRect(const LLString& name, const LLRect &val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 
 	if (control && control->isType(TYPE_RECT))
 	{
@@ -547,7 +638,7 @@ void LLControlGroup::setRect(const LLString& name, const LLRect &val)
 
 void LLControlGroup::setColor4U(const LLString& name, const LLColor4U &val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_COL4U))
 	{
@@ -561,7 +652,7 @@ void LLControlGroup::setColor4U(const LLString& name, const LLColor4U &val)
 
 void LLControlGroup::setColor4(const LLString& name, const LLColor4 &val)
 {
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control && control->isType(TYPE_COL4))
 	{
@@ -573,6 +664,20 @@ void LLControlGroup::setColor4(const LLString& name, const LLColor4 &val)
 	}
 }
 
+void LLControlGroup::setLLSD(const LLString& name, const LLSD& val)
+{
+	LLControlVariable* control = getControl(name);
+	
+	if (control && control->isType(TYPE_LLSD))
+	{
+		setValue(name, val);
+	}
+	else
+	{
+		CONTROL_ERRS << "Invalid LLSD control " << name << llendl;
+	}
+}
+
 void LLControlGroup::setValue(const LLString& name, const LLSD& val)
 {
 	if (name.empty())
@@ -580,7 +685,7 @@ void LLControlGroup::setValue(const LLString& name, const LLSD& val)
 		return;
 	}
 
-	LLControlBase* control = getControl(name);
+	LLControlVariable* control = getControl(name);
 	
 	if (control)
 	{
@@ -596,238 +701,8 @@ void LLControlGroup::setValue(const LLString& name, const LLSD& val)
 // Load and save
 //---------------------------------------------------------------
 
-U32 LLControlGroup::loadFromFileLegacy(const LLString& filename, BOOL require_declaration, eControlType declare_as)
-{
-	U32		item = 0;
-	U32		validitems = 0;
-	llifstream file;
-	S32 version;
-	
-	file.open(filename.c_str());		/*Flawfinder: ignore*/ 
-
-	if (!file)
-	{
-		llinfos << "LLControlGroup::loadFromFile unable to open." << llendl;
-		return 0;
-	}
-
-	// Check file version
-	LLString name;
-	file >> name;
-	file >> version;
-	if (name != "version" || version != CURRENT_VERSION)
-	{
-		llinfos << filename << " does not appear to be a version " << CURRENT_VERSION << " controls file" << llendl;
-		return 0;
-	}
-
-	while (!file.eof())
-	{
-		file >> name;
-		
-		if (name.empty())
-		{
-			continue;
-		}
-
-		if (name.substr(0,2) == "//")
-		{
-			// This is a comment.
-			char buffer[MAX_STRING];		/*Flawfinder: ignore*/
-			file.getline(buffer, MAX_STRING);
-			continue;
-		}
-
-		BOOL declared = mNameTable.find(name) != mNameTable.end();
-
-		if (require_declaration && !declared)
-		{
-			// Declaration required, but this name not declared.
-			// Complain about non-empty names.
-			if (!name.empty())
-			{
-				//read in to end of line
-				char buffer[MAX_STRING];		/*Flawfinder: ignore*/
-				file.getline(buffer, MAX_STRING);
-				llwarns << "LLControlGroup::loadFromFile() : Trying to set \"" << name << "\", setting doesn't exist." << llendl;
-			}
-			continue;
-		}
-
-		// Got an item.  Load it up.
-		item++;
-
-		// If not declared, assume it's a string
-		if (!declared)
-		{
-			switch(declare_as)
-			{
-			case TYPE_COL4:
-				declareColor4(name, LLColor4::white, LLString::null, NO_PERSIST);
-				break;
-			case TYPE_COL4U:
-				declareColor4U(name, LLColor4U::white, LLString::null, NO_PERSIST);
-				break;
-			case TYPE_STRING:
-			default:
-				declareString(name, LLString::null, LLString::null, NO_PERSIST);
-				break;
-			}
-		}
-
-		// Control name has been declared in code.
-		LLControlBase *control = getControl(name);
-
-		llassert(control);
-
-		mLoadedSettings.insert(name);
-		
-		switch(control->mType)
-		{
-		case TYPE_F32:
-			{
-				F32 initial;
-
-				file >> initial;
-
-				control->set(initial);
-				validitems++;
-			}
-			break;
-		case TYPE_S32:
-			{
-				S32 initial;
-
-				file >> initial;
-
-				control->set(initial);
-				validitems++;
-			}
-			break;
-		case TYPE_U32:
-			{
-				U32 initial;
-
-				file >> initial;
-				control->set((LLSD::Integer) initial);
-				validitems++;
-			}
-			break;
-		case TYPE_BOOLEAN:
-			{
-				char boolstring[256];		/*Flawfinder: ignore*/
-				BOOL valid = FALSE;
-				BOOL initial = FALSE;
-
-				file >> boolstring;
-				if (!strcmp("TRUE", boolstring))
-				{
-					initial = TRUE;
-					valid = TRUE;
-				}
-				else if (!strcmp("FALSE", boolstring))
-				{
-					initial = FALSE;
-					valid = TRUE;
-				}
-
-				if (valid)
-				{
-					control->set(initial);
-				}
-				else
-				{
-					llinfos << filename << "Item " << item << ": Invalid BOOL control " << name << ", " << boolstring << llendl; 
-				}
-
-				validitems++;
-			}
-			break;
-		case TYPE_STRING:
-			{
-				LLString string;
-				
-				file >> string;
-				
-				control->set(string);
-				validitems++;
-			}
-			break;
-		case TYPE_VEC3:
-			{
-				F32 x, y, z;
-
-				file >> x >> y >> z;
-
-				LLVector3 vector(x, y, z);
-
-				control->set(vector.getValue());
-				validitems++;
-			}
-			break;
-		case TYPE_VEC3D:
-			{
-				F64 x, y, z;
-
-				file >> x >> y >> z;
-
-				LLVector3d vector(x, y, z);
-
-				control->set(vector.getValue());
-				validitems++;
-			}
-			break;
-		case TYPE_RECT:
-			{
-				S32 left, bottom, width, height;
-
-				file >> left >> bottom >> width >> height;
-
-				LLRect rect;
-				rect.setOriginAndSize(left, bottom, width, height);
-
-				control->set(rect.getValue());
-				validitems++;
-			}
-			break;
-		case TYPE_COL4U:
-			{
-				S32 red, green, blue, alpha;
-				LLColor4U color;
-				file >> red >> green >> blue >> alpha;
-				color.setVec(red, green, blue, alpha);
-				control->set(color.getValue());
-				validitems++;
-			}
-			break;
-		case TYPE_COL4:
-			{
-				LLColor4 color;
-				file >> color.mV[VRED] >> color.mV[VGREEN]
-					 >> color.mV[VBLUE] >> color.mV[VALPHA];
-				control->set(color.getValue());
-				validitems++;
-			}
-			break;
-		case TYPE_COL3:
-			{
-				LLColor3 color;
-				file >> color.mV[VRED] >> color.mV[VGREEN]
-					 >> color.mV[VBLUE];
-				control->set(color.getValue());
-				validitems++;
-			}
-			break;
-		}
-	}
-
-	file.close();
-
-	return validitems;
-}
-
 // Returns number of controls loaded, so 0 if failure
-U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declaration, eControlType declare_as)
+U32 LLControlGroup::loadFromFileLegacy(const LLString& filename, BOOL require_declaration, eControlType declare_as)
 {
 	LLString name;
 
@@ -901,11 +776,9 @@ U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declarat
 		}
 
 		// Control name has been declared in code.
-		LLControlBase *control = getControl(name);
+		LLControlVariable *control = getControl(name);
 
 		llassert(control);
-
-		mLoadedSettings.insert(name);
 		
 		switch(control->mType)
 		{
@@ -1019,59 +892,43 @@ U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declarat
 				LLVector3 color;
 				
 				child_nodep->getAttributeVector3("value", color);
-                control->set(LLColor3(color.mV).getValue());
+				control->set(LLColor3(color.mV).getValue());
 				validitems++;
 			}
 			break;
-		}
 
+		default:
+		  break;
+
+		}
+	
 		child_nodep = rootp->getNextChild();
 	}
 
 	return validitems;
 }
 
-struct compare_controls
-{
-	bool operator() (const LLControlBase* const a, const LLControlBase* const b) const
-	{
-		return a->getName() < b->getName();
-	}
-};
-
 U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)
 {
-	const char ENDL = '\n';
-
-	llinfos << "Saving settings to file: " << filename << llendl;
-
-	// place the objects in a temporary container that enforces a sort
-	// order to ease manual editing of the file
-
-	typedef std::set< LLControlBase*, compare_controls > control_list_t;
-	control_list_t controls;
-
+	LLSD settings;
+	int num_saved = 0;
 	for (ctrl_name_table_t::iterator iter = mNameTable.begin();
 		 iter != mNameTable.end(); iter++)
 	{
-		LLString name = iter->first;
-		if (name.empty())
-		{
-			CONTROL_ERRS << "Control with no name found!!!" << llendl;
-			break;
-		}
-
-		LLControlBase* control = (LLControlBase *)iter->second;
+		LLControlVariable* control = iter->second;
 		if (!control)
 		{
-			llwarns << "Tried to save invalid control: " << name << llendl;
+			llwarns << "Tried to save invalid control: " << iter->first << llendl;
 		}
 
-		if( control && control->mPersist )
+		if( control && control->isPersisted() )
 		{
-			if (!(nondefault_only && (control->mIsDefault)))
+			if (!(nondefault_only && (control->isSaveValueDefault())))
 			{
-				controls.insert( control );
+				settings[iter->first]["Type"] = typeEnumToString(control->type());
+				settings[iter->first]["Comment"] = control->getComment();
+				settings[iter->first]["Value"] = control->getSaveValue();
+				++num_saved;
 			}
 			else
 			{
@@ -1080,156 +937,58 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)
 			}
 		}
 	}
-
 	llofstream file;
-	file.open(filename.c_str());		/*Flawfinder: ignore*/
-
-	if (!file.is_open())
+	file.open(filename.c_str());
+	if (file.is_open())
 	{
-		// This is a warning because sometime we want to use settings files which can't be written...
-		llwarns << "LLControlGroup::saveToFile unable to open file for writing" << llendl;
-		return 0;
+		LLSDSerialize::toPrettyXML(settings, file);
+		file.close();
+		llinfos << "Saved to " << filename << llendl;
 	}
-
-	// Write file version
-	file << "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n";
-	file << "<settings version = \"" << CURRENT_VERSION << "\">\n";
-	for (control_list_t::iterator iter = controls.begin();
-		 iter != controls.end(); ++iter)
+	else
 	{
-		LLControlBase* control = *iter;
-		file << "\t<!--" << control->comment() << "-->" << ENDL;
-		LLString name = control->getName();
-		switch (control->type())
-		{
-			case TYPE_U32:
-			{
-				file << "\t<" << name << " value=\"" << (U32) control->get().asInteger() << "\"/>\n";
-				break;
-			}
-			case TYPE_S32:
-			{
-				file << "\t<" << name << " value=\"" << (S32) control->get().asInteger() << "\"/>\n";
-				break;
-			}
-			case TYPE_F32:
-			{
-				file << "\t<" << name << " value=\"" << (F32) control->get().asReal() << "\"/>\n";
-				break;
-			}
-			case TYPE_VEC3:
-			{
-				LLVector3 vector(control->get());
-				file << "\t<" << name << " value=\"" << vector.mV[VX] << " " << vector.mV[VY] << " " << vector.mV[VZ] << "\"/>\n";
-				break;
-			}
-			case TYPE_VEC3D:
-			{
-				LLVector3d vector(control->get());
-				file << "\t<" << name << " value=\"" << vector.mdV[VX] << " " << vector.mdV[VY] << " " << vector.mdV[VZ] << "\"/>\n";
-				break;
-			}
-			case TYPE_RECT:
-			{
-				LLRect rect(control->get());
-				file << "\t<" << name << " value=\"" << rect.mLeft << " " << rect.mBottom << " " << rect.getWidth() << " " << rect.getHeight() << "\"/>\n";
-				break;
-			}
-			case TYPE_COL4:
-			{
-				LLColor4 color(control->get());
-				file << "\t<" << name << " value=\"" << color.mV[VRED] << ", " << color.mV[VGREEN] << ", " << color.mV[VBLUE] << ", " << color.mV[VALPHA] << "\"/>\n";
-				break;
-			}
-			case TYPE_COL3:
-			{
-				LLColor3 color(control->get());
-				file << "\t<" << name << " value=\"" << color.mV[VRED] << ", " << color.mV[VGREEN] << ", " << color.mV[VBLUE] << "\"/>\n";
-				break;
-			}
-			case TYPE_BOOLEAN:
-			{
-				file << "\t<" << name << " value=\"" << (control->get().asBoolean() ? "TRUE" : "FALSE") << "\"/>\n";			
-				break;
-			}
-			case TYPE_STRING:
-			{
-				file << "\t<" << name << " value=\"" << LLSDXMLFormatter::escapeString(control->get().asString()) << "\"/>\n";
-				break;
-			}
-			default:
-			{
-				CONTROL_ERRS << "LLControlGroup::saveToFile - unknown control type!" << llendl;
-				break;
-			}
-		}
-
-		// Debug spam
-		// llinfos << name << " " << control->getValue().asString() << llendl;
-	}// next
-
-	file << "</settings>\n";
-	file.close();
-
-	return controls.size();
+        // This is a warning because sometime we want to use settings files which can't be written...
+		llwarns << "Unable to open settings file: " << filename << llendl;
+		return 0;
+	}
+	return num_saved;
 }
 
-void LLControlGroup::applyOverrides(const std::map<std::string, std::string>& overrides)
+U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declaration, eControlType declare_as)
 {
-	for (std::map<std::string, std::string>::const_iterator iter = overrides.begin();
-		 iter != overrides.end(); ++iter)
+	LLString name;
+	LLSD settings;
+	LLSD control_map;
+	llifstream infile;
+	infile.open(filename.c_str());
+	if(!infile.is_open())
 	{
-		const std::string& command = iter->first;
-		const std::string& value = iter->second;
-		LLControlBase* control = (LLControlBase *)mNameTable[command];
-		if (control)
-		{
-			switch(control->mType)
-			{
-			case TYPE_U32:
-				control->set((LLSD::Integer)atof(value.c_str()));
-				break;
-			case TYPE_S32:
-				control->set((S32)atof(value.c_str()));
-				break;
-			case TYPE_F32:
-				control->set((F32)atof(value.c_str()));
-				break;
-			case TYPE_BOOLEAN:
-			  	if (!LLString::compareInsensitive(value.c_str(), "TRUE"))
-				{
-					control->set(TRUE);
-				} 
-				else if (!LLString::compareInsensitive(value.c_str(), "FALSE"))
-				{
-					control->set(FALSE);
-				}
-				else
-				{
-					control->set((BOOL)atof(value.c_str()));
-				}
-				break;
-			case TYPE_STRING:
-				control->set(value);
-				break;
-//			// *FIX: implement this given time and need.
-//			case TYPE_UUID:
-//				break;
-			// we don't support command line overrides of vec3 or col4
-			// yet - requires parsing of multiple values
-			case TYPE_VEC3:
-			case TYPE_VEC3D:
-			case TYPE_COL4:
-			case TYPE_COL3:
-			default:
-				break;
-			}
-		}
-		else
-		{
-			llinfos << "There is no control variable " << command << llendl;
-		}
+		llwarns << "Cannot find file " << filename << " to load." << llendl;
+		return 0;
+	}
+	S32 ret = LLSDSerialize::fromXML(settings, infile);
+	if (ret <= 0)
+	{
+		infile.close();
+		llwarns << "Unable to open LLSD control file " << filename << ". Trying Legacy Method." << llendl;		
+		return loadFromFileLegacy(filename, require_declaration, declare_as);
+	}
+
+	U32		validitems = 0;
+	int persist = 1;
+	for(LLSD::map_const_iterator itr = settings.beginMap(); itr != settings.endMap(); ++itr)
+	{
+		name = (*itr).first;
+		control_map = (*itr).second;
+		
+		if(control_map.has("Persist")) persist = control_map["Persist"].asInteger();
+		
+		declareControl(name, typeStringToEnum(control_map["Type"].asString()), control_map["Value"], control_map["Comment"].asString(), persist);
+		
+		++validitems;
 	}
+
+	return validitems;
 }
 
 void LLControlGroup::resetToDefaults()
@@ -1239,11 +998,20 @@ void LLControlGroup::resetToDefaults()
 		control_iter != mNameTable.end();
 		++control_iter)
 	{
-		LLControlBase* control = (*control_iter).second;
+		LLControlVariable* control = (*control_iter).second;
 		control->resetToDefault();
 	}
 }
 
+void LLControlGroup::applyToAll(ApplyFunctor* func)
+{
+	for (ctrl_name_table_t::iterator iter = mNameTable.begin();
+		 iter != mNameTable.end(); iter++)
+	{
+		func->apply(iter->first, iter->second);
+	}
+}
+
 //============================================================================
 // First-use
 
@@ -1264,7 +1032,7 @@ static LLString get_warn_name(const LLString& name)
 void LLControlGroup::addWarning(const LLString& name)
 {
 	LLString warnname = get_warn_name(name);
-	if(!mNameTable[warnname])
+	if(mNameTable.find(warnname) == mNameTable.end())
 	{
 		LLString comment = LLString("Enables ") + name + LLString(" warning dialog");
 		declareBOOL(warnname, TRUE, comment);
@@ -1293,91 +1061,6 @@ void LLControlGroup::resetWarnings()
 	}
 }
 
-
-
-//=============================================================================
-// Listener ID generator/management
-
-void	LLControlBase::releaseListenerID(S32	id)
-{	
-	mFreeIDs.push_back(id);
-}
-
-S32	LLControlBase::allocateListenerID()
-{	
-	if(mFreeIDs.size() == 0)
-	{	//Out of IDs so generate some new ones.
-		for(int t=0;t<32;t++)
-		{
-			mFreeIDs.push_back(mTopID++);
-		}
-	}
-	S32	rtn = mFreeIDs.front();
-	mFreeIDs.pop_front();
-	mUsedIDs.push_back(rtn);
-	return rtn;
-}
-
-bool LLControlBase::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-{
-	if (event->desc() == "value_changed")
-	{
-		setValue(((LLValueChangedEvent*)(LLEvent*)event)->mValue);
-		return TRUE;
-	}
-	return TRUE;
-}
-
-void LLControlBase::firePropertyChanged()
-{
-	LLValueChangedEvent *evt = new LLValueChangedEvent(this, getValue());
-	fireEvent(evt, "");
-}
-
-//============================================================================
-// Used to add a listener callback that will be called on the frame that the controls value changes
-
-S32 LLControl::addListener(LLControl::tListenerCallback* cbfn)
-{
-	S32	id = allocateListenerID();
-	mListeners.push_back(cbfn);
-	mListenerIDs.push_back( id );
-	return id;
-}
-
-void LLControl::updateListeners() {
-	LLControl::tPropertyChangedListIter iter = mChangeEvents.begin();
-	while(iter!=mChangeEvents.end()){
-		LLControl::tPropertyChangedEvent&	evt = *iter;
-		(*evt.mCBFN)(evt.mNewValue,evt.mID,*this);
-		iter++;
-	}
-	mChangeEvents.clear();
-}
-
-//static
-void	LLControlBase::updateAllListeners()
-{
-	std::set< LLControlBase* >::iterator iter = mChangedControls.begin();
-	while(iter != mChangedControls.end()){
-		(*iter)->updateListeners();
-		iter++;
-	}
-	mChangedControls.clear();
-}
-
-LLControl::LLControl(
-	const LLString& name,
-	eControlType type,
-	LLSD initial,
-	const LLString& comment,
-	BOOL persist) :
-	LLControlBase(name, type, comment, persist),
-	mCurrent(initial),
-	mDefault(initial)
-{
-}
-
 //============================================================================
 
 #ifdef TEST_HARNESS
@@ -1393,17 +1076,17 @@ void main()
 	llinfos << "Loaded " << count << " controls" << llendl;
 
 	// test insertion
-	foo = new LLControl<F32>("gFoo", 5.f, 1.f, 20.f);
+	foo = new LLControlVariable<F32>("gFoo", 5.f, 1.f, 20.f);
 	gGlobals.addEntry("gFoo", foo);
 
-	bar = new LLControl<S32>("gBar", 10, 2, 22);
+	bar = new LLControlVariable<S32>("gBar", 10, 2, 22);
 	gGlobals.addEntry("gBar", bar);
 
-	baz = new LLControl<BOOL>("gBaz", FALSE);
+	baz = new LLControlVariable<BOOL>("gBaz", FALSE);
 	gGlobals.addEntry("gBaz", baz);
 
 	// test retrieval
-	getfoo = (LLControl<F32>*) gGlobals.resolveName("gFoo");
+	getfoo = (LLControlVariable<F32>*) gGlobals.resolveName("gFoo");
 	getfoo->dump();
 
 	getbar = (S32_CONTROL) gGlobals.resolveName("gBar");
@@ -1416,10 +1099,10 @@ void main()
 	// Failure modes
 
 	// ...min > max
-	// badfoo = new LLControl<F32>("gFoo2", 100.f, 20.f, 5.f);
+	// badfoo = new LLControlVariable<F32>("gFoo2", 100.f, 20.f, 5.f);
 
 	// ...initial > max
-	// badbar = new LLControl<S32>("gBar2", 10, 20, 100000);
+	// badbar = new LLControlVariable<S32>("gBar2", 10, 20, 100000);
 
 	// ...misspelled name
 	// getfoo = (F32_CONTROL) gGlobals.resolveName("fooMisspelled");
@@ -1441,3 +1124,4 @@ void main()
 }
 #endif
 
+
diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h
index a1a2a4c85194c99561157d382fdf8b0dd9506550..7a638a7b73c1078c66e3faa2ef2ae250e24f1b70 100644
--- a/indra/llxml/llcontrol.h
+++ b/indra/llxml/llcontrol.h
@@ -38,6 +38,26 @@
 #include "llstring.h"
 #include "llrect.h"
 
+#include <vector>
+
+// *NOTE: boost::visit_each<> generates warning 4675 on .net 2003
+// Disable the warning for the boost includes.
+#if LL_WINDOWS
+# if (_MSC_VER >= 1300 && _MSC_VER < 1400)
+#   pragma warning(push)
+#   pragma warning( disable : 4675 )
+# endif
+#endif
+
+#include <boost/bind.hpp>
+#include <boost/signal.hpp>
+
+#if LL_WINDOWS
+# if (_MSC_VER >= 1300 && _MSC_VER < 1400)
+#   pragma warning(pop)
+# endif
+#endif
+
 class LLVector3;
 class LLVector3d;
 class LLColor4;
@@ -48,7 +68,7 @@ const BOOL NO_PERSIST = FALSE;
 
 typedef enum e_control_type
 {
-	TYPE_U32,
+	TYPE_U32 = 0,
 	TYPE_S32,
 	TYPE_F32,
 	TYPE_BOOLEAN,
@@ -58,159 +78,82 @@ typedef enum e_control_type
 	TYPE_RECT,
 	TYPE_COL4,
 	TYPE_COL3,
-	TYPE_COL4U
+	TYPE_COL4U,
+	TYPE_LLSD,
+	TYPE_COUNT
 } eControlType;
 
-class LLControlBase : public LLSimpleListenerObservable
+class LLControlVariable
 {
-friend class LLControlGroup;
-protected:
+	friend class LLControlGroup;
+	typedef boost::signal<void(const LLSD&)> signal_t;
+
+private:
 	LLString		mName;
 	LLString		mComment;
 	eControlType	mType;
-	BOOL			mHasRange;
 	BOOL			mPersist;
-	BOOL            mIsDefault;
-
-	static	std::set<LLControlBase*>	mChangedControls;
-	static	std::list<S32>				mFreeIDs;//These lists are used to store the ID's of registered event listeners.
-	static	std::list<S32>				mUsedIDs;
-	static	S32							mTopID;//This is the index of the highest ID event listener ID. When the free pool is exhausted, new IDs are allocated from here.
-
+	std::vector<LLSD> mValues;
+	
+	signal_t mSignal;
+	
 public:
-	static	void						releaseListenerID(S32	id);
-	static	S32							allocateListenerID();
-	static	void						updateAllListeners();
-	virtual void updateListeners() = 0;
-
-	LLControlBase(const LLString& name, eControlType type, const LLString& comment, BOOL persist)
-		: mName(name),
-		mComment(comment),
-		mType(type),
-		mHasRange(FALSE),
-		mPersist(persist),
-		mIsDefault(TRUE)
-	{ 
-		if (mPersist && mComment.empty())
-		{
-			llerrs << "Must supply a comment for control " << mName << llendl;
-		}
-		sMaxControlNameLength = llmax((U32)mName.size(), sMaxControlNameLength);
-	}
-
-	virtual ~LLControlBase();
+	LLControlVariable(const LLString& name, eControlType type,
+					  LLSD initial, const LLString& comment,
+					  BOOL persist = TRUE);
 
+	virtual ~LLControlVariable();
+	
 	const LLString& getName() const { return mName; }
 	const LLString& getComment() const { return mComment; }
 
 	eControlType type()		{ return mType; }
-	BOOL	isType(eControlType tp) { return tp == mType; }
-
-	// Defaults to no-op
-	virtual void resetToDefault();
-
-	LLSD registerListener(LLSimpleListenerObservable *listener, LLSD userdata = "");
-
-	virtual LLSD get() const = 0;
-	virtual LLSD getValue() const = 0;
-	virtual void setValue(LLSD value) = 0;
-	virtual void set(LLSD value) = 0;
-
-	// From LLSimpleListener
-	virtual bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
-
-	void firePropertyChanged();
-
-	static U32	sMaxControlNameLength;
-
-protected:
-	const char* name()			{ return mName.c_str(); }
-	const char* comment()		{ return mComment.c_str(); }
-};
-
-class LLControl
-: public LLControlBase
-{
-friend class LLControlGroup;
-protected:
-	LLSD mCurrent;
-	LLSD mDefault;
-
-public:	
-
-	typedef void	tListenerCallback(const LLSD&	newValue,S32	listenerID, LLControl& control);
-	typedef struct{
-		S32					mID;
-		LLSD			mNewValue;
-		tListenerCallback*	mCBFN;
-	}tPropertyChangedEvent;
-
-	typedef std::list<tPropertyChangedEvent>::iterator tPropertyChangedListIter;
-	std::list<tPropertyChangedEvent>	mChangeEvents;
-	std::list< tListenerCallback* >		mListeners;
-	std::list< S32 >					mListenerIDs;
-
-	virtual void						updateListeners();
-	S32									addListener(tListenerCallback*	cbfn);
-	
-	LLControl(
-		const LLString& name,
-		eControlType type,
-		LLSD initial, const
-		LLString& comment,
-		BOOL persist = TRUE);
-
-	void set(LLSD val)			{ setValue(val); }
-	LLSD get()			const	{ return getValue(); } 
-	LLSD getdefault()	const	{ return mDefault; }
-	LLSD getValue()		const	{ return mCurrent; }
-	BOOL llsd_compare(const LLSD& a, const LLSD& b);
-
-	void setValue(LLSD value)			
-	{ 
-		if (llsd_compare(mCurrent, value) == FALSE)
-		{
-			mCurrent = value; 
-			mIsDefault = llsd_compare(mCurrent, mDefault); 
-			firePropertyChanged(); 
-		}
-	}
-
-	/*virtual*/ void resetToDefault() 
-	{ 
-		setValue(mDefault);
-	}
-
-	virtual	~LLControl()
+	BOOL isType(eControlType tp) { return tp == mType; }
+
+	void resetToDefault(bool fire_signal = TRUE);
+
+	signal_t* getSignal() { return &mSignal; }
+
+	bool isDefault() { return (mValues.size() == 1); }
+	bool isSaveValueDefault();
+	bool isPersisted() { return mPersist; }
+	void set(const LLSD& val)	{ setValue(val); }
+	LLSD get()			const	{ return getValue(); }
+	LLSD getDefault()	const	{ return mValues.front(); }
+	LLSD getValue()		const	{ return mValues.back(); }
+	LLSD getSaveValue() const;
+	void setValue(const LLSD& value, bool saved_value = TRUE);
+	void firePropertyChanged()
 	{
-		//Remove and deregister all listeners..
-		while(mListenerIDs.size())
-		{
-			S32	id = mListenerIDs.front();
-			mListenerIDs.pop_front();
-			releaseListenerID(id);
-		}
+		mSignal(mValues.back());
 	}
+	BOOL llsd_compare(const LLSD& a, const LLSD& b);
 };
 
 //const U32 STRING_CACHE_SIZE = 10000;
 class LLControlGroup
 {
-public:
-	typedef std::map<LLString, LLPointer<LLControlBase> > ctrl_name_table_t;
+protected:
+	typedef std::map<LLString, LLControlVariable* > ctrl_name_table_t;
 	ctrl_name_table_t mNameTable;
 	std::set<LLString> mWarnings;
-	std::set<LLString> mLoadedSettings;	// Filled in with names loaded from settings.xml
+	LLString mTypeString[TYPE_COUNT];
 
+	eControlType typeStringToEnum(const LLString& typestr);
+	LLString typeEnumToString(eControlType typeenum);	
 public:
 	LLControlGroup();
 	~LLControlGroup();
 	void cleanup();
-	bool hasLoaded(const LLString& name) { return mLoadedSettings.find(name) != mLoadedSettings.end(); }
-	void clearLoaded() { mLoadedSettings.clear(); } // Call once we've done any settings tweaks which may need this data
 	
-	LLControlBase*	getControl(const LLString& name);
-	LLSD registerListener(const LLString& name, LLSimpleListenerObservable *listener);
+	LLControlVariable*	getControl(const LLString& name);
+
+	struct ApplyFunctor
+	{
+		virtual ~ApplyFunctor() {};
+		virtual void apply(const LLString& name, LLControlVariable* control) = 0;
+	};
+	void applyToAll(ApplyFunctor* func);
 	
 	BOOL declareControl(const LLString& name, eControlType type, const LLSD initial_val, const LLString& comment, BOOL persist);
 	BOOL declareU32(const LLString& name, U32 initial_val, const LLString& comment, BOOL persist = TRUE);
@@ -224,6 +167,7 @@ public:
 	BOOL declareColor4U(const LLString& name, const LLColor4U &initial_val, const LLString& comment, BOOL persist = TRUE);
 	BOOL declareColor4(const LLString& name, const LLColor4 &initial_val, const LLString& comment, BOOL persist = TRUE);
 	BOOL declareColor3(const LLString& name, const LLColor3 &initial_val, const LLString& comment, BOOL persist = TRUE);
+	BOOL declareLLSD(const LLString& name, const LLSD &initial_val, const LLString& comment, BOOL persist = TRUE);
 	
 	LLString 	findString(const LLString& name);
 
@@ -237,7 +181,7 @@ public:
 	S32			getS32(const LLString& name);
 	F32			getF32(const LLString& name);
 	U32			getU32(const LLString& name);
-	LLSD		getValue(const LLString& name);
+	LLSD        getLLSD(const LLString& name);
 
 
 	// Note: If an LLColor4U control exists, it will cast it to the correct
@@ -258,19 +202,21 @@ public:
 	void	setColor4U(const LLString& name, const LLColor4U &val);
 	void	setColor4(const LLString& name, const LLColor4 &val);
 	void	setColor3(const LLString& name, const LLColor3 &val);
+	void    setLLSD(const LLString& name, const LLSD& val);
 	void	setValue(const LLString& name, const LLSD& val);
-
+	
+	
 	BOOL    controlExists(const LLString& name);
 
 	// Returns number of controls loaded, 0 if failed
 	// If require_declaration is false, will auto-declare controls it finds
 	// as the given type.
-	U32		loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
-	U32		loadFromFile(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
-	U32		saveToFile(const LLString& filename, BOOL skip_if_default);
-	void	applyOverrides(const std::map<std::string, std::string>& overrides);
+	U32	loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
+ 	U32 saveToFile(const LLString& filename, BOOL nondefault_only);
+ 	U32	loadFromFile(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
 	void	resetToDefaults();
 
+	
 	// Ignorable Warnings
 	
 	// Add a config variable to be reset on resetWarnings()
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01c590c1f33e4f1e3c3e52f2ce9c0d3498d29f30
--- /dev/null
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -0,0 +1,323 @@
+<?xml version="1.0"?>
+<llsd>
+  <map>
+    <key>help</key>
+    <map>
+      <key>desc</key>
+      <string>display this help message</string>
+
+      <key>short</key>
+      <string>h</string>
+    </map>
+
+    <key>port</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>UserConnectionPort</string>
+    </map>
+
+    <key>drop</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>PacketDropPercentage</string>
+    </map>
+
+    <key>inbw</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>InBandwidth</string>
+    </map>
+
+    <key>outbw</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>OutBandwidth</string>
+    </map>
+
+    <key>grid</key>
+    <map>
+      <key>desc</key>
+      <string>Specify the name of the grid, local, or an IP address to connect to.</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>GridChoice</string>
+    </map>
+
+    <key>loginuri</key>
+    <map>
+      <key>desc</key>
+      <string>login server and CGI script to use</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>compose</key>
+      <boolean>true</boolean>
+      <key>map-to</key>
+      <string>LoginURI</string>
+    </map>
+
+    <key>helperuri</key>
+    <map>
+      <key>desc</key>
+      <string>helper web CGI prefix to use</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>HelperURI</string>
+    </map>
+
+    <key>debugviews</key>
+    <map>
+      <key>map-to</key>
+      <string>DebugViews</string>
+    </map>
+
+    <key>skin</key>
+    <map>
+      <key>desc</key>
+      <string>ui/branding skin folder to use</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>SkinFolder</string>
+    </map>
+
+    <key>autologin</key>
+    <map>
+      <key>desc</key>
+      <string>log in as last saved user</string>
+      <key>map-to</key>
+      <string>AutoLogin</string>
+    </map>
+
+    <key>quitafter</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>QuitAfterSeconds</string>
+    </map>
+
+    <key>rotate</key>
+    <map>
+      <key>map-to</key>
+      <string>RotateRight</string>
+    </map>
+
+    <key>noaudio</key>
+    <map>
+      <key>map-to</key>
+      <string>NoAudio</string>
+    </map>
+
+    <key>nosound</key>
+    <map>
+      <key>map-to</key>
+      <string>NoAudio</string>
+    </map>
+
+    <key>noprobe</key>
+    <map>
+      <key>map-to</key>
+      <string>NoHardwareProbe</string>
+    </map>
+
+    <key>noquicktime</key>
+    <map>
+      <key>map-to</key>
+      <string>NoQuickTime</string>
+    </map>
+
+    <key>nopreload</key>
+    <map>
+      <key>map-to</key>
+      <string>NoPreload</string>
+    </map>
+
+    <key>purge</key>
+    <map>
+      <key>desc</key>
+      <string>Delete files in the cache.</string>
+      <key>map-to</key>
+      <string>PurgeCacheOnNextStartup</string>
+    </map>
+
+    <key>noinvlib</key>
+    <map>
+      <key>desc</key>
+      <string>Do not request the inventory library.</string>
+      <key>map-to</key>
+      <string>NoInventoryLibrary</string>
+    </map>
+
+    <key>logfile</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>UserLogFile</string>
+    </map>
+
+    <key>setdefault</key>
+    <map>
+      <key>desc</key>
+      <string>
+        "specify the value of a particular\n
+        configuration variable which can be\n
+        overridden by settings.xml\n"
+      </string>
+      <key>count</key>
+      <integer>2</integer>
+      <!-- Special case. Mapped to settings procedurally. -->
+    </map>
+
+    <key>set</key>
+    <map>
+      <key>desc</key>
+      <string>
+        "specify the value of a particular\n
+        configuration variable that\n
+        overrides all other settings\n"
+      </string>
+      <key>count</key>
+      <integer>2</integer>
+      <!-- Special case. Mapped to settings procedurally. -->
+    </map>
+
+    <key>settings</key>
+    <map>
+      <key>desc</key>
+      <string>Specify the filename of a configuration file.</string>
+      <key>count</key>
+      <integer>1</integer>
+      <!-- Special case. Mapped to settings procedurally. -->
+    </map>
+
+    <key>login</key>
+    <map>
+      <key>desc</key>
+      <string>3 tokens: first, last and password</string>
+      <key>count</key>
+      <integer>3</integer>
+      <key>map-to</key>
+      <string>UserLoginInfo</string>
+    </map>
+
+    <key>god</key>
+    <map>
+      <key>desc</key>
+      <string>Log in a god if you have god access.</string>
+      <key>map-to</key>
+      <string>ConnectAsGod</string>
+    </map>
+
+    <key>console</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>ShowConsoleWindow</string>
+    </map>
+
+    <key>safe</key>
+    <map>
+      <key>desc</key>
+      <string>Reset preferences, run in safe mode.</string>
+      <key>map-to</key>
+      <string>SafeMode</string>
+    </map>
+
+    <key>multiple</key>		  
+    <map>
+      <key>desc</key>
+      <string>Allow multple viewers.</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>AllowMultipleViewers</string>
+    </map>
+
+    <key>novoice</key>
+    <map>
+      <key>desc</key>
+      <string>Disable voice.</string>
+      <key>map-to</key>
+      <string>CmdLineDisableVoice</string>
+    </map>
+
+    <key>url</key>
+    <map>
+      <key>desc</key>
+      <string>Startup location</string>            
+      <key>count</key>
+      <integer>1</integer>
+      <key>last_option</key>
+      <boolean>true</boolean>
+      <!-- Special case. Not mapped to a setting. -->
+    </map>
+
+    <key>slurl</key>
+    <map>
+      <key>desc</key>
+      <string>Startup SLurl</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>positional</key>
+      <boolean>true</boolean>
+      <key>last_option</key>
+      <boolean>true</boolean>
+      <!-- Special case. Not mapped to a setting. -->
+    </map>
+
+    <key>ignorepixeldepth</key>
+    <map>
+      <key>desc</key>
+      <string>Ignore pixel depth settings.</string>
+      <key>map-to</key>
+      <string>IgnorePixelDepth</string>
+    </map>
+
+    <key>cooperative</key>
+    <map>
+      <key>desc</key>
+      <string>Yield some idle time to local host.</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>YieldTime</string>
+    </map>
+
+    <key>no-verify-ssl-cert</key>
+    <map>
+      <key>map-to</key>
+      <string>NoVerifySSLCert</string>
+    </map>
+
+    <key>channel</key>
+    <map>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>VersionChannelName</string>
+    </map>
+
+    <key>loginpage</key>
+    <map>
+      <key>desc</key>
+      <string>Login authentication page to use.</string>
+      <key>count</key>
+      <integer>1</integer>
+      <key>map-to</key>
+      <string>LoginPage</string>
+    </map>
+
+  </map>
+</llsd>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9cc61b4827255d80efdcb8694bc1f2e8b1afc0ac
--- /dev/null
+++ b/indra/newview/app_settings/settings.xml
@@ -0,0 +1,9604 @@
+<llsd>
+    <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>
+    <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>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>
+    <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>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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <key>CmdLineDisableVoice</key>
+        <map>
+        <key>Comment</key>
+            <string>Disable Voice.</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <key>FloaterCameraRect2</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>166</integer>
+                <integer>128</integer>
+                <integer>342</integer>
+                <integer>64</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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>0</integer>
+                <integer>400</integer>
+                <integer>400</integer>
+                <integer>0</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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>FlycamAutoLeveling</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>FlycamAxis0</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>0</integer>
+        </map>
+    <key>FlycamAxis1</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>1</integer>
+        </map>
+    <key>FlycamAxis2</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>FlycamAxis3</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>3</integer>
+        </map>
+    <key>FlycamAxis4</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>4</integer>
+        </map>
+    <key>FlycamAxis5</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>FlycamAxis6</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>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.1000000014901161193847656</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.1000000014901161193847656</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.1000000014901161193847656</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.1000000014901161193847656</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.1000000014901161193847656</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.1000000014901161193847656</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.1000000014901161193847656</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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <key>MapShowPopular</key>
+        <map>
+        <key>Comment</key>
+            <string>Show popular places 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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <key>RenderLightingDetail</key>
+        <map>
+        <key>Comment</key>
+            <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>S32</string>
+        <key>Value</key>
+            <integer>1</integer>
+        </map>
+    <key>RenderMaxPartCount</key>
+        <map>
+        <key>Comment</key>
+            <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>RenderUseCleverUI</key>
+        <map>
+        <key>Comment</key>
+            <string>Turns on the \"clever\" UI rendering optimization.  It's a known performace gain (and enabled by default) on apple.</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>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>
+    <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>
+    <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>
+    <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>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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <key>RunMultipleThreads</key>
+        <map>
+        <key>Comment</key>
+            <string>If TRUE keep background threads active during render</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>SafeMode</key>
+        <map>
+        <key>Comment</key>
+            <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>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>
+    <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>
+    <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>
+    <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.819999992847442626953125</real>
+                <real>0.819999992847442626953125</real>
+                <real>0.9900000095367431640625</real>
+                <real>1</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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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.1000000014901161193847656</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>
+    <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>
+    <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.1000000014901161193847656</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>
+    <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>
+    <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>
+    <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>
+    <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>0</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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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.1000000014901161193847656</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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>UserSettingsFile</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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>
+    <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>AlertedUnsupportedHardware</key>
+		<map>
+		<key>Comment</key>
+			<string>Toggle that lets us tell the user he's on old hardware only once</string>
+		<key>Persist</key>
+			<integer>1</integer>
+		<key>Type</key>
+			<string>Boolean</string>
+		<key>Value</key>
+			<integer>0</integer>
+		</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>1</integer>
+		</map>
+    </map>
+</llsd>
diff --git a/indra/newview/app_settings/settings_crash_behavior.xml b/indra/newview/app_settings/settings_crash_behavior.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc7f5ac88b5362720f37053c514ae5d99c5eab99
--- /dev/null
+++ b/indra/newview/app_settings/settings_crash_behavior.xml
@@ -0,0 +1,15 @@
+<llsd>
+    <map>
+    <key>CrashSubmitBehavior</key>
+        <map>
+        <key>Comment</key>
+            <string>Controls behavior when viewer crashes (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
+		<key>Persist</key>
+		    <integer>1</integer>
+        <key>Type</key>
+            <string>S32</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    </map>
+</llsd>
diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml
new file mode 100644
index 0000000000000000000000000000000000000000..997bb0c33cb1e64256b9c4216b713792ed561c4c
--- /dev/null
+++ b/indra/newview/app_settings/settings_files.xml
@@ -0,0 +1,22 @@
+<llsd>
+  <map>
+    <key>Files</key>
+        <map>
+        <key>Comment</key>
+            <string>List of settings files to load. Key is the identifier, value is the filename</string>
+        <key>Persist</key>
+            <integer>0</integer>
+        <key>Type</key>
+            <string>LLSD</string>
+        <key>Value</key>
+		<map>
+		  <key>Global</key>
+		  <string>settings.xml</string>
+		  <key>PerAccount</key>
+		  <string>settings_per_account.xml</string>
+		  <key>CrashSettings</key>
+		  <string>settings_crash_behavior.xml</string>
+		</map>
+		</map>
+  </map>
+</llsd>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
new file mode 100644
index 0000000000000000000000000000000000000000..90c7b116379f8d5bed8ad5ada3f777aeb0e357e9
--- /dev/null
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -0,0 +1,114 @@
+<llsd>
+    <map>
+    <key>BusyModeResponse</key>
+        <map>
+        <key>Comment</key>
+            <string>Auto response to instant messages while in busy mode.</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>String</string>
+        <key>Value</key>
+            <string>The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed.  Your message will still be shown in their IM panel for later viewing.</string>
+        </map>
+    <key>IMLogTimestamp</key>
+        <map>
+        <key>Comment</key>
+            <string>Log Timestamp of Instant Messages</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>1</integer>
+        </map>
+    <key>InstantMessageLogPath</key>
+        <map>
+        <key>Comment</key>
+            <string>Path to your log files.</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>String</string>
+        <key>Value</key>
+            <string />
+        </map>
+    <key>LastLogoff</key>
+        <map>
+        <key>Comment</key>
+            <string>Last logoff</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>U32</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>LogChat</key>
+        <map>
+        <key>Comment</key>
+            <string>Log Chat</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>LogChatIM</key>
+        <map>
+        <key>Comment</key>
+            <string>Log Incoming Instant Messages with Chat</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>LogChatTimestamp</key>
+        <map>
+        <key>Comment</key>
+            <string>Log Timestamp of Chat</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>LogInstantMessages</key>
+        <map>
+        <key>Comment</key>
+            <string>Log Instant Messages</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>1</integer>
+        </map>
+    <key>LogShowHistory</key>
+        <map>
+        <key>Comment</key>
+            <string>Log Show History</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>1</integer>
+        </map>
+    <key>LogTimestampDate</key>
+        <map>
+        <key>Comment</key>
+            <string>Include Date with Timestamp</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>1</integer>
+        </map>
+    </map>
+</llsd>
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index 420f0811ffffd37ec6ebc6365ce0dfe48ba177e2..2fe23c9a51c8fe49eff1eb56884a3e0e542b23fd 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -917,19 +917,19 @@ Function .onInit
 	
 	; generate language ID that will be used as a command line arg	
 	StrCmp $LANGUAGE "1042" 0 +3
-	StrCpy $LANGFLAGS " -set SystemLanguage ko"
+	StrCpy $LANGFLAGS " --set SystemLanguage ko"
 	Goto EndOfFunc
 
 	StrCmp $LANGUAGE "1041" 0 +3
-	StrCpy $LANGFLAGS " -set SystemLanguage ja"
+	StrCpy $LANGFLAGS " --set SystemLanguage ja"
 	Goto EndOfFunc
 
 	StrCmp $LANGUAGE "1031" 0 +3
-	StrCpy $LANGFLAGS " -set SystemLanguage de"
+	StrCpy $LANGFLAGS " --set SystemLanguage de"
 	Goto EndOfFunc
 
 	StrCmp $LANGUAGE "1033" 0 +3
-	StrCpy $LANGFLAGS " -set SystemLanguage en-us"
+	StrCpy $LANGFLAGS " --set SystemLanguage en-us"
 	Goto EndOfFunc
 	
 	EndOfFunc:
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index ac92ee852526c182015c0f3e00a64fef160c2695..4dab653d1997794b758916cd353683b07558fa6a 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -273,8 +273,7 @@ void LLAgentFriendObserver::changed(U32 mask)
 // LLAgent()
 //-----------------------------------------------------------------------------
 LLAgent::LLAgent()
-:	mViewerPort(NET_USE_OS_ASSIGNED_PORT),
-	mDrawDistance( DEFAULT_FAR_PLANE ),
+:	mDrawDistance( DEFAULT_FAR_PLANE ),
 
 	mDoubleTapRunTimer(),
 	mDoubleTapRunMode(DOUBLETAP_NONE),
@@ -455,8 +454,6 @@ void LLAgent::init()
 	mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject");
 
 //	LLDebugVarMessageBox::show("Camera Lag", &CAMERA_FOCUS_HALF_LIFE, 0.5f, 0.01f);
-	gSavedSettings.getControl("RenderHideGroupTitle")->addListener(&mHideGroupTitleListener);
-	gSavedSettings.getControl("EffectColor")->addListener(&mEffectColorListener);
 
 	mEffectColor = gSavedSettings.getColor4("EffectColor");
 	
@@ -7466,19 +7463,6 @@ void LLAgent::userRemoveAllAttachments( void* userdata )
 	gMessageSystem->sendReliable( gAgent.getRegionHost() );
 }
 
-bool LLAgent::LLHideGroupTitleListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata)
-{
-	gAgent.setHideGroupTitle(event->getValue());
-	return true;
-
-}
-
-bool LLAgent::LLEffectColorListener::handleEvent(LLPointer<LLEvent> event, const LLSD &userdata)
-{
-	gAgent.setEffectColor(LLColor4(event->getValue()));
-	return true;
-}
-
 void LLAgent::observeFriends()
 {
 	if(!mFriendObserver)
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 469d2e4fe037961e44342f1c3707c5f8052491e7..50830a75f0b85c933e28d9d13a83e3140fc7044d 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -36,6 +36,7 @@
 
 #include "indra_constants.h"
 #include "llmath.h"
+#include "llcontrol.h"
 #include "llcoordframe.h"
 #include "llevent.h"
 #include "llagentconstants.h"
@@ -225,8 +226,8 @@ public:
 	// update internal datastructures and update the server with the
 	// new contribution level. Returns true if the group id was found
 	// and contribution could be set.
-	BOOL setGroupContribution(const LLUUID& group_id, S32 contribution);
-	BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile);
+	BOOL 			setGroupContribution(const LLUUID& group_id, S32 contribution);
+	BOOL 			setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile);
 	void			setHideGroupTitle(BOOL hide)	{ mHideGroupTitle = hide; }
 
 	//
@@ -686,7 +687,6 @@ protected:
 						BOOL notify = TRUE);
 public:
 	// TODO: Make these private!
-	U32				mViewerPort;				// Port this agent transmits on.
 	LLUUID			mSecureSessionID;			// secure token for this login session
 
 	F32				mDrawDistance;
@@ -932,21 +932,6 @@ private:
 		LLPointer<LLRefCount> mCB;
 	};
 
-	//control listeners
-	class LLHideGroupTitleListener: public LLSimpleListener
-	{
-	public:
-		bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata);
-	};
-
-	class LLEffectColorListener: public LLSimpleListener
-	{
-	public:
-		bool handleEvent(LLPointer<LLEvent> event, const LLSD &userdata);
-	};
-
-	LLHideGroupTitleListener mHideGroupTitleListener;
-	LLEffectColorListener mEffectColorListener;
 	LLFriendObserver* mFriendObserver;
 };
 
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 04daf7ceb79303d44e67b22b5e91a973a9bde931..0e2d28400deb0e633e6d15d022442a32b2adf676 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -62,10 +62,13 @@
 #include "llmutelist.h"
 #include "llurldispatcher.h"
 #include "llurlhistory.h"
+#include "llfirstuse.h"
 
 #include "llweb.h"
 #include "llsecondlifeurls.h"
 
+#include <boost/bind.hpp>
+
 #if LL_WINDOWS
 	#include "llwindebug.h"
 #endif
@@ -153,10 +156,7 @@
 
 #include "llinventoryview.h"
 
-// *FIX: Remove these once the command line params thing is figured out.
-// Yuck!
-static int gTempArgC = 0;
-static char** gTempArgV;
+#include "llcommandlineparser.h"
 
 // *FIX: These extern globals should be cleaned up.
 // The globals either represent state/config/resource-storage of either 
@@ -169,7 +169,6 @@ static char** gTempArgV;
 //----------------------------------------------------------------------------
 // llviewernetwork.h
 #include "llviewernetwork.h"
-// extern EGridInfo gGridChoice;
 
 
 ////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor
@@ -216,14 +215,8 @@ extern BOOL gPeriodicSlowFrame;
 
 ////////////////////////////////////////////////////////////
 // All from the last globals push...
-bool gVerifySSLCert = true;
 BOOL gHandleKeysAsync = FALSE;
 
-BOOL gProbeHardware = TRUE; // Use DirectX 9 to probe for hardware
-
-S32 gYieldMS = 0; // set in parse_args, used in mainLoop
-BOOL gYieldTime = FALSE;
-
 const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard
 
 F32 gSimLastTime; // Used in LLAppViewer::init and send_stats()
@@ -234,21 +227,10 @@ LLString gDisabledMessage; // Set in LLAppViewer::initConfiguration used in idle
 BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally
 
 BOOL				gAllowIdleAFK = TRUE;
-F32					gAFKTimeout = DEFAULT_AFK_TIMEOUT;
 BOOL				gShowObjectUpdates = FALSE;
-BOOL gLogMessages = FALSE;
-std::string gChannelName = LL_CHANNEL;
-BOOL gUseAudio = TRUE;
 BOOL gUseQuickTime = TRUE;
-LLString gCmdLineFirstName;
-LLString gCmdLineLastName;
-LLString gCmdLinePassword;
-
-BOOL				gAutoLogin = FALSE;
 
 const char*			DEFAULT_SETTINGS_FILE = "settings.xml";
-BOOL gRequestInventoryLibrary = TRUE;
-BOOL gGodConnect = FALSE;
 BOOL gAcceptTOS = FALSE;
 BOOL gAcceptCriticalMessage = FALSE;
 
@@ -278,7 +260,6 @@ F32					gLogoutMaxTime = LOGOUT_REQUEST_TIME;
 LLUUID gInventoryLibraryOwner;
 LLUUID gInventoryLibraryRoot;
 
-BOOL				gDisableVoice = FALSE;
 BOOL				gDisconnected = FALSE;
 
 // Map scale in pixels per region
@@ -290,17 +271,11 @@ LLFrameTimer	gRestoreGLTimer;
 BOOL			gRestoreGL = FALSE;
 BOOL				gUseWireframe = FALSE;
 
-F32					gMouseSensitivity = 3.f;
-BOOL				gInvertMouse = FALSE;
-
 // VFS globals - see llappviewer.h
 LLVFS* gStaticVFS = NULL;
 
 LLMemoryInfo gSysMemory;
 
-bool gPreloadImages = true;
-bool gPreloadSounds = true;
-
 LLString gLastVersionChannel;
 
 LLVector3			gWindVec(3.0, 3.0, 0.0);
@@ -310,34 +285,14 @@ U32		gPacketsIn = 0;
 
 BOOL				gPrintMessagesThisFrame = FALSE;
 
-BOOL gUseConsole = TRUE;
-
 BOOL gRandomizeFramerate = FALSE;
 BOOL gPeriodicSlowFrame = FALSE;
 
-BOOL gQAMode = FALSE;
 BOOL gLLErrorActivated = FALSE;
-
 ////////////////////////////////////////////////////////////
 // Internal globals... that should be removed.
-static F32 gQuitAfterSeconds = 0.f;
-static BOOL gRotateRight = FALSE;
-static BOOL gIgnorePixelDepth = FALSE;
-
-// Allow multiple viewers in ReleaseForDownload
-#if LL_RELEASE_FOR_DOWNLOAD
-static BOOL gMultipleViewersOK = FALSE;
-#else
-static BOOL gMultipleViewersOK = TRUE;
-#endif
-
-static std::map<std::string, std::string> gCommandLineSettings;
-static std::map<std::string, std::string> gCommandLineForcedSettings;
-
 static LLString gArgs;
 
-static LLString gOldSettingsFileName;
-static const char* LEGACY_DEFAULT_SETTINGS_FILE = "settings.ini";
 const char* MARKER_FILE_NAME = "SecondLife.exec_marker";
 const char* ERROR_MARKER_FILE_NAME = "SecondLife.error_marker";
 const char* LLERROR_MARKER_FILE_NAME = "SecondLife.llerror_marker";
@@ -359,52 +314,10 @@ std::string gLoginPage;
 std::vector<std::string> gLoginURIs;
 static std::string gHelperURI;
 
-static const char USAGE[] = "\n"
-"usage:\tviewer [options]\n"
-"options:\n"
-" -login <first> <last> <password>     log in as a user\n"
-" -autologin                           log in as last saved user\n"
-" -loginpage <URL>                     login authentication page to use\n"
-" -loginuri <URI>                      login server and CGI script to use\n"
-" -helperuri <URI>                     helper web CGI prefix to use\n"
-" -settings <filename>                 specify the filename of a\n"
-"                                        configuration file\n"
-"                                        default is settings.xml\n"
-" -setdefault <variable> <value>       specify the value of a particular\n"
-"                                        configuration variable which can be\n"
-"                                        overridden by settings.xml\n"
-" -set <variable> <value>              specify the value of a particular\n"
-"                                        configuration variable that\n"
-"                                        overrides all other settings\n"
-#if !LL_RELEASE_FOR_DOWNLOAD
-" -sim <simulator_ip>                  specify the simulator ip address\n"
-#endif
-" -god		                           log in as god if you have god access\n"
-" -purge                               delete files in cache\n"
-" -safe                                reset preferences, run in safe mode\n"
-" -noutc                               logs in local time, not UTC\n"
-" -nothread                            run vfs in single thread\n"
-" -noinvlib                            Do not request inventory library\n"
-" -multiple                            allow multiple viewers\n"
-" -nomultiple                          block multiple viewers\n"
-" -novoice                             disable voice\n"
-" -ignorepixeldepth                    ignore pixel depth settings\n"
-" -cooperative [ms]                    yield some idle time to local host\n"
-" -skin                                ui/branding skin folder to use\n"
-#if LL_WINDOWS
-" -noprobe                             disable hardware probe\n"
-#endif
-" -noquicktime                         disable QuickTime movies, speeds startup\n"
-" -nopreload                           don't preload UI images or sounds, speeds startup\n"
-// these seem to be unused
-//" -noenv                               turn off environmental effects\n"
-//" -proxy <proxy_ip>                    specify the proxy ip address\n"
-"\n";
-
 void idle_afk_check()
 {
 	// check idle timers
-	if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gAFKTimeout))
+	if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout")))
 	{
 		gAgent.setAFK();
 	}
@@ -443,7 +356,7 @@ void request_initial_instant_messages()
 
 // Use these strictly for things that are constructed at startup,
 // or for things that are performance critical.  JC
-static void saved_settings_to_globals()
+static void settings_to_globals()
 {
 	LLBUTTON_H_PAD		= gSavedSettings.getS32("ButtonHPad");
 	LLBUTTON_V_PAD		= gSavedSettings.getS32("ButtonVPad");
@@ -481,15 +394,15 @@ static void saved_settings_to_globals()
 
 	gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
 	gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK");
-	gAFKTimeout = gSavedSettings.getF32("AFKTimeout");
-	gMouseSensitivity = gSavedSettings.getF32("MouseSensitivity");
-	gInvertMouse = gSavedSettings.getBOOL("InvertMouse");
 	gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
 	gMapScale = gSavedSettings.getF32("MapScale");
 	gMiniMapScale = gSavedSettings.getF32("MiniMapScale");
 	gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard");
 	LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips");
+}
 
+static void settings_modify()
+{
 	LLRenderTarget::sUseFBO				= gSavedSettings.getBOOL("RenderUseFBO");
 	LLVOAvatar::sUseImpostors			= gSavedSettings.getBOOL("RenderUseImpostors");
 	LLVOSurfacePatch::sLODFactor		= gSavedSettings.getF32("RenderTerrainLODFactor");
@@ -531,367 +444,74 @@ static void saved_settings_to_globals()
 
 	// propagate push to talk preference to current status
 	gSavedSettings.setBOOL("PTTCurrentlyEnabled", gSavedSettings.getBOOL("EnablePushToTalk"));
-
-	settings_setup_listeners();
-
-	// gAgent.init() also loads from saved settings.
 }
 
-int parse_args(int argc, char **argv)
+void initGridChoice()
 {
-	// Sometimes IP addresses passed in on the command line have leading
-	// or trailing white space.  Use LLString to clean that up.
-	LLString ip_string;
-	S32 j;
-
-	for (j = 1; j < argc; j++) 
-	{
+    LLString gridChoice = gSavedSettings.getString("GridChoice");
+    if(!gridChoice.empty())
 		// Used to show first chunk of each argument passed in the 
 		// window title.
-		gArgs += argv[j];
-		gArgs += " ";
-
-		LLString argument = argv[j];
-		if ((!strcmp(argv[j], "-port")) && (++j < argc)) 
-		{
-			sscanf(argv[j], "%u", &(gAgent.mViewerPort));
-		}
-		else if ((!strcmp(argv[j], "-drop")) && (++j < argc)) 
-		{
-			sscanf(argv[j], "%f", &gPacketDropPercentage);
-		}
-		else if ((!strcmp(argv[j], "-inbw")) && (++j < argc))
-		{
-			sscanf(argv[j], "%f", &gInBandwidth);
-		}
-		else if ((!strcmp(argv[j], "-outbw")) && (++j < argc))
-		{
-			sscanf(argv[j], "%f", &gOutBandwidth);
-		}
-		else if (!strcmp(argv[j], "--aditi"))
-		{
-			gGridChoice = GRID_INFO_ADITI;
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--agni"))
-		{
-			gGridChoice = GRID_INFO_AGNI;
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--aruna"))
-		{
-			gGridChoice = GRID_INFO_ARUNA;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--durga"))
-		{
-			gGridChoice = GRID_INFO_DURGA;
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--ganga"))
-		{
-			gGridChoice = GRID_INFO_GANGA;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--mitra"))
-		{
-			gGridChoice = GRID_INFO_MITRA;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--mohini"))
-		{
-			gGridChoice = GRID_INFO_MOHINI;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--nandi"))
-		{
-			gGridChoice = GRID_INFO_NANDI;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--radha"))
-		{
-			gGridChoice = GRID_INFO_RADHA;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--ravi"))
-		{
-			gGridChoice = GRID_INFO_RAVI;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--siva"))
-		{
-			gGridChoice = GRID_INFO_SIVA;
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--shakti"))
-		{
-			gGridChoice = GRID_INFO_SHAKTI;
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--soma"))
-		{
-			gGridChoice = GRID_INFO_SOMA;
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--uma"))
-		{
-			gGridChoice = GRID_INFO_UMA;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--vaak"))
-		{
-			gGridChoice = GRID_INFO_VAAK;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "--yami"))
-		{
-			gGridChoice = GRID_INFO_YAMI;
-			sprintf(gGridName,"%s", gGridInfo[gGridChoice].mName);
-		}
-		else if (!strcmp(argv[j], "-loginpage") && (++j < argc))
-		{
-			LLAppViewer::instance()->setLoginPage(utf8str_trim(argv[j]));
-		}
-		else if (!strcmp(argv[j], "-loginuri") && (++j < argc))
-		{
-            LLAppViewer::instance()->addLoginURI(utf8str_trim(argv[j]));
-		}
-		else if (!strcmp(argv[j], "-helperuri") && (++j < argc))
-		{
-            LLAppViewer::instance()->setHelperURI(utf8str_trim(argv[j]));
-		}
-		else if (!strcmp(argv[j], "-debugviews"))
-		{
-			LLView::sDebugRects = TRUE;
-		}
-		else if (!strcmp(argv[j], "-skin") && (++j < argc))
-		{
-			std::string folder(argv[j]);
-			gDirUtilp->setSkinFolder(folder);
-		}
-		else if (!strcmp(argv[j], "-autologin") || !strcmp(argv[j], "--autologin")) // keep --autologin for compatibility
-		{
-			gAutoLogin = TRUE;
-		}
-		else if (!strcmp(argv[j], "-quitafter") && (++j < argc))
-		{
-			gQuitAfterSeconds = (F32)atof(argv[j]);
-		}
-		else if (!strcmp(argv[j], "-rotate"))
-		{
-			gRotateRight = TRUE;
-		}
-//		else if (!strcmp(argv[j], "-noenv")) 
-//		{
-			//turn OFF environmental effects for slow machines/video cards
-//			gRequestParaboloidMap = FALSE;
-//		}
-		else if (!strcmp(argv[j], "-noaudio"))
-		{
-			gUseAudio = FALSE;
-		}
-		else if (!strcmp(argv[j], "-nosound"))  // tends to be popular cmdline on Linux.
-		{
-			gUseAudio = FALSE;
-		}
-		else if (!strcmp(argv[j], "-noprobe"))
-		{
-			gProbeHardware = FALSE;
-		}
-		else if (!strcmp(argv[j], "-noquicktime"))
-		{
-			// Developers can log in faster if they don't load all the
-			// quicktime dlls.
-			gUseQuickTime = false;
-		}
-		else if (!strcmp(argv[j], "-nopreload"))
-		{
-			// Developers can log in faster if they don't decode sounds
-			// or images on startup, ~5 seconds faster.
-			gPreloadSounds = false;
-			gPreloadImages = false;
-		}
-		else if (!strcmp(argv[j], "-purge"))
-		{
-			LLAppViewer::instance()->purgeCache();
-		}
-		else if(!strcmp(argv[j], "-noinvlib"))
-		{
-			gRequestInventoryLibrary = FALSE;
-		}
-		else if (!strcmp(argv[j], "-log"))
-		{
-			gLogMessages = TRUE;
-			continue;
-		}
-		else if (!strcmp(argv[j], "-logfile") && (++j < argc)) 
-		{
-			// *NOTE: This buffer size is hard coded into scanf() below.
-			char logfile[256];	// Flawfinder: ignore
-			sscanf(argv[j], "%255s", logfile);	// Flawfinder: ignore
-			llinfos << "Setting log file to " << logfile << llendl;
-			LLFile::remove(logfile);
-			LLError::logToFile(logfile);
-		}
-		else if (!strcmp(argv[j], "-settings") && (++j < argc)) 
-		{
-			gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, argv[j]);
-		}
-		else if (!strcmp(argv[j], "-setdefault") && (j + 2 < argc)) 
-		{
-			std::string control_name;
-			std::string control_value;
-			
-			j++;
-			if (argv[j]) control_name = std::string(argv[j]);
+    {
+        // 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());
+
+        }
+    }
 
-			j++;
-			if (argv[j]) control_value = std::string(argv[j]);
-			
-			// grab control name and value
-			if (!control_name.empty())
-			{
-				gCommandLineSettings[control_name] = control_value;
-			}
-		}
-		else if (!strcmp(argv[j], "-set") && (j + 2 < argc)) 
-		{
-			std::string control_name;
-			std::string control_value;
-			
-			j++;
-			if (argv[j]) control_name = std::string(argv[j]);
 
-			j++;
-			if (argv[j]) control_value = std::string(argv[j]);
-			
-			// grab control name and value
-			if (!control_name.empty())
-			{
-				gCommandLineForcedSettings[control_name] = control_value;
-			}
-		}
-		else if (!strcmp(argv[j], "-login"))
-		{
-			if (j + 3 < argc)
-			{
-				j++;
-				gCmdLineFirstName = argv[j];
-				j++;
-				gCmdLineLastName = argv[j];
-				j++;
-				gCmdLinePassword = argv[j];
-			}
-			else
-			{
-				// only works if -login is last parameter on command line
-				llerrs << "Not enough parameters to -login. Did you mean -loginuri?" << llendl;
-			}
-		}
-		else if (!strcmp(argv[j], "-god"))
-		{
-			gGodConnect = TRUE;
-		}
-		else if (!strcmp(argv[j], "-noconsole"))
-		{
-			gUseConsole = FALSE;
-		}
-		else if (!strcmp(argv[j], "-safe"))
-		{
-			llinfos << "Setting viewer feature table to run in safe mode, resetting prefs" << llendl;
-			gFeatureManagerp->setSafe(TRUE);
-		}
-		else if (!strcmp(argv[j], "-multiple"))
-		{
-			gMultipleViewersOK = TRUE;
-		}
-		else if (!strcmp(argv[j], "-nomultiple"))
-		{
-			gMultipleViewersOK = FALSE;
-		}
-		else if (!strcmp(argv[j], "-novoice"))
-		{
-			gDisableVoice = TRUE;
-		}
-		else if (!strcmp(argv[j], "-nothread"))
-		{
-			LLVFile::ALLOW_ASYNC = FALSE;
-			llinfos << "Running VFS in nothread mode" << llendl;
-		}
-		// some programs don't respect the command line options in protocol handlers (I'm looking at you, Opera)
-		// so this allows us to parse the URL straight off the command line without a "-url" paramater
-		else if (LLURLDispatcher::isSLURL(argv[j])
-				 || !strcmp(argv[j], "-url") && (++j < argc)) 
-		{
-			std::string slurl = argv[j];
-			if (LLURLDispatcher::isSLURLCommand(slurl))
-			{
-				LLStartUp::sSLURLCommand = slurl;
-			}
-			else
-			{
-				LLURLSimString::setString(slurl);
-			}
-			// *NOTE: After setting the url, bail. What can happen is
-			// that someone can use IE (or potentially other browsers)
-			// and do the rough equivalent of command injection and
-			// steal passwords. Phoenix. SL-55321
-			return 0;
-		}
-		else if (!strcmp(argv[j], "-ignorepixeldepth"))
-		{
-			gIgnorePixelDepth = TRUE;
-		}
-		else if (!strcmp(argv[j], "-cooperative"))
+#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)
 		{
-			S32 ms_to_yield = 0;
-			if(++j < argc)
+			LLString custom_server = gSavedSettings.getString("CustomServer");
+			if (custom_server.empty())
 			{
-				S32 rv = sscanf(argv[j], "%d", &ms_to_yield);
-				if(0 == rv)
-				{
-					--j;
-				}
+				gGridName = "none";
 			}
 			else
 			{
-				--j;
+				gGridName = custom_server.c_str();
 			}
-			gYieldMS = ms_to_yield;
-			gYieldTime = TRUE;
-		}
-		else if (!strcmp(argv[j], "-no-verify-ssl-cert"))
-		{
-			gVerifySSLCert = false;
-		}
-		else if ( (!strcmp(argv[j], "--channel") || !strcmp(argv[j], "-channel"))  && (++j < argc)) 
-		{
-			gChannelName = argv[j];
-		}
-#if LL_DARWIN
-		else if (!strncmp(argv[j], "-psn_", 5))
-		{
-			// this is the Finder passing the process session number
-			// we ignore this
 		}
+        gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
+	}
 #endif
-		else if(!strncmp(argv[j], "-qa", 3))
-		{
-			gQAMode = TRUE;
-		}
-		else
-		{
-
-			// DBC - Mac OS X passes some stuff by default on the command line (e.g. psn).
-			// Second Life URLs are passed this way as well?
-			llwarns << "Possible unknown keyword " << argv[j] << llendl;
 
-			// print usage information
-			llinfos << USAGE << llendl;
-			// return 1;
-		}
+	if (gGridChoice == GRID_INFO_NONE)
+	{
+		gGridChoice = GridDefaultChoice;
+        gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
 	}
-	return 0;
 }
 
 bool send_url_to_other_instance(const std::string& url)
@@ -937,11 +557,12 @@ LLAppViewer::LLAppViewer() :
 	mReportedCrash(false),
 	mNumSessions(0),
 	mPurgeCache(false),
-    mPurgeOnExit(false),
-    mSecondInstance(false),
+	mPurgeOnExit(false),
+	mSecondInstance(false),
 	mSavedFinalSnapshot(false),
-    mQuitRequested(false),
-    mLogoutRequestSent(false)
+	mQuitRequested(false),
+	mLogoutRequestSent(false),
+	mYieldTime(-1)
 {
 	if(NULL != sInstance)
 	{
@@ -957,13 +578,6 @@ LLAppViewer::~LLAppViewer()
 	removeMarkerFile();
 }
 
-bool LLAppViewer::tempStoreCommandOptions(int argc, char** argv)
-{
-	gTempArgC = argc;
-	gTempArgV = argv;
-	return true;
-}
-
 bool LLAppViewer::init()
 {
     // *NOTE:Mani - LLCurl::initClass is not thread safe. 
@@ -972,7 +586,6 @@ bool LLAppViewer::init()
 
     initThreads();
 
-	initEarlyConfiguration();
 
 	//
 	// Start of the application
@@ -992,66 +605,30 @@ bool LLAppViewer::init()
 	//
 	// OK to write stuff to logs now, we've now crash reported if necessary
 	//
-
-	// Set up some defaults...
-	gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE);
-	gOldSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, LEGACY_DEFAULT_SETTINGS_FILE);
-
     if (!initConfiguration())
 		return false;
 
+    writeSystemInfo();
+
+	// Build a string representing the current version number.
+    gCurrentVersion = llformat("%s %d.%d.%d.%d", 
+        gSavedSettings.getString("VersionChannelName").c_str(), 
+        LL_VERSION_MAJOR, 
+        LL_VERSION_MINOR, 
+        LL_VERSION_PATCH, 
+        LL_VERSION_BUILD );
+
 	//////////////////////////////////////////////////////////////////////////////
 	//////////////////////////////////////////////////////////////////////////////
 	//////////////////////////////////////////////////////////////////////////////
 	//////////////////////////////////////////////////////////////////////////////
 	// *FIX: The following code isn't grouped into functions yet.
 
-	//
-	// Write system information into the debug log (CPU, OS, etc.)
-	//
-	writeSystemInfo();
-
-	// Build a string representing the current version number.
-        gCurrentVersion = llformat("%s %d.%d.%d.%d", gChannelName.c_str(), LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VERSION_BUILD );
-
 	//
 	// Various introspection concerning the libs we're using.
 	//
 	llinfos << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << llendl;
 
-	// Merge with the command line overrides
-	gSavedSettings.applyOverrides(gCommandLineSettings);
-
-	// Need to do this before calling parseAlerts
-	gUICtrlFactory = new LLViewerUICtrlFactory();
-	
-	// Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/)
-	// Do this *before* loading the settings file
-	LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
-	
-	// Overwrite default settings with user settings
-	llinfos << "Loading configuration file " << gSettingsFileName << llendl;
-	if (0 == gSavedSettings.loadFromFile(gSettingsFileName))
-	{
-		llinfos << "Failed to load settings from " << gSettingsFileName << llendl;
-		llinfos << "Loading legacy settings from " << gOldSettingsFileName << llendl;
-		gSavedSettings.loadFromFileLegacy(gOldSettingsFileName);
-	}
-
-	// need to do this here - need to have initialized global settings first
-	LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
-	if ( nextLoginLocation.length() )
-	{
-		LLURLSimString::setString( nextLoginLocation.c_str() );
-	};
-
-	// Merge with the command line overrides
-	gSavedSettings.applyOverrides(gCommandLineForcedSettings);
-
-	gLastRunVersion = gSavedSettings.getString("LastRunVersion");
-
-	fixup_settings();
-	
 	// Get the single value from the crash settings file, if it exists
 	std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
 	gCrashSettings.loadFromFile(crash_settings_filename.c_str());
@@ -1090,56 +667,25 @@ bool LLAppViewer::init()
 	{
 		LLError::setPrintLocation(true);
 	}
-
-#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)
-		{
-			LLString custom_server = gSavedSettings.getString("CustomServer");
-			if (custom_server.empty())
-			{
-				snprintf(gGridName, MAX_STRING, "none");		/* Flawfinder: ignore */
-			}
-			else
-			{
-				snprintf(gGridName, MAX_STRING, "%s", custom_server.c_str());		/* Flawfinder: ignore */
-			}
-		}
-	}
-#endif
-
-	if (gGridChoice == GRID_INFO_NONE)
-	{
-		gGridChoice = GridDefaultChoice;
-	}
 	
 	// Load art UUID information, don't require these strings to be declared in code.
 	LLString viewer_art_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"viewerart.xml");
 	llinfos << "Loading art table from " << viewer_art_filename << llendl;
-	gViewerArt.loadFromFile(viewer_art_filename.c_str(), FALSE);
+	gViewerArt.loadFromFileLegacy(viewer_art_filename.c_str(), FALSE);
 	LLString textures_filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "textures", "textures.xml");
 	llinfos << "Loading art table from " << textures_filename << llendl;
-	gViewerArt.loadFromFile(textures_filename.c_str(), FALSE);
+	gViewerArt.loadFromFileLegacy(textures_filename.c_str(), FALSE);
 
 	LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml");
 	llinfos << "Loading base colors from " << colors_base_filename << llendl;
-	gColors.loadFromFile(colors_base_filename.c_str(), FALSE, TYPE_COL4U);
+	gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U);
 
 	// Load overrides from user colors file
 	LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml");
 	llinfos << "Loading user colors from " << user_colors_filename << llendl;
-	if (gColors.loadFromFile(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)
+	if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)
 	{
-		llinfos << "Failed to load user colors from " << user_colors_filename << llendl;
-		LLString user_legacy_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.ini");
-		llinfos << "Loading legacy colors from " << user_legacy_colors_filename << llendl;
-		gColors.loadFromFileLegacy(user_legacy_colors_filename.c_str(), FALSE, TYPE_COL4U);
+		llinfos << "Cannot load user colors from " << user_colors_filename << llendl;
 	}
 
 	// Widget construction depends on LLUI being initialized
@@ -1162,16 +708,18 @@ bool LLAppViewer::init()
 
 	LLAgent::parseTeleportMessages("teleport_strings.xml");
 
+	LLViewerJointMesh::updateVectorize();
+
 	// load MIME type -> media impl mappings
 	LLMIMETypes::parseMIMETypes( "mime_types.xml" ); 
 
-	mCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
-
-	LLVectorPerformanceOptions::initClass();
-
-	// Move certain saved settings into global variables for speed
-	saved_settings_to_globals();
 
+	// Copy settings to globals. *TODO: Remove or move to appropriage class initializers
+    	settings_to_globals();
+	// Setup settings listeners
+	settings_setup_listeners();
+	// Modify settings based on system configuration and compile options
+	settings_modify();
 
 	// Find partition serial number (Windows) or hardware serial (Mac)
 	mSerialNumber = generateSerialNumber();
@@ -1425,9 +973,9 @@ bool LLAppViewer::mainLoop()
 				bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads");
 
 				// yield some time to the os based on command line option
-				if(gYieldTime)
+				if(mYieldTime >= 0)
 				{
-					ms_sleep(gYieldMS);
+					ms_sleep(mYieldTime);
 				}
 
 				// yield cooperatively when not running as foreground window
@@ -1699,11 +1247,11 @@ bool LLAppViewer::cleanup()
 
 	// Must do this after all panels have been deleted because panels that have persistent rects
 	// save their rects on delete.
-	gSavedSettings.saveToFile(gSettingsFileName, TRUE);
-	if (!gPerAccountSettingsFileName.empty())
-	{
-		gSavedPerAccountSettings.saveToFile(gPerAccountSettingsFileName, TRUE);
-	}
+	gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);	
+
+	// UserSettingsFile should be empty if no use has been logged on.
+	// *FIX:Mani This should get really saved in a "logoff" mode. 
+	gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("UserSettingsFile"), TRUE);
 	llinfos << "Saved settings" << llendflush;
 
 	std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
@@ -1798,10 +1346,10 @@ bool LLAppViewer::cleanup()
 	
 	end_messaging_system();
 
-    // *NOTE:Mani - The following call is not thread safe. 
-    LLCurl::cleanupClass();
+	// *NOTE:Mani - The following call is not thread safe. 
+	LLCurl::cleanupClass();
 
-    // If we're exiting to launch an URL, do that here so the screen
+	// If we're exiting to launch an URL, do that here so the screen
 	// is at the right resolution before we launch IE.
 	if (!gLaunchFileOnQuit.empty())
 	{
@@ -1822,106 +1370,6 @@ bool LLAppViewer::cleanup()
 	return true;
 }
 
-bool LLAppViewer::initEarlyConfiguration()
-{
-	// *FIX: globals - This method sets a bunch of globals early in the init process.
-	int argc = gTempArgC;
-	char** argv = gTempArgV;
-
-	// HACK! We REALLY want to know what grid they were trying to connect to if they
-	// crashed hard.
-	// So we walk through the command line args ONLY looking for the
-	// userserver arguments first.  And we don't do ANYTHING but set
-	// the gGridName (which gets passed to the crash reporter).
-	// We're assuming that they're trying to log into the same grid as last
-	// time, which seems fairly reasonable.
-	snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GridDefaultChoice].mName);		// Flawfinder: ignore
-	S32 j;
-	for (j = 1; j < argc; j++) 
-	{
-		if (!strcmp(argv[j], "--aditi"))
-		{
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_ADITI].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--agni"))
-		{
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_AGNI].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--siva"))
-		{
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SIVA].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--shakti"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_SHAKTI].mName);
-		}
-		else if (!strcmp(argv[j], "--durga"))
-		{
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_DURGA].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--soma"))
-		{
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_SOMA].mName);		// Flawfinder: ignore
-		}
-		else if (!strcmp(argv[j], "--ganga"))
-		{
-			snprintf(gGridName, MAX_STRING, "%s", gGridInfo[GRID_INFO_GANGA].mName);		// Flawfinder: ignore 
-		}
-		else if (!strcmp(argv[j], "--vaak"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_VAAK].mName);
-		}
-		else if (!strcmp(argv[j], "--uma"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_UMA].mName);
-		}
-		else if (!strcmp(argv[j], "--mohini"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MOHINI].mName);
-		}
-		else if (!strcmp(argv[j], "--yami"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_YAMI].mName);
-		}
-		else if (!strcmp(argv[j], "--nandi"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_NANDI].mName);
-		}
-		else if (!strcmp(argv[j], "--mitra"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_MITRA].mName);
-		}
-		else if (!strcmp(argv[j], "--radha"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RADHA].mName);
-		}
-		else if (!strcmp(argv[j], "--ravi"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_RAVI].mName);
-		}
-		else if (!strcmp(argv[j], "--aruna"))
-		{
-			sprintf(gGridName,"%s", gGridInfo[GRID_INFO_ARUNA].mName);
-		}
-		else if (!strcmp(argv[j], "-multiple"))
-		{
-			// Hack to detect -multiple so we can disable the marker file check (which will always fail)
-			gMultipleViewersOK = TRUE;
-		}
-		else if (!strcmp(argv[j], "-novoice"))
-		{
-			// May need to know this early also
-			gDisableVoice = TRUE;
-		}
-		else if (!strcmp(argv[j], "-url") && (++j < argc)) 
-		{
-			LLURLSimString::setString(argv[j]);
-		}
-	}
-
-	return true;
-}
-
 bool LLAppViewer::initThreads()
 {
 #if MEM_TRACK_MEM
@@ -1982,14 +1430,296 @@ bool LLAppViewer::initLogging()
 	return true;
 }
 
+void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
+{
+	for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr)
+	{
+		LLString settings_name = (*itr).first;
+		LLString settings_file = mSettingsFileList[settings_name].asString();
+		LLString full_settings_path = gDirUtilp->getExpandedFilename(path_index, settings_file);
+		if(gSettings.find(settings_name) == gSettings.end())
+		{
+			llwarns << "Cannot load " << settings_file << " - No matching settings group for name " << settings_name << llendl;
+			continue;
+		}
+		if(!gSettings[settings_name]->loadFromFile(gDirUtilp->getExpandedFilename(path_index, settings_file)))
+		{
+			llwarns << "Cannot load " << full_settings_path << " - No settings found." << llendl;
+		}
+		else
+		{
+			llinfos << "Loaded settings file " << full_settings_path << llendl;
+		}
+	}
+}
+
 bool LLAppViewer::initConfiguration()
 {
-	// Ye olde parse_args()...
-	if(!doConfigFromCommandLine())
+	//Set up internal pointers	
+	gSettings["Global"] = &gSavedSettings;
+	gSettings["PerAccount"] = &gSavedPerAccountSettings;
+	gSettings["CrashSettings"] = &gCrashSettings;
+
+	//Load settings files list
+	std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
+	LLControlGroup settings_control;
+	llinfos << "Loading settings file list" << settings_file_list << llendl;
+	if (0 == settings_control.loadFromFile(settings_file_list))
 	{
-		return false;
+        llerrs << "Cannot load default configuration file " << settings_file_list << llendl;
 	}
+
+	mSettingsFileList = settings_control.getLLSD("Files");
 	
+	//Order of loading
+	// - App Settings (Defaults)
+	// - user_settings (Client Overrides)
+	// - user directory (user specific overrides, happens in llstartup)
+	loadSettingsFromDirectory(LL_PATH_APP_SETTINGS);
+
+	//Fix settings that require compiled information
+	gSavedSettings.setString("ClientSettingsFile", 
+        gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE));
+
+	gSavedSettings.setString("VersionChannelName", LL_CHANNEL);
+
+#ifndef		LL_RELEASE_FOR_DOWNLOAD
+        gSavedSettings.setBOOL("ShowConsoleWindow", TRUE);
+#endif
+
+#if LL_WINDOWS
+	// Lists Japanese, Korean, and Chinese sanserif fonts available in
+	// Windows XP and Vista, as well as "Arial Unicode MS".
+	gSavedSettings.setString("FontSansSerifFallback",
+							 "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf");
+#elif LL_DARWIN
+	// This is a fairly complete Japanese font that ships with Mac OS X.
+	// The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3".
+	// The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
+	gSavedSettings.setString("FontSansSerifFallback", 
+							 "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf");
+#else
+	// 'unicode.ttf' doesn't exist, but hopefully an international
+	// user can take the hint and drop in their favourite local font.
+	gSavedSettings.setString("FontSansSerifFallback",	
+							 "unicode.ttf");
+#endif
+
+
+	// 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
+	LLFirstUse::addConfigVariable("FirstBalanceIncrease");
+	LLFirstUse::addConfigVariable("FirstBalanceDecrease");
+	LLFirstUse::addConfigVariable("FirstSit");
+	LLFirstUse::addConfigVariable("FirstMap");
+	LLFirstUse::addConfigVariable("FirstGoTo");
+	LLFirstUse::addConfigVariable("FirstBuild");
+	LLFirstUse::addConfigVariable("FirstLeftClickNoHit");
+	LLFirstUse::addConfigVariable("FirstTeleport");
+	LLFirstUse::addConfigVariable("FirstOverrideKeys");
+	LLFirstUse::addConfigVariable("FirstAttach");
+	LLFirstUse::addConfigVariable("FirstAppearance");
+	LLFirstUse::addConfigVariable("FirstInventory");
+	LLFirstUse::addConfigVariable("FirstSandbox");
+	LLFirstUse::addConfigVariable("FirstFlexible");
+	LLFirstUse::addConfigVariable("FirstDebugMenus");
+	LLFirstUse::addConfigVariable("FirstStreamingMusic");
+	LLFirstUse::addConfigVariable("FirstStreamingVideo");
+	LLFirstUse::addConfigVariable("FirstSculptedPrim");
+	LLFirstUse::addConfigVariable("FirstVoice");
+	LLFirstUse::addConfigVariable("FirstMedia");
+		
+    //////
+    // *FIX:Mani - Find a way to remove the gUICtrlFactory and
+    // LLAlertDialog::parseAlerts dependecies on the being loaded
+    // *before* the user settings. Having to do this init here
+    // seems odd. 
+
+   	// Need to do this before calling parseAlerts
+	gUICtrlFactory = new LLViewerUICtrlFactory();
+	
+	// Pre-load alerts.xml to define the warnings settings (always loads from skins/xui/en-us/)
+	// Do this *before* loading the settings file
+	LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
+
+	// Overwrite default user settings with	user settings
+	loadSettingsFromDirectory(LL_PATH_USER_SETTINGS);
+
+	// Parse command line settings.
+	LLControlGroupCLP clp;
+	std::string	cmd_line_config	= gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
+														  "cmd_line.xml");
+	clp.configure(cmd_line_config, &gSavedSettings);
+
+	if(!initParseCommandLine(clp))
+	{
+		llwarns	
+			<< "Error parsing command line options.	Command	Line options ignored." 
+			<< llendl;
+
+		llinfos	<< "Command	line usage:\n" << clp << llendl;
+	}
+
+	// If the user has specified a alternate settings file name.
+	// Load	it now.
+	if(clp.hasOption("settings"))
+	{
+		std::string	user_settings_filename = clp.getOption("settings")[0];
+		std::string	full_settings_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, 
+																		 user_settings_filename);
+
+		llinfos	<< "Loading	command	line specified settings	file: "	<< full_settings_path << llendl;
+
+		if(!gSavedSettings.loadFromFile(full_settings_path))		
+		{
+			llwarns	<< "File not found:	" << full_settings_path	<< llendl;
+		}
+
+		gSavedSettings.setString("ClientSettingsFile", full_settings_path);
+	}
+
+	// Apply the command line params to	the	settings system.
+	// Anyway the following	call to	notify depends upon	the	settings being init'd.
+	clp.notify(); 
+
+	// Start up	the	debugging console before handling other	options.
+	if (gSavedSettings.getBOOL("ShowConsoleWindow"))
+	{
+		initConsole();
+	}
+
+	if(clp.hasOption("help"))
+	{
+		llinfos	<< "Command	line usage:\n" << clp << llendl;
+		return false;
+	}
+
+    //////////////////////////
+    // Apply settings...
+    if(clp.hasOption("setdefault"))
+    {
+        //const LLCommandLineParser::token_vector_t& setdefault = clp.getOption("setdefault");
+        //if(0x1 & setdefault.size())
+        //{
+        //    llwarns << "Invalid '--setdefault' parameter count." << llendl;
+        //}
+        //else
+        //{
+        //    LLCommandLineParser::token_vector_t::const_iterator itr = setdefault.begin();
+        //    for(; itr != setdefault.end(); ++itr)
+        //    {
+        //        const std::string& name = *itr;
+        //        const std::string& value = *(++itr);
+        //        LLControlVariable* c = gSettings["global"]->getControl(name);
+        //        if(c)
+        //        {
+        //            c->setDefault(value);
+        //        }
+        //        else
+        //        {
+        //            llwarns << "'--setdefault' specified with unknown setting: '"
+        //                << name << "'." << llendl;
+        //        }
+        //    }
+        //}
+    }
+
+    if(clp.hasOption("set"))
+    {
+        const LLCommandLineParser::token_vector_t& set_values = clp.getOption("set");
+        if(0x1 & set_values.size())
+        {
+            llwarns << "Invalid '--set' parameter count." << llendl;
+        }
+        else
+        {
+            LLCommandLineParser::token_vector_t::const_iterator itr = set_values.begin();
+            for(; itr != set_values.end(); ++itr)
+            {
+                const std::string& name = *itr;
+                const std::string& value = *(++itr);
+                LLControlVariable* c = gSettings["Global"]->getControl(name);
+                if(c)
+                {
+                    c->setValue(value, false);
+                }
+                else
+                {
+                    llwarns << "'--set' specified with unknown setting: '"
+                        << name << "'." << llendl;
+                }
+            }
+        }
+    }
+
+    initGridChoice();
+
+    // Handle slurl use. NOTE: Don't let SL-55321 reappear.
+
+    // *FIX: This init code should be made more robust to prevent 
+    // the issue SL-55321 from returning. One thought is to allow 
+    // only select options to be set from command line when a slurl 
+    // is specified. More work on the settings system is needed to 
+    // achieve this. For now...
+
+    // *NOTE:Mani The command line parser parses tokens and is 
+    // setup to bail after parsing the '--url' option or the 
+    // first option specified without a '--option' flag (or
+    // any other option that uses the 'last_option' setting - 
+    // see LLControlGroupCLP::configure())
+
+    // What can happen is that someone can use IE (or potentially 
+    // other browsers) and do the rough equivalent of command 
+    // injection and steal passwords. Phoenix. SL-55321
+    if(clp.hasOption("url"))
+    {
+        std::string slurl = clp.getOption("url")[0];
+        if (LLURLDispatcher::isSLURLCommand(slurl))
+        {
+	        LLStartUp::sSLURLCommand = slurl;
+        }
+        else
+        {
+	        LLURLSimString::setString(slurl);
+        }
+    }
+    else if(clp.hasOption("slurl"))
+    {
+        std::string slurl = clp.getOption("slurl")[0];
+        if(LLURLDispatcher::isSLURL(slurl))
+        {
+            if (LLURLDispatcher::isSLURLCommand(slurl))
+            {
+	            LLStartUp::sSLURLCommand = slurl;
+            }
+            else
+            {
+	            LLURLSimString::setString(slurl);
+            }
+        }
+    }
+
+    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())
+    {   
+        gDirUtilp->setSkinFolder(skinfolder->getValue().asString());
+    }
+
+    mYieldTime = gSavedSettings.getS32("YieldTime");
+             
 	// XUI:translate
 	gSecondLife = "Second Life";
 
@@ -2060,19 +1790,6 @@ bool LLAppViewer::initConfiguration()
 
 	gStartTime = totalTime();
 
-	////////////////////////////////////////
-	//
-	// Process ini files
-	//
-
-	// declare all possible setting variables
-	declare_settings();
-
-#if !LL_RELEASE_FOR_DOWNLOAD
-//	only write the defaults for non-release builds!
-	gSavedSettings.saveToFile(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings_default.xml").c_str(), FALSE);
-#endif
-
 	//
 	// Set the name of the window
 	//
@@ -2085,7 +1802,7 @@ bool LLAppViewer::initConfiguration()
 #endif
 	LLString::truncate(gWindowTitle, 255);
 
-	if (!gMultipleViewersOK)
+	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
 	{
 	    //
 	    // Check for another instance of the app running
@@ -2211,12 +1928,12 @@ bool LLAppViewer::initConfiguration()
 		
 		if (mSecondInstance)
 		{
-			gDisableVoice = TRUE;
+			gSavedSettings.setBOOL("CmdLineDisableVoice", TRUE);
 			/* Don't start another instance if using -multiple
 			//RN: if we received a URL, hand it off to the existing instance
-		    if (LLURLSimString::parse())
-		    {
-			    LLURLSimString::send_to_other_instance();
+			if (LLURLSimString::parse())
+			{
+				LLURLSimString::send_to_other_instance();
 				return 1;
 			}
 			*/
@@ -2225,95 +1942,15 @@ bool LLAppViewer::initConfiguration()
 		initMarkerFile();
 	}
 
-	return true; // Config was successful.
-}
-
-bool LLAppViewer::doConfigFromCommandLine()
-{
-	// *FIX: This is what parse args used to do, minus the arg reading part.
-	// Now the arg parsing is handled by LLApp::parseCommandOptions() and this
-	// method need only interpret settings. Perhaps some day interested parties 
-	// can ask an app about a setting rather than have the app set 
-	// a gazzillion globals.
-	
-	/////////////////////////////////////////
-	//
-	// Process command line arguments
-	//
-	S32 args_result = 0;
-
-#if LL_DARWIN
-	{
-		// On the Mac, read in arguments.txt (if it exists) and process it for additional arguments.
-		LLString args;
-		if(_read_file_into_string(args, "arguments.txt"))		/* Flawfinder: ignore*/
-		{
-			// The arguments file exists.  
-			// It should consist of command line arguments separated by newlines.
-			// Split it into individual arguments and build a fake argv[] to pass to parse_args.
-			std::vector<std::string> arglist;
-			
-			arglist.push_back("newview");
-			
-			llinfos << "Reading additional command line arguments from arguments.txt..." << llendl;
-			
-			typedef boost::tokenizer<boost::escaped_list_separator<char> > tokenizer;
-			boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'");
-			tokenizer tokens(args, sep);
-			tokenizer::iterator token_iter;
-
-			for(token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
-			{
-				llinfos << "argument: '" << (token_iter->c_str()) << "'" << llendl;
-				
-				arglist.push_back(*token_iter);
-			}
-
-			char **fakeargv = new char*[arglist.size()];
-			int i;
-			for(i=0; i < arglist.size(); i++)
-				fakeargv[i] = const_cast<char*>(arglist[i].c_str());
-				
-			args_result = parse_args(arglist.size(), fakeargv);
-			delete[] fakeargv;
-		}
-		
-		// Get the user's preferred language string based on the Mac OS localization mechanism.
-		// To add a new localization:
-			// go to the "Resources" section of the project
-			// get info on "language.txt"
-			// in the "General" tab, click the "Add Localization" button
-			// create a new localization for the language you're adding
-			// set the contents of the new localization of the file to the string corresponding to our localization
-			//   (i.e. "en-us", "ja", etc.  Use the existing ones as a guide.)
-		CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL);
-		char path[MAX_PATH];
-		if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path)))
-		{
-			LLString lang;
-			if(_read_file_into_string(lang, path))		/* Flawfinder: ignore*/
-			{
-				gCommandLineForcedSettings["SystemLanguage"] = lang;
-			}
-		}
-		CFRelease(url);
-	}
-#endif
-
-	int argc = gTempArgC;
-	char** argv = gTempArgV;
-
-	//
-	// Parse the command line arguments
-	//
-	args_result |= parse_args(argc, argv);
-	if (args_result)
+   	// need to do this here - need to have initialized global settings first
+	LLString nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
+	if ( nextLoginLocation.length() )
 	{
-		removeMarkerFile();
-		return false;
-	}
+		LLURLSimString::setString( nextLoginLocation.c_str() );
+	};
 
-	return true;
+	gLastRunVersion = gSavedSettings.getString("LastRunVersion");
+	return true; // Config was successful.
 }
 
 bool LLAppViewer::initWindow()
@@ -2332,10 +1969,11 @@ bool LLAppViewer::initWindow()
 	window_title_str[sizeof(window_title_str) - 1] = '\0';
 
 	// always start windowed
+	BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");
 	gViewerWindow = new LLViewerWindow(window_title_str, "Second Life",
 		gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"),
 		gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"),
-		FALSE, gIgnorePixelDepth);
+		FALSE, ignorePixelDepth);
 		
 	if (gSavedSettings.getBOOL("FullScreen"))
 	{
@@ -2357,14 +1995,14 @@ bool LLAppViewer::initWindow()
 
 		// Set this flag in case we crash while initializing GL
 		gSavedSettings.setBOOL("RenderInitError", TRUE);
-		gSavedSettings.saveToFile( gSettingsFileName, TRUE );
+		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
 	
 		gPipeline.init();
 		stop_glerror();
 		gViewerWindow->initGLDefaults();
 
 		gSavedSettings.setBOOL("RenderInitError", FALSE);
-		gSavedSettings.saveToFile( gSettingsFileName, TRUE );
+		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
 	}
 
 	LLUI::sWindow = gViewerWindow->getWindow();
@@ -2372,11 +2010,6 @@ bool LLAppViewer::initWindow()
 	LLAlertDialog::parseAlerts("alerts.xml");
 	LLNotifyBox::parseNotify("notify.xml");
 
-	// *TODO - remove this when merging into release
-	// DON'T Clean up the feature manager lookup table - settings are needed
-	// for setting the graphics level.
-	//gFeatureManagerp->cleanupFeatureTables();
-
 	// Show watch cursor
 	gViewerWindow->setCursor(UI_CURSOR_WAIT);
 
@@ -2466,7 +2099,7 @@ void LLAppViewer::writeSystemInfo()
 {
 	gDebugInfo["SLLog"] = LLError::logFileName();
 
-	gDebugInfo["ClientInfo"]["Name"] = gChannelName;
+	gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName");
 	gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR;
 	gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR;
 	gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH;
@@ -2517,7 +2150,7 @@ void LLAppViewer::handleViewerCrash()
 	}
 	pApp->mReportedCrash = TRUE;
 
-	gDebugInfo["SettingsFilename"] = gSettingsFileName;
+	gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile");
 	gDebugInfo["CAFilename"] = gDirUtilp->getCAFile();
 	gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName().c_str();
 	gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath().c_str();
@@ -2658,7 +2291,11 @@ void LLAppViewer::initMarkerFile()
 	ll_apr_file_remove(error_marker_file);
 	
 	//Freeze case checks
-	if(anotherInstanceRunning()) return;
+	if(anotherInstanceRunning()) 
+	{
+		return;
+	}
+	
 	fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB);		
 	if (fMarker != NULL)
 	{
@@ -2864,7 +2501,7 @@ bool LLAppViewer::initCache()
 	char static_vfs_index_file[LL_MAX_PATH];	// Flawfinder: ignore
 	char static_vfs_data_file[LL_MAX_PATH];	// Flawfinder: ignore
 
-	if (gMultipleViewersOK)
+	if (gSavedSettings.getBOOL("AllowMultipleViewers"))
 	{
 		// don't mess with renaming the VFS in this case
 		new_salt = old_salt;
@@ -3063,17 +2700,6 @@ void LLAppViewer::setHelperURI(const std::string& uri)
     gHelperURI = uri;
 }
 
-void LLAppViewer::setLoginPage(const std::string& login_page)
-{
-	gLoginPage = login_page;
-}
-
-const std::string& LLAppViewer::getLoginPage()
-{
-	return gLoginPage;
-}
-
-
 // Callback from a dialog indicating user was logged out.  
 void finish_disconnect(S32 option, void* userdata)
 {
@@ -3242,8 +2868,6 @@ void LLAppViewer::idle()
 	// Update frame timers
 	static LLTimer idle_timer;
 
-	LLControlBase::updateAllListeners();
-
 	LLFrameTimer::updateFrameTime();
 	LLEventTimer::updateClass();
 	LLCriticalDamp::updateInterpolants();
@@ -3264,9 +2888,10 @@ void LLAppViewer::idle()
 	// Smoothly weight toward current frame
 	gFPSClamped = (frame_rate_clamped + (4.f * gFPSClamped)) / 5.f;
 
-	if (gQuitAfterSeconds > 0.f)
+	F32 qas = gSavedSettings.getF32("QuitAfterSeconds");
+	if (qas > 0.f)
 	{
-		if (gRenderStartTime.getElapsedTimeF32() > gQuitAfterSeconds)
+		if (gRenderStartTime.getElapsedTimeF32() > qas)
 		{
 			LLAppViewer::instance()->forceQuit();
 		}
@@ -3305,7 +2930,7 @@ void LLAppViewer::idle()
 	    // Update simulator agent state
 	    //
 
-		if (gRotateRight)
+		if (gSavedSettings.getBOOL("RotateRight"))
 		{
 			gAgent.moveYaw(-1.f);
 		}
@@ -3513,7 +3138,6 @@ void LLAppViewer::idle()
 	//
 	// Update weather effects
 	//
-
 	if (!gNoRender)
 	{
 		gWorldp->updateClouds(gFrameDTClamped);
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index da3f5d54c1f14859b06db90b2656983251f12118..0adf178b3426337d476364b8f9fe814ff2d97862 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -36,15 +36,21 @@ class LLTextureCache;
 class LLWorkerThread;
 class LLTextureFetch;
 
+class LLCommandLineParser;
+
 class LLAppViewer : public LLApp
 {
 public:
 	LLAppViewer();
 	virtual ~LLAppViewer();
 
-	// *NOTE:Mani - Don't use this!
-	// Having 
-	static LLAppViewer* instance() {return sInstance; } 
+    /**
+     * @brief Access to the LLAppViewer singleton.
+     * 
+     * The LLAppViewer singleton is created in main()/WinMain().
+     * So don't use it in pre-entry (static initialization) code.
+     */
+    static LLAppViewer* instance() {return sInstance; } 
 
 	//
 	// Main application logic
@@ -64,10 +70,6 @@ public:
     bool quitRequested() { return mQuitRequested; }
     bool logoutRequestSent() { return mLogoutRequestSent; }
 
-	// *FIX: This is meant to stay only until the command line issues are hashed out with repect to LLApp::parseCommandLine
-	// This version stores the argc and argv for later usage, make sure the params passed in last as long as this class.
-	bool tempStoreCommandOptions(int argc, char** argv);
-
 	void closeDebug();
 
 	const LLOSInfo& getOSInfo() const { return mSysOSInfo; }
@@ -87,9 +89,6 @@ public:
 
 	const std::string& getSerialNumber() { return mSerialNumber; }
 	
-	// *FIX:Mani purgeCache was made public for parse_args().
-	// If that beast is gone, make it private.
-	void purgeCache(); // Clear the local cache. 
 	bool getPurgeCache() const { return mPurgeCache; }
 	
 	const LLString& getSecondLifeTitle() const; // The Second Life title.
@@ -101,8 +100,6 @@ public:
     const std::vector<std::string>& getLoginURIs() const;
     const std::string& getHelperURI() const;
     void resetURIs() const;
-    void setLoginPage(const std::string& login_page);
-    const std::string& getLoginPage();
 
     void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.
     void badNetworkHandler(); // Cause a crash state due to bad network packet.
@@ -125,23 +122,26 @@ public:
     virtual void forceErrorInifiniteLoop();
     virtual void forceErrorSoftwareException();
 
+	void loadSettingsFromDirectory(ELLPath path_index);
 protected:
 	virtual bool initWindow(); // Initialize the viewer's window.
 	virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
+	virtual void initConsole() {}; // Initialize OS level debugging console.
 	virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
+
+    virtual bool initParseCommandLine(LLCommandLineParser& clp) 
+        { return true; } // Allow platforms to specify the command line args.
 	
 	virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
 
 
 private:
 
-	bool initEarlyConfiguration(); // Initialize setting needed by crash reporting.
 	bool initThreads(); // Initialize viewer threads, return false on failure.
 	bool initConfiguration(); // Initialize settings from the command line/config file.
 
 	bool initCache(); // Initialize local client cache.
-
-	bool doConfigFromCommandLine(); // calls parse args.
+	void purgeCache(); // Clear the local cache. 
 
 	void cleanupSavedSettings(); // Sets some config data to current or default values during cleanup.
 	void removeCacheFiles(const char *filemask); // Deletes cached files the match the given wildcard.
@@ -186,6 +186,8 @@ private:
 
     bool mQuitRequested;				// User wants to quit, may have modified documents open.
     bool mLogoutRequestSent;			// Disconnect message sent to simulator, no longer safe to send messages to the sim.
+    S32 mYieldTime;
+	LLSD mSettingsFileList;
 };
 
 // consts from viewer.h
@@ -196,31 +198,16 @@ const S32 AGENT_UPDATES_PER_SECOND  = 10;
 //
 // "// llstartup" indicates that llstartup is the only client for this global.
 
-extern bool gVerifySSLCert; // parse_args setting used by llxmlrpctransaction.cpp
 extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp
-extern BOOL gProbeHardware;
 extern LLString gDisabledMessage; // llstartup
 extern BOOL gHideLinks; // used by llpanellogin, lllfloaterbuycurrency, llstartup
 extern LLSD gDebugInfo;
 
 extern BOOL	gAllowIdleAFK;
-extern F32 gAFKTimeout;
 extern BOOL	gShowObjectUpdates;
 
-extern BOOL gLogMessages; // llstartup 
-extern std::string gChannelName;
-extern BOOL gUseAudio; // llstartup
-
-extern LLString gCmdLineFirstName; // llstartup
-extern LLString gCmdLineLastName;
-extern LLString gCmdLinePassword;
-
-extern BOOL gAutoLogin; // llstartup
 extern const char* DEFAULT_SETTINGS_FILE; // llstartup
 
-extern BOOL gRequestInventoryLibrary; // llstartup
-extern BOOL gGodConnect; // llstartup
-
 extern BOOL gAcceptTOS;
 extern BOOL gAcceptCriticalMessage;
 
@@ -264,7 +251,6 @@ extern LLUUID gInventoryLibraryOwner;
 extern LLUUID gInventoryLibraryRoot;
 
 extern BOOL		gDisconnected;
-extern BOOL		gDisableVoice;
 
 // Map scale in pixels per region
 extern F32 gMapScale;
@@ -274,9 +260,6 @@ extern LLFrameTimer	gRestoreGLTimer;
 extern BOOL			gRestoreGL;
 extern BOOL		gUseWireframe;
 
-extern F32 gMouseSensitivity;
-extern BOOL gInvertMouse;
-
 // VFS globals - gVFS is for general use
 // gStaticVFS is read-only and is shipped w/ the viewer
 // it has pre-cache data like the UI .TGAs
@@ -284,9 +267,6 @@ extern LLVFS	*gStaticVFS;
 
 extern LLMemoryInfo gSysMemory;
 
-extern bool gPreloadImages;
-extern bool gPreloadSounds;
-
 extern LLString gLastVersionChannel;
 
 extern LLVector3 gWindVec;
@@ -297,10 +277,7 @@ extern BOOL gPrintMessagesThisFrame;
 extern LLUUID gSunTextureID;
 extern LLUUID gMoonTextureID;
 
-extern BOOL gUseConsole; 
-
 extern BOOL gRandomizeFramerate;
 extern BOOL gPeriodicSlowFrame;
 
-extern BOOL gQAMode;
 #endif // LL_LLAPPVIEWER_H
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index 1993fd0a76e87df62b568d07ce9ebe09255a8201..c36dd2955e84cd5a95a2f3819370040f527914dc 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -31,9 +31,11 @@
 
 #include "llviewerprecompiledheaders.h"
 
-#include "llmemtype.h"
 #include "llappviewerlinux.h"
 
+#include "llcommandlineparser.h"
+
+#include "llmemtype.h"
 #include "llviewernetwork.h"
 #include "llmd5.h"
 
@@ -54,6 +56,12 @@
   #     include <ucontext.h>
   #endif
 
+namespace
+{
+	int gArgC = 0;
+	char **gArgV = NULL;
+}
+
 int main( int argc, char **argv ) 
 {
 	LLMemType mt1(LLMemType::MTYPE_STARTUP);
@@ -62,18 +70,14 @@ int main( int argc, char **argv )
 	asm ("ta\t6");		 // NOTE:  Make sure memory alignment is enforced on SPARC
 #endif
 
+	gArgC = argc;
+	gArgV = argv;
+
 	LLAppViewer* viewer_app_ptr = new LLAppViewerLinux();
 
 	viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
 
-	bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv);
-	if(!ok)
-	{
-		llwarns << "Unable to parse command line." << llendl;
-		return -1;
-	}
-
-	ok = viewer_app_ptr->init();
+	bool ok = viewer_app_ptr->init();
 	if(!ok)
 	{
 		llwarns << "Application init failed." << llendl;
@@ -321,7 +325,7 @@ void LLAppViewerLinux::handleCrashReporting()
 			{(char*)cmd.c_str(),
 			 ask_dialog,
 			 (char*)"-user",
-			 (char*)gGridName,
+			 (char*)gGridName.c_str(),
 			 (char*)"-name",
 			 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(),
 			 NULL};
@@ -403,6 +407,12 @@ bool LLAppViewerLinux::initLogging()
 	return LLAppViewer::initLogging();
 }
 
+bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp)
+{
+	clp.parseCommandLine(gArgC, gArgV);
+	return true;
+}
+
 std::string LLAppViewerLinux::generateSerialNumber()
 {
 	char serial_md5[MD5HEX_STR_SIZE];
diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h
index f38a64a8cdcbcbd0f9cc4399c979ead98fe99f8d..ce91b6b8b644b578d5dbb69d32a132bbe434776a 100644
--- a/indra/newview/llappviewerlinux.h
+++ b/indra/newview/llappviewerlinux.h
@@ -36,6 +36,8 @@
 #include "llappviewer.h"
 #endif
 
+class LLCommandLineParser;
+
 class LLAppViewerLinux : public LLAppViewer
 {
 public:
@@ -54,6 +56,7 @@ protected:
 	virtual void handleCrashReporting();
 
 	virtual bool initLogging();
+	virtual bool initParseCommandLine(LLCommandLineParser& clp);
 };
 
 #endif // LL_LLAPPVIEWERLINUX_H
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index 2d7091a0755e3935fe6547684d83616f4d6ca3bf..1e4c08a1c1b70bb9f65593c3d75d9fbe0f6a5517 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -36,15 +36,25 @@
 #endif
 
 #include "llappviewermacosx.h"
+#include "llcommandlineparser.h"
+
 #include "llmemtype.h"
 
 #include "llviewernetwork.h"
+#include "llviewercontrol.h"
 #include "llmd5.h"
 #include "llurlsimstring.h"
 #include "llfloaterworldmap.h"
 #include "llurldispatcher.h"
 #include <Carbon/Carbon.h>
 
+namespace 
+{
+	// The command line args stored.
+	// They are not used immediately by the app.
+	int gArgC;
+	char** gArgV;
+}
 
 int main( int argc, char **argv ) 
 {
@@ -61,14 +71,11 @@ int main( int argc, char **argv )
 
 	viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
 
-	bool ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv);
-	if(!ok)
-	{
-		llwarns << "Unable to parse command line." << llendl;
-		return -1;
-	}
-
-	ok = viewer_app_ptr->init();
+	// Store off the command line args for use later.
+	gArgC = argc;
+	gArgV = argv;
+	
+	bool ok = viewer_app_ptr->init();
 	if(!ok)
 	{
 		llwarns << "Application init failed." << llendl;
@@ -108,6 +115,51 @@ bool LLAppViewerMacOSX::init()
 	return LLAppViewer::init();
 }
 
+bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp)
+{
+	// First parse the command line, not often used on the mac.
+	clp.parseCommandLine(gArgC, gArgV);
+    
+    // Now read in the args from arguments txt.
+    // Succesive calls to clp.parse... will NOT override earlier 
+    // options. 
+    const char* filename = "arguments.txt";
+	llifstream ifs(filename, llifstream::binary);
+	if (!ifs.is_open())
+	{
+		llwarns << "Unable to open file" << filename << llendl;
+		return false;
+	}
+	
+	clp.parseCommandLineFile(ifs);
+	
+	// Get the user's preferred language string based on the Mac OS localization mechanism.
+	// To add a new localization:
+		// go to the "Resources" section of the project
+		// get info on "language.txt"
+		// in the "General" tab, click the "Add Localization" button
+		// create a new localization for the language you're adding
+		// set the contents of the new localization of the file to the string corresponding to our localization
+		//   (i.e. "en-us", "ja", etc.  Use the existing ones as a guide.)
+	CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL);
+	char path[MAX_PATH];
+	if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path)))
+	{
+		LLString lang;
+		if(_read_file_into_string(lang, path))		/* Flawfinder: ignore*/
+		{
+            LLControlVariable* c = gSavedSettings.getControl("SystemLanguage");
+            if(c)
+            {
+                c->setValue(lang, false);
+            }
+		}
+	}
+	CFRelease(url);
+	
+    return true;
+}
+
 void LLAppViewerMacOSX::handleCrashReporting()
 {
 	// Macintosh
diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h
index 2c61e5a01cd16cf1f0578144be2b2f891b099fef..cc4a7f5eb5de3981e5b36780fde390b113364f02 100644
--- a/indra/newview/llappviewermacosx.h
+++ b/indra/newview/llappviewermacosx.h
@@ -51,6 +51,7 @@ public:
 protected:
 	virtual void handleCrashReporting(); 
 	std::string generateSerialNumber();
+    virtual bool initParseCommandLine(LLCommandLineParser& clp);
 };
 
 #endif // LL_LLAPPVIEWERMACOSX_H
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index 09bcf6f7cc6b7420ec105a04e35d3e8bf14526a0..fb726e7c97927232f8353af9c109ac99ed334874 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -55,41 +55,13 @@
 #include "llviewernetwork.h"
 #include "llmd5.h"
 
-void fill_args(int& argc, char** argv, const S32 max_args, LPSTR cmd_line)
-{
-	char *token = NULL;
-	if( cmd_line[0] == '\"' )
-	{
-		// Exe name is enclosed in quotes
-		token = strtok( cmd_line, "\"" );
-		argv[argc++] = token;
-		token = strtok( NULL, " \t," );
-	}
-	else
-	{
-		// Exe name is not enclosed in quotes
-		token = strtok( cmd_line, " \t," );
-	}
+#include "llcommandlineparser.h"
 
-	while( (token != NULL) && (argc < max_args) )
-	{
-		argv[argc++] = token;
-		/* Get next token: */
-		if (*(token + strlen(token) + 1) == '\"')		/* Flawfinder: ignore*/
-		{
-			token = strtok( NULL, "\"");
-		}
-		else
-		{
-			token = strtok( NULL, " \t," );
-		}
-	}
-}
-
-// *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
 LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)
 {
-	// Translate the signals/exceptions into cross-platform stuff
+    // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
+	
+    // Translate the signals/exceptions into cross-platform stuff
 	// Windows implementation
 	llinfos << "Entering Windows Exception Handler..." << llendl;
 
@@ -144,21 +116,7 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
 	// *FIX: global
 	gIconResource = MAKEINTRESOURCE(IDI_LL_ICON);
 
-	// In Win32, we need to generate argc and argv ourselves...
-	// Note: GetCommandLine() returns a  potentially return a LPTSTR
-	// which can resolve to a LPWSTR (unicode string).
-	// (That's why it's different from lpCmdLine which is a LPSTR.)
-	// We don't currently do unicode, so call the non-unicode version
-	// directly.
-	LPSTR cmd_line_including_exe_name = GetCommandLineA();
-
-	const S32	MAX_ARGS = 100;
-	int argc = 0;
-	char* argv[MAX_ARGS];		/* Flawfinder: ignore */
-
-	fill_args(argc, argv, MAX_ARGS, cmd_line_including_exe_name);
-
-	LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32();
+	LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine);
 
 	// *FIX:Mani This method is poorly named, since the exception
 	// is now handled by LLApp. 
@@ -180,13 +138,6 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
 
 	viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
 
-	ok = viewer_app_ptr->tempStoreCommandOptions(argc, argv);
-	if(!ok)
-	{
-		llwarns << "Unable to parse command line." << llendl;
-		return -1;
-	}
-
 	ok = viewer_app_ptr->init();
 	if(!ok)
 	{
@@ -308,7 +259,8 @@ void create_console()
 	setvbuf( stderr, NULL, _IONBF, 0 );
 }
 
-LLAppViewerWin32::LLAppViewerWin32()
+LLAppViewerWin32::LLAppViewerWin32(const char* cmd_line) :
+    mCmdLine(cmd_line)
 {
 }
 
@@ -339,15 +291,11 @@ bool LLAppViewerWin32::cleanup()
 	return result;
 }
 
-bool LLAppViewerWin32::initWindow()
+void LLAppViewerWin32::initConsole()
 {
-	// pop up debug console if necessary
-	if (gUseConsole && gSavedSettings.getBOOL("ShowConsoleWindow"))
-	{
-		create_console();
-	}
-
-	return LLAppViewer::initWindow();
+	// pop up debug console
+	create_console();
+	return LLAppViewer::initConsole();
 }
 
 void write_debug_dx(const char* str)
@@ -368,7 +316,7 @@ bool LLAppViewerWin32::initHardwareTest()
 	// Do driver verification and initialization based on DirectX
 	// hardware polling and driver versions
 	//
-	if (gProbeHardware)
+	if (FALSE == gSavedSettings.getBOOL("NoHardwareProbe"))
 	{
 		BOOL vram_only = !gSavedSettings.getBOOL("ProbeHardwareOnStartup");
 
@@ -431,6 +379,11 @@ bool LLAppViewerWin32::initHardwareTest()
 	return true;
 }
 
+bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp)
+{
+    return clp.parseCommandLineString(mCmdLine);
+}
+
 void LLAppViewerWin32::handleCrashReporting()
 {
 	// Windows only behaivor. Spawn win crash reporter.
@@ -486,4 +439,4 @@ std::string LLAppViewerWin32::generateSerialNumber()
 		llwarns << "GetVolumeInformation failed" << llendl;
 	}
 	return serial_md5;
-}
\ No newline at end of file
+}
diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h
index 23e733761821d612b24e0d98a974503023d99c76..66653c48f5cd3a1344895130a4e944ff96ec2564 100644
--- a/indra/newview/llappviewerwin32.h
+++ b/indra/newview/llappviewerwin32.h
@@ -39,7 +39,7 @@
 class LLAppViewerWin32 : public LLAppViewer
 {
 public:
-	LLAppViewerWin32();
+	LLAppViewerWin32(const char* cmd_line);
 	virtual ~LLAppViewerWin32();
 
 	//
@@ -49,15 +49,18 @@ public:
 	virtual bool cleanup();
 
 protected:
-	virtual bool initWindow(); // Initialize the viewer's window.
+	virtual void initConsole(); // Initialize OS level debugging console.
 	virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware.
-	virtual void handleCrashReporting(); 
+    virtual bool initParseCommandLine(LLCommandLineParser& clp);
+
+    virtual void handleCrashReporting(); 
 
 	std::string generateSerialNumber();
 
 private:
 	void disableWinErrorReporting();
 
+    std::string mCmdLine;
 };
 
 #endif // LL_LLAPPVIEWERWIN32_H
diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2f99ca1247d2f34818767d576132beb422ee38ee
--- /dev/null
+++ b/indra/newview/llcommandlineparser.cpp
@@ -0,0 +1,535 @@
+/**
+ * @file llcommandlineparser.cpp
+ * @brief The LLCommandLineParser class definitions
+ *
+ * $LicenseInfo:firstyear=2007&license=viewergpl$
+ * 
+ * Copyright (c) 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 "llviewerprecompiledheaders.h"
+#include "llcommandlineparser.h"
+
+// *NOTE: The boost::lexical_cast generates 
+// the warning C4701(local used with out assignment) in VC7.1.
+// Disable the warning for the boost includes.
+#if _MSC_VER
+#   pragma warning(push)
+#   pragma warning( disable : 4701 )
+#else
+// NOTE: For the other platforms?
+#endif
+
+#include <boost/program_options.hpp>
+#include <boost/bind.hpp>
+#include<boost/tokenizer.hpp>
+
+#if _MSC_VER
+#   pragma warning(pop)
+#endif
+
+#include "llsdserialize.h"
+#include <iostream>
+#include <sstream>
+
+#include "llcontrol.h"
+
+namespace po = boost::program_options;
+
+// *NTOE:MEP - Currently the boost object reside in file scope. 
+// This has a couple of negatives, they are always around and 
+// there can be only one instance of each. 
+// The plus is that the boost-ly-ness of this implementation is 
+// hidden from the rest of the world. 
+// Its importatnt to realize that multiple LLCommandLineParser objects 
+// will all have this single repository of option escs and parsed options.
+// This could be good or bad, and probably won't matter for most use cases.
+namespace 
+{
+    po::options_description gOptionsDesc;
+    po::positional_options_description gPositionalOptions;
+	po::variables_map gVariableMap;
+    
+    const LLCommandLineParser::token_vector_t gEmptyValue;
+
+    void read_file_into_string(std::string& str, const std::basic_istream < char >& file)
+    {
+	    std::ostringstream oss;
+	    oss << file.rdbuf();
+	    str = oss.str();
+    }
+
+    bool gPastLastOption = false;
+}
+
+class LLCLPError : public std::logic_error {
+public:
+    LLCLPError(const std::string& what) : std::logic_error(what) {}
+};
+
+class LLCLPLastOption : public std::logic_error {
+public:
+    LLCLPLastOption(const std::string& what) : std::logic_error(what) {}
+};
+
+class LLCLPValue : public po::value_semantic_codecvt_helper<char> 
+{
+    unsigned mMinTokens;
+    unsigned mMaxTokens;
+    bool mIsComposing;
+    typedef boost::function1<void, const LLCommandLineParser::token_vector_t&> notify_callback_t;
+    notify_callback_t mNotifyCallback;
+    bool mLastOption;
+
+public:
+    LLCLPValue() :
+        mMinTokens(0),
+        mMaxTokens(0),
+        mIsComposing(false),
+        mLastOption(false)
+        {}
+      
+    virtual ~LLCLPValue() {};
+
+    void setMinTokens(unsigned c) 
+    {
+        mMinTokens = c;
+    }
+
+    void setMaxTokens(unsigned c) 
+    {
+        mMaxTokens = c;
+    }
+
+    void setComposing(bool c)
+    {
+        mIsComposing = c;
+    }
+
+    void setLastOption(bool c)
+    {
+        mLastOption = c;
+    }
+
+    void setNotifyCallback(notify_callback_t f)
+    {
+        mNotifyCallback = f;
+    }
+
+    // Overrides to support the value_semantic interface.
+    virtual std::string name() const 
+    { 
+        const std::string arg("arg");
+        const std::string args("args");
+        return (max_tokens() > 1) ? args : arg; 
+    }
+
+    virtual unsigned min_tokens() const
+    {
+        return mMinTokens;
+    }
+
+    virtual unsigned max_tokens() const 
+    {
+        return mMaxTokens;
+    }
+
+    virtual bool is_composing() const 
+    {
+        return mIsComposing;
+    }
+
+    virtual bool apply_default(boost::any& value_store) const
+    {
+        return false; // No defaults.
+    }
+
+    virtual void notify(const boost::any& value_store) const
+    {
+        const LLCommandLineParser::token_vector_t* value =
+            boost::any_cast<const LLCommandLineParser::token_vector_t>(&value_store);
+        if(mNotifyCallback) 
+        {
+           mNotifyCallback(*value);
+        }
+
+    }
+
+protected:
+    void xparse(boost::any& value_store,
+         const std::vector<std::string>& new_tokens) const
+    {
+        if(gPastLastOption)
+        {
+            throw(LLCLPLastOption("Don't parse no more!"));
+        }
+
+        // Error checks. Needed?
+        if (!value_store.empty() && !is_composing()) 
+        {
+            throw(LLCLPError("Non composing value with multiple occurences."));
+        }
+        if (new_tokens.size() < min_tokens() || new_tokens.size() > max_tokens())
+        {
+            throw(LLCLPError("Illegal number of tokens specified."));
+        }
+        
+        if(value_store.empty())
+        {
+            value_store = boost::any(LLCommandLineParser::token_vector_t());
+        }
+        LLCommandLineParser::token_vector_t* tv = 
+            boost::any_cast<LLCommandLineParser::token_vector_t>(&value_store); 
+       
+        for(unsigned i = 0; i < new_tokens.size() && i < mMaxTokens; ++i)
+        {
+            tv->push_back(new_tokens[i]);
+        }
+
+        if(mLastOption)
+        {
+            gPastLastOption = true;
+        }
+    }
+};
+
+//----------------------------------------------------------------------------
+// LLCommandLineParser defintions
+//----------------------------------------------------------------------------
+void LLCommandLineParser::addOptionDesc(const LLString& option_name, 
+                                        boost::function1<void, const token_vector_t&> notify_callback,
+                                        unsigned int token_count,
+                                        const LLString& description,
+                                        const LLString& short_name,
+                                        bool composing,
+                                        bool positional,
+                                        bool last_option)
+{
+    // Compose the name for boost::po. 
+    // It takes the format "long_name, short name"
+    const LLString comma(",");
+    LLString boost_option_name = option_name;
+    if(short_name != LLString::null)
+    {
+        boost_option_name += comma;
+        boost_option_name += short_name;
+    }
+   
+    LLCLPValue* value_desc = new LLCLPValue();
+    value_desc->setMinTokens(token_count);
+    value_desc->setMaxTokens(token_count);
+    value_desc->setComposing(composing);
+    value_desc->setLastOption(last_option);
+
+    boost::shared_ptr<po::option_description> d(
+            new po::option_description(boost_option_name.c_str(), 
+                                    value_desc, 
+                                    description.c_str()));
+
+    if(!notify_callback.empty())
+    {
+        value_desc->setNotifyCallback(notify_callback);
+    }
+
+    gOptionsDesc.add(d);
+
+    if(positional)
+    {
+        gPositionalOptions.add(boost_option_name.c_str(), token_count);
+    }
+}
+
+bool parseAndStoreResults(po::command_line_parser& clp)
+{
+    try
+    {
+        clp.options(gOptionsDesc);
+        clp.positional(gPositionalOptions);
+        clp.style(po::command_line_style::default_style 
+                  | po::command_line_style::allow_long_disguise);
+        po::basic_parsed_options<char> opts = clp.run();
+        po::store(opts, gVariableMap);
+    }
+    catch(po::error& e)
+    {
+        llwarns << "Caught Error:" << e.what() << llendl;
+        return false;
+    }
+    catch(LLCLPError& e)
+    {
+        llwarns << "Caught Error:" << e.what() << llendl;
+        return false;
+    }
+    catch(LLCLPLastOption&) 
+    {
+        // Continue without parsing.
+        llwarns << "Found tokens past last option. Ignoring." << llendl;
+
+        // boost::po will have stored a mal-formed option. 
+        // All such options will be removed below.
+        for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();)
+        {
+            po::variables_map::iterator tempI = i++;
+            if(tempI->second.empty())
+            {
+                gVariableMap.erase(tempI);
+            }
+        }
+    } 
+    return true;
+}
+
+bool LLCommandLineParser::parseCommandLine(int argc, char **argv)
+{
+    po::command_line_parser clp(argc, argv);
+    return parseAndStoreResults(clp);
+}
+
+bool LLCommandLineParser::parseCommandLineString(const std::string& str)
+{
+    // Split the string content into tokens
+    boost::escaped_list_separator<char> sep("\\", "\r\n ", "\"'");
+    boost::tokenizer< boost::escaped_list_separator<char> > tok(str, sep);
+    std::vector<std::string> tokens;
+    // std::copy(tok.begin(), tok.end(), std::back_inserter(tokens));
+    for(boost::tokenizer< boost::escaped_list_separator<char> >::iterator i = tok.begin();
+        i != tok.end();
+        ++i)
+    {
+        if(0 != i->size())
+        {
+            tokens.push_back(*i);
+        }
+    }
+
+    po::command_line_parser clp(tokens);
+    return parseAndStoreResults(clp);
+        
+}
+
+bool LLCommandLineParser::parseCommandLineFile(const std::basic_istream < char >& file)
+{
+    std::string args;
+    read_file_into_string(args, file);
+
+    return parseCommandLineString(args);
+}
+
+void LLCommandLineParser::notify()
+{
+    po::notify(gVariableMap);    
+}
+
+void LLCommandLineParser::printOptions() const
+{
+    for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end(); ++i)
+    {
+        std::string name = i->first;
+        token_vector_t values = i->second.as<token_vector_t>();
+        std::ostringstream oss;
+        oss << name << ": ";
+        for(token_vector_t::iterator t_itr = values.begin(); t_itr != values.end(); ++t_itr)
+        {
+            oss << t_itr->c_str() << " ";
+        }
+        llinfos << oss.str() << llendl;
+    }
+}
+
+std::ostream& LLCommandLineParser::printOptionsDesc(std::ostream& os) const
+{
+    return os << gOptionsDesc;
+}
+
+bool LLCommandLineParser::hasOption(const std::string& name) const
+{
+    return gVariableMap.count(name) > 0;
+}
+
+const LLCommandLineParser::token_vector_t& LLCommandLineParser::getOption(const std::string& name) const
+{
+    if(hasOption(name))
+    {
+        return gVariableMap[name].as<token_vector_t>();
+    }
+
+    return gEmptyValue;
+}
+
+//----------------------------------------------------------------------------
+// LLControlGroupCLP defintions
+//----------------------------------------------------------------------------
+void setControlValueCB(const LLCommandLineParser::token_vector_t& value, 
+                       const LLString& opt_name, 
+                       LLControlGroup* ctrlGroup)
+{
+    if(value.size() > 1)
+    {
+        llwarns << "Ignoring extra tokens mapped to the setting: " << opt_name << "." << llendl; 
+    }
+    
+    // *FIX: Do sematic conversion here.
+    // LLSD (ImplString) Is no good for doing string to type conversion for...
+    // booleans
+    // compound types
+    // ?...
+
+    LLControlVariable* ctrl = ctrlGroup->getControl(opt_name);
+    if(NULL != ctrl)
+    {
+        switch(ctrl->type())
+        {
+        case TYPE_BOOLEAN:
+            if(value.size() > 1)
+            {
+                llwarns << "Ignoring extra tokens." << llendl; 
+            }
+              
+            if(value.size() > 0)
+            {
+                // There's a token. check the string for true/false/1/0 etc.
+                BOOL result = false;
+                BOOL gotSet = LLString::convertToBOOL(value[0], result);
+                if(gotSet)
+                {
+                    ctrl->setValue(LLSD(result), false);
+                }
+            }
+            else
+            {
+                ctrl->setValue(LLSD(true), false);
+            }
+            break;
+
+        default:
+            {
+                // For the default types, let llsd do the conversion.
+                if(value.size() > 1)
+                {
+                    // Assume its an array...
+                    LLSD llsdArray;
+                    for(unsigned int i = 0; i < value.size(); ++i)
+                    {
+                        LLSD llsdValue;
+                        llsdValue.assign(LLSD::String(value[i]));
+                        llsdArray.set(i, llsdValue);
+                    }
+
+                    ctrl->setValue(llsdArray, false);
+                }
+                else if(value.size() > 0)
+                {
+                    LLSD llsdValue;
+                    llsdValue.assign(LLSD::String(value[0]));
+                    ctrl->setValue(llsdValue, false);
+                }
+            }
+            break;
+        }
+    }
+    else
+    {
+        llwarns << "Command Line option mapping '" 
+            << opt_name 
+            << "' not found! Ignoring." 
+            << llendl;
+    }
+}
+
+void LLControlGroupCLP::configure(const LLString& config_filename, LLControlGroup* controlGroup)
+{
+    // This method reads the llsd based config file, and uses it to set 
+    // members of a control group.
+    LLSD clpConfigLLSD;
+    
+    llifstream input_stream;
+    input_stream.open(config_filename.c_str(), std::ios::in | std::ios::binary);
+
+    if(input_stream.is_open())
+    {
+        LLSDSerialize::fromXML(clpConfigLLSD, input_stream);
+        for(LLSD::map_iterator option_itr = clpConfigLLSD.beginMap(); 
+            option_itr != clpConfigLLSD.endMap(); 
+            ++option_itr)
+        {
+            LLSD::String long_name = option_itr->first;
+            LLSD option_params = option_itr->second;
+            
+            LLString desc("n/a");
+            if(option_params.has("desc"))
+            {
+                desc = option_params["desc"].asString();
+            }
+            
+            LLString short_name = LLString::null;
+            if(option_params.has("short"))
+            {
+                short_name = option_params["short"].asString();
+            }
+
+            unsigned int token_count = 0;
+            if(option_params.has("count"))
+            {
+                token_count = option_params["count"].asInteger();
+            }
+
+            bool composing = false;
+            if(option_params.has("compose"))
+            {
+                composing = option_params["compose"].asBoolean();
+            }
+
+            bool positional = false;
+            if(option_params.has("positional"))
+            {
+                positional = option_params["positional"].asBoolean();
+            }
+
+            bool last_option = false;
+            if(option_params.has("last_option"))
+            {
+                last_option = option_params["last_option"].asBoolean();
+            }
+
+            boost::function1<void, const token_vector_t&> callback;
+            if(option_params.has("map-to") && (NULL != controlGroup))
+            {
+                LLString controlName = option_params["map-to"].asString();
+                callback = boost::bind(setControlValueCB, _1, 
+                                       controlName, controlGroup);
+            }
+
+            this->addOptionDesc(
+                long_name, 
+                callback,
+                token_count, 
+                desc, 
+                short_name, 
+                composing,
+                positional,
+                last_option);
+        }
+    }
+}
diff --git a/indra/newview/llcommandlineparser.h b/indra/newview/llcommandlineparser.h
new file mode 100644
index 0000000000000000000000000000000000000000..6cc40ee8b4fa7860bad44c19f14eed10317beeb6
--- /dev/null
+++ b/indra/newview/llcommandlineparser.h
@@ -0,0 +1,131 @@
+/** 
+ * @file llcommandlineparser.h
+ * @brief LLCommandLineParser class declaration
+ *
+ * $LicenseInfo:firstyear=2007&license=viewergpl$
+ * 
+ * Copyright (c) 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_LLCOMMANDLINEPARSER_H
+#define LL_LLCOMMANDLINEPARSER_H
+
+#include <boost/function/function1.hpp>
+
+/** 
+ * @class LLCommandLineParser
+ * @brief Handle defining and parsing the command line.
+ */
+class LLCommandLineParser
+{
+public:
+    typedef std::vector< std::string > token_vector_t;
+
+    /**
+     * @brief Add a value-less option to the command line description.
+     * @param option_name The long name of the cmd-line option. 
+     * @param description The text description of the option usage.
+     */
+    void addOptionDesc(
+        const LLString& option_name, 
+        boost::function1<void, const token_vector_t&> notify_callback = 0,
+        unsigned int num_tokens = 0,
+        const LLString& description = LLString::null,
+        const LLString& short_name = LLString::null,
+        bool composing = false,
+        bool positional = false,
+        bool last_option = false);
+
+
+    /** 
+     * @brief Parse the command line given by argc/argv.
+     */
+	bool parseCommandLine(int argc, char **argv);
+
+    /** 
+     * @brief Parse the command line contained by the given file.
+     */
+    bool parseCommandLineString(const std::string& str);
+
+    /** 
+     * @brief Parse the command line contained by the given file.
+     */
+    bool parseCommandLineFile(const std::basic_istream< char >& file);
+
+    /** 
+     * @brief Call callbacks associated with option descriptions.
+     * 
+     * Use this to handle the results of parsing. 
+     */
+    void notify();
+
+    /** @brief Print a description of the configured options.
+     *
+     * Use this to print a description of options to the
+     * given ostream. Useful for displaying usage info.
+     */
+    std::ostream& printOptionsDesc(std::ostream& os) const;
+
+    /** @brief Manual option setting accessors.
+     * 
+     * Use these to retrieve get the values set for an option.
+     * getOption will return an empty value if the option isn't
+     * set. 
+     */
+    bool hasOption(const std::string& name) const;
+    const token_vector_t& getOption(const std::string& name) const;
+
+    void printOptions() const;
+};
+
+inline std::ostream& operator<<(std::ostream& out, const LLCommandLineParser& clp)
+{
+    return clp.printOptionsDesc(out);
+}
+
+class LLControlGroup; 
+
+/** 
+ * @class LLControlGroupCLP
+ * @brief Uses the CLP to configure an LLControlGroup
+ *
+ * 
+ */
+class LLControlGroupCLP : public LLCommandLineParser
+{
+public:
+    /**
+     * @brief Configure the command line parser according the given config file.
+     *
+     * @param config_filename The name of the XML based LLSD config file. 
+     * @param clp A reference to the command line parser object to configure.
+     *
+     * *FIX:Mani Specify config file format.
+     */
+    void configure(const LLString& config_filename, 
+                   LLControlGroup* controlGroup);
+};
+
+#endif // LL_LLCOMMANDLINEPARSER_H
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index bf7d48f911ba4146054eb5be26289ab4e12ca34a..e6fcfb6d40a5f8395eb4af3df570f2d6ade31597 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -483,7 +483,7 @@ void LLFeatureManager::applyFeatures(bool skipFeatures)
 		}
 
 		// get the control setting
-		LLControlBase* ctrl = gSavedSettings.getControl(mIt->first);
+		LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first);
 		if(ctrl == NULL)
 		{
 			llwarns << "AHHH! Control setting " << mIt->first << " does not exist!" << llendl;
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 97ebc02ba185f72aca2009edae74c2be7ade050d..b00450eec63ddbf54e1ad6f26516bed146b1e2ef 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -49,7 +49,8 @@ std::set<LLString> LLFirstUse::sConfigVariables;
 // static
 void LLFirstUse::addConfigVariable(const LLString& var)
 {
-	gSavedSettings.addWarning(var);
+	//Don't add the warning, now that we're storing the default in the settings_default.xml file
+	//gSavedSettings.addWarning(var);
 	sConfigVariables.insert(var);
 }
 
@@ -256,13 +257,15 @@ void LLFirstUse::useSculptedPrim()
 // static 
 void LLFirstUse::useVoice()
 {
-	if (gDisableVoice) return;
-	if (gSavedSettings.getWarning("FirstVoice"))
-	{
-		gSavedSettings.setWarning("FirstVoice", FALSE);
-
-		LLFloaterVoiceWizard::showInstance();
-	}
+	if (!gSavedSettings.getBOOL("CmdLineDisableVoice"))
+    {
+	    if (gSavedSettings.getWarning("FirstVoice"))
+	    {
+		    gSavedSettings.setWarning("FirstVoice", FALSE);
+
+		    LLFloaterVoiceWizard::showInstance();
+	    }
+    }
 }
 
 // static 
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index bf8b1fd6639f26b2f6d26e8889cc45261da47d37..60385b8ca55614702beec377bb1036cc2e55c30b 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -84,7 +84,7 @@ LLFloaterAbout::LLFloaterAbout()
 		+ llformat(" %d.%d.%d (%d) %s %s (%s)",
 				   LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,
 				   __DATE__, __TIME__,
-				   gChannelName.c_str());
+				   gSavedSettings.getString("VersionChannelName").c_str());
 	support.append(version);
 	support.append("\n\n");
 
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index 4573ca75d25488e737a99759a1cfaa67f7c729e5..7a0f01e5a6329b2d8237023c03e22748228d2c94 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -173,8 +173,7 @@ bool LLPanelGroups::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
 		reset();
 		return true;
 	}
-	
-	return LLView::handleEvent(event, userdata);
+	return false;
 }
 
 // Default constructor
diff --git a/indra/newview/llfloatergroups.h b/indra/newview/llfloatergroups.h
index a1740861d54ea1bd2df2c45e7c34cdad84a4c39e..6d99f340855c830d852d8e67e5a80f21c2ac85ae 100644
--- a/indra/newview/llfloatergroups.h
+++ b/indra/newview/llfloatergroups.h
@@ -83,7 +83,7 @@ protected:
 	static instance_map_t sInstances;
 };
 
-class LLPanelGroups : public LLPanel
+class LLPanelGroups : public LLPanel, public LLSimpleListener
 {
 public:
 	LLPanelGroups();
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 584d7479e42ec450d93fc18719d9014aa4016033..345561f5511453feeac3231d8a66ee24496d83db 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -446,7 +446,7 @@ void LLFloaterPreference::onBtnOK( void* userdata )
 		fp->apply();
 		fp->close(false);
 
-		gSavedSettings.saveToFile( gSettingsFileName, TRUE );
+		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
 		
 		std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
 		// save all settings, even if equals defaults
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7975bd95ef74409449cecd389003d04b9ef0f6eb
--- /dev/null
+++ b/indra/newview/llfloatersettingsdebug.cpp
@@ -0,0 +1,490 @@
+/** 
+ * @file llfloatersettingsdebug.cpp
+ * @brief floater for debugging internal viewer settings
+ *
+ * $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 "llviewerprecompiledheaders.h"
+#include "llfloatersettingsdebug.h"
+#include "llfloater.h"
+#include "llvieweruictrlfactory.h"
+#include "llfirstuse.h"
+#include "llcombobox.h"
+#include "llspinctrl.h"
+#include "llcolorswatch.h"
+#include "llviewercontrol.h"
+
+LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL;
+
+LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor")
+{
+}
+
+LLFloaterSettingsDebug::~LLFloaterSettingsDebug()
+{
+	sInstance = NULL;
+}
+
+BOOL LLFloaterSettingsDebug::postBuild()
+{
+	LLComboBox* settings_combo = LLUICtrlFactory::getComboBoxByName(this, "settings_combo");
+
+	struct f : public LLControlGroup::ApplyFunctor
+	{
+		LLComboBox* combo;
+		f(LLComboBox* c) : combo(c) {}
+		virtual void apply(const LLString& name, LLControlVariable* control)
+		{
+			combo->add(name, (void*)control);
+		}
+	} func(settings_combo);
+
+	gSavedSettings.applyToAll(&func);
+	gSavedPerAccountSettings.applyToAll(&func);
+	gColors.applyToAll(&func);
+
+	settings_combo->sortByName();
+	settings_combo->setCommitCallback(onSettingSelect);
+	settings_combo->setCallbackUserData(this);
+	settings_combo->updateSelection();
+
+	childSetCommitCallback("val_spinner_1", onCommitSettings);
+	childSetUserData("val_spinner_1", this);
+	childSetCommitCallback("val_spinner_2", onCommitSettings);
+	childSetUserData("val_spinner_2", this);
+	childSetCommitCallback("val_spinner_3", onCommitSettings);
+	childSetUserData("val_spinner_3", this);
+	childSetCommitCallback("val_spinner_4", onCommitSettings);
+	childSetUserData("val_spinner_4", this);
+	childSetCommitCallback("val_text", onCommitSettings);
+	childSetUserData("val_text", this);
+	childSetCommitCallback("boolean_combo", onCommitSettings);
+	childSetUserData("boolean_combo", this);
+	childSetCommitCallback("color_swatch", onCommitSettings);
+	childSetUserData("color_swatch", this);
+	childSetAction("default_btn", onClickDefault, this);
+	mComment = getChild<LLTextEditor>("comment_text");
+	return TRUE;
+}
+
+void LLFloaterSettingsDebug::draw()
+{
+	LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
+	LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
+	updateControl(controlp);
+
+	LLFloater::draw();
+}
+
+//static
+void LLFloaterSettingsDebug::show(void*)
+{
+	if (sInstance == NULL)
+	{
+		sInstance = new LLFloaterSettingsDebug();
+
+		gUICtrlFactory->buildFloater(sInstance, "floater_settings_debug.xml");
+	}
+
+	sInstance->open();		/* Flawfinder: ignore */
+}
+
+//static 
+void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data)
+{
+	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
+	LLComboBox* combo_box = (LLComboBox*)ctrl;
+	LLControlVariable* controlp = (LLControlVariable*)combo_box->getCurrentUserdata();
+
+	floaterp->updateControl(controlp);
+}
+
+//static
+void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
+{
+	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
+
+	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
+	LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
+
+	LLVector3 vector;
+	LLVector3d vectord;
+	LLRect rect;
+	LLColor4 col4;
+	LLColor3 col3;
+	LLColor4U col4U;
+	LLColor4 color_with_alpha;
+
+	switch(controlp->type())
+	{		
+	  case TYPE_U32:
+		controlp->set(floaterp->childGetValue("val_spinner_1"));
+		break;
+	  case TYPE_S32:
+		controlp->set(floaterp->childGetValue("val_spinner_1"));
+		break;
+	  case TYPE_F32:
+		controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal()));
+		break;
+	  case TYPE_BOOLEAN:
+		controlp->set(floaterp->childGetValue("boolean_combo"));
+		break;
+	  case TYPE_STRING:
+		controlp->set(LLSD(floaterp->childGetValue("val_text").asString()));
+		break;
+	  case TYPE_VEC3:
+		vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal();
+		vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
+		vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
+		controlp->set(vector.getValue());
+		break;
+	  case TYPE_VEC3D:
+		vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal();
+		vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal();
+		vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal();
+		controlp->set(vectord.getValue());
+		break;
+	  case TYPE_RECT:
+		rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger();
+		rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger();
+		rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger();
+		rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger();
+		controlp->set(rect.getValue());
+		break;
+	  case TYPE_COL4:
+		col3.setValue(floaterp->childGetValue("color_swatch"));
+		col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal());
+		controlp->set(col4.getValue());
+		break;
+	  case TYPE_COL3:
+		controlp->set(floaterp->childGetValue("color_swatch"));
+		//col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
+		//col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
+		//col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
+		//controlp->set(col3.getValue());
+		break;
+	  case TYPE_COL4U:
+		col3.setValue(floaterp->childGetValue("color_swatch"));
+		col4U.setVecScaleClamp(col3);
+		col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger();
+		controlp->set(col4U.getValue());
+		break;
+	  default:
+		break;
+	}
+}
+
+// static
+void LLFloaterSettingsDebug::onClickDefault(void* user_data)
+{
+	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
+	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
+	LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
+
+	if (controlp)
+	{
+		controlp->resetToDefault();
+		floaterp->updateControl(controlp);
+	}
+}
+
+// we've switched controls, or doing per-frame update, so update spinners, etc.
+void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
+{
+	LLSpinCtrl* spinner1 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_1");
+	LLSpinCtrl* spinner2 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_2");
+	LLSpinCtrl* spinner3 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_3");
+	LLSpinCtrl* spinner4 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_4");
+	LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch");
+
+	if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)
+	{
+		llwarns << "Could not find all desired controls by name"
+			<< llendl;
+		return;
+	}
+
+	spinner1->setVisible(FALSE);
+	spinner2->setVisible(FALSE);
+	spinner3->setVisible(FALSE);
+	spinner4->setVisible(FALSE);
+	color_swatch->setVisible(FALSE);
+	childSetVisible("val_text", FALSE);
+	childSetVisible("boolean_combo", FALSE);
+	mComment->setText(LLString::null);
+
+	if (controlp)
+	{
+		eControlType type = controlp->type();
+		mComment->setText(controlp->getComment());
+		spinner1->setMaxValue(F32_MAX);
+		spinner2->setMaxValue(F32_MAX);
+		spinner3->setMaxValue(F32_MAX);
+		spinner4->setMaxValue(F32_MAX);
+		spinner1->setMinValue(-F32_MAX);
+		spinner2->setMinValue(-F32_MAX);
+		spinner3->setMinValue(-F32_MAX);
+		spinner4->setMinValue(-F32_MAX);
+		if (!spinner1->hasFocus())
+		{
+			spinner1->setIncrement(0.1f);
+		}
+		if (!spinner2->hasFocus())
+		{
+			spinner2->setIncrement(0.1f);
+		}
+		if (!spinner3->hasFocus())
+		{
+			spinner3->setIncrement(0.1f);
+		}
+		if (!spinner4->hasFocus())
+		{
+			spinner4->setIncrement(0.1f);
+		}
+
+		LLSD sd = controlp->get();
+		switch(type)
+		{
+		  case TYPE_U32:
+			spinner1->setVisible(TRUE);
+			spinner1->setLabel(LLString("value")); // Debug, don't translate
+			if (!spinner1->hasFocus())
+			{
+				spinner1->setValue(sd);
+				spinner1->setMinValue((F32)U32_MIN);
+				spinner1->setMaxValue((F32)U32_MAX);
+				spinner1->setIncrement(1.f);
+				spinner1->setPrecision(0);
+			}
+			break;
+		  case TYPE_S32:
+			spinner1->setVisible(TRUE);
+			spinner1->setLabel(LLString("value")); // Debug, don't translate
+			if (!spinner1->hasFocus())
+			{
+				spinner1->setValue(sd);
+				spinner1->setMinValue((F32)S32_MIN);
+				spinner1->setMaxValue((F32)S32_MAX);
+				spinner1->setIncrement(1.f);
+				spinner1->setPrecision(0);
+			}
+			break;
+		  case TYPE_F32:
+			spinner1->setVisible(TRUE);
+			spinner1->setLabel(LLString("value")); // Debug, don't translate
+			if (!spinner1->hasFocus())
+			{
+				spinner1->setPrecision(3);
+				spinner1->setValue(sd);
+			}
+			break;
+		  case TYPE_BOOLEAN:
+			childSetVisible("boolean_combo", TRUE);
+			
+			if (!childHasFocus("boolean_combo"))
+			{
+				if (sd.asBoolean())
+				{
+					childSetValue("boolean_combo", LLSD("true"));
+				}
+				else
+				{
+					childSetValue("boolean_combo", LLSD(""));
+				}
+			}
+			break;
+		  case TYPE_STRING:
+			childSetVisible("val_text", TRUE);
+			if (!childHasFocus("val_text"))
+			{
+				childSetValue("val_text", sd);
+			}
+			break;
+		  case TYPE_VEC3:
+		  {
+			LLVector3 v;
+			v.setValue(sd);
+			spinner1->setVisible(TRUE);
+			spinner1->setLabel(LLString("X"));
+			spinner2->setVisible(TRUE);
+			spinner2->setLabel(LLString("Y"));
+			spinner3->setVisible(TRUE);
+			spinner3->setLabel(LLString("Z"));
+			if (!spinner1->hasFocus())
+			{
+				spinner1->setPrecision(3);
+				spinner1->setValue(v[VX]);
+			}
+			if (!spinner2->hasFocus())
+			{
+				spinner2->setPrecision(3);
+				spinner2->setValue(v[VY]);
+			}
+			if (!spinner3->hasFocus())
+			{
+				spinner3->setPrecision(3);
+				spinner3->setValue(v[VZ]);
+			}
+			break;
+		  }
+		  case TYPE_VEC3D:
+		  {
+			LLVector3d v;
+			v.setValue(sd);
+			spinner1->setVisible(TRUE);
+			spinner1->setLabel(LLString("X"));
+			spinner2->setVisible(TRUE);
+			spinner2->setLabel(LLString("Y"));
+			spinner3->setVisible(TRUE);
+			spinner3->setLabel(LLString("Z"));
+			if (!spinner1->hasFocus())
+			{
+				spinner1->setPrecision(3);
+				spinner1->setValue(v[VX]);
+			}
+			if (!spinner2->hasFocus())
+			{
+				spinner2->setPrecision(3);
+				spinner2->setValue(v[VY]);
+			}
+			if (!spinner3->hasFocus())
+			{
+				spinner3->setPrecision(3);
+				spinner3->setValue(v[VZ]);
+			}
+			break;
+		  }
+		  case TYPE_RECT:
+		  {
+			LLRect r;
+			r.setValue(sd);
+			spinner1->setVisible(TRUE);
+			spinner1->setLabel(LLString("Left"));
+			spinner2->setVisible(TRUE);
+			spinner2->setLabel(LLString("Right"));
+			spinner3->setVisible(TRUE);
+			spinner3->setLabel(LLString("Bottom"));
+			spinner4->setVisible(TRUE);
+			spinner4->setLabel(LLString("Top"));
+			if (!spinner1->hasFocus())
+			{
+				spinner1->setPrecision(0);
+				spinner1->setValue(r.mLeft);
+			}
+			if (!spinner2->hasFocus())
+			{
+				spinner2->setPrecision(0);
+				spinner2->setValue(r.mRight);
+			}
+			if (!spinner3->hasFocus())
+			{
+				spinner3->setPrecision(0);
+				spinner3->setValue(r.mBottom);
+			}
+			if (!spinner4->hasFocus())
+			{
+				spinner4->setPrecision(0);
+				spinner4->setValue(r.mTop);
+			}
+
+			spinner1->setMinValue((F32)S32_MIN);
+			spinner1->setMaxValue((F32)S32_MAX);
+			spinner1->setIncrement(1.f);
+
+			spinner2->setMinValue((F32)S32_MIN);
+			spinner2->setMaxValue((F32)S32_MAX);
+			spinner2->setIncrement(1.f);
+
+			spinner3->setMinValue((F32)S32_MIN);
+			spinner3->setMaxValue((F32)S32_MAX);
+			spinner3->setIncrement(1.f);
+
+			spinner4->setMinValue((F32)S32_MIN);
+			spinner4->setMaxValue((F32)S32_MAX);
+			spinner4->setIncrement(1.f);
+			break;
+		  }
+		  case TYPE_COL4:
+		  {
+			LLColor4 clr;
+			clr.setValue(sd);
+			color_swatch->setVisible(TRUE);
+			// only set if changed so color picker doesn't update
+			if(clr != LLColor4(color_swatch->getValue()))
+			{
+				color_swatch->set(LLColor4(sd), TRUE, FALSE);
+			}
+			spinner4->setVisible(TRUE);
+			spinner4->setLabel(LLString("Alpha"));
+			if (!spinner4->hasFocus())
+			{
+				spinner4->setPrecision(3);
+				spinner4->setMinValue(0.0);
+				spinner4->setMaxValue(1.f);
+				spinner4->setValue(clr.mV[VALPHA]);
+			}
+			break;
+		  }
+		  case TYPE_COL3:
+		  {
+			LLColor3 clr;
+			clr.setValue(sd);
+			color_swatch->setVisible(TRUE);
+			color_swatch->setValue(sd);
+			break;
+		  }
+		  case TYPE_COL4U:
+		  {
+			LLColor4U clr;
+			clr.setValue(sd);
+			color_swatch->setVisible(TRUE);
+			if(LLColor4(clr) != LLColor4(color_swatch->getValue()))
+			{
+				color_swatch->set(LLColor4(clr), TRUE, FALSE);
+			}
+			spinner4->setVisible(TRUE);
+			spinner4->setLabel(LLString("Alpha"));
+			if(!spinner4->hasFocus())
+			{
+				spinner4->setPrecision(0);
+				spinner4->setValue(clr.mV[VALPHA]);
+			}
+
+			spinner4->setMinValue(0);
+			spinner4->setMaxValue(255);
+			spinner4->setIncrement(1.f);
+
+			break;
+		  }
+		  default:
+			mComment->setText(LLString("unknown"));
+			break;
+		}
+	}
+
+}
diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h
new file mode 100644
index 0000000000000000000000000000000000000000..389a474467ae18b833fe6a7cb1b1f995086194d3
--- /dev/null
+++ b/indra/newview/llfloatersettingsdebug.h
@@ -0,0 +1,61 @@
+/** 
+ * @file llfloatersettingsdebug.h
+ * @brief floater for debugging internal viewer settings
+ *
+ * $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 LLFLOATERDEBUGSETTINGS_H
+#define LLFLOATERDEBUGSETTINGS_H
+
+#include "llcontrol.h"
+#include "llfloater.h"
+#include "lltexteditor.h"
+
+class LLFloaterSettingsDebug : public LLFloater
+{
+public:
+	LLFloaterSettingsDebug();
+	virtual ~LLFloaterSettingsDebug();
+
+	virtual BOOL postBuild();
+	virtual void draw();
+
+	void updateControl(LLControlVariable* control);
+
+	static void show(void*);
+	static void onSettingSelect(LLUICtrl* ctrl, void* user_data);
+	static void onCommitSettings(LLUICtrl* ctrl, void* user_data);
+	static void onClickDefault(void* user_data);
+
+protected:
+	static LLFloaterSettingsDebug* sInstance;
+	LLTextEditor* mComment;
+};
+
+#endif //LLFLOATERDEBUGSETTINGS_H
+
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 7ceb40499f09092da5224ba906169eb0397f5edc..e24b5251e0beb272f47e97e08b672b4f94cb3da7 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -163,8 +163,6 @@ LLNetMap::LLNetMap(
 	mPopupMenuHandle = menu->getHandle();
 
 	sInstance = this;
-
-	gSavedSettings.getControl("MiniMapRotate")->addListener(&mNetMapListener);
 }
 
 LLNetMap::~LLNetMap()
@@ -828,9 +826,3 @@ void LLNetMap::handleZoomLevel(void* which)
 		break;
 	}
 }
-
-bool LLRotateNetMapListener::handleEvent(LLPointer<LLEvent> event, const LLSD& user_data)
-{
-	LLNetMap::setRotateMap(event->getValue().asBoolean());
-	return true;
-}
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index d375413d1d1c84b9ced2374055b3d815f621e98c..dc696238ea310493b1f99593bf3df7b347e7137b 100644
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -45,12 +45,6 @@ class LLCoordGL;
 class LLTextBox;
 class LLMenuGL;
 
-class LLRotateNetMapListener : public LLSimpleListener
-{
-public:
-	bool handleEvent(LLPointer<LLEvent>, const LLSD& user_data);
-};
-
 class LLNetMap : public LLUICtrl
 {
 public:
@@ -117,8 +111,6 @@ public:
 	LLTextBox*		mTextBoxNorthWest;
 	LLTextBox*		mTextBoxSouthWest;
 
-	LLRotateNetMapListener mNetMapListener;
-
 	static BOOL		sRotateMap;
 	static LLNetMap*	sInstance;
 };
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 1e933706e174c9c1d6b4f28dfba00b5471e7f37e..b6e8c1a7f3067a9318fd3142065da1c38b28f2a7 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -206,7 +206,7 @@ void LLLoginHandler::parse(const LLSD& queryMap)
 	
  	if (LLAppViewer::instance()->getLoginURIs().size() == 0)
  	{
- 	    snprintf(gGridName, MAX_STRING, "%s", gGridInfo[gGridChoice].mName);		/* Flawfinder: ignore */
+		gGridName = gGridInfo[gGridChoice].mName;		/* Flawfinder: ignore */
  	    LLAppViewer::instance()->resetURIs();
  	}	    
 	
@@ -429,7 +429,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	LLTextBox* channel_text = LLUICtrlFactory::getTextBoxByName(this, "channel_text");
 	if (channel_text)
 	{
-		channel_text->setText(gChannelName);
+		channel_text->setText(gSavedSettings.getString("VersionChannelName"));
 		channel_text->setClickedCallback(onClickVersion);
 		channel_text->setCallbackUserData(this);
 	}
@@ -471,7 +471,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 
 		// kick off a request to grab the url manually
 		gResponsePtr = LLIamHereLogin::build( this );
- 		std::string login_page = LLAppViewer::instance()->getLoginPage();
+ 		std::string login_page = gSavedSettings.getString("LoginPage");
  		if (login_page.empty())
  		{
  			login_page = getString( "real_url" );
@@ -927,7 +927,7 @@ void LLPanelLogin::loadLoginPage()
 	
 	std::ostringstream oStr;
 
-	std::string login_page = LLAppViewer::instance()->getLoginPage();
+	std::string login_page = gSavedSettings.getString("LoginPage");
 	if (login_page.empty())
 	{
 		login_page = sInstance->getString( "real_url" );
@@ -984,24 +984,24 @@ void LLPanelLogin::loadLoginPage()
 	}
 	
 	LLString firstname, lastname;
-	
-	if (gCmdLineFirstName.empty())
+
+    if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
+    {
+        LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
+		firstname = cmd_line_login[0].asString();
+		lastname = cmd_line_login[1].asString();
+        password = cmd_line_login[2].asString();
+    }
+    	
+	if (firstname.empty())
 	{
 		firstname = gSavedSettings.getString("FirstName");
 	}
-	else
-	{
-		firstname = gCmdLineFirstName;
-	}
 	
-	if (gCmdLineLastName.empty())
+	if (lastname.empty())
 	{
 		lastname = gSavedSettings.getString("LastName");
 	}
-	else
-	{
-		lastname = gCmdLineLastName;
-	}
 	
 	LLString version = llformat("%d.%d.%d (%d)",
 						LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD);
@@ -1020,9 +1020,9 @@ void LLPanelLogin::loadLoginPage()
 	curl_free(curl_version);
 
 
-	if (!gCmdLinePassword.empty())
+	if (!password.empty())
 	{
-		oStr << "&password=" << gCmdLinePassword;
+		oStr << "&password=" << password;
 	}
 	else if (!(password = load_password_from_disk()).empty())
 	{
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 13dfe45f3e6d2128fa4055279ce002755885818c..f7de5a8c354bf5ef411c9d92e22f6c3c3d7eae33 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -447,7 +447,7 @@ BOOL idle_startup()
 		{
 			fclose(found_template);
 
-			U32 port = gAgent.mViewerPort;
+			U32 port = gSavedSettings.getU32("UserConnectionPort");
 
 			if ((NET_USE_OS_ASSIGNED_PORT == port) &&   // if nothing specified on command line (-port)
 			    (gSavedSettings.getBOOL("ConnectionPortEnabled")))
@@ -497,7 +497,7 @@ BOOL idle_startup()
 								  invalid_message_callback,
 								  NULL);
 
-			if (gSavedSettings.getBOOL("LogMessages") || gLogMessages)
+			if (gSavedSettings.getBOOL("LogMessages"))
 			{
 				llinfos << "Message logging activated!" << llendl;
 				msg->startLogging();
@@ -516,18 +516,23 @@ BOOL idle_startup()
 			}
 			gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS);
 
-			msg->mPacketRing.setDropPercentage(gPacketDropPercentage);
-			if (gInBandwidth != 0.f)
+
+			F32 dropPercent = gSavedSettings.getF32("PacketDropPercentage");
+			msg->mPacketRing.setDropPercentage(dropPercent);
+
+            F32 inBandwidth = gSavedSettings.getF32("InBandwidth"); 
+            F32 outBandwidth = gSavedSettings.getF32("OutBandwidth"); 
+			if (inBandwidth != 0.f)
 			{
-				llinfos << "Setting packetring incoming bandwidth to " << gInBandwidth << llendl;
+				llinfos << "Setting packetring incoming bandwidth to " << inBandwidth << llendl;
 				msg->mPacketRing.setUseInThrottle(TRUE);
-				msg->mPacketRing.setInBandwidth(gInBandwidth);
+				msg->mPacketRing.setInBandwidth(inBandwidth);
 			}
-			if (gOutBandwidth != 0.f)
+			if (outBandwidth != 0.f)
 			{
-				llinfos << "Setting packetring outgoing bandwidth to " << gOutBandwidth << llendl;
+				llinfos << "Setting packetring outgoing bandwidth to " << outBandwidth << llendl;
 				msg->mPacketRing.setUseOutThrottle(TRUE);
-				msg->mPacketRing.setOutBandwidth(gOutBandwidth);
+				msg->mPacketRing.setOutBandwidth(outBandwidth);
 			}
 		}
 
@@ -541,7 +546,7 @@ BOOL idle_startup()
 		// or audio cues in connection UI.
 		//-------------------------------------------------
 
-		if (gUseAudio)
+		if (FALSE == gSavedSettings.getBOOL("NoAudio"))
 		{
 #if LL_FMOD
 			gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD();
@@ -586,14 +591,13 @@ BOOL idle_startup()
 
 			show_connect_box = FALSE;
 		}
-		else if( !gCmdLineFirstName.empty() 
-			&& !gCmdLineLastName.empty() 
-			&& !gCmdLinePassword.empty())
-		{
-			firstname = gCmdLineFirstName;
-			lastname = gCmdLineLastName;
+        else if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
+        {
+            LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
+			firstname = cmd_line_login[0].asString();
+			lastname = cmd_line_login[1].asString();
 
-			LLMD5 pass((unsigned char*)gCmdLinePassword.c_str());
+			LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str());
 			char md5pass[33];               /* Flawfinder: ignore */
 			pass.hex_digest(md5pass);
 			password = md5pass;
@@ -604,9 +608,9 @@ BOOL idle_startup()
 #else
 			show_connect_box = FALSE;
 #endif
-			gAutoLogin = TRUE;
-		}
-		else if (gAutoLogin || gSavedSettings.getBOOL("AutoLogin"))
+			gSavedSettings.setBOOL("AutoLogin", TRUE);
+        }
+		else if (gSavedSettings.getBOOL("AutoLogin"))
 		{
 			firstname = gSavedSettings.getString("FirstName");
 			lastname = gSavedSettings.getString("LastName");
@@ -781,19 +785,14 @@ BOOL idle_startup()
 		// create necessary directories
 		// *FIX: these mkdir's should error check
 		gDirUtilp->setLindenUserDir(firstname.c_str(), lastname.c_str());
+    	LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str());
 
+        // Set UserSettingsFile to the default value.
+		gSavedSettings.setString("UserSettingsFile",
+			gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE));
 
-		LLFile::mkdir(gDirUtilp->getLindenUserDir().c_str());
-
-		// the mute list is loaded in the llmutelist class.
-
-		gSavedSettings.loadFromFile(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,"overrides.xml"));
-
-		// handle the per account settings setup
-		gPerAccountSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, DEFAULT_SETTINGS_FILE);
-
-		// per account settings.  Set defaults here if not found.  If we get a bunch of these, eventually move to a function.
-		gSavedPerAccountSettings.loadFromFile(gPerAccountSettingsFileName);
+		// Overwrite default user settings with user settings								 
+		LLAppViewer::instance()->loadSettingsFromDirectory(LL_PATH_PER_SL_ACCOUNT);
 
 		// Need to set the LastLogoff time here if we don't have one.  LastLogoff is used for "Recent Items" calculation
 		// and startup time is close enough if we don't have a real value.
@@ -828,7 +827,7 @@ BOOL idle_startup()
 			gSavedSettings.setS32("ServerChoice", gGridChoice);
 			if (gGridChoice == GRID_INFO_OTHER)
 			{
-				snprintf(gGridName, MAX_STRING, "%s", server_label.c_str());/* Flawfinder: ignore */
+				gGridName = server_label;/* Flawfinder: ignore */
 			}
 			
 			if ( user_picked_server )
@@ -932,7 +931,7 @@ BOOL idle_startup()
 		//requested_options.push_back("inventory-meat");
 		//requested_options.push_back("inventory-skel-targets");
 #if (!defined LL_MINIMIAL_REQUESTED_OPTIONS)
-		if(gRequestInventoryLibrary)
+		if(FALSE == gSavedSettings.getBOOL("NoInventoryLibrary"))
 		{
 			requested_options.push_back("inventory-lib-root");
 			requested_options.push_back("inventory-lib-owner");
@@ -952,7 +951,7 @@ BOOL idle_startup()
 		requested_options.push_back("tutorial_setting");
 		requested_options.push_back("login-flags");
 		requested_options.push_back("global-textures");
-		if(gGodConnect)
+		if(gSavedSettings.getBOOL("ConnectAsGod"))
 		{
 			gSavedSettings.setBOOL("UseDebugMenus", TRUE);
 			requested_options.push_back("god-connect");
@@ -1239,7 +1238,6 @@ BOOL idle_startup()
 				  << (sAuthUriNum + 1) << ".  ";
 				auth_desc = s.str();
 				LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
-				sAuthUriNum++;
 				return do_normal_idle;
 			}
 			break;
@@ -1489,7 +1487,7 @@ BOOL idle_startup()
 				args["[ERROR_MESSAGE]"] = emsg.str();
 				gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
 				reset_login();
-				gAutoLogin = FALSE;
+				gSavedSettings.setBOOL("AutoLogin", FALSE);
 				show_connect_box = TRUE;
 			}
 			
@@ -1509,7 +1507,7 @@ BOOL idle_startup()
 			args["[ERROR_MESSAGE]"] = emsg.str();
 			gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
 			reset_login();
-			gAutoLogin = FALSE;
+			gSavedSettings.setBOOL("AutoLogin", FALSE);
 			show_connect_box = TRUE;
 			// Don't save an incorrect password to disk.
 			save_password_to_disk(NULL);
@@ -1533,7 +1531,7 @@ BOOL idle_startup()
 
 		// Since we connected, save off the settings so the user doesn't have to
 		// type the name/password again if we crash.
-		gSavedSettings.saveToFile(gSettingsFileName, TRUE);
+		gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
 
 		//
 		// Initialize classes w/graphics stuff.
@@ -2100,7 +2098,7 @@ BOOL idle_startup()
 			gSavedSettings.setString( "NextLoginLocation", "" );
 
 			// and make sure it's saved
-			gSavedSettings.saveToFile( gSettingsFileName, TRUE );
+			gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
 		};
 
 		if (!gNoRender)
@@ -2392,7 +2390,7 @@ void login_show()
 
 	if( GRID_INFO_OTHER == gGridChoice )
 	{
-		   LLPanelLogin::addServer( gGridName, GRID_INFO_OTHER );
+		   LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER );
 	}
 	else
 	{
@@ -2440,7 +2438,7 @@ void login_callback(S32 option, void *userdata)
 		{
 			// turn off the setting and write out to disk
 			gSavedSettings.setBOOL("RememberPassword", FALSE);
-			gSavedSettings.saveToFile(gSettingsFileName, TRUE);
+			gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE );
 
 			// stomp the saved password on disk
 			save_password_to_disk(NULL);
@@ -2634,7 +2632,7 @@ void login_alert_status(S32 option, void* user_data)
 void update_app(BOOL mandatory, const std::string& auth_msg)
 {
 	// store off config state, as we might quit soon
-	gSavedSettings.saveToFile(gSettingsFileName, TRUE);
+	gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);	
 
 	std::ostringstream message;
 
@@ -2734,7 +2732,7 @@ void update_dialog_callback(S32 option, void *userdata)
 	// *TODO change userserver to be grid on both viewer and sim, since
 	// userserver no longer exists.
 	query_map["userserver"] = gGridName;
-	query_map["channel"] = gChannelName;
+	query_map["channel"] = gSavedSettings.getString("VersionChannelName");
 	// *TODO constantize this guy
 	LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
 	
diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp
index ffa921125ad1d3761d1d57445fc19d3b47be3729..9c8bb97343a9340f0fa5d3818b9d7ae6f0627817 100644
--- a/indra/newview/lltoolgun.cpp
+++ b/indra/newview/lltoolgun.cpp
@@ -80,14 +80,10 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
 {
 	if( gAgent.cameraMouselook() )
 	{
-		#if 1 //LL_WINDOWS || LL_DARWIN
-			const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
-		#else
-			const F32 NOMINAL_MOUSE_SENSITIVITY = 0.025f;
-		#endif
+		const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f;
 
-		
-		F32 mouse_sensitivity = clamp_rescale(gMouseSensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY;
+		F32 mouse_sensitivity = gSavedSettings.getF32("MouseSensitivity");
+		mouse_sensitivity = clamp_rescale(mouse_sensitivity, 0.f, 15.f, 0.5f, 2.75f) * NOMINAL_MOUSE_SENSITIVITY;
 
 		// ...move the view with the mouse
 
@@ -98,7 +94,7 @@ BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask)
 		if (dx != 0 || dy != 0)
 		{
 			// ...actually moved off center
-			if (gInvertMouse)
+			if (gSavedSettings.getBOOL("InvertMouse"))
 			{
 				gAgent.pitch(mouse_sensitivity * -dy);
 			}
diff --git a/indra/newview/llvectorperfoptions.cpp b/indra/newview/llvectorperfoptions.cpp
index ca8ae2e886044d45143c32a02a3aa4a4920ebccc..34c10a4f721e42abae7f27b3baa0b74b5be9512d 100644
--- a/indra/newview/llvectorperfoptions.cpp
+++ b/indra/newview/llvectorperfoptions.cpp
@@ -31,101 +31,4 @@
 
 #include "llviewerprecompiledheaders.h"
 
-#include "llvectorperfoptions.h"
-#include "llviewerjointmesh.h"
-#include "llviewercontrol.h"
-
-// Initially, we test the performance of the vectorization code, then
-// turn it off if it ends up being slower. JC
-BOOL	gVectorizePerfTest	= TRUE;
-BOOL	gVectorizeEnable	= FALSE;
-U32		gVectorizeProcessor	= 0;
-BOOL	gVectorizeSkin		= FALSE;
-
-void update_vector_performances(void)
-{
-	char *vp;
-	
-	switch(gVectorizeProcessor)
-	{
-		case 2: vp = "SSE2"; break;					// *TODO: replace the magic #s
-		case 1: vp = "SSE"; break;
-		default: vp = "COMPILER DEFAULT"; break;
-	}
-	llinfos << "Vectorization         : " << ( gVectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
-	llinfos << "Vector Processor      : " << vp << llendl ;
-	llinfos << "Vectorized Skinning   : " << ( gVectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
-	
-	if(gVectorizeEnable && gVectorizeSkin)
-	{
-		switch(gVectorizeProcessor)
-		{
-			case 2:
-				LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE2;
-				break;
-			case 1:
-				LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE;
-				break;
-			default:
-				LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryVectorized;
-				break;
-		}
-	}
-	else
-	{
-		LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryOriginal;
-	}
-}
-
-
-class LLVectorizationEnableListener: public LLSimpleListener
-{
-	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-	{
-		gVectorizeEnable = event->getValue().asBoolean();
-		update_vector_performances();
-		return true;
-	}
-};
-static LLVectorizationEnableListener vectorization_enable_listener;
-
-class LLVectorizeSkinListener: public LLSimpleListener
-{
-	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-	{
-		gVectorizeSkin = event->getValue().asBoolean();
-		update_vector_performances();
-		return true;
-	}
-};
-static LLVectorizeSkinListener vectorize_skin_listener;
-
-class LLVectorProcessorListener: public LLSimpleListener
-{
-	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-	{
-		gVectorizeProcessor = event->getValue().asInteger();
-		update_vector_performances();
-		return true;
-	}
-};
-static LLVectorProcessorListener vector_processor_listener;
-
-void LLVectorPerformanceOptions::initClass()
-{
-	gVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
-	gVectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
-	gVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
-	gVectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
-	update_vector_performances();
-
-	// these are currently static in this file, so they can't move to settings_setup_listeners
-	gSavedSettings.getControl("VectorizeEnable")->addListener(&vectorization_enable_listener);
-	gSavedSettings.getControl("VectorizeProcessor")->addListener(&vector_processor_listener);
-	gSavedSettings.getControl("VectorizeSkin")->addListener(&vectorize_skin_listener);
-}
-
-void LLVectorPerformanceOptions::cleanupClass()
-{
-}
-
+// Deprecated - moved into llviewerjointmesh
diff --git a/indra/newview/llvectorperfoptions.h b/indra/newview/llvectorperfoptions.h
index dac4d1f86c41fab3726cee14d5e4bc81f7368582..e2a0a37e33c4d8cc84d13363773a3acbc4b6e697 100644
--- a/indra/newview/llvectorperfoptions.h
+++ b/indra/newview/llvectorperfoptions.h
@@ -32,10 +32,6 @@
 #ifndef LL_VECTORPERFOPTIONS_H
 #define LL_VECTORPERFOPTIONS_H
 
-namespace LLVectorPerformanceOptions
-{
-	void initClass(); // Run after configuration files are read.
-	void cleanupClass();
-};
+// Deprecated - moved into llviewerjointmesh
 
 #endif
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index affce91b79c36799785125ac7890f47015bd004f..fd85ac1bc1fc9456887a97ebb44697578c499416 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -65,7 +65,7 @@ void init_audio()
 
 	BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio");
 
-	if (!mute_audio && gPreloadSounds)
+	if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload"))
 	{
 		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndAlert")));
 		gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndBadKeystroke")));
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 9c81f89e99f73fc50583ff4ad2fe1533c0747cd5..7733ef5ae17d5fd8a22e55e794ca3e7f6dbd30fa 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -36,26 +36,47 @@
 
 #include "indra_constants.h"
 
-#include "v3math.h"
-#include "v3dmath.h"
-#include "llrect.h"
-#include "v4color.h"
-#include "v4coloru.h"
-#include "v3color.h"
-
-#include "llfloater.h"
-#include "llvieweruictrlfactory.h"
-#include "llfirstuse.h"
-#include "llcombobox.h"
-#include "llspinctrl.h"
-#include "llcolorswatch.h"
+// For Listeners
+#include "audioengine.h"
+#include "llagent.h"
+#include "llconsole.h"
+#include "lldrawpoolterrain.h"
+#include "llflexibleobject.h"
+#include "llfeaturemanager.h"
+#include "llglslshader.h"
+#include "llnetmap.h"
+#include "llpanelgeneral.h"
+#include "llpanelinput.h"
+#include "llsky.h"
+#include "llvieweraudio.h"
+#include "llviewerimagelist.h"
+#include "llviewerthrottle.h"
+#include "llviewerwindow.h"
+#include "llvoavatar.h"
+#include "llvoiceclient.h"
+#include "llvosky.h"
+#include "llvotree.h"
+#include "llvovolume.h"
+#include "llworld.h"
+#include "pipeline.h"
+#include "llviewerjoystick.h"
+#include "llviewerparcelmgr.h"
+#include "llparcel.h"
+#include "llnotify.h"
+#include "llkeyboard.h"
+#include "llerrorcontrol.h"
+#include "llversionviewer.h"
+#include "llappviewer.h"
+#include "llvosurfacepatch.h"
+#include "llvowlsky.h"
+#include "llglimmediate.h"
 
 #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
 BOOL 				gHackGodmode = FALSE;
 #endif
 
-LLFloaterSettingsDebug* LLFloaterSettingsDebug::sInstance = NULL;
 
+std::map<LLString, LLControlGroup*> gSettings;
 LLControlGroup gSavedSettings;	// saved at end of session
 LLControlGroup gSavedPerAccountSettings; // saved at end of session
 LLControlGroup gViewerArt;		// read-only
@@ -65,461 +86,440 @@ LLControlGroup gCrashSettings;	// saved at end of session
 LLString gLastRunVersion;
 LLString gCurrentVersion;
 
-LLString gSettingsFileName;
-LLString gPerAccountSettingsFileName;
+extern BOOL gResizeScreenTexture;
 
-LLFloaterSettingsDebug::LLFloaterSettingsDebug() : LLFloater("Configuration Editor")
+////////////////////////////////////////////////////////////////////////////
+// Listeners
+
+static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue)
+{
+	LLVOAvatar::sVisibleInFirstPerson = newvalue.asBoolean();
+	return true;
+}
+
+static bool handleRenderFarClipChanged(const LLSD& newvalue)
 {
+	F32 draw_distance = (F32) newvalue.asReal();
+	gAgent.mDrawDistance = draw_distance;
+	if (gWorldPointer)
+	{
+		gWorldPointer->setLandFarClip(draw_distance);
+	}
+	return true;
 }
 
-LLFloaterSettingsDebug::~LLFloaterSettingsDebug()
+static bool handleTerrainDetailChanged(const LLSD& newvalue)
 {
-	sInstance = NULL;
+	LLDrawPoolTerrain::sDetailMode = newvalue.asInteger();
+	return true;
 }
 
-BOOL LLFloaterSettingsDebug::postBuild()
+
+static bool handleSetShaderChanged(const LLSD& newvalue)
 {
-	LLComboBox* settings_combo = LLUICtrlFactory::getComboBoxByName(this, "settings_combo");
+	LLShaderMgr::setShaders();
+	return true;
+}
 
-	LLControlGroup::ctrl_name_table_t::iterator name_it;
-	for(name_it = gSavedSettings.mNameTable.begin(); name_it != gSavedSettings.mNameTable.end(); ++name_it)
+static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
+{
+	if (gPipeline.isInit())
 	{
-		settings_combo->add(name_it->first, (void*)name_it->second);
+		gPipeline.releaseGLBuffers();
+		gPipeline.createGLBuffers();
 	}
-	for(name_it = gSavedPerAccountSettings.mNameTable.begin(); name_it != gSavedPerAccountSettings.mNameTable.end(); ++name_it)
+	return true;
+}
+
+static bool handleVolumeLODChanged(const LLSD& newvalue)
+{
+	LLVOVolume::sLODFactor = (F32) newvalue.asReal();
+	LLVOVolume::sDistanceFactor = 1.f-LLVOVolume::sLODFactor * 0.1f;
+	return true;
+}
+
+static bool handleAvatarLODChanged(const LLSD& newvalue)
+{
+	LLVOAvatar::sLODFactor = (F32) newvalue.asReal();
+	return true;
+}
+
+static bool handleTerrainLODChanged(const LLSD& newvalue)
+{
+		LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal();
+		//sqaure lod factor to get exponential range of [0,4] and keep
+		//a value of 1 in the middle of the detail slider for consistency
+		//with other detail sliders (see panel_preferences_graphics1.xml)
+		LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor;
+		return true;
+}
+
+static bool handleTreeLODChanged(const LLSD& newvalue)
+{
+	LLVOTree::sTreeFactor = (F32) newvalue.asReal();
+	return true;
+}
+
+static bool handleFlexLODChanged(const LLSD& newvalue)
+{
+	LLVolumeImplFlexible::sUpdateFactor = (F32) newvalue.asReal();
+	return true;
+}
+
+static bool handleGammaChanged(const LLSD& newvalue)
+{
+	F32 gamma = (F32) newvalue.asReal();
+	if (gamma == 0.0f)
 	{
-		settings_combo->add(name_it->first, (void*)name_it->second);
+		gamma = 1.0f; // restore normal gamma
 	}
-	for(name_it = gColors.mNameTable.begin(); name_it != gColors.mNameTable.end(); ++name_it)
+	if (gViewerWindow && gViewerWindow->getWindow() && gamma != gViewerWindow->getWindow()->getGamma())
 	{
-		settings_combo->add(name_it->first, (void*)name_it->second);
+		// Only save it if it's changed
+		if (!gViewerWindow->getWindow()->setGamma(gamma))
+		{
+			llwarns << "setGamma failed!" << llendl;
+		}
 	}
-	settings_combo->sortByName();
-	settings_combo->setCommitCallback(onSettingSelect);
-	settings_combo->setCallbackUserData(this);
-	settings_combo->updateSelection();
-
-	childSetCommitCallback("val_spinner_1", onCommitSettings);
-	childSetUserData("val_spinner_1", this);
-	childSetCommitCallback("val_spinner_2", onCommitSettings);
-	childSetUserData("val_spinner_2", this);
-	childSetCommitCallback("val_spinner_3", onCommitSettings);
-	childSetUserData("val_spinner_3", this);
-	childSetCommitCallback("val_spinner_4", onCommitSettings);
-	childSetUserData("val_spinner_4", this);
-	childSetCommitCallback("val_text", onCommitSettings);
-	childSetUserData("val_text", this);
-	childSetCommitCallback("boolean_combo", onCommitSettings);
-	childSetUserData("boolean_combo", this);
-	childSetCommitCallback("color_swatch", onCommitSettings);
-	childSetUserData("color_swatch", this);
-	childSetAction("default_btn", onClickDefault, this);
-	mComment = getChild<LLTextEditor>("comment_text");
-	return TRUE;
-}
-
-void LLFloaterSettingsDebug::draw()
-{
-	LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
-	LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
-	updateControl(controlp);
-
-	LLFloater::draw();
-}
-
-//static
-void LLFloaterSettingsDebug::show(void*)
-{
-	if (sInstance == NULL)
-	{
-		sInstance = new LLFloaterSettingsDebug();
 
-		gUICtrlFactory->buildFloater(sInstance, "floater_settings_debug.xml");
-	}
+	return true;
+}
 
-	sInstance->open();		/* Flawfinder: ignore */
-}
-
-//static 
-void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl, void* user_data)
-{
-	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
-	LLComboBox* combo_box = (LLComboBox*)ctrl;
-	LLControlBase* controlp = (LLControlBase*)combo_box->getCurrentUserdata();
-
-	floaterp->updateControl(controlp);
-}
-
-//static
-void LLFloaterSettingsDebug::onCommitSettings(LLUICtrl* ctrl, void* user_data)
-{
-	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
-
-	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
-	LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
-
-	LLVector3 vector;
-	LLVector3d vectord;
-	LLRect rect;
-	LLColor4 col4;
-	LLColor3 col3;
-	LLColor4U col4U;
-	LLColor4 color_with_alpha;
-
-	switch(controlp->type())
-	{		
-	  case TYPE_U32:
-		controlp->set(floaterp->childGetValue("val_spinner_1"));
-		break;
-	  case TYPE_S32:
-		controlp->set(floaterp->childGetValue("val_spinner_1"));
-		break;
-	  case TYPE_F32:
-		controlp->set(LLSD(floaterp->childGetValue("val_spinner_1").asReal()));
-		break;
-	  case TYPE_BOOLEAN:
-		controlp->set(floaterp->childGetValue("boolean_combo"));
-		break;
-	  case TYPE_STRING:
-		controlp->set(LLSD(floaterp->childGetValue("val_text").asString()));
-		break;
-	  case TYPE_VEC3:
-		vector.mV[VX] = (F32)floaterp->childGetValue("val_spinner_1").asReal();
-		vector.mV[VY] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
-		vector.mV[VZ] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
-		controlp->set(vector.getValue());
-		break;
-	  case TYPE_VEC3D:
-		vectord.mdV[VX] = floaterp->childGetValue("val_spinner_1").asReal();
-		vectord.mdV[VY] = floaterp->childGetValue("val_spinner_2").asReal();
-		vectord.mdV[VZ] = floaterp->childGetValue("val_spinner_3").asReal();
-		controlp->set(vectord.getValue());
-		break;
-	  case TYPE_RECT:
-		rect.mLeft = floaterp->childGetValue("val_spinner_1").asInteger();
-		rect.mRight = floaterp->childGetValue("val_spinner_2").asInteger();
-		rect.mBottom = floaterp->childGetValue("val_spinner_3").asInteger();
-		rect.mTop = floaterp->childGetValue("val_spinner_4").asInteger();
-		controlp->set(rect.getValue());
-		break;
-	  case TYPE_COL4:
-		col3.setValue(floaterp->childGetValue("color_swatch"));
-		col4 = LLColor4(col3, (F32)floaterp->childGetValue("val_spinner_4").asReal());
-		controlp->set(col4.getValue());
-		break;
-	  case TYPE_COL3:
-		controlp->set(floaterp->childGetValue("color_swatch"));
-		//col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
-		//col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
-		//col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
-		//controlp->set(col3.getValue());
-		break;
-	  case TYPE_COL4U:
-		col3.setValue(floaterp->childGetValue("color_swatch"));
-		col4U.setVecScaleClamp(col3);
-		col4U.mV[VALPHA] = floaterp->childGetValue("val_spinner_4").asInteger();
-		controlp->set(col4U.getValue());
-		break;
-	  default:
-		break;
-	}
+const F32 MAX_USER_FOG_RATIO = 10.f;
+const F32 MIN_USER_FOG_RATIO = 0.5f;
+
+static bool handleFogRatioChanged(const LLSD& newvalue)
+{
+	F32 fog_ratio = llmax(MIN_USER_FOG_RATIO, llmin((F32) newvalue.asReal(), MAX_USER_FOG_RATIO));
+	gSky.setFogRatio(fog_ratio);
+	return true;
+}
+
+static bool handleMaxPartCountChanged(const LLSD& newvalue)
+{
+	LLViewerPartSim::setMaxPartCount(newvalue.asInteger());
+	return true;
 }
 
-// static
-void LLFloaterSettingsDebug::onClickDefault(void* user_data)
+const S32 MAX_USER_COMPOSITE_LIMIT = 100;
+const S32 MIN_USER_COMPOSITE_LIMIT = 0;
+
+static bool handleCompositeLimitChanged(const LLSD& newvalue)
 {
-	LLFloaterSettingsDebug* floaterp = (LLFloaterSettingsDebug*)user_data;
-	LLComboBox* settings_combo = floaterp->getChild<LLComboBox>("settings_combo");
-	LLControlBase* controlp = (LLControlBase*)settings_combo->getCurrentUserdata();
+	S32 composite_limit = llmax(MIN_USER_COMPOSITE_LIMIT,  llmin((S32)newvalue.asInteger(), MAX_USER_COMPOSITE_LIMIT));
+	LLVOAvatar::sMaxOtherAvatarsToComposite = composite_limit;
+	return true;
+}
 
-	if (controlp)
+static bool handleVideoMemoryChanged(const LLSD& newvalue)
+{
+	gImageList.updateMaxResidentTexMem(newvalue.asInteger());
+	return true;
+}
+
+static bool handleBandwidthChanged(const LLSD& newvalue)
+{
+	gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal());
+	return true;
+}
+
+static bool handleChatFontSizeChanged(const LLSD& newvalue)
+{
+	if(gConsole)
 	{
-		controlp->resetToDefault();
-		floaterp->updateControl(controlp);
+		gConsole->setFontSize(newvalue.asInteger());
 	}
+	return true;
 }
 
-// we've switched controls, or doing per-frame update, so update spinners, etc.
-void LLFloaterSettingsDebug::updateControl(LLControlBase* controlp)
+static bool handleChatPersistTimeChanged(const LLSD& newvalue)
 {
-	LLSpinCtrl* spinner1 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_1");
-	LLSpinCtrl* spinner2 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_2");
-	LLSpinCtrl* spinner3 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_3");
-	LLSpinCtrl* spinner4 = LLUICtrlFactory::getSpinnerByName(this, "val_spinner_4");
-	LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("color_swatch");
+	if(gConsole)
+	{
+		gConsole->setLinePersistTime((F32) newvalue.asReal());
+	}
+	return true;
+}
 
-	if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)
+static bool handleConsoleMaxLinesChanged(const LLSD& newvalue)
+{
+	if(gConsole)
 	{
-		llwarns << "Could not find all desired controls by name"
-			<< llendl;
-		return;
+		gConsole->setMaxLines(newvalue.asInteger());
 	}
+	return true;
+}
 
-	spinner1->setVisible(FALSE);
-	spinner2->setVisible(FALSE);
-	spinner3->setVisible(FALSE);
-	spinner4->setVisible(FALSE);
-	color_swatch->setVisible(FALSE);
-	childSetVisible("val_text", FALSE);
-	mComment->setText(LLString::null);
+static void handleAudioVolumeChanged(const LLSD& newvalue)
+{
+	audio_update_volume(true);
+}
 
-	if (controlp)
-	{
-		eControlType type = controlp->type();
-		mComment->setText(controlp->getComment());
-		spinner1->setMaxValue(F32_MAX);
-		spinner2->setMaxValue(F32_MAX);
-		spinner3->setMaxValue(F32_MAX);
-		spinner4->setMaxValue(F32_MAX);
-		spinner1->setMinValue(-F32_MAX);
-		spinner2->setMinValue(-F32_MAX);
-		spinner3->setMinValue(-F32_MAX);
-		spinner4->setMinValue(-F32_MAX);
-		if (!spinner1->hasFocus())
-		{
-			spinner1->setIncrement(0.1f);
-		}
-		if (!spinner2->hasFocus())
-		{
-			spinner2->setIncrement(0.1f);
-		}
-		if (!spinner3->hasFocus())
-		{
-			spinner3->setIncrement(0.1f);
-		}
-		if (!spinner4->hasFocus())
-		{
-			spinner4->setIncrement(0.1f);
-		}
+static bool handleJoystickChanged(const LLSD& newvalue)
+{
+	LLViewerJoystick::updateCamera(TRUE);
+	return true;
+}
 
-		LLSD sd = controlp->get();
-		switch(type)
+static bool handleAudioStreamMusicChanged(const LLSD& newvalue)
+{
+	if (gAudiop)
+	{
+		if ( newvalue.asBoolean() )
 		{
-		  case TYPE_U32:
-			spinner1->setVisible(TRUE);
-			spinner1->setLabel(LLString("value")); // Debug, don't translate
-			childSetVisible("boolean_combo", FALSE);
-			if (!spinner1->hasFocus())
+			if (gParcelMgr
+				&& gParcelMgr->getAgentParcel()
+				&& !gParcelMgr->getAgentParcel()->getMusicURL().empty())
 			{
-				spinner1->setValue(sd);
-				spinner1->setMinValue((F32)U32_MIN);
-				spinner1->setMaxValue((F32)U32_MAX);
-				spinner1->setIncrement(1.f);
-				spinner1->setPrecision(0);
-			}
-			break;
-		  case TYPE_S32:
-			spinner1->setVisible(TRUE);
-			spinner1->setLabel(LLString("value")); // Debug, don't translate
-			childSetVisible("boolean_combo", FALSE);
-			if (!spinner1->hasFocus())
-			{
-				spinner1->setValue(sd);
-				spinner1->setMinValue((F32)S32_MIN);
-				spinner1->setMaxValue((F32)S32_MAX);
-				spinner1->setIncrement(1.f);
-				spinner1->setPrecision(0);
-			}
-			break;
-		  case TYPE_F32:
-			spinner1->setVisible(TRUE);
-			spinner1->setLabel(LLString("value")); // Debug, don't translate
-			childSetVisible("boolean_combo", FALSE);
-			if (!spinner1->hasFocus())
-			{
-				spinner1->setPrecision(3);
-				spinner1->setValue(sd);
-			}
-			break;
-		  case TYPE_BOOLEAN:
-			childSetVisible("boolean_combo", TRUE);
-			
-			if (!childHasFocus("boolean_combo"))
-			{
-				if (sd.asBoolean())
+				// if stream is already playing, don't call this
+				// otherwise music will briefly stop
+				if ( ! gAudiop->isInternetStreamPlaying() )
 				{
-					childSetValue("boolean_combo", LLSD("true"));
+					gAudiop->startInternetStream(gParcelMgr->getAgentParcel()->getMusicURL().c_str());
 				}
-				else
-				{
-					childSetValue("boolean_combo", LLSD(""));
-				}
-			}
-			break;
-		  case TYPE_STRING:
-			childSetVisible("val_text", TRUE);
-			childSetVisible("boolean_combo", FALSE);
-			if (!childHasFocus("val_text"))
-			{
-				childSetValue("val_text", sd);
-			}
-			break;
-		  case TYPE_VEC3:
-		  {
-			childSetVisible("boolean_combo", FALSE);
-			LLVector3 v;
-			v.setValue(sd);
-			spinner1->setVisible(TRUE);
-			spinner1->setLabel(LLString("X"));
-			spinner2->setVisible(TRUE);
-			spinner2->setLabel(LLString("Y"));
-			spinner3->setVisible(TRUE);
-			spinner3->setLabel(LLString("Z"));
-			if (!spinner1->hasFocus())
-			{
-				spinner1->setPrecision(3);
-				spinner1->setValue(v[VX]);
-			}
-			if (!spinner2->hasFocus())
-			{
-				spinner2->setPrecision(3);
-				spinner2->setValue(v[VY]);
-			}
-			if (!spinner3->hasFocus())
-			{
-				spinner3->setPrecision(3);
-				spinner3->setValue(v[VZ]);
-			}
-			break;
-		  }
-		  case TYPE_VEC3D:
-		  {
-			childSetVisible("boolean_combo", FALSE);
-			LLVector3d v;
-			v.setValue(sd);
-			spinner1->setVisible(TRUE);
-			spinner1->setLabel(LLString("X"));
-			spinner2->setVisible(TRUE);
-			spinner2->setLabel(LLString("Y"));
-			spinner3->setVisible(TRUE);
-			spinner3->setLabel(LLString("Z"));
-			if (!spinner1->hasFocus())
-			{
-				spinner1->setPrecision(3);
-				spinner1->setValue(v[VX]);
-			}
-			if (!spinner2->hasFocus())
-			{
-				spinner2->setPrecision(3);
-				spinner2->setValue(v[VY]);
-			}
-			if (!spinner3->hasFocus())
-			{
-				spinner3->setPrecision(3);
-				spinner3->setValue(v[VZ]);
-			}
-			break;
-		  }
-		  case TYPE_RECT:
-		  {
-			childSetVisible("boolean_combo", FALSE);
-			LLRect r;
-			r.setValue(sd);
-			spinner1->setVisible(TRUE);
-			spinner1->setLabel(LLString("Left"));
-			spinner2->setVisible(TRUE);
-			spinner2->setLabel(LLString("Right"));
-			spinner3->setVisible(TRUE);
-			spinner3->setLabel(LLString("Bottom"));
-			spinner4->setVisible(TRUE);
-			spinner4->setLabel(LLString("Top"));
-			if (!spinner1->hasFocus())
-			{
-				spinner1->setPrecision(0);
-				spinner1->setValue(r.mLeft);
-			}
-			if (!spinner2->hasFocus())
-			{
-				spinner2->setPrecision(0);
-				spinner2->setValue(r.mRight);
-			}
-			if (!spinner3->hasFocus())
-			{
-				spinner3->setPrecision(0);
-				spinner3->setValue(r.mBottom);
-			}
-			if (!spinner4->hasFocus())
-			{
-				spinner4->setPrecision(0);
-				spinner4->setValue(r.mTop);
 			}
+		}
+		else
+		{
+			gAudiop->stopInternetStream();
+		}
+	}
+	return true;
+}
 
-			spinner1->setMinValue((F32)S32_MIN);
-			spinner1->setMaxValue((F32)S32_MAX);
-			spinner1->setIncrement(1.f);
-
-			spinner2->setMinValue((F32)S32_MIN);
-			spinner2->setMaxValue((F32)S32_MAX);
-			spinner2->setIncrement(1.f);
-
-			spinner3->setMinValue((F32)S32_MIN);
-			spinner3->setMaxValue((F32)S32_MAX);
-			spinner3->setIncrement(1.f);
-
-			spinner4->setMinValue((F32)S32_MIN);
-			spinner4->setMaxValue((F32)S32_MAX);
-			spinner4->setIncrement(1.f);
-			break;
-		  }
-		  case TYPE_COL4:
-		  {
-			childSetVisible("boolean_combo", FALSE);
-			LLColor4 clr;
-			clr.setValue(sd);
-			color_swatch->setVisible(TRUE);
-			// only set if changed so color picker doesn't update
-			if(clr != LLColor4(color_swatch->getValue()))
-			{
-				color_swatch->set(LLColor4(sd), TRUE, FALSE);
-			}
-			spinner4->setVisible(TRUE);
-			spinner4->setLabel(LLString("Alpha"));
-			if (!spinner4->hasFocus())
-			{
-				spinner4->setPrecision(3);
-				spinner4->setMinValue(0.0);
-				spinner4->setMaxValue(1.f);
-				spinner4->setValue(clr.mV[VALPHA]);
-			}
-			break;
-		  }
-		  case TYPE_COL3:
-		  {
-			childSetVisible("boolean_combo", FALSE);
-			LLColor3 clr;
-			clr.setValue(sd);
-			color_swatch->setVisible(TRUE);
-			color_swatch->setValue(sd);
-			break;
-		  }
-		  case TYPE_COL4U:
-		  {
-			childSetVisible("boolean_combo", FALSE);
-			LLColor4U clr;
-			clr.setValue(sd);
-			color_swatch->setVisible(TRUE);
-			if(LLColor4(clr) != LLColor4(color_swatch->getValue()))
-			{
-				color_swatch->set(LLColor4(clr), TRUE, FALSE);
-			}
-			spinner4->setVisible(TRUE);
-			spinner4->setLabel(LLString("Alpha"));
-			if(!spinner4->hasFocus())
-			{
-				spinner4->setPrecision(0);
-				spinner4->setValue(clr.mV[VALPHA]);
-			}
+static bool handleUseOcclusionChanged(const LLSD& newvalue)
+{
+	LLPipeline::sUseOcclusion = (newvalue.asBoolean() && gGLManager.mHasOcclusionQuery 
+			&& gFeatureManagerp->isFeatureAvailable("UseOcclusion") && !gUseWireframe) ? 2 : 0;
+	return true;
+}
 
-			spinner4->setMinValue(0);
-			spinner4->setMaxValue(255);
-			spinner4->setIncrement(1.f);
+static bool handleNumpadControlChanged(const LLSD& newvalue)
+{
+	if (gKeyboard)
+	{
+		gKeyboard->setNumpadDistinct(static_cast<LLKeyboard::e_numpad_distinct>(newvalue.asInteger()));
+	}
+	return true;
+}
 
-			break;
-		  }
-		  default:
-			mComment->setText(LLString("unknown"));
-			break;
-		}
+static bool handleRenderUseVBOChanged(const LLSD& newvalue)
+{
+	if (gPipeline.isInit())
+	{
+		gPipeline.setUseVBO(newvalue.asBoolean());
+	}
+	return true;
+}
+
+static bool handleWLSkyDetailChanged(const LLSD&)
+{
+	if (gSky.mVOWLSkyp.notNull())
+	{
+		gSky.mVOWLSkyp->updateGeometry(gSky.mVOWLSkyp->mDrawable);
 	}
+	return true;
+}
 
+static bool handleRenderLightingDetailChanged(const LLSD& newvalue)
+{
+	if (gPipeline.isInit())
+	{
+		gPipeline.setLightingDetail(newvalue.asInteger());
+	}
+	return true;
 }
+
+static bool handleResetVertexBuffersChanged(const LLSD&)
+{
+	if (gPipeline.isInit())
+	{
+		gPipeline.resetVertexBuffers();
+	}
+	return true;
+}
+
+static bool handleRenderDynamicLODChanged(const LLSD& newvalue)
+{
+	LLPipeline::sDynamicLOD = newvalue.asBoolean();
+	return true;
+}
+
+static bool handleRenderUseFBOChanged(const LLSD& newvalue)
+{
+	LLRenderTarget::sUseFBO = newvalue.asBoolean();
+	if (gPipeline.isInit())
+	{
+		gPipeline.releaseGLBuffers();
+		gPipeline.createGLBuffers();
+	}
+	return true;
+}
+
+static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
+{
+	LLVOAvatar::sUseImpostors = newvalue.asBoolean();
+	return true;
+}
+
+static bool handleRenderUseCleverUIChanged(const LLSD& newvalue)
+{
+	gGL.setClever(newvalue.asBoolean());
+	return true;
+}
+
+static bool handleRenderResolutionDivisorChanged(const LLSD&)
+{
+	gResizeScreenTexture = TRUE;
+	return true;
+}
+
+static bool handleDebugViewsChanged(const LLSD& newvalue)
+{
+	LLView::sDebugRects = newvalue.asBoolean();
+	return true;
+}
+
+static bool handleLogFileChanged(const LLSD& newvalue)
+{
+	std::string log_filename = newvalue.asString();
+	LLFile::remove(log_filename.c_str());
+	LLError::logToFile(log_filename);
+	return true;
+}
+
+bool handleHideGroupTitleChanged(const LLSD& newvalue)
+{
+	gAgent.setHideGroupTitle(newvalue);
+	return true;
+}
+
+bool handleEffectColorChanged(const LLSD& newvalue)
+{
+	gAgent.setEffectColor(LLColor4(newvalue));
+	return true;
+}
+
+bool handleRotateNetMapChanged(const LLSD& newvalue)
+{
+	LLNetMap::setRotateMap(newvalue.asBoolean());
+	return true;
+}
+
+bool handleVectorizeChanged(const LLSD& newvalue)
+{
+	LLViewerJointMesh::updateVectorize();
+	return true;
+}
+
+bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
+{
+	if(gVoiceClient)
+	{
+		// Note: Ignore the specific event value, look up the ones we want
+
+		gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
+		gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
+		std::string keyString = gSavedSettings.getString("PushToTalkButton");
+		gVoiceClient->setPTTKey(keyString);
+		gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle"));
+		gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
+		std::string serverName = gSavedSettings.getString("VivoxDebugServerName");
+		gVoiceClient->setVivoxDebugServerName(serverName);
+
+		std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
+		gVoiceClient->setCaptureDevice(inputDevice);
+		std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
+		gVoiceClient->setRenderDevice(outputDevice);
+	}
+	return true;
+}
+
+////////////////////////////////////////////////////////////////////////////
+
+void settings_setup_listeners()
+{
+	gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _1));
+	gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _1));
+	gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _1));
+	gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("RenderDynamicReflections")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
+	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("EnableRippleWater")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
+	gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
+	gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _1));
+	gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _1));
+	gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _1));
+	gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _1));
+	gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _1));
+	gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&handleBandwidthChanged, _1));
+	gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _1));
+	gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _1));
+	gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _1));
+	gSavedSettings.getControl("RenderDynamicLOD")->getSignal()->connect(boost::bind(&handleRenderDynamicLODChanged, _1));
+	gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
+	gSavedSettings.getControl("RenderFastAlpha")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
+	gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
+	gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
+	gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1));
+	gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1));
+	gSavedSettings.getControl("RenderUseCleverUI")->getSignal()->connect(boost::bind(&handleRenderUseCleverUIChanged, _1));
+	gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1));
+	gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1));
+	gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _1));
+	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _1));
+	gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _1));
+	gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _1));
+	gSavedSettings.getControl("UseOcclusion")->getSignal()->connect(boost::bind(&handleUseOcclusionChanged, _1));
+	gSavedSettings.getControl("AudioLevelMaster")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+ 	gSavedSettings.getControl("AudioLevelSFX")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+ 	gSavedSettings.getControl("AudioLevelUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioLevelAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioLevelDistance")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("AudioStreamingMusic")->getSignal()->connect(boost::bind(&handleAudioStreamMusicChanged, _1));
+	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
+	gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _1));
+	gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _1));
+	gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _1));
+	gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _1));
+	gSavedSettings.getControl("FlycamAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
+	gSavedSettings.getControl("FlycamAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
+	gSavedSettings.getControl("FlycamAxis2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
+	gSavedSettings.getControl("FlycamAxis3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
+	gSavedSettings.getControl("FlycamAxis4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
+	gSavedSettings.getControl("FlycamAxis5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
+	gSavedSettings.getControl("FlycamAxis6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
+    gSavedSettings.getControl("DebugViews")->getSignal()->connect(boost::bind(&handleDebugViewsChanged, _1));
+    gSavedSettings.getControl("UserLogFile")->getSignal()->connect(boost::bind(&handleLogFileChanged, _1));
+	gSavedSettings.getControl("RenderHideGroupTitle")->getSignal()->connect(boost::bind(handleHideGroupTitleChanged, _1));
+	gSavedSettings.getControl("EffectColor")->getSignal()->connect(boost::bind(handleEffectColorChanged, _1));
+	gSavedSettings.getControl("MiniMapRotate")->getSignal()->connect(boost::bind(handleRotateNetMapChanged, _1));
+	gSavedSettings.getControl("VectorizePerfTest")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
+	gSavedSettings.getControl("VectorizeEnable")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
+	gSavedSettings.getControl("VectorizeProcessor")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
+	gSavedSettings.getControl("VectorizeSkin")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
+	gSavedSettings.getControl("EnableVoiceChat")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+	gSavedSettings.getControl("PTTCurrentlyEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+	gSavedSettings.getControl("PushToTalkButton")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+	gSavedSettings.getControl("PushToTalkToggle")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+	gSavedSettings.getControl("VoiceEarLocation")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+	gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+	gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+	gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
+}
+
diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h
index c2a9dc90960771b9260e36d8d970481a37b0ad58..2727e36b53f5fe88878dcb3361c3cb694c4213e6 100644
--- a/indra/newview/llviewercontrol.h
+++ b/indra/newview/llviewercontrol.h
@@ -32,9 +32,8 @@
 #ifndef LL_LLVIEWERCONTROL_H
 #define LL_LLVIEWERCONTROL_H
 
+#include <map>
 #include "llcontrol.h"
-#include "llfloater.h"
-#include "lltexteditor.h"
 
 // Enabled this definition to compile a 'hacked' viewer that
 // allows a hacked godmode to be toggled on and off.
@@ -43,33 +42,12 @@
 extern BOOL gHackGodmode;
 #endif
 
-class LLFloaterSettingsDebug : public LLFloater
-{
-public:
-	LLFloaterSettingsDebug();
-	virtual ~LLFloaterSettingsDebug();
-
-	virtual BOOL postBuild();
-	virtual void draw();
-
-	void updateControl(LLControlBase* control);
-
-	static void show(void*);
-	static void onSettingSelect(LLUICtrl* ctrl, void* user_data);
-	static void onCommitSettings(LLUICtrl* ctrl, void* user_data);
-	static void onClickDefault(void* user_data);
-
-protected:
-	static LLFloaterSettingsDebug* sInstance;
-	LLTextEditor* mComment;
-};
-
 // These functions found in llcontroldef.cpp *TODO: clean this up!
 //setting variables are declared in this function
-void declare_settings();
-void fixup_settings();
 void settings_setup_listeners();
 
+extern std::map<LLString, LLControlGroup*> gSettings;
+
 // for the graphics settings
 void create_graphics_group(LLControlGroup& group);
 
@@ -90,7 +68,4 @@ extern LLControlGroup gCrashSettings;
 extern LLString gLastRunVersion;
 extern LLString gCurrentVersion;
 
-extern LLString gSettingsFileName;
-extern LLString gPerAccountSettingsFileName;
-
 #endif // LL_LLVIEWERCONTROL_H
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index 2677b33af8443b11715cca979a96bfac75980291..fe00c25c638eb5bc8d8d577cbf84cc5fbf73487c 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -866,13 +866,53 @@ static F64 sUpdateGeometryRunAvgOn[10];
 static U32 sUpdateGeometryRunCount			= 0 ;
 static U32 sUpdateGeometryCalls				= 0 ;
 static U32 sUpdateGeometryLastProcessor		= 0 ;
+static BOOL sVectorizePerfTest 				= FALSE;
+static U32 sVectorizeProcessor 				= 0;
+
+//static
 void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh);
 
-void LLViewerJointMesh::updateGeometry()
+//static
+void LLViewerJointMesh::updateVectorize()
 {
-	extern BOOL gVectorizePerfTest;
-	extern U32	gVectorizeProcessor;
+	sVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
+	sVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
+	BOOL vectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
+	BOOL vectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
 
+	std::string vp;
+	switch(sVectorizeProcessor)
+	{
+		case 2: vp = "SSE2"; break;					// *TODO: replace the magic #s
+		case 1: vp = "SSE"; break;
+		default: vp = "COMPILER DEFAULT"; break;
+	}
+	llinfos << "Vectorization         : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
+	llinfos << "Vector Processor      : " << vp << llendl ;
+	llinfos << "Vectorized Skinning   : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
+	if(vectorizeEnable && vectorizeSkin)
+	{
+		switch(sVectorizeProcessor)
+		{
+			case 2:
+				sUpdateGeometryFunc = &updateGeometrySSE2;
+				break;
+			case 1:
+				sUpdateGeometryFunc = &updateGeometrySSE;
+				break;
+			default:
+				sUpdateGeometryFunc = &updateGeometryVectorized;
+				break;
+		}
+	}
+	else
+	{
+		sUpdateGeometryFunc = &updateGeometryOriginal;
+	}
+}
+
+void LLViewerJointMesh::updateGeometry()
+{
 	if (!(mValid
 		  && mMesh
 		  && mFace
@@ -883,7 +923,7 @@ void LLViewerJointMesh::updateGeometry()
 		return;
 	}
 
-	if (!gVectorizePerfTest)
+	if (!sVectorizePerfTest)
 	{
 		// Once we've measured performance, just run the specified
 		// code version.
@@ -916,13 +956,13 @@ void LLViewerJointMesh::updateGeometry()
 		{
 			F64 time_since_app_start = ug_timer.getElapsedSeconds();
 			if(sUpdateGeometryGlobalTime == 0.0 
-				|| sUpdateGeometryLastProcessor != gVectorizeProcessor)
+				|| sUpdateGeometryLastProcessor != sVectorizeProcessor)
 			{
 				sUpdateGeometryGlobalTime		= time_since_app_start;
 				sUpdateGeometryElapsedTime		= 0;
 				sUpdateGeometryCalls			= 0;
 				sUpdateGeometryRunCount			= 0;
-				sUpdateGeometryLastProcessor	= gVectorizeProcessor;
+				sUpdateGeometryLastProcessor	= sVectorizeProcessor;
 				sUpdateGeometryCallPointer		= false;
 				return;
 			}
@@ -969,7 +1009,7 @@ void LLViewerJointMesh::updateGeometry()
 				F64 perf_boost = ( sUpdateGeometryElapsedTimeOff - sUpdateGeometryElapsedTimeOn ) / sUpdateGeometryElapsedTimeOn;
 				llinfos << "run averages (" << (F64)sUpdateGeometryRunCount
 					<< "/10) vectorize off " << a
-					<< "% : vectorize type " << gVectorizeProcessor
+					<< "% : vectorize type " << sVectorizeProcessor
 					<< " " << b
 					<< "% : performance boost " 
 					<< perf_boost * 100.0
@@ -983,7 +1023,6 @@ void LLViewerJointMesh::updateGeometry()
 
 					// We have data now on which version is faster.  Switch to that
 					// code and save the data for next run.
-					gVectorizePerfTest = FALSE;
 					gSavedSettings.setBOOL("VectorizePerfTest", FALSE);
 
 					if (perf_boost > 0.0)
diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h
index 8e1ee514ff0510971fe4bee946d4368c5f9fa37a..4cef1552ca6281b42604ed995a091e1cbff68303 100644
--- a/indra/newview/llviewerjointmesh.h
+++ b/indra/newview/llviewerjointmesh.h
@@ -149,6 +149,9 @@ public:
 
 	/*virtual*/ BOOL isAnimatable() { return FALSE; }
 	
+	static void updateVectorize(); // Update globals when settings variables change
+	
+private:
 	// Avatar vertex skinning is a significant performance issue on computers
 	// with avatar vertex programs turned off (for example, most Macs).  We
 	// therefore have custom versions that use SIMD instructions.
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index f86d822d902cb0e41988e182b803eadd4caf8b46..9af072ad6fe378fdfdf5f7e5daf67a5d6c93da79 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -44,9 +44,6 @@
 #include "llmediamanager.h"
 #include "lluuid.h"
 
-// don't want to include llappviewer.h
-extern std::string gChannelName;
-
 // Implementation functions not exported into header file
 class LLViewerMediaImpl
 	:	public LLMediaObserver
@@ -457,7 +454,7 @@ void LLViewerMedia::initClass()
 	// append our magic version number string to the browser user agent id
 	std::ostringstream codec;
 	codec << "[Second Life ";
-	codec << "(" << gChannelName << ")";
+	codec << "(" << gSavedSettings.getString("VersionChannelName") << ")";
 	codec << " - " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH << "." << LL_VERSION_BUILD;
 	codec << "]";
 	init_data->setBrowserUserAgentId( codec.str() );
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index f7d9ccb37ce5a3c28c33353b604a1f566b78268b..ac52b8d05fd46387d83a4175a8dbcef981ab1540 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -120,6 +120,7 @@
 #include "llfloaterregioninfo.h"
 #include "llfloaterreporter.h"
 #include "llfloaterscriptdebug.h"
+#include "llfloatersettingsdebug.h"
 #include "llfloaterenvsettings.h"
 #include "llfloaterstats.h"
 #include "llfloatertest.h"
@@ -376,6 +377,11 @@ void toggle_cull_small(void *);
 void toggle_show_xui_names(void *);
 BOOL check_show_xui_names(void *);
 
+void run_vectorize_perf_test(void *)
+{
+	gSavedSettings.setBOOL("VectorizePerfTest", TRUE);
+}
+
 // Debug UI
 void handle_web_search_demo(void*);
 void handle_slurl_test(void*);
@@ -1091,7 +1097,7 @@ void init_client_menu(LLMenuGL* menu)
 										&menu_check_control,
 										(void*)"ShowConsoleWindow"));
 
-	if(gQAMode)
+	if(gSavedSettings.getBOOL("QAMode"))
 	{
 		LLMenuGL* sub = NULL;
 		sub = new LLMenuGL("Debugging");
@@ -1171,7 +1177,6 @@ extern BOOL gDebugClicks;
 extern BOOL gDebugWindowProc;
 extern BOOL gDebugTextEditorTips;
 extern BOOL gDebugSelectMgr;
-extern BOOL gVectorizePerfTest;
 
 void init_debug_ui_menu(LLMenuGL* menu)
 {
@@ -1383,7 +1388,7 @@ void init_debug_rendering_menu(LLMenuGL* menu)
 										   (void*)"ShowDepthBuffer"));
 	sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect));
 
-	sub_menu->append(new LLMenuItemToggleGL("Vectorize Perf Test", &gVectorizePerfTest));
+	sub_menu->append(new LLMenuItemCallGL("Vectorize Perf Test", &run_vectorize_perf_test));
 
 	sub_menu = new LLMenuGL("Render Tests");
 
@@ -4850,7 +4855,7 @@ BOOL menu_check_build_tool( void* user_data )
 void handle_reload_settings(void*)
 {
 	gSavedSettings.resetToDefaults();
-	gSavedSettings.loadFromFile(gSettingsFileName, TRUE);
+	gSavedSettings.loadFromFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
 
 	llinfos << "Loading colors from colors.xml" << llendl;
 	std::string color_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"colors.xml");
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index 6fb2957023d7ce20528baebd85cb2706a25cab2c..b0ebc64b7a58d369c6979f7035526fa824d4dd15 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -114,10 +114,5 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =
 // Use this to figure out which domain name and login URI to use.
 
 EGridInfo gGridChoice = GRID_INFO_NONE;
-char gGridName[MAX_STRING];		/* Flawfinder: ignore */
-
-F32 gPacketDropPercentage = 0.f;
-F32 gInBandwidth = 0.f;
-F32 gOutBandwidth = 0.f;
-
+LLString gGridName;		/* Flawfinder: ignore */
 unsigned char gMACAddress[MAC_ADDRESS_BYTES];		/* Flawfinder: ignore */
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index 4de73aae7a772b5e595c3aa0d4bdde5126128ad4..4e6c87492185867e2f42953ccf5c1ccbe82354e6 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -55,7 +55,7 @@ enum EGridInfo
 	GRID_INFO_VAAK,
 	GRID_INFO_YAMI,
 	GRID_INFO_LOCAL,
-	GRID_INFO_OTHER, // IP address set via -user or other command line option
+	GRID_INFO_OTHER, // IP address set via command line option
 	GRID_INFO_COUNT
 };
 
@@ -68,12 +68,9 @@ struct LLGridData
 	const char* mHelperURI;
 };
 
-extern F32 gPacketDropPercentage;
-extern F32 gInBandwidth;
-extern F32 gOutBandwidth;
 extern EGridInfo gGridChoice;
 extern LLGridData gGridInfo[];
-extern char gGridName[MAX_STRING];		/* Flawfinder: ignore */
+extern LLString gGridName;		/* Flawfinder: ignore */
 
 const S32 MAC_ADDRESS_BYTES = 6;
 extern unsigned char gMACAddress[MAC_ADDRESS_BYTES];		/* Flawfinder: ignore */
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 69e08db2bf3c4c134b01be83b5585ee543113a39..e2ea6e6ecf2406c5d937e45ad0ec9917cb330040 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -678,31 +678,6 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
 
 ///////////////////////////////////////////////////////////////////////////////////////////////
 
-class LLVoiceClientPrefsListener: public LLSimpleListener
-{
-	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
-	{
-		// Note: Ignore the specific event value, look up the ones we want
-
-		gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
-		gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
-		std::string keyString = gSavedSettings.getString("PushToTalkButton");
-		gVoiceClient->setPTTKey(keyString);
-		gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle"));
-		gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
-		std::string serverName = gSavedSettings.getString("VivoxDebugServerName");
-		gVoiceClient->setVivoxDebugServerName(serverName);
-
-		std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
-		gVoiceClient->setCaptureDevice(inputDevice);
-		std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
-		gVoiceClient->setRenderDevice(outputDevice);
-
-		return true;
-	}
-};
-static LLVoiceClientPrefsListener voice_prefs_listener;
-
 class LLVoiceClientMuteListObserver : public LLMuteListObserver
 {
 	/* virtual */ void onChange()  { gVoiceClient->muteListChanged();}
@@ -859,16 +834,6 @@ LLVoiceClient::LLVoiceClient()
 	std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
 	setRenderDevice(renderDevice);
 	
-	// Set up our listener to get updates on all prefs values we care about.
-	gSavedSettings.getControl("EnableVoiceChat")->addListener(&voice_prefs_listener);
-	gSavedSettings.getControl("PTTCurrentlyEnabled")->addListener(&voice_prefs_listener);
-	gSavedSettings.getControl("PushToTalkButton")->addListener(&voice_prefs_listener);
-	gSavedSettings.getControl("PushToTalkToggle")->addListener(&voice_prefs_listener);
-	gSavedSettings.getControl("VoiceEarLocation")->addListener(&voice_prefs_listener);
-	gSavedSettings.getControl("VivoxDebugServerName")->addListener(&voice_prefs_listener);
-	gSavedSettings.getControl("VoiceInputAudioDevice")->addListener(&voice_prefs_listener);
-	gSavedSettings.getControl("VoiceOutputAudioDevice")->addListener(&voice_prefs_listener);
-
 	mTuningMode = false;
 	mTuningEnergy = 0.0f;
 	mTuningMicVolume = 0;
@@ -1281,7 +1246,7 @@ void LLVoiceClient::stateMachine()
 		break;
 		
 		case stateStart:
-			if(gDisableVoice)
+			if(gSavedSettings.getBOOL("CmdLineDisableVoice"))
 			{
 				// Voice is locked out, we must not launch the vivox daemon.
 				setState(stateJail);
@@ -3644,7 +3609,7 @@ void LLVoiceClient::setVoiceEnabled(bool enabled)
 
 bool LLVoiceClient::voiceEnabled()
 {
-	return gSavedSettings.getBOOL("EnableVoiceChat") && !gDisableVoice;
+	return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
 }
 
 void LLVoiceClient::setUsePTT(bool usePTT)
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index 9dc92efa81f5cc166b50920ed854981d68202497..fc4ede5bab342aabe5a4857d5365e797d2e96bbc 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -238,8 +238,9 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
 //	mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
 	mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
 	mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this);
-	mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, gVerifySSLCert);
-	mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, gVerifySSLCert? 2 : 0);
+    	BOOL vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert");
+	mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, vefifySSLCert);
+	mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, vefifySSLCert ? 2 : 0);
 	// Be a little impatient about establishing connections.
 	mCurlRequest->setopt(CURLOPT_CONNECTTIMEOUT, 40L);
 
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index b19e4e2c9c8804ae8841c625ad4025560d6eecf0..e87fe8d8ff546fbe46ce0df3b0757d137c287c0d 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -115,15 +115,15 @@ class ViewerManifest(LLManifest):
                 if not self.default_grid():
                         if self.default_channel():
                                 # beta grid viewer
-                                channel_flags = '-settings settings_beta.xml'
-                        grid_flags = "-helperuri http://preview-%(grid)s.secondlife.com/helpers/ -loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']}
+                                channel_flags = '--settings settings_beta.xml'
+                        grid_flags = "--helperuri http://preview-%(grid)s.secondlife.com/helpers/ --loginuri https://login.%(grid)s.lindenlab.com/cgi-bin/login.cgi" % {'grid':self.args['grid']}
                         
                 if not self.default_channel():
                         # some channel on some grid
-                        channel_flags = '-settings settings_%s.xml -channel "%s"' % (self.channel_lowerword(), self.channel())
+                        channel_flags = '--settings settings_%s.xml --channel "%s"' % (self.channel_lowerword(), self.channel())
                 elif self.login_channel():
                         # Report a special channel during login, but use default channel elsewhere
-                        channel_flags = '-channel "%s"' % (self.login_channel())
+                        channel_flags = '--channel "%s"' % (self.login_channel())
                         
                 return " ".join((channel_flags, grid_flags)).strip()