diff --git a/apps/cpman/src/main/java/org/onosproject/cpman/ControlMessageType.java b/apps/cpman/src/main/java/org/onosproject/cpman/ControlMessageType.java
new file mode 100644
index 0000000..82e414d
--- /dev/null
+++ b/apps/cpman/src/main/java/org/onosproject/cpman/ControlMessageType.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2015 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;
+
+/**
+ * Abstracted Control Message Type.
+ */
+public enum ControlMessageType {
+
+    /** Mapped to PACKET-IN message of OpenFlow. */
+    INBOUND_PACKET,
+
+    /** Mapped to PACKET-OUT message of OpenFlow. */
+    OUTBOUND_PACKET,
+
+    /** Mapped to FLOW-MOD message of OpenFlow. */
+    FLOW_MOD_PACKET,
+
+    /** Mapped to FLOW-REMOVED message of OpenFlow. */
+    FLOW_REMOVED_PACKET,
+
+    /** Mapped to STATS-REQUEST message of OpenFlow. */
+    REQUEST_PACKET,
+
+    /** Mapped to STATS-REPLY message of OpenFlow. */
+    REPLY_PACKET,
+
+    /** All message types. */
+    ALL
+}
diff --git a/apps/cpman/src/main/java/org/onosproject/cpman/ControlMetricType.java b/apps/cpman/src/main/java/org/onosproject/cpman/ControlMetricType.java
new file mode 100644
index 0000000..b5e8281
--- /dev/null
+++ b/apps/cpman/src/main/java/org/onosproject/cpman/ControlMetricType.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2015 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;
+
+/**
+ * A set of metric type used in control plane.
+ */
+public enum ControlMetricType {
+
+    /** Racket Rate of Control Message. */
+    PacketRate,
+
+    /** Byte Rate of Control Message. */
+    ByteRate,
+
+    /** Cpu Utilization. */
+    CpuInfo,
+
+    /** Memory Utilization. */
+    MemoryInfo
+}
diff --git a/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneLoad.java b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneLoad.java
new file mode 100644
index 0000000..f55945f
--- /dev/null
+++ b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneLoad.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2015 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;
+
+import org.onosproject.net.statistic.Load;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Data repository for control plane load information.
+ */
+public interface ControlPlaneLoad extends Load {
+
+    /**
+     * Obtain the average of the specified time duration.
+     *
+     * @param duration time duration
+     * @param unit     time unit
+     * @return average control plane metric value
+     */
+    long average(int duration, TimeUnit unit);
+
+    /**
+     * Obtain the average of all time duration.
+     *
+     * @return average control plane metric value
+     */
+    long average();
+}
diff --git a/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneManager.java b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneManager.java
new file mode 100644
index 0000000..5f3dee7
--- /dev/null
+++ b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneManager.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2015 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;
+
+import com.sun.jndi.toolkit.ctx.ComponentContext;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Modified;
+import org.slf4j.Logger;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Control plane management application.
+ */
+public class ControlPlaneManager {
+
+    private final Logger log = getLogger(getClass());
+
+    @Activate
+    public void activate(ComponentContext context) {
+
+    }
+
+    @Deactivate
+    public void deactivate() {
+
+    }
+
+    @Modified
+    public void modified(ComponentContext context) {
+
+    }
+}
\ No newline at end of file
diff --git a/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneMetric.java b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneMetric.java
new file mode 100644
index 0000000..19f4153
--- /dev/null
+++ b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneMetric.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2015 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;
+
+/**
+ * Include various control plane metrics.
+ */
+public class ControlPlaneMetric {
+
+    private ControlMetricType metricType;
+    private long metricValue;
+
+    ControlMetricType metricType() {
+        return metricType;
+    }
+
+    void setMetricType(ControlMetricType metricType) {
+        this.metricType = metricType;
+    }
+
+    long metricValue() {
+        return metricValue;
+    }
+
+    void setMetricValue(long metricValue) {
+        this.metricValue = metricValue;
+    }
+}
diff --git a/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneStatsService.java b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneStatsService.java
new file mode 100644
index 0000000..9fc2d7a
--- /dev/null
+++ b/apps/cpman/src/main/java/org/onosproject/cpman/ControlPlaneStatsService.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2015 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;
+
+import org.onosproject.cluster.NodeId;
+import org.onosproject.net.DeviceId;
+
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Control Plane Statistics Service Interface.
+ */
+public interface ControlPlaneStatsService {
+
+    /**
+     * Add a new control plane metric value with a certain update interval.
+     *
+     * @param cpm            control plane metric (e.g., control message rate, cpu, memory, etc.)
+     * @param updateInterval value update interval (time unit will be in minute)
+     */
+    void updateMetric(ControlPlaneMetric cpm, int updateInterval);
+
+    /**
+     * Obtain the control plane load of a specific device.
+     *
+     * @param nodeId   node id {@link org.onosproject.cluster.NodeId}
+     * @param type     control metric type
+     * @param deviceId device id {@link org.onosproject.net.DeviceId}
+     * @return control plane load
+     */
+    ControlPlaneLoad getLoad(NodeId nodeId, ControlMetricType type, Optional<DeviceId> deviceId);
+
+    /**
+     * Obtain the control plane load of a specific device with a specific time duration.
+     *
+     * @param nodeId   node id {@link org.onosproject.cluster.NodeId}
+     * @param type     control metric type
+     * @param duration time duration
+     * @param unit     time unit
+     * @param deviceId device id {@link org.onosproject.net.Device}
+     * @return control plane load
+     */
+    ControlPlaneLoad getLoad(NodeId nodeId, ControlMetricType type, Optional<DeviceId> deviceId,
+                             int duration, TimeUnit unit);
+}
\ No newline at end of file
diff --git a/apps/cpman/src/main/java/org/onosproject/cpman/package-info.java b/apps/cpman/src/main/java/org/onosproject/cpman/package-info.java
new file mode 100644
index 0000000..e2c1dc8
--- /dev/null
+++ b/apps/cpman/src/main/java/org/onosproject/cpman/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 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.
+ */
+
+/**
+ * Application for control plane management.
+ */
+package org.onosproject.cpman;
\ No newline at end of file
