diff --git a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
index 3edc73c..bd275df 100644
--- a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
+++ b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
@@ -23,6 +23,7 @@
 import com.android.dialer.duo.stub.StubDuoModule;
 import com.android.dialer.enrichedcall.stub.StubEnrichedCallModule;
 import com.android.dialer.inject.ContextModule;
+import com.android.dialer.phonelookup.PhoneLookupModule;
 import com.android.dialer.phonenumbergeoutil.impl.PhoneNumberGeoUtilModule;
 import com.android.dialer.simulator.impl.SimulatorModule;
 import com.android.dialer.storage.StorageModule;
@@ -40,16 +41,17 @@
     CallLogModule.class,
     ContextModule.class,
     DialerExecutorModule.class,
+    PhoneLookupModule.class,
     PhoneNumberGeoUtilModule.class,
     SharedPrefConfigProviderModule.class,
     SimulatorModule.class,
     StorageModule.class,
     SystemStrictModeModule.class,
     StubCallLocationModule.class,
+    StubDuoModule.class,
     StubEnrichedCallModule.class,
     StubMapsModule.class,
-    VoicemailModule.class,
-    StubDuoModule.class
+    VoicemailModule.class
   }
 )
 public interface AospDialerRootComponent extends BaseDialerRootComponent {}
diff --git a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
index c3ca565..bc5036f 100644
--- a/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
+++ b/java/com/android/dialer/binary/basecomponent/BaseDialerRootComponent.java
@@ -23,6 +23,7 @@
 import com.android.dialer.duo.DuoComponent;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
 import com.android.dialer.main.MainComponent;
+import com.android.dialer.phonelookup.PhoneLookupComponent;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtilComponent;
 import com.android.dialer.simulator.SimulatorComponent;
 import com.android.dialer.storage.StorageComponent;
@@ -41,12 +42,13 @@
         CallLogDatabaseComponent.HasComponent,
         ConfigProviderComponent.HasComponent,
         DialerExecutorComponent.HasComponent,
-        MainComponent.HasComponent,
+        DuoComponent.HasComponent,
         EnrichedCallComponent.HasComponent,
+        MainComponent.HasComponent,
         MapsComponent.HasComponent,
+        PhoneLookupComponent.HasComponent,
         PhoneNumberGeoUtilComponent.HasComponent,
         SimulatorComponent.HasComponent,
         StorageComponent.HasComponent,
         StrictModeComponent.HasComponent,
-        VoicemailComponent.HasComponent,
-        DuoComponent.HasComponent {}
+        VoicemailComponent.HasComponent {}
diff --git a/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java b/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
index dc8d563..c47a69b 100644
--- a/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
+++ b/java/com/android/dialer/binary/google/GoogleStubDialerRootComponent.java
@@ -23,6 +23,7 @@
 import com.android.dialer.duo.stub.StubDuoModule;
 import com.android.dialer.enrichedcall.stub.StubEnrichedCallModule;
 import com.android.dialer.inject.ContextModule;
+import com.android.dialer.phonelookup.PhoneLookupModule;
 import com.android.dialer.phonenumbergeoutil.impl.PhoneNumberGeoUtilModule;
 import com.android.dialer.simulator.impl.SimulatorModule;
 import com.android.dialer.storage.StorageModule;
@@ -44,6 +45,7 @@
     CallLogModule.class,
     ContextModule.class,
     DialerExecutorModule.class,
+    PhoneLookupModule.class, // TODO(zachh): Module which uses APDL?
     PhoneNumberGeoUtilModule.class,
     SharedPrefConfigProviderModule.class,
     SimulatorModule.class,
diff --git a/java/com/android/dialer/phonelookup/PhoneLookup.java b/java/com/android/dialer/phonelookup/PhoneLookup.java
index 63b01c8..66f166d 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookup.java
@@ -16,30 +16,47 @@
 
 package com.android.dialer.phonelookup;
 
+import android.support.annotation.NonNull;
+import android.telecom.Call;
 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. */
