diff --git a/indra/llui/lltextutil.cpp b/indra/llui/lltextutil.cpp
index f47e42801c86b876f45204ddf85b6caa5718d429..15d25a7fb8249c63422032d7fb4cc8a5441565a1 100644
--- a/indra/llui/lltextutil.cpp
+++ b/indra/llui/lltextutil.cpp
@@ -76,22 +76,6 @@ void LLTextUtil::textboxSetGreyedVal(LLTextBox *txtbox, const LLStyle::Params& n
     txtbox->appendText(text.substr(greyed_begin + greyed_len),  false, normal_style);
 }
 
-const std::string& LLTextUtil::formatPhoneNumber(const std::string& phone_str)
-{
-	static const std::string PHONE_SEPARATOR = LLUI::getInstanceFast()->mSettingGroups["config"]->getString("AvalinePhoneSeparator");
-	static const S32 PHONE_PART_LEN = 2;
-
-	static std::string formatted_phone_str;
-	formatted_phone_str = phone_str;
-	S32 separator_pos = (S32)(formatted_phone_str.size()) - PHONE_PART_LEN;
-	for (; separator_pos >= PHONE_PART_LEN; separator_pos -= PHONE_PART_LEN)
-	{
-		formatted_phone_str.insert(separator_pos, PHONE_SEPARATOR);
-	}
-
-	return formatted_phone_str;
-}
-
 bool LLTextUtil::processUrlMatch(LLUrlMatch* match,LLTextBase* text_base, bool is_content_trusted)
 {
 	if (match == 0 || text_base == 0)
diff --git a/indra/llui/lltextutil.h b/indra/llui/lltextutil.h
index a9c143e4450d51d979fe2863994a399911c387c5..1adc3516f7685a45021fc5bebed9abf8600d45f3 100644
--- a/indra/llui/lltextutil.h
+++ b/indra/llui/lltextutil.h
@@ -58,18 +58,6 @@ namespace LLTextUtil
 	        const std::string& text,
 	        const std::string& greyed);
 
-	/**
-	 * Formats passed phone number to be more human readable.
-	 *
-	 * It just divides the number on parts by two digits from right to left. The first left part
-	 * can have 2 or 3 digits, i.e. +44-33-33-44-55-66 or 12-34-56-78-90. Separator is set in
-	 * application settings (AvalinePhoneSeparator)
-	 *
-	 * @param[in] phone_str string with original phone number
-	 * @return reference to string with formatted phone number
-	 */
-	const std::string& formatPhoneNumber(const std::string& phone_str);
-
 	/**
 	 * Adds icon before url if need.
 	 *
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 75d35d9b285cf4c0cf2d56af6cbceb2552c80ce7..5add8e5ba3e0048db721c67399f7d6ac6510e0c1 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -264,21 +264,6 @@ void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/)
 	}
 }
 
-void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name)
-{
-	LL_DEBUGS("Avaline") << "Adding avaline item into the list: " << item_name << "|" << item_id << ", session: " << session_id << LL_ENDL;
-	LLAvalineListItem* item = new LLAvalineListItem(/*hide_number=*/false);
-	item->setAvatarId(item_id, session_id, true, false);
-	item->setName(item_name);
-	item->showTextField(mShowLastInteractionTime || mShowDistance);
-	item->showSpeakingIndicator(mShowSpeakingIndicator);
-	item->setOnline(false);
-
-	addItem(item, item_id);
-	mIDs.push_back(item_id);
-	sort();
-}
-
 //////////////////////////////////////////////////////////////////////////
 // PROTECTED SECTION
 //////////////////////////////////////////////////////////////////////////
