diff -urN xmlisp-2.0.1/XML/Load-XMLisp.lisp xmlisp-2.0.1.patch/XML/Load-XMLisp.lisp
--- xmlisp-2.0.1/XML/Load-XMLisp.lisp	2005-03-01 14:43:51.817289734 +0100
+++ xmlisp-2.0.1.patch/XML/Load-XMLisp.lisp	2005-03-01 14:44:13.372148387 +0100
@@ -21,8 +21,14 @@
 
 
 (defvar *XMLisp-Files*
-  '("xml-utilities" "element-definition" "xml-tag-definitions" "element-implementation"
-    "name-character-check" "xml-parser" "xml-writer" "XMLisp")
+  '("xml-utilities"
+    "element-definition"
+    "xml-tag-definitions"
+    "element-implementation"
+    "name-character-check"
+    "xml-parser"
+    "xml-writer"
+    "XMLisp")
   "all the XMLisp files")
 
 
diff -urN xmlisp-2.0.1/XML/XMLisp.lisp xmlisp-2.0.1.patch/XML/XMLisp.lisp
--- xmlisp-2.0.1/XML/XMLisp.lisp	2005-03-01 14:43:51.818289589 +0100
+++ xmlisp-2.0.1.patch/XML/XMLisp.lisp	2005-03-01 15:38:02.153594495 +0100
@@ -46,35 +46,6 @@
 
 (in-package :xml)
 
