diff --git a/android/OldPhoneNumberUtils.cpp b/android/OldPhoneNumberUtils.cpp
index 9846a1c..3a69e0c 100644
--- a/android/OldPhoneNumberUtils.cpp
+++ b/android/OldPhoneNumberUtils.cpp
@@ -159,13 +159,13 @@
  * enough for caller ID purposes.
  *
  * - Compares from right to left
- * - requires MIN_MATCH (7) characters to match
+ * - requires minimum characters to match
  * - handles common trunk prefixes and international prefixes
  *   (basically, everything except the Russian trunk prefix)
  *
  * Tolerates nulls
  */
-bool phone_number_compare_loose(const char* a, const char* b)
+bool phone_number_compare_loose_with_minmatch(const char* a, const char* b, int min_match)
 {
     int ia, ib;
     int matched;
@@ -216,11 +216,11 @@
         }
     }
 
-    if (matched < MIN_MATCH) {
+    if (matched < min_match) {
         const int effectiveALen = strlen(a) - numSeparatorCharsInA;
         const int effectiveBLen = strlen(b) - numSeparatorCharsInB;
 
-        // if the number of dialable chars in a and b match, but the matched chars < MIN_MATCH,
+        // if the number of dialable chars in a and b match, but the matched chars < min_match,
         // treat them as equal (i.e. 404-04 and 40404)
         if (effectiveALen == effectiveBLen && effectiveALen == matched) {
             return true;
@@ -230,7 +230,7 @@
     }
 
     // At least one string has matched completely;
-    if (matched >= MIN_MATCH && (ia < 0 || ib < 0)) {
+    if (matched >= min_match && (ia < 0 || ib < 0)) {
         return true;
     }
 
@@ -274,4 +274,9 @@
     return false;
 }
 
+bool phone_number_compare_loose(const char* a, const char* b)
+{
+    return phone_number_compare_loose_with_minmatch(a, b, MIN_MATCH);
+}
+
 }  // namespace android
diff --git a/android/PhoneNumberUtils.h b/android/PhoneNumberUtils.h
index 58b9ab8..80776bb 100644
--- a/android/PhoneNumberUtils.h
+++ b/android/PhoneNumberUtils.h
@@ -21,6 +21,7 @@
 namespace android {
 
 bool phone_number_compare_loose(const char* a, const char* b);
+bool phone_number_compare_loose_with_minmatch(const char* a, const char* b, int min_match);
 bool phone_number_compare_strict(const char* a, const char* b);
 bool phone_number_stripped_reversed_inter(const char* in, char* out, const int len, int *outlen);
 
diff --git a/android/sqlite3_android.cpp b/android/sqlite3_android.cpp
index 659ee6c..d2f1802 100644
--- a/android/sqlite3_android.cpp
+++ b/android/sqlite3_android.cpp
@@ -79,7 +79,7 @@
 
 static void phone_numbers_equal(sqlite3_context * context, int argc, sqlite3_value ** argv)
 {
-    if (argc != 2 && argc != 3) {
+    if (argc != 2 && argc != 3 && argc != 4) {
         sqlite3_result_int(context, 0);
         return;
     }
@@ -88,8 +88,12 @@
     char const * num2 = (char const *)sqlite3_value_text(argv[1]);
 
     bool use_strict = false;
-    if (argc == 3) {
+    int min_match = 0;
+    if (argc == 3 || argc == 4) {
         use_strict = (sqlite3_value_int(argv[2]) != 0);
+        if (!use_strict && argc == 4) {
+            min_match = sqlite3_value_int(argv[3]);
+        }
     }
 
     if (num1 == NULL || num2 == NULL) {
@@ -98,9 +102,11 @@
     }
 
     bool equal =
-        (use_strict ?
-         android::phone_number_compare_strict(num1, num2) :
-         android::phone_number_compare_loose(num1, num2));
+        (use_strict ? android::phone_number_compare_strict(num1, num2)
+                    : ((min_match > 0)
+                           ? android::phone_number_compare_loose_with_minmatch(
+                                 num1, num2, min_match)
+                           : android::phone_number_compare_loose(num1, num2)));
 
     if (equal) {
         sqlite3_result_int(context, 1);
@@ -543,6 +549,14 @@
         return err;
     }
 
+    // Register the PHONE_NUM_EQUALS function with additional arguments "use_strict" and "min_match"
+    err = sqlite3_create_function(
+        handle, "PHONE_NUMBERS_EQUAL", 4,
+        SQLITE_UTF8, NULL, phone_numbers_equal, NULL, NULL);
+    if (err != SQLITE_OK) {
+        return err;
+    }
+
     // Register the _DELETE_FILE function
     err = sqlite3_create_function(handle, "_DELETE_FILE", 1, SQLITE_UTF8, NULL, delete_file, NULL, NULL);
     if (err != SQLITE_OK) {
