diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java
index 6d5666a..6f42cf6 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/McastHandler.java
@@ -57,13 +57,11 @@
 import org.onosproject.store.service.ConsistentMap;
 import org.onosproject.store.service.Serializer;
 import org.onosproject.store.service.StorageService;
-import org.onosproject.store.service.Versioned;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -518,27 +516,22 @@
      * @param deviceId device ID
      */
     public void removeDevice(DeviceId deviceId) {
-        Iterator<Map.Entry<McastStoreKey, Versioned<NextObjective>>> itNextObj =
-                mcastNextObjStore.entrySet().iterator();
-        while (itNextObj.hasNext()) {
-            Map.Entry<McastStoreKey, Versioned<NextObjective>> entry = itNextObj.next();
-            if (entry.getKey().deviceId().equals(deviceId)) {
-                ConnectPoint source = getSource(entry.getKey().mcastIp());
-                removeGroupFromDevice(entry.getKey().deviceId(), entry.getKey().mcastIp(),
-                        assignedVlan(deviceId.equals(source.deviceId()) ? source : null));
-                itNextObj.remove();
-            }
-        }
+        mcastNextObjStore.entrySet().stream()
+                .filter(entry -> entry.getKey().deviceId().equals(deviceId))
+                .forEach(entry -> {
+                    ConnectPoint source = getSource(entry.getKey().mcastIp());
+                    removeGroupFromDevice(entry.getKey().deviceId(), entry.getKey().mcastIp(),
+                            assignedVlan(deviceId.equals(source.deviceId()) ? source : null));
+                    mcastNextObjStore.remove(entry.getKey());
+                });
+        log.debug("{} is removed from mcastNextObjStore", deviceId);
 
-        Iterator<Map.Entry<McastStoreKey, Versioned<McastRole>>> itRole =
-                mcastRoleStore.entrySet().iterator();
-        while (itRole.hasNext()) {
-            Map.Entry<McastStoreKey, Versioned<McastRole>> entry = itRole.next();
-            if (entry.getKey().deviceId().equals(deviceId)) {
-                itRole.remove();
-            }
-        }
-
+        mcastRoleStore.entrySet().stream()
+                .filter(entry -> entry.getKey().deviceId().equals(deviceId))
+                .forEach(entry -> {
+                    mcastRoleStore.remove(entry.getKey());
+                });
+        log.debug("{} is removed from mcastRoleStore", deviceId);
     }
 
     /**
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/XConnectHandler.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/XConnectHandler.java
index 0adf7eb..c3f737f 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/XConnectHandler.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/XConnectHandler.java
@@ -44,12 +44,9 @@
 import org.onosproject.store.service.ConsistentMap;
 import org.onosproject.store.service.Serializer;
 import org.onosproject.store.service.StorageService;
-import org.onosproject.store.service.Versioned;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Iterator;
-import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
@@ -398,14 +395,12 @@
      * @param deviceId device ID
      */
     protected void removeDevice(DeviceId deviceId) {
-        Iterator<Map.Entry<XConnectStoreKey, Versioned<NextObjective>>> itNextObj =
-                xConnectNextObjStore.entrySet().iterator();
-        while (itNextObj.hasNext()) {
-            Map.Entry<XConnectStoreKey, Versioned<NextObjective>> entry = itNextObj.next();
-            if (entry.getKey().deviceId().equals(deviceId)) {
-                itNextObj.remove();
-            }
-        }
+        xConnectNextObjStore.entrySet().stream()
+                .filter(entry -> entry.getKey().deviceId().equals(deviceId))
+                .forEach(entry -> {
+                    xConnectNextObjStore.remove(entry.getKey());
+                });
+        log.debug("{} is removed from xConnectNextObjStore", deviceId);
     }
 
     /**
