diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 7f3f869e5d6c1d090dadce1222dc09d67687d010..202fbdebd4dd917c109ea70e9ab0d3c02a44b414 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -153,6 +153,13 @@ void LLAvatarList::draw()
 	}
 }
 
+//virtual
+void LLAvatarList::clear()
+{
+	getIDs().clear();
+	setDirty(true);
+}
+
 void LLAvatarList::setNameFilter(const std::string& filter)
 {
 	if (mNameFilter != filter)
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 490f93e5015e2e96b2118a9d4b5374d105435422..9058fec540a8ff78bf98f1ba5b9d79789942c453 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -70,6 +70,8 @@ class LLAvatarList : public LLFlatListView
 
 	virtual void draw(); // from LLView
 
+	virtual void clear();
+
 	void setNameFilter(const std::string& filter);
 	void setDirty(bool val = true)						{ mDirty = val; }
 	uuid_vector_t& getIDs() 							{ return mIDs; }
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index f566806b299d2f34af5731e3a8b17f329e321f60..4a24b558c9f2cf1da9adc748d9a1f578a943ffff 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -62,8 +62,6 @@ BOOL LLCallFloater::postBuild()
 	LLDockableFloater::postBuild();
 	mAvatarList = getChild<LLAvatarList>("speakers_list");
 
-	mSpeakerManager = LLLocalSpeakerMgr::getInstance();
-	mPaticipants = new LLParticipantList(mSpeakerManager, mAvatarList, false);
 
 	LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("speak_panel");
 
@@ -73,4 +71,27 @@ BOOL LLCallFloater::postBuild()
 
 	return TRUE;
 }
+
+// virtual
+void LLCallFloater::onOpen(const LLSD& key)
+{
+	// by default let show nearby chat participants
+	mSpeakerManager = LLLocalSpeakerMgr::getInstance();
+
+	const LLUUID& session_id = key.asUUID();
+	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id);
+	if (im_session)
+	{
+		mSpeakerManager = LLIMModel::getInstance()->getSpeakerManager(session_id);
+	}
+
+	delete mPaticipants;
+	mAvatarList->clear();
+	mPaticipants = new LLParticipantList(mSpeakerManager, mAvatarList, false);
+}
+
+//////////////////////////////////////////////////////////////////////////
+/// PRIVATE SECTION
+//////////////////////////////////////////////////////////////////////////
+
 //EOF
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
index 8c4a2049434f25c21074c02e42514054a9759e9e..0b86a6ee92921c21ee492290ee5f6c199361014e 100644
--- a/indra/newview/llcallfloater.h
+++ b/indra/newview/llcallfloater.h
@@ -58,6 +58,7 @@ class LLCallFloater : public LLDockableFloater
 	~LLCallFloater();
 
 	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void onOpen(const LLSD& key);
 
 
 private:
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 6f753b617605803449ed1cd6d608f47bc7d5cf82..87f1ac1f9fba40a6968fe0a1ac377403a132ed82 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -48,6 +48,8 @@
 #include "llscrollcontainer.h"
 #include "llavatariconctrl.h"
 #include "llweb.h"
+#include "llfloaterworldmap.h"
+#include "llfloaterreg.h"
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLDropTarget
@@ -150,6 +152,8 @@ BOOL LLPanelAvatarNotes::postBuild()
 	childSetCommitCallback("call", boost::bind(&LLPanelAvatarNotes::onCallButtonClick, this), NULL);
 	childSetCommitCallback("teleport", boost::bind(&LLPanelAvatarNotes::onTeleportButtonClick, this), NULL);
 	childSetCommitCallback("share", boost::bind(&LLPanelAvatarNotes::onShareButtonClick, this), NULL);
+	childSetCommitCallback("show_on_map_btn", (boost::bind(
+				&LLPanelAvatarNotes::onMapButtonClick, this)), NULL);
 
 	LLTextEditor* te = getChild<LLTextEditor>("notes_edit");
 	te->setCommitCallback(boost::bind(&LLPanelAvatarNotes::onCommitNotes,this));
@@ -311,6 +315,7 @@ void LLPanelProfileTab::onOpen(const LLSD& key)
 	// Update data even if we are viewing same avatar profile as some data might been changed.
 	setAvatarId(key.asUUID());
 	updateData();
+	updateButtons();
 }
 
 void LLPanelProfileTab::scrollToTop()
@@ -320,6 +325,22 @@ void LLPanelProfileTab::scrollToTop()
 		scrollContainer->goToTop();
 }
 
