diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index d45616e..ba10deb 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -123,6 +123,7 @@
     private TextView dnsCheckState;
     private EditText smsc;
     private Button radioPowerButton;
+    private Button imsRegRequiredButton;
     private Button dnsCheckToggleButton;
     private Button pingTestButton;
     private Button updateSmscButton;
@@ -282,6 +283,9 @@
         radioPowerButton = (Button) findViewById(R.id.radio_power);
         radioPowerButton.setOnClickListener(mPowerButtonHandler);
 
+        imsRegRequiredButton = (Button) findViewById(R.id.ims_reg_required);
+        imsRegRequiredButton.setOnClickListener(mImsRegRequiredHandler);
+
         pingTestButton = (Button) findViewById(R.id.ping_test);
         pingTestButton.setOnClickListener(mPingButtonHandler);
         updateSmscButton = (Button) findViewById(R.id.update_smsc);
@@ -327,6 +331,7 @@
         updateDataStats();
         updateDataStats2();
         updatePowerState();
+        updateImsRegRequiredState();
         updateProperties();
         updateDnsCheckState();
 
@@ -403,6 +408,19 @@
         radioPowerButton.setText(buttonText);
     }
 
+    private boolean isImsRegRequired() {
+        return SystemProperties.getBoolean(TelephonyProperties.PROPERTY_IMS_REG_REQUIRED, false);
+    }
+
+    private void updateImsRegRequiredState() {
+        Log.d(TAG, "updateImsRegRequiredState isImsRegRequired()=" + isImsRegRequired());
+        String buttonText = isImsRegRequired() ?
+                            getString(R.string.ims_reg_required_off) :
+                            getString(R.string.ims_reg_required_on);
+        imsRegRequiredButton.setText(buttonText);
+    }
+
+
     private void updateDnsCheckState() {
         dnsCheckState.setText(phone.isDnsCheckDisabled() ?
                 "0.0.0.0 allowed" :"0.0.0.0 not allowed");
@@ -877,6 +895,18 @@
         }
     };
 
+    OnClickListener mImsRegRequiredHandler = new OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            Log.d(TAG, String.format("toggle %s: currently %s",
+                TelephonyProperties.PROPERTY_IMS_REG_REQUIRED, (isImsRegRequired() ? "on":"off")));
+            boolean newValue = !isImsRegRequired();
+            SystemProperties.set(TelephonyProperties.PROPERTY_IMS_REG_REQUIRED,
+                    newValue ? "1":"0");
+            updateImsRegRequiredState();
+        }
+    };
+
     OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
         public void onClick(View v) {
             phone.disableDnsCheck(!phone.isDnsCheckDisabled());
