From af98aad98d43ec8b128ecac3089426d6ae6edc3f Mon Sep 17 00:00:00 2001
From: Steven Bennetts <steve@lindenlab.com>
Date: Wed, 26 Aug 2009 20:47:27 +0000
Subject: [PATCH] svn merge
 https://svn.aws.productengine.com/secondlife/export-from-ll/viewer-2-0@1471
 https://svn.aws.productengine.com/secondlife/pe/stable-1@1476 ->
 viewer-2.0.0-3 EXT-65 EXT-270 EXT-359 EXT-361 EXT-367 EXT-367 EXT-368 EXT-455
 EXT-468 EXT-530 EXT-539 EXT-540 EXT-542 EXT-545 EXT-555 EXT-557 EXT-558
 EXT-559 EXT-559 EXT-560 EXT-561 EXT-562 EXT-563 EXT-564 EXT-566 EXT-568
 EXT-569 EXT-570 EXT-571 EXT-581 EXT-590 EXT-594 EXT-596 EXT-597 EXT-601
 EXT-602 EXT-603 EXT-613 EXT-620 EXT-624 EXT-628 EXT-630 EXT-631 EXT-632
 EXT-639 EXT-640 EXT-641 EXT-642 EXT-662 EXT-671 EXT-672 EXT-676 EXT-682
 EXT-692 EXT-703 EXT-717

---
 indra/llui/llmenugl.cpp                       |  43 ++--
 indra/llui/llmenugl.h                         |   3 +
 indra/llui/llsearcheditor.h                   |   8 +
 indra/newview/CMakeLists.txt                  |   5 +
 indra/newview/app_settings/settings.xml       |  44 +++-
 indra/newview/llagent.cpp                     | 171 +------------
 indra/newview/llagent.h                       |   7 +-
 indra/newview/llagentui.cpp                   | 179 ++++++++++++++
 indra/newview/llagentui.h                     |  51 ++++
 indra/newview/llchannelmanager.cpp            |  68 ++++--
 indra/newview/llchannelmanager.h              |  35 ++-
 indra/newview/llchiclet.cpp                   |  94 +++----
 indra/newview/llchiclet.h                     |  18 ++
 indra/newview/llclassifiedstatsresponder.cpp  |   1 -
 indra/newview/lldrawpoolalpha.cpp             |   1 -
 indra/newview/lldrawpoolavatar.cpp            |   1 -
 indra/newview/lldrawpoolbump.cpp              |   1 -
 indra/newview/lldrawpoolsimple.cpp            |   1 -
 indra/newview/lldrawpoolwlsky.cpp             |   1 -
 indra/newview/llemote.cpp                     |   1 -
 indra/newview/llfavoritesbar.cpp              |  90 ++++++-
 indra/newview/llfloatergroups.cpp             |  13 +-
 indra/newview/llfloateropenobject.cpp         |   1 -
 indra/newview/llfloaterpostcard.cpp           |   3 +-
 indra/newview/llfloaterregioninfo.cpp         |   5 +-
 indra/newview/llfloaterreporter.cpp           |   7 +-
 indra/newview/llfloatersnapshot.cpp           |   5 +-
 indra/newview/llfloatertos.cpp                |   1 -
 .../newview/llfloatervoicedevicesettings.cpp  |   1 -
 indra/newview/llfolderview.cpp                |   1 -
 indra/newview/llgroupactions.cpp              |  36 +++
 indra/newview/llgroupactions.h                |  14 ++
 indra/newview/llgroupmgr.cpp                  |   2 +-
 indra/newview/llhudview.cpp                   |   1 -
 indra/newview/llimhandler.cpp                 | 127 ++++++++++
 indra/newview/llimpanel.cpp                   |   2 +
 indra/newview/llimview.cpp                    | 132 ++++------
 indra/newview/llimview.h                      |  15 +-
 indra/newview/lllandmarkactions.cpp           |  58 ++++-
 indra/newview/lllandmarkactions.h             |  11 +-
 indra/newview/lllocationhistory.cpp           |  34 ++-
 indra/newview/lllocationhistory.h             |   1 +
 indra/newview/lllocationinputctrl.cpp         |  90 +++++--
 indra/newview/lllocationinputctrl.h           |  13 +-
 indra/newview/llmoveview.cpp                  |  33 ++-
 indra/newview/llmoveview.h                    |   1 +
 indra/newview/llnamebox.cpp                   |   1 -
 indra/newview/llnameeditor.cpp                |   1 -
 indra/newview/llnamelistctrl.cpp              |   1 -
 indra/newview/llnavigationbar.cpp             |  86 +++----
 indra/newview/llnavigationbar.h               |   9 +-
 indra/newview/llnearbychat.cpp                |  12 +-
 indra/newview/llnearbychathandler.cpp         |  22 +-
 indra/newview/llnearbychathandler.h           |   1 +
 indra/newview/llnotificationalerthandler.cpp  |   5 +-
 indra/newview/llnotificationgrouphandler.cpp  |  24 +-
 indra/newview/llnotificationhandler.h         |  23 +-
 indra/newview/llnotificationmanager.cpp       |   3 +
 indra/newview/llpanelavatar.h                 |  10 +
 indra/newview/llpanelgroup.cpp                |  21 +-
 indra/newview/llpanelgroupinvite.cpp          |  18 +-
 indra/newview/llpanelgrouplandmoney.cpp       |  13 +-
 indra/newview/llpanelgroupnotices.cpp         |  50 +++-
 indra/newview/llpanelgroupnotices.h           |   2 +
 indra/newview/llpanelgrouproles.cpp           | 103 +++-----
 indra/newview/llpanelgrouproles.h             |  14 +-
 indra/newview/llpanelpeople.cpp               |   1 -
 indra/newview/llpanelpick.cpp                 |  31 ++-
 indra/newview/llpanelpick.h                   |   7 +-
 indra/newview/llpanelpicks.cpp                |   8 +
 indra/newview/llpanelpicks.h                  |   5 +
 indra/newview/llpanelplaceinfo.cpp            |  51 +++-
 indra/newview/llpanelplaceinfo.h              |   5 +-
 indra/newview/llpanelplaces.cpp               |  71 ++++--
 indra/newview/llpanelprofile.cpp              |   3 +
 indra/newview/llpanelprofileview.cpp          |   5 +
 indra/newview/llpanelvolume.cpp               |   1 -
 indra/newview/llscreenchannel.cpp             |  49 ++--
 indra/newview/llscreenchannel.h               |  25 +-
 indra/newview/llsidetray.cpp                  |   5 +-
 indra/newview/llsidetraypanelcontainer.cpp    |   6 +-
 indra/newview/llsky.cpp                       |  15 --
 indra/newview/llslurl.cpp                     |  27 +-
 indra/newview/llslurl.h                       |  12 +-
 indra/newview/llspatialpartition.cpp          |   1 -
 indra/newview/llstartup.cpp                   |   4 +-
 indra/newview/llstatusbar.cpp                 | 196 +--------------
 indra/newview/llsyswellwindow.cpp             |  13 +-
 indra/newview/llteleporthistory.cpp           |  13 +-
 indra/newview/llteleporthistory.h             |   6 +-
 indra/newview/lltoast.cpp                     |   1 -
 indra/newview/lltoast.h                       |   2 -
 indra/newview/lltoastalertpanel.cpp           |  12 +-
 indra/newview/lltoastalertpanel.h             |   3 +-
 indra/newview/lltoastimpanel.cpp              |  94 +++++++
 indra/newview/lltoastimpanel.h                |  79 ++++++
 indra/newview/lltooldraganddrop.cpp           |   6 +-
 indra/newview/lltoolface.cpp                  |   1 -
 indra/newview/lltoolselectland.cpp            |   1 -
 indra/newview/llviewerjointmesh.cpp           |   1 -
 indra/newview/llviewermessage.cpp             |  29 ++-
 indra/newview/llviewerparcelmgr.cpp           |  33 ++-
 indra/newview/llviewerparcelmgr.h             |  10 +-
 indra/newview/llviewertexturelist.cpp         |   1 -
 indra/newview/llviewerwindow.cpp              |   3 +-
 indra/newview/llvlmanager.cpp                 |   1 -
 indra/newview/llvoground.cpp                  |   1 -
 indra/newview/llvotextbubble.cpp              |   1 -
 indra/newview/llvovolume.cpp                  |   2 +-
 indra/newview/llvowater.cpp                   |   1 -
 indra/newview/llwind.cpp                      |   1 -
 indra/newview/llwlparammanager.cpp            |   1 -
 .../skins/default/textures/textures.xml       |   1 +
 .../skins/default/xui/en/panel_edit_pick.xml  |   6 +-
 .../default/xui/en/panel_edit_profile.xml     |   6 +-
 .../default/xui/en/panel_group_general.xml    |  32 +--
 .../xui/en/panel_group_info_sidetray.xml      |  27 +-
 .../default/xui/en/panel_group_invite.xml     |   4 +
 .../default/xui/en/panel_group_land_money.xml |   4 +-
 .../default/xui/en/panel_group_notify.xml     |   2 +-
 .../default/xui/en/panel_group_roles.xml      |  11 +-
 .../default/xui/en/panel_instant_message.xml  |  80 ++++++
 .../default/xui/en/panel_navigation_bar.xml   |   4 +-
 .../skins/default/xui/en/panel_notes.xml      | 230 ++++++++++--------
 .../skins/default/xui/en/panel_people.xml     |  15 ++
 .../skins/default/xui/en/panel_pick_info.xml  |  41 +++-
 .../skins/default/xui/en/panel_picks.xml      | 175 +++++++------
 .../default/xui/en/panel_profile_view.xml     |  76 +++---
 .../xui/en/panel_stand_stop_flying.xml        |   2 +
 .../skins/default/xui/en/panel_status_bar.xml |  46 ----
 .../default/xui/en/panel_sys_well_item.xml    |   1 +
 .../skins/default/xui/en/panel_toast.xml      |   1 +
 .../newview/skins/default/xui/en/strings.xml  |   5 +
 .../default/xui/en/widgets/location_input.xml |   2 +
 134 files changed, 2165 insertions(+), 1299 deletions(-)
 create mode 100644 indra/newview/llagentui.cpp
 create mode 100644 indra/newview/llagentui.h
 create mode 100644 indra/newview/llimhandler.cpp
 create mode 100644 indra/newview/lltoastimpanel.cpp
 create mode 100644 indra/newview/lltoastimpanel.h
 create mode 100644 indra/newview/skins/default/xui/en/panel_instant_message.xml

diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index b6c3ffc61c7..4edae46f322 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -1353,23 +1353,26 @@ void LLMenuItemBranchDownGL::openMenu( void )
 // set the hover status (called by it's menu)
 void LLMenuItemBranchDownGL::setHighlight( BOOL highlight )
 {
-	if (highlight == getHighlight()) return;
-
-	LLMenuGL* branch = getBranch();
-	if (!branch) return;
+ 	if (highlight == getHighlight())
+		return;
 
 	//NOTE: Purposely calling all the way to the base to bypass auto-open.
 	LLMenuItemGL::setHighlight(highlight);
+
+	LLMenuGL* branch = getBranch();
+	if (!branch)
+		return;
+	
 	if( !highlight)
 	{
-		if (getBranch()->getTornOff())
+		if (branch->getTornOff())
 		{
-			((LLFloater*)getBranch()->getParent())->setFocus(FALSE);
-			getBranch()->clearHoverItem();
+			((LLFloater*)branch->getParent())->setFocus(FALSE);
+			branch->clearHoverItem();
 		}
 		else
 		{
-			getBranch()->setVisible( FALSE );
+			branch->setVisible( FALSE );
 		}
 	}
 }
@@ -1638,6 +1641,7 @@ LLMenuGL::LLMenuGL(const LLMenuGL::Params& p)
 	mDropShadowed( p.drop_shadow ),
 	mHorizontalLayout( p.horizontal_layout ),
 	mScrollable(mHorizontalLayout ? FALSE : p.scrollable), // Scrolling is supported only for vertical layout
+	mMaxScrollableItems(p.max_scrollable_items),
 	mKeepFixedSize( p.keep_fixed_size ),
 	mLabel (p.label),
 	mLastMouseX(0),
@@ -1911,6 +1915,7 @@ void LLMenuGL::arrange( void )
 		item_list_t::iterator first_hidden_item_iter = mItems.end();
 		S32 height_before_first_visible_item = -1;
 		S32 visible_items_height = 0;
+		U32 scrollable_items_cnt = 0;
 		
 		if (mHorizontalLayout)
 		{
@@ -2005,12 +2010,16 @@ void LLMenuGL::arrange( void )
 						{
 							height_before_first_visible_item = height - (*item_iter)->getNominalHeight();
 							first_visible_item_iter = item_iter;
+							scrollable_items_cnt = 0;
 						}
 
-						if (-1 != height_before_first_visible_item && 0 == visible_items_height && height - height_before_first_visible_item > max_height - spillover_item_height * 2)
+						if (-1 != height_before_first_visible_item && 0 == visible_items_height &&
+						    (++scrollable_items_cnt > mMaxScrollableItems ||
+						     height - height_before_first_visible_item > max_height - spillover_item_height * 2 ))
 						{
 							first_hidden_item_iter = item_iter;
 							visible_items_height = height - height_before_first_visible_item - (*item_iter)->getNominalHeight();
+							scrollable_items_cnt--;
 						}
 					}
 				}
