diff --git a/src/com/android/settings/MasterClearConfirm.java b/src/com/android/settings/MasterClearConfirm.java
index bc3656a..31f1bcc 100644
--- a/src/com/android/settings/MasterClearConfirm.java
+++ b/src/com/android/settings/MasterClearConfirm.java
@@ -65,14 +65,10 @@
 
             if (pdbManager != null && !pdbManager.getOemUnlockEnabled()) {
                 // if OEM unlock is enabled, this will be wiped during FR process.
-                final ProgressDialog progressDialog = getProgressDialog();
-                progressDialog.show();
-
-                // need to prevent orientation changes as we're about to go into
-                // a long IO request, so we won't be able to access inflate resources on flash
-                final int oldOrientation = getActivity().getRequestedOrientation();
-                getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
                 new AsyncTask<Void, Void, Void>() {
+                    int mOldOrientation;
+                    ProgressDialog mProgressDialog;
+
                     @Override
                     protected Void doInBackground(Void... params) {
                         pdbManager.wipe();
@@ -81,10 +77,21 @@
 
                     @Override
                     protected void onPostExecute(Void aVoid) {
-                        progressDialog.hide();
-                        getActivity().setRequestedOrientation(oldOrientation);
+                        mProgressDialog.hide();
+                        getActivity().setRequestedOrientation(mOldOrientation);
                         doMasterClear();
                     }
+
+                    @Override
+                    protected void onPreExecute() {
+                        mProgressDialog = getProgressDialog();
+                        mProgressDialog.show();
+
+                        // need to prevent orientation changes as we're about to go into
+                        // a long IO request, so we won't be able to access inflate resources on flash
+                        mOldOrientation = getActivity().getRequestedOrientation();
+                        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
+                    }
                 }.execute();
             } else {
                 doMasterClear();
@@ -143,7 +150,8 @@
         super.onCreate(savedInstanceState);
 
         Bundle args = getArguments();
-        mEraseSdCard = args != null && args.getBoolean(MasterClear.ERASE_EXTERNAL_EXTRA);
+        mEraseSdCard = args != null
+                && args.getBoolean(MasterClear.ERASE_EXTERNAL_EXTRA);
     }
 
     @Override
