         (async/>! result-chan grid)))
     (let [[new-grid next-coord] (hunt-and-kill-step (g/begin-step grid) current-coord)]
       (if-not next-coord
-        (async/>! result-chan new-grid)
+        (do
+          (async/>! result-chan new-grid)
+          (async/close! result-chan)
+          )
         (recur new-grid next-coord)))))
 
 (s/defn maze-recursive-backtrack :- g/Grid [grid :- g/Grid result-chan report-partial-steps?]

             (async/>! result-chan grid))
    (let [[new-grid processed-run] (sidewinder-step (g/begin-step grid) coord current-run)]
      (if (empty? coords)
        (async/>! result-chan new-grid)
        (recur new-grid
               coords
               (conj processed-run (first coords)))))))

                              (go (async/>! result-chan g)))
                            (binary-tree-step (g/begin-step g) c))
          grid (assoc grid :algorithm-name "binary-tree")]
      (async/>! result-chan (reduce step-and-report grid (g/grid-coords grid)))
      (async/close! result-chan))))

(defn sidewinder-end-run? [cell]
  (let [on-east-side? (not (:east cell))
