diff --git a/.hgignore b/.hgignore
index 886af2b00794f61e6c660b47c4bf91fefb153d23..53ddf71bb79ecb63c743d8f67bd5f8271400142a 100644
--- a/.hgignore
+++ b/.hgignore
@@ -55,3 +55,8 @@ glob:*.cpp.orig
 glob:*.cpp.bak
 glob:*.h.bak
 glob:*.h.orig
+glob:indra/newview/typed_locations.txt
+glob:indra/newview/teleport_history.txt
+glob:indra/newview/search_history.txt
+glob:indra/newview/filters.xml
+glob:indra/newview/avatar_icons_cache.txt
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index 920d8c09777d0b0c148150e01216b5db443b7a41..37370e44e785c8f44f7265673e66b99d2806de08 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -291,8 +291,8 @@ LLMutex::LLMutex(apr_pool_t *poolp) :
 
 LLMutex::~LLMutex()
 {
-#if _DEBUG
-	llassert(!isLocked()); // better not be locked!
+#if MUTEX_DEBUG
+	llassert_always(!isLocked()); // better not be locked!
 #endif
 	apr_thread_mutex_destroy(mAPRMutexp);
 	mAPRMutexp = NULL;
@@ -306,10 +306,24 @@ LLMutex::~LLMutex()
 void LLMutex::lock()
 {
 	apr_thread_mutex_lock(mAPRMutexp);
+#if MUTEX_DEBUG
+	// Have to have the lock before we can access the debug info
+	U32 id = LLThread::currentID();
+	if (mIsLocked[id] != FALSE)
+		llerrs << "Already locked in Thread: " << id << llendl;
+	mIsLocked[id] = TRUE;
+#endif
 }
 
 void LLMutex::unlock()
 {
+#if MUTEX_DEBUG
+	// Access the debug info while we have the lock
+	U32 id = LLThread::currentID();
+	if (mIsLocked[id] != TRUE)
+		llerrs << "Not locked in Thread: " << id << llendl;	
+	mIsLocked[id] = FALSE;
+#endif
 	apr_thread_mutex_unlock(mAPRMutexp);
 }
 
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 932d96d9406b8e3bdd1ee97eacaf1b78430e6011..d8aa90de2e8a1e876de3719893431968e3ee003c 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -128,6 +128,8 @@ class LL_COMMON_API LLThread
 
 //============================================================================
 
+#define MUTEX_DEBUG (LL_DEBUG || LL_RELEASE_WITH_DEBUG_INFO)
+
 class LL_COMMON_API LLMutex
 {
 public:
@@ -142,6 +144,9 @@ class LL_COMMON_API LLMutex
 	apr_thread_mutex_t *mAPRMutexp;
 	apr_pool_t			*mAPRPoolp;
 	BOOL				mIsLocalPool;
+#if MUTEX_DEBUG
+	std::map<U32, BOOL> mIsLocked;
+#endif
 };
 
 // Actually a condition/mutex pair (since each condition needs to be associated with a mutex).
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp
index a403c44b71f92c9cea4887c796993977bb4b3d6f..3078d80552b19fca1df4074f932c8340f6465aa1 100644
--- a/indra/llmessage/llcachename.cpp
+++ b/indra/llmessage/llcachename.cpp
@@ -189,6 +189,7 @@ typedef std::set<LLUUID>					AskQueue;
 typedef std::list<PendingReply*>			ReplyQueue;
 typedef std::map<LLUUID,U32>				PendingQueue;
 typedef std::map<LLUUID, LLCacheNameEntry*> Cache;
+typedef std::map<std::string, LLUUID> 		ReverseCache;
 
 class LLCacheName::Impl
 {
@@ -198,7 +199,9 @@ class LLCacheName::Impl
 
 	Cache				mCache;
 		// the map of UUIDs to names
-
+	ReverseCache   	  	mReverseCache;
+		// map of names to UUIDs
+	
 	AskQueue			mAskNameQueue;
 	AskQueue			mAskGroupQueue;
 		// UUIDs to ask our upstream host about
@@ -371,7 +374,9 @@ void LLCacheName::importFile(LLFILE* fp)
 		entry->mFirstName = firstname;
 		entry->mLastName = lastname;
 		impl.mCache[id] = entry;
-
+		std::string fullname = entry->mFirstName + " " + entry->mLastName;
+		impl.mReverseCache[fullname] = id;
+		
 		count++;
 	}
 
@@ -407,6 +412,8 @@ bool LLCacheName::importFile(std::istream& istr)
 		entry->mFirstName = agent[FIRST].asString();
 		entry->mLastName = agent[LAST].asString();
 		impl.mCache[id] = entry;
+		std::string fullname = entry->mFirstName + " " + entry->mLastName;
+		impl.mReverseCache[fullname] = id;
 
 		++count;
 	}
@@ -428,6 +435,7 @@ bool LLCacheName::importFile(std::istream& istr)
 		entry->mCreateTime = ctime;
 		entry->mGroupName = group[NAME].asString();
 		impl.mCache[id] = entry;
+		impl.mReverseCache[entry->mGroupName] = id;
 		++count;
 	}
 	llinfos << "LLCacheName loaded " << count << " group names" << llendl;
@@ -548,6 +556,27 @@ BOOL LLCacheName::getGroupName(const LLUUID& id, std::string& group)
 		return FALSE;
 	}
 }
+
+BOOL LLCacheName::getUUID(const std::string& first, const std::string& last, LLUUID& id)
+{
+	std::string fullname = first + " " + last;
+	return getUUID(fullname, id);
+}
+
+BOOL LLCacheName::getUUID(const std::string& fullname, LLUUID& id)
+{
+	ReverseCache::iterator iter = impl.mReverseCache.find(fullname);
+	if (iter != impl.mReverseCache.end())
+	{
+		id = iter->second;
+		return TRUE;
+	}
+	else
+	{
+		return FALSE;
+	}
+}
+
 // This is a little bit kludgy. LLCacheNameCallback is a slot instead of a function pointer.
 //  The reason it is a slot is so that the legacy get() function below can bind an old callback
 //  and pass it as a slot. The reason it isn't a boost::function is so that trackable behavior
@@ -897,10 +926,13 @@ void LLCacheName::Impl::processUUIDReply(LLMessageSystem* msg, bool isGroup)
 		if (!isGroup)
 		{
 			mSignal(id, entry->mFirstName, entry->mLastName, FALSE);
+			std::string fullname = entry->mFirstName + " " + entry->mLastName;
+			mReverseCache[fullname] = id;
 		}
 		else
 		{
 			mSignal(id, entry->mGroupName, "", TRUE);
+			mReverseCache[entry->mGroupName] = id;
 		}
 	}
 }
diff --git a/indra/llmessage/llcachename.h b/indra/llmessage/llcachename.h
index 8641437d86216317cdb7ff1fd04924c9a48f0d45..111cc8b650a8367549a19db146b05188fd60aae1 100644
--- a/indra/llmessage/llcachename.h
+++ b/indra/llmessage/llcachename.h
@@ -86,6 +86,10 @@ class LLCacheName
 	BOOL getName(const LLUUID& id, std::string& first, std::string& last);
 	BOOL getFullName(const LLUUID& id, std::string& fullname);
 	
+	// Reverse lookup of UUID from name
+	BOOL getUUID(const std::string& first, const std::string& last, LLUUID& id);
+	BOOL getUUID(const std::string& fullname, LLUUID& id);
+	
 	// If available, this method copies the group name into the string
 	// provided. The caller must allocate at least
 	// DB_GROUP_NAME_BUF_SIZE characters. If not available, this
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index f0df3bcf90c47a43dcadc1e67a2d3addee4faca0..bab5cfd56edf1251bf2361e9d1f4341a9d0fca90 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -89,19 +89,6 @@ void LLRenderTarget::setSampleBuffer(LLMultisampleBuffer* buffer)
 
 void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, BOOL stencil, LLTexUnit::eTextureType usage, BOOL use_fbo)
 {
-	// only reallocate if something changed
-	if (mResX == resx
-		&& mResY == resy
-		&& mUseDepth == depth
-		&& mStencil == stencil
-		&& mUsage == usage
-		&& (mFBO != 0) == ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject)
-		&& mColorFmt == color_fmt)
-	{
-		// nothing to do
-		return;
-	}
-		
 	stop_glerror();
 	mResX = resx;
 	mResY = resy;
@@ -620,19 +607,6 @@ void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth
 
 void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, BOOL stencil,  LLTexUnit::eTextureType usage, BOOL use_fbo, U32 samples )
 {
-	if (mResX == resx
-		&& mResY == resy
-		&& mUseDepth == depth
-		&& mStencil == stencil
-		&& mUsage == usage
-		&& (mFBO != 0) == ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject)
-		&& mColorFmt == color_fmt
-		&& mSamples == samples)
-	{
-		// nothing to do
-		return;
-	}
-
 	stop_glerror();
 	mResX = resx;
 	mResY = resy;
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index b65f248db27d9bc88ccce696889c1bdd0690603b..8930e320558c315c5d65406af2f867f2f0875130 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -147,7 +147,11 @@ LLButton::LLButton(const LLButton::Params& p)
 	mCommitOnReturn(p.commit_on_return),
 	mFadeWhenDisabled(FALSE),
 	mForcePressedState(false),
-	mLastDrawCharsCount(0)
+	mLastDrawCharsCount(0),
+	mMouseDownSignal(NULL),
+	mMouseUpSignal(NULL),
+	mHeldDownSignal(NULL)
+
 {
 	static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
 	static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>());
@@ -215,13 +219,28 @@ LLButton::LLButton(const LLButton::Params& p)
 	}
 	
 	if (p.click_callback.isProvided())
-		initCommitCallback(p.click_callback, mCommitSignal); // alias -> commit_callback
+	{
+		setCommitCallback(initCommitCallback(p.click_callback)); // alias -> commit_callback
+	}
 	if (p.mouse_down_callback.isProvided())
-		initCommitCallback(p.mouse_down_callback, mMouseDownSignal);
+	{
+		setMouseDownCallback(initCommitCallback(p.mouse_down_callback));
+	}
 	if (p.mouse_up_callback.isProvided())
-		initCommitCallback(p.mouse_up_callback, mMouseUpSignal);
+	{
+		setMouseUpCallback(initCommitCallback(p.mouse_up_callback));
+	}
 	if (p.mouse_held_callback.isProvided())
-		initCommitCallback(p.mouse_held_callback, mHeldDownSignal);
+	{
+		setHeldDownCallback(initCommitCallback(p.mouse_held_callback));
+	}
+}
+
+LLButton::~LLButton()
+{
+	delete mMouseDownSignal;
+	delete mMouseUpSignal;
+	delete mHeldDownSignal;
 }
 
 // HACK: Committing a button is the same as instantly clicking it.
@@ -232,9 +251,9 @@ void LLButton::onCommit()
 	// panel containing it.  Therefore we need to call 	LLUICtrl::onCommit()
 	// LAST, otherwise this becomes deleted memory.
 
-	mMouseDownSignal(this, LLSD());
+	if (mMouseDownSignal) (*mMouseDownSignal)(this, LLSD());
 	
-	mMouseUpSignal(this, LLSD());
+	if (mMouseUpSignal) (*mMouseUpSignal)(this, LLSD());
 
 	if (getSoundFlags() & MOUSE_DOWN)
 	{
@@ -257,19 +276,23 @@ void LLButton::onCommit()
 
 boost::signals2::connection LLButton::setClickedCallback( const commit_signal_t::slot_type& cb )
 {
-	return mCommitSignal.connect(cb);
+	if (!mCommitSignal) mCommitSignal = new commit_signal_t();
+	return mCommitSignal->connect(cb);
 }
 boost::signals2::connection LLButton::setMouseDownCallback( const commit_signal_t::slot_type& cb )
 {
-	return mMouseDownSignal.connect(cb);
+	if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t();
+	return mMouseDownSignal->connect(cb);
 }
 boost::signals2::connection LLButton::setMouseUpCallback( const commit_signal_t::slot_type& cb )
 {
-	return mMouseUpSignal.connect(cb);
+	if (!mMouseUpSignal) mMouseUpSignal = new commit_signal_t();
+	return mMouseUpSignal->connect(cb);
 }
 boost::signals2::connection LLButton::setHeldDownCallback( const commit_signal_t::slot_type& cb )
 {
-	return mHeldDownSignal.connect(cb);
+	if (!mHeldDownSignal) mHeldDownSignal = new commit_signal_t();
+	return mHeldDownSignal->connect(cb);
 }
 
 
@@ -351,7 +374,7 @@ BOOL LLButton::handleMouseDown(S32 x, S32 y, MASK mask)
 		 */
 		LLUICtrl::handleMouseDown(x, y, mask);
 
-		mMouseDownSignal(this, LLSD());
+		if(mMouseDownSignal) (*mMouseDownSignal)(this, LLSD());
 
 		mMouseDownTimer.start();
 		mMouseDownFrame = (S32) LLFrameTimer::getFrameCount();
@@ -383,7 +406,7 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)
 		LLUICtrl::handleMouseUp(x, y, mask);
 
 		// Regardless of where mouseup occurs, handle callback
-		mMouseUpSignal(this, LLSD());
+		if(mMouseUpSignal) (*mMouseUpSignal)(this, LLSD());
 
 		resetMouseDownTimer();
 
@@ -493,7 +516,7 @@ BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)
 			{
 				LLSD param;
 				param["count"] = mMouseHeldDownCount++;
-				mHeldDownSignal(this, param);
+				if (mHeldDownSignal) (*mHeldDownSignal)(this, param);
 			}
 		}
 
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 3c1b57c4befab71b573a699c152b9aab6c1209e8..8c3b4bd859ea3bf7e008136b6c0eef39414df067 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -128,6 +128,8 @@ class LLButton
 	LLButton(const Params&);
 
 public:
+
+	~LLButton();
 	// For backward compatability only
 	typedef boost::function<void(void*)> button_callback_t;
 
@@ -251,9 +253,9 @@ class LLButton
 	void			resetMouseDownTimer();
 
 private:
-	commit_signal_t 			mMouseDownSignal;
-	commit_signal_t 			mMouseUpSignal;
-	commit_signal_t 			mHeldDownSignal;
+	commit_signal_t* 			mMouseDownSignal;
+	commit_signal_t* 			mMouseUpSignal;
+	commit_signal_t* 			mHeldDownSignal;
 	
 	const LLFontGL*				mGLFont;
 	
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index bf965e8e28e6760693cced9fe41cdb1af0917548..262afbe661507960ec58e2fef733562cd4e9c567 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2642,10 +2642,14 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
 	
 	// open callback 
 	if (p.open_callback.isProvided())
-		initCommitCallback(p.open_callback, mOpenSignal);
+	{
+		mOpenSignal.connect(initCommitCallback(p.open_callback));
+	}
 	// close callback 
 	if (p.close_callback.isProvided())
-		initCommitCallback(p.close_callback, mCloseSignal);
+	{
+		mCloseSignal.connect(initCommitCallback(p.close_callback));
+	}
 }
 
 LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build");
diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
index 00a80478cf467eedb94358bde8d3510f5fd96b79..35fbc7b0a88f9a898714569f46614b81b0ed2d69 100644
--- a/indra/llui/llfocusmgr.cpp
+++ b/indra/llui/llfocusmgr.cpp
@@ -41,6 +41,10 @@ const F32 FOCUS_FADE_TIME = 0.3f;
 // NOTE: the LLFocusableElement implementation has been moved here from lluictrl.cpp.
 
 LLFocusableElement::LLFocusableElement()
+:	mFocusLostCallback(NULL),
+	mFocusReceivedCallback(NULL),
+	mFocusChangedCallback(NULL),
+	mTopLostCallback(NULL)
 {
 }
 
@@ -59,23 +63,27 @@ BOOL LLFocusableElement::handleUnicodeChar(llwchar uni_char, BOOL called_from_pa
 // virtual
 LLFocusableElement::~LLFocusableElement()
 {
+	delete mFocusLostCallback;
+	delete mFocusReceivedCallback;
+	delete mFocusChangedCallback;
+	delete mTopLostCallback;
 }
 
 void LLFocusableElement::onFocusReceived()
 {
-	mFocusReceivedCallback(this);
-	mFocusChangedCallback(this);
+	if (mFocusReceivedCallback) (*mFocusReceivedCallback)(this);
+	if (mFocusChangedCallback) (*mFocusChangedCallback)(this);
 }
 
 void LLFocusableElement::onFocusLost()
 {
-	mFocusLostCallback(this);
-	mFocusChangedCallback(this);
+	if (mFocusLostCallback) (*mFocusLostCallback)(this);
+	if (mFocusChangedCallback) (*mFocusChangedCallback)(this);
 }
 
 void LLFocusableElement::onTopLost()
 {
-	mTopLostCallback(this);
+	if (mTopLostCallback) (*mTopLostCallback)(this);
 }
 
 BOOL LLFocusableElement::hasFocus() const
@@ -87,6 +95,31 @@ void LLFocusableElement::setFocus(BOOL b)
 {
 }
 
+boost::signals2::connection LLFocusableElement::setFocusLostCallback( const focus_signal_t::slot_type& cb)	
+{ 
+	if (!mFocusLostCallback) mFocusLostCallback = new focus_signal_t();
+	return mFocusLostCallback->connect(cb);
+}
+
+boost::signals2::connection	LLFocusableElement::setFocusReceivedCallback(const focus_signal_t::slot_type& cb)	
+{ 
+	if (!mFocusReceivedCallback) mFocusReceivedCallback = new focus_signal_t();
+	return mFocusReceivedCallback->connect(cb);
+}
+
+boost::signals2::connection	LLFocusableElement::setFocusChangedCallback(const focus_signal_t::slot_type& cb)	
+{
+	if (!mFocusChangedCallback) mFocusChangedCallback = new focus_signal_t();
+	return mFocusChangedCallback->connect(cb);
+}
+
+boost::signals2::connection	LLFocusableElement::setTopLostCallback(const focus_signal_t::slot_type& cb)	
+{ 
+	if (!mTopLostCallback) mTopLostCallback = new focus_signal_t();
+	return mTopLostCallback->connect(cb);
+}
+
+
 
 LLFocusMgr gFocusMgr;
 
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index 2fa4e124fb8c8fedba410114a22f03dbf04faa07..83ecd1d301fdb199dcc2f700c4249d7bb9e6b193 100644
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -56,10 +56,10 @@ class LLFocusableElement
 
 	typedef boost::signals2::signal<void(LLFocusableElement*)> focus_signal_t;
 	
-	boost::signals2::connection setFocusLostCallback( const focus_signal_t::slot_type& cb)	{ return mFocusLostCallback.connect(cb);}
-	boost::signals2::connection	setFocusReceivedCallback(const focus_signal_t::slot_type& cb)	{ return mFocusReceivedCallback.connect(cb);}
-	boost::signals2::connection	setFocusChangedCallback(const focus_signal_t::slot_type& cb)	{ return mFocusChangedCallback.connect(cb);}
-	void	setTopLostCallback(const focus_signal_t::slot_type& cb)	{ mTopLostCallback.connect(cb);}
+	boost::signals2::connection setFocusLostCallback( const focus_signal_t::slot_type& cb);
+	boost::signals2::connection	setFocusReceivedCallback(const focus_signal_t::slot_type& cb);
+	boost::signals2::connection	setFocusChangedCallback(const focus_signal_t::slot_type& cb);
+	boost::signals2::connection	setTopLostCallback(const focus_signal_t::slot_type& cb);
 
 	// These were brought up the hierarchy from LLView so that we don't have to use dynamic_cast when dealing with keyboard focus.
 	virtual BOOL	handleKey(KEY key, MASK mask, BOOL called_from_parent);
@@ -69,10 +69,10 @@ class LLFocusableElement
 	virtual void	onFocusReceived();
 	virtual void	onFocusLost();
 	virtual void	onTopLost();	// called when registered as top ctrl and user clicks elsewhere
-	focus_signal_t  mFocusLostCallback;
-	focus_signal_t  mFocusReceivedCallback;
-	focus_signal_t  mFocusChangedCallback;
-	focus_signal_t  mTopLostCallback;
+	focus_signal_t*  mFocusLostCallback;
+	focus_signal_t*  mFocusReceivedCallback;
+	focus_signal_t*  mFocusChangedCallback;
+	focus_signal_t*  mTopLostCallback;
 };
 
 
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index c2f91ff7e01a365b7ea576d245933a66a0711421..bd5734312a3185b629e3fcea22ef5a2787fa7eb0 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -323,6 +323,19 @@ void LLLineEditor::setMaxTextLength(S32 max_text_length)
 	mMaxLengthBytes = max_len;
 } 
 
+void LLLineEditor::getTextPadding(S32 *left, S32 *right)
+{
+	*left = mTextPadLeft;
+	*right = mTextPadRight;
+}
+
+void LLLineEditor::setTextPadding(S32 left, S32 right)
+{
+	mTextPadLeft = left;
+	mTextPadRight = right;
+	updateTextPadding();
+}
+
 void LLLineEditor::updateTextPadding()
 {
 	static LLUICachedControl<S32> line_editor_hpad ("UILineEditorHPad", 0);
@@ -626,7 +639,8 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
 	// delay cursor flashing
 	mKeystrokeTimer.reset();
 	
-	mMouseDownSignal(this,x,y,mask);
+	if (mMouseDownSignal)
+		(*mMouseDownSignal)(this,x,y,mask);
 
 	return TRUE;
 }
@@ -742,7 +756,8 @@ BOOL LLLineEditor::handleMouseUp(S32 x, S32 y, MASK mask)
 	}
 	
 	// We won't call LLUICtrl::handleMouseUp to avoid double calls of  childrenHandleMouseUp().Just invoke the signal manually.
-	mMouseUpSignal(this,x,y, mask);
+	if (mMouseUpSignal)
+		(*mMouseUpSignal)(this,x,y, mask);
 	return handled;
 }
 
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 4474963b1aff534468df87306f18ccb4f8dfd9dc..4c4b00094d4feedaed59d13848f0669d850b499e 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -226,6 +226,9 @@ class LLLineEditor
 	void			setKeystrokeCallback(callback_t callback, void* user_data);
 
 	void			setMaxTextLength(S32 max_text_length);
+	// Manipulate left and right padding for text
+	void getTextPadding(S32 *left, S32 *right);
+	void setTextPadding(S32 left, S32 right);
 
 	// Prevalidation controls which keystrokes can affect the editor
 	void			setPrevalidate( LLLinePrevalidateFunc func );
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index de9a854f63702872920e2fbfdadeea1e4c23dbca..f8935d03ac1f72d20fc72c54204a73dd1ee63efa 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -760,21 +760,25 @@ void LLMenuItemCallGL::initFromParams(const Params& p)
 {
 	if (p.on_visible.isProvided())
 	{
-		initVisibleCallback(p.on_visible, mVisibleSignal);
+		mVisibleSignal.connect(initVisibleCallback(p.on_visible));
 	}
 	if (p.on_enable.isProvided())
 	{
-		initEnableCallback(p.on_enable, mEnableSignal);
+		setEnableCallback(initEnableCallback(p.on_enable));
 		// Set the enabled control variable (for backwards compatability)
 		if (p.on_enable.control_name.isProvided() && !p.on_enable.control_name().empty())
 		{
 			LLControlVariable* control = findControl(p.on_enable.control_name());
 			if (control)
+			{
 				setEnabledControlVariable(control);
+			}
 		}
 	}
 	if (p.on_click.isProvided())
-		initCommitCallback(p.on_click, mCommitSignal);
+	{
+		setCommitCallback(initCommitCallback(p.on_click));
+	}
 		
 	LLUICtrl::initFromParams(p);
 }
@@ -795,7 +799,10 @@ void LLMenuItemCallGL::updateEnabled( void )
 		if (mEnabledControlVariable)
 		{
 			if (!enabled)
-				mEnabledControlVariable->set(false); // callback overrides control variable; this will call setEnabled()
+			{
+				// callback overrides control variable; this will call setEnabled()
+				mEnabledControlVariable->set(false); 
+			}
 		}
 		else
 		{
@@ -854,7 +861,7 @@ void LLMenuItemCheckGL::initFromParams(const Params& p)
 {
 	if (p.on_check.isProvided())
 	{
-		initEnableCallback(p.on_check, mCheckSignal);
+		setCheckCallback(initEnableCallback(p.on_check));
 		// Set the control name (for backwards compatability)
 		if (p.on_check.control_name.isProvided() && !p.on_check.control_name().empty())
 		{
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
index 68e496aed177935e368f0e442f9e49da66f8cbc8..1891bca36cb5be97592a1649f59261bd6ef2b892 100644
--- a/indra/llui/llmultislider.cpp
+++ b/indra/llui/llmultislider.cpp
@@ -84,17 +84,30 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)
 	mThumbCenterSelectedColor(p.thumb_center_selected_color()),
 	mDisabledThumbColor(p.thumb_disabled_color()),
 	mTriangleColor(p.triangle_color()),
-	mThumbWidth(p.thumb_width)
+	mThumbWidth(p.thumb_width),
+	mMouseDownSignal(NULL),
+	mMouseUpSignal(NULL)
 {
 	mValue.emptyMap();
 	mCurSlider = LLStringUtil::null;
 	
 	if (p.mouse_down_callback.isProvided())
-		initCommitCallback(p.mouse_down_callback, mMouseDownSignal);
+	{
+		setMouseDownCallback(initCommitCallback(p.mouse_down_callback));
+	}
 	if (p.mouse_up_callback.isProvided())
-		initCommitCallback(p.mouse_up_callback, mMouseUpSignal);
+	{
+		setMouseUpCallback(initCommitCallback(p.mouse_up_callback));
+	}
+}
+
+LLMultiSlider::~LLMultiSlider()
+{
+	delete mMouseDownSignal;
+	delete mMouseUpSignal;
 }
 
+
 void LLMultiSlider::setSliderValue(const std::string& name, F32 value, BOOL from_event)
 {
 	// exit if not there
@@ -325,7 +338,8 @@ BOOL LLMultiSlider::handleMouseUp(S32 x, S32 y, MASK mask)
 	{
 		gFocusMgr.setMouseCapture( NULL );
 
-		mMouseUpSignal( this, LLSD() );
+		if (mMouseUpSignal)
+			(*mMouseUpSignal)( this, LLSD() );
 
 		handled = TRUE;
 		make_ui_sound("UISndClickRelease");
@@ -345,7 +359,8 @@ BOOL LLMultiSlider::handleMouseDown(S32 x, S32 y, MASK mask)
 	{
 		setFocus(TRUE);
 	}
-	mMouseDownSignal( this, LLSD() );
+	if (mMouseDownSignal)
+		(*mMouseDownSignal)( this, LLSD() );
 
 	if (MASK_CONTROL & mask) // if CTRL is modifying
 	{
@@ -557,3 +572,15 @@ void LLMultiSlider::draw()
 
 	LLF32UICtrl::draw();
 }
+
+boost::signals2::connection LLMultiSlider::setMouseDownCallback( const commit_signal_t::slot_type& cb ) 
+{ 
+	if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t();
+	return mMouseDownSignal->connect(cb); 
+}
+
+boost::signals2::connection LLMultiSlider::setMouseUpCallback(	const commit_signal_t::slot_type& cb )   
+{ 
+	if (!mMouseUpSignal) mMouseUpSignal = new commit_signal_t();
+	return mMouseUpSignal->connect(cb); 
+}
diff --git a/indra/llui/llmultislider.h b/indra/llui/llmultislider.h
index da633cc1cd5017c10cb98be8751b6e82c16838da..f8e43a0470aa4a1d87b83f19a664c0bdb0977dcf 100644
--- a/indra/llui/llmultislider.h
+++ b/indra/llui/llmultislider.h
@@ -67,6 +67,7 @@ class LLMultiSlider : public LLF32UICtrl
 	LLMultiSlider(const Params&);
 	friend class LLUICtrlFactory;
 public:
+	virtual ~LLMultiSlider();
 	void			setSliderValue(const std::string& name, F32 value, BOOL from_event = FALSE);
 	F32				getSliderValue(const std::string& name) const;
 
@@ -78,8 +79,8 @@ class LLMultiSlider : public LLF32UICtrl
 	/*virtual*/ void	setValue(const LLSD& value);
 	/*virtual*/ LLSD	getValue() const		{ return mValue; }
 
-	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb ) { return mMouseDownSignal.connect(cb); }
-	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb )   { return mMouseUpSignal.connect(cb); }
+	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb );
+	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb );
 
 	bool			findUnusedValue(F32& initVal);
 	const std::string&	addSlider();
@@ -116,8 +117,8 @@ class LLMultiSlider : public LLF32UICtrl
 	LLUIColor		mDisabledThumbColor;
 	LLUIColor		mTriangleColor;
 	
-	commit_signal_t	mMouseDownSignal;
-	commit_signal_t	mMouseUpSignal;
+	commit_signal_t*	mMouseDownSignal;
+	commit_signal_t*	mMouseUpSignal;
 };
 
 #endif  // LL_MULTI_SLIDER_H
