           (map->ClassGraph {:classes topo-classes :succs succs
                             :preds preds :sources sources}))
         (let [class (first cs)
-              class-set (into #{} class)
+              class-set (set class)
               block-succs (->> (mapcat #(-> block-graph :succs (get %)) class)
                                (remove #(contains? class-set (:dest %)))
-                               (into #{}))
+                               set)
               block-preds (map rev block-succs)
               ss (reduce edge->set succs block-succs)
               ps (reduce edge->set preds block-preds)]

    (if (empty? nodes)
      crossings
      (let [node (first nodes)
            dest-set (into #{} (map :dest (get succs node)))
            dests (filter #(contains? dest-set %) minus-qs)
            c (count-sub-crossings-single-node node dests characters)]
        (recur (rest nodes) (+ crossings c))))))

  classes. This means there can be multiple edges per class pair."
  [block-graph]
  (let [block-classes (classify block-graph)
        classes (set (vals block-classes))
        edge->set #(update-in %1 [(get block-classes (:src %2))]
                              (fnil conj #{}) %2)]
    (loop [cs classes
