diff --git a/src/com/android/contacts/list/ContactBrowseListContextMenuAdapter.java b/src/com/android/contacts/list/ContactBrowseListContextMenuAdapter.java
index b288a29..9ed6ad9 100644
--- a/src/com/android/contacts/list/ContactBrowseListContextMenuAdapter.java
+++ b/src/com/android/contacts/list/ContactBrowseListContextMenuAdapter.java
@@ -69,7 +69,7 @@
 
         if (adapter.getHasPhoneNumber(position)) {
             final Context context = mContactListFragment.getContext();
-            boolean hasPhoneApp = PhoneCapabilityTester.isPhoneCallIntentRegistered(context);
+            boolean hasPhoneApp = PhoneCapabilityTester.isPhone(context);
             boolean hasSmsApp = PhoneCapabilityTester.isSmsIntentRegistered(context);
             // Calling contact
             if (hasPhoneApp) menu.add(0, MENU_ITEM_CALL, 0, R.string.menu_call);
diff --git a/src/com/android/contacts/util/PhoneCapabilityTester.java b/src/com/android/contacts/util/PhoneCapabilityTester.java
index 4b6c17e..8383617 100644
--- a/src/com/android/contacts/util/PhoneCapabilityTester.java
+++ b/src/com/android/contacts/util/PhoneCapabilityTester.java
@@ -37,11 +37,17 @@
     }
 
     /**
-     * Returns true if this device has a Phone application installed.
+     * Returns true if this device can be used to make phone calls
      */
-    public static boolean isPhoneCallIntentRegistered(Context context) {
-        final Intent intent = new Intent(
-                Intent.ACTION_CALL_PRIVILEGED, Uri.fromParts(Constants.SCHEME_TEL, "", null));
+    public static boolean isPhone(Context context) {
+        // Is the device physically capabable of making phone calls?
+        if (!context.getResources().getBoolean(com.android.internal.R.bool.config_voice_capable)) {
+            return false;
+        }
+
+        // Is there an app registered that accepts the call intent?
+        final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+                Uri.fromParts(Constants.SCHEME_TEL, "", null));
         return isIntentRegistered(context, intent);
     }
 
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index d61b346..6ac36a8 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -242,7 +242,7 @@
      * Build up the entries to display on the screen.
      */
     private final void buildEntries() {
-        mHasPhone = PhoneCapabilityTester.isPhoneCallIntentRegistered(mContext);
+        mHasPhone = PhoneCapabilityTester.isPhone(mContext);
         mHasSms = PhoneCapabilityTester.isSmsIntentRegistered(mContext);
 
         // Clear out the old entries
@@ -799,7 +799,7 @@
         // Options only shows telephony-related settings (ringtone, send to voicemail).
         // ==> Hide if we don't have a telephone
         final MenuItem optionsMenu = menu.findItem(R.id.menu_options);
-        final boolean deviceHasPhone = PhoneCapabilityTester.isPhoneCallIntentRegistered(mContext);
+        final boolean deviceHasPhone = PhoneCapabilityTester.isPhone(mContext);
         optionsMenu.setVisible(deviceHasPhone);
     }
 
@@ -807,7 +807,7 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.menu_edit: {
-                mListener.onEditRequested(mLookupUri);
+                if (mListener != null) mListener.onEditRequested(mLookupUri);
                 break;
             }
             case R.id.menu_delete: {
@@ -991,7 +991,7 @@
             if (data == ContactLoader.Result.NOT_FOUND) {
                 // Item has been deleted
                 Log.i(TAG, "No contact found. Closing activity");
-                mListener.onContactNotFound();
+                if (mListener != null) mListener.onContactNotFound();
                 return;
             }
             mContactData = data;
