diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
index 11c9f20..333a756 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
@@ -48,8 +48,6 @@
 import org.projectfloodlight.openflow.protocol.OFFactories;
 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
 import org.projectfloodlight.openflow.protocol.OFFlowStatsReply;
-import org.projectfloodlight.openflow.protocol.OFTableStatsEntry;
-import org.projectfloodlight.openflow.protocol.OFTableStatsReply;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
 import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
@@ -62,6 +60,8 @@
 import org.projectfloodlight.openflow.protocol.OFPortStatus;
 import org.projectfloodlight.openflow.protocol.OFStatsReply;
 import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags;
+import org.projectfloodlight.openflow.protocol.OFTableStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFTableStatsReply;
 import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
 import org.projectfloodlight.openflow.protocol.instruction.OFInstruction;
 import org.slf4j.Logger;
@@ -79,6 +79,7 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
+
 import static org.onlab.util.Tools.groupedThreads;
 
 @Component(immediate = true)
@@ -115,12 +116,6 @@
     protected ExecutorService executorMsgs =
         Executors.newFixedThreadPool(32, groupedThreads("onos/of", "event-stats-%d", log));
 
-    protected ExecutorService executorPacketIn =
-        Executors.newCachedThreadPool(groupedThreads("onos/of", "event-pkt-in-stats-%d", log));
-
-    protected ExecutorService executorFlowRemoved =
-        Executors.newCachedThreadPool(groupedThreads("onos/of", "event-flow-removed-stats-%d", log));
-
     private final ExecutorService executorBarrier =
         Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d", log));
 
@@ -286,19 +281,11 @@
             for (PacketListener p : ofPacketListener.values()) {
                 p.handlePacket(pktCtx);
             }
-            if (monitorAllEvents) {
-                executorPacketIn.execute(new OFMessageHandler(dpid, msg));
-            }
             break;
         // TODO: Consider using separate threadpool for sensitive messages.
         //    ie. Back to back error could cause us to starve.
         case FLOW_REMOVED:
-            if (monitorAllEvents) {
-                executorFlowRemoved.execute(new OFMessageHandler(dpid, msg));
-            }
-            break;
         case ERROR:
-            log.debug("Received error message from {}: {}", dpid, msg);
             executorMsgs.execute(new OFMessageHandler(dpid, msg));
             break;
         case STATS_REPLY:
@@ -648,7 +635,7 @@
     }
 
     /**
-     * OpenFlow message handler for incoming control messages.
+     * OpenFlow message handler.
      */
     protected final class OFMessageHandler implements Runnable {
 
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java
index ca9a1a8..d87913a 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java
@@ -19,7 +19,6 @@
 import org.junit.Test;
 import org.onosproject.openflow.ExecutorServiceAdapter;
 import org.onosproject.openflow.MockOfFeaturesReply;
-import org.onosproject.openflow.MockOfPacketIn;
 import org.onosproject.openflow.MockOfPortStatus;
 import org.onosproject.openflow.OfMessageAdapter;
 import org.onosproject.openflow.OpenFlowSwitchListenerAdapter;
@@ -38,7 +37,9 @@
 
 import static junit.framework.TestCase.fail;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
 
 /**
  * Tests for packet processing in the open flow controller impl class.
@@ -51,8 +52,6 @@
     OpenFlowSwitchListenerAdapter switchListener;
     TestPacketListener packetListener;
     TestExecutorService statsExecutorService;
-    TestExecutorService pktInExecutorService;
-    TestExecutorService flowRmvExecutorService;
 
     /**
      * Mock packet listener that accumulates packets.
@@ -70,7 +69,6 @@
         }
     }
 
-
     /**
      * Mock executor service that tracks submits.
      */
@@ -112,13 +110,8 @@
         controller.addPacketListener(100, packetListener);
 
         statsExecutorService = new TestExecutorService();
-        pktInExecutorService = new TestExecutorService();
-        flowRmvExecutorService = new TestExecutorService();
 
         controller.executorMsgs = statsExecutorService;
-        controller.executorPacketIn = pktInExecutorService;
-        controller.executorFlowRemoved = flowRmvExecutorService;
-
     }
 
     /**
@@ -148,19 +141,6 @@
     }
 
     /**
-     * Tests a packet in listen operation.
-     */
-    @Test
-    public void testPacketInListen() {
-        agent.addConnectedSwitch(dpid1, switch1);
-        OFMessage packetInPacket = new MockOfPacketIn();
-        controller.processPacket(dpid1, packetInPacket);
-        assertThat(packetListener.contexts(), hasSize(1));
-        assertThat(pktInExecutorService.submittedMessages(), hasSize(1));
-        assertThat(pktInExecutorService.submittedMessages().get(0), is(packetInPacket));
-    }
-
-    /**
      * Tests an error operation.
      */
     @Test
@@ -171,16 +151,4 @@
         assertThat(statsExecutorService.submittedMessages(), hasSize(1));
         assertThat(statsExecutorService.submittedMessages().get(0), is(errorPacket));
     }
-
-    /**
-     * Tests a packet in operation.
-     */
-    @Test
-    public void testFlowRemoved() {
-        agent.addConnectedSwitch(dpid1, switch1);
-        OFMessage flowRemovedPacket = new MockOfFlowRemoved();
-        controller.processPacket(dpid1, flowRemovedPacket);
-        assertThat(flowRmvExecutorService.submittedMessages(), hasSize(1));
-        assertThat(flowRmvExecutorService.submittedMessages().get(0), is(flowRemovedPacket));
-    }
 }