diff --git a/indra/llui/llmultisliderctrl.cpp b/indra/llui/llmultisliderctrl.cpp
index a9f462173dde1994bf47d5f4d0f9f4b5f81a3d0c..87938c19d4869efdbfa88a89ac213c198e9e991b 100644
--- a/indra/llui/llmultisliderctrl.cpp
+++ b/indra/llui/llmultisliderctrl.cpp
@@ -344,7 +344,7 @@ void LLMultiSliderCtrl::onEditorCommit( LLUICtrl* ctrl, const LLSD& userdata)
 		if( self->mMultiSlider->getMinValue() <= val && val <= self->mMultiSlider->getMaxValue() )
 		{
 			self->setCurSliderValue( val );  // set the value temporarily so that the callback can retrieve it.
-			if( self->mValidateSignal( self, val ) )
+			if( !self->mValidateSignal || (*(self->mValidateSignal))( self, val ) )
 			{
 				success = TRUE;
 			}
@@ -378,7 +378,7 @@ void LLMultiSliderCtrl::onSliderCommit(LLUICtrl* ctrl, const LLSD& userdata)
 	F32 new_val = self->mMultiSlider->getCurSliderValue();
 
 	self->mCurValue = new_val;  // set the value temporarily so that the callback can retrieve it.
-	if( self->mValidateSignal( self, new_val ) )
+	if( !self->mValidateSignal || (*(self->mValidateSignal))( self, new_val ) )
 	{
 		success = TRUE;
 	}
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 89c46562973ec4e39982c235933ebba96fc38884..063822dd567ce25064300d76754de622fa043a95 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -106,7 +106,8 @@ LLPanel::LLPanel(const LLPanel::Params& p)
 	mHelpTopic(p.help_topic),
 	mCommitCallbackRegistrar(false),
 	mEnableCallbackRegistrar(false),
-	mXMLFilename(p.filename)
+	mXMLFilename(p.filename),
+	mVisibleSignal(NULL)
 	// *NOTE: Be sure to also change LLPanel::initFromParams().  We have too
 	// many classes derived from LLPanel to retrofit them all to pass in params.
 {
@@ -118,6 +119,11 @@ LLPanel::LLPanel(const LLPanel::Params& p)
 	mPanelHandle.bind(this);
 }
 
+LLPanel::~LLPanel()
+{
+	delete mVisibleSignal;
+}
+
 // virtual
 BOOL LLPanel::isPanel() const
 {
@@ -332,7 +338,8 @@ BOOL LLPanel::handleKeyHere( KEY key, MASK mask )
 void LLPanel::handleVisibilityChange ( BOOL new_visibility )
 {
 	LLUICtrl::handleVisibilityChange ( new_visibility );
-	mVisibleSignal(this, LLSD(new_visibility) ); // Pass BOOL as LLSD
+	if (mVisibleSignal)
+		(*mVisibleSignal)(this, LLSD(new_visibility) ); // Pass BOOL as LLSD
 }
 
 void LLPanel::setFocus(BOOL b)
@@ -424,7 +431,9 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
 	
 	// visible callback 
 	if (p.visible_callback.isProvided())
-		initCommitCallback(p.visible_callback, mVisibleSignal);
+	{
+		setVisibleCallback(initCommitCallback(p.visible_callback));
+	}
 	
 	for (LLInitParam::ParamIterator<LocalizedString>::const_iterator it = p.strings().begin();
 		it != p.strings().end();
@@ -907,3 +916,13 @@ void LLPanel::childSetControlName(const std::string& id, const std::string& cont
 		view->setControlName(control_name, NULL);
 	}
 }
+
+boost::signals2::connection LLPanel::setVisibleCallback( const commit_signal_t::slot_type& cb )
+{
+	if (!mVisibleSignal)
+	{
+		mVisibleSignal = new commit_signal_t();
+	}
+
+	return mVisibleSignal->connect(cb);
+}
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index c213809d685a4d556ad3f044a1a6e6f435e4b803..0a0fed82fbddc1b994f2dcf4fbe5fb5937846367 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -109,7 +109,7 @@ class LLPanel : public LLUICtrl
 	
 public:
 // 	LLPanel(const std::string& name, const LLRect& rect = LLRect(), BOOL bordered = TRUE);
-	/*virtual*/ ~LLPanel() {}
+	/*virtual*/ ~LLPanel();
 
 	// LLView interface
 	/*virtual*/ BOOL 	isPanel() const;
@@ -241,6 +241,8 @@ class LLPanel : public LLUICtrl
 	void setXMLFilename(std::string filename) { mXMLFilename = filename; };
 	std::string getXMLFilename() { return mXMLFilename; };
 	
+	boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb );
+
 protected:
 	// Override to set not found list
 	LLButton*		getDefaultButton() { return mDefaultBtn; }
@@ -249,7 +251,7 @@ class LLPanel : public LLUICtrl
 	EnableCallbackRegistry::ScopedRegistrar mEnableCallbackRegistrar;
 	VisibleCallbackRegistry::ScopedRegistrar mVisibleCallbackRegistrar;
 
-	commit_signal_t mVisibleSignal;		// Called when visibility changes, passes new visibility as LLSD()
+	commit_signal_t* mVisibleSignal;		// Called when visibility changes, passes new visibility as LLSD()
 
 	std::string		mHelpTopic;         // the name of this panel's help topic to display in the Help Viewer
 	
diff --git a/indra/llui/llslider.cpp b/indra/llui/llslider.cpp
index da2fc7c68b2fb5209536d87456183f0514bf9720..a6f729b396a1aeb051ed0102999255233bfc537c 100644
--- a/indra/llui/llslider.cpp
+++ b/indra/llui/llslider.cpp
@@ -77,7 +77,9 @@ LLSlider::LLSlider(const LLSlider::Params& p)
 	mTrackImageHorizontal(p.track_image_horizontal),
 	mTrackImageVertical(p.track_image_vertical),
 	mTrackHighlightHorizontalImage(p.track_highlight_horizontal_image),
-	mTrackHighlightVerticalImage(p.track_highlight_vertical_image)
+	mTrackHighlightVerticalImage(p.track_highlight_vertical_image),
+	mMouseDownSignal(NULL),
+	mMouseUpSignal(NULL)
 {
     mViewModel->setValue(p.initial_value);
 	updateThumbRect();
@@ -86,9 +88,19 @@ LLSlider::LLSlider(const LLSlider::Params& p)
 	setValue(getValueF32());
 	
 	if (p.mouse_down_callback.isProvided())
-		initCommitCallback(p.mouse_down_callback, mMouseDownSignal);
+	{
+		setMouseDownCallback(initCommitCallback(p.mouse_down_callback));
+	}
 	if (p.mouse_up_callback.isProvided())
-		initCommitCallback(p.mouse_up_callback, mMouseUpSignal);
+	{
+		setMouseUpCallback(initCommitCallback(p.mouse_up_callback));
+	}
+}
+
+LLSlider::~LLSlider()
+{
+	delete mMouseDownSignal;
+	delete mMouseUpSignal;
 }
 
 void LLSlider::setValue(F32 value, BOOL from_event)
@@ -202,7 +214,8 @@ BOOL LLSlider::handleMouseUp(S32 x, S32 y, MASK mask)
 	{
 		gFocusMgr.setMouseCapture( NULL );
 
-		mMouseUpSignal( this, getValueF32() );
+		if (mMouseUpSignal)
+			(*mMouseUpSignal)( this, getValueF32() );
 
 		handled = TRUE;
 		make_ui_sound("UISndClickRelease");
@@ -222,7 +235,8 @@ BOOL LLSlider::handleMouseDown(S32 x, S32 y, MASK mask)
 	{
 		setFocus(TRUE);
 	}
-	mMouseDownSignal( this, getValueF32() );
+	if (mMouseDownSignal)
+		(*mMouseDownSignal)( this, getValueF32() );
 
 	if (MASK_CONTROL & mask) // if CTRL is modifying
 	{
@@ -364,3 +378,15 @@ void LLSlider::draw()
 	
 	LLUICtrl::draw();
 }
+
+boost::signals2::connection LLSlider::setMouseDownCallback( const commit_signal_t::slot_type& cb ) 
+{ 
+	if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t();
+	return mMouseDownSignal->connect(cb); 
+}
+
+boost::signals2::connection LLSlider::setMouseUpCallback(	const commit_signal_t::slot_type& cb )   
+{ 
+	if (!mMouseUpSignal) mMouseUpSignal = new commit_signal_t();
+	return mMouseUpSignal->connect(cb); 
+}
diff --git a/indra/llui/llslider.h b/indra/llui/llslider.h
index 6ab0ed79220f8bc9228040944e4ec25a25b6f19c..45f8f81e409af8f8b8ca26f0cdc17239d3331986 100644
--- a/indra/llui/llslider.h
+++ b/indra/llui/llslider.h
@@ -67,6 +67,7 @@ class LLSlider : public LLF32UICtrl
 	LLSlider(const Params&);
 	friend class LLUICtrlFactory;
 public:
+	virtual ~LLSlider();
 	void			setValue( F32 value, BOOL from_event = FALSE );
     // overrides for LLF32UICtrl methods
 	virtual void	setValue(const LLSD& value )	{ setValue((F32)value.asReal(), TRUE); }
@@ -76,8 +77,8 @@ class LLSlider : public LLF32UICtrl
 	virtual void	setMinValue(F32 min_value) { LLF32UICtrl::setMinValue(min_value); updateThumbRect(); }
 	virtual void	setMaxValue(F32 max_value) { LLF32UICtrl::setMaxValue(max_value); updateThumbRect(); }
 
-	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb ) { return mMouseDownSignal.connect(cb); }
-	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb )   { return mMouseUpSignal.connect(cb); }
+	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb );
+	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb );
 
 	virtual BOOL	handleHover(S32 x, S32 y, MASK mask);
 	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask);
@@ -109,8 +110,8 @@ class LLSlider : public LLF32UICtrl
 	LLUIColor	mThumbOutlineColor;
 	LLUIColor	mThumbCenterColor;
 	
-	commit_signal_t	mMouseDownSignal;
-	commit_signal_t	mMouseUpSignal;
+	commit_signal_t*	mMouseDownSignal;
+	commit_signal_t*	mMouseUpSignal;
 };
 
 #endif  // LL_LLSLIDER_H
diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp
index ed22c0a47f8ac07ea994edf0d85e6fb0102e18af..01c274bb4eb62cb683fd5357a9df50ad43561241 100644
--- a/indra/llui/llsliderctrl.cpp
+++ b/indra/llui/llsliderctrl.cpp
@@ -122,7 +122,8 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p)
 	slider_p.min_value.setIfNotProvided(p.min_value);
 	slider_p.max_value.setIfNotProvided(p.max_value);
 	slider_p.increment.setIfNotProvided(p.increment);
-
+	slider_p.orientation.setIfNotProvided(p.orientation);
+	
 	slider_p.commit_callback.function(&LLSliderCtrl::onSliderCommit);
 	slider_p.control_name(p.control_name);
 	slider_p.mouse_down_callback( p.mouse_down_callback );
@@ -260,7 +261,7 @@ void LLSliderCtrl::onEditorCommit( LLUICtrl* ctrl, const LLSD& userdata )
 		if( self->mSlider->getMinValue() <= val && val <= self->mSlider->getMaxValue() )
 		{
 			self->setValue( val );  // set the value temporarily so that the callback can retrieve it.
-			if( self->mValidateSignal( self, val ) )
+			if( !self->mValidateSignal || (*(self->mValidateSignal))( self, val ) )
 			{
 				success = TRUE;
 			}
@@ -294,7 +295,7 @@ void LLSliderCtrl::onSliderCommit( LLUICtrl* ctrl, const LLSD& userdata )
 	F32 new_val = self->mSlider->getValueF32();
 
 	self->mValue = new_val;  // set the value temporarily so that the callback can retrieve it.
-	if( self->mValidateSignal( self, new_val ) )
+	if( !self->mValidateSignal || (*(self->mValidateSignal))( self, new_val ) )
 	{
 		success = TRUE;
 	}
diff --git a/indra/llui/llsliderctrl.h b/indra/llui/llsliderctrl.h
index 4a1574d502110352a5fff000bd8f4d3425c48a86..c425849782245e45806aff1b48f6a621b3bed39b 100644
--- a/indra/llui/llsliderctrl.h
+++ b/indra/llui/llsliderctrl.h
@@ -46,6 +46,7 @@ class LLSliderCtrl : public LLF32UICtrl
 public:
 	struct Params : public LLInitParam::Block<Params, LLF32UICtrl::Params>
 	{
+		Optional<std::string>   orientation;
 		Optional<S32>			label_width;
 		Optional<S32>			text_width;
 		Optional<bool>			show_text;
@@ -78,7 +79,8 @@ class LLSliderCtrl : public LLF32UICtrl
 			value_text("value_text"),
 			slider_label("slider_label"),
 			mouse_down_callback("mouse_down_callback"),
-			mouse_up_callback("mouse_up_callback")
+			mouse_up_callback("mouse_up_callback"),
+			orientation("orientation", std::string ("horizontal"))
 		{}
 	};
 protected:
diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp
index bedf16a397ddd7845f94bf7196a65601f1bc7108..d6d46654d57003bff84c31b680d2ee45b153dcb9 100644
--- a/indra/llui/llspinctrl.cpp
+++ b/indra/llui/llspinctrl.cpp
@@ -190,7 +190,7 @@ void LLSpinCtrl::onUpBtn( const LLSD& data )
 		
 			F32 saved_val = (F32)getValue().asReal();
 			setValue(val);
-			if( !mValidateSignal( this, val ) )
+			if( mValidateSignal && !(*mValidateSignal)( this, val ) )
 			{
 				setValue( saved_val );
 				reportInvalidData();
@@ -224,7 +224,7 @@ void LLSpinCtrl::onDownBtn( const LLSD& data )
 			
 			F32 saved_val = (F32)getValue().asReal();
 			setValue(val);
-			if( !mValidateSignal( this, val ) )
+			if( mValidateSignal && !(*mValidateSignal)( this, val ) )
 			{
 				setValue( saved_val );
 				reportInvalidData();
@@ -316,7 +316,7 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
 
 		F32 saved_val = getValueF32();
 		setValue(val);
-		if( mValidateSignal( this, val ) )
+		if( !mValidateSignal || (*mValidateSignal)( this, val ) )
 		{
 			success = TRUE;
 			onCommit();
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index f5d81748206271588011911e90e5ac08653dbca4..d7d61cf6cb1cc0c50f46b75c7a837d673ace3b76 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -1339,12 +1339,12 @@ BOOL LLTabContainer::selectTab(S32 which)
 		cbdata = selected_tuple->mTabPanel->getName();
 
 	BOOL res = FALSE;
-	if( mValidateSignal( this, cbdata ) )
+	if( !mValidateSignal || (*mValidateSignal)( this, cbdata ) )
 	{
 		res = setTab(which);
-		if (res)
+		if (res && mCommitSignal)
 		{
-			mCommitSignal(this, cbdata);
+			(*mCommitSignal)(this, cbdata);
 		}
 	}
 	
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index e210667764bbabc96a54128c33727a7792202f5c..3619b36c0d825eb3f48b8aad644719b29e5918e2 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -60,6 +60,11 @@ LLTextBase::line_info::line_info(S32 index_start, S32 index_end, LLRect rect, S3
 
 bool LLTextBase::compare_segment_end::operator()(const LLTextSegmentPtr& a, const LLTextSegmentPtr& b) const
 {
+	// sort empty spans (e.g. 11-11) after previous non-empty spans (e.g. 5-11)
+	if (a->getEnd() == b->getEnd())
+	{
+		return a->getStart() < b->getStart();
+	}
 	return a->getEnd() < b->getEnd();
 }
 
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 224f066968e61e83ade164b98fcb18e8a08fadf7..3f4ef24f82a85b82daaf61312fd0e13ad0d26347 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -750,8 +750,10 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)
 	{
 		if( mIsSelecting ) 
 		{
-			mScroller->autoScroll(x, y);
-
+			if(mScroller)
+			{	
+				mScroller->autoScroll(x, y);
+			}
 			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);
 			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);
 			setCursorAtLocalPos( clamped_x, clamped_y, true );
@@ -799,7 +801,10 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
 	{
 		if( mIsSelecting )
 		{
-			mScroller->autoScroll(x, y);
+			if(mScroller)
+			{
+				mScroller->autoScroll(x, y);
+			}
 			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);
 			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);
 			setCursorAtLocalPos( clamped_x, clamped_y, true );
@@ -1696,7 +1701,15 @@ BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask )
 	*/
 	if (mReadOnly)
 	{
-		handled = mScroller->handleKeyHere( key, mask );
+		if(mScroller)
+		{
+			handled = mScroller->handleKeyHere( key, mask );
+		}
+		else 
+		{
+			handled = handleNavigationKey( key, mask );
+		}
+
 	}
 	else
 	{
@@ -2135,9 +2148,8 @@ void LLTextEditor::drawPreeditMarker()
 void LLTextEditor::drawLineNumbers()
 {
 	LLGLSUIDefault gls_ui;
-
-	LLRect scrolled_view_rect = mScroller->getVisibleContentRect();
-	LLRect content_rect = mScroller->getContentWindowRect();
+	LLRect scrolled_view_rect = getVisibleDocumentRect();
+	LLRect content_rect = getTextRect();	
 	LLLocalClipRect clip(content_rect);
 	S32 first_line = getFirstVisibleLine();
 	S32 num_lines = getLineCount();
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index 08fc8fb7849203697e2e183446b80ba4709356bb..a30d5b4651d30daeede064016bf8e3404df5905d 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -78,7 +78,16 @@ LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)
 	mEnabledControlVariable(NULL),
 	mDisabledControlVariable(NULL),
 	mMakeVisibleControlVariable(NULL),
-	mMakeInvisibleControlVariable(NULL)
+	mMakeInvisibleControlVariable(NULL),
+	mCommitSignal(NULL),
+	mValidateSignal(NULL),
+	mMouseEnterSignal(NULL),
+	mMouseLeaveSignal(NULL),
+	mMouseDownSignal(NULL),
+	mMouseUpSignal(NULL),
+	mRightMouseDownSignal(NULL),
+	mRightMouseUpSignal(NULL),
+	mDoubleClickSignal(NULL)
 {
 	mUICtrlHandle.bind(this);
 }
@@ -129,10 +138,14 @@ void LLUICtrl::initFromParams(const Params& p)
 	}
 	
 	if (p.commit_callback.isProvided())
-		initCommitCallback(p.commit_callback, mCommitSignal);
+	{
+		setCommitCallback(initCommitCallback(p.commit_callback));
+	}
 	
 	if (p.validate_callback.isProvided())
-		initEnableCallback(p.validate_callback, mValidateSignal);
+	{
+		setValidateCallback(initEnableCallback(p.validate_callback));
+	}
 	
 	if (p.init_callback.isProvided())
 	{
@@ -151,10 +164,14 @@ void LLUICtrl::initFromParams(const Params& p)
 	}
 
 	if(p.mouseenter_callback.isProvided())
-		initCommitCallback(p.mouseenter_callback, mMouseEnterSignal);
+	{
+		setMouseEnterCallback(initCommitCallback(p.mouseenter_callback));
+	}
 
 	if(p.mouseleave_callback.isProvided())
-		initCommitCallback(p.mouseleave_callback, mMouseLeaveSignal);
+	{
+		setMouseLeaveCallback(initCommitCallback(p.mouseleave_callback));
+	}
 }
 
 
@@ -167,16 +184,40 @@ LLUICtrl::~LLUICtrl()
 		llwarns << "UI Control holding top ctrl deleted: " << getName() << ".  Top view removed." << llendl;
 		gFocusMgr.removeTopCtrlWithoutCallback( this );
 	}
+
+	delete mCommitSignal;
+	delete mValidateSignal;
+	delete mMouseEnterSignal;
+	delete mMouseLeaveSignal;
+	delete mMouseDownSignal;
+	delete mMouseUpSignal;
+	delete mRightMouseDownSignal;
+	delete mRightMouseUpSignal;
+	delete mDoubleClickSignal;
 }
 
