diff --git a/indra/llmath/llinterp.h b/indra/llmath/llinterp.h
index 8beeef480b5dabd0fe80dfb6aa986974df0ef6b1..36ca2e98655716df965324273568f0cfd80f3b45 100644
--- a/indra/llmath/llinterp.h
+++ b/indra/llmath/llinterp.h
@@ -32,6 +32,13 @@
 #ifndef LL_LLINTERP_H
 #define LL_LLINTERP_H
 
+#if defined(LL_WINDOWS)
+// macro definitions for common math constants (e.g. M_PI) are declared under the _USE_MATH_DEFINES
+// on Windows system.
+// So, let's define _USE_MATH_DEFINES before including math.h
+	#define _USE_MATH_DEFINES
+#endif
+
 #include "math.h"
 
 // Class from which different types of interpolators can be derived
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 2911a35581b86944901167a2e26bb4eeea0dbec5..568ac4164ac154db08c1c45cc3e3a2d560ff2b44 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -159,19 +159,19 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
 			buffer = llformat("%.100s", parcel_name.c_str());
 			break;
 		case LOCATION_FORMAT_NORMAL:
-			buffer = llformat("%s, %s", region_name.c_str(), parcel_name.c_str());
+			buffer = llformat("%s, %s", parcel_name.c_str(), region_name.c_str());
 			break;
 		case LOCATION_FORMAT_WITHOUT_SIM:
 			buffer = llformat("%s, %s (%d, %d, %d)",
-				region_name.c_str(),
 				parcel_name.c_str(),
+				region_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(),
+				region_name.c_str(),
 				pos_x, pos_y, pos_z,
 				sim_access_string.empty() ? "" : " - ",
 				sim_access_string.c_str());
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 0ee3e784095094fef1f601fb2824973bd14431e7..46902006a61ce00318009a42a3c11d4fe43e35a9 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -195,14 +195,6 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)
 	{
 		LLIconCtrl::setValue("default_profile_picture.j2c");
 	}
-
-	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
-
-	registrar.add("AvatarIcon.Action", boost::bind(&LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked, this, _2));
-
-	LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-
-	mPopupMenuHandle = menu->getHandle();
 }
 
 LLAvatarIconCtrl::~LLAvatarIconCtrl()
@@ -212,8 +204,6 @@ LLAvatarIconCtrl::~LLAvatarIconCtrl()
 		LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId, this);
 		// Name callbacks will be automatically disconnected since LLUICtrl is trackable
 	}
-
-	LLView::deleteViewByHandle(mPopupMenuHandle);
 }
 
 //virtual
@@ -295,32 +285,6 @@ void LLAvatarIconCtrl::processProperties(void* data, EAvatarProcessorType type)
 	}
 }
 
-BOOL LLAvatarIconCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
-{
-	LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandle.get();
-
-	if(menu)
-	{
-		bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarId) != NULL;
-		
-		menu->setItemEnabled("Add Friend", !is_friend);
-		menu->setItemEnabled("Remove Friend", is_friend);
-
-		if(gAgentID == mAvatarId)
-		{
-			menu->setItemEnabled("Add Friend", false);
-			menu->setItemEnabled("Send IM", false);
-			menu->setItemEnabled("Remove Friend", false);
-		}
-
-		menu->buildDrawLabels();
-		menu->updateParent(LLMenuGL::sMenuContainer);
-		LLMenuGL::showPopup(this, menu, x, y);
-	}
-
-	return TRUE;
-}
-
 void LLAvatarIconCtrl::nameUpdatedCallback(
 	const LLUUID& id,
 	const std::string& first,
@@ -338,40 +302,3 @@ void LLAvatarIconCtrl::nameUpdatedCallback(
 		}
 	}
 }
-
-void LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked(const LLSD& userdata)
-{
-	std::string level = userdata.asString();
-	LLUUID id = getAvatarId();
-
-	if (level == "profile")
-	{
-		LLAvatarActions::showProfile(id);
-	}
-	else if (level == "im")
-	{
-		std::string name;
-		name.assign(getFirstName());
-		name.append(" ");
-		name.append(getLastName());
-
-		LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
-		if (session_id != LLUUID::null)
-		{
-			LLIMFloater::show(session_id);
-		}
-	}
-	else if (level == "add")
-	{
-		std::string name;
-		name.assign(getFirstName());
-		name.append(" ");
-		name.append(getLastName());
-
-		LLAvatarActions::requestFriendshipDialog(id, name);
-	}
-	else if (level == "remove")
-	{
-		LLAvatarActions::removeFriendDialog(id);
-	}
-}
diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h
index 65b5c86ed54302a26fc203f113642d46fcd6cf33..5eb830df4bc0326be0ca498c5dd4a981b7282986 100644
--- a/indra/newview/llavatariconctrl.h
+++ b/indra/newview/llavatariconctrl.h
@@ -81,8 +81,6 @@ class LLAvatarIconCtrl
 	LLAvatarIconCtrl(const Params&);
 	friend class LLUICtrlFactory;
 
-	void onAvatarIconContextMenuItemClicked(const LLSD& userdata);
-
 public:
 	virtual ~LLAvatarIconCtrl();
 
@@ -91,8 +89,6 @@ class LLAvatarIconCtrl
 	// LLAvatarPropertiesProcessor observer trigger
 	virtual void processProperties(void* data, EAvatarProcessorType type);
 
-	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
-
 	void nameUpdatedCallback(
 		const LLUUID& id,
 		const std::string& first,
@@ -109,7 +105,6 @@ class LLAvatarIconCtrl
 	LLUUID				mAvatarId;
 	std::string			mFirstName;
 	std::string			mLastName;
-	LLHandle<LLView>	mPopupMenuHandle;
 	bool				mDrawTooltip;
 
 
diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp
index 73e24ca8e76f2eaa57627fd6515ab0d94cc1b8d2..7cda2d31e66ec154a91874b993a04e6913b0acaa 100644
--- a/indra/newview/llavatarpropertiesprocessor.cpp
+++ b/indra/newview/llavatarpropertiesprocessor.cpp
@@ -158,6 +158,11 @@ void LLAvatarPropertiesProcessor::sendAvatarTexturesRequest(const LLUUID& avatar
 	removePendingRequest(avatar_id, APT_TEXTURES);
 }
 
+void LLAvatarPropertiesProcessor::sendAvatarClassifiedsRequest(const LLUUID& avatar_id)
+{
+	sendGenericRequest(avatar_id, APT_CLASSIFIEDS, "avatarclassifiedsrequest");
+}
+
 void LLAvatarPropertiesProcessor::sendAvatarPropertiesUpdate(const LLAvatarData* avatar_props)
 {
 	llinfos << "Sending avatarinfo update" << llendl;
@@ -284,12 +289,60 @@ void LLAvatarPropertiesProcessor::processAvatarInterestsReply(LLMessageSystem* m
 */
 }
 
-void LLAvatarPropertiesProcessor::processAvatarClassifiedReply(LLMessageSystem* msg, void**)
+void LLAvatarPropertiesProcessor::processAvatarClassifiedsReply(LLMessageSystem* msg, void**)
 {
-	// avatarclassifiedsrequest is not sent according to new UI design but
-	// keep this method according to resolved issues. 
+	LLAvatarClassifieds classifieds;
+
+	msg->getUUID(_PREHASH_AgentData, _PREHASH_AgentID, classifieds.agent_id);
+	msg->getUUID(_PREHASH_AgentData, _PREHASH_TargetID, classifieds.target_id);
+
+	S32 block_count = msg->getNumberOfBlocks(_PREHASH_Data);
+
+	for(int n = 0; n < block_count; ++n)
+	{
+		LLAvatarClassifieds::classified_data data;
+
+		msg->getUUID(_PREHASH_Data, _PREHASH_ClassifiedID, data.classified_id, n);
+		msg->getString(_PREHASH_Data, _PREHASH_Name, data.name, n);
+
+		classifieds.classifieds_list.push_back(data);
+	}
+
+	LLAvatarPropertiesProcessor* self = getInstance();
+	// Request processed, no longer pending
+	self->removePendingRequest(classifieds.target_id, APT_CLASSIFIEDS);
+	self->notifyObservers(classifieds.target_id,&classifieds,APT_CLASSIFIEDS);
 }
 
+void LLAvatarPropertiesProcessor::processClassifiedInfoReply(LLMessageSystem* msg, void**)
+{
+	LLAvatarClassifiedInfo c_info;
+
+	msg->getUUID(_PREHASH_AgentData, _PREHASH_AgentID, c_info.agent_id);
+
+	msg->getUUID(_PREHASH_Data, _PREHASH_ClassifiedID, c_info.classified_id);
+	msg->getUUID(_PREHASH_Data, _PREHASH_CreatorID, c_info.creator_id);
+	msg->getU32(_PREHASH_Data, _PREHASH_CreationDate, c_info.creation_date);
+	msg->getU32(_PREHASH_Data, _PREHASH_ExpirationDate, c_info.expiration_date);
+	msg->getU32(_PREHASH_Data, _PREHASH_Category, c_info.category);
+	msg->getString(_PREHASH_Data, _PREHASH_Name, c_info.name);
+	msg->getString(_PREHASH_Data, _PREHASH_Desc, c_info.description);
+	msg->getUUID(_PREHASH_Data, _PREHASH_ParcelID, c_info.parcel_id);
+	msg->getU32(_PREHASH_Data, _PREHASH_ParentEstate, c_info.parent_estate);
+	msg->getUUID(_PREHASH_Data, _PREHASH_SnapshotID, c_info.snapshot_id);
+	msg->getString(_PREHASH_Data, _PREHASH_SimName, c_info.sim_name);
+	msg->getVector3d(_PREHASH_Data, _PREHASH_PosGlobal, c_info.pos_global);
+	msg->getString(_PREHASH_Data, _PREHASH_ParcelName, c_info.parcel_name);
+	msg->getU8(_PREHASH_Data, _PREHASH_ClassifiedFlags, c_info.flags);
+	msg->getS32(_PREHASH_Data, _PREHASH_PriceForListing, c_info.price_for_listing);
+
+	LLAvatarPropertiesProcessor* self = getInstance();
+	// Request processed, no longer pending
+	self->removePendingRequest(c_info.creator_id, APT_CLASSIFIED_INFO);
+	self->notifyObservers(c_info.creator_id, &c_info, APT_CLASSIFIED_INFO);
+}
+
+
 void LLAvatarPropertiesProcessor::processAvatarNotesReply(LLMessageSystem* msg, void**)
 {
 	LLAvatarNotes avatar_notes;
@@ -451,6 +504,22 @@ void LLAvatarPropertiesProcessor::sendPickDelete( const LLUUID& pick_id )
 	LLAgentPicksInfo::getInstance()->decrementNumberOfPicks();
 }
 
+void LLAvatarPropertiesProcessor::sendClassifiedDelete(const LLUUID& classified_id)
+{
+	LLMessageSystem* msg = gMessageSystem; 
+
+	msg->newMessage(_PREHASH_ClassifiedDelete);
+
+	msg->nextBlock(_PREHASH_AgentData);
+	msg->addUUID(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUID(_PREHASH_SessionID, gAgent.getSessionID());
+
+	msg->nextBlock(_PREHASH_Data);
+	msg->addUUID(_PREHASH_ClassifiedID, classified_id);
+
+	gAgent.sendReliableMessage();
+}
+
 void LLAvatarPropertiesProcessor::sendPickInfoUpdate(const LLPickData* new_pick)
 {
 	if (!new_pick) return;
@@ -485,6 +554,36 @@ void LLAvatarPropertiesProcessor::sendPickInfoUpdate(const LLPickData* new_pick)
 	LLAgentPicksInfo::getInstance()->requestNumberOfPicks();
 }
 
+void LLAvatarPropertiesProcessor::sendClassifiedInfoUpdate(const LLAvatarClassifiedInfo* c_data)
+{
+	if(!c_data)
+	{
+		return;
+	}
+
+	LLMessageSystem* msg = gMessageSystem;
+
+	msg->newMessage(_PREHASH_ClassifiedInfoUpdate);
+
+	msg->nextBlock(_PREHASH_AgentData);
+	msg->addUUID(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUID(_PREHASH_SessionID, gAgent.getSessionID());
+
+	msg->nextBlock(_PREHASH_Data);
+	msg->addUUID(_PREHASH_ClassifiedID, c_data->classified_id);
+	msg->addU32(_PREHASH_Category, c_data->category);
+	msg->addString(_PREHASH_Name, c_data->name);
+	msg->addString(_PREHASH_Desc, c_data->description);
+	msg->addUUID(_PREHASH_ParcelID, c_data->parcel_id);
+	msg->addU32(_PREHASH_ParentEstate, 0);
+	msg->addUUID(_PREHASH_SnapshotID, c_data->snapshot_id);
+	msg->addVector3d(_PREHASH_PosGlobal, c_data->pos_global);
+	msg->addU8(_PREHASH_ClassifiedFlags, c_data->flags);
+	msg->addS32(_PREHASH_PriceForListing, c_data->price_for_listing);
+
+	gAgent.sendReliableMessage();
+}
+
 void LLAvatarPropertiesProcessor::sendPickInfoRequest(const LLUUID& creator_id, const LLUUID& pick_id)
 {
 	// Must ask for a pick based on the creator id because
@@ -495,6 +594,21 @@ void LLAvatarPropertiesProcessor::sendPickInfoRequest(const LLUUID& creator_id,
 	send_generic_message("pickinforequest", request_params);
 }
 
+void LLAvatarPropertiesProcessor::sendClassifiedInfoRequest(const LLUUID& classified_id)
+{
+	LLMessageSystem* msg = gMessageSystem;
+
+	msg->newMessage(_PREHASH_ClassifiedInfoRequest);
+	msg->nextBlock(_PREHASH_AgentData);
+	
+	msg->addUUID(_PREHASH_AgentID, gAgent.getID());
+	msg->addUUID(_PREHASH_SessionID, gAgent.getSessionID());
+
+	msg->nextBlock(_PREHASH_Data);
+	msg->addUUID(_PREHASH_ClassifiedID, classified_id);
+
+	gAgent.sendReliableMessage();
+}
 
 bool LLAvatarPropertiesProcessor::isPendingRequest(const LLUUID& avatar_id, EAvatarProcessorType type)
 {
diff --git a/indra/newview/llavatarpropertiesprocessor.h b/indra/newview/llavatarpropertiesprocessor.h
index e6563024b28651c4e8f7c9c1c578cee4e013545d..716c1b8065869026c2026d7b54c296df45193b2d 100644
--- a/indra/newview/llavatarpropertiesprocessor.h
+++ b/indra/newview/llavatarpropertiesprocessor.h
@@ -53,7 +53,9 @@ enum EAvatarProcessorType
 	APT_GROUPS,
 	APT_PICKS,
 	APT_PICK_INFO,
-	APT_TEXTURES
+	APT_TEXTURES,
+	APT_CLASSIFIEDS,
+	APT_CLASSIFIED_INFO
 };
 
 struct LLAvatarData
@@ -136,6 +138,43 @@ struct LLAvatarGroups
 	};
 };
 
+struct LLAvatarClassifieds
+{
+	LLUUID agent_id;
+	LLUUID target_id;
+
+	struct classified_data;
+	typedef std::list<classified_data> classifieds_list_t;
+
+	classifieds_list_t classifieds_list;
+
+	struct classified_data
+	{
+		LLUUID classified_id;
+		std::string name;
+	};
+};
+
+struct LLAvatarClassifiedInfo
+{
+	LLUUID agent_id;
+	LLUUID classified_id;
+	LLUUID creator_id;
+	U32 creation_date;
+	U32 expiration_date;
+	U32 category;
+	std::string name;
+	std::string description;
+	LLUUID parcel_id;
+	U32 parent_estate;
+	LLUUID snapshot_id;
+	std::string sim_name;
+	LLVector3d pos_global;
+	std::string parcel_name;
+	U8 flags;
+	S32 price_for_listing;
+};
+
 class LLAvatarPropertiesObserver
 {
 public:
@@ -162,20 +201,27 @@ class LLAvatarPropertiesProcessor
 	void sendAvatarNotesRequest(const LLUUID& avatar_id);
 	void sendAvatarGroupsRequest(const LLUUID& avatar_id);
 	void sendAvatarTexturesRequest(const LLUUID& avatar_id);
+	void sendAvatarClassifiedsRequest(const LLUUID& avatar_id);
 
 	// Duplicate pick info requests are not suppressed.
 	void sendPickInfoRequest(const LLUUID& creator_id, const LLUUID& pick_id);
 
+	void sendClassifiedInfoRequest(const LLUUID& classified_id);
+
 	void sendAvatarPropertiesUpdate(const LLAvatarData* avatar_props);
 
 	void sendPickInfoUpdate(const LLPickData* new_pick);
 
+	void sendClassifiedInfoUpdate(const LLAvatarClassifiedInfo* c_data);
+
 	void sendFriendRights(const LLUUID& avatar_id, S32 rights);
 
 	void sendNotes(const LLUUID& avatar_id, const std::string notes);
 
 	void sendPickDelete(const LLUUID& pick_id);
 
+	void sendClassifiedDelete(const LLUUID& classified_id);
+
 	// Returns translated, human readable string for account type, such
 	// as "Resident" or "Linden Employee".  Used for profiles, inspectors.
 	static std::string accountType(const LLAvatarData* avatar_data);
@@ -189,7 +235,9 @@ class LLAvatarPropertiesProcessor
 
 	static void processAvatarInterestsReply(LLMessageSystem* msg, void**);
 
-	static void processAvatarClassifiedReply(LLMessageSystem* msg, void**);
+	static void processAvatarClassifiedsReply(LLMessageSystem* msg, void**);
+
+	static void processClassifiedInfoReply(LLMessageSystem* msg, void**);
 
 	static void processAvatarGroupsReply(LLMessageSystem* msg, void**);
 
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index c200a97058826779c1acd96c6c1aa01246819384..6e0654e1572c86e4bb286caa02e276a0f77c2865 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -55,6 +55,13 @@ static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notif
 static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p");
 static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group");
 
+static const LLRect CHICLET_RECT(0, 25, 25, 0);
+static const LLRect CHICLET_ICON_RECT(0, 24, 24, 0);
+static const LLRect VOICE_INDICATOR_RECT(25, 25, 45, 0);
+
+// static
+const S32 LLChicletPanel::s_scroll_ratio = 10;
+
 S32 LLNotificationChiclet::mUreadSystemNotifications = 0;
 
 boost::signals2::signal<LLChiclet* (const LLUUID&),
@@ -199,7 +206,9 @@ void LLChiclet::setValue(const LLSD& value)
 
 LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 : LLChiclet(p)
+, mShowSpeaker(false)
 , mNewMessagesIcon(NULL)
+, mSpeakerCtrl(NULL)
 , mCounterCtrl(NULL)
 {
 	// initialize an overlay icon for new messages
@@ -218,6 +227,40 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
 	setShowCounter(false);
 }
 
+void LLIMChiclet::setShowSpeaker(bool show)
+{
+	bool needs_resize = getShowSpeaker() != show;
+	if(needs_resize)
+	{		
+		mShowSpeaker = show;
+		toggleSpeakerControl();
+		onChicletSizeChanged();		
+	}
+}
+void LLIMChiclet::initSpeakerControl()
+{
+	// virtual
+}
+
+void LLIMChiclet::toggleSpeakerControl()
+{
+	LLRect speaker_rect = mSpeakerCtrl->getRect();
+	S32 required_width = getRect().getWidth();
+
+	if(getShowSpeaker())
+	{
+		required_width = required_width + speaker_rect.getWidth();
+		initSpeakerControl();		
+	}
+	else
+	{
+		required_width = required_width - speaker_rect.getWidth();
+	}
+	
+	reshape(required_width, getRect().getHeight());
+	mSpeakerCtrl->setVisible(getShowSpeaker());
+}
+
 void LLIMChiclet::setShowNewMessagesIcon(bool show)
 {
 	if(mNewMessagesIcon)
@@ -300,7 +343,7 @@ LLIMP2PChiclet::Params::Params()
 , show_speaker("show_speaker")
 {
 	// *TODO Vadim: Get rid of hardcoded values.
-	rect(LLRect(0, 25, 25, 0));
+	rect(CHICLET_RECT);
 
 	avatar_icon.name("avatar_icon");
 	avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
@@ -309,11 +352,10 @@ LLIMP2PChiclet::Params::Params()
 	// Changed icon height from 25 to 24 to fix ticket EXT-794.
 	// In some cases(after changing UI scale) 25 pixel height icon was 
 	// drawn incorrectly, i'm not sure why.
-	avatar_icon.rect(LLRect(0, 24, 25, 0));
+	avatar_icon.rect(CHICLET_ICON_RECT);
 	avatar_icon.mouse_opaque(false);
 
 	unread_notifications.name("unread");
-	unread_notifications.rect(LLRect(25, 25, 45, 0));
 	unread_notifications.font(LLFontGL::getFontSansSerif());
 	unread_notifications.font_halign(LLFontGL::HCENTER);
 	unread_notifications.v_pad(5);
@@ -322,7 +364,9 @@ LLIMP2PChiclet::Params::Params()
 	unread_notifications.visible(false);
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(45, 25, 65, 0));
+	speaker.rect(VOICE_INDICATOR_RECT);
+	speaker.auto_update(true);
+	speaker.draw_border(false);
 
 	show_speaker = false;
 }
@@ -330,7 +374,6 @@ LLIMP2PChiclet::Params::Params()
 LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
@@ -358,18 +401,9 @@ void LLIMP2PChiclet::setCounter(S32 counter)
 	setShowNewMessagesIcon(counter);
 }
 
-LLRect LLIMP2PChiclet::getRequiredRect()
+void LLIMP2PChiclet::initSpeakerControl()
 {
-	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
-	if(getShowCounter())
-	{
-		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
-	}
-	if(getShowSpeaker())
-	{
-		rect.mRight += mSpeakerCtrl->getRect().getWidth();
-	}
-	return rect;
+	mSpeakerCtrl->setSpeakerId(getOtherParticipantId());
 }
 
 void LLIMP2PChiclet::setOtherParticipantId(const LLUUID& other_participant_id)
@@ -446,18 +480,6 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data)
 	}
 }
 
