                     conv (if votes
                            (conv-update conv-man conv votes error-handler)
                            conv)]
+                (log/info "Completed computing conversation zid:" zid)
+                (write-conv-updates! conv-man conv)
+                ;; Run reports corr matrix stuff (etc)
                 (doseq [report-task generate_report_data]
                   (generate-report-data! conv-man conv report-task))
-                (log/info "Completed computing conversation zid:" zid)
                 (swap! conversations assoc-in [zid :conv] conv)
-                (doseq [[k f] @listeners] (try (f conv) (catch Exception e (log/error "Listener error") (.printStackTrace e))))
+                (async/thread
+                  (doseq [[k f] @listeners] (try (f conv) (catch Exception e (log/error "Listener error") (.printStackTrace e)))))
                 (recur conv)))))))))
 
 

          ;; If nil comes through as the first message, then the chan is closed, and we should be done, not continue looping forever
          (when-not (async/poll! kill-chan)
            (when-let [first-msg (<! message-chan)]
              (let [retry-msgs (async/poll! retry-chan)
                    _ (log/info "Message chan put in queue-message-batch! for zid:" zid)
                    msgs (vec (concat retry-msgs [first-msg] (take-all! message-chan)))
                    {:as split-msgs :keys [votes moderation generate_report_data]} (split-batches msgs)
                    error-handler (build-update-error-handler conv-man retry-chan conv)
                    _ (log/info "About to run updaters")
                    ;; TODO Oh... is this how we're failing to get moderation affecting repness? We're presently only updating blob
                    ;; (via `update`) if there are also votes. (see below)
                    conv (if moderation
                           (conv/mod-update conv moderation)
                           conv)

  (let [rid (:rid report-data)
        tids (map :tid (postgres/query (:postgres conv-man) (postgres/report-tids rid)))
        corr-mat (corr/compute-corr conv tids)]
    (async/thread
      (postgres/insert-correlationmatrix! postgres rid corr-mat)
      ;; TODO update to submit usng task type and task bucket
      (postgres/mark-task-complete! postgres (-> report-data :task-record :rid)))))


;; Need to think about what to do if failed conversations lead to messages piling up in the message queue XXX
