diff -rN -u old-bordeaux-threads/build.xcvb new-bordeaux-threads/build.xcvb
--- old-bordeaux-threads/build.xcvb	1969-12-31 19:00:00.000000000 -0500
+++ new-bordeaux-threads/build.xcvb	2009-10-22 21:41:31.769141489 -0400
@@ -0,0 +1,8 @@
+;; -*- Lisp -*-
+#+xcvb
+(module
+ (:fullname "bordeaux-threads"
+  :depends-on
+  ("src/bordeaux-threads"
+   "src/default-implementations")
+  :supersedes-asdf ("bordeaux-threads")))
diff -rN -u old-bordeaux-threads/src/allegro.lisp new-bordeaux-threads/src/allegro.lisp
--- old-bordeaux-threads/src/allegro.lisp	2009-10-22 21:41:31.757138555 -0400
+++ new-bordeaux-threads/src/allegro.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads" (:require "process"))))
+
 (in-package #:bordeaux-threads)
 
 ;;; documentation on the Allegro Multiprocessing interface can be found at
diff -rN -u old-bordeaux-threads/src/armedbear.lisp new-bordeaux-threads/src/armedbear.lisp
--- old-bordeaux-threads/src/armedbear.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/armedbear.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
+
 (in-package #:bordeaux-threads)
 
 ;;; the implementation of the Armed Bear thread interface can be found in
diff -rN -u old-bordeaux-threads/src/bordeaux-threads.lisp new-bordeaux-threads/src/bordeaux-threads.lisp
--- old-bordeaux-threads/src/bordeaux-threads.lisp	2009-10-22 21:41:31.757138555 -0400
+++ new-bordeaux-threads/src/bordeaux-threads.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module ())
+
 (defpackage bordeaux-threads
   (:nicknames #:bt)
   (:use #:cl)
@@ -71,9 +73,10 @@
 (defvar *supports-threads-p* nil
   "This should be set to T if the running instance has thread support.")
 
-(defun mark-supported ()
-  (setf *supports-threads-p* t)
-  (pushnew :bordeaux-threads *features*))
+(defmacro mark-supported ()
+  `(eval-when (:compile-toplevel :load-toplevel :execute)
+     (setf *supports-threads-p* t)
+     (pushnew :bordeaux-threads *features*)))
 
 (define-condition bordeaux-mp-condition (error)
   ((message :initarg :message :reader message))
diff -rN -u old-bordeaux-threads/src/clisp.lisp new-bordeaux-threads/src/clisp.lisp
--- old-bordeaux-threads/src/clisp.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/clisp.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -5,6 +5,7 @@
 
 Distributed under the MIT license (see LICENSE file)
 |#
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
 
 (in-package #:bordeaux-threads)
 
diff -rN -u old-bordeaux-threads/src/cmu.lisp new-bordeaux-threads/src/cmu.lisp
--- old-bordeaux-threads/src/cmu.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/cmu.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
+
 (in-package #:bordeaux-threads)
 
 ;;; Thread Creation
diff -rN -u old-bordeaux-threads/src/condition-variables.lisp new-bordeaux-threads/src/condition-variables.lisp
--- old-bordeaux-threads/src/condition-variables.lisp	2009-10-22 21:41:31.765141396 -0400
+++ new-bordeaux-threads/src/condition-variables.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/default-implementations")))
+
 (in-package #:bordeaux-threads)
 
 ;;; This file provides a portable implementation of condition
diff -rN -u old-bordeaux-threads/src/corman.lisp new-bordeaux-threads/src/corman.lisp
--- old-bordeaux-threads/src/corman.lisp	2009-10-22 21:41:31.757138555 -0400
+++ new-bordeaux-threads/src/corman.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads" (:require "threads"))))
+
 (in-package #:bordeaux-threads)
 
 ;;; Thread Creation
diff -rN -u old-bordeaux-threads/src/default-implementations.lisp new-bordeaux-threads/src/default-implementations.lisp
--- old-bordeaux-threads/src/default-implementations.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/default-implementations.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -1,5 +1,39 @@
 ;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; indent-tabs-mode: nil -*-
 
+#+xcvb
+(module
+ (:depends-on
+  ("src/bordeaux-threads"
+   (:cond ((:featurep
+            (:not
+             (:or (:and :allegro :multiprocessing)
+                  :armedbear
+                  (:and :clisp :mt)
+                  (:and :cmu :mp)
+                  :corman
+                  (:and :digitool :ccl-5.1)
+                  (:and :ecl :threads)
+                  :lispworks
+                  (:and :openmcl :openmcl-native-threads)
+                  (:and :sbcl :sb-thread)
+                  :scl)))
+           "src/unsupported")
+          (t
+           (:when (:featurep (:or :armed-bear :ecl :lispworks :digitool))
+             "src/condition-variables")
+           (:cond
+             ((:featurep :allegro)   "src/allegro")
+             ((:featurep :armedbear) "src/armedbear")
+             ((:featurep :clisp)     "src/clisp")
+             ((:featurep :cmu)       "src/cmu")
+             ((:featurep :corman)    "src/corman")
+             ((:featurep :digitool)  "src/mcl")
+             ((:featurep :ecl)       "src/ecl")
+             ((:featurep :lispworks) "src/lispworks")
+             ((:featurep :openmcl)   "src/openmcl")
+             ((:featurep :sbcl)      "src/sbcl")
+             ((:featurep :scl)       "src/scl")))))))
+
 (in-package #:bordeaux-threads)
 
 ;;; Helper macros
@@ -245,7 +279,7 @@
 BODY does not complete within `TIMEOUT' seconds. On implementations which do not
 support WITH-TIMEOUT natively and don't support threads either it has no effect."
   (declare (ignorable timeout))
-  #+thread-support
+  #+bordeaux-threads
   (let ((ok-tag (gensym "OK"))
         (timeout-tag (gensym "TIMEOUT"))
         (caller (gensym "CALLER"))
@@ -268,7 +302,7 @@
              (error 'timeout))
          (when (thread-alive-p ,sleeper)
            (destroy-thread ,sleeper)))))
-  #-thread-support
+  #-bordeaux-threads
   `(progn
      ,@body))
 
diff -rN -u old-bordeaux-threads/src/ecl.lisp new-bordeaux-threads/src/ecl.lisp
--- old-bordeaux-threads/src/ecl.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/ecl.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
+
 (in-package #:bordeaux-threads)
 
 ;;; documentation on the ECL Multiprocessing interface can be found at
diff -rN -u old-bordeaux-threads/src/lispworks.lisp new-bordeaux-threads/src/lispworks.lisp
--- old-bordeaux-threads/src/lispworks.lisp	2009-10-22 21:41:31.765141396 -0400
+++ new-bordeaux-threads/src/lispworks.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
+
 (in-package #:bordeaux-threads)
 
 ;;; documentation on the LispWorks Multiprocessing interface can be found at
diff -rN -u old-bordeaux-threads/src/mcl.lisp new-bordeaux-threads/src/mcl.lisp
--- old-bordeaux-threads/src/mcl.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/mcl.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
+
 (in-package #:bordeaux-threads)
 
 ;;; Thread Creation
diff -rN -u old-bordeaux-threads/src/openmcl.lisp new-bordeaux-threads/src/openmcl.lisp
--- old-bordeaux-threads/src/openmcl.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/openmcl.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
+
 (in-package #:bordeaux-threads)
 
 ;;; documentation on the OpenMCL Threads interface can be found at
diff -rN -u old-bordeaux-threads/src/sbcl.lisp new-bordeaux-threads/src/sbcl.lisp
--- old-bordeaux-threads/src/sbcl.lisp	2009-10-22 21:41:31.757138555 -0400
+++ new-bordeaux-threads/src/sbcl.lisp	2009-10-22 21:41:31.773141024 -0400
@@ -5,6 +5,7 @@
 
 Distributed under the MIT license (see LICENSE file)
 |#
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
 
 (in-package #:bordeaux-threads)
 
diff -rN -u old-bordeaux-threads/src/scl.lisp new-bordeaux-threads/src/scl.lisp
--- old-bordeaux-threads/src/scl.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/scl.lisp	2009-10-22 21:41:31.777141538 -0400
@@ -5,6 +5,7 @@
 
 Distributed under the MIT license (see LICENSE file)
 |#
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
 
 (in-package #:bordeaux-threads)
 
diff -rN -u old-bordeaux-threads/src/unsupported.lisp new-bordeaux-threads/src/unsupported.lisp
--- old-bordeaux-threads/src/unsupported.lisp	2009-10-22 21:41:31.761140883 -0400
+++ new-bordeaux-threads/src/unsupported.lisp	2009-10-22 21:41:31.777141538 -0400
@@ -6,6 +6,8 @@
 Distributed under the MIT license (see LICENSE file)
 |#
 
+#+xcvb (module (:depends-on ("src/bordeaux-threads")))
+
 (in-package :bordeaux-threads)
 
 (warn "Either there is no Bordeaux-threads support for your