-void LLIMP2PChiclet::setShowSpeaker(bool show)
-{
-	LLIMChiclet::setShowSpeaker(show);
-
-	bool needs_resize = getShowSpeaker() != show;
-	mSpeakerCtrl->setVisible(getShowSpeaker());
-	if(needs_resize)
-	{
-		onChicletSizeChanged();
-	}
-}
-
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -470,7 +492,7 @@ LLAdHocChiclet::Params::Params()
 , avatar_icon_color("avatar_icon_color", LLColor4::green)
 {
 	// *TODO Vadim: Get rid of hardcoded values.
-	rect(LLRect(0, 25, 25, 0));
+	rect(CHICLET_RECT);
 
 	avatar_icon.name("avatar_icon");
 	avatar_icon.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
@@ -479,11 +501,10 @@ LLAdHocChiclet::Params::Params()
 	// Changed icon height from 25 to 24 to fix ticket EXT-794.
 	// In some cases(after changing UI scale) 25 pixel height icon was 
 	// drawn incorrectly, i'm not sure why.
-	avatar_icon.rect(LLRect(0, 24, 25, 0));
+	avatar_icon.rect(CHICLET_ICON_RECT);
 	avatar_icon.mouse_opaque(false);
 
 	unread_notifications.name("unread");
-	unread_notifications.rect(LLRect(25, 25, 45, 0));
 	unread_notifications.font(LLFontGL::getFontSansSerif());
 	unread_notifications.font_halign(LLFontGL::HCENTER);
 	unread_notifications.v_pad(5);
@@ -493,7 +514,9 @@ LLAdHocChiclet::Params::Params()
 
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(45, 25, 65, 0));
+	speaker.rect(VOICE_INDICATOR_RECT);
+	speaker.auto_update(true);
+	speaker.draw_border(false);
 
 	show_speaker = false;
 }
@@ -501,7 +524,6 @@ LLAdHocChiclet::Params::Params()
 LLAdHocChiclet::LLAdHocChiclet(const Params& p)
 : LLIMChiclet(p)
 , mChicletIconCtrl(NULL)
-, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletAvatarIconCtrl::Params avatar_params = p.avatar_icon;
@@ -532,24 +554,40 @@ void LLAdHocChiclet::setSessionId(const LLUUID& session_id)
 	mChicletIconCtrl->setValue(im_session->mOtherParticipantID);
 }
 
-void LLAdHocChiclet::setCounter(S32 counter)
+void LLAdHocChiclet::draw()
 {
-	mCounterCtrl->setCounter(counter);
-	setShowNewMessagesIcon(counter);
+	switchToCurrentSpeaker();
+	LLIMChiclet::draw();
 }
 
-LLRect LLAdHocChiclet::getRequiredRect()
+void LLAdHocChiclet::initSpeakerControl()
 {
-	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
-	if(getShowCounter())
-	{
-		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
-	}
-	if(getShowSpeaker())
+	switchToCurrentSpeaker();
+}
+
+void LLAdHocChiclet::switchToCurrentSpeaker()
+{
+	LLUUID speaker_id;
+	LLSpeakerMgr::speaker_list_t speaker_list;
+
+	LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE);
+	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
 	{
-		rect.mRight += mSpeakerCtrl->getRect().getWidth();
+		LLPointer<LLSpeaker> s = *i;
+		if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING)
+		{
+			speaker_id = s->mID;
+			break;
+		}
 	}
-	return rect;
+
+	mSpeakerCtrl->setSpeakerId(speaker_id);
+}
+
+void LLAdHocChiclet::setCounter(S32 counter)
+{
+	mCounterCtrl->setCounter(counter);
+	setShowNewMessagesIcon(counter);
 }
 
 BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -564,7 +602,7 @@ BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
 LLIMGroupChiclet::Params::Params()
 : group_icon("group_icon")
 {
-	rect(LLRect(0, 25, 25, 0));
+	rect(CHICLET_RECT);
 
 	group_icon.name("group_icon");
 	
@@ -572,10 +610,9 @@ LLIMGroupChiclet::Params::Params()
 	// Changed icon height from 25 to 24 to fix ticket EXT-794.
 	// In some cases(after changing UI scale) 25 pixel height icon was 
 	// drawn incorrectly, i'm not sure why.
-	group_icon.rect(LLRect(0, 24, 25, 0));
+	group_icon.rect(CHICLET_ICON_RECT);
 
 	unread_notifications.name("unread");
-	unread_notifications.rect(LLRect(25, 25, 45, 0));
 	unread_notifications.font(LLFontGL::getFontSansSerif());
 	unread_notifications.font_halign(LLFontGL::HCENTER);
 	unread_notifications.v_pad(5);
@@ -583,7 +620,9 @@ LLIMGroupChiclet::Params::Params()
 	unread_notifications.visible(false);
 
 	speaker.name("speaker");
-	speaker.rect(LLRect(45, 25, 65, 0));
+	speaker.rect(VOICE_INDICATOR_RECT);
+	speaker.auto_update(true);
+	speaker.draw_border(false);
 
 	show_speaker = false;
 }
@@ -592,7 +631,6 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
 : LLIMChiclet(p)
 , LLGroupMgrObserver(LLUUID::null)
 , mChicletIconCtrl(NULL)
-, mSpeakerCtrl(NULL)
 , mPopupMenu(NULL)
 {
 	LLChicletGroupIconCtrl::Params avatar_params = p.group_icon;
@@ -625,18 +663,34 @@ void LLIMGroupChiclet::setCounter(S32 counter)
 	setShowNewMessagesIcon(counter);
 }
 
-LLRect LLIMGroupChiclet::getRequiredRect()
+void LLIMGroupChiclet::draw()
 {
-	LLRect rect(0, 0, mChicletIconCtrl->getRect().getWidth(), 0);
-	if(getShowCounter())
-	{
-		rect.mRight += mCounterCtrl->getRequiredRect().getWidth();
-	}
-	if(getShowSpeaker())
+	switchToCurrentSpeaker();
+	LLIMChiclet::draw();
+}
+
+void LLIMGroupChiclet::initSpeakerControl()
+{
+	switchToCurrentSpeaker();
+}
+
+void LLIMGroupChiclet::switchToCurrentSpeaker()
+{
+	LLUUID speaker_id;
+	LLSpeakerMgr::speaker_list_t speaker_list;
+
+	LLIMModel::getInstance()->findIMSession(getSessionId())->mSpeakers->getSpeakerList(&speaker_list, FALSE);
+	for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i)
 	{
-		rect.mRight += mSpeakerCtrl->getRect().getWidth();
+		LLPointer<LLSpeaker> s = *i;
+		if (s->mSpeechVolume > 0 || s->mStatus == LLSpeaker::STATUS_SPEAKING)
+		{
+			speaker_id = s->mID;
+			break;
+		}
 	}
-	return rect;
+
+	mSpeakerCtrl->setSpeakerId(speaker_id);
 }
 
 void LLIMGroupChiclet::setSessionId(const LLUUID& session_id)
@@ -723,17 +777,6 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data)
 	}
 }
 
-void LLIMGroupChiclet::setShowSpeaker(bool show)
-{
-	LLIMChiclet::setShowSpeaker(show);
-
-	bool needs_resize = getShowSpeaker() != show;
-	mSpeakerCtrl->setVisible(getShowSpeaker());
-	if(needs_resize)
-	{
-		onChicletSizeChanged();
-	}
-}
 
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -742,8 +785,6 @@ void LLIMGroupChiclet::setShowSpeaker(bool show)
 LLChicletPanel::Params::Params()
 : chiclet_padding("chiclet_padding")
 , scrolling_offset("scrolling_offset")
-, left_scroll_button("left_scroll_button")
-, right_scroll_button("right_scroll_button")
 , min_width("min_width")
 {
 	chiclet_padding = 3;
@@ -754,24 +795,6 @@ LLChicletPanel::Params::Params()
 		// min_width = 4 chiclets + 3 paddings
 		min_width = 179 + 3*chiclet_padding;
 	}
-
-	LLRect scroll_button_rect(0, 25, 19, 5);
-
-	left_scroll_button.name("left_scroll");
-	left_scroll_button.label(LLStringUtil::null);
-	left_scroll_button.rect(scroll_button_rect);
-	left_scroll_button.tab_stop(false);
-	left_scroll_button.image_selected(LLUI::getUIImage("bottom_tray_scroll_left.tga"));
-	left_scroll_button.image_unselected(LLUI::getUIImage("bottom_tray_scroll_left.tga"));
-	left_scroll_button.image_hover_selected(LLUI::getUIImage("bottom_tray_scroll_left.tga"));
-
-	right_scroll_button.name("right_scroll");
-	right_scroll_button.label(LLStringUtil::null);
-	right_scroll_button.rect(scroll_button_rect);
-	right_scroll_button.tab_stop(false);
-	right_scroll_button.image_selected(LLUI::getUIImage("bottom_tray_scroll_right.tga"));
-	right_scroll_button.image_unselected(LLUI::getUIImage("bottom_tray_scroll_right.tga"));
-	right_scroll_button.image_hover_selected(LLUI::getUIImage("bottom_tray_scroll_right.tga"));
 };
 
 LLChicletPanel::LLChicletPanel(const Params&p)
@@ -784,23 +807,6 @@ LLChicletPanel::LLChicletPanel(const Params&p)
 , mMinWidth(p.min_width)
 , mShowControls(true)
 {
-	LLButton::Params scroll_button_params = p.left_scroll_button;
-
-	mLeftScrollButton = LLUICtrlFactory::create<LLButton>(scroll_button_params);
-	addChild(mLeftScrollButton);
-	LLTransientFloaterMgr::getInstance()->addControlView(mLeftScrollButton);
-
-	mLeftScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onLeftScrollClick,this));
-	mLeftScrollButton->setEnabled(false);
-
-	scroll_button_params = p.right_scroll_button;
-	mRightScrollButton = LLUICtrlFactory::create<LLButton>(scroll_button_params);
-	addChild(mRightScrollButton);
-	LLTransientFloaterMgr::getInstance()->addControlView(mRightScrollButton);
-
-	mRightScrollButton->setClickedCallback(boost::bind(&LLChicletPanel::onRightScrollClick,this));
-	mRightScrollButton->setEnabled(false);
-
 	LLPanel::Params panel_params;
 	mScrollArea = LLUICtrlFactory::create<LLPanel>(panel_params,this);
 
@@ -851,10 +857,40 @@ BOOL LLChicletPanel::postBuild()
 	LLIMModel::instance().addNewMsgCallback(boost::bind(im_chiclet_callback, this, _1));
 	LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(im_chiclet_callback, this, _1));
 	LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1));
+	LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1));
+
+	mLeftScrollButton=getChild<LLButton>("chicklet_left_scroll_button");
+	LLTransientFloaterMgr::getInstance()->addControlView(mLeftScrollButton);
+	mLeftScrollButton->setMouseDownCallback(boost::bind(&LLChicletPanel::onLeftScrollClick,this));
+	mLeftScrollButton->setHeldDownCallback(boost::bind(&LLChicletPanel::onLeftScrollHeldDown,this));
+	mLeftScrollButton->setEnabled(false);
+
+	mRightScrollButton=getChild<LLButton>("chicklet_right_scroll_button");
+	LLTransientFloaterMgr::getInstance()->addControlView(mRightScrollButton);
+	mRightScrollButton->setMouseDownCallback(boost::bind(&LLChicletPanel::onRightScrollClick,this));
+	mRightScrollButton->setHeldDownCallback(boost::bind(&LLChicletPanel::onRightScrollHeldDown,this));
+	mRightScrollButton->setEnabled(false);	
 
 	return TRUE;
 }
 
+void LLChicletPanel::onCurrentVoiceChannelChanged(const LLUUID& session_id)
+{
+	for(chiclet_list_t::iterator it = mChicletList.begin(); it != mChicletList.end(); ++it)
+	{
+		LLIMChiclet* chiclet = dynamic_cast<LLIMChiclet*>(*it);
+		if(chiclet)
+		{
+			if(chiclet->getSessionId() == session_id)
+			{
+				chiclet->setShowSpeaker(true);
+				continue;
+			}
+			chiclet->setShowSpeaker(false);
+		}
+	}
+}
+
 S32 LLChicletPanel::calcChickletPanleWidth()
 {
 	S32 res = 0;
@@ -898,23 +934,7 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index)
 
 void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
 {
-	S32 chiclet_width = ctrl->getRect().getWidth();
-	S32 chiclet_new_width = ctrl->getRequiredRect().getWidth();
-
-	if(chiclet_new_width == chiclet_width)
-	{
-		return;
-	}
-
-	LLRect chiclet_rect = ctrl->getRect();
-	chiclet_rect.mRight = chiclet_rect.mLeft + chiclet_new_width;	
-
-	ctrl->setRect(chiclet_rect);
-
-	S32 offset = chiclet_new_width - chiclet_width;
-	S32 index = getChicletIndex(ctrl);
-
-	shiftChiclets(offset, index + 1);
+	arrange();
 	trimChiclets();
 	showScrollButtonsIfNeeded();
 }
@@ -1026,23 +1046,24 @@ void LLChicletPanel::reshape(S32 width, S32 height, BOOL called_from_parent )
 
 	static const S32 SCROLL_BUTTON_PAD = 5;
 
+	//Needed once- to avoid error at first call of reshape() before postBuild()
+	if(!mLeftScrollButton||!mRightScrollButton)
+		return;
+	
 	LLRect scroll_button_rect = mLeftScrollButton->getRect();
-	mLeftScrollButton->setRect(LLRect(0,height,scroll_button_rect.getWidth(),
-		height - scroll_button_rect.getHeight()));
-
+	mLeftScrollButton->setRect(LLRect(0,scroll_button_rect.mTop,scroll_button_rect.getWidth(),
+		scroll_button_rect.mBottom));
 	scroll_button_rect = mRightScrollButton->getRect();
-	mRightScrollButton->setRect(LLRect(width - scroll_button_rect.getWidth(),height,
-		width, height - scroll_button_rect.getHeight()));
-
+	mRightScrollButton->setRect(LLRect(width - scroll_button_rect.getWidth(),scroll_button_rect.mTop,
+		width, scroll_button_rect.mBottom));
 	mScrollArea->setRect(LLRect(scroll_button_rect.getWidth() + SCROLL_BUTTON_PAD,
 		height, width - scroll_button_rect.getWidth() - SCROLL_BUTTON_PAD, 0));
-
 	mShowControls = width > mMinWidth;
 	mScrollArea->setVisible(mShowControls);
 
 	trimChiclets();
-
 	showScrollButtonsIfNeeded();
+
 }
 
 void LLChicletPanel::arrange()
@@ -1206,6 +1227,22 @@ void LLChicletPanel::onRightScrollClick()
 	scrollRight();
 }
 
+void LLChicletPanel::onLeftScrollHeldDown()
+{
+	S32 offset = mScrollingOffset;
+	mScrollingOffset = mScrollingOffset / s_scroll_ratio;
+	scrollLeft();
+	mScrollingOffset = offset;
+}
+
+void LLChicletPanel::onRightScrollHeldDown()
+{
+	S32 offset = mScrollingOffset;
+	mScrollingOffset = mScrollingOffset / s_scroll_ratio;
+	scrollRight();
+	mScrollingOffset = offset;
+}
+
 boost::signals2::connection LLChicletPanel::setChicletClickedCallback(
 	const commit_callback_t& cb)
 {
@@ -1329,6 +1366,6 @@ void LLChicletGroupIconCtrl::setValue(const LLSD& value )
 //////////////////////////////////////////////////////////////////////////
 
 LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p)
- : LLIconCtrl(p)
+ : LLOutputMonitorCtrl(p)
 {
 }
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index b50702205cda88abc1759ad9962df512a2cf568e..e7afd7f08e385feba464b508e0446d5c0238f65f 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -147,13 +147,13 @@ class LLChicletGroupIconCtrl : public LLIconCtrl
 };
 
 /*
- * Class for displaying status of Voice Chat 
+ * Class for displaying of speaker's voice indicator 
 */
-class LLChicletSpeakerCtrl : public LLIconCtrl
+class LLChicletSpeakerCtrl : public LLOutputMonitorCtrl
 {
 public:
 
-	struct Params : public LLInitParam::Block<Params, LLIconCtrl::Params>
+	struct Params : public LLInitParam::Block<Params, LLOutputMonitorCtrl::Params>
 	{
 		Params(){};
 	};
@@ -266,8 +266,6 @@ class LLChiclet : public LLUICtrl
 * Base class for Instant Message chiclets.
 * IMChiclet displays icon, number of unread messages(optional)
 * and voice chat status(optional).
-* Every chiclet should override LLUICtrl::getRequiredRect and return 
-* desired width.
 */
 class LLIMChiclet : public LLChiclet
 {
@@ -306,15 +304,25 @@ class LLIMChiclet : public LLChiclet
 	virtual LLUUID getOtherParticipantId() { return mOtherParticipantId; }
 
 	/*
-	 * Shows/hides voice chat status control.
+	* Init Speaker Control with speaker's ID
 	*/
-	virtual void setShowSpeaker(bool show) { mShowSpeaker = show; }
+	virtual void initSpeakerControl();
+
+	/*
+	 * set status (Shows/Hide) for voice control.
+	*/
+	virtual void setShowSpeaker(bool show);
 
 	/*
 	 * Returns voice chat status control visibility.
 	*/
 	virtual bool getShowSpeaker() {return mShowSpeaker;};
 
+	/*
+	* Shows/Hides for voice control for a chiclet.
+	*/
+	virtual void toggleSpeakerControl();
+
 	/*
 	* Shows/hides overlay icon concerning new unread messages.
 	*/
@@ -325,10 +333,7 @@ class LLIMChiclet : public LLChiclet
 	*/
 	virtual bool getShowNewMessagesIcon();
 
-	/*
-	 * Draws border around chiclet.
-	*/
-	/*virtual*/ void draw();
+	virtual void draw();
 
 	/**
 	 * Determine whether given ID refers to a group or an IM chat session.
@@ -363,6 +368,8 @@ class LLIMChiclet : public LLChiclet
 
 	LLIconCtrl* mNewMessagesIcon;
 	LLChicletNotificationCounterCtrl* mCounterCtrl;
+	LLChicletSpeakerCtrl* mSpeakerCtrl;
+
 
 	/** the id of another participant, either an avatar id or a group id*/
 	LLUUID mOtherParticipantId;
@@ -410,8 +417,6 @@ class LLIMP2PChiclet : public LLIMChiclet
 
 	/* virtual */ void setOtherParticipantId(const LLUUID& other_participant_id);
 
-	/*virtual*/ void setShowSpeaker(bool show);
-
 	/*
 	* Sets number of unread messages. Will update chiclet's width if number text 
 	* exceeds size of counter and notify it's parent about size change.
@@ -419,15 +424,14 @@ class LLIMP2PChiclet : public LLIMChiclet
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Returns number of unread messages.
+	* Init Speaker Control with speaker's ID
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ void initSpeakerControl();
 
 	/*
-	* Returns rect, required to display chiclet.
-	* Width is the only valid value.
+	* Returns number of unread messages.
 	*/
-	/*virtual*/ LLRect getRequiredRect();
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 protected:
 	LLIMP2PChiclet(const Params& p);
@@ -457,7 +461,6 @@ class LLIMP2PChiclet : public LLIMChiclet
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -495,15 +498,19 @@ class LLAdHocChiclet : public LLIMChiclet
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Returns number of unread messages.
+	* Keep Speaker Control with actual speaker's ID
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ void draw();
 
 	/*
-	* Returns rect, required to display chiclet.
-	* Width is the only valid value.
+	* Init Speaker Control with speaker's ID
 	*/
-	/*virtual*/ LLRect getRequiredRect();
+	/*virtual*/ void initSpeakerControl();
+
+	/*
+	* Returns number of unread messages.
+	*/
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 protected:
 	LLAdHocChiclet(const Params& p);
@@ -514,10 +521,14 @@ class LLAdHocChiclet : public LLIMChiclet
 	*/
 	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 
+	/*
+	* Finds a current speaker and resets the SpeakerControl with speaker's ID
+	*/
+	/*virtual*/ void switchToCurrentSpeaker();
+
 private:
 
 	LLChicletAvatarIconCtrl* mChicletIconCtrl;
-	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -547,14 +558,17 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 	 */
 	/*virtual*/ void setSessionId(const LLUUID& session_id);
 
+	/*
+	* Keep Speaker Control with actual speaker's ID
+	*/
+	/*virtual*/ void draw();
+
 	/**
 	 * Callback for LLGroupMgrObserver, we get this when group data is available or changed.
 	 * Sets group icon.
 	 */
 	/*virtual*/ void changed(LLGroupChange gc);
 
-	/*virtual*/ void setShowSpeaker(bool show);
-
 	/*
 	* Sets number of unread messages. Will update chiclet's width if number text 
 	* exceeds size of counter and notify it's parent about size change.
@@ -562,15 +576,14 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 	/*virtual*/ void setCounter(S32);
 
 	/*
-	* Returns number of unread messages.
+	* Init Speaker Control with speaker's ID
 	*/
-	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
+	/*virtual*/ void initSpeakerControl();
 
 	/*
-	* Returns rect, required to display chiclet.
-	* Width is the only valid value.
+	* Returns number of unread messages.
 	*/
-	/*virtual*/ LLRect getRequiredRect();
+	/*virtual*/ S32 getCounter() { return mCounterCtrl->getCounter(); }
 
 	~LLIMGroupChiclet();
 
@@ -578,6 +591,11 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 	LLIMGroupChiclet(const Params& p);
 	friend class LLUICtrlFactory;
 
+	/*
+	* Finds a current speaker and resets the SpeakerControl with speaker's ID
+	*/
+	/*virtual*/ void switchToCurrentSpeaker();
+
 	/*
 	* Creates chiclet popup menu. Will create P2P or Group IM Chat menu 
 	* based on other participant's id.
@@ -597,7 +615,6 @@ class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
 private:
 
 	LLChicletGroupIconCtrl* mChicletIconCtrl;
-	LLChicletSpeakerCtrl* mSpeakerCtrl;
 	LLMenuGL* mPopupMenu;
 };
 
@@ -660,9 +677,6 @@ class LLChicletPanel : public LLPanel
 		Optional<S32> chiclet_padding,
 					  scrolling_offset;
 
-		Optional<LLButton::Params> left_scroll_button,
-								   right_scroll_button;
-
 		Optional<S32> min_width;
 
 		Params();
@@ -735,6 +749,11 @@ class LLChicletPanel : public LLPanel
 
 	/*virtual*/ BOOL postBuild();
 
+	/*
+	* Handler for the Voice Client's signal. Finds a corresponding chiclet and toggles its SpeakerControl
+	*/
+	void onCurrentVoiceChannelChanged(const LLUUID& session_id);
+
 	/*
 	 * Reshapes controls and rearranges chiclets if needed.
 	*/
@@ -811,6 +830,16 @@ class LLChicletPanel : public LLPanel
 	*/
 	void onRightScrollClick();
 
+	/*
+	* Callback for right scroll button held down event
+	*/
+	void onLeftScrollHeldDown();
+
+	/*
+	 * Callback for left scroll button held down event
+	 */
+	void onRightScrollHeldDown();
+
 	/*
 	 * Callback for mouse wheel scrolled, calls scrollRight() or scrollLeft()
 	*/
@@ -851,6 +880,7 @@ class LLChicletPanel : public LLPanel
 	S32 mScrollingOffset;
 	S32 mMinWidth;
 	bool mShowControls;
+	static const S32 s_scroll_ratio;
 };
 
 template<class T> 
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 663bd232f7466df2a50ed0d7841accb5fd205f11..3613ac803efc5cf1b154dca4a55f78ec2c9d91f7 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -849,6 +849,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		{
 			LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, NULL);	// just build it
 			(*floaterp)->openFloater((*floaterp)->getKey());
+			(*floaterp)->setCanResize((*floaterp)->isResizable());
 		}
 
 	}
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 010ed23918d1560c4df17e4cee36f346299bfbe3..cdb85f5b1c2db489752e44307504ae35bad4f219 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -181,13 +181,9 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL
 //	item->setContextMenu(mContextMenu);
 
 	item->childSetVisible("info_btn", false);