-void LLUICtrl::initCommitCallback(const CommitCallbackParam& cb, commit_signal_t& sig)
+void default_commit_handler(LLUICtrl* ctrl, const LLSD& param)
+{}
+
+bool default_enable_handler(LLUICtrl* ctrl, const LLSD& param)
+{
+	return true;
+}
+
+bool default_visible_handler(LLUICtrl* ctrl, const LLSD& param)
+{
+	return true;
+}
+
+
+LLUICtrl::commit_signal_t::slot_type LLUICtrl::initCommitCallback(const CommitCallbackParam& cb)
 {
 	if (cb.function.isProvided())
 	{
 		if (cb.parameter.isProvided())
-			sig.connect(boost::bind(cb.function(), _1, cb.parameter));
+			return boost::bind(cb.function(), _1, cb.parameter);
 		else
-			sig.connect(cb.function());
+			return cb.function();
 	}
 	else
 	{
@@ -185,26 +226,27 @@ void LLUICtrl::initCommitCallback(const CommitCallbackParam& cb, commit_signal_t
 		if (func)
 		{
 			if (cb.parameter.isProvided())
-				sig.connect(boost::bind((*func), _1, cb.parameter));
+				return boost::bind((*func), _1, cb.parameter);
 			else
-				sig.connect(*func);
+				return commit_signal_t::slot_type(*func);
 		}
 		else if (!function_name.empty())
 		{
 			llwarns << "No callback found for: '" << function_name << "' in control: " << getName() << llendl;
 		}			
 	}
+	return default_commit_handler;
 }
 
-void LLUICtrl::initEnableCallback(const EnableCallbackParam& cb, enable_signal_t& sig)
+LLUICtrl::enable_signal_t::slot_type LLUICtrl::initEnableCallback(const EnableCallbackParam& cb)
 {
 	// Set the callback function
 	if (cb.function.isProvided())
 	{
 		if (cb.parameter.isProvided())
-			sig.connect(boost::bind(cb.function(), this, cb.parameter));
+			return boost::bind(cb.function(), this, cb.parameter);
 		else
-			sig.connect(cb.function());
+			return cb.function();
 	}
 	else
 	{
@@ -212,22 +254,23 @@ void LLUICtrl::initEnableCallback(const EnableCallbackParam& cb, enable_signal_t
 		if (func)
 		{
 			if (cb.parameter.isProvided())
-				sig.connect(boost::bind((*func), this, cb.parameter));
+				return boost::bind((*func), this, cb.parameter);
 			else
-				sig.connect(*func);
+				return enable_signal_t::slot_type(*func);
 		}
 	}
+	return default_enable_handler;
 }
 
-void LLUICtrl::initVisibleCallback(const VisibleCallbackParam& cb, visible_signal_t& sig)
+LLUICtrl::visible_signal_t::slot_type LLUICtrl::initVisibleCallback(const VisibleCallbackParam& cb)
 {
 	// Set the callback function
 	if (cb.function.isProvided())
 	{
 		if (cb.parameter.isProvided())
-			sig.connect(boost::bind(cb.function(), this, cb.parameter));
+			return boost::bind(cb.function(), this, cb.parameter);
 		else
-			sig.connect(cb.function());
+			return cb.function();
 	}
 	else
 	{
@@ -235,30 +278,40 @@ void LLUICtrl::initVisibleCallback(const VisibleCallbackParam& cb, visible_signa
 		if (func)
 		{
 			if (cb.parameter.isProvided())
-				sig.connect(boost::bind((*func), this, cb.parameter));
+				return boost::bind((*func), this, cb.parameter);
 			else
-				sig.connect(*func);
+				return visible_signal_t::slot_type(*func);
 		}
 	}
+	return default_visible_handler;
 }
 
 // virtual
 void LLUICtrl::onMouseEnter(S32 x, S32 y, MASK mask)
 {
-	mMouseEnterSignal(this, getValue());
+	if (mMouseEnterSignal)
+	{
+		(*mMouseEnterSignal)(this, getValue());
+	}
 }
 
 // virtual
 void LLUICtrl::onMouseLeave(S32 x, S32 y, MASK mask)
 {
-	mMouseLeaveSignal(this, getValue());
+	if(mMouseLeaveSignal)
+	{
+		(*mMouseLeaveSignal)(this, getValue());
+	}
 }
 
 //virtual 
 BOOL LLUICtrl::handleMouseDown(S32 x, S32 y, MASK mask)
 {
 	BOOL handled  = LLView::handleMouseDown(x,y,mask);
-	mMouseDownSignal(this,x,y,mask);
+	if (mMouseDownSignal)
+	{
+		(*mMouseDownSignal)(this,x,y,mask);
+	}
 	return handled;
 }
 
@@ -266,7 +319,10 @@ BOOL LLUICtrl::handleMouseDown(S32 x, S32 y, MASK mask)
 BOOL LLUICtrl::handleMouseUp(S32 x, S32 y, MASK mask)
 {
 	BOOL handled  = LLView::handleMouseUp(x,y,mask);
-	mMouseUpSignal(this,x,y,mask);
+	if (mMouseUpSignal)
+	{
+		(*mMouseUpSignal)(this,x,y,mask);
+	}
 	return handled;
 }
 
@@ -274,7 +330,10 @@ BOOL LLUICtrl::handleMouseUp(S32 x, S32 y, MASK mask)
 BOOL LLUICtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
 {
 	BOOL handled  = LLView::handleRightMouseDown(x,y,mask);
-	mRightMouseDownSignal(this,x,y,mask);
+	if (mRightMouseDownSignal)
+	{
+		(*mRightMouseDownSignal)(this,x,y,mask);
+	}
 	return handled;
 }
 
@@ -282,14 +341,20 @@ BOOL LLUICtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
 BOOL LLUICtrl::handleRightMouseUp(S32 x, S32 y, MASK mask)
 {
 	BOOL handled  = LLView::handleRightMouseUp(x,y,mask);
-	mRightMouseUpSignal(this,x,y,mask);
+	if(mRightMouseUpSignal)
+	{
+		(*mRightMouseUpSignal)(this,x,y,mask);
+	}
 	return handled;
 }
 
 BOOL LLUICtrl::handleDoubleClick(S32 x, S32 y, MASK mask)
 {
 	BOOL handled = LLView::handleDoubleClick(x, y, mask);
-	mDoubleClickSignal(this, x, y, mask);
+	if (mDoubleClickSignal)
+	{
+		(*mDoubleClickSignal)(this, x, y, mask);
+	}
 	return handled;
 }
 
@@ -302,7 +367,8 @@ BOOL LLUICtrl::canFocusChildren() const
 
 void LLUICtrl::onCommit()
 {
-	mCommitSignal(this, getValue());
+	if (mCommitSignal)
+	(*mCommitSignal)(this, getValue());
 }
 
 //virtual
@@ -832,7 +898,8 @@ boost::signals2::connection LLUICtrl::setCommitCallback( boost::function<void (L
 }
 boost::signals2::connection LLUICtrl::setValidateBeforeCommit( boost::function<bool (const LLSD& data)> cb )
 {
-	return mValidateSignal.connect(boost::bind(cb, _2));
+	if (!mValidateSignal) mValidateSignal = new enable_signal_t();
+	return mValidateSignal->connect(boost::bind(cb, _2));
 }
 
 // virtual
@@ -850,3 +917,57 @@ BOOL LLUICtrl::getTentative() const
 // virtual
 void LLUICtrl::setColor(const LLColor4& color)							
 { }
+
+boost::signals2::connection LLUICtrl::setCommitCallback( const commit_signal_t::slot_type& cb ) 
+{ 
+	if (!mCommitSignal) mCommitSignal = new commit_signal_t();
+	return mCommitSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setValidateCallback( const enable_signal_t::slot_type& cb ) 
+{ 
+	if (!mValidateSignal) mValidateSignal = new enable_signal_t();
+	return mValidateSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setMouseEnterCallback( const commit_signal_t::slot_type& cb ) 
+{ 
+	if (!mMouseEnterSignal) mMouseEnterSignal = new commit_signal_t();
+	return mMouseEnterSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setMouseLeaveCallback( const commit_signal_t::slot_type& cb ) 
+{ 
+	if (!mMouseLeaveSignal) mMouseLeaveSignal = new commit_signal_t();
+	return mMouseLeaveSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setMouseDownCallback( const mouse_signal_t::slot_type& cb ) 
+{ 
+	if (!mMouseDownSignal) mMouseDownSignal = new mouse_signal_t();
+	return mMouseDownSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setMouseUpCallback( const mouse_signal_t::slot_type& cb ) 
+{ 
+	if (!mMouseUpSignal) mMouseUpSignal = new mouse_signal_t();
+	return mMouseUpSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setRightMouseDownCallback( const mouse_signal_t::slot_type& cb ) 
+{ 
+	if (!mRightMouseDownSignal) mRightMouseDownSignal = new mouse_signal_t();
+	return mRightMouseDownSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setRightMouseUpCallback( const mouse_signal_t::slot_type& cb ) 
+{ 
+	if (!mRightMouseUpSignal) mRightMouseUpSignal = new mouse_signal_t();
+	return mRightMouseUpSignal->connect(cb); 
+}
+
+boost::signals2::connection LLUICtrl::setDoubleClickCallback( const mouse_signal_t::slot_type& cb ) 
+{ 
+	if (!mDoubleClickSignal) mDoubleClickSignal = new mouse_signal_t();
+	return mDoubleClickSignal->connect(cb); 
+}
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index dd22851100b0f3cf081ed5c32dee8266b1da76e9..aef1bcd5194341e7d545956f2b155628e63d6398 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -162,9 +162,9 @@ class LLUICtrl
 	LLUICtrl(const Params& p = getDefaultParams(),
              const LLViewModelPtr& viewmodel=LLViewModelPtr(new LLViewModel));
 	
-	void initCommitCallback(const CommitCallbackParam& cb, commit_signal_t& sig);
-	void initEnableCallback(const EnableCallbackParam& cb, enable_signal_t& sig);
-	void initVisibleCallback(const VisibleCallbackParam& cb, visible_signal_t& sig);
+	commit_signal_t::slot_type initCommitCallback(const CommitCallbackParam& cb);
+	enable_signal_t::slot_type initEnableCallback(const EnableCallbackParam& cb);
+	visible_signal_t::slot_type initVisibleCallback(const VisibleCallbackParam& cb);
 
 	// We need this virtual so we can override it with derived versions
 	virtual LLViewModel* getViewModel() const;
@@ -254,18 +254,18 @@ class LLUICtrl
 	// topic then put in help_topic_out
 	bool                    findHelpTopic(std::string& help_topic_out);
 
-	boost::signals2::connection setCommitCallback( const commit_signal_t::slot_type& cb ) { return mCommitSignal.connect(cb); }
-	boost::signals2::connection setValidateCallback( const enable_signal_t::slot_type& cb ) { return mValidateSignal.connect(cb); }
+	boost::signals2::connection setCommitCallback( const commit_signal_t::slot_type& cb );
+	boost::signals2::connection setValidateCallback( const enable_signal_t::slot_type& cb );
 
-	boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb ) { return mMouseEnterSignal.connect(cb); }
-	boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb ) { return mMouseLeaveSignal.connect(cb); }
+	boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb );
+	boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb );
 	
-	boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb ) { return mMouseDownSignal.connect(cb); }
-	boost::signals2::connection setMouseUpCallback( const mouse_signal_t::slot_type& cb ) { return mMouseUpSignal.connect(cb); }
-	boost::signals2::connection setRightMouseDownCallback( const mouse_signal_t::slot_type& cb ) { return mRightMouseDownSignal.connect(cb); }
-	boost::signals2::connection setRightMouseUpCallback( const mouse_signal_t::slot_type& cb ) { return mRightMouseUpSignal.connect(cb); }
+	boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb );
+	boost::signals2::connection setMouseUpCallback( const mouse_signal_t::slot_type& cb );
+	boost::signals2::connection setRightMouseDownCallback( const mouse_signal_t::slot_type& cb );
+	boost::signals2::connection setRightMouseUpCallback( const mouse_signal_t::slot_type& cb );
 	
-	boost::signals2::connection setDoubleClickCallback( const mouse_signal_t::slot_type& cb ) { return mDoubleClickSignal.connect(cb); }
+	boost::signals2::connection setDoubleClickCallback( const mouse_signal_t::slot_type& cb );
 
 	// *TODO: Deprecate; for backwards compatability only:
 	boost::signals2::connection setCommitCallback( boost::function<void (LLUICtrl*,void*)> cb, void* data);	
@@ -293,18 +293,18 @@ class LLUICtrl
 
 	static bool controlListener(const LLSD& newvalue, LLHandle<LLUICtrl> handle, std::string type);
 
-	commit_signal_t		mCommitSignal;
-	enable_signal_t		mValidateSignal;
+	commit_signal_t*		mCommitSignal;
+	enable_signal_t*		mValidateSignal;
 
-	commit_signal_t		mMouseEnterSignal;
-	commit_signal_t		mMouseLeaveSignal;
+	commit_signal_t*		mMouseEnterSignal;
+	commit_signal_t*		mMouseLeaveSignal;
 	
-	mouse_signal_t		mMouseDownSignal;
-	mouse_signal_t		mMouseUpSignal;
-	mouse_signal_t		mRightMouseDownSignal;
-	mouse_signal_t		mRightMouseUpSignal;
+	mouse_signal_t*		mMouseDownSignal;
+	mouse_signal_t*		mMouseUpSignal;
+	mouse_signal_t*		mRightMouseDownSignal;
+	mouse_signal_t*		mRightMouseUpSignal;
 
-	mouse_signal_t		mDoubleClickSignal;
+	mouse_signal_t*		mDoubleClickSignal;
 	
     LLViewModelPtr  mViewModel;
 
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index 318a0348a2aec14e5b06b545f034939dbb52498f..4c050844f86691e41deacade72d0b56027ee2332 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -46,7 +46,7 @@ namespace LLInitParam
 	{
 		const U8* my_addr = reinterpret_cast<const U8*>(this);
 		const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
-		mEnclosingBlockOffset = (S16)(block_addr - my_addr);
+		mEnclosingBlockOffset = (U16)(my_addr - block_addr);
 	}
 
 	//
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 9fb464ca7b9c4809a16233c4089009389401a2ad..493ddaa3785d118543035b876dd2f0d77d017415 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -300,14 +300,14 @@ namespace LLInitParam
 			const U8* my_addr = reinterpret_cast<const U8*>(this);
 			// get address of enclosing BLOCK class using stored offset to enclosing BaseBlock class
 			return *const_cast<BaseBlock*>(
-							reinterpret_cast<const BaseBlock*>(my_addr + (ptrdiff_t)mEnclosingBlockOffset));
+							reinterpret_cast<const BaseBlock*>(my_addr - (ptrdiff_t)(S32)mEnclosingBlockOffset));
 		}
 
 	private:
 		friend class BaseBlock;
 
 		bool		mIsProvided;
-		S16			mEnclosingBlockOffset;
+		U16			mEnclosingBlockOffset;
 	};
 
 	// various callbacks and constraints associated with an individual param
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e8302ab5eb109a554b6bb4412c9da312cef98592..611875a1e2dd32f26eb5214c06eccf244a001af6 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -239,6 +239,7 @@ set(viewer_SOURCE_FILES
     llhudtext.cpp
     llhudview.cpp
     llimfloater.cpp
+    llimfloatercontainer.cpp
     llimhandler.cpp
     llimpanel.cpp
     llimview.cpp
@@ -364,6 +365,7 @@ set(viewer_SOURCE_FILES
     llremoteparcelrequest.cpp
     llsavedsettingsglue.cpp
     llscreenchannel.cpp
+    llscriptfloater.cpp
     llscrollingpanelparam.cpp
     llsearchcombobox.cpp
     llsearchhistory.cpp
@@ -737,6 +739,7 @@ set(viewer_HEADER_FILES
     llhudtext.h
     llhudview.h
     llimfloater.h
+    llimfloatercontainer.h
     llimpanel.h
     llimview.h
     llinspect.h
@@ -860,6 +863,7 @@ set(viewer_HEADER_FILES
     llrootview.h
     llsavedsettingsglue.h
     llscreenchannel.h
+    llscriptfloater.h
     llscrollingpanelparam.h
     llsearchcombobox.h
     llsearchhistory.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c7279a2e333e2e063f286261e89c5a304a7460b2..075aee46c757dcf97169c568eebb228c978b1b46 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3585,7 +3585,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://docs.lindenlab.com/help/helpfloater.php?topic=[TOPIC]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;os=[OS]&amp;language=[LANGUAGE]&amp;version_major=[VERSION_MAJOR]&amp;version_minor=[VERSION_MINOR]&amp;version_patch=[VERSION_PATCH]&amp;version_build=[VERSION_BUILD]</string>
+      <string>http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC]</string>
     </map>
     <key>HighResSnapshot</key>
     <map>
@@ -5371,6 +5371,19 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
+    
+   <key>PlainTextChatHistory</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable/Disable plain text chat history style</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    
     <key>PluginInstancesLow</key>
     <map>
       <key>Comment</key>
@@ -7709,10 +7722,10 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>ShowCoordinatesOption</key>
+    <key>NavBarShowCoordinates</key>
     <map>
       <key>Comment</key>
-      <string>Show Coordinates in  Location Input Field</string>
+      <string>Show coordinates in navigation bar</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -7720,6 +7733,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>NavBarShowParcelProperties</key>
+    <map>
+      <key>Comment</key>
+      <string>Show parcel property icons in navigation bar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>ShowCrosshairs</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 4dd569e2fab456293128e18ff742bdb0aa2109a9..eb5d172ff7d7689f534d98d82f5f132a978f4db2 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2795,7 +2795,8 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLBottomTray::getInstance()->setVisible(TRUE);
 
-		LLSideTray::getInstance()->setVisible(TRUE);
+		LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
+		LLSideTray::getInstance()->updateSidetrayVisibility();
 
 		LLPanelStandStopFlying::getInstance()->setVisible(TRUE);
 
@@ -2893,7 +2894,8 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLBottomTray::getInstance()->setVisible(FALSE);
 
-		LLSideTray::getInstance()->setVisible(FALSE);
+		LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
+		LLSideTray::getInstance()->updateSidetrayVisibility();
 
 		LLPanelStandStopFlying::getInstance()->setVisible(FALSE);
 
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 568ac4164ac154db08c1c45cc3e3a2d560ff2b44..7404fe5bc4726b0324cec3686ba3d6d4f15a6d8d 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -130,6 +130,7 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
 	// create a default name and description for the landmark
 	std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName();
 	std::string region_name = region->getName();
+	std::string sim_access_string = region->getSimAccessString();
 	std::string buffer;
 	if( parcel_name.empty() )
 	{
@@ -142,7 +143,13 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
 		case LOCATION_FORMAT_NORMAL:
 			buffer = llformat("%s", region_name.c_str());
 			break;
-		case LOCATION_FORMAT_WITHOUT_SIM:
+		case LOCATION_FORMAT_NO_COORDS:
+			buffer = llformat("%s%s%s",
+				region_name.c_str(),
+				sim_access_string.empty() ? "" : " - ",
+				sim_access_string.c_str());
+			break;
+		case LOCATION_FORMAT_NO_MATURITY:
 		case LOCATION_FORMAT_FULL:
 			buffer = llformat("%s (%d, %d, %d)",
 				region_name.c_str(),
@@ -161,14 +168,20 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
 		case LOCATION_FORMAT_NORMAL:
 			buffer = llformat("%s, %s", parcel_name.c_str(), region_name.c_str());
 			break;
-		case LOCATION_FORMAT_WITHOUT_SIM:
+		case LOCATION_FORMAT_NO_MATURITY:
 			buffer = llformat("%s, %s (%d, %d, %d)",
 				parcel_name.c_str(),
 				region_name.c_str(),
 				pos_x, pos_y, pos_z);
 			break;
+		case LOCATION_FORMAT_NO_COORDS:
+			buffer = llformat("%s, %s%s%s",
+							  parcel_name.c_str(),
+							  region_name.c_str(),
+							  sim_access_string.empty() ? "" : " - ",
+							  sim_access_string.c_str());
+				break;
 		case LOCATION_FORMAT_FULL:
-			std::string sim_access_string = region->getSimAccessString();
 			buffer = llformat("%s, %s (%d, %d, %d)%s%s",
 				parcel_name.c_str(),
 				region_name.c_str(),
diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h
index c7aafb71e7b9db4f8b1c4c64c245963a37284df6..3478793e38f3f198c5e4af2ca5b24a6892d03c8b 100644
--- a/indra/newview/llagentui.h
+++ b/indra/newview/llagentui.h
@@ -38,10 +38,11 @@ class LLAgentUI
 public:
 	enum ELocationFormat
 	{
-		LOCATION_FORMAT_NORMAL,
-		LOCATION_FORMAT_LANDMARK,
-		LOCATION_FORMAT_WITHOUT_SIM,
-		LOCATION_FORMAT_FULL,
+		LOCATION_FORMAT_NORMAL,			// Parcel
+		LOCATION_FORMAT_LANDMARK,		// Parcel, Region
+		LOCATION_FORMAT_NO_MATURITY,	// Parcel, Region (x, y, z)
+		LOCATION_FORMAT_NO_COORDS,		// Parcel, Region - Maturity
+		LOCATION_FORMAT_FULL,			// Parcel, Region (x, y, z) - Maturity
 	};
 
 	static void buildName(std::string& name);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 4f2d3e96455538de5a1d5100623b720bfff3bf19..fa0ea557ba5aa92d65b1414fcd1daca9c939d6d3 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1360,19 +1360,25 @@ bool LLAppViewer::cleanup()
 		llinfos << "Waiting for pending IO to finish: " << pending << llendflush;
 		ms_sleep(100);
 	}
-	llinfos << "Shutting down." << llendflush;
+	llinfos << "Shutting down Views" << llendflush;
 
 	// Destroy the UI
 	if( gViewerWindow)
 		gViewerWindow->shutdownViews();
+
+	llinfos << "Cleaning up Inevntory" << llendflush;
 	
 	// Cleanup Inventory after the UI since it will delete any remaining observers
 	// (Deleted observers should have already removed themselves)
 	gInventory.cleanupInventory();
+
+	llinfos << "Cleaning up Selections" << llendflush;
 	
 	// Clean up selection managers after UI is destroyed, as UI may be observing them.
 	// Clean up before GL is shut down because we might be holding on to objects with texture references
 	LLSelectMgr::cleanupGlobals();
+	
+	llinfos << "Shutting down OpenGL" << llendflush;
 
 	// Shut down OpenGL
 	if( gViewerWindow)
@@ -1386,11 +1392,18 @@ bool LLAppViewer::cleanup()
 		gViewerWindow = NULL;
 		llinfos << "ViewerWindow deleted" << llendflush;
 	}
+
+	llinfos << "Cleaning up Keyboard & Joystick" << llendflush;
 	
 	// viewer UI relies on keyboard so keep it aound until viewer UI isa gone
 	delete gKeyboard;
 	gKeyboard = NULL;
 
+	// Turn off Space Navigator and similar devices
+	LLViewerJoystick::getInstance()->terminate();
+	
+	llinfos << "Cleaning up Objects" << llendflush;
+	
 	LLViewerObject::cleanupVOClasses();
 
 	LLWaterParamManager::cleanupClass();
@@ -1413,6 +1426,8 @@ bool LLAppViewer::cleanup()
 	}
 	LLPrimitive::cleanupVolumeManager();
 
+	llinfos << "Additional Cleanup..." << llendflush;	
+	
 	LLViewerParcelMgr::cleanupGlobals();
 
 	// *Note: this is where gViewerStats used to be deleted.
@@ -1432,9 +1447,11 @@ bool LLAppViewer::cleanup()
 	// Also after shutting down the messaging system since it has VFS dependencies
 
 	//
+	llinfos << "Cleaning up VFS" << llendflush;
 	LLVFile::cleanupClass();
-	llinfos << "VFS cleaned up" << llendflush;
 
+	llinfos << "Saving Data" << llendflush;
+	
 	// Quitting with "Remember Password" turned off should always stomp your
 	// saved password, whether or not you successfully logged in.  JC
 	if (!gSavedSettings.getBOOL("RememberPassword"))
@@ -1476,13 +1493,16 @@ bool LLAppViewer::cleanup()
 		gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),mask);
 	}
 
-	// Turn off Space Navigator and similar devices
-	LLViewerJoystick::getInstance()->terminate();
-
 	removeMarkerFile(); // Any crashes from here on we'll just have to ignore
 	
 	writeDebugInfo();
 
+	LLLocationHistory::getInstance()->save();
+
+	LLAvatarIconIDCache::getInstance()->save();
+
+	llinfos << "Shutting down Threads" << llendflush;
+	
 	// Let threads finish
 	LLTimer idleTimer;
 	idleTimer.reset();
@@ -1515,14 +1535,9 @@ bool LLAppViewer::cleanup()
     sTextureFetch = NULL;
 	delete sImageDecodeThread;
     sImageDecodeThread = NULL;
-
-	LLLocationHistory::getInstance()->save();
-
-	LLAvatarIconIDCache::getInstance()->save();
-
 	delete mFastTimerLogThread;
 	mFastTimerLogThread = NULL;
-
+	
 	if (LLFastTimerView::sAnalyzePerformance)
 	{
 		llinfos << "Analyzing performance" << llendl;
@@ -1544,6 +1559,8 @@ bool LLAppViewer::cleanup()
 	}
 	LLMetricPerformanceTester::cleanClass() ;
 
+	llinfos << "Cleaning up Media and Textures" << llendflush;
+
 	//Note:
 	//LLViewerMedia::cleanupClass() has to be put before gTextureList.shutdown()
 	//because some new image might be generated during cleaning up media. --bao
@@ -1557,13 +1574,13 @@ bool LLAppViewer::cleanup()
 	LLVFSThread::cleanupClass();
 	LLLFSThread::cleanupClass();
 
-	llinfos << "VFS Thread finished" << llendflush;
-
 #ifndef LL_RELEASE_FOR_DOWNLOAD
 	llinfos << "Auditing VFS" << llendl;
 	gVFS->audit();
 #endif
 
+	llinfos << "Misc Cleanup" << llendflush;
+	
 	// For safety, the LLVFS has to be deleted *after* LLVFSThread. This should be cleaned up.
 	// (LLVFS doesn't know about LLVFSThread so can't kill pending requests) -Steve
 	delete gStaticVFS;
@@ -1577,12 +1594,11 @@ bool LLAppViewer::cleanup()
 
 	LLWatchdog::getInstance()->cleanup();
 
+	llinfos << "Shutting down message system" << llendflush;
 	end_messaging_system();
-	llinfos << "Message system deleted." << llendflush;
 
 	// *NOTE:Mani - The following call is not thread safe. 
 	LLCurl::cleanupClass();
-	llinfos << "LLCurl cleaned up." << llendflush;
 
 	// If we're exiting to launch an URL, do that here so the screen
 	// is at the right resolution before we launch IE.
@@ -1603,7 +1619,7 @@ bool LLAppViewer::cleanup()
 
 	ll_close_fail_log();
 
-    llinfos << "Goodbye" << llendflush;
+    llinfos << "Goodbye!" << llendflush;
 
 	// return 0;
 	return true;
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 0844cca766283a6f3c30bf3b4b8f294d70a30cf6..a133bd6fe6ac8b0ea33bcd2147a9e6e219aabd3c 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -347,9 +347,9 @@ void LLAvatarActions::inviteToGroup(const LLUUID& id)
 	LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(id));
 	if (widget)
 	{
-		widget->removeNoneOption();
 		widget->center();
 		widget->setPowersMask(GP_MEMBER_INVITE);
+		widget->removeNoneOption();
 		widget->setSelectGroupCallback(boost::bind(callback_invite_to_group, _1, id));
 	}
 }
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 4ce3b50ed58122a0b9a80f87f3b0cdebdc2b01f2..cd0456b3083dac368bdb83aee527de4618a3b080 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -33,11 +33,9 @@
 #include "llviewerprecompiledheaders.h"
 #include "llchathistory.h"
 #include "llpanel.h"
-#include "lltextbox.h"
 #include "lluictrlfactory.h"
 #include "llscrollcontainer.h"
 #include "llavatariconctrl.h"
-
 #include "llimview.h"
 #include "llcallingcard.h" //for LLAvatarTracker
 #include "llagentdata.h"
@@ -185,11 +183,10 @@ class LLChatHistoryHeader: public LLPanel
 			mSourceType = CHAT_SOURCE_SYSTEM;
 		}
 
-		LLTextBox* userName = getChild<LLTextBox>("user_name");
+		LLTextEditor* userName = getChild<LLTextEditor>("user_name");
 
-		LLUIColor color = style_params.color;
-		userName->setReadOnlyColor(color);
-		userName->setColor(color);
+		userName->setReadOnlyColor(style_params.readonly_color());
+		userName->setColor(style_params.color());
 		
 		if(!chat.mFromName.empty())
 		{
@@ -203,7 +200,7 @@ class LLChatHistoryHeader: public LLPanel
 		}
 
 		
-		LLTextBox* timeBox = getChild<LLTextBox>("time_box");
+		LLUICtrl* timeBox = getChild<LLUICtrl>("time_box");
 		timeBox->setValue(chat.mTimeStr);
 
 		LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
@@ -334,20 +331,14 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style
 	return header;
 }
 
-void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params)
+void LLChatHistory::clear()
 {
-	LLView* view = NULL;
-	std::string view_text = "\n[" + chat.mTimeStr + "] ";
-	if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
-		view_text += chat.mFromName + ": ";
-
-
-	LLInlineViewSegment::Params p;
-	p.force_newline = true;
-	p.left_pad = mLeftWidgetPad;
-	p.right_pad = mRightWidgetPad;
+	mLastFromName.clear();
+	LLTextEditor::clear();
+}
 
-	
+void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_chat_history, const LLStyle::Params& input_append_params)
+{
 	LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
 	LLViewerChat::getChatColor(chat,txt_color);
 	LLFontGL* fontp = LLViewerChat::getChatFont();	
@@ -360,39 +351,63 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Param
 	style_params.font.size(font_size);	
 	style_params.font.style(input_append_params.font.style);
 	
-
+	std::string header_text = "[" + chat.mTimeStr + "] ";
+	if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
+		header_text += chat.mFromName + ": ";
 	
-	if (mLastFromName == chat.mFromName)
+	if (use_plain_text_chat_history)
 	{
-		view = getSeparator();
-		p.top_pad = mTopSeparatorPad;
-		p.bottom_pad = mBottomSeparatorPad;
+		appendText(header_text, getText().size() != 0, style_params);
 	}
 	else
 	{
-		view = getHeader(chat,style_params);
-		if (getText().size() == 0)
-			p.top_pad = 0;
+		LLView* view = NULL;
+		LLInlineViewSegment::Params p;
+		p.force_newline = true;
+		p.left_pad = mLeftWidgetPad;
+		p.right_pad = mRightWidgetPad;
+
+		if (mLastFromName == chat.mFromName)
+		{
+			view = getSeparator();
+			p.top_pad = mTopSeparatorPad;
+			p.bottom_pad = mBottomSeparatorPad;
+		}
 		else
-			p.top_pad = mTopHeaderPad;
-		p.bottom_pad = mBottomHeaderPad;
-		
+		{
+			view = getHeader(chat, style_params);
+			if (getText().size() == 0)
+				p.top_pad = 0;
+			else
+				p.top_pad = mTopHeaderPad;
+			p.bottom_pad = mBottomHeaderPad;
+			
+		}
+		p.view = view;
+
+		//Prepare the rect for the view
+		LLRect target_rect = getDocumentView()->getRect();
+		// squeeze down the widget by subtracting padding off left and right
+		target_rect.mLeft += mLeftWidgetPad + mHPad;
+		target_rect.mRight -= mRightWidgetPad;
+		view->reshape(target_rect.getWidth(), view->getRect().getHeight());
+		view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
+
+		appendWidget(p, header_text, false);
+		mLastFromName = chat.mFromName;
 	}
-	p.view = view;
-
-	//Prepare the rect for the view
-	LLRect target_rect = getDocumentView()->getRect();
-	// squeeze down the widget by subtracting padding off left and right
-	target_rect.mLeft += mLeftWidgetPad + mHPad;
-	target_rect.mRight -= mRightWidgetPad;
-	view->reshape(target_rect.getWidth(), view->getRect().getHeight());
-	view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
-
-	appendWidget(p, view_text, false);
-
-	//Append the text message
-	appendText(chat.mText, FALSE, style_params);
+	//Handle IRC styled /me messages.
+	std::string prefix = chat.mText.substr(0, 4);
+	if (prefix == "/me " || prefix == "/me'")
+	{
+		style_params.font.style = "ITALIC";
 
-	mLastFromName = chat.mFromName;
+		if (chat.mFromName.size() > 0)
+			appendText(chat.mFromName + " ", TRUE, style_params);
+		appendText(chat.mText.substr(4), FALSE, style_params);
+	}
+	else
+		appendText(chat.mText, FALSE, style_params);
 	blockUndo();
 }
+
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index c89d4b4ec67a877ca7dc5800ba71ef95985b788c..ef5839ff2f7a480140e2ba928824eb9de8b0ac2c 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -106,10 +106,11 @@ class LLChatHistory : public LLTextEditor
 		 * If last user appended message, concurs with current user,
 		 * separator is added before the message, otherwise header is added.
 		 * @param chat - base chat message.
-		 * @param time time of a message.
-		 * @param message message itself.
+		 * @param use_plain_text_chat_history  - whether to add message as plain text.
+		 * @param input_append_params - font style.
 		 */
-		void appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params = LLStyle::Params());
+		void appendMessage(const LLChat& chat, const bool use_plain_text_chat_history = false, const LLStyle::Params& input_append_params = LLStyle::Params());
+		/*virtual*/ void clear();
 
 	private:
 		std::string mLastFromName;
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 6a5877f67351c96f201d15e548c856035ecba47e..90f246ddaffdfdd9a928943b5b314a6d297e443a 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -43,6 +43,7 @@
 #include "lllocalcliprect.h"
 #include "llmenugl.h"
 #include "lloutputmonitorctrl.h"
+#include "llscriptfloater.h"
 #include "lltextbox.h"
 #include "llvoiceclient.h"
 #include "llvoicecontrolpanel.h"
@@ -55,6 +56,7 @@ static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notif
 static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p");
 static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group");
 static LLDefaultChildRegistry::Register<LLAdHocChiclet> t5("chiclet_im_adhoc");
+static LLDefaultChildRegistry::Register<LLScriptChiclet> t6("chiclet_script");
 
 static const LLRect CHICLET_RECT(0, 25, 25, 0);
 static const LLRect CHICLET_ICON_RECT(0, 22, 22, 0);
@@ -163,7 +165,7 @@ LLChiclet::~LLChiclet()
 boost::signals2::connection LLChiclet::setLeftButtonClickCallback(
 	const commit_callback_t& cb)
 {
-	return mCommitSignal.connect(cb);
+	return setCommitCallback(cb);
 }
 
 BOOL LLChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
@@ -983,7 +985,10 @@ void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
 
 void LLChicletPanel::onChicletClick(LLUICtrl*ctrl,const LLSD&param)
 {
-	mCommitSignal(ctrl,param);
+	if (mCommitSignal)
+	{
+		(*mCommitSignal)(ctrl,param);
+	}
 }
 
 void LLChicletPanel::removeChiclet(chiclet_list_t::iterator it)
@@ -1288,7 +1293,7 @@ void LLChicletPanel::onRightScrollHeldDown()
 boost::signals2::connection LLChicletPanel::setChicletClickedCallback(
 	const commit_callback_t& cb)
 {
-	return mCommitSignal.connect(cb);
+	return setCommitCallback(cb);
 }
 
 BOOL LLChicletPanel::handleScrollWheel(S32 x, S32 y, S32 clicks)
@@ -1411,3 +1416,51 @@ LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p)
  : LLOutputMonitorCtrl(p)
 {
 }
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLScriptChiclet::Params::Params()
+ : icon("icon")
+{
+	// *TODO Vadim: Get rid of hardcoded values.
+ 	rect(CHICLET_RECT);
+	icon.rect(CHICLET_ICON_RECT);
+}
+
+LLScriptChiclet::LLScriptChiclet(const Params&p)
+ : LLIMChiclet(p)
+ , mChicletIconCtrl(NULL)
+{
+	LLIconCtrl::Params icon_params = p.icon;
+	mChicletIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+	// Let "new message" icon be on top, else it will be hidden behind chiclet icon.
+	addChildInBack(mChicletIconCtrl);
+}
+
+void LLScriptChiclet::setSessionId(const LLUUID& session_id)
+{
+	setShowNewMessagesIcon( getSessionId() != session_id );
+
+	LLIMChiclet::setSessionId(session_id);
+	LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(session_id);
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
+	if(notification)
+	{
+		setToolTip(notification->getSubstitutions()["TITLE"].asString());
+	}
+}
+
+void LLScriptChiclet::onMouseDown()
+{
+	LLScriptFloaterManager::getInstance()->toggleScriptFloater(getSessionId());
+}
+
+BOOL LLScriptChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+	onMouseDown();
+	return LLChiclet::handleMouseDown(x, y, mask);
+}
+
+// EOF
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index 03935d21a6e4dc8b2528983e36ba73a106bb9318..1ea141e6c4766d16faf3a990d0c0e54877c59323 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -533,6 +533,46 @@ class LLAdHocChiclet : public LLIMChiclet
 	LLMenuGL* mPopupMenu;
 };
 
