diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index d33e1e8..4cf0546 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -60,35 +60,12 @@
      */
     private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {
             public void onClick(View v) {
-
                 if (Utils.isMonkeyRunning()) {
                     return;
                 }
 
-                ICheckinService service =
-                        ICheckinService.Stub.asInterface(ServiceManager.getService("checkin"));
-                if (service != null) {
-                    try {
-                        // This RPC should never return
-                        service.masterClear();
-                    } catch (android.os.RemoteException e) {
-                        // Intentionally blank - there's nothing we can do here
-                        Log.w("MasterClear", "Unable to invoke ICheckinService.masterClear()");
-                    }
-                } else {
-                    Log.w("MasterClear", "Unable to locate ICheckinService");
-                }
-
-                /* If we reach this point, the master clear didn't happen -- the
-                 * service might have been unregistered with the ServiceManager,
-                 * the RPC might have thrown an exception, or for some reason
-                 * the implementation of masterClear() may have returned instead
-                 * of resetting the device.
-                 */
-                new AlertDialog.Builder(MasterClear.this)
-                        .setMessage(getText(R.string.master_clear_failed))
-                        .setPositiveButton(getText(android.R.string.ok), null)
-                        .show();
+                sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
+                // Intent handling is asynchronous -- assume it will happen soon.
             }
         };
 
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 1ef137d..f646d9d 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -32,8 +32,6 @@
 import android.database.Cursor;
 import android.location.LocationManager;
 import android.os.Bundle;
-import android.os.ICheckinService;
-import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
@@ -444,26 +442,9 @@
                 }
             } else {
                 if (button == DialogInterface.BUTTON_POSITIVE) {
-                    // Perform action
-                    // Reboot and toggle Encrypted File Systems
-                    ICheckinService service =
-                    ICheckinService.Stub.asInterface(ServiceManager.getService("checkin"));
-                    if (service != null) {
-                        try {
-                            // This RPC should never return
-                            if (mWillEnableEncryptedFS) {
-                                service.masterClearAndToggleEFS(true);
-                            } else {
-                                service.masterClearAndToggleEFS(false);
-                            }
-                        } catch (android.os.RemoteException e) {
-                            // Intentionally blank - there's nothing we can do here
-                            Log.w("SecuritySettings",
-                                    "Unable to invoke ICheckinService.masterClearAndToggleEFS()");
-                        }
-                    } else {
-                        Log.w("SecuritySettings", "Unable to locate ICheckinService");
-                    }
+                    Intent intent = new Intent("android.intent.action.MASTER_CLEAR");
+                    intent.putExtra("enableEFS", mWillEnableEncryptedFS);
+                    sendBroadcast(intent);
                     updatePreferences(mState);
                 } else if (button == DialogInterface.BUTTON_NEGATIVE) {
                     // Cancel action