+	item->childSetVisible("profile_btn", false);
 	item->setGroupIconVisible(mShowIcons);
 
-	if (id.isNull())
-	{
-		item->childSetVisible("profile_btn", false);
-	}
-
 	addItem(item, id, pos);
 
 //	setCommentVisible(false);
@@ -254,7 +250,10 @@ void LLGroupListItem::onMouseEnter(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", true);
 	if (mGroupID.notNull()) // don't show the info button for the "none" group
+	{
 		mInfoBtn->setVisible(true);
+		childSetVisible("profile_btn", true);
+	}
 
 	LLPanel::onMouseEnter(x, y, mask);
 }
@@ -263,6 +262,7 @@ void LLGroupListItem::onMouseLeave(S32 x, S32 y, MASK mask)
 {
 	childSetVisible("hovered_icon", false);
 	mInfoBtn->setVisible(false);
+	childSetVisible("profile_btn", false);
 
 	LLPanel::onMouseLeave(x, y, mask);
 }
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 8fb7027e82c90ea5d160c52bb64c078223f31f3e..476d312c69b75d923ed575b9c9d48276cd84f25b 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1157,6 +1157,9 @@ void LLIncomingCallDialog::onStartIM(void* user_data)
 
 void LLIncomingCallDialog::processCallResponse(S32 response)
 {
+	if (!gIMMgr)
+		return;
+
 	LLUUID session_id = mPayload["session_id"].asUUID();
 	EInstantMessage type = (EInstantMessage)mPayload["type"].asInteger();
 	LLIMMgr::EInvitationType inv_type = (LLIMMgr::EInvitationType)mPayload["inv_type"].asInteger();
@@ -1254,6 +1257,9 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
 
 bool inviteUserResponse(const LLSD& notification, const LLSD& response)
 {
+	if (!gIMMgr)
+		return false;
+
 	const LLSD& payload = notification["payload"];
 	LLUUID session_id = payload["session_id"].asUUID();
 	EInstantMessage type = (EInstantMessage)payload["type"].asInteger();
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 17b712bc5e81d79574df1e7f96fb52b1ebe60432..794d73a5adeae0fb5c35c65cedca01b258620664 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -480,7 +480,7 @@ void LLNavigationBar::rebuildTeleportHistoryMenu()
 			type = LLTeleportHistoryMenuItem::TYPE_CURRENT;
 
 		LLTeleportHistoryMenuItem::Params item_params;
-		item_params.label = item_params.name = hist_items[i].getTitle();
+		item_params.label = item_params.name = hist_items[i].mTitle;
 		item_params.item_type = type;
 		item_params.on_click.function(boost::bind(&LLNavigationBar::onTeleportHistoryMenuItemClicked, this, i));
 		LLTeleportHistoryMenuItem* new_itemp = LLUICtrlFactory::create<LLTeleportHistoryMenuItem>(item_params);
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index a29c9752e6dc6792f219d78ce1916004ef9b2a98..5679233844cec24fd6e9fb06d81e6439f98becd8 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -1142,3 +1142,529 @@ void LLPanelClassified::setDefaultAccessCombo()
 			break;
 	}
 }
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLPanelClassifiedInfo::LLPanelClassifiedInfo()
+ : LLPanel()
+ , mInfoLoaded(false)
+{
+}
+
+LLPanelClassifiedInfo::~LLPanelClassifiedInfo()
+{
+}
+
+// static
+LLPanelClassifiedInfo* LLPanelClassifiedInfo::create()
+{
+	LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo();
+	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_classified_info.xml");
+	return panel;
+}
+
+BOOL LLPanelClassifiedInfo::postBuild()
+{
+	childSetAction("back_btn", boost::bind(&LLPanelClassifiedInfo::onExit, this), NULL);
+
+	return TRUE;
+}
+
+void LLPanelClassifiedInfo::setExitCallback(const commit_callback_t& cb)
+{
+	getChild<LLButton>("back_btn")->setClickedCallback(cb);
+}
+
+void LLPanelClassifiedInfo::onOpen(const LLSD& key)
+{
+	LLUUID avatar_id = key["avatar_id"];
+	if(avatar_id.isNull())
+	{
+		return;
+	}
+
+	if(getAvatarId().notNull())
+	{
+		LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
+	}
+
+	setAvatarId(avatar_id);
+
+	resetData();
+	resetControls();
+
+	setClassifiedId(key["classified_id"]);
+	setClassifiedName(key["name"]);
+	setDescription(key["desc"]);
+	setSnapshotId(key["snapshot_id"]);
+
+	LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
+	LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
+	setInfoLoaded(false);
+}
+
+void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType type)
+{
+	if(APT_CLASSIFIED_INFO == type)
+	{
+		LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
+		if(c_info && getClassifiedId() == c_info->classified_id)
+		{
+			setClassifiedName(c_info->name);
+			setDescription(c_info->description);
+			setSnapshotId(c_info->snapshot_id);
+			setParcelId(c_info->parcel_id);
+			setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
+			childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]);
+
+			static std::string mature_str = getString("type_mature");
+			static std::string pg_str = getString("type_pg");
+
+			bool mature = is_cf_mature(c_info->flags);
+			childSetValue("content_type", mature ? mature_str : pg_str);
+			childSetValue("auto_renew", is_cf_auto_renew(c_info->flags));
+
+			childSetTextArg("price_for_listing", "[PRICE]", llformat("%d", c_info->price_for_listing));
+
+			setInfoLoaded(true);
+		}
+	}
+}
+
+void LLPanelClassifiedInfo::resetData()
+{
+	setClassifiedName(LLStringUtil::null);
+	setDescription(LLStringUtil::null);
+	setClassifiedLocation(LLStringUtil::null);
+	setClassifiedId(LLUUID::null);
+	setSnapshotId(LLUUID::null);
+	mPosGlobal.clearVec();
+	childSetValue("category", LLStringUtil::null);
+	childSetValue("content_type", LLStringUtil::null);
+}
+
+void LLPanelClassifiedInfo::resetControls()
+{
+	if(getAvatarId() == gAgent.getID())
+	{
+		childSetEnabled("edit_btn", TRUE);
+		childSetVisible("edit_btn", TRUE);
+	}
+	else
+	{
+		childSetEnabled("edit_btn", FALSE);
+		childSetVisible("edit_btn", FALSE);
+	}
+}
+
+void LLPanelClassifiedInfo::setClassifiedName(const std::string& name)
+{
+	childSetValue("classified_name", name);
+}
+
+std::string LLPanelClassifiedInfo::getClassifiedName()
+{
+	return childGetValue("classified_name").asString();
+}
+
+void LLPanelClassifiedInfo::setDescription(const std::string& desc)
+{
+	childSetValue("classified_desc", desc);
+}
+
+std::string LLPanelClassifiedInfo::getDescription()
+{
+	return childGetValue("classified_desc").asString();
+}
+
+void LLPanelClassifiedInfo::setClassifiedLocation(const std::string& location)
+{
+	childSetValue("classified_location", location);
+}
+
+void LLPanelClassifiedInfo::setSnapshotId(const LLUUID& id)
+{
+	childSetValue("classified_snapshot", id);
+}
+
+LLUUID LLPanelClassifiedInfo::getSnapshotId()
+{
+	return childGetValue("classified_snapshot").asUUID();
+}
+
+// static
+std::string LLPanelClassifiedInfo::createLocationText(
+	const std::string& original_name, 
+	const std::string& sim_name, 
+	const LLVector3d& pos_global)
+{
+	std::string location_text;
+	
+	location_text.append(original_name);
+
+	if (!sim_name.empty())
+	{
+		if (!location_text.empty()) 
+			location_text.append(", ");
+		location_text.append(sim_name);
+	}
+
+	if (!location_text.empty()) 
+		location_text.append(" ");
+
+	if (!pos_global.isNull())
+	{
+		S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS;
+		S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS;
+		S32 region_z = llround((F32)pos_global.mdV[VZ]);
+		location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));
+	}
+
+	return location_text;
+}
+
+void LLPanelClassifiedInfo::onExit()
+{
+	LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+static const S32 CB_ITEM_MATURE = 0;
+static const S32 CB_ITEM_PG	   = 1;
+
+LLPanelClassifiedEdit::LLPanelClassifiedEdit()
+ : LLPanelClassifiedInfo()
+ , mIsNew(false)
+{
+}
+
+LLPanelClassifiedEdit::~LLPanelClassifiedEdit()
+{
+}
+
+//static
+LLPanelClassifiedEdit* LLPanelClassifiedEdit::create()
+{
+	LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit();
+	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_edit_classified.xml");
+	return panel;
+}
+
+BOOL LLPanelClassifiedEdit::postBuild()
+{
+	LLPanelClassifiedInfo::postBuild();
+
+	LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("classified_snapshot");
+	snapshot->setOnSelectCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this));
+
+	LLUICtrl* edit_icon = getChild<LLUICtrl>("edit_icon");
+	snapshot->setMouseEnterCallback(boost::bind(&LLPanelClassifiedEdit::onTexturePickerMouseEnter, this, edit_icon));
+	snapshot->setMouseLeaveCallback(boost::bind(&LLPanelClassifiedEdit::onTexturePickerMouseLeave, this, edit_icon));
+	edit_icon->setVisible(false);
+
+	LLLineEditor* line_edit = getChild<LLLineEditor>("classified_name");
+	line_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL);
+
+	LLTextEditor* text_edit = getChild<LLTextEditor>("classified_desc");
+	text_edit->setKeystrokeCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this));
+
+	LLComboBox* combobox = getChild<LLComboBox>( "category");
+	LLClassifiedInfo::cat_map::iterator iter;
+	for (iter = LLClassifiedInfo::sCategories.begin();
+		iter != LLClassifiedInfo::sCategories.end();
+		iter++)
+	{
+		combobox->add(LLTrans::getString(iter->second));
+	}
+
+	combobox->setCommitCallback(boost::bind(&LLPanelClassifiedEdit::onChange, this));
+
+	childSetCommitCallback("content_type", boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL);
+	childSetCommitCallback("price_for_listing", boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL);
+	childSetCommitCallback("auto_renew", boost::bind(&LLPanelClassifiedEdit::onChange, this), NULL);
+
+	childSetAction("save_changes_btn", boost::bind(&LLPanelClassifiedEdit::onSaveClick, this));
+	childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelClassifiedEdit::onSetLocationClick, this));
+
+	return TRUE;
+}
+
+void LLPanelClassifiedEdit::onOpen(const LLSD& key)
+{
+	LLUUID classified_id = key["classified_id"];
+
+	mIsNew = classified_id.isNull();
+
+	if(mIsNew)
+	{
+		setAvatarId(gAgent.getID());
+
+		resetData();
+		resetControls();
+
+		setPosGlobal(gAgent.getPositionGlobal());
+
+		LLUUID snapshot_id = LLUUID::null;
+		std::string desc;
+		LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+
+		if(parcel)
+		{
+			desc = parcel->getDesc();
+			snapshot_id = parcel->getSnapshotID();
+		}
+
+		std::string region_name = LLTrans::getString("ClassifiedUpdateAfterPublish");
+		LLViewerRegion* region = gAgent.getRegion();
+		if (region)
+		{
+			region_name = region->getName();
+		}
+
+		childSetValue("classified_name", makeClassifiedName());
+		childSetValue("classified_desc", desc);
+		setSnapshotId(snapshot_id);
+		
+		setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal()));
+		
+		// server will set valid parcel id
+		setParcelId(LLUUID::null);
+
+		enableVerbs(true);
+		enableEditing(true);
+	}
+	else
+	{
+		LLPanelClassifiedInfo::onOpen(key);
+		enableVerbs(false);
+		enableEditing(false);
+	}
+
+	resetDirty();
+	setInfoLoaded(false);
+}
+
+void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType type)
+{
+	if(APT_CLASSIFIED_INFO == type)
+	{
+		LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
+		if(c_info && getClassifiedId() == c_info->classified_id)
+		{
+			enableEditing(true);
+
+			setClassifiedName(c_info->name);
+			setDescription(c_info->description);
+			setSnapshotId(c_info->snapshot_id);
+			setPosGlobal(c_info->pos_global);
+
+			setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global));
+			getChild<LLComboBox>("category")->setCurrentByIndex(c_info->category + 1);
+			getChild<LLComboBox>("category")->resetDirty();
+
+			bool mature = is_cf_mature(c_info->flags);
+			bool auto_renew = is_cf_auto_renew(c_info->flags);
+
+			getChild<LLComboBox>("content_type")->setCurrentByIndex(mature ? CB_ITEM_MATURE : CB_ITEM_PG);
+			childSetValue("auto_renew", auto_renew);
+			childSetValue("price_for_listing", c_info->price_for_listing);
+
+			resetDirty();
+			setInfoLoaded(true);
+		}
+	}
+}
+
+BOOL LLPanelClassifiedEdit::isDirty() const
+{
+	if(mIsNew) 
+	{
+		return TRUE;
+	}
+
+	BOOL dirty = false;
+
+	dirty |= LLPanelClassifiedInfo::isDirty();
+	dirty |= getChild<LLUICtrl>("classified_snapshot")->isDirty();
+	dirty |= getChild<LLUICtrl>("classified_name")->isDirty();
+	dirty |= getChild<LLUICtrl>("classified_desc")->isDirty();
+	dirty |= getChild<LLUICtrl>("category")->isDirty();
+	dirty |= getChild<LLUICtrl>("content_type")->isDirty();
+	dirty |= getChild<LLUICtrl>("auto_renew")->isDirty();
+	dirty |= getChild<LLUICtrl>("price_for_listing")->isDirty();
+
+	return dirty;
+}
+
+void LLPanelClassifiedEdit::resetDirty()
+{
+	LLPanelClassifiedInfo::resetDirty();
+	getChild<LLUICtrl>("classified_snapshot")->resetDirty();
+	getChild<LLUICtrl>("classified_name")->resetDirty();
+	getChild<LLUICtrl>("classified_desc")->resetDirty();
+	getChild<LLUICtrl>("category")->resetDirty();
+	getChild<LLUICtrl>("content_type")->resetDirty();
+	getChild<LLUICtrl>("auto_renew")->resetDirty();
+	getChild<LLUICtrl>("price_for_listing")->resetDirty();
+}
+
+void LLPanelClassifiedEdit::setSaveCallback(const commit_callback_t& cb)
+{
+	getChild<LLButton>("save_changes_btn")->setClickedCallback(cb);
+}
+
+void LLPanelClassifiedEdit::setCancelCallback(const commit_callback_t& cb)
+{
+	getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
+}
+
+void LLPanelClassifiedEdit::resetControls()
+{
+	LLPanelClassifiedInfo::resetControls();
+
+	getChild<LLComboBox>("category")->setCurrentByIndex(0);
+	getChild<LLComboBox>("content_type")->setCurrentByIndex(0);
+	childSetValue("auto_renew", false);
+	childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING);
+}
+
+void LLPanelClassifiedEdit::sendUpdate()
+{
+	LLAvatarClassifiedInfo c_data;
+
+	if(getClassifiedId().isNull())
+	{
+		LLUUID id;
+		id.generate();
+		setClassifiedId(id);
+	}
+
+	c_data.agent_id = gAgent.getID();
+	c_data.classified_id = getClassifiedId();
+	c_data.category = getCategory();
+	c_data.name = getClassifiedName();
+	c_data.description = getDescription();
+	c_data.parcel_id = getParcelId();
+	c_data.snapshot_id = getSnapshotId();
+	c_data.pos_global = getPosGlobal();
+	c_data.flags = getFlags();
+	c_data.price_for_listing = getPriceForListing();
+
+	LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoUpdate(&c_data);
+}
+
+U32 LLPanelClassifiedEdit::getCategory()
+{
+	LLComboBox* cat_cb = getChild<LLComboBox>("category");
+	return cat_cb->getCurrentIndex() + 1;
+}
+
+U8 LLPanelClassifiedEdit::getFlags()
+{
+	bool auto_renew = childGetValue("auto_renew").asBoolean();
+
+	LLComboBox* content_cb = getChild<LLComboBox>("content_type");
+	bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE;
+	
+	return pack_classified_flags_request(auto_renew, false, mature, false);
+}
+
+void LLPanelClassifiedEdit::enableVerbs(bool enable)
+{
+	childSetEnabled("save_changes_btn", enable);
+}
+
+void LLPanelClassifiedEdit::enableEditing(bool enable)
+{
+	childSetEnabled("classified_snapshot", enable);
+	childSetEnabled("classified_name", enable);
+	childSetEnabled("classified_desc", enable);
+	childSetEnabled("set_to_curr_location_btn", enable);
+	childSetEnabled("category", enable);
+	childSetEnabled("content_type", enable);
+	childSetEnabled("price_for_listing", enable);
+	childSetEnabled("auto_renew", enable);
+}
+
+std::string LLPanelClassifiedEdit::makeClassifiedName()
+{
+	std::string name;
+
+	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+	if(parcel)
+	{
+		name = parcel->getName();
+	}
+
+	if(!name.empty())
+	{
+		return name;
+	}
+
+	LLViewerRegion* region = gAgent.getRegion();
+	if(region)
+	{
+		name = region->getName();
+	}
+
+	return name;
+}
+
+S32 LLPanelClassifiedEdit::getPriceForListing()
+{
+	return childGetValue("price_for_listing").asInteger();
+}
+
+void LLPanelClassifiedEdit::onSetLocationClick()
+{
+	setPosGlobal(gAgent.getPositionGlobal());
+	setParcelId(LLUUID::null);
+
+	std::string region_name = LLTrans::getString("ClassifiedUpdateAfterPublish");
+	LLViewerRegion* region = gAgent.getRegion();
+	if (region)
+	{
+		region_name = region->getName();
+	}
+
+	setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal()));
+
+	// mark classified as dirty
+	setValue(LLSD());
+
+	onChange();
+}
+
+void LLPanelClassifiedEdit::onChange()
+{
+	enableVerbs(isDirty());
+}
+
+void LLPanelClassifiedEdit::onSaveClick()
+{
+	sendUpdate();
+	resetDirty();
+}
+
+std::string LLPanelClassifiedEdit::getLocationNotice()
+{
+	static std::string location_notice = getString("location_notice");
+	return location_notice;
+}
+
+void LLPanelClassifiedEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
+{
+	ctrl->setVisible(TRUE);
+}
+
+void LLPanelClassifiedEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
+{
+	ctrl->setVisible(FALSE);
+}
+
+//EOF
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index 417eddf460622b331b3cc55af2ce03271df6e150..187bdbb37e73ee0a741b5e13624be509178f4914 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -37,6 +37,7 @@
 #ifndef LL_LLPANELCLASSIFIED_H
 #define LL_LLPANELCLASSIFIED_H
 
+#include "llavatarpropertiesprocessor.h"
 #include "llpanel.h"
 #include "llclassifiedinfo.h"
 #include "v3dmath.h"
@@ -55,6 +56,8 @@ class LLTextureCtrl;
 class LLUICtrl;
 class LLMessageSystem;
 
+// *TODO deprecated, should be removed.
+// New class implemented in ticket EXT-2095
 class LLPanelClassified : public LLPanel
 {
 public:
@@ -198,5 +201,138 @@ class LLFloaterPriceForListing
 	void* mUserData;
 };
 
