diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 7578078..0672ad9 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -54,7 +54,7 @@
 
         if (!mPasswordConfirmed) {
             ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
-            if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST)) {
+            if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, null, null)) {
                 mPasswordConfirmed = true; // no password set, so no need to confirm
                 updatePreferencesOrFinish();
             }
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index 63c7896..b5e72d7 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -119,7 +119,8 @@
         if (savedInstanceState == null) {
             updateStage(Stage.Introduction);
             if (confirmCredentials) {
-                mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST);
+                mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST,
+                        null, null);
             }
         }
     }
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index 786d563..b5c0e80 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -288,7 +288,8 @@
                 // there isn't an existing password or the user confirms their password.
                 updateStage(Stage.NeedToConfirm);
                 boolean launchedConfirmationActivity =
-                    mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST);
+                    mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST,
+                            null, null);
                 if (!launchedConfirmationActivity) {
                     updateStage(Stage.Introduction);
                 }
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index 6382891..ba83f8e 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -37,18 +37,22 @@
 
     /**
      * If a pattern, password or PIN exists, prompt the user before allowing them to change it.
+     * @param message optional message to display about the action about to be done
+     * @param details optional detail message to display
      * @return true if one exists and we launched an activity to confirm it
      * @see #onActivityResult(int, int, android.content.Intent)
      */
-    protected boolean launchConfirmationActivity(int request) {
+    protected boolean launchConfirmationActivity(int request,
+            CharSequence message, CharSequence details) {
         boolean launched = false;
         switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) {
             case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
-                launched = confirmPattern(request);
+                launched = confirmPattern(request, message, details);
                 break;
             case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
             case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
             case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
+                // TODO: update UI layout for ConfirmPassword to show message and details
                 launched = confirmPassword(request);
                 break;
         }
@@ -57,14 +61,19 @@
 
     /**
      * Launch screen to confirm the existing lock pattern.
+     * @param message shown in header of ConfirmLockPattern if not null
+     * @param details shown in footer of ConfirmLockPattern if not null
      * @see #onActivityResult(int, int, android.content.Intent)
      * @return true if we launched an activity to confirm pattern
      */
-    private boolean confirmPattern(int request) {
+    private boolean confirmPattern(int request, CharSequence message, CharSequence details) {
         if (!mLockPatternUtils.isLockPatternEnabled() || !mLockPatternUtils.savedPatternExists()) {
             return false;
         }
         final Intent intent = new Intent();
+        // supply header and footer text in the intent
+        intent.putExtra(ConfirmLockPattern.HEADER_TEXT, message);
+        intent.putExtra(ConfirmLockPattern.FOOTER_TEXT, details);
         intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
         mActivity.startActivityForResult(intent, request);
         return true;
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 7e408d1..4de0e44 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -69,19 +69,16 @@
         };
 
     /**
-     *  Keyguard validation is run using the standard {@link ConfirmLockPattern}
+     * Keyguard validation is run using the standard {@link ConfirmLockPattern}
      * component as a subactivity
+     * @param request the request code to be returned once confirmation finishes
+     * @return true if confirmation launched
      */
-    private void runKeyguardConfirmation() {
-        final Intent intent = new Intent();
-        intent.setClassName("com.android.settings",
-                "com.android.settings.ConfirmLockPattern");
-        // supply header and footer text in the intent
-        intent.putExtra(ConfirmLockPattern.HEADER_TEXT,
-                getText(R.string.master_clear_gesture_prompt));
-        intent.putExtra(ConfirmLockPattern.FOOTER_TEXT,
-                getText(R.string.master_clear_gesture_explanation));
-        startActivityForResult(intent, KEYGUARD_REQUEST);
+    private boolean runKeyguardConfirmation(int request) {
+        return new ChooseLockSettingsHelper(this)
+                .launchConfirmationActivity(request,
+                        getText(R.string.master_clear_gesture_prompt),
+                        getText(R.string.master_clear_gesture_explanation));
     }
 
     @Override
@@ -96,6 +93,8 @@
         // confirmation prompt; otherwise, go back to the initial state.
         if (resultCode == Activity.RESULT_OK) {
             establishFinalConfirmationState();
+        } else if (resultCode == Activity.RESULT_CANCELED) {
+            finish();
         } else {
             establishInitialState();
         }
@@ -108,9 +107,7 @@
      */
     private Button.OnClickListener mInitiateListener = new Button.OnClickListener() {
             public void onClick(View v) {
-                if (mLockUtils.isLockPatternEnabled()) {
-                    runKeyguardConfirmation();
-                } else {
+                if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) {
                     establishFinalConfirmationState();
                 }
             }
diff --git a/src/com/android/settings/MediaFormat.java b/src/com/android/settings/MediaFormat.java
index 075534d..b78ff62 100644
--- a/src/com/android/settings/MediaFormat.java
+++ b/src/com/android/settings/MediaFormat.java
@@ -88,16 +88,11 @@
      *  Keyguard validation is run using the standard {@link ConfirmLockPattern}
      * component as a subactivity
      */
-    private void runKeyguardConfirmation() {
-        final Intent intent = new Intent();
-        intent.setClassName("com.android.settings",
-                "com.android.settings.ConfirmLockPattern");
-        // supply header and footer text in the intent
-        intent.putExtra(ConfirmLockPattern.HEADER_TEXT,
-                getText(R.string.media_format_gesture_prompt));
-        intent.putExtra(ConfirmLockPattern.FOOTER_TEXT,
-                getText(R.string.media_format_gesture_explanation));
-        startActivityForResult(intent, KEYGUARD_REQUEST);
+    private boolean runKeyguardConfirmation(int request) {
+        return new ChooseLockSettingsHelper(this)
+                .launchConfirmationActivity(request,
+                        getText(R.string.media_format_gesture_prompt),
+                        getText(R.string.media_format_gesture_explanation));
     }
 
     @Override
@@ -112,6 +107,8 @@
         // confirmation prompt; otherwise, go back to the initial state.
         if (resultCode == Activity.RESULT_OK) {
             establishFinalConfirmationState();
+        } else if (resultCode == Activity.RESULT_CANCELED) {
+            finish();
         } else {
             establishInitialState();
         }
@@ -124,9 +121,7 @@
      */
     private Button.OnClickListener mInitiateListener = new Button.OnClickListener() {
             public void onClick(View v) {
-                if (mLockUtils.isLockPatternEnabled()) {
-                    runKeyguardConfirmation();
-                } else {
+                if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) {
                     establishFinalConfirmationState();
                 }
             }
