diff --git a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
index edecca0..d1dc8b4 100644
--- a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
@@ -52,17 +52,17 @@
 
     @Override
     public List<ContactInteraction> loadInBackground() {
-        final boolean isPhoneNumbersEmpty = mPhoneNumbers == null || mPhoneNumbers.length <= 0;
-        final boolean isSipNumbersEmpty = mSipNumbers == null || mSipNumbers.length <= 0;
+        final boolean hasPhoneNumber = mPhoneNumbers != null && mPhoneNumbers.length > 0;
+        final boolean hasSipNumber = mSipNumbers != null && mSipNumbers.length > 0;
         if (!PermissionsUtil.hasPhonePermissions(getContext())
                 || !getContext().getPackageManager()
                         .hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
-                || (isPhoneNumbersEmpty && isSipNumbersEmpty) || mMaxToRetrieve <= 0) {
+                || (!hasPhoneNumber && !hasSipNumber) || mMaxToRetrieve <= 0) {
             return Collections.emptyList();
         }
 
         final List<ContactInteraction> interactions = new ArrayList<>();
-        if (!isPhoneNumbersEmpty) {
+        if (hasPhoneNumber) {
             for (String number : mPhoneNumbers) {
                 final String normalizedNumber = PhoneNumberUtilsCompat.normalizeNumber(number);
                 if (!TextUtils.isEmpty(normalizedNumber)) {
@@ -70,7 +70,7 @@
                 }
             }
         }
-        if (!isSipNumbersEmpty) {
+        if (hasSipNumber) {
             for (String number : mSipNumbers) {
                 interactions.addAll(getCallLogInteractions(number));
             }
@@ -90,7 +90,8 @@
             }
         });
         // Duplicates only occur because of fuzzy matching. No need to dedupe a single number.
-        if (mPhoneNumbers.length == 1) {
+        if ((hasPhoneNumber && mPhoneNumbers.length == 1 && !hasSipNumber)
+                || (hasSipNumber && mSipNumbers.length == 1 && !hasPhoneNumber)) {
             return interactions;
         }
         return pruneDuplicateCallLogInteractions(interactions, mMaxToRetrieve);