+/**
+ * Provides operations related to retrieving information about phone numbers.
+ *
+ * <p>Some operations defined by this interface are generally targeted towards specific use cases;
+ * for example {@link #isDirty(ImmutableSet, long)} and {@link #bulkUpdate(ImmutableMap, long)} are
+ * generally intended to be used by the call log.
+ */
 public interface PhoneLookup {
 
   /**
-   * For Call Log "isDirty" operation.
+   * Returns a future containing a new {@link PhoneLookupInfo} for the provided call.
    *
-   * @param phoneNumbers
-   * @param lastModified
-   * @return TODO(zachh)
+   * <p>The returned message should contain populated data for the sub-message corresponding to this
+   * {@link PhoneLookup}. For example, the CP2 implementation returns a {@link PhoneLookupInfo} with
+   * the {@link PhoneLookupInfo.Cp2Info} sub-message populated.
+   */
+  ListenableFuture<PhoneLookupInfo> lookup(@NonNull Call call);
+
+  /**
+   * Returns a future which returns true if the information for any of the provided phone numbers
+   * has changed since {@code lastModified} according to this {@link PhoneLookup}.
    */
   ListenableFuture<Boolean> isDirty(
       ImmutableSet<DialerPhoneNumber> phoneNumbers, long lastModified);
 
   /**
-   * For Call Log "fill" operation.
+   * Given a set of existing information and a timestamp, returns a set of information with any
+   * changes made since the timestamp according to this {@link PhoneLookup}.
    *
-   * @param existingInfoMap
-   * @param lastModified
-   * @return TODO(zachh)
+   * <p>If there are no changes required, it is valid for this method to simply return the provided
+   * {@code existingInfoMap}.
+   *
+   * <p>If there is no longer information associated with a number (for example, a local contact was
+   * deleted) the returned map should contain an empty {@link PhoneLookupInfo} for that number.
    */
   ListenableFuture<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>> bulkUpdate(
       ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> existingInfoMap, long lastModified);
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupComponent.java b/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
new file mode 100644
index 0000000..6d1f9a2
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
@@ -0,0 +1,37 @@
+/*
+ * 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 android.content.Context;
+import com.android.dialer.inject.HasRootComponent;
+import dagger.Subcomponent;
+
+/** Dagger component for the PhoneLookup package. */
+@Subcomponent
+public abstract class PhoneLookupComponent {
+
+  public abstract PhoneLookup phoneLookup();
+
+  public static PhoneLookupComponent get(Context context) {
+    return ((HasComponent) ((HasRootComponent) context.getApplicationContext()).component())
+        .phoneLookupComponent();
+  }
+
+  /** Used to refer to the root application component. */
+  public interface HasComponent {
+    PhoneLookupComponent phoneLookupComponent();
+  }
+}
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupModule.java b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
new file mode 100644
index 0000000..400caff
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
@@ -0,0 +1,33 @@
+/*
+ * 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.phonelookup.composite.CompositePhoneLookup;
+import com.android.dialer.phonelookup.cp2.Cp2PhoneLookup;
+import com.google.common.collect.ImmutableList;
+import dagger.Module;
+import dagger.Provides;
+
+/** Dagger module which binds the PhoneLookup implementation. */
+@Module
+public abstract class PhoneLookupModule {
+
+  @Provides
+  static PhoneLookup providePhoneLookup(Cp2PhoneLookup cp2PhoneLookup) {
+    return new CompositePhoneLookup(ImmutableList.of(cp2PhoneLookup));
+  }
+}
diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
new file mode 100644
index 0000000..10b0e24
--- /dev/null
+++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
@@ -0,0 +1,84 @@
+/*
+ * 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.composite;
+
+import android.support.annotation.NonNull;
+import android.telecom.Call;
+import com.android.dialer.DialerPhoneNumber;
+import com.android.dialer.phonelookup.PhoneLookup;
+import com.android.dialer.phonelookup.PhoneLookupInfo;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * {@link PhoneLookup} which delegates to a configured set of {@link PhoneLookup PhoneLookups},
+ * iterating, prioritizing, and coalescing data as necessary.
+ */
+public final class CompositePhoneLookup implements PhoneLookup {
+
+  private final ImmutableList<PhoneLookup> phoneLookups;
+
+  public CompositePhoneLookup(ImmutableList<PhoneLookup> phoneLookups) {
+    this.phoneLookups = phoneLookups;
+  }
+
+  /**
+   * Delegates to a set of dependent lookups to build a complete {@link PhoneLookupInfo}.
+   *
+   * <p>Note: If any of the dependent lookups fails, the returned future will also fail. If any of
+   * the dependent lookups does not complete, the returned future will also not complete.
+   */
+  @Override
+  public ListenableFuture<PhoneLookupInfo> lookup(@NonNull Call call) {
+    List<ListenableFuture<PhoneLookupInfo>> futures = new ArrayList<>();
+    for (PhoneLookup phoneLookup : phoneLookups) {
+      futures.add(phoneLookup.lookup(call));
+    }
+    return Futures.transform(
+        Futures.allAsList(futures),
+        new Function<List<PhoneLookupInfo>, PhoneLookupInfo>() {
+          @Override
+          public PhoneLookupInfo apply(List<PhoneLookupInfo> infos) {
+            PhoneLookupInfo.Builder mergedInfo = PhoneLookupInfo.newBuilder();
+            for (PhoneLookupInfo info : infos) {
+              mergedInfo.mergeFrom(info);
+            }
+            return mergedInfo.build();
+          }
+        },
+        MoreExecutors.directExecutor());
+  }
+
+  @Override
+  public ListenableFuture<Boolean> isDirty(
+      ImmutableSet<DialerPhoneNumber> phoneNumbers, long lastModified) {
+    return null;
+  }
+
+  @Override
+  public ListenableFuture<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>> bulkUpdate(
+      ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> existingInfoMap, long lastModified) {
+    return null;
+  }
+}
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java
index a3d97c6..f9fc1a6 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java
@@ -21,9 +21,12 @@
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.DeletedContacts;
+import android.support.annotation.NonNull;
 import android.support.v4.util.ArraySet;
+import android.telecom.Call;
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.inject.ApplicationContext;
 import com.android.dialer.phonelookup.PhoneLookup;
 import com.android.dialer.phonelookup.PhoneLookupInfo;
 import com.google.common.collect.ImmutableMap;
@@ -31,21 +34,28 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import java.util.Set;
+import javax.inject.Inject;
 
 /** PhoneLookup implementation for local contacts. */
 public final class Cp2PhoneLookup implements PhoneLookup {
 
-  private final Context context;
+  private final Context appContext;
 
-  Cp2PhoneLookup(Context context) {
-    this.context = context;
+  @Inject
+  Cp2PhoneLookup(@ApplicationContext Context appContext) {
+    this.appContext = appContext;
+  }
+
+  @Override
+  public ListenableFuture<PhoneLookupInfo> lookup(@NonNull Call call) {
+    throw new UnsupportedOperationException();
   }
 
   @Override
   public ListenableFuture<Boolean> isDirty(
       ImmutableSet<DialerPhoneNumber> phoneNumbers, long lastModified) {
     // TODO(calderwoodra): consider a different thread pool
-    return MoreExecutors.listeningDecorator(DialerExecutors.getLowPriorityThreadPool(context))
+    return MoreExecutors.listeningDecorator(DialerExecutors.getLowPriorityThreadPool(appContext))
         .submit(() -> isDirtyInternal(phoneNumbers, lastModified));
   }
 
@@ -58,7 +68,7 @@
   private Set<Long> getContactIdsFromPhoneNumbers(ImmutableSet<DialerPhoneNumber> phoneNumbers) {
     Set<Long> contactIds = new ArraySet<>();
     try (Cursor cursor =
-        context
+        appContext
             .getContentResolver()
             .query(
                 Phone.CONTENT_URI,
@@ -91,7 +101,7 @@
   /** Returns true if any contacts were modified after {@code lastModified}. */
   private boolean contactsUpdated(Set<Long> contactIds, long lastModified) {
     try (Cursor cursor =
-        context
+        appContext
             .getContentResolver()
             .query(
                 Contacts.CONTENT_URI,
@@ -126,7 +136,7 @@
   /** Returns true if any contacts were deleted after {@code lastModified}. */
   private boolean contactsDeleted(long lastModified) {
     try (Cursor cursor =
-        context
+        appContext
             .getContentResolver()
             .query(
                 DeletedContacts.CONTENT_URI,
diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
index b959e78..1027e5c 100644
--- a/java/com/android/dialer/phonelookup/phone_lookup_info.proto
+++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
@@ -7,9 +7,15 @@
 
 package com.android.dialer.phonelookup;
 
-// TODO(zachh) documentation
+// Contains information about a phone number, possibly from many sources.
+//
+// This message is organized into sub-messages where each sub-message
+// corresponds to an implementation of PhoneLookup. For example, the Cp2Info
+// corresponds to Cp2PhoneLookup class, and the Cp2PhoneLookup class alone is
+// responsible for populating its fields.
 message PhoneLookupInfo {
-  // TODO(calderwoodra): documentation
+  // Information about a PhoneNumber retrieved from CP2. Cp2PhoneLookup is
+  // responsible for populating the data in this message.
   message Cp2Info {
     optional string name = 1;
     optional string photo_uri = 2;
