diff --git a/src/com/android/settings/network/ims/ImsQueryEnhanced4gLteModeUserSetting.java b/src/com/android/settings/network/ims/ImsQueryEnhanced4gLteModeUserSetting.java
index c00f1df..34d8430 100644
--- a/src/com/android/settings/network/ims/ImsQueryEnhanced4gLteModeUserSetting.java
+++ b/src/com/android/settings/network/ims/ImsQueryEnhanced4gLteModeUserSetting.java
@@ -17,6 +17,7 @@
 package com.android.settings.network.ims;
 
 import android.telephony.ims.ImsMmTelManager;
+import android.util.Log;
 
 
 /**
@@ -24,6 +25,7 @@
  */
 public class ImsQueryEnhanced4gLteModeUserSetting implements ImsQuery {
 
+    private static final String LOG_TAG = "QueryEnhanced4gLteModeUserSetting";
     /**
      * Constructor
      * @param subId subscription id
@@ -40,8 +42,13 @@
      * @return result of query
      */
     public boolean query() {
-        final ImsMmTelManager imsMmTelManager =
-                ImsMmTelManager.createForSubscriptionId(mSubId);
-        return imsMmTelManager.isAdvancedCallingSettingEnabled();
+        try {
+            final ImsMmTelManager imsMmTelManager =
+                    ImsMmTelManager.createForSubscriptionId(mSubId);
+            return imsMmTelManager.isAdvancedCallingSettingEnabled();
+        } catch (IllegalArgumentException exception) {
+            Log.w(LOG_TAG, "fail to get VoLte settings. subId=" + mSubId, exception);
+        }
+        return false;
     }
 }
diff --git a/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java b/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java
index 5c050b5..b52d22c 100644
--- a/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java
+++ b/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java
@@ -19,6 +19,7 @@
 import android.telephony.ims.ProvisioningManager;
 import android.telephony.ims.feature.MmTelFeature;
 import android.telephony.ims.stub.ImsRegistrationImplBase;
+import android.util.Log;
 
 
 /**
@@ -26,6 +27,8 @@
  */
 public class ImsQueryProvisioningStat implements ImsQuery {
 
+    private static final String LOG_TAG = "QueryPrivisioningStat";
+
     private volatile int mSubId;
     private volatile int mCapability;
     private volatile int mTech;
@@ -50,8 +53,13 @@
      * @return result of query
      */
     public boolean query() {
-        final ProvisioningManager privisionManager =
-                ProvisioningManager.createForSubscriptionId(mSubId);
-        return privisionManager.getProvisioningStatusForCapability(mCapability, mTech);
+        try {
+            final ProvisioningManager privisionManager =
+                    ProvisioningManager.createForSubscriptionId(mSubId);
+            return privisionManager.getProvisioningStatusForCapability(mCapability, mTech);
+        } catch (IllegalArgumentException exception) {
+            Log.w(LOG_TAG, "fail to get Provisioning stat. subId=" + mSubId, exception);
+        }
+        return false;
     }
 }
diff --git a/src/com/android/settings/network/ims/ImsQueryTtyOnVolteStat.java b/src/com/android/settings/network/ims/ImsQueryTtyOnVolteStat.java
index c2d655f..e2719dd 100644
--- a/src/com/android/settings/network/ims/ImsQueryTtyOnVolteStat.java
+++ b/src/com/android/settings/network/ims/ImsQueryTtyOnVolteStat.java
@@ -17,6 +17,7 @@
 package com.android.settings.network.ims;
 
 import android.telephony.ims.ImsMmTelManager;
+import android.util.Log;
 
 
 /**
@@ -24,6 +25,8 @@
  */
 public class ImsQueryTtyOnVolteStat implements ImsQuery {
 
+    private static final String LOG_TAG = "QueryTtyOnVolteStat";
+
     /**
      * Constructor
      * @param subId subscription id
@@ -40,7 +43,13 @@
      * @return result of query
      */
     public boolean query() {
-        final ImsMmTelManager imsMmTelManager = ImsMmTelManager.createForSubscriptionId(mSubId);
-        return imsMmTelManager.isTtyOverVolteEnabled();
+        try {
+            final ImsMmTelManager imsMmTelManager =
+                    ImsMmTelManager.createForSubscriptionId(mSubId);
+            return imsMmTelManager.isTtyOverVolteEnabled();
+        } catch (IllegalArgumentException exception) {
+            Log.w(LOG_TAG, "fail to get VoLte Tty Stat. subId=" + mSubId, exception);
+        }
+        return false;
     }
 }
diff --git a/src/com/android/settings/network/ims/ImsQueryVtUserSetting.java b/src/com/android/settings/network/ims/ImsQueryVtUserSetting.java
index 6d699e3..6da4a4c 100644
--- a/src/com/android/settings/network/ims/ImsQueryVtUserSetting.java
+++ b/src/com/android/settings/network/ims/ImsQueryVtUserSetting.java
@@ -17,6 +17,7 @@
 package com.android.settings.network.ims;
 
 import android.telephony.ims.ImsMmTelManager;
+import android.util.Log;
 
 
 /**
@@ -24,6 +25,8 @@
  */
 public class ImsQueryVtUserSetting implements ImsQuery {
 
+    private static final String LOG_TAG = "QueryVtUserSetting";
+
     /**
      * Constructor
      * @param subId subscription id
@@ -40,7 +43,13 @@
      * @return result of query
      */
     public boolean query() {
-        final ImsMmTelManager imsMmTelManager = ImsMmTelManager.createForSubscriptionId(mSubId);
-        return imsMmTelManager.isVtSettingEnabled();
+        try {
+            final ImsMmTelManager imsMmTelManager =
+                    ImsMmTelManager.createForSubscriptionId(mSubId);
+            return imsMmTelManager.isVtSettingEnabled();
+        } catch (IllegalArgumentException exception) {
+            Log.w(LOG_TAG, "fail to get VT settings. subId=" + mSubId, exception);
+        }
+        return false;
     }
 }
diff --git a/src/com/android/settings/network/ims/ImsQueryWfcUserSetting.java b/src/com/android/settings/network/ims/ImsQueryWfcUserSetting.java
index 22d2c67..3407413 100644
--- a/src/com/android/settings/network/ims/ImsQueryWfcUserSetting.java
+++ b/src/com/android/settings/network/ims/ImsQueryWfcUserSetting.java
@@ -17,6 +17,7 @@
 package com.android.settings.network.ims;
 
 import android.telephony.ims.ImsMmTelManager;
+import android.util.Log;
 
 
 /**
@@ -24,6 +25,8 @@
  */
 public class ImsQueryWfcUserSetting implements ImsQuery {
 
+    private static final String LOG_TAG = "QueryWfcUserSetting";
+
     /**
      * Constructor
      * @param subId subscription id
@@ -40,7 +43,13 @@
      * @return result of query
      */
     public boolean query() {
-        final ImsMmTelManager imsMmTelManager = ImsMmTelManager.createForSubscriptionId(mSubId);
-        return imsMmTelManager.isVoWiFiSettingEnabled();
+        try {
+            final ImsMmTelManager imsMmTelManager =
+                    ImsMmTelManager.createForSubscriptionId(mSubId);
+            return imsMmTelManager.isVoWiFiSettingEnabled();
+        } catch (IllegalArgumentException exception) {
+            Log.w(LOG_TAG, "fail to get Wfc settings. subId=" + mSubId, exception);
+        }
+        return false;
     }
 }
