diff -rN -u old-babel/babel.asd new-babel/babel.asd
--- old-babel/babel.asd	2009-10-22 20:03:46.974136849 -0400
+++ new-babel/babel.asd	2009-10-22 20:03:46.978137779 -0400
@@ -24,6 +24,8 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+(in-package :asdf)
+
 (defsystem babel
   :description "Babel, a charset conversion library."
   :author "Luis Oliveira <loliveira@common-lisp.net>"
diff -rN -u old-babel/build.xcvb new-babel/build.xcvb
--- old-babel/build.xcvb	1969-12-31 19:00:00.000000000 -0500
+++ new-babel/build.xcvb	2009-10-22 20:03:46.978137779 -0400
@@ -0,0 +1,14 @@
+#+xcvb
+(module
+ (:fullname "babel"
+  :depends-on ("src/packages"
+	       "src/encodings"
+	       "src/enc-ascii"
+	       "src/enc-ebcdic"
+	       "src/enc-iso-8859"
+	       "src/enc-unicode"
+	       "src/external-format"
+	       "src/strings"
+	       "src/sharp-backslash")
+  :build-depends-on ("alexandria" "trivial-features")
+  :supersedes-asdf ("babel")))
diff -rN -u old-babel/src/enc-ascii.lisp new-babel/src/enc-ascii.lisp
--- old-babel/src/enc-ascii.lisp	2009-10-22 20:03:46.958136970 -0400
+++ new-babel/src/enc-ascii.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -24,8 +24,11 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+#+xcvb (module (:depends-on ("src/packages" "src/encodings")))
+
 (in-package #:babel-encodings)
 
+(eval-when (:compile-toplevel :load-toplevel :execute)
 (define-character-encoding :ascii
     "A 7-bit, fixed-width character encoding in which all
 character codes map to their Unicode equivalents."
@@ -41,3 +44,4 @@
   (if (>= octet 128)
       (handle-error)
       octet))
+) ;; end EVAL-WHEN
diff -rN -u old-babel/src/enc-ebcdic.lisp new-babel/src/enc-ebcdic.lisp
--- old-babel/src/enc-ebcdic.lisp	2009-10-22 20:03:46.962136643 -0400
+++ new-babel/src/enc-ebcdic.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -24,6 +24,8 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+#+xcvb (module (:depends-on ("src/packages" "src/encodings")))
+
 (in-package #:babel-encodings)
 
 (define-character-encoding :ebcdic-us
diff -rN -u old-babel/src/enc-iso-8859.lisp new-babel/src/enc-iso-8859.lisp
--- old-babel/src/enc-iso-8859.lisp	2009-10-22 20:03:46.958136970 -0400
+++ new-babel/src/enc-iso-8859.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -27,6 +27,8 @@
 ;;; This implementation is largely based on OpenMCL's l1-unicode.lisp
 ;;;   Copyright (C) 2006 Clozure Associates and contributors.
 
+#+xcvb (module (:depends-on ("src/packages" "src/encodings")))
+
 (in-package #:babel-encodings)
 
 ;;; Typically, ISO-8859-* codes in the range #x00-#x9f map straight
diff -rN -u old-babel/src/encodings.lisp new-babel/src/encodings.lisp
--- old-babel/src/encodings.lisp	2009-10-22 20:03:46.966137294 -0400
+++ new-babel/src/encodings.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -24,10 +24,13 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+#+xcvb (module (:depends-on ("src/packages")))
+
 (in-package #:babel-encodings)
 
 ;;;; Character Encodings
 
+(eval-when (:compile-toplevel :load-toplevel :execute)
 (defclass character-encoding ()
   ((name :initarg :name :reader enc-name
          :initform (error "Must specify a NAME for this character encoding."))
@@ -75,6 +78,7 @@
           literal-char-code-limit)
     (setf (slot-value enc 'decode-literal-code-unit-limit)
           literal-char-code-limit)))
+) ;; end EVAL-WHEN
 
 #-(and)
 (defmethod describe-object ((enc character-encoding) s)
@@ -87,6 +91,7 @@
     (format s "~&~A~%~%" documentation))
   (call-next-method))
 
+(eval-when (:compile-toplevel :load-toplevel :execute)
 (defvar *supported-character-encodings* nil)
 
 (defun list-character-encodings ()
@@ -196,6 +201,7 @@
       (setq mapping (make-instance 'abstract-mapping))
       (setf (get-abstract-mapping encoding) mapping))
     (setf (slot-value mapping slot-name) fn)))
+) ;; end EVAL-WHEN
 
 ;;; See enc-*.lisp for example usages of these 4 macros.
 
@@ -219,6 +225,7 @@
                            (named-lambda code-point-counter (,acc ,type)
                              ,@body)))
 
+(eval-when (:compile-toplevel :load-toplevel :execute)
 (defun instantiate-encoder (encoding am octet-seq-getter octet-seq-type
                             code-point-seq-setter code-point-seq-type)
   (declare (ignore encoding))
@@ -252,6 +259,7 @@
       (funcall (octet-counter-factory am)
                code-point-seq-getter
                code-point-seq-type)))
+) ;; end EVAL-WHEN
 
 ;;; Expands into code generated by the available abstract mappings
 ;;; that will be compiled into concrete mappings.  This is used in
diff -rN -u old-babel/src/enc-unicode.lisp new-babel/src/enc-unicode.lisp
--- old-babel/src/enc-unicode.lisp	2009-10-22 20:03:46.962136643 -0400
+++ new-babel/src/enc-unicode.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -27,6 +27,8 @@
 ;;; This implementation is largely based on OpenMCL's l1-unicode.lisp
 ;;;   Copyright (C) 2006 Clozure Associates and contributors.
 
+#+xcvb (module (:depends-on ("src/packages" "src/encodings")))
+
 (in-package #:babel-encodings)
 
 (eval-when (:compile-toplevel :load-toplevel :execute)
@@ -42,6 +44,7 @@
 (defmacro f-logxor (&rest integers) `(the fixnum (logxor ,@integers)))
 
 ;;;; UTF-8
+(eval-when (:compile-toplevel :load-toplevel :execute)
 
 (define-character-encoding :utf-8
     "An 8-bit, variable-length character encoding in which
@@ -715,3 +718,5 @@
                                unit))
                          dest di)
              finally (return (the fixnum (- di d-start)))))))
+
+) ;; end EVAL-WHEN
diff -rN -u old-babel/src/external-format.lisp new-babel/src/external-format.lisp
--- old-babel/src/external-format.lisp	2009-10-22 20:03:46.962136643 -0400
+++ new-babel/src/external-format.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -24,6 +24,8 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+#+xcvb (module (:depends-on ("src/packages" "src/encodings")))
+
 (in-package #:babel)
 
 (defvar *default-eol-style*
diff -rN -u old-babel/src/packages.lisp new-babel/src/packages.lisp
--- old-babel/src/packages.lisp	2009-10-22 20:03:46.958136970 -0400
+++ new-babel/src/packages.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -24,6 +24,8 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+#+xcvb (module ())
+
 (in-package #:cl-user)
 
 (defpackage #:babel-encodings
diff -rN -u old-babel/src/sharp-backslash.lisp new-babel/src/sharp-backslash.lisp
--- old-babel/src/sharp-backslash.lisp	2009-10-22 20:03:46.966137294 -0400
+++ new-babel/src/sharp-backslash.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -24,6 +24,8 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+#+xcvb (module (:depends-on ("src/packages")))
+
 (in-package #:babel)
 
 #-allegro
diff -rN -u old-babel/src/strings.lisp new-babel/src/strings.lisp
--- old-babel/src/strings.lisp	2009-10-22 20:03:46.966137294 -0400
+++ new-babel/src/strings.lisp	2009-10-22 20:03:46.982137243 -0400
@@ -24,6 +24,17 @@
 ;;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 ;;; DEALINGS IN THE SOFTWARE.
 
+#+xcvb
+(module
+ (:depends-on ("src/packages"
+               "src/encodings"
+               "src/enc-unicode"
+               "src/enc-ascii"
+               "src/external-format")
+  :compile-depends-on ("src/encodings"
+                       "src/enc-unicode"
+                       "src/enc-ascii")))
+
 (in-package #:babel)
 
 ;;; The usefulness of this string/octets interface of Babel's is very