@@ -316,20 +301,10 @@ void LLAvatarList::refresh()
 			}
 			else
 			{
-				// *NOTE: If you change the UI to show a different string,
-				// be sure to change the filter code below.
-				if (LLRecentPeople::instanceFast().isAvalineCaller(buddy_id))
-				{
-					const LLSD& call_data = LLRecentPeople::instanceFast().getData(buddy_id);
-					addAvalineItem(buddy_id, call_data["session_id"].asUUID(), call_data["call_number"].asString());
-				}
-				else
-				{
-					std::string display_name = getAvatarName(av_name);
-					addNewItem(buddy_id, 
-						display_name.empty() ? waiting_str : display_name, 
-						LLAvatarTracker::instance().isBuddyOnline(buddy_id));
-				}
+				std::string display_name = getAvatarName(av_name);
+				addNewItem(buddy_id, 
+					display_name.empty() ? waiting_str : display_name, 
+					LLAvatarTracker::instance().isBuddyOnline(buddy_id));
 				
 				modified = true;
 				nadded++;
@@ -487,7 +462,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
 BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
 {
 	BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask);
-	if ( mContextMenu && !isAvalineItemSelected())
+	if (mContextMenu)
 	{
 		uuid_vec_t selected_uuids;
 		getSelectedUUIDs(selected_uuids);
@@ -547,21 +522,6 @@ BOOL LLAvatarList::handleHover(S32 x, S32 y, MASK mask)
 	return handled;
 }
 
-bool LLAvatarList::isAvalineItemSelected()
-{
-	std::vector<LLPanel*> selected_items;
-	getSelectedItems(selected_items);
-	std::vector<LLPanel*>::iterator it = selected_items.begin();
-	
-	for(; it != selected_items.end(); ++it)
-	{
-		if (dynamic_cast<LLAvalineListItem*>(*it))
-			return true;
-	}
-
-	return false;
-}
-
 void LLAvatarList::setVisible(BOOL visible)
 {
 	if ( visible == FALSE && mContextMenu )
@@ -676,63 +636,3 @@ bool LLAvatarItemAgentOnTopComparator::doCompare(const LLAvatarListItem* avatar_
 	}
 	return LLAvatarItemNameComparator::doCompare(avatar_item1,avatar_item2);
 }
-
-/************************************************************************/
-/*             class LLAvalineListItem                                  */
-/************************************************************************/
-LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarListItem(false)
-, mIsHideNumber(hide_number)
-{
-	// should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called.
-	buildFromFile( "panel_avatar_list_item.xml");
-}
-
-BOOL LLAvalineListItem::postBuild()
-{
-	BOOL rv = LLAvatarListItem::postBuild();
-
-	if (rv)
-	{
-		setOnline(true);
-		showTextField(false);
-		setShowProfileBtn(false);
-		setShowInfoBtn(false);
-		mAvatarIcon->setValue("Avaline_Icon");
-		mAvatarIcon->setToolTip(std::string(""));
-	}
-	return rv;
-}
-
-// to work correctly this method should be called AFTER setAvatarId for avaline callers with hidden phone number
-void LLAvalineListItem::setName(const std::string& name)
-{
-	if (mIsHideNumber)
-	{
-		static U32 order = 0;
-		typedef std::map<LLUUID, U32> avaline_callers_nums_t;
-		static avaline_callers_nums_t mAvalineCallersNums;
-
-		llassert(getAvatarId() != LLUUID::null);
-
-		const LLUUID &uuid = getAvatarId();
-
-		if (mAvalineCallersNums.find(uuid) == mAvalineCallersNums.end())
-		{
-			mAvalineCallersNums[uuid] = ++order;
-			LL_DEBUGS("Avaline") << "Set name for new avaline caller: " << uuid << ", order: " << order << LL_ENDL;
-		}
-		LLStringUtil::format_map_t args;
-		args["[ORDER]"] = llformat("%u", mAvalineCallersNums[uuid]);
-		std::string hidden_name = LLTrans::getString("AvalineCaller", args);
-
-		LL_DEBUGS("Avaline") << "Avaline caller: " << uuid << ", name: " << hidden_name << LL_ENDL;
-		LLAvatarListItem::setAvatarName(hidden_name);
-		LLAvatarListItem::setAvatarToolTip(hidden_name);
-	}
-	else
-	{
-		const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name);
-		LLAvatarListItem::setAvatarName(formatted_phone);
-		LLAvatarListItem::setAvatarToolTip(formatted_phone);
-	}
-}
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 8b783dacb7f7651006ad19cd7423168c0ccea28b..dcf3140d99d1d7b270ac31009b966b1dc96c874a 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -110,7 +110,6 @@ class LLAvatarList final : public LLFlatListViewEx
 
 	virtual S32 notifyParent(const LLSD& info);
 
-	void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name);
 	void handleDisplayNamesOptionChanged();
 
 	void setShowCompleteName(bool show) { mShowCompleteName = show;};
@@ -130,9 +129,6 @@ class LLAvatarList final : public LLFlatListViewEx
 //	void updateAvatarNames();
 
 private:
-
-	bool isAvalineItemSelected();
-
 	bool mIgnoreOnlineStatus;
 	bool mShowLastInteractionTime;
 	bool mShowDistance;
@@ -206,27 +202,4 @@ class LLAvatarItemAgentOnTopComparator : public LLAvatarItemNameComparator
 	virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;
 };
 
