                           [e & exprs] (rest mform)]
                      (if-not (seq exprs)
                        [statements e]
-                       (recur (conj statements e) exprs)))]
+                       (recur (conj statements e) exprs)))
+
+                   ;; If we are in the do of an (ns), discard all forms.
+                   options (if (#{'clojure.core/ns 'ns} (first form))
+                             (dissoc options :forms)
+                             options)]
                
                (doseq [expr statements]
                  (eval expr options))

             true
             ;; Bare expression handling
             ;; ----------------------------
             (do ;; Run the code for side-effects
                 (let [res (when (and eval?
                                      (not (= 'clojure.core (.name *ns*))))
                             (em.jvm/eval mform))]

                   (let [ast (-> mform
                                 (util/ast))]
                     
                     ;; Add to the accumulator for the whole read
                     ;; program. Note that the following forms are
                     ;; discarded:
                     ;; 
                     ;; - clojure.core/require
                     ;; - clojure.core/use
                     ;; - clojure.core/refer
                     ;; - clojure.core/import
                     (when (and forms
                                (atom? forms)
                                (not (#{'clojure.core/require 'require
                                        'clojure.core/use     'use
                                        'clojure.core/refer   'refer
                                        'clojure.core/import  'import
                                        'clojure.core/import* 'import*}
                                      (first form))))
                       (swap! forms
                              #(-> %1
                                   (update-in [(.name *ns*) :forms]
