diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index a09800b..535c301 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -90,6 +90,12 @@
         CredentialDialogFragment.show(this, item);
     }
 
+    protected void announceRemoval(String alias) {
+        if (isAdded()) {
+            mListView.announceForAccessibility(getString(R.string.user_credential_removed, alias));
+        }
+    }
+
     protected void refreshItems() {
         if (isAdded()) {
             new AliasLoader().execute();
@@ -141,8 +147,7 @@
                             RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
                                     admin);
                         } else {
-                            new RemoveCredentialsTask(getContext(), getTargetFragment())
-                                    .execute(item.alias);
+                            new RemoveCredentialsTask(getTargetFragment()).execute(item.alias);
                         }
                         dialog.dismiss();
                     }
@@ -152,17 +157,15 @@
             return builder.create();
         }
 
-        private class RemoveCredentialsTask extends AsyncTask<String, Void, Void> {
-            private Context context;
+        private class RemoveCredentialsTask extends AsyncTask<String, Void, String[]> {
             private Fragment targetFragment;
 
-            public RemoveCredentialsTask(Context context, Fragment targetFragment) {
-                this.context = context;
+            public RemoveCredentialsTask(Fragment targetFragment) {
                 this.targetFragment = targetFragment;
             }
 
             @Override
-            protected Void doInBackground(String... aliases) {
+            protected String[] doInBackground(String... aliases) {
                 try {
                     final KeyChainConnection conn = KeyChain.bind(getContext());
                     try {
@@ -178,13 +181,17 @@
                 } catch (InterruptedException e) {
                     Log.w(TAG, "Connecting to keychain", e);
                 }
-                return null;
+                return aliases;
             }
 
             @Override
-            protected void onPostExecute(Void result) {
-                if (targetFragment instanceof UserCredentialsSettings) {
-                    ((UserCredentialsSettings) targetFragment).refreshItems();
+            protected void onPostExecute(String... aliases) {
+                if (targetFragment instanceof UserCredentialsSettings && targetFragment.isAdded()) {
+                    final UserCredentialsSettings target = (UserCredentialsSettings) targetFragment;
+                    for (final String alias : aliases) {
+                        target.announceRemoval(alias);
+                    }
+                    target.refreshItems();
                 }
             }
         }
