diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
index d04f5c7..8cb587d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseManager.java
@@ -20,9 +20,9 @@
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.Futures;
 
@@ -68,7 +68,6 @@
 import org.onosproject.store.service.ConsistentMapException;
 import org.onosproject.store.service.DistributedQueueBuilder;
 import org.onosproject.store.service.EventuallyConsistentMapBuilder;
-import org.onosproject.store.service.MapEvent;
 import org.onosproject.store.service.MapInfo;
 import org.onosproject.store.service.PartitionInfo;
 import org.onosproject.store.service.DistributedSetBuilder;
@@ -126,8 +125,8 @@
     private ExecutorService queuePollExecutor;
     private ApplicationListener appListener = new InternalApplicationListener();
 
-    private final Map<String, DefaultAsyncConsistentMap> maps = Maps.newConcurrentMap();
-    private final ListMultimap<ApplicationId, DefaultAsyncConsistentMap> mapsByApplication = ArrayListMultimap.create();
+    private final Multimap<String, DefaultAsyncConsistentMap> maps = ArrayListMultimap.create();
+    private final Multimap<ApplicationId, DefaultAsyncConsistentMap> mapsByApplication = ArrayListMultimap.create();
     private final Map<String, DefaultDistributedQueue> queues = Maps.newConcurrentMap();
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -451,28 +450,15 @@
     }
 
     protected <K, V> DefaultAsyncConsistentMap<K, V> registerMap(DefaultAsyncConsistentMap<K, V> map) {
-        DefaultAsyncConsistentMap<K, V> existing = maps.putIfAbsent(map.name(), map);
-        if (existing != null) {
-            // FIXME: We need to cleanly support different map instances with same name.
-            log.info("Map by name {} already exists", map.name());
-            return existing;
-        } else {
-            if (map.applicationId() != null) {
-                mapsByApplication.put(map.applicationId(), map);
-            }
+        maps.put(map.name(), map);
+        if (map.applicationId() != null) {
+            mapsByApplication.put(map.applicationId(), map);
         }
-
-        clusterCommunicator.<MapEvent<K, V>>addSubscriber(mapUpdatesSubject(map.name()),
-                map.serializer()::decode,
-                map::notifyLocalListeners,
-                eventDispatcher);
         return map;
     }
 
     protected <K, V> void unregisterMap(DefaultAsyncConsistentMap<K, V> map) {
-        if (maps.remove(map.name()) != null) {
-            clusterCommunicator.removeSubscriber(mapUpdatesSubject(map.name()));
-        }
+        maps.remove(map.name(), map);
         if (map.applicationId() != null) {
             mapsByApplication.remove(map.applicationId(), map);
         }
@@ -485,10 +471,6 @@
         }
     }
 
-    protected static MessageSubject mapUpdatesSubject(String mapName) {
-        return new MessageSubject(mapName + "-map-updates");
-    }
-
     private class InternalApplicationListener implements ApplicationListener {
         @Override
         public void event(ApplicationEvent event) {
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultAsyncConsistentMap.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultAsyncConsistentMap.java
index 3fbdd2f..3d73d84 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultAsyncConsistentMap.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultAsyncConsistentMap.java
@@ -28,7 +28,6 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiFunction;
-import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
@@ -74,7 +73,6 @@
     private final Serializer serializer;
     private final boolean readOnly;
     private final boolean purgeOnUninstall;
-    private final Consumer<MapEvent<K, V>> eventPublisher;
 
     private final MetricsService metricsService;
     private final MetricsComponent metricsComponent;
@@ -130,22 +128,20 @@
             Database database,
             Serializer serializer,
             boolean readOnly,
-            boolean purgeOnUninstall,
-            Consumer<MapEvent<K, V>> eventPublisher) {
+            boolean purgeOnUninstall) {
         this.name = checkNotNull(name, "map name cannot be null");
         this.applicationId = applicationId;
         this.database = checkNotNull(database, "database cannot be null");
         this.serializer = checkNotNull(serializer, "serializer cannot be null");
         this.readOnly = readOnly;
         this.purgeOnUninstall = purgeOnUninstall;
-        this.eventPublisher = eventPublisher;
         this.database.registerConsumer(update -> {
             SharedExecutors.getSingleThreadExecutor().execute(() -> {
                 if (update.target() == MAP) {
                     Result<UpdateResult<String, byte[]>> result = update.output();
                     if (result.success() && result.value().mapName().equals(name)) {
                         MapEvent<K, V> mapEvent = result.value().<K, V>map(this::dK, serializer::decode).toMapEvent();
-                        notifyLocalListeners(mapEvent);
+                        notifyListeners(mapEvent);
                     }
                 }
             });
@@ -423,12 +419,7 @@
                 oldVersionMatch,
                 value == null ? null : serializer.encode(value))
                 .thenApply(this::unwrapResult)
-                .thenApply(r -> r.<K, V>map(this::dK, serializer::decode))
-                .whenComplete((r, e) -> {
-                    if (r != null && e == null && !database.hasChangeNotificationSupport()) {
-                        notifyListeners(r.toMapEvent());
-                    }
-                });
+                .thenApply(r -> r.<K, V>map(this::dK, serializer::decode));
     }
 
     private <T> T unwrapResult(Result<T> result) {
@@ -458,26 +449,16 @@
     }
 
     protected void notifyListeners(MapEvent<K, V> event) {
-        try {
-            if (event != null) {
-                notifyLocalListeners(event);
-                notifyRemoteListeners(event);
+        if (event == null) {
+            return;
+        }
+        listeners.forEach(listener -> {
+            try {
+                listener.event(event);
+            } catch (Exception e) {
+                log.warn("Failure notifying listener about {}", event, e);
             }
-        } catch (Exception e) {
-            log.warn("Failure notifying listeners about {}", event, e);
-        }
-    }
-
-    protected void notifyLocalListeners(MapEvent<K, V> event) {
-        if (event != null) {
-            listeners.forEach(listener -> listener.event(event));
-        }
-    }
-
-    protected void notifyRemoteListeners(MapEvent<K, V> event) {
-        if (eventPublisher != null) {
-            eventPublisher.accept(event);
-        }
+        });
     }
 
     private OperationTimer startTimer(String op) {
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultConsistentMapBuilder.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultConsistentMapBuilder.java
index 2b07140..8926c51 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultConsistentMapBuilder.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultConsistentMapBuilder.java
@@ -22,7 +22,6 @@
 import org.onosproject.store.service.AsyncConsistentMap;
 import org.onosproject.store.service.ConsistentMap;
 import org.onosproject.store.service.ConsistentMapBuilder;
-import org.onosproject.store.service.MapEvent;
 import org.onosproject.store.service.Serializer;
 
 /**
@@ -110,10 +109,7 @@
                 partitionsEnabled ? manager.partitionedDatabase : manager.inMemoryDatabase,
                 serializer,
                 readOnly,
-                purgeOnUninstall,
-                event -> manager.clusterCommunicator.<MapEvent<K, V>>broadcast(event,
-                        DatabaseManager.mapUpdatesSubject(name),
-                        serializer::encode));
+                purgeOnUninstall);
         return manager.registerMap(asyncMap);
     }
 }
\ No newline at end of file