@@ -2020,16 +2029,16 @@ void LLMenuGL::arrange( void )
 			{
 				S32 max_items_height = max_height - spillover_item_height * 2;
 
+				if (visible_items_height == 0)
+					visible_items_height = height - height_before_first_visible_item;
+
 				// Fix mFirstVisibleItem value, if it doesn't allow to display all items, that can fit
-				if (visible_items_height < max_items_height)
+				if (visible_items_height < max_items_height && scrollable_items_cnt < mMaxScrollableItems)
 				{
-					if (visible_items_height == 0)
-					{
-						visible_items_height = height - height_before_first_visible_item;
-					}
-
 					item_list_t::iterator tmp_iter(first_visible_item_iter);
-					while (visible_items_height < max_items_height && first_visible_item_iter != mItems.begin())
+					while (visible_items_height < max_items_height &&
+					       scrollable_items_cnt < mMaxScrollableItems &&
+					       first_visible_item_iter != mItems.begin())
 					{
 						if ((*first_visible_item_iter)->getVisible())
 						{
@@ -2043,6 +2052,7 @@ void LLMenuGL::arrange( void )
 						{
 							visible_items_height += (*first_visible_item_iter)->getNominalHeight();
 							height_before_first_visible_item -= (*first_visible_item_iter)->getNominalHeight();
+							scrollable_items_cnt++;
 						}
 					}
 
@@ -2051,6 +2061,7 @@ void LLMenuGL::arrange( void )
 					{
 						visible_items_height -= (*first_visible_item_iter)->getNominalHeight();
 						height_before_first_visible_item += (*first_visible_item_iter)->getNominalHeight();
+						scrollable_items_cnt--;
 						first_visible_item_iter = tmp_iter;
 					}
 					if (!(*first_visible_item_iter)->getVisible())
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 2e7f61c2dd3..44459a6c0ec 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -382,6 +382,7 @@ class LLMenuGL
 										create_jump_keys,
 										keep_fixed_size,
 										scrollable;
+		Optional<U32>					max_scrollable_items;
 		Optional<LLUIColor>				bg_color;
 		Optional<S32>					shortcut_pad;
 
@@ -394,6 +395,7 @@ class LLMenuGL
 			create_jump_keys("create_jump_keys", false),
 			bg_color("bg_color",  LLUIColorTable::instance().getColor( "MenuDefaultBgColor" )),
 			scrollable("scrollable", false), 
+			max_scrollable_items("max_scrollable_items", U32_MAX),
 			shortcut_pad("shortcut_pad")
 		{
 			addSynonym(bg_visible, "opaque");
@@ -541,6 +543,7 @@ class LLMenuGL
 	S32				mLastMouseY;
 	S32				mMouseVelX;
 	S32				mMouseVelY;
+	U32				mMaxScrollableItems;
 	BOOL			mHorizontalLayout;
 	BOOL			mScrollable;
 	BOOL			mKeepFixedSize;
diff --git a/indra/llui/llsearcheditor.h b/indra/llui/llsearcheditor.h
index 368b68baa3e..cd2867b4930 100644
--- a/indra/llui/llsearcheditor.h
+++ b/indra/llui/llsearcheditor.h
@@ -67,6 +67,8 @@ class LLSearchEditor : public LLUICtrl
 	virtual ~LLSearchEditor() {}
 
 	void setText(const LLStringExplicit &new_text) { mSearchEditor->setText(new_text); }
+	const std::string& getText() const		{ return mSearchEditor->getText(); }
+
 
 	// LLUICtrl interface
 	virtual void	setValue(const LLSD& value );
@@ -75,6 +77,12 @@ class LLSearchEditor : public LLUICtrl
 	virtual BOOL	setLabelArg( const std::string& key, const LLStringExplicit& text );
 	virtual void	clear();
 
+	void	setKeystrokeCallback(LLLineEditor::callback_t callback, void* user_data)
+	{
+		if(mSearchEditor)
+			mSearchEditor->setKeystrokeCallback(callback,user_data);
+	}
+
 private:
 	LLLineEditor* mSearchEditor;
 	LLButton* mSearchButton;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index d7eabf33c40..30904bd6c90 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -73,6 +73,7 @@ set(viewer_SOURCE_FILES
     llagentdata.cpp
     llagentlanguage.cpp
     llagentpilot.cpp
+    llagentui.cpp
     llagentwearables.cpp
     llanimstatelabels.cpp
     llappviewer.cpp
@@ -235,6 +236,7 @@ set(viewer_SOURCE_FILES
     llhudrender.cpp
     llhudtext.cpp
     llhudview.cpp
+    llimhandler.cpp
     llimpanel.cpp
     llimview.cpp
     llimcontrolpanel.cpp
@@ -374,6 +376,7 @@ set(viewer_SOURCE_FILES
     lltoast.cpp
     lltoastalertpanel.cpp
     lltoastgroupnotifypanel.cpp
+    lltoastimpanel.cpp
     lltoastnotifypanel.cpp
     lltoastpanel.cpp
     lltoggleablemenu.cpp
@@ -518,6 +521,7 @@ set(viewer_HEADER_FILES
     llagentdata.h
     llagentlanguage.h
     llagentpilot.h
+    llagentui.h
     llagentwearables.h
     llanimstatelabels.h
     llappearance.h
@@ -824,6 +828,7 @@ set(viewer_HEADER_FILES
     lltoast.h
     lltoastalertpanel.h
     lltoastgroupnotifypanel.h
+    lltoastimpanel.h
     lltoastnotifypanel.h
     lltoastpanel.h
     lltoggleablemenu.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4e7b3e2f685..9835c5a4cf1 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7243,17 +7243,6 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>ShowSearchBar</key>
-    <map>
-      <key>Comment</key>
-      <string>Show the Search Bar in the Status Overlay</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
     <key>ShowNetStats</key>
     <map>
       <key>Comment</key>
@@ -8153,6 +8142,17 @@
       <key>Value</key>
       <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
     </map>
+    <key>StartUpChannelUUID</key>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>B56AF90D-6684-48E4-B1E4-722D3DEB2CB6</string>
+    </map>  
     <key>NearByChatChannelUUID</key>
     <map>
       <key>Comment</key>
@@ -8164,6 +8164,28 @@
       <key>Value</key>
       <string>E1158BD6-661C-4981-9DAD-4DCBFF062502</string>
     </map>  
+    <key>NotificationChannelUUID</key>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>AEED3193-8709-4693-8558-7452CCA97AE5</string>
+    </map>  
+    <key>AlertChannelUUID</key>
+    <map>
+      <key>Comment</key>
+      <string />
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>F3E07BC8-A973-476D-8C7F-F3B7293975D1</string>
+    </map>  
     <key>UIImgWhiteUUID</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 4166d962191..ae30c1959cc 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -104,6 +104,7 @@
 #include "llcapabilitylistener.h"
 
 #include "llnavigationbar.h" //to show/hide navigation bar when changing mouse look state
+#include "llagentui.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -912,6 +913,8 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
 	mRegionsVisited.insert(handle);
 
 	LLSelectMgr::getInstance()->updateSelectionCenter();
+
+	LLFloaterMove::sUpdateFlyingStatus();
 }
 
 
@@ -936,42 +939,6 @@ LLHost LLAgent::getRegionHost() const
 	}
 }
 
-//-----------------------------------------------------------------------------
-// getSLURL()
-// returns empty() if getRegion() == NULL
-//-----------------------------------------------------------------------------
-std::string LLAgent::getSLURL() const
-{
-	return buildSLURL(true);
-}
-
-//-----------------------------------------------------------------------------
-// getUnescapedSLURL()
-// returns empty() if getRegion() == NULL
-//-----------------------------------------------------------------------------
-std::string LLAgent::getUnescapedSLURL() const
-{
-	return buildSLURL(false);
-}
-
-std::string LLAgent::buildSLURL(const bool escape) const
-{
-	std::string slurl;
-	LLViewerRegion *regionp = getRegion();
-	if (regionp)
-	{
-		LLVector3d agentPos = getPositionGlobal();
-		S32 x = llround( (F32)fmod( agentPos.mdV[VX], (F64)REGION_WIDTH_METERS ) );
-		S32 y = llround( (F32)fmod( agentPos.mdV[VY], (F64)REGION_WIDTH_METERS ) );
-		S32 z = llround( (F32)agentPos.mdV[VZ] );
-		if (escape)
-			slurl = LLSLURL::buildSLURL(regionp->getName(), x, y, z);
-		else
-			slurl = LLSLURL::buildUnescapedSLURL(regionp->getName(), x, y, z);
-	}
-	return slurl;
-}
-
 //-----------------------------------------------------------------------------
 // inPrelude()
 //-----------------------------------------------------------------------------
@@ -2854,6 +2821,8 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLSideTray::getInstance()->setVisible(TRUE);
 
+		LLPanelStandStopFlying::getInstance()->setVisible(TRUE);
+
 		LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
 
 		LLFloaterCamera::toPrevModeIfInAvatarViewMode();
@@ -2946,6 +2915,8 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLSideTray::getInstance()->setVisible(FALSE);
 
+		LLPanelStandStopFlying::getInstance()->setVisible(FALSE);
+
 		// clear out camera lag effect
 		mCameraLag.clearVec();
 
@@ -5062,14 +5033,7 @@ void LLAgent::handleMaturity(const LLSD& newvalue)
 
 //----------------------------------------------------------------------------
 
-void LLAgent::buildFullname(std::string& name) const
-{
-	if (mAvatarObject.notNull())
-	{
-		name = mAvatarObject->getFullname();
-	}
-}
-
+//*TODO remove, is not used anywhere as of August 20, 2009
 void LLAgent::buildFullnameAndTitle(std::string& name) const
 {
 	if (isGroupMember())
@@ -5223,97 +5187,6 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO
 	return FALSE;
 }
 
-// utility to build a location string
-BOOL LLAgent::buildLocationString(std::string& str, ELocationFormat fmt)
-{
-	LLViewerRegion* region = getRegion();
-	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-
-	if (!region || !parcel)
-		return FALSE;
-
-	const LLVector3& agent_pos_region = getPositionAgent();
-	S32 pos_x = S32(agent_pos_region.mV[VX]);
-	S32 pos_y = S32(agent_pos_region.mV[VY]);
-	S32 pos_z = S32(agent_pos_region.mV[VZ]);
-
-	// Round the numbers based on the velocity
-	LLVector3 agent_velocity = getVelocity();
-	F32 velocity_mag_sq = agent_velocity.magVecSquared();
-
-	const F32 FLY_CUTOFF = 6.f;		// meters/sec
-	const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF;
-	const F32 WALK_CUTOFF = 1.5f;	// meters/sec
-	const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF;
-
-	if (velocity_mag_sq > FLY_CUTOFF_SQ)
-	{
-		pos_x -= pos_x % 4;
-		pos_y -= pos_y % 4;
-	}
-	else if (velocity_mag_sq > WALK_CUTOFF_SQ)
-	{
-		pos_x -= pos_x % 2;
-		pos_y -= pos_y % 2;
-	}
-
-	// create a defult name and description for the landmark
-	std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName();
-	std::string region_name = region->getName();
-	std::string buffer;
-	if( LLViewerParcelMgr::getInstance()->getAgentParcelName().empty() )
-	{
-		// the parcel doesn't have a name
-		switch (fmt)
-		{
-		case LOCATION_FORMAT_LANDMARK:
-			buffer = llformat("%.100s", region_name.c_str());
-			break;
-		case LOCATION_FORMAT_NORMAL:
-			buffer = llformat("%s", region_name.c_str());
-			break;
-		case LOCATION_FORMAT_WITHOUT_SIM:
-		case LOCATION_FORMAT_FULL:
-			buffer = llformat("%s (%d, %d, %d)",
-							  region_name.c_str(),
-						  pos_x, pos_y, pos_z);
-			break;
-		}
-	}
-	else
-	{
-		// the parcel has a name, so include it in the landmark name
-		switch (fmt)
-		{
-		case LOCATION_FORMAT_LANDMARK:
-			buffer = llformat("%.100s", parcel_name.c_str());
-			break;
-		case LOCATION_FORMAT_NORMAL:
-			buffer = llformat("%s, %s",
-							  region_name.c_str(),
-							  parcel_name.c_str());
-			break;
-		case LOCATION_FORMAT_WITHOUT_SIM:
-			buffer = llformat("%s, %s (%d, %d, %d)",
-									  region_name.c_str(),
-									  parcel_name.c_str(),
-									  pos_x, pos_y, pos_z);
-			break;
-		case LOCATION_FORMAT_FULL:
-			std::string sim_access_string = region->getSimAccessString();
-			buffer = llformat("%s, %s (%d, %d, %d)%s%s",
-							  region_name.c_str(),
-							  parcel_name.c_str(),
-							  pos_x, pos_y, pos_z,
-							  sim_access_string.empty() ? "" : " - ",
-							  sim_access_string.c_str());
-			break;
-		}
-	}
-	str = buffer;
-	return TRUE;
-}
-
 LLQuaternion LLAgent::getHeadRotation()
 {
 	if (mAvatarObject.isNull() || !mAvatarObject->mPelvisp || !mAvatarObject->mHeadp)
@@ -5475,30 +5348,6 @@ BOOL LLAgent::allowOperation(PermissionBit op,
 	return perm.allowOperationBy(op, agent_proxy, group_proxy);
 }
 
-
-void LLAgent::getName(std::string& name) const
-{
-	name.clear();
-
-	if (mAvatarObject.notNull())
-	{
-		LLNameValue *first_nv = mAvatarObject->getNVPair("FirstName");
-		LLNameValue *last_nv = mAvatarObject->getNVPair("LastName");
-		if (first_nv && last_nv)
-		{
-			name = first_nv->printData() + " " + last_nv->printData();
-		}
-		else
-		{
-			llwarns << "Agent is missing FirstName and/or LastName nv pair." << llendl;
-		}
-	}
-	else
-	{
-		name = gSavedSettings.getString("FirstName") + " " + gSavedSettings.getString("LastName");
-	}
-}
-
 const LLColor4 &LLAgent::getEffectColor()
 {
 	return mEffectColor;
@@ -6308,12 +6157,12 @@ void LLAgent::setTeleportState(ETeleportState state)
 	if (mTeleportState == TELEPORT_MOVING)
 	{
 		// We're outa here. Save "back" slurl.
-		mTeleportSourceSLURL = getSLURL();
+		mTeleportSourceSLURL = LLAgentUI::buildSLURL();
 	}
 	else if(mTeleportState == TELEPORT_ARRIVING)
 	{
 		// Let the interested parties know we've teleported.
-		LLViewerParcelMgr::getInstance()->onTeleportFinished();
+		LLViewerParcelMgr::getInstance()->onTeleportFinished(false, getPositionGlobal());
 	}
 }
 
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 3a8cf5fd971..9f71def63ed 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -169,8 +169,7 @@ class LLAgent : public LLOldEvents::LLObservable
 	// Name
 	//--------------------------------------------------------------------
 public:
-	void			getName(std::string& name) const;
-	void			buildFullname(std::string &name) const;
+	//*TODO remove, is not used as of August 20, 2009
 	void			buildFullnameAndTitle(std::string &name) const;
 
 	//--------------------------------------------------------------------
@@ -274,13 +273,9 @@ class LLAgent : public LLOldEvents::LLObservable
 	void			setRegion(LLViewerRegion *regionp);
 	LLViewerRegion	*getRegion() const;
 	LLHost			getRegionHost() const;
-	std::string		getSLURL() const;
-	std::string		getUnescapedSLURL() const;
 	BOOL			inPrelude();
-	BOOL 			buildLocationString(std::string& str, ELocationFormat fmt = LOCATION_FORMAT_LANDMARK); // Utility to build a location string
 private:
 	LLViewerRegion	*mRegionp;
-	std::string  	buildSLURL(const bool escape) const;
 
 	//--------------------------------------------------------------------
 	// History
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
new file mode 100644
index 00000000000..93d88bf3df9
--- /dev/null
+++ b/indra/newview/llagentui.cpp
@@ -0,0 +1,179 @@
+/** 
+ * @file llagentui.cpp
+ * @brief Utility methods to process agent's data as slurl's etc. before displaying
+ *
+ * $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 "llagentui.h"
+
+// Library includes
+#include "llparcel.h"
+
+// Viewer includes
+#include "llagent.h"
+#include "llviewercontrol.h"
+#include "llviewerregion.h"
+#include "llviewerparcelmgr.h"
+#include "llvoavatarself.h"
+#include "llslurl.h"
+
+//static
+void LLAgentUI::buildName(std::string& name)
+{
+	name.clear();
+
+	LLVOAvatarSelf* avatar_object = gAgent.getAvatarObject();
+	if (avatar_object)
+	{
+		LLNameValue *first_nv = avatar_object->getNVPair("FirstName");
+		LLNameValue *last_nv = avatar_object->getNVPair("LastName");
+		if (first_nv && last_nv)
+		{
+			name = first_nv->printData() + " " + last_nv->printData();
+		}
+		else
+		{
+			llwarns << "Agent is missing FirstName and/or LastName nv pair." << llendl;
+		}
+	}
+	else
+	{
+		name = gSavedSettings.getString("FirstName") + " " + gSavedSettings.getString("LastName");
+	}
+}
+
+//static
+void LLAgentUI::buildFullname(std::string& name)
+{
+	if (gAgent.getAvatarObject()) name = gAgent.getAvatarObject()->getFullname();
+}
+
+//static
+std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/)
+{
+	std::string slurl;
+	LLViewerRegion *regionp = gAgent.getRegion();
+	if (regionp)
+	{
+		LLVector3d agentPos = gAgent.getPositionGlobal();
+		slurl = LLSLURL::buildSLURLfromPosGlobal(regionp->getName(), agentPos, escaped);
+	}
+	return slurl;
+}
+
+BOOL LLAgentUI::buildLocationString(std::string& str, LLAgent::ELocationFormat fmt,const LLVector3& agent_pos_region)
+{
+	LLViewerRegion* region = gAgent.getRegion();
+	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+
+	if (!region || !parcel) return FALSE;
+
+	S32 pos_x = S32(agent_pos_region.mV[VX]);
+	S32 pos_y = S32(agent_pos_region.mV[VY]);
+	S32 pos_z = S32(agent_pos_region.mV[VZ]);
+
+	// Round the numbers based on the velocity
+	F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared();
+
+	const F32 FLY_CUTOFF = 6.f;		// meters/sec
+	const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF;
+	const F32 WALK_CUTOFF = 1.5f;	// meters/sec
+	const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF;
+
+	if (velocity_mag_sq > FLY_CUTOFF_SQ)
+	{
+		pos_x -= pos_x % 4;
+		pos_y -= pos_y % 4;
+	}
+	else if (velocity_mag_sq > WALK_CUTOFF_SQ)
+	{
+		pos_x -= pos_x % 2;
+		pos_y -= pos_y % 2;
+	}
+
+	// create a default name and description for the landmark
+	std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName();
+	std::string region_name = region->getName();
+	std::string buffer;
+	if( parcel_name.empty() )
+	{
+		// the parcel doesn't have a name
+		switch (fmt)
+		{
+		case LLAgent::LOCATION_FORMAT_LANDMARK:
+			buffer = llformat("%.100s", region_name.c_str());
+			break;
+		case LLAgent::LOCATION_FORMAT_NORMAL:
+			buffer = llformat("%s", region_name.c_str());
+			break;
+		case LLAgent::LOCATION_FORMAT_WITHOUT_SIM:
+		case LLAgent::LOCATION_FORMAT_FULL:
+			buffer = llformat("%s (%d, %d, %d)",
+				region_name.c_str(),
+				pos_x, pos_y, pos_z);
+			break;
+		}
+	}
+	else
+	{
+		// the parcel has a name, so include it in the landmark name
+		switch (fmt)
+		{
+		case LLAgent::LOCATION_FORMAT_LANDMARK:
+			buffer = llformat("%.100s", parcel_name.c_str());
+			break;
+		case LLAgent::LOCATION_FORMAT_NORMAL:
+			buffer = llformat("%s, %s", region_name.c_str(), parcel_name.c_str());
+			break;
+		case LLAgent::LOCATION_FORMAT_WITHOUT_SIM:
+			buffer = llformat("%s, %s (%d, %d, %d)",
+				region_name.c_str(),
+				parcel_name.c_str(),
+				pos_x, pos_y, pos_z);
+			break;
+		case LLAgent::LOCATION_FORMAT_FULL:
+			std::string sim_access_string = region->getSimAccessString();
+			buffer = llformat("%s, %s (%d, %d, %d)%s%s",
+				region_name.c_str(),
+				parcel_name.c_str(),
+				pos_x, pos_y, pos_z,
+				sim_access_string.empty() ? "" : " - ",
+				sim_access_string.c_str());
+			break;
+		}
+	}
+	str = buffer;
+	return TRUE;
+}
+BOOL LLAgentUI::buildLocationString(std::string& str, LLAgent::ELocationFormat fmt)
+{
+	return buildLocationString(str,fmt, gAgent.getPositionAgent());
+}
diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h
new file mode 100644
index 00000000000..c3bc58d7918
--- /dev/null
+++ b/indra/newview/llagentui.h
@@ -0,0 +1,51 @@
+/** 
+ * @file llagentui.h
+ * @brief Utility methods to process agent's data as slurl's etc. before displaying
+ *
+ * $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 LLAGENTUI_H
+#define LLAGENTUI_H
+
+#include "llagent.h"
+
+class LLAgentUI
+{
+public:
+	static void buildName(std::string& name);
+	static void buildFullname(std::string &name);
+
+	static std::string buildSLURL(const bool escaped = true);
+	//build location string using the current position of gAgent.
+	static BOOL buildLocationString(std::string& str, LLAgent::ELocationFormat fmt = LLAgent::LOCATION_FORMAT_LANDMARK);
+	//build location string using a region position of the avatar. 
+	static BOOL buildLocationString(std::string& str, LLAgent::ELocationFormat fmt,const LLVector3& agent_pos_region);
+};
+
+#endif //LLAGENTUI_H
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index 57ea6064a4b..a8373491cfb 100644
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -36,6 +36,7 @@
 
 #include "llappviewer.h"
 #include "llviewercontrol.h"
+#include "llimview.h"
 
 #include <algorithm>
 
@@ -62,44 +63,66 @@ void LLChannelManager::onLoginCompleted()
 
 	for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it !=  mChannelList.end(); ++it)
 	{
+		if((*it).channel->getChannelID() == LLUUID(gSavedSettings.getString("NearByChatChannelUUID")))
+		{
+			continue;
+		}
+
 		if(!(*it).channel->getDisplayToastsAlways())
 		{
 			away_notifications +=(*it).channel->getNumberOfHiddenToasts();
 		}
 	}
 
+	// *TODO: calculate IM notifications
+	away_notifications += gIMMgr->getNumberOfUnreadIM();
+
 	if(!away_notifications)
 	{
-		LLScreenChannel::setStartUpToastShown();
+		onStartUpToastClose();
 		return;
 	}
 	
 	LLChannelManager::Params p;
-	p.id = LLUUID(STARTUP_CHANNEL_ID);
+	p.id = LLUUID(gSavedSettings.getString("StartUpChannelUUID"));
 	p.channel_right_bound = getRootView()->getRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); 
 	p.channel_width = gSavedSettings.getS32("NotifyBoxWidth");
 	mStartUpChannel = createChannel(p);
 
 	if(!mStartUpChannel)
+	{
+		onStartUpToastClose();
 		return;
+	}
 
-	static_cast<LLUICtrl*>(mStartUpChannel)->setCommitCallback(boost::bind(&LLChannelManager::removeStartUpChannel, this));
+	mStartUpChannel->setShowToasts(true);
+	static_cast<LLUICtrl*>(mStartUpChannel)->setCommitCallback(boost::bind(&LLChannelManager::onStartUpToastClose, this));
 	mStartUpChannel->createStartUpToast(away_notifications, gSavedSettings.getS32("ChannelBottomPanelMargin"), gSavedSettings.getS32("StartUpToastTime"));
 }
 
 //--------------------------------------------------------------------------
-void LLChannelManager::removeStartUpChannel()
+void LLChannelManager::onStartUpToastClose()
 {
-	if(!mStartUpChannel)
-		return;
+	if(mStartUpChannel)
+	{
+		mStartUpChannel->setVisible(FALSE);
+		mStartUpChannel->closeStartUpToast();
+		getRootView()->removeChild(mStartUpChannel);
+		removeChannelByID(LLUUID(gSavedSettings.getString("StartUpChannelUUID")));
+		delete mStartUpChannel;
+		mStartUpChannel = NULL;
+	}
 
-	mStartUpChannel->setVisible(FALSE);
-	mStartUpChannel->closeStartUpToast();
-	getRootView()->removeChild(mStartUpChannel);
-	delete mStartUpChannel;
-	mStartUpChannel = NULL;
+	// set StartUp Toast Flag
+	LLScreenChannel::setStartUpToastShown();
+
+	// allow all other channels to show incoming toasts
+	for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it !=  mChannelList.end(); ++it)
+	{
+		(*it).channel->setShowToasts(true);
+	}
 
-	//force NEARBY CHAT CHANNEL to repost all toasts if present
+	// force NEARBY CHAT CHANNEL to repost all toasts if present
 	LLScreenChannel* nearby_channel = getChannelByID(LLUUID(gSavedSettings.getString("NearByChatChannelUUID")));
 	nearby_channel->loadStoredToastsToChannel();
 	nearby_channel->setCanStoreToasts(false);
@@ -122,7 +145,7 @@ LLScreenChannel* LLChannelManager::createChannel(LLChannelManager::Params& p)
 	if(new_channel)
 		return new_channel;
 
-	new_channel = new LLScreenChannel(); 
+	new_channel = new LLScreenChannel(p.id); 
 	getRootView()->addChild(new_channel);
 	new_channel->init(p.channel_right_bound - p.channel_width, p.channel_right_bound);
 	new_channel->setToastAlignment(p.align);
@@ -179,15 +202,26 @@ void LLChannelManager::reshape(S32 width, S32 height, BOOL called_from_parent)
 }
 
 //--------------------------------------------------------------------------
-
-LLScreenChannel* LLChannelManager::getStartUpChannel()
+void LLChannelManager::removeChannelByID(const LLUUID id)
 {
-	return mStartUpChannel;
+	std::vector<ChannelElem>::iterator it = find(mChannelList.begin(), mChannelList.end(), id); 
+	if(it != mChannelList.end())
+	{
+		mChannelList.erase(it);
+	}
 }
 
 //--------------------------------------------------------------------------
+void LLChannelManager::removeChannelByChiclet(const LLChiclet* chiclet)
+{
+	std::vector<ChannelElem>::iterator it = find(mChannelList.begin(), mChannelList.end(), chiclet); 
+	if(it != mChannelList.end())
+	{
+		mChannelList.erase(it);
+	}
+}
 
-
+//--------------------------------------------------------------------------
 
 
 
diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h
index dbd2e0b4225..e26c96b62ef 100644
--- a/indra/newview/llchannelmanager.h
+++ b/indra/newview/llchannelmanager.h
@@ -44,9 +44,6 @@
 
 namespace LLNotificationsUI
 {
-
-#define STARTUP_CHANNEL_ID		"AEED3193-8709-4693-8558-7452CCA97AE5"
-
 /**
  * Manager for screen channels.
  * Responsible for instantiating and retrieving screen channels.
@@ -56,19 +53,16 @@ class LLChannelManager : public LLUICtrl, public LLSingleton<LLChannelManager>
 public:	
 	struct Params  : public LLInitParam::Block<Params, LLUICtrl::Params>
 	{
-		Optional<LLUUID>			id;
-		Optional<LLChiclet*>		chiclet;
-		Optional<S32>				channel_right_bound;
-		Optional<S32>				channel_width;
-		Optional<bool>				display_toasts_always;
-		Optional<EToastAlignment>	align;
-
-		Params():	id("id", LLUUID("")),
-					chiclet("chiclet", NULL), 
-					channel_right_bound("channel_right_bound", 0), 
-					channel_width("channel_width", 0), 
-					display_toasts_always("display_toasts_always", false),
-					align("align", NA_BOTTOM)
+		LLUUID			id;
+		LLChiclet*		chiclet;
+		S32				channel_right_bound;
+		S32				channel_width;
+		bool			display_toasts_always;
+		EToastAlignment	align;
+
+		Params():	id(LLUUID("")), chiclet(NULL), 
+					channel_right_bound(0), channel_width(0), 
+					display_toasts_always(false), align(NA_BOTTOM)
 		{}
 	};
 
@@ -104,7 +98,8 @@ class LLChannelManager : public LLUICtrl, public LLSingleton<LLChannelManager>
 
 	// On LoginCompleted - show StartUp toast
 	void onLoginCompleted();
-	void removeStartUpChannel();
+	// removes a channel intended for the startup toast and allows other channels to show their toasts
+	void onStartUpToastClose();
 
 	//TODO: make protected? in order to be shure that channels are created only by notification handlers
 	LLScreenChannel*	createChannel(LLChannelManager::Params& p);
@@ -112,9 +107,11 @@ class LLChannelManager : public LLUICtrl, public LLSingleton<LLChannelManager>
 	LLScreenChannel*	getChannelByID(const LLUUID id);
 	LLScreenChannel*	getChannelByChiclet(const LLChiclet* chiclet);
 
-	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+	// remove channel methods
+	void	removeChannelByID(const LLUUID id);
+	void	removeChannelByChiclet(const LLChiclet* chiclet);
 
-	LLScreenChannel* getStartUpChannel();
+	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
 private:
 
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index c844d70d891..6b4dfa73a46 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -55,6 +55,10 @@ static LLDefaultChildRegistry::Register<LLTalkButton> t2("chiclet_talk");
 static LLDefaultChildRegistry::Register<LLNotificationChiclet> t3("chiclet_notification");
 static LLDefaultChildRegistry::Register<LLIMChiclet> t4("chiclet_im");
 
+S32 LLNotificationChiclet::mUreadSystemNotifications = 0;
+S32 LLNotificationChiclet::mUreadIMNotifications = 0;
+
+
 boost::signals2::signal<LLChiclet* (const LLUUID&),
 		LLIMChiclet::CollectChicletCombiner<std::list<LLChiclet*> > >
 		LLIMChiclet::sFindChicletsSignal;
@@ -115,6 +119,12 @@ boost::signals2::connection LLNotificationChiclet::setClickCallback(
 	return mButton->setClickedCallback(cb);
 }
 
+void LLNotificationChiclet::updateUreadIMNotifications()
+{
+	mUreadIMNotifications = gIMMgr->getNumberOfUnreadIM();
+	setCounter(mUreadSystemNotifications + mUreadIMNotifications);
+}
+
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -269,6 +279,12 @@ void LLIMChiclet::setCounter(S32 counter)
 	}
 }
 
+void LLIMChiclet::onMouseDown()
+{
+	LLIMFloater::toggle(getSessionId());
+	setCounter(0);
+}
+
 LLRect LLIMChiclet::getRequiredRect()
 {
 	LLRect rect(0, 0, mAvatarCtrl->getRect().getWidth(), 0);
@@ -296,6 +312,38 @@ void LLIMChiclet::setShowCounter(bool show)
 	}
 }
 
+
+void LLIMChiclet::setSessionId(const LLUUID& session_id)
+{
+	LLChiclet::setSessionId(session_id);
+
+	//for a group chat session_id = group_id
+	LLFloaterIMPanel* im = LLIMMgr::getInstance()->findFloaterBySession(session_id);
+	if (!im) return; //should never happen
+	
+	EInstantMessage type = im->getDialogType();
+	if (type == IM_SESSION_INVITE || type == IM_SESSION_GROUP_START)
+	{
+		if (!gAgent.isInGroup(session_id)) return;
+
+		if (mGroupInsignia) {
+			LLGroupMgr* grp_mgr = LLGroupMgr::getInstance();
+			LLGroupMgrGroupData* group_data = grp_mgr->getGroupData(session_id);
+			if (group_data && group_data->mInsigniaID.notNull())
+			{
+				mGroupInsignia->setVisible(TRUE);
+				mGroupInsignia->setValue(group_data->mInsigniaID);
+			}
+			else
+			{
+				mID = session_id; //needed for LLGroupMgrObserver
+				grp_mgr->addObserver(this);
+				grp_mgr->sendGroupPropertiesRequest(session_id);
+			}
+		}
+	}	
+}
+
 void LLIMChiclet::setIMSessionName(const std::string& name)
 {
 	setToolTip(name);
@@ -311,48 +359,13 @@ void LLIMChiclet::setOtherParticipantId(const LLUUID& other_participant_id)
 	//all alive sessions have alive floater, haven't they?
 	llassert(floater);
 
-	//in case participant id is being replaced with different id for a group chat
-	if (mOtherParticipantId.notNull() && mOtherParticipantId != other_participant_id && 
-		mID.notNull() && mGroupInsignia->getValue().isUUID())
-	{
-		LLGroupMgr::getInstance()->removeObserver(this);
-	}
-
 	mOtherParticipantId = other_participant_id;
 
-	switch (floater->getDialogType())
+	if (mAvatarCtrl && floater->getDialogType() == IM_NOTHING_SPECIAL)
 	{
-		case IM_NOTHING_SPECIAL: 
-			if (mAvatarCtrl) {
-				mAvatarCtrl->setVisible(TRUE);
-				mAvatarCtrl->setValue(other_participant_id);
-			}
-			break;
-		case IM_SESSION_GROUP_START:
-			{
-				if (mGroupInsignia) {
-					LLGroupMgr* grp_mgr = LLGroupMgr::getInstance();
-					LLGroupMgrGroupData* group_data = grp_mgr->getGroupData(other_participant_id);
-					if (group_data && group_data->mInsigniaID.notNull())
-					{
-						mGroupInsignia->setVisible(TRUE);
-						mGroupInsignia->setValue(group_data->mInsigniaID);
-					}
-					else
-					{
-						mID = mOtherParticipantId; //needed for LLGroupMgrObserver
-						grp_mgr->addObserver(this);
-						grp_mgr->sendGroupPropertiesRequest(mOtherParticipantId);
-					}
-				}
-			}
-			
-			break;
-		default:
-			llwarning("Unsupported dialog type", 0); 
-			break;
+		mAvatarCtrl->setVisible(TRUE);
+		mAvatarCtrl->setValue(other_participant_id);
 	}
-
 }
 
 
@@ -363,7 +376,7 @@ void LLIMChiclet::changed(LLGroupChange gc)
 
 	if (GC_PROPERTIES == gc)
 	{
-		LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mOtherParticipantId);
+		LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(getSessionId());
 		if (group_data && group_data->mInsigniaID.notNull())
 		{
 			mGroupInsignia->setVisible(TRUE);
@@ -395,8 +408,7 @@ void LLIMChiclet::updateMenuItems()
 
 BOOL LLIMChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
 {
-	LLIMFloater::toggle(getSessionId());
-	setCounter(0);
+	onMouseDown();
 	return LLChiclet::handleMouseDown(x, y, mask);
 }
 
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index c83caf8ff96..b1e73c9d8d8 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -256,6 +256,8 @@ class LLIMChiclet : public LLChiclet, LLGroupMgrObserver
 
 	/*virtual*/ ~LLIMChiclet();
 
+	virtual void setSessionId(const LLUUID& session_id);
+
 	/*
 	 * Sets IM session name. This name will be displayed in chiclet tooltip.
 	*/
@@ -303,6 +305,14 @@ class LLIMChiclet : public LLChiclet, LLGroupMgrObserver
 	*/
 	/*virtual*/ void draw();
 
+	/**
+	 * The action taken on mouse down event.
+	 * 
+	 * Made public so that it can be triggered from outside
+	 * (more specifically, from the Active IM window).
+	 */
+	void onMouseDown();
+
 	/*
 	 * Returns rect, required to display chiclet.
 	 * Width is the only valid value.
@@ -407,12 +417,20 @@ class LLNotificationChiclet : public LLChiclet
 	// Notification Chiclet Window
 	void	setNotificationChicletWindow(LLFloater* wnd) { mNotificationChicletWindow = wnd; }
 
+	// methods for updating a number of unread System or IM notifications
+	void incUreadSystemNotifications() { setCounter(++mUreadSystemNotifications + mUreadIMNotifications); }
+	void decUreadSystemNotifications() { setCounter(--mUreadSystemNotifications + mUreadIMNotifications); }
+	void updateUreadIMNotifications();
+
 protected:
 	LLNotificationChiclet(const Params& p);
 	friend class LLUICtrlFactory;
 
 	LLFloater*	mNotificationChicletWindow;
 
+	static S32 mUreadSystemNotifications;
+	static S32 mUreadIMNotifications;
+
 protected:
 	LLButton* mButton;
 	LLChicletNotificationCounterCtrl* mCounterCtrl;
diff --git a/indra/newview/llclassifiedstatsresponder.cpp b/indra/newview/llclassifiedstatsresponder.cpp
index a218e2b4e50..ecd18790904 100644
--- a/indra/newview/llclassifiedstatsresponder.cpp
+++ b/indra/newview/llclassifiedstatsresponder.cpp
@@ -33,7 +33,6 @@
 
 #include "llviewerprecompiledheaders.h"
 
-#include "llagent.h"
 #include "llclassifiedstatsresponder.h"
 
 #include "llpanelclassified.h"
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index de97e2406dc..88f79fc1b95 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -42,7 +42,6 @@
 
 #include "llcubemap.h"
 #include "llsky.h"
-#include "llagent.h"
 #include "lldrawable.h"
 #include "llface.h"
 #include "llviewercamera.h"
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index a2d8c965ec6..565f906a3b9 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -38,7 +38,6 @@
 #include "llvoavatar.h"
 #include "m3math.h"
 
-#include "llagent.h"
 #include "lldrawable.h"
 #include "llface.h"
 #include "llsky.h"
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 2cb4d5d6d5b..331ba67d36c 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -43,7 +43,6 @@
 #include "llglheaders.h"
 #include "llrender.h"
 
-#include "llagent.h"
 #include "llcubemap.h"
 #include "lldrawable.h"
 #include "llface.h"
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
index d084bda2eac..331536fdca7 100644
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -35,7 +35,6 @@
 #include "lldrawpoolsimple.h"
 
 #include "llviewercamera.h"
-#include "llagent.h"
 #include "lldrawable.h"
 #include "llface.h"
 #include "llsky.h"
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index 9b52ddb73c6..c14ca2473bb 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -42,7 +42,6 @@
 #include "llwlparammanager.h"
 #include "llsky.h"
 #include "llvowlsky.h"
-#include "llagent.h"
 #include "llviewerregion.h"
 #include "llface.h"
 #include "llrender.h"
diff --git a/indra/newview/llemote.cpp b/indra/newview/llemote.cpp
index bacf3daf5a3..c83846215ef 100644
--- a/indra/newview/llemote.cpp
+++ b/indra/newview/llemote.cpp
@@ -39,7 +39,6 @@
 #include "llcharacter.h"
 #include "m3math.h"
 #include "llvoavatar.h"
-#include "llagent.h"
 
 //-----------------------------------------------------------------------------
 // Constants
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 9c1a7ecb040..70ee5d395e9 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -38,6 +38,8 @@
 #include "llfloaterreg.h"
 #include "llfocusmgr.h"
 #include "llinventory.h"
+#include "lllandmarkactions.h"
+#include "lltrans.h"
 #include "lluictrlfactory.h"
 #include "llmenugl.h"
 
@@ -56,6 +58,71 @@
 
 static LLDefaultChildRegistry::Register<LLFavoritesBarCtrl> r("favorites_bar");
 
+const S32 DROP_DOWN_MENU_WIDTH = 250;
+
+/**
+ * This class is needed to override LLButton default handleToolTip function and
+ * show SLURL as button tooltip.
+ * *NOTE: dzaporozhan: This is a workaround. We could set tooltips for buttons
+ * in createButtons function but landmark data is not available when Favorites Bar is
+ * created. Thats why we are requesting landmark data after 
+ */
+class LLFavoriteLandmarkButton : public LLButton
+{
+public:
+
+	/**
+	 * Requests landmark data from server and shows landmark SLURL as tooltip.
+	 */
+	BOOL handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect)
+	{
+		if(LLUI::sShowXUINames)
+		{
+			return LLButton::handleToolTip(x, y, msg, sticky_rect);
+		}
+
+		if(!mLoaded)
+		{
+			LLVector3d g_pos;
+			if(LLLandmarkActions::getLandmarkGlobalPos(mLandmarkID, g_pos))
+			{
+				LLLandmarkActions::getSLURLfromPosGlobal(g_pos, 
+					boost::bind(&LLFavoriteLandmarkButton::landmarkNameCallback, this, _1), false);
+			}
+		}
+
+		msg = mSLURL;
+		return TRUE;
+	}
+
+	void landmarkNameCallback(const std::string& name)
+	{
+		mSLURL = name;
+		mLoaded = true;
+	}
+	
+	void setLandmarkID(const LLUUID& id){ mLandmarkID = id; }
+
+protected:
+
+	LLFavoriteLandmarkButton(const LLButton::Params& p)
+		: LLButton(p)
+		, mLandmarkID(LLUUID::null)
+		, mSLURL("(Loading...)")
+		, mLoaded(false)
+	{
+		static std::string loading_tooltip = LLTrans::getString("favorite_landmark_loading_tooltip");
+		mSLURL = loading_tooltip;
+	}
+
+	friend class LLUICtrlFactory;
+
+private:
+	LLUUID mLandmarkID;
+	std::string mSLURL;
+	bool mLoaded;
+};
+
 // updateButtons's helper
 struct LLFavoritesSort
 {
@@ -353,13 +420,15 @@ void LLFavoritesBarCtrl::createButtons(const LLInventoryModel::item_array_t &ite
 	{
 		LLInventoryItem* item = items.get(i);
 
-		LLButton* fav_btn = LLUICtrlFactory::defaultBuilder<LLButton>(buttonXMLNode, this, NULL);
+		LLFavoriteLandmarkButton* fav_btn = LLUICtrlFactory::defaultBuilder<LLFavoriteLandmarkButton>(buttonXMLNode, this, NULL);
 		if (NULL == fav_btn)
 		{
 			llwarns << "Unable to create button for landmark: " << item->getName() << llendl;
 			continue;
 		}
 
+		fav_btn->setLandmarkID(item->getUUID());
+		
 		// change only left and save bottom
 		fav_btn->setOrigin(curr_x, fav_btn->getRect().mBottom);
 		fav_btn->setFont(mFont);
@@ -413,6 +482,7 @@ void LLFavoritesBarCtrl::showDropDownMenu()
 		menu_p.can_tear_off(false);
 		menu_p.visible(false);
 		menu_p.scrollable(true);
+		menu_p.max_scrollable_items = 10;
 
 		LLToggleableMenu* menu = LLUICtrlFactory::create<LLToggleableMenu>(menu_p);
 
@@ -471,10 +541,8 @@ void LLFavoritesBarCtrl::showDropDownMenu()
 
 		menu->empty();
 
-		U32 max_width = 0;
-
-		// Menu will not be wider, than bar
-		S32 bar_width = getRect().getWidth();
+		U32 max_width = llmin(DROP_DOWN_MENU_WIDTH, getRect().getWidth());
+		U32 widest_item = 0;
 
 		for(S32 i = mFirstDropDownItem; i < count; i++)
 		{
@@ -489,12 +557,12 @@ void LLFavoritesBarCtrl::showDropDownMenu()
 			LLMenuItemCallGL *menu_item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);
 			menu_item->setRightMouseDownCallback(boost::bind(&LLFavoritesBarCtrl::onButtonRightClick, this,item->getUUID(),_1,_2,_3,_4));
 			// Check whether item name wider than menu
-			if ((S32) menu_item->getNominalWidth() > bar_width)
+			if (menu_item->getNominalWidth() > max_width)
 			{
 				S32 chars_total = item_name.length();
 				S32 chars_fitted = 1;
 				menu_item->setLabel(LLStringExplicit(""));
-				S32 label_space = bar_width - menu_item->getFont()->getWidth("...") -
+				S32 label_space = max_width - menu_item->getFont()->getWidth("...") -
 					menu_item->getNominalWidth(); // This returns width of menu item with empty label (pad pixels)
 
 				while (chars_fitted < chars_total && menu_item->getFont()->getWidth(item_name, 0, chars_fitted) < label_space)
@@ -505,21 +573,17 @@ void LLFavoritesBarCtrl::showDropDownMenu()
 
 				menu_item->setLabel(item_name.substr(0, chars_fitted) + "...");
 			}
-
-			max_width = llmax(max_width, menu_item->getNominalWidth());
+			widest_item = llmax(widest_item, menu_item->getNominalWidth());
 
 			menu->addChild(menu_item);
 		}
 
-		// Menu will not be wider, than bar
-		max_width = llmin((S32)max_width, bar_width);
-
 		menu->buildDrawLabels();
 		menu->updateParent(LLMenuGL::sMenuContainer);
 
 		menu->setButtonRect(mChevronRect, this);
 
-		LLMenuGL::showPopup(this, menu, getRect().getWidth() - max_width, 0);
+		LLMenuGL::showPopup(this, menu, getRect().getWidth() - widest_item, 0);
 	}
 }
 
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index f49f854620d..7a88612f1ac 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -81,7 +81,18 @@ void LLFloaterGroupPicker::setPowersMask(U64 powers_mask)
 
 BOOL LLFloaterGroupPicker::postBuild()
 {
-	init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), mPowersMask);
+	LLScrollListCtrl* list_ctrl = getChild<LLScrollListCtrl>("group list");
+	init_group_list(list_ctrl, gAgent.getGroupID(), mPowersMask);
+	
+	// Remove group "none" from list. Group "none" is added in init_group_list(). 
+	// Some UI elements use group "none", we need to manually delete it here.
+	// Group "none" ID is LLUUID:null.
+	LLCtrlListInterface* group_list = list_ctrl->getListInterface();
+	if(group_list)
+	{
+		group_list->selectByValue(LLUUID::null);
+		group_list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
+	}
 
 	childSetAction("OK", onBtnOK, this);
 
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index ba23a58b372..aa82dc34b74 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -43,7 +43,6 @@
 #include "llbutton.h"
 #include "lltextbox.h"
 
-#include "llagent.h"			// for agent id
 #include "llalertdialog.h"
 #include "llinventorybridge.h"
 #include "llfloaterinventory.h"
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index ac687ed3e93..a27070de393 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -64,6 +64,7 @@
 #include "llvfs.h"
 #include "llviewertexture.h"
 #include "llassetuploadresponders.h"
+#include "llagentui.h"
 
 #include <boost/regex.hpp>  //boost.regex lib
 
@@ -101,7 +102,7 @@ BOOL LLFloaterPostcard::postBuild()
 	childDisable("from_form");
 
 	std::string name_string;
-	gAgent.buildFullname(name_string);
+	LLAgentUI::buildFullname(name_string);
 	childSetValue("name_form", LLSD(name_string));
 
 	// For the first time a user focusess to .the msg box, all text will be selected.
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index a50bcaa0987..10276ba36da 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -84,6 +84,7 @@
 #include "llviewerwindow.h"
 #include "llvlcomposition.h"
 #include "lltrans.h"
+#include "llagentui.h"
 
 #define ELAR_ENABLED 0 // Enable when server support is implemented
 
@@ -714,7 +715,7 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L
 	gAgent.getID().toString(buffer);
 	strings.push_back(buffer);
 	std::string name;
-	gAgent.buildFullname(name);
+	LLAgentUI::buildFullname(name);
 	strings.push_back(strings_t::value_type(name));
 	strings.push_back(strings_t::value_type(text));
 	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
@@ -2659,7 +2660,7 @@ bool LLPanelEstateInfo::onMessageCommit(const LLSD& notification, const LLSD& re
 	strings_t strings;
 	//integers_t integers;
 	std::string name;
-	gAgent.buildFullname(name);
+	LLAgentUI::buildFullname(name);
 	strings.push_back(strings_t::value_type(name));
 	strings.push_back(strings_t::value_type(text));
 	LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index e2176350c92..818381b561b 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -85,6 +85,7 @@
 #include "llviewernetwork.h"
 
 #include "llassetuploadresponders.h"
+#include "llagentui.h"
 
 const U32 INCLUDE_SCREENSHOT  = 0x01 << 0;
 
@@ -137,7 +138,7 @@ void LLFloaterReporter::processRegionInfo(LLMessageSystem* msg)
 // virtual
 BOOL LLFloaterReporter::postBuild()
 {
-	childSetText("abuse_location_edit", gAgent.getSLURL() );
+	childSetText("abuse_location_edit", LLAgentUI::buildSLURL());
 
 	enableControls(TRUE);
 
@@ -190,7 +191,7 @@ BOOL LLFloaterReporter::postBuild()
 	
 	// grab the user's name
 	std::string fullname;
-	gAgent.buildFullname(fullname);
+	LLAgentUI::buildFullname(fullname);
 	childSetText("reporter_field", fullname);
 	
 	center();
@@ -499,7 +500,7 @@ void LLFloaterReporter::showFromObject(const LLUUID& object_id)
 
 	// grab the user's name
 	std::string fullname;
-	gAgent.buildFullname(fullname);
+	LLAgentUI::buildFullname(fullname);
 	f->childSetText("reporter_field", fullname);
 
 	// Request info for this object
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 814395395c8..dd73ebbd8f4 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -59,6 +59,7 @@
 #include "lltoolfocus.h"
 #include "lltoolmgr.h"
 #include "llworld.h"
+#include "llagentui.h"
 
 // Linden library includes
 #include "llfontgl.h"
@@ -967,9 +968,9 @@ void LLSnapshotLivePreview::saveTexture()
 	{
 		LLVFile::writeFile(formatted->getData(), formatted->getDataSize(), gVFS, new_asset_id, LLAssetType::AT_TEXTURE);
 		std::string pos_string;
-		gAgent.buildLocationString(pos_string, LLAgent::LOCATION_FORMAT_FULL);
+		LLAgentUI::buildLocationString(pos_string, LLAgent::LOCATION_FORMAT_FULL);
 		std::string who_took_it;
-		gAgent.buildFullname(who_took_it);
+		LLAgentUI::buildFullname(who_took_it);
 		LLAssetStorage::LLStoreAssetCallback callback = NULL;
 		S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
 		void *userdata = NULL;
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp
index f61d5cb0778..c20b3f34b2f 100644
--- a/indra/newview/llfloatertos.cpp
+++ b/indra/newview/llfloatertos.cpp
@@ -35,7 +35,6 @@
 #include "llfloatertos.h"
 
 // viewer includes
-#include "llagent.h"
 #include "llappviewer.h"
 #include "llstartup.h"
 #include "llviewerstats.h"
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
index 37da4a6ba66..a7658d90e9a 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llfloatervoicedevicesettings.cpp
@@ -36,7 +36,6 @@
 #include "llfloatervoicedevicesettings.h"
 
 // Viewer includes
-#include "llagent.h"
 #include "llbutton.h"
 #include "llcombobox.h"
 #include "llfocusmgr.h"
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index d1f0f94fa09..2a29566120a 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -34,7 +34,6 @@
 
 #include "llfolderview.h"
 
-#include "llagent.h"
 #include "llcallbacklist.h"
 #include "llinventorybridge.h"
 #include "llinventoryclipboard.h" // *TODO: remove this once hack below gone.
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 7af77e2056c..24e9615f0d0 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -37,6 +37,7 @@
 
 #include "llagent.h"
 #include "llfloaterreg.h"
+#include "llgroupmgr.h"
 #include "llimview.h" // for gIMMgr
 #include "llsidetray.h"
 
@@ -162,6 +163,19 @@ void LLGroupActions::show(const LLUUID& group_id)
 	LLSideTray::getInstance()->showPanel("panel_group_info_sidetray", params);
 }
 
+void LLGroupActions::refresh_notices()
+{
+	if(!isGroupUIVisible())
+		return;
+
+	LLSD params;
+	params["group_id"] = LLUUID::null;
+	params["open_tab_name"] = "panel_group_info_sidetray";
+	params["action"] = "refresh_notices";
+
+	LLSideTray::getInstance()->showPanel("panel_group_info_sidetray", params);
+}
+
 //static 
 void LLGroupActions::refresh(const LLUUID& group_id)
 {
@@ -225,6 +239,28 @@ void LLGroupActions::startChat(const LLUUID& group_id)
 	}
 }
 
+// static
+bool LLGroupActions::isAvatarMemberOfGroup(const LLUUID& group_id, const LLUUID& avatar_id)
+{
+	if(group_id.isNull() || avatar_id.isNull())
+	{
+		return false;
+	}
+
+	LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(group_id);
+	if(!group_data)
+	{
+		return false;
+	}
+
+	if(group_data->mMembers.end() == group_data->mMembers.find(avatar_id))
+	{
+		return false;
+	}
+
+	return true;
+}
+
 //-- Private methods ----------------------------------------------------------
 
 // static
diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h
index eb366bd779b..9fe1da8af21 100644
--- a/indra/newview/llgroupactions.h
+++ b/indra/newview/llgroupactions.h
@@ -67,6 +67,11 @@ class LLGroupActions
 	 */
 	static void refresh(const LLUUID& group_id);
 
+	/**
+	 * Refresh group notices panel.
+	 */
+	static void refresh_notices();
+
 	/**
 	 * Refresh group information panel.
 	 */
@@ -81,6 +86,15 @@ class LLGroupActions
 	 * Start group instant messaging session.
 	 */
 	static void startChat(const LLUUID& group_id);
+
+	/**
+	 * Returns true if avatar is in group.
+	 *
+	 * Note that data about group members is loaded from server.
+	 * If data has not been loaded yet, function will return inaccurate result.
+	 * See LLGroupMgr::sendGroupMembersRequest
+	 */
+	static bool isAvatarMemberOfGroup(const LLUUID& group_id, const LLUUID& avatar_id);
 	
 private:
 	static bool onLeaveGroup(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 0ba10197650..5e50fad0082 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -809,7 +809,7 @@ static void formatDateString(std::string &date_string)
 		std::string day = result[2];
 
 		// ISO 8601 date format
-		date_string = llformat("%04s-%02s-%02s", year.c_str(), month.c_str(), day.c_str());
+		date_string = llformat("%02s/%02s/%04s", month.c_str(), day.c_str(), year.c_str());
 	}
 }
 
diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp
index 6f22a683276..0a6938f4f80 100644
--- a/indra/newview/llhudview.cpp
+++ b/indra/newview/llhudview.cpp
@@ -39,7 +39,6 @@
 #include "llcoord.h"
 
 // viewer includes
-#include "llagent.h"
 #include "llcallingcard.h"
 #include "llviewercontrol.h"
 #include "llfloaterworldmap.h"
diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp
new file mode 100644
index 00000000000..0262e40803e
--- /dev/null
+++ b/indra/newview/llimhandler.cpp
@@ -0,0 +1,127 @@
+/** 
+ * @file llimhandler.cpp
+ * @brief Notification Handler Class for IM notifications
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ * 
+ * Copyright (c) 2000-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" // must be first include
+
+#include "llnotificationhandler.h"
+
+#include "llbottomtray.h"
+#include "llviewercontrol.h"
+#include "lltoastimpanel.h"
+
+using namespace LLNotificationsUI;
+
+//--------------------------------------------------------------------------
+LLIMHandler::LLIMHandler()
+{
+	
+	// getting a Chiclet and creating params for a channel
+	LLBottomTray* tray = LLBottomTray::getInstance();
+	mChiclet = tray->getSysWell();
+
+	LLChannelManager::Params p;
+	// *TODO: createNotificationChannel method
+	p.id = LLUUID(gSavedSettings.getString("NotificationChannelUUID"));
+	p.channel_right_bound = tray->getRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); 
+	p.channel_width = gSavedSettings.getS32("NotifyBoxWidth");
+
+	// Getting a Channel for our notifications
+	mChannel = LLChannelManager::getInstance()->createChannel(p);
+
+}
+
+//--------------------------------------------------------------------------
+LLIMHandler::~LLIMHandler()
+{
+}
+
+//--------------------------------------------------------------------------
+void LLIMHandler::processNotification(const LLSD& notify)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+	if(!notification)
+		return;
+
+	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
+	{
+		LLSD substitutions = notification->getSubstitutions();
+
+		LLToastIMPanel::Params im_p;
+		im_p.notification = notification;
+		im_p.avatar_id = substitutions["FROM_ID"].asUUID();
+		im_p.from = substitutions["FROM"].asString();
+		im_p.time = substitutions["TIME"].asString();
+		im_p.message = substitutions["MESSAGE"].asString();
+		im_p.session_id = substitutions["SESSION_ID"].asUUID();
+
+		LLToastIMPanel* im_box = new LLToastIMPanel(im_p);
+
+		LLToast::Params p;
+		p.id = notification->getID();
+		p.notification = notification;
+		p.panel = im_box;
+		p.can_be_stored = false;
+		p.on_toast_destroy = boost::bind(&LLIMHandler::onToastDestroy, this, _1);
+		mChannel->addToast(p);
+
+
+		static_cast<LLNotificationChiclet*>(mChiclet)->updateUreadIMNotifications();
+	}
+	else if (notify["sigtype"].asString() == "delete")
+	{
+		mChannel->killToastByNotificationID(notification->getID());
+	}
+}
+
+//--------------------------------------------------------------------------
+void LLIMHandler::onToastDestroy(LLToast* toast)
+{
+	toast->closeFloater();
+	static_cast<LLNotificationChiclet*>(mChiclet)->updateUreadIMNotifications();
+}
+
+//--------------------------------------------------------------------------
+void LLIMHandler::onChicletClick(void)
+{
+}
+
+//--------------------------------------------------------------------------
+void LLIMHandler::onChicletClose(void)
+{
+}
+
+//--------------------------------------------------------------------------
+
+
+
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 72e2bb02d5c..8c249628975 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -2235,6 +2235,8 @@ bool LLIMFloater::toggle(const LLUUID& session_id)
 	{
 		// ensure the list of messages is updated when floater is made visible
 		show(session_id);
+		// update number of unread notifications in the SysWell
+		LLBottomTray::getInstance()->getSysWell()->updateUreadIMNotifications();
 		return true;
 	}
 }
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index e3902bffa07..4cbf88f3daf 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -72,6 +72,7 @@
 #include "lltrans.h"
 
 #include "llfirstuse.h"
+#include "llagentui.h"
 
 //
 // Globals
@@ -104,6 +105,8 @@ void toast_callback(const LLSD& msg){
 		args["MESSAGE"] = msg["message"];
 		args["TIME"] = msg["time"];
 		args["FROM"] = msg["from"];
+		args["FROM_ID"] = msg["from_id"];
+		args["SESSION_ID"] = msg["session_id"];
 
 		LLNotifications::instance().add("IMToast", args, LLSD(), boost::bind(&LLFloaterChatterBox::onOpen, LLFloaterChatterBox::getInstance(), msg["session_id"].asUUID()));
 	}
@@ -124,7 +127,7 @@ void LLIMModel::testMessages()
 
 	bot1_session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, bot1_id);
 	newSession(bot1_session_id, from, IM_NOTHING_SPECIAL, bot1_id);
-	addMessage(bot1_session_id, from, "Test Message: Hi from testerbot land!");
+	addMessage(bot1_session_id, from, bot1_id, "Test Message: Hi from testerbot land!");
 
 	LLUUID bot2_id;
 	std::string firstname[] = {"Roflcopter", "Joe"};
@@ -137,8 +140,8 @@ void LLIMModel::testMessages()
 	bot2_id.generate(from);
 	LLUUID bot2_session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, bot2_id);
 	newSession(bot2_session_id, from, IM_NOTHING_SPECIAL, bot2_id);
-	addMessage(bot2_session_id, from, "Test Message: Can I haz bear? ");
-	addMessage(bot2_session_id, from, "Test Message: OMGWTFBBQ.");
+	addMessage(bot2_session_id, from, bot2_id, "Test Message: Can I haz bear? ");
+	addMessage(bot2_session_id, from, bot2_id, "Test Message: OMGWTFBBQ.");
 }
 
 
@@ -218,7 +221,7 @@ bool LLIMModel::addToHistory(LLUUID session_id, std::string from, std::string ut
 }
 
 		
-bool LLIMModel::addMessage(LLUUID session_id, std::string from, std::string utf8_text) { 
+bool LLIMModel::addMessage(LLUUID session_id, std::string from, LLUUID from_id, std::string utf8_text) { 
 
 	LLIMSession* session = get_if_there(sSessionsMap, session_id, (LLIMSession*)NULL);
 
@@ -231,7 +234,7 @@ bool LLIMModel::addMessage(LLUUID session_id, std::string from, std::string utf8
 	addToHistory(session_id, from, utf8_text);
 
 	std::string agent_name;
-	gAgent.buildFullname(agent_name);
+	LLAgentUI::buildFullname(agent_name);
 	
 	session->mNumUnread++;
 
@@ -240,6 +243,9 @@ bool LLIMModel::addMessage(LLUUID session_id, std::string from, std::string utf8
 	arg["session_id"] = session_id;
 	arg["num_unread"] = session->mNumUnread;
 	arg["message"] = utf8_text;
+	arg["from"] = from;
+	arg["from_id"] = from_id;
+	arg["time"] = LLLogChat::timestamp(false);
 	mChangedSignal(arg);
 
 	return true;
@@ -264,7 +270,7 @@ const std::string& LLIMModel::getName(LLUUID session_id)
 void LLIMModel::sendTypingState(LLUUID session_id, LLUUID other_participant_id, BOOL typing) 
 {
 	std::string name;
-	gAgent.buildFullname(name);
+	LLAgentUI::buildFullname(name);
 
 	pack_instant_message(
 		gMessageSystem,
@@ -285,7 +291,7 @@ void LLIMModel::sendLeaveSession(LLUUID session_id, LLUUID other_participant_id)
 	if(session_id.notNull())
 	{
 		std::string name;
-		gAgent.buildFullname(name);
+		LLAgentUI::buildFullname(name);
 		pack_instant_message(
 			gMessageSystem,
 			gAgent.getID(),
@@ -310,7 +316,7 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 {
 	std::string name;
 	bool sent = false;
-	gAgent.buildFullname(name);
+	LLAgentUI::buildFullname(name);
 
 	const LLRelationship* info = NULL;
 	info = LLAvatarTracker::instance().getBuddyInfo(other_participant_id);
@@ -377,13 +383,13 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 	{
 		// Do we have to replace the /me's here?
 		std::string from;
-		gAgent.buildFullname(from);
+		LLAgentUI::buildFullname(from);
 		LLIMModel::instance().addToHistory(im_session_id, from, utf8_text);
 
 		//local echo for the legacy communicate panel
 		std::string history_echo;
 		std::string utf8_copy = utf8_text;
-		gAgent.buildFullname(history_echo);
+		LLAgentUI::buildFullname(history_echo);
 
 		// Look for IRC-style emotes here.
 
@@ -433,7 +439,7 @@ void session_starter_helper(
 	msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
 
 	std::string name;
-	gAgent.buildFullname(name);
+	LLAgentUI::buildFullname(name);
 
 	msg->addStringFast(_PREHASH_FromAgentName, name);
 	msg->addStringFast(_PREHASH_Message, LLStringUtil::null);
@@ -1231,7 +1237,7 @@ void LLIMMgr::addMessage(
 			//<< "*** position: " << position << std::endl;
 
 			floater->addHistoryLine(bonus_info.str(), LLUIColorTable::instance().getColor("SystemChatColor"));
-			LLIMModel::instance().addMessage(new_session_id, from, bonus_info.str());
+			LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());
 		}
 
 		make_ui_sound("UISndNewIncomingIMSession");
@@ -1251,7 +1257,7 @@ void LLIMMgr::addMessage(
 		floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message
 	}
 
-	LLIMModel::instance().addMessage(new_session_id, from, msg);
+	LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
 
 	if( !LLFloaterReg::instanceVisible("communicate") && !floater->getVisible())
 	{
@@ -1311,6 +1317,19 @@ void LLIMMgr::notifyNewIM()
 	}
 }
 
+S32 LLIMMgr::getNumberOfUnreadIM()
+{
+	std::map<LLUUID, LLIMModel::LLIMSession*>::iterator it;
+	
+	S32 num = 0;
+	for(it = LLIMModel::sSessionsMap.begin(); it != LLIMModel::sSessionsMap.end(); ++it)
+	{
+		num += (*it).second->mNumUnread;
+	}
+
+	return num;
+}
+
 void LLIMMgr::clearNewIMNotification()
 {
 	mIMReceived = FALSE;
@@ -1356,44 +1375,9 @@ LLUUID LLIMMgr::addSession(
 	EInstantMessage dialog,
 	const LLUUID& other_participant_id)
 {
-	LLUUID session_id = computeSessionID(dialog, other_participant_id);
-
-	LLFloaterIMPanel* floater = findFloaterBySession(session_id);
-	if(!floater)
-	{
-		LLDynamicArray<LLUUID> ids;
-		ids.put(other_participant_id);
-
-		floater = createFloater(
-			session_id,
-			other_participant_id,
-			name,
-			ids,
-			dialog,
-			TRUE);
-
-		noteOfflineUsers(floater, ids);
-		//LLFloaterReg::showInstance("communicate", session_id);
-		// *NOTE: Is this right?  Or should we only do it for 
-		// dialog == IM_NOTHING_SPECIAL and some group types?
-
-		// Only warn for regular IMs - not group IMs
-		if( dialog == IM_NOTHING_SPECIAL )
-		{
-			noteMutedUsers(floater, ids);
-		}
-	}
-	else
-	{
-		// *TODO: Remove this?  Otherwise old communicate window opens on
-		// second initiation of IM session from People panel?
-		// floater->openFloater();
-	}
-	//mTabContainer->selectTabPanel(panel);
-	floater->setInputFocus(TRUE);
-	LLIMFloater::show(session_id);
-	notifyObserverSessionAdded(floater->getSessionID(), name, other_participant_id);
-	return floater->getSessionID();
+	LLDynamicArray<LLUUID> ids;
+	ids.put(other_participant_id);
+	return addSession(name, dialog, other_participant_id, ids);
 }
 
 // Adds a session using the given session_id.  If the session already exists 
@@ -1409,9 +1393,7 @@ LLUUID LLIMMgr::addSession(
 		return LLUUID::null;
 	}
 
-	LLUUID session_id = computeSessionID(
-		dialog,
-		other_participant_id);
+	LLUUID session_id = computeSessionID(dialog,other_participant_id);
 
 	LLFloaterIMPanel* floater = findFloaterBySession(session_id);
 	if(!floater)
@@ -1422,15 +1404,13 @@ LLUUID LLIMMgr::addSession(
 			session_id,
 			other_participant_id,
 			name,
-			ids,
 			dialog,
-			TRUE);
+			TRUE,
+			ids);
 
 		if ( !floater ) return LLUUID::null;
 
 		noteOfflineUsers(floater, ids);
-		// *BUG: Is this correct?  What do we want to spawn for group IMs?
-		// LLFloaterReg::showInstance("communicate", session_id);
 
 		// Only warn for regular IMs - not group IMs
 		if( dialog == IM_NOTHING_SPECIAL )
@@ -1440,10 +1420,13 @@ LLUUID LLIMMgr::addSession(
 	}
 	else
 	{
-		floater->openFloater();
+		// *TODO: Remove this?  Otherwise old communicate window opens on
+		// second initiation of IM session from People panel?
+		// floater->openFloater();
 	}
 	//mTabContainer->selectTabPanel(panel);
 	floater->setInputFocus(TRUE);
+	LLIMFloater::show(session_id);
 	notifyObserverSessionAdded(floater->getSessionID(), name, other_participant_id);
 	return floater->getSessionID();
 }
@@ -1772,35 +1755,8 @@ LLFloaterIMPanel* LLIMMgr::createFloater(
 	const LLUUID& other_participant_id,
 	const std::string& session_label,
 	EInstantMessage dialog,
-	BOOL user_initiated)
-{
-	if (session_id.isNull())
-	{
-		llwarns << "Creating LLFloaterIMPanel with null session ID" << llendl;
-	}
-
-	llinfos << "LLIMMgr::createFloater: from " << other_participant_id 
-			<< " in session " << session_id << llendl;
-	std::vector<LLUUID> ids;
-	LLFloaterIMPanel* floater = new LLFloaterIMPanel(session_label,
-													 session_id,
-													 other_participant_id,
-													 ids,
-													 dialog);
-	LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
-	LLFloaterChatterBox::getInstance()->addFloater(floater, FALSE, i_pt);
-	mFloaters.insert(floater->getHandle());
-	LLIMModel::instance().newSession(session_id, session_label, dialog, other_participant_id);
-	return floater;
-}
-
-LLFloaterIMPanel* LLIMMgr::createFloater(
-	const LLUUID& session_id,
-	const LLUUID& other_participant_id,
-	const std::string& session_label,
-	const LLDynamicArray<LLUUID>& ids,
-	EInstantMessage dialog,
-	BOOL user_initiated)
+	BOOL user_initiated,
+	const LLDynamicArray<LLUUID>& ids)
 {
 	if (session_id.isNull())
 	{
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index b3b821f2ac5..777d68978e7 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -71,7 +71,7 @@ class LLIMModel :  public LLSingleton<LLIMModel>
 
 	bool newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id);
 	std::list<LLSD> getMessages(LLUUID session_id, int start_index = 0);
-	bool addMessage(LLUUID session_id, std::string from, std::string utf8_text);
+	bool addMessage(LLUUID session_id, std::string from, LLUUID other_participant_id, std::string utf8_text);
 	bool addToHistory(LLUUID session_id, std::string from, std::string utf8_text); 
     //used to get the name of the session, for use as the title
     //currently just the other avatar name
@@ -189,6 +189,9 @@ class LLIMMgr : public LLSingleton<LLIMMgr>
 	// IM received that you haven't seen yet
 	BOOL getIMReceived() const;
 
+	// Calc number of unread IMs
+	S32 getNumberOfUnreadIM();
+
 	// This method is used to go through all active sessions and
 	// disable all of them. This method is usally called when you are
 	// forced to log out or similar situations where you do not have a
@@ -231,14 +234,8 @@ class LLIMMgr : public LLSingleton<LLIMMgr>
 									const LLUUID& target_id,
 									const std::string& name,
 									EInstantMessage dialog,
-									BOOL user_initiated = FALSE);
-
-	LLFloaterIMPanel* createFloater(const LLUUID& session_id,
-									const LLUUID& target_id,
-									const std::string& name,
-									const LLDynamicArray<LLUUID>& ids,
-									EInstantMessage dialog,
-									BOOL user_initiated = FALSE);
+									BOOL user_initiated = FALSE, 
+									const LLDynamicArray<LLUUID>& ids = LLDynamicArray<LLUUID>());
 
 	// This simple method just iterates through all of the ids, and
 	// prints a simple message if they are not online. Used to help
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index aa5432740ce..2c56a70ced2 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -50,6 +50,7 @@
 #include "llworldmap.h"
 #include "lllandmark.h"
 #include "llinventorymodel.h"
+#include "llagentui.h"
 
 // Returns true if the given inventory item is a landmark pointing to the current parcel.
 // Used to filter inventory items.
@@ -78,6 +79,8 @@ class LLFetchLandmarksByName : public LLInventoryCollectFunctor
 private:
 	std::string name;
 	BOOL use_substring;
+	//this member will be contain copy of founded items to keep the result unique
+	std::set<std::string> check_duplicate;
 
 public:
 LLFetchLandmarksByName(std::string &landmark_name, BOOL if_use_substring)
@@ -97,28 +100,35 @@ use_substring(if_use_substring)
 		if (!landmark) // the landmark not been loaded yet
 			return false;
 
+		bool acceptable = false;
 		std::string landmark_name = item->getName();
 		LLStringUtil::toLower(landmark_name);
 		if(use_substring)
 		{
-			if ( landmark_name.find( name ) != std::string::npos)
-				return true;
+			acceptable =  landmark_name.find( name ) != std::string::npos;
 		}
 		else
 		{
-			if ( landmark_name == name )
-				return true;
+			acceptable = landmark_name == name;
+		}
+		if(acceptable){
+			if(check_duplicate.find(landmark_name) != check_duplicate.end()){
+				// we have duplicated items in landmarks
+				acceptable = false;
+			}else{
+				check_duplicate.insert(landmark_name);
+			}
 		}
 
-		return false;
+		return acceptable;
 	}
 };
 
-LLInventoryModel::item_array_t LLLandmarkActions::fetchLandmarksByName(std::string& name, BOOL if_starts_with)
+LLInventoryModel::item_array_t LLLandmarkActions::fetchLandmarksByName(std::string& name, BOOL use_substring)
 {
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
-	LLFetchLandmarksByName fetchLandmarks(name, if_starts_with);
+	LLFetchLandmarksByName fetchLandmarks(name, use_substring);
 	gInventory.collectDescendentsIf(gInventory.getRootFolderID(),
 			cats,
 			items,
@@ -135,6 +145,27 @@ bool LLLandmarkActions::landmarkAlreadyExists()
 	return !items.empty();
 }
 
+
+LLViewerInventoryItem* LLLandmarkActions::findLandmarkForAgentParcel()
+{
+	// Determine whether there are landmarks pointing to the current parcel.
+	LLInventoryModel::cat_array_t cats;
+	LLInventoryModel::item_array_t items;
+	LLIsAgentParcelLandmark is_current_parcel_landmark;
+	gInventory.collectDescendentsIf(gInventory.getRootFolderID(),
+		cats,
+		items,
+		LLInventoryModel::EXCLUDE_TRASH,
+		is_current_parcel_landmark);
+
+	if(items.empty())
+	{
+		return NULL;
+	}
+
+	return items[0];
+}
+
 bool LLLandmarkActions::canCreateLandmarkHere()
 {
 	LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
@@ -187,21 +218,20 @@ void LLLandmarkActions::createLandmarkHere()
 {
 	std::string landmark_name, landmark_desc;
 
-	gAgent.buildLocationString(landmark_name, LLAgent::LOCATION_FORMAT_LANDMARK);
-	gAgent.buildLocationString(landmark_desc, LLAgent::LOCATION_FORMAT_FULL);
+	LLAgentUI::buildLocationString(landmark_name, LLAgent::LOCATION_FORMAT_LANDMARK);
+	LLAgentUI::buildLocationString(landmark_desc, LLAgent::LOCATION_FORMAT_FULL);
 	LLUUID folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
 
 	createLandmarkHere(landmark_name, landmark_desc, folder_id);
 }
 
-void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slurl_callback_t cb)
+void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slurl_callback_t cb, bool escaped /* = true */)
 {
 	std::string sim_name;
 	bool gotSimName = LLWorldMap::getInstance()->simNameFromPosGlobal(global_pos, sim_name);
 	if (gotSimName)
 	{
-		std::string slurl = LLSLURL::buildSLURLfromPosGlobal(sim_name, global_pos);
-
+		std::string slurl = LLSLURL::buildSLURLfromPosGlobal(sim_name, global_pos, escaped);
 		cb(slurl);
 
 		return;
@@ -213,6 +243,7 @@ void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slur
 		LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponse,
 														cb,
 														global_pos,
+														escaped,
 														_1, _2, _3, _4);
 
 		LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
@@ -221,6 +252,7 @@ void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slur
 
 void LLLandmarkActions::onRegionResponse(slurl_callback_t cb,
 										 const LLVector3d& global_pos,
+										 bool escaped,
 										 U64 region_handle,
 										 const std::string& url,
 										 const LLUUID& snapshot_id,
@@ -231,7 +263,7 @@ void LLLandmarkActions::onRegionResponse(slurl_callback_t cb,
 	bool gotSimName = LLWorldMap::getInstance()->simNameFromPosGlobal(global_pos, sim_name);
 	if (gotSimName)
 	{
-		slurl = LLSLURL::buildSLURLfromPosGlobal(sim_name, global_pos);
+		slurl = LLSLURL::buildSLURLfromPosGlobal(sim_name, global_pos, escaped);
 	}
 	else
 	{
diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h
index 3c2a0a55226..c74072c0f40 100644
--- a/indra/newview/lllandmarkactions.h
+++ b/indra/newview/lllandmarkactions.h
@@ -52,6 +52,14 @@ class LLLandmarkActions
 	 */
 	static bool landmarkAlreadyExists();
 
+	/**
+	 * @brief Searches landmark for parcel agent is currently in.
+	 * @return Returns landmark for agent parcel or NULL.
+	 * 
+	 * *TODO: dzaporozhan: There can be many landmarks for single parcel.
+	 */
+	static LLViewerInventoryItem* findLandmarkForAgentParcel();
+
 	/**
 	 * @brief Checks whether agent has rights to create landmark for current parcel.
 	 */
@@ -80,7 +88,7 @@ class LLLandmarkActions
 	/**
 	 * @brief Creates SLURL for given global position.
 	 */
-	static void getSLURLfromPosGlobal(const LLVector3d& global_pos, slurl_callback_t cb);
+	static void getSLURLfromPosGlobal(const LLVector3d& global_pos, slurl_callback_t cb, bool escaped = true);
 
     /**
      * @brief Gets landmark global position specified by inventory LLUUID.
@@ -98,6 +106,7 @@ class LLLandmarkActions
 
 	static void onRegionResponse(slurl_callback_t cb,
 								 const LLVector3d& global_pos,
+								 bool escaped,
 								 U64 region_handle,
 								 const std::string& url,
 								 const LLUUID& snapshot_id,
diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp
index 03d6953521a..c83cde9d83b 100644
--- a/indra/newview/lllocationhistory.cpp
+++ b/indra/newview/lllocationhistory.cpp
@@ -49,8 +49,15 @@ void LLLocationHistory::addItem(const std::string & item, const std::string & to
 	static LLUICachedControl<S32> max_items("LocationHistoryMaxSize", 100);
 
 	// check if this item doesn't duplicate any existing one
-	if (touchItem(item)) {
-		return;
+	std::vector<std::string>::iterator item_iter = std::find_if(mItems.begin(), mItems.end(),
+			boost::bind(&LLLocationHistory::equalByRegionParcel,this,_1,item));
+	if(item_iter != mItems.end()){
+	/*replace duplicate.
+	 * If an item's region and item's parcel are  equal.
+	 */
+		mToolTips.erase(*item_iter);
+		mItems.erase(item_iter);	
+		
 	}
 
 	mItems.push_back(item);
@@ -65,6 +72,21 @@ void LLLocationHistory::addItem(const std::string & item, const std::string & to
 	}
 }
 
+/**
+ * check if the history item is equal.
+ * @return  true - if region name and parcel is equal.  
+ */
+bool LLLocationHistory::equalByRegionParcel(const std::string& item, const std::string& newItem){
+
+	
+	S32 itemIndex = item.find('(');
+	S32 newItemIndex = newItem.find('(');
+	
+	std::string region_parcel  = item.substr(0,itemIndex);
+	std::string new_region_parcel  = newItem.substr(0,newItemIndex);
+	
+	return region_parcel == new_region_parcel;
+}
 bool LLLocationHistory::touchItem(const std::string & item) {
 	bool result = false;
 	std::vector<std::string>::iterator item_iter = std::find(mItems.begin(), mItems.end(), item);
@@ -135,7 +157,13 @@ void LLLocationHistory::save() const
 	}
 
 	for (location_list_t::const_iterator it = mItems.begin(); it != mItems.end(); ++it)
-		file << (*it) << delimiter << mToolTips.find(*it)->second << std::endl;
+	{
+		std::string tooltip =  getToolTip(*it);
+		if(!tooltip.empty())
+		{
+			file << (*it) << delimiter << tooltip << std::endl;
+		}
+	}
 
 	file.close();
 }
diff --git a/indra/newview/lllocationhistory.h b/indra/newview/lllocationhistory.h
index 67eabcdaca7..060a6b2fe89 100644
--- a/indra/newview/lllocationhistory.h
+++ b/indra/newview/lllocationhistory.h
@@ -65,6 +65,7 @@ class LLLocationHistory: public LLSingleton<LLLocationHistory>
 	void					dump() const;
 
 private:
+	bool equalByRegionParcel(const std::string& item, const  std::string& item_to_add);
 	const static char delimiter;
 	std::vector<std::string>			mItems;
 	std::map<std::string, std::string>	mToolTips;
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 63a40e40a03..1542c7483ae 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -40,6 +40,7 @@
 #include "llfocusmgr.h"
 #include "llmenugl.h"
 #include "llstring.h"
+#include "lltrans.h"
 #include "lluictrlfactory.h"
 
 // newview includes
@@ -56,6 +57,8 @@
 #include "llviewercontrol.h"
 #include "llviewermenu.h"
 #include "llurllineeditorctrl.h"
+#include "llagentui.h"
+
 //============================================================================
 /*
  * "ADD LANDMARK" BUTTON UPDATING LOGIC
@@ -151,6 +154,8 @@ static LLDefaultChildRegistry::Register<LLLocationInputCtrl> r("location_input")
 LLLocationInputCtrl::Params::Params()
 :	add_landmark_image_enabled("add_landmark_image_enabled"),
 	add_landmark_image_disabled("add_landmark_image_disabled"),
+	add_landmark_image_hover("add_landmark_image_hover"),
+	add_landmark_image_selected("add_landmark_image_selected"),
 	add_landmark_button("add_landmark_button"),
 	add_landmark_hpad("add_landmark_hpad", 0),
 	info_button("info_button")
@@ -162,7 +167,9 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	mAddLandmarkHPad(p.add_landmark_hpad),
 	mInfoBtn(NULL),
 	mLocationContextMenu(NULL),
-	mAddLandmarkBtn(NULL)
+	mAddLandmarkBtn(NULL),
+	mLandmarkImageOn(NULL),
+	mLandmarkImageOff(NULL)
 {
 	// Lets replace default LLLineEditor with LLLocationLineEditor
 	// to make needed escaping while copying and cutting url
@@ -198,16 +205,27 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 
 	// "Add landmark" button.
 	LLButton::Params al_params = p.add_landmark_button;
+
+	// Image for unselected state will be set in updateAddLandmarkButton(),
+	// it will be either mLandmarkOn or mLandmarkOff
 	if (p.add_landmark_image_enabled())
 	{
-		al_params.image_unselected = p.add_landmark_image_enabled;
-		al_params.image_selected = p.add_landmark_image_enabled;
+		mLandmarkImageOn = p.add_landmark_image_enabled;
 	}
 	if (p.add_landmark_image_disabled())
 	{
-		al_params.image_disabled = p.add_landmark_image_disabled;
-		al_params.image_disabled_selected = p.add_landmark_image_disabled;
+		mLandmarkImageOff = p.add_landmark_image_disabled;
+	}
+
+	if(p.add_landmark_image_selected)
+	{
+		al_params.image_selected = p.add_landmark_image_selected;
+	}
+	if (p.add_landmark_image_hover())
+	{
+		al_params.image_hover_unselected = p.add_landmark_image_hover;
 	}
+
 	al_params.click_callback.function(boost::bind(&LLLocationInputCtrl::onAddLandmarkButtonClicked, this));
 	mAddLandmarkBtn = LLUICtrlFactory::create<LLButton>(al_params);
 	enableAddLandmarkButton(true);
@@ -233,7 +251,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	// - Make the "Add landmark" button updated when either current parcel gets changed
 	//   or a landmark gets created or removed from the inventory.
 	// - Update the location string on parcel change.
-	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->setAgentParcelChangedCallback(
+	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
 		boost::bind(&LLLocationInputCtrl::onAgentParcelChange, this));
 
 	mLocationHistoryConnection = LLLocationHistory::getInstance()->setLoadedCallback(
@@ -243,6 +261,9 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	mAddLandmarkObserver	= new LLAddLandmarkObserver(this);
 	gInventory.addObserver(mRemoveLandmarkObserver);
 	gInventory.addObserver(mAddLandmarkObserver);
+
+	mAddLandmarkTooltip = LLTrans::getString("location_ctrl_add_landmark");
+	mEditLandmarkTooltip = LLTrans::getString("location_ctrl_edit_landmark");
 }
 
 LLLocationInputCtrl::~LLLocationInputCtrl()
@@ -389,7 +410,21 @@ void LLLocationInputCtrl::onInfoButtonClicked()
 
 void LLLocationInputCtrl::onAddLandmarkButtonClicked()
 {
-	LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
+	LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentParcel();
+	
+	// Landmark exists, open it for preview and edit
+	if(landmark && landmark->getUUID().notNull())
+	{
+		LLSD key;
+		key["type"] = "landmark";
+		key["id"] = landmark->getUUID();
+
+		LLSideTray::getInstance()->showPanel("panel_places", key);
+	}
+	else
+	{
+		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
+	}
 }
 
 void LLLocationInputCtrl::onAgentParcelChange()
@@ -414,11 +449,14 @@ void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)
 	rebuildLocationHistory(filter);
 
 	//Let's add landmarks to the top of the list if any
-	LLInventoryModel::item_array_t landmark_items = LLLandmarkActions::fetchLandmarksByName(filter, TRUE);
-
-	for(U32 i=0; i < landmark_items.size(); i++)
+	if( filter.size() !=0 )
 	{
-		mList->addSimpleElement(landmark_items[i]->getName(), ADD_TOP);
+		LLInventoryModel::item_array_t landmark_items = LLLandmarkActions::fetchLandmarksByName(filter, TRUE);
+
+		for(U32 i=0; i < landmark_items.size(); i++)
+		{
+			mList->addSimpleElement(landmark_items[i]->getName(), ADD_TOP);
+		}
 	}
 	mList->mouseOverHighlightNthItem(-1); // Clear highlight on the last selected item.
 }
@@ -459,9 +497,7 @@ void LLLocationInputCtrl::refreshLocation()
 	LLAgent::ELocationFormat format =  (gSavedSettings.getBOOL("ShowCoordinatesOption") ? 
 			LLAgent::LOCATION_FORMAT_WITHOUT_SIM: LLAgent::LOCATION_FORMAT_NORMAL);
 
-	if (!gAgent.buildLocationString(location_name,format))
-		location_name = "Unknown";
-
+	if (!LLAgentUI::buildLocationString(location_name, format)) location_name = "Unknown";
 	setText(location_name);
 }
 
@@ -499,15 +535,32 @@ void LLLocationInputCtrl::focusTextEntry()
 
 void LLLocationInputCtrl::enableAddLandmarkButton(bool val)
 {
-	// Enable/disable the button.
-	mAddLandmarkBtn->setEnabled(val);
+	// We don't want to disable the button because it should be click able at any time, 
+	// instead switch images.
+	LLUIImage* img = val ? mLandmarkImageOn : mLandmarkImageOff;
+	if(img)
+	{
+		mAddLandmarkBtn->setImageUnselected(img);
+	}
 }
 
 // Change the "Add landmark" button image
 // depending on whether current parcel has been landmarked.
 void LLLocationInputCtrl::updateAddLandmarkButton()
 {
-	enableAddLandmarkButton(!LLLandmarkActions::landmarkAlreadyExists());
+	bool landmark_exists = LLLandmarkActions::landmarkAlreadyExists();
+	enableAddLandmarkButton(!landmark_exists);
+
+	std::string tooltip;
+	if(landmark_exists)
+	{
+		tooltip = mEditLandmarkTooltip;
+	}
+	else
+	{
+		tooltip = mAddLandmarkTooltip;
+	}
+	mAddLandmarkBtn->setToolTip(tooltip);
 }
 
 void LLLocationInputCtrl::updateContextMenu(){
@@ -554,7 +607,8 @@ void LLLocationInputCtrl::changeLocationPresentation()
 	if(mTextEntry && !mTextEntry->hasSelection() && 
 		!LLSLURL::isSLURL(mTextEntry->getText()))
 	{
-		mTextEntry->setText(gAgent.getUnescapedSLURL());
+		//needs unescaped one
+		mTextEntry->setText(LLAgentUI::buildSLURL(false));
 		mTextEntry->selectAll();
 	}	
 }
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index 1b26a07d835..d967df8257f 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -59,7 +59,9 @@ class LLLocationInputCtrl
 	:	public LLInitParam::Block<Params, LLComboBox::Params>
 	{
 		Optional<LLUIImage*>				add_landmark_image_enabled,
-											add_landmark_image_disabled;
+											add_landmark_image_disabled,
+											add_landmark_image_hover,
+											add_landmark_image_selected;
 		Optional<S32>						add_landmark_hpad;
 		Optional<LLButton::Params>			add_landmark_button,
 											info_button;
@@ -93,6 +95,10 @@ class LLLocationInputCtrl
 	virtual ~LLLocationInputCtrl();
 
 	void					focusTextEntry();
+	/**
+	 * Changes the "Add landmark" button image
+	 * depending on whether current parcel has been landmarked.
+	 */
 	void					enableAddLandmarkButton(bool val);
 	void					refresh();
 	void					refreshLocation();
@@ -124,6 +130,11 @@ class LLLocationInputCtrl
 
 	boost::signals2::connection	mParcelMgrConnection;
 	boost::signals2::connection	mLocationHistoryConnection;
+	LLUIImage* mLandmarkImageOn;
+	LLUIImage* mLandmarkImageOff;
+
+	std::string mAddLandmarkTooltip;
+	std::string mEditLandmarkTooltip;
 };
 
 #endif
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 92b1ecfd16d..11c8b03f7fd 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -36,6 +36,7 @@
 
 // Library includes
 #include "indra_constants.h"
+#include "llparcel.h"
 
 // Viewer includes
 
@@ -51,6 +52,8 @@
 #include "llviewerwindow.h"
 #include "llviewercontrol.h"
 #include "llselectmgr.h" 
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
 
 //
 // Constants
@@ -137,6 +140,8 @@ BOOL LLFloaterMove::postBuild()
 
 	initMovementMode();
 
+	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(LLFloaterMove::sUpdateFlyingStatus);
+
 	return TRUE;
 }
 
@@ -385,6 +390,15 @@ void LLFloaterMove::updatePosition()
 	}
 	setOrigin(x, y);
 }
+
+//static
+void LLFloaterMove::sUpdateFlyingStatus()
+{
+	LLFloaterMove *floater = LLFloaterReg::findTypedInstance<LLFloaterMove>("moveview");
+	if (floater) floater->mModeControlButtonMap[MM_FLY]->setEnabled(gAgent.canFly());
+	
+}
+
 void LLFloaterMove::showModeButtons(BOOL bShow)
 {
 	if (mModeActionsPanel->getVisible() == bShow)
@@ -421,6 +435,8 @@ void LLFloaterMove::enableInstance(BOOL bEnable)
 void LLFloaterMove::onOpen(const LLSD& key)
 {
 	updatePosition();
+
+	sUpdateFlyingStatus();
 }
 
 void LLFloaterMove::showQuickTips(const EMovementMode mode)
@@ -476,11 +492,12 @@ inline LLPanelStandStopFlying* LLPanelStandStopFlying::getInstance()
 void LLPanelStandStopFlying::setStandStopFlyingMode(EStandStopFlyingMode mode)
 {
 	LLPanelStandStopFlying* panel = getInstance();
-	panel->setVisible(TRUE);
 
-	BOOL standVisible = SSFM_STAND == mode;
-	panel->mStandButton->setVisible(standVisible);
-	panel->mStopFlyingButton->setVisible(!standVisible);
+	panel->mStandButton->setVisible(SSFM_STAND == mode);
+	panel->mStopFlyingButton->setVisible(SSFM_STOP_FLYING == mode);
+
+	//visibility of it should be updated after updating visibility of the buttons
+	panel->setVisible(TRUE);
 }
 
 //static
@@ -505,11 +522,12 @@ BOOL LLPanelStandStopFlying::postBuild()
 	mStandButton = getChild<LLButton>("stand_btn");
 	mStandButton->setCommitCallback(boost::bind(&LLPanelStandStopFlying::onStandButtonClick, this));
 	mStandButton->setCommitCallback(boost::bind(&LLFloaterMove::enableInstance, TRUE));
+	mStandButton->setVisible(FALSE);
 	
 	mStopFlyingButton = getChild<LLButton>("stop_fly_btn");
 	mStopFlyingButton->setCommitCallback(boost::bind(&LLFloaterMove::setFlyingMode, FALSE));
 	mStopFlyingButton->setCommitCallback(boost::bind(&LLPanelStandStopFlying::onStopFlyingButtonClick, this));
-
+	mStopFlyingButton->setVisible(FALSE);
 	
 	return TRUE;
 }
@@ -517,6 +535,11 @@ BOOL LLPanelStandStopFlying::postBuild()
 //virtual
 void LLPanelStandStopFlying::setVisible(BOOL visible)
 {
+	//we dont need to show the panel if these buttons are not activated
+	if (visible && !mStandButton->getVisible() && !mStopFlyingButton->getVisible()) visible = false;
+
+	if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false;
+
 	if (visible)
 	{
 		updatePosition();
diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h
index fd9cf9f4c1a..6e6af9b6934 100644
--- a/indra/newview/llmoveview.h
+++ b/indra/newview/llmoveview.h
@@ -67,6 +67,7 @@ class LLFloaterMove
 	// let update its position in each frame
 	/*virtual*/ void draw(){updatePosition(); LLFloater::draw();}
 
+	static void sUpdateFlyingStatus();
 
 protected:
 	void turnLeft();
diff --git a/indra/newview/llnamebox.cpp b/indra/newview/llnamebox.cpp
index 56648d3218c..2f4a2661985 100644
--- a/indra/newview/llnamebox.cpp
+++ b/indra/newview/llnamebox.cpp
@@ -41,7 +41,6 @@
 #include "lluuid.h"
 
 #include "llcachename.h"
-#include "llagent.h"
 
 // statics
 std::set<LLNameBox*> LLNameBox::sInstances;
diff --git a/indra/newview/llnameeditor.cpp b/indra/newview/llnameeditor.cpp
index ccb33c770a2..65601da7da7 100644
--- a/indra/newview/llnameeditor.cpp
+++ b/indra/newview/llnameeditor.cpp
@@ -34,7 +34,6 @@
  
 #include "llnameeditor.h"
 #include "llcachename.h"
-#include "llagent.h"
 
 #include "llfontgl.h"
 
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 087fdda14a6..1b82c2dc18d 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -37,7 +37,6 @@
 #include "llnamelistctrl.h"
 
 #include "llcachename.h"
-#include "llagent.h"
 #include "llinventory.h"
 #include "llscrolllistitem.h"
 #include "llscrolllistcell.h"
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 713c44d3666..7cb0456e8ad 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -40,6 +40,7 @@
 #include <llmenugl.h>
 
 #include "llagent.h"
+#include "llviewerregion.h"
 #include "lllocationhistory.h"
 #include "lllocationinputctrl.h"
 #include "llteleporthistory.h"
@@ -57,6 +58,7 @@
 #include "lllandmarkactions.h"
 
 #include "llfavoritesbar.h"
+#include "llagentui.h"
 
 //-- LLTeleportHistoryMenuItem -----------------------------------------------
 
@@ -180,19 +182,15 @@ LLNavigationBar::LLNavigationBar()
 	mBtnHome(NULL),
 	mCmbLocation(NULL),
 	mLeSearch(NULL),
-	mPurgeTPHistoryItems(false),
-	mUpdateTypedLocationHistory(false)
+	mPurgeTPHistoryItems(false)
 {
 	setIsChrome(TRUE);
 	
-	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->setAgentParcelChangedCallback(
-			boost::bind(&LLNavigationBar::onTeleportFinished, this));
+	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->setTeleportFinishedCallback(
+			boost::bind(&LLNavigationBar::onTeleportFinished, this, _1));
 
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml");
 
-	// navigation bar can never get a tab
-	setFocusRoot(FALSE);
-
 	// set a listener function for LoginComplete event
 	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLNavigationBar::handleLoginComplete, this));
 
@@ -314,19 +312,18 @@ void LLNavigationBar::onLocationSelection()
 	}
 	else
 	{
+		//If it is not slurl let's look for landmarks
 		LLInventoryModel::item_array_t landmark_items = LLLandmarkActions::fetchLandmarksByName(typed_location, FALSE);
 		if ( !landmark_items.empty() )
 		{
-			mUpdateTypedLocationHistory = true;
 			gAgent.teleportViaLandmark(landmark_items[0]->getAssetUUID());
 			return;
 		}
-		else
-		{
-			region_name = extractLocalCoordsFromRegName(typed_location, &x, &y, &z);
-			if (region_name != typed_location)
-				local_coords.set(x, y, z);
-		}
+		//No landmark match, check if it is a region name
+		region_name = parseLocation(typed_location, &x, &y, &z);
+		if (region_name != typed_location)
+			local_coords.set(x, y, z);
+
 		// Treat it as region name.
 		// region_name = typed_location;
 	}
@@ -339,31 +336,30 @@ void LLNavigationBar::onLocationSelection()
 	LLWorldMap::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
 }
 
