diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 7592c66..4b0384e 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -73,7 +73,6 @@
 import com.android.dialer.animation.AnimationListenerAdapter;
 import com.android.dialer.app.calllog.CallLogActivity;
 import com.android.dialer.app.calllog.CallLogAdapter;
-import com.android.dialer.app.calllog.CallLogAsync;
 import com.android.dialer.app.calllog.CallLogFragment;
 import com.android.dialer.app.calllog.CallLogNotificationsService;
 import com.android.dialer.app.calllog.IntentProvider;
@@ -99,6 +98,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.UiUtil;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
@@ -912,9 +912,13 @@
 
   @Override
   public void getLastOutgoingCall(LastOutgoingCallCallback callback) {
-    new CallLogAsync()
-        .getLastOutgoingCall(
-            new CallLogAsync.GetLastOutgoingCallArgs(this, callback::lastOutgoingCall));
+    DialerExecutorComponent.get(this)
+        .dialerExecutorFactory()
+        .createUiTaskBuilder(
+            getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall)
+        .onSuccess(output -> callback.lastOutgoingCall(output))
+        .build()
+        .executeParallel(this);
   }
 
   /** Callback from child DialpadFragment when the dialpad is shown. */
diff --git a/java/com/android/dialer/app/calllog/CallLogAsync.java b/java/com/android/dialer/app/calllog/CallLogAsync.java
deleted file mode 100644
index 26435f3..0000000
--- a/java/com/android/dialer/app/calllog/CallLogAsync.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2010 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.app.calllog;
-
-import android.content.Context;
-import android.os.AsyncTask;
-import android.provider.CallLog.Calls;
-import com.android.dialer.common.Assert;
-
-/**
- * Class to access the call log asynchronously to avoid carrying out database operations on the UI
- * thread, using an {@link AsyncTask}.
- *
- * <pre class="prettyprint"> Typical usage: ==============
- *
- * // From an activity... String mLastNumber = "";
- *
- * CallLogAsync log = new CallLogAsync();
- *
- * CallLogAsync.GetLastOutgoingCallArgs lastCallArgs = new CallLogAsync.GetLastOutgoingCallArgs(
- * this, new CallLogAsync.OnLastOutgoingCallComplete() { public void lastOutgoingCall(String number)
- * { mLastNumber = number; } }); log.getLastOutgoingCall(lastCallArgs); </pre>
- */
-public class CallLogAsync {
-
-  /** CallLog.getLastOutgoingCall(...) */
-  public AsyncTask getLastOutgoingCall(GetLastOutgoingCallArgs args) {
-    Assert.isMainThread();
-    return new GetLastOutgoingCallTask(args.callback).execute(args);
-  }
-
-  /** Interface to retrieve the last dialed number asynchronously. */
-  public interface OnLastOutgoingCallComplete {
-
-    /** @param number The last dialed number or an empty string if none exists yet. */
-    void lastOutgoingCall(String number);
-  }
-
-  /** Parameter object to hold the args to get the last outgoing call from the call log DB. */
-  public static class GetLastOutgoingCallArgs {
-
-    public final Context context;
-    public final OnLastOutgoingCallComplete callback;
-
-    public GetLastOutgoingCallArgs(Context context, OnLastOutgoingCallComplete callback) {
-      this.context = context;
-      this.callback = callback;
-    }
-  }
-
-  /** AsyncTask to get the last outgoing call from the DB. */
-  private class GetLastOutgoingCallTask extends AsyncTask<GetLastOutgoingCallArgs, Void, String> {
-
-    private final OnLastOutgoingCallComplete callback;
-
-    public GetLastOutgoingCallTask(OnLastOutgoingCallComplete callback) {
-      this.callback = callback;
-    }
-
-    // Happens on a background thread. We cannot run the callback
-    // here because only the UI thread can modify the view
-    // hierarchy (e.g enable/disable the dial button). The
-    // callback is ran rom the post execute method.
-    @Override
-    protected String doInBackground(GetLastOutgoingCallArgs... list) {
-      String number = "";
-      for (GetLastOutgoingCallArgs args : list) {
-        // May block. Select only the last one.
-        number = Calls.getLastOutgoingCall(args.context);
-      }
-      return number; // passed to the onPostExecute method.
-    }
-
-    // Happens on the UI thread, it is safe to run the callback
-    // that may do some work on the views.
-    @Override
-    protected void onPostExecute(String number) {
-      Assert.isMainThread();
-      callback.lastOutgoingCall(number);
-    }
-  }
-}
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 242bf2d..3edf6c6a 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -20,6 +20,7 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.QuickContact;
 import android.support.design.widget.FloatingActionButton;
 import android.support.v4.app.FragmentTransaction;
@@ -27,6 +28,7 @@
 import android.widget.ImageView;
 import com.android.dialer.calllog.ui.NewCallLogFragment;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.constants.ActivityRequestCodes;
 import com.android.dialer.contactsfragment.ContactsFragment;
@@ -141,7 +143,13 @@
 
   @Override // DialpadListener
   public void getLastOutgoingCall(LastOutgoingCallCallback callback) {
-    // TODO(calderwoodra): migrate CallLogAsync class outside of dialer/app and call it here.
+    DialerExecutorComponent.get(this)
+        .dialerExecutorFactory()
+        .createUiTaskBuilder(
+            getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall)
+        .onSuccess(output -> callback.lastOutgoingCall(output))
+        .build()
+        .executeParallel(this);
   }
 
   @Override // DialpadListener
