              (\f \d \e) (recur (next xs) (next ys) result)
              \s (recur (next xs) ys result)
              (\S \O) (recur (cons (interval (second y) (second x)) (next xs)) (next ys) result)
-             \F (recur (next xs) (next ys) (clojure.core/conj result (derive-interval (first x) (first y) x)))
-             \o (recur (next xs) ys (clojure.core/conj result (derive-interval (first x) (first y) x)))
+             \F (recur (next xs) (next ys) (clojure.core/conj result (update-interval x (first x) (first y))))
+             \o (recur (next xs) ys (clojure.core/conj result (update-interval x (first x) (first y))))
              \D (recur (cons (interval (second y) (second x)) (next xs))
                        (next ys)
-                       (clojure.core/conj result (derive-interval (first x) (first y) x)))))
+                       (clojure.core/conj result (update-interval x (first x) (first y))))))
          (apply clojure.core/conj result xs))
        result)))
   ([s1 s2 & sets]


;; Functions that make use of Allens' Interval Algebra

(defn concur
  "Return the interval representing the interval, if there is one,
  representing the interval of time the given intervals are

  (->> (f ival)
       (map interval)
       (map (partial concur ival))
       (map #(update-interval ival %))
       (remove nil?)))

(defn group-segments-by
