                           (^void reportError [this ^Throwable error]
                                  (report-error-fn error)
                                  ))]
+    (log-message "Preparing bolt " component-id ":" task-id)
     (.prepare bolt
               storm-conf
               topology-context
               (OutputCollectorImpl. topology-context output-collector))
+    (log-message "Prepared bolt " component-id ":" task-id)
     ;; TODO: can get any SubscribedState objects out of the context now
     [(fn []
        ;; synchronization needs to be done with a key provided by this bolt, otherwise:

                                  (.add event-queue #(fail-spout-msg spout storm-conf spout-id tuple time-delta task-stats)))
                                )))
        send-spout-msg (fn [out-stream-id values message-id out-task-id]
                         (let [task-id (.getThisTaskId topology-context)
                               gen-id (MessageId/generateId)
                               tuple-id (if message-id
                                          (MessageId/makeRootId gen-id)
                                          (MessageId/makeUnanchored))

                                      :kill-fn report-error-and-die))
        system-threads [heartbeat-thread]
        all-threads  (concat executor-threads system-threads)]
    (log-message "Finished loading task " component-id ":" task-id)
    (reify
       Shutdownable
       (shutdown
