diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java
index b02e325..83fe2d9 100644
--- a/java/com/android/dialer/callcomposer/CallComposerActivity.java
+++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java
@@ -528,12 +528,18 @@
 
   @Override
   public void onBackPressed() {
+    LogUtil.enterBlock("CallComposerActivity.onBackPressed");
     if (!isSendAndCallHidingOrHidden) {
       ((CallComposerFragment) adapter.instantiateItem(pager, currentIndex)).clearComposer();
     } else if (!runningExitAnimation) {
       // Unregister first to avoid receiving a callback when the session closes
       getEnrichedCallManager().unregisterStateChangedListener(this);
-      getEnrichedCallManager().endCallComposerSession(sessionId);
+
+      // If the user presses the back button when the session fails, there's a race condition here
+      // since we clean up failed sessions.
+      if (getEnrichedCallManager().getSession(sessionId) != null) {
+        getEnrichedCallManager().endCallComposerSession(sessionId);
+      }
       runExitAnimation();
     }
   }
diff --git a/java/com/android/dialer/phonelookup/PhoneLookup.java b/java/com/android/dialer/phonelookup/PhoneLookup.java
new file mode 100644
index 0000000..63b01c8
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/PhoneLookup.java
@@ -0,0 +1,46 @@
+/*
+ * 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.phonelookup;
+
+import com.android.dialer.DialerPhoneNumber;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.ListenableFuture;
+
+/** TODO(zachh) update documentation. */
+public interface PhoneLookup {
+
+  /**
+   * For Call Log "isDirty" operation.
+   *
+   * @param phoneNumbers
+   * @param lastModified
+   * @return TODO(zachh)
+   */
+  ListenableFuture<Boolean> isDirty(
+      ImmutableSet<DialerPhoneNumber> phoneNumbers, long lastModified);
+
+  /**
+   * For Call Log "fill" operation.
+   *
+   * @param existingInfoMap
+   * @param lastModified
+   * @return TODO(zachh)
+   */
+  ListenableFuture<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>> bulkUpdate(
+      ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> existingInfoMap, long lastModified);
+}
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java
new file mode 100644
index 0000000..323ec7c
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java
@@ -0,0 +1,42 @@
+/*
+ * 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.phonelookup.cp2;
+
+import com.android.dialer.DialerPhoneNumber;
+import com.android.dialer.phonelookup.PhoneLookup;
+import com.android.dialer.phonelookup.PhoneLookupInfo;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.ListenableFuture;
+
+/** TODO(calderwoodra) */
+final class Cp2PhoneLookup implements PhoneLookup {
+
+  @Override
+  public ListenableFuture<Boolean> isDirty(
+      ImmutableSet<DialerPhoneNumber> phoneNumbers, long lastModified) {
+    // TODO(calderwoodra)
+    return null;
+  }
+
+  @Override
+  public ListenableFuture<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>> bulkUpdate(
+      ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> existingInfoMap, long lastModified) {
+    // TODO(calderwoodra)
+    return null;
+  }
+}
diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
new file mode 100644
index 0000000..b959e78
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
@@ -0,0 +1,20 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.phonelookup";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+package com.android.dialer.phonelookup;
+
+// TODO(zachh) documentation
+message PhoneLookupInfo {
+  // TODO(calderwoodra): documentation
+  message Cp2Info {
+    optional string name = 1;
+    optional string photo_uri = 2;
+    optional fixed64 photo_id = 3;
+    optional string label = 4;  // "Home", "Mobile", ect.
+  }
+  optional Cp2Info cp2_info = 1;
+}
\ No newline at end of file
