            (with-scope ~@body))))))
 
 (defmacro defpartial
-  "Defines a 'partial' which is baically some hiccup markup. An arguments vector
-  is required and can be used to destructure the dynamic vars set by a layout."
+  "Defines a 'partial' which is basically a function with some default context."
   [sym-name doc-string? destructuring & body]
-  (let [[doc-string destructuring body]
-        (if (string? doc-string?)
-          [doc-string? destructuring body]
-          ["" doc-string? (conj body destructuring)])]
+  (with-normalized-params
     `(defn ~sym-name
        ~doc-string
        [& args#]

  macro and binind the functions arguments to *site-options* and *parse* so
  partials can easily access them."
  [sym-name doc-string? destructuring & body]
  (let [[doc-string destructuring]
        (if (string? doc-string?)
          [doc-string? destructuring]
          ["" doc-string?])]
    `(defn ~sym-name
       ~doc-string
       [site-options# ^incise.parsers.parse.Parse parse#]


(declare ^:dynamic *site-options*)
(declare ^:dynamic *parse*)

(defmacro with-normalized-params [& body]
  `(let [[~'doc-string ~'destructuring ~'body]
         (if (string? ~'doc-string?)
           [~'doc-string? ~'destructuring ~'body]
           ["" ~'doc-string? (conj ~'body ~'destructuring)])]
     ~@body))

(defmacro deflayout
  "This is a helper macro for defining html layout functions. An html layout
