diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java
index b2412b7..83858be 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageEvent.java
@@ -18,13 +18,15 @@
 import org.onosproject.event.AbstractEvent;
 import org.onosproject.cpman.ControlMessage;
 
+import java.util.Collection;
+
 import static com.google.common.base.MoreObjects.toStringHelper;
 
 /**
  * Describes control message event.
  */
 public class ControlMessageEvent
-        extends AbstractEvent<ControlMessageEvent.Type, ControlMessage> {
+        extends AbstractEvent<ControlMessageEvent.Type, Collection<ControlMessage>> {
 
     /**
      * Type of control message events.
@@ -39,11 +41,11 @@
     /**
      * Creates an event of given type and the current time.
      *
-     * @param type  control message event type
-     * @param controlMessage event control message subject
+     * @param type control message event type
+     * @param controlMessages event control message subject
      */
-    public ControlMessageEvent(Type type, ControlMessage controlMessage) {
-        super(type, controlMessage);
+    public ControlMessageEvent(Type type, Collection<ControlMessage> controlMessages) {
+        super(type, controlMessages);
     }
 
     @Override
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageService.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageService.java
index 302a446..c99a77b 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageService.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageService.java
@@ -20,5 +20,8 @@
 /**
  * Service for obtaining control message statistic information.
  */
-public interface ControlMessageService extends ListenerService {
+public interface ControlMessageService
+        extends ListenerService<ControlMessageEvent, ControlMessageListener> {
+
+
 }
diff --git a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java
index baeb327..8c6667a 100644
--- a/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java
+++ b/apps/cpman/api/src/main/java/org/onosproject/cpman/message/ControlMessageStore.java
@@ -36,8 +36,7 @@
      * @param controlMessages a collection of control message stats
      * @return ready to send event describing what occurred
      */
-    ControlMessageEvent updateStatsInfo(ProviderId providerId,
-                                        DeviceId deviceId,
+    ControlMessageEvent updateStatsInfo(ProviderId providerId, DeviceId deviceId,
                                         Collection<ControlMessage> controlMessages);
 
 }
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
new file mode 100644
index 0000000..fa96179
--- /dev/null
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/ControlMessageManager.java
@@ -0,0 +1,110 @@
+/*
+ * 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.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.cpman.ControlMessage;
+import org.onosproject.cpman.message.ControlMessageAdminService;
+import org.onosproject.cpman.message.ControlMessageEvent;
+import org.onosproject.cpman.message.ControlMessageListener;
+import org.onosproject.cpman.message.ControlMessageProvider;
+import org.onosproject.cpman.message.ControlMessageProviderRegistry;
+import org.onosproject.cpman.message.ControlMessageProviderService;
+import org.onosproject.cpman.message.ControlMessageService;
+import org.onosproject.cpman.message.ControlMessageStore;
+import org.onosproject.cpman.message.ControlMessageStoreDelegate;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.provider.AbstractListenerProviderRegistry;
+import org.onosproject.net.provider.AbstractProviderService;
+import org.slf4j.Logger;
+
+import java.util.Collection;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Provides implementation of the control message SB &amp; NB APIs.
+ */
+@Component(immediate = true)
+@Service
+public class ControlMessageManager
+        extends AbstractListenerProviderRegistry<ControlMessageEvent, ControlMessageListener,
+        ControlMessageProvider, ControlMessageProviderService>
+        implements ControlMessageService, ControlMessageAdminService,
+        ControlMessageProviderRegistry {
+
+    private static final String DEVICE_ID_NULL = "Device ID cannot be null";
+
+    private final Logger log = getLogger(getClass());
+
+    private final ControlMessageStoreDelegate delegate = new InternalStoreDelegate();
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected ControlMessageStore store;
+
+    @Activate
+    public void activate() {
+        store.setDelegate(delegate);
+        eventDispatcher.addSink(ControlMessageEvent.class, listenerRegistry);
+
+        log.info("Started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        store.unsetDelegate(delegate);
+        eventDispatcher.removeSink(ControlMessageEvent.class);
+
+        log.info("Stopped");
+    }
+
+    @Override
+    protected ControlMessageProviderService createProviderService(ControlMessageProvider provider) {
+        return new InternalControlMessageProviderService(provider);
+    }
+
+    private class InternalControlMessageProviderService
+            extends AbstractProviderService<ControlMessageProvider>
+            implements ControlMessageProviderService {
+        InternalControlMessageProviderService(ControlMessageProvider provider) {
+            super(provider);
+        }
+
+        @Override
+        public void updateStatsInfo(DeviceId deviceId, Collection<ControlMessage> controlMessages) {
+            checkNotNull(deviceId, DEVICE_ID_NULL);
+            checkValidity();
+
+            ControlMessageEvent event =
+                    store.updateStatsInfo(this.provider().id(), deviceId, controlMessages);
+
+            post(event);
+        }
+    }
+
+    private class InternalStoreDelegate implements ControlMessageStoreDelegate {
+        @Override
+        public void notify(ControlMessageEvent event) {
+            post(event);
+        }
+    }
+}
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
new file mode 100644
index 0000000..d4ffc9c
--- /dev/null
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/DefaultControlMessageStore.java
@@ -0,0 +1,63 @@
+/*
+ * 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.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.cpman.ControlMessage;
+import org.onosproject.cpman.message.ControlMessageEvent;
+import org.onosproject.cpman.message.ControlMessageStore;
+import org.onosproject.cpman.message.ControlMessageStoreDelegate;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.store.AbstractStore;
+import org.slf4j.Logger;
+
+import java.util.Collection;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Manages inventory of control message using trivial in-memory structures
+ * implementation.
+ */
+@Component(immediate = true)
+@Service
+public class DefaultControlMessageStore
+        extends AbstractStore<ControlMessageEvent, ControlMessageStoreDelegate>
+        implements ControlMessageStore {
+
+    private final Logger log = getLogger(getClass());
+
+    @Override
+    public ControlMessageEvent updateStatsInfo(ProviderId providerId, DeviceId deviceId,
+                                                     Collection<ControlMessage> controlMessages) {
+
+        return new ControlMessageEvent(ControlMessageEvent.Type.STATS_UPDATE, controlMessages);
+    }
+
+    @Activate
+    public void activate() {
+        log.info("Started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        log.info("Stopped");
+    }
+}
diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/package-info.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/package-info.java
new file mode 100644
index 0000000..8e7a23e
--- /dev/null
+++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/impl/message/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * 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.
+ */
+/**
+ * Implementation of control message manager.
+ */
+package org.onosproject.cpman.impl.message;
\ No newline at end of file
