diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 0be84e2ab93b1090c2cbe996edbe104f881a4c8f..4286b9165444d8f44279af73464d5964c32d897a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -135,7 +135,6 @@ set(viewer_SOURCE_FILES
     llflexibleobject.cpp
     llfloaterabout.cpp
     llfloateractivespeakers.cpp
-    llfloateraddlandmark.cpp
     llfloateranimpreview.cpp
     llfloaterauction.cpp
     llfloateravatarpicker.cpp
@@ -283,7 +282,6 @@ set(viewer_SOURCE_FILES
     llpanelavatarrow.cpp
     llpanelavatartag.cpp
     llpanelclassified.cpp
-    llsidetraypanelcontainer.cpp
     llpanelcontents.cpp
     llpaneldirbrowser.cpp
     llpaneldirclassified.cpp
@@ -344,6 +342,7 @@ set(viewer_SOURCE_FILES
     llscreenchannel.cpp
     llselectmgr.cpp
     llsidetray.cpp
+    llsidetraypanelcontainer.cpp
     llsky.cpp
     llslurl.cpp
     llspatialpartition.cpp
@@ -577,7 +576,6 @@ set(viewer_HEADER_FILES
     llflexibleobject.h
     llfloaterabout.h
     llfloateractivespeakers.h
-    llfloateraddlandmark.h
     llfloateranimpreview.h
     llfloaterauction.h
     llfloateravatarpicker.h
@@ -724,7 +722,6 @@ set(viewer_HEADER_FILES
     llpanelavatarrow.h
     llpanelavatartag.h
     llpanelclassified.h
-    llsidetraypanelcontainer.h
     llpanelcontents.h
     llpaneldirbrowser.h
     llpaneldirclassified.h
@@ -787,6 +784,7 @@ set(viewer_HEADER_FILES
     llsavedsettingsglue.h
     llselectmgr.h
     llsidetray.h
+    llsidetraypanelcontainer.h
     llsky.h
     llslurl.h
     llspatialpartition.h
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index 81f1beb40d9f5548e538422dd973aa1ff168c6be..8cba42dea5524048bf4330e8f22cdd09e732af77 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -53,6 +53,11 @@ const F32 CAMERA_BUTTON_DELAY = 0.0f;
 #define PAN "cam_track_stick"
 #define CONTROLS "controls"
 
+
+void show_tip(LLFirstTimeTipsManager::EFirstTimeTipType tipType, LLView* anchorView)
+{
+	LLFirstTimeTipsManager::showTipsFor(tipType, anchorView, LLFirstTimeTipsManager::TPA_POS_RIGHT_ALIGN_TOP);
+}
 //
 // Member functions
 //
@@ -93,7 +98,8 @@ void LLFloaterCamera::update()
 {
 	ECameraControlMode mode = determineMode();
 	if (mode != mCurrMode) setMode(mode);
-	LLFirstTimeTipsManager::showTipsFor(mMode2TipType[mode], this);
+	updatePosition();
+	show_tip(mMode2TipType[mode], this);
 }
 
 
@@ -270,7 +276,7 @@ void LLFloaterCamera::onClickBtn(ECameraControlMode mode)
 	
 	switchMode(mode);
 
-	LLFirstTimeTipsManager::showTipsFor(mMode2TipType[mode], mMode2Button[mode]);
+	show_tip(mMode2TipType[mode], this);
 }
 
 void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::string& button_name)
diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp
index 68143fd1e325584a4e6c7e07923c305360ee8178..03d6953521a5e791f6ebe9457ab5277491a77db9 100644
--- a/indra/newview/lllocationhistory.cpp
+++ b/indra/newview/lllocationhistory.cpp
@@ -38,33 +38,58 @@
 
 #include "llui.h"
 
+const char LLLocationHistory::delimiter = '\t';
+
 LLLocationHistory::LLLocationHistory() :
 	mFilename("typed_locations.txt")
 {
 }
 
-void LLLocationHistory::addItem(std::string item)
-{
+void LLLocationHistory::addItem(const std::string & item, const std::string & tooltip) {
 	static LLUICachedControl<S32> max_items("LocationHistoryMaxSize", 100);
-	
-	std::vector<std::string>::iterator item_iter = std::find(mItems.begin(), mItems.end(), item);
 
-	if (item_iter != mItems.end()) {
-		mItems.erase(item_iter);
+	// check if this item doesn't duplicate any existing one
+	if (touchItem(item)) {
+		return;
 	}
 
 	mItems.push_back(item);
+	mToolTips[item] = tooltip;
 
 	// If the vector size exceeds the maximum, purge the oldest items.
-	if ((S32)mItems.size() > max_items)
-		mItems.erase(mItems.begin(), mItems.end()-max_items);
+	if ((S32)mItems.size() > max_items) {
+		for(std::vector<std::string>::iterator i = mItems.begin(); i != mItems.end()-max_items; ++i) {
+			mToolTips.erase(*i);
+			mItems.erase(i);
+		}
+	}
+}
+
+bool LLLocationHistory::touchItem(const std::string & item) {
+	bool result = false;
+	std::vector<std::string>::iterator item_iter = std::find(mItems.begin(), mItems.end(), item);
+
+	// the last used item should be the first in the history
+	if (item_iter != mItems.end()) {
+		mItems.erase(item_iter);
+		mItems.push_back(item);
+		result = true;
+	}
+
+	return result;
 }
 
 void LLLocationHistory::removeItems()
 {
 	mItems.clear();
+	mToolTips.clear();
 }
 
+std::string LLLocationHistory::getToolTip(const std::string & item) const {
+	std::map<std::string, std::string>::const_iterator i = mToolTips.find(item);
+
+	return i != mToolTips.end() ? i->second : "";
+}
 
 bool LLLocationHistory::getMatchingItems(std::string substring, location_list_t& result) const
 {
@@ -110,7 +135,7 @@ void LLLocationHistory::save() const
 	}
 
 	for (location_list_t::const_iterator it = mItems.begin(); it != mItems.end(); ++it)
-		file << (*it) << std::endl;
+		file << (*it) << delimiter << mToolTips.find(*it)->second << std::endl;
 
 	file.close();
 }
@@ -129,13 +154,21 @@ void LLLocationHistory::load()
 		return;
 	}
 	
-	// remove current entries before we load over them
-	mItems.clear();
+	removeItems();
 	
 	// add each line in the file to the list
 	std::string line;
-	while (std::getline(file, line))
-		addItem(line);
+
+	while (std::getline(file, line)) {
+		size_t dp = line.find(delimiter);
+
+		if (dp != std::string::npos) {
+			const std::string reg_name = line.substr(0, dp);
+			const std::string tooltip = line.substr(dp + 1, std::string::npos);
+
+			addItem(reg_name, tooltip);
+		}
+	}
 
 	file.close();
 	
diff --git a/indra/newview/lllocationhistory.h b/indra/newview/lllocationhistory.h
index 19032686c163a9446fe8548dd5b9e520c832c267..67eabcdaca72c64644f56f79500727e4eb505548 100644
--- a/indra/newview/lllocationhistory.h
+++ b/indra/newview/lllocationhistory.h
@@ -37,6 +37,7 @@
 
 #include <vector>
 #include <string>
+#include <map>
 #include <boost/function.hpp>
 
 class LLLocationHistory: public LLSingleton<LLLocationHistory>
@@ -50,8 +51,10 @@ class LLLocationHistory: public LLSingleton<LLLocationHistory>
 	
 	LLLocationHistory();
 	
-	void					addItem(std::string item);
+	void					addItem(const std::string & item, const std::string & tooltip);
+	bool					touchItem(const std::string & item);
 	void                    removeItems();
+	std::string				getToolTip(const std::string & item) const;
 	size_t					getItemCount() const	{ return mItems.size(); }
 	const location_list_t&	getItems() const		{ return mItems; }
 	bool					getMatchingItems(std::string substring, location_list_t& result) const;
@@ -62,9 +65,11 @@ class LLLocationHistory: public LLSingleton<LLLocationHistory>
 	void					dump() const;
 
 private:
-	std::vector<std::string>	mItems;
-	std::string					mFilename; /// File to store the history to.
-	loaded_signal_t				mLoadedSignal;
+	const static char delimiter;
+	std::vector<std::string>			mItems;
+	std::map<std::string, std::string>	mToolTips;
+	std::string							mFilename; /// File to store the history to.
+	loaded_signal_t						mLoadedSignal;
 };
 
 #endif
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 3880ea91eb70d40a0f42cb4517a9249cb3e56ff7..a20296a12252ed23f5e3274d28e638b67c821181 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -234,6 +234,13 @@ BOOL LLLocationInputCtrl::handleToolTip(S32 x, S32 y, std::string& msg, LLRect*
 	// Let the buttons show their tooltips.
 	if (LLUICtrl::handleToolTip(x, y, msg, sticky_rect_screen) && !msg.empty())
 	{
+		LLLocationHistory* lh = LLLocationHistory::getInstance();
+		const std::string tooltip = lh->getToolTip(msg);
+
+		if (!tooltip.empty()) {
+			msg = tooltip;
+		}
+
 		return TRUE;
 	}
 
@@ -347,9 +354,6 @@ void LLLocationInputCtrl::onInfoButtonClicked()
 void LLLocationInputCtrl::onAddLandmarkButtonClicked()
 {
 	LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
-	
-	// Floater "Add Landmark" functionality moved to Side Tray
-	//LLFloaterReg::showInstance("add_landmark");
 }
 
 void LLLocationInputCtrl::onAgentParcelChange()
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 124a2def7f26f67c580b4e49c11d8aa66ee4a33b..96c8f3e2e9f95c3d90bee5bc55eb9a8320de2bea 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -435,7 +435,7 @@ void LLFloaterMove::showQuickTips(const EMovementMode mode)
 	default: llwarns << "Quick Tip type was not detected, FTT_MOVE_WALK will be used" << llendl;
 	}
 
-	LLFirstTimeTipsManager::showTipsFor(tipType, this);
+	LLFirstTimeTipsManager::showTipsFor(tipType, this, LLFirstTimeTipsManager::TPA_POS_LEFT_ALIGN_TOP);
 }
 
 void LLFloaterMove::setModeButtonToggleState(const EMovementMode mode)
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 06cab9afb022dea7897447922e1fe088a08e757d..b980490434ee12678d0308a1fe0ede1186994b13 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -181,10 +181,14 @@ LLNavigationBar::LLNavigationBar()
 	mBtnHome(NULL),
 	mCmbLocation(NULL),
 	mLeSearch(NULL),
-	mPurgeTPHistoryItems(false)
+	mPurgeTPHistoryItems(false),
+	mUpdateTypedLocationHistory(false)
 {
 	setIsChrome(TRUE);
 	
+	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->setAgentParcelChangedCallback(
+			boost::bind(&LLNavigationBar::onTeleportFinished, this));
+
 	// Register callbacks and load the location field context menu (NB: the order matters).
 	mCommitCallbackRegistrar.add("Navbar.Action", boost::bind(&LLNavigationBar::onLocationContextMenuItemClicked, this, _2));
 	mEnableCallbackRegistrar.add("Navbar.EnableMenuItem", boost::bind(&LLNavigationBar::onLocationContextMenuItemEnabled, this, _2));
@@ -200,6 +204,7 @@ LLNavigationBar::LLNavigationBar()
 
 LLNavigationBar::~LLNavigationBar()
 {
+	mParcelMgrConnection.disconnect();
 	sInstance = 0;
 }
 
@@ -324,12 +329,12 @@ void LLNavigationBar::onLocationSelection()
 
 	std::string region_name;
 	LLVector3 local_coords(128, 128, 0);
+	S32 x = 0, y = 0, z = 0;
 
 	// Is the typed location a SLURL?
 	if (LLSLURL::isSLURL(typed_location))
 	{
 		// Yes. Extract region name and local coordinates from it.
-		S32 x = 0, y = 0, z = 0;
 		if (LLURLSimString::parse(LLSLURL::stripProtocol(typed_location), &region_name, &x, &y, &z))
 			local_coords.set(x, y, z);
 		else
@@ -337,8 +342,13 @@ void LLNavigationBar::onLocationSelection()
 	}
 	else
 	{
+		region_name = extractLocalCoordsFromRegName(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;
+		// region_name = typed_location;
 	}
 
 	// Resolve the region name to its global coordinates.
@@ -349,6 +359,32 @@ void LLNavigationBar::onLocationSelection()
 	LLWorldMap::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
 }
 
+void LLNavigationBar::onTeleportFinished() {
+
+	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;
+	}
+}
+
 void LLNavigationBar::onTeleportHistoryChanged()
 {
 	// Update navigation controls.
@@ -415,27 +451,13 @@ void LLNavigationBar::onRegionNameResponse(
 		return;
 	}
 
-	// Location is valid. Add it to the typed locations history.
-	// If user has typed text this variable will contain -1.
-	S32 selected_item = mCmbLocation->getCurrentIndex();
-
-	/*
-	LLLocationHistory* lh = LLLocationHistory::getInstance();
-	lh->addItem(selected_item == -1 ? typed_location : mCmbLocation->getSelectedItemLabel());
-	lh->save();
-	*/
-
 	// Teleport to the location.
 	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);
-
-	LLLocationHistory* lh = LLLocationHistory::getInstance();
-	lh->addItem(selected_item == -1 ? typed_location : mCmbLocation->getSelectedItemLabel());
-	lh->save();
 }
 
 void	LLNavigationBar::showTeleportHistoryMenu()
@@ -474,9 +496,6 @@ void LLNavigationBar::onLocationContextMenuItemClicked(const LLSD& userdata)
 	else if (item == std::string("landmark"))
 	{
 		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
-
-		// Floater "Add Landmark" functionality moved to Side Tray
-		//LLFloaterReg::showInstance("add_landmark");
 	}
 	else if (item == std::string("cut"))
 	{
@@ -546,6 +565,38 @@ 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) {
+	/*
+	 * This regular expression extracts numbers from the following string
+	 * construct: "(num1, num2, num3)", where num1, num2 and num3 are decimal
+	 * numbers. Leading and trailing spaces are also caught by the expression.
+	 */
+	const boost::regex re("\\s*\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)\\s*");
+
+	boost::smatch m;
+	if (boost::regex_search(reg_name, 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);
+		std::string zstr(m[3].first, m[3].second);
+
+		*x = atoi(xstr.c_str());
+		*y = atoi(ystr.c_str());
+		*z = atoi(zstr.c_str());
+
+		return boost::regex_replace(reg_name, re, "");
+	}
+
+	*x = *y = *z = 0;
+
+	return reg_name;
+}
+
 void LLNavigationBar::clearHistoryCache()
 {
 	mCmbLocation->removeall();
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 17a1438912d5c11716bed618a0c3af63e37b487a..1c93a05348b0b67a9be1db1602efec5ef2b38475 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -68,6 +68,9 @@ 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);
+
 	// callbacks
 	bool onLocationContextMenuItemEnabled(const LLSD& userdata);
 	void onLocationContextMenuItemClicked(const LLSD& userdata);
@@ -81,6 +84,7 @@ class LLNavigationBar
 	void onLocationSelection();
 	void onLocationPrearrange(const LLSD& data);
 	void onSearchCommit();
+	void onTeleportFinished();
 	void onRegionNameResponse(
 			std::string typed_location,
 			std::string region_name,
@@ -90,14 +94,16 @@ class LLNavigationBar
 
 	static LLNavigationBar *sInstance;
 	
-	LLMenuGL*				mLocationContextMenu;
-	LLMenuGL*				mTeleportHistoryMenu;
-	LLButton*				mBtnBack;
-	LLButton*				mBtnForward;
-	LLButton*				mBtnHome;
-	LLSearchEditor*			mLeSearch;
-	LLLocationInputCtrl*	mCmbLocation;
-	bool					mPurgeTPHistoryItems;
+	LLMenuGL*					mLocationContextMenu;
+	LLMenuGL*					mTeleportHistoryMenu;
+	LLButton*					mBtnBack;
+	LLButton*					mBtnForward;
+	LLButton*					mBtnHome;
+	LLSearchEditor*				mLeSearch;
+	LLLocationInputCtrl*		mCmbLocation;
+	boost::signals2::connection	mParcelMgrConnection;
+	bool						mPurgeTPHistoryItems;
+	bool						mUpdateTypedLocationHistory;
 };
 
 #endif
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 40275be82fa0ff243bc8195691508bb6f1a8c25b..a2d491c2cffdf68b475f753a23b9e8374ae68133 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -67,7 +67,10 @@ LLPanelPlaceInfo::LLPanelPlaceInfo()
 	mRequestedID(),
 	mPosRegion(),
 	mLandmarkID(),
-	mMinHeight(0)
+	mMinHeight(0),
+	mScrollingPanel(NULL),
+	mInfoPanel(NULL),
+	mMediaPanel(NULL)
 {}
 
 LLPanelPlaceInfo::~LLPanelPlaceInfo()
@@ -110,9 +113,10 @@ BOOL LLPanelPlaceInfo::postBuild()
 	mMinHeight = scroll_container->getScrolledViewRect().getHeight();
 
 	mScrollingPanel = getChild<LLPanel>("scrolling_panel");
-
-	mInfoPanel = getChild<LLPanel>("info_panel", TRUE, FALSE);
-	mMediaPanel = getChild<LLMediaPanel>("media_panel", TRUE, FALSE);
+	mInfoPanel = getChild<LLPanel>("info_panel");
+	mMediaPanel = getChild<LLMediaPanel>("media_panel");
+	if (!(mMediaPanel && mInfoPanel && mScrollingPanel))
+		return FALSE;
 
 	return TRUE;
 }