-/**
- * Represents Avaline caller in Avatar list in Voice Control Panel and group chats.
- */
-class LLAvalineListItem : public LLAvatarListItem
-{
-public:
-
-	/**
-	 * Constructor
-	 *
-	 * @param hide_number - flag indicating if number should be hidden.
-	 *		In this case It will be shown as "Avaline Caller 1", "Avaline Caller 1", etc.
-	 */
-	LLAvalineListItem(bool hide_number = true);
-
-	/*virtual*/ BOOL postBuild();
-
-	/*virtual*/ void setName(const std::string& name);
-
-private:
-	bool mIsHideNumber;
-};
-
 #endif // LL_LLAVATARLIST_H
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index f886a157044fc9b1e0da2dcd2831a7fcd13b45ad..4e487e5c6eb3be3ca8783c18e509b8b625c9b169 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -48,7 +48,7 @@ typedef enum
 	SP_COUNT
 } EShowPermissionType;
 
-class LLAvatarListItem : public LLPanel, public LLFriendObserver
+class LLAvatarListItem final : public LLPanel, public LLFriendObserver
 {
 public:
 	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 2a3ed7da261a9d7bf737cfd5abbb735ca57a246b..9c17cd53a2b48cfa37e2be62d6a7b24da329423d 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -543,7 +543,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
 	mSessionInitialized(false),
 	mCallBackEnabled(true),
 	mTextIMPossible(true),
-	mOtherParticipantIsAvatar(true),
 	mStartCallOnInitialize(false),
 	mStartedAsIMCall(voice),
 	mIsDNDsend(false),
@@ -555,13 +554,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
 	if (IM_NOTHING_SPECIAL == mType || IM_SESSION_P2P_INVITE == mType)
 	{
 		mVoiceChannel  = new LLVoiceChannelP2P(session_id, name, other_participant_id);
-		mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID);
-
-		// check if it was AVALINE call
-		if (!mOtherParticipantIsAvatar)
-		{
-			mSessionType = AVALINE_SESSION;
-		} 
 	}
 	else
 	{
@@ -662,9 +654,6 @@ void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::ES
 
 	switch(mSessionType)
 	{
-	case AVALINE_SESSION:
-		// no text notifications
-		break;
 	case P2P_SESSION:
 		LLAvatarNameCache::get(mOtherParticipantID, &av_name);
 		other_avatar_name = av_name.getUserName();
@@ -924,11 +913,6 @@ bool LLIMModel::LLIMSession::isGroupChat()
 	return IM_SESSION_GROUP_START == mType || (IM_SESSION_INVITE == mType && gAgent.isInGroup(mSessionID));
 }
 
-bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
-{
-	return !mOtherParticipantIsAvatar;
-}
-
 LLUUID LLIMModel::LLIMSession::generateOutgoingAdHocHash() const
 {
 	LLUUID hash = LLUUID::null;
@@ -1811,7 +1795,6 @@ LLIMMgr::onConfirmForceCloseError(
 
 LLCallDialogManager::LLCallDialogManager():
 mPreviousSessionlName(""),
-mPreviousSessionType(LLIMModel::LLIMSession::P2P_SESSION),
 mCurrentSessionlName(""),
 mSession(NULL),
 mOldState(LLVoiceChannel::STATE_READY)
@@ -1842,12 +1825,6 @@ void LLCallDialogManager::onVoiceChannelChangedInt(const LLUUID &session_id)
 		mCurrentSessionlName = ""; // Empty string results in "Nearby Voice Chat" after substitution
 		return;
 	}
-	
-	if (mSession)
-	{
-		// store previous session type to process Avaline calls in dialogs
-		mPreviousSessionType = mSession->mSessionType;
-	}
 
 	mSession = session;
 
@@ -1873,7 +1850,6 @@ void LLCallDialogManager::onVoiceChannelChangedInt(const LLUUID &session_id)
 		mCallDialogPayload["session_name"] = mSession->mName;
 		mCallDialogPayload["other_user_id"] = mSession->mOtherParticipantID;
 		mCallDialogPayload["old_channel_name"] = mPreviousSessionlName;
-		mCallDialogPayload["old_session_type"] = mPreviousSessionType;
 		mCallDialogPayload["state"] = LLVoiceChannel::STATE_CALL_STARTED;
 		mCallDialogPayload["disconnected_channel_name"] = mSession->mName;
 		mCallDialogPayload["session_type"] = mSession->mSessionType;
@@ -1909,7 +1885,6 @@ void LLCallDialogManager::onVoiceChannelStateChangedInt(const LLVoiceChannel::ES
 	mCallDialogPayload["session_name"] = mSession->mName;
 	mCallDialogPayload["other_user_id"] = mSession->mOtherParticipantID;
 	mCallDialogPayload["old_channel_name"] = mPreviousSessionlName;
-	mCallDialogPayload["old_session_type"] = mPreviousSessionType;
 	mCallDialogPayload["state"] = new_state;
 	mCallDialogPayload["disconnected_channel_name"] = mSession->mName;
 	mCallDialogPayload["session_type"] = mSession->mSessionType;
@@ -1926,8 +1901,7 @@ void LLCallDialogManager::onVoiceChannelStateChangedInt(const LLVoiceChannel::ES
 		break;
 
 	case LLVoiceChannel::STATE_HUNG_UP:
-		// this state is coming before session is changed, so, put it into payload map
-		mCallDialogPayload["old_session_type"] = mSession->mSessionType;
+		// this state is coming before session is changed
 		break;
 
 	case LLVoiceChannel::STATE_CONNECTED :
@@ -2051,7 +2025,6 @@ void LLCallDialog::onOpen(const LLSD& key)
 
 void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id)
 {
-	// *NOTE: 12/28/2009: check avaline calls: LLVoiceClient::isParticipantAvatar returns false for them
 	bool participant_is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
 
 	bool is_group = participant_is_avatar && gAgent.isInGroup(session_id);
@@ -2072,8 +2045,8 @@ void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id)
 	}
 	else
 	{
-		avatar_icon->setValue("Avaline_Icon");
-		avatar_icon->setToolTip(std::string(""));
+		LL_WARNS() << "Participant neither avatar nor group" << LL_ENDL;
+		group_icon->setValue(session_id);
 	}
 }
 
@@ -2117,14 +2090,7 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 	// tell the user which voice channel they are leaving
 	if (!mPayload["old_channel_name"].asString().empty())
 	{
-		bool was_avaline_call = LLIMModel::LLIMSession::AVALINE_SESSION == mPayload["old_session_type"].asInteger();
-
 		std::string old_caller_name = mPayload["old_channel_name"].asString();
-		if (was_avaline_call)
-		{
-			old_caller_name = LLTextUtil::formatPhoneNumber(old_caller_name);
-		}
-
 		getChild<LLUICtrl>("leaving")->setTextArg("[CURRENT_CHAT]", old_caller_name);
 		show_oldchannel = true;
 	}
@@ -2136,10 +2102,6 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 	if (!mPayload["disconnected_channel_name"].asString().empty())
 	{
 		std::string channel_name = mPayload["disconnected_channel_name"].asString();
-		if (LLIMModel::LLIMSession::AVALINE_SESSION == mPayload["session_type"].asInteger())
-		{
-			channel_name = LLTextUtil::formatPhoneNumber(channel_name);
-		}
 		getChild<LLUICtrl>("nearby")->setTextArg("[VOICE_CHANNEL_NAME]", channel_name);
 
 		// skipping "You will now be reconnected to nearby" in notification when call is ended by disabling voice,
@@ -2155,16 +2117,11 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 	std::string callee_name = mPayload["session_name"].asString();
 
 	LLUUID session_id = mPayload["session_id"].asUUID();
-	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
 
-	if (callee_name == "anonymous")
+	if (callee_name == "anonymous") // obsolete? Likely was part of avaline support
 	{
 		callee_name = getString("anonymous");
 	}
-	else if (!is_avatar)
-	{
-		callee_name = LLTextUtil::formatPhoneNumber(callee_name);
-	}
 	
 	LLSD callee_id = mPayload["other_user_id"];
 	// Beautification:  Since you know who you called, just show display name
@@ -2364,18 +2321,11 @@ BOOL LLIncomingCallDialog::postBuild()
 		call_type = getString(notify_box_type);
 	}
 
-	// check to see if this is an Avaline call
-	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
-	if (caller_name == "anonymous")
+	if (caller_name == "anonymous") // obsolete? Likely was part of avaline support
 	{
 		caller_name = getString("anonymous");
 		setCallerName(caller_name, caller_name, call_type);
 	}
-	else if (!is_avatar)
-	{
-		caller_name = LLTextUtil::formatPhoneNumber(caller_name);
-		setCallerName(caller_name, caller_name, call_type);
-	}
 	else
 	{
 		// Get the full name information
@@ -2395,7 +2345,7 @@ BOOL LLIncomingCallDialog::postBuild()
 
 	if(notify_box_type != "VoiceInviteGroup" && notify_box_type != "VoiceInviteAdHoc")
 	{
-		// starting notification's timer for P2P and AVALINE invitations
+		// starting notification's timer for P2P invitations
 		mLifetimeTimer.start();
 	}
 	else
@@ -2404,7 +2354,7 @@ BOOL LLIncomingCallDialog::postBuild()
 	}
 
 	//it's not possible to connect to existing Ad-Hoc/Group chat through incoming ad-hoc call
-	//and no IM for avaline
+	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
 	getChildView("Start IM")->setVisible( is_avatar && notify_box_type != "VoiceInviteAdHoc" && notify_box_type != "VoiceInviteGroup");
 
 	setCanDrag(FALSE);
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 177915efacf39e5562a776645c89d23faf7fc63e..bece07b19f996189bb05668888e811b7e7392835 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -73,7 +73,6 @@ class LLIMModel final :  public LLSingleton<LLIMModel>
 			P2P_SESSION,
 			GROUP_SESSION,
 			ADHOC_SESSION,
-			AVALINE_SESSION,
 			NONE_SESSION,
 		} SType;
 
