;; It was a package problem. Those "duplicate" slot names were from different packages. The solution was to modify uri-to-fluid-object to specify a symbols package (defun uri-to-fluid-object (uri &key (method :get) parameters) (multiple-value-bind (body status headers) (drakma:http-request uri :method method :parameters parameters) (unless (= 200 status) (api-error "The request for ~a failed with status code ~a." uri status)) (json:with-decoder-simple-clos-semantics (let ((json:*json-symbols-package* 'weather)) ;; This is what changed! (values (json:decode-json-from-string (babel:octets-to-string body)) status headers)))))