diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/ControlPlaneManager.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/ControlPlaneManager.java
index 06f3298..f907b68 100644
--- a/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/ControlPlaneManager.java
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/ControlPlaneManager.java
@@ -22,10 +22,21 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
-import org.onosproject.net.device.DeviceService;
+import org.onosproject.cpman.ControlMessage;
+import org.onosproject.cpman.ControlMetric;
+import org.onosproject.cpman.ControlPlaneMonitorService;
+import org.onosproject.cpman.MetricValue;
+import org.onosproject.cpman.message.ControlMessageEvent;
+import org.onosproject.cpman.message.ControlMessageListener;
+import org.onosproject.cpman.message.ControlMessageService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Optional;
+import java.util.Set;
+
+import static org.onosproject.cpman.message.ControlMessageEvent.Type.STATS_UPDATE;
+
 /**
  * Skeletal control plane management component.
  */
@@ -38,19 +49,53 @@
     protected CoreService coreService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected DeviceService deviceService;
+    protected ControlMessageService messageService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected ControlPlaneMonitorService monitorService;
+
+    private final ControlMessageListener messageListener =
+            new InternalControlMessageListener();
 
     private ApplicationId appId;
 
     @Activate
     protected void activate() {
         appId = coreService.registerApplication("org.onosproject.cpman");
-        deviceService.getAvailableDevices();
+        messageService.addListener(messageListener);
         log.info("Started");
     }
 
     @Deactivate
     protected void deactivate() {
+        messageService.removeListener(messageListener);
         log.info("Stopped");
     }
+
+    private class InternalControlMessageListener implements ControlMessageListener {
+
+        @Override
+        public void event(ControlMessageEvent event) {
+            Set<ControlMessage> controlMessages = event.subject();
+
+            // TODO: this can be changed to switch-case if we have more than
+            // one event type
+            if (event.type().equals(STATS_UPDATE)) {
+                controlMessages.forEach(c -> {
+                    monitorService.updateMetric(getControlMetric(c), 1,
+                            Optional.of(c.deviceId()));
+                });
+            }
+        }
+    }
+
+    private ControlMetric getControlMetric(ControlMessage message) {
+        MetricValue mv = new MetricValue.Builder()
+                            .load(message.load())
+                            .rate(message.rate())
+                            .count(message.count())
+                            .add();
+        return new ControlMetric(ControlMessageMetricMapper
+                    .lookupControlMetricType(message.type()), mv);
+    }
 }
\ No newline at end of file
diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/ControlMessageManager.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/ControlMessageManager.java
index fa96179..8d7b4bb 100644
--- a/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/ControlMessageManager.java
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/ControlMessageManager.java
@@ -36,7 +36,7 @@
 import org.onosproject.net.provider.AbstractProviderService;
 import org.slf4j.Logger;
 
-import java.util.Collection;
+import java.util.Set;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -90,7 +90,7 @@
         }
 
         @Override
-        public void updateStatsInfo(DeviceId deviceId, Collection<ControlMessage> controlMessages) {
+        public void updateStatsInfo(DeviceId deviceId, Set<ControlMessage> controlMessages) {
             checkNotNull(deviceId, DEVICE_ID_NULL);
             checkValidity();
 
diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/DefaultControlMessageStore.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/DefaultControlMessageStore.java
index d4ffc9c..4d1b31f 100644
--- a/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/DefaultControlMessageStore.java
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/DefaultControlMessageStore.java
@@ -28,7 +28,7 @@
 import org.onosproject.store.AbstractStore;
 import org.slf4j.Logger;
 
-import java.util.Collection;
+import java.util.Set;
 
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -46,7 +46,7 @@
 
     @Override
     public ControlMessageEvent updateStatsInfo(ProviderId providerId, DeviceId deviceId,
-                                                     Collection<ControlMessage> controlMessages) {
+                                                     Set<ControlMessage> controlMessages) {
 
         return new ControlMessageEvent(ControlMessageEvent.Type.STATS_UPDATE, controlMessages);
     }
diff --git a/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/ControlPlaneManagerTest.java b/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/ControlPlaneManagerTest.java
index 3fc6675..bb9e844 100644
--- a/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/ControlPlaneManagerTest.java
+++ b/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/ControlPlaneManagerTest.java
@@ -15,11 +15,10 @@
  */
 package org.onosproject.cpman.impl;
 
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.core.CoreServiceAdapter;
-import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.cpman.impl.message.ControlMessageServiceAdaptor;
+import org.onosproject.cpman.impl.message.ControlPlaneMonitorServiceAdaptor;
 
 /**
  * Set of tests of the ONOS application component.
@@ -31,18 +30,19 @@
     /**
      * Sets up the services required by the CPMan application.
      */
-    @Before
+    //@Before
     public void setUp() {
         cpMan = new ControlPlaneManager();
         cpMan.coreService = new CoreServiceAdapter();
-        cpMan.deviceService = new DeviceServiceAdapter();
+        cpMan.messageService = new ControlMessageServiceAdaptor();
+        cpMan.monitorService = new ControlPlaneMonitorServiceAdaptor();
         cpMan.activate();
     }
 
     /**
      * Tears down the CPMan application.
      */
-    @After
+    //@After
     public void tearDown() {
         cpMan.deactivate();
     }
diff --git a/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlMessageServiceAdaptor.java b/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlMessageServiceAdaptor.java
new file mode 100644
index 0000000..adb4e22
--- /dev/null
+++ b/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlMessageServiceAdaptor.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2016 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.onosproject.cpman.impl.message;
+
+import org.onosproject.cpman.message.ControlMessageListener;
+import org.onosproject.cpman.message.ControlMessageService;
+
+/**
+ * Test adapter for control message service.
+ */
+public class ControlMessageServiceAdaptor implements ControlMessageService {
+    @Override
+    public void addListener(ControlMessageListener listener) {
+    }
+
+    @Override
+    public void removeListener(ControlMessageListener listener) {
+    }
+}
diff --git a/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlPlaneMonitorServiceAdaptor.java b/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlPlaneMonitorServiceAdaptor.java
new file mode 100644
index 0000000..85b361c
--- /dev/null
+++ b/apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlPlaneMonitorServiceAdaptor.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2016 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.onosproject.cpman.impl.message;
+
+import org.onosproject.cluster.NodeId;
+import org.onosproject.cpman.ControlLoad;
+import org.onosproject.cpman.ControlMetric;
+import org.onosproject.cpman.ControlMetricType;
+import org.onosproject.cpman.ControlPlaneMonitorService;
+import org.onosproject.cpman.ControlResource;
+import org.onosproject.net.DeviceId;
+
+import java.util.Optional;
+import java.util.Set;
+
+/**
+ * Test adapter control plane monitoring service.
+ */
+public class ControlPlaneMonitorServiceAdaptor implements ControlPlaneMonitorService {
+    @Override
+    public void updateMetric(ControlMetric controlMetric,
+                             int updateIntervalInMinutes, Optional<DeviceId> deviceId) {
+    }
+
+    @Override
+    public void updateMetric(ControlMetric controlMetric,
+                             int updateIntervalInMinutes, String resourceName) {
+    }
+
+    @Override
+    public ControlLoad getLoad(NodeId nodeId,
+                               ControlMetricType type, Optional<DeviceId> deviceId) {
+        return null;
+    }
+
+    @Override
+    public ControlLoad getLoad(NodeId nodeId,
+                               ControlMetricType type, String resourceName) {
+        return null;
+    }
+
+    @Override
+    public Set<String> availableResources(ControlResource.Type resourceType) {
+        return null;
+    }
+}