-;; each MOP implementation appears to keep its symbols in a different, application specific package: how clever!!
-;; probably not a good idea to just USE that entire package
-
-(eval-when (:compile-toplevel :load-toplevel :execute) 
-  #+:mcl
-  (import '(ccl:slot-definition-name ccl:slot-definition-type ccl:slot-definition-initform))
-  #+:ccl-5.1
-  (import '(ccl:class-slots))
-  #+:common-lispworks
-  (import '(harlequin-common-lisp:class-slots harlequin-common-lisp:slot-definition-name
-            harlequin-common-lisp:slot-definition-type harlequin-common-lisp:slot-definition-initform)))
-
-
-(export '(
-          ;; classes
-          xml-serializer ![cdata[ !doctype !-- 
-          ;; aggregation methods
-          set-attribute-value add-subobject add-object-to-slot cleanup-sub-object-slots
-          ;; print control methods
-          xml-printable-as-attribute-value-p xml-printable-as-subelement-p map-object print-slot-with-name-p
-          print-slot-value-as-attribute print-slot-value-as-subelement print-slots
-          print-typed-attribute-value print-typed-subelement-value
-          ;; reading
-          load-object save-object finished-reading finished-reading-attributes read-typed-attribute-value
-          ;; variables
-          *XMLisp-Output-Non-Default-Value-Attributes*
-          def-element-class-name xml-tag-name-string))
-
-
 (defvar *XMLisp-Output-Non-Default-Value-Attributes* nil "if non-nil output also attributes that are the same as the default value.")
 
 (defvar *XMLiSP-Element-Class-Names* (make-hash-table :test #'eq) "table mapping element names to class names")
@@ -1128,7 +1099,21 @@
   (read-xmlisp-element (read-name-and-make-instance Stream) Stream))
 
 
-(set-macro-character #\< #'element-reader t)
+;;; FIXME: this does not nest properly. I think it's better to provide
+;;; a readtable for the user to enable & disable.
+(let ((read-syntax-enabled)
+      (<-macro-character nil))
+  (defun enable-xmlisp-read-syntax ()
+    (unless read-syntax-enabled
+      (setf read-syntax-enabled t)
+      (setf <-macro-character (multiple-value-list (get-macro-character #\<)))
+      (set-macro-character #\< #'element-reader t)))
+  (defun disable-xmlisp-read-syntax ()
+    (when read-syntax-enabled
+      (setf read-syntax-enabled nil)
+      (apply #'set-macro-character #\< <-macro-character))))
+
+(enable-xmlisp-read-syntax)
 
 ;_____________________________
 ; Platform Specific Printing   |
diff -urN xmlisp-2.0.1/XML/element-definition.lisp xmlisp-2.0.1.patch/XML/element-definition.lisp
--- xmlisp-2.0.1/XML/element-definition.lisp	2005-03-01 14:43:51.819289443 +0100
+++ xmlisp-2.0.1.patch/XML/element-definition.lisp	2005-03-01 14:44:13.373148242 +0100
@@ -18,14 +18,6 @@
 
 (in-package :xml)
 
-(export '(NAME
-          ELEMENT-ATTRIBUTES
-          CONTENT
-          START-TAG-ACTIONS
-          END-TAG-ACTIONS
-          CONTAINER
-          XML-ELEMENT))
-
 ;***************************************
 ;*  C L A S S   D E F I N I T I O N S  *
 ;***************************************
diff -urN xmlisp-2.0.1/XML/element-implementation.lisp xmlisp-2.0.1.patch/XML/element-implementation.lisp
--- xmlisp-2.0.1/XML/element-implementation.lisp	2005-03-01 14:43:51.819289443 +0100
+++ xmlisp-2.0.1.patch/XML/element-implementation.lisp	2005-03-01 14:44:13.374148096 +0100
@@ -18,12 +18,6 @@
 
 (in-package :xml)
 
-(export '(GET-ELEMENT-ATTRIBUTE
-          SET-ELEMENT-ATTRIBUTE
-          GET-CHILD-ELEMENT
-          GET-ELEMENT-TEXT-CONTENT
-          SET-ELEMENT-TEXT-CONTENT))
-
 ;***************************************
 ;*  I M P L E M E N T A T I O N        *
 ;***************************************
diff -urN xmlisp-2.0.1/XML/name-character-check.lisp xmlisp-2.0.1.patch/XML/name-character-check.lisp
--- xmlisp-2.0.1/XML/name-character-check.lisp	2005-03-01 14:43:51.819289443 +0100
+++ xmlisp-2.0.1.patch/XML/name-character-check.lisp	2005-03-01 14:44:13.374148096 +0100
@@ -19,16 +19,6 @@
 
 (in-package :xml)
 
-(export '(WHITE-SPACE-P
-          NAMECHARP
-          DIGITP
-          LETTERP
-          EXTENTERP
-          IDEOGRAPHICP
-          COMBINING-CHAR-P
-          BASE-CHAR-P))
-
-
 (defun WHITE-SPACE-P (Char)
   (declare (optimize (speed 3) (safety 0)))
   (case (char-code Char)
diff -urN xmlisp-2.0.1/XML/package.lisp xmlisp-2.0.1.patch/XML/package.lisp
--- xmlisp-2.0.1/XML/package.lisp	1970-01-01 01:00:00.000000000 +0100
+++ xmlisp-2.0.1.patch/XML/package.lisp	2005-03-01 15:01:24.883818661 +0100
@@ -0,0 +1,104 @@
+(defpackage XML
+  (:use "COMMON-LISP")
+  (:export
+   ;; symbols in xml-utilities.lisp:
+   "*PRINT-VERBOSE*"
+   "*XML-PROLOG*"
+   "*XML-VERSION*"
+   "*XML-FILE-VERSION*"
+   "*XML-FILE-BEING-PARSED*"
+   "FORMAT-IF-VERBOSE"
+   "PRINT-N-SPACES"
+   "MAP-TO-XML"
+   "MAP-FROM-XML"
+   ;; symbols in element-definition.lisp:
+   "NAME"
+   "ELEMENT-ATTRIBUTES"
+   "CONTENT"
+   "START-TAG-ACTIONS"
+   "END-TAG-ACTIONS"
+   "CONTAINER"
+   "XML-ELEMENT"
+   ;; symbols in xml-tag-definitions.lisp:
+   "*XML-ELEMENT-DEFINITIONS*"
+   "DEFXMLELEMENT"
+   "IN-XML-DOCUMENT"
+   ;; symbols in element-implementation.lisp:
+   "GET-ELEMENT-ATTRIBUTE"
+   "SET-ELEMENT-ATTRIBUTE"
+   "GET-CHILD-ELEMENT"
+   "GET-ELEMENT-TEXT-CONTENT"
+   "SET-ELEMENT-TEXT-CONTENT"
+   ;; symbols in name-character-check.lisp:
+   "WHITE-SPACE-P"
+   "NAMECHARP"
+   "DIGITP"
+   "LETTERP"
+   "EXTENTERP"
+   "IDEOGRAPHICP"
+   "COMBINING-CHAR-P"
+   "BASE-CHAR-P"
+   ;; symbols in xml-parser.lisp:
+   "PARSE-XML-FILE"
+   "PARSE-XML"
+   "READ-PROLOG"
+   "READ-ELEMENT"
+   "READ-NAME"
+   "READ-WHITE-SPACE"
+   "READ-EQUAL-SIGN"
+   "READ-VALUE"
+   "*XML-RELAXED-CASE*"
+   ;; symbols in xml-writer.lisp:
+   "PRINT-OBJECT"
+   "WRITE-ELEMENT"
+   ;; symbols in XMLisp.lisp:
+   ;; classes
+   "XML-SERIALIZER"
+   "![CDATA["
+   "!DOCTYPE"
+   "!-- "
+   ;; aggregation methods
+   "SET-ATTRIBUTE-VALUE"
+   "ADD-SUBOBJECT"
+   "ADD-OBJECT-TO-SLOT"
+   "CLEANUP-SUB-OBJECT-SLOTS"
+   ;; print control methods
+   "XML-PRINTABLE-AS-ATTRIBUTE-VALUE-P"
+   "XML-PRINTABLE-AS-SUBELEMENT-P"
+   "MAP-OBJECT"
+   "PRINT-SLOT-WITH-NAME-P"
+   "PRINT-SLOT-VALUE-AS-ATTRIBUTE"
+   "PRINT-SLOT-VALUE-AS-SUBELEMENT"
+   "PRINT-SLOTS"
+   "PRINT-TYPED-ATTRIBUTE-VALUE"
+   "PRINT-TYPED-SUBELEMENT-VALUE"
+   ;; reading
+   "LOAD-OBJECT"
+   "SAVE-OBJECT"
+   "FINISHED-READING"
+   "FINISHED-READING-ATTRIBUTES"
+   "READ-TYPED-ATTRIBUTE-VALUE"
+   ;; variables
+   "*XMLISP-OUTPUT-NON-DEFAULT-VALUE-ATTRIBUTES*"
+   "DEF-ELEMENT-CLASS-NAME"
+   "XML-TAG-NAME-STRING")
+
+  ;; each MOP implementation appears to keep its symbols in a
+  ;; different, application specific package: how clever!!  probably
+  ;; not a good idea to just USE that entire package
+  #+:mcl
+  (:import-from "CCL"
+                "SLOT-DEFINITION-NAME" "SLOT-DEFINITION-TYPE"
+                "SLOT-DEFINITION-INITFORM")
+                
+  #+:common-lispworks
+  (:import-from "HARLEQUIN-COMMON-LISP"
+                "CLASS-SLOTS" "SLOT-DEFINITION-NAME" "SLOT-DEFINITION-TYPE"
+                "SLOT-DEFINITION-INITFORM")
+  #+:ccl-5.1
+  (:import-from "CCL"
+                "CLASS-SLOTS")
+  #+sbcl
+  (:import-from "SB-MOP"
+                "CLASS-SLOTS" "SLOT-DEFINITION-INITFORM" "SLOT-DEFINITION-NAME"
+                "SLOT-DEFINITION-TYPE"))
diff -urN xmlisp-2.0.1/XML/xml-parser.lisp xmlisp-2.0.1.patch/XML/xml-parser.lisp
--- xmlisp-2.0.1/XML/xml-parser.lisp	2005-03-01 14:43:51.821289151 +0100
+++ xmlisp-2.0.1.patch/XML/xml-parser.lisp	2005-03-01 14:44:13.375147950 +0100
@@ -22,16 +22,6 @@
 
 (in-package :xml)
 
-(export '(PARSE-XML-FILE
-          PARSE-XML
-          READ-PROLOG
-          READ-ELEMENT
-          READ-NAME
-          READ-WHITE-SPACE
-          READ-EQUAL-SIGN
-          READ-VALUE
-          *XML-RELAXED-CASE*))
-
 (defparameter *XML-RELAXED-CASE* nil "ignore uppercase letters in xml tags?")
 
 (defun PARSE-XML-FILE (Filename)
diff -urN xmlisp-2.0.1/XML/xml-tag-definitions.lisp xmlisp-2.0.1.patch/XML/xml-tag-definitions.lisp
--- xmlisp-2.0.1/XML/xml-tag-definitions.lisp	2005-03-01 14:43:51.821289151 +0100
+++ xmlisp-2.0.1.patch/XML/xml-tag-definitions.lisp	2005-03-01 14:44:13.376147804 +0100
@@ -20,10 +20,6 @@
 
 (in-package :xml)
 
-(export '(*XML-ELEMENT-DEFINITIONS*
-         DEFXMLELEMENT
-         IN-XML-DOCUMENT))
-
 (defvar *XML-ELEMENT-DEFINITIONS* (make-hash-table :size 100))
 (defvar *XML-DOCUMENT* nil "The XML document for which the tag definitions need to be declared")
 
diff -urN xmlisp-2.0.1/XML/xml-utilities.lisp xmlisp-2.0.1.patch/XML/xml-utilities.lisp
--- xmlisp-2.0.1/XML/xml-utilities.lisp	2005-03-01 14:43:51.821289151 +0100
+++ xmlisp-2.0.1.patch/XML/xml-utilities.lisp	2005-03-01 14:44:13.376147804 +0100
@@ -19,17 +19,6 @@
 
 (in-package :xml)
 
-(export '(*PRINT-VERBOSE*
-          *XML-PROLOG*
-          *XML-VERSION*
-          *XML-FILE-VERSION*
-          *XML-FILE-BEING-PARSED*
-          FORMAT-IF-VERBOSE
-          PRINT-N-SPACES
-          MAP-TO-XML
-          MAP-FROM-XML))
-
-
 ;__________________________________
 ; P A R A M E T E R S             /
 ;________________________________/
diff -urN xmlisp-2.0.1/XML/xml-writer.lisp xmlisp-2.0.1.patch/XML/xml-writer.lisp
--- xmlisp-2.0.1/XML/xml-writer.lisp	2005-03-01 14:43:51.821289151 +0100
+++ xmlisp-2.0.1.patch/XML/xml-writer.lisp	2005-03-01 14:44:13.376147804 +0100
@@ -20,10 +20,6 @@
 
 (in-package :xml)
 
-(export '(PRINT-OBJECT
-          WRITE-ELEMENT))
-
-
 (defmethod PRINT-OBJECT ((Self Xml-Element) Stream)
   (declare (special $tab-level$))
   (let ((Attributes (element-attributes Self))
diff -urN xmlisp-2.0.1/XML/xmlisp.asd xmlisp-2.0.1.patch/XML/xmlisp.asd
--- xmlisp-2.0.1/XML/xmlisp.asd	1970-01-01 01:00:00.000000000 +0100
+++ xmlisp-2.0.1.patch/XML/xmlisp.asd	2005-03-01 14:58:02.688286092 +0100
@@ -0,0 +1,18 @@
+;;; -*- lisp -*-
+
+(defpackage :xmlisp.system
+  (:use :cl :asdf))
+
+(in-package :xmlisp.system)
+
+(defsystem xmlisp
+    :components ((:file "package")
+                 (:file "xml-utilities" :depends-on ("package"))
+                 (:file "element-definition" :depends-on ("package"))
+                 (:file "xml-tag-definitions" :depends-on ("package"))
+                 (:file "element-implementation" :depends-on ("package" "element-definition"))
+                 (:file "name-character-check" :depends-on ("package"))
+                 (:file "xml-parser" :depends-on ("package" "xml-utilities" "element-definition"))
+                 (:file "xml-writer" :depends-on ("package" "xml-utilities" "element-definition"))
+                 (:file "XMLisp" :depends-on ("package" "xml-utilities" "element-definition" "name-character-check"
+                                                        "xml-parser" "xml-writer"))))
\ No newline at end of file
