diff --git a/src/com/android/phone/ImsProvisioningController.java b/src/com/android/phone/ImsProvisioningController.java
index 98a6e89..acedf22 100644
--- a/src/com/android/phone/ImsProvisioningController.java
+++ b/src/com/android/phone/ImsProvisioningController.java
@@ -124,14 +124,14 @@
      * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_VIDEO_INT
      * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_UT_INT
      * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_SMS_INT
-     * CarrierConfigManager.Ims.KEY_CAPABILITY_CALL_COMPOSER_INT
+     * CarrierConfigManager.Ims.KEY_CAPABILITY_TYPE_CALL_COMPOSER_INT
      */
     private static final Map<Integer, String> KEYS_MMTEL_CAPABILITY = Map.of(
             CAPABILITY_TYPE_VOICE, Ims.KEY_CAPABILITY_TYPE_VOICE_INT_ARRAY,
             CAPABILITY_TYPE_VIDEO, Ims.KEY_CAPABILITY_TYPE_VIDEO_INT_ARRAY,
             CAPABILITY_TYPE_UT, Ims.KEY_CAPABILITY_TYPE_UT_INT_ARRAY,
             CAPABILITY_TYPE_SMS, Ims.KEY_CAPABILITY_TYPE_SMS_INT_ARRAY,
-            CAPABILITY_TYPE_CALL_COMPOSER, Ims.KEY_CAPABILITY_CALL_COMPOSER_INT_ARRAY
+            CAPABILITY_TYPE_CALL_COMPOSER, Ims.KEY_CAPABILITY_TYPE_CALL_COMPOSER_INT_ARRAY
     );
 
     /**
@@ -1136,8 +1136,6 @@
      */
     @VisibleForTesting
     public int getProvisioningValue(int subId, int key) {
-        log("getProvisioningValue");
-
         // check key value
         if (!Arrays.stream(LOCAL_IMS_CONFIG_KEYS).anyMatch(keyValue -> keyValue == key)) {
             log("not matched key " + key);
@@ -1164,6 +1162,7 @@
                         capability, tech);
             }
             if (result != ImsProvisioningLoader.STATUS_NOT_SET) {
+                log("getProvisioningValue from loader : key " + key + " result " + result);
                 return result;
             }
         }
@@ -1176,6 +1175,8 @@
                         + capability);
                 return result;
             }
+            log("getProvisioningValue from vendor : key " + key + " result " + result);
+
             setAndNotifyRcsProvisioningValueForAllTech(subId, capability, getBoolValue(result));
             return result;
         } else {
@@ -1185,6 +1186,8 @@
                         + capability);
                 return result;
             }
+            log("getProvisioningValue from vendor : key " + key + " result " + result);
+
             setAndNotifyMmTelProvisioningValue(subId, capability, tech, getBoolValue(result));
             return result;
         }
diff --git a/src/com/android/phone/ImsProvisioningLoader.java b/src/com/android/phone/ImsProvisioningLoader.java
index a9aac26..1238b9a 100644
--- a/src/com/android/phone/ImsProvisioningLoader.java
+++ b/src/com/android/phone/ImsProvisioningLoader.java
@@ -110,6 +110,8 @@
                 subIdBundle = new PersistableBundle();
                 for (int tech : regTech) {
                     int UtProvisioningStatus = getUTProvisioningStatus(subId, tech);
+                    logd("check UT provisioning status " + UtProvisioningStatus);
+
                     if (STATUS_PROVISIONED == UtProvisioningStatus) {
                         setProvisioningStatusToSubIdBundle(ImsFeature.FEATURE_MMTEL, tech,
                                 MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT, subIdBundle,
@@ -178,6 +180,9 @@
 
     private void setProvisioningStatusToSubIdBundle(int imsFeature, int tech,
             int capability, PersistableBundle subIdBundle, int newStatus) {
+        logd("set provisioning status " + newStatus + " ImsFeature "
+                + imsFeature + " tech " + tech + " capa " + capability);
+
         PersistableBundle regTechBundle = subIdBundle.getPersistableBundle(
                 String.valueOf(imsFeature));
         if (regTechBundle == null) {
@@ -197,7 +202,9 @@
 
     // Default value is STATUS_NOT_SET
     private int getIntValueFromBundle(String key, PersistableBundle bundle) {
-        return bundle.getInt(key, STATUS_NOT_SET);
+        int value = bundle.getInt(key, STATUS_NOT_SET);
+        logd("get value " + value);
+        return value;
     }
 
     // Return subIdBundle from imsprovisioningstatus_{subId}.xml
