diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index 59c2df0..f639dcf 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -142,12 +142,6 @@
 
     private final InternalDeviceProvider listener = new InternalDeviceProvider();
 
-    private final IncomingMessageProvider inMsgListener = new IncomingMessageProvider();
-
-    private final OutgoingMessageProvider outMsgListener = new OutgoingMessageProvider();
-
-    private boolean isCtrlMsgMonitor;
-
     // TODO: We need to make the poll interval configurable.
     static final int POLL_INTERVAL = 5;
     @Property(name = "PortStatsPollFrequency", intValue = POLL_INTERVAL,
@@ -273,33 +267,6 @@
         LOG.debug("Accepting mastership role change to {} for device {}", newRole, deviceId);
     }
 
-
-    /**
-     * Enable OpenFlow control message monitoring.
-     */
-    public void enableCtrlMsgMonitor() {
-        isCtrlMsgMonitor = true;
-        controller.addEventListener(inMsgListener);
-        controller.monitorAllEvents(isCtrlMsgMonitor);
-        for (OpenFlowSwitch sw : controller.getSwitches()) {
-            sw.addEventListener(outMsgListener);
-        }
-        LOG.info("Enable control message monitoring.");
-    }
-
-    /**
-     * Disable OpenFlow control message monitoring.
-     */
-    public void disableCtrlMsgMonitor() {
-        isCtrlMsgMonitor = false;
-        controller.monitorAllEvents(isCtrlMsgMonitor);
-        controller.removeEventListener(inMsgListener);
-        for (OpenFlowSwitch sw: controller.getSwitches()) {
-            sw.removeEventListener(outMsgListener);
-        }
-        LOG.info("Disable control message monitoring");
-    }
-
     private void pushPortMetrics(Dpid dpid, List<OFPortStatsEntry> portStatsEntries) {
         DeviceId deviceId = DeviceId.deviceId(Dpid.uri(dpid));
         Collection<PortStatistics> stats = buildPortStatistics(deviceId, portStatsEntries);
@@ -340,32 +307,6 @@
 
     }
 
-    /**
-     * A listener for incoming OpenFlow messages.
-     */
-    private class IncomingMessageProvider implements OpenFlowEventListener {
-
-        @Override
-        public void handleMessage(Dpid dpid, OFMessage msg) {
-            if (isCtrlMsgMonitor) {
-                // TODO: handle all incoming OF messages
-            }
-        }
-    }
-
-    /**
-     * A listener for outgoing OpenFlow messages.
-     */
-    private class OutgoingMessageProvider implements OpenFlowEventListener {
-
-        @Override
-        public void handleMessage(Dpid dpid, OFMessage msg) {
-            if (isCtrlMsgMonitor) {
-                // TODO: handle all outgoing OF messages
-            }
-        }
-    }
-
     private class InternalDeviceProvider implements OpenFlowSwitchListener, OpenFlowEventListener {
 
         private HashMap<Dpid, List<OFPortStatsEntry>> portStatsReplies = new HashMap<>();
@@ -381,11 +322,6 @@
                 return;
             }
 
-            if (isCtrlMsgMonitor) {
-                // start to monitor the outgoing control messages
-                sw.addEventListener(outMsgListener);
-            }
-
             ChassisId cId = new ChassisId(dpid.value());
 
             SparseAnnotations annotations = DefaultAnnotations.builder()
@@ -426,14 +362,6 @@
             if (collector != null) {
                 collector.stop();
             }
-
-            OpenFlowSwitch sw = controller.getSwitch(dpid);
-            if (sw != null) {
-                if (isCtrlMsgMonitor) {
-                    // stop monitoring the outgoing control messages
-                    sw.removeEventListener(outMsgListener);
-                }
-            }
         }
 
         @Override