+class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
+{
+public:
+
+	static LLPanelClassifiedInfo* create();
+
+	virtual ~LLPanelClassifiedInfo();
+
+	/*virtual*/ void onOpen(const LLSD& key);
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
+
+	void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; }
+
+	LLUUID& getAvatarId() { return mAvatarId; }
+
+	void setSnapshotId(const LLUUID& id);
+
+	LLUUID getSnapshotId();
+
+	void setClassifiedId(const LLUUID& id) { mClassifiedId = id; }
+
+	LLUUID& getClassifiedId() { return mClassifiedId; }
+
+	void setClassifiedName(const std::string& name);
+
+	std::string getClassifiedName();
+
+	void setDescription(const std::string& desc);
+
+	std::string getDescription();
+
+	void setClassifiedLocation(const std::string& location);
+
+	void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
+
+	LLVector3d& getPosGlobal() { return mPosGlobal; }
+
+	void setParcelId(const LLUUID& id) { mParcelId = id; }
+
+	LLUUID getParcelId() { return mParcelId; }
+
+	bool getInfoLoaded() { return mInfoLoaded; }
+
+	void setInfoLoaded(bool loaded) { mInfoLoaded = loaded; }
+
+	virtual void setExitCallback(const commit_callback_t& cb);
+
+protected:
+
+	LLPanelClassifiedInfo();
+
+	virtual void resetData();
+
+	virtual void resetControls();
+
+	static std::string createLocationText(
+		const std::string& original_name,
+		const std::string& sim_name, 
+		const LLVector3d& pos_global);
+
+	void onClickMap();
+	void onClickTeleport();
+	void onClickBack();
+	void onExit();
+
+private:
+
+	LLUUID mAvatarId;
+	LLUUID mClassifiedId;
+	LLVector3d mPosGlobal;
+	LLUUID mParcelId;
+	bool mInfoLoaded;
+};
+
+class LLPanelClassifiedEdit : public LLPanelClassifiedInfo
+{
+public:
+
+	static LLPanelClassifiedEdit* create();
+
+	virtual ~LLPanelClassifiedEdit();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void onOpen(const LLSD& key);
+
+	/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
+
+	/*virtual*/ BOOL isDirty() const;
+
+	/*virtual*/ void resetDirty();
+
+	void setSaveCallback(const commit_callback_t& cb);
+
+	void setCancelCallback(const commit_callback_t& cb);
+
+	/*virtual*/ void resetControls();
+
+	bool isNew() { return mIsNew; }
+
+protected:
+
+	LLPanelClassifiedEdit();
+
+	void sendUpdate();
+
+	U32 getCategory();
+
+	void enableVerbs(bool enable);
+
+	void enableEditing(bool enable);
+
+	std::string makeClassifiedName();
+
+	S32 getPriceForListing();
+
+	U8 getFlags();
+
+	std::string getLocationNotice();
+
+	void onSetLocationClick();
+	void onChange();
+	void onSaveClick();
+
+	void onTexturePickerMouseEnter(LLUICtrl* ctrl);
+	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
+
+private:
+	bool mIsNew;
+};
 
 #endif // LL_LLPANELCLASSIFIED_H
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index c9168670d5cd80c73f5e41e5e2aedb63fece6dcf..350b78ee3daf3c5a70ce5e64546d65158f0863b2 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -86,10 +86,8 @@ void LLPanelChatControlPanel::draw()
 
 	bool session_initialized = session->mSessionInitialized;
 	bool callback_enabled = session->mCallBackEnabled;
-	LLViewerRegion* region = gAgent.getRegion();
 
-	BOOL enable_connect = (region && region->getCapability("ChatSessionRequest") != "")
-		&& session_initialized
+	BOOL enable_connect = session_initialized
 		&& voice_enabled
 		&& callback_enabled;
 	childSetEnabled("call_btn", enable_connect);
@@ -190,7 +188,8 @@ void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::str
 	}
 }
 
-LLPanelGroupControlPanel::LLPanelGroupControlPanel(const LLUUID& session_id)
+LLPanelGroupControlPanel::LLPanelGroupControlPanel(const LLUUID& session_id):
+mParticipantList(NULL)
 {
 	mSpeakerManager = LLIMModel::getInstance()->getSpeakerManager(session_id);
 }
@@ -199,9 +198,6 @@ BOOL LLPanelGroupControlPanel::postBuild()
 {
 	childSetAction("group_info_btn", boost::bind(&LLPanelGroupControlPanel::onGroupInfoButtonClicked, this));
 
-	mAvatarList = getChild<LLAvatarList>("speakers_list");
-	mParticipantList = new LLParticipantList(mSpeakerManager, mAvatarList);
-
 	return LLPanelChatControlPanel::postBuild();
 }
 
@@ -214,6 +210,8 @@ LLPanelGroupControlPanel::~LLPanelGroupControlPanel()
 // virtual
 void LLPanelGroupControlPanel::draw()
 {
+	//Remove event does not raised until speakerp->mActivityTimer.hasExpired() is false, see LLSpeakerManager::update()
+	//so we need update it to raise needed event
 	mSpeakerManager->update(true);
 	LLPanelChatControlPanel::draw();
 }
@@ -241,7 +239,7 @@ void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata)
 void LLPanelGroupControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
 {
 	LLPanelChatControlPanel::onVoiceChannelStateChanged(old_state, new_state);
-	mAvatarList->setSpeakingIndicatorsVisible(new_state >= LLVoiceChannel::STATE_CALL_STARTED);
+	mParticipantList->setSpeakingIndicatorsVisible(new_state >= LLVoiceChannel::STATE_CALL_STARTED);
 }
 
 void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
@@ -249,6 +247,9 @@ void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
 	LLPanelChatControlPanel::setSessionId(session_id);
 
 	mGroupID = LLIMModel::getInstance()->getOtherParticipantID(session_id);
+
+	if(!mParticipantList)
+		mParticipantList = new LLParticipantList(mSpeakerManager, getChild<LLAvatarList>("speakers_list"));
 }
 
 
@@ -258,9 +259,7 @@ LLPanelAdHocControlPanel::LLPanelAdHocControlPanel(const LLUUID& session_id):LLP
 
 BOOL LLPanelAdHocControlPanel::postBuild()
 {
-	mAvatarList = getChild<LLAvatarList>("speakers_list");
-	mParticipantList = new LLParticipantList(mSpeakerManager, mAvatarList);
-
+	//We don't need LLPanelGroupControlPanel::postBuild() to be executed as there is no group_info_btn at AdHoc chat
 	return LLPanelChatControlPanel::postBuild();
 }
 
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index ac5d86345e834909b145e83991d63e32f989cd4b..a0d3420d231b66afd076dfd0f007acf10fd58230 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -100,7 +100,7 @@ class LLPanelGroupControlPanel : public LLPanelChatControlPanel
 protected:
 	LLUUID mGroupID;
 	LLSpeakerMgr* mSpeakerManager;
-	LLAvatarList* mAvatarList;
+
 	LLParticipantList* mParticipantList;
 
 private:
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 49856638339e6f513261c0b422ba4cca14768a75..f94a59ecef5eec7e47a414f71cbef5dc436a75c5 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -35,6 +35,7 @@
 #include "llpanellandmarkinfo.h"
 
 #include "llcombobox.h"
+#include "lliconctrl.h"
 #include "lllineeditor.h"
 #include "lltextbox.h"
 #include "lltexteditor.h"
@@ -58,6 +59,11 @@ static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
 
 static LLRegisterPanelClassWrapper<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info");
 
+// Statics for textures filenames
+static std::string icon_pg;
+static std::string icon_m;
+static std::string icon_r;
+
 LLPanelLandmarkInfo::LLPanelLandmarkInfo()
 :	LLPanelPlaceInfo()
 {}
@@ -79,6 +85,10 @@ BOOL LLPanelLandmarkInfo::postBuild()
 	mNotesEditor = getChild<LLTextEditor>("notes_editor");
 	mFolderCombo = getChild<LLComboBox>("folder_combo");
 
+	icon_pg = getString("icon_PG");
+	icon_m = getString("icon_M");
+	icon_r = getString("icon_R");
+
 	return TRUE;
 }
 
@@ -101,9 +111,8 @@ void LLPanelLandmarkInfo::setInfoType(INFO_TYPE type)
 	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");
 
 	bool is_info_type_create_landmark = type == CREATE_LANDMARK;
-	bool is_info_type_landmark = type == LANDMARK;
 
-	landmark_info_panel->setVisible(is_info_type_landmark);
+	landmark_info_panel->setVisible(type == LANDMARK);
 
 	getChild<LLTextBox>("folder_label")->setVisible(is_info_type_create_landmark);
 	mFolderCombo->setVisible(is_info_type_create_landmark);
@@ -136,6 +145,24 @@ void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data)
 {
 	LLPanelPlaceInfo::processParcelInfo(parcel_data);
 
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	if (parcel_data.flags & 0x2)
+	{
+		mMaturityRatingIcon->setValue(icon_r);
+		mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_ADULT));
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		mMaturityRatingIcon->setValue(icon_m);
+		mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_MATURE));
+	}
+	else
+	{
+		mMaturityRatingIcon->setValue(icon_pg);
+		mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_PG));
+	}
+
 	S32 region_x;
 	S32 region_y;
 	S32 region_z;
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index a6083a5755f8e82a00407c298020fe7a3810b367..f6aded2d254ee8ff0e7d7470a187350a241c10ac 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -60,6 +60,7 @@
 #include "llviewermenu.h"			// for gMenuHolder
 #include "llvoiceclient.h"
 #include "llworld.h"
+#include "llspeakers.h"
 
 #define FRIEND_LIST_UPDATE_TIMEOUT	0.5
 #define NEARBY_LIST_UPDATE_INTERVAL 1
@@ -119,8 +120,84 @@ class LLAvatarItemStatusComparator : public LLAvatarItemComparator
 	}
 };
 
+/** Compares avatar items by distance between you and them */
+class LLAvatarItemDistanceComparator : public LLAvatarItemComparator
+{
+public:
+	typedef std::map < LLUUID, LLVector3d > id_to_pos_map_t;
+	LLAvatarItemDistanceComparator() {};
+
+	void updateAvatarsPositions(std::vector<LLVector3d>& positions, std::vector<LLUUID>& uuids)
+	{
+		std::vector<LLVector3d>::const_iterator
+			pos_it = positions.begin(),
+			pos_end = positions.end();
+
+		std::vector<LLUUID>::const_iterator
+			id_it = uuids.begin(),
+			id_end = uuids.end();
+
+		LLAvatarItemDistanceComparator::id_to_pos_map_t pos_map;
+
+		mAvatarsPositions.clear();
+
+		for (;pos_it != pos_end && id_it != id_end; ++pos_it, ++id_it )
+		{
+			mAvatarsPositions[*id_it] = *pos_it;
+		}
+	};
+
+protected:
+	virtual bool doCompare(const LLAvatarListItem* item1, const LLAvatarListItem* item2) const
+	{
+		const LLVector3d& me_pos = gAgent.getPositionGlobal();
+		const LLVector3d& item1_pos = mAvatarsPositions.find(item1->getAvatarId())->second;
+		const LLVector3d& item2_pos = mAvatarsPositions.find(item2->getAvatarId())->second;
+		F32 dist1 = dist_vec(item1_pos, me_pos);
+		F32 dist2 = dist_vec(item2_pos, me_pos);
+		return dist1 < dist2;
+	}
+private:
+	id_to_pos_map_t mAvatarsPositions;
+};
+
+/** Comparator for comparing nearby avatar items by last spoken time */
+class LLAvatarItemRecentSpeakerComparator : public  LLAvatarItemNameComparator
+{
+public:
+	LLAvatarItemRecentSpeakerComparator() {};
+	virtual ~LLAvatarItemRecentSpeakerComparator() {};
+
+protected:
+	virtual bool doCompare(const LLAvatarListItem* item1, const LLAvatarListItem* item2) const
+	{
+		LLPointer<LLSpeaker> lhs = LLLocalSpeakerMgr::instance().findSpeaker(item1->getAvatarId());
+		LLPointer<LLSpeaker> rhs = LLLocalSpeakerMgr::instance().findSpeaker(item2->getAvatarId());
+		if ( lhs.notNull() && rhs.notNull() )
+		{
+			// Compare by last speaking time
+			if( lhs->mLastSpokeTime != rhs->mLastSpokeTime )
+				return ( lhs->mLastSpokeTime > rhs->mLastSpokeTime );
+		}
+		else if ( lhs.notNull() )
+		{
+			// True if only item1 speaker info available
+			return true;
+		}
+		else if ( rhs.notNull() )
+		{
+			// False if only item2 speaker info available
+			return false;
+		}
+		// By default compare by name.
+		return LLAvatarItemNameComparator::doCompare(item1, item2);
+	}
+};
+
 static const LLAvatarItemRecentComparator RECENT_COMPARATOR;
 static const LLAvatarItemStatusComparator STATUS_COMPARATOR;
+static LLAvatarItemDistanceComparator DISTANCE_COMPARATOR;
+static const LLAvatarItemRecentSpeakerComparator RECENT_SPEAKER_COMPARATOR;
 
 static LLRegisterPanelClassWrapper<LLPanelPeople> t_people("panel_people");
 
@@ -432,9 +509,12 @@ BOOL LLPanelPeople::postBuild()
 
 	mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
 	mRecentList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
+	mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
+	mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
 
 	setSortOrder(mRecentList,		(ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"),	false);
 	setSortOrder(mAllFriendList,	(ESortOrder)gSavedSettings.getU32("FriendsSortOrder"),		false);
+	setSortOrder(mNearbyList,		(ESortOrder)gSavedSettings.getU32("NearbyPeopleSortOrder"),	false);
 
 	LLPanel* groups_panel = getChild<LLPanel>(GROUP_TAB_NAME);
 	groups_panel->childSetAction("activate_btn", boost::bind(&LLPanelPeople::onActivateButtonClicked,	this));
@@ -495,7 +575,8 @@ BOOL LLPanelPeople::postBuild()
 
 	enable_registrar.add("People.Friends.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onFriendsViewSortMenuItemCheck,	this, _2));
 	enable_registrar.add("People.Recent.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onRecentViewSortMenuItemCheck,	this, _2));
-	
+	enable_registrar.add("People.Nearby.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onNearbyViewSortMenuItemCheck,	this, _2));
+
 	LLMenuGL* plus_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mGroupPlusMenuHandle  = plus_menu->getHandle();
 
@@ -574,8 +655,13 @@ void LLPanelPeople::updateNearbyList()
 	if (!mNearbyList)
 		return;
 
-	LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), NULL, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange"));
+	std::vector<LLVector3d> positions;
+
+	LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), &positions, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange"));
 	mNearbyList->setDirty();
+
+	DISTANCE_COMPARATOR.updateAvatarsPositions(positions, mNearbyList->getIDs());
+	LLLocalSpeakerMgr::instance().update(TRUE);
 }
 
 void LLPanelPeople::updateRecentList()
@@ -608,6 +694,12 @@ void LLPanelPeople::buttonSetAction(const std::string& btn_name, const commit_si
 	button->setClickedCallback(cb);
 }
 
+bool LLPanelPeople::isFriendOnline(const LLUUID& id)
+{
+	LLAvatarList::uuid_vector_t ids = mOnlineFriendList->getIDs();
+	return std::find(ids.begin(), ids.end(), id) != ids.end();
+}
+
 void LLPanelPeople::updateButtons()
 {
 	std::string cur_tab		= getActiveTabName();
@@ -660,7 +752,7 @@ void LLPanelPeople::updateButtons()
 		childSetEnabled("add_friend_btn",	!is_friend);
 	}
 
-	buttonSetEnabled("teleport_btn",		friends_tab_active && item_selected);
+	buttonSetEnabled("teleport_btn",		friends_tab_active && item_selected && isFriendOnline(selected_uuids.front()));
 	buttonSetEnabled("view_profile_btn",	item_selected);
 	buttonSetEnabled("im_btn",				multiple_selected); // allow starting the friends conference for multiple selection
 	buttonSetEnabled("call_btn",			item_selected);
@@ -758,6 +850,14 @@ void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save
 		list->setComparator(&RECENT_COMPARATOR);
 		list->sort();
 		break;
+	case E_SORT_BY_RECENT_SPEAKERS:
+		list->setComparator(&RECENT_SPEAKER_COMPARATOR);
+		list->sort();
+		break;
+	case E_SORT_BY_DISTANCE:
+		list->setComparator(&DISTANCE_COMPARATOR);
+		list->sort();
+		break;
 	default:
 		llwarns << "Unrecognized people sort order for " << list->getName() << llendl;
 		return;
@@ -772,7 +872,7 @@ void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save
 		else if (list == mRecentList)
 			setting = "RecentPeopleSortOrder";
 		else if (list == mNearbyList)
-			setting = "NearbyPeopleSortOrder"; // *TODO: unused by current implementation
+			setting = "NearbyPeopleSortOrder";
 
 		if (!setting.empty())
 			gSavedSettings.setU32(setting, order);
@@ -1008,12 +1108,13 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata)
 {
 	std::string chosen_item = userdata.asString();
 
-	if (chosen_item == "sort_recent")
+	if (chosen_item == "sort_by_recent_speakers")
 	{
+		setSortOrder(mNearbyList, E_SORT_BY_RECENT_SPEAKERS);
 	}
 	else if (chosen_item == "sort_name")
 	{
-		mNearbyList->sortByName();
+		setSortOrder(mNearbyList, E_SORT_BY_NAME);
 	}
 	else if (chosen_item == "view_icons")
 	{
@@ -1021,8 +1122,25 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata)
 	}
 	else if (chosen_item == "sort_distance")
 	{
+		setSortOrder(mNearbyList, E_SORT_BY_DISTANCE);
 	}
 }
+
+bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata)
+{
+	std::string item = userdata.asString();
+	U32 sort_order = gSavedSettings.getU32("NearbyPeopleSortOrder");
+
+	if (item == "sort_by_recent_speakers")
+		return sort_order == E_SORT_BY_RECENT_SPEAKERS;
+	if (item == "sort_name")
+		return sort_order == E_SORT_BY_NAME;
+	if (item == "sort_distance")
+		return sort_order == E_SORT_BY_DISTANCE;
+
+	return false;
+}
+
 void LLPanelPeople::onRecentViewSortMenuItemClicked(const LLSD& userdata)
 {
 	std::string chosen_item = userdata.asString();
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 9bf9befe906bee1623a9c4c0c513536689d0be71..a369bcd3e2ad6bf64c65507b7f5db2031d6a0c2f 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -62,6 +62,8 @@ class LLPanelPeople : public LLPanel
 		E_SORT_BY_NAME = 0,
 		E_SORT_BY_STATUS = 1,
 		E_SORT_BY_MOST_RECENT = 2,
+		E_SORT_BY_DISTANCE = 3,
+		E_SORT_BY_RECENT_SPEAKERS = 4,
 	} ESortOrder;
 
 	// methods indirectly called by the updaters
@@ -69,6 +71,8 @@ class LLPanelPeople : public LLPanel
 	void					updateNearbyList();
 	void					updateRecentList();
 
+	bool					isFriendOnline(const LLUUID& id);
+
 	void					updateButtons();
 	std::string				getActiveTabName() const;
 	LLUUID					getCurrentItemID() const;
@@ -115,6 +119,7 @@ class LLPanelPeople : public LLPanel
 
 	bool					onFriendsViewSortMenuItemCheck(const LLSD& userdata);
 	bool					onRecentViewSortMenuItemCheck(const LLSD& userdata);
+	bool					onNearbyViewSortMenuItemCheck(const LLSD& userdata);
 
 	// misc callbacks
 	static void				onAvatarPicked(
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index f5c4f89702b88bbf16e808820c0a2e895e6cefdd..da0c8d5020a8e67bf0eea8cd7ed2bdabc31396fc 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -440,7 +440,8 @@ void LLPanelPickEdit::resetDirty()
 
 BOOL LLPanelPickEdit::isDirty() const
 {
-	if( LLPanelPickInfo::isDirty()
+	if( mNewPick
+		|| LLPanelPickInfo::isDirty()
 		|| mLocationChanged
 		|| mSnapshotCtrl->isDirty()
 		|| getChild<LLLineEditor>("pick_name")->isDirty()
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 2bf04f96814233a6507466fcefd0487b8a52081d..c30658755ac3be3d0d69306281965e6cd5f95b02 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -45,11 +45,14 @@
 #include "llviewermenu.h"
 #include "llregistry.h"
 
+#include "llaccordionctrl.h"
+#include "llaccordionctrltab.h"
 #include "llpanelpicks.h"
 #include "llavatarpropertiesprocessor.h"
 #include "llpanelavatar.h"
 #include "llpanelprofile.h"
 #include "llpanelpick.h"
+#include "llpanelclassified.h"
 
 static const std::string XML_BTN_NEW = "new_btn";
 static const std::string XML_BTN_DELETE = "trash_btn";
@@ -62,9 +65,40 @@ static const std::string PICK_ID("pick_id");
 static const std::string PICK_CREATOR_ID("pick_creator_id");
 static const std::string PICK_NAME("pick_name");
 
+static const std::string CLASSIFIED_ID("classified_id");
+static const std::string CLASSIFIED_NAME("classified_name");
+
 
 static LLRegisterPanelClassWrapper<LLPanelPicks> t_panel_picks("panel_picks");
 
+//////////////////////////////////////////////////////////////////////////
+
+/**
+ * Copy&Pasted from old LLPanelClassified. This class does nothing at the moment.
+ * Subscribing to "classifiedclickthrough" removes a few warnings.
+ */
+class LLClassifiedClickThrough : public LLDispatchHandler
+{
+public:
+
+	// "classifiedclickthrough"
+	// strings[0] = classified_id
+	// strings[1] = teleport_clicks
+	// strings[2] = map_clicks
+	// strings[3] = profile_clicks
+	virtual bool operator()(
+		const LLDispatcher* dispatcher,
+		const std::string& key,
+		const LLUUID& invoice,
+		const sparam_t& strings)
+	{
+		if (strings.size() != 4) 
+			return false;
+
+		return true;
+	}
+};
+
 //-----------------------------------------------------------------------------
 // LLPanelPicks
 //-----------------------------------------------------------------------------
@@ -74,10 +108,19 @@ LLPanelPicks::LLPanelPicks()
 	mProfilePanel(NULL),
 	mPickPanel(NULL),
 	mPicksList(NULL),
+	mClassifiedsList(NULL),
 	mPanelPickInfo(NULL),
 	mPanelPickEdit(NULL),
-	mOverflowMenu(NULL)
+	mOverflowMenu(NULL),
+	mPlusMenu(NULL),
+	mPicksAccTab(NULL),
+	mClassifiedsAccTab(NULL),
+	mPanelClassifiedInfo(NULL),
+	mPanelClassifiedEdit(NULL),
+	mClickThroughDisp(NULL)
 {
+	mClickThroughDisp = new LLClassifiedClickThrough();
+	gGenericDispatcher.addHandler("classifiedclickthrough", mClickThroughDisp);
 }
 
 LLPanelPicks::~LLPanelPicks()
@@ -86,6 +129,8 @@ LLPanelPicks::~LLPanelPicks()
 	{
 		LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
 	}
+
+	delete mClickThroughDisp;
 }
 
 void* LLPanelPicks::create(void* data /* = NULL */)
@@ -100,6 +145,9 @@ void LLPanelPicks::updateData()
 	{
 		mPicksList->clear();
 		LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId());
+
+		mClassifiedsList->clear();
+		LLAvatarPropertiesProcessor::getInstance()->sendAvatarClassifiedsRequest(getAvatarId());
 	}
 }
 
@@ -138,13 +186,47 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
 
 				mPicksList->addItem(picture, pick_value);
 
-				picture->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickItem, this, _1));
+				picture->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickPickItem, this, _1));
 				picture->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4));
 				picture->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this));
 			}
 
