         (when is-http
           (elfeed-curl--parse-http))
         (setf (point) (point-min))
-        ;; TODO: decode-coding-region
+        (elfeed-curl--decode)
         (funcall cb t)))))
 
 (defun elfeed-curl-retrieve (url cb &optional headers)
+  "Retrieve contents from URL asynchronously, calling CB with one status argument.
+The destination buffer is set at the current buffer for the
+callback, which is responsible for killing the buffer. HEADERS is
+an alist of additional headers to add to the HTTP request. This
+function returns the destination buffer."
   (let* ((buffer (generate-new-buffer (format "*curl %s*" url)))
          (is-http (elfeed-curl--url-is-http url))
          (args (elfeed-curl--args is-http url headers)))

  "Numeric HTTP response code, nil for non-HTTP protocols.")

(defun elfeed-curl--parse-headers ()
  (prog1
      (cl-loop until (looking-at "\r\n")
               do (re-search-forward "\\([^:]+\\): +\\([^\r]+\\)")

              (process-get process :is-http) is-http)))))

(defun elfeed-curl--run-queue ()
  "Possibly fire off some new requests."
  (while (and (< elfeed-curl-queue-active elfeed-curl-max-connections)
              (> (length elfeed-curl-queue) 0))
    (cl-destructuring-bind (url cb headers) (pop elfeed-curl-queue)
      (cl-incf elfeed-curl-queue-active)
      (elfeed-curl-retrieve url
