anchor.diff:  
   (defun remove-event-value (event slot)
     "Removes SLOT from EVENT."
  -  (with-slots (other-params) event
  -    (setf other-params (alexandria:remove-from-plist other-params (alexandria:make-keyword slot)))))
  +  (with-slots (event-plist) event
  +    (setf event-plist (alexandria:remove-from-plist event-plist (alexandria:make-keyword slot)))))
   
   (defun raw-get-event-value (event slot)
     "Get the value of SLOT in EVENT without running any conversion functions."
  -  (getf (slot-value event 'other-params) (alexandria:make-keyword slot)))
  +  (getf (slot-value event 'event-plist) (alexandria:make-keyword slot)))
   
   (defun get-event-value (event &optional slot) ;; FIX: swap argument order, stop using this in cl-patterns
     "Get the value of SLOT in EVENT, running any necessary conversion functions.
  
positive.code:   (format t "Playing ~s at ~f.~%" item (/ (get-internal-real-time) internal-time-units-per-second)))
  
  (defmethod keys ((item event))
    (keys (slot-value item 'other-params)))
  
  (defun plist-set (plist key value) ;; doesn't actually setf the place; only returns an altered plist.
    "Return a new copy of PLIST, but with its KEY set to VALUE. If VALUE is nil, return a copy without KEY."
  
negative.code: 
  (defun raw-set-event-value (event slot value)
    "Set the value of SLOT to VALUE in EVENT without running any conversion functions."
    (with-slots (event-plist) event
      (setf event-plist (plist-set event-plist (alexandria:make-keyword slot) value))))
  
  (defun set-event-value (event slot value) ;; kind of deprecated. prefer (setf (event-value EVENT SLOT) VALUE) instead.
    "Set the value of SLOT to VALUE in EVENT, running any conversion functions that exist.
  