+/**
+ * Chiclet for script floaters.
+ */
+class LLScriptChiclet : public LLIMChiclet
+{
+public:
+
+	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
+	{
+		Optional<LLIconCtrl::Params> icon;
+
+		Params();
+	};
+
+	/*virtual*/ void setSessionId(const LLUUID& session_id);
+
+	/*virtual*/ void setCounter(S32 counter){}
+
+	/*virtual*/ S32 getCounter() { return 0; }
+
+	/**
+	 * Toggle script floater
+	 */
+	/*virtual*/ void onMouseDown();
+
+	/**
+	 * Override default handler
+	 */
+	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+
+protected:
+
+	LLScriptChiclet(const Params&);
+	friend class LLUICtrlFactory;
+
+private:
+
+	LLIconCtrl* mChicletIconCtrl;
+};
+
 /**
  * Implements Group chat chiclet.
  */
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index ae5be8cc7c92ce04c0bef6687a9c581cce2f80dc..8406ddeeca04131d8f59744670b0135d96d0dca1 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -232,13 +232,15 @@ class LLFavoriteLandmarkMenuItem : public LLMenuItemCallGL
 
 	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask)
 	{
-		mMouseDownSignal(this, x, y, mask);
+		if (mMouseDownSignal)
+			(*mMouseDownSignal)(this, x, y, mask);
 		return LLMenuItemCallGL::handleMouseDown(x, y, mask);
 	}
 
 	virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask)
 	{
-		mMouseUpSignal(this, x, y, mask);
+		if (mMouseUpSignal)
+			(*mMouseUpSignal)(this, x, y, mask);
 		return LLMenuItemCallGL::handleMouseUp(x, y, mask);
 	}
 
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 467796b4a39b0df33ef1ab3ac12f084069a1193b..976aaf8044727b7c329d5e35925ec335afe828fa 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -903,7 +903,7 @@ void LLFloaterBuyLandUI::tellUserError(
 // virtual
 BOOL LLFloaterBuyLandUI::postBuild()
 {
-	mVisibleSignal.connect(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2));
+	setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2));
 	
 	mCurrency.prepare();
 	
diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp
index 58025ef78beb03c5bc34d53b3126220c50c94410..57bb93d81afef3ea51355af4372a798bbdd70dd8 100644
--- a/indra/newview/llfloaterchat.cpp
+++ b/indra/newview/llfloaterchat.cpp
@@ -129,7 +129,7 @@ void LLFloaterChat::draw()
 BOOL LLFloaterChat::postBuild()
 {
 	// Hide the chat overlay when our history is visible.
-	mVisibleSignal.connect(boost::bind(&LLFloaterChat::updateConsoleVisibility, this));
+	setVisibleCallback(boost::bind(&LLFloaterChat::updateConsoleVisibility, this));
 	
 	mPanel = (LLPanelActiveSpeakers*)getChild<LLPanel>("active_speakers_panel");
 
diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp
index fbf09207feaace624dd085a6d57f913752c249b7..1b14ca573ab64cb2899f49344a27d148e2db90b2 100644
--- a/indra/newview/llfloaterchatterbox.cpp
+++ b/indra/newview/llfloaterchatterbox.cpp
@@ -114,7 +114,7 @@ LLFloaterChatterBox::~LLFloaterChatterBox()
 
 BOOL LLFloaterChatterBox::postBuild()
 {
-	mVisibleSignal.connect(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2));
+	setVisibleCallback(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2));
 	
 	if (gSavedSettings.getBOOL("ContactsTornOff"))
 	{
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 22d6098d5bc3706c5227f3551f71ef2288b1a095..d855ab1dfa78fcf06d4f898f244949c24588ed0e 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -239,7 +239,7 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)
 
 BOOL LLFloaterLand::postBuild()
 {	
-	mVisibleSignal.connect(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2));
+	setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2));
 	
 	LLTabContainer* tab = getChild<LLTabContainer>("landtab");
 
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 6d2c35442aac205282a07201ffbcbef167c7f3b0..e20249a737a2abe034af34e42dffd655c497c233 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -56,6 +56,7 @@
 #include "llfloaterabout.h"
 #include "llfloaterhardwaresettings.h"
 #include "llfloatervoicedevicesettings.h"
+#include "llimfloater.h"
 #include "llkeyboard.h"
 #include "llmodaldialog.h"
 #include "llnavigationbar.h"
@@ -357,6 +358,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 
 BOOL LLFloaterPreference::postBuild()
 {
+	gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&LLIMFloater::processChatHistoryStyleUpdate, _2));
+
 	LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core");
 	if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
 		tabcontainer->selectFirstTab();
@@ -458,6 +461,8 @@ void LLFloaterPreference::apply()
 	
 //	LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString());
 //	LLWStringUtil::replaceTabsWithSpaces(busy_response, 4);
+
+	gSavedSettings.setBOOL("PlainTextChatHistory", childGetValue("plain_text_chat_history").asBoolean());
 	
 	if(mGotPersonalInfo)
 	{ 
@@ -1186,6 +1191,8 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
 	childSetLabelArg("online_visibility", "[DIR_VIS]", mDirectoryVisibility);
 	childEnable("send_im_to_email");
 	childSetValue("send_im_to_email", im_via_email);
+	childEnable("plain_text_chat_history");
+	childSetValue("plain_text_chat_history", gSavedSettings.getBOOL("PlainTextChatHistory"));
 	childEnable("log_instant_messages");
 //	childEnable("log_chat");
 //	childEnable("busy_response");
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 43fbe362d5954b65820865c063d690b71f6b7c2d..750a9d478fe5c1ee023716fc3885697bece3c345 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -67,7 +67,10 @@
 #include "llresmgr.h"
 #include "pipeline.h"
 #include "llspatialpartition.h"
- 
+
+// Height of the yellow selection highlight posts for land
+const F32 PARCEL_POST_HEIGHT = 0.666f;
+
 BOOL LLAgent::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position)
 {
 	if(object && object->isAttachment())
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 0626a5c3d31c98cb6adc7ea0963c02bc73b20d4b..59537c1e6518d0f40582f52add6d5849b3b5a51c 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -52,6 +52,7 @@
 #include "llviewerwindow.h"
 #include "llpanelgroup.h"
 #include "llgroupactions.h"
+#include "llnotifications.h"
 #include "lluictrlfactory.h"
 #include <boost/regex.hpp>
 
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 4a487bd5a7c84a2903a71263358d12b64156aa6f..795770d3dbc14d34cc70a308a65dc1efbbf662d0 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -53,6 +53,10 @@
 #include "lltransientfloatermgr.h"
 #include "llinventorymodel.h"
 
+#ifdef USE_IM_CONTAINER
+	#include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container
+#endif
+
 
 
 LLIMFloater::LLIMFloater(const LLUUID& session_id)
@@ -106,10 +110,10 @@ void LLIMFloater::onFocusReceived()
 // virtual
 void LLIMFloater::onClose(bool app_quitting)
 {
+	if (!gIMMgr->hasSession(mSessionID)) return;
+	
 	setTyping(false);
-	// SJB: We want the close button to hide the session window, not end it
-	// *NOTE: Yhis is functional, but not ideal - it's still closing the floater; we really want to change the behavior of the X button instead.
-	//gIMMgr->leaveSession(mSessionID);
+	gIMMgr->leaveSession(mSessionID);
 }
 
 /* static */
@@ -257,7 +261,11 @@ BOOL LLIMFloater::postBuild()
 	//*TODO if session is not initialized yet, add some sort of a warning message like "starting session...blablabla"
 	//see LLFloaterIMPanel for how it is done (IB)
 
+#ifdef USE_IM_CONTAINER
+	return LLFloater::postBuild();
+#else
 	return LLDockableFloater::postBuild();
+#endif
 }
 
 // virtual
@@ -318,6 +326,11 @@ void LLIMFloater::onSlide()
 //static
 LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
 {
+#ifdef USE_IM_CONTAINER
+	LLIMFloater* target_floater = findInstance(session_id);
+	bool not_existed = NULL == target_floater;
+
+#else
 	//hide all
 	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
 	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
@@ -329,12 +342,25 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
 			floater->setVisible(false);
 		}
 	}
+#endif
 
 	LLIMFloater* floater = LLFloaterReg::showTypedInstance<LLIMFloater>("impanel", session_id);
 
 	floater->updateMessages();
 	floater->mInputEditor->setFocus(TRUE);
 
+#ifdef USE_IM_CONTAINER
+	// do not add existed floaters to avoid adding torn off instances
+	if (not_existed)
+	{
+		//		LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
+		// TODO: mantipov: use LLTabContainer::RIGHT_OF_CURRENT if it exists
+		LLTabContainer::eInsertionPoint i_pt = LLTabContainer::END;
+
+		LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance<LLIMFloaterContainer>("im_container");
+		floater_container->addFloater(floater, TRUE, i_pt);
+	}
+#else
 	if (floater->getDockControl() == NULL)
 	{
 		LLChiclet* chiclet =
@@ -352,13 +378,14 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
 		floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(),
 				LLDockControl::TOP,  boost::bind(&LLIMFloater::getAllowedRect, floater, _1)));
 	}
+#endif
 
 	return floater;
 }
 
 void LLIMFloater::getAllowedRect(LLRect& rect)
 {
-	rect = gViewerWindow->getWorldViewRectScaled();
+	rect = gViewerWindow->getWorldViewRectRaw();
 }
 
 void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
@@ -368,7 +395,9 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
 		(LLNotificationsUI::LLChannelManager::getInstance()->
 											findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
 	
+#ifndef USE_IM_CONTAINER
 	LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+#endif
 
 	// update notification channel state
 	if(channel)
@@ -394,6 +423,7 @@ void LLIMFloater::setVisible(BOOL visible)
 //static
 bool LLIMFloater::toggle(const LLUUID& session_id)
 {
+#ifndef USE_IM_CONTAINER
 	LLIMFloater* floater = LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);
 	if (floater && floater->getVisible() && floater->isDocked())
 	{
@@ -409,6 +439,7 @@ bool LLIMFloater::toggle(const LLUUID& session_id)
 		return true;
 	}
 	else
+#endif
 	{
 		// ensure the list of messages is updated when floater is made visible
 		show(session_id);
@@ -451,6 +482,8 @@ void LLIMFloater::sessionInitReplyReceived(const LLUUID& im_session_id)
 
 void LLIMFloater::updateMessages()
 {
+	bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory");
+
 	std::list<LLSD> messages;
 	LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1);
 
@@ -476,39 +509,7 @@ void LLIMFloater::updateMessages()
 			chat.mText = message;
 			chat.mTimeStr = time;
 			
-			//Handle IRC styled /me messages.
-			std::string prefix = message.substr(0, 4);
-			if (prefix == "/me " || prefix == "/me'")
-			{
-				
-				LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
-				LLViewerChat::getChatColor(chat,txt_color);
-				LLFontGL* fontp = LLViewerChat::getChatFont();
-				std::string font_name = LLFontGL::nameFromFont(fontp);
-				std::string font_size = LLFontGL::sizeFromFont(fontp);
-				LLStyle::Params append_style_params;
-				append_style_params.color(txt_color);
-				append_style_params.readonly_color(txt_color);
-				append_style_params.font.name(font_name);
-				append_style_params.font.size(font_size);
-				
-				if (from.size() > 0)
-				{
-					append_style_params.font.style = "ITALIC";
-					chat.mText = from;
-					mChatHistory->appendWidgetMessage(chat, append_style_params);
-				}
-				
-				message = message.substr(3);
-				append_style_params.font.style = "ITALIC";
-				mChatHistory->appendText(message, FALSE, append_style_params);
-			}
-			else
-			{
-				chat.mText = message;
-				mChatHistory->appendWidgetMessage(chat);
-			}
-
+			mChatHistory->appendMessage(chat, use_plain_text_chat_history);
 			mLastMessageIndex = msg["index"].asInteger();
 		}
 	}
@@ -639,6 +640,28 @@ void LLIMFloater::processAgentListUpdates(const LLSD& body)
 	}
 }
 
+void LLIMFloater::updateChatHistoryStyle()
+{
+	mChatHistory->clear();
+	mLastMessageIndex = -1;
+	updateMessages();
+}
+
+void LLIMFloater::processChatHistoryStyleUpdate(const LLSD& newvalue)
+{
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
+		 iter != inst_list.end(); ++iter)
+	{
+		LLIMFloater* floater = dynamic_cast<LLIMFloater*>(*iter);
+		if (floater)
+		{
+			floater->updateChatHistoryStyle();
+		}
+	}
+
+}
+
 void LLIMFloater::processSessionUpdate(const LLSD& session_update)
 {
 	// *TODO : verify following code when moderated mode will be implemented
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index e2d500d821e1d7d68e322543368a05c444b9eb19..9e1330ff497ea4112b9cc0b72b18c697e9858862 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -33,6 +33,11 @@
 #ifndef LL_IMFLOATER_H
 #define LL_IMFLOATER_H
 
+// This variable is used to show floaters related to chiclets in a Multi Floater Container
+// So, this functionality does not require to have IM Floaters as Dockable & Transient
+// See EXT-2640.
+#define USE_IM_CONTAINER
+
 #include "lltransientdockablefloater.h"
 #include "lllogchat.h"
 #include "lltooldraganddrop.h"
@@ -92,6 +97,9 @@ class LLIMFloater : public LLTransientDockableFloater
 	void processAgentListUpdates(const LLSD& body);
 	void processSessionUpdate(const LLSD& session_update);
 
+	void updateChatHistoryStyle();
+	static void processChatHistoryStyleUpdate(const LLSD& newvalue);
+
 	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
 							   BOOL drop, EDragAndDropType cargo_type,
 							   void *cargo_data, EAcceptance *accept,
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6e4b3ae2140b4595f1d42ba6c1b81a2d97872190
--- /dev/null
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -0,0 +1,96 @@
+/** 
+ * @file llimfloatercontainer.cpp
+ * @brief Multifloater containing active IM sessions in separate tab container tabs
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llimfloatercontainer.h"
+
+//
+// LLIMFloaterContainer
+//
+LLIMFloaterContainer::LLIMFloaterContainer(const LLSD& seed)
+:	LLMultiFloater(seed),
+	mActiveVoiceFloater(NULL)
+{
+	mAutoResize = FALSE;
+}
+
+LLIMFloaterContainer::~LLIMFloaterContainer()
+{
+}
+
+BOOL LLIMFloaterContainer::postBuild()
+{
+	// Do not call base postBuild to not connect to mCloseSignal to not close all floaters via Close button
+	// mTabContainer will be initialized in LLMultiFloater::addChild()
+	return TRUE;
+}
+
+void LLIMFloaterContainer::onOpen(const LLSD& key)
+{
+	LLMultiFloater::onOpen(key);
+/*
+	if (key.isDefined())
+	{
+		LLIMFloater* im_floater = LLIMFloater::findInstance(key.asUUID());
+		if (im_floater)
+		{
+			im_floater->openFloater();
+		}
+	}
+*/
+}
+
+void LLIMFloaterContainer::addFloater(LLFloater* floaterp, 
+									BOOL select_added_floater, 
+									LLTabContainer::eInsertionPoint insertion_point)
+{
+	if(!floaterp) return;
+
+	// already here
+	if (floaterp->getHost() == this)
+	{
+		openFloater(floaterp->getKey());
+		return;
+	}
+
+	LLMultiFloater::addFloater(floaterp, select_added_floater, insertion_point);
+
+	// make sure active voice icon shows up for new tab
+	if (floaterp == mActiveVoiceFloater)
+	{
+		mTabContainer->setTabImage(floaterp, "active_voice_tab.tga");	
+	}
+}
+
+// EOF
diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h
new file mode 100644
index 0000000000000000000000000000000000000000..10cde56c6eeaae34b8759001df31e14ccb3b8f6e
--- /dev/null
+++ b/indra/newview/llimfloatercontainer.h
@@ -0,0 +1,61 @@
+/** 
+ * @file llimfloatercontainer.h
+ * @brief Multifloater containing active IM sessions in separate tab container tabs
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLIMFLOATERCONTAINER_H
+#define LL_LLIMFLOATERCONTAINER_H
+
+#include "llfloater.h"
+#include "llmultifloater.h"
+
+class LLTabContainer;
+
+class LLIMFloaterContainer : public LLMultiFloater
+{
+public:
+	LLIMFloaterContainer(const LLSD& seed);
+	virtual ~LLIMFloaterContainer();
+	
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void onOpen(const LLSD& key);
+
+	/*virtual*/ void addFloater(LLFloater* floaterp, 
+								BOOL select_added_floater, 
+								LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END);
+
+	static LLFloater* getCurrentVoiceFloater();
+	
+protected:
+	
+	LLFloater* mActiveVoiceFloater;
+};
+
+#endif // LL_LLIMFLOATERCONTAINER_H
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 87b801d73b6b707ccf0f194a31591bbc67e26fd3..e6ded5f371b9b9e05b8fc28d42d9e328b43c18d0 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -216,7 +216,7 @@ LLFloaterIMPanel::~LLFloaterIMPanel()
 
 BOOL LLFloaterIMPanel::postBuild() 
 {
-	mVisibleSignal.connect(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2));
+	setVisibleCallback(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2));
 	
 	mInputEditor = getChild<LLLineEditor>("chat_editor");
 	mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) );
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 7e35cfa04c201aad03cdf4dc007fe74d46ee8eec..6b28edf0b631699890b0dbeaa1ae416c252086aa 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -52,6 +52,7 @@
 #include "llteleporthistory.h"
 #include "llsidetray.h"
 #include "llslurl.h"
+#include "llstatusbar.h"			// getHealth()
 #include "lltrans.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
@@ -157,15 +158,22 @@ LLLocationInputCtrl::Params::Params()
 	add_landmark_image_disabled("add_landmark_image_disabled"),
 	add_landmark_image_hover("add_landmark_image_hover"),
 	add_landmark_image_selected("add_landmark_image_selected"),
+	icon_hpad("icon_hpad", 0),
 	add_landmark_button("add_landmark_button"),
-	add_landmark_hpad("add_landmark_hpad", 0),
-	info_button("info_button")
+	info_button("info_button"),
+	voice_icon("voice_icon"),
+	fly_icon("fly_icon"),
+	push_icon("push_icon"),
+	build_icon("build_icon"),
+	scripts_icon("scripts_icon"),
+	damage_icon("damage_icon"),
+	damage_text("damage_text")
 {
 }
 
 LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 :	LLComboBox(p),
-	mAddLandmarkHPad(p.add_landmark_hpad),
+	mIconHPad(p.icon_hpad),
 	mInfoBtn(NULL),
 	mLocationContextMenu(NULL),
 	mAddLandmarkBtn(NULL),
@@ -188,13 +196,12 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	params.rect(text_entry_rect);
 	params.default_text(LLStringUtil::null);
 	params.max_length_bytes(p.max_chars);
-	params.commit_callback.function(boost::bind(&LLComboBox::onTextCommit, this, _2));
 	params.keystroke_callback(boost::bind(&LLComboBox::onTextEntry, this, _1));
 	params.handle_edit_keys_directly(true);
 	params.commit_on_focus_lost(false);
 	params.follows.flags(FOLLOWS_ALL);
 	mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params);
-	this->addChild(mTextEntry);
+	addChild(mTextEntry);
 	// LLLineEditor is replaced with LLLocationLineEditor
 
 	// "Place information" button.
@@ -230,6 +237,35 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	mAddLandmarkBtn = LLUICtrlFactory::create<LLButton>(al_params);
 	enableAddLandmarkButton(true);
 	addChild(mAddLandmarkBtn);
+
+	// Parcel property icons
+	LLIconCtrl::Params voice_icon = p.voice_icon;
+	mParcelIcon[VOICE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(voice_icon);
+	addChild(mParcelIcon[VOICE_ICON]);
+
+	LLIconCtrl::Params fly_icon = p.fly_icon;
+	mParcelIcon[FLY_ICON] = LLUICtrlFactory::create<LLIconCtrl>(fly_icon);
+	addChild(mParcelIcon[FLY_ICON]);
+
+	LLIconCtrl::Params push_icon = p.push_icon;
+	mParcelIcon[PUSH_ICON] = LLUICtrlFactory::create<LLIconCtrl>(push_icon);
+	addChild(mParcelIcon[PUSH_ICON]);
+
+	LLIconCtrl::Params build_icon = p.build_icon;
+	mParcelIcon[BUILD_ICON] = LLUICtrlFactory::create<LLIconCtrl>(build_icon);
+	addChild(mParcelIcon[BUILD_ICON]);
+
+	LLIconCtrl::Params scripts_icon = p.scripts_icon;
+	mParcelIcon[SCRIPTS_ICON] = LLUICtrlFactory::create<LLIconCtrl>(scripts_icon);
+	addChild(mParcelIcon[SCRIPTS_ICON]);
+
+	LLIconCtrl::Params damage_icon = p.damage_icon;
+	mParcelIcon[DAMAGE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(damage_icon);
+	addChild(mParcelIcon[DAMAGE_ICON]);
+	
+	LLTextBox::Params damage_text = p.damage_text;
+	mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
+	addChild(mDamageText);
 	
 	// Register callbacks and load the location field context menu (NB: the order matters).
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2));
@@ -373,11 +409,8 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor)
  */
 void LLLocationInputCtrl::setText(const LLStringExplicit& text)
 {
-	if (mTextEntry)
-	{
-		mTextEntry->setText(text);
-		mHasAutocompletedText = FALSE;
-	}
+	mTextEntry->setText(text);
+	mHasAutocompletedText = FALSE;
 }
 
 void LLLocationInputCtrl::setFocus(BOOL b)
@@ -410,11 +443,20 @@ void LLLocationInputCtrl::onFocusLost()
 		mTextEntry->deselect();
 	}
 }
-void	LLLocationInputCtrl::draw(){
-	
-	if(!hasFocus() && gSavedSettings.getBOOL("ShowCoordinatesOption")){
+
+void LLLocationInputCtrl::draw()
+{
+	static LLUICachedControl<bool> show_coords("NavBarShowCoordinates", false);
+	if(!hasFocus() && show_coords)
+	{
 		refreshLocation();
 	}
+	
+	static LLUICachedControl<bool> show_icons("NavBarShowParcelProperties", false);
+	if (show_icons)
+	{
+		refreshHealth();
+	}
 	LLComboBox::draw();
 }
 
@@ -511,10 +553,12 @@ void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)
 	
 	mList->mouseOverHighlightNthItem(-1); // Clear highlight on the last selected item.
 }
+
 bool LLLocationInputCtrl::findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter)
 {
 	return item.mTitle.find(filter) != std::string::npos;
 }
+
 void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)
 {
 	if (mLocationContextMenu)
@@ -532,6 +576,7 @@ void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)
 void LLLocationInputCtrl::refresh()
 {
 	refreshLocation();			// update location string
+	refreshParcelIcons();
 	updateAddLandmarkButton();	// indicate whether current parcel has been landmarked 
 }
 
@@ -548,13 +593,98 @@ void LLLocationInputCtrl::refreshLocation()
 
 	// Update location field.
 	std::string location_name;
-	LLAgentUI::ELocationFormat format =  (gSavedSettings.getBOOL("ShowCoordinatesOption") ? 
-			LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM: LLAgentUI::LOCATION_FORMAT_NORMAL);
+	LLAgentUI::ELocationFormat format =
+		(gSavedSettings.getBOOL("NavBarShowCoordinates")
+			? LLAgentUI::LOCATION_FORMAT_FULL
+			: LLAgentUI::LOCATION_FORMAT_NO_COORDS);
 
-	if (!LLAgentUI::buildLocationString(location_name, format)) location_name = "Unknown";
+	if (!LLAgentUI::buildLocationString(location_name, format)) 
+	{
+		location_name = "???";
+	}
 	setText(location_name);
 }
 
+void LLLocationInputCtrl::refreshParcelIcons()
+{
+	// Our "cursor" moving right to left
+	S32 x = mAddLandmarkBtn->getRect().mLeft - mIconHPad;
+	
+	static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false);
+	if (show_properties)
+	{
+		LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+		// *TODO buy
+		//bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false);
+		bool allow_voice	= vpm->allowAgentVoice();
+		bool allow_fly		= vpm->allowAgentFly();
+		bool allow_push		= vpm->allowAgentPush();
+		bool allow_build	= vpm->allowAgentBuild();
+		bool allow_scripts	= vpm->allowAgentScripts();
+		bool allow_damage	= vpm->allowAgentDamage();
+		
+		// Most icons are "block this ability"
+		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice );
+		mParcelIcon[FLY_ICON]->setVisible(     !allow_fly );
+		mParcelIcon[PUSH_ICON]->setVisible(    !allow_push );
+		mParcelIcon[BUILD_ICON]->setVisible(   !allow_build );
+		mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
+		mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage );
+		mDamageText->setVisible(allow_damage);
+		
+		// Slide the parcel icons rect from right to left, adjusting rectangles of
+		// visible icons.  Assumes all icon rects are the same.
+		for (S32 i = 0; i < ICON_COUNT; ++i)
+		{
+			LLIconCtrl* icon = mParcelIcon[i];
+			if (icon->getVisible())
+			{
+				LLRect r = icon->getRect();
+				r.mLeft = x - r.getWidth();
+				r.mRight = x;
+				icon->setRect( r );
+				x -= r.getWidth() + mIconHPad;
+			}
+		}
+		LLRect text_rect = mDamageText->getRect();
+		text_rect.mLeft = x - text_rect.getWidth();
+		text_rect.mRight = x;
+		mDamageText->setRect(text_rect);
+		x -= text_rect.getWidth() + mIconHPad;
+	}
+	else
+	{
+		for (S32 i = 0; i < ICON_COUNT; ++i)
+		{
+			mParcelIcon[i]->setVisible(false);
+		}
+		mDamageText->setVisible(false);
+	}
+	
+	S32 left_pad, right_pad;
+	mTextEntry->getTextPadding(&left_pad, &right_pad);
+	right_pad = mTextEntry->getRect().mRight - x;
+	llinfos << "JAMESDEBUG text entry rect " << mTextEntry->getRect()
+	<< " x " << x << " left_pad " << left_pad << " right_pad " << right_pad << llendl;
+	mTextEntry->setTextPadding(left_pad, right_pad);
+}
+
+void LLLocationInputCtrl::refreshHealth()
+{
+	// *FIXME: Status bar owns health information, should be in agent
+	if (gStatusBar)
+	{
+		static S32 last_health = -1;
+		S32 health = gStatusBar->getHealth();
+		if (health != last_health)
+		{
+			std::string text = llformat("%d%%", health);
+			mDamageText->setText(text);
+			last_health = health;
+		}
+	}
+}
+
 void LLLocationInputCtrl::rebuildLocationHistory(std::string filter)
 {
 	LLLocationHistory::location_list_t filtered_items;
@@ -651,13 +781,11 @@ void LLLocationInputCtrl::updateWidgetlayout()
 	mInfoBtn->setRect(info_btn_rect);
 
 	// "Add Landmark" button
-	{
-		LLRect al_btn_rect = mAddLandmarkBtn->getRect();
-		al_btn_rect.translate(
-			hist_btn_rect.mLeft - mAddLandmarkHPad - al_btn_rect.getWidth(),
-			(rect.getHeight() - al_btn_rect.getHeight()) / 2);
-		mAddLandmarkBtn->setRect(al_btn_rect);
-	}
+	LLRect al_btn_rect = mAddLandmarkBtn->getRect();
+	al_btn_rect.translate(
+		hist_btn_rect.mLeft - mIconHPad - al_btn_rect.getWidth(),
+		(rect.getHeight() - al_btn_rect.getHeight()) / 2);
+	mAddLandmarkBtn->setRect(al_btn_rect);
 }
 
 void LLLocationInputCtrl::changeLocationPresentation()
@@ -678,11 +806,17 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)
 {
 	std::string item = userdata.asString();
 
-	if (item == std::string("show_coordinates"))
+	if (item == "show_coordinates")
+	{
+		gSavedSettings.setBOOL("NavBarShowCoordinates",!gSavedSettings.getBOOL("NavBarShowCoordinates"));
+	}
+	else if (item == "show_properties")
 	{
-		gSavedSettings.setBOOL("ShowCoordinatesOption",!gSavedSettings.getBOOL("ShowCoordinatesOption"));
+		gSavedSettings.setBOOL("NavBarShowParcelProperties",
+			!gSavedSettings.getBOOL("NavBarShowParcelProperties"));
+		refreshParcelIcons();
 	}
-	else if (item == std::string("landmark"))
+	else if (item == "landmark")
 	{
 		LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
 		
@@ -696,23 +830,23 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)
 					LLSD().insert("type", "landmark").insert("id",landmark->getUUID()));
 		}
 	}