@@ -102,12 +101,10 @@ class LLIMModel final :  public LLSingleton<LLIMModel>
 		bool isAdHoc();
 		bool isP2P();
 		bool isGroupChat();
-		bool isOtherParticipantAvaline();
 
 		bool isP2PSessionType() const { return mSessionType == P2P_SESSION;}
 		bool isAdHocSessionType() const { return mSessionType == ADHOC_SESSION;}
 		bool isGroupSessionType() const { return mSessionType == GROUP_SESSION;}
-		bool isAvalineSessionType() const { return mSessionType == AVALINE_SESSION;}
 
 		LLUUID generateOutgoingAdHocHash() const;
 
@@ -154,7 +151,6 @@ class LLIMModel final :  public LLSingleton<LLIMModel>
 		bool mCallBackEnabled;
 
 		bool mTextIMPossible;
-		bool mOtherParticipantIsAvatar;
 		bool mStartCallOnInitialize;
 
 		//if IM session is created for a voice call
@@ -545,7 +541,6 @@ class LLCallDialogManager final : public LLSingleton<LLCallDialogManager>
 
 protected:
 	std::string mPreviousSessionlName;
-	LLIMModel::LLIMSession::SType mPreviousSessionType;
 	std::string mCurrentSessionlName;
 	LLIMModel::LLIMSession* mSession;
 	LLVoiceChannel::EState mOldState;
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index a0567507b3a0d27634a0070ced6aa7d358eda301..ae89a8dbffae263e407e6434509da66355559bf6 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -35,154 +35,11 @@
 
 //LLParticipantList retrieves add, clear and remove events and updates view accordingly 
 
