diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 014ea7e..4141351 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -1105,8 +1105,21 @@
 
     @Override
     public void onCallNumberDirectly(String phoneNumber) {
-        final PhoneAccount account = mAccountManager != null?
-                mAccountManager.getCurrentAccount(): null;
+        onCallNumberDirectly(phoneNumber, false /* isVideoCall */);
+    }
+
+    @Override
+    public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall) {
+        if (isVideoCall) {
+            //TODO: Dispatch intent with video call extras specified, then remove this toast.
+            Toast toast = Toast.makeText(getApplicationContext(),
+                    "Feature development in progress.", Toast.LENGTH_SHORT);
+            toast.show();
+            return;
+        }
+
+        final PhoneAccount account = mAccountManager != null ?
+                mAccountManager.getCurrentAccount() : null;
         Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin(), account);
         DialerUtils.startActivityWithErrorToast(this, intent);
         mClearSearchOnPause = true;
diff --git a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
index abceda4..9fb2239 100644
--- a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
+++ b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
@@ -28,8 +28,9 @@
     public final static int SHORTCUT_INVALID = -1;
     public final static int SHORTCUT_DIRECT_CALL = 0;
     public final static int SHORTCUT_ADD_NUMBER_TO_CONTACTS = 1;
+    public final static int SHORTCUT_MAKE_VIDEO_CALL = 2;
 
-    public final static int SHORTCUT_COUNT = 2;
+    public final static int SHORTCUT_COUNT = 3;
 
     private final boolean[] mShortcutEnabled = new boolean[SHORTCUT_COUNT];
 
@@ -145,12 +146,17 @@
                 text = resources.getString(R.string.search_shortcut_add_to_contacts);
                 drawableId = R.drawable.ic_search_add_contact;
                 break;
+            case SHORTCUT_MAKE_VIDEO_CALL:
+                text = resources.getString(R.string.search_shortcut_make_video_call);
+                drawableId = R.drawable.ic_videocam;
+                break;
             default:
                 throw new IllegalArgumentException("Invalid shortcut type");
         }
         v.setDrawableResource(R.drawable.search_shortcut_background, drawableId);
         v.setDisplayName(text);
         v.setPhotoPosition(super.getPhotoPosition());
+        v.setAdjustSelectionBoundsEnabled(false);
     }
 
     public void setShortcutEnabled(int shortcutType, boolean visible) {
diff --git a/src/com/android/dialer/list/RegularSearchListAdapter.java b/src/com/android/dialer/list/RegularSearchListAdapter.java
index d0617b7..2bceaf9 100644
--- a/src/com/android/dialer/list/RegularSearchListAdapter.java
+++ b/src/com/android/dialer/list/RegularSearchListAdapter.java
@@ -73,6 +73,9 @@
         // a dialable number, then clicking add to contact should add it as a number.
         // Otherwise, it should add it to a new contact as a name.
         setShortcutEnabled(SHORTCUT_ADD_NUMBER_TO_CONTACTS, showNumberShortcuts);
+        // TODO: Write utility method to check subscriptions and settings, and use it to determine
+        // whether to enable or disable video call shortcut.
+        setShortcutEnabled(SHORTCUT_MAKE_VIDEO_CALL, showNumberShortcuts);
         super.setQueryString(queryString);
     }
 }
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 03d2242..e2cea41 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -147,21 +147,31 @@
     protected void onItemClick(int position, long id) {
         final DialerPhoneNumberListAdapter adapter = (DialerPhoneNumberListAdapter) getAdapter();
         final int shortcutType = adapter.getShortcutTypeFromPosition(position);
+        final OnPhoneNumberPickerActionListener listener;
 
-        if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_INVALID) {
-            super.onItemClick(position, id);
-        } else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL) {
-            final OnPhoneNumberPickerActionListener listener =
-                    getOnPhoneNumberPickerListener();
-            if (listener != null) {
-                listener.onCallNumberDirectly(getQueryString());
-            }
-        } else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS) {
-            final String number = TextUtils.isEmpty(mAddToContactNumber) ?
-                    adapter.getFormattedQueryString() : mAddToContactNumber;
-            final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
-            DialerUtils.startActivityWithErrorToast(getActivity(), intent,
-                    R.string.add_contact_not_available);
+        switch (shortcutType) {
+            case DialerPhoneNumberListAdapter.SHORTCUT_INVALID:
+                super.onItemClick(position, id);
+                break;
+            case DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL:
+                listener = getOnPhoneNumberPickerListener();
+                if (listener != null) {
+                    listener.onCallNumberDirectly(getQueryString());
+                }
+                break;
+            case DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS:
+                final String number = TextUtils.isEmpty(mAddToContactNumber) ?
+                        adapter.getFormattedQueryString() : mAddToContactNumber;
+                final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
+                DialerUtils.startActivityWithErrorToast(getActivity(), intent,
+                        R.string.add_contact_not_available);
+                break;
+            case DialerPhoneNumberListAdapter.SHORTCUT_MAKE_VIDEO_CALL:
+                listener = getOnPhoneNumberPickerListener();
+                if (listener != null) {
+                    listener.onCallNumberDirectly(getQueryString(), true /* isVideoCall */);
+                }
+                break;
         }
     }
 
diff --git a/src/com/android/dialer/list/SmartDialNumberListAdapter.java b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
index 25d442e..d9aa846 100644
--- a/src/com/android/dialer/list/SmartDialNumberListAdapter.java
+++ b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
@@ -22,6 +22,7 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Callable;
 import android.telephony.PhoneNumberUtils;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.contacts.common.list.ContactListItemView;
@@ -112,4 +113,14 @@
             return null;
         }
     }
+
+    @Override
+    public void setQueryString(String queryString) {
+        final boolean showNumberShortcuts = !TextUtils.isEmpty(getFormattedQueryString());
+        setShortcutEnabled(SHORTCUT_ADD_NUMBER_TO_CONTACTS, showNumberShortcuts);
+        // TODO: Write utility method to check subscriptions and settings, and use it to determine
+        // whether to enable or disable video call shortcut.
+        setShortcutEnabled(SHORTCUT_MAKE_VIDEO_CALL, showNumberShortcuts);
+        super.setQueryString(queryString);
+    }
 }
