                   (gr-assoc gr :best-agree (assoc comment-conv-stats :tid tid))
                   gr))))
           result
-          (zip ids comment-stats)))
+          (zip ids stats)))
       ; initialize result hash
       (into {} (map #(vector % {:best nil :best-agree nil :sufficient []}) ids)))
     ; If no sufficient, use best; otherwise sort sufficient and take 5

    (count (filter filt-fn votes))))


(let [initial-comment-stats-graphimpl
        (gr/eager-compile
          {:na (fnk [votes] (count-votes votes -1))
           :nd (fnk [votes] (count-votes votes  1))
           :ns (fnk [votes] (count-votes votes))
           ; XXX - Change when we flip votes!!!
           :pa (fnk [na ns] (/ (+ 1 na) (+ 2 ns)))
           :pd (fnk [nd ns] (/ (+ 1 nd) (+ 2 ns)))
           :pat (fnk [na ns] (prop-test na ns))
           :pdt (fnk [nd ns] (prop-test nd ns))})]
  ; The graph implementation is in a closure so that we don't reify classes every time function is called.
  ; This can cause PermGen space crashes.
  (defn- initial-comment-stats
    "Vote count stats for a given vote column. This vote column should represent the votes for a specific
    comment and group. Comparisons _between_ groups happen later. See `(doc conv-repness)` for key details."
    [vote-col]
    (initial-comment-stats-graphimpl {:votes vote-col})))


(defn- add-comparitive-stats
  "Builds on results of initial-comment-stats by doing comparisons _between_ groups. Args are
  in group stats (as returned by initial-comment-stats), and list of stats for rest of groups.
  See `(doc conv-repness)` for key details."
  [in-stats rest-stats]
  (assoc in-stats

    ; reduce with indices, so we have tids
    (with-indices stats)
    (reduce
      (fn [result [tid stats]]
        ; Inner reduce folds data into result for each group in comment stats
        ; XXX - could this be an assoc-in?
        (reduce