-void LLNavigationBar::onTeleportFinished()
+void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos)
 {
+	// Location is valid. Add it to the typed locations history.
+	LLLocationHistory* lh = LLLocationHistory::getInstance();
 
-	if (mUpdateTypedLocationHistory) {
-		LLLocationHistory* lh = LLLocationHistory::getInstance();
-
-		// Location is valid. Add it to the typed locations history.
-		// If user has typed text this variable will contain -1.
-		if (mCmbLocation->getCurrentIndex() != -1) {
-			lh->touchItem(mCmbLocation->getSelectedItemLabel());
-		} else {
-			std::string region_name;
-			std::string url = gAgent.getSLURL();
-			S32 x = 0, y = 0, z = 0;
-
-			if (LLSLURL::isSLURL(url)) {
-				LLURLSimString::parse(LLSLURL::stripProtocol(url), &region_name, &x, &y, &z);
-				appendLocalCoordsToRegName(&region_name, x, y, z);
-				lh->addItem(region_name, url);
-			}
-		}
-
-		lh->save();
-		mUpdateTypedLocationHistory = false;
+	std::string location;
+	/*NOTE:
+	 * We can't use gAgent.getPositionAgent() in case of local teleport to build location.
+	 * At this moment gAgent.getPositionAgent() contains previous coordinates.
+	 * according to EXT-65 agent position is being reseted on each frame.  
+	 */
+	LLAgentUI::buildLocationString(location, LLAgent::LOCATION_FORMAT_WITHOUT_SIM,
+			gAgent.getPosAgentFromGlobal(global_agent_pos));
+	
+	//Touch it, if it is at list already, add new location otherwise
+	if ( !lh->touchItem(location) ) {
+		std::string tooltip = LLSLURL::buildSLURLfromPosGlobal(
+				gAgent.getRegion()->getName(), global_agent_pos, false);
+		
+		lh->addItem(location, tooltip);
 	}
+	llinfos << "Saving after on teleport finish" << llendl;
+	lh->save();
+
 }
 
 void LLNavigationBar::onTeleportHistoryChanged()
@@ -436,7 +432,6 @@ void LLNavigationBar::onRegionNameResponse(
 	LLVector3d region_pos = from_region_handle(region_handle);
 	LLVector3d global_pos = region_pos + (LLVector3d) local_coords;
 	
-	mUpdateTypedLocationHistory = true;
 	llinfos << "Teleporting to: " << global_pos  << llendl;
 	gAgent.teleportViaLocation(global_pos);
 }
@@ -475,12 +470,7 @@ void LLNavigationBar::invokeSearch(std::string search_text)
 	LLFloaterReg::showInstance("search", LLSD().insert("panel", "all").insert("id", LLSD(search_text)));
 }
 