-	else if (item == std::string("cut"))
+	else if (item == "cut")
 	{
 		mTextEntry->cut();
 	}
-	else if (item == std::string("copy"))
+	else if (item == "copy")
 	{
 		mTextEntry->copy();
 	}
-	else if (item == std::string("paste"))
+	else if (item == "paste")
 	{
 		mTextEntry->paste();
 	}
-	else if (item == std::string("delete"))
+	else if (item == "delete")
 	{
 		mTextEntry->deleteSelection();
 	}
-	else if (item == std::string("select_all"))
+	else if (item == "select_all")
 	{
 		mTextEntry->selectAll();
 	}
@@ -722,29 +856,29 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)
 {
 	std::string item = userdata.asString();
 	
-	if (item == std::string("can_cut"))
+	if (item == "can_cut")
 	{
 		return mTextEntry->canCut();
 	}
-	else if (item == std::string("can_copy"))
+	else if (item == "can_copy")
 	{
 		return mTextEntry->canCopy();
 	}
-	else if (item == std::string("can_paste"))
+	else if (item == "can_paste")
 	{
 		return mTextEntry->canPaste();
 	}
-	else if (item == std::string("can_delete"))
+	else if (item == "can_delete")
 	{
 		return mTextEntry->canDeselect();
 	}
-	else if (item == std::string("can_select_all"))
+	else if (item == "can_select_all")
 	{
 		return mTextEntry->canSelectAll();
 	}
-	else if(item == std::string("show_coordinates")){
-	
-		return gSavedSettings.getBOOL("ShowCoordinatesOption");
+	else if(item == "show_coordinates")
+	{
+		return gSavedSettings.getBOOL("NavBarShowCoordinates");
 	}
 
 	return false;
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index 44dc0cb2510bf3abc96cfe87b7cb9d90dd5e0ee9..3bd23e80a98a4ad615d3418ccc3f5afe07d3c386 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -33,7 +33,9 @@
 #ifndef LL_LLLOCATIONINPUTCTRL_H
 #define LL_LLLOCATIONINPUTCTRL_H
 
-#include <llcombobox.h>
+#include "llcombobox.h"
+#include "lliconctrl.h"		// Params
+#include "lltextbox.h"		// Params
 
 class LLLandmark;
 
@@ -63,9 +65,16 @@ class LLLocationInputCtrl
 											add_landmark_image_disabled,
 											add_landmark_image_hover,
 											add_landmark_image_selected;
-		Optional<S32>						add_landmark_hpad;
+		Optional<S32>						icon_hpad;
 		Optional<LLButton::Params>			add_landmark_button,
 											info_button;
+		Optional<LLIconCtrl::Params>		voice_icon,
+											fly_icon,
+											push_icon,
+											build_icon,
+											scripts_icon,
+											damage_icon;
+		Optional<LLTextBox::Params>			damage_text;
 		Params();
 	};
 
@@ -103,6 +112,10 @@ class LLLocationInputCtrl
 	void					enableAddLandmarkButton(bool val);
 	void					refresh();
 	void					refreshLocation();
+	void					refreshParcelIcons();
+	// Refresh the value in the health percentage text field
+	void					refreshHealth();
+	
 	void					rebuildLocationHistory(std::string filter = "");
 	bool 					findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
 	void					setText(const LLStringExplicit& text);
@@ -126,7 +139,20 @@ class LLLocationInputCtrl
 	LLMenuGL*				mLocationContextMenu;
 	LLButton*				mAddLandmarkBtn;
 	LLButton*				mInfoBtn;
-	S32						mAddLandmarkHPad;
+	S32						mIconHPad;
+	
+	enum EParcelIcon
+	{
+		VOICE_ICON = 0,
+		FLY_ICON,
+		PUSH_ICON,
+		BUILD_ICON,
+		SCRIPTS_ICON,
+		DAMAGE_ICON,
+		ICON_COUNT
+	};
+	LLIconCtrl*	mParcelIcon[ICON_COUNT];
+	LLTextBox* mDamageText;
 
 	LLAddLandmarkObserver*		mAddLandmarkObserver;
 	LLRemoveLandmarkObserver*	mRemoveLandmarkObserver;
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 5cd40273f61aee5bdb928b765ffa7f96a9b70932..2376a3581db53c58c6fe896cbd5a40ee5afaf4e1 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -356,7 +356,7 @@ void LLMediaCtrl::onFocusLost()
 //
 BOOL LLMediaCtrl::postBuild ()
 {
-	mVisibleSignal.connect(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
+	setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
 	return TRUE;
 }
 
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 93db33705316c110bcc0ffd94082bd83de5e3746..9e46a4422a6d3e463968631451ef0be518908a82 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -586,7 +586,8 @@ void LLPanelStandStopFlying::setVisible(BOOL visible)
 		updatePosition();
 	}
 
-	LLPanel::setVisible(visible);
+	//change visibility of parent layout_panel to animate in/out
+	if (getParent()) getParent()->setVisible(visible);
 }
 
 BOOL LLPanelStandStopFlying::handleToolTip(S32 x, S32 y, MASK mask)
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 114d26af8aac017377f76135f46be411a4442118..41376c4c097d9ab7ece339c0a675d31da5f7fc31 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -172,7 +172,8 @@ LLNavigationBar::LLNavigationBar()
 	mBtnHome(NULL),
 	mCmbLocation(NULL),
 	mSearchComboBox(NULL),
-	mPurgeTPHistoryItems(false)
+	mPurgeTPHistoryItems(false),
+	mSaveToLocationHistory(false)
 {
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml");
 
@@ -186,6 +187,7 @@ LLNavigationBar::LLNavigationBar()
 LLNavigationBar::~LLNavigationBar()
 {
 	mTeleportFinishConnection.disconnect();
+	mTeleportFailedConnection.disconnect();
 }
 
 BOOL LLNavigationBar::postBuild()
@@ -220,6 +222,12 @@ BOOL LLNavigationBar::postBuild()
 	
 	mSearchComboBox->setCommitCallback(boost::bind(&LLNavigationBar::onSearchCommit, this));
 
+	mTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
+		setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1));
+
+	mTeleportFailedConnection = LLViewerParcelMgr::getInstance()->
+		setTeleportFailedCallback(boost::bind(&LLNavigationBar::onTeleportFailed, this));
+	
 	mDefaultNbRect = getRect();
 	mDefaultFpRect = getChild<LLFavoritesBarCtrl>("favorite")->getRect();
 
@@ -230,6 +238,16 @@ BOOL LLNavigationBar::postBuild()
 	return TRUE;
 }
 
+void LLNavigationBar::setVisible(BOOL visible)
+{
+	// change visibility of grandparent layout_panel to animate in and out
+	if (getParent() && getParent()->getParent()) 
+	{
+		getParent()->getParent()->setVisible(visible);	
+	}
+}
+
+
 void LLNavigationBar::fillSearchComboBox()
 {
 	if(!mSearchComboBox)
@@ -395,15 +413,19 @@ void LLNavigationBar::onLocationSelection()
 	LLWorldMapMessage::url_callback_t cb = boost::bind(
 			&LLNavigationBar::onRegionNameResponse, this,
 			typed_location, region_name, local_coords, _1, _2, _3, _4);
-	// connect the callback each time, when user enter new location to get real location of agent after teleport
-	mTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
-			setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1,typed_location));
+	mSaveToLocationHistory = true;
 	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
 }
 
-void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location)
+void LLNavigationBar::onTeleportFailed()
 {
-	// Location is valid. Add it to the typed locations history.
+	mSaveToLocationHistory = false;
+}
+
+void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos)
+{
+	if (!mSaveToLocationHistory)
+		return;
 	LLLocationHistory* lh = LLLocationHistory::getInstance();
 
 	//TODO*: do we need convert surl into readable format?
@@ -413,7 +435,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, con
 	 * At this moment gAgent.getPositionAgent() contains previous coordinates.
 	 * according to EXT-65 agent position is being reseted on each frame.  
 	 */
-		LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM,
+		LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_NO_MATURITY,
 					gAgent.getPosAgentFromGlobal(global_agent_pos));
 	std::string tooltip (LLSLURL::buildSLURLfromPosGlobal(gAgent.getRegion()->getName(), global_agent_pos, false));
 	
@@ -426,8 +448,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, con
 
 	lh->save();
 	
-	if(mTeleportFinishConnection.connected())
-		mTeleportFinishConnection.disconnect();
+	mSaveToLocationHistory = false;
 	
 }
 
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 52f5a827e4b17bdc232cb72a710e8d771cce74cf..9d0687f193d9058dc0216858b6a09b730c97c204 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -56,6 +56,7 @@ class LLNavigationBar
 	/*virtual*/ void	draw();
 	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL	postBuild();
+	/*virtual*/ void	setVisible(BOOL visible);
 
 	void handleLoginComplete();
 	void clearHistoryCache();
@@ -81,7 +82,8 @@ class LLNavigationBar
 	void onLocationSelection();
 	void onLocationPrearrange(const LLSD& data);
 	void onSearchCommit();
-	void onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location);
+	void onTeleportFinished(const LLVector3d& global_agent_pos);
+	void onTeleportFailed();
 	void onRegionNameResponse(
 			std::string typed_location,
 			std::string region_name,
@@ -99,8 +101,11 @@ class LLNavigationBar
 	LLLocationInputCtrl*		mCmbLocation;
 	LLRect						mDefaultNbRect;
 	LLRect						mDefaultFpRect;
+	boost::signals2::connection	mTeleportFailedConnection;
 	boost::signals2::connection	mTeleportFinishConnection;
 	bool						mPurgeTPHistoryItems;
+	// if true, save location to location history when teleport finishes
+	bool						mSaveToLocationHistory;
 };
 
 #endif
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 09fd9b29490cb224874a70bce0aea7be9381cc12..80a6cc343fae56c615ffa23e316ff280c5261b87 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -173,7 +173,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat)
 				append_style_params.font.style = "ITALIC";
 				LLChat add_chat=chat;
 				add_chat.mText = chat.mFromName + " ";
-				mChatHistory->appendWidgetMessage(add_chat, append_style_params);
+				mChatHistory->appendMessage(add_chat, false, append_style_params);
 			}
 			
 			message = message.substr(3);
@@ -182,7 +182,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat)
 		}
 		else
 		{
-			mChatHistory->appendWidgetMessage(chat);
+			mChatHistory->appendMessage(chat);
 		}
 	}
 }
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index 4be98201d114c425f7f3dbc233616bf90f5699d2..f01f2e44414448be4674754f9e039ab40dd9ea93 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -38,9 +38,13 @@
 #include "llviewercontrol.h"
 #include "llviewerwindow.h"
 #include "llnotificationmanager.h"
+#include "llscriptfloater.h"
 
 using namespace LLNotificationsUI;
 
+static const std::string SCRIPT_DIALOG				("ScriptDialog");
+static const std::string SCRIPT_DIALOG_GROUP		("ScriptDialogGroup");
+
 //--------------------------------------------------------------------------
 LLScriptHandler::LLScriptHandler(e_notification_type type, const LLSD& id)
 {
@@ -90,25 +94,40 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
 	
 	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
 	{
-		LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
-
-		LLToast::Params p;
-		p.notif_id = notification->getID();
-		p.notification = notification;
-		p.panel = notify_box;	
-		p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1);
-
-		LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
-		if(channel)
-			channel->addToast(p);
-
-		// send a signal to the counter manager
-		mNewNotificationSignal();
-
+		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName())
+		{
+			LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
+		}
+		else
+		{
+			LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
+
+			LLToast::Params p;
+			p.notif_id = notification->getID();
+			p.notification = notification;
+			p.panel = notify_box;	
+			p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1);
+
+			LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+			if(channel)
+			{
+				channel->addToast(p);
+			}
+
+			// send a signal to the counter manager
+			mNewNotificationSignal();
+		}
 	}
 	else if (notify["sigtype"].asString() == "delete")
 	{
-		mChannel->killToastByNotificationID(notification->getID());
+		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName())
+		{
+			LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
+		}
+		else
+		{
+			mChannel->killToastByNotificationID(notification->getID());
+		}
 	}
 	return true;
 }
@@ -123,6 +142,14 @@ void LLScriptHandler::onDeleteToast(LLToast* toast)
 	// send a signal to a listener to let him perform some action
 	// in this case listener is a SysWellWindow and it will remove a corresponding item from its list
 	mNotificationIDSignal(toast->getNotificationID());
+
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(toast->getNotificationID());
+	
+	if( notification && 
+		(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName()) )
+	{
+		LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
+	}
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp
index 03ad19f9118ca92836ba090095b55d8727f9fdd6..7563cc7f61cf4a400df81f39241a581f74c9eb59 100644
--- a/indra/newview/llpanelavatartag.cpp
+++ b/indra/newview/llpanelavatartag.cpp
@@ -92,7 +92,7 @@ void LLPanelAvatarTag::setAvatarId(const LLUUID& avatar_id)
 boost::signals2::connection LLPanelAvatarTag::setLeftButtonClickCallback(
 																  const commit_callback_t& cb)
 {
-	return mCommitSignal.connect(cb);
+	return setCommitCallback(cb);
 }
 
 BOOL LLPanelAvatarTag::handleMouseDown(S32 x, S32 y, MASK mask)
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 10b419dfdbb7a48da43ef6412dca8fb59e01d366..e24fa14e1e94f3662e82870071ce1d28d4d36a86 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -67,6 +67,27 @@ static const std::string TRASH_BUTTON_NAME = "trash_btn";
 // helper functions
 static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string);
 
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLLandmarksPanelObserver
+//
+// Bridge to support knowing when the inventory has changed to update
+// landmarks accordions visibility.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLLandmarksPanelObserver : public LLInventoryObserver
+{
+public:
+	LLLandmarksPanelObserver(LLLandmarksPanel* lp) : mLP(lp) {}
+	virtual ~LLLandmarksPanelObserver() {}
+	/*virtual*/ void changed(U32 mask);
+
+private:
+	LLLandmarksPanel* mLP;
+};
+
+void LLLandmarksPanelObserver::changed(U32 mask)
+{
+	mLP->updateFilteredAccordions();
+}
 
 LLLandmarksPanel::LLLandmarksPanel()
 	:	LLPanelPlacesTab()
@@ -80,11 +101,16 @@ LLLandmarksPanel::LLLandmarksPanel()
 	,	mGearLandmarkMenu(NULL)
 	,	mDirtyFilter(false)
 {
+	mInventoryObserver = new LLLandmarksPanelObserver(this);
+	gInventory.addObserver(mInventoryObserver);
+
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml");
 }
 
 LLLandmarksPanel::~LLLandmarksPanel()
 {
+	if (gInventory.containsObserver(mInventoryObserver))
+		gInventory.removeObserver(mInventoryObserver);
 }
 
 BOOL LLLandmarksPanel::postBuild()
@@ -135,8 +161,14 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)
 		LLAccordionCtrlTab* tab = *iter;
 		tab->setVisible(true);
 
-		// expand accordion to see matched items in all ones. See EXT-2014.
+		// expand accordion to see matched items in each one. See EXT-2014.
 		tab->changeOpenClose(false);
+
+		// refresh all accordions to display their contents in case of less restrictive filter
+		LLInventorySubTreePanel* inventory_list = dynamic_cast<LLInventorySubTreePanel*>(tab->getAccordionView());
+		if (NULL == inventory_list) continue;
+		LLFolderView* fv = inventory_list->getRootFolder();
+		fv->refresh();
 	}
 }
 
@@ -223,6 +255,31 @@ void LLLandmarksPanel::onSelectorButtonClicked()
 	}
 }
 
+void LLLandmarksPanel::updateFilteredAccordions()
+{
+	LLInventoryPanel* inventory_list = NULL;
+	LLAccordionCtrlTab* accordion_tab = NULL;
+	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+	{
+		accordion_tab = *iter;
+		inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
+		if (NULL == inventory_list) continue;
+		LLFolderView* fv = inventory_list->getRootFolder();
+
+		bool has_descendants = fv->hasFilteredDescendants();
+
+		accordion_tab->setVisible(has_descendants);
+	}
+
+	// we have to arrange accordion tabs for cases when filter string is less restrictive but
+	// all items are still filtered.
+	static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
+	accordion->arrange();
+
+	// now filter state is applied to accordion tabs
+	mDirtyFilter = false;
+}
+
 //////////////////////////////////////////////////////////////////////////
 // PROTECTED METHODS
 //////////////////////////////////////////////////////////////////////////
@@ -833,31 +890,6 @@ void LLLandmarksPanel::doIdle(void* landmarks_panel)
 
 }
 
-void LLLandmarksPanel::updateFilteredAccordions()
-{
-	LLInventoryPanel* inventory_list = NULL;
-	LLAccordionCtrlTab* accordion_tab = NULL;
-	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
-	{
-		accordion_tab = *iter;
-		inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
-		if (NULL == inventory_list) continue;
-		LLFolderView* fv = inventory_list->getRootFolder();
-
-		bool has_visible_children = fv->hasVisibleChildren();
-
-		accordion_tab->setVisible(has_visible_children);
-	}
-
-	// we have to arrange accordion tabs for cases when filter string is less restrictive but 
-	// all items are still filtered.
-	static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
-	accordion->arrange();
-
-	// now filter state is applied to accordion tabs
-	mDirtyFilter = false;
-}
-
 void LLLandmarksPanel::doShowOnMap(LLLandmark* landmark)
 {
 	LLVector3d landmark_global_pos;
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 777ee562d237b4c2df70fb1ac7a4afe9f6416671..c65abc178b80cb8666b37652c9f9e4b4753e8644 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -46,6 +46,7 @@ class LLAccordionCtrlTab;
 class LLFolderViewItem;
 class LLMenuGL;
 class LLInventoryPanel;
+class LLInventoryObserver;
 class LLInventorySubTreePanel;
 
 class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver
@@ -62,7 +63,14 @@ class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver
 
 	void onSelectionChange(LLInventorySubTreePanel* inventory_list, const std::deque<LLFolderViewItem*> &items, BOOL user_action);
 	void onSelectorButtonClicked();
-	
+
+	/**
+	 * Updates accordions according to filtered items in lists.
+	 *
+	 * It hides accordion for empty lists
+	 */
+	void updateFilteredAccordions();
+
 protected:
 	/**
 	 * @return true - if current selected panel is not null and selected item is a landmark
@@ -121,13 +129,6 @@ class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver
 	 */
 	static void doIdle(void* landmarks_panel);
 
-	/**
-	 * Updates accordions according to filtered items in lists.
-	 *
-	 * It hides accordion for empty lists
-	 */
-	void updateFilteredAccordions();
-
 	/**
 	 * Landmark actions callbacks. Fire when a landmark is loaded from the list.
 	 */
@@ -147,6 +148,7 @@ class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver
 	LLMenuGL*					mGearFolderMenu;
 	LLMenuGL*					mMenuAdd;
 	LLInventorySubTreePanel*	mCurrentSelectedList;
+	LLInventoryObserver*		mInventoryObserver;
 
 	LLPanel*					mListCommands;
 	bool 						mSortByDate;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index dbe0ec3b86e9c8f98719815afd5b42836f38468a..4237681c800f61d88791882045ad3e6da319a066 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -41,6 +41,7 @@
 
 #include "llpanelobjectinventory.h"
 
+#include "llmenugl.h"
 #include "roles_constants.h"
 
 #include "llagent.h"
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 29f7cc18518cb962961b6da61dacc4b9b6a5bcdf..0c832defd72dfec74076fcc6247b6c2557a5c2ca 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -483,7 +483,7 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAva
 
 BOOL LLPanelPeople::postBuild()
 {
-	mVisibleSignal.connect(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2));
+	setVisibleCallback(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2));
 	
 	mFilterEditor = getChild<LLFilterEditor>("filter_input");
 	mFilterEditor->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2));
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index d4ab5013f9592dc4a54e667375d53441e7f6e903..bcf5b16aa656d9f67ab53a1f29cf78f5a0318957 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -190,7 +190,7 @@ void LLPanelProfileView::processOnlineStatus(bool online)
 void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group)
 {
 	llassert(getAvatarId() == id);
-	getChild<LLTextBox>("user_name", FALSE)->setValue(first_name + " " + last_name);
+	getChild<LLUICtrl>("user_name", FALSE)->setValue(first_name + " " + last_name);
 }
 
 void LLPanelProfileView::togglePanel(LLPanel* panel)
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 49a2a3723d214b688a116250373371028612b6f7..3d2c529dda6e29a11c3d439024d0647d0e3c3dbe 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -355,7 +355,7 @@ LLPreviewGesture::~LLPreviewGesture()
 
 BOOL LLPreviewGesture::postBuild()
 {
-	mVisibleSignal.connect(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2));
+	setVisibleCallback(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2));
 	
 	LLLineEditor* edit;
 	LLComboBox* combo;
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index 24505f6bd6fd68ea1598c3d1ac267cc43b152e53..fb9db42cf6e469a2d886aa69c498d1de864e57fa 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -46,6 +46,7 @@
 #include "lldockablefloater.h"
 #include "llsyswellwindow.h"
 #include "llimfloater.h"
+#include "llscriptfloater.h"
 
 #include <algorithm>
 
@@ -686,7 +687,8 @@ void LLScreenChannel::updateShowToastsState()
 	}
 
 	// for IM floaters showed in a docked state - prohibit showing of ani toast
-	if(dynamic_cast<LLIMFloater*>(floater))
+	if(dynamic_cast<LLIMFloater*>(floater)
+		|| dynamic_cast<LLScriptFloater*>(floater) )
 	{
 		setShowToasts(!(floater->getVisible() && floater->isDocked()));
 		if (!getShowToasts())
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bdea6ff45944cafea6f4a40c786b4c8b9cdb91f0
--- /dev/null
+++ b/indra/newview/llscriptfloater.cpp
@@ -0,0 +1,335 @@
+/** 
+ * @file llscriptfloater.cpp
+ * @brief LLScriptFloater class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llscriptfloater.h"
+
+#include "llbottomtray.h"
+#include "llchannelmanager.h"
+#include "llchiclet.h"
+#include "llfloaterreg.h"
+#include "llscreenchannel.h"
+#include "lltoastnotifypanel.h"
+#include "llviewerwindow.h"
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLUUID notification_id_to_object_id(const LLUUID& notification_id)
+{
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
+	if(notification)
+	{
+		return notification->getPayload()["object_id"].asUUID();
+	}
+	return LLUUID::null;
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLScriptFloater::LLScriptFloater(const LLSD& key)
+: LLTransientDockableFloater(NULL, true, key)
+, mScriptForm(NULL)
+, mObjectId(key.asUUID())
+{
+}
+
+bool LLScriptFloater::toggle(const LLUUID& object_id)
+{
+	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+
+	// show existing floater
+	if(floater)
+	{
+		if(floater->getVisible())
+		{
+			floater->setVisible(false);
+			return false;
+		}
+		else
+		{
+			floater->setVisible(TRUE);
+			floater->setFocus(TRUE);
+			return true;
+		}
+	}
+	// create and show new floater
+	else
+	{
+		show(object_id);
+		return true;
+	}
+}
+
+LLScriptFloater* LLScriptFloater::show(const LLUUID& object_id)
+{
+	LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", object_id);
+	floater->createForm(object_id);
+
+	if (floater->getDockControl() == NULL)
+	{
+		LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(object_id);
+		if (chiclet == NULL)
+		{
+			llerror("Dock chiclet for LLScriptFloater doesn't exist", 0);
+		}
+		else
+		{
+			LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
+		}
+
+		floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(),
+			LLDockControl::TOP,  boost::bind(&LLScriptFloater::getAllowedRect, floater, _1)));
+	}
+
+	return floater;
+}
+
+void LLScriptFloater::getAllowedRect(LLRect& rect)
+{
+	rect = gViewerWindow->getWorldViewRectRaw();
+}
+
+void LLScriptFloater::createForm(const LLUUID& object_id)
+{
+	// delete old form
+	if(mScriptForm)
+	{
+		removeChild(mScriptForm);
+		mScriptForm->die();
+	}
+
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(
+		LLScriptFloaterManager::getInstance()->findNotificationId(object_id));
+	if(NULL == notification)
+	{
+		return;
+	}
+
+	// create new form
+	mScriptForm = new LLToastNotifyPanel(notification);
+	addChild(mScriptForm);
+
+	// position form on floater
+	mScriptForm->setOrigin(0, 0);
+
+	// make floater size fit form size
+	LLRect toast_rect = getRect();
+	LLRect panel_rect = mScriptForm->getRect();
+	toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight());
+	setShape(toast_rect);
+}
+
+void LLScriptFloater::onClose(bool app_quitting)
+{
+	LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId());
+}
+
+void LLScriptFloater::setDocked(bool docked, bool pop_on_undock /* = true */)
+{
+	LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+
+	hideToastsIfNeeded();
+}
+
+void LLScriptFloater::setVisible(BOOL visible)
+{
+	LLTransientDockableFloater::setVisible(visible);
+
+	hideToastsIfNeeded();
+}
+
+void LLScriptFloater::hideToastsIfNeeded()
+{
+	using namespace LLNotificationsUI;
+
+	// find channel
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID(
+		LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+	// update notification channel state
+	if(channel)
+	{
+		channel->updateShowToastsState();
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
+{
+	// get scripted Object's ID
+	LLUUID object_id = notification_id_to_object_id(notification_id);
+	if(object_id.isNull())
+	{
+		llwarns << "Invalid notification, no object id" << llendl;
+		return;
+	}
+
+	// If an Object spawns more-than-one floater, only the newest one is shown. 
+	// The previous is automatically closed.
+	script_notification_map_t::iterator it = mNotifications.find(object_id);
+	if(it != mNotifications.end())
+	{
+		onRemoveNotification(notification_id);
+	}
+
+	LLNotificationData nd = {notification_id};
+	mNotifications.insert(std::make_pair(object_id, nd));
+
+	LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(object_id);
+}
+
+void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
+{
+	LLUUID object_id = notification_id_to_object_id(notification_id);
+	if(object_id.isNull())
+	{
+		llwarns << "Invalid notification, no object id" << llendl;
+		return;
+	}
+
+	using namespace LLNotificationsUI;
+
+	// remove related toast
+	LLUUID channel_id(gSavedSettings.getString("NotificationChannelUUID"));
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>
+		(LLChannelManager::getInstance()->findChannelByID(channel_id));
+	if(channel)
+	{
+		channel->killToastByNotificationID(findNotificationToastId(object_id));
+	}
+
+	mNotifications.erase(object_id);
+
+	// remove related chiclet
+	LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(object_id);
+
+	// close floater
+	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+	if(floater)
+	{
+		floater->closeFloater();
+	}
+}
+
+void LLScriptFloaterManager::removeNotificationByObjectId(const LLUUID& object_id)
+{
+	// Check we have not removed notification yet
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(
+		findNotificationId(object_id));
+	if(notification)
+	{
+		onRemoveNotification(notification->getID());
+	}
+}
+
+void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& object_id)
+{
+	// hide "new message" icon from chiclet
+	LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(object_id);
+	if(chiclet)
+	{
+		chiclet->setShowNewMessagesIcon(false);
+	}
+
+	// kill toast
+	using namespace LLNotificationsUI;
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID(
+		LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+	if(channel)
+	{
+		channel->killToastByNotificationID(findNotificationToastId(object_id));
+	}
+
+	// toggle floater
+	LLScriptFloater::toggle(object_id);
+}
+
+void LLScriptFloaterManager::setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id)
+{
+	script_notification_map_t::iterator it = mNotifications.find(object_id);
+	if(mNotifications.end() != it)
+	{
+		it->second.toast_notification_id = notification_id;
+	}
+}
+
+LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id)
+{
+	script_notification_map_t::const_iterator it = mNotifications.find(object_id);
+	if(mNotifications.end() != it)
+	{
+		return it->second.notification_id;
+	}
+	return LLUUID::null;
+}
+
+LLUUID LLScriptFloaterManager::findNotificationToastId(const LLUUID& object_id)
+{
+	script_notification_map_t::const_iterator it = mNotifications.find(object_id);
+	if(mNotifications.end() != it)
+	{
+		return it->second.toast_notification_id;
+	}
+	return LLUUID::null;
+}
+
+//static
+void LLScriptFloaterManager::onToastButtonClick(const LLSD&notification, const LLSD&response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLUUID object_id = notification["payload"]["object_id"].asUUID();
+
+	switch(option)
+	{
+	case 0: // "Open"
+		LLScriptFloaterManager::getInstance()->toggleScriptFloater(object_id);
+		break;
+	case 1: // "Ignore"
+		LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id);
+		break;
+	case 2: // "Block"
+		LLMuteList::getInstance()->add(LLMute(object_id, notification["substitutions"]["TITLE"], LLMute::OBJECT));
+		LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id);
+		break;
+	default:
+		llwarns << "Unexpected value" << llendl;
+		break;
+	}
+}
+
+// EOF
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
new file mode 100644
index 0000000000000000000000000000000000000000..0e1a7f36b72fdf8724053d4d6fe70c61f50a5619
--- /dev/null
+++ b/indra/newview/llscriptfloater.h
@@ -0,0 +1,164 @@
+/** 
+ * @file llscriptfloater.h
+ * @brief LLScriptFloater class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_SCRIPTFLOATER_H
+#define LL_SCRIPTFLOATER_H
+
+#include "lltransientdockablefloater.h"
+
+class LLToastNotifyPanel;
+
+/**
+ * Handles script notifications ("ScriptDialog" and "ScriptDialogGroup")
+ * and manages Script Floaters.
+ */
+class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager>
+{
+public:
+
+	/**
+	 * Handles new notifications.
+	 * Saves notification and object ids, removes old notification if needed, creates script chiclet
+	 * Note that one object can spawn one script floater.
+	 */
+	void onAddNotification(const LLUUID& notification_id);
+
+	/**
+	 * Handles notification removal.
+	 * Removes script notification toast, removes script chiclet, closes script floater
+	 */
+	void onRemoveNotification(const LLUUID& notification_id);
+
+	/**
+	 * Wrapper for onRemoveNotification, removes notification by object id.
+	 */
+	void removeNotificationByObjectId(const LLUUID& object_id);
+
+	/**
+	 * Toggles script floater.
+	 * Removes "new message" icon from chiclet and removes notification toast.
+	 */
+	void toggleScriptFloater(const LLUUID& object_id);
+
+	LLUUID findNotificationId(const LLUUID& object_id);
+
+	LLUUID findNotificationToastId(const LLUUID& object_id);
+
+	/**
+	 * Associate notification toast id with object id.
+	 */
+	void setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id);
+
+	/**
+	* Callback for notification toast buttons.
+	*/
+	static void onToastButtonClick(const LLSD&notification, const LLSD&response);
+
+private:
+
+	struct LLNotificationData
+	{
+		LLUUID notification_id;
+		LLUUID toast_notification_id;
+	};
+
+	// <object_id, notification_data>
+	typedef std::map<LLUUID, LLNotificationData> script_notification_map_t;
+
+	script_notification_map_t mNotifications;
+};
+
+/**
+ * Floater script forms.
+ * LLScriptFloater will create script form based on notification data and 
+ * will auto fit the form.
+ */
+class LLScriptFloater : public LLTransientDockableFloater
+{
+public:
+
+	/**
+	 * key - UUID of scripted Object
+	 */
+	LLScriptFloater(const LLSD& key);
+
+	virtual ~LLScriptFloater(){};
+
+	/**
+	 * Toggle existing floater or create and show a new one.
+	 */
+	static bool toggle(const LLUUID& object_id);
+
+	/**
+	 * Creates and shows floater
+	 */
+	static LLScriptFloater* show(const LLUUID& object_id);
+
+	const LLUUID& getObjectId() { return mObjectId; }
+
+	/**
+	 * Close notification if script floater is closed.
+	 */
+	/*virtual*/ void onClose(bool app_quitting);
+
+	/**
+	 * Hide all notification toasts when we show dockable floater
+	 */
+	/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true);
+
+	/**
+	 * Hide all notification toasts when we show dockable floater
+	 */
+	/*virtual*/ void setVisible(BOOL visible);
+
+protected:
+
+	/**
+	 * Creates script form, will delete old form if floater is shown for same object.
+	 */
+	void createForm(const LLUUID& object_id);
+
+	/*virtual*/ void getAllowedRect(LLRect& rect);
+
+	/**
+	 * Hide all notification toasts.
+	 */
+	static void hideToastsIfNeeded();
+
+	void setObjectId(const LLUUID& id) { mObjectId = id; }
+
+private:
+	LLToastNotifyPanel* mScriptForm;
+	LLUUID mObjectId;
+};
+
+#endif //LL_SCRIPTFLOATER_H
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 7711f3c7330bd09a16c972f7d9c39b9a5b3c537a..2f98435b8314e2640e3e7419a463491551a9eb62 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -34,6 +34,7 @@
 
 #include "lltextbox.h"
 
