diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index 2959fc0..a7e4518 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -626,18 +626,21 @@
     }
 
     /**
-     * Initiates a Virtual Voice Call to the handsfree device (if connected).
-     * Allows the handsfree device to be used for routing non-cellular call audio
+     * Initiates a SCO channel connection with the headset (if connected).
+     * Also initiates a virtual voice call for Handsfree devices as many devices
+     * do not accept SCO audio without a call.
+     * This API allows the handsfree device to be used for routing non-cellular
+     * call audio.
      *
      * @param device Remote Bluetooth Device
      * @return true if successful, false if there was some error.
      * @hide
      */
-    public boolean startVirtualVoiceCall(BluetoothDevice device) {
-        if (DBG) log("startVirtualVoiceCall()");
+    public boolean startScoUsingVirtualVoiceCall(BluetoothDevice device) {
+        if (DBG) log("startScoUsingVirtualVoiceCall()");
         if (mService != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.startVirtualVoiceCall(device);
+                return mService.startScoUsingVirtualVoiceCall(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
@@ -649,17 +652,18 @@
     }
 
     /**
-     * Terminates an ongoing Virtual Voice Call to the handsfree device (if connected).
+     * Terminates an ongoing SCO connection and the associated virtual
+     * call.
      *
      * @param device Remote Bluetooth Device
      * @return true if successful, false if there was some error.
      * @hide
      */
-    public boolean stopVirtualVoiceCall(BluetoothDevice device) {
-        if (DBG) log("stopVirtualVoiceCall()");
+    public boolean stopScoUsingVirtualVoiceCall(BluetoothDevice device) {
+        if (DBG) log("stopScoUsingVirtualVoiceCall()");
         if (mService != null && isEnabled() && isValidDevice(device)) {
             try {
-                return mService.stopVirtualVoiceCall(device);
+                return mService.stopScoUsingVirtualVoiceCall(device);
             } catch (RemoteException e) {
                 Log.e(TAG, e.toString());
             }
diff --git a/core/java/android/bluetooth/IBluetoothHeadset.aidl b/core/java/android/bluetooth/IBluetoothHeadset.aidl
index 3c6cf77..41f63b2 100644
--- a/core/java/android/bluetooth/IBluetoothHeadset.aidl
+++ b/core/java/android/bluetooth/IBluetoothHeadset.aidl
@@ -48,8 +48,8 @@
     boolean setAudioState(in BluetoothDevice device, int state);
     int getAudioState(in BluetoothDevice device);
 
-    boolean startVirtualVoiceCall(in BluetoothDevice device);
-    boolean stopVirtualVoiceCall(in BluetoothDevice device);
+    boolean startScoUsingVirtualVoiceCall(in BluetoothDevice device);
+    boolean stopScoUsingVirtualVoiceCall(in BluetoothDevice device);
 
     void sendAtCommand(in BluetoothDevice device, String urc);
 }
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index e404b05..7312d75 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -721,7 +721,7 @@
                                         if (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL) {
                                             mBluetoothHeadset.stopVoiceRecognition(
                                                     mBluetoothHeadsetDevice);
-                                            mBluetoothHeadset.stopVirtualVoiceCall(
+                                            mBluetoothHeadset.stopScoUsingVirtualVoiceCall(
                                                     mBluetoothHeadsetDevice);
                                         } else {
                                             clearAllScoClients(mCb, true);
@@ -808,7 +808,8 @@
                             checkScoAudioState();
                             if (mScoAudioState == SCO_STATE_ACTIVE_EXTERNAL) {
                                 mBluetoothHeadset.stopVoiceRecognition(mBluetoothHeadsetDevice);
-                                mBluetoothHeadset.stopVirtualVoiceCall(mBluetoothHeadsetDevice);
+                                mBluetoothHeadset.stopScoUsingVirtualVoiceCall(
+                                    mBluetoothHeadsetDevice);
                             } else {
                                 clearAllScoClients(cb, true);
                             }
@@ -1296,10 +1297,10 @@
                         state == BluetoothHeadset.STATE_AUDIO_CONNECTED &&
                         mScoAudioState == SCO_STATE_INACTIVE) {
                     mScoAudioState = SCO_STATE_ACTIVE_INTERNAL;
-                    mBluetoothHeadset.startVirtualVoiceCall(mBluetoothHeadsetDevice);
+                    mBluetoothHeadset.startScoUsingVirtualVoiceCall(mBluetoothHeadsetDevice);
                 } else if (state == BluetoothHeadset.STATE_AUDIO_DISCONNECTED &&
                         mScoAudioState == SCO_STATE_ACTIVE_INTERNAL){
-                    mBluetoothHeadset.stopVirtualVoiceCall(mBluetoothHeadsetDevice);
+                    mBluetoothHeadset.stopScoUsingVirtualVoiceCall(mBluetoothHeadsetDevice);
                 }
             }
         }