-// See EXT-4301.
-/**
- * class LLAvalineUpdater - observe the list of voice participants in session and check
- *  presence of Avaline Callers among them.
- *
- * LLAvalineUpdater is a LLVoiceClientParticipantObserver. It provides two kinds of validation:
- *	- whether Avaline caller presence among participants;
- *	- whether watched Avaline caller still exists in voice channel.
- * Both validations have callbacks which will notify subscriber if any of event occur.
- *
- * @see findAvalineCaller()
- * @see checkIfAvalineCallersExist()
- */
-class LLAvalineUpdater : public LLVoiceClientParticipantObserver
-{
-public:
-	typedef boost::function<void(const LLUUID& speaker_id)> process_avaline_callback_t;
-
-	LLAvalineUpdater(process_avaline_callback_t found_cb, process_avaline_callback_t removed_cb)
-		: mAvalineFoundCallback(found_cb)
-		, mAvalineRemovedCallback(removed_cb)
-	{
-		LLVoiceClient::getInstance()->addObserver(this);
-	}
-	~LLAvalineUpdater()
-	{
-		if (LLVoiceClient::instanceExists())
-		{
-			LLVoiceClient::getInstance()->removeObserver(this);
-		}
-	}
-
-	/**
-	 * Adds UUID of Avaline caller to watch.
-	 *
-	 * @see checkIfAvalineCallersExist().
-	 */
-	void watchAvalineCaller(const LLUUID& avaline_caller_id)
-	{
-		mAvalineCallers.insert(avaline_caller_id);
-	}
-
-	void onParticipantsChanged()
-	{
-		uuid_set_t participant_uuids;
-		LLVoiceClient::getInstance()->getParticipantList(participant_uuids);
-
-
-		// check whether Avaline caller exists among voice participants
-		// and notify Participant List
-		findAvalineCaller(participant_uuids);
-
-		// check whether watched Avaline callers still present among voice participant
-		// and remove if absents.
-		checkIfAvalineCallersExist(participant_uuids);
-	}
-
-private:
-	typedef std::set<LLUUID> uuid_set_t;
-
-	/**
-	 * Finds Avaline callers among voice participants and calls mAvalineFoundCallback.
-	 *
-	 * When Avatar is in group call with Avaline caller and then ends call Avaline caller stays
-	 * in Group Chat floater (exists in LLSpeakerMgr). If Avatar starts call with that group again
-	 * Avaline caller is added to voice channel AFTER Avatar is connected to group call.
-	 * But Voice Control Panel (VCP) is filled from session LLSpeakerMgr and there is no information
-	 * if a speaker is Avaline caller.
-	 *
-	 * In this case this speaker is created as avatar and will be recreated when it appears in
-	 * Avatar's Voice session.
-	 *
-	 * @see LLParticipantList::onAvalineCallerFound()
-	 */
-	void findAvalineCaller(const uuid_set_t& participant_uuids)
-	{
-		uuid_set_t::const_iterator it = participant_uuids.begin(), it_end = participant_uuids.end();
-
-		for(; it != it_end; ++it)
-		{
-			const LLUUID& participant_id = *it;
-			if (!LLVoiceClient::getInstance()->isParticipantAvatar(participant_id))
-			{
-				LL_DEBUGS("Avaline") << "Avaline caller found among voice participants: " << participant_id << LL_ENDL;
-
-				if (mAvalineFoundCallback)
-				{
-					mAvalineFoundCallback(participant_id);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Finds Avaline callers which are not anymore among voice participants and calls mAvalineRemovedCallback.
-	 *
-	 * The problem is when Avaline caller ends a call it is removed from Voice Client session but
-	 * still exists in LLSpeakerMgr. Server does not send such information.
-	 * This method implements a HUCK to notify subscribers that watched Avaline callers by class
-	 * are not anymore in the call.
-	 *
-	 * @see LLParticipantList::onAvalineCallerRemoved()
-	 */
-	void checkIfAvalineCallersExist(const uuid_set_t& participant_uuids)
-	{
-		uuid_set_t::iterator it = mAvalineCallers.begin();
-		uuid_set_t::const_iterator participants_it_end = participant_uuids.end();
-
-		while (it != mAvalineCallers.end())
-		{
-			const LLUUID participant_id = *it;
-			LL_DEBUGS("Avaline") << "Check avaline caller: " << participant_id << LL_ENDL;
-			bool not_found = participant_uuids.find(participant_id) == participants_it_end;
-			if (not_found)
-			{
-				LL_DEBUGS("Avaline") << "Watched Avaline caller is not found among voice participants: " << participant_id << LL_ENDL;
-
-				// notify Participant List
-				if (mAvalineRemovedCallback)
-				{
-					mAvalineRemovedCallback(participant_id);
-				}
-
-				// remove from the watch list
-				mAvalineCallers.erase(it++);
-			}
-			else
-			{
-				++it;
-			}
-		}
-	}
-
-	process_avaline_callback_t mAvalineFoundCallback;
-	process_avaline_callback_t mAvalineRemovedCallback;
-
-	uuid_set_t mAvalineCallers;
-};
-
 LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLFolderViewModelInterface& root_view_model) :
 	LLConversationItemSession(data_source->getSessionID(), root_view_model),
 	mSpeakerMgr(data_source),
 	mValidateSpeakerCallback(NULL)
 {
-
-	mAvalineUpdater = new LLAvalineUpdater(boost::bind(&LLParticipantList::onAvalineCallerFound, this, _1),
-										   boost::bind(&LLParticipantList::onAvalineCallerRemoved, this, _1));
-
 	mSpeakerAddListener = new SpeakerAddListener(*this);
 	mSpeakerRemoveListener = new SpeakerRemoveListener(*this);
 	mSpeakerClearListener = new SpeakerClearListener(*this);
@@ -240,32 +97,6 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLFolderViewMode
 
 LLParticipantList::~LLParticipantList()
 {
-	delete mAvalineUpdater;
-}
-
-/*
-  Seems this method is not necessary after onAvalineCallerRemoved was implemented;
-
-  It does nothing because list item is always created with correct class type for Avaline caller.
-  For now Avaline Caller is removed from the LLSpeakerMgr List when it is removed from the Voice Client
-  session.
-  This happens in two cases: if Avaline Caller ends call itself or if Resident ends group call.
-
-  Probably Avaline caller should be removed from the LLSpeakerMgr list ONLY if it ends call itself.
-  Asked in EXT-4301.
-*/
-void LLParticipantList::onAvalineCallerFound(const LLUUID& participant_id)
-{
-	removeParticipant(participant_id);
-	// re-add avaline caller with a correct class instance.
-	addAvatarIDExceptAgent(participant_id);
-}
-
-void LLParticipantList::onAvalineCallerRemoved(const LLUUID& participant_id)
-{
-	LL_DEBUGS("Avaline") << "Removing avaline caller from the list: " << participant_id << LL_ENDL;
-
-	mSpeakerMgr->removeAvalineSpeaker(participant_id);
 }
 
 void LLParticipantList::setValidateSpeakerCallback(validate_speaker_callback_t cb)
@@ -383,7 +214,6 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id)
 		std::string display_name = LLVoiceClient::getInstance()->getDisplayName(avatar_id);
 		// Create a participant view model instance
 		participant = new LLConversationItemParticipant(display_name.empty() ? LLTrans::getString("AvatarNameWaiting") : display_name, avatar_id, mRootViewModel);
-		mAvalineUpdater->watchAvalineCaller(avatar_id);
 	}
 
 	// *TODO : Need to update the online/offline status of the participant
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 3a3ae76604a9c17bc8d0df5629b082bf66f686e9..f58a593d4f5824a5583559002db426abda63bf35 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -32,7 +32,6 @@
 
 class LLSpeakerMgr;
 class LLUICtrl;
-class LLAvalineUpdater;
 
 class LLParticipantList : public LLConversationItemSession
 {
@@ -133,9 +132,6 @@ class LLParticipantList : public LLConversationItemSession
 	};
 
 private:
-	void onAvalineCallerFound(const LLUUID& participant_id);
-	void onAvalineCallerRemoved(const LLUUID& participant_id);
-
 	/**
 	 * Adjusts passed participant to work properly.
 	 *
@@ -156,7 +152,6 @@ class LLParticipantList : public LLConversationItemSession
 	LLPointer<SpeakerMuteListener>				mSpeakerMuteListener;
 
 	validate_speaker_callback_t mValidateSpeakerCallback;
-	LLAvalineUpdater* mAvalineUpdater;
 };
 
 #endif // LL_PARTICIPANTLIST_H
diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp
index 83b0c4f1bf29b81484484906418170209341d30b..0faf6bf88960de264a45737869b528672d629c64 100644
--- a/indra/newview/llrecentpeople.cpp
+++ b/indra/newview/llrecentpeople.cpp
@@ -42,14 +42,6 @@ bool LLRecentPeople::add(const LLUUID& id, const LLSD& userdata)
 
 	if (is_not_group_id)
 	{
-		// For each avaline call the id of caller is different even if
-		// the phone number is the same.
-		// To avoid duplication of avaline list items in the recent list
-		// of panel People, deleting id's with similar phone number.
-		const LLUUID& caller_id = getIDByPhoneNumber(userdata);
-		if (caller_id.notNull())
-			mPeople.erase(caller_id);
-
 		//[] instead of insert to replace existing id->llsd["date"] with new date value
 		mPeople[id] = userdata;
 		mChangedSignal();
@@ -90,35 +82,6 @@ const LLSD& LLRecentPeople::getData(const LLUUID& id) const
 	return no_data;
 }
 
-bool LLRecentPeople::isAvalineCaller(const LLUUID& id) const
-{
-	recent_people_t::const_iterator it = mPeople.find(id);
-
-	if (it != mPeople.end())
-	{
-		const LLSD& user = it->second;		
-		return user["avaline_call"].asBoolean();
-	}
-
-	return false;
-}
-
-const LLUUID& LLRecentPeople::getIDByPhoneNumber(const LLSD& userdata)
-{
-	if (!userdata["avaline_call"].asBoolean())
-		return LLUUID::null;
-
-	for (recent_people_t::const_iterator it = mPeople.begin(); it != mPeople.end(); ++it)
-	{
-		const LLSD& user_info = it->second;
-		
-		if (user_info["call_number"].asString() == userdata["call_number"].asString())
-			return it->first;
-	}
-	
-	return LLUUID::null;
-}
-
 // virtual
 bool LLRecentPeople::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
 {
diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h
index 5bfbe983a4ac88e42661244d90d2c6718a5c69b9..31c1c53f99f04e2c549b23ef0404e585dd26e4e2 100644
--- a/indra/newview/llrecentpeople.h
+++ b/indra/newview/llrecentpeople.h
@@ -62,9 +62,7 @@ class LLRecentPeople final : public LLSingleton<LLRecentPeople>, public LLOldEve
 	 * @param id avatar to add.
 	 *
 	 * @param userdata additional information about last interaction party.
-	 *				   For example when last interaction party is not an avatar
-	 *				   but an avaline caller, additional info (such as phone
-	 *				   number, session id and etc.) should be added.
+	 *				   For example a session id can be added.
 	 *
 	 * @return false if the avatar is in the list already, true otherwise
 	 */
@@ -96,13 +94,6 @@ class LLRecentPeople final : public LLSingleton<LLRecentPeople>, public LLOldEve
 	 */
 	const LLSD& getData(const LLUUID& id) const;
 
-	/**
-	 * Checks whether specific participant is an avaline caller
-	 *
-	 * @param id identifier of specific participant
-	 */
-	bool isAvalineCaller(const LLUUID& id) const;
-
 	/**
 	 * Set callback to be called when the list changed.
 	 * 
@@ -121,9 +112,6 @@ class LLRecentPeople final : public LLSingleton<LLRecentPeople>, public LLOldEve
 	F32 getArrivalTimeByID(const LLUUID& id);
 
 private:
-
-	const LLUUID& getIDByPhoneNumber(const LLSD& userdata);
-
 	typedef std::map<LLUUID, LLSD> recent_people_t;
 	recent_people_t		mPeople;
 	signal_t			mChangedSignal;
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index 65a7cc8860a05f3b2d04efc9f3535cb6039123ce..db8ff71e43729bb09f0cab3a23bf39fdb320bb0a 100644
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -244,14 +244,6 @@ class LLSpeakerMgr : public LLOldEvents::LLObservable
 	const LLUUID getSessionID();
 	bool isSpeakerToBeRemoved(const LLUUID& speaker_id);
 
-	/**
-	 * Removes avaline speaker.
-	 *
-	 * This is a HACK due to server does not send information that Avaline caller ends call.
-	 * It can be removed when server is updated. See EXT-4301 for details
-	 */
-	bool removeAvalineSpeaker(const LLUUID& speaker_id) { return removeSpeaker(speaker_id); }
-
 	/**
 	 * Initializes mVoiceModerated depend on LLSpeaker::mModeratorMutedVoice of agent's participant.
 	 *
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 74683a396e9d7d58fe66377658fa5922d83aac38..c8bcb8518e0e4869e115d2b124126fb0e566b78d 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -772,8 +772,6 @@ LLVoiceChannelP2P::LLVoiceChannelP2P(const LLUUID& session_id, const std::string
 		mReceivedCall(FALSE)
 {
 	// make sure URI reflects encoded version of other user's agent id
-	// *NOTE: in case of Avaline call generated SIP URL will be incorrect.
-	// But it will be overridden in LLVoiceChannelP2P::setSessionHandle() called when agent accepts call
 	setURI(LLVoiceClient::getInstance()->sipURIFromID(other_user_id));
 }
 
@@ -913,8 +911,6 @@ void LLVoiceChannelP2P::setSessionHandle(const std::string& handle, const std::s
 	else
 	{
 		LL_WARNS("Voice") << "incoming SIP URL is not provided. Channel may not work properly." << LL_ENDL;
-		// In the case of an incoming AvaLine call, the generated URI will be different from the
-		// original one. This is because the P2P URI is based on avatar UUID but Avaline is not.
 		// See LLVoiceClient::sessionAddedEvent()
 		setURI(LLVoiceClient::getInstance()->sipURIFromID(mOtherUserID));
 	}
@@ -949,22 +945,5 @@ void LLVoiceChannelP2P::setState(EState state)
 
 void LLVoiceChannelP2P::addToTheRecentPeopleList()
 {
-	bool avaline_call = LLIMModel::getInstance()->findIMSession(mSessionID)->isAvalineSessionType();
-	
-	if (avaline_call)
-	{
-		LLSD call_data;
-		std::string call_number = LLVoiceChannel::getSessionName();
-		
-		call_data["avaline_call"]	= true;
-		call_data["session_id"]		= mSessionID;
-		call_data["call_number"]	= call_number;
-		call_data["date"]			= LLDate::now();
-		
-		LLRecentPeople::instanceFast().add(mOtherUserID, call_data);
-	}
-	else
-	{
-		LLRecentPeople::instanceFast().add(mOtherUserID);
-	}
+	LLRecentPeople::instanceFast().add(mOtherUserID);
 }