diff --git a/java/com/android/dialer/simulator/impl/NonSimulatorConnectionListener.java b/java/com/android/dialer/simulator/impl/NonSimulatorConnectionListener.java
new file mode 100644
index 0000000..333d66c
--- /dev/null
+++ b/java/com/android/dialer/simulator/impl/NonSimulatorConnectionListener.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.simulator.impl;
+
+import android.support.annotation.NonNull;
+import android.telecom.Connection.RttModifyStatus;
+import android.telecom.DisconnectCause;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.simulator.Simulator.Event;
+
+/** Listen to call backs from Connections not made by simulator. */
+final class NonSimulatorConnectionListener implements SimulatorConnection.Listener {
+
+  @Override
+  public void onEvent(@NonNull SimulatorConnection connection, @NonNull Event event) {
+    switch (event.type) {
+      case Event.REJECT:
+        connection.setDisconnected(new DisconnectCause(DisconnectCause.REJECTED));
+        break;
+      case Event.HOLD:
+        connection.setOnHold();
+        break;
+      case Event.ANSWER:
+      case Event.UNHOLD:
+        connection.setActive();
+        break;
+      case Event.DISCONNECT:
+        connection.setDisconnected(new DisconnectCause(DisconnectCause.LOCAL));
+        break;
+      case Event.SESSION_MODIFY_REQUEST:
+        ThreadUtil.postDelayedOnUiThread(() -> connection.handleSessionModifyRequest(event), 2000);
+        break;
+      case Event.START_RTT:
+        boolean accept = true;
+        if (accept) {
+          connection.sendRttInitiationSuccess();
+        } else {
+          connection.sendRttInitiationFailure(RttModifyStatus.SESSION_MODIFY_REQUEST_FAIL);
+        }
+        break;
+      case Event.NONE:
+      default:
+        LogUtil.i("SimulatorVoiceCall.onEvent", "unexpected event: " + event.type);
+        throw Assert.createIllegalStateFailException();
+    }
+  }
+}
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java b/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java
index a5fb20b..19104be 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java
@@ -17,6 +17,7 @@
 package com.android.dialer.simulator.impl;
 
 import android.net.Uri;
+import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.telecom.Connection;
 import android.telecom.ConnectionRequest;
@@ -72,7 +73,8 @@
   public Connection onCreateOutgoingConnection(
       PhoneAccountHandle phoneAccount, ConnectionRequest request) {
     LogUtil.enterBlock("SimulatorConnectionService.onCreateOutgoingConnection");
-    if (!SimulatorSimCallManager.isSimulatorConnectionRequest(request)) {
+    if (!SimulatorComponent.get(this).getSimulator().isSimulatorMode()
+        && !SimulatorSimCallManager.isSimulatorConnectionRequest(request)) {
       LogUtil.i(
           "SimulatorConnectionService.onCreateOutgoingConnection",
           "outgoing call not from simulator, unregistering");
@@ -82,20 +84,29 @@
       return null;
     }
     SimulatorConnection connection = new SimulatorConnection(this, request);
-    connection.setAddress(
-        request.getAddress(),
-        request
-            .getExtras()
-            .getInt(Simulator.PRESENTATION_CHOICE, TelecomManager.PRESENTATION_ALLOWED));
     connection.setDialing();
-    simulatorConnectionsBank.add(connection);
-    ThreadUtil.postOnUiThread(
-        () ->
-            SimulatorComponent.get(instance)
-                .getSimulatorConnectionsBank()
-                .updateConferenceableConnections());
-    for (Listener listener : listeners) {
-      listener.onNewOutgoingConnection(connection);
+    if (SimulatorSimCallManager.isSimulatorConnectionRequest(request)) {
+      simulatorConnectionsBank.add(connection);
+      connection.setAddress(
+          request.getAddress(),
+          request
+              .getExtras()
+              .getInt(Simulator.PRESENTATION_CHOICE, TelecomManager.PRESENTATION_ALLOWED));
+      ThreadUtil.postOnUiThread(
+          () ->
+              SimulatorComponent.get(instance)
+                  .getSimulatorConnectionsBank()
+                  .updateConferenceableConnections());
+      for (Listener listener : listeners) {
+        listener.onNewOutgoingConnection(connection);
+      }
+    } else {
+      connection.setAddress(request.getAddress(), 1);
+      Bundle extras = connection.getExtras();
+      extras.putString("connection_tag", "SimulatorMode");
+      connection.putExtras(extras);
+      simulatorConnectionsBank.add(connection);
+      connection.addListener(new NonSimulatorConnectionListener());
     }
     return connection;
   }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
index 1bf4b2a..ba2b558 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
@@ -65,16 +65,20 @@
                     EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext())))
         .addItem(
             "Enable simulator mode",
-            () ->
-                SimulatorComponent.get(activity.getApplicationContext())
-                    .getSimulator()
-                    .enableSimulatorMode())
+            () -> {
+              SimulatorComponent.get(activity.getApplicationContext())
+                  .getSimulator()
+                  .enableSimulatorMode();
+              SimulatorSimCallManager.register(activity.getApplicationContext());
+            })
         .addItem(
             "Disable simulator mode",
-            () ->
-                SimulatorComponent.get(activity.getApplicationContext())
-                    .getSimulator()
-                    .disableSimulatorMode());
+            () -> {
+              SimulatorComponent.get(activity.getApplicationContext())
+                  .getSimulator()
+                  .disableSimulatorMode();
+              SimulatorSimCallManager.unregister(activity.getApplicationContext());
+            });
     return simulatorSubMenu;
   }
 
