diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 3fc37aa3d5015752f0169ac717befda1468bf34f..dae4296a82ede79c202988180741751ed0bf5e9c 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -185,6 +185,38 @@ void LLAvatarActions::startIM(const LLUUID& id)
 	make_ui_sound("UISndStartIM");
 }
 
+// static
+void LLAvatarActions::startCall(const LLUUID& id)
+{
+	if (id.isNull() || isCalling(id))
+	{
+		return;
+	}
+
+	std::string name;
+	gCacheName->getFullName(id, name);
+	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	if (session_id != LLUUID::null)
+	{
+		// always open IM window when connecting to voice
+		LLIMFloater::show(session_id);
+		gIMMgr->startCall(session_id);
+	}
+	make_ui_sound("UISndStartIM");
+}
+
+// static
+bool LLAvatarActions::isCalling(const LLUUID &id)
+{
+	if (id.isNull())
+	{
+		return false;
+	}
+
+	LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id);
+	return (LLIMModel::getInstance()->findIMSession(session_id) != NULL);
+}
+
 // static
 void LLAvatarActions::startConference(const std::vector<LLUUID>& ids)
 {
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 512f673b432acc8356296b7949d3734508e395af..0ec20ae3572477764a2ffed0c9e881682b9cbb83 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -66,6 +66,11 @@ class LLAvatarActions
 	 */
 	static void startIM(const LLUUID& id);
 
+	/**
+	 * Start an avatar-to-avatar voice call with another user
+	 */
+	static void startCall(const LLUUID& id);
+
 	/**
 	 * Start conference chat with the given avatars.
 	 */
@@ -96,6 +101,11 @@ class LLAvatarActions
 	 */
 	static bool isBlocked(const LLUUID& id);
 
+	/**
+	 * Return true if the avatar is in a P2P voice call with a given user
+	 */
+	static bool isCalling(const LLUUID &id);
+
 	/**
 	 * Invite avatar to a group.
 	 */	
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 4d4ad1c0221856e1450c167c8e594bee6e1b0577..cb1be5fabc913a7b433ae8a2f32ce6c6d41cc26e 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6252,25 +6252,20 @@ class LLAvatarSendIM : public view_listener_t
 		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
 		if(avatar)
 		{
-			std::string name("IM");
-			LLNameValue *first = avatar->getNVPair("FirstName");
-			LLNameValue *last = avatar->getNVPair("LastName");
-			if (first && last)
-			{
-				name.assign( first->getString() );
-				name.append(" ");
-				name.append( last->getString() );
-			}
+			LLAvatarActions::startIM(avatar->getID());
+		}
+		return true;
+	}
+};
 
-			//EInstantMessage type = have_agent_callingcard(gLastHitObjectID)
-			//	? IM_SESSION_ADD : IM_SESSION_CARDLESS_START;
-			LLUUID session_id = gIMMgr->addSession(name,
-								IM_NOTHING_SPECIAL,
-								avatar->getID());
-			if (session_id != LLUUID::null)
-			{
-				LLIMFloater::show(session_id);
-			}
+class LLAvatarCall : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
+		if(avatar)
+		{
+			LLAvatarActions::startCall(avatar->getID());
 		}
 		return true;
 	}
@@ -7941,6 +7936,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
 	commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
 	view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
+	view_listener_t::addMenu(new LLAvatarCall(), "Avatar.Call");
 	view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
 	
 	view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index a0055383b1ce91f73d95aafb011138da8fa6eae4..0f5e96416df6616f9cfa1cd98ecabcae1d417aca 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -294,7 +294,6 @@
          left_pad="5"
          width="45" />
         <button
-         enabled="false"
          follows="bottom|left"
          height="19"
          label="Call"