diff --git a/src/main/java/org/opencord/cordconfig/CordConfigEvent.java b/src/main/java/org/opencord/cordconfig/CordConfigEvent.java
new file mode 100644
index 0000000..4181c7d
--- /dev/null
+++ b/src/main/java/org/opencord/cordconfig/CordConfigEvent.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opencord.cordconfig;
+
+import org.onosproject.event.AbstractEvent;
+import org.joda.time.LocalDateTime;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * Describes an CORD config event.
+ */
+public class CordConfigEvent extends AbstractEvent<CordConfigEvent.Type, Object> {
+    private final Object prevSubject;
+
+    public enum Type {
+        /**
+         * Indicates a new access agent has been added.
+         * Event subject should be AccessAgentData.
+         */
+        ACCESS_AGENT_ADDED,
+
+        /**
+         * Indicates an access agent has been updated.
+         * Event subject and prevSubject should be AccessAgentData.
+         */
+        ACCESS_AGENT_UPDATED,
+
+        /**
+         * Indicates an access agent has been removed.
+         * Event prevSubject should be AccessAgentData.
+         */
+        ACCESS_AGENT_REMOVED,
+
+        /**
+         * Indicates a new access device has been added.
+         * Event subject should be AccessDeviceData.
+         */
+        ACCESS_DEVICE_ADDED,
+
+        /**
+         * Indicates an access device has been updated.
+         * Event subject and prevSubject should be AccessDeviceData.
+         */
+        ACCESS_DEVICE_UPDATED,
+
+        /**
+         * Indicates an access device has been removed.
+         * Event prevSubject should be AccessDeviceData.
+         */
+        ACCESS_DEVICE_REMOVED,
+    }
+
+    /**
+     * Creates an CORD config event with type and subject.
+     *
+     * @param type event type
+     * @param subject subject CORD config
+     */
+    public CordConfigEvent(Type type, Object subject) {
+        this(type, subject, null);
+    }
+
+    /**
+     * Creates an CORD config event with type, subject and time of event.
+     *
+     * @param type event type
+     * @param subject subject CORD config
+     * @param time time of event
+     */
+    public CordConfigEvent(Type type, Object subject, long time) {
+        this(type, subject, null, time);
+    }
+
+    /**
+     * Creates an CORD config event with type, subject and previous subject.
+     *
+     * @param type event type
+     * @param subject subject CORD config
+     * @param prevSubject previous CORD config subject
+     */
+    public CordConfigEvent(Type type, Object subject, Object prevSubject) {
+        super(type, subject);
+        this.prevSubject = prevSubject;
+    }
+
+    /**
+     * Creates an CORD config event with type, subject, previous subject and time.
+     *
+     * @param type event type
+     * @param subject subject CORD config
+     * @param prevSubject previous CORD config subject
+     * @param time time of event
+     */
+    public CordConfigEvent(Type type, Object subject, Object prevSubject, long time) {
+        super(type, subject, time);
+        this.prevSubject = prevSubject;
+    }
+
+    /**
+     * Returns the previous CORD config subject.
+     *
+     * @return previous subject of CORD config or null if previous subject does not exist.
+     */
+    public Object prevSubject() {
+        return prevSubject;
+    }
+
+    @Override
+    public String toString() {
+        if (prevSubject == null) {
+            return super.toString();
+        }
+        return toStringHelper(this)
+                .add("time", new LocalDateTime(time()))
+                .add("type", type())
+                .add("subject", subject())
+                .add("prevSubject", prevSubject)
+                .toString();
+    }
+}
diff --git a/src/main/java/org/opencord/cordconfig/CordConfigListener.java b/src/main/java/org/opencord/cordconfig/CordConfigListener.java
new file mode 100644
index 0000000..795e2be
--- /dev/null
+++ b/src/main/java/org/opencord/cordconfig/CordConfigListener.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opencord.cordconfig;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for CORD config events.
+ */
+public interface CordConfigListener extends EventListener<CordConfigEvent> {
+}
diff --git a/src/main/java/org/opencord/cordconfig/access/CordConfig.java b/src/main/java/org/opencord/cordconfig/CordConfigManager.java
similarity index 60%
rename from src/main/java/org/opencord/cordconfig/access/CordConfig.java
rename to src/main/java/org/opencord/cordconfig/CordConfigManager.java
index 3393e5f..eed8694 100644
--- a/src/main/java/org/opencord/cordconfig/access/CordConfig.java
+++ b/src/main/java/org/opencord/cordconfig/CordConfigManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.opencord.cordconfig.access;
+package org.opencord.cordconfig;
 
 import com.google.common.collect.ImmutableSet;
 import org.apache.felix.scr.annotations.Activate;
@@ -23,12 +23,19 @@
 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.ListenerRegistry;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.config.ConfigFactory;
 import org.onosproject.net.config.NetworkConfigEvent;
 import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigRegistry;
 import org.onosproject.net.config.basics.SubjectFactories;