-void LLNavigationBar::appendLocalCoordsToRegName(std::string* reg_name, S32 x, S32 y, S32 z) {
-	std::string fmt = *reg_name + " (%d, %d, %d)";
-	*reg_name = llformat(fmt.c_str(), x, y, z);
-}
-
-std::string LLNavigationBar::extractLocalCoordsFromRegName(const std::string & reg_name, S32* x, S32* y, S32* z) {
+std::string LLNavigationBar::parseLocation(const std::string & location, S32* x, S32* y, S32* z) {
 	/*
 	 * This regular expression extracts numbers from the following string
 	 * construct: "(num1, num2, num3)", where num1, num2 and num3 are decimal
@@ -489,7 +479,7 @@ std::string LLNavigationBar::extractLocalCoordsFromRegName(const std::string & r
 	const boost::regex re("\\s*\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)\\s*");
 
 	boost::smatch m;
-	if (boost::regex_search(reg_name, m, re)) {
+	if (boost::regex_search(location, m, re)) {
 		// string representations of parsed by regex++ numbers
 		std::string xstr(m[1].first, m[1].second);
 		std::string ystr(m[2].first, m[2].second);
@@ -498,13 +488,15 @@ std::string LLNavigationBar::extractLocalCoordsFromRegName(const std::string & r
 		*x = atoi(xstr.c_str());
 		*y = atoi(ystr.c_str());
 		*z = atoi(zstr.c_str());
-
-		return boost::regex_replace(reg_name, re, "");
+		//erase commas in coordinates
+		std::string region_parcel = boost::regex_replace(location, re, "");
+		// cut region name
+		return region_parcel.substr(0, region_parcel.find_first_of(','));
 	}
 
 	*x = *y = *z = 0;
 
-	return reg_name;
+	return location;
 }
 
 void LLNavigationBar::clearHistoryCache()
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index eeaec4e668e..69328478546 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -70,8 +70,10 @@ class LLNavigationBar
 	void showTeleportHistoryMenu();
 	void invokeSearch(std::string search_text);
 
-	static void appendLocalCoordsToRegName(std::string* reg_name, S32 x, S32 y, S32 z);
-	static std::string extractLocalCoordsFromRegName(const std::string & reg_name, S32* x, S32* y, S32* z);
+	/**
+	 * Get region name and local coordinates from typed location
+	 */
+	static std::string parseLocation(const std::string & location, S32* x, S32* y, S32* z);
 
 	// callbacks
 	void onTeleportHistoryMenuItemClicked(const LLSD& userdata);
@@ -84,7 +86,7 @@ class LLNavigationBar
 	void onLocationSelection();
 	void onLocationPrearrange(const LLSD& data);
 	void onSearchCommit();
-	void onTeleportFinished();
+	void onTeleportFinished(const LLVector3d& global_agent_pos);
 	void onRegionNameResponse(
 			std::string typed_location,
 			std::string region_name,
@@ -104,7 +106,6 @@ class LLNavigationBar
 	LLRect						mDefaultFpRect;
 	boost::signals2::connection	mParcelMgrConnection;
 	bool						mPurgeTPHistoryItems;
-	bool						mUpdateTypedLocationHistory;
 };
 
 #endif
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index da9f50a2bc9..3856a86da0c 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -211,7 +211,17 @@ void nearbychat_add_timestamped_line(LLViewerTextEditor* edit, LLChat chat, cons
 		edit->appendStyledText(start_line, false, prepend_newline, LLStyleMap::instance().lookup(chat.mFromID,chat.mURL));
 		prepend_newline = false;
 	}
-	edit->appendColoredText(line, false, prepend_newline, color);
+
+	S32 font_size = gSavedSettings.getS32("ChatFontSize");
+
+	std::string font_name = "";
+
+	if (0 == font_size)
+		font_name = "small";
+	else if (2 == font_size)
+		font_name = "sansserifbig";
+
+	edit->appendColoredText(line, false, prepend_newline, color, font_name);
 }
 
 
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 8124d4b36a4..a1912655a36 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -97,20 +97,15 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
 	LLToast::Params p;
 	p.id = id;
 	p.panel = item;
-	p.on_mouse_enter = boost::bind(&LLNearbyChatHandler::onToastDestroy, this, _1);
+	p.on_toast_destroy = boost::bind(&LLNearbyChatHandler::onToastDestroy, this, _1);
+	p.on_mouse_enter = boost::bind(&LLNearbyChatHandler::removeNearbyToastsAndShowChat, this);
 	mChannel->addToast(p);	
 }
 
 void LLNearbyChatHandler::onToastDestroy(LLToast* toast)
 {
-	//TODO: what should be done to toasts here? may be htey are to be destroyed?
-	//toast->hide();
-	if(mChannel)
-		mChannel->removeToastsFromChannel();
-	else if(toast)
-		toast->hide();
-
-	LLFloaterReg::showTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
+	if(toast)
+		toast->closeFloater();
 }
 
 void LLNearbyChatHandler::onChicletClick(void)
@@ -118,7 +113,16 @@ void LLNearbyChatHandler::onChicletClick(void)
 }
 void LLNearbyChatHandler::onChicletClose(void)
 {
+}
 
+void LLNearbyChatHandler::removeNearbyToastsAndShowChat()
+{
+	/*
+	if(mChannel)
+		mChannel->removeToastsFromChannel();
+	
+	LLFloaterReg::showTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
+	*/
 }
 
 }
diff --git a/indra/newview/llnearbychathandler.h b/indra/newview/llnearbychathandler.h
index 53436a92b0d..8fcd03689d2 100644
--- a/indra/newview/llnearbychathandler.h
+++ b/indra/newview/llnearbychathandler.h
@@ -51,6 +51,7 @@ class LLNearbyChatHandler : public LLChatHandler
 	virtual void onChicletClose(void);
 
 protected:
+	void removeNearbyToastsAndShowChat();
 };
 
 }
diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp
index f485152d3a3..bd6c6b2308b 100644
--- a/indra/newview/llnotificationalerthandler.cpp
+++ b/indra/newview/llnotificationalerthandler.cpp
@@ -49,7 +49,7 @@ LLAlertHandler::LLAlertHandler(e_notification_type type, const LLSD& id) : mIsMo
 
 	LLBottomTray* tray = LLBottomTray::getInstance();
 	LLChannelManager::Params p;
-	p.id = LLUUID(ALERT_CHANNEL_ID);
+	p.id = LLUUID(gSavedSettings.getString("AlertChannelUUID"));
 	p.channel_right_bound = tray->getRect().getWidth() / 2;
 	p.channel_width = 0;
 	p.display_toasts_always = true;
@@ -58,6 +58,7 @@ LLAlertHandler::LLAlertHandler(e_notification_type type, const LLSD& id) : mIsMo
 	// Getting a Channel for our notifications
 	mChannel = LLChannelManager::getInstance()->createChannel(p);
 	mChannel->setFollows(FOLLOWS_BOTTOM | FOLLOWS_TOP); 
+	mChannel->setShowToasts(true);
 }
 
 //--------------------------------------------------------------------------
