diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c6ba8a22bdbacfb7dc1068d86595863103d35fde..2c7e96f1e42442b5498318de69aa5d70cb900e14 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -117,7 +117,6 @@ set(viewer_SOURCE_FILES
     llbrowsernotification.cpp
     llbuycurrencyhtml.cpp
     llcallbacklist.cpp
-    llcallfloater.cpp
     llcallingcard.cpp
     llcapabilitylistener.cpp
     llcaphttpsender.cpp
@@ -701,7 +700,6 @@ set(viewer_HEADER_FILES
     llbreadcrumbview.h
     llbuycurrencyhtml.h
     llcallbacklist.h
-    llcallfloater.h
     llcallingcard.h
     llcapabilitylistener.h
     llcapabilityprovider.h
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index d6c781020d2b5d0b6bfc00d416a8433e09076bea..b23e5866dc38f839e8e23b5b50f8cf0d2e84e2aa 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -95,7 +95,6 @@
 #include "llweb.h"
 #include "llsecondlifeurls.h"
 #include "llupdaterservice.h"
-#include "llcallfloater.h"
 #include "llfloatertexturefetchdebugger.h"
 #include "llspellcheck.h"
 
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
deleted file mode 100644
index e767609d74bbb58f8341b8d6c9f48963bae20176..0000000000000000000000000000000000000000
--- a/indra/newview/llcallfloater.cpp
+++ /dev/null
@@ -1,822 +0,0 @@
-/** 
- * @file llcallfloater.cpp
- * @author Mike Antipov
- * @brief Voice Control Panel in a Voice Chats (P2P, Group, Nearby...).
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llcallfloater.h"
-
-#include "llnotificationsutil.h"
-#include "lltrans.h"
-
-#include "llagent.h"
-#include "llagentdata.h" // for gAgentID
-#include "llavatarnamecache.h"
-#include "llavatariconctrl.h"
-#include "llavatarlist.h"
-#include "lldraghandle.h"
-#include "llimfloater.h"
-#include "llimview.h"
-#include "llfloaterreg.h"
-#include "llparticipantlist.h"
-#include "llspeakers.h"
-#include "lltextutil.h"
-#include "lltransientfloatermgr.h"
-#include "llviewercontrol.h"
-#include "llviewerdisplayname.h"
-#include "llviewerwindow.h"
-#include "llvoicechannel.h"
-#include "llviewerparcelmgr.h"
-#include "llfirstuse.h"
-
-static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids);
-void reshape_floater(LLCallFloater* floater, S32 delta_height);
-
-class LLNonAvatarCaller : public LLAvatarListItem
-{
-public:
-	LLNonAvatarCaller() : LLAvatarListItem(false)
-	{
-
-	}
-	BOOL postBuild()
-	{
-		BOOL rv = LLAvatarListItem::postBuild();
-
-		if (rv)
-		{
-			setOnline(true);
-			showLastInteractionTime(false);
-			setShowProfileBtn(false);
-			setShowInfoBtn(false);
-			mAvatarIcon->setValue("Avaline_Icon");
-			mAvatarIcon->setToolTip(std::string(""));
-		}
-		return rv;
-	}
-
-	void setName(const std::string& name)
-	{
-		const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name);
-		LLAvatarListItem::setAvatarName(formatted_phone);
-		LLAvatarListItem::setAvatarToolTip(formatted_phone);
-	}
-
-	void setSpeakerId(const LLUUID& id) { mSpeakingIndicator->setSpeakerId(id); }
-};
-
-
-static void* create_non_avatar_caller(void*)
-{
-	return new LLNonAvatarCaller;
-}
-
-LLVoiceChannel* LLCallFloater::sCurrentVoiceChannel = NULL;
-
-LLCallFloater::LLCallFloater(const LLSD& key)
-: LLTransientDockableFloater(NULL, false, key)
-, mSpeakerManager(NULL)
-, mParticipants(NULL)
-, mAvatarList(NULL)
-, mNonAvatarCaller(NULL)
-, mVoiceType(VC_LOCAL_CHAT)
-, mAgentPanel(NULL)
-, mSpeakingIndicator(NULL)
-, mIsModeratorMutedVoice(false)
-, mInitParticipantsVoiceState(false)
-{
-	static LLUICachedControl<S32> voice_left_remove_delay ("VoiceParticipantLeftRemoveDelay", 10);
-	mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&LLCallFloater::removeVoiceLeftParticipant, this, _1), voice_left_remove_delay);
-
-	mFactoryMap["non_avatar_caller"] = LLCallbackMap(create_non_avatar_caller, NULL);
-	LLVoiceClient::instance().addObserver(this);
-	LLTransientFloaterMgr::getInstance()->addControlView(this);
-
-	// update the agent's name if display name setting change
-	LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLCallFloater::updateAgentModeratorState, this));
-	LLViewerDisplayName::addNameChangedCallback(boost::bind(&LLCallFloater::updateAgentModeratorState, this));
-
-}
-
-LLCallFloater::~LLCallFloater()
-{
-	resetVoiceRemoveTimers();
-	delete mSpeakerDelayRemover;
-
-	delete mParticipants;
-	mParticipants = NULL;
-
-	mAvatarListRefreshConnection.disconnect();
-	mVoiceChannelStateChangeConnection.disconnect();
-
-	if(LLVoiceClient::instanceExists())
-	{
-		LLVoiceClient::getInstance()->removeObserver(this);
-	}
-	LLTransientFloaterMgr::getInstance()->removeControlView(this);
-}
-
-// virtual
-BOOL LLCallFloater::postBuild()
-{
-	mAvatarList = getChild<LLAvatarList>("speakers_list");
-	mAvatarListRefreshConnection = mAvatarList->setRefreshCompleteCallback(boost::bind(&LLCallFloater::onAvatarListRefreshed, this));
-
-	childSetAction("leave_call_btn", boost::bind(&LLCallFloater::leaveCall, this));
-
-	mNonAvatarCaller = findChild<LLNonAvatarCaller>("non_avatar_caller");
-	mNonAvatarCaller->setVisible(FALSE);
-
-	initAgentData();
-
-	connectToChannel(LLVoiceChannel::getCurrentVoiceChannel());
-
-	updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
-	
-	updateSession();
-	return TRUE;
-}
-
-// virtual
-void LLCallFloater::onOpen(const LLSD& /*key*/)
-{
-	LLFirstUse::speak(false);
-}
-
-// virtual
-void LLCallFloater::draw()
-{
-	// we have to refresh participants to display ones not in voice as disabled.
-	// It should be done only when she joins or leaves voice chat.
-	// But seems that LLVoiceClientParticipantObserver is not enough to satisfy this requirement.
-	// *TODO: mantipov: remove from draw()
-
-	// NOTE: it looks like calling onChange() here is not necessary,
-	// but sometime it is not called properly from the observable object.
-	// Seems this is a problem somewhere in Voice Client (LLVoiceClient::participantAddedEvent)
-//	onChange();
-
-	bool is_moderator_muted = LLVoiceClient::getInstance()->getIsModeratorMuted(gAgentID);
-
-	if (mIsModeratorMutedVoice != is_moderator_muted)
-	{
-		setModeratorMutedVoice(is_moderator_muted);
-	}
-
-	// Need to resort the participant list if it's in sort by recent speaker order.
-	if (mParticipants)
-		mParticipants->update();
-
-	LLFloater::draw();
-}
-
-// virtual
-void LLCallFloater::setFocus( BOOL b )
-{
-	LLFloater::setFocus(b);
-
-	// Force using active floater transparency (STORM-730).
-	// We have to override setFocus() for LLCallFloater because selecting an item
-	// of the voice morphing combobox causes the floater to lose focus and thus become transparent.
-	updateTransparency(TT_ACTIVE);
-}
-
-// virtual
-void LLCallFloater::onParticipantsChanged()
-{
-	if (NULL == mParticipants) return;
-	updateParticipantsVoiceState();
-
-	// Add newly joined participants.
-	uuid_vec_t speakers_uuids;
-	get_voice_participants_uuids(speakers_uuids);
-	for (uuid_vec_t::const_iterator it = speakers_uuids.begin(); it != speakers_uuids.end(); it++)
-	{
-		mParticipants->addAvatarIDExceptAgent(*it);
-	}
-}
-
-//////////////////////////////////////////////////////////////////////////
-/// PRIVATE SECTION
-//////////////////////////////////////////////////////////////////////////
-
-void LLCallFloater::leaveCall()
-{
-	LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
-	if (voice_channel)
-	{
-		gIMMgr->endCall(voice_channel->getSessionID());
-	}
-}
-
-void LLCallFloater::updateSession()
-{
-	LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
-	if (voice_channel)
-	{
-		LL_DEBUGS("Voice") << "Current voice channel: " << voice_channel->getSessionID() << LL_ENDL;
-
-		if (mSpeakerManager && voice_channel->getSessionID() == mSpeakerManager->getSessionID())
-		{
-			LL_DEBUGS("Voice") << "Speaker manager is already set for session: " << voice_channel->getSessionID() << LL_ENDL;
-			return;
-		}
-		else
-		{
-			mSpeakerManager = NULL;
-		}
-	}
-
-	const LLUUID& session_id = voice_channel ? voice_channel->getSessionID() : LLUUID::null;
-
-	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id);
-	if (im_session)
-	{
-		mSpeakerManager = LLIMModel::getInstance()->getSpeakerManager(session_id);
-		switch (im_session->mType)
-		{
-		case IM_NOTHING_SPECIAL:
-		case IM_SESSION_P2P_INVITE:
-			mVoiceType = VC_PEER_TO_PEER;
-
-			if (!im_session->mOtherParticipantIsAvatar)
-			{
-				mVoiceType = VC_PEER_TO_PEER_AVALINE;
-			}
-			break;
-		case IM_SESSION_CONFERENCE_START:
-		case IM_SESSION_GROUP_START:
-		case IM_SESSION_INVITE:
-			if (gAgent.isInGroup(session_id))
-			{
-				mVoiceType = VC_GROUP_CHAT;
-			}
-			else
-			{
-				mVoiceType = VC_AD_HOC_CHAT;				
-			}
-			break;
-		default:
-			llwarning("Failed to determine voice call IM type", 0);
-			mVoiceType = VC_GROUP_CHAT;
-			break;
-		}
-	}
-
-	if (NULL == mSpeakerManager)
-	{
-		// By default show nearby chat participants
-		mSpeakerManager = LLLocalSpeakerMgr::getInstance();
-		LL_DEBUGS("Voice") << "Set DEFAULT speaker manager" << LL_ENDL;
-		mVoiceType = VC_LOCAL_CHAT;
-	}
-
-	updateTitle();
-
-	// Hide "Leave Call" button for nearby chat
-	bool is_local_chat = mVoiceType == VC_LOCAL_CHAT;
-	getChildView("leave_call_btn_panel")->setVisible( !is_local_chat);
-
-	refreshParticipantList();
-	updateAgentModeratorState();
-
-	// Show floater for voice calls & only in CONNECTED to voice channel state
-	if (!is_local_chat &&
-	    voice_channel &&
-	    LLVoiceChannel::STATE_CONNECTED == voice_channel->getState())
-	{
-		LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
-		bool show_me = !(im_floater && im_floater->getVisible());
-		if (show_me) 
-		{
-			setVisible(true);
-		}
-	}
-}
-
-void LLCallFloater::refreshParticipantList()
-{
-	bool non_avatar_caller = VC_PEER_TO_PEER_AVALINE == mVoiceType;
-
-	if (non_avatar_caller)
-	{
-		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSpeakerManager->getSessionID());
-		mNonAvatarCaller->setSpeakerId(session->mOtherParticipantID);
-		mNonAvatarCaller->setName(session->mName);
-	}
-
-	mNonAvatarCaller->setVisible(non_avatar_caller);
-	mAvatarList->setVisible(!non_avatar_caller);
-
-	if (!non_avatar_caller)
-	{
-		llassert(mParticipants == NULL); // check for possible memory leak
-		mParticipants = new LLParticipantList(mSpeakerManager, mAvatarList, mConversationViewModel, true, mVoiceType != VC_GROUP_CHAT && mVoiceType != VC_AD_HOC_CHAT, false);
-		mParticipants->setValidateSpeakerCallback(boost::bind(&LLCallFloater::validateSpeaker, this, _1));
-		const U32 speaker_sort_order = gSavedSettings.getU32("SpeakerParticipantDefaultOrder");
-		mParticipants->setSortOrder(LLParticipantList::EParticipantSortOrder(speaker_sort_order));
-		
-		if (LLLocalSpeakerMgr::getInstance() == mSpeakerManager)
-		{
-			mAvatarList->setNoItemsCommentText(getString("no_one_near"));
-		}
-
-		// we have to made delayed initialization of voice state of participant list.
-		// it will be performed after first LLAvatarList refreshing in the onAvatarListRefreshed().
-		mInitParticipantsVoiceState = true;
-	}
-}
-
-void LLCallFloater::onAvatarListRefreshed()
-{
-	if (mInitParticipantsVoiceState)
-	{
-		initParticipantsVoiceState();
-		mInitParticipantsVoiceState = false;
-	}
-	else
-	{
-		updateParticipantsVoiceState();
-	}
-}
-
-// static
-// This entry point now disable, but left for later use.
-void LLCallFloater::onCurrentChannelChanged(const LLUUID& /*session_id*/)
-{
-	LLVoiceChannel* channel = LLVoiceChannel::getCurrentVoiceChannel();
-
-	// *NOTE: if signal was sent for voice channel with LLVoiceChannel::STATE_NO_CHANNEL_INFO
-	// it sill be sent for the same channel again (when state is changed).
-	// So, lets ignore this call.
-	if (channel == sCurrentVoiceChannel) return;
-
-	LLCallFloater* call_floater = LLFloaterReg::getTypedInstance<LLCallFloater>("voice_controls");
-
-	call_floater->connectToChannel(channel);
-}
-
-void LLCallFloater::onAvatarNameCache(const LLUUID& agent_id,
-									  const LLAvatarName& av_name)
-{
-	LLStringUtil::format_map_t args;
-	args["[NAME]"] = av_name.getCompleteName();
-	std::string title = getString("title_peer_2_peer", args);
-	setTitle(title);
-}
-
-void LLCallFloater::updateTitle()
-{
-	LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
-	if (mVoiceType == VC_PEER_TO_PEER)
-	{
-		LLUUID session_id = voice_channel->getSessionID();
-		LLIMModel::LLIMSession* im_session =
-			LLIMModel::getInstance()->findIMSession(session_id);
-		if (im_session)
-		{
-			LLAvatarNameCache::get(im_session->mOtherParticipantID,
-				boost::bind(&LLCallFloater::onAvatarNameCache,
-					this, _1, _2));
-			return;
-		}
-	}
-	std::string title;
-	switch (mVoiceType)
-	{
-	case VC_LOCAL_CHAT:
-		title = getString("title_nearby");
-		break;
-	case VC_PEER_TO_PEER:
-	case VC_PEER_TO_PEER_AVALINE:
-		{
-			title = voice_channel->getSessionName();
-
-			if (VC_PEER_TO_PEER_AVALINE == mVoiceType)
-			{
-				title = LLTextUtil::formatPhoneNumber(title);
-			}
-
-			LLStringUtil::format_map_t args;
-			args["[NAME]"] = title;
-			title = getString("title_peer_2_peer", args);
-		}
-		break;
-	case VC_AD_HOC_CHAT:
-		title = getString("title_adhoc");
-		break;
-	case VC_GROUP_CHAT:
-		{
-			LLStringUtil::format_map_t args;
-			args["[GROUP]"] = voice_channel->getSessionName();
-			title = getString("title_group", args);
-		}
-		break;
-	}
-
-	setTitle(title);
-}
-
-void LLCallFloater::initAgentData()
-{
-	mAgentPanel = getChild<LLPanel> ("my_panel");
-
-	if ( mAgentPanel )
-	{
-		mAgentPanel->getChild<LLUICtrl>("user_icon")->setValue(gAgentID);
-
-		// Just use display name, because it's you
-		LLAvatarName av_name;
-		LLAvatarNameCache::get( gAgentID, &av_name );
-		mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(av_name.mDisplayName);
-
-		mSpeakingIndicator = mAgentPanel->getChild<LLOutputMonitorCtrl>("speaking_indicator");
-		mSpeakingIndicator->setSpeakerId(gAgentID);
-	}
-}
-
-void LLCallFloater::setModeratorMutedVoice(bool moderator_muted)
-{
-	mIsModeratorMutedVoice = moderator_muted;
-
-	if (moderator_muted)
-	{
-		LLNotificationsUtil::add("VoiceIsMutedByModerator");
-	}
-	mSpeakingIndicator->setIsMuted(moderator_muted);
-}
-
-void LLCallFloater::onModeratorNameCache(const LLAvatarName& av_name)
-{
-	std::string name;
-	name = av_name.mDisplayName;
-
-	if(mSpeakerManager && gAgent.isInGroup(mSpeakerManager->getSessionID()))
-	{
-		// This method can be called when LLVoiceChannel.mState == STATE_NO_CHANNEL_INFO
-		// in this case there are not any speakers yet.
-		if (mSpeakerManager->findSpeaker(gAgentID))
-		{
-			// Agent is Moderator
-			if (mSpeakerManager->findSpeaker(gAgentID)->mIsModerator)
-
-			{
-				const std::string moderator_indicator(LLTrans::getString("IM_moderator_label")); 
-				name += " " + moderator_indicator;
-			}
-		}
-	}
-	mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(name);
-}
-
-void LLCallFloater::updateAgentModeratorState()
-{
-	LLAvatarNameCache::get(gAgentID, boost::bind(&LLCallFloater::onModeratorNameCache, this, _2));
-}
-
-static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids)
-{
-	// Get a list of participants from VoiceClient
-       std::set<LLUUID> participants;
-       LLVoiceClient::getInstance()->getParticipantList(participants);
-	
-	for (std::set<LLUUID>::const_iterator iter = participants.begin();
-		 iter != participants.end(); ++iter)
-	{
-		speakers_uuids.push_back(*iter);
-	}
-
-}
-
-void LLCallFloater::initParticipantsVoiceState()
-{
-	// Set initial status for each participant in the list.
-	std::vector<LLPanel*> items;
-	mAvatarList->getItems(items);
-	std::vector<LLPanel*>::const_iterator
-		it = items.begin(),
-		it_end = items.end();
-
-
-	uuid_vec_t speakers_uuids;
-	get_voice_participants_uuids(speakers_uuids);
-
-	for(; it != it_end; ++it)
-	{
-		LLAvatarListItem *item = dynamic_cast<LLAvatarListItem*>(*it);
-		
-		if (!item)	continue;
-		
-		LLUUID speaker_id = item->getAvatarId();
-
-		uuid_vec_t::const_iterator speaker_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), speaker_id);
-
-		// If an avatarID assigned to a panel is found in a speakers list
-		// obtained from VoiceClient we assign the JOINED status to the owner
-		// of this avatarID.
-		if (speaker_iter != speakers_uuids.end())
-		{
-			setState(item, STATE_JOINED);
-		}
-		else
-		{
-			LLPointer<LLSpeaker> speakerp = mSpeakerManager->findSpeaker(speaker_id);
-			// If someone has already left the call before, we create his
-			// avatar row panel with HAS_LEFT status and remove it after
-			// the timeout, otherwise we create a panel with INVITED status
-			if (speakerp.notNull() && speakerp.get()->mHasLeftCurrentCall)
-			{
-				setState(item, STATE_LEFT);
-			}
-			else
-			{
-				setState(item, STATE_INVITED);
-			}
-		}
-	}
-}
-
-void LLCallFloater::updateParticipantsVoiceState()
-{
-	uuid_vec_t speakers_list;
-
-	// Get a list of participants from VoiceClient
-	uuid_vec_t speakers_uuids;
-	get_voice_participants_uuids(speakers_uuids);
-
-	// Updating the status for each participant already in list.
-	std::vector<LLPanel*> items;
-	mAvatarList->getItems(items);
-	std::vector<LLPanel*>::const_iterator
-		it = items.begin(),
-		it_end = items.end();
-
-	for(; it != it_end; ++it)
-	{
-		LLAvatarListItem *item = dynamic_cast<LLAvatarListItem*>(*it);
-		if (!item) continue;
-
-		const LLUUID participant_id = item->getAvatarId();
-		bool found = false;
-
-		uuid_vec_t::iterator speakers_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), participant_id);
-
-		LL_DEBUGS("Voice") << "processing speaker: " << item->getAvatarName() << ", " << item->getAvatarId() << LL_ENDL;
-
-		// If an avatarID assigned to a panel is found in a speakers list
-		// obtained from VoiceClient we assign the JOINED status to the owner
-		// of this avatarID.
-		if (speakers_iter != speakers_uuids.end())
-		{
-			setState(item, STATE_JOINED);
-
-			LLPointer<LLSpeaker> speaker = mSpeakerManager->findSpeaker(participant_id);
-			if (speaker.isNull())
-				continue;
-			speaker->mHasLeftCurrentCall = FALSE;
-
-			speakers_uuids.erase(speakers_iter);
-			found = true;
-		}
-
-		if (!found)
-		{
-			updateNotInVoiceParticipantState(item);
-		}
-	}
-}
-
-void LLCallFloater::updateNotInVoiceParticipantState(LLAvatarListItem* item)
-{
-	LLUUID participant_id = item->getAvatarId();
-	ESpeakerState current_state = getState(participant_id);
-
-	switch (current_state)
-	{
-	case STATE_JOINED:
-		// If an avatarID is not found in a speakers list from VoiceClient and
-		// a panel with this ID has a JOINED status this means that this person
-		// HAS LEFT the call.
-		setState(item, STATE_LEFT);
-
-		{
-			LLPointer<LLSpeaker> speaker = mSpeakerManager->findSpeaker(participant_id);
-			if (speaker.notNull())
-			{
-				speaker->mHasLeftCurrentCall = TRUE;
-			}
-		}
-		break;
-	case STATE_LEFT:
-		// nothing to do. These states should not be changed.
-		break;
-	case STATE_INVITED:
-		// If avatar was invited into group chat and went offline it is still exists in mSpeakerStateMap
-		// If it goes online it will be rendered as JOINED via LAvatarListItem.
-		// Lets update its visual representation. See EXT-6660
-	case STATE_UNKNOWN:
-		// If an avatarID is not found in a speakers list from VoiceClient and
-		// a panel with this ID has an UNKNOWN status this means that this person
-		// HAS ENTERED session but it is not in voice chat yet. So, set INVITED status
-		setState(item, STATE_INVITED);
-		break;
-	default:
-		// for possible new future states.
-		llwarns << "Unsupported (" << getState(participant_id) << ") state for: " << item->getAvatarName()  << llendl;
-		break;
-	}
-}
-
-void LLCallFloater::setState(LLAvatarListItem* item, ESpeakerState state)
-{
-	// *HACK: mantipov: sometimes such situation is possible while switching to voice channel:
-/*
-	- voice channel is switched to the one user is joining
-	- participant list is initialized with voice states: agent is in voice
-	- than such log messages were found (with agent UUID)
-			- LLVivoxProtocolParser::process_impl: parsing: <Response requestId="22" action="Session.MediaDisconnect.1"><ReturnCode>0</ReturnCode><Results><StatusCode>0</StatusCode><StatusString /></Results><InputXml><Request requestId="22" action="Session.MediaDisconnect.1"><SessionGroupHandle>9</SessionGroupHandle><SessionHandle>12</SessionHandle><Media>Audio</Media></Request></InputXml></Response>
-			- LLVoiceClient::sessionState::removeParticipant: participant "sip:x2pwNkMbpR_mK4rtB_awASA==@bhr.vivox.com" (da9c0d90-c6e9-47f9-8ae2-bb41fdac0048) removed.
-	- and than while updating participants voice states agent is marked as HAS LEFT
-	- next updating of LLVoiceClient state makes agent JOINED
-	So, lets skip HAS LEFT state for agent's avatar
-*/
-	if (STATE_LEFT == state && item->getAvatarId() == gAgentID) return;
-
-	setState(item->getAvatarId(), state);
-
-	switch (state)
-	{
-	case STATE_INVITED:
-		item->setState(LLAvatarListItem::IS_VOICE_INVITED);
-		break;
-	case STATE_JOINED:
-		removeVoiceRemoveTimer(item->getAvatarId());
-		item->setState(LLAvatarListItem::IS_VOICE_JOINED);
-		break;
-	case STATE_LEFT:
-		{
-			setVoiceRemoveTimer(item->getAvatarId());
-			item->setState(LLAvatarListItem::IS_VOICE_LEFT);
-		}
-		break;
-	default:
-		llwarns << "Unrecognized avatar panel state (" << state << ")" << llendl;
-		break;
-	}
-}
-
-void LLCallFloater::setVoiceRemoveTimer(const LLUUID& voice_speaker_id)
-{
-	mSpeakerDelayRemover->setActionTimer(voice_speaker_id);
-}
-
-bool LLCallFloater::removeVoiceLeftParticipant(const LLUUID& voice_speaker_id)
-{
-	uuid_vec_t& speaker_uuids = mAvatarList->getIDs();
-	uuid_vec_t::iterator pos = std::find(speaker_uuids.begin(), speaker_uuids.end(), voice_speaker_id);
-	if(pos != speaker_uuids.end())
-	{
-		speaker_uuids.erase(pos);
-		mAvatarList->setDirty();
-	}
-
-	return false;
-}
-
-
-void LLCallFloater::resetVoiceRemoveTimers()
-{
-	mSpeakerDelayRemover->removeAllTimers();
-}
-
-void LLCallFloater::removeVoiceRemoveTimer(const LLUUID& voice_speaker_id)
-{
-	mSpeakerDelayRemover->unsetActionTimer(voice_speaker_id);
-}
-
-bool LLCallFloater::validateSpeaker(const LLUUID& speaker_id)
-{
-	bool is_valid = true;
-	switch (mVoiceType)
-	{
-	case  VC_LOCAL_CHAT:
-		{
-			// A nearby chat speaker is considered valid it it's known to LLVoiceClient (i.e. has enabled voice).
-			uuid_vec_t speakers;
-			get_voice_participants_uuids(speakers);
-			is_valid = std::find(speakers.begin(), speakers.end(), speaker_id) != speakers.end();
-		}
-		break;
-	case VC_GROUP_CHAT:
-		// if participant had left this call before do not allow add her again. See EXT-4216.
-		// but if she Join she will be added into the list from the LLCallFloater::onChange()
-		is_valid = STATE_LEFT != getState(speaker_id);
-		break;
-	default:
-		// do nothing. required for Linux build
-		break;
-	}
-
-	return is_valid;
-}
-
-void LLCallFloater::connectToChannel(LLVoiceChannel* channel)
-{
-	mVoiceChannelStateChangeConnection.disconnect();
-
-	sCurrentVoiceChannel = channel;
-
-	mVoiceChannelStateChangeConnection = sCurrentVoiceChannel->setStateChangedCallback(boost::bind(&LLCallFloater::onVoiceChannelStateChanged, this, _1, _2));
-
-	updateState(channel->getState());
-}
-
-void LLCallFloater::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
-{
-	// check is voice operational and if it doesn't work hide VCP (EXT-4397)
-	if(LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking())
-	{
-		updateState(new_state);
-	}
-	else
-	{
-		closeFloater();
-	}
-}
-
-void LLCallFloater::updateState(const LLVoiceChannel::EState& new_state)
-{
-	LL_DEBUGS("Voice") << "Updating state: " << new_state << ", session name: " << sCurrentVoiceChannel->getSessionName() << LL_ENDL;
-	if (LLVoiceChannel::STATE_CONNECTED == new_state)
-	{
-		updateSession();
-	}
-	else
-	{
-		reset(new_state);
-	}
-}
-
-void LLCallFloater::reset(const LLVoiceChannel::EState& new_state)
-{
-	// lets forget states from the previous session
-	// for timers...
-	resetVoiceRemoveTimers();
-
-	// ...and for speaker state
-	mSpeakerStateMap.clear();
-
-	delete mParticipants;
-	mParticipants = NULL;
-	mAvatarList->clear();
-
-	// These ifs were added instead of simply showing "loading" to make VCP work correctly in parcels
-	// with disabled voice (EXT-4648 and EXT-4649)
-	if (!LLViewerParcelMgr::getInstance()->allowAgentVoice() && LLVoiceChannel::STATE_HUNG_UP == new_state)
-	{
-		// hides "Leave Call" when call is ended in parcel with disabled voice- hiding usually happens in
-		// updateSession() which won't be called here because connect to nearby voice never happens 
-		getChildView("leave_call_btn_panel")->setVisible( false);
-		// setting title to nearby chat an "no one near..." text- because in region with disabled
-		// voice we won't have chance to really connect to nearby, so VCP is changed here manually
-		setTitle(getString("title_nearby"));
-		mAvatarList->setNoItemsCommentText(getString("no_one_near"));
-	}
-	// "loading" is shown  only when state is "ringing" to avoid showing it in nearby chat vcp
-	// of parcels with disabled voice all the time- "no_one_near" is now shown there (EXT-4648)
-	else if (new_state == LLVoiceChannel::STATE_RINGING)
-	{
-		// update floater to show Loading while waiting for data.
-		mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
-	}
-
-	mAvatarList->setVisible(TRUE);
-	mNonAvatarCaller->setVisible(FALSE);
-
-	mSpeakerManager = NULL;
-}
-
-//EOF
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
deleted file mode 100644
index e1c7b3f43adc341078b2ded546c4371242bb9cbe..0000000000000000000000000000000000000000
--- a/indra/newview/llcallfloater.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/** 
- * @file llcallfloater.h
- * @author Mike Antipov
- * @brief Voice Control Panel in a Voice Chats (P2P, Group, Nearby...).
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLCALLFLOATER_H
-#define LL_LLCALLFLOATER_H
-
-#include "lltransientdockablefloater.h"
-#include "llvoicechannel.h"
-#include "llvoiceclient.h"
-#include "llconversationmodel.h"
-
-class LLAvatarList;
-class LLAvatarListItem;
-class LLAvatarName;
-class LLNonAvatarCaller;
-class LLOutputMonitorCtrl;
-class LLParticipantList;
-class LLSpeakerMgr;
-class LLSpeakersDelayActionsStorage;
-
-/**
- * The Voice Control Panel is an ambient window summoned by clicking the flyout chevron
- * on the Speak button. It can be torn-off and freely positioned onscreen.
- *
- * When the Resident is engaged in Voice Chat, the Voice Control Panel provides control
- * over the audible volume of each of the other participants, the Resident's own Voice
- * Morphing settings (if she has subscribed to enable the feature), and Voice Recording.
- *
- * When the Resident is engaged in any chat except Nearby Chat, the Voice Control Panel
- * also provides a 'Leave Call' button to allow the Resident to leave that voice channel.
- */
-class LLCallFloater : public LLTransientDockableFloater, LLVoiceClientParticipantObserver
-{
-public:
-
-	LOG_CLASS(LLCallFloater);
-
-	LLCallFloater(const LLSD& key);
-	~LLCallFloater();
-
-	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void onOpen(const LLSD& key);
-	/*virtual*/ void draw();
-	/*virtual*/ void setFocus( BOOL b );
-
-	/**
-	 * Is called by LLVoiceClient::notifyParticipantObservers when voice participant list is changed.
-	 *
-	 * Refreshes list to display participants not in voice as disabled.
-	 */
-	/*virtual*/ void onParticipantsChanged();
-
-	static void onCurrentChannelChanged(const LLUUID& session_id);
-
-private:
-	typedef enum e_voice_controls_type
-	{
-		VC_LOCAL_CHAT,
-		VC_GROUP_CHAT,
-		VC_AD_HOC_CHAT,
-		VC_PEER_TO_PEER,
-		VC_PEER_TO_PEER_AVALINE
-	}EVoiceControls;
-
-	typedef enum e_speaker_state
-	{
-		STATE_UNKNOWN,
-		STATE_INVITED,
-		STATE_JOINED,
-		STATE_LEFT,
-	} ESpeakerState;
-
-	typedef std::map<LLUUID, ESpeakerState> speaker_state_map_t;
-
-	void leaveCall();
-
-	/**
-	 * Updates mSpeakerManager and list according to current Voice Channel
-	 *
-	 * It compares mSpeakerManager & current Voice Channel session IDs.
-	 * If they are different gets Speaker manager related to current channel and updates channel participant list.
-	 */
-	void updateSession();
-
-	/**
-	 * Refreshes participant list according to current Voice Channel
-	 */
-	void refreshParticipantList();
-
-	/**
-	 * Handles event on avatar list is refreshed after it was marked dirty.
-	 *
-	 * It sets initial participants voice states (once after the first refreshing)
-	 * and updates voice states each time anybody is joined/left voice chat in session.
-	 */
-	void onAvatarListRefreshed();
-
-	/**
-	 * Updates window title with an avatar name
-	 */
-	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
-	
-	void updateTitle();
-	void initAgentData();
-	void setModeratorMutedVoice(bool moderator_muted);
-	void updateAgentModeratorState();
-	void onModeratorNameCache(const LLAvatarName& av_name);
-
-	/**
-	 * Sets initial participants voice states in avatar list (Invited, Joined, Has Left).
-	 *
-	 * @see refreshParticipantList()
-	 * @see onAvatarListRefreshed()
-	 * @see mInitParticipantsVoiceState
-	 */
-	void initParticipantsVoiceState();
-
-	/**
-	 * Updates participants voice states in avatar list (Invited, Joined, Has Left).
-	 *
-	 * @see onAvatarListRefreshed()
-	 * @see onChanged()
-	 */
-	void updateParticipantsVoiceState();
-
-	/**
-	 * Updates voice state of participant not in current voice channel depend on its current state.
-	 */
-	void updateNotInVoiceParticipantState(LLAvatarListItem* item);
-	void setState(LLAvatarListItem* item, ESpeakerState state);
-	void setState(const LLUUID& speaker_id, ESpeakerState state)
-	{
-		lldebugs << "Storing state: " << speaker_id << ", " << state << llendl;
-		mSpeakerStateMap[speaker_id] = state;
-	}
-
-	ESpeakerState getState(const LLUUID& speaker_id)
-	{
-		lldebugs << "Getting state: " << speaker_id << ", " << mSpeakerStateMap[speaker_id] << llendl;
-
-		return mSpeakerStateMap[speaker_id];
-	}
-
-	/**
-	 * Instantiates new LLAvatarListItemRemoveTimer and adds it into the map if it is not already created.
-	 *
-	 * @param voice_speaker_id LLUUID of Avatar List item to be removed from the list when timer expires.
-	 */
-	void setVoiceRemoveTimer(const LLUUID& voice_speaker_id);
-
-	/**
-	 * Removes specified by UUID Avatar List item.
-	 *
-	 * @param voice_speaker_id LLUUID of Avatar List item to be removed from the list.
-	 */
-	bool removeVoiceLeftParticipant(const LLUUID& voice_speaker_id);
-
-	/**
-	 * Deletes all timers from the list to prevent started timers from ticking after destruction
-	 * and after switching on another voice channel.
-	 */
-	void resetVoiceRemoveTimers();
-
-	/**
-	 * Removes specified by UUID timer from the map.
-	 *
-	 * @param voice_speaker_id LLUUID of Avatar List item whose timer should be removed from the map.
-	 */
-	void removeVoiceRemoveTimer(const LLUUID& voice_speaker_id);
-
-	/**
-	 * Called by LLParticipantList before adding a speaker to the participant list.
-	 *
-	 * If false is returned, the speaker will not be added to the list.
-	 *
-	 * @param speaker_id Speaker to validate.
-	 * @return true if this is a valid speaker, false otherwise.
-	 */
-	bool validateSpeaker(const LLUUID& speaker_id);
-
-	/**
-	 * Connects to passed channel to be updated according to channel's voice states.
-	 */
-	void connectToChannel(LLVoiceChannel* channel);
-
-	/**
-	 * Callback to process changing of voice channel's states.
-	 */
-	void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
-
-	/**
-	 * Updates floater according to passed channel's voice state.
-	 */
-	void updateState(const LLVoiceChannel::EState& new_state);
-
-	/**
-	 * Resets floater to be ready to show voice participants.
-	 *
-	 * Clears all data from the latest voice session.
-	 */
-	void reset(const LLVoiceChannel::EState& new_state);
-
-private:
-	speaker_state_map_t mSpeakerStateMap;
-	LLSpeakerMgr* mSpeakerManager;
-	LLParticipantList* mParticipants;
-	LLAvatarList* mAvatarList;
-	LLConversationViewModel mConversationViewModel;
-	LLNonAvatarCaller* mNonAvatarCaller;
-	EVoiceControls mVoiceType;
-	LLPanel* mAgentPanel;
-	LLOutputMonitorCtrl* mSpeakingIndicator;
-	bool mIsModeratorMutedVoice;
-
-	/**
-	 * Flag indicated that participants voice states should be initialized.
-	 *
-	 * It is used due to Avatar List has delayed refreshing after it content is changed.
-	 * Real initializing is performed when Avatar List is first time refreshed.
-	 *
-	 * @see onAvatarListRefreshed()
-	 * @see initParticipantsVoiceState()
-	 */
-	bool mInitParticipantsVoiceState;
-
-	boost::signals2::connection mAvatarListRefreshConnection;
-
-
-	/**
-	 * time out speakers when they are not part of current session
-	 */
-	LLSpeakersDelayActionsStorage* mSpeakerDelayRemover;
-
-	/**
-	 * Stores reference to current voice channel.
-	 *
-	 * Is used to ignore voice channel changed callback for the same channel.
-	 *
-	 * @see onCurrentChannelChanged()
-	 */
-	static LLVoiceChannel* sCurrentVoiceChannel;
-
-	/* virtual */
-	LLTransientFloaterMgr::ETransientGroup getGroup() { return LLTransientFloaterMgr::IM; }
-
-	boost::signals2::connection mVoiceChannelStateChangeConnection;
-};
-
-
-#endif //LL_LLCALLFLOATER_H
-
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index c75155052306adaee7051d4e5ae5529e9be7b694..b99d04abae9fb97808efcc51ec26fda9219a2c22 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -32,7 +32,6 @@
 #include "llviewerfloaterreg.h"
 #include "llfloaterautoreplacesettings.h"
 #include "llcompilequeue.h"
