diff --git a/src/com/android/telecomm/CallServiceFinder.java b/src/com/android/telecomm/CallServiceFinder.java
index 4ee73c3..6cf86b0 100644
--- a/src/com/android/telecomm/CallServiceFinder.java
+++ b/src/com/android/telecomm/CallServiceFinder.java
@@ -77,6 +77,13 @@
     private int mNextLookupId = 0;
 
     /**
+     * The set of bound call-services. Only populated via initiateLookup scenarios. Entries should
+     * only be removed upon unbinding.
+     * TODO(gilad): Add the necessary logic to keep this set up to date.
+     */
+    private Set<ICallService> mCallServiceRegistry = Sets.newHashSet();
+
+    /**
      * The set of bound call-service providers.  Only populated via initiateLookup scenarios.
      * Providers should only be removed upon unbinding.
      */
@@ -267,6 +274,7 @@
      * queue.
      * TODO(gilad): Santos has some POC code to make synchronized (below) unnecessary, either
      * move to use that or remove this to-do.
+     * TODO(gilad): callServices should probably be a set, consider refactoring.
      *
      * @param lookupId The lookup-cycle ID.
      * @param providerName The component name of the relevant provider.
@@ -284,6 +292,12 @@
 
         if (mUnregisteredProviders.remove(providerName)) {
             mProviderRegistry.add(provider);
+            mCallServiceRegistry.addAll(callServices);
+
+            // TODO(gilad): Introduce a map to retain the association between call services
+            // and the corresponding provider such that mCallServiceRegistry can be updated
+            // upon unregisterProvider calls.
+
             if (mUnregisteredProviders.size() < 1) {
                 terminateLookup();  // No other providers to wait for.
             }
@@ -318,8 +332,6 @@
      */
     private void updateSwitchboard() {
         ThreadUtil.checkOnMainThread();
-
-        // TODO(gilad): More here.
-        mSwitchboard.setCallServices(null);
+        mSwitchboard.setCallServices(mCallServiceRegistry);
     }
 }
diff --git a/src/com/android/telecomm/CallServiceSelectorFinder.java b/src/com/android/telecomm/CallServiceSelectorFinder.java
index 50a4393..0270e3d 100644
--- a/src/com/android/telecomm/CallServiceSelectorFinder.java
+++ b/src/com/android/telecomm/CallServiceSelectorFinder.java
@@ -258,9 +258,7 @@
      */
     private void terminateLookup() {
         mHandler.removeCallbacks(mLookupTerminator);
-
         updateSwitchboard();
-        mIsLookupInProgress = false;
     }
 
     /**
@@ -269,7 +267,7 @@
     private void updateSwitchboard() {
         ThreadUtil.checkOnMainThread();
 
-        // TODO(gilad): More here.
-        mSwitchboard.setSelectors(null);
+        mSwitchboard.setSelectors(mSelectorRegistry);
+        mIsLookupInProgress = false;
     }
 }
\ No newline at end of file
diff --git a/src/com/android/telecomm/Switchboard.java b/src/com/android/telecomm/Switchboard.java
index 4abebce..52bacd9 100644
--- a/src/com/android/telecomm/Switchboard.java
+++ b/src/com/android/telecomm/Switchboard.java
@@ -48,13 +48,18 @@
 
     private CallServiceSelectorFinder mSelectorFinder = new CallServiceSelectorFinder(this);
 
-    /** TODO(gilad): Add comment, may also want to use a set instead. */
-    /** TODO(gilad): Null out once the active-call count goes to zero. */
-    private List<ICallService> mCallServices;
+    /**
+     * The set of currently available call-service implementations, see {@link CallServiceFinder}.
+     * TODO(gilad): Null out once the active-call count goes to zero.
+     */
+    private Set<ICallService> mCallServices;
 
-    /** TODO(gilad): Add comment, may also want to use a set instead. */
-    /** TODO(gilad): Null out once the active-call count goes to zero. */
-    private List<ICallServiceSelector> mSelectors;
+    /**
+     * The set of currently available call-service-selector implementations,
+     * see {@link CallServiceSelectorFinder}.
+     * TODO(gilad): Null out once the active-call count goes to zero.
+     */
+    private Set<ICallServiceSelector> mSelectors;
 
     private Set<Call> mPendingOutgoingCalls = Sets.newHashSet();
 
@@ -94,15 +99,15 @@
     }
 
     /**
-     * Persists the specified list of call services and attempts to connect any pending outgoing
-     * calls still waiting for a matching call-service to be initiated. Intended to be called by
-     * {@link CallServiceFinder} exclusively.
+     * Persists the specified set of call services and attempts to connect any pending outgoing
+     * calls (still waiting for a matching call-service to be initiated). Intended to be called
+     * by {@link CallServiceFinder} exclusively.
      *
-     * @param callServices The potentially-partial list of call services.  Partial since the
-     *     lookup procedure is time-boxed, such that some providers/call-services may be slow
-     *     to respond and hence effectively omitted from the specified list.
+     * @param callServices The potentially-partial set of call services.  Partial since the lookup
+     *     process is time-boxed, such that some providers/call-services may be slow to respond and
+     *     hence effectively omitted from the specified list.
      */
-    void setCallServices(List<ICallService> callServices) {
+    void setCallServices(Set<ICallService> callServices) {
         ThreadUtil.checkOnMainThread();
 
         mCallServices = callServices;
@@ -113,11 +118,11 @@
      * Persists the specified list of selectors and attempts to connect any pending outgoing
      * calls.  Intended to be called by {@link CallServiceSelectorFinder} exclusively.
      *
-     * @param selectors The potentially-partial list of selectors.  Partial since the lookup
-     *     procedure is time-boxed, such that some selectors may be slow to respond and hence
-     *     effectively omitted from the specified list.
+     * @param selectors The potentially-partial set of selectors.  Partial since the lookup
+     *     procedure is time-boxed such that some selectors may be slow to respond and hence
+     *     effectively omitted from the specified set.
      */
-    void setSelectors(List<ICallServiceSelector> selectors) {
+    void setSelectors(Set<ICallServiceSelector> selectors) {
         ThreadUtil.checkOnMainThread();
 
         mSelectors = selectors;