@@ -98,7 +99,7 @@ void LLAlertHandler::processNotification(const LLSD& notify)
 
 void LLAlertHandler::onToastDestroy(LLToast* toast)
 {
-	toast->close();
+	toast->closeFloater();
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
index 9a6a041c35e..31753efec99 100644
--- a/indra/newview/llnotificationgrouphandler.cpp
+++ b/indra/newview/llnotificationgrouphandler.cpp
@@ -34,8 +34,8 @@
 
 #include "llnotificationhandler.h"
 #include "lltoastgroupnotifypanel.h"
-#include "llagent.h"
 #include "llbottomtray.h"
+#include "llgroupactions.h"
 #include "llviewercontrol.h"
 #include "llfloaterreg.h"
 #include "llsyswellwindow.h"
@@ -51,7 +51,7 @@ LLGroupHandler::LLGroupHandler(e_notification_type type, const LLSD& id)
 	LLBottomTray* tray = LLBottomTray::getInstance();
 	mChiclet = tray->getSysWell();
 	LLChannelManager::Params p;
-	p.chiclet = mChiclet;
+	p.id = LLUUID(gSavedSettings.getString("NotificationChannelUUID"));
 	p.channel_right_bound = tray->getRect().mRight - gSavedSettings.getS32("NotificationChannelRightMargin");
 	p.channel_width = gSavedSettings.getS32("NotifyBoxWidth");
 
@@ -77,7 +77,10 @@ void LLGroupHandler::processNotification(const LLSD& notify)
 		p.panel = notify_box;
 		p.on_toast_destroy = boost::bind(&LLGroupHandler::onToastDestroy, this, _1);
 		mChannel->addToast(p);
-		mChiclet->setCounter(mChiclet->getCounter() + 1);
+		static_cast<LLNotificationChiclet*>(mChiclet)->incUreadSystemNotifications();
+		
+		LLGroupActions::refresh_notices();
+
 	}
 	else if (notify["sigtype"].asString() == "delete")
 	{
@@ -88,7 +91,7 @@ void LLGroupHandler::processNotification(const LLSD& notify)
 //--------------------------------------------------------------------------
 void LLGroupHandler::onToastDestroy(LLToast* toast)
 {
-	mChiclet->setCounter(mChiclet->getCounter() - 1);
+	static_cast<LLNotificationChiclet*>(mChiclet)->decUreadSystemNotifications();
 
 	LLToastPanel* panel = dynamic_cast<LLToastPanel*>(toast->getPanel());
 	LLFloaterReg::getTypedInstance<LLSysWellWindow>("syswell_window")->removeItemByID(panel->getID());
@@ -97,7 +100,7 @@ void LLGroupHandler::onToastDestroy(LLToast* toast)
 	if(toast->hasFocus())
 		mChannel->setHovering(false);
 
-	toast->close();
+	toast->closeFloater();
 }
 
 //--------------------------------------------------------------------------
@@ -113,14 +116,3 @@ void LLGroupHandler::onChicletClose(void)
 //--------------------------------------------------------------------------
 
 
-//--------------------------------------------------------------------------
-
-
-//--------------------------------------------------------------------------
-
-
-//--------------------------------------------------------------------------
-
-
-//--------------------------------------------------------------------------
-
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 2e5fdd9ed59..6982ab70963 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -42,9 +42,6 @@
 
 namespace LLNotificationsUI
 {
-// ID for channel that displays Alert Notifications
-#define ALERT_CHANNEL_ID	"F3E07BC8-A973-476D-8C7F-F3B7293975D1"
-
 // ENotificationType enumerates all possible types of notifications that could be met
 // 
 typedef enum e_notification_type
@@ -117,6 +114,25 @@ class LLChatHandler : public LLEventHandler
 	virtual void processChat(const LLChat& chat_msg)=0;
 };
 
+/**
+ * Handler for IM notifications.
+ * It manages life time of tip and script notices.
+ */
+class LLIMHandler : public LLSysHandler
+{
+public:
+	LLIMHandler();
+	virtual ~LLIMHandler();
+
+	// base interface functions
+	virtual void processNotification(const LLSD& notify);
+	virtual void onToastDestroy(LLToast* toast);
+	virtual void onChicletClick(void);
+	virtual void onChicletClose(void);
+
+protected:
+};
+
 /**
  * Handler for system informational notices.
  * It manages life time of tip and script notices.
@@ -135,6 +151,7 @@ class LLInfoHandler : public LLSysHandler
 
 	// own handlers
 	void onStoreToast(LLPanel* info_panel, LLUUID id);
+	void onRejectToast(LLToast::Params p);
 protected:
 };
 
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 3eda0d0d14c..31266fdecf5 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -62,18 +62,21 @@ void LLNotificationManager::init()
 	LLNotificationChannel::buildChannel("Group Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "groupnotify"));
 	LLNotificationChannel::buildChannel("Alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert"));
 	LLNotificationChannel::buildChannel("AlertModal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
+	LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast"));
   
 	LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("Group Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("Alerts")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
+	LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 
 	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLInfoHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  mNotifyHandlers["notify"];
 	mNotifyHandlers["groupnotify"] = boost::shared_ptr<LLEventHandler>(new LLGroupHandler(NT_GROUPNOTIFY, LLSD()));
 	mNotifyHandlers["alert"] = boost::shared_ptr<LLEventHandler>(new LLAlertHandler(NT_ALERT, LLSD()));
 	mNotifyHandlers["alertmodal"] = mNotifyHandlers["alert"];
+	mNotifyHandlers["notifytoast"] = boost::shared_ptr<LLEventHandler>(new LLIMHandler());
 	
 	mNotifyHandlers["nearbychat"] = boost::shared_ptr<LLEventHandler>(new LLNearbyChatHandler(NT_NEARBYCHAT, LLSD()));
 }
diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h
index a6cf2a2d274..51bd619901b 100644
--- a/indra/newview/llpanelavatar.h
+++ b/indra/newview/llpanelavatar.h
@@ -74,6 +74,16 @@ class LLPanelProfileTab
 	 */
 	virtual void onOpen(const LLSD& key);
 
+	/**
+	 * Profile tabs should close any opened panels here.
+	 *
+	 * Called from LLPanelProfile::onOpen() before opening new profile.
+	 * See LLPanelpicks::onClose for example. LLPanelPicks closes picture info panel
+	 * before new profile is displayed, otherwise new profile will 
+	 * be hidden behind picture info panel.
+	 */
+	virtual void onClose() {}
+
 	/**
 	 * Resets controls visibility, state, etc.
 	 */
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index a7c05af50b9..2e87f0b65b6 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -33,7 +33,6 @@
 
 #include "llpanelgroup.h"
 
-#include "llagent.h"
 #include "llbutton.h"
 #include "lltabcontainer.h"
 #include "lltextbox.h"
@@ -116,6 +115,9 @@ LLPanelGroup::~LLPanelGroup()
 
 void LLPanelGroup::onOpen(const LLSD& key)
 {
+	if(!key.has("group_id"))
+		return;
+	
 	LLUUID group_id = key["group_id"];
 	if(!key.has("action"))
 	{
@@ -127,7 +129,7 @@ void LLPanelGroup::onOpen(const LLSD& key)
 
 	if(str_action == "refresh")
 	{
-		if(mID == group_id)
+		if(mID == group_id || group_id == LLUUID::null)
 			refreshData();
 	}
 	else if(str_action == "close")
@@ -138,6 +140,12 @@ void LLPanelGroup::onOpen(const LLSD& key)
 	{
 		setGroupID(LLUUID::null);
 	}
+	else if(str_action == "refresh_notices")
+	{
+		LLPanelGroupNotices* panel_notices = findChild<LLPanelGroupNotices>("group_notices_tab_panel");
+		if(panel_notices)
+			panel_notices->refreshNotices();
+	}
 
 }
 
@@ -314,6 +322,15 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 	}
 	else
 	{
+		if(!tab_general->getDisplayChildren())
+			tab_general->changeOpenClose(tab_general->getDisplayChildren());
+		if(!tab_roles->getDisplayChildren())
+			tab_roles->changeOpenClose(tab_roles->getDisplayChildren());
+		if(!tab_notices->getDisplayChildren())
+			tab_notices->changeOpenClose(tab_notices->getDisplayChildren());
+		if(!tab_land->getDisplayChildren())
+			tab_land->changeOpenClose(tab_land->getDisplayChildren());
+		
 		tab_roles->canOpenClose(true);
 		tab_notices->canOpenClose(true);
 		tab_land->canOpenClose(true);
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index 1e6eb8ed440..c5eaa342040 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -37,6 +37,7 @@
 #include "llfloateravatarpicker.h"
 #include "llbutton.h"
 #include "llcombobox.h"
+#include "llgroupactions.h"
 #include "llgroupmgr.h"
 #include "llnamelistctrl.h"
 #include "llscrolllistitem.h"
@@ -80,6 +81,7 @@ class LLPanelGroupInvite::impl
  	LLButton		*mRemoveButton;
 	LLTextBox		*mGroupName;
 	std::string		mOwnerWarning;
+	std::string		mAlreadyInGroup;
 	bool		mConfirmedOwnerInvite;
 
 	void (*mCloseCallback)(void* data);
@@ -167,16 +169,29 @@ void LLPanelGroupInvite::impl::submitInvitations()
 		}
 	}
 
+	bool already_in_group = false;
 	//loop over the users
 	std::vector<LLScrollListItem*> items = mInvitees->getAllData();
 	for (std::vector<LLScrollListItem*>::iterator iter = items.begin();
 		 iter != items.end(); ++iter)
 	{
 		LLScrollListItem* item = *iter;
+		if(LLGroupActions::isAvatarMemberOfGroup(mGroupID, item->getUUID()))
+		{
+			already_in_group = true;
+			continue;
+		}
 		role_member_pairs[item->getUUID()] = role_id;
 	}
-
+	
 	LLGroupMgr::getInstance()->sendGroupMemberInvites(mGroupID, role_member_pairs);
+	
+	if(already_in_group)
+	{
+		LLSD msg;
+		msg["MESSAGE"] = mAlreadyInGroup;
+		LLNotifications::instance().add("GenericAlert", msg);
+	}
 
 	//then close
 	(*mCloseCallback)(mCloseCallbackUserData);
@@ -550,6 +565,7 @@ BOOL LLPanelGroupInvite::postBuild()
 	}
 
 	mImplementation->mOwnerWarning = getString("confirm_invite_owner_str");
+	mImplementation->mAlreadyInGroup = getString("already_in_group");
 
 	update();
 	
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 8caa7d85eb3..e40fa19bb6a 100644
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -1515,16 +1515,15 @@ void LLPanelGroupLandMoney::setGroupID(const LLUUID& id)
 		mImplementationp->mGroupOverLimitIconp->setVisible(FALSE);
 	}
 
-	if ( !can_view )
+	if ( mImplementationp->mGroupParcelsp )
 	{
-		if ( mImplementationp->mGroupParcelsp )
-		{
-			mImplementationp->mGroupParcelsp->setCommentText(
-							mImplementationp->mCantViewParcelsText);
-			mImplementationp->mGroupParcelsp->setEnabled(FALSE);
-		}
+		mImplementationp->mGroupParcelsp->setEnabled(can_view);
 	}
 
+	if ( !can_view && mImplementationp->mGroupParcelsp )
+	{
+		mImplementationp->mGroupParcelsp->setEnabled(FALSE);
+	}
 
 
 	LLButton* earlierp, *laterp;
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 56042f6bff0..0ce85818dd6 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -41,6 +41,7 @@
 #include "llinventorymodel.h"
 #include "llfloaterinventory.h"
 #include "llagent.h"
+#include "llagentui.h"
 #include "lltooldraganddrop.h"
 
 #include "lllineeditor.h"
@@ -379,13 +380,38 @@ void LLPanelGroupNotices::onClickSendMessage(void* data)
 			self->mCreateMessage->getText(),
 			self->mInventoryItem);
 
+
+	//instantly add new notice. actual notice will be added after ferreshNotices call
+	LLUUID id = LLUUID::generateNewID();
+	std::string subj = self->mCreateSubject->getText();
+	std::string name ;
+	LLAgentUI::buildFullname(name);
+	U32 timestamp = 0;
+
+	LLSD row;
+	row["id"] = id;
+	
+	row["columns"][0]["column"] = "icon";
+
+	row["columns"][1]["column"] = "subject";
+	row["columns"][1]["value"] = subj;
+
+	row["columns"][2]["column"] = "from";
+	row["columns"][2]["value"] = name;
+
+	row["columns"][3]["column"] = "date";
+	row["columns"][3]["value"] = build_notice_date(timestamp);
+
+	row["columns"][4]["column"] = "sort";
+	row["columns"][4]["value"] = llformat( "%u", timestamp);
+
+	self->mNoticesList->addElement(row, ADD_BOTTOM);
+
 	self->mCreateMessage->clear();
 	self->mCreateSubject->clear();
 	onClickRemoveAttachment(data);
 
 	self->arrangeNoticeView(VIEW_PAST_NOTICE);
-	onClickRefreshNotices(self);
-
 }
 
 //static 
@@ -407,6 +433,26 @@ void LLPanelGroupNotices::onClickNewMessage(void* data)
 	self->mNoticesList->deselectAllItems(TRUE); // TRUE == don't commit on chnage
 }
 
+void LLPanelGroupNotices::refreshNotices()
+{
+	onClickRefreshNotices(this);
+	/*
+	lldebugs << "LLPanelGroupNotices::onClickGetPastNotices" << llendl;
+	
+	mNoticesList->deleteAllItems();
+
+	LLMessageSystem* msg = gMessageSystem;
+	msg->newMessage("GroupNoticesListRequest");
+	msg->nextBlock("AgentData");
+	msg->addUUID("AgentID",gAgent.getID());
+	msg->addUUID("SessionID",gAgent.getSessionID());
+	msg->nextBlock("Data");
+	msg->addUUID("GroupID",self->mGroupID);
+	gAgent.sendReliableMessage();
+	*/
+	
+}
+
 void LLPanelGroupNotices::onClickRefreshNotices(void* data)
 {
 	lldebugs << "LLPanelGroupNotices::onClickGetPastNotices" << llendl;
diff --git a/indra/newview/llpanelgroupnotices.h b/indra/newview/llpanelgroupnotices.h
index c41a5f501be..4bda38c8974 100644
--- a/indra/newview/llpanelgroupnotices.h
+++ b/indra/newview/llpanelgroupnotices.h
@@ -69,6 +69,8 @@ class LLPanelGroupNotices : public LLPanelGroupTab
 					const std::string& inventory_name,
 					LLOfferInfo* inventory_offer);
 
+	void refreshNotices();
+
 	virtual void setGroupID(const LLUUID& id);
 
 private:
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index ab614fea53e..4618b49df4e 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -49,6 +49,7 @@
 #include "lltabcontainer.h"
 #include "lltextbox.h"
 #include "lltexteditor.h"
+#include "llsearcheditor.h"
 #include "llviewertexturelist.h"
 #include "llviewerwindow.h"
 #include "llfocusmgr.h"
@@ -464,9 +465,7 @@ LLPanelGroupSubTab::LLPanelGroupSubTab()
 :	LLPanelGroupTab(),
 	mHeader(NULL),
 	mFooter(NULL),
-	mSearchLineEditor(NULL),
-	mSearchButton(NULL),
-	mShowAllButton(NULL)
+	mSearchEditor(NULL)
 {
 }
 
@@ -478,22 +477,14 @@ BOOL LLPanelGroupSubTab::postBuild()
 {
 	// Hook up the search widgets.
 	bool recurse = true;
-	mSearchLineEditor = getChild<LLLineEditor>("search_text", recurse);
+	mSearchEditor = getChild<LLSearchEditor>("filter_input", recurse);
 
-	if (!mSearchLineEditor) return FALSE;
-	mSearchLineEditor->setKeystrokeCallback(onSearchKeystroke, this);
-
-	mSearchButton = getChild<LLButton>("search_button", recurse);
-
-	if (!mSearchButton) return FALSE;
-	mSearchButton->setClickedCallback(onClickSearch, this);
-	mSearchButton->setEnabled(FALSE);
+	if (!mSearchEditor) 
+		return FALSE;
 
-	mShowAllButton = getChild<LLButton>("show_all_button", recurse);
+	mSearchEditor->setCommitCallback(boost::bind(&LLPanelGroupSubTab::onClickSearch, this));
+	mSearchEditor->setKeystrokeCallback(onSearchKeystroke, this);
 
-	if (!mShowAllButton) return FALSE;
-	mShowAllButton->setClickedCallback(onClickShowAll, this);
-	mShowAllButton->setEnabled(FALSE);
 	
 	// Get icons for later use.
 	mActionIcons.clear();
@@ -516,63 +507,35 @@ BOOL LLPanelGroupSubTab::postBuild()
 	return LLPanelGroupTab::postBuild();
 }
 
-// static
-void LLPanelGroupSubTab::onSearchKeystroke(LLLineEditor* caller, void* user_data)
-{
-	LLPanelGroupSubTab* self = static_cast<LLPanelGroupSubTab*>(user_data);
-	self->handleSearchKeystroke(caller);
-}
-
-void LLPanelGroupSubTab::handleSearchKeystroke(LLLineEditor* caller)
+void LLPanelGroupSubTab::setGroupID(const LLUUID& id)
 {
-	if (caller->getText().size())
-	{
-		setDefaultBtn( mSearchButton );
-		mSearchButton->setEnabled(TRUE);
-	}
-	else
+	LLPanelGroupTab::setGroupID(id);
+	if(mSearchEditor)
 	{
-		setDefaultBtn( NULL );
-		mSearchButton->setEnabled(FALSE);
+		mSearchEditor->clear();
+		setSearchFilter("");
 	}
 }
 
-// static 
-void LLPanelGroupSubTab::onClickSearch(void* user_data)
+// static
+void LLPanelGroupSubTab::onSearchKeystroke(LLLineEditor* caller, void* user_data)
 {
 	LLPanelGroupSubTab* self = static_cast<LLPanelGroupSubTab*>(user_data);
-	self->handleClickSearch();
-}
- 
-void LLPanelGroupSubTab::handleClickSearch()
-{
-	lldebugs << "LLPanelGroupSubTab::handleClickSearch()" << llendl;
-
-	if (0 == mSearchLineEditor->getText().size())
-	{
-		// No search text.  (This shouldn't happen... the search button should have been disabled).
-		llwarns << "handleClickSearch with no search text!" << llendl;
-		mSearchButton->setEnabled(FALSE);
-		return;
-	}
+	self->handleSearchKeystroke(caller);
 
-	setSearchFilter( mSearchLineEditor->getText() );
-	mShowAllButton->setEnabled(TRUE);
 }
 
-// static
-void LLPanelGroupSubTab::onClickShowAll(void* user_data)
+void LLPanelGroupSubTab::handleSearchKeystroke(LLLineEditor* caller)
 {
-	LLPanelGroupSubTab* self = static_cast<LLPanelGroupSubTab*>(user_data);
-	self->handleClickShowAll();
+	setSearchFilter( caller->getText() );
 }
 
-void LLPanelGroupSubTab::handleClickShowAll()
+// static 
+void LLPanelGroupSubTab::onClickSearch()
 {
-	lldebugs << "LLPanelGroupSubTab::handleClickShowAll()" << llendl;
-	setSearchFilter( LLStringUtil::null );
-	mShowAllButton->setEnabled(FALSE);
+	setSearchFilter( mSearchEditor->getText() );
 }
+ 
 
 void LLPanelGroupSubTab::setSearchFilter(const std::string& filter)
 {
@@ -892,6 +855,12 @@ BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)
 	return TRUE;
 }
 
+void LLPanelGroupMembersSubTab::setGroupID(const LLUUID& id)
+{
+	LLPanelGroupSubTab::setGroupID(id);
+
+}
+
 
 // static
 void LLPanelGroupMembersSubTab::onMemberSelect(LLUICtrl* ctrl, void* user_data)
@@ -2583,19 +2552,15 @@ void LLPanelGroupRoles::setGroupID(const LLUUID& id)
 	if(group_members_tab) group_members_tab->setGroupID(id);
 	if(group_roles_tab) group_roles_tab->setGroupID(id);
 	if(group_actions_tab) group_actions_tab->setGroupID(id);
-	
-	activate();
 
-	if (!mSubTabContainer) return ;
+	LLButton* button = getChild<LLButton>("member_invite");
+	if ( button )
+		button->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_INVITE));
 
-	// Hook up each sub-tabs callback and widgets.
-	for (S32 i = 0; i < mSubTabContainer->getTabCount(); ++i)
-	{
-		LLPanel* panel = mSubTabContainer->getPanelByIndex(i);
-		LLPanelGroupSubTab* subtabp = dynamic_cast<LLPanelGroupSubTab*>(panel);
-		if (subtabp)
-			subtabp->postBuildSubTab(this);
-	}
+	if(mSubTabContainer)
+		mSubTabContainer->selectTab(0);
+
+	activate();
 }
 
 
diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h
index 9519263bbac..2a0f31fa0f9 100644
--- a/indra/newview/llpanelgrouproles.h
+++ b/indra/newview/llpanelgrouproles.h
@@ -43,6 +43,7 @@ class LLPanelGroupActionsSubTab;
 class LLScrollListCtrl;
 class LLScrollListItem;
 class LLTextEditor;
+class LLSearchEditor;
 
 // Forward declare for friend usage.
 //virtual BOOL LLPanelGroupSubTab::postBuildSubTab(LLView*);
@@ -113,10 +114,7 @@ class LLPanelGroupSubTab : public LLPanelGroupTab
 	static void onSearchKeystroke(LLLineEditor* caller, void* user_data);
 	void handleSearchKeystroke(LLLineEditor* caller);
 
-	static void onClickSearch(void*);
-	void handleClickSearch();
-	static void onClickShowAll(void*);
-	void handleClickShowAll();
+	void onClickSearch();
 
 	virtual void setSearchFilter( const std::string& filter );
 
@@ -144,13 +142,13 @@ class LLPanelGroupSubTab : public LLPanelGroupTab
 									BOOL is_owner_role);
 
 	void setFooterEnabled(BOOL enable);
+
+	virtual void setGroupID(const LLUUID& id);
 protected:
 	LLPanel* mHeader;
 	LLPanel* mFooter;
 
-	LLLineEditor*	mSearchLineEditor;
-	LLButton*		mSearchButton;
-	LLButton*		mShowAllButton;
+	LLSearchEditor*	mSearchEditor;
 
 	std::string mSearchFilter;
 
@@ -196,6 +194,8 @@ class LLPanelGroupMembersSubTab : public LLPanelGroupSubTab
 
 	virtual void draw();
 
+	virtual void setGroupID(const LLUUID& id);
+
 protected:
 	typedef std::map<LLUUID, LLRoleMemberChangeType> role_change_data_map_t;
 	typedef std::map<LLUUID, role_change_data_map_t*> member_role_changes_map_t;
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 8770abcee36..698f442d7c9 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -373,7 +373,6 @@ BOOL LLPanelPeople::postBuild()
 	buttonSetAction("call_btn",			boost::bind(&LLPanelPeople::onCallButtonClicked,		this));
 	buttonSetAction("teleport_btn",		boost::bind(&LLPanelPeople::onTeleportButtonClicked,	this));
 	buttonSetAction("share_btn",		boost::bind(&LLPanelPeople::onShareButtonClicked,		this));
-	buttonSetAction("more_btn",			boost::bind(&LLPanelPeople::onMoreButtonClicked,		this));
 
 	getChild<LLPanel>(NEARBY_TAB_NAME)->childSetAction("nearby_view_sort_btn",boost::bind(&LLPanelPeople::onNearbyViewSortButtonClicked,		this));
 	getChild<LLPanel>(RECENT_TAB_NAME)->childSetAction("recent_viewsort_btn",boost::bind(&LLPanelPeople::onRecentViewSortButtonClicked,		this));
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index cda1a9e7e75..f7ca54c732b 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -66,7 +66,7 @@
 
 
 LLPanelPick::LLPanelPick(BOOL edit_mode/* = FALSE */)
-:	LLPanel(), LLAvatarPropertiesObserver(),
+:	LLPanel(), LLAvatarPropertiesObserver(), LLRemoteParcelInfoObserver(),
 	mEditMode(edit_mode),
 	mSnapshotCtrl(NULL),
 	mPickId(LLUUID::null),
@@ -111,6 +111,8 @@ void LLPanelPick::reset()
 	mDataReceived = FALSE;
 
 	mPosGlobal.clearVec();
+
+	childSetValue("maturity", "");
 }
 
 BOOL LLPanelPick::postBuild()
@@ -211,6 +213,12 @@ void LLPanelPick::createNewPick()
 	init(pick_data);
 	mDataReceived = TRUE;
 	LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorId, this);
+
+	if (!mEditMode) 
+	{
+		LLRemoteParcelInfoProcessor::getInstance()->addObserver(pick_data->parcel_id, this);
+		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(pick_data->parcel_id);
+	}
 }
 
 
@@ -450,3 +458,24 @@ void LLPanelPick::showOnMap(const LLVector3d& position)
 	LLFloaterWorldMap::getInstance()->trackLocation(position);
 	LLFloaterReg::showInstance("world_map", "center");
 }
+
+void LLPanelPick::processParcelInfo(const LLParcelData& parcel_data)
+{
+	if (mEditMode) return;
+
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	std::string rating_icon = "icon_event.tga";
+	if (parcel_data.flags & 0x2)
+	{
+		rating_icon = "icon_event_adult.tga";
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		rating_icon = "icon_event_mature.tga";
+	}
+	
+	childSetValue("maturity", rating_icon);
+
+	//*NOTE we don't removeObserver(...) ourselves cause LLRemoveParcelProcessor does it for us
+}
diff --git a/indra/newview/llpanelpick.h b/indra/newview/llpanelpick.h
index 15b0d6c5415..2cd4706dfe2 100644
--- a/indra/newview/llpanelpick.h
+++ b/indra/newview/llpanelpick.h
@@ -38,12 +38,13 @@
 #define LL_LLPANELPICK_H
 
 #include "llpanel.h"
+#include "llremoteparcelrequest.h"
 
 class LLTextureCtrl;
 class LLMessageSystem;
 class LLAvatarPropertiesObserver;
 
-class LLPanelPick : public LLPanel, public LLAvatarPropertiesObserver
+class LLPanelPick : public LLPanel, public LLAvatarPropertiesObserver, LLRemoteParcelInfoObserver
 {
 	LOG_CLASS(LLPanelPick);
 public:
@@ -79,6 +80,10 @@ class LLPanelPick : public LLPanel, public LLAvatarPropertiesObserver
 	static void teleport(const LLVector3d& position);
 	static void showOnMap(const LLVector3d& position);
 
+	//This stuff we got from LLRemoteParcelObserver, in the last two we intentionally do nothing
+	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+	/*virtual*/ void setParcelID(const LLUUID& parcel_id) {};
+	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason) {};
 
 protected:
 
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 45a00b7fd2b..973afae73b2 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -593,3 +593,11 @@ void LLPickItem::processProperties(void *data, EAvatarProcessorType type)
 	LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorID, this);
 }
 
+void LLPanelPicks::onClose()
+{
+	// Toggle off Pick Info panel if it is visible.
+	if(mPickPanel && mPickPanel->getVisible())
+	{
+		getProfilePanel()->togglePanel(mPickPanel);
+	}
+}
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index e0e7f69532c..da7bc32ab12 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -83,6 +83,11 @@ class LLPanelPicks
 	// parent panels failed to work (picks related code was in me profile panel)
 	void setProfilePanel(LLPanelProfile* profile_panel);
 
+	/**
+	 * Closes LLPanelPick if it is visible.
+	 */
+	/*virtual*/ void onClose();
+
 private:
 	void onClickDelete();
 	void onClickTeleport();
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index c8e0a53764e..a01977c9b51 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -98,6 +98,10 @@ BOOL LLPanelPlaceInfo::postBuild()
 	mDescEditor = getChild<LLTextEditor>("description");
 	mRating = getChild<LLIconCtrl>("maturity");
 
+	mRegionInfoDrillIn = getChild<LLButton>("region_info_drill_in");
+	mMediaDrillIn = getChild<LLButton>("media_drill_in");
+	mMediaDrillIn->setClickedCallback(boost::bind(&LLPanelPlaceInfo::toggleMediaPanel, this, TRUE));
+
 	mOwner = getChild<LLTextBox>("owner");
 	mCreator = getChild<LLTextBox>("creator");
 	mCreated = getChild<LLTextBox>("created");
@@ -241,13 +245,18 @@ void LLPanelPlaceInfo::setParcelID(const LLUUID& parcel_id)
 }
 
 void LLPanelPlaceInfo::setInfoType(INFO_TYPE type)
