diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 21dad0c..e6c5bce 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -244,7 +244,7 @@
 
         // There are cases where we totally skip the animation, in which case remove the transition
         // animation here and restore it afterwards.
-        final boolean skipAnimation = (state == Call.State.DIALING
+        final boolean skipAnimation = (Call.State.isDialing(state)
                 || state == Call.State.DISCONNECTED || state == Call.State.DISCONNECTING);
         LayoutTransition transition = null;
         if (skipAnimation) {
@@ -370,10 +370,10 @@
 
         } else if (Call.State.ONHOLD == state) {
             callStateLabel = context.getString(R.string.card_title_on_hold);
-
         } else if (Call.State.DIALING == state) {
             callStateLabel = context.getString(R.string.card_title_dialing);
-
+        } else if (Call.State.REDIALING == state) {
+            callStateLabel = context.getString(R.string.card_title_redialing);
         } else if (Call.State.INCOMING == state || Call.State.CALL_WAITING == state) {
             callStateLabel = context.getString(R.string.card_title_incoming_call);
 
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index af7ee1b..4ff4d65 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -421,7 +421,7 @@
         if (mPrimary == null) {
             return false;
         }
-        return (mPrimary.getState() == Call.State.DIALING &&
+        return (Call.State.isDialing(mPrimary.getState()) &&
                 !TextUtils.isEmpty(mPrimary.getGatewayNumber()) &&
                 !TextUtils.isEmpty(mPrimary.getGatewayPackage()));
     }
diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java
index 21f86f7..53288de 100644
--- a/InCallUI/src/com/android/incallui/CallList.java
+++ b/InCallUI/src/com/android/incallui/CallList.java
@@ -187,7 +187,11 @@
     }
 
     public Call getOutgoingCall() {
-        return getFirstCallWithState(Call.State.DIALING);
+        Call call = getFirstCallWithState(Call.State.DIALING);
+        if (call == null) {
+            call = getFirstCallWithState(Call.State.REDIALING);
+        }
+        return call;
     }
 
     public Call getActiveCall() {
@@ -231,7 +235,7 @@
         // TODO: should we switch to a simple list and pull the first one?
         Call result = getIncomingCall();
         if (result == null) {
-            result = getFirstCallWithState(Call.State.DIALING);
+            result = getOutgoingCall();
         }
         if (result == null) {
             result = getFirstCallWithState(Call.State.ACTIVE);
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 4f687a8..47fe911 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -488,7 +488,7 @@
             Log.i(this, "Start Full Screen in call UI");
             mStatusBarNotifier.updateNotificationAndLaunchIncomingCallUi(newState, mCallList);
         } else if (newState == InCallState.NO_CALLS) {
-            Log.i(this, "Hide in call UI");
+            Log.e(this, "Hide in call UI", new Exception());
 
             // The new state is the no calls state.  Tear everything down.
             if (mInCallActivity != null) {
diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
index b2593f9..89d0744 100644
--- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java
+++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
@@ -205,7 +205,7 @@
         // back. However, it can happen much later. Before we continue, we need to make sure that
         // the call being passed in is still the one we want to show in the notification.
         final Call call = getCallToShow(CallList.getInstance());
-        if (call.getCallId() != originalCall.getCallId()) {
+        if (call == null || call.getCallId() != originalCall.getCallId()) {
             return;
         }
 
@@ -251,8 +251,8 @@
 
         // Add hang up option for any active calls (active | onhold), outgoing calls (dialing).
         if (state == Call.State.ACTIVE ||
-                state == Call.State.DIALING ||
-                state == Call.State.ONHOLD) {
+                state == Call.State.ONHOLD ||
+                Call.State.isDialing(state)) {
             addHangupAction(builder);
         }
 
@@ -370,7 +370,7 @@
         } else if (call.getState() == Call.State.ONHOLD) {
             resId = R.string.notification_on_hold;
 
-        } else if (call.getState() == Call.State.DIALING) {
+        } else if (Call.State.isDialing(call.getState())) {
             resId = R.string.notification_dialing;
         }
 
