diff --git a/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java b/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java
index 57809ac..ba8e7a1 100644
--- a/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java
+++ b/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java
@@ -24,6 +24,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.ResultReceiver;
+import android.text.TextUtils;
 import android.util.Log;
 import android.util.Patterns;
 
@@ -90,8 +91,6 @@
                 String packageName = inputExtras.getString(
                         PackageManager.EXTRA_INTENT_FILTER_VERIFICATION_PACKAGE_NAME);
 
-                Log.i(TAG, "Verify IntentFilter for " + hosts);
-
                 Bundle extras = new Bundle();
                 extras.putString(DirectStatementService.EXTRA_RELATION, HANDLE_ALL_URLS_RELATION);
 
@@ -103,6 +102,7 @@
                     return;
                 }
 
+                ArrayList<String> finalHosts = new ArrayList<String>(hostList.length);
                 try {
                     ArrayList<String> sourceAssets = new ArrayList<String>();
                     for (String host : hostList) {
@@ -111,6 +111,7 @@
                             host = host.substring(2);
                         }
                         sourceAssets.add(createWebAssetString(scheme, host));
+                        finalHosts.add(host);
                     }
                     extras.putStringArrayList(DirectStatementService.EXTRA_SOURCE_ASSET_DESCRIPTORS,
                             sourceAssets);
@@ -131,6 +132,9 @@
                         new IsAssociatedResultReceiver(
                                 new Handler(), context.getPackageManager(), verificationId));
 
+                // Required for CTS: log a few details of the validcation operation to be performed
+                logValidationParametersForCTS(verificationId, scheme, finalHosts, packageName);
+
                 serviceIntent.putExtras(extras);
                 context.startService(serviceIntent);
             }
@@ -139,6 +143,15 @@
         }
     }
 
+    // CTS requirement: logging of the validation parameters in a specific format
+    private static final String CTS_LOG_FORMAT =
+            "Verifying IntentFilter. verificationId:%d scheme:\"%s\" hosts:\"%s\" package:\"%s\".";
+    private void logValidationParametersForCTS(int verificationId, String scheme,
+            ArrayList<String> finalHosts, String packageName) {
+        String hostString = TextUtils.join(" ", finalHosts.toArray());
+        Log.i(TAG, String.format(CTS_LOG_FORMAT, verificationId, scheme, hostString, packageName));
+    }
+
     private String createAndroidAssetString(Context context, String packageName)
             throws NameNotFoundException {
         if (!ANDROID_PACKAGE_NAME_PATTERN.matcher(packageName).matches()) {