-{	
-	bool is_landmark_info_type = type == LANDMARK;
+{
 	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
-	if (landmark_info_panel)
-	{
-		landmark_info_panel->setVisible(is_landmark_info_type);
-	}
+	LLPanel* landmark_edit_panel = getChild<LLPanel>("landmark_edit_panel");
+
+	bool is_info_type_agent = type == AGENT;
+	bool is_info_type_landmark = type == LANDMARK;
+
+	landmark_info_panel->setVisible(is_info_type_landmark);
+	landmark_edit_panel->setVisible(is_info_type_landmark || type == CREATE_LANDMARK);
+
+	mRegionInfoDrillIn->setVisible(is_info_type_agent);
+	mMediaDrillIn->setVisible(is_info_type_agent);
 
 	switch(type)
 	{
@@ -255,6 +264,7 @@ void LLPanelPlaceInfo::setInfoType(INFO_TYPE type)
 			mCurrentTitle = getString("title_create_landmark");
 		break;
 
+		case AGENT:
 		case PLACE:
 			mCurrentTitle = getString("title_place");
 
@@ -366,6 +376,11 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 	}
 	mRating->setValue(rating_icon);
 
+	//update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE
+	//because we deal with remote parcel response format
+	bool isForSale = (parcel_data.flags & DFQ_FOR_SALE)? TRUE : FALSE;
+	getChild<LLIconCtrl>("icon_for_sale")->setVisible(isForSale);
+	
 	// Just use given region position for display
 	S32 region_x = llround(mPosRegion.mV[0]);
 	S32 region_y = llround(mPosRegion.mV[1]);
@@ -436,8 +451,28 @@ void LLPanelPlaceInfo::displayAgentParcelInfo()
 		return;
 
 	LLParcelData parcel_data;
+
+	// HACK: Converting sim access flags to the format
+	// returned by remote parcel response.
+	switch(region->getSimAccess())
+	{
+	case SIM_ACCESS_MATURE:
+		parcel_data.flags = 0x1;
+
+	case SIM_ACCESS_ADULT:
+		parcel_data.flags = 0x2;
+
+	default:
+		parcel_data.flags = 0;
+	}
+	
+	// Adding "For Sale" flag in remote parcel response format.
+	if (parcel->getForSale())
+	{
+		parcel_data.flags |= DFQ_FOR_SALE;
+	}
+	
 	parcel_data.desc = parcel->getDesc();
-	parcel_data.flags = region->getSimAccess();
 	parcel_data.name = parcel->getName();
 	parcel_data.sim_name = gAgent.getRegion()->getName();
 	parcel_data.snapshot_id = parcel->getSnapshotID();
@@ -446,6 +481,8 @@ void LLPanelPlaceInfo::displayAgentParcelInfo()
 	parcel_data.global_y = global_pos.mdV[1];
 	parcel_data.global_z = global_pos.mdV[2];
 
+	
+
 	processParcelInfo(parcel_data);
 }
 
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index 71c268c6c49..77ce2c66196 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -55,9 +55,10 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 public:
 	enum INFO_TYPE
 	{
+		AGENT,
 		CREATE_LANDMARK,
-		PLACE,
 		LANDMARK,
+		PLACE,
 		TELEPORT_HISTORY
 	};
 
@@ -133,6 +134,8 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 	LLTextBox*			mParcelName;
 	LLTextEditor*		mDescEditor;
 	LLIconCtrl*			mRating;
+	LLButton*			mRegionInfoDrillIn;
+	LLButton*			mMediaDrillIn;
 	LLTextBox*			mOwner;
 	LLTextBox*			mCreator;
 	LLTextBox*			mCreated;
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index cf91972e8b6..a712c9b9cf9 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -55,6 +55,7 @@
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
 
+static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;
 static const std::string AGENT_INFO_TYPE			= "agent";
 static const std::string CREATE_LANDMARK_INFO_TYPE	= "create_landmark";
 static const std::string LANDMARK_INFO_TYPE			= "landmark";
@@ -84,7 +85,7 @@ LLPanelPlaces::LLPanelPlaces()
 {
 	gInventory.addObserver(this);
 
-	LLViewerParcelMgr::getInstance()->setAgentParcelChangedCallback(
+	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
 			boost::bind(&LLPanelPlaces::onAgentParcelChange, this));
 
 	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
@@ -174,7 +175,7 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 	if (mPlaceInfoType == AGENT_INFO_TYPE)
 	{
-		mPlaceInfo->setInfoType(LLPanelPlaceInfo::PLACE);
+		mPlaceInfo->setInfoType(LLPanelPlaceInfo::AGENT);
 		mPlaceInfo->displayAgentParcelInfo();
 		
 		mPosGlobal = gAgent.getPositionGlobal();
@@ -218,12 +219,12 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 		const LLTeleportHistory::slurl_list_t& hist_items =
 			LLTeleportHistory::getInstance()->getItems();
 
-		LLVector3d pos_global = hist_items[index].mGlobalPos;
+		mPosGlobal = hist_items[index].mGlobalPos;
 
 		mPlaceInfo->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
-		mPlaceInfo->displayParcelInfo(get_pos_local_from_global(pos_global),
+		mPlaceInfo->displayParcelInfo(get_pos_local_from_global(mPosGlobal),
 									  hist_items[index].mRegionID,
-									  pos_global);
+									  mPosGlobal);
 	}
 	
 
@@ -312,7 +313,9 @@ void LLPanelPlaces::onTeleportButtonClicked()
 			payload["asset_id"] = mItem->getAssetUUID();
 			LLNotifications::instance().add("TeleportFromLandmark", LLSD(), payload);
 		}
-		else if (mPlaceInfoType == AGENT_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
+		else if (mPlaceInfoType == AGENT_INFO_TYPE ||
+				 mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+				 mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 		{
 			LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
 			if (!mPosGlobal.isExactlyZero() && worldmap_instance)
@@ -341,7 +344,8 @@ void LLPanelPlaces::onShowOnMapButtonClicked()
 
 		if (mPlaceInfoType == AGENT_INFO_TYPE ||
 			mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE ||
-			mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
+			mPlaceInfoType == REMOTE_PLACE_INFO_TYPE ||
+			mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE)
 		{
 			if (!mPosGlobal.isExactlyZero())
 			{
@@ -374,16 +378,22 @@ void LLPanelPlaces::onShowOnMapButtonClicked()
 
 void LLPanelPlaces::onOverflowButtonClicked()
 {
-	bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE;
-	bool is_landmark_info_visible = mPlaceInfoType == LANDMARK_INFO_TYPE;
-
 	LLToggleableMenu* menu;
 
-	if (is_agent_place_info_visible && mPlaceMenu != NULL)
+	bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE;
+
+	if ((is_agent_place_info_visible ||
+		 mPlaceInfoType == "remote_place" ||
+		 mPlaceInfoType == "teleport_history") && mPlaceMenu != NULL)
 	{
 		menu = mPlaceMenu;
+		
+		// Enable adding a landmark only for agent current parcel and if
+		// there is no landmark already pointing to that parcel in agent's inventory.
+		menu->getChild<LLMenuItemCallGL>("landmark")->setEnabled(is_agent_place_info_visible &&
+																 !LLLandmarkActions::landmarkAlreadyExists());
 	}
-	else if (is_landmark_info_visible && mLandmarkMenu != NULL)
+	else if (mPlaceInfoType == LANDMARK_INFO_TYPE && mLandmarkMenu != NULL)
 	{
 		menu = mLandmarkMenu;
 
@@ -446,17 +456,24 @@ void LLPanelPlaces::onCreateLandmarkButtonClicked(const LLUUID& folder_id)
 		return;
 
 	mPlaceInfo->createLandmark(folder_id);
-
-	onBackButtonClicked();
-	LLSideTray::getInstance()->collapseSideBar();
 }
 
 void LLPanelPlaces::onBackButtonClicked()
 {
-	togglePlaceInfoPanel(FALSE);
+	if (!mPlaceInfo)
+		return;
+	
+	if (mPlaceInfo->isMediaPanelVisible())
+	{
+		toggleMediaPanel();
+	}
+	else
+	{
+		togglePlaceInfoPanel(FALSE);
 
-	// Resetting mPlaceInfoType when Place Info panel is closed.
-	mPlaceInfoType = LLStringUtil::null;
+		// Resetting mPlaceInfoType when Place Info panel is closed.
+		mPlaceInfoType = LLStringUtil::null;
+	}
 
 	updateVerbs();
 }
@@ -578,6 +595,14 @@ void LLPanelPlaces::updateVerbs()
 									 !mPosGlobal.isExactlyZero() &&
 									 !LLViewerParcelMgr::getInstance()->inAgentParcel(mPosGlobal));
 		}
+		else if (is_create_landmark_visible)
+		{
+			// Enable "Create Landmark" only if there is no landmark
+			// for the current parcel.
+			bool no_landmark = !LLLandmarkActions::landmarkAlreadyExists();
+			mCreateLandmarkBtn->setEnabled(no_landmark);
+			mFolderMenuBtn->setEnabled(no_landmark);
+		}
 		else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
 		{
 			mTeleportBtn->setEnabled(TRUE);
@@ -600,6 +625,7 @@ void LLPanelPlaces::showLandmarkFoldersMenu()
 		menu_p.can_tear_off(false);
 		menu_p.visible(false);
 		menu_p.scrollable(true);
+		menu_p.max_scrollable_items = 10;
 
 		LLToggleableMenu* menu = LLUICtrlFactory::create<LLToggleableMenu>(menu_p);
 
@@ -666,7 +692,6 @@ void LLPanelPlaces::showLandmarkFoldersMenu()
 	mLandmarkFoldersCache = folders;
 
 	menu->empty();
-	U32 max_width = 0;
 
 	// Menu width must not exceed the root view limits,
 	// so we assume the space between the left edge of
@@ -674,6 +699,7 @@ void LLPanelPlaces::showLandmarkFoldersMenu()
 	LLRect screen_btn_rect;
 	localRectToScreen(btn_rect, &screen_btn_rect);
 	S32 free_space = screen_btn_rect.mRight;
+	U32 max_width = llmin(LANDMARK_FOLDERS_MENU_WIDTH, free_space);
 
 	for(folder_vec_t::const_iterator it = mLandmarkFoldersCache.begin(); it != mLandmarkFoldersCache.end(); it++)
 	{
@@ -687,13 +713,14 @@ void LLPanelPlaces::showLandmarkFoldersMenu()
 
 		LLMenuItemCallGL *menu_item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);
 
+		// *TODO: Use a separate method for menu width calculation.
 		// Check whether item name wider than menu
-		if ((S32) menu_item->getNominalWidth() > free_space)
+		if (menu_item->getNominalWidth() > max_width)
 		{
 			S32 chars_total = item_name.length();
 			S32 chars_fitted = 1;
 			menu_item->setLabel(LLStringExplicit(""));
-			S32 label_space = free_space - menu_item->getFont()->getWidth("...") -
+			S32 label_space = max_width - menu_item->getFont()->getWidth("...") -
 				menu_item->getNominalWidth(); // This returns width of menu item with empty label (pad pixels)
 
 			while (chars_fitted < chars_total && menu_item->getFont()->getWidth(item_name, 0, chars_fitted) < label_space)
@@ -705,8 +732,6 @@ void LLPanelPlaces::showLandmarkFoldersMenu()
 			menu_item->setLabel(item_name.substr(0, chars_fitted) + "...");
 		}
 
-		max_width = llmax(max_width, menu_item->getNominalWidth());
-
 		menu->addChild(menu_item);
 	}
 
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 0af996fac00..2895a686833 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -95,6 +95,8 @@ void LLPanelProfile::onOpen(const LLSD& key)
 {
 	if (key.has("open_tab_name"))
 	{
+		getTabContainer()[PANEL_PICKS]->onClose();
+
 		// onOpen from selected panel will be called from onTabSelected callback
 		getTabCtrl()->selectTabByName(key["open_tab_name"]);
 	}
@@ -139,6 +141,7 @@ void LLPanelProfile::togglePanel(LLPanel* panel)
 	else 
 	{
 		this->setAllChildrenVisible(TRUE);
+		panel->setVisible(FALSE);
 		if (panel->getParent() == this) 
 		{
 			removeChild(panel);
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 1235340f57d..18184a64768 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -41,6 +41,7 @@
 static LLRegisterPanelClassWrapper<LLPanelProfileView> t_panel_target_profile("panel_profile_view");
 
 static std::string PANEL_NOTES = "panel_notes";
+static const std::string PANEL_PROFILE = "panel_profile";
 
 LLPanelProfileView::LLPanelProfileView()
 :	LLPanelProfile()
@@ -72,6 +73,10 @@ BOOL LLPanelProfileView::postBuild()
 	LLPanelProfile::postBuild();
 
 	getTabContainer()[PANEL_NOTES] = getChild<LLPanelAvatarNotes>(PANEL_NOTES);
+	
+	//*TODO remove this, according to style guide we don't use status combobox
+	getTabContainer()[PANEL_PROFILE]->childSetVisible("online_me_status_text", FALSE);
+	getTabContainer()[PANEL_PROFILE]->childSetVisible("status_combo", FALSE);
 
 	childSetCommitCallback("back",boost::bind(&LLPanelProfileView::onBackBtnClick,this),NULL);
 	
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index 1e44a294b0d..ce16b95bc05 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -49,7 +49,6 @@
 #include "material_codes.h"
 
 // project includes
-#include "llagent.h"
 #include "llbutton.h"
 #include "llcheckboxctrl.h"
 #include "llcolorswatch.h"
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index 50110da70c6..68996673be8 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -49,15 +49,14 @@ using namespace LLNotificationsUI;
 bool LLScreenChannel::mWasStartUpToastShown = false;
 
 //--------------------------------------------------------------------------
-LLScreenChannel::LLScreenChannel(): mOverflowToastPanel(NULL), 
-									mStartUpToastPanel(NULL),
-									mToastAlignment(NA_BOTTOM), 
-									mCanStoreToasts(true),
-									mHiddenToastsNum(0),
-									mOverflowToastHidden(false),
-									mIsHovering(false),
-									mControlHovering(false)
+LLScreenChannel::LLScreenChannel(LLUUID& id):	mOverflowToastPanel(NULL), mStartUpToastPanel(NULL),
+												mToastAlignment(NA_BOTTOM), mCanStoreToasts(true),
+												mHiddenToastsNum(0), mOverflowToastHidden(false),
+												mIsHovering(false), mControlHovering(false),
+												mShowToasts(false)
 {	
+	mID = id;
+
 	setFollows(FOLLOWS_RIGHT | FOLLOWS_BOTTOM | FOLLOWS_TOP);  
 
 	mOverflowFormatString = LLTrans::getString("OverflowInfoChannelString");
@@ -89,22 +88,11 @@ void LLScreenChannel::reshape(S32 width, S32 height, BOOL called_from_parent)
 //--------------------------------------------------------------------------
 void LLScreenChannel::addToast(LLToast::Params p)
 {
-	bool isSysWellWndShown = LLFloaterReg::getInstance("syswell_window")->getVisible();
-	// we show toast in the following cases:
-	//	- the StartUp Toast is already hidden and the SysWell's window is hidden
-	//  - the SysWell's window is shown, but notification is a tip. We can't store it, so we show it
-	//	- the channel is intended for displaying of toasts always, e.g. alerts
-	bool show_toast = (mWasStartUpToastShown && !isSysWellWndShown) || (isSysWellWndShown && p.is_tip) || mDisplayToastsAlways;
-	bool store_toast = !show_toast && !p.is_tip && mCanStoreToasts;
-
-	// if we can't show or store a toast, then do nothing, just send ignore to a notification 
-	if(!show_toast && !store_toast)
+	bool store_toast = !mShowToasts && p.can_be_stored && mCanStoreToasts;
+
+	if(!mShowToasts && !store_toast)
 	{
-		if(p.notification)
-		{
-			p.notification->setIgnored(TRUE);
-			p.notification->respond(p.notification->getResponseTemplate());
-		}
+		mOnRejectToast(p);
 		return;
 	}
 
@@ -112,14 +100,13 @@ void LLScreenChannel::addToast(LLToast::Params p)
 
 	mOverflowToastHidden = false;
 	
-	getRootView()->addChild(new_toast_elem.toast);
 	new_toast_elem.toast->setOnFadeCallback(boost::bind(&LLScreenChannel::onToastFade, this, new_toast_elem.toast));
 	if(mControlHovering)
 	{
 		new_toast_elem.toast->setOnToastHoverCallback(boost::bind(&LLScreenChannel::onToastHover, this, _1, _2));
 	}
 	
-	if(show_toast)
+	if(mShowToasts)
 	{
 		mToastList.push_back(new_toast_elem);
 		showToasts();
@@ -393,7 +380,6 @@ void LLScreenChannel::createOverflowToast(S32 bottom, F32 timer)
 	mOverflowToastPanel->reshape(getRect().getWidth(), toast_rect.getHeight(), true);
 	toast_rect.setLeftTopAndSize(getRect().mLeft, bottom + toast_rect.getHeight()+gSavedSettings.getS32("ToastMargin"), getRect().getWidth(), toast_rect.getHeight());	
 	mOverflowToastPanel->setRect(toast_rect);
-	getRootView()->addChild(mOverflowToastPanel);
 
 	text_box->setValue(text);
 	text_box->setVisible(TRUE);
@@ -406,7 +392,6 @@ void LLScreenChannel::createOverflowToast(S32 bottom, F32 timer)
 void LLScreenChannel::onOverflowToastHide()
 {
 	mOverflowToastHidden = true;
-	// *TODO: check whether it is needed: closeOverflowToastPanel();	
 }
 
 //--------------------------------------------------------------------------
@@ -414,7 +399,7 @@ void LLScreenChannel::closeOverflowToastPanel()
 {
 	if(mOverflowToastPanel != NULL)
 	{
-		mOverflowToastPanel->close();
+		mOverflowToastPanel->closeFloater();
 		mOverflowToastPanel = NULL;
 	}
 }
@@ -453,7 +438,6 @@ void LLScreenChannel::createStartUpToast(S32 notif_num, S32 bottom, F32 timer)
 	mStartUpToastPanel->reshape(getRect().getWidth(), toast_rect.getHeight(), true);
 	toast_rect.setLeftTopAndSize(getRect().mLeft, bottom + toast_rect.getHeight()+gSavedSettings.getS32("ToastMargin"), getRect().getWidth(), toast_rect.getHeight());	
 	mStartUpToastPanel->setRect(toast_rect);
-	getRootView()->addChild(mStartUpToastPanel);
 
 	text_box->setValue(text);
 	text_box->setVisible(TRUE);
@@ -479,8 +463,7 @@ void LLScreenChannel::closeStartUpToast()
 {
 	if(mStartUpToastPanel != NULL)
 	{
-		LLScreenChannel::setStartUpToastShown();
-		mStartUpToastPanel->close();
+		mStartUpToastPanel->closeFloater();
 		mStartUpToastPanel = NULL;
 	}
 }
@@ -499,8 +482,8 @@ void LLScreenChannel::removeToastsFromChannel()
 	hideToastsFromScreen();
 	for(std::vector<ToastElem>::iterator it = mToastList.begin(); it != mToastList.end(); it++)
 	{
-		(*it).toast->close();
-		//toast->mOnToastDestroy(toast, LLSD()); //TODO: check OnToastDestroy handler for chat
+		// *TODO: ivestigate mOnToastDestroy callback - change name or/and place
+		(*it).toast->mOnToastDestroy((*it).toast);
 	}
 	mToastList.clear();
 }
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
index 0845c32ee58..746580b5747 100644
--- a/indra/newview/llscreenchannel.h
+++ b/indra/newview/llscreenchannel.h
@@ -56,7 +56,7 @@ class LLScreenChannel : public LLUICtrl
 {
 	friend class LLChannelManager;
 public:
-	LLScreenChannel();
+	LLScreenChannel(LLUUID& id);
 	virtual ~LLScreenChannel();
 
 	// Channel's outfit-functions
@@ -96,11 +96,11 @@ class LLScreenChannel : public LLUICtrl
 
 	// Channel's behavior-functions
 	// set whether a channel will control hovering inside itself or not
-	void		setControlHovering(bool control) { mControlHovering = control; }
+	void setControlHovering(bool control) { mControlHovering = control; }
 	// set Hovering flag for a channel
-	void		setHovering(bool hovering) { mIsHovering = hovering; }
+	void setHovering(bool hovering) { mIsHovering = hovering; }
 	// set whether a channel will store faded toasts or not
-	void		setCanStoreToasts(bool store) { mCanStoreToasts = store; }
+	void setCanStoreToasts(bool store) { mCanStoreToasts = store; }
 	// tell all channels that the StartUp toast was shown and allow them showing of toasts
 	static void	setStartUpToastShown() { mWasStartUpToastShown = true; }
 	// get StartUp Toast's state
@@ -109,13 +109,20 @@ class LLScreenChannel : public LLUICtrl
 	void setDisplayToastsAlways(bool display_toasts) { mDisplayToastsAlways = display_toasts; }
 	// get mode for dislaying of toasts
 	bool getDisplayToastsAlways() { return mDisplayToastsAlways; }
+	// tell a channel to show toasts or not
+	void setShowToasts(bool show) { mShowToasts = show; }
+	// determine whether channel shows toasts or not
+	bool getShowToasts() { return mShowToasts; }
 
 	// Channel's other interface functions functions
 	// get number of hidden notifications from a channel
 	S32		getNumberOfHiddenToasts() { return mHiddenToastsNum;}
 	// update number of notifications in the StartUp Toast
 	void	updateStartUpString(S32 num);
+	// get toast allignment preset for a channel
 	e_notification_toast_alignment getToastAlignment() {return mToastAlignment;}
+	// get ID of a channel
+	LLUUID	getChannelID() { return mID; }
 
 	// Channel's callbacks
 	// callback for storing of faded toasts
@@ -123,6 +130,11 @@ class LLScreenChannel : public LLUICtrl
 	typedef boost::signals2::signal<void (LLPanel* info_panel, const LLUUID id)> store_tost_signal_t;
 	store_tost_signal_t mOnStoreToast;	
 	boost::signals2::connection setOnStoreToastCallback(store_tost_callback_t cb) { return mOnStoreToast.connect(cb); }
+	// callback for discarding of a rejected toast
+	typedef boost::function<void (LLToast::Params p)> reject_tost_callback_t;
+	typedef boost::signals2::signal<void (LLToast::Params p)> reject_tost_signal_t;
+	reject_tost_signal_t mOnRejectToast;	
+	boost::signals2::connection setOnRejectToastCallback(reject_tost_callback_t cb) { return mOnRejectToast.connect(cb); }
 
 private:
 	struct ToastElem
@@ -179,6 +191,8 @@ class LLScreenChannel : public LLUICtrl
 	bool		mCanStoreToasts;
 	bool		mDisplayToastsAlways;
 	bool		mOverflowToastHidden;
+	// controls whether a channel shows toasts or not
+	bool		mShowToasts;
 	// 
 	e_notification_toast_alignment	mToastAlignment;
 
@@ -190,6 +204,9 @@ class LLScreenChannel : public LLUICtrl
 	// attributes for the StartUp Toast	
 	LLToast* mStartUpToastPanel;
 
+	// channel's ID
+	LLUUID	mID;
+
 	std::vector<ToastElem>		mToastList;
 	std::vector<ToastElem>		mStoredToastList;
 	std::map<LLToast*, bool>	mToastEventStack;
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 2e005834b53..5e5608460c9 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -110,12 +110,15 @@ bool	LLSideTray::instanceCreated	()
 }
 
 LLSideTrayTab::LLSideTrayTab(const Params& params):mMainPanel(0)
-												
 {
 	mImagePath = params.image_path;
 	mTabTitle = params.tab_title;
 	mDescription = params.description;
+
+	// Necessary for focus movement among child controls
+	setFocusRoot(TRUE);
 }
+
 LLSideTrayTab::~LLSideTrayTab()
 {
 }
diff --git a/indra/newview/llsidetraypanelcontainer.cpp b/indra/newview/llsidetraypanelcontainer.cpp
index 21061a802af..3024492ab97 100644
--- a/indra/newview/llsidetraypanelcontainer.cpp
+++ b/indra/newview/llsidetraypanelcontainer.cpp
@@ -85,5 +85,9 @@ BOOL LLSideTrayPanelContainer::handleKeyHere(KEY key, MASK mask)
 {
 	// No key press handling code for Panel Container - this disables
 	// Tab Container's Alt + Left/Right Button tab switching.
-	return TRUE;
+	
+	// Let default handler process key presses, don't simply return TRUE or FALSE
+	// as this may brake some functionality as it did with Copy/Paste for 
+	// text_editor (ticket EXT-642).
+	return LLPanel::handleKeyHere(key, mask);
 }
diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp
index b779aa0f83c..a49b07c5d9c 100644
--- a/indra/newview/llsky.cpp
+++ b/indra/newview/llsky.cpp
@@ -52,7 +52,6 @@
 #include "llviewerobject.h"
 #include "llviewercamera.h"
 #include "pipeline.h"
-#include "llagent.h"
 #include "lldrawpool.h"
 
 #include "llvosky.h"
@@ -422,20 +421,6 @@ void LLSky::updateFog(const F32 distance)
 
 void LLSky::updateCull()
 {
-	/*if (mVOSkyp.notNull() && mVOSkyp->mDrawable.notNull())
-	{
-		gPipeline.markVisible(mVOSkyp->mDrawable);
-	}
-	else
-	{
-		llinfos << "No sky drawable!" << llendl;
-	}*/
-
-	/*if (mVOGroundp.notNull() && mVOGroundp->mDrawable.notNull())
-	{
-		gPipeline.markVisible(mVOGroundp->mDrawable);
-	}*/
-
 	// *TODO: do culling for wl sky properly -Brad
 }
 
diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp
index f6c4710d601..836fe9729da 100644
--- a/indra/newview/llslurl.cpp
+++ b/indra/newview/llslurl.cpp
@@ -114,15 +114,19 @@ std::string LLSLURL::buildUnescapedSLURL(const std::string& regionname, S32 x, S
 
 // static
 std::string LLSLURL::buildSLURLfromPosGlobal(const std::string& regionname,
-											 const LLVector3d& global_pos)
+											 const LLVector3d& global_pos,
+											 bool escaped /*= true*/)
 {
-	F32 region_x = (F32)fmod(global_pos.mdV[VX], (F64)REGION_WIDTH_METERS);
-	F32 region_y = (F32)fmod(global_pos.mdV[VY], (F64)REGION_WIDTH_METERS);
-
-	return buildSLURL(regionname,
-					  llround(region_x),
-					  llround(region_y),
-					  llround((F32)global_pos.mdV[VZ]));
+	S32 x, y, z;
+	globalPosToXYZ(global_pos, x, y, z);
+	if(escaped)
+	{
+		return buildSLURL(regionname, x, y, z);
+	}
+	else
+	{
+		return buildUnescapedSLURL(regionname, x, y, z);
+	}
 }
 
 // static
@@ -132,3 +136,10 @@ bool LLSLURL::matchPrefix(const std::string& url, const std::string& prefix)
 	LLStringUtil::toLower(test_prefix);
 	return test_prefix == prefix;
 }
+
+void LLSLURL::globalPosToXYZ(const LLVector3d& pos, S32& x, S32& y, S32& z)
+{
+	x = llround((F32)fmod(pos.mdV[VX], (F64)REGION_WIDTH_METERS));
+	y = llround((F32)fmod(pos.mdV[VY], (F64)REGION_WIDTH_METERS));
+	z = llround((F32)pos.mdV[VZ]);
+}
diff --git a/indra/newview/llslurl.h b/indra/newview/llslurl.h
index cb1b8cca9ef..8af2bdfb832 100644
--- a/indra/newview/llslurl.h
+++ b/indra/newview/llslurl.h
@@ -79,17 +79,25 @@ class LLSLURL
 	static std::string buildUnescapedSLURL(const std::string& regionname, S32 x, S32 y, S32 z);
 
 	/**
-	 * builds SLURL from global position escaping result url.
+	 * builds SLURL from global position. Returns escaped or unescaped url.
+	 * Returns escaped url by default.
 	 */
 	static std::string buildSLURLfromPosGlobal(const std::string& regionname,
-											   const LLVector3d& global_pos);
+											   const LLVector3d& global_pos,
+											   bool escaped = true);
 	/**
 	 * Strip protocol part from the URL.
 	 */
 	static std::string stripProtocol(const std::string& url);
 
+	/**
+	 * Convert global position to X, Y Z
+	 */
+	static void globalPosToXYZ(const LLVector3d& pos, S32& x, S32& y, S32& z);
+
 private:
 	static bool matchPrefix(const std::string& url, const std::string& prefix);
+
 };
 
 #endif
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index c2fce08ae45..dea9af06574 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -41,7 +41,6 @@
 #include "llviewercamera.h"
 #include "llface.h"
 #include "llviewercontrol.h"
-#include "llagent.h"
 #include "llviewerregion.h"
 #include "llcamera.h"
 #include "pipeline.h"
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index bcaf5f2947d..29750532898 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1003,6 +1003,8 @@ bool idle_startup()
 		
 		// Load URL History File
 		LLURLHistory::loadFile("url_history.xml");
+		// Load location history 
+		LLLocationHistory::getInstance()->load();
 
 		//-------------------------------------------------
 		// Handle startup progress screen
@@ -2571,7 +2573,7 @@ bool idle_startup()
 		// reset timers now that we are running "logged in" logic
 		LLFastTimer::reset();
 
-		LLLocationHistory::getInstance()->load();
+		
 
 		return TRUE;
 	}
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 8a5de61280d..b3a820080f5 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -43,7 +43,6 @@
 #include "llfloaterchat.h"
 #include "llfloaterdirectory.h"		// to spawn search
 #include "llfloaterlagmeter.h"
-#include "llfloaterland.h"
 #include "llfloaterregioninfo.h"
 #include "llfloaterscriptdebug.h"
 #include "llhudicon.h"
@@ -70,7 +69,6 @@
 #include "llviewerparcelmgr.h"
 #include "llviewerthrottle.h"
 #include "lluictrlfactory.h"
-#include "llvoiceclient.h"	// for gVoiceClient
 
 #include "lltoolmgr.h"
 #include "llfocusmgr.h"
@@ -112,12 +110,6 @@ const S32 TEXT_HEIGHT = 18;
 
 static void onClickBuyCurrency(void*);
 static void onClickHealth(void*);
-static void onClickFly(void*);
-static void onClickPush(void*);
-static void onClickVoice(void*);
-static void onClickBuild(void*);
-static void onClickScripts(void*);
-static void onClickBuyLand(void*);
 static void onClickScriptDebug(void*);
 
 std::vector<std::string> LLStatusBar::sDays;
@@ -160,19 +152,6 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
 
 	childSetAction("scriptout", onClickScriptDebug, this);
 	childSetAction("health", onClickHealth, this);
-	childSetAction("no_fly", onClickFly, this);
-	childSetAction("buyland", onClickBuyLand, this );
-	childSetAction("no_build", onClickBuild, this );
-	childSetAction("no_scripts", onClickScripts, this );
-	childSetAction("restrictpush", onClickPush, this );
-	childSetAction("status_no_voice", onClickVoice, this );
-
-	childSetCommitCallback("search_editor", onCommitSearch, this);
-	childSetAction("search_btn", onClickSearch, this);
-
-	childSetVisible("search_editor", gSavedSettings.getBOOL("ShowSearchBar"));
-	childSetVisible("search_btn", gSavedSettings.getBOOL("ShowSearchBar"));
-	childSetVisible("menubar_search_bevel_bg", gSavedSettings.getBOOL("ShowSearchBar"));
 
 	// Adding Net Stat Graph
 	S32 x = getRect().getWidth() - 2;
@@ -331,8 +310,8 @@ void LLStatusBar::refresh()
 		childSetVisible("scriptout", false);
 	}
 
-	if ((region && region->getAllowDamage()) ||
-		(parcel && parcel->getAllowDamage()) )
+	if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK &&
+		((region && region->getAllowDamage()) || (parcel && parcel->getAllowDamage())))
 	{
 		// set visibility based on flashing
 		if( mHealthTimer->hasExpired() )
@@ -364,116 +343,6 @@ void LLStatusBar::refresh()
 		mTextHealth->setVisible(FALSE);
 	}
 
-	if ((region && region->getBlockFly()) ||
-		(parcel && !parcel->getAllowFly()) )
-	{
-		// No Fly Zone
-		childGetRect( "no_fly", buttonRect );
-		childSetVisible( "no_fly", true );
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect( "no_fly", r );
-		x += buttonRect.getWidth();
-	}
-	else
-	{
-		// Fly Zone
-		childSetVisible("no_fly", false);
-	}
-
-	BOOL no_build = parcel && !parcel->getAllowModify();
-	if (no_build)
-	{
-		childSetVisible("no_build", TRUE);
-		childGetRect( "no_build", buttonRect );
-		// No Build Zone
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect( "no_build", r );
-		x += buttonRect.getWidth();
-	}
-	else
-	{
-		childSetVisible("no_build", FALSE);
-	}
-
-	BOOL no_scripts = FALSE;
-	if((region
-		&& ((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)
-		|| (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)))
-		|| (parcel && !parcel->getAllowOtherScripts()))
-	{
-		no_scripts = TRUE;
-	}
-	if (no_scripts)
-	{
-		// No scripts
-		childSetVisible("no_scripts", TRUE);
-		childGetRect( "no_scripts", buttonRect );
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect( "no_scripts", r );
-		x += buttonRect.getWidth();
-	}
-	else
-	{
-		// Yes scripts
-		childSetVisible("no_scripts", FALSE);
-	}
-
-	BOOL no_region_push = (region && region->getRestrictPushObject());
-	BOOL no_push = no_region_push || (parcel && parcel->getRestrictPushObject());
-	if (no_push)
-	{
-		childSetVisible("restrictpush", TRUE);
-		childGetRect( "restrictpush", buttonRect );
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect( "restrictpush", r );
-		x += buttonRect.getWidth();
-	}
-	else
-	{
-		childSetVisible("restrictpush", FALSE);
-	}
-
-	BOOL have_voice = parcel && parcel->getParcelFlagAllowVoice(); 
-	if (have_voice)
-	{
-		childSetVisible("status_no_voice", FALSE);
-	}
-	else
-	{
-		childSetVisible("status_no_voice", TRUE);
-		childGetRect( "status_no_voice", buttonRect );
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect( "status_no_voice", r );
-		x += buttonRect.getWidth();
-	}
-
-	BOOL canBuyLand = parcel
-		&& !parcel->isPublic()
-		&& LLViewerParcelMgr::getInstance()->canAgentBuyParcel(parcel, false);
-	childSetVisible("buyland", canBuyLand);
-	if (canBuyLand)
-	{
-		//HACK: layout tweak until this is all xml
-		x += 9;
-		childGetRect( "buyland", buttonRect );
-		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
-		childSetRect( "buyland", r );
-		x += buttonRect.getWidth();
-	}
-
-	bool search_visible = gSavedSettings.getBOOL("ShowSearchBar");
-	
-	// Set search bar visibility
-
-	if (gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK)
-	{
-		// don't monkey with search visibility in mouselook - it will be set
-		// with setVisibleForMouselook() below
-		childSetVisible("search_editor", search_visible);
-		childSetVisible("search_btn", search_visible);
-		childSetVisible("menubar_search_bevel_bg", search_visible);
-	}
-	
 	mSGBandwidth->setVisible(net_stats_visible);
 	mSGPacketLoss->setVisible(net_stats_visible);
 	childSetEnabled("stat_btn", net_stats_visible);
@@ -483,9 +352,6 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
 {
 	mTextTime->setVisible(visible);
 	mBtnBuyCurrency->setVisible(visible);
-	childSetVisible("search_editor", visible);
-	childSetVisible("search_btn", visible);
-	childSetVisible("menubar_search_bevel_bg", visible);
 	mSGBandwidth->setVisible(visible);
 	mSGPacketLoss->setVisible(visible);
 	setBackgroundVisible(visible);
@@ -635,49 +501,6 @@ static void onClickScriptDebug(void*)
 	LLFloaterScriptDebug::show(LLUUID::null);
 }
 
-static void onClickFly(void* )
-{
-	LLNotifications::instance().add("NoFly");
-}
-
-static void onClickPush(void* )
-{
-	LLNotifications::instance().add("PushRestricted");
-}
-
-static void onClickVoice(void* )
-{
-	LLNotifications::instance().add("NoVoice");
-}
-
-static void onClickBuild(void*)
-{
-	LLNotifications::instance().add("NoBuild");
-}
-
-static void onClickScripts(void*)
-{
-	LLViewerRegion* region = gAgent.getRegion();
-	if(region && region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)
-	{
-		LLNotifications::instance().add("ScriptsStopped");
-	}
-	else if(region && region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)
-	{
-		LLNotifications::instance().add("ScriptsNotRunning");
-	}
-	else
-	{
-		LLNotifications::instance().add("NoOutsideScripts");
-	}
-}
-
-static void onClickBuyLand(void*)
-{
-	LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal());
-	LLViewerParcelMgr::getInstance()->startBuyLand();
-}
-
 // sets the static variables necessary for the date
 void LLStatusBar::setupDate()
 {
@@ -783,21 +606,6 @@ void LLStatusBar::onMainMenuRightClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask
 	handleRightMouseUp(x, y, mask);
 }
 
-// static
-void LLStatusBar::onCommitSearch(LLUICtrl*, void* data)
-{
-	// committing is the same as clicking "search"
-	onClickSearch(data);
-}
-
-// static
-void LLStatusBar::onClickSearch(void* data)
-{
-	LLStatusBar* self = (LLStatusBar*)data;
-	std::string search_text = self->childGetText("search_editor");
-	LLFloaterReg::showInstance("search", LLSD().insert("panel", "all").insert("id", LLSD(search_text)));
-}
-
 // static
 void LLStatusBar::onClickStatGraph(void* data)
 {
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index a26b1c14af4..2bbb5a27678 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -131,7 +131,8 @@ void LLSysWellWindow::removeItemByID(const LLUUID& id)
 void LLSysWellWindow::onItemClick(LLSysWellItem* item)
 {
 	LLUUID id = item->getID();
-	mChannel->loadStoredToastByIDToChannel(id);
+	if(mChannel)
+		mChannel->loadStoredToastByIDToChannel(id);
 }
 
 //---------------------------------------------------------------------------------
@@ -139,7 +140,8 @@ void LLSysWellWindow::onItemClose(LLSysWellItem* item)
 {
 	LLUUID id = item->getID();
 	removeItemByID(id);
-	mChannel->killToastByNotificationID(id);
+	if(mChannel)
+		mChannel->killToastByNotificationID(id);
 }
 
 //---------------------------------------------------------------------------------
@@ -154,10 +156,15 @@ void LLSysWellWindow::setVisible(BOOL visible)
 	// on Show adjust position of SysWell chiclet's window
 	if(visible)
 	{
-		mChannel->removeAndStoreAllVisibleToasts();
+		if(mChannel)
+			mChannel->removeAndStoreAllVisibleToasts();
+
 		adjustWindowPosition();	// *TODO: won't be necessary after docking is realized
 	}
 
+	if(mChannel)
+		mChannel->setShowToasts(!visible);
+
 	LLFloater::setVisible(visible);
 }
 
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index 9754568f56b..5235dc9358c 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -43,6 +43,7 @@
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
 #include "llworldmap.h"
+#include "llagentui.h"
 
 //////////////////////////////////////////////////////////////////////////////
 // LLTeleportHistoryItem
@@ -74,7 +75,7 @@ LLTeleportHistory::LLTeleportHistory():
 	mGotInitialUpdate(false)
 {
 	mTeleportFinishedConn = LLViewerParcelMgr::getInstance()->
-		setTeleportFinishedCallback(boost::bind(&LLTeleportHistory::updateCurrentLocation, this));
+		setTeleportFinishedCallback(boost::bind(&LLTeleportHistory::updateCurrentLocation, this, _1));
 	mTeleportFailedConn = LLViewerParcelMgr::getInstance()->
 		setTeleportFailedCallback(boost::bind(&LLTeleportHistory::onTeleportFailed, this));
 }
@@ -118,7 +119,7 @@ void LLTeleportHistory::onTeleportFailed()
 	}
 }
 
-void LLTeleportHistory::updateCurrentLocation()
+void LLTeleportHistory::updateCurrentLocation(const LLVector3d& new_pos)
 {
 	if (mRequestedItem != -1) // teleport within the history in progress?
 	{
@@ -149,7 +150,7 @@ void LLTeleportHistory::updateCurrentLocation()
 			return;
 		}
 		mItems[mCurrentItem].mTitle = getCurrentLocationTitle();
-		mItems[mCurrentItem].mGlobalPos	= gAgent.getPositionGlobal();
+		mItems[mCurrentItem].mGlobalPos	= new_pos;
 		mItems[mCurrentItem].mRegionID = gAgent.getRegion()->getRegionID();
 	}
 
@@ -184,10 +185,7 @@ void LLTeleportHistory::purgeItems()
 std::string LLTeleportHistory::getCurrentLocationTitle()
 {
 	std::string location_name;
-
-	if (!gAgent.buildLocationString(location_name, LLAgent::LOCATION_FORMAT_NORMAL))
-		location_name = "Unknown";
-
+	if (!LLAgentUI::buildLocationString(location_name, LLAgent::LOCATION_FORMAT_NORMAL)) location_name = "Unknown";
 	return location_name;
 }
 
@@ -201,6 +199,7 @@ void LLTeleportHistory::dump() const
 		line << ((i == mCurrentItem) ? " * " : "   ");
 		line << i << ": " << mItems[i].mTitle;
 		line << " REGION_ID: " << mItems[i].mRegionID;
+		line << ", pos: " << mItems[i].mGlobalPos;
 		llinfos << line.str() << llendl;
 	}
 }
diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h
index 775b21e24ce..060534635d3 100644
--- a/indra/newview/llteleporthistory.h
+++ b/indra/newview/llteleporthistory.h
@@ -147,6 +147,10 @@ class LLTeleportHistory: public LLSingleton<LLTeleportHistory>
 	/**
 	 * Update current location.
 	 * 
+	 * @param new_pos Current agent global position. After local teleports we
+	 *                cannot rely on gAgent.getPositionGlobal(),
+	 *                so the new position gets passed explicitly.
+	 * 
 	 * Called when a teleport finishes.
 	 * Called via callback set on the LLViewerParcelMgr "teleport finished" signal.
 	 *
@@ -158,7 +162,7 @@ class LLTeleportHistory: public LLSingleton<LLTeleportHistory>
 	 * @see mRequestedItem
 	 * @see mGotInitialUpdate
 	 */
-	void					updateCurrentLocation();
+	void					updateCurrentLocation(const LLVector3d& new_pos);
 	
 	/**
 	 * Invokes the "history changed" callback(s).
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 07f802cf548..85814a98c99 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -225,7 +225,6 @@ void LLToast::onMouseEnter(S32 x, S32 y, MASK mask)
 {
 	mOnToastHover(this, MOUSE_ENTER);
 
-	setVisibleAndFrontmost();
 	setBackgroundOpaque(TRUE);
 	if(mCanFade)
 	{
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index f1a9f2ec46c..969f3fd1cb9 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -107,8 +107,6 @@ class LLToast : public LLFloater
 	//
 	void stopTimer() { mTimer.stop(); }
 	//
-	void close() { die(); }
-	//
 	virtual void draw();
 	//
 	virtual void setVisible(BOOL show);
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index 69c384835de..4309f56710f 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -66,8 +66,7 @@ static const S32 HPAD = 25;
 static const S32 BTN_HPAD = 8;
 
 LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal)
-	  : LLFloater(LLSD()),
-		LLToastPanel(notification),
+	  : LLToastPanel(notification),
 		mDefaultOption( 0 ),
 		mCheck(NULL),
 		mCaution(notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH),
@@ -304,8 +303,8 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
 		setCheckBox(LLNotifications::instance().getGlobalString("alwayschoose"), ignore_label);
 	}
 
-	gFloaterView->adjustToFitScreen(this, FALSE);
- 	LLFloater::setFocus(TRUE);
+	// *TODO: check necessity of this code
+	//gFloaterView->adjustToFitScreen(this, FALSE);
 	if (mLineEditor)
 	{
 		mLineEditor->setFocus(TRUE);
@@ -368,9 +367,13 @@ LLToastAlertPanel::~LLToastAlertPanel()
 
 BOOL LLToastAlertPanel::hasTitleBar() const
 {
+	// *TODO: check necessity of this code
+	/*
 	return (getCurrentTitle() != "" && getCurrentTitle() != " ")	// has title
 			|| isMinimizeable()
 			|| isCloseable();
+	*/
+	return false;
 }
 
 BOOL LLToastAlertPanel::handleKeyHere(KEY key, MASK mask )
@@ -455,7 +458,6 @@ void LLToastAlertPanel::onButtonPressed( const LLSD& data, S32 button )
 	}
 
 	mNotification->respond(response); // new notification reponse
-	closeFloater(); // deletes self
 }
 
 void LLToastAlertPanel::onClickIgnore(LLUICtrl* ctrl)
diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h
index 543c14d404b..af0c9a9ddd9 100644
--- a/indra/newview/lltoastalertpanel.h
+++ b/indra/newview/lltoastalertpanel.h
@@ -52,8 +52,7 @@ class LLLineEditor;
  */
 
 class LLToastAlertPanel
