                               (conj (reach-context s) [:holding]))
   hierarchy/HighLevelAction (immediate-refinements- [s]
                              (let [base (env/get-var s [:base])]
-                               (for [[dirname dir] dirs]
-                                 (let [gpos (sub-pos dst dir)
-                                       go   (sub-pos gpos base)]
-                                   [(make-reach-hla env go)
-                                    (make-putdown dirname base go o dst)]))))
+                               (for [[dirname dir] dirs
+                                     :let [gpos (sub-pos dst dir)
+                                           go   (sub-pos gpos base)
+                                           a    (make-reach-hla env go)]
+                                     :when a]
+                                 [a (make-putdown dirname base go o dst)])))
                             (cycle-level- [s] nil)))
 ;manhattan
 ;pess: SLD?  

                             (let [base (env/get-var s [:base])]
                               (if (= base dst)
                                  [[]]
                                 [[(ReachHLA env [0 0]) (make-unpark s) 
                                   (NavHLA dst) (make-park s)]])))
                            (cycle-level- [s] nil)))
; manhattan + park (if appl)
; pess? SLD?

;; TODO: check out state abstraction here

(defn make-go-grasp-hla [env o] 
 (reify :as this
  env/Action                (action-name [] [:go-grasp o])

  hierarchy/HighLevelAction (immediate-refinements- [s]
                             (if (= dst (env/get-var s [:base]))
                               [[]]
                               (for [dir dirs :let [a (make-base-dir s dir)] :when a]
                                 [a this])))
                            (cycle-level- [s] 1)))
; manhattan
; pess? SLD? (try direct line, if occ then -inf).