-#include "llcallfloater.h"
 #include "llfasttimerview.h"
 #include "llfloaterabout.h"
 #include "llfloaterauction.h"
@@ -322,7 +321,6 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("upload_script", "floater_script_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptPreview>, "upload");
 	LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
 
-	LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);
 	LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceEffect>);
 
 	LLFloaterReg::add("web_content", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);	
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index f1bf4a6d75d81a182eeb9eccdcfa4d8149f035a3..7da71a04d94ea3f6a6dbde742676a5220f2a11cf 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -3712,8 +3712,7 @@ void LLVivoxVoiceClient::participantUpdatedEvent(
 			 voice participant mIsModeratorMuted is changed after speakers are updated in Speaker Manager                                          
 			 and event is not fired.                                                                                                               
 			 
-			 So, we have to call LLSpeakerMgr::update() here. In any case it is better than call it                                                
-			 in LLCallFloater::draw()                                                                                                              
+			 So, we have to call LLSpeakerMgr::update() here.                                                                                                              
 			 */
 			LLVoiceChannel* voice_cnl = LLVoiceChannel::getCurrentVoiceChannel();
 			
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
deleted file mode 100644
index dce2720cf8cf46c63eddfc054524f05ddafd38b3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- positioning="cascading"
- can_resize="true"
- can_minimize="true"
- can_close="true"
- chrome="true"
- height="205"
- layout="topleft"
- min_height="124"
- min_width="190"
- name="floater_voice_controls"
- help_topic="floater_voice_controls"
- title="VOICE CONTROLS"
- save_dock_state="true"
- save_visibility="true"
- save_rect="true"
- single_instance="true"
- width="282">
-    <string
-     name="title_nearby">
-        VOICE SETTINGS
-    </string>
-    <string
-     name="title_group">
-        GROUP CALL WITH [GROUP]
-    </string>
-    <string
-     name="title_adhoc">
-        CONFERENCE CALL
-    </string>
-    <string
-     name="title_peer_2_peer">
-        CALL WITH [NAME]
-    </string>
-    <string
-     name="no_one_near">
-        No one near has voice enabled
-    </string>
-      <layout_stack
-         clip="false"
-         follows="all"
-         height="189"
-         layout="topleft"
-         left="10"
-         mouse_opaque="false"
-         name="my_call_stack"
-         orientation="vertical"
-         width="263">
-        <layout_panel
-         follows="top|left|right"
-         auto_resize="false"
-         layout="topleft"
-         min_height="20"
-         height="20"
-         name="my_panel">
-            <avatar_icon
-             enabled="false"
-             follows="left|top"
-             height="18"
-             default_icon_name="Generic_Person"
-             layout="topleft"
-             left="5"
-             name="user_icon"
-             top="0"
-             width="18" />
-            <text
-             follows="top|left|right"
-             font="SansSerifSmallBold"
-             height="16"
-             layout="topleft"
-             left_pad="10"
-             name="user_text"
-             text_color="White"
-             top="4"
-             use_ellipses="true"
-             value="My Avatar:"
-             width="210" />
-            <output_monitor
-             auto_update="true"
-             draw_border="false"
-             follows="top|right"
-             height="16"
-             layout="topleft"
-             right="-3"
-             name="speaking_indicator"
-             left_pad="5"
-             visible="true"
-             width="20" />
-        </layout_panel>
-        <layout_panel name="leave_call_panel" height="26" min_height="26" auto_resize="false">
-        <layout_stack
-         clip="true"
-         follows="left|top|right"
-         height="26"
-         layout="topleft"
-         mouse_opaque="false"
-         name="voice_effect_and_leave_call_stack"
-         orientation="horizontal"
-         width="262">
-          <layout_panel
-            height="26"
-            width="200">
-            <panel
-             class="panel_voice_effect"
-             name="panel_voice_effect"
-             visiblity_control="VoiceMorphingEnabled"
-             filename="panel_voice_effect.xml" />
-          </layout_panel>
-          <layout_panel
-           auto_resize="false"
-           follows="top|right"
-           height="23"
-           visible="true"
-           layout="topleft"
-           name="leave_call_btn_panel"
-           width="100">
-            <button
-             follows="right|top"
-             height="23"
-             label="Leave Call"
-             name="leave_call_btn"
-             width="100" />
-          </layout_panel>
-        </layout_stack>
-          </layout_panel>
-      <layout_panel
-          follows="all"
-          layout="topleft"
-          left="2"
-          top_pad="0"
-          height="132"
-          name="callers_panel"
-          auto_resize="true"
-          width="280">
-        <avatar_list
-         follows="all"
-         height="132"
-         ignore_online_status="true"
-         layout="topleft"
-         multi_select="true"
-         name="speakers_list"
-         width="280" />
-        <panel
-         filename="panel_avatar_list_item.xml"
-         follows="left|right|top"
-         height="24"
-         layout="topleft"
-         left="0"
-         name="non_avatar_caller"
-         top="10"
-         width="276" />
-      </layout_panel>
-    </layout_stack>
-</floater>