diff --git a/src/com/android/phone/CallModeler.java b/src/com/android/phone/CallModeler.java
index a5e2044..94584a2 100644
--- a/src/com/android/phone/CallModeler.java
+++ b/src/com/android/phone/CallModeler.java
@@ -175,15 +175,17 @@
         return false;
     }
 
-    public boolean hasOutstandingActiveCall() {
-        return hasOutstandingActiveCallInternal(mCallMap) ||
-                hasOutstandingActiveCallInternal(mConfCallMap);
+    public boolean hasOutstandingActiveOrDialingCall() {
+        return hasOutstandingActiveOrDialingCallInternal(mCallMap) ||
+                hasOutstandingActiveOrDialingCallInternal(mConfCallMap);
     }
 
-    private static boolean hasOutstandingActiveCallInternal(HashMap<Connection, Call> map) {
+    private static boolean hasOutstandingActiveOrDialingCallInternal(
+            HashMap<Connection, Call> map) {
         for (Call call : map.values()) {
             final int state = call.getState();
-            if (Call.State.ACTIVE == state) {
+            if (state == Call.State.ACTIVE ||
+                    state == Call.State.DIALING) {
                 return true;
             }
         }
@@ -192,6 +194,7 @@
     }
 
     private void onNewRingingConnection(AsyncResult r) {
+        Log.i(TAG, "onNewRingingConnection");
         final Connection conn = (Connection) r.result;
         final Call call = getCallFromMap(mCallMap, conn, true);
 
@@ -207,6 +210,7 @@
     }
 
     private void onDisconnect(AsyncResult r) {
+        Log.i(TAG, "onDisconnect");
         final Connection conn = (Connection) r.result;
         final Call call = getCallFromMap(mCallMap, conn, false);
 
@@ -237,6 +241,7 @@
      * Called when the phone state changes.
      */
     private void onPhoneStateChanged(AsyncResult r) {
+        Log.i(TAG, "onPhoneStateChanged: ");
         final List<Call> updatedCalls = Lists.newArrayList();
         doUpdate(false, updatedCalls);
 
@@ -267,6 +272,8 @@
                 final Call call = getCallFromMap(mCallMap, connection, true);
 
                 boolean changed = updateCallFromConnection(call, connection, false);
+
+                Log.i(TAG, "doUpdate: " + call);
                 if (fullUpdate || changed) {
                     out.add(call);
                 }
diff --git a/src/com/android/phone/DTMFTonePlayer.java b/src/com/android/phone/DTMFTonePlayer.java
index 0e27a99..87c071a 100644
--- a/src/com/android/phone/DTMFTonePlayer.java
+++ b/src/com/android/phone/DTMFTonePlayer.java
@@ -327,7 +327,11 @@
         final int len = calls.size();
 
         for (int i = 0; i < len; i++) {
-            hasActiveCall |= (calls.get(i).getState() == Call.State.ACTIVE);
+            // We can also dial while in DIALING state because there are
+            // some connections that never update to an ACTIVE state (no
+            // indication from the network).
+            hasActiveCall |= (calls.get(i).getState() == Call.State.ACTIVE)
+                    || (calls.get(i).getState() == Call.State.DIALING);
             hasIncomingCall |= (calls.get(i).getState() == Call.State.INCOMING);
         }
 
@@ -365,7 +369,7 @@
      */
     private void checkCallState() {
         logD("checkCallState");
-        if (mCallModeler.hasOutstandingActiveCall()) {
+        if (mCallModeler.hasOutstandingActiveOrDialingCall()) {
             startDialerSession();
         } else {
             stopDialerSession();
