anchor.diff:    (:method ((metric (eql :m)) field)
       (parse-field-for-metric :float field)))
   
  -(defun without-return (string)
  -  (when string
  -    (remove #\Return string)))
  -
  -(defun parse-frame (data markers vicon-file)
  +(defun parse-frame (data vicon-file)
     (let ((frame (make-instance 'frame
                                 :vicon-file vicon-file
                                 :id (parse-integer (first data))
                                 :sub-id (parse-integer (second data))))
           (data (cddr data))) ; position data starts after id and sub-id
  -    (loop for (marker . fields) in markers
  +    (loop for (marker . fields) in (markers vicon-file)
             for point = (make-instance 'marker-point :marker marker)
             do (loop for (field . metric) in fields
                      for value = (pop data)
  
positive.code:          (setf (marker-point marker frame) point))
      frame))
  
  (defun parse-frames (data markers vicon-file)
    (let ((frames (make-array (length data) :adjustable T :fill-pointer 0)))
      (dolist (record data)
        (vector-push-extend (parse-frame (cl-ppcre:split "," record) markers vicon-file) frames))
      frames))
  
  (defun parse-vicon-file (pathname &key external-format)
    (cl-ppcre:register-groups-bind (description resolution markers fields metrics data)
        ("(.*?)[\\r\\n]+([0-9]*)[\\r\\n]+(.*?)[\\r\\n]+(.*?)[\\r\\n]+(.*?)[\\r\\n]+([\\s\\S]*)"
         (alexandria:read-file-into-string pathname :external-format external-format))
      (declare (ignore data))
      (let ((file (make-instance 'vicon-file :file pathname
                                             :description description
                                             :resolution (parse-integer resolution)))
            (markers (parse-marker-list
                      (cddr (cl-ppcre:split "," markers))
                      (cddr (cl-ppcre:split "," fields))
                      (cddr (cl-ppcre:split "," metrics)))))
        (setf (frames file)
              (parse-frames
               (cl-ppcre:split "[\\r\\n]+" data)
               markers
               file))
        file)))
  
negative.code:    (timestamp :initarg :timestamp :accessor timestamp)
     (description :initarg :description :accessor description)
     (resolution :initarg :resolution :accessor resolution)
     (markers :initarg :markers :accessor markers)
     (frames :initarg :frames :accessor frames))
    (:default-initargs
     :file (error "FILE required.")
     :description NIL
     :resolution (error "RESOLUTION required.")
     :markers (error "MARKERS required.")
     :frames (make-array 0 :adjustable T :fill-pointer 0)))
  
  (defmethod initialize-instance :after ((file vicon-file) &key)
    (unless (slot-boundp file 'timestamp)
  