+			showAccordion("tab_picks", mPicksList->size());
+
+			resetDirty();
+			updateButtons();
+		}
+	}
+	else if(APT_CLASSIFIEDS == type)
+	{
+		LLAvatarClassifieds* c_info = static_cast<LLAvatarClassifieds*>(data);
+		if(c_info && getAvatarId() == c_info->target_id)
+		{
+			mClassifiedsList->clear();
+
+			LLAvatarClassifieds::classifieds_list_t::const_iterator it = c_info->classifieds_list.begin();
+			for(; c_info->classifieds_list.end() != it; ++it)
+			{
+				LLAvatarClassifieds::classified_data c_data = *it;
+
+				LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), c_data.classified_id);
+				c_item->childSetAction("info_chevron", boost::bind(&LLPanelPicks::onClickInfo, this));
+				c_item->setClassifiedName(c_data.name);
+
+				LLSD pick_value = LLSD();
+				pick_value.insert(CLASSIFIED_ID, c_data.classified_id);
+				pick_value.insert(CLASSIFIED_NAME, c_data.name);
+
+				mClassifiedsList->addItem(c_item, pick_value);
+
+				c_item->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickClassifiedItem, this, _1));
+				c_item->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4));
+				c_item->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this));
+			}
+
+			showAccordion("tab_classifieds", mClassifiedsList->size());
+
 			resetDirty();
-			LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this);
 			updateButtons();
 		}
 	}
@@ -158,16 +240,44 @@ LLPickItem* LLPanelPicks::getSelectedPickItem()
 	return dynamic_cast<LLPickItem*>(selected_item);
 }
 
+LLClassifiedItem* LLPanelPicks::getSelectedClassifiedItem()
+{
+	LLPanel* selected_item = mClassifiedsList->getSelectedItem();
+	if (!selected_item) 
+	{
+		return NULL;
+	}
+	return dynamic_cast<LLClassifiedItem*>(selected_item);
+}
+
 BOOL LLPanelPicks::postBuild()
 {
 	mPicksList = getChild<LLFlatListView>("picks_list");
+	mClassifiedsList = getChild<LLFlatListView>("classifieds_list");
+
+	mPicksList->setCommitOnSelectionChange(true);
+	mClassifiedsList->setCommitOnSelectionChange(true);
+
+	mPicksList->setCommitCallback(boost::bind(&LLPanelPicks::onListCommit, this, mPicksList));
+	mClassifiedsList->setCommitCallback(boost::bind(&LLPanelPicks::onListCommit, this, mClassifiedsList));
+
+	mPicksList->setNoItemsCommentText(getString("no_picks"));
+	mClassifiedsList->setNoItemsCommentText(getString("no_classifieds"));
 
-	childSetAction(XML_BTN_NEW, boost::bind(&LLPanelPicks::onClickNew, this));
+	childSetAction(XML_BTN_NEW, boost::bind(&LLPanelPicks::onClickPlusBtn, this));
 	childSetAction(XML_BTN_DELETE, boost::bind(&LLPanelPicks::onClickDelete, this));
 	childSetAction(XML_BTN_TELEPORT, boost::bind(&LLPanelPicks::onClickTeleport, this));
 	childSetAction(XML_BTN_SHOW_ON_MAP, boost::bind(&LLPanelPicks::onClickMap, this));
 	childSetAction(XML_BTN_INFO, boost::bind(&LLPanelPicks::onClickInfo, this));
 	childSetAction(XML_BTN_OVERFLOW, boost::bind(&LLPanelPicks::onOverflowButtonClicked, this));
+
+	mPicksAccTab = getChild<LLAccordionCtrlTab>("tab_picks");
+	mPicksAccTab->setDropDownStateChangedCallback(boost::bind(&LLPanelPicks::onAccordionStateChanged, this, mPicksAccTab));
+	mPicksAccTab->setDisplayChildren(true);
+
+	mClassifiedsAccTab = getChild<LLAccordionCtrlTab>("tab_classifieds");
+	mClassifiedsAccTab->setDropDownStateChangedCallback(boost::bind(&LLPanelPicks::onAccordionStateChanged, this, mClassifiedsAccTab));
+	mClassifiedsAccTab->setDisplayChildren(false);
 	
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registar;
 	registar.add("Pick.Info", boost::bind(&LLPanelPicks::onClickInfo, this));
@@ -180,6 +290,10 @@ BOOL LLPanelPicks::postBuild()
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar overflow_registar;
 	overflow_registar.add("PicksList.Overflow", boost::bind(&LLPanelPicks::onOverflowMenuItemClicked, this, _2));
 	mOverflowMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+
+	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar plus_registar;
+	plus_registar.add("Picks.Plus.Action", boost::bind(&LLPanelPicks::onPlusMenuItemClicked, this, _2));
+	mPlusMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	
 	return TRUE;
 }
@@ -202,6 +316,34 @@ void LLPanelPicks::onOverflowMenuItemClicked(const LLSD& param)
 	}
 }
 
+void LLPanelPicks::onPlusMenuItemClicked(const LLSD& param)
+{
+	std::string value = param.asString();
+
+	if("new_pick" == value)
+	{
+		createNewPick();
+	}
+	else if("new_classified" == value)
+	{
+		createNewClassified();
+	}
+}
+
+void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab)
+{
+	if(!mPicksAccTab->getDisplayChildren())
+	{
+		mPicksList->resetSelection(true);
+	}
+	if(!mClassifiedsAccTab->getDisplayChildren())
+	{
+		mClassifiedsList->resetSelection(true);
+	}
+
+	updateButtons();
+}
+
 void LLPanelPicks::onOverflowButtonClicked()
 {
 	LLRect rect;
@@ -242,6 +384,9 @@ void LLPanelPicks::onOpen(const LLSD& key)
 
 	if(getAvatarId() != id)
 	{
+		showAccordion("tab_picks", false);
+		showAccordion("tab_classifieds", false);
+
 		mPicksList->goToTop();
 		// Set dummy value to make panel dirty and make it reload picks
 		setValue(LLSD());
@@ -250,21 +395,50 @@ void LLPanelPicks::onOpen(const LLSD& key)
 	LLPanelProfileTab::onOpen(key);
 }
 
+void LLPanelPicks::onListCommit(const LLFlatListView* f_list)
+{
+	// Make sure only one of the lists has selection.
+	if(f_list == mPicksList)
+	{
+		mClassifiedsList->resetSelection(true);
+	}
+	else if(f_list == mClassifiedsList)
+	{
+		mPicksList->resetSelection(true);
+	}
+	else
+	{
+		llwarns << "Unknown list" << llendl;
+	}
+
+	updateButtons();
+}
+
 //static
 void LLPanelPicks::onClickDelete()
 {
-	LLSD pick_value = mPicksList->getSelectedValue();
-	if (pick_value.isUndefined()) return;
+	LLSD value = mPicksList->getSelectedValue();
+	if (value.isDefined())
+	{
+		LLSD args; 
+		args["PICK"] = value[PICK_NAME]; 
+		LLNotifications::instance().add("DeleteAvatarPick", args, LLSD(), boost::bind(&LLPanelPicks::callbackDeletePick, this, _1, _2)); 
+		return;
+	}
 
-	LLSD args; 
-	args["PICK"] = pick_value[PICK_NAME]; 
-	LLNotifications::instance().add("DeleteAvatarPick", args, LLSD(), boost::bind(&LLPanelPicks::callbackDelete, this, _1, _2)); 
+	value = mClassifiedsList->getSelectedValue();
+	if(value.isDefined())
+	{
+		LLSD args; 
+		args["NAME"] = value[CLASSIFIED_NAME]; 
+		LLNotifications::instance().add("DeleteClassified", args, LLSD(), boost::bind(&LLPanelPicks::callbackDeleteClassified, this, _1, _2)); 
+		return;
+	}
 }
 
-bool LLPanelPicks::callbackDelete(const LLSD& notification, const LLSD& response) 
+bool LLPanelPicks::callbackDeletePick(const LLSD& notification, const LLSD& response) 
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
-
 	LLSD pick_value = mPicksList->getSelectedValue();
 
 	if (0 == option)
@@ -276,6 +450,20 @@ bool LLPanelPicks::callbackDelete(const LLSD& notification, const LLSD& response
 	return false;
 }
 
+bool LLPanelPicks::callbackDeleteClassified(const LLSD& notification, const LLSD& response) 
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	LLSD value = mClassifiedsList->getSelectedValue();
+
+	if (0 == option)
+	{
+		LLAvatarPropertiesProcessor::instance().sendClassifiedDelete(value[CLASSIFIED_ID]);
+		mClassifiedsList->removeItemByValue(value);
+	}
+	updateButtons();
+	return false;
+}
+
 bool LLPanelPicks::callbackTeleport( const LLSD& notification, const LLSD& response )
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
@@ -291,9 +479,14 @@ bool LLPanelPicks::callbackTeleport( const LLSD& notification, const LLSD& respo
 void LLPanelPicks::onClickTeleport()
 {
 	LLPickItem* pick_item = getSelectedPickItem();
-	if (!pick_item) return;
+	LLClassifiedItem* c_item = getSelectedClassifiedItem();
+
+	LLVector3d pos;
+	if(pick_item)
+		pos = pick_item->getPosGlobal();
+	else if(c_item)
+		pos = c_item->getPosGlobal();
 
-	LLVector3d pos = pick_item->getPosGlobal();
 	if (!pos.isExactlyZero())
 	{
 		gAgent.teleportViaLocation(pos);
@@ -305,9 +498,15 @@ void LLPanelPicks::onClickTeleport()
 void LLPanelPicks::onClickMap()
 {
 	LLPickItem* pick_item = getSelectedPickItem();
-	if (!pick_item) return;
+	LLClassifiedItem* c_item = getSelectedClassifiedItem();
+
+	LLVector3d pos;
+	if (pick_item)
+		pos = pick_item->getPosGlobal();
+	else if(c_item)
+		pos = c_item->getPosGlobal();
 
-	LLFloaterWorldMap::getInstance()->trackLocation(pick_item->getPosGlobal());
+	LLFloaterWorldMap::getInstance()->trackLocation(pos);
 	LLFloaterReg::showInstance("world_map", "center");
 }
 
@@ -325,7 +524,7 @@ void LLPanelPicks::onRightMouseUpItem(LLUICtrl* item, S32 x, S32 y, MASK mask)
 	}
 }
 
-void LLPanelPicks::onDoubleClickItem(LLUICtrl* item)
+void LLPanelPicks::onDoubleClickPickItem(LLUICtrl* item)
 {
 	LLSD pick_value = mPicksList->getSelectedValue();
 	if (pick_value.isUndefined()) return;
@@ -335,9 +534,19 @@ void LLPanelPicks::onDoubleClickItem(LLUICtrl* item)
 	LLNotifications::instance().add("TeleportToPick", args, LLSD(), boost::bind(&LLPanelPicks::callbackTeleport, this, _1, _2)); 
 }
 
+void LLPanelPicks::onDoubleClickClassifiedItem(LLUICtrl* item)
+{
+	LLSD value = mClassifiedsList->getSelectedValue();
+	if (value.isUndefined()) return;
+
+	LLSD args; 
+	args["CLASSIFIED"] = value[CLASSIFIED_NAME]; 
+	LLNotifications::instance().add("TeleportToClassified", args, LLSD(), boost::bind(&LLPanelPicks::callbackTeleport, this, _1, _2)); 
+}
+
 void LLPanelPicks::updateButtons()
 {
-	bool has_selected = mPicksList->numSelected();
+	bool has_selected = mPicksList->numSelected() > 0 || mClassifiedsList->numSelected() > 0;
 
 	if (getAvatarId() == gAgentID)
 	{
@@ -366,14 +575,43 @@ void LLPanelPicks::buildPickPanel()
 // 	}
 }
 
-void LLPanelPicks::onClickNew()
+void LLPanelPicks::onClickPlusBtn()
+{
+	LLRect rect;
+	childGetRect(XML_BTN_NEW, rect);
+
+	mPlusMenu->updateParent(LLMenuGL::sMenuContainer);
+	mPlusMenu->setButtonRect(rect, this);
+	LLMenuGL::showPopup(this, mPlusMenu, rect.mLeft, rect.mTop);
+}
+
+void LLPanelPicks::createNewPick()
 {
 	createPickEditPanel();
 
 	getProfilePanel()->openPanel(mPanelPickEdit, LLSD());
 }
 
+void LLPanelPicks::createNewClassified()
+{
+	createClassifiedEditPanel();
+
+	getProfilePanel()->openPanel(mPanelClassifiedEdit, LLSD());
+}
+
 void LLPanelPicks::onClickInfo()
+{
+	if(mPicksList->numSelected() > 0)
+	{
+		openPickInfo();
+	}
+	else if(mClassifiedsList->numSelected() > 0)
+	{
+		openClassifiedInfo();
+	}
+}
+
+void LLPanelPicks::openPickInfo()
 {
 	LLSD selected_value = mPicksList->getSelectedValue();
 	if (selected_value.isUndefined()) return;
@@ -392,6 +630,33 @@ void LLPanelPicks::onClickInfo()
 	getProfilePanel()->openPanel(mPanelPickInfo, params);
 }
 
+void LLPanelPicks::openClassifiedInfo()
+{
+	LLSD selected_value = mClassifiedsList->getSelectedValue();
+	if (selected_value.isUndefined()) return;
+
+	LLClassifiedItem* c_item = getSelectedClassifiedItem();
+
+	createClassifiedInfoPanel();
+
+	LLSD params;
+ 	params["classified_id"] = c_item->getClassifiedId();
+ 	params["avatar_id"] = c_item->getAvatarId();
+ 	params["snapshot_id"] = c_item->getSnapshotId();
+ 	params["name"] = c_item->getClassifiedName();
+ 	params["desc"] = c_item->getDescription();
+
+	getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
+}
+
+void LLPanelPicks::showAccordion(const std::string& name, bool show)
+{
+	LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name);
+	tab->setVisible(show);
+	LLAccordionCtrl* acc = getChild<LLAccordionCtrl>("accordion");
+	acc->arrange();
+}
+
 void LLPanelPicks::onPanelPickClose(LLPanel* panel)
 {
 	panel->setVisible(FALSE);
@@ -403,6 +668,61 @@ void LLPanelPicks::onPanelPickSave(LLPanel* panel)
 	updateButtons();
 }
 
+void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel)
+{
+	if(panel->isNew())
+	{
+		LLClassifiedItem* c_item = new LLClassifiedItem(getAvatarId(), panel->getClassifiedId());
+		
+		c_item->setClassifiedName(panel->getClassifiedName());
+		c_item->setDescription(panel->getDescription());
+		c_item->setSnapshotId(panel->getSnapshotId());
+
+		LLSD c_value;
+		c_value.insert(CLASSIFIED_ID, c_item->getClassifiedId());
+		c_value.insert(CLASSIFIED_NAME, c_item->getClassifiedName());
+		mClassifiedsList->addItem(c_item, c_value, ADD_TOP);
+
+		c_item->setDoubleClickCallback(boost::bind(&LLPanelPicks::onDoubleClickClassifiedItem, this, _1));
+		c_item->setRightMouseUpCallback(boost::bind(&LLPanelPicks::onRightMouseUpItem, this, _1, _2, _3, _4));
+		c_item->setMouseUpCallback(boost::bind(&LLPanelPicks::updateButtons, this));
+		c_item->childSetAction("info_chevron", boost::bind(&LLPanelPicks::onClickInfo, this));
+	}
+	else 
+	{
+		onPanelClassifiedClose(panel);
+		return;
+	}
+
+	onPanelPickClose(panel);
+	updateButtons();
+}
+
+void LLPanelPicks::onPanelClassifiedClose(LLPanelClassifiedInfo* panel)
+{
+	if(panel->getInfoLoaded() && !panel->isDirty())
+	{
+		std::vector<LLSD> values;
+		mClassifiedsList->getValues(values);
+		for(size_t n = 0; n < values.size(); ++n)
+		{
+			LLUUID c_id = values[n][CLASSIFIED_ID].asUUID();
+			if(panel->getClassifiedId() == c_id)
+			{
+				LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(
+					mClassifiedsList->getItemByValue(values[n]));
+
+				c_item->setClassifiedName(panel->getClassifiedName());
+				c_item->setDescription(panel->getDescription());
+				c_item->setSnapshotId(panel->getSnapshotId());
+			}
+		}
+	}
+
+	onPanelPickClose(panel);
+	updateButtons();
+}
+
 void LLPanelPicks::createPickInfoPanel()
 {
 	if(!mPanelPickInfo)
@@ -414,6 +734,28 @@ void LLPanelPicks::createPickInfoPanel()
 	}
 }
 
+void LLPanelPicks::createClassifiedInfoPanel()
+{
+	if(!mPanelClassifiedInfo)
+	{
+		mPanelClassifiedInfo = LLPanelClassifiedInfo::create();
+		mPanelClassifiedInfo->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedInfo));
+		mPanelClassifiedInfo->setVisible(FALSE);
+	}
+}
+
+void LLPanelPicks::createClassifiedEditPanel()
+{
+	if(!mPanelClassifiedEdit)
+	{
+		mPanelClassifiedEdit = LLPanelClassifiedEdit::create();
+		mPanelClassifiedEdit->setExitCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit));
+		mPanelClassifiedEdit->setSaveCallback(boost::bind(&LLPanelPicks::onPanelClassifiedSave, this, mPanelClassifiedEdit));
+		mPanelClassifiedEdit->setCancelCallback(boost::bind(&LLPanelPicks::onPanelClassifiedClose, this, mPanelClassifiedEdit));
+		mPanelClassifiedEdit->setVisible(FALSE);
+	}
+}
+
 void LLPanelPicks::createPickEditPanel()
 {
 	if(!mPanelPickEdit)
@@ -473,9 +815,38 @@ void LLPanelPicks::onPanelPickEdit()
 	getProfilePanel()->openPanel(mPanelPickEdit, params);
 }
 
+void LLPanelPicks::onPanelClassifiedEdit()
+{
+	LLSD selected_value = mClassifiedsList->getSelectedValue();
+	if (selected_value.isUndefined()) 
+	{
+		return;
+	}
+
+	LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem());
+
+	createClassifiedEditPanel();
+
+	LLSD params;
+	params["classified_id"] = c_item->getClassifiedId();
+	params["avatar_id"] = c_item->getAvatarId();
+	params["snapshot_id"] = c_item->getSnapshotId();
+	params["name"] = c_item->getClassifiedName();
+	params["desc"] = c_item->getDescription();
+
+	getProfilePanel()->openPanel(mPanelClassifiedEdit, params);
+}
+
 void LLPanelPicks::onClickMenuEdit()
 {
-	onPanelPickEdit();
+	if(getSelectedPickItem())
+	{
+		onPanelPickEdit();
+	}
+	else if(getSelectedClassifiedItem())
+	{
+		onPanelClassifiedEdit();
+	}
 }
 
 inline LLPanelProfile* LLPanelPicks::getProfilePanel()
@@ -610,3 +981,80 @@ void LLPickItem::setValue(const LLSD& value)
 	if (!value.has("selected")) return;
 	childSetVisible("selected_icon", value["selected"]);
 }
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classified_id)
+ : LLPanel()
+ , mAvatarId(avatar_id)
+ , mClassifiedId(classified_id)
+{
+	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_classifieds_list_item.xml");
+
+	LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
+	LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
+}
+
+LLClassifiedItem::~LLClassifiedItem()
+{
+	LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
+}
+
+void LLClassifiedItem::processProperties(void* data, EAvatarProcessorType type)
+{
+	if(APT_CLASSIFIED_INFO != type)
+	{
+		return;
+	}
+
+	LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
+	if( !c_info || c_info->classified_id != getClassifiedId() )
+	{
+		return;
+	}
+
+	setClassifiedName(c_info->name);
+	setDescription(c_info->description);
+	setSnapshotId(c_info->snapshot_id);
+	setPosGlobal(c_info->pos_global);
+
+	LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
+}
+
+BOOL LLClassifiedItem::postBuild()
+{
+	setMouseEnterCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", true));
+	setMouseLeaveCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", false));
+	return TRUE;
+}
+
+void LLClassifiedItem::setValue(const LLSD& value)
+{
+	if (!value.isMap()) return;;
+	if (!value.has("selected")) return;
+	childSetVisible("selected_icon", value["selected"]);
+}
+
+void LLClassifiedItem::setClassifiedName(const std::string& name)
+{
+	childSetValue("name", name);
+}
+
+void LLClassifiedItem::setDescription(const std::string& desc)
+{
+	childSetValue("description", desc);
+}
+
+void LLClassifiedItem::setSnapshotId(const LLUUID& snapshot_id)
+{
+	childSetValue("picture", snapshot_id);
+}
+
+LLUUID LLClassifiedItem::getSnapshotId()
+{
+	return childGetValue("picture");
+}
+
+//EOF
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 5a2754ad106fd7b8767f6dfea28f9a4273e50a83..4b90ea5048b3f572478ac95974620ca368f6e35b 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -40,6 +40,7 @@
 #include "llpanelavatar.h"
 #include "llregistry.h"
 
+class LLAccordionCtrlTab;
 class LLPanelProfile;
 class LLMessageSystem;
 class LLVector3d;
@@ -47,10 +48,18 @@ class LLPanelProfileTab;
 class LLAgent;
 class LLMenuGL;
 class LLPickItem;
+class LLClassifiedItem;
 class LLFlatListView;
 class LLPanelPickInfo;
 class LLPanelPickEdit;
 class LLToggleableMenu;
+class LLPanelClassifiedInfo;
+class LLPanelClassifiedEdit;
+class LLClassifiedClickThrough;
+
+// *TODO
+// Panel Picks has been consolidated with Classifieds (EXT-2095), give LLPanelPicks
+// and corresponding files (cpp, h, xml) a new name. (new name is TBD at the moment)
 
 class LLPanelPicks 
 	: public LLPanelProfileTab
@@ -71,6 +80,7 @@ class LLPanelPicks
 
 	// returns the selected pick item
 	LLPickItem* getSelectedPickItem();
+	LLClassifiedItem* getSelectedClassifiedItem();
 
 	//*NOTE top down approch when panel toggling is done only by 
 	// parent panels failed to work (picks related code was in me profile panel)
@@ -83,41 +93,67 @@ class LLPanelPicks
 
 	void onOverflowMenuItemClicked(const LLSD& param);
 	void onOverflowButtonClicked();
+	void onPlusMenuItemClicked(const LLSD& param);
+
+	void onListCommit(const LLFlatListView* f_list);
+	void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab);
 
 	//------------------------------------------------
 	// Callbacks which require panel toggling
 	//------------------------------------------------
-	void onClickNew();
+	void onClickPlusBtn();
 	void onClickInfo();
 	void onPanelPickClose(LLPanel* panel);
 	void onPanelPickSave(LLPanel* panel);
+	void onPanelClassifiedSave(LLPanelClassifiedEdit* panel);
+	void onPanelClassifiedClose(LLPanelClassifiedInfo* panel);
 	void onPanelPickEdit();
+	void onPanelClassifiedEdit();
 	void onClickMenuEdit();
 
+	void createNewPick();
+	void createNewClassified();
+
+	void openPickInfo();
+	void openClassifiedInfo();
+
+	void showAccordion(const std::string& name, bool show);
+
 	void buildPickPanel();
 
-	bool callbackDelete(const LLSD& notification, const LLSD& response);
+	bool callbackDeletePick(const LLSD& notification, const LLSD& response);
+	bool callbackDeleteClassified(const LLSD& notification, const LLSD& response);
 	bool callbackTeleport(const LLSD& notification, const LLSD& response);
 
 	void updateButtons();
 
-	virtual void onDoubleClickItem(LLUICtrl* item);
+	virtual void onDoubleClickPickItem(LLUICtrl* item);
+	virtual void onDoubleClickClassifiedItem(LLUICtrl* item);
 	virtual void onRightMouseUpItem(LLUICtrl* item, S32 x, S32 y, MASK mask);
 
 	LLPanelProfile* getProfilePanel();
 
 	void createPickInfoPanel();
 	void createPickEditPanel();
-// 	void openPickEditPanel(LLPickItem* pick);
-// 	void openPickInfoPanel(LLPickItem* pick);
+	void createClassifiedInfoPanel();
+	void createClassifiedEditPanel();
 
 	LLMenuGL* mPopupMenu;
 	LLPanelProfile* mProfilePanel;
 	LLPanelPickInfo* mPickPanel;
 	LLFlatListView* mPicksList;
+	LLFlatListView* mClassifiedsList;
 	LLPanelPickInfo* mPanelPickInfo;
+	LLPanelClassifiedInfo* mPanelClassifiedInfo;
+	LLPanelClassifiedEdit* mPanelClassifiedEdit;
 	LLPanelPickEdit* mPanelPickEdit;
 	LLToggleableMenu* mOverflowMenu;
+	LLToggleableMenu* mPlusMenu;
+
+	LLAccordionCtrlTab* mPicksAccTab;
+	LLAccordionCtrlTab* mClassifiedsAccTab;
+
+	LLClassifiedClickThrough* mClickThroughDisp;
 };
 
 class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver
@@ -189,4 +225,48 @@ class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver
 	std::string mSimName;
 };
 
+class LLClassifiedItem : public LLPanel, public LLAvatarPropertiesObserver
+{
+public:
+
+	LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classified_id);
+	
+	virtual ~LLClassifiedItem();
+
+	/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void setValue(const LLSD& value);
+
+	LLUUID getAvatarId() {return mAvatarId;}
+	
+	void setAvatarId(const LLUUID& avatar_id) {mAvatarId = avatar_id;}
+
+	LLUUID getClassifiedId() {return mClassifiedId;}
+
+	void setClassifiedId(const LLUUID& classified_id) {mClassifiedId = classified_id;}
+
+	void setPosGlobal(const LLVector3d& pos) { mPosGlobal = pos; }
+
+	const LLVector3d& getPosGlobal() { return mPosGlobal; }
+
+	void setClassifiedName (const std::string& name);
+
+	std::string getClassifiedName() { return childGetValue("name").asString(); }
+
+	void setDescription(const std::string& desc);
+
+	std::string getDescription() { return childGetValue("description").asString(); }
+
+	void setSnapshotId(const LLUUID& snapshot_id);
+
+	LLUUID getSnapshotId();
+
+private:
+	LLUUID mAvatarId;
+	LLUUID mClassifiedId;
+	LLVector3d mPosGlobal;
+};
+
 #endif // LL_LLPANELPICKS_H
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index c60065101581e1c1a4053fcba49d2b1bf5a2f341..963d39de8aa1c1deb5b5f100b60e68b16f9b218a 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -40,7 +40,7 @@
 
 #include "llsdutil_math.h"
 
-#include "llscrollcontainer.h"
+#include "lliconctrl.h"
 #include "lltextbox.h"
 
 #include "llagent.h"
@@ -57,8 +57,7 @@ LLPanelPlaceInfo::LLPanelPlaceInfo()
 :	LLPanel(),
 	mParcelID(),
 	mRequestedID(),
-	mPosRegion(),
-	mMinHeight(0)
+	mPosRegion()
 {}
 
 //virtual
@@ -81,12 +80,9 @@ BOOL LLPanelPlaceInfo::postBuild()
 	mParcelName = getChild<LLTextBox>("parcel_title");
 	mDescEditor = getChild<LLExpandableTextBox>("description");
 
+	mMaturityRatingIcon = getChild<LLIconCtrl>("maturity_icon");
 	mMaturityRatingText = getChild<LLTextBox>("maturity_value");
 
-	LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll");
-	scroll_container->setBorderVisible(FALSE);
-	mMinHeight = scroll_container->getScrolledViewRect().getHeight();
-
 	return TRUE;
 }
 
@@ -98,6 +94,7 @@ void LLPanelPlaceInfo::resetLocation()
 	mPosRegion.clearVec();
 
 	std::string not_available = getString("not_available");
+	mMaturityRatingIcon->setValue(not_available);
 	mMaturityRatingText->setValue(not_available);
 	mRegionName->setText(not_available);
 	mParcelName->setText(not_available);
@@ -204,20 +201,6 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
 		mDescEditor->setText(parcel_data.desc);
 	}
 
-	// HACK: Flag 0x2 == adult region,
-	// Flag 0x1 == mature region, otherwise assume PG
-	std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
-	if (parcel_data.flags & 0x2)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
-	}
-	else if (parcel_data.flags & 0x1)
-	{
-		rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
-	}
-
-	mMaturityRatingText->setValue(rating);
-
 	S32 region_x;
 	S32 region_y;
 	S32 region_z;
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index ec30397cff5388a53bcae89c8c807ef10a40acd7..133933a880df7d176250284daee3a6f1b81be300 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -41,6 +41,7 @@
 #include "llremoteparcelrequest.h"
 
 class LLExpandableTextBox;
+class LLIconCtrl;
 class LLInventoryItem;
 class LLPanelPickEdit;
 class LLParcel;
@@ -109,7 +110,6 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 	LLUUID					mRequestedID;
 	LLVector3				mPosRegion;
 	std::string				mCurrentTitle;
-	S32						mMinHeight;
 	INFO_TYPE 				mInfoType;
 
 	LLTextBox*				mTitle;
@@ -117,6 +117,7 @@ class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver
 	LLTextBox*				mRegionName;
 	LLTextBox*				mParcelName;
 	LLExpandableTextBox*	mDescEditor;
+	LLIconCtrl*				mMaturityRatingIcon;
 	LLTextBox*				mMaturityRatingText;
 };
 
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 2a9ba4697d6b62edf513f4ebc573b9f5ac06ebec..61501cc1b1bf00450eda7fae88e40c3c870ea2db 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -97,7 +97,6 @@ BOOL LLPanelPlaceProfile::postBuild()
 				setMouseDownCallback(boost::bind(&LLPanelPlaceProfile::onForSaleBannerClick, this));
 
 	mParcelOwner = getChild<LLTextBox>("owner_value");
-	mLastVisited = getChild<LLTextBox>("last_visited_value");
 
 	mParcelRatingIcon = getChild<LLIconCtrl>("rating_icon");
 	mParcelRatingText = getChild<LLTextBox>("rating_value");
@@ -165,7 +164,6 @@ void LLPanelPlaceProfile::resetLocation()
 
 	std::string not_available = getString("not_available");
 	mParcelOwner->setValue(not_available);
-	mLastVisited->setValue(not_available);
 
 	mParcelRatingIcon->setValue(not_available);
 	mParcelRatingText->setText(not_available);
@@ -209,17 +207,13 @@ void LLPanelPlaceProfile::resetLocation()
 void LLPanelPlaceProfile::setInfoType(INFO_TYPE type)
 {
 	bool is_info_type_agent = type == AGENT;
-	bool is_info_type_teleport_history = type == TELEPORT_HISTORY;
 
-	getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent);
+	mMaturityRatingIcon->setVisible(!is_info_type_agent);
 	mMaturityRatingText->setVisible(!is_info_type_agent);
 
 	getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent);
 	mParcelOwner->setVisible(is_info_type_agent);
 
-	getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history);
-	mLastVisited->setVisible(is_info_type_teleport_history);
-
 	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
 
 	switch(type)
@@ -238,6 +232,30 @@ void LLPanelPlaceProfile::setInfoType(INFO_TYPE type)
 	LLPanelPlaceInfo::setInfoType(type);
 }
 
+// virtual
+void LLPanelPlaceProfile::processParcelInfo(const LLParcelData& parcel_data)
+{
+	LLPanelPlaceInfo::processParcelInfo(parcel_data);
+
+	// HACK: Flag 0x2 == adult region,
+	// Flag 0x1 == mature region, otherwise assume PG
+	if (parcel_data.flags & 0x2)
+	{
+		mMaturityRatingIcon->setValue(icon_r);
+		mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_ADULT));
+	}
+	else if (parcel_data.flags & 0x1)
+	{
+		mMaturityRatingIcon->setValue(icon_m);
+		mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_MATURE));
+	}
+	else
+	{
+		mMaturityRatingIcon->setValue(icon_pg);
+		mMaturityRatingText->setText(LLViewerRegion::accessToString(SIM_ACCESS_PG));
+	}
+}
+
 void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 													LLViewerRegion* region,
 													const LLVector3d& pos_global,
@@ -521,22 +539,6 @@ void LLPanelPlaceProfile::updateCovenantText(const std::string &text)
 	mCovenantText->setText(text);
 }
 
-void LLPanelPlaceProfile::updateLastVisitedText(const LLDate &date)
-{
-	if (date.isNull())
-	{
-		mLastVisited->setText(getString("unknown"));
-	}
-	else
-	{
-		std::string timeStr = getString("acquired_date");
-		LLSD substitution;
-		substitution["datetime"] = (S32) date.secondsSinceEpoch();
-		LLStringUtil::format (timeStr, substitution);
-		mLastVisited->setText(timeStr);
-	}
-}
-
 void LLPanelPlaceProfile::onForSaleBannerClick()
 {
 	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
index b3ef4acf511f065969792bdf4e8f10bf270ba204..8c30ca92fb84ac530271643eb80d872b3be04723 100644
--- a/indra/newview/llpanelplaceprofile.h
+++ b/indra/newview/llpanelplaceprofile.h
@@ -50,6 +50,8 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo
 
 	/*virtual*/ void setInfoType(INFO_TYPE type);
 
+	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+
 	// Displays information about the currently selected parcel
 	// without sending a request to the server.
 	// If is_current_parcel true shows "You Are Here" banner.
@@ -61,7 +63,6 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo
 	void updateEstateName(const std::string& name);
 	void updateEstateOwnerName(const std::string& name);
 	void updateCovenantText(const std::string &text);
-	void updateLastVisitedText(const LLDate &date);
 
 private:
 	void onForSaleBannerClick();
@@ -78,7 +79,6 @@ class LLPanelPlaceProfile : public LLPanelPlaceInfo
 	LLPanel*			mYouAreHerePanel;
 
 	LLTextBox*			mParcelOwner;
-	LLTextBox*			mLastVisited;
 
 	LLIconCtrl*			mParcelRatingIcon;
 	LLTextBox*			mParcelRatingText;
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 8d117afcfe0cffaddb6ea8c7e5890de9fef9fdfa..3d0fba9426a71b925148becf93ba32ae9751783b 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -293,7 +293,6 @@ void LLPanelPlaces::onOpen(const LLSD& key)
 		mPosGlobal = hist_items[index].mGlobalPos;
 
 		mPlaceProfile->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY);
-		mPlaceProfile->updateLastVisitedText(hist_items[index].mDate);
 		mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
 	}
 
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 8147ff17f0fc2bda63efcc067d6aa042c61b764a..02f45c1b487fdd05c2b420a5f838067b9e562d43 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -243,5 +243,6 @@ void LLPanelProfile::notifyParent(const LLSD& info)
 		onOpen(info);
 		return;
 	}
+
 	LLPanel::notifyParent(info);
 }
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 2be0781487c66b32067e0fbaa268cae8de47dda3..f5367c04772fe15dd79a81acc001bb07e0f4a82b 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -36,10 +36,12 @@
 #include "lltrans.h"
 #include "llavataractions.h"
 #include "llagent.h"
+#include "llimview.h"
 
 #include "llparticipantlist.h"
 #include "llavatarlist.h"
 #include "llspeakers.h"
+#include "llviewermenu.h"
 
 //LLParticipantList retrieves add, clear and remove events and updates view accordingly 
 #if LL_MSVC
@@ -64,6 +66,9 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 	mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
 	mAvatarList->setRefreshCompleteCallback(boost::bind(&LLParticipantList::onAvatarListRefreshed, this, _1, _2));
 
+	mParticipantListMenu = new LLParticipantListMenu(*this);
+	mAvatarList->setContextMenu(mParticipantListMenu);
+
 	//Lets fill avatarList with existing speakers
 	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs();
 
@@ -83,8 +88,15 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 
 LLParticipantList::~LLParticipantList()
 {
+	delete mParticipantListMenu;
+	mParticipantListMenu = NULL;
 }
 
+void LLParticipantList::setSpeakingIndicatorsVisible(BOOL visible)
+{
+	mAvatarList->setSpeakingIndicatorsVisible(visible);
+};
+
 void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
 {
 	LLUUID clicked_id = list->getSelectedUUID();
@@ -265,3 +277,139 @@ bool LLParticipantList::SpeakerModeratorUpdateListener::handleEvent(LLPointer<LL
 {
 		return mParent.onModeratorUpdateEvent(event, userdata);
 }
+
+LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu()
+{
+	// set up the callbacks for all of the avatar menu items
+	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+	LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
+	
+	registrar.add("ParticipantList.ToggleAllowTextChat", boost::bind(&LLParticipantList::LLParticipantListMenu::toggleAllowTextChat, this, _2));
+	registrar.add("ParticipantList.ToggleMuteText", boost::bind(&LLParticipantList::LLParticipantListMenu::toggleMuteText, this, _2));
+
+	enable_registrar.add("ParticipantList.EnableItem", boost::bind(&LLParticipantList::LLParticipantListMenu::enableContextMenuItem,	this, _2));
+	enable_registrar.add("ParticipantList.CheckItem",  boost::bind(&LLParticipantList::LLParticipantListMenu::checkContextMenuItem,	this, _2));
+
+	// create the context menu from the XUI
+	return LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
+		"menu_participant_list.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
+}
+
+void LLParticipantList::LLParticipantListMenu::toggleAllowTextChat(const LLSD& userdata)
+{
+	const LLUUID speaker_id = mUUIDs.front();
+
+	std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest");
+	LLSD data;
+	data["method"] = "mute update";
+	data["session-id"] = mParent.mSpeakerMgr->getSessionID();
+	data["params"] = LLSD::emptyMap();
+	data["params"]["agent_id"] = speaker_id;
+	data["params"]["mute_info"] = LLSD::emptyMap();
+	//current value represents ability to type, so invert
+	data["params"]["mute_info"]["text"] = !mParent.mSpeakerMgr->findSpeaker(speaker_id)->mModeratorMutedText;
+
+	class MuteTextResponder : public LLHTTPClient::Responder
+	{
+	public:
+		MuteTextResponder(const LLUUID& session_id)
+		{
+			mSessionID = session_id;
+		}
+
+		virtual void error(U32 status, const std::string& reason)
+		{
+			llwarns << status << ": " << reason << llendl;
+
+			if ( gIMMgr )
+			{
+				//403 == you're not a mod
+				//should be disabled if you're not a moderator
+				if ( 403 == status )
+				{
+					gIMMgr->showSessionEventError(
+						"mute",
+						"not_a_moderator",
+						mSessionID);
+				}
+				else
+				{
+					gIMMgr->showSessionEventError(
+						"mute",
+						"generic",
+						mSessionID);
+				}
+			}
+		}
+
+	private:
+		LLUUID mSessionID;
+	};
+
+	LLHTTPClient::post(
+		url,
+		data,
+		new MuteTextResponder(mParent.mSpeakerMgr->getSessionID()));
+}
+
+void LLParticipantList::LLParticipantListMenu::toggleMuteText(const LLSD& userdata)
+{
+	const LLUUID speaker_id = mUUIDs.front();
+	BOOL is_muted = LLMuteList::getInstance()->isMuted(speaker_id, LLMute::flagTextChat);
+	std::string name;
+
+	//fill in name using voice client's copy of name cache
+	LLPointer<LLSpeaker> speakerp = mParent.mSpeakerMgr->findSpeaker(speaker_id);
+	if (speakerp.isNull())
+	{
+		return;
+	}
+
+	name = speakerp->mDisplayName;
+
+	LLMute mute(speaker_id, name, speakerp->mType == LLSpeaker::SPEAKER_AGENT ? LLMute::AGENT : LLMute::OBJECT);
+
+	if (!is_muted)
+	{
+		LLMuteList::getInstance()->add(mute, LLMute::flagTextChat);
+	}
+	else
+	{
+		LLMuteList::getInstance()->remove(mute, LLMute::flagTextChat);
+	}
+}
+
+bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& userdata)
+{
+	std::string item = userdata.asString();
+	if (item == "can_mute_text")
+	{
+		return mUUIDs.front() != gAgentID;
+	}
+	else
+		if (item == "can_allow_text_chat")
+		{
+			LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mParent.mSpeakerMgr->getSessionID());
+			return im_session->mType == IM_SESSION_GROUP_START && mParent.mSpeakerMgr->findSpeaker(gAgentID)->mIsModerator;
+		}
+	return true;
+}
+
+bool LLParticipantList::LLParticipantListMenu::checkContextMenuItem(const LLSD& userdata)
+{
+	std::string item = userdata.asString();
+	const LLUUID& id = mUUIDs.front();
+	if (item == "is_muted")
+		return LLMuteList::getInstance()->isMuted(id, LLMute::flagTextChat); 
+	else
+		if (item == "is_allowed_text_chat")
+		{
+			LLPointer<LLSpeaker> selected_speakerp = mParent.mSpeakerMgr->findSpeaker(id);
+
+			if (selected_speakerp.notNull())
+			{
+				return !selected_speakerp->mModeratorMutedText;
+			}
+		}
+	return false;
+}
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index fc34dd308bafa627697e6d4fe5ab43cc90886958..5e26c39fc81a6187fe6540b2fd0458d8396825c7 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -32,6 +32,8 @@
 
 #include "llviewerprecompiledheaders.h"
 #include "llevent.h"
+#include "llpanelpeoplemenus.h"
+#include "llimview.h"
 
 class LLSpeakerMgr;
 class LLAvatarList;
@@ -43,6 +45,7 @@ class LLParticipantList
 	public:
 		LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list);
 		~LLParticipantList();