-	: public LLToastPanel,
-	  public LLFloater
+	: public LLToastPanel
 {
 public:
 	typedef bool (*display_callback_t)(S32 modal);
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
new file mode 100644
index 00000000000..e41181c9e1c
--- /dev/null
+++ b/indra/newview/lltoastimpanel.cpp
@@ -0,0 +1,94 @@
+/**
+ * @file lltoastimpanel.cpp
+ * @brief Panel for IM toasts.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-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 "lltoastimpanel.h"
+#include "llimpanel.h"
+
+const S32 LLToastIMPanel::MAX_MESSAGE_HEIGHT	= 50;
+const S32 LLToastIMPanel::CAPTION_HEIGHT		= 30;
+const S32 LLToastIMPanel::TOP_PAD 				= 5;
+
+//--------------------------------------------------------------------------
+LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notification),
+															mAvatar(NULL), mUserName(NULL),
+															mTime(NULL), mMessage(NULL),
+															mReplyBtn(NULL)
+{
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml");
+
+	mAvatar = getChild<LLAvatarIconCtrl>("avatar");
+	mUserName = getChild<LLTextBox>("user_name");
+	mTime = getChild<LLTextBox>("time_box");
+	mMessage = getChild<LLTextBox>("message");
+	mReplyBtn = getChild<LLButton>("reply");	
+
+	mMessage->setValue(p.message);
+	mAvatar->setValue(p.avatar_id);
+	mUserName->setValue(p.from);
+	mTime->setValue(p.time);
+	mSessionID = p.session_id;
+
+	mReplyBtn->setClickedCallback(boost::bind(&LLToastIMPanel::onClickReplyBtn, this));
+
+	snapToMessageHeight();
+}
+
+//--------------------------------------------------------------------------
+LLToastIMPanel::~LLToastIMPanel()
+{
+}
+
+//--------------------------------------------------------------------------
+void LLToastIMPanel::snapToMessageHeight()
+{
+	S32 required_text_height = mMessage->getTextPixelHeight();
+	S32 text_height = llmin(required_text_height, MAX_MESSAGE_HEIGHT);
+	LLRect text_rect = mMessage->getRect();
+	LLRect btn_rect = mReplyBtn->getRect();
+
+
+	mMessage->reshape( text_rect.getWidth(), text_height, TRUE);
+	mMessage->setValue(mMessage->getText());
+
+	S32 panel_height = CAPTION_HEIGHT + text_height + btn_rect.getHeight() + TOP_PAD*5;
+	reshape( getRect().getWidth(), panel_height, TRUE);
+}
+
+//--------------------------------------------------------------------------
+void LLToastIMPanel::onClickReplyBtn()
+{
+	LLIMFloater::toggle(mSessionID);
+}
+
+//--------------------------------------------------------------------------
+
diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h
new file mode 100644
index 00000000000..7f5d6eca1d7
--- /dev/null
+++ b/indra/newview/lltoastimpanel.h
@@ -0,0 +1,79 @@
+/**
+ * @file lltoastimpanel.h
+ * @brief Panel for IM toasts.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ * 
+ * Copyright (c) 2001-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 LLTOASTIMPANEL_H_
+#define LLTOASTIMPANEL_H_
+
+
+#include "lltoastpanel.h"
+#include "lltextbox.h"
+#include "llbutton.h"
+#include "llavatariconctrl.h"
+
+
+class LLToastIMPanel: public LLToastPanel 
+{
+public:
+	struct Params :	public LLInitParam::Block<Params>
+	{
+		LLNotificationPtr	notification;
+		LLUUID				avatar_id;
+		LLUUID				session_id;
+		std::string			from;
+		std::string			time;
+		std::string			message;
+
+		Params() {}
+	};
+
+	LLToastIMPanel(LLToastIMPanel::Params &p);
+	virtual ~LLToastIMPanel();
+
+private:
+	static const S32 MAX_MESSAGE_HEIGHT;
+	static const S32 CAPTION_HEIGHT;
+	static const S32 TOP_PAD;
+
+	void onClickReplyBtn();
+	void snapToMessageHeight();
+
+	LLUUID				mSessionID;
+	LLAvatarIconCtrl*	mAvatar;
+	LLTextBox*			mUserName;
+	LLTextBox*			mTime;
+	LLTextBox*			mMessage;
+	LLButton*			mReplyBtn;
+};
+
+#endif // LLTOASTIMPANEL_H_
+
+
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 70fa2f715b2..b5dd34df15c 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -72,7 +72,7 @@
 #include "object_flags.h"
 #include "llimview.h"
 #include "llrootview.h"
-
+#include "llagentui.h"
 
 // MAX ITEMS is based on (sizeof(uuid)+2) * count must be < MTUBYTES
 // or 18 * count < 1200 => count < 1200/18 => 66. I've cut it down a
@@ -1563,7 +1563,7 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,
 {
 	if(!item) return;
 	std::string name;
-	gAgent.buildFullname(name);
+	LLAgentUI::buildFullname(name);
 	LLUUID transaction_id;
 	transaction_id.generate();
 	const S32 BUCKET_SIZE = sizeof(U8) + UUID_BYTES;
@@ -1762,7 +1762,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
 	else
 	{
 		std::string name;
-		gAgent.buildFullname(name);
+		LLAgentUI::buildFullname(name);
 		LLUUID transaction_id;
 		transaction_id.generate();
 		S32 bucket_size = (sizeof(U8) + UUID_BYTES) * (count + 1);
diff --git a/indra/newview/lltoolface.cpp b/indra/newview/lltoolface.cpp
index b335d7125a5..1d78dc50194 100644
--- a/indra/newview/lltoolface.cpp
+++ b/indra/newview/lltoolface.cpp
@@ -40,7 +40,6 @@
 #include "v3math.h"
 
 // Viewer includes
-#include "llagent.h"
 #include "llviewercontrol.h"
 #include "llselectmgr.h"
 #include "llviewerobject.h"
diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp
index 07c996a84f9..5c8b08db3b9 100644
--- a/indra/newview/lltoolselectland.cpp
+++ b/indra/newview/lltoolselectland.cpp
@@ -38,7 +38,6 @@
 #include "llparcel.h"
 
 // Viewer includes
-#include "llagent.h"
 #include "llviewercontrol.h"
 #include "llfloatertools.h"
 #include "llselectmgr.h"
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index 8fbb59bc743..28f883312ae 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -39,7 +39,6 @@
 #include "llfasttimer.h"
 #include "llrender.h"
 
-#include "llagent.h"
 #include "llapr.h"
 #include "llbox.h"
 #include "lldrawable.h"
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index d83f3d92071..73036059152 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -101,6 +101,7 @@
 #include "llnotify.h"
 #include "llpanelgrouplandmoney.h"
 #include "llselectmgr.h"
+#include "llsidetray.h"
 #include "llstartup.h"
 #include "llsky.h"
 #include "llstatenums.h"
@@ -136,6 +137,7 @@
 #include "llviewerdisplay.h"
 #include "llkeythrottle.h"
 #include "llgroupactions.h"
+#include "llagentui.h"
 
 #include <boost/tokenizer.hpp>
 #include <boost/algorithm/string/split.hpp>
@@ -902,12 +904,17 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
 				break;
 			  case LLAssetType::AT_LANDMARK:
 			  	{
-					// *TODO: Embed a link to the Places panel so that user can edit the landmark right away.
 					LLInventoryCategory* parent_folder = gInventory.getCategory(item->getParentUUID());
 					LLSD args;
 					args["LANDMARK_NAME"] = item->getName();
 					args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unnkown");
 					LLNotifications::instance().add("LandmarkCreated", args);
+					
+					// Open new landmark for editing in Places panel.
+					LLSD key;
+					key["type"] = "landmark";
+					key["id"] = item->getUUID();
+					LLSideTray::getInstance()->showPanel("panel_places", key);
 			  	}
 				break;
 			  case LLAssetType::AT_TEXTURE:
@@ -1079,7 +1086,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
 	msg->addUUIDFast(_PREHASH_ID, mTransactionID);
 	msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
 	std::string name;
-	gAgent.buildFullname(name);
+	LLAgentUI::buildFullname(name);
 	msg->addStringFast(_PREHASH_FromAgentName, name);
 	msg->addStringFast(_PREHASH_Message, ""); 
 	msg->addU32Fast(_PREHASH_ParentEstateID, 0);
@@ -1526,7 +1533,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				// if there is not a panel for this conversation (i.e. it is a new IM conversation
 				// initiated by the other party) then...
 				std::string my_name;
-				gAgent.buildFullname(my_name);
+				LLAgentUI::buildFullname(my_name);
 				std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
 				pack_instant_message(
 					gMessageSystem,
@@ -2131,7 +2138,7 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id)
 	if (gAgent.getBusy())
 	{
 		std::string my_name;
-		gAgent.buildFullname(my_name);
+		LLAgentUI::buildFullname(my_name);
 		std::string response = gSavedPerAccountSettings.getString("BusyModeResponse2");
 		pack_instant_message(
 			gMessageSystem,
@@ -4735,7 +4742,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
 	// so we'll reuse the same namespace for both throttle types.
 	std::string throttle_name = owner_name;
 	std::string self_name;
-	gAgent.getName( self_name );
+	LLAgentUI::buildName( self_name );
 	if( owner_name == self_name )
 	{
 		throttle_name = taskid.getString();
@@ -5040,9 +5047,6 @@ void process_teleport_local(LLMessageSystem *msg,void**)
 		gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
 	}
 
-	// Let the interested parties know we've teleported.
-	LLViewerParcelMgr::getInstance()->onTeleportFinished();
-
 	// Sim tells us whether the new position is off the ground
 	if (teleport_flags & TELEPORT_FLAGS_IS_FLYING)
 	{
@@ -5063,6 +5067,11 @@ void process_teleport_local(LLMessageSystem *msg,void**)
 	gAgent.updateCamera();
 
 	send_agent_update(TRUE, TRUE);
+
+	// Let the interested parties know we've teleported.
+	// Vadim *HACK: Agent position seems to get reset (to render position?)
+	//              on each frame, so we have to pass the new position manually.
+	LLViewerParcelMgr::getInstance()->onTeleportFinished(true, gAgent.getPosGlobalFromAgent(pos));
 }
 
 void send_simple_im(const LLUUID& to_id,
@@ -5071,7 +5080,7 @@ void send_simple_im(const LLUUID& to_id,
 					const LLUUID& id)
 {
 	std::string my_name;
-	gAgent.buildFullname(my_name);
+	LLAgentUI::buildFullname(my_name);
 	send_improved_im(to_id,
 					 my_name,
 					 message,
@@ -5092,7 +5101,7 @@ void send_group_notice(const LLUUID& group_id,
 	// This will mean converting the item to a binary bucket,
 	// and the subject/message into a single field.
 	std::string my_name;
-	gAgent.buildFullname(my_name);
+	LLAgentUI::buildFullname(my_name);
 
 	// Combine subject + message into a single string.
 	std::ostringstream subject_and_message;
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 8497a454668..9dafc4b9f5b 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1530,7 +1530,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
 			if (instance->mTeleportInProgress)
 			{
 				instance->mTeleportInProgress = FALSE;
-				instance->mTeleportFinishedSignal();
+				instance->mTeleportFinishedSignal(gAgent.getPositionGlobal());
 			}
 		}
 	}
@@ -2398,12 +2398,19 @@ LLViewerTexture* LLViewerParcelMgr::getPassImage() const
 	return sPassImage;
 }
 
-boost::signals2::connection LLViewerParcelMgr::setAgentParcelChangedCallback(parcel_changed_callback_t cb)
+boost::signals2::connection LLViewerParcelMgr::addAgentParcelChangedCallback(parcel_changed_callback_t cb)
 {
 	return mAgentParcelChangedSignal.connect(cb);
 }
-
-boost::signals2::connection LLViewerParcelMgr::setTeleportFinishedCallback(parcel_changed_callback_t cb)
+/*
+ * Set finish teleport callback. You can use it to observe all  teleport events.
+ * NOTE:
+ * After local( in one region) teleports we
+ *  cannot rely on gAgent.getPositionGlobal(),
+ *  so the new position gets passed explicitly.
+ *  Use args of this callback to get global position of avatar after teleport event.
+ */
+boost::signals2::connection LLViewerParcelMgr::setTeleportFinishedCallback(teleport_finished_callback_t cb)
 {
 	return mTeleportFinishedSignal.connect(cb);
 }
@@ -2416,12 +2423,22 @@ boost::signals2::connection LLViewerParcelMgr::setTeleportFailedCallback(parcel_
 /* Ok, we're notified that teleport has been finished.
  * We should now propagate the notification via mTeleportFinishedSignal
  * to all interested parties.
- * However the agent parcel data has not been updated yet.
- * Let's wait for the update and then emit the signal.
  */
-void LLViewerParcelMgr::onTeleportFinished()
+void LLViewerParcelMgr::onTeleportFinished(bool local, const LLVector3d& new_pos)
 {
-	mTeleportInProgress = TRUE;
+	if (local)
+	{
+		// Local teleport. We already have the agent parcel data.
+		// Emit the signal immediately.
+		getInstance()->mTeleportFinishedSignal(new_pos);
+	}
+	else
+	{
+		// Non-local teleport.
+		// The agent parcel data has not been updated yet.
+		// Let's wait for the update and then emit the signal.
+		mTeleportInProgress = TRUE;
+	}
 }
 
 void LLViewerParcelMgr::onTeleportFailed()
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 427ed4a6f21..917f28fd29a 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -82,6 +82,8 @@ class LLViewerParcelMgr : public LLSingleton<LLViewerParcelMgr>
 {
 
 public:
+	typedef boost::function<void (const LLVector3d&)> teleport_finished_callback_t;
+	typedef boost::signals2::signal<void (const LLVector3d&)> teleport_finished_signal_t;
 	typedef boost::function<void()> parcel_changed_callback_t;
 	typedef boost::signals2::signal<void()> parcel_changed_signal_t;
 
@@ -262,10 +264,10 @@ class LLViewerParcelMgr : public LLSingleton<LLViewerParcelMgr>
 	// the agent is banned or not in the allowed group
 	BOOL isCollisionBanned();
 
-	boost::signals2::connection setAgentParcelChangedCallback(parcel_changed_callback_t cb);
-	boost::signals2::connection setTeleportFinishedCallback(parcel_changed_callback_t cb);
+	boost::signals2::connection addAgentParcelChangedCallback(parcel_changed_callback_t cb);
+	boost::signals2::connection setTeleportFinishedCallback(teleport_finished_callback_t cb);
 	boost::signals2::connection setTeleportFailedCallback(parcel_changed_callback_t cb);
-	void onTeleportFinished();
+	void onTeleportFinished(bool local, const LLVector3d& new_pos);
 	void onTeleportFailed();
 
 	static BOOL isParcelOwnedByAgent(const LLParcel* parcelp, U64 group_proxy_power);
@@ -316,7 +318,7 @@ class LLViewerParcelMgr : public LLSingleton<LLViewerParcelMgr>
 	LLDynamicArray<LLParcelObserver*> mObservers;
 
 	BOOL						mTeleportInProgress;
-	parcel_changed_signal_t		mTeleportFinishedSignal;
+	teleport_finished_signal_t	mTeleportFinishedSignal;
 	parcel_changed_signal_t		mTeleportFailedSignal;
 	parcel_changed_signal_t		mAgentParcelChangedSignal;
 
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 83442dc2bb9..1b926e2db6e 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -53,7 +53,6 @@
 #include "llxmltree.h"
 #include "message.h"
 
-#include "llagent.h"
 #include "lltexturecache.h"
 #include "lltexturefetch.h"
 #include "llviewercontrol.h"
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 74ed5b12fe1..01756a0d82a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -186,6 +186,7 @@
 #include "llpostprocess.h"
 #include "llbottomtray.h"
 #include "llnearbychatbar.h"
+#include "llagentui.h"
 
 #include "llnotificationmanager.h"
 
@@ -1105,7 +1106,7 @@ BOOL LLViewerWindow::handlePaint(LLWindow *window,  S32 x,  S32 y, S32 width,  S
 		FillRect(hdc, &wnd_rect, CreateSolidBrush(RGB(255, 255, 255)));
 
 		std::string name_str;
-		gAgent.getName(name_str);
+		LLAgentUI::buildName(name_str);
 
 		std::string temp_str;
 		temp_str = llformat( "%s FPS %3.1f Phy FPS %2.1f Time Dil %1.3f",		/* Flawfinder: ignore */
diff --git a/indra/newview/llvlmanager.cpp b/indra/newview/llvlmanager.cpp
index 177093c4d19..07ef262668f 100644
--- a/indra/newview/llvlmanager.cpp
+++ b/indra/newview/llvlmanager.cpp
@@ -40,7 +40,6 @@
 #include "patch_dct.h"
 #include "llviewerregion.h"
 #include "llframetimer.h"
-#include "llagent.h"
 #include "llsurface.h"
 
 LLVLManager gVLManager;
diff --git a/indra/newview/llvoground.cpp b/indra/newview/llvoground.cpp
index fe19e181516..ac2484ddfdd 100644
--- a/indra/newview/llvoground.cpp
+++ b/indra/newview/llvoground.cpp
@@ -37,7 +37,6 @@
 
 #include "llviewercontrol.h"
 
-#include "llagent.h"
 #include "lldrawable.h"
 #include "llface.h"
 #include "llsky.h"
diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp
index 9871965458a..f5094c025ec 100644
--- a/indra/newview/llvotextbubble.cpp
+++ b/indra/newview/llvotextbubble.cpp
@@ -39,7 +39,6 @@
 #include "llprimitive.h"
 #include "llrendersphere.h"
 
-#include "llagent.h"
 #include "llbox.h"
 #include "lldrawable.h"
 #include "llface.h"
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index f7a16571d11..6a209ecabf1 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -47,7 +47,7 @@
 #include "material_codes.h"
 #include "message.h"
 #include "object_flags.h"
-#include "llagent.h"
+#include "llagentconstants.h"
 #include "lldrawable.h"
 #include "lldrawpoolbump.h"
 #include "llface.h"
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 332c9dd9527..e2357957abb 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -37,7 +37,6 @@
 #include "imageids.h"
 #include "llviewercontrol.h"
 
-#include "llagent.h"
 #include "lldrawable.h"
 #include "lldrawpoolwater.h"
 #include "llface.h"
diff --git a/indra/newview/llwind.cpp b/indra/newview/llwind.cpp
index ae98bead988..cbee4ddae15 100644
--- a/indra/newview/llwind.cpp
+++ b/indra/newview/llwind.cpp
@@ -49,7 +49,6 @@
 // viewer
 #include "noise.h"
 #include "v4color.h"
-#include "llagent.h"
 #include "llworld.h"
 
 
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index ae476c88c91..7d9d0a6191f 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -52,7 +52,6 @@
 #include "llviewercontrol.h"
 #include "llviewerwindow.h"
 #include "lldrawpoolwater.h"
-#include "llagent.h"
 #include "llviewerregion.h"
 
 #include "llwlparamset.h"
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index ad208806b71..29492ebbdf4 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -381,6 +381,7 @@
   <texture name="icon_groupnoticeinventory.tga"/>
   <texture name="icon_lock.tga"/>
   <texture name="icon_place.tga"/>
+  <texture name="icon_place_for_sale.tga"/>
   <texture name="icon_popular.tga"/>
   <texture name="icon_top_pick.tga"/>
 
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index a74f5607535..28cb3bc551f 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -19,7 +19,7 @@
      left="10"
      name="title"
      text_color="white"
-     top="0"
+     top="17"
      width="250">
         Edit Pick
     </text>
@@ -28,11 +28,11 @@
      bg_alpha_color="DkGray2"
      width="280"
      follows="left|right|top|bottom"
-     height="570"
+     height="560"
      layout="topleft"
      left="10"
      right="-10"
-     top="30">
+     top_pad="5">
         <panel
          follows="left|top|right"
          height="150"
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 b336c86e954..c870e24e595 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -13,8 +13,8 @@
  top="10"
  width="305">
     <text     
-     top="0" 
-     left="9" 
+     top="16" 
+     left="11" 
      height="20" 
      follows="left|top"
      font="SansSerifHugeBold" 
@@ -28,7 +28,7 @@
      background_visible="true"
      bg_alpha_color="DkGray2"
      follows="left|top|right|bottom"  
-     height="620"
+     height="604"
      layout="topleft"
      left="9"
      name="data_panel" 
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index a38d7eee362..2243df951ec 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -2,7 +2,7 @@
 <panel
  border="true"
  follows="all"
- height="500"
+ height="470"
  label="General"
  class="panel_group_general"
  layout="topleft"
@@ -43,39 +43,17 @@ Hover your mouse over the options for more help.
     <text_editor
      type="string"
      follows="left|top"
-     left="10"
+     left="95"
      height="75"
      hide_scrollbar="true"
      layout="topleft"
      max_length="511"
      name="charter"
-     top_pad="4"
-     width="260"
+     top="30"
+     width="170"
      word_wrap="true">
         Group Charter
     </text_editor>
-    <!--<button
-     follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="Join (L$0)"
-     label_selected="Join (L$0)"
-     layout="topleft"
-     left="10"
-     name="join_button"
-     top_pad="10"
-     width="85" />
-    <button
-     follows="left|top"
-     height="20"
-     font="SansSerifSmall"
-     label="Details"
-     label_selected="Detailed View"
-     layout="topleft"
-     left_delta="0"
-     name="info_button"
-     top_delta="0"
-     width="85" /> -->
     <text
       follows="left|top"
      type="string"
@@ -83,7 +61,7 @@ Hover your mouse over the options for more help.
      tool_tip="Owners are shown in bold."
      height="16"
      layout="topleft"
-     left_delta="0"
+     left="5"
      name="text_owners_and_visible_members"
      top_pad="10"
      width="270">
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index be68187eaf2..65d1e3c3a70 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -16,26 +16,25 @@
      name="want_apply_text">
         Do you want to apply these changes?
     </panel.string>
-
-	<button 
+    
+    <button 
      layout="topleft" 
      name="back" 
-     left="5" 
-     top="5" 
-     width="20" 
-     height="20" 
+     right="-9" 
+     top="0" 
+     width="25" 
+     height="25" 
      label=""
      follows="top|left"
-     image_selected="navbar_bg_button.tga"
-     image_unselected="navbar_bg_button.tga"
-     image_overlay="navbar_back.tga"/>
+     image_overlay="BackArrow_Off"
+     tab_stop="false" />
     <text 
      layout="topleft" 
-     top="5" 
-     left_pad="15" 
-     width="200" 
+     top="0" 
+     left="10" 
+     width="250" 
      height="20" 
-     font="SansSerifBold" 
+     font="SansSerifHugeBold" 
      text_color="white" 
      follows="top|left|right"
      mouse_opaque="true" 
@@ -100,7 +99,7 @@
      left="5"
      visible="false"
      width="65" />
-      <accordion layout="topleft" left="2" width="296" top="135" height="600" follows="all" name="panel_me_profile">
+      <accordion layout="topleft" left="2" width="296" top="135" height="600" follows="all" name="group_accordion">
 		<accordion_tab min_height="515" title="Group General" name="group_general_tab">
         	<panel class="panel_group_general" filename="panel_group_general.xml" name="group_general_tab_panel"/>
 		</accordion_tab>
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 43457ddd61d..68b30faa1c6 100644
--- a/indra/newview/skins/default/xui/en/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_invite.xml
@@ -15,6 +15,10 @@
      name="loading">
         (loading...)
     </panel.string>
+    <panel.string
+     name="already_in_group">
+        Some avatars are already in group and were not invited.
+    </panel.string>
     <text
      type="string"
      length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 4d373fbf3a5..069cf1d7bd9 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -2,7 +2,7 @@
 <panel
  border="true"
  follows="all"
- height="490"
+ height="410"
  label="Land &amp; L$"
  layout="topleft"
  left="1"
@@ -59,7 +59,7 @@
      heading_height="14"
      height="100"
      layout="topleft"
-     left_delta="0"
+     left="5"
      name="group_parcel_list"
      top_pad="10"
      width="265">
diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index a39a681f83d..8ebf1b69a79 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -9,7 +9,7 @@
 			top="5"  left="5" mouse_opaque="true" name="group_icon"/>
 		<text type="string" length="1" follows="left|top|right|bottom"
 			font="SansSerifBigBold" height="20" layout="topleft" left="60" name="title"
-			text_color="GroupNotifyTextColor" top="20" width="300">
+			text_color="GroupNotifyTextColor" top="20" width="275" use_ellipses="true">
 			Sender Name / Group Name
         </text>
 	</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 37c332b2b74..9ae165cbb9c 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -193,7 +193,7 @@ clicking on their names.
          height="20"
          follows="left|top|right"
          max_length="250"
-         label="Filter Roles"
+         label="Filter People"
          name="filter_input"
          font="SansSerif"
          background_image="TextField_Search_Off"
@@ -326,7 +326,7 @@ including the Everyone and Owner Roles.
             height="20"
             follows="left|top|right"
             max_length="250"
-            label="Filter People"
+            label="Filter Roles"
             name="filter_input"
             font="SansSerif"
             background_image="TextField_Search_Off"
@@ -507,7 +507,7 @@ things in this group. There&apos;s a broad variety of Abilities.
         </panel>
     </tab_container>
     <panel
-     height="50"
+     height="170"
      layout="topleft"
      follows="left|top"
      left="10"
@@ -540,7 +540,6 @@ things in this group. There&apos;s a broad variety of Abilities.
         </text>
         <scroll_list
          draw_stripes="false"
-         enabled="false"
          follows="left|top"
          height="150"
          layout="topleft"
@@ -559,7 +558,6 @@ things in this group. There&apos;s a broad variety of Abilities.
         </scroll_list>
         <scroll_list
          draw_stripes="false"
-         enabled="false"
          height="150"
          layout="topleft"
          follows="left|top"
@@ -686,7 +684,6 @@ things in this group. There&apos;s a broad variety of Abilities.
         </text>
         <name_list
          draw_stripes="false"
-         enabled="false"
          height="150"
          layout="topleft"
          left="0"
@@ -783,7 +780,6 @@ things in this group. There&apos;s a broad variety of Abilities.
             Members with Ability
         </text>
         <scroll_list
-         enabled="false"
          height="150"
          layout="topleft"
          left="0"
@@ -791,7 +787,6 @@ things in this group. There&apos;s a broad variety of Abilities.
          top="90"
          width="130" />
         <name_list
-         enabled="false"
          height="150"
          layout="topleft"
          left_pad="5"
diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml
new file mode 100644
index 00000000000..169fde7b475
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ bevel_style="in"
+ bg_alpha_color="0.3 0.3 0.3 0"
+ height="140"
+ label="im_panel"
+ layout="topleft"
+ left="0"
+ name="im_panel"
+ top="0"
+ width="350">
+    <panel
+     background_visible="true"
+     bevel_style="in"
+     bg_alpha_color="black"
+     follows="top"
+     height="30"
+     label="im_header"
+     layout="topleft"
+     left="5"
+     name="im_header"
+     top="5"
+     width="340">
+        <avatar_icon
+         follows="right"
+         height="20"
+         image_name="icon_avatar_online.tga"
+         layout="topleft"
+         left="5"
+         mouse_opaque="true"
+         name="avatar"
+         top="5"
+         width="20" />
+        <text
+         follows="left|right"
+         font="SansSerifBigBold"
+         height="20"
+         layout="topleft"
+         left_pad="10"
+         name="user_name"
+         text_color="white"
+         top="5"
+         value="Darth Vader"
+         width="250" />
+        <text
+         follows="right"
+         font="SansSerifBig"
+         height="20"
+         layout="topleft"
+         left_pad="10"
+         name="time_box"
+         text_color="white"
+         top="5"
+         value="23:30"
+         width="50" />
+    </panel>
+    <text
+     follows="left|bottom|right"
+     height="60"
+     layout="topleft"
+     left="10"
+     name="message"
+     text_color="white"
+     top="40"
+     use_ellipses="true"
+     value="MESSAGE"
+     width="330"
+     word_wrap="true" />
+    <button
+     follows="bottom"
+     font="SansSerifBigBold"
+     height="25"
+     label="reply"
+     layout="topleft"
+     left="120"
+     name="reply"
+     top="110"
+     width="110" />
+</panel>
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 f821dcd8396..dee911a45de 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -116,12 +116,12 @@
 	     follows="right|top"
 	     halign="right"
 	     height="22"
-	     label="Search All"
+	     label="Search"
 	     layout="topleft"
 	     left_pad="7"
 	     mouse_opaque="false"
 	     name="search_input"
-	     tool_tip="Search All"
+	     tool_tip="Search"
 	     top_delta="0"
 	     width="200" />        
 	</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml
index 188f405e133..12badfccf0d 100644
--- a/indra/newview/skins/default/xui/en/panel_notes.xml
+++ b/indra/newview/skins/default/xui/en/panel_notes.xml
@@ -9,114 +9,136 @@
  name="panel_notes"
  top="0"
  width="285">
-    <scroll_container
-     color="DkGray2"
-     follows="left|top|right|bottom"
-     height="350"
+    <layout_stack
+     name="layout"
+     orientation="vertical"
+     follows="all"
      layout="topleft"
-     left="2"
-     name="profile_scroll"
-     opaque="true"
+     left="0"
      top="0"
-     width="284">
-      <panel
-		 height="350"
-		 layout="topleft"
-		 name="profile_scroll_panel"
-		 top="0"
-		 width="284">
-        <text
-         follows="left|top"
-         font="SansSerifBold"
-         height="16"
+     height="420"
+     width="285"
+     border_size="0">
+        <panel
+         name="notes_stack"
+         follows="all"
          layout="topleft"
-         left="10"
-         name="status_message"
-         text_color="white"
          top="0"
-         value="My private notes:"
-         width="230" />
-        <text_editor
-         follows="left|top"
-         height="200"
-         hide_scrollbar="true"
-         layout="topleft"
-         left="10"
-         max_length="1000"
-         name="notes_edit"
-         text_color="black"
-         top_pad="10"
-         width="255"
-         word_wrap="true" />
-        <text
-         follows="left|top"
-         font="SansSerifBold"
-         height="16"
-         layout="topleft"
-         left="10"
-         name="status_message2"
-         text_color="white"
-         top_pad="10"
-         value="Let this person:"
-         width="225" />
-        <check_box
-         enabled="false"
-         height="20"
-         label="See my online status"
-         layout="topleft"
-         left="20"
-         name="status_check"
-         top_pad="0"
-         width="230" />
-        <check_box
-         enabled="false"
-         height="20"
-         label="See me on the map"
-         layout="topleft"
-         left="20"
-         name="map_check"
-         top_pad="0"
-         width="230" />
-        <check_box
-         enabled="false"
-         height="20"
-         label="Edit, delete or take my objects"
-         layout="topleft"
-         left="20"
-         name="objects_check"
-         top_pad="0"
-         width="230" />
-      </panel>
-    </scroll_container>
-    <panel
-     follows="bottom|left"
-     height="30"
-     layout="topleft"
-     left="10"
-     name="notes_buttons_panel"
-     top_pad="5"
-     width="280">
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Teleport"
-         layout="topleft"
          left="0"
-         name="teleport_btn"
-         top="0"
-         width="75" />
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Map"
+         height="390"
+         width="285">
+            <scroll_container
+             color="DkGray2"
+             follows="left|top|right|bottom"
+             height="390"
+             layout="topleft"
+             left="0"
+             name="profile_scroll"
+             opaque="true"
+             top="0"
+             width="285">
+              <panel
+                 height="350"
+                 layout="topleft"
+                 name="profile_scroll_panel"
+                 top="0"
+                 left="0"
+                 width="240">
+                <text
+                 follows="left|top"
+                 font="SansSerifBold"
+                 height="16"
+                 layout="topleft"
+                 left="10"
+                 name="status_message"
+                 text_color="white"
+                 top="0"
+                 value="My private notes:"
+                 width="230" />
+                <text_editor
+                 follows="left|top"
+                 height="200"
+                 hide_scrollbar="true"
+                 layout="topleft"
+                 left="10"
+                 max_length="1000"
+                 name="notes_edit"
+                 text_color="black"
+                 top_pad="10"
+                 width="235"
+                 word_wrap="true" />
+                <text
+                 follows="left|top"
+                 font="SansSerifBold"
+                 height="16"
+                 layout="topleft"
+                 left="10"
+                 name="status_message2"
+                 text_color="white"
+                 top_pad="10"
+                 value="Let this person:"
+                 width="225" />
+                <check_box
+                 enabled="false"
+                 height="20"
+                 label="See my online status"
+                 layout="topleft"
+                 left="20"
+                 name="status_check"
+                 top_pad="0"
+                 width="230" />
+                <check_box
+                 enabled="false"
+                 height="20"
+                 label="See me on the map"
+                 layout="topleft"
+                 left="20"
+                 name="map_check"
+                 top_pad="0"
+                 width="230" />
+                <check_box
+                 enabled="false"
+                 height="20"
+                 label="Edit, delete or take my objects"
+                 layout="topleft"
+                 left="20"
+                 name="objects_check"
+                 top_pad="0"
+                 width="230" />
+              </panel>
+            </scroll_container>
+        </panel>
+        <panel
+         follows="bottom"
+         height="30"
          layout="topleft"
-         name="show_on_map_btn"
-         top="0"
-         left_pad="5"
-         width="85" />
-    </panel>
+         left="10"
+         name="notes_buttons_panel"
+         top_pad="5"
+         width="280"
+         auto_resize="false">
+            <button
+             enabled="false"
+             follows="bottom|left"
+             font="SansSerifSmallBold"
+             height="25"
+             label="Teleport"
+             layout="topleft"
+             left="0"
+             name="teleport_btn"
+             top="0"
+             width="75" />
+            <button
+             enabled="false"
+             follows="bottom|left"
+             font="SansSerifSmallBold"
+             height="25"
+             label="Map"
+             layout="topleft"
+             name="show_on_map_btn"
+             top="0"
+             left_pad="5"
+             width="85" />
+        </panel>
+    </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index a62d2a5cdbc..fce31a2c68b 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -102,6 +102,7 @@
                  left="20"
                  name="nearby_view_sort_btn"
                  picture_style="true"
+                 tool_tip="Change sort and view of Residents list"
                  top="7"
                  width="18" />
             </panel>
@@ -195,6 +196,7 @@
                  left="20"
                  name="friends_viewsort_btn"
                  picture_style="true"
+                 tool_tip="Change sort and view of Friends list"
                  top="7"
                  width="18" />
                 <button
@@ -207,6 +209,7 @@
                  left_pad="5"
                  name="add_btn"
                  picture_style="true"
+                 tool_tip="Offer friendship to a resident"
                  top_delta="0"
                  width="18" />
                 <button
@@ -219,6 +222,7 @@
                  left_pad="180"
                  name="del_btn"
                  picture_style="true"
+                 tool_tip="Remove selected person from your Friends list"
                  top_delta="0"
                  width="18" />
             </panel>
@@ -262,6 +266,7 @@
                  left="20"
                  name="gear_btn"
                  picture_style="true"
+                 tool_tip="Change sort and view of Groups list"
                  top="7"
                  width="18" />
                 <button
@@ -274,6 +279,7 @@
                  left_pad="5"
                  name="plus_btn"
                  picture_style="true"
+                 tool_tip="Join group/Create new group"
                  top_delta="0"
                  width="18" />
                 <button
@@ -287,6 +293,7 @@
                  left_pad="24"
                  name="activate_btn"
                  picture_style="true"
+                 tool_tip="Activate selected group"
                  top_delta="5"
                  width="10" />
                 <button
@@ -299,6 +306,7 @@
                  left_pad="146"
                  name="minus_btn"
                  picture_style="true"
+                 tool_tip="Leave selected group"
                  top_delta="-5"
                  width="18" />
             </panel>
@@ -341,6 +349,7 @@
                  left="20"
                  name="recent_viewsort_btn"
                  picture_style="true"
+                 tool_tip="Change sort and view of Residents list"
                  top="7"
                  width="18" />
             </panel>
@@ -372,6 +381,7 @@
              label="Profile"
              layout="topleft"
              name="view_profile_btn"
+             tool_tip="Show picture, groups, and other residents information"
              width="65" />
         </layout_panel>
         <layout_panel
@@ -391,6 +401,7 @@
              label="Add Friend"
              layout="topleft"
              name="add_friend_btn"
+             tool_tip="Add selected resident to your Friends List"
              width="85" />
         </layout_panel>
         <layout_panel
@@ -408,6 +419,7 @@
              label="Group Profile"
              layout="topleft"
              name="group_info_btn"
+             tool_tip="Show group information"
              width="80" />
         </layout_panel>
         <layout_panel
@@ -426,6 +438,7 @@
              label="Chat"
              layout="topleft"
              name="chat_btn"
+             tool_tip="Open chat session"
              width="45" />
         </layout_panel>
         <layout_panel
@@ -444,6 +457,7 @@
              label="IM"
              layout="topleft"
              name="im_btn"
+             tool_tip="Open instant message session"
              width="35" />
         </layout_panel>
         <layout_panel
@@ -482,6 +496,7 @@
              label="Teleport"
              layout="topleft"
              name="teleport_btn"
+             tool_tip="Offer teleport"
              width="65" />
         </layout_panel>
         <layout_panel
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 b4d2bbb1948..c8bde77a948 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -2,7 +2,7 @@
 <panel
  bevel_style="in"
  follows="left|top|right|bottom"
- height="625"
+ height="480"
  layout="topleft"
  left="0"
  name="panel_pick_info"
@@ -16,29 +16,41 @@
      left="10"
      name="title"
      text_color="white"
-     top="5"
+     top="16"
      value="Pick Info"
      width="150" />
     <button
      follows="top|right"
-     height="20"
+     height="25"
      image_overlay="BackArrow_Off"
      layout="topleft"
      name="back_btn"
      picture_style="true"
-     right="-20"
-     top="7"
-     width="20" />
+     right="-11"
+     top="16"
+     width="25" 
+     tab_stop="false" />
+  
+    <scroll_container
+     color="DkGray2"
+     follows="left|top|right|bottom"
+     height="400"
+     layout="topleft"
+     left="0"
+     name="pick_info_scroll"
+     opaque="true"
+     reserve_scroll_corner="true"
+     width="265">
     <panel
      background_visible="true"
      bg_alpha_color="DkGray2"
-     follows="left|right|top|bottom"
+     follows="left|right|top"
      height="550"
      layout="topleft"
      left="0"
-     min_height="300"
-     top="30"
-     width="265">
+     min_height="550"
+     top_pad="0"
+     width="263">
         <texture_picker
          enabled="false"
          follows="left|top|right"
@@ -110,7 +122,16 @@
          text_color="white"
          valign="center"
          value="[loading...]" />
+        <icon
+         follows="top|left"
+         height="15"
+         image_name=""
+         layout="topleft"
+         mouse_opaque="true"
+         name="maturity"
+         width="15" />
     </panel>
+    </scroll_container>
     <panel
      follows="left|right|bottom"
      height="30"
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 47cfd8e1292..ff161cc2abd 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -8,92 +8,105 @@
  name="panel_picks"
  top="0"
  width="285">
-    <scroll_container
-     color="DkGray2"
-     follows="left|top|right|bottom"
-     height="350"
+    <layout_stack
+     name="layout"
+     orientation="vertical"
+     follows="all"
      layout="topleft"
-     left="2"
-     name="profile_scroll"
-     opaque="true"
+     left="0"
      top="0"
-     width="284">
-        <panel
-         height="115"
+     height="420"
+     width="284"
+     border_size="0">
+        <scroll_container
+         color="DkGray2"
+         follows="left|top|right|bottom"
+         height="350"
          layout="topleft"
-         left="0"
-         name="back_panel"
+         left="2"
+         name="profile_scroll"
+         opaque="true"
          top="0"
-         width="284" />
-    </scroll_container>
-    <panel
-     background_visible="true"
-     bevel_style="none"
-     enabled="false"
-     follows="left|right|bottom"
-     height="30"
-     label="bottom_panel"
-     layout="topleft"
-     name="edit_panel"
-     top_pad="5"
-     width="284">
-        <button
+         width="284">
+            <panel
+             height="115"
+             layout="topleft"
+             left="0"
+             name="back_panel"
+             top="0"
+             width="284" />
+        </scroll_container>
+        <panel
+         background_visible="true"
+         bevel_style="none"
          enabled="false"
-         follows="bottom|left"
-         font="SansSerifBigBold"
-         height="18"
-         image_selected="OptionsMenu_Press"
-         image_unselected="OptionsMenu_Off"
-         layout="topleft"
-         left="10"
-         name="gear_menu_btn"
-         picture_style="true"
-         top="5"
-         width="18" />
-        <button
-         follows="bottom|left"
-         font="SansSerifBigBold"
-         height="18"
-         image_disabled="AddItem_Off"
-         image_disabled_selected="AddItem_Press"
-         image_selected="AddItem_Press"
-         image_unselected="AddItem_Off"
+         auto_resize="false"
+         follows="bottom"
+         height="30"
+         label="bottom_panel"
          layout="topleft"
-         left="35"
-         name="new_btn"
-         picture_style="true"
-         tool_tip="Create New Pick at Current Location"
-         top="5"
-         width="18" />
-        <button
-         follows="bottom|right"
-         font="SansSerifBigBold"
-         height="18"
-         image_disabled="TrashItem_Off"
-         image_disabled_selected="TrashItem_Press"
-         image_selected="TrashItem_Press"
-         image_unselected="TrashItem_Off"
-         layout="topleft"
-         name="trash_btn"
-         picture_style="true"
-         right="-10"
-         top="5"
-         width="18" />
-    </panel>
-    <panel
-     follows="bottom|left"
-     height="30"
-     layout="topleft"
-     name="buttons_cucks"
-     width="284">
-        <button
-         enabled="false"
-         follows="bottom|left"
-         font="SansSerifSmallBold"
-         height="25"
-         label="Map"
+         name="edit_panel"
+         top_pad="5"
+         width="284">
+            <button
+             enabled="false"
+             follows="bottom|left"
+             font="SansSerifBigBold"
+             height="18"
+             image_selected="OptionsMenu_Press"
+             image_unselected="OptionsMenu_Off"
+             layout="topleft"
+             left="10"
+             name="gear_menu_btn"
+             picture_style="true"
+             top="5"
+             width="18" />
+            <button
+             follows="bottom|left"
+             font="SansSerifBigBold"
+             height="18"
+             image_disabled="AddItem_Off"
+             image_disabled_selected="AddItem_Press"
+             image_selected="AddItem_Press"
+             image_unselected="AddItem_Off"
+             layout="topleft"
+             left="35"
+             name="new_btn"
+             picture_style="true"
+             tool_tip="Create New Pick at Current Location"
+             top="5"
+             width="18" />
+            <button
+             follows="bottom|right"
+             font="SansSerifBigBold"
+             height="18"
+             image_disabled="TrashItem_Off"
+             image_disabled_selected="TrashItem_Press"
+             image_selected="TrashItem_Press"
+             image_unselected="TrashItem_Off"
+             layout="topleft"
+             name="trash_btn"
+             picture_style="true"
+             right="-10"
+             top="5"
+             width="18" />
+        </panel>
+        <panel
+         follows="bottom"
+         height="30"
+         auto_resize="false"
          layout="topleft"
-         name="show_on_map_btn"
-         width="85" />
-    </panel>
+         name="buttons_cucks"
+         width="284">
+            <button
+             enabled="false"
+             follows="bottom|left"
+             font="SansSerifSmallBold"
+             height="25"
+             label="Map"
+             layout="topleft"
+             name="show_on_map_btn"
+             width="85" />
+        </panel>
+    </layout_stack>
 </panel>
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 6d7cabc5c0c..e7107742324 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -40,33 +40,53 @@
      tab_stop="false"
      top="0"
      width="25" />
-    <tab_container
-     follows="left|top|right|bottom"
-     height="420"
-     layout="topleft"
-     left="10"
-     name="tabs"
-     tab_min_width="75"
-     tab_position="top"
-     top_pad="15"
-     width="285">
-        <panel
-         class="panel_profile"
-         filename="panel_profile.xml"
-         label="Profile"
-         layout="topleft"
-         name="panel_profile" />
-        <panel
-         class="panel_picks"
-         filename="panel_picks.xml"
-         label="Picks"
-         layout="topleft"
-         name="panel_picks" />
-        <panel
-         class="panel_notes"
-         filename="panel_notes.xml"
-         label="Notes &amp; Privacy"
+        <layout_stack
+         name="layout_stack"
+         orientation="vertical"
          layout="topleft"
-         name="panel_notes" />
-    </tab_container>
+         follows="all"
+         left="0"
+         top="50"
+         height="500"
+         width="305" 
+         border_size="0">
+            <panel
+             name="stack_panel"
+             follows="all"
+             layout="topleft"
+             top="0"
+             left="0"
+             height="500"
+             width="305">
+            <tab_container
+             follows="all"
+             height="500"
+             layout="topleft"
+             left="10"
+             name="tabs"
+             tab_min_width="75"
+             tab_position="top"
+             top="0"
+             width="280">
+                <panel
+                 class="panel_profile"
+                 filename="panel_profile.xml"
+                 label="Profile"
+                 layout="topleft"
+                 name="panel_profile" />
+                <panel
+                 class="panel_picks"
+                 filename="panel_picks.xml"
+                 label="Picks"
+                 layout="topleft"
+                 name="panel_picks" />
+                <panel
+                 class="panel_notes"
+                 filename="panel_notes.xml"
+                 label="Notes &amp; Privacy"
+                 layout="topleft"
+                 name="panel_notes" />
+            </tab_container>
+        </panel>
+    </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
index 445c9cc2887..4d91a544c33 100644
--- a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
+++ b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
@@ -15,6 +15,7 @@
      name="stand_btn"
      tool_tip="Click here to stand up."
      top="2"
+     visible="false"
      width="115" />
     <button
      follows="left|bottom"
@@ -24,5 +25,6 @@
      name="stop_fly_btn"
      tool_tip="Stop Flying"
      top="2"
+     visible="false"
      width="115" />
 </panel>
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 3ad5cbe018c..f597211ec9b 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -197,52 +197,6 @@
      top_delta="-3"
      visible="false"
      width="16" />
-    <button
-     follows="right|bottom"
-     height="16"
-     image_disabled="sm_rounded_corners_simple.tga"
-     image_disabled_selected="sm_rounded_corners_simple.tga"
-     image_hover_selected="sm_rounded_corners_simple.tga"
-     image_hover_unselected="sm_rounded_corners_simple.tga"
-     image_selected="sm_rounded_corners_simple.tga"
-     image_unselected="sm_rounded_corners_simple.tga"
-     layout="topleft"
-     left_pad="313"
-     mouse_opaque="false"
-     name="menubar_search_bevel_bg"
-     picture_style="true"
-     top_delta="0"
-     width="94" />
-    <line_editor
-     bevel_style="none"
-     border_style="line"
-     commit_on_focus_lost="false"
-     follows="right|bottom"
-     height="11"
-     label="Search"
-     layout="topleft"
-     left_delta="1"
-     name="search_editor"
-     tab_group="1"
-     tool_tip="Search [SECOND_LIFE]"
-     top_delta="4"
-     width="78" />
-    <button
-     follows="right|bottom"
-     font="SansSerifSmall"
-     height="16"
-     image_disabled="status_search_btn.png"
-     image_disabled_selected="status_search_btn_pressed.png"
-     image_selected="status_search_btn_pressed.png"
-     image_unselected="status_search_btn.png"
-     layout="topleft"
-     left_delta="78"
-     name="search_btn"
-     picture_style="true"
-     scale_image="false"
-     tool_tip="Search [SECOND_LIFE]"
-     top_delta="-4"
-     width="16" />
     <text
      enabled="false"
      follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml
index 3c49ce311a0..3ac15fe550c 100644
--- a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml
@@ -54,6 +54,7 @@
     name="close_btn" 
     mouse_opaque="true"
     label=""
+    tab_stop="false"
     image_unselected="toast_hide_btn.tga" 
     image_disabled="toast_hide_btn.tga"
     image_selected="toast_hide_btn.tga" 
diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml
index f7d8cf948ea..441caffa284 100644
--- a/indra/newview/skins/default/xui/en/panel_toast.xml
+++ b/indra/newview/skins/default/xui/en/panel_toast.xml
@@ -62,6 +62,7 @@
     mouse_opaque="true" 
     name="hide_btn" 
     label="" 
+    tab_stop="false"
     image_unselected="toast_hide_btn.tga" 
     image_disabled="toast_hide_btn.tga"
     image_selected="toast_hide_btn.tga" 
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 655cf2b40f7..df328118a27 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -937,6 +937,11 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
     <string name="tight skirt">tight skirt</string>	
 	<string name="wrinkles">wrinkles</string>	
 	
+    <!-- Favorites Bar -->
+    <string name="location_ctrl_add_landmark">Add to My Landmarks</string>
+    <string name="location_ctrl_edit_landmark">Edit My Landmark</string>
+    <string name="favorite_landmark_loading_tooltip">(Loading...)</string>
+	
 	<!-- Strings used by the (currently Linux) auto-updater app -->
 	<string name="UpdaterWindowTitle">
 	  [SECOND_LIFE_VIEWER] Update
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 b2494512478..8f4d0edf953 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -9,6 +9,8 @@
 <location_input font="SansSerifSmall"
                 add_landmark_image_enabled="Favorite_Star_Active"
                 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"
                 allow_text_entry="true"
                 list_position="below"
-- 
GitLab