diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 039ce2b..7157e88 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -404,7 +404,7 @@
                 }
 
                 final DataKind kind = accountTypes.getKindOrFallback(
-                        accountType, mimeType, mContext);
+                        accountType, mimeType);
                 if (kind == null) continue;
 
                 final ViewEntry entry = ViewEntry.fromValues(mContext, mimeType, kind, dataId,
@@ -461,7 +461,7 @@
                     if (status != null) {
                         final String imMime = Im.CONTENT_ITEM_TYPE;
                         final DataKind imKind = accountTypes.getKindOrFallback(accountType,
-                                imMime, mContext);
+                                imMime);
                         final ViewEntry imEntry = ViewEntry.fromValues(mContext,
                                 imMime, imKind, dataId, entryValues);
                         buildImActions(imEntry, entryValues);
diff --git a/src/com/android/contacts/model/AccountType.java b/src/com/android/contacts/model/AccountType.java
index 456b27b..0f67fba 100644
--- a/src/com/android/contacts/model/AccountType.java
+++ b/src/com/android/contacts/model/AccountType.java
@@ -143,7 +143,7 @@
     /**
      * Find the {@link DataKind} for a specific MIME-type, if it's handled by
      * this data source. If you may need a fallback {@link DataKind}, use
-     * {@link AccountTypeManager#getKindOrFallback(String, String, Context)}.
+     * {@link AccountTypeManager#getKindOrFallback(String, String)}.
      */
     public DataKind getKindForMimetype(String mimeType) {
         return this.mMimeKinds.get(mimeType);
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
index cbfc750..8587240 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -78,7 +78,7 @@
      * {@link AccountType#accountType} and {@link DataKind#mimeType}. If no
      * direct match found, we try searching {@link FallbackAccountType}.
      */
-    public DataKind getKindOrFallback(String accountType, String mimeType, Context context) {
+    public DataKind getKindOrFallback(String accountType, String mimeType) {
         final AccountType type = getAccountType(accountType);
         return type == null ? null : type.getKindForMimetype(mimeType);
     }
@@ -341,7 +341,7 @@
      * direct match found, we try searching {@link FallbackAccountType}.
      */
     @Override
-    public DataKind getKindOrFallback(String accountType, String mimeType, Context context) {
+    public DataKind getKindOrFallback(String accountType, String mimeType) {
         ensureAccountsLoaded();
         DataKind kind = null;
 
diff --git a/src/com/android/contacts/quickcontact/QuickContactWindow.java b/src/com/android/contacts/quickcontact/QuickContactWindow.java
index ce7580c..063d446 100644
--- a/src/com/android/contacts/quickcontact/QuickContactWindow.java
+++ b/src/com/android/contacts/quickcontact/QuickContactWindow.java
@@ -681,7 +681,7 @@
                 continue;
             }
 
-            final DataKind kind = accountTypes.getKindOrFallback(accountType, mimeType, mContext);
+            final DataKind kind = accountTypes.getKindOrFallback(accountType, mimeType);
 
             if (kind != null) {
                 // Build an action for this data entry, find a mapping to a UI
@@ -710,7 +710,7 @@
             final boolean hasPresence = !cursor.isNull(DataQuery.PRESENCE);
             if (hasPresence && Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
                 final DataKind imKind = accountTypes.getKindOrFallback(accountType,
-                        Im.CONTENT_ITEM_TYPE, mContext);
+                        Im.CONTENT_ITEM_TYPE);
                 if (imKind != null) {
                     final DataAction action = new DataAction(mContext, Im.CONTENT_ITEM_TYPE, imKind,
                             dataId, cursor);
@@ -723,7 +723,7 @@
                 int chatCapability = cursor.getInt(DataQuery.CHAT_CAPABILITY);
                 if ((chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0) {
                     final DataKind imKind = accountTypes.getKindOrFallback(accountType,
-                            Im.CONTENT_ITEM_TYPE, mContext);
+                            Im.CONTENT_ITEM_TYPE);
                     if (imKind != null) {
                         final DataAction chatAction = new DataAction(mContext,
                                 Constants.MIME_TYPE_VIDEO_CHAT, imKind, dataId, cursor);
