diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java
index efee0eb..daacfa9 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/PortPairGroupService.java
@@ -15,13 +15,14 @@
  */
 package org.onosproject.vtnrsc.portpairgroup;
 
+import org.onosproject.event.ListenerService;
 import org.onosproject.vtnrsc.PortPairGroup;
 import org.onosproject.vtnrsc.PortPairGroupId;
 
 /**
  * Service for interacting with the inventory of port pair groups.
  */
-public interface PortPairGroupService {
+public interface PortPairGroupService extends ListenerService<PortPairGroupEvent, PortPairGroupListener> {
 
     /**
      * Returns if the port pair group is existed.
@@ -77,18 +78,4 @@
      * @return true if the give port pair group is deleted successfully.
      */
     boolean removePortPairGroup(PortPairGroupId portPairGroupId);
-
-    /**
-     * Adds the specified listener to Port-Pair-Group manager.
-     *
-     * @param listener Port-Pair-Group listener
-     */
-    void addListener(PortPairGroupListener listener);
-
-    /**
-     * Removes the specified listener to Port-Pair-Group manager.
-     *
-     * @param listener Port-Pair-Group listener
-     */
-    void removeListener(PortPairGroupListener listener);
 }
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java
index 5f80ef6..fd38cd9 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/portpairgroup/impl/PortPairGroupManager.java
@@ -19,7 +19,6 @@
 import static org.slf4j.LoggerFactory.getLogger;
 
 import java.util.Collections;
-import java.util.Set;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -28,6 +27,7 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.util.KryoNamespace;
+import org.onosproject.event.AbstractListenerManager;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.EventuallyConsistentMap;
 import org.onosproject.store.service.MultiValuedTimestamp;
@@ -35,25 +35,25 @@
 import org.onosproject.store.service.WallClockTimestamp;
 import org.onosproject.vtnrsc.PortPairGroup;
 import org.onosproject.vtnrsc.PortPairGroupId;
+import org.onosproject.vtnrsc.portpairgroup.PortPairGroupEvent;
 import org.onosproject.vtnrsc.portpairgroup.PortPairGroupListener;
 import org.onosproject.vtnrsc.portpairgroup.PortPairGroupService;
 import org.slf4j.Logger;
 
-import com.google.common.collect.Sets;
-
 /**
  * Provides implementation of the portPairGroupService.
  */
 @Component(immediate = true)
 @Service
-public class PortPairGroupManager implements PortPairGroupService {
+public class PortPairGroupManager extends AbstractListenerManager<PortPairGroupEvent, PortPairGroupListener> implements
+        PortPairGroupService {
 
     private static final String PORT_PAIR_GROUP_ID_NULL = "PortPairGroup ID cannot be null";
     private static final String PORT_PAIR_GROUP_NULL = "PortPairGroup cannot be null";
     private static final String LISTENER_NOT_NULL = "Listener cannot be null";
 
     private final Logger log = getLogger(getClass());
-    private final Set<PortPairGroupListener> listeners = Sets.newCopyOnWriteArraySet();
+
     private EventuallyConsistentMap<PortPairGroupId, PortPairGroup> portPairGroupStore;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -78,7 +78,6 @@
     @Deactivate
     public void deactivate() {
         portPairGroupStore.destroy();
-        listeners.clear();
         log.info("Stopped");
     }
 
@@ -111,7 +110,7 @@
         portPairGroupStore.put(portPairGroup.portPairGroupId(), portPairGroup);
         if (!portPairGroupStore.containsKey(portPairGroup.portPairGroupId())) {
             log.debug("The portPairGroup is created failed which identifier was {}", portPairGroup.portPairGroupId()
-                      .toString());
+                    .toString());
             return false;
         }
         return true;
@@ -149,16 +148,4 @@
         }
         return true;
     }
-
-    @Override
-    public void addListener(PortPairGroupListener listener) {
-        checkNotNull(listener, LISTENER_NOT_NULL);
-        listeners.add(listener);
-    }
-
-    @Override
-    public void removeListener(PortPairGroupListener listener) {
-        checkNotNull(listener, LISTENER_NOT_NULL);
-        listeners.remove(listener);
-    }
 }