+void LLPanelProfileTab::onMapButtonClick()
+{
+	std::string name;
+	gCacheName->getFullName(getAvatarId(), name);
+	gFloaterWorldMap->trackAvatar(getAvatarId(), name);
+	LLFloaterReg::showInstance("world_map");
+}
+
+void LLPanelProfileTab::updateButtons()
+{
+	bool enable_map_btn = LLAvatarTracker::instance().isBuddyOnline(getAvatarId())
+					&& gAgent.isGodlike() || is_agent_mappable(getAvatarId());
+
+	childSetEnabled("show_on_map_btn", enable_map_btn);
+}
+
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
@@ -338,6 +359,8 @@ BOOL LLPanelAvatarProfile::postBuild()
 	childSetCommitCallback("teleport",(boost::bind(&LLPanelAvatarProfile::onTeleportButtonClick,this)),NULL);
 	childSetCommitCallback("overflow_btn", boost::bind(&LLPanelAvatarProfile::onOverflowButtonClicked, this), NULL);
 	childSetCommitCallback("share",(boost::bind(&LLPanelAvatarProfile::onShareButtonClick,this)),NULL);
+	childSetCommitCallback("show_on_map_btn", (boost::bind(
+			&LLPanelAvatarProfile::onMapButtonClick, this)), NULL);
 
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 	registrar.add("Profile.Pay",  boost::bind(&LLPanelAvatarProfile::pay, this));
diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h
index 527e1c0d340cbf714f51d9fe977bc174b2499509..dc94ff02caa7b1438b8380dd196c51c5254dc2bd 100644
--- a/indra/newview/llpanelavatar.h
+++ b/indra/newview/llpanelavatar.h
@@ -106,6 +106,10 @@ class LLPanelProfileTab
 	 */
 	void scrollToTop();
 
+	virtual void onMapButtonClick();
+
+	virtual void updateButtons();
+
 private:
 
 	LLUUID mAvatarId;
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 78b4d29b162beb293b2d1e8dba7394fb617b2ede..741f42f9d503a6170a443536d25370b0f4c1289f 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -32,6 +32,8 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llfloaterreg.h"
+
 #include "llpanelimcontrolpanel.h"
 
 #include "llagent.h"
@@ -58,7 +60,7 @@ void LLPanelChatControlPanel::onEndCallButtonClicked()
 
 void LLPanelChatControlPanel::onOpenVoiceControlsClicked()
 {
-	// TODO: implement Voice Control Panel opening
+	LLFloaterReg::showInstance("voice_controls", getSessionId());
 }
 
 void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index b17b6d6fe94d3a12fb286f23dde7314f70edb696..b21b1c64b144ec3fe8e0eb44a8d0af480a26e0f2 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -86,6 +86,9 @@ class LLPanelPicks
 	// parent panels failed to work (picks related code was in my profile panel)
 	void setProfilePanel(LLPanelProfile* profile_panel);
 
+protected:
+	/*virtual*/void updateButtons();
+
 private:
 	void onClickDelete();
 	void onClickTeleport();
@@ -125,7 +128,6 @@ class LLPanelPicks
 	bool callbackDeleteClassified(const LLSD& notification, const LLSD& response);
 	bool callbackTeleport(const LLSD& notification, const LLSD& response);
 
-	void updateButtons();
 
 	virtual void onDoubleClickPickItem(LLUICtrl* item);
 	virtual void onDoubleClickClassifiedItem(LLUICtrl* item);
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index a5440c368700668bc43ea9c7b045fd3181e697d8..7cf5302e40ded71393d20e97090f1f2730a2ab5b 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -89,6 +89,7 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
 			mModeratorList.insert(speakerp->mID);
 		}
 	}
+	mAvatarList->setDirty(true);
 	sort();
 }
 
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index 2f13b51a9febbd34c3fc91e19309e1f687390cf0..4434fe7403212c388a77248272769c27adbe7a72 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -25,13 +25,13 @@
             <avatar_icon
              enabled="false"
              follows="left|top"
-             height="20"
-             image_name="icon_avatar_online.tga"
+             height="18"
+             image_name="Generic_Person"
              layout="topleft"
              left="0"
              name="user_icon"
              top="0"
-             width="20" />
+             width="18" />
             <text
              follows="top|left"
              font="SansSerifSmallBold"
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 41b210557e2b85f4af5717646cee35e6515374f8..889f29fc5390c8c4a6cd3da0444355b3f2cfc514 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -61,7 +61,6 @@
          width="125"/>
 
         <button
-         enabled="false"
          bottom="10"
          follows="all" 
          height="20"