diff --git a/core/net/src/main/java/org/onosproject/net/edgeservice/impl/EdgeManager.java b/core/net/src/main/java/org/onosproject/net/edgeservice/impl/EdgeManager.java
index 45e467d..e992f7a 100644
--- a/core/net/src/main/java/org/onosproject/net/edgeservice/impl/EdgeManager.java
+++ b/core/net/src/main/java/org/onosproject/net/edgeservice/impl/EdgeManager.java
@@ -26,9 +26,8 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onosproject.event.AbstractListenerManager;
 import org.onosproject.event.Event;
-import org.onosproject.event.EventDeliveryService;
-import org.onosproject.event.ListenerRegistry;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceEvent;
@@ -64,7 +63,9 @@
  */
 @Component(immediate = true)
 @Service
-public class EdgeManager implements EdgePortService {
+public class EdgeManager
+        extends AbstractListenerManager<EdgePortEvent, EdgePortListener>
+        implements EdgePortService {
 
     private final Logger log = getLogger(getClass());
 
@@ -72,15 +73,9 @@
 
     private final Map<DeviceId, Set<ConnectPoint>> connectionPoints = Maps.newConcurrentMap();
 
-    private final ListenerRegistry<EdgePortEvent, EdgePortListener>
-            listenerRegistry = new ListenerRegistry<>();
-
     private final TopologyListener topologyListener = new InnerTopologyListener();
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected EventDeliveryService eventDispatcher;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected PacketService packetService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -147,17 +142,6 @@
         return new DefaultOutboundPacket(point.deviceId(), builder.build(), data);
     }
 
-    @Override
-    public void addListener(EdgePortListener listener) {
-        listenerRegistry.addListener(listener);
-    }
-
-    @Override
-    public void removeListener(EdgePortListener listener) {
-        listenerRegistry.removeListener(listener);
-    }
-
-
     // Internal listener for topo events used to keep our edge-port cache
     // up to date.
     private class InnerTopologyListener implements TopologyListener {
@@ -234,7 +218,7 @@
                 connectionPoints.put(point.deviceId(), set);
             }
             if (set.add(point)) {
-                eventDispatcher.post(new EdgePortEvent(EDGE_PORT_ADDED, point));
+                post(new EdgePortEvent(EDGE_PORT_ADDED, point));
             }
         }
     }
@@ -247,7 +231,7 @@
                 return;
             }
             if (set.remove(point)) {
-                eventDispatcher.post(new EdgePortEvent(EDGE_PORT_REMOVED, point));
+                post(new EdgePortEvent(EDGE_PORT_REMOVED, point));
             }
             if (set.isEmpty()) {
                 connectionPoints.remove(point.deviceId());
