diff --git a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
index 4e8c61f..017bdb5 100644
--- a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
+++ b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java
@@ -35,13 +35,10 @@
 
 import java.util.List;
 import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 
 public class EligibleCardChecker implements Callable<ContextualCard> {
 
     private static final String TAG = "EligibleCardChecker";
-    private static final long LATCH_TIMEOUT_MS = 300;
 
     private final Context mContext;
 
@@ -54,7 +51,7 @@
     }
 
     @Override
-    public ContextualCard call() throws Exception {
+    public ContextualCard call() {
         final long startTime = System.currentTimeMillis();
         final MetricsFeatureProvider metricsFeatureProvider =
                 FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
@@ -113,35 +110,10 @@
     @VisibleForTesting
     Slice bindSlice(Uri uri) {
         final SliceViewManager manager = SliceViewManager.getInstance(mContext);
-        final Slice[] returnSlice = new Slice[1];
-        final CountDownLatch latch = new CountDownLatch(1);
-        final SliceViewManager.SliceCallback callback =
-                new SliceViewManager.SliceCallback() {
-                    @Override
-                    public void onSliceUpdated(Slice slice) {
-                        try {
-                            // We are just making sure the existence of the slice, so ignore
-                            // slice loading state here.
-                            returnSlice[0] = slice;
-                            latch.countDown();
-                        } catch (Exception e) {
-                            Log.w(TAG, uri + " cannot be indexed", e);
-                        } finally {
-                            manager.unregisterSliceCallback(uri, this);
-                        }
-                    }
-                };
-        // Register a callback until we get a loaded slice.
-        manager.registerSliceCallback(uri, callback);
-        // Trigger the binding.
-        callback.onSliceUpdated(manager.bindSlice(uri));
-        try {
-            latch.await(LATCH_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-        } catch (InterruptedException e) {
-            Log.w(TAG, "Error waiting for slice binding for uri" + uri, e);
-            manager.unregisterSliceCallback(uri, callback);
-        }
-        return returnSlice[0];
+        manager.pinSlice(uri);
+        final Slice slice = manager.bindSlice(uri);
+        manager.unpinSlice(uri);
+        return slice;
     }
 
     @VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
index 613062f..67f0462 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java
@@ -77,9 +77,9 @@
 
     @Test
     public void isCardEligibleToDisplay_invalidScheme_returnFalse() {
-        final Uri sliceUri = Uri.parse("contet://com.android.settings.slices/action/flashlight");
+        final Uri invalidUri = Uri.parse("contet://com.android.settings.slices/action/flashlight");
 
-        assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(sliceUri)))
+        assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(invalidUri)))
                 .isFalse();
     }
 
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java
index 722833c..06edf2b 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRendererTest.java
@@ -86,10 +86,10 @@
 
     @Test
     public void bindView_invalidScheme_sliceShouldBeNull() {
-        final Uri sliceUri = Uri.parse("contet://com.android.settings.slices/action/flashlight");
+        final Uri invalidUri = Uri.parse("contet://com.android.settings.slices/action/flashlight");
         final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
 
-        mRenderer.bindView(viewHolder, buildContextualCard(sliceUri));
+        mRenderer.bindView(viewHolder, buildContextualCard(invalidUri));
 
         assertThat(
                 ((SliceFullCardRendererHelper.SliceViewHolder) viewHolder).sliceView.getSlice())