@@ -240,12 +244,20 @@ void LLPanelPlaceInfo::setInfoType(INFO_TYPE type)
 	if (!mInfoPanel)
 	    return;
 
+	if (type != PLACE)
+		toggleMediaPanel(FALSE);
+	
+	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);
+	}
+
 	switch(type)
 	{
 		case CREATE_LANDMARK:
 			mCurrentTitle = getString("title_create_landmark");
-
-			toggleMediaPanel(FALSE);
 		break;
 
 		case PLACE:
@@ -261,14 +273,10 @@ void LLPanelPlaceInfo::setInfoType(INFO_TYPE type)
 		// a landmark or a teleport history item
 		case LANDMARK:
 			mCurrentTitle = getString("title_landmark");
-
-			toggleMediaPanel(FALSE);
 		break;
-		
+
 		case TELEPORT_HISTORY:
 			mCurrentTitle = getString("title_place");
- 
-			toggleMediaPanel(FALSE);
 		break;
 	}
 }
@@ -383,7 +391,7 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 	
 	if (mCurrentTitle != getString("title_landmark"))
 	{
-		mTitleEditor->setText(parcel_data.name + "; " + name);
+		mTitleEditor->setText(parcel_data.name);
 		mNotesEditor->setText(LLStringUtil::null);
 	}
 }