+#include "llagent.h"
 #include "llbottomtray.h"
 #include "llsidetray.h"
 #include "llviewerwindow.h"
@@ -700,7 +701,7 @@ void	LLSideTray::updateSidetrayVisibility()
 	// set visibility of parent container based on collapsed state
 	if (getParent())
 	{
-		getParent()->setVisible(!mCollapsed);
+		getParent()->setVisible(!mCollapsed && !gAgent.cameraMouselook());
 	}
 }
 
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 54652c110852e3ab600a525a681c285fe2d025d6..73215746819f36b4468ab451bc960fdc8d045b5d 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -120,7 +120,7 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 	void		setVisible(BOOL visible)
 	{
-		LLPanel::setVisible(visible);
+		if (getParent()) getParent()->setVisible(visible);
 	}
 
 	LLPanel*	getButtonsPanel() { return mButtonsPanel; }
@@ -141,6 +141,7 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 	void		processTriState ();
 	
+	void		updateSidetrayVisibility();
 
 protected:
 	LLSideTrayTab* getTab		(const std::string& name);
@@ -153,10 +154,6 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 
 	void		toggleTabButton	(LLSideTrayTab* tab);
 
-	void		updateSidetrayVisibility();
-
-	
-
 private:
 	// Implementation of LLDestroyClass<LLSideTray>
 	static void destroyClass()
@@ -166,7 +163,6 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 			LLSideTray::getInstance()->setEnabled(FALSE);
 	}
 	
-
 private:
 
 	LLPanel*						mButtonsPanel;
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 3ce35499615a99c6ee942ba73ccd93dfea05bf8f..bdaacce981d653b584e0eef1e848658ba5071aef 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -34,7 +34,6 @@
 #define LL_LLSTATUSBAR_H
 
 #include "llpanel.h"
-#include <llmenugl.h>
 
 // "Constants" loaded from settings.xml at start time
 extern S32 STATUS_BAR_HEIGHT;
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index bc886d5743281d90470c35d4af915514d1f0c637..cc4689062eb11e16a66fd8349047edd21bb46dfc 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -52,7 +52,7 @@
 
 const std::string& LLTeleportHistoryItem::getTitle() const
 {
-	return gSavedSettings.getBOOL("ShowCoordinatesOption") ? mFullTitle : mTitle;
+	return gSavedSettings.getBOOL("NavBarShowCoordinates") ? mFullTitle : mTitle;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -177,7 +177,7 @@ void LLTeleportHistory::purgeItems()
 std::string LLTeleportHistory::getCurrentLocationTitle(bool full, const LLVector3& local_pos_override)
 {
 	std::string location_name;
-	LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM : LLAgentUI::LOCATION_FORMAT_NORMAL;
+	LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_NO_MATURITY : LLAgentUI::LOCATION_FORMAT_NORMAL;
 
 	if (!LLAgentUI::buildLocationString(location_name, fmt, local_pos_override)) location_name = "Unknown";
 	return location_name;
diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h
index 9f5563ed0b45563d39356cd829287aa8f0390162..a82bec7c4f466a341f97c744d879dbbf8e968f93 100644
--- a/indra/newview/llteleporthistory.h
+++ b/indra/newview/llteleporthistory.h
@@ -57,7 +57,8 @@ class LLTeleportHistoryItem
 	{}
 
 	/**
-	 * @return title formatted according to the current value of the ShowCoordinatesOption setting.
+	 * @return title formatted according to the current value of the 
+	 * NavBarShowCoordinates setting.
 	 */
 	const std::string& getTitle() const;
 	
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 6f3dabe5a73a1e3656af33838ec7753402d62cfd..9bb2a4ad0a9c0d035e0936c1833f9d2b92b0b3a3 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -931,6 +931,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
 	
 	if (mState == DECODE_IMAGE)
 	{
+		if (mDesiredDiscard < 0)
+		{
+			// We aborted, don't decode
+			mState = DONE;
+			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+			return true;
+		}
+		
 		if (mFormattedImage->getDataSize() <= 0)
 		{
 			llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index ded83debad8690eefdfd017c838bd8c98ddbecbd..26b3bdb82e24516926e320bb0b7a17fa2054cd7b 100644
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -247,7 +247,7 @@ bool LLToolMgr::inEdit()
 
 bool LLToolMgr::canEdit()
 {
-	return LLViewerParcelMgr::getInstance()->agentCanBuild();
+	return LLViewerParcelMgr::getInstance()->allowAgentBuild();
 }
 
 void LLToolMgr::toggleBuildMode()
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 7772f613f0a05ea35937a2442566150ef46ee004..642df923795c303ab9c4b71afba8e8762f289569 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -109,6 +109,7 @@
 #include "llfloaterwhitelistentry.h"
 #include "llfloaterwindlight.h"
 #include "llfloaterworldmap.h"
+#include "llimfloatercontainer.h"
 #include "llinspectavatar.h"
 #include "llinspectgroup.h"
 #include "llinspectobject.h"
@@ -124,6 +125,7 @@
 #include "llpreviewsound.h"
 #include "llpreviewtexture.h"
 #include "llsyswellwindow.h"
+#include "llscriptfloater.h"
 // *NOTE: Please add files in alphabetical order to keep merges easy.
 
 
@@ -171,6 +173,8 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>);
 
 	LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>);
+	LLFloaterReg::add("im_container", "floater_im_container.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloaterContainer>);
+	LLFloaterReg::add("script_floater", "floater_script.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLScriptFloater>);
 	LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>);
 	LLFloaterReg::add("inventory", "floater_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInventory>);
 	LLFloaterReg::add("inspect", "floater_inspect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInspect>);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index c67af994a42a3ff8e4d7a35e182f64406bf8dfb5..8bcf2c62815445a9f8b449c8ed73b1514375ca48 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2736,7 +2736,7 @@ bool enable_object_edit()
 	bool enable = false;
 	if (gAgent.inPrelude())
 	{
-		enable = LLViewerParcelMgr::getInstance()->agentCanBuild()
+		enable = LLViewerParcelMgr::getInstance()->allowAgentBuild()
 			|| LLSelectMgr::getInstance()->getSelection()->isAttachment();
 	} 
 	else if (LLSelectMgr::getInstance()->selectGetModify())
@@ -5678,6 +5678,16 @@ class LLFloaterVisible : public view_listener_t
 	}
 };
 
+class LLShowSidetrayPanel : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		std::string panel_name = userdata.asString();
+		LLSideTray::getInstance()->showPanel(panel_name, LLSD());
+		return true;
+	}
+};
+
 bool callback_show_url(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
@@ -6096,7 +6106,7 @@ class LLAttachmentEnableDrop : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		BOOL can_build   = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->agentCanBuild());
+		BOOL can_build   = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->allowAgentBuild());
 
 		//Add an inventory observer to only allow dropping the newly attached item
 		//once it exists in your inventory.  Look at Jira 2422.
@@ -8039,6 +8049,7 @@ void initialize_menus()
 	visible.add("Object.VisibleEdit", boost::bind(&enable_object_edit));
 
 	view_listener_t::addMenu(new LLFloaterVisible(), "FloaterVisible");
+	view_listener_t::addMenu(new LLShowSidetrayPanel(), "ShowSidetrayPanel");
 	view_listener_t::addMenu(new LLSomethingSelected(), "SomethingSelected");
 	view_listener_t::addMenu(new LLSomethingSelectedNoHUD(), "SomethingSelectedNoHUD");
 	view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 8db6d5917a8d9497eb82fc1a8e564296032ec24d..4d7d3ee8ac7c60724382b2d6c98cfeb748a64175 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -101,6 +101,7 @@
 #include "llpanelgrouplandmoney.h"
 #include "llpanelplaces.h"
 #include "llrecentpeople.h"
+#include "llscriptfloater.h"
 #include "llselectmgr.h"
 #include "llsidetray.h"
 #include "llstartup.h"
@@ -5380,6 +5381,17 @@ void process_script_dialog(LLMessageSystem* msg, void**)
 		notification = LLNotifications::instance().add(
 			LLNotification::Params("ScriptDialogGroup").substitutions(args).payload(payload).form_elements(form.asLLSD()));
 	}
+
+	// "ScriptDialog" and "ScriptDialogGroup" are handles by LLScriptFloaterManager.
+	// We want to inform user that there is a script floater, lets add "ScriptToast"
+	LLNotification::Params p("ScriptToast");
+	p.substitutions(args).payload(payload).functor.function(boost::bind(
+		LLScriptFloaterManager::onToastButtonClick, _1, _2));
+
+	notification = LLNotifications::instance().add(p);
+
+	LLScriptFloaterManager::getInstance()->setNotificationToastId(
+		object_id, notification->getID());
 }
 
 //---------------------------------------------------------------------------
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index aa0987aa7d1223635a663a09366f20d002f12302..fcaf49c88493951764f08045512741d3a067e395 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -650,7 +650,7 @@ LLParcel *LLViewerParcelMgr::getAgentParcel() const
 }
 
 // Return whether the agent can build on the land they are on
-bool LLViewerParcelMgr::agentCanBuild() const
+bool LLViewerParcelMgr::allowAgentBuild() const
 {
 	if (mAgentParcel)
 	{
@@ -664,19 +664,47 @@ bool LLViewerParcelMgr::agentCanBuild() const
 	}
 }
 
-BOOL LLViewerParcelMgr::agentCanTakeDamage() const
+bool LLViewerParcelMgr::allowAgentVoice() const
 {
-	return mAgentParcel->getAllowDamage();
+	LLViewerRegion* region = gAgent.getRegion();
+	return region && region->isVoiceEnabled()
+		&& mAgentParcel	&& mAgentParcel->getParcelFlagAllowVoice();
 }
 
-BOOL LLViewerParcelMgr::agentCanFly() const
+bool LLViewerParcelMgr::allowAgentFly() const
 {
-	return TRUE;
+	LLViewerRegion* region = gAgent.getRegion();
+	return region && !region->getBlockFly()
+		&& mAgentParcel && mAgentParcel->getAllowFly();
 }
 
-F32 LLViewerParcelMgr::agentDrawDistance() const
+// Can the agent be pushed around by LLPushObject?
+bool LLViewerParcelMgr::allowAgentPush() const
 {
-	return 512.f;
+	LLViewerRegion* region = gAgent.getRegion();
+	return region && !region->getRestrictPushObject()
+		&& mAgentParcel && !mAgentParcel->getRestrictPushObject();
+}
+
+bool LLViewerParcelMgr::allowAgentScripts() const
+{
+	LLViewerRegion* region = gAgent.getRegion();
+	// *NOTE: This code does not take into account group-owned parcels
+	// and the flag to allow group-owned scripted objects to run.
+	// This mirrors the traditional menu bar parcel icon code, but is not
+	// technically correct.
+	return region
+		&& !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)
+		&& !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)
+		&& mAgentParcel
+		&& mAgentParcel->getAllowOtherScripts();
+}
+
+bool LLViewerParcelMgr::allowAgentDamage() const
+{
+	LLViewerRegion* region = gAgent.getRegion();
+	return region && region->getAllowDamage()
+		&& mAgentParcel && mAgentParcel->getAllowDamage();
 }
 
 BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 1c8fe23dba125ed08ca0414935d84988f68ae7f3..379190789b09e98e64e61129d12bde672a15ee07 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -56,9 +56,6 @@ class LLViewerRegion;
 //							  | EAST_MASK 
 //							  | WEST_MASK);
 
-const F32 PARCEL_POST_HEIGHT = 0.666f;
-//const F32 PARCEL_POST_HEIGHT = 20.f;
-
 // Specify the type of land transfer taking place
 //enum ELandTransferType
 //{
@@ -171,10 +168,29 @@ class LLViewerParcelMgr : public LLSingleton<LLViewerParcelMgr>
 
 	LLParcel*	getCollisionParcel() const;
 
-	BOOL	agentCanTakeDamage() const;
-	BOOL	agentCanFly() const;
-	F32		agentDrawDistance() const;
-	bool	agentCanBuild() const;
+	// Can this agent build on the parcel he is on?
+	// Used for parcel property icons in nav bar.
+	bool	allowAgentBuild() const;
+	
+	// Can this agent speak on the parcel he is on?
+	// Used for parcel property icons in nav bar.
+	bool	allowAgentVoice() const;
+	
+	// Can this agent start flying on this parcel?
+	// Used for parcel property icons in nav bar.
+	bool	allowAgentFly() const;
+	
+	// Can this agent be pushed by llPushObject() on this parcel?
+	// Used for parcel property icons in nav bar.
+	bool	allowAgentPush() const;
+	
+	// Can scripts written by non-parcel-owners run on the agent's current
+	// parcel?  Used for parcel property icons in nav bar.
+	bool	allowAgentScripts() const;
+	
+	// Can the agent be damaged here?
+	// Used for parcel property icons in nav bar.
+	bool	allowAgentDamage() const;
 
 	F32		getHoverParcelWidth() const		
 				{ return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); }
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index db66faef8139a56c344335e92aa6221604f2300c..29d40d073ce0e1294f43904e6b9f74b00f91b292 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1573,7 +1573,8 @@ void LLViewerWindow::initWorldUI()
 	LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container");
 	LLSideTray* sidetrayp = LLSideTray::getInstance();
 	sidetrayp->setShape(side_tray_container->getLocalRect());
-	sidetrayp->setFollowsAll();
+	// don't follow right edge to avoid spurious resizes, since we are using a fixed width layout
+	sidetrayp->setFollows(FOLLOWS_LEFT|FOLLOWS_TOP|FOLLOWS_BOTTOM);
 	side_tray_container->addChild(sidetrayp);
 	side_tray_container->setVisible(FALSE);
 	
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 507c726e02d6e1834c44ee1332d16d667fc4cd83..5aad87630d5ce05158a4b3d15b6c1bd28b03f439 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -344,7 +344,12 @@ LLPipeline::LLPipeline() :
 	mWLSkyPool(NULL),
 	mLightMask(0),
 	mLightMovingMask(0),
-	mLightingDetail(0)
+	mLightingDetail(0),
+	mScreenWidth(0),
+	mScreenHeight(0),
+	mViewportWidth(0),
+	mViewportHeight(0)
+
 {
 	mNoiseMap = 0;
 	mTrueNoiseMap = 0;
@@ -518,13 +523,29 @@ void LLPipeline::resizeScreenTexture()
 		GLuint view_height = gViewerWindow->getWorldViewHeightRaw();
 	
 		allocateScreenBuffer(resX, resY, view_width, view_height);
-
-		llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl;
 	}
 }
 
 void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height)
 {
+	bool screen_size_changed = resX != mScreenWidth || resY != mScreenHeight;
+	bool viewport_size_changed = viewport_width != mViewportWidth || viewport_height != mViewportHeight;
+
+	if (!screen_size_changed
+		&& !viewport_size_changed)
+	{
+		// nothing to do
+		return;
+	}
+
+	// remember these dimensions
+	mScreenWidth = resX;
+	mScreenHeight = resY;
+	mViewportWidth = viewport_width;
+	mViewportHeight = viewport_height;
+
+	llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl;
+
 	U32 samples = gSavedSettings.getU32("RenderFSAASamples");
 
 	U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor");
@@ -534,7 +555,8 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
 		resY /= res_mod;
 	}
 
-	if (gSavedSettings.getBOOL("RenderUIBuffer"))
+	if (gSavedSettings.getBOOL("RenderUIBuffer") 
+		&& screen_size_changed)
 	{
 		mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
 	}	
@@ -542,25 +564,39 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
 	if (LLPipeline::sRenderDeferred)
 	{
 		//allocate deferred rendering color buffers
-		mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
-		mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+		if (screen_size_changed)
+		{
+			mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+			mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+			addDeferredAttachments(mDeferredScreen);
+		}
+		// always set viewport to desired size, since allocate resets the viewport
 		mDeferredScreen.setViewport(viewport_width, viewport_height);
 		mDeferredDepth.setViewport(viewport_width, viewport_height);
-		addDeferredAttachments(mDeferredScreen);
-		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		
-		mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+
+		if (screen_size_changed)
+		{
+			mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		
+			mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+		}
 		mScreen.setViewport(viewport_width, viewport_height);
 		mEdgeMap.setViewport(viewport_width, viewport_height);
 
 		for (U32 i = 0; i < 3; i++)
 		{
-			mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+			if (screen_size_changed)
+			{
+				mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+			}
 			mDeferredLight[i].setViewport(viewport_width, viewport_height);
 		}
 
 		for (U32 i = 0; i < 2; i++)
 		{
-			mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+			if (screen_size_changed)
+			{
+				mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+			}
 			mGIMapPost[i].setViewport(viewport_width, viewport_height);
 		}
 
@@ -568,7 +604,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
 
 		for (U32 i = 0; i < 4; i++)
 		{
-			mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+			if (screen_size_changed)
+			{
+				mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+			}
 			mShadow[i].setViewport(viewport_width, viewport_height);
 		}
 
@@ -578,7 +617,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
 
 		for (U32 i = 4; i < 6; i++)
 		{
-			mShadow[i].allocate(width, height, 0, TRUE, FALSE);
+			if (screen_size_changed)
+			{
+				mShadow[i].allocate(width, height, 0, TRUE, FALSE);
+			}
 			mShadow[i].setViewport(viewport_width, viewport_height);
 		}
 
@@ -586,32 +628,41 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
 
 		width = nhpo2(resX)/2;
 		height = nhpo2(resY)/2;
-		mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE);
+		if (screen_size_changed)
+		{
+			mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE);
+		}
 		mLuminanceMap.setViewport(viewport_width, viewport_height);
 	}
 	else
 	{
-		mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		
+		if (screen_size_changed)
+		{
+			mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		
+		}
 		mScreen.setViewport(viewport_width, viewport_height);
 	}
 	
 
 	if (gGLManager.mHasFramebufferMultisample && samples > 1)
 	{
-		mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples);
-		mSampleBuffer.setViewport(viewport_width, viewport_height);
-		mScreen.setSampleBuffer(&mSampleBuffer);
-
-		if (LLPipeline::sRenderDeferred)
+		if (screen_size_changed)
 		{
-			addDeferredAttachments(mSampleBuffer);
-			mDeferredScreen.setSampleBuffer(&mSampleBuffer);
+			mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples);
+			if (LLPipeline::sRenderDeferred)
+			{
+				addDeferredAttachments(mSampleBuffer);
+				mDeferredScreen.setSampleBuffer(&mSampleBuffer);
+			}
 		}
+		mSampleBuffer.setViewport(viewport_width, viewport_height);
+		mScreen.setSampleBuffer(&mSampleBuffer);
 
 		stop_glerror();
 	}
 	
-	if (LLPipeline::sRenderDeferred)
+	if (LLPipeline::sRenderDeferred 
+		&& screen_size_changed)
 	{ //share depth buffer between deferred targets
 		mDeferredScreen.shareDepthBuffer(mScreen);
 		for (U32 i = 0; i < 3; i++)
@@ -726,6 +777,10 @@ void LLPipeline::createGLBuffers()
 			mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE,FALSE);
 		}
 
+		// force reallocation of buffers by clearing known dimensions
+		mScreenWidth = 0;
+		mScreenHeight = 0;
+
 		allocateScreenBuffer(resX,resY, viewport_width, viewport_height);
 	}
 	
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 9193e19bb1aaf184329a9b6ff298b089ff16e144..11b7b55f20b34720e6c618aa5cf7c1880cfff92c 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -467,6 +467,11 @@ class LLPipeline
 	static F32				sMinRenderSize;
 
 	//screen texture
+	U32 					mScreenWidth;
+	U32 					mScreenHeight;
+	U32 					mViewportWidth;
+	U32 					mViewportHeight;
+
 	LLRenderTarget			mScreen;
 	LLRenderTarget			mUIScreen;
 	LLRenderTarget			mDeferredScreen;
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
index 98f1f04b9a70d6eeb129a0f0355d220518b03d33..aa3898ca99f816f86ecb763761d43d91a3d7420a 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png and b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
index a355917fcaf9b823436942abfd08af3726af2f9b..598342ea805b903d7e1b5bc9b25d86d41d2d9c96 100644
Binary files a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png and b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index f4a239be62145f3ba0db0c15ceed6d9f149941ef..99f6fc5cb304478fa3093afe46841a994022cf05 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -50,8 +50,12 @@ with the same filename but different name
   <texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" />
   <texture name="Arrow_Right_Press" file_name="navbar/Arrow_Right_Press.png" preload="true" />
 
-  <texture name="Arrow_Up" file_name="widgets/Arrow_Up.png" preload="true" />
-  <texture name="Arrow_Down" file_name="widgets/Arrow_Down.png" preload="true" />
+  <texture name="Arrow_Left" file_name="widgets/Arrow_Left.png" preload="true" />
+  <texture name="Arrow_Right" file_name="widgets/Arrow_Right.png" preload="true" />
+
+  <texture name="Arrow_Small_Up" file_name="widgets/Arrow_Small_Up.png" preload="true" />
+  <texture name="Arrow_Small_Left" file_name="widgets/Arrow_Small_Left.png" preload="true" />
+  <texture name="Arrow_Small_Right" file_name="widgets/Arrow_Small_Right.png" preload="true" />
 
   <texture name="AudioMute_Off" file_name="icons/AudioMute_Off.png" preload="false" />
   <texture name="AudioMute_Over" file_name="icons/AudioMute_Over.png" preload="false" />
@@ -120,6 +124,7 @@ with the same filename but different name
   <texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+  <texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="Container" file_name="containers/Container.png" preload="false" />
@@ -161,7 +166,7 @@ with the same filename but different name
   <texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />
   <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" />
   <texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" />
-  <texture name="Generic_Object_Small" file_name="icons/ Generic_Object_Small.png" preload="false" />
+  <texture name="Generic_Object_Small" file_name="icons/Generic_Object_Small.png" preload="false" />
   <texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" />
   <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />
   <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" />
@@ -439,6 +444,7 @@ with the same filename but different name
   <texture name="Search" file_name="navbar/Search.png" preload="false" />
 
   <texture name="SegmentedBtn_Left_Off" file_name="widgets/SegmentedBtn_Left_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
+  <texture name="SegmentedBtn_Left_Over" file_name="widgets/SegmentedBtn_Left_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="SegmentedBtn_Left_Press" file_name="widgets/SegmentedBtn_Left_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="SegmentedBtn_Left_Disabled" file_name="widgets/SegmentedBtn_Left_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="SegmentedBtn_Left_Selected" file_name="widgets/SegmentedBtn_Left_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
@@ -453,6 +459,7 @@ with the same filename but different name
   <texture name="SegmentedBtn_Middle_Selected_Disabled" file_name="widgets/SegmentedBtn_Middle_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
 
   <texture name="SegmentedBtn_Right_Off" file_name="widgets/SegmentedBtn_Right_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
+  <texture name="SegmentedBtn_Right_Over" file_name="widgets/SegmentedBtn_Right_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="SegmentedBtn_Right_Press" file_name="widgets/SegmentedBtn_Right_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="SegmentedBtn_Right_Disabled" file_name="widgets/SegmentedBtn_Right_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="SegmentedBtn_Right_Selected" file_name="widgets/SegmentedBtn_Right_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d624c377915f4622a4e4897c7099e147a7d8a10
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png
new file mode 100644
index 0000000000000000000000000000000000000000..91c03c426e265431ed5cbf3136e61cac7ad3e50f
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png
new file mode 100644
index 0000000000000000000000000000000000000000..38aac0e5cabb91d65f455fc317c473281a870ffe
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png differ
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd1d11dd0b5f981513643df7c7fe497295e8447c
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png differ
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 615d1bf18d4e9e764f164db93e4a4ce39f439f94..4f1024f56d9f401dfafbbb1964aebfaa8b542fd7 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  can_tear_off="false"
  height="420"
@@ -215,7 +215,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
             </text>
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Profile..."
              label_selected="Profile..."
@@ -247,7 +246,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              width="250" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Set..."
              label_selected="Set..."
@@ -269,7 +267,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
             <button
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Deed..."
              label_selected="Deed..."
@@ -928,7 +925,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              bottom="100"
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Show"
              label_selected="Show"
@@ -940,7 +936,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              bottom="100"
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Return..."
              label_selected="Return..."
@@ -977,7 +972,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              bottom="120"
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Show"
              label_selected="Show"
@@ -989,7 +983,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              bottom="120"
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Return..."
              label_selected="Return..."
