diff --git a/src/main/java/org/onosproject/segmentrouting/IcmpHandler.java b/src/main/java/org/onosproject/segmentrouting/IcmpHandler.java
index 22c9266..21f00df 100644
--- a/src/main/java/org/onosproject/segmentrouting/IcmpHandler.java
+++ b/src/main/java/org/onosproject/segmentrouting/IcmpHandler.java
@@ -168,7 +168,7 @@
                     treatment, ByteBuffer.wrap(payload.serialize()));
             srManager.packetService.emit(packet);
         } else {
-            log.info("Send a MPLS packet as a ICMP response");
+            log.debug("Send a MPLS packet as a ICMP response");
             TrafficTreatment treatment = DefaultTrafficTreatment.builder()
                     .setOutput(outport.port())
                     .build();
diff --git a/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java b/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
index e82049b..c378541 100644
--- a/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
+++ b/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
@@ -256,25 +256,13 @@
                         nextId);
 
                 ObjectiveContext context = new DefaultObjectiveContext(
-                        (objective) -> log.debug("LinkUp installed NextObj {} on {}",
+                        (objective) -> log.debug("LinkUp addedTo NextObj {} on {}",
                                 nextId, deviceId),
                         (objective, error) ->
-                                log.warn("LinkUp failed to install NextObj {} on {}: {}",
+                                log.warn("LinkUp failed to addTo NextObj {} on {}: {}",
                                         nextId, deviceId, error));
                 NextObjective nextObjective = nextObjBuilder.addToExisting(context);
                 flowObjectiveService.next(deviceId, nextObjective);
-
-                // the addition of a bucket may actually change the neighborset
-                // update the global store
-                /*
-                Set<DeviceId> neighbors = new HashSet<DeviceId>(ns.getDeviceIds());
-                boolean newadd = neighbors.add(newLink.dst().deviceId());
-                if (newadd) {
-                    NeighborSet nsnew = new NeighborSet(neighbors, ns.getEdgeLabel());
-                    nsNextObjStore.put(new NeighborSetNextObjectiveStoreKey(deviceId, nsnew),
-                                       nextId);
-                    nsNextObjStore.remove(new NeighborSetNextObjectiveStoreKey(deviceId, ns));
-                }*/
             } else if (isMaster) {
                 log.warn("linkUp in device {}, but global store has no record "
                         + "for neighbor-set {}", deviceId, ns);
@@ -294,7 +282,6 @@
             return;
         }
 
-        @SuppressWarnings("unused")
         MacAddress dstMac;
         try {
             dstMac = deviceConfig.getDeviceMac(portDeviceMap.get(port));
@@ -323,13 +310,6 @@
                     new NeighborSetNextObjectiveStoreKey(deviceId, ns);
             Integer nextId = nsNextObjStore.get(nsStoreKey);
             if (nextId != null && isMaster) {
-                // XXX This is a workaround for BUG (CORD-611) in current switches.
-                // Should be temporary because this workaround prevents correct
-                // functionality in LAG recovery.
-                log.info("**portDown port:{} in device {}: Invalidating nextId {}",
-                         port, deviceId, nextId);
-                nsNextObjStore.remove(nsStoreKey);
-                /*
                 log.info("**portDown in device {}: Removing Bucket "
                         + "with Port {} to next object id {}",
                         deviceId,
@@ -352,24 +332,17 @@
                         .withId(nextId)
                         .fromApp(appId)
                         .addTreatment(tBuilder.build());
+                ObjectiveContext context = new DefaultObjectiveContext(
+                    (objective) -> log.debug("portDown removedFrom NextObj {} on {}",
+                                             nextId, deviceId),
+                    (objective, error) ->
+                    log.warn("portDown failed to removeFrom NextObj {} on {}: {}",
+                             nextId, deviceId, error));
                 NextObjective nextObjective = nextObjBuilder.
-                        removeFromExisting(new SRNextObjectiveContext(deviceId));
+                        removeFromExisting(context);
 
                 flowObjectiveService.next(deviceId, nextObjective);
-                */
-                // the removal of a bucket may actually change the neighborset
-                // update the global store
-                /*
-                Set<DeviceId> neighbors = new HashSet<DeviceId>(ns.getDeviceIds());
-                boolean removed = neighbors.remove(portDeviceMap.get(port));
-                if (removed) {
-                    NeighborSet nsnew = new NeighborSet(neighbors, ns.getEdgeLabel());
-                    nsNextObjStore.put(new NeighborSetNextObjectiveStoreKey(deviceId, nsnew),
-                                       nextId);
-                    nsNextObjStore.remove(new NeighborSetNextObjectiveStoreKey(deviceId, ns));
-                }*/
             }
-
         }
 
         devicePortMap.get(portDeviceMap.get(port)).remove(port);
