diff --git a/Android.mk b/Android.mk
index e9841d9..3c0b34c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -189,6 +189,7 @@
 	dialer-libshortcutbadger-target \
 	dialer-mime4j-core-target \
 	dialer-mime4j-dom-target \
+	dialer-error-prone-target \
 	dialer-guava-target \
 	jsr305 \
 	libbackup \
@@ -293,6 +294,16 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+LOCAL_MODULE := dialer-error-prone-target
+LOCAL_SDK_VERSION := current
+LOCAL_SRC_FILES := ../../../prebuilts/tools/common/m2/repository/com/google/errorprone/error_prone_annotations/2.0.18/error_prone_annotations-2.0.18$(COMMON_JAVA_PACKAGE_SUFFIX)
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 LOCAL_MODULE := dialer-dagger2-target
 LOCAL_SDK_VERSION := current
 LOCAL_SRC_FILES := ../../../prebuilts/tools/common/m2/repository/com/google/dagger/dagger/2.7/dagger-2.7$(COMMON_JAVA_PACKAGE_SUFFIX)
diff --git a/java/com/android/dialer/assisteddialing/ui/res/values/string.xml b/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml
similarity index 100%
rename from java/com/android/dialer/assisteddialing/ui/res/values/string.xml
rename to java/com/android/dialer/assisteddialing/ui/res/values/strings.xml
diff --git a/java/com/android/dialer/common/concurrent/Annotations.java b/java/com/android/dialer/common/concurrent/Annotations.java
index eb956c3..5e3954c 100644
--- a/java/com/android/dialer/common/concurrent/Annotations.java
+++ b/java/com/android/dialer/common/concurrent/Annotations.java
@@ -20,6 +20,10 @@
 /** Annotations for dagger concurrency bindings. */
 public class Annotations {
 
+  /** Annotation for retrieving the UI thread. */
+  @Qualifier
+  public @interface Ui {}
+
   /** Annotation for retrieving the non-UI thread pool. */
   @Qualifier
   public @interface NonUiParallel {}
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutorModule.java b/java/com/android/dialer/common/concurrent/DialerExecutorModule.java
index 68910fb..5e0190e 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutorModule.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutorModule.java
@@ -19,8 +19,10 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.NonUiParallel;
 import com.android.dialer.common.concurrent.Annotations.NonUiSerial;
+import com.android.dialer.common.concurrent.Annotations.Ui;
 import com.android.dialer.common.concurrent.Annotations.UiParallel;
 import com.android.dialer.common.concurrent.Annotations.UiSerial;
+import com.google.common.util.concurrent.ListeningExecutorService;
 import dagger.Binds;
 import dagger.Module;
 import dagger.Provides;
@@ -41,6 +43,13 @@
 
   @Provides
   @Singleton
+  @Ui
+  static ListeningExecutorService provideUiThreadExecutorService() {
+    return new UiThreadExecutor();
+  }
+
+  @Provides
+  @Singleton
   @NonUiParallel
   static ExecutorService provideNonUiThreadPool() {
     return Executors.newFixedThreadPool(
diff --git a/java/com/android/dialer/common/concurrent/UiThreadExecutor.java b/java/com/android/dialer/common/concurrent/UiThreadExecutor.java
new file mode 100644
index 0000000..7b95d70
--- /dev/null
+++ b/java/com/android/dialer/common/concurrent/UiThreadExecutor.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 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.common.concurrent;
+
+import com.google.common.util.concurrent.AbstractListeningExecutorService;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * An ExecutorService that delegates to the UI thread. Rejects attempts to shut down, and all
+ * shutdown related APIs are unimplemented.
+ *
+ */
+public class UiThreadExecutor extends AbstractListeningExecutorService {
+
+  @Override
+  public void shutdown() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public List<Runnable> shutdownNow() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public boolean isShutdown() {
+    return false;
+  }
+
+  @Override
+  public boolean isTerminated() {
+    return false;
+  }
+
+  @Override
+  public boolean awaitTermination(long l, TimeUnit timeUnit) throws InterruptedException {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public <V> ListenableFuture<V> submit(final Callable<V> task) {
+    final SettableFuture<V> resultFuture = SettableFuture.create();
+    ThreadUtil.postOnUiThread(
+        () -> {
+          try {
+            resultFuture.set(task.call());
+          } catch (Exception e) {
+            // uncaught exceptions on the UI thread should crash the app
+            resultFuture.setException(e);
+            throw new RuntimeException(e);
+          }
+        });
+    return resultFuture;
+  }
+
+  @Override
+  public void execute(final Runnable runnable) {
+    ThreadUtil.postOnUiThread(runnable);
+  }
+}