@@ -499,7 +507,7 @@ void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id)
 	// If typed name is empty use the parcel name instead.
 	if (name.empty())
 	{
-		name = mParcelName->getText() + "; " + mRegionName->getText();
+		name = mParcelName->getText();
 	}
 
 	LLStringUtil::replaceChar(desc, '\n', ' ');
@@ -510,7 +518,7 @@ void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id)
 
 void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent)
 {
-	if (mMinHeight > 0)
+	if (mMinHeight > 0 && mScrollingPanel != NULL)
 	{
 		mScrollingPanel->reshape(mScrollingPanel->getRect().getWidth(), mMinHeight);
 	}
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 31b2d01dcfeb65f3946b94a18c491390f75ee500..59768979709f2f09668213d1131e8abae9068aec 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -106,6 +106,9 @@ BOOL LLPanelPlaces::postBuild()
 
 	mOverflowBtn = getChild<LLButton>("overflow_btn");
 
+	// *TODO: Assign the action to an appropriate event.
+	mOverflowBtn->setClickedCallback(boost::bind(&LLPanelPlaces::toggleMediaPanel, this));
+
 	mTabContainer = getChild<LLTabContainer>("Places Tabs");
 	if (mTabContainer)
 	{
@@ -118,17 +121,14 @@ BOOL LLPanelPlaces::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2));
 	}
 
