diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java
index e8370b8..8cea32a 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneBase.java
@@ -30,6 +30,7 @@
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.Rlog;
+import android.util.Pair;
 
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
@@ -102,14 +103,24 @@
         mOnHoldRegistrants.remove(h);
     }
 
-    protected void startOnHoldTone() {
-        AsyncResult result = new AsyncResult(null, Boolean.TRUE, null);
-        mOnHoldRegistrants.notifyRegistrants(result);
+    /**
+     * Signals all registrants that the remote hold tone should be started for a connection.
+     *
+     * @param cn The connection.
+     */
+    protected void startOnHoldTone(Connection cn) {
+        Pair<Connection, Boolean> result = new Pair<Connection, Boolean>(cn, Boolean.TRUE);
+        mOnHoldRegistrants.notifyRegistrants(new AsyncResult(null, result, null));
     }
 
-    protected void stopOnHoldTone() {
-        AsyncResult result = new AsyncResult(null, Boolean.FALSE, null);
-        mOnHoldRegistrants.notifyRegistrants(result);
+    /**
+     * Signals all registrants that the remote hold tone should be stopped for a connection.
+     *
+     * @param cn The connection.
+     */
+    protected void stopOnHoldTone(Connection cn) {
+        Pair<Connection, Boolean> result = new Pair<Connection, Boolean>(cn, Boolean.FALSE);
+        mOnHoldRegistrants.notifyRegistrants(new AsyncResult(null, result, null));
     }
 
     @Override
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 29f1926..70d228f 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -184,6 +184,7 @@
 
     private boolean mDesiredMute = false;    // false = mute off
     private boolean mOnHoldToneStarted = false;
+    private int mOnHoldToneId = -1;
 
     PhoneConstants.State mState = PhoneConstants.State.IDLE;
 
@@ -1163,6 +1164,13 @@
             ImsPhoneConnection conn = findConnection(imsCall);
             if (DBG) log("cause = " + cause + " conn = " + conn);
 
+            if (mOnHoldToneId == System.identityHashCode(conn)) {
+                if (conn != null && mOnHoldToneStarted) {
+                    mPhone.stopOnHoldTone(conn);
+                }
+                mOnHoldToneStarted = false;
+                mOnHoldToneId = -1;
+            }
             if (conn != null && conn.isIncoming() && conn.getConnectTime() == 0) {
                 // Missed
                 if (cause == DisconnectCause.NORMAL) {
@@ -1297,9 +1305,9 @@
         @Override
         public void onCallResumeReceived(ImsCall imsCall) {
             if (DBG) log("onCallResumeReceived");
-
-            if (mOnHoldToneStarted) {
-                mPhone.stopOnHoldTone();
+            ImsPhoneConnection conn = findConnection(imsCall);
+            if (conn != null && mOnHoldToneStarted) {
+                mPhone.stopOnHoldTone(conn);
                 mOnHoldToneStarted = false;
             }
 
@@ -1318,8 +1326,9 @@
             ImsPhoneConnection conn = findConnection(imsCall);
             if (conn != null && conn.getState() == ImsPhoneCall.State.ACTIVE) {
                 if (!mOnHoldToneStarted && ImsPhoneCall.isLocalTone(imsCall)) {
-                    mPhone.startOnHoldTone();
+                    mPhone.startOnHoldTone(conn);
                     mOnHoldToneStarted = true;
+                    mOnHoldToneId = System.identityHashCode(conn);
                 }
             }
 