@@ -1026,7 +1019,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              bottom="140"
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Show"
              label_selected="Show"
@@ -1038,7 +1030,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
              bottom="140"
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Return..."
              label_selected="Return..."
@@ -1108,7 +1099,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
             </text>
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Refresh List"
              label_selected="Refresh List"
@@ -1120,7 +1110,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
             <button
              enabled="false"
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Return objects..."
              label_selected="Return objects..."
@@ -1531,7 +1520,6 @@ Only large parcels can be listed in search.
             </text>
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Set"
              label_selected="Set"
@@ -1543,7 +1531,6 @@ Only large parcels can be listed in search.
              width="50" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Clear"
              label_selected="Clear"
@@ -1654,7 +1641,6 @@ Only large parcels can be listed in search.
              text_readonly_color="0.576471 0.662745 0.835294 1" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Set..."
              label_selected="Set..."
@@ -1685,7 +1671,6 @@ Only large parcels can be listed in search.
              width="300" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Reset..."
              label_selected="Reset..."
@@ -2119,7 +2104,6 @@ Texture:
              width="80" />
             <button
              follows="bottom"
-             font="SansSerifSmall"
              height="16"
              label="Remove"
              label_selected="Remove"
@@ -2155,7 +2139,6 @@ Texture:
              width="195" />
             <button
              follows="bottom"
-             font="SansSerifSmall"
              height="16"
              label="Add..."
              label_selected="Add..."
@@ -2167,7 +2150,6 @@ Texture:
             <button
              enabled="false"
              follows="bottom"
-             font="SansSerifSmall"
              height="16"
              label="Remove"
              label_selected="Remove"
diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
index ebce758d3d7ac8cb21b8b9cd48889e824350eadc..41b1f99d4196ded5e452ca26c7d7a301f2189074 100644
--- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
@@ -163,7 +163,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
      follows="top|left|right"
      height="23"
      layout="topleft"
-     left="85"
+     left="100"
      name="name_form"
      right="-10" />
     <text
@@ -182,7 +182,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
      follows="top|left|right"
      height="23"
      layout="topleft"
-     left="85"
+     left="100"
      name="description_form"
      right="-10" />
     <spinner
@@ -192,7 +192,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
      increment="1"
      initial_value="0"
      label="Priority"
-     label_width="90"
+     label_width="88"
      layout="topleft"
      left="10"
      max_val="4"
@@ -214,14 +214,14 @@ Maximum animation length is [MAX_LENGTH] seconds.
      increment="1"
      initial_value="0"
      label="In(%)"
-     label_width="35"
+     label_width="49"
      layout="topleft"
      top_pad="5"
      left="30"
      max_val="100"
      name="loop_in_point"
      tool_tip="Sets point in animation that looping returns to"
-     width="110" />
+     width="115" />
     <spinner
      bottom_delta="0"
      follows="left|top"
@@ -234,8 +234,8 @@ Maximum animation length is [MAX_LENGTH] seconds.
      max_val="100"
      name="loop_out_point"
      tool_tip="Sets point in animation that ends a loop"
-     label_width="45"
-     width="120" />
+     label_width="49"
+     width="115" />
     <text
      type="string"
      length="1"
@@ -243,6 +243,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
      follows="top|left"
      height="23"
      width="110"
+     word_wrap="true"
      layout="topleft"
      left="10"
      name="hand_label">
@@ -315,6 +316,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
      follows="top|left"
      height="23"
      width="110"
+     word_wrap="true"
      layout="topleft"
      left="10"
      name="emote_label">
@@ -395,6 +397,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
      follows="top|left"
      height="23"
      width="110"
+     word_wrap="true"
      layout="topleft"
      left="10"
      name="preview_label">
@@ -482,6 +485,8 @@ Maximum animation length is [MAX_LENGTH] seconds.
     <text
      type="string"
      length="1"
+     height="72"
+     word_wrap="true"
      top_pad="5"
      text_color="EmphasisColor"
      follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml
index f0e678af003cde855731e9e347028c6692b1b5a6..56230e912c26737e23f4791916c38bbe8bceb0d9 100644
--- a/indra/newview/skins/default/xui/en/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_build_options.xml
@@ -15,14 +15,14 @@
      height="23"
      initial_value="1"
      label="Grid Units (meters)"
-     label_width="130"
+     label_width="160"
      layout="topleft"
      left="10"
      max_val="5"
      min_val="0.01"
      name="GridResolution"
      top="25"
-     width="200" />
+     width="230" />
     <spinner
      control_name="GridDrawSize"
      decimal_digits="1"
@@ -31,14 +31,14 @@
      increment="0.5"
      initial_value="5"
      label="Grid Extents (meters)"
-     label_width="130"
+     label_width="160"
      layout="topleft"
      left_delta="0"
      max_val="50"
      min_val="1"
      name="GridDrawSize"
      top_pad="0"
-     width="200" />
+     width="230" />
     <check_box
      control_name="GridSubUnit"
      height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index 9d2a811d9fc8feee4943048d9a314d5352c048c5..275ab5bb8be7f3b256fd13f36aecca07be6acdef 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -64,7 +64,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Body"
              label_selected="Body"
@@ -75,7 +74,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Head"
              label_selected="Head"
@@ -86,7 +84,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Eyes"
              label_selected="Eyes"
@@ -97,7 +94,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Ears"
              label_selected="Ears"
@@ -108,7 +104,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Nose"
              label_selected="Nose"
@@ -119,7 +114,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Mouth"
              label_selected="Mouth"
@@ -130,7 +124,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Chin"
              label_selected="Chin"
@@ -141,7 +134,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Torso"
              label_selected="Torso"
@@ -152,7 +144,6 @@
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Legs"
              label_selected="Legs"
@@ -351,7 +342,6 @@ scratch and wear it.
              width="16" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Skin Color"
              label_selected="Skin Color"
@@ -362,7 +352,6 @@ scratch and wear it.
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Face Detail"
              label_selected="Face Detail"
@@ -373,7 +362,6 @@ scratch and wear it.
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Makeup"
              label_selected="Makeup"
@@ -384,7 +372,6 @@ scratch and wear it.
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Body Detail"
              label_selected="Body Detail"
@@ -606,7 +593,6 @@ scratch and wear it.
              width="16" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Color"
              label_selected="Color"
@@ -617,7 +603,6 @@ scratch and wear it.
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Style"
              label_selected="Style"
@@ -628,7 +613,6 @@ scratch and wear it.
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Eyebrows"
              label_selected="Eyebrows"
@@ -639,7 +623,6 @@ scratch and wear it.
              width="82" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="16"
              label="Facial"
              label_selected="Facial"
diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml
index 5233cb023d4a2f798c797511d229beb7d04eaf09..5e78037ee1641101f6095953b9df03c13ce81038 100644
--- a/indra/newview/skins/default/xui/en/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml
@@ -136,7 +136,6 @@
      width="210" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Use Estate Time"
      layout="topleft"
@@ -146,7 +145,6 @@
      width="137" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Advanced Sky"
      layout="topleft"
@@ -156,7 +154,6 @@
      width="137" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Advanced Water"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml
index 79eed52fbfaf663ee7969283a1825739e3725689..b01c0edc8bc223777fe750c6fc05790c1566bfe1 100644
--- a/indra/newview/skins/default/xui/en/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml
@@ -191,7 +191,6 @@
 			</check_box>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Bake Terrain"
              label_selected="Bake Terrain"
@@ -206,7 +205,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Revert Terrain"
              label_selected="Revert Terrain"
@@ -220,7 +218,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Swap Terrain"
              label_selected="Swap Terrain"
@@ -419,7 +416,6 @@
 
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Refresh"
              label_selected="Refresh"
@@ -434,7 +430,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Apply"
              label_selected="Apply"
@@ -449,7 +444,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Select Region"
              label_selected="Select Region"
@@ -464,7 +458,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Autosave now"
              label_selected="Autosave now"
@@ -556,7 +549,6 @@
 			</check_box>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Apply"
              label_selected="Apply"
@@ -571,7 +563,6 @@
 			</button>
 			<button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Set Target"
              label_selected="Set Target"
@@ -598,7 +589,6 @@
             </text>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Delete Target&apos;s Scripted Objects On Others Land"
              label_selected="Delete Target&apos;s Scripted Objects On Others Land"
@@ -613,7 +603,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Delete Target&apos;s Scripted Objects On *Any* Land"
              label_selected="Delete Target&apos;s Scripted Objects On *Any* Land"
@@ -628,7 +617,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="22"
              label="Delete *ALL* Of Target&apos;s Objects"
              label_selected="Delete *ALL* Of Target&apos;s Objects"
@@ -643,7 +631,6 @@
 			</button>
 			<button
              follows="top|right"
-             font="SansSerifSmall"
              height="20"
              label="Get Top Colliders"
              label_selected="Get Top Colliders"
@@ -658,7 +645,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="20"
              label="Get Top Scripts"
              label_selected="Get Top Scripts"
@@ -673,7 +659,6 @@
 			</button>
             <button
              follows="top|right"
-             font="SansSerifSmall"
              height="20"
              label="Scripts digest"
              label_selected="Scripts digest"
diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cf6a4e45bd10d8ccdd1a55c9862f669ad1549302
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_im_container.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<multi_floater
+background_visible="true"
+bg_color="yellow" 
+ can_resize="true"
+ height="390"
+ layout="topleft"
+ name="floater_im_box"
+ help_topic="floater_im_box"
+ save_rect="true"
+ save_visibility="true"
+ single_instance="true"
+ title="Instant Messages"
+ width="392">
+    <tab_container
+     follows="left|right|top|bottom"
+     height="390"
+     layout="topleft"
+     left="1"
+     name="im_box_tab_container"
+     tab_position="bottom"
+     tab_width="80"
+     top="0"
+     width="390" />
+    <icon
+     color="DefaultShadowLight"
+     enabled="false"
+     follows="left|right|bottom"
+     height="17"
+     image_name="tabarea.tga"
+     layout="bottomleft"
+     left="1"
+     name="im_box_tab_container_icon"
+     bottom="10"
+     width="390" />
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 01713cc003d6c9b86dfcfcb756c84353815f5b11..7f2f37409c370da88abdf5276f4b6d728a46062c 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -9,7 +9,7 @@
  name="panel_im"
  top="0"
  can_close="true"
- can_dock="true"
+ can_dock="false"
  can_minimize="false"
  visible="true"
  width="300"
diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml
index 2562daf4b3d8f23abe9a80a94e913d37c7285d1e..6f8f2721281f41845a44307a9fdc15686621cc04 100644
--- a/indra/newview/skins/default/xui/en/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml
@@ -47,9 +47,11 @@
     <text
      type="string"
      length="1"
-     bottom_delta="20"
+     bottom_delta="30"
      follows="top|left"
-     height="15"
+     height="25"
+     width="105"
+     word_wrap="true"
      layout="topleft"
      name="preview_label">
         Preview image as:
@@ -96,7 +98,9 @@
     <text
      type="string"
      length="1"
-     bottom="190"
+     bottom="225"
+     height="45"
+     word_wrap="true"
      follows="top|left"
      layout="topleft"
      left="10"
@@ -114,7 +118,7 @@ Try saving image as 24 bit Targa (.tga).
      layout="topleft"
      left_delta="2"
      name="lossless_check"
-     top_pad="197"
+     top_pad="162"
      width="280" />
     <button
      follows="bottom|right"
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
index 4ca6002c13e98af4cf39a6bfa6e342ad904615cc..366098013b5b13a758d47c305b1637fef077ea78 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
@@ -106,12 +106,11 @@
      left_delta="78"
      name="LabelCreatorName"
      top_delta="0"
-     width="200">
+     width="170">
         Nicole Linden
     </text>
     <button
      follows="top|right"
-     font="SansSerifSmall"
      height="16"
      label="Profile..."
      layout="topleft"
@@ -140,12 +139,11 @@
      left_delta="78"
      name="LabelOwnerName"
      top_delta="0"
-     width="200">
+     width="170">
         Thrax Linden
     </text>
     <button
      follows="top|right"
-     font="SansSerifSmall"
      height="16"
      label="Profile..."
      layout="topleft"
@@ -257,12 +255,13 @@
      type="string"
      length="1"
      follows="left|top"
-     height="10"
+     height="25"
      layout="topleft"
      left="10"
      name="NextOwnerLabel"
      top_pad="5"
-     width="78">
+     width="78"
+     word_wrap="true">
         Next owner:
     </text>
     <check_box
@@ -303,7 +302,7 @@
      layout="topleft"
      follows="left|top"
      name="combobox sale copy"
-     width="90">
+     width="110">
         <combo_box.item
          label="Copy"
          name="Copy"
@@ -319,14 +318,26 @@
         increment="1"
         control_name="Edit Cost"
         name="Edit Cost"
-        label="Price: L$"
-        label_width="60"
+        label="Price:"
+        label_width="100"
         left="10"
-        width="180"
+        width="192"
         min_val="1"
         height="19"
         max_val="999999999"
         top_pad="5"/>
+    <text
+        type="string"
+        length="1"
+        height="15"
+        follows="left|top"
+        layout="topleft"
+        left_delta="82"
+        name="CurrencySymbol"
+        top_delta="1"
+        width="18">
+      L$
+    </text>
 
     <!--line_editor
      border_style="line"
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 5a8ffcebea5b1c238710f4f208c580e8ce65ee07..cff0c29dfc3a08ccb191125e004c794657847010 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -151,8 +151,7 @@
          top="2"
          width="31" />
         <button
-         follows="left|bottom"
-         font="SansSerifSmall" 
+         follows="left|bottom" 
          height="23"
          image_overlay="Move_Run_Off"
          image_selected="PushButton_Selected_Press" 
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index 3fd118df1c3b6e74b6b45e37f635a637a5f93579..41a440aaa0bd01917d23468024585efbbc4bb610 100644
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -38,7 +38,6 @@
      width="284" />
     <button
      follows="bottom|left"
-     font="SansSerifSmall"
      height="23"
      label="Copy To Inventory"
      label_selected="Copy To Inventory"
@@ -53,7 +52,6 @@
     </button>
     <button
      follows="bottom|left"
-     font="SansSerifSmall"
      height="23"
      label="Copy And Wear"
      label_selected="Copy And Wear"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
index 3b843584845237deb79394191a5da4cf57fe3221..bbfb3623376553d3e13dd787cf141640fe60e765 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
@@ -38,7 +38,6 @@
      width="170" />
     <button
      height="20"
-     font="SansSerifSmall"
      label="Play in World"
      label_selected="Stop"
      layout="topleft"
@@ -49,7 +48,6 @@
      width="125" />
     <button
      height="20"
-     font="SansSerifSmall"
      label="Play Locally"
      label_selected="Stop"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
index 95347f0dff60a92c90d6286102d87785daa63788..68a78d50170328b293869b69db08986c0513ee9f 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
@@ -50,7 +50,6 @@
     <button
      follows="left|top"
      height="22"
-     font="SansSerifSmall"
      label="Play Locally"
      label_selected="Play Locally"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_script.xml b/indra/newview/skins/default/xui/en/floater_script.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f44ba6d873e8a9b8511e6f4c6d8c32fcc011cfe4
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_script.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ background_visible="true"
+ follows="left|top|right|bottom"
+ height="369"
+ layout="topleft"
+ left="0"
+ name="script_floater"
+ help_topic="script_floater"
+ top="0"
+ can_dock="true"
+ can_minimize="true"
+ visible="true" 
+ width="520"
+ can_resize="true"
+ min_width="350"
+ min_height="369">
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index 2cf800fb155da7c34934169ca81c277e5396fa46..e6a78563f39a43d78f969e0f523a728e2245054e 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -205,7 +205,6 @@
      width="130" />
     <button
      height="20"
-     font="SansSerifSmall"
      label="Select"
      layout="topleft"
      left_pad="5"
@@ -267,7 +266,6 @@
     </radio_group>
     <button
      height="20"
-     font="SansSerifSmall"
      label="Show Objects"
      layout="topleft"
      name="show_objects"
@@ -290,7 +288,6 @@
     <button
      follows="bottom|left"
      height="20"
-     font="SansSerifSmall"
      label="Set Land For Sale"
      layout="topleft"
      left_delta="0"
@@ -300,7 +297,6 @@
     <button
      follows="bottom|right"
      height="20"
-     font="SansSerifSmall"
      label="Cancel"
      layout="topleft"
      left_pad="30"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 95a40e27f75bcf75ba3f8e9c20eea0107e18e77a..8860ac1e5004c8a50e5901c1e1c1987611ff7aa0 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -120,7 +120,6 @@
      width="85" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="More &gt;&gt;"
      layout="topleft"
@@ -131,7 +130,6 @@
      width="80" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="&lt;&lt; Less"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml
index cc0ab8c57e8fd2b7552293844daee58982f51b01..374f01490818b62dc0acbf1079911b2d77b23d9a 100644
--- a/indra/newview/skins/default/xui/en/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/en/floater_telehub.xml
@@ -57,7 +57,6 @@
     </text>
     <button
      follows="top|left"
-     font="SansSerifSmall"
      height="20"
      label="Connect Telehub"
      layout="topleft"
@@ -67,7 +66,6 @@
      width="110" />
     <button
      follows="top|left"
-     font="SansSerifSmall"
      height="20"
      label="Disconnect"
      layout="topleft"
@@ -97,7 +95,6 @@
      width="230" />
     <button
      follows="top|left"
-     font="SansSerifSmall"
      height="20"
      label="Add Spawn"
      layout="topleft"
@@ -107,7 +104,6 @@
      width="110" />
     <button
      follows="top|left"
-     font="SansSerifSmall"
      height="20"
      label="Remove Spawn"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml
index 2bd0d1a0fabf9a6e7a22f4ff06b3cf6e0c4820cd..8c6ad5c0f7fa0464bab08f94d9c7217c807033e1 100644
--- a/indra/newview/skins/default/xui/en/floater_test_button.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_button.xml
@@ -23,7 +23,6 @@
      name="bottom_delta_button" />
     <button
      bottom_delta="30"
-     font="SansSerifSmall"
      height="23"
      label="SansSerifSmall"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml
index 86ff82e01f2b244ef5b08cfbdcfc31ce7b2e3b47..85d8bb2bb1bb6d0db2c6e5c7452669440ba3500a 100644
--- a/indra/newview/skins/default/xui/en/floater_test_slider.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_slider.xml
@@ -2,7 +2,7 @@
 <floater
  legacy_header_height="18"
  can_resize="true"
- height="400"
+ height="500"
  layout="topleft"
  name="floater_test_slider"
  help_topic="floater_test_slider"
@@ -84,4 +84,17 @@
      name="red_slider"
      text_color="red"
      text_width="40" />
+	<slider
+	 width ="140"
+     bottom="490"
+     decimal_digits="1"
+     height="100"
+	 left="20"
+     label="Red Slider Vertical"
+     label_width="100"
+     layout="topleft"
+     name="red_slider_vertical"
+     text_color="red"
+	 orientation="vertical"
+     text_width="20" /> 
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 4679ae467df3746ace6bd8ee6efdad3f7c7aa187..113da9ea4db2725c9b386470bdb5f16168a555a8 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -49,7 +49,6 @@
     <button
      enabled="false"
      follows="left|bottom"
-     font="SansSerifSmall"
      height="20"
      label="Default"
      label_selected="Default"
@@ -61,7 +60,6 @@
     <button
      enabled="false"
      follows="left|bottom"
-     font="SansSerifSmall"
      height="20"
      label="None"
      label_selected="None"
@@ -72,7 +70,6 @@
      width="80" />
     <button
      follows="left|bottom"
-     font="SansSerifSmall"
      height="20"
      label="Blank"
      label_selected="Blank"
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 8b6f0f03fe243d8cf20ab3b67b41144eb2fe72c8..636e9d465ac981df519bf2cd0ac964e9a8078f66 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -701,7 +701,6 @@
     </slider_bar>
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="19"
      label="Apply"
      label_selected="Apply"
@@ -927,7 +926,6 @@
              width="150" />
             <button
              follows="top|left"
-             font="SansSerifSmall"
              height="20"
              label="Deed"
              label_selected="Deed"
@@ -2606,7 +2604,6 @@ even though the user gets a free copy.
              width="170" />
             <button
              follows="left|top"
-             font="SansSerifSmall"
              height="19"
              label="Apply"
              label_selected="Apply"
@@ -2742,7 +2739,6 @@ even though the user gets a free copy.
         decouple_texture_size="true" />
      <button
 			 follows="left|top"
-			 font="SansSerifSmall"
 			 height="19"
 			 label="Align"
 			 label_selected="Align Media"
diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml
index 1ab42cb14066d9275063717460d33bb00da47b55..29fb29fabf86eec8ab10f42e78608e17f3f2781b 100644
--- a/indra/newview/skins/default/xui/en/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/en/floater_url_entry.xml
@@ -32,7 +32,6 @@
     <button
      follows="top|left"
      height="20"
-     font="SansSerifSmall"
      label="OK"
      layout="topleft"
      left="10"
@@ -42,7 +41,6 @@
     <button
      follows="top|left"
      height="20"
-     font="SansSerifSmall"
      label="Cancel"
      layout="topleft"
      left_pad="5"
@@ -52,7 +50,6 @@
     <button
      follows="top|right"
      height="20"
-     font="SansSerifSmall"
      label="Clear"
      layout="topleft"
      left_pad="65"
diff --git a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml
index ef68d03a450726c6947697a39782f189486aefd4..4ece0fa3baea64dbab2af17a326c48b17b750c38 100644
--- a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml
@@ -17,9 +17,9 @@
 	     tool_tip="Enter a URL or URL pattern to White List"
 	     width="350" />
 
-  <button follows="top|left" height="20" font="SansSerifSmall" label="OK"
+  <button follows="top|left" height="20" label="OK"
      layout="topleft" left="10" name="ok_btn" bottom_delta="28" width="64" />
   
-  <button follows="top|left" height="20" font="SansSerifSmall" label="Cancel"
+  <button follows="top|left" height="20" label="Cancel"
      layout="topleft" left_pad="5" name="cancel_btn" bottom_delta="0" width="64" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index c60cc163c88fc0c9ad3f98f5da62614a9d9a2258..e3db0972ec747c36d404b6ba73627d55f3659634 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -116,7 +116,6 @@
     </text>
     <button
      follows="top|right"
-     font="SansSerifSmall"
      height="16"
      label="Go Home"
      label_selected="Go Home"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 14a4949df7ff08d4cd3912250e0ebfe90dcec437..3bf7f50a2c2280168ae2ca4b3ab8e80e67ce46db 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -15,19 +15,19 @@
                 orientation="vertical"
                 top="0">
     <layout_panel auto_resize="false"
-                  min_height="19"
+                  height="84"
                   mouse_opaque="false"
-                  name="status_bar_container"
-                  height="19"
+                  name="nav_and_status_bar_region"
                   width="1024"
-                  visible="false"/>
-    <layout_panel auto_resize="false"
-                  height="65"
-                  mouse_opaque="false"
-                  name="nav_bar_container"
-                  width="1024"
-                  visible="false"/>
-    <panel        auto_resize="true"
+                  visible="false">
+      <panel follows="left|right|bottom"
+             left="0"
+             name="nav_bar_container"
+             right="1024"
+             top="19"
+             height="65"/>
+    </layout_panel>
+    <layout_panel auto_resize="true"
                   follows="all"
                   height="500"
                   layout="topleft"
@@ -124,8 +124,16 @@
                   height="500"
                   name="DebugView"
                   width="1024"/>
-  </panel>
+    </layout_panel>
   </layout_stack>
+  <panel mouse_opaque="false"
+         follows="left|right|top" 
+         name="status_bar_container"
+         height="19"
+         left="0" 
+         top="0" 
+         width="1024"
+         visible="false"/>
   <notify_box_view top="0"
                    follows="all"
                    height="768"
diff --git a/indra/newview/skins/default/xui/en/menu_navbar.xml b/indra/newview/skins/default/xui/en/menu_navbar.xml
index 89469fb01368c710be1b8d10bdd09fc6c8774f47..e17eeb46f67251cbeae79ce40891982bf73472a1 100644
--- a/indra/newview/skins/default/xui/en/menu_navbar.xml
+++ b/indra/newview/skins/default/xui/en/menu_navbar.xml
@@ -10,7 +10,6 @@
  width="128">
     <menu_item_check
          label="Show Coordinates"
-         layout="topleft"
          name="Show Coordinates">
            <menu_item_check.on_click
              function="Navbar.Action"
@@ -19,22 +18,28 @@
              function="Navbar.EnableMenuItem"
              parameter="show_coordinates" />
     </menu_item_check>
+    <menu_item_check
+      label="Show Parcel Properties"
+      name="Show Parcel Properties">
+      <menu_item_check.on_click
+        function="Navbar.Action"
+        parameter="show_properties" />
+      <menu_item_check.on_check
+        control="NavBarShowParcelProperties" />
+    </menu_item_check>
     <!-- Label of 'Landmark' item is changing in runtime, 
     see  AddLandmarkNavBarMenu/EditLandmarkNavBarMenu in strings.xml -->
     <menu_item_call
      label="Landmark"
-     layout="topleft"
      name="Landmark">
         <menu_item_call.on_click
          function="Navbar.Action"
          parameter="landmark" />
     </menu_item_call>
     <menu_item_separator
-     layout="topleft"
      name="Separator" />
     <menu_item_call
      label="Cut"
-     layout="topleft"
      name="Cut">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -45,7 +50,6 @@
     </menu_item_call>
     <menu_item_call
      label="Copy"
-     layout="topleft"
      name="Copy">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -56,7 +60,6 @@
     </menu_item_call>
     <menu_item_call
      label="Paste"
-     layout="topleft"
      name="Paste">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -67,7 +70,6 @@
     </menu_item_call>
     <menu_item_call
      label="Delete"
-     layout="topleft"
      name="Delete">
         <menu_item_call.on_click
          function="Navbar.Action"
@@ -78,7 +80,6 @@
     </menu_item_call>
     <menu_item_call
      label="Select All"
-     layout="topleft"
      name="Select All">
         <menu_item_call.on_click
          function="Navbar.Action"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 8ab5fb1659689c38fe5f8a4eec90204da75773a2..e19e11a1b8458ce5829093bc8f8db657ff8bd587 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -59,7 +59,7 @@
          label="My Inventory"
          layout="topleft"
          name="Inventory"
-         shortcut="control|I">
+         shortcut="control|shift|I">
             <menu_item_check.on_check
              function="Floater.Visible"
              parameter="inventory" />
@@ -67,6 +67,15 @@
              function="Floater.Toggle"
              parameter="inventory" />
         </menu_item_check>
+        <menu_item_call
+         label="Show Sidetray Inventory"
+         name="ShowSidetrayInventory"
+         shortcut="control|I"
+         visible="false">
+            <menu_item_call.on_click
+             function="ShowSidetrayPanel"
+             parameter="sidepanel_inventory" />
+        </menu_item_call>
         <menu_item_call
          label="My Gestures"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 90e32cdd9c46f7220d70f40113a7c9f09c2efcf5..9d1bcb8f60b640b882ea0decac4c267dacd31b5b 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5305,6 +5305,27 @@ Grant this request?
     </form>
   </notification>
 
+  <notification
+   icon="notify.tga"
+   name="ScriptToast"
+   type="notify">
+    [FIRST] [LAST]&apos;s &apos;[TITLE]&apos; is requesting user input.
+    <form name="form">
+      <button
+       index="0"
+       name="Open"
+       text="Open Dialog"/>
+      <button
+       index="1"
+       name="Ignore"
+       text="Ignore"/>
+      <button
+       index="2"
+       name="Block"
+       text="Block"/>
+    </form>
+  </notification>
+
   <notification
    icon="notify.tga"
    name="FirstBalanceIncrease"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 6480469f43f959323958f96e8d7fba2a46832c23..da8006d545efb993611305c915bba5235614600e 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -46,7 +46,7 @@
          left="0"
          min_height="23"
          width="310"
-         top="0"
+         top="4"
          min_width="192"
          name="chat_bar"
          user_resize="false"
@@ -58,7 +58,7 @@
          height="28"
          layout="topleft"
          min_height="28"
-         width="104"
+         width="100"
          top_delta="0"
          min_width="54"
          name="speak_panel"
@@ -71,7 +71,7 @@
            layout="topleft"
            left="0"
            name="talk"
-           top="3"
+           top="4"
           width="100" />
         </layout_panel>
         <icon
@@ -104,11 +104,10 @@
           layout="topleft"
           name="Gesture"
           left="0"
-          top="3"
+          top="4"
           width="82"
           tool_tip="Shows/hides gestures">
              <gesture_combo_box.drop_down_button
-              font="SansSerifSmall"
               pad_right="10" 
               use_ellipses="true" />
          </gesture_combo_box>
