diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index e41f331..dd126df 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -311,20 +311,30 @@
         call.addListener(this);
         addCall(call);
 
-        if (TelephonyUtil.shouldProcessAsEmergency(TelecommApp.getInstance(), call.getHandle())) {
+        // This block of code will attempt to pre-determine a phone account
+        final boolean emergencyCall = TelephonyUtil.shouldProcessAsEmergency(
+                TelecommApp.getInstance(), call.getHandle());
+        if (emergencyCall) {
             // Emergency -- CreateConnectionProcessor will choose accounts automatically
             call.setPhoneAccount(null);
-            call.startCreateConnection();
-        } else if (accountHandle == null) {
+        } else if (accountHandle != null) {
+            call.setPhoneAccount(accountHandle);
+        } else {
+            // No preset account, check if default exists
             PhoneAccountHandle defaultAccountHandle = TelecommApp.getInstance()
                     .getPhoneAccountRegistrar().getDefaultOutgoingPhoneAccount();
             if (defaultAccountHandle != null) {
                 call.setPhoneAccount(defaultAccountHandle);
-                call.startCreateConnection();
-            } else {
-                call.setState(CallState.PRE_DIAL_WAIT);
             }
         }
+
+        if (call.getPhoneAccount() != null || emergencyCall) {
+            // If the account is selected, proceed to place the outgoing call
+            call.startCreateConnection();
+        } else {
+            // This is the state where the user is expected to select an account
+            call.setState(CallState.PRE_DIAL_WAIT);
+        }
     }
 
     /**
diff --git a/src/com/android/telecomm/ConnectionServiceWrapper.java b/src/com/android/telecomm/ConnectionServiceWrapper.java
index eca7e09..946ecb0 100644
--- a/src/com/android/telecomm/ConnectionServiceWrapper.java
+++ b/src/com/android/telecomm/ConnectionServiceWrapper.java
@@ -311,6 +311,7 @@
                     if (call != null) {
                         call.setVideoState(msg.arg1);
                     }
+                    break;
                 }
                 case MSG_START_ACTIVITY_FROM_IN_CALL: {
                     SomeArgs args = (SomeArgs) msg.obj;
diff --git a/src/com/android/telecomm/PhoneAccountPreferencesActivity.java b/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
index ae01497..e4c62e7 100644
--- a/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
+++ b/src/com/android/telecomm/PhoneAccountPreferencesActivity.java
@@ -61,10 +61,10 @@
             int selectedIndex = accountHandles.size();  // Points to "ask every time" by default
             int i = 0;
             for ( ; i < accountHandles.size(); i++) {
-                entryValues[i] = Integer.toString(i);
-                entries[i] = mRegistrar
-                        .getPhoneAccount(accountHandles.get(i))
+                CharSequence label = mRegistrar.getPhoneAccount(accountHandles.get(i))
                         .getLabel();
+                entries[i] = label == null ? null : label.toString();
+                entryValues[i] = Integer.toString(i);
                 if (Objects.equals(currentDefault, accountHandles.get(i))) {
                     selectedIndex = i;
                 }
diff --git a/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java b/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
index ccceedf..195bf6d 100644
--- a/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
+++ b/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.media.MediaPlayer;
-import android.os.RemoteException;
 import android.telecomm.CallCameraCapabilities;
 import android.telecomm.CallVideoClient;
 import android.telecomm.CallVideoProvider;
@@ -123,10 +122,7 @@
             mCapabilities = new CallCameraCapabilities(true /* zoomSupported */, value);
         }
 
-        try {
-            mCallVideoClient.handleCameraCapabilitiesChange(mCapabilities);
-        } catch (RemoteException ignored) {
-        }
+        mCallVideoClient.handleCameraCapabilitiesChange(mCapabilities);
     }
 
     /**
@@ -139,13 +135,10 @@
 
         VideoCallProfile responseProfile = new VideoCallProfile(
                 requestProfile.getVideoState(), requestProfile.getQuality());
-        try {
-            mCallVideoClient.receiveSessionModifyResponse(
-                    CallVideoClient.SESSION_MODIFY_REQUEST_SUCCESS,
-                    requestProfile,
-                    responseProfile);
-        } catch (RemoteException ignored) {
-        }
+        mCallVideoClient.receiveSessionModifyResponse(
+                CallVideoClient.SESSION_MODIFY_REQUEST_SUCCESS,
+                requestProfile,
+                responseProfile);
     }
 
     @Override
@@ -159,10 +152,7 @@
     @Override
     public void onRequestCameraCapabilities() {
         log("Requested camera capabilities");
-        try {
-            mCallVideoClient.handleCameraCapabilitiesChange(mCapabilities);
-        } catch (RemoteException ignored) {
-        }
+        mCallVideoClient.handleCameraCapabilitiesChange(mCapabilities);
     }
 
     /**
@@ -172,10 +162,7 @@
     public void onRequestCallDataUsage() {
         log("Requested call data usage");
         int dataUsageKb = (10 *1024) + random.nextInt(50 * 1024);
-        try {
-            mCallVideoClient.updateCallDataUsage(dataUsageKb);
-        } catch (RemoteException ignored) {
-        }
+        mCallVideoClient.updateCallDataUsage(dataUsageKb);
     }
 
     /**
