    :trigger/trigger-fire? punctuation-fire?})
 
 (def ^:export watermark
-  {:trigger/trigger-fire? watermark-fire?})
+  {:trigger/init-locals watermark-init-locals
+   :trigger/trigger-fire? watermark-fire?})
 
 (def ^:export percentile-watermark
-  {:trigger/init-state percentile-watermark-init-state
-   :trigger/init-locals percentile-watermark-init-locals
-   :trigger/next-state percentile-watermark-next-state
+  {:trigger/init-locals percentile-watermark-init-locals
    :trigger/trigger-fire? percentile-watermark-fire?})

  [trigger state state-event]
  (:fire? state))

(defn watermark-fire?
  [{:keys [trigger/period]} trigger-state {:keys [event-type upper-bound watermarks] :as state-event}]
  (or (= :job-completed event-type) 
      (and (= :watermark event-type)
           (let [standard (if period (apply to-standard-units period) 0)]
             (> (:input watermarks) (+ upper-bound standard))))))

(defn percentile-watermark-fire?
  [trigger trigger-state {:keys [lower-bound upper-bound event-type segment window]}]
  ;; If this was stimulated by a new segment, check if it should fire.
  ;; Otherwise if this was a completed task, always fire.
  (or (and segment (exceeds-percentile-watermark? window trigger lower-bound upper-bound segment))

  [trigger]
  {:fire? false})

;; Init local functions

(defn segment-init-locals [trigger]