@@ -137,6 +136,9 @@
          width="80"
          min_width="49">
             <button
+                 image_selected="PushButton_Selected_Press"
+                 image_pressed="PushButton_Press"
+		 image_pressed_selected="PushButton_Selected_Press"
              follows="left|right"
              height="23"
              use_ellipses="true"
@@ -145,7 +147,7 @@
              layout="topleft"
              name="movement_btn"
              tool_tip="Shows/hides movement controls"
-             top="3"
+             top="4"
              width="80">
                 <button.init_callback
                  function="Button.SetDockableFloaterToggle"
@@ -176,6 +178,9 @@
          user_resize="false"
          width="80">
             <button
+                 image_selected="PushButton_Selected_Press"
+                 image_pressed="PushButton_Press"
+		 image_pressed_selected="PushButton_Selected_Press"
              follows="left|right"
              height="23"
              use_ellipses="true"
@@ -184,7 +189,7 @@
              layout="topleft"
              left="0"
              tool_tip="Shows/hides camera controls"
-             top="3"
+             top="4"
              name="camera_btn"
              width="80">
                 <button.init_callback
@@ -221,7 +226,7 @@
              layout="topleft"
              name="snapshots"
              width="36"
-             top="3"
+             top="4"
              image_overlay="Snapshot_Off"
              tool_tip="Take snapshot">
 				<button.commit_callback
@@ -245,37 +250,47 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
             <chiclet_panel
 	    mouse_opaque="false"
              follows="left|right"
-             height="28"
+             height="23"
              layout="topleft"
              left="0"
              min_width="180"
              name="chiclet_list"
-             top="0"
-             chiclet_padding="3"
+             top="4"
+             chiclet_padding="4"
              scrolling_offset="40"
              width="189">
                 <button
                  auto_resize="true"
                  follows="right"
                  height="23"
-                 image_selected="BottomTray_Scroll_Left"
-                 image_unselected="BottomTray_Scroll_Left"
+                 image_selected="SegmentedBtn_Left_Off"
+                 image_unselected="SegmentedBtn_Left_Off"
+		 image_hover_selected="SegmentedBtn_Left_Over"
+		 image_hover_unselected="SegmentedBtn_Left_Over"
+		 image_pressed="SegmentedBtn_Left_Press"
+		 image_pressed_selected="SegmentedBtn_Left_Press"
+		 image_overlay="Arrow_Small_Left"
                  layout="topleft"
                  name="chicklet_left_scroll_button"
                  tab_stop="false"
-                 top="3"
+                 top="0"
                  visible="false"
                  width="20" />
                 <button
                  auto_resize="true"
                  follows="right"
                  height="23"
-                 image_selected="BottomTray_Scroll_Right"
-                 image_unselected="BottomTray_Scroll_Right"
+                 image_selected="SegmentedBtn_Right_Off"
+                 image_unselected="SegmentedBtn_Right_Off"
+		 image_hover_selected="SegmentedBtn_Right_Over"
+		 image_hover_unselected="SegmentedBtn_Right_Over"
+		 image_pressed="SegmentedBtn_Right_Press"
+		 image_pressed_selected="SegmentedBtn_Right_Press"
+		 image_overlay="Arrow_Small_Right"
                  layout="topleft"
                  name="chicklet_right_scroll_button"
                  tab_stop="false"
-                 top="3"
+                 top="0"
                  visible="false"
                  width="20" />
             </chiclet_panel>
@@ -311,6 +326,9 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
              top="4"
              width="54">
               <button
+                 image_selected="PushButton_Selected_Press"
+                 image_pressed="PushButton_Press"
+		 image_pressed_selected="PushButton_Selected_Press"
               auto_resize="true"
                halign="right"
                height="23"
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index 7a3eae35a92d9866be5cecb2a9f0a513de93d0d1..692461b1a2528ca43c218eec3db88b6c8ad82109 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
-      background_visible="true"
+	 background_visible="true"
      bevel_style="in"
      bg_alpha_color="black"
      follows="top|left|right"
      height="24"
      label="im_header"
-     layout="topleft"
+	 layout="topleft"
      name="im_header"
      width="300">
-            <avatar_icon
+		<avatar_icon
          follows="left"
          height="18"
          image_name="Generic_Person"
@@ -19,18 +19,20 @@
          name="avatar_icon"
          top="3"
          width="18" />
-    <text
+    <text_editor
+	 v_pad = "0"
+	 read_only = "true"
      follows="left|right"
-      font.style="BOLD"
-         height="12"
-         layout="topleft"
-         left_pad="5"
+	 font.style="BOLD"
+	 height="12"
+	 layout="topleft"
+	 left_pad="5"
      right="-50"
      name="user_name"
      text_color="white"
-         top="8"
-         use_ellipses="true"
-         value="Erica Vader" />
+	 top="8"
+	 use_ellipses="true"
+	 value="Ericag Vader" />
     <text
             font="SansSerifSmall"
          follows="right"
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index bdca8531dc54af151078de25b078ec5c32ebd93d..df889e87c3a5199a50aeb641d9b9573809868faa 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -151,7 +151,6 @@
      name="buttons">
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Teleport"
          layout="topleft"
@@ -161,7 +160,6 @@
          width="90" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Map"
          layout="topleft"
@@ -171,7 +169,6 @@
          width="90" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Edit"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 2378ae518bf9dbd583d969613fd4c0dca6443fcd..a833ad97d9d1728e6905373a309da6270e3199d6 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -15,6 +15,10 @@
        [ACCTTYPE]
 [PAYMENTINFO] [AGEVERIFICATION]
    </string>
+   <string 
+    name="RegisterDateFormat">
+	[REG_DATE] ([AGE])
+   </string> 
    <string
     name="AcctTypeResident"
     value="Resident" />
diff --git a/indra/newview/skins/default/xui/en/panel_group_invite.xml b/indra/newview/skins/default/xui/en/panel_group_invite.xml
index 1996977acb565633a428c38f95e4a4b2c4d7f857..37578eae7038b7fea6b99f0ce2db9d45bf056357 100644
--- a/indra/newview/skins/default/xui/en/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_invite.xml
@@ -33,7 +33,6 @@ invite to your group. Click &apos;Open
 Resident Chooser&apos; to start.
     </text>
     <button
-     font="SansSerifSmall"
      height="20"
      label="Open Resident Chooser"
      layout="topleft"
@@ -53,7 +52,6 @@ Resident Chooser&apos; to start.
      top_pad="4"
      width="200" />
     <button
-     font="SansSerifSmall"
      height="20"
      label="Remove Selected from List"
      layout="topleft"
@@ -82,7 +80,6 @@ Resident Chooser&apos; to start.
      top_delta="16"
      width="196" />
     <button
-     font="SansSerifSmall"
      height="20"
      label="Send Invitations"
      layout="topleft"
@@ -91,7 +88,6 @@ Resident Chooser&apos; to start.
      top="356"
      width="130" />
     <button
-     font="SansSerifSmall"
      height="20"
      label="Cancel"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index a90337d31a20705a16c36e1de1d78faa6df65fcb..bf33b752d9c819cfe54a99ef1093dac484147acf 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -41,7 +41,6 @@
 	 width="600">
 	     <button
 	     follows="left|top"
-	     font="SansSerifSmall"
 	     height="23"
 	     image_disabled="PushButton_Disabled"
 	     image_disabled_selected="PushButton_Disabled"
@@ -58,7 +57,6 @@
 
 	    <button
 	     follows="left|top"
-	     font="SansSerifSmall"
 	     height="23"
 	     image_disabled="PushButton_Disabled"
 	     image_disabled_selected="PushButton_Disabled"
@@ -74,7 +72,6 @@
 	     width="31" />
 	    <button
 	     follows="left|top"
-	     font="SansSerifSmall"
 	     height="23"
 	     image_disabled="PushButton_Disabled"
 	     image_disabled_selected="PushButton_Disabled"
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index ecf35523cd863b862cabbd33cf79e0049d440287..de612fbbc3117455b977bd338137a19004a41ca8 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -26,7 +26,7 @@
      max_length="512"
      name="chat_box"
      tool_tip="Press Enter to say, Ctrl+Enter to shout"
-     top="0"
+     top="1"
      width="279" />
     <output_monitor
      auto_update="true"
@@ -37,19 +37,21 @@
      left_pad="-24"
      mouse_opaque="true"
      name="chat_zone_indicator"
-     top="4"
+     top="1"
      visible="true"
      width="20" />
     <button
      follows="right"
      is_toggle="true"
      width="20"
-     top="0"
+     top="1"
      layout="topleft"
-     left_pad="4           "
+     left_pad="4"
      image_disabled="ComboButton_UpOff"
      image_unselected="ComboButton_UpOff"
-     image_selected="ComboButton_UpSelected"
+     image_selected="ComboButton_Up_On_Selected"
+     image_pressed="ComboButton_UpSelected"
+     image_pressed_selected="ComboButton_Up_On_Selected"
      height="23"
      name="show_nearby_chat"
      tool_tip="Shows/hides nearby chat log">
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index a370b450e9adf582c7cd54c3975755c1ad672df3..87861e790189c7a148d1a520fd6b7ae652e5c1c6 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -344,7 +344,6 @@ background_visible="true"
      width="313">
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          top="4"
          left="0"
          height="19"
@@ -355,7 +354,6 @@ background_visible="true"
          width="70" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          top="4"
          left_pad="2"
          height="19"
@@ -366,7 +364,6 @@ background_visible="true"
          width="45" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          top="4"
          left_pad="2"
          height="19"
@@ -377,7 +374,6 @@ background_visible="true"
          width="50" />
         <button
          follows="left|top"
-         font="SansSerifSmall"
          top="4"
          left_pad="2"
          height="19"
@@ -387,7 +383,6 @@ background_visible="true"
          width="60" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          top="4"
          left_pad="2"
          height="19"
@@ -398,7 +393,6 @@ background_visible="true"
          width="75" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          top="4"
          left="0"
          height="19"
@@ -409,7 +403,6 @@ background_visible="true"
          width="110" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          top="4"
          left_pad="2"
          height="19"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index cf18aa2d393746bc90feb0f25e441cc208885669..0cf2a7afc3110590cd66be4cfba6144b4a3390cb 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -103,7 +103,6 @@
      name="buttons">
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Teleport"
          layout="topleft"
@@ -113,7 +112,6 @@
          width="90" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Map"
          layout="topleft"
@@ -123,7 +121,6 @@
          width="90" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Edit"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 5cefe3e4ab58b4b0fb686b60831ca039921722dd..69a81adecd08f7f4d51726b069446a146c7adc8d 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -131,7 +131,6 @@
        <button
          enabled="false"
          follows="bottom|left"
-         font="SansSerifSmall"
          height="25"
          label="Info"
          layout="topleft"
@@ -143,7 +142,6 @@
         <button
          enabled="false"
          follows="bottom|left"
-         font="SansSerifSmall"
          height="25"
          label="Teleport"
          layout="topleft"
@@ -155,7 +153,6 @@
         <button
          enabled="false"
          follows="bottom|left"
-         font="SansSerifSmall"
          height="25"
          label="Map"
          layout="topleft"
@@ -167,7 +164,6 @@
         <button
          enabled="false"
          follows="bottom|right"
-         font="SansSerifSmall"
          height="25"
          label="â–¼"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 5efacb68bea8358b46fbec0cb2d4d08a8ff89bba..88df529ec1f20d0cb389b432cffdceb6360d515a 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -72,7 +72,6 @@ background_visible="true"
      width="313">
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Teleport"
          layout="topleft"
@@ -82,7 +81,6 @@ background_visible="true"
          width="100" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Map"
          layout="topleft"
@@ -92,7 +90,6 @@ background_visible="true"
          width="70" />
         <button
          follows="bottom|left"
-         font="SansSerifSmall"
          height="19"
          label="Edit"
          layout="topleft"
@@ -102,7 +99,6 @@ background_visible="true"
          width="70" />
         <button
          follows="bottom|right"
-         font="SansSerifSmall"
          height="19"
          image_disabled="ForwardArrow_Off"
          image_selected="ForwardArrow_Press"
@@ -114,7 +110,6 @@ background_visible="true"
          width="18" />
         <button
          follows="bottom|right"
-         font="SansSerifSmall"
          height="19"
          label="Close"
          layout="topleft"
@@ -124,7 +119,6 @@ background_visible="true"
          width="60" />
         <button
          follows="bottom|right"
-         font="SansSerifSmall"
          height="19"
          label="Cancel"
          layout="topleft"
@@ -134,7 +128,6 @@ background_visible="true"
          width="60" />
         <button
          follows="bottom|right"
-         font="SansSerifSmall"
          height="19"
          label="Save"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 5a4b0a3892d2f387eca5570209dd999b99546c48..fac0d5c60f0521a0b354bd72e2f87cac15a62bc2 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -309,4 +309,13 @@
      name="send_im_to_email"
      top_pad="5"
      width="400" />
+    <check_box
+     enabled="false"
+     height="16"
+     label="Enable plain text chat history"
+     layout="topleft"
+     left_delta="0"
+     name="plain_text_chat_history"
+     top_pad="5"
+     width="400" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index bf1d46451bc9aa5c8c2dbd717a5d082a338dc0a9..947bb67152ac8bbcac400c0726e0f8aad7bda771 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -27,7 +27,10 @@
     <string
      name="no_partner_text"
      value="None" />
-    <string name="RegisterDateFormat">[REG_DATE] ([AGE])</string>
+    <string 
+	 name="RegisterDateFormat">
+	 [REG_DATE] ([AGE])
+	</string>
   <scroll_container
      color="DkGray2"
      follows="all"
@@ -324,7 +327,6 @@
          width="64" />
         <button
          follows="bottom|right"
-         font="SansSerifSmall"
          height="19"
          label="â–¼"
          layout="topleft"
@@ -344,7 +346,6 @@
      width="303">
         <button
          follows="bottom|right"
-         font="SansSerifSmall"
          height="19"
          left="10"
          label="Edit Profile"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index b015346a799e9981d7af002b07f7dbca563d7f4f..8e683bffc102bae19993f353574d6cfa5eeeb451 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -25,10 +25,11 @@
      tab_stop="false"
      top="2"
      width="23" />
-    <text
+    <text_editor
+	 read_only = "true"
      follows="top|left|right"
      font="SansSerifHugeBold"
-     height="26"
+     height="29"
      layout="topleft"
      left_pad="10"
      name="user_name"
@@ -52,7 +53,7 @@
      halign="center"
      layout="topleft"
      left="10"
- min_width="333"
+	 min_width="333"
      name="tabs"
      tab_min_width="80"
      tab_height="30"
diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
index 49fc930cd8ae1ba18225cf3fbd683e082b45e174..75d7d85505f450068c224f8c14cbc7be3956cbb2 100644
--- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
@@ -119,7 +119,6 @@
     </text_editor>
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="18"
      label="Reset"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index a1bca4229dcfa2cf309ad46a369d0a254b0199ac..e07585d285e992431aaee6ca13426d7169d02ca3 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -61,7 +61,6 @@
     <button
      enabled="false"
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Apply"
      layout="topleft"
@@ -109,7 +108,6 @@
     <button
      follows="left|top"
      height="20"
-     font="SansSerifSmall"
      label="Choose"
      layout="topleft"
      left_pad="5"
@@ -156,7 +154,6 @@
     <button
      follows="left|top"
      height="20"
-     font="SansSerifSmall"
      label="Return"
      layout="topleft"
      left="20"
@@ -165,7 +162,6 @@
      width="80" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Get Top Colliders..."
      layout="topleft"
@@ -176,7 +172,6 @@
      width="150" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Get Top Scripts..."
      layout="topleft"
@@ -187,7 +182,6 @@
      width="150" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Restart Region"
      layout="topleft"
@@ -198,7 +192,6 @@
      width="130" />
     <button
      follows="left|top"
-     font="SansSerifSmall"
      height="20"
      label="Delay Restart"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index b1afe76500d14d840a0549e8eae1b304ecc64008..65bc48265dd09f0153bc7d9e2fb693902f015fce 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -43,7 +43,6 @@
      auto_resize="true"
      halign="right"
      follows="right|bottom"
-     font="SansSerifSmall"
      image_selected="BuyArrow_Over"
      image_unselected="BuyArrow_Off"
      image_pressed="BuyArrow_Press"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index b9a89a2ebcc7ea76fd6ecb8e1df8b1e545858438..4dae8e48a0b36ac61e0bf8a92eeedb7f12fcaaac 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -71,7 +71,6 @@
   	     width="313" />
     <button
   	     follows="bottom|left"
-     font="SansSerifSmall"
   	     height="25"
   	     label="Wear"
   	     layout="topleft"
@@ -81,7 +80,6 @@
        	 width="80" />
     <button
     	 follows="bottom|left"
-     font="SansSerifSmall"
   	     height="25"
   	     label="New Outfit"
   	     layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index b8b3d993bd1a1ce58a8bb542332f6b6c52bb7aa2..51b74307c8a8dbeb098df85096549efd6dc69e9f 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -41,7 +41,6 @@
 			<button
 				 enabled="true"
 				 follows="bottom|left"
-				 font="SansSerifSmall"
 				 height="25"
 				 label="Info"
 				 layout="topleft"
@@ -52,7 +51,6 @@
 			<button
 				 enabled="true"
 				 follows="bottom|left"
-				 font="SansSerifSmall"
 				 height="25"
 				 label="Share"
 				 layout="topleft"
@@ -63,7 +61,6 @@
 			<button
 				 enabled="false"
 				 follows="bottom|left"
-				 font="SansSerifSmall"
 				 height="25"
 				 label="Wear"
 				 layout="topleft"
@@ -74,7 +71,6 @@
 			<button
 				 enabled="false"
 				 follows="bottom|left"
-				 font="SansSerifSmall"
 				 height="25"
 				 label="Play"
 				 layout="topleft"
@@ -85,7 +81,6 @@
 			<button
 				 enabled="false"
 				 follows="bottom|left"
-				 font="SansSerifSmall"
 				 height="25"
 				 label="Teleport"
 				 layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 6ae24773041f58167e47f4799340a3935e993cda..db8a844eb0fbb672625c441ede7510646ced95ba 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -126,12 +126,11 @@
 		     left_delta="78"
 		     name="LabelCreatorName"
 		     top_delta="0"
-		     width="200">
+		     width="140">
 	        Nicole Linden
 	     </text>
 	     <button
 			 follows="top|right"
-			 font="SansSerifSmall"
 			 height="16"
 			 label="Profile..."
 			 layout="topleft"
@@ -160,12 +159,11 @@
 			 left_delta="78"
 			 name="LabelOwnerName"
 			 top_delta="0"
-			 width="200">
+			 width="140">
 			    Thrax Linden
 	     </text>
 	     <button
 			 follows="top|right"
-			 font="SansSerifSmall"
 			 height="16"
 			 label="Profile..."
 			 layout="topleft"
@@ -194,7 +192,7 @@
 			 left_delta="78"
 			 name="LabelAcquiredDate"
 			 top_delta="0"
-			 width="252">
+			 width="222">
 			Wed May 24 12:50:46 2006
 	    </text>
 	    <text
@@ -277,12 +275,13 @@
 			 type="string"
 			 length="1"
 			 follows="left|top"
-			 height="10"
+			 height="25"
 			 layout="topleft"
 			 left="10"
 			 name="NextOwnerLabel"
 			 top_pad="5"
-			 width="78">
+			 width="78"
+			 word_wrap="true">
 			Next owner:
 	    </text>
 	    <check_box
@@ -323,7 +322,7 @@
 			 layout="topleft"
 			 follows="left|top"
 			 name="combobox sale copy"
-			 width="90">
+			 width="110">
 			<combo_box.item
 			     label="Copy"
 			     name="Copy"
@@ -339,14 +338,26 @@
 			    increment="1"
 			    control_name="Edit Cost"
 			    name="Edit Cost"
-			    label="Price: L$"
-			    label_width="60"
+			    label="Price:"
+			    label_width="100"
 			    left="10"
-			    width="180"
+			    width="192"
 			    min_val="1"
 			    height="19"
 			    max_val="999999999"
 			    top_pad="5"/>
+	    <text
+			    type="string"
+			    length="1"
+			    height="15"
+			    follows="left|top"
+			    layout="topleft"
+			    left_delta="82"
+			    name="CurrencySymbol"
+			    top_delta="1"
+			    width="18">
+			L$
+	    </text>
 	    <!--line_editor
 			 border_style="line"
 			 border_thickness="1"
@@ -479,7 +490,6 @@
 		 width="313">
 	    <button
 		     follows="bottom|left"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Edit"
 		     layout="topleft"
@@ -489,7 +499,6 @@
 		     width="50" />
 	    <button
 		     follows="bottom|right"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Cancel"
 		     layout="topleft"
@@ -499,7 +508,6 @@
 		     width="70" />
 	    <button
 		     follows="bottom|right"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Save"
 		     layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index 7647be78306361411e3b37272029fe26d356a0a3..348f0dfc095edf6a4bb8eb823a3ccab16b8a0cfc 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -203,7 +203,6 @@
              width="150" />
             <button
              follows="top|left"
-             font="SansSerifSmall"
              height="20"
              label="Deed"
              label_selected="Deed"
@@ -485,7 +484,6 @@
 		 width="313">
 	    <button
 		     follows="bottom|left"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Edit"
 		     layout="topleft"
@@ -495,7 +493,6 @@
 		     width="50" />
 	    <button
 		     follows="bottom|left"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Open"
 		     layout="topleft"
@@ -505,7 +502,6 @@
 		     width="60" />
 	    <button
 		     follows="bottom|left"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Pay"
 		     layout="topleft"
@@ -515,7 +511,6 @@
 		     width="50" />
 	    <button
 		     follows="bottom|left"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Buy"
 		     layout="topleft"
@@ -525,7 +520,6 @@
 		     width="60" />
 	    <button
 		     follows="bottom|right"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Cancel"
 		     layout="topleft"
@@ -535,7 +529,6 @@
 		     width="70" />
 	    <button
 		     follows="bottom|right"
-		     font="SansSerifSmall"
 		     height="25"
 		     label="Save"
 		     layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
index 6b11e72247492d988e2f22589d7d4e8b480bf9f4..7c54e618ef63740cdb8cd30566befe263c6ad7a2 100644
--- a/indra/newview/skins/default/xui/en/widgets/button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/button.xml
@@ -15,7 +15,6 @@
         image_color="ButtonImageColor"
         image_color_disabled="ButtonImageColor"
         flash_color="ButtonFlashBgColor"
-        font="SansSerifSmall"
         hover_glow_amount="0.15"
         halign="center"
         scale_image="true">
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5011bf6a61aa58afbca4c5dbbcda0f1409c21b5d
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<chiclet_script
+ name="script_chiclet">
+ <icon
+  name="chiclet_icon"
+  follows="all"
+  mouse_opaque="false"
+  image_name="Generic_Object_Small" />
+</expandable_text>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
index 6171be034f4b440171101213fe9fae9879089a33..4229f34c09ff6f6a281564401430611753d5cae9 100644
--- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<gesture_combo_box font="SansSerifSmall"
+<gesture_combo_box
            label="Gestures" 
            list_position="below"
            max_chars="20"
@@ -7,7 +7,6 @@
   <gesture_combo_box.combo_button name="Combobox Button"
                           label=""
                           hover_glow_amount="0.15"
-                          font="SansSerifSmall"
                           scale_image="true"
                           image_unselected="ComboButton_Off"
                           image_selected="ComboButton_Selected"
@@ -17,15 +16,15 @@
                               label=""
                               halign="center"
                               hover_glow_amount="0.15"
-                              font="SansSerif"
                               scale_image="true"
+                 image_selected="PushButton_Selected_Press"
+                 image_pressed="PushButton_Press"
+		 image_pressed_selected="PushButton_Selected_Press"
                               image_unselected="PushButton_Off"
-                              image_selected="PushButton_Selected"
                               image_disabled="PushButton_Disabled"
                               image_disabled_selected="PushButton_Selected_Disabled" />
   <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor"
-                                scroll_bar_bg_visible="true" />
+                                scroll_bar_bg_visible="false" />
   <gesture_combo_box.combo_editor name="Combo Text Entry"
-                          select_on_focus="true"
-                          font="SansSerifSmall" />
+                          select_on_focus="true" />
 </gesture_combo_box>
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index d88bcfab1d7b6445f114247b1d8f9c204534a3e5..17b1479ec4df7d03f980820a195ef587c3ed26c4 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -11,7 +11,7 @@
                 add_landmark_image_disabled="Favorite_Star_Off"
                 add_landmark_image_hover="Favorite_Star_Over"
                 add_landmark_image_selected="Favorite_Star_Press"
-                add_landmark_hpad="2"
+                icon_hpad="2"
                 allow_text_entry="true"
                 list_position="below"
       	        show_text_as_tentative="false"
@@ -38,6 +38,60 @@
                           scale_image="false"
 			  top="19"
 			  left="-3" />
+  <voice_icon
+    name="voice_icon"
+    width="22"
+    height="18"
+	top="21"
+    image_name="parcel_lght_VoiceNo"
+    />
+  <fly_icon
+    name="fly_icon"
+    width="22"
+    height="18"
+	top="21"
+    image_name="parcel_lght_FlyNo"
+    />
+  <push_icon
+    name="push_icon"
+    width="22"
+    height="18"
+	top="21"
+    image_name="parcel_lght_PushNo"
+    />
+  <build_icon
+    name="build_icon"
+    width="22"
+    height="18"
+	top="21"
+    image_name="parcel_lght_BuildNo"
+    />
+  <scripts_icon
+    name="scripts_icon"
+    width="22"
+    height="18"
+	top="21"
+    image_name="parcel_lght_ScriptsNo"
+    />
+  <!-- NOTE: Placeholder icon, there is no dark grayscale version -->
+  <damage_icon
+    name="damage_icon"
+    width="22"
+    height="18"
+	top="21"
+    image_name="parcel_lght_Damage"
+    />
+  <!-- Default text color is invisible on top of nav bar background -->
+  <damage_text
+    name="damage_text"
+	width="50"
+	height="18"
+	top="16"
+	halign="right"
+	font="SansSerifSmall"
+	text_color="TextFgColor"
+	/>
+
   <combo_button name="Location History"
                           label=""
                           pad_right="0"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
index c98e9cb6b839b3c7aa5f846c1e18b66b3b36a53f..2bbaa6233ff717ad154c31cdc6fd7c64bb690c69 100644
--- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <!-- Use this for the top-level menu styling -->
-<menu_item
-  font="SansSerifSmall"
-  >
+<menu_item>
 </menu_item>
diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
index f1401140deba3b7d952e38a176a54d690769ecd6..477c6fb8b8a060b4ab0bd6f94e219e77b61e8fb7 100644
--- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml
+++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
@@ -2,7 +2,7 @@
 <tab_container tab_min_width="60"
                tab_max_width="150"
                font_halign="center"
-               font="SansSerif" 
+               font="SansSerifSmall" 
                tab_height="21">
   <first_tab tab_top_image_unselected="TabTop_Left_Off"
                tab_top_image_selected="TabTop_Left_Selected"
diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
index 64c2e65a6e0d2902049a3f359a1700967e61314a..7781bdd066bb62fd579a3ede8e4c1cfd88740b4f 100644
--- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -7,10 +7,13 @@
   -->
   <speak_button
     follows="left|right" 
+                 image_selected="SegmentedBtn_Left_Selected_Press"
+                 image_unselected="SegmentedBtn_Left_Off"
+		 image_pressed="SegmentedBtn_Left_Selected_Press"
+		 image_pressed_selected="SegmentedBtn_Left_Selected_Press"
     name="left"
     label="Speak"
     label_selected="Speak"
-    font="SansSerifSmall"
     tab_stop="false"
     />
   <show_button
@@ -23,8 +26,11 @@
     bottom="0"
     tab_stop="false"
     is_toggle="true"
-    image_selected="ComboButton_UpSelected"
-    image_unselected="ComboButton_UpOff"
+                 image_selected="SegmentedBtn_Right_Selected_Press"
+                 image_unselected="SegmentedBtn_Right_Off"
+		 image_pressed="SegmentedBtn_Right_Press"
+		 image_pressed_selected="SegmentedBtn_Right_Selected_Press"
+		 image_overlay="Arrow_Small_Up"
     />
   <monitor
     follows="right" 
diff --git a/install.xml b/install.xml
index d2ad5a12b2a2c92bcfc706b6529124f52185fa4a..cc4db90f484010c543d3983b34a43eb64bff2889 100644
--- a/install.xml
+++ b/install.xml
@@ -948,9 +948,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>b40a13847ee773c9ee06f641fe0dd1c2</string>
+            <string>7f818f13faf7c02838fe66f7d27e1913</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-darwin-20091023.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-darwin-20091124.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>