diff --git a/voltha/core/flow_decomposer.py b/voltha/core/flow_decomposer.py
index d123743..726e8df 100644
--- a/voltha/core/flow_decomposer.py
+++ b/voltha/core/flow_decomposer.py
@@ -511,7 +511,8 @@
         route = self.get_route(in_port_no, out_port_no)
         if route is None:
             log.error('no-route', in_port_no=in_port_no,
-                      out_port_no=out_port_no, comment='ignoring flow')
+                      out_port_no=out_port_no, comment='deleting flow')
+            self.flow_delete(flow)
             return device_rules
 
         assert len(route) == 2
@@ -637,7 +638,8 @@
                         route = self.get_route(in_port_no, inner_tag)
                         if route is None:
                             log.error('no-route-double-tag', in_port_no=in_port_no,
-                                      out_port_no=inner_tag, comment='ignoring flow')
+                                      out_port_no=inner_tag, comment='deleting flow')
+                            self.flow_delete(flow)
                             return device_rules
                         assert len(route) == 2
                         ingress_hop, egress_hop = route
@@ -724,7 +726,8 @@
                         if route2 is None:
                             log.error('mc-no-route', in_port_no=in_port_no,
                                 out_port_no=out_port_no, route2=route2,
-                                comment='ignoring flow')
+                                comment='deleting flow')
+                            self.flow_delete(flow)
                             continue
 
                         assert len(route2) == 2
@@ -762,3 +765,7 @@
 
     def get_wildcard_input_ports(self, exclude_port=None):
         raise NotImplementedError('derived class must provide')
+
+    def flow_delete(self, mod):
+        raise NotImplementedError('derived class must provide')
+        
diff --git a/voltha/core/logical_device_agent.py b/voltha/core/logical_device_agent.py
index c6bd3e8..5949372 100644
--- a/voltha/core/logical_device_agent.py
+++ b/voltha/core/logical_device_agent.py
@@ -210,7 +210,7 @@
             self.flows_proxy.update('/', Flows(items=flows))
 
     def flow_delete(self, mod):
-        assert isinstance(mod, ofp.ofp_flow_mod)
+        assert isinstance(mod, (ofp.ofp_flow_mod, ofp.ofp_flow_stats))
 
         # read from model
         flows = list(self.flows_proxy.get('/').items)
@@ -231,8 +231,10 @@
         if to_delete:
             self.flows_proxy.update('/', Flows(items=flows))
 
-        # send notifications for discarded flow as required by OpenFlow
-        self.announce_flows_deleted(to_delete)
+        # from mod send announcement
+        if isinstance(mod, ofp.ofp_flow_mod):
+            # send notifications for discarded flow as required by OpenFlow
+            self.announce_flows_deleted(to_delete)
 
     def flow_delete_strict(self, mod):
         assert isinstance(mod, ofp.ofp_flow_mod)
@@ -298,7 +300,10 @@
         """
 
         assert isinstance(flow, ofp.ofp_flow_stats)
-        assert isinstance(flow_mod, ofp.ofp_flow_mod)
+        assert isinstance(flow_mod, (ofp.ofp_flow_mod, ofp.ofp_flow_stats))
+
+        if isinstance(flow_mod, ofp.ofp_flow_stats):
+            return cls.flow_match(flow, flow_mod)
 
         # Check if flow.cookie is covered by mod.cookie and mod.cookie_mask
         if (flow.cookie & flow_mod.cookie_mask) != \
@@ -319,7 +324,6 @@
         if (flow_mod.out_group & 0x7fffffff) != ofp.OFPG_ANY and \
                 not cls.flow_has_out_group(flow, flow_mod.out_group):
             return False
-
         # Priority is ignored
 
         # Check match condition