+import org.opencord.cordconfig.access.AccessAgentConfig;
+import org.opencord.cordconfig.access.AccessAgentData;
+import org.opencord.cordconfig.access.AccessDeviceConfig;
+import org.opencord.cordconfig.access.AccessDeviceData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Map;
 import java.util.Optional;
@@ -42,7 +49,9 @@
  */
 @Service
 @Component(immediate = true)
-public class CordConfig implements CordConfigService {
+public class CordConfigManager extends ListenerRegistry<CordConfigEvent, CordConfigListener>
+        implements CordConfigService {
+    private static Logger log = LoggerFactory.getLogger(CordConfigManager.class);
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected NetworkConfigRegistry networkConfig;
@@ -112,10 +121,21 @@
     private void addAccessDevice(AccessDeviceConfig config) {
         AccessDeviceData accessDevice = config.getAccessDevice();
         accessDevices.put(accessDevice.deviceId(), accessDevice);
+        process(new CordConfigEvent(CordConfigEvent.Type.ACCESS_DEVICE_ADDED, accessDevice));
     }
 
-    private void removeAccessDeviceConfig(DeviceId subject) {
-        accessDevices.remove(subject);
+    private void updateAccessDevice(AccessDeviceConfig config, AccessDeviceConfig prevConfig) {
+        AccessDeviceData prevAccessDevice = prevConfig.getAccessDevice();
+        accessDevices.remove(prevConfig.subject());
+        AccessDeviceData accessDevice = config.getAccessDevice();
+        accessDevices.put(accessDevice.deviceId(), accessDevice);
+        process(new CordConfigEvent(CordConfigEvent.Type.ACCESS_DEVICE_UPDATED, accessDevice, prevAccessDevice));
+    }
+
+    private void removeAccessDevice(AccessDeviceConfig prevConfig) {
+        AccessDeviceData prevAccessDevice = prevConfig.getAccessDevice();
+        accessDevices.remove(prevConfig.subject());
+        process(new CordConfigEvent(CordConfigEvent.Type.ACCESS_DEVICE_REMOVED, prevAccessDevice));
     }
 
     private void addAccessAgentConfig(DeviceId subject) {
@@ -129,10 +149,21 @@
     private void addAccessAgent(AccessAgentConfig config) {
         AccessAgentData accessAgent = config.getAgent();
         accessAgents.put(accessAgent.deviceId(), accessAgent);
+        process(new CordConfigEvent(CordConfigEvent.Type.ACCESS_AGENT_ADDED, accessAgent, null));
     }
 
-    private void removeAccessAgentConfig(DeviceId subject) {
-        accessAgents.remove(subject);
+    private void updateAccessAgent(AccessAgentConfig config, AccessAgentConfig prevConfig) {
+        AccessAgentData prevAccessAgent = prevConfig.getAgent();
+        accessAgents.remove(prevConfig.subject());
+        AccessAgentData accessAgent = config.getAgent();
+        accessAgents.put(accessAgent.deviceId(), accessAgent);
+        process(new CordConfigEvent(CordConfigEvent.Type.ACCESS_AGENT_UPDATED, accessAgent, prevAccessAgent));
+    }
+
+    private void removeAccessAgent(AccessAgentConfig prevConfig) {
+        AccessAgentData prevAccessAgent = prevConfig.getAgent();
+        accessAgents.remove(prevConfig.subject());
+        process(new CordConfigEvent(CordConfigEvent.Type.ACCESS_AGENT_REMOVED, null, prevAccessAgent));
     }
 
     @Override
@@ -160,26 +191,38 @@
     private class InternalNetworkConfigListener implements NetworkConfigListener {
         @Override
         public void event(NetworkConfigEvent event) {
-            switch (event.type()) {
-            case CONFIG_ADDED:
-            case CONFIG_UPDATED:
-                if (event.configClass().equals(ACCESS_DEVICE_CONFIG_CLASS)) {
-                    addAccessDeviceConfig((DeviceId) event.subject());
-                } else if (event.configClass().equals(ACCESS_AGENT_CONFIG_CLASS)) {
-                    addAccessAgentConfig((DeviceId) event.subject());
+            if (event.configClass().equals(ACCESS_DEVICE_CONFIG_CLASS)) {
+                AccessDeviceConfig config = (AccessDeviceConfig) event.config().orElse(null);
+                AccessDeviceConfig prevConfig = (AccessDeviceConfig) event.prevConfig().orElse(null);
+                switch (event.type()) {
+                    case CONFIG_ADDED:
+                        addAccessDevice(config);
+                        break;
+                    case CONFIG_UPDATED:
+                        updateAccessDevice(config, prevConfig);
+                        break;
+                    case CONFIG_REMOVED:
+                        removeAccessDevice(prevConfig);
+                        break;
+                    default:
+                        break;
                 }
-                break;
-            case CONFIG_REMOVED:
-                if (event.configClass().equals(ACCESS_DEVICE_CONFIG_CLASS)) {
-                    removeAccessDeviceConfig((DeviceId) event.subject());
-                } else if (event.configClass().equals(ACCESS_AGENT_CONFIG_CLASS)) {
-                    removeAccessAgentConfig((DeviceId) event.subject());
+            } else if (event.configClass().equals(ACCESS_AGENT_CONFIG_CLASS)) {
+                AccessAgentConfig config = (AccessAgentConfig) event.config().orElse(null);
+                AccessAgentConfig prevConfig = (AccessAgentConfig) event.prevConfig().orElse(null);
+                switch (event.type()) {
+                    case CONFIG_ADDED:
+                        addAccessAgent(config);
+                        break;
+                    case CONFIG_UPDATED:
+                        updateAccessAgent(config, prevConfig);
+                        break;
+                    case CONFIG_REMOVED:
+                        removeAccessAgent(prevConfig);
+                        break;
+                    default:
+                        break;
                 }
-                break;
-            case CONFIG_REGISTERED:
-            case CONFIG_UNREGISTERED:
-            default:
-                break;
             }
         }
     }
diff --git a/src/main/java/org/opencord/cordconfig/access/CordConfigService.java b/src/main/java/org/opencord/cordconfig/CordConfigService.java
similarity index 83%
rename from src/main/java/org/opencord/cordconfig/access/CordConfigService.java
rename to src/main/java/org/opencord/cordconfig/CordConfigService.java
index fc2ed66..5d17c85 100644
--- a/src/main/java/org/opencord/cordconfig/access/CordConfigService.java
+++ b/src/main/java/org/opencord/cordconfig/CordConfigService.java
@@ -14,9 +14,12 @@
  * limitations under the License.
  */
 
-package org.opencord.cordconfig.access;
+package org.opencord.cordconfig;
 
+import org.onosproject.event.ListenerService;
 import org.onosproject.net.DeviceId;
+import org.opencord.cordconfig.access.AccessAgentData;
+import org.opencord.cordconfig.access.AccessDeviceData;
 
 import java.util.Optional;
 import java.util.Set;
@@ -24,7 +27,8 @@
 /**
  * Provides access to the common CORD configuration.
  */
-public interface CordConfigService {
+public interface CordConfigService
+        extends ListenerService<CordConfigEvent, CordConfigListener> {
 
     /**
      * Retrieves the set of all access devices in the system.
diff --git a/src/main/java/org/opencord/cordconfig/access/AccessAgentData.java b/src/main/java/org/opencord/cordconfig/access/AccessAgentData.java
index 66ec357..6ac33d2 100644
--- a/src/main/java/org/opencord/cordconfig/access/AccessAgentData.java
+++ b/src/main/java/org/opencord/cordconfig/access/AccessAgentData.java
@@ -16,6 +16,7 @@
 
 package org.opencord.cordconfig.access;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableMap;
 import org.apache.commons.lang3.tuple.Pair;
 import org.onlab.packet.MacAddress;
@@ -123,4 +124,14 @@
 
         return Optional.of(sortedOltChips.get(index).getKey());
     }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("oltMacInfo", oltMacInfo)
+                .add("agentMac", agentMac)
+                .add("vtnLocation", vtnLocation)
+                .add("deviceId", deviceId)
+                .toString();
+    }
 }
diff --git a/src/main/java/org/opencord/cordconfig/access/AccessDeviceData.java b/src/main/java/org/opencord/cordconfig/access/AccessDeviceData.java
index a5b7895..40326ec 100644
--- a/src/main/java/org/opencord/cordconfig/access/AccessDeviceData.java
+++ b/src/main/java/org/opencord/cordconfig/access/AccessDeviceData.java
@@ -16,6 +16,7 @@
 
 package org.opencord.cordconfig.access;
 
+import com.google.common.base.MoreObjects;
 import org.onlab.packet.VlanId;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
@@ -88,4 +89,14 @@
     public Optional<VlanId> defaultVlan() {
         return defaultVlan;
     }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("deviceId", deviceId)
+                .add("uplink", uplink)
+                .add("vlan", vlan)
+                .add("defaultVlan", defaultVlan)
+                .toString();
+    }
 }
diff --git a/src/main/java/org/opencord/cordconfig/access/package-info.java b/src/main/java/org/opencord/cordconfig/access/package-info.java
index 9539f11..4c0405a 100644
--- a/src/main/java/org/opencord/cordconfig/access/package-info.java
+++ b/src/main/java/org/opencord/cordconfig/access/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Meta Application for hosting common cord configuration classes.
+ * CORD access configuration classes.
  */
 package org.opencord.cordconfig.access;
\ No newline at end of file
diff --git a/src/main/java/org/opencord/cordconfig/package-info.java b/src/main/java/org/opencord/cordconfig/package-info.java
new file mode 100644
index 0000000..3a73a88
--- /dev/null
+++ b/src/main/java/org/opencord/cordconfig/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Meta Application for hosting common cord configuration classes.
+ */
+package org.opencord.cordconfig;
\ No newline at end of file