-	mPlaceInfo = getChild<LLPanelPlaceInfo>("panel_place_info", TRUE, FALSE);
-	if (mPlaceInfo)
+	mPlaceInfo = getChild<LLPanelPlaceInfo>("panel_place_info");
+	if (!mPlaceInfo)
+		return FALSE;
+	
+	LLButton* back_btn = mPlaceInfo->getChild<LLButton>("back_btn");
+	if (back_btn)
 	{
-		LLButton* back_btn = mPlaceInfo->getChild<LLButton>("back_btn");
-		if (back_btn)
-		{
-			back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
-		}
-
-		// *TODO: Assign the action to an appropriate event.
-		mOverflowBtn->setClickedCallback(boost::bind(&LLPanelPlaces::toggleMediaPanel, this));
+		back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
 	}
 
 	return TRUE;
@@ -136,7 +136,7 @@ BOOL LLPanelPlaces::postBuild()
 
 void LLPanelPlaces::onOpen(const LLSD& key)
 {
-	if(key.size() == 0)
+	if(mPlaceInfo == NULL || key.size() == 0)
 		return;
 
 	mPlaceInfoType = key["type"].asString();
@@ -201,6 +201,9 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 
 void LLPanelPlaces::setItem(LLInventoryItem* item)
 {
+	if (!mPlaceInfo)
+		return;
+
 	mItem = item;
 	
 	// If the item is a link get a linked item
@@ -224,6 +227,9 @@ void LLPanelPlaces::setItem(LLInventoryItem* item)
 
 void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark)
 {
+	if (!mPlaceInfo)
+		return;
+
 	LLUUID region_id;
 	landmark->getRegionID(region_id);
 	LLVector3d pos_global;
@@ -263,11 +269,6 @@ void LLPanelPlaces::onShareButtonClicked()
 	// TODO: Launch the "Things" Share wizard
 }
 
-void LLPanelPlaces::onAddLandmarkButtonClicked()
-{
-	LLFloaterReg::showInstance("add_landmark");
-}
-
 void LLPanelPlaces::onCopySLURLButtonClicked()
 {
 	mActivePanel->onCopySLURL();
@@ -276,6 +277,9 @@ void LLPanelPlaces::onCopySLURLButtonClicked()
 
 void LLPanelPlaces::onTeleportButtonClicked()
 {
+	if (!mPlaceInfo)
+		return;
+
 	if (mPlaceInfo->getVisible())
 	{
 		if (mPlaceInfoType == "landmark")
@@ -302,6 +306,9 @@ void LLPanelPlaces::onTeleportButtonClicked()
 
 void LLPanelPlaces::onShowOnMapButtonClicked()
 {
+	if (!mPlaceInfo)
+		return;
+
 	if (mPlaceInfo->getVisible())
 	{
 		LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
@@ -430,6 +437,9 @@ void LLPanelPlaces::changed(U32 mask)
 
 void LLPanelPlaces::onAgentParcelChange()
 {
+	if (!mPlaceInfo)
+		return;
+
 	if (mPlaceInfo->getVisible() && (mPlaceInfoType == "agent" || mPlaceInfoType == "create_landmark"))
 	{
 		onOpen(LLSD().insert("type", mPlaceInfoType));
@@ -442,6 +452,9 @@ void LLPanelPlaces::onAgentParcelChange()
 
 void LLPanelPlaces::updateVerbs()
 {
+	if (!mPlaceInfo)
+		return;
+
 	bool is_place_info_visible = mPlaceInfo->getVisible();
 	bool is_agent_place_info_visible = mPlaceInfoType == "agent";
 	bool is_create_landmark_visible = mPlaceInfoType == "create_landmark";
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index 695c78cfbaf393b46aed84f9bfeda675594c77ed..431c8168d907af34bb8f5367a62af6b3d53e0db2 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -66,7 +66,6 @@ class LLPanelPlaces : public LLPanel, LLInventoryObserver
 	void onFilterEdit(const std::string& search_string);
 	void onTabSelected();
 
-	//void onAddLandmarkButtonClicked();
 	//void onCopySLURLButtonClicked();
 	//void onShareButtonClicked();
 	void onTeleportButtonClicked();
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
index a205b913abfabbbd8dc4b1e75c4673dad9bf520b..579f41eac82bb00affeac7f2cc9d27619b0780b5 100644
--- a/indra/newview/llscreenchannel.h
+++ b/indra/newview/llscreenchannel.h
@@ -59,36 +59,55 @@ class LLScreenChannel : public LLUICtrl
 	LLScreenChannel();
 	virtual ~LLScreenChannel();
 
+	// Channel's outfit-functions
+	// classic reshape
 	void		reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
-
-	LLToast*	addToast(LLUUID id, LLPanel* panel, bool is_not_tip = true);
+	// initialization of channel's shape and position
 	void		init(S32 channel_left, S32 channel_right);
+	// set allignment of toasts inside a channel
+	void		setToastAlignment(e_notification_toast_alignment align) {mToastAlignment = align;}
+	// set a template for a string in the OverflowToast
+	void		setOverflowFormatString ( std::string str)  { mOverflowFormatString = str; }
 	
+	// Operating with toasts
+	// add a toast to a channel
+	LLToast*	addToast(LLUUID id, LLPanel* panel, bool is_not_tip = true);
+	// kill or modify a toast by its ID
 	void		killToastByNotificationID(LLUUID id);
 	void		modifyToastByNotificationID(LLUUID id, LLPanel* panel);
-	
-	void		setToastAlignment(e_notification_toast_alignment align) {mToastAlignment = align;}
-
-	void		setControlHovering(bool control) { mControlHovering = control; }
-	void		setHovering(bool hovering) { mIsHovering = hovering; }
-
+	// hide all toasts from screen, but not remove them from a channel
+	void		hideToastsFromScreen();
+	// removes all toasts from a channel
 	void		removeToastsFromChannel();
+	// show all toasts in a channel
+	void		showToasts();
+	//
+	void		loadStoredToastsToChannel();
+	// 
 	void 		closeUnreadToastsPanel();
-	void		hideToastsFromScreen();
 
+	// Channel's behavior-functions
+	// set whether a channel will control hovering inside itself or not
+	void		setControlHovering(bool control) { mControlHovering = control; }
+	// set Hovering flag for a channel
+	void		setHovering(bool hovering) { mIsHovering = hovering; }
+	// set whether a channel will store faded toasts or not
 	void		setStoreToasts(bool store) { mStoreToasts = store; }
-	void		loadStoredToastsToChannel();
-	
-	void		showToasts();
+	// tell all channels that the StartUp toast was shown and allow them showing of toasts
+	static void	setStartUpToastShown() { mWasStartUpToastShown = true; }
 
+	// Channel's other interface functions functions
 	S32			getNumberOfHiddenToasts() { return mHiddenToastsNum;}
+	// TODO: split StartUp and Overflow toasts
 	void		setNumberOfHiddenToasts(S32 num) { mHiddenToastsNum = num;}
-
-	static void	setStartUpToastShown() { mWasStartUpToastShown = true; }
-
 	e_notification_toast_alignment getToastAlignment() {return mToastAlignment;}
 
-	void		setOverflowFormatString ( std::string str)  { mOverflowFormatString = str; }
+	// Channel's callbacks
+	// callback for storing of faded toasts
+	typedef boost::function<void (LLPanel* info_panel, const LLUUID id)> store_tost_callback_t;
+	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); }
 
 private:
 	struct ToastElem
@@ -117,31 +136,38 @@ class LLScreenChannel : public LLUICtrl
 		}
 	};
 
+	// Channel's handlers
 	void	onToastHover(LLToast* toast, bool mouse_enter);
-
 	void	onToastFade(LLToast* toast);
+	void	onOverflowToastHide();
+
+	//
 	void	storeToast(ToastElem& toast_elem);
 	
+	// show-functions depending on allignment of toasts
 	void	showToastsBottom();
 	void	showToastsCentre();
 	void	showToastsTop();
 	
+	// create the OverflowToast
 	void	createOverflowToast(S32 bottom, F32 timer);
-	void	onOverflowToastHide();
 
+	// Channel's flags
 	static bool	mWasStartUpToastShown;
 	bool		mControlHovering;
 	bool		mIsHovering;
 	bool		mStoreToasts;
 	bool		mOverflowToastHidden;
-	S32			mHiddenToastsNum;
-	LLToast*	mUnreadToastsPanel;
-	std::vector<ToastElem>	mToastList;
-	std::vector<ToastElem>	mStoredToastList;
+	// 
 	e_notification_toast_alignment	mToastAlignment;
-	std::map<LLToast*, bool>	mToastEventStack;
 
+	S32			mHiddenToastsNum;
+	LLToast*	mUnreadToastsPanel;
 	std::string mOverflowFormatString;
+
+	std::vector<ToastElem>		mToastList;
+	std::vector<ToastElem>		mStoredToastList;
+	std::map<LLToast*, bool>	mToastEventStack;
 };
 
 }
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 9c29131defc5d756bfd8ec9ea39f0c6baae6fa98..f573a0858b4adf210e53a285456f3736e003cc3c 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -40,7 +40,6 @@
 #include "llcompilequeue.h"
 #include "llfloaterabout.h"
 #include "llfloateractivespeakers.h"
-#include "llfloateraddlandmark.h"
 #include "llfloateranimpreview.h"
 #include "llfloaterauction.h"
 #include "llfloateravatarpicker.h"
@@ -129,7 +128,6 @@ void LLViewerFloaterReg::registerFloaters()
 	
 	LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLand>);
 	LLFloaterReg::add("active_speakers", "floater_active_speakers.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterActiveSpeakers>);
-	LLFloaterReg::add("add_landmark", "floater_add_landmark.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAddLandmark>);
 	LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>);
 	LLFloaterReg::add("avatar_picker", "floater_avatar_picker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarPicker>);
 	LLFloaterReg::add("avatar_textures", "floater_avatar_textures.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarTextures>);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index cbaee2ac707760722bee4fc65e6cf63b23391f9a..3af85a82c9cb38bb69b7bf1b357e4803764f7838 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -5280,9 +5280,7 @@ class LLWorldCreateLandmark : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
-			
-		// Floater "Add Landmark" functionality moved to Side Tray
-		//LLFloaterReg::showInstance("add_landmark");
+
 		return true;
 	}
 };