diff --git a/java/com/android/dialer/precall/PreCall.java b/java/com/android/dialer/precall/PreCall.java
index 4f021f1..bd0aee5 100644
--- a/java/com/android/dialer/precall/PreCall.java
+++ b/java/com/android/dialer/precall/PreCall.java
@@ -22,19 +22,11 @@
 import android.support.annotation.NonNull;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.util.DialerUtils;
-import com.google.common.collect.ImmutableList;
 
 /** Interface to prepare a {@link CallIntentBuilder} before placing the call with telecom. */
 public interface PreCall {
 
   /**
-   * @return a list of {@link PreCallAction} in execution order for the {@link PreCallCoordinator}
-   *     to run.
-   */
-  @NonNull
-  ImmutableList<PreCallAction> getActions();
-
-  /**
    * @return a intent when started as activity, will perform the pre-call actions and then place a
    *     call. TODO(twyen): if all actions do not require an UI, return a intent that will place the
    *     call directly instead.
diff --git a/java/com/android/dialer/precall/PreCallAction.java b/java/com/android/dialer/precall/PreCallAction.java
index 9ddc6f2..298af08 100644
--- a/java/com/android/dialer/precall/PreCallAction.java
+++ b/java/com/android/dialer/precall/PreCallAction.java
@@ -25,6 +25,9 @@
  * CallIntentBuilder} to generate full information for the call. For example, showing a dialog to
  * select the phone account on a multi-SIM device, ask if RTT should be enabled, or rewrite the
  * number for roaming calls.
+ *
+ * <p>UI actions are discarded when the hosting activity is paused. A new instance of the action
+ * will be created once the activity is resumed again.
  */
 public interface PreCallAction {
 
diff --git a/java/com/android/dialer/precall/PreCallComponent.java b/java/com/android/dialer/precall/PreCallComponent.java
index 00adde5..859eb01 100644
--- a/java/com/android/dialer/precall/PreCallComponent.java
+++ b/java/com/android/dialer/precall/PreCallComponent.java
@@ -17,7 +17,9 @@
 package com.android.dialer.precall;
 
 import android.content.Context;
+import android.support.annotation.NonNull;
 import com.android.dialer.inject.HasRootComponent;
+import com.google.common.collect.ImmutableList;
 import dagger.Subcomponent;
 
 /** Daggaer component for {@link PreCall} */
@@ -25,6 +27,13 @@
 public abstract class PreCallComponent {
   public abstract PreCall getPreCall();
 
+  /**
+   * @return a list of {@link PreCallAction} in execution order for the {@link PreCallCoordinator}
+   *     to run.
+   */
+  @NonNull
+  public abstract ImmutableList<PreCallAction> createActions();
+
   public static PreCallComponent get(Context context) {
     return ((HasComponent) ((HasRootComponent) context.getApplicationContext()).component())
         .preCallActionsComponent();
diff --git a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
index 240549c..314a0a0 100644
--- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
@@ -82,7 +82,7 @@
   }
 
   void onResume() {
-    actions = PreCallComponent.get(activity).getPreCall().getActions();
+    actions = PreCallComponent.get(activity).createActions();
     runNextAction();
   }
 
diff --git a/java/com/android/dialer/precall/impl/PreCallImpl.java b/java/com/android/dialer/precall/impl/PreCallImpl.java
index 2f9b278..f52fa61 100644
--- a/java/com/android/dialer/precall/impl/PreCallImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallImpl.java
@@ -39,11 +39,6 @@
     this.actions = actions;
   }
 
-  @Override
-  public ImmutableList<PreCallAction> getActions() {
-    return actions;
-  }
-
   @NonNull
   @Override
   public Intent buildIntent(Context context, CallIntentBuilder builder) {
diff --git a/java/com/android/dialer/precall/impl/PreCallModule.java b/java/com/android/dialer/precall/impl/PreCallModule.java
index fa78cba..cbdabe3 100644
--- a/java/com/android/dialer/precall/impl/PreCallModule.java
+++ b/java/com/android/dialer/precall/impl/PreCallModule.java
@@ -38,7 +38,6 @@
   public abstract PreCall to(PreCallImpl impl);
 
   @Provides
-  @Singleton
   public static ImmutableList<PreCallAction> provideActions(
       DuoAction duoAction, CallingAccountSelector callingAccountSelector) {
     return ImmutableList.of(
