diff --git a/olt.py b/olt.py
index 8c89699..de98628 100644
--- a/olt.py
+++ b/olt.py
@@ -142,6 +142,10 @@
         testPacketIn(self, match, pkt)
 
 
+
+
+
+
 class IGMPPacketIn(base_tests.SimpleDataPlane):
     """Verify packet-ins are sent for IGMP packets """
 
@@ -766,7 +770,28 @@
 
     def runTest(self):
         logging.info("Testing Rule removal")
-        pass
+        processEapolRule(self, onu_port)
+        #wait for the rule to settle
+        time.sleep(3)
+
+        installDoubleTaggingRule(1, 2, self.controller)
+        #wait for the rules to settle
+        time.sleep(3)
+
+        stats = get_flow_stats(self, ofp.match())
+
+        test.assertTrue(len(stats) == 3, \
+                        "Wrong number of rules reports; reported %s, expected 3\n\n %s" % (len(stats), stats))
+
+        processEapolRule(self, onu_port, install = False)
+        time.sleep(3)
+
+        stats = get_flow_stats(self, ofp.match())
+
+        test.assertTrue(len(stats) == 2, \
+                        "Wrong number of rules reports; reported %s, expected 2\n\n %s" % (len(stats), stats))
+
+        logging.info(stats)
 
 
 class MultipleDoubleTaggingForwarding(base_tests.SimpleDataPlane):
@@ -812,6 +837,40 @@
                 time.sleep(5)
                 testPacketFlow(self, ctag, stag)
 
+def processEapolRule(test, in_port, install = True):
+    match = ofp.match()
+    match.oxm_list.append(ofp.oxm.eth_type(0x888e))
+    match.oxm_list.append(ofp.oxm.in_port(in_port))
+    if install:
+        request = ofp.message.flow_add(
+                table_id=test_param_get("table", 0),
+                cookie=42,
+                match=m,
+                instructions=[
+                    ofp.instruction.apply_actions(
+                        actions=[
+                            ofp.action.output(
+                                port=ofp.OFPP_CONTROLLER,
+                                max_len=ofp.OFPCML_NO_BUFFER)])],
+                buffer_id=ofp.OFP_NO_BUFFER,
+                priority=1000)
+    else:
+        request = ofp.message.flow_delete(
+                table_id=test_param_get("table", 0),
+                cookie=42,
+                match=m,
+                instructions=[
+                    ofp.instruction.apply_actions(
+                        actions=[
+                            ofp.action.output(
+                                port=ofp.OFPP_CONTROLLER,
+                                max_len=ofp.OFPCML_NO_BUFFER)])],
+                buffer_id=ofp.OFP_NO_BUFFER,
+                priority=1000)
+    logging.info("%s flow sending matching packets to controller" % "Install" if install else "Remove")
+    test.controller.message_send(request)
+    do_barrier(test.controller)
+
 def testPacketFlow(test, c_vlan_id, s_vlan_id):
 
     incorrectTagPkt = simple_udp_packet(pktlen=100, dl_vlan_enable=True, vlan_vid=100, vlan_pcp=0)
