diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java
index 018ac10..b937440 100644
--- a/InCallUI/src/com/android/incallui/CallList.java
+++ b/InCallUI/src/com/android/incallui/CallList.java
@@ -102,22 +102,26 @@
                 }
             };
             handler.postDelayed(runnable, BLOCK_QUERY_TIMEOUT_MS);
-            mFilteredQueryHandler.isBlocked(
-                    new FilteredNumberAsyncQueryHandler.OnCheckBlockedListener() {
-                        @Override
-                        public void onCheckComplete(final Integer id) {
-                            if (!hasTimedOut.get()) {
-                                handler.removeCallbacks(runnable);
-                            }
-                            if (id == null) {
+            try {
+                mFilteredQueryHandler.isBlocked(
+                        new FilteredNumberAsyncQueryHandler.OnCheckBlockedListener() {
+                            @Override
+                            public void onCheckComplete(final Integer id) {
                                 if (!hasTimedOut.get()) {
-                                    onCallAddedInternal(call);
+                                    handler.removeCallbacks(runnable);
                                 }
-                            } else {
-                                call.blockCall();
+                                if (id == null) {
+                                    if (!hasTimedOut.get()) {
+                                        onCallAddedInternal(call);
+                                    }
+                                } else {
+                                    call.blockCall();
+                                }
                             }
-                        }
-                    }, null, call.getNumber(), countryIso);
+                        }, null, call.getNumber(), countryIso);
+            } catch (IllegalArgumentException e) {
+                Log.d(this, "onCallAdded: invalid number, skipping block checking");
+            }
         } else {
             onCallAddedInternal(call);
         }
diff --git a/InCallUI/src/com/android/incallui/CallerInfo.java b/InCallUI/src/com/android/incallui/CallerInfo.java
index 54cee0f..5de03d8 100644
--- a/InCallUI/src/com/android/incallui/CallerInfo.java
+++ b/InCallUI/src/com/android/incallui/CallerInfo.java
@@ -241,7 +241,12 @@
                 // in the database.
                 columnIndex = cursor.getColumnIndex(PhoneLookup.CUSTOM_RINGTONE);
                 if ((columnIndex != -1) && (cursor.getString(columnIndex) != null)) {
-                    info.contactRingtoneUri = Uri.parse(cursor.getString(columnIndex));
+                    if (cursor.getString(columnIndex).equals("")) {
+                        // make it consistent with frameworks/base/.../CallerInfo.java
+                        info.contactRingtoneUri = Uri.EMPTY;
+                    } else {
+                        info.contactRingtoneUri = Uri.parse(cursor.getString(columnIndex));
+                    }
                 } else {
                     info.contactRingtoneUri = null;
                 }
