diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index c78115d..14a6aed 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -102,7 +102,8 @@
     private View mExternalStorageContainer;
     @VisibleForTesting
     CheckBox mExternalStorage;
-    private View mEsimStorageContainer;
+    @VisibleForTesting
+    View mEsimStorageContainer;
     @VisibleForTesting
     CheckBox mEsimStorage;
     @VisibleForTesting
@@ -181,7 +182,8 @@
     void showFinalConfirmation() {
         final Bundle args = new Bundle();
         args.putBoolean(ERASE_EXTERNAL_EXTRA, mExternalStorage.isChecked());
-        args.putBoolean(ERASE_ESIMS_EXTRA, mEsimStorage.isChecked());
+        args.putBoolean(ERASE_ESIMS_EXTRA,
+            mEsimStorageContainer.getVisibility() == View.VISIBLE && mEsimStorage.isChecked());
         new SubSettingLauncher(getContext())
                 .setDestination(MasterClearConfirm.class.getName())
                 .setArguments(args)
diff --git a/src/com/android/settings/MasterClearConfirm.java b/src/com/android/settings/MasterClearConfirm.java
index 618dd2c..ac97c11 100644
--- a/src/com/android/settings/MasterClearConfirm.java
+++ b/src/com/android/settings/MasterClearConfirm.java
@@ -40,6 +40,8 @@
 import android.widget.Button;
 import android.widget.TextView;
 
+import androidx.annotation.VisibleForTesting;
+
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -62,9 +64,9 @@
 public class MasterClearConfirm extends InstrumentedFragment {
     private final static String TAG = "MasterClearConfirm";
 
-    private View mContentView;
+    @VisibleForTesting View mContentView;
     private boolean mEraseSdCard;
-    private boolean mEraseEsims;
+    @VisibleForTesting boolean mEraseEsims;
 
     /**
      * The user has gone through the multiple confirmation, so now we go ahead
@@ -199,6 +201,7 @@
         setUpActionBarAndTitle();
         establishFinalConfirmationState();
         setAccessibilityTitle();
+        setSubtitle();
         return mContentView;
     }
 
@@ -212,6 +215,14 @@
         }
     }
 
+    @VisibleForTesting
+    void setSubtitle() {
+        if (mEraseEsims) {
+            ((TextView) mContentView.findViewById(R.id.master_clear_confirm))
+                .setText(R.string.master_clear_final_desc_esim);
+        }
+    }
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index 5d7dd99..424d976 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -42,6 +42,8 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import androidx.annotation.VisibleForTesting;
+
 import com.android.internal.telephony.PhoneConstants;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.core.SubSettingLauncher;
@@ -74,8 +76,8 @@
     private View mContentView;
     private Spinner mSubscriptionSpinner;
     private Button mInitiateButton;
-    private View mEsimContainer;
-    private CheckBox mEsimCheckbox;
+    @VisibleForTesting View mEsimContainer;
+    @VisibleForTesting CheckBox mEsimCheckbox;
 
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -112,14 +114,16 @@
         }
     }
 
-    private void showFinalConfirmation() {
+    @VisibleForTesting
+    void showFinalConfirmation() {
         Bundle args = new Bundle();
         if (mSubscriptions != null && mSubscriptions.size() > 0) {
             int selectedIndex = mSubscriptionSpinner.getSelectedItemPosition();
             SubscriptionInfo subscription = mSubscriptions.get(selectedIndex);
             args.putInt(PhoneConstants.SUBSCRIPTION_KEY, subscription.getSubscriptionId());
         }
-        args.putBoolean(MasterClear.ERASE_ESIMS_EXTRA, mEsimCheckbox.isChecked());
+        args.putBoolean(MasterClear.ERASE_ESIMS_EXTRA,
+            mEsimContainer.getVisibility() == View.VISIBLE && mEsimCheckbox.isChecked());
         new SubSettingLauncher(getContext())
                 .setDestination(ResetNetworkConfirm.class.getName())
                 .setArguments(args)
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index 72e1919..376b726 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -40,6 +40,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import androidx.annotation.VisibleForTesting;
@@ -64,7 +65,7 @@
  */
 public class ResetNetworkConfirm extends InstrumentedFragment {
 
-    private View mContentView;
+    @VisibleForTesting View mContentView;
     private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     @VisibleForTesting boolean mEraseEsim;
     @VisibleForTesting EraseEsimAsyncTask mEraseEsimTask;
@@ -207,6 +208,14 @@
                 .setOnClickListener(mFinalClickListener);
     }
 
+    @VisibleForTesting
+    void setSubtitle() {
+        if (mEraseEsim) {
+            ((TextView) mContentView.findViewById(R.id.reset_network_confirm))
+                    .setText(R.string.reset_network_final_desc_esim);
+        }
+    }
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
@@ -224,6 +233,7 @@
         }
         mContentView = inflater.inflate(R.layout.reset_network_confirm, null);
         establishFinalConfirmationState();
+        setSubtitle();
         return mContentView;
     }
 
