         reqsym (gensym "?req-")
         keysym (symbol (name key))]
     `(defrule ~rname
-       [~reqsym ~'<- PendingMessage [{:keys [~'route ~keysym]}] ~@(when *route* `[(= ~*route* ~'route)]) (not (nil? ~keysym))]
+       [~reqsym ~'<- PendingMessage [{:keys [~'route ~keysym]}]
+        ~@(when *route* `[(= ~*route* ~'route)]) (not (nil? ~keysym))]
+       ~@(when (not abort-route?)
+           `[[:not ~(if *route*
+                      `[Abort (or (nil? ~'route) (= ~*route* ~'route))]
+                      `[Abort])]])
        ~'=>
        (debug ~logmsg)
        ~@(when abort-route?
-           `[(insert! (->AbortRoute ~*route*))])
+           `[(insert! (->Abort ~*route*))])
        (insert! (map->RoutedMessage (assoc ~reqsym :comp ~next-comp))))))
 
 (defn process [this req]


(defrecord PendingMessage [route comp])
(defrecord RoutedMessage [route comp])
(defrecord AbortRoute [route])

(defn- concat-symbols [prefix & syms]
  (letfn [(sym-to-str [s]

        ]
    `(defrule ~rname
       [~reqsym ~'<- PendingMessage (= ~*route* ~'route) (contains? ~prev-comps ~'comp)]
       [:not [Abort (or (nil? ~'route) (= ~*route* ~'route))]]
       ~'=>
       (debug ~logmsg)
       (insert! (map->RoutedMessage (assoc ~reqsym :comp ~(if (fn? next-comp)
