diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index b830499..5dfba52 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -431,6 +431,10 @@
         return mPhoneAccount;
     }
 
+    void setPhoneAccount(PhoneAccount account) {
+        mPhoneAccount = account;
+    }
+
     boolean isIncoming() {
         return mIsIncoming;
     }
@@ -641,7 +645,7 @@
      * Attempts to disconnect the call through the connection service.
      */
     void disconnect() {
-        if (mState == CallState.NEW) {
+        if (mState == CallState.NEW || mState == CallState.PRE_DIAL_WAIT) {
             Log.v(this, "Aborting call %s", this);
             abort();
         } else if (mState != CallState.ABORTED && mState != CallState.DISCONNECTED) {
@@ -658,6 +662,8 @@
     void abort() {
         if (mCreateConnectionProcessor != null) {
             mCreateConnectionProcessor.abort();
+        } else if (mState == CallState.PRE_DIAL_WAIT) {
+            handleCreateConnectionFailed(DisconnectCause.LOCAL, null);
         }
     }
 
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 36f8cea..8265b20 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -62,6 +62,9 @@
 
     private static final CallsManager INSTANCE = new CallsManager();
 
+    /** Temporary flag for disabling account selection menu */
+    public static final boolean ENABLE_ACCOUNT_SELECT = true;
+
     /**
      * The main call repository. Keeps an instance of all live calls. New incoming and outgoing
      * calls are added to the map and removed when the calls move to the disconnected state.
@@ -280,9 +283,8 @@
      * Attempts to issue/connect the specified call.
      *
      * @param handle Handle to connect the call with.
-     * @param contactInfo Information about the entity being called.
      * @param gatewayInfo Optional gateway information that can be used to route the call to the
-     *         actual dialed handle via a gateway provider. May be null.
+     *        actual dialed handle via a gateway provider. May be null.
      * @param speakerphoneOn Whether or not to turn the speakerphone on once the call connects.
      * @param videoState The desired video state for the outgoing call.
      */
@@ -311,6 +313,13 @@
         // TODO(santoscordon): Move this to be a part of addCall()
         call.addListener(this);
         addCall(call);
+
+        // TODO: check for default account
+        if (account == null && ENABLE_ACCOUNT_SELECT) {
+            call.setState(CallState.PRE_DIAL_WAIT);
+            return;
+        }
+
         call.startCreateConnection();
     }
 
@@ -480,6 +489,15 @@
         }
     }
 
+    void phoneAccountSelected(Call call, PhoneAccount account) {
+        if (!mCalls.contains(call)) {
+            Log.i(this, "Attemped to add account to unknown call %s", call);
+        } else {
+            call.setPhoneAccount(account);
+            call.startCreateConnection();
+        }
+    }
+
     /** Called when the audio state changes. */
     void onAudioStateChanged(CallAudioState oldAudioState, CallAudioState newAudioState) {
         Log.v(this, "onAudioStateChanged, audioState: %s -> %s", oldAudioState, newAudioState);
diff --git a/src/com/android/telecomm/InCallAdapter.java b/src/com/android/telecomm/InCallAdapter.java
index 7db9325..161d4a4 100644
--- a/src/com/android/telecomm/InCallAdapter.java
+++ b/src/com/android/telecomm/InCallAdapter.java
@@ -18,6 +18,7 @@
 
 import android.os.Handler;
 import android.os.Message;
+import android.telecomm.PhoneAccount;
 
 import com.android.internal.os.SomeArgs;
 import com.android.internal.telecomm.IInCallAdapter;
@@ -42,6 +43,7 @@
     private static final int MSG_CONFERENCE = 11;
     private static final int MSG_SPLIT_FROM_CONFERENCE = 12;
     private static final int MSG_SWAP_WITH_BACKGROUND_CALL = 13;
+    private static final int MSG_PHONE_ACCOUNT_SELECTED = 14;
 
     private final class InCallAdapterHandler extends Handler {
         @Override
@@ -56,7 +58,7 @@
                         Log.w(this, "answerCall, unknown call id: %s", msg.obj);
                     }
                     break;
-                case MSG_REJECT_CALL:
+                case MSG_REJECT_CALL: {
                     SomeArgs args = (SomeArgs) msg.obj;
                     try {
                         call = mCallIdMapper.getCall(args.arg1);
@@ -71,6 +73,7 @@
                         args.recycle();
                     }
                     break;
+                }
                 case MSG_PLAY_DTMF_TONE:
                     call = mCallIdMapper.getCall(msg.obj);
                     if (call != null) {
@@ -129,6 +132,20 @@
                         Log.w(this, "phoneAccountClicked, unknown call id: %s", msg.obj);
                     }
                     break;
+                case MSG_PHONE_ACCOUNT_SELECTED: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    try {
+                        call = mCallIdMapper.getCall(args.arg1);
+                        if (call != null) {
+                            mCallsManager.phoneAccountSelected(call, (PhoneAccount) args.arg2);
+                        } else {
+                            Log.w(this, "phoneAccountSelected, unknown call id: %s", args.arg1);
+                        }
+                    } finally {
+                        args.recycle();
+                    }
+                    break;
+                }
                 case MSG_MUTE:
                     mCallsManager.mute(msg.arg1 == 1);
                     break;
@@ -142,7 +159,6 @@
                     } else {
                         Log.w(this, "conference, unknown call id: %s", msg.obj);
                     }
-
                     break;
                 case MSG_SPLIT_FROM_CONFERENCE:
                     call = mCallIdMapper.getCall(msg.obj);
@@ -240,6 +256,15 @@
     }
 
     @Override
+    public void phoneAccountSelected(String callId, PhoneAccount account) {
+        mCallIdMapper.checkValidCallId(callId);
+        SomeArgs args = SomeArgs.obtain();
+        args.arg1 = callId;
+        args.arg2 = account;
+        mHandler.obtainMessage(MSG_PHONE_ACCOUNT_SELECTED, args).sendToTarget();
+    }
+
+    @Override
     public void mute(boolean shouldMute) {
         mHandler.obtainMessage(MSG_MUTE, shouldMute ? 1 : 0, 0).sendToTarget();
     }
