diff --git a/java/com/android/dialer/simulator/Simulator.java b/java/com/android/dialer/simulator/Simulator.java
index 3931ae4..3c2526b 100644
--- a/java/com/android/dialer/simulator/Simulator.java
+++ b/java/com/android/dialer/simulator/Simulator.java
@@ -63,11 +63,24 @@
   @StringDef({
     IS_VOLTE,
     PRESENTATION_CHOICE,
+    IS_ENRICHED_CALL,
   })
   @interface BundleKey {}
 
   public final String IS_VOLTE = "ISVOLTE";
   public final String PRESENTATION_CHOICE = "PRESENTATIONCHOICE";
+  public final String IS_ENRICHED_CALL = "ISENRICHEDCALL";
+
+  /** Phone numbers for outgoing and incoming enriched call scenario. */
+  public static final String ENRICHED_CALL_OUTGOING_NUMBER = "+55-31-2128-6800";
+
+  public static final String ENRICHED_CALL_INCOMING_NUMBER = "+44 (0) 20 7031 3000";
+
+  boolean isSimulatorMode();
+
+  void enableSimulatorMode();
+
+  void disableSimulatorMode();
 
   /** Information about a connection event. */
   public static class Event {
diff --git a/java/com/android/dialer/simulator/SimulatorEnrichedCall.java b/java/com/android/dialer/simulator/SimulatorEnrichedCall.java
index f6c8a6c..ae9447b 100644
--- a/java/com/android/dialer/simulator/SimulatorEnrichedCall.java
+++ b/java/com/android/dialer/simulator/SimulatorEnrichedCall.java
@@ -16,13 +16,14 @@
 
 package com.android.dialer.simulator;
 
-import com.android.dialer.enrichedcall.EnrichedCallManager.StateChangedListener;
+import com.android.dialer.enrichedcall.EnrichedCallManager;
+import com.google.common.util.concurrent.ListenableFuture;
 
 /** Setup enriched calling environment for {@link Simulator}. */
-public interface SimulatorEnrichedCall extends StateChangedListener {
+public interface SimulatorEnrichedCall extends EnrichedCallManager.StateChangedListener {
   /** Setup a session for an incoming enriched call. */
-  long setupIncomingEnrichedCall(String number);
+  ListenableFuture<Void> setupIncomingEnrichedCall(String number);
 
   /** Setup a session for outgoing enriched call. */
-  long setupOutgoingEnrichedCall(String number);
+  ListenableFuture<Void> setupOutgoingEnrichedCall(String number);
 }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorImpl.java b/java/com/android/dialer/simulator/impl/SimulatorImpl.java
index be86763..24f3410 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorImpl.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorImpl.java
@@ -25,7 +25,9 @@
 
 /** The entry point for the simulator feature. */
 final class SimulatorImpl implements Simulator {
-  
+
+  private boolean simulatorMode = false;
+
   @Inject
   public SimulatorImpl() {}
 
@@ -38,4 +40,19 @@
   public ActionProvider getActionProvider(AppCompatActivity activity) {
     return SimulatorMainMenu.getActionProvider(activity);
   }
+
+  @Override
+  public boolean isSimulatorMode() {
+    return simulatorMode;
+  }
+
+  @Override
+  public void enableSimulatorMode() {
+    simulatorMode = true;
+  }
+
+  @Override
+  public void disableSimulatorMode() {
+    simulatorMode = false;
+  }
 }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
index 174aab5..69da2f4 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
@@ -32,6 +32,7 @@
 import com.android.dialer.enrichedcall.simulator.EnrichedCallSimulatorActivity;
 import com.android.dialer.persistentlog.PersistentLogger;
 import com.android.dialer.preferredsim.PreferredSimFallbackContract;
+import com.android.dialer.simulator.SimulatorComponent;
 import com.android.incallui.rtt.impl.RttChatActivity;
 import com.android.incallui.speakeasy.SpeakEasy;
 import com.android.incallui.speakeasy.SpeakEasyActivity;
@@ -65,7 +66,19 @@
             "Enriched call simulator",
             () ->
                 activity.startActivity(
-                    EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext())));
+                    EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext())))
+        .addItem(
+            "Enable simulator mode",
+            () ->
+                SimulatorComponent.get(activity.getApplicationContext())
+                    .getSimulator()
+                    .enableSimulatorMode())
+        .addItem(
+            "Disable simulator mode",
+            () ->
+                SimulatorComponent.get(activity.getApplicationContext())
+                    .getSimulator()
+                    .disableSimulatorMode());
     SpeakEasy speakEasy = SpeakEasyComponent.get(activity.getApplicationContext()).speakEasy();
     if (speakEasy.isEnabled()) {
       simulatorSubMenu.addItem(
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
index ff00dd8..67a2db8 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
@@ -26,15 +26,21 @@
 import android.view.ActionProvider;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.enrichedcall.EnrichedCallComponent;
+import com.android.dialer.enrichedcall.EnrichedCallManager;
 import com.android.dialer.simulator.Simulator;
 import com.android.dialer.simulator.Simulator.Event;
+import com.android.dialer.simulator.SimulatorComponent;
+import com.android.dialer.simulator.SimulatorEnrichedCall;
 
 /** Entry point in the simulator to create voice calls. */
 final class SimulatorVoiceCall
     implements SimulatorConnectionService.Listener, SimulatorConnection.Listener {
   @NonNull private final Context context;
   @Nullable private String connectionTag;
+  private final SimulatorEnrichedCall simulatorEnrichedCall;
 
   static ActionProvider getActionProvider(@NonNull AppCompatActivity activity) {
     return new SimulatorSubMenu(activity.getApplicationContext())
@@ -55,6 +61,12 @@
                 new SimulatorVoiceCall(activity.getApplicationContext())
                     .addNewOutgoingCall(activity))
         .addItem(
+            "Incoming enriched call",
+            () -> new SimulatorVoiceCall(activity.getApplicationContext()).incomingEnrichedCall())
+        .addItem(
+            "Outgoing enriched call",
+            () -> new SimulatorVoiceCall(activity.getApplicationContext()).outgoingEnrichedCall())
+        .addItem(
             "Spam incoming call",
             () -> new SimulatorVoiceCall(activity.getApplicationContext()).addSpamIncomingCall())
         .addItem(
@@ -77,23 +89,47 @@
 
   private SimulatorVoiceCall(@NonNull Context context) {
     this.context = Assert.isNotNull(context);
+    simulatorEnrichedCall = SimulatorComponent.get(context).getSimulatorEnrichedCall();
     SimulatorConnectionService.addListener(this);
     SimulatorConnectionService.addListener(
         new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM));
   }
 
+  private void incomingEnrichedCall() {
+    simulatorEnrichedCall
+        .setupIncomingEnrichedCall(Simulator.ENRICHED_CALL_INCOMING_NUMBER)
+        .addListener(
+            () -> {
+              Bundle extras = new Bundle();
+              extras.putBoolean(Simulator.IS_ENRICHED_CALL, true);
+              connectionTag =
+                  SimulatorSimCallManager.addNewIncomingCall(
+                      context, Simulator.ENRICHED_CALL_INCOMING_NUMBER, false, extras);
+            },
+            DialerExecutorComponent.get(context).uiExecutor());
+  }
+
+  private void outgoingEnrichedCall() {
+    getEnrichedCallManager().registerStateChangedListener(simulatorEnrichedCall);
+    simulatorEnrichedCall
+        .setupOutgoingEnrichedCall(Simulator.ENRICHED_CALL_OUTGOING_NUMBER)
+        .addListener(
+            () -> {
+              Bundle extras = new Bundle();
+              extras.putBoolean(Simulator.IS_ENRICHED_CALL, true);
+              connectionTag =
+                  SimulatorSimCallManager.addNewOutgoingCall(
+                      context, Simulator.ENRICHED_CALL_OUTGOING_NUMBER, false, extras);
+            },
+            DialerExecutorComponent.get(context).uiExecutor());
+  }
+
   private void addNewIncomingCall() {
     String callerId = "+44 (0) 20 7031 3000" /* Google London office */;
     connectionTag =
         SimulatorSimCallManager.addNewIncomingCall(context, callerId, false /* isVideo */);
   }
 
-  private void addNewOutgoingCall() {
-    String callerId = "+55-31-2128-6800"; // Brazil office.
-    connectionTag =
-        SimulatorSimCallManager.addNewOutgoingCall(context, callerId, false /* isVideo */);
-  }
-
   private void addNewIncomingCall(AppCompatActivity activity) {
     SimulatorDialogFragment.newInstance(
             (callerId, callerIdPresentation) -> {
@@ -106,6 +142,12 @@
         .show(activity.getSupportFragmentManager(), "SimulatorDialog");
   }
 
+  private void addNewOutgoingCall() {
+    String callerId = "+55-31-2128-6800"; // Brazil office.
+    connectionTag =
+        SimulatorSimCallManager.addNewOutgoingCall(context, callerId, false /* isVideo */);
+  }
+
   private void addNewOutgoingCall(AppCompatActivity activity) {
     SimulatorDialogFragment.newInstance(
             (callerId, callerIdPresentation) -> {
@@ -184,6 +226,9 @@
         break;
       case Event.DISCONNECT:
         connection.setDisconnected(new DisconnectCause(DisconnectCause.LOCAL));
+        if (connection.getExtras().getBoolean(Simulator.IS_ENRICHED_CALL)) {
+          getEnrichedCallManager().unregisterStateChangedListener(simulatorEnrichedCall);
+        }
         break;
       case Event.SESSION_MODIFY_REQUEST:
         ThreadUtil.postDelayedOnUiThread(() -> connection.handleSessionModifyRequest(event), 2000);
@@ -194,7 +239,8 @@
     }
   }
 
-  private interface DialogCallback {
-    void callback(String callerId, int callerIdPresentation);
+  @NonNull
+  private EnrichedCallManager getEnrichedCallManager() {
+    return EnrichedCallComponent.get(context).getEnrichedCallManager();
   }
 }
diff --git a/java/com/android/dialer/simulator/stub/SimulatorEnrichedCallStub.java b/java/com/android/dialer/simulator/stub/SimulatorEnrichedCallStub.java
index 056722f..5b07271 100644
--- a/java/com/android/dialer/simulator/stub/SimulatorEnrichedCallStub.java
+++ b/java/com/android/dialer/simulator/stub/SimulatorEnrichedCallStub.java
@@ -17,6 +17,8 @@
 package com.android.dialer.simulator.stub;
 
 import com.android.dialer.simulator.SimulatorEnrichedCall;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import javax.inject.Inject;
 
 /** Stub implementation of {@link SimulatorEnrichedCall}. */
@@ -26,13 +28,13 @@
   public SimulatorEnrichedCallStub() {}
 
   @Override
-  public long setupIncomingEnrichedCall(String number) {
-    return -1;
+  public ListenableFuture<Void> setupIncomingEnrichedCall(String number) {
+    return Futures.immediateFuture(null);
   }
 
   @Override
-  public long setupOutgoingEnrichedCall(String number) {
-    return -1;
+  public ListenableFuture<Void> setupOutgoingEnrichedCall(String number) {
+    return Futures.immediateFuture(null);
   }
 
   @Override