+		void setSpeakingIndicatorsVisible(BOOL visible);
 
 		typedef enum e_participant_sort_oder {
 			E_SORT_BY_NAME = 0,
@@ -105,6 +108,25 @@ class LLParticipantList
 			SpeakerModeratorUpdateListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
 			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
 		};
+		
+		/**
+		 * Menu used in the participant list.
+		 */
+		class LLParticipantListMenu : public LLPanelPeopleMenus::ContextMenu
+		{
+		public:
+			LLParticipantListMenu(LLParticipantList& parent):mParent(parent){};
+			/*virtual*/ LLContextMenu* createMenu();
+		protected:
+			LLParticipantList& mParent;
+		private:
+			bool enableContextMenuItem(const LLSD& userdata);
+			bool checkContextMenuItem(const LLSD& userdata);
+
+			void toggleAllowTextChat(const LLSD& userdata);
+			void toggleMuteText(const LLSD& userdata);
+		
+		};
 
 	private:
 		void onAvatarListDoubleClicked(LLAvatarList* list);
@@ -121,5 +143,7 @@ class LLParticipantList
 		LLPointer<SpeakerClearListener>				mSpeakerClearListener;
 		LLPointer<SpeakerModeratorUpdateListener>	mSpeakerModeratorListener;
 
+		LLParticipantListMenu*    mParticipantListMenu;
+
 		EParticipantSortOrder	mSortOrder;
 };
diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp
index b491c7e1092a43fbed2ca1f017667fce95dade31..bd46b5b56aa58a14ea3018bec4a0a8249403707e 100644
--- a/indra/newview/llrecentpeople.cpp
+++ b/indra/newview/llrecentpeople.cpp
@@ -33,6 +33,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llrecentpeople.h"
+#include "llgroupmgr.h"
 
 #include "llagent.h"
 
@@ -43,12 +44,18 @@ bool LLRecentPeople::add(const LLUUID& id)
 	if (id == gAgent.getID())
 		return false;
 
-	LLDate date_added = LLDate::now();
+	bool is_not_group_id = LLGroupMgr::getInstance()->getGroupData(id) == NULL;
 
-	//[] instead of insert to replace existing id->date with new date value
-	mPeople[id] = date_added;
-	mChangedSignal();
-	return true;
+	if (is_not_group_id)
+	{
+		LLDate date_added = LLDate::now();
+
+		//[] instead of insert to replace existing id->date with new date value
+		mPeople[id] = date_added;
+		mChangedSignal();
+	}
+
+	return is_not_group_id;
 }
 
 bool LLRecentPeople::contains(const LLUUID& id) const
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 061587f11b7dc8fc83b102fa7bf9275f8b4e9194..3d0b4de88a318337724113086dd637712f28d258 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -424,16 +424,51 @@ void	LLSideTray::createButtons	()
 	}
 }
 
+void		LLSideTray::processTriState ()
+{
+	if(mCollapsed)
+		expandSideBar();
+	else
+	{
+		//!!!!!!!!!!!!!!!!!
+		//** HARDCODED!!!!!
+		//!!!!!!!!!!!!!!!!!
+
+		//there is no common way to determine "default" panel for tab
+		//so default panels for now will be hardcoded
+
+		//hardcoded for people tab and profile tab
+
+		/*if(mActiveTab == getTab("sidebar_people"))
+		{
+			LLSideTrayPanelContainer* container = findChild<LLSideTrayPanelContainer>("panel_container");
+			if(container && container->getCurrentPanelIndex()>0)
+			{
+				container->onOpen(LLSD().insert("sub_panel_name","panel_people"));
+			}
+			else
+				collapseSideBar();
+		}
+		else if(mActiveTab == getTab("sidebar_me"))
+		{
+			LLTabContainer* tab_container = findChild<LLTabContainer>("tabs");
+			if(tab_container && tab_container->getCurrentPanelIndex()>0)
+				tab_container->selectFirstTab();
+			else
+				collapseSideBar();
+		}
+		else*/
+			collapseSideBar();
+	}
+}
+
 void		LLSideTray::onTabButtonClick(string name)
 {
 	LLSideTrayTab* side_bar = getTab(name);
 
 	if(side_bar == mActiveTab)
 	{
-		if(mCollapsed)
-			expandSideBar();
-		else
-			collapseSideBar();
+		processTriState ();
 		return;
 	}
 	selectTabByName	(name);
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 4d6081e230c386781f542c975983a23e924795e1..5bb17eedd5f8a3b12a3ddddf5b5ce5a9898ef817 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -134,6 +134,9 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	
 	void		reshape			(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
+	void		processTriState ();
+	
+
 protected:
 	LLSideTrayTab* getTab		(const std::string& name);
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 25729c91e6624d9575b046e798002e069cff0c50..64dcd7b97fbe6e4f45eefe500b0cea70a7e452c9 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2478,7 +2478,7 @@ void register_viewer_callbacks(LLMessageSystem* msg)
 	msg->setHandlerFunc("AvatarPicksReply",
 						&LLAvatarPropertiesProcessor::processAvatarPicksReply);
  	msg->setHandlerFunc("AvatarClassifiedReply",
- 						&LLAvatarPropertiesProcessor::processAvatarClassifiedReply);
+ 						&LLAvatarPropertiesProcessor::processAvatarClassifiedsReply);
 
 	msg->setHandlerFuncFast(_PREHASH_CreateGroupReply,
 						LLGroupMgr::processCreateGroupReply);
@@ -2543,7 +2543,8 @@ void register_viewer_callbacks(LLMessageSystem* msg)
 
 	msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply);
 	msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply);
-	msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply);
+//	msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply);
+	msg->setHandlerFunc("ClassifiedInfoReply", LLAvatarPropertiesProcessor::processClassifiedInfoReply);
 	msg->setHandlerFunc("ParcelInfoReply", LLRemoteParcelInfoProcessor::processParcelInfoReply);
 	msg->setHandlerFunc("ScriptDialog", process_script_dialog);
 	msg->setHandlerFunc("LoadURL", process_load_url);
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index cefc88ebee85249ec4bda34b0d70d113de31d4a6..89649407ff07249360726a445d988819a66ea690 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -46,6 +46,7 @@ LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap;
 LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap;
 LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = NULL;
 LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = NULL;
+LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChangedSignal;
 
 BOOL LLVoiceChannel::sSuspended = FALSE;
 
@@ -320,6 +321,8 @@ void LLVoiceChannel::activate()
 	{
 		setState(STATE_CALL_STARTED);
 	}
+
+	sCurrentVoiceChannelChangedSignal(this->mSessionID);
 }
 
 void LLVoiceChannel::getChannelInfo()
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 8f1e9ff02d3c9807781b2e19425e408f2212440e..20b6157b48b7c09f80929dad64532c1a4edde95d 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -54,6 +54,13 @@ class LLVoiceChannel : public LLVoiceClientStatusObserver
 
 	typedef boost::function<void(const EState& old_state, const EState& new_state)> state_changed_callback_t;
 
+	// on current channel changed signal
+	typedef boost::function<void(const LLUUID& session_id)> channel_changed_callback_t;
+	typedef boost::signals2::signal<void(const LLUUID& session_id)> channel_changed_signal_t;
+	static channel_changed_signal_t sCurrentVoiceChannelChangedSignal;
+	static boost::signals2::connection setCurrentVoiceChannelChangedCallback(channel_changed_callback_t cb) { return sCurrentVoiceChannelChangedSignal.connect(cb); }
+
+
 	LLVoiceChannel(const LLUUID& session_id, const std::string& session_name);
 	virtual ~LLVoiceChannel();
 
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 48c7236796f49dda3e284e35bf94401db054f22a..e881665578304c562a1e5f150969444c66941e24 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -38,6 +38,8 @@
   <texture name="Blank" file_name="Blank.png" preload="false" />
 
   <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" />
+  <texture name="BottomTray_Scroll_Right" file_name="navbar/Arrow_Right_Off.png" preload="false" />
+  <texture name="BottomTray_Scroll_Left" file_name="navbar/Arrow_Left_Off.png" preload="false" />
 
   <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0"  />
   <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0"  />
diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c3283c60143f0672cc2992e943c9921fab3f89df
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_participant_list.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Participant List Context Menu">
+    <menu_item_check
+     label="Mute Text"
+     layout="topleft"
+     name="MuteText">
+        <on_check
+         function="ParticipantList.CheckItem"
+         parameter="is_muted" />
+        <on_click
+         function="ParticipantList.ToggleMuteText" />
+        <on_enable
+         function="ParticipantList.EnableItem"
+         parameter="can_mute_text" />
+    </menu_item_check>
+    <menu_item_check
+     label="Allow text chat"
+     layout="topleft"
+     name="AllowTextChat">
+        <on_check
+         function="ParticipantList.CheckItem"
+         parameter="is_allowed_text_chat" />
+        <on_click
+         function="ParticipantList.ToggleAllowTextChat" />
+        <on_enable
+         function="ParticipantList.EnableItem"
+         parameter="can_allow_text_chat" />
+    </menu_item_check>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
index c002cd078f7c2d2bf7bf73cb4b72917e66df9f90..39f9e486093c3a3b659d7d07f22bc53fbd5cc724 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
@@ -2,15 +2,36 @@
 <menu name="menu_group_plus"
      left="0" bottom="0" visible="false"
      mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false">
-  <menu_item_call name="sort_recent" label="Sort by Recent Speakers">
-    <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_recent" />
-  </menu_item_call>
-  <menu_item_call name="sort_name" label="Sort by Name">
-    <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_name" />
-  </menu_item_call>
-  <menu_item_call name="sort_distance" label="Sort by Distance">
-    <menu_item_call.on_click function="People.Nearby.ViewSort.Action" userdata="sort_distance" />
-  </menu_item_call>
+  <menu_item_check
+     label="Sort by Recent Speakers"
+     name="sort_by_recent_speakers">
+    <menu_item_check.on_click
+       function="People.Nearby.ViewSort.Action"
+       parameter="sort_by_recent_speakers"/>
+    <menu_item_check.on_check
+       function="People.Nearby.ViewSort.CheckItem"
+       parameter="sort_by_recent_speakers"/>
+  </menu_item_check>
+  <menu_item_check
+     label="Sort by Name"
+     name="sort_name">
+    <menu_item_check.on_click
+       function="People.Nearby.ViewSort.Action"
+       parameter="sort_name"/>
+    <menu_item_check.on_check
+       function="People.Nearby.ViewSort.CheckItem"
+       parameter="sort_name"/>
+  </menu_item_check>
+  <menu_item_check
+     label="Sort by Distance"
+     name="sort_distance">
+    <menu_item_check.on_click
+       function="People.Nearby.ViewSort.Action"
+       parameter="sort_distance"/>
+    <menu_item_check.on_check
+       function="People.Nearby.ViewSort.CheckItem"
+       parameter="sort_distance"/>
+  </menu_item_check>
   <menu_item_separator layout="topleft" />
   <menu_item_check name="view_icons" label="View People Icons">
     <menu_item_check.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_picks_plus.xml b/indra/newview/skins/default/xui/en/menu_picks_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3065239615c595bcfb605d4011d26391c85c57a4
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_picks_plus.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu
+ height="201"
+ layout="topleft"
+ mouse_opaque="false"
+ name="picks_plus_menu"
+ width="120">
+    <menu_item_call 
+     name="create_pick" 
+     label="New Pick">
+        <menu_item_call.on_click 
+         function="Picks.Plus.Action" 
+         userdata="new_pick" />
+        </menu_item_call>
+    <menu_item_call 
+     name="create_classified" 
+     label="New Classified">
+        <menu_item_call.on_click 
+         function="Picks.Plus.Action" 
+         userdata="new_classified" />
+    </menu_item_call>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 989dc8885127499e1566013aa5a601aafa90ed86..ccd8bc569e7e236a626be775f6974f98f922a1db 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3050,6 +3050,18 @@ Teleport to [PICK]?
      yestext="Teleport"/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="TeleportToClassified"
+   type="alertmodal">
+    Teleport to [CLASSIFIED]?
+    <usetemplate
+     ignoretext="Confirm that I want to teleport to a location in Classifieds"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="Teleport"/>
+  </notification>
+
   <notification
    icon="alert.tga"
    label="Message everyone in your Estate"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 3fbc8e1afd82045bcd93b1397e449a012bc1a517..9fc897b93e2ae875363feda215545011049452ad 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -241,7 +241,32 @@
              top="0"
              chiclet_padding="3"
              scrolling_offset="40"
-             width="189" />
+             width="189">
+                <button
+                 auto_resize="true"
+                 follows="right"
+                 height="23"
+                 image_selected="BottomTray_Scroll_Left"
+                 image_unselected="BottomTray_Scroll_Left"
+                 layout="topleft"
+                 name="chicklet_left_scroll_button"
+                 tab_stop="false"
+                 top="3"
+                 visible="false"
+                 width="20" />
+                <button
+                 auto_resize="true"
+                 follows="right"
+                 height="23"
+                 image_selected="BottomTray_Scroll_Right"
+                 image_unselected="BottomTray_Scroll_Right"
+                 layout="topleft"
+                 name="chicklet_right_scroll_button"
+                 tab_stop="false"
+                 top="3"
+                 visible="false"
+                 width="20" />
+            </chiclet_panel>
         </layout_panel>
         <icon
          auto_resize="false"
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bdca8531dc54af151078de25b078ec5c32ebd93d
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ follows="all"
+ height="570"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="panel_classified_info"
+ top="0"
+ width="333">
+ <panel.string
+  name="type_mature">
+    Mature
+ </panel.string>
+ <panel.string
+  name="type_pg">
+    PG Content
+ </panel.string>
+    <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     name="back_btn"
+     picture_style="true"
+     left="10"
+     tab_stop="false"
+     top="2"
+     width="23" />
+    <text
+     follows="top|left|right"
+     font="SansSerifHugeBold"
+     height="26"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="0"
+     value="Classified Info"
+     use_ellipses="true"
+     width="275" />
+    <scroll_container
+     color="DkGray2"
+     opaque="true"
+     follows="all"
+     height="500"
+     layout="topleft"
+     left="10"
+     top_pad="10"
+     name="profile_scroll"
+     reserve_scroll_corner="false"
+     width="313">
+    <panel
+     name="scroll_content_panel"
+     follows="left|top"
+     min_height="300"
+     layout="topleft"
+     top="0"
+     background_visible="false"
+     height="500"
+     left="0"
+     width="295">
+        <texture_picker
+         enabled="false"
+         follows="left|top"
+         height="197"
+         layout="topleft"
+         left="10"
+         name="classified_snapshot"
+         top="20"
+         width="290" />
+        <text
+         follows="left|top|right"
+         height="35"
+         width="290"
+         layout="topleft"
+         font="SansSerifBig"
+         font.style="BOLD"
+         left="10"
+         top_pad="10"
+         name="classified_name"
+         text_color="white"
+         value="[name]"
+         use_ellipses="true" />
+        <text
+         follows="left|top"
+         height="25"
+         layout="topleft"
+         left="10"
+         name="classified_location"
+         width="290"
+         word_wrap="true"
+         value="[loading...]" />
+        <text
+         follows="left|top|right"
+         height="18"
+         layout="topleft"
+         left="10"
+         name="content_type"
+         width="290"
+         top_pad="5"
+         value="[content type]" />
+        <text
+         follows="left|top|right"
+         height="18"
+         layout="topleft"
+         left="10"
+         name="category"
+         width="290"
+         top_pad="5"
+         value="[category]" />
+        <check_box
+         enabled="false"
+         height="16"
+         label="Auto renew each week"
+         layout="topleft"
+         left="10"
+         name="auto_renew"
+         top_pad="5"
+         width="290" />
+        <text
+         follows="left|top"
+         halign="left"
+         height="16"
+         layout="topleft"
+         left="10"
+         name="price_for_listing"
+         top_pad="5"
+         tool_tip="Price for listing."
+         width="105">
+         L$[PRICE]
+        </text>
+        <text
+         follows="left|top|right"
+         height="200"
+         layout="topleft"
+         left="10"
+         name="classified_desc"
+         width="290"
+         value="[description]"
+         word_wrap="true" />
+    </panel>
+    </scroll_container>
+    <panel
+     follows="left|right|bottom"
+     height="20"
+     layout="topleft"
+     top_pad="8"
+     left="10"
+     name="buttons">
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         height="19"
+         label="Teleport"
+         layout="topleft"
+         left="0"
+         name="teleport_btn"
+         top="0"
+         width="90" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         height="19"
+         label="Map"
+         layout="topleft"
+         left_pad="10"
+         name="show_on_map_btn"
+         top="0"
+         width="90" />
+        <button
+         follows="bottom|left"
+         font="SansSerifSmall"
+         height="19"
+         label="Edit"
+         layout="topleft"
+         right="-1"
+         name="edit_btn"
+         top="0"
+         width="90" />
+    </panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ee333be0cb0cfca2a1892ba7d14f42519f1eef2a
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ bevel_style="none"
+ follows="top|left|right"
+ height="85"
+ layout="topleft"
+ left="0"
+ name="classified_item"
+ top="0"
+ width="313">
+    <icon
+     follows="all"
+     height="85"
+     image_name="ListItem_Over"
+     right="-3"
+     mouse_opaque="false"
+     name="hovered_icon"
+     top="1"
+     scale_image="true"
+     visible="false"
+     width="307"/>
+    <icon
+     follows="all"
+     height="85"
+     image_name="ListItem_Select"
+     right="-3"
+     mouse_opaque="false"
+     name="selected_icon"
+     top="1"
+     scale_image="true"
+     visible="false"
+     width="307"/>
+    <texture_picker
+     allow_no_texture="true"
+     border_enabled="true"
+     default_image_name="TabIcon_Places_Large"
+     enabled="false"
+     follows="left|top"
+     height="80"
+     layout="topleft"
+     left="10"
+     mouse_opaque="false"
+     name="picture"
+     tab_stop="false"
+     top="10"
+     top_pad="10"
+     width="90" />
+    <text
+     follows="top|left|right"
+     font="SansSerifSmallBold"
+     height="16"
+     layout="topleft"
+     left="110"
+     name="name"
+     text_color="white"
+     top="9"
+     use_ellipses="false"
+     width="197"
+     word_wrap="false" />
+    <expandable_text
+     follows="top|left|right"
+     font="SansSerifSmall"
+     height="40"
+     layout="topleft"
+     left="110"
+     name="description"
+     top_pad="3"
+     width="178"
+     word_wrap="true" />
+    <button
+     follows="top|right"
+     height="16"
+     image_selected="BuyArrow_Press"
+     image_pressed="BuyArrow_Press"
+     image_unselected="BuyArrow_Press"
+     layout="topleft"
+     name="info_chevron"
+     picture_style="true"
+     right="-7"
+     tab_stop="false"
+     top="27"
+     width="16" />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2f3277804f3d4278bbf5fc973bd5641d8bb82dbc
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ bevel_style="in"
+ follows="left|top|right|bottom"
+ height="570"
+ label="Edit Classified"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="panel_edit_classified"
+ top="0"
+ width="333">
+ <panel.string
+  name="location_notice">
+    (will update after save)
+ </panel.string>
+  <button
+     follows="top|right"
+     height="23"
+     image_overlay="BackArrow_Off"
+     layout="topleft"
+     name="back_btn"
+     picture_style="true"
+     left="10"
+     tab_stop="false"
+     top="2"
+     width="23" />
+   <text
+     type="string"
+     length="1"
+     follows="top"
+     font="SansSerifHuge"
+     height="15"
+     layout="topleft"
+     left_pad="10"
+     name="title"
+     text_color="white"
+     top="5"
+     width="250">
+        Edit Classified
+    </text>
+   <scroll_container
+     color="DkGray2"
+     follows="all"
+     height="510"
+     layout="topleft"
+     left="10"
+     top_pad="10"
+     name="profile_scroll"
+     reserve_scroll_corner="false"
+     opaque="true"
+     width="313">
+    <panel
+     name="scroll_content_panel"
+     follows="left|top"
+     min_height="300"
+     layout="topleft"
+     top="0"
+     background_visible="false"
+     height="600"
+     left="0"
+     width="295">
+    <texture_picker
+     follows="left|top|right"
+     height="197"
+     width="290"
+     layout="topleft"
+     top="20"
+     left="10"
+     name="classified_snapshot" />
+          <icon
+           height="18"
+           image_name="AddItem_Off"
+           layout="topleft"
+           right="-5"
+           name="edit_icon"
+           label=""
+           tool_tip="Click to select an image"
+           top="27"
+           width="18" />
+        <text
+         type="string"
+         length="1"
+         follows="left|top"
+         height="15"
+         font="SansSerifSmall"
+         font.style="BOLD"
+         layout="topleft"
+         left="10"
+         top="215"
+         name="Name:"
+         text_color="white"
+         width="290">
+            Title:
+        </text>
+        <line_editor
+         follows="left|top|right"
+         font="SansSerif"
+         height="20"
+         layout="topleft"
+         left="10"
+         top_pad="2"
+         max_length="63"
+         name="classified_name"
+         text_color="black"
+         width="290" />
+        <text
+         type="string"
+         length="1"
+         follows="left|top"
+         height="15"
+         font="SansSerifSmall"
+         font.style="BOLD"
+         layout="topleft"
+         left="10"
+         top_pad="20"
+         name="description_label"
+         text_color="white"
+         width="290">
+            Description:
+        </text>
+        <text_editor
+         follows="left|top|right"
+         height="100"
+         width="290"
+         hide_scrollbar="false"
+         layout="topleft"
+         left="10"
+         top_pad="2"
+         max_length="1023"
+         name="classified_desc"
+         text_color="black"
+         word_wrap="true" />
+        <text
+         type="string"
+         length="1"
+         font="SansSerifSmall"
+         font.style="BOLD"
+         follows="left|top"
+         height="15"
+         layout="topleft"
+         left="10"
+         name="location_label"
+         text_color="white"
+         top_pad="20"
+         width="290">
+            Location:
+        </text>
+        <text
+         type="string"
+         length="1"
+         follows="left|top"
+         height="50"
+         layout="topleft"
+         left="10"
+         name="classified_location"
+         right="-10"
+         top_pad="2"
+         width="290"
+         word_wrap="true">
+            loading...
+        </text>
+        <button
+         follows="left|top"
+         height="20"
+         label="Set to Current Location"
+         layout="topleft"
+         left="8"
+         top_pad="5"
+         name="set_to_curr_location_btn"
+         width="200" />
+        <combo_box
+         follows="left|top" 
+         height="18" 
+         label=""
+	     left="10" 
+         name="category" 
+         top_pad="5"
+         width="200" />
+        <combo_box 
+         allow_text_entry="false" 
+         follows="left|top" 
+         height="18" 
+         left="10"
+         name="content_type" 
+         top_pad="5"
+         width="200">
+         <combo_item 
+          name="mature_ci" 
+          value="Mature">
+           Mature Content
+         </combo_item>
+         <combo_item 
+          name="pg_ci" 
+          value="PG">
+           PG Content
+         </combo_item>
+        </combo_box>
+        <spinner
+         decimal_digits="0"
+         follows="left|top"
+         halign="left"
+         height="16"
+         increment="1"
+         label_width="20"
+         label="L$"
+         layout="topleft"
+         left="10"
+         value="50"
+         min_val="50"
+         max_val="99999"
+         name="price_for_listing"
+         top_pad="5"
+         tool_tip="Price for listing."
+         width="105" />
+        <check_box
+         height="16"
+         label="Auto renew each week"
+         layout="topleft"
+         left="10"
+         name="auto_renew"
+         top_pad="5"
+         width="250" />
+    </panel>
+    </scroll_container>
+    <panel
+     follows="left|right|bottom"
+     height="20"
+     label="bottom_panel"
+     layout="topleft"
+     left="10"
+     name="bottom_panel"
+     top_pad="5"
+     width="303">
+        <button
+         follows="bottom|left"
+         height="19"
+         label="Save"
+         layout="topleft"
+         name="save_changes_btn"
+         left="0"
+         top="0"
+         width="130" />
+        <button
+         follows="bottom|left"
+         height="19"
+         label="Cancel"
+         layout="topleft"
+         name="cancel_btn"
+         left_pad="5"
+         right="-1"
+         width="130" />
+    </panel>
+</panel>
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 f4a212ba0a6def2276b0f6fae7922b8e6139f86e..d6de5af32d3808aa92d4f9898ae8dbba71881527 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -53,7 +53,7 @@
      layout="topleft"
      top="0"
      background_visible="false"
