diff --git a/pox/forwarding/l2_multi.py b/pox/forwarding/l2_multi.py
index 61d8616..0d781d1 100644
--- a/pox/forwarding/l2_multi.py
+++ b/pox/forwarding/l2_multi.py
@@ -441,6 +441,7 @@ class l2_multi (EventMixin):
     for sw in switches.itervalues():
       if sw.connection is None: continue
       sw.connection.send(clear)
+      core.openflow_discovery.install_flow(sw.connection)
     path_map.clear()
 
     if event.removed:
diff --git a/pox/forwarding/topo_proactive.py b/pox/forwarding/topo_proactive.py
index 8266339..d2101f8 100644
--- a/pox/forwarding/topo_proactive.py
+++ b/pox/forwarding/topo_proactive.py
@@ -204,7 +204,7 @@ class TopoSwitch (DHCPD):
     #msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
     self.connection.send(msg)
 
-    core.openflow_discovery.install_flow(self.connection)
+    core.openflow_discovery.install_flow(self.connection, force=True)
 
     src = self
     for dst in switches_by_dpid.itervalues():
diff --git a/pox/openflow/discovery.py b/pox/openflow/discovery.py
index 2845379..ec7387e 100644
--- a/pox/openflow/discovery.py
+++ b/pox/openflow/discovery.py
@@ -283,7 +283,17 @@ class Discovery (EventMixin):
   def send_cycle_time (self):
     return self._link_timeout / 2.0
 
-  def install_flow (self, con_or_dpid, priority = None):
+  def install_flow (self, con_or_dpid, priority = None, force = False):
+    """
+    Installs table entry to direct discovery traffic to us
+
+    If install_flow was not set, this only happens if force is True.
+
+    Returns True if the entry was installed.
+    """
+    if not self._install_flow and not force:
+      return False
+
     if priority is None:
       priority = self._flow_priority
     if isinstance(con_or_dpid, (int,long)):
@@ -294,6 +304,7 @@ class Discovery (EventMixin):
     else:
       con = con_or_dpid
 
+    log.debug("Installing flow for %s", dpid_to_str(event.dpid))
     match = of.ofp_match(dl_type = pkt.ethernet.LLDP_TYPE,
                           dl_dst = pkt.ETHERNET.NDP_MULTICAST)
     msg = of.ofp_flow_mod()
@@ -304,10 +315,13 @@ class Discovery (EventMixin):
     return True
 
   def _handle_openflow_ConnectionUp (self, event):
-    if self._install_flow:
-      # Make sure we get appropriate traffic
-      log.debug("Installing flow for %s", dpid_to_str(event.dpid))
-      self.install_flow(event.connection)
+    # Make sure we get appropriate traffic
+    #NOTE: It's possible we'd be better served by having this run with a very
+    #      *low* priority (opposite of now), as it'd be more likely to run
+    #      after another component cleared the table.  For now, the
+    #      expectation is that applications which care will reinstall the
+    #      entry themselves.
+    self.install_flow(event.connection)
 
   def _handle_openflow_ConnectionDown (self, event):
     # Delete all links on this switch
