diff --git a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
index e9b773a..bde0831 100644
--- a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
+++ b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
@@ -71,6 +71,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -153,14 +154,15 @@
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    for (IBinder key : mConnections.keySet()) {
-                        ConnectionRecord connection = mConnections.get(key);
+                    Iterator<ConnectionRecord> iter = mConnections.values().iterator();
+                    while (iter.hasNext()){
+                        ConnectionRecord connection = iter.next();
                         try {
                             connection.callbacks.onConnect(connection.root.getRootId(), token,
                                     connection.root.getExtras());
                         } catch (RemoteException e) {
                             Log.w(TAG, "Connection for " + connection.pkg + " is no longer valid.");
-                            mConnections.remove(key);
+                            iter.remove();
                         }
                     }
                 }
@@ -1002,10 +1004,11 @@
         boolean removed = false;
         List<Pair<IBinder, Bundle>> callbackList = connection.subscriptions.get(id);
         if (callbackList != null) {
-            for (Pair<IBinder, Bundle> callback : callbackList) {
-                if (token == callback.first) {
+            Iterator<Pair<IBinder, Bundle>> iter = callbackList.iterator();
+            while (iter.hasNext()){
+                if (token == iter.next().first) {
                     removed = true;
-                    callbackList.remove(callback);
+                    iter.remove();
                 }
             }
             if (callbackList.size() == 0) {
