Index: src/enc-unicode.lisp
===================================================================
--- src/enc-unicode.lisp	(revision 315654)
+++ src/enc-unicode.lisp	(working copy)
@@ -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)
@@ -89,6 +91,7 @@
 
 ;;;; UTF-8
 
+(eval-when (:compile-toplevel :load-toplevel :execute)
 (define-character-encoding :utf-8
     "An 8-bit, variable-length character encoding in which
 character code points in the range #x00-#x7f can be encoded in a
@@ -98,6 +101,7 @@
   :literal-char-code-limit #x80
   :bom-encoding #(#xef #xbb #xbf)
   :default-replacement #xfffd)
+) ;; end EVAL-WHEN
 
 (define-condition invalid-utf8-starter-byte (character-decoding-error)
   ()
@@ -183,6 +187,7 @@
                      (assert (= i end))
                      (return (values nchars i))))))
 
+(eval-when (:compile-toplevel :load-toplevel :execute)
 (define-encoder :utf-8 (getter src-type setter dest-type)
   `(named-lambda utf-8-encoder (src start end dest d-start)
      (declare (type ,src-type src)
@@ -217,6 +222,7 @@
                 (set-octet 3 (f-logior #x80 (f-logand code #x3f)))
                 (f-incf di 4))))
            finally (return (f-- di d-start)))))
+) ;; end EVAL-WHEN
 
 (define-decoder :utf-8 (getter src-type setter dest-type)
   `(named-lambda utf-8-decoder (src start end dest d-start)
Index: src/encodings.lisp
===================================================================
--- src/encodings.lisp	(revision 315654)
+++ src/encodings.lisp	(working copy)
@@ -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
Index: src/strings.lisp
===================================================================
--- src/strings.lisp	(revision 315654)
+++ src/strings.lisp	(working copy)
@@ -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
Index: src/enc-ascii.lisp
===================================================================
--- src/enc-ascii.lisp	(revision 315654)
+++ src/enc-ascii.lisp	(working copy)
@@ -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 (>= (the fixnum octet) 128)
       (handle-error)
       octet))
+) ;; end EVAL-WHEN
Index: src/enc-ebcdic.lisp
===================================================================
--- src/enc-ebcdic.lisp	(revision 315654)
+++ src/enc-ebcdic.lisp	(working copy)
@@ -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
Index: src/packages.lisp
===================================================================
--- src/packages.lisp	(revision 315654)
+++ src/packages.lisp	(working copy)
@@ -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
Index: src/sharp-backslash.lisp
===================================================================
--- src/sharp-backslash.lisp	(revision 315654)
+++ src/sharp-backslash.lisp	(working copy)
@@ -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
Index: src/enc-iso-8859.lisp
===================================================================
--- src/enc-iso-8859.lisp	(revision 315654)
+++ src/enc-iso-8859.lisp	(working copy)
@@ -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
Index: src/external-format.lisp
===================================================================
--- src/external-format.lisp	(revision 315654)
+++ src/external-format.lisp	(working copy)
@@ -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*
Index: babel.asd
===================================================================
--- babel.asd	(revision 315654)
+++ babel.asd	(working copy)
@@ -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>"