-     height="470"
+     height="510"
      left="0"
      width="295">
     <texture_picker
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index 0c24adfad5933cc3112ef6344a786571582dca92..b01ddbf75aa3bddb875aa18ebaf05f1783bfb38d 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -43,6 +43,16 @@
      name="acquired_date">
         [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
     </string>
+    <!-- Texture names for rating icons -->
+    <string
+     name="icon_PG"
+     value="parcel_drk_PG" />
+    <string
+     name="icon_M"
+     value="parcel_drk_M" />
+    <string
+     name="icon_R"
+     value="parcel_drk_R" />
     <button
      follows="top|right"
      height="23"
@@ -125,6 +135,24 @@
              top_pad="10"
              value="Du waltz die spritz"
              width="300" />
+            <icon
+             follows="top|left"
+             height="16"
+             image_name="unknown"
+             layout="topleft"
+             left="10"
+             name="maturity_icon"
+             top_pad="10"
+             width="18" />
+            <text
+             follows="right|top"
+             height="16"
+             layout="topleft"
+             left_pad="8"
+             name="maturity_value"
+             top_delta="0"
+             value="unknown"
+             width="268" />
             <panel
              follows="left|top|right"
              height="55"
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index ae61852f68d256d7045be78e02bf50ca6943ae29..dbe76e553ba28e3cbb075ee88566c9cd779f5ca3 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -8,16 +8,57 @@
  name="panel_picks"
  top="0"
  width="313">
+ <string
+  name="no_picks"
+  value="No Picks" />
+ <string
+  name="no_classifieds"
+  value="No Classifieds" />
+     
+ <accordion
+  follows="all"
+  height="465"
+  layout="topleft"
+  left="0"
+  name="accordion"
+  top="0"
+  width="313">
+    <accordion_tab
+     can_resize="false"
+     layout="topleft"
+     height="235"
+     min_height="150"
+     name="tab_picks"
+     title="Picks"
+     visible="false">
  <flat_list_view
          color="DkGray2"
          follows="all"
-         height="465"
          layout="topleft"
          left="0"
          name="picks_list"
          opaque="true"
          top="0"
          width="313" />
+    </accordion_tab>
+    <accordion_tab
+     can_resize="false"
+     layout="topleft"
+     height="235"
+     name="tab_classifieds"
+     title="Classified"
+     visible="false">
+            <flat_list_view
+             color="DkGray2"
+             follows="all"
+             layout="topleft"
+             left="0"
+             name="classifieds_list"
+             opaque="true"
+             top="0"
+             width="313" />
+    </accordion_tab>
+ </accordion>
    <panel
          background_visible="true"
          bevel_style="none"
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 65f150b33c6c52a3ac3dba073fde4cef600bc5e6..e6084202d7cc18d513070ae1900be0695ef677e0 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -179,7 +179,6 @@
          min_height="300"
          name="scrolling_panel"
          top="0"
-         value="&gt;"
          width="313">
             <texture_picker
              enabled="false"
@@ -296,6 +295,24 @@
              top_delta="0"
              value="Alex Superduperlongenamenton"
              width="205" />
+            <icon
+             follows="top|left"
+             height="16"
+             image_name="unknown"
+             layout="topleft"
+             left="10"
+             name="maturity_icon"
+             top_delta="0"
+             width="18" />
+            <text
+             follows="right|top"
+             height="16"
+             layout="topleft"
+             left_pad="8"
+             name="maturity_value"
+             top_delta="0"
+             value="unknown"
+             width="268" />
             <accordion
              follows="all"
              height="230"
@@ -308,222 +325,211 @@
                  layout="topleft"
                  name="parcel_characteristics_tab"
                  title="Parcel">
-                    <scroll_container
-                     color="DkGray2"
+                    <panel
                      follows="all"
-                     height="132"
+                     height="160"
                      layout="topleft"
                      left="0"
-                     name="parcel_scroll"
-                     opaque="true"
                      top="0"
-                     width="290">
-                        <panel
-                         follows="all"
-                         height="165"
+                     width="275">
+                        <icon
+                         follows="top|left"
+                         height="16"
+                         image_name="parcel_drk_PG"
                          layout="topleft"
-                         left="0"
+                         left="10"
+                         name="rating_icon"
                          top="0"
-                         width="275">
-                            <icon
-                             follows="top|left"
-                             height="16"
-                             image_name="parcel_drk_PG"
-                             layout="topleft"
-                             left="20"
-                             name="rating_icon"
-                             top="0"
-                             width="18" />
-                            <text
-                             follows="left|top"
-                             height="16"
-                             layout="topleft"
-                             left_pad="8"
-                             name="rating_label"
-                             value="Rating:"
-                             width="80" />
-                            <text
-                             follows="right|top"
-                             height="16"
-                             layout="topleft"
-                             left_pad="0"
-                             name="rating_value"
-                             top_delta="0"
-                             value="unknown"
-                             width="120" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_Voice"
-                             layout="topleft"
-                             left="20"
-                             name="voice_icon"
-                             top_pad="5"
-                             width="22" />
-                            <text
-                             follows="left|top"
-                             height="18"
-                             layout="topleft"
-                             left_pad="8"
-                             name="voice_label"
-                             top_delta="0"
-                             value="Voice:"
-                             width="76" />
-                            <text
-                             follows="right|top"
-                             height="18"
-                             layout="topleft"
-                             left_pad="0"
-                             name="voice_value"
-                             top_delta="0"
-                             value="On"
-                             width="60" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_Fly"
-                             layout="topleft"
-                             left="20"
-                             name="fly_icon"
-                             top_pad="3"
-                             width="22" />
-                            <text
-                             follows="left|top"
-                             height="16"
-                             layout="topleft"
-                             left_pad="8"
-                             name="fly_label"
-                             value="Fly:"
-                             width="76" />
-                            <text
-                             follows="right|top"
-                             height="16"
-                             layout="topleft"
-                             left_pad="0"
-                             name="fly_value"
-                             top_delta="0"
-                             value="On"
-                             width="60" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_Push"
-                             layout="topleft"
-                             left="20"
-                             name="push_icon"
-                             top_pad="3"
-                             width="22" />
-                            <text
-                             follows="left|top"
-                             height="14"
-                             layout="topleft"
-                             left_pad="8"
-                             name="push_label"
-                             value="Push:"
-                             width="76" />
-                            <text
-                             follows="right|top"
-                             height="14"
-                             layout="topleft"
-                             left_pad="0"
-                             name="push_value"
-                             top_delta="0"
-                             value="Off"
-                             width="60" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_Build"
-                             layout="topleft"
-                             left="20"
-                             name="build_icon"
-                             top_pad="3"
-                             width="22" />
-                            <text
-                             follows="left|top"
-                             height="14"
-                             layout="topleft"
-                             left_pad="8"
-                             name="build_label"
-                             value="Build:"
-                             width="76" />
-                            <text
-                             follows="right|top"
-                             height="15"
-                             layout="topleft"
-                             left_pad="0"
-                             name="build_value"
-                             top_delta="0"
-                             value="On"
-                             width="60" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_Scripts"
-                             layout="topleft"
-                             left="20"
-                             name="scripts_icon"
-                             top_pad="3"
-                             width="22" />
-                            <text
-                             follows="left|top"
-                             height="14"
-                             layout="topleft"
-                             left_pad="8"
-                             name="scripts_label"
-                             value="Scripts:"
-                             width="76" />
-                            <text
-                             follows="right|top"
-                             height="14"
-                             layout="topleft"
-                             left_pad="0"
-                             name="scripts_value"
-                             top_delta="0"
-                             value="On"
-                             width="60" />
-                            <icon
-                             follows="top|left"
-                             height="18"
-                             image_name="parcel_drk_Damage"
-                             layout="topleft"
-                             left="20"
-                             name="damage_icon"
-                             top_pad="7"
-                             width="22" />
-                            <text
-                             follows="left|top"
-                             height="14"
-                             layout="topleft"
-                             left_pad="8"
-                             name="damage_label"
-                             value="Damage:"
-                             width="76" />
-                            <text
-                             follows="right|top"
-                             height="14"
-                             layout="topleft"
-                             left_pad="0"
-                             name="damage_value"
-                             top_delta="0"
-                             value="Off"
-                             width="60" />
-                            <button
-                             follows="bottom|right"
-                             height="19"
-                             label="About Land"
-                             layout="topleft"
-                             name="about_land_btn"
-                             right="-5"
-                             tab_stop="false"
-                             top="138"
-                             width="90">
-                                <click_callback
-                                 function="ShowFloater"
-                                 parameter="about_land" />
-                            </button>
-                        </panel>
-                    </scroll_container>
+                         width="18" />
+                        <text
+                         follows="left|top"
+                         height="16"
+                         layout="topleft"
+                         left_pad="12"
+                         name="rating_label"
+                         value="Rating:"
+                         width="60" />
+                        <text
+                         follows="left|right|top"
+                         height="16"
+                         layout="topleft"
+                         left_pad="0"
+                         name="rating_value"
+                         top_delta="0"
+                         value="unknown"
+                         width="60" />
+                        <icon
+                         follows="top|left"
+                         height="18"
+                         image_name="parcel_drk_Voice"
+                         layout="topleft"
+                         left="10"
+                         name="voice_icon"
+                         top_pad="5"
+                         width="22" />
+                        <text
+                         follows="left|top"
+                         height="18"
+                         layout="topleft"
+                         left_pad="8"
+                         name="voice_label"
+                         top_delta="0"
+                         value="Voice:"
+                         width="60" />
+                        <text
+                         follows="left|right|top"
+                         height="18"
+                         layout="topleft"
+                         left_pad="0"
+                         name="voice_value"
+                         top_delta="0"
+                         value="On"
+                         width="60" />
+                        <icon
+                         follows="top|left"
+                         height="18"
+                         image_name="parcel_drk_Fly"
+                         layout="topleft"
+                         left="10"
+                         name="fly_icon"
+                         top_pad="3"
+                         width="22" />
+                        <text
+                         follows="left|top"
+                         height="16"
+                         layout="topleft"
+                         left_pad="8"
+                         name="fly_label"
+                         value="Fly:"
+                         width="60" />
+                        <text
+                         follows="left|right|top"
+                         height="16"
+                         layout="topleft"
+                         left_pad="0"
+                         name="fly_value"
+                         top_delta="0"
+                         value="On"
+                         width="60" />
+                        <icon
+                         follows="top|left"
+                         height="18"
+                         image_name="parcel_drk_Push"
+                         layout="topleft"
+                         left="10"
+                         name="push_icon"
+                         top_pad="3"
+                         width="22" />
+                        <text
+                         follows="left|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="8"
+                         name="push_label"
+                         value="Push:"
+                         width="60" />
+                        <text
+                         follows="left|right|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="0"
+                         name="push_value"
+                         top_delta="0"
+                         value="Off"
+                         width="60" />
+                        <icon
+                         follows="top|left"
+                         height="18"
+                         image_name="parcel_drk_Build"
+                         layout="topleft"
+                         left="10"
+                         name="build_icon"
+                         top_pad="3"
+                         width="22" />
+                        <text
+                         follows="left|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="8"
+                         name="build_label"
+                         value="Build:"
+                         width="60" />
+                        <text
+                         follows="left|right|top"
+                         height="15"
+                         layout="topleft"
+                         left_pad="0"
+                         name="build_value"
+                         top_delta="0"
+                         value="On"
+                         width="60" />
+                        <icon
+                         follows="top|left"
+                         height="18"
+                         image_name="parcel_drk_Scripts"
+                         layout="topleft"
+                         left="10"
+                         name="scripts_icon"
+                         top_pad="3"
+                         width="22" />
+                        <text
+                         follows="left|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="8"
+                         name="scripts_label"
+                         value="Scripts:"
+                         width="60" />
+                        <text
+                         follows="left|right|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="0"
+                         name="scripts_value"
+                         top_delta="0"
+                         value="On"
+                         width="60" />
+                        <icon
+                         follows="top|left"
+                         height="18"
+                         image_name="parcel_drk_Damage"
+                         layout="topleft"
+                         left="10"
+                         name="damage_icon"
+                         top_pad="7"
+                         width="22" />
+                        <text
+                         follows="left|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="8"
+                         name="damage_label"
+                         value="Damage:"
+                         width="60" />
+                        <text
+                         follows="left|right|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="0"
+                         name="damage_value"
+                         top_delta="0"
+                         value="Off"
+                         width="60" />
+                        <button
+                         follows="bottom|right"
+                         height="19"
+                         label="About Land"
+                         layout="topleft"
+                         name="about_land_btn"
+                         right="-5"
+                         tab_stop="false"
+                         top="138"
+                         width="90">
+                            <click_callback
+                             function="ShowFloater"
+                             parameter="about_land" />
+                        </button>
+                    </panel>
                 </accordion_tab>
                 <accordion_tab
                  expanded="false"
@@ -545,7 +551,7 @@
                          name="region_name_label"
                          top_pad="5"
                          value="Region:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
@@ -554,7 +560,7 @@
                          name="region_name"
                          top_delta="0"
                          value="Mooseland"
-                         width="195" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -563,7 +569,7 @@
                          name="region_type_label"
                          top_pad="5"
                          value="Type:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
@@ -572,7 +578,7 @@
                          name="region_type"
                          top_delta="0"
                          value="Moose"
-                         width="195" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -581,7 +587,7 @@
                          name="region_rating_label"
                          top_pad="7"
                          value="Rating:"
-                         width="80" />
+                         width="90" />
                         <icon
                          follows="top|left"
                          height="16"
@@ -597,7 +603,7 @@
                          left_pad="10"
                          name="region_rating"
                          value="Explicit"
-                         width="100" />
+                         width="159" />
                         <text
                          follows="left|top"
                          height="15"
@@ -606,7 +612,7 @@
                          name="region_owner_label"
                          top_pad="5"
                          value="Owner:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
@@ -615,7 +621,7 @@
                          name="region_owner"
                          top_delta="0"
                          value="moose Van Moose"
-                         width="195" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -624,7 +630,7 @@
                          name="region_group_label"
                          top_pad="5"
                          value="Group:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
@@ -633,7 +639,7 @@
                          name="region_group"
                          top_delta="0"
                          use_ellipses="true"
-                         width="195">
+                         width="187">
                             The Mighty Moose of mooseville soundvillemoose
                         </text>
                         <button
@@ -671,15 +677,15 @@
                          name="estate_name_label"
                          top_pad="5"
                          value="Estate:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="90"
+                         left_pad="0"
                          name="estate_name"
                          top_delta="0"
-                         width="160" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -688,15 +694,15 @@
                          name="estate_rating_label"
                          top_pad="5"
                          value="Rating:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="90"
+                         left_pad="0"
                          name="estate_rating"
                          top_delta="0"
-                         width="160" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -705,15 +711,15 @@
                          name="estate_owner_label"
                          top_pad="5"
                          value="Owner:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="90"
+                         left_pad="0"
                          name="estate_owner"
                          top_delta="0"
-                         width="160" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -722,7 +728,7 @@
                          name="covenant_label"
                          top_pad="5"
                          value="Covenant:"
-                         width="220" />
+                         width="277" />
                         <text_editor
                          bg_focus_color="DkGray2"
                          bg_readonly_color="DkGray2"
@@ -735,7 +741,8 @@
                          name="covenant"
                          read_only="true"
                          top_pad="0"
-                         width="280" />
+                         width="277"
+                         word_wrap="true" />
                     </panel>
                 </accordion_tab>
                 <accordion_tab
@@ -758,15 +765,15 @@
                          name="sales_price_label"
                          top_pad="5"
                          value="Price:"
-                         width="100" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="110"
+                         left_pad="0"
                          name="sales_price"
                          top_delta="0"
-                         width="140" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -775,15 +782,15 @@
                          name="area_label"
                          top_pad="5"
                          value="Area:"
-                         width="100" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="110"
+                         left_pad="0"
                          name="area"
                          top_delta="0"
-                         width="140" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -792,15 +799,15 @@
                          name="traffic_label"
                          top_pad="5"
                          value="Traffic:"
-                         width="100" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="110"
+                         left_pad="0"
                          name="traffic"
                          top_delta="0"
-                         width="140" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -809,15 +816,15 @@
                          name="primitives_label"
                          top_pad="5"
                          value="Primitives:"
-                         width="100" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="110"
+                         left_pad="0"
                          name="primitives"
                          top_delta="0"
-                         width="140" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -826,15 +833,15 @@
                          name="parcel_scripts_label"
                          top_pad="5"
                          value="Scripts:"
-                         width="100" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="110"
+                         left_pad="0"
                          name="parcel_scripts"
                          top_delta="0"
-                         width="140" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -843,15 +850,15 @@
                          name="terraform_limits_label"
                          top_pad="5"
                          value="Terraform limits:"
-                         width="100" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="110"
+                         left_pad="0"
                          name="terraform_limits"
                          top_delta="0"
-                         width="140" />
+                         width="187" />
                         <text
                          follows="left|top"
                          height="15"
@@ -860,7 +867,7 @@
                          name="subdivide_label"
                          top_pad="5"
                          value="Subdivide/Join ability:"
-                         width="220" />
+                         width="277" />
                         <text_editor
                          bg_focus_color="DkGray2"
                          bg_readonly_color="DkGray2"
@@ -872,7 +879,8 @@
                          name="subdivide"
                          read_only="true"
                          top_pad="5"
-                         width="245" />
+                         width="277"
+                         word_wrap="true" />
                         <text
                          follows="left|top"
                          height="15"
@@ -881,7 +889,7 @@
                          name="resale_label"
                          top_pad="5"
                          value="ReSale ability:"
-                         width="80" />
+                         width="277" />
                         <text_editor
                          bg_focus_color="DkGray2"
                          bg_readonly_color="DkGray2"
@@ -893,7 +901,8 @@
                          name="resale"
                          read_only="true"
                          top_pad="5"
-                         width="245" />
+                         width="277"
+                         word_wrap="true" />
                         <text
                          follows="left|top"
                          height="15"
@@ -902,15 +911,15 @@
                          name="sale_to_label"
                          top_pad="5"
                          value="For sale to:"
-                         width="80" />
+                         width="90" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
-                         left="90"
+                         left_pad="0"
                          name="sale_to"
                          top_delta="0"
-                         width="160" />
+                         width="187" />
                     </panel>
                 </accordion_tab>
             </accordion>
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index cbbcfe50681d5c142a523c1427ef42a7b6c02d8d..5efacb68bea8358b46fbec0cb2d4d08a8ff89bba 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -104,7 +104,7 @@ background_visible="true"
          follows="bottom|right"
          font="SansSerifSmall"
          height="19"
-         image_disabled="ForwardArrow_Disabled"
+         image_disabled="ForwardArrow_Off"
          image_selected="ForwardArrow_Press"
          image_unselected="ForwardArrow_Off"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index b1308a194283a2f0ff394bb8a5b16fc6281f4819..9b10edde3397cb78b4d76983a63e91e8db6a9c5c 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -109,19 +109,7 @@
      name="ui_scale_slider"
      top_pad="2"
      width="180" />
-    <spinner
-     control_name="UIScaleFactor"
-     height="16"
-     increment="0.025"
-     initial_value="1"
-     layout="topleft"
-     left_pad="10"
-     max_val="1.4"
-     min_val="0.75"
-     name="ui_scale_slider"
-     top_delta="0"
-     width="58" />
-     <text
+    <text
      type="string"
      length="1"
      follows="left|top"