diff --git a/Makefile b/Makefile
index 3f9e2f42a6b13d73ee8018e8d8d584a2afb06717..d3d85cf698161b560bc3e22583605d512543d006 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ else
 lisps ?= ccl clisp sbcl ecl ecl_bytecodes cmucl abcl scl allegro lispworks allegromodern xcl gcl
 endif
 
-export ASDF_OUTPUT_TRANSLATIONS := (:output-translations (t ("${sourceDirectory}/tmp/fasls" :implementation)) :ignore-inherited-configuration)
+export ASDF_OUTPUT_TRANSLATIONS := (:output-translations (t ("${sourceDirectory}/build/fasls" :implementation)) :ignore-inherited-configuration)
 export CL_SOURCE_REGISTRY := (:source-registry (:tree "${sourceDirectory}") :ignore-inherited-configuration)
 
 ## MAJOR FAIL: gclcvs -- COMPILER BUG! Upstream fixed it, but upstream fails to compile.
@@ -43,17 +43,17 @@ archive:
 		--eval "(rewrite-license)" --eval "(quit)"
 	bin/make-tarball
 
-archive-copy: archive tmp/asdf.lisp
+archive-copy: archive build/asdf.lisp
 	git checkout release
-	bin/rsync-cp tmp/asdf*.tar.gz $(webhome_private)/archives
+	bin/rsync-cp build/asdf*.tar.gz $(webhome_private)/archives
 	bin/link-tarball $(clnet_home)
-	bin/rsync-cp tmp/asdf.lisp $(webhome_private)
+	bin/rsync-cp build/asdf.lisp $(webhome_private)
 	${MAKE} push
 	git checkout master
 
-tmp/asdf.lisp: $(wildcard *.lisp)
-	mkdir -p tmp
-	cat header.lisp package.lisp implementation.lisp utility.lisp upgrade.lisp pathname.lisp os.lisp component.lisp system.lisp find-system.lisp find-component.lisp lisp-build.lisp operation.lisp action.lisp lisp-action.lisp plan.lisp operate.lisp configuration.lisp output-translations.lisp source-registry.lisp backward-internals.lisp defsystem.lisp bundle.lisp concatenate-source.lisp backward-interface.lisp interface.lisp footer.lisp > $@
+build/asdf.lisp: $(wildcard *.lisp)
+	mkdir -p build
+	cat header.lisp package.lisp compatibility.lisp utility.lisp upgrade.lisp pathname.lisp os.lisp component.lisp system.lisp find-system.lisp find-component.lisp lisp-build.lisp operation.lisp action.lisp lisp-action.lisp plan.lisp operate.lisp configuration.lisp output-translations.lisp source-registry.lisp backward-internals.lisp defsystem.lisp bundle.lisp concatenate-source.lisp backward-interface.lisp interface.lisp footer.lisp > $@
 
 push:
 	git status
@@ -82,13 +82,13 @@ clean:
 		done; \
 	     fi; \
 	done
-	rm -rf tmp/ LICENSE test/try-reloading-dependency.asd
+	rm -rf build/ LICENSE test/try-reloading-dependency.asd
 	${MAKE} -C doc clean
 
 mrproper: clean
 	rm -rf .pc/ build-stamp debian/patches/ debian/debhelper.log debian/cl-asdf/ # debian crap
 
-test-upgrade: tmp/asdf.lisp
+test-upgrade: build/asdf.lisp
 	# 1.37 is the last release by Daniel Barlow
 	# 1.97 is the last release before Gary King takes over
 	# 1.369 is the last release by Gary King
@@ -116,7 +116,7 @@ test-upgrade: tmp/asdf.lisp
 	  for x in load-system load-lisp load-lisp-compile-load-fasl load-fasl just-load-fasl ; do \
 	    lo="(asdf-test::load-old-asdf \"$${tag}\")" ; \
 	    echo "Testing upgrade from ASDF $${tag} using method $$x" ; \
-	    git show $${tag}:asdf.lisp > tmp/asdf-$${tag}.lisp ; \
+	    git show $${tag}:asdf.lisp > build/asdf-$${tag}.lisp ; \
 	    case ${lisp}:$$tag:$$x in \
 	      abcl:2.0[01][1-9]:*|abcl:2.2[1-2]:*) \
 		: Skip, because it is so damn slow ;; \
@@ -141,12 +141,12 @@ test-upgrade: tmp/asdf.lisp
 		    *) echo "WTF?" ; exit 2 ;; esac ; \
 		  $$lv "(asdf-test::test-asdf $$l)" ) || \
 		{ echo "upgrade FAILED" ; exit 1 ;} ;; esac ; \
-	done ; done 2>&1 | tee tmp/results/${lisp}-upgrade.text
+	done ; done 2>&1 | tee build/results/${lisp}-upgrade.text
 
-test-forward-references: tmp/asdf.lisp
-	${SBCL} --noinform --no-userinit --no-sysinit --load tmp/asdf.lisp --load test/script-support.lisp --eval '(asdf-test::exit-lisp 0)' 2>&1 | cmp - /dev/null
+test-forward-references: build/asdf.lisp
+	${SBCL} --noinform --no-userinit --no-sysinit --load build/asdf.lisp --load test/script-support.lisp --eval '(asdf-test::exit-lisp 0)' 2>&1 | cmp - /dev/null
 
-test-lisp: tmp/asdf.lisp
+test-lisp: build/asdf.lisp
 	@cd test; ${MAKE} clean;./run-tests.sh ${lisp} ${test-glob}
 
 test: test-lisp test-forward-references doc
@@ -177,12 +177,12 @@ debian-package: mrproper
 
 # Replace SBCL's ASDF with the current one. -- Not recommended now that SBCL has ASDF2.
 # for casual users, just use (asdf:load-system :asdf)
-replace-sbcl-asdf: tmp/asdf.lisp
+replace-sbcl-asdf: build/asdf.lisp
 	${SBCL} --eval '(compile-file "$<" :output-file (format nil "~Aasdf/asdf.fasl" (sb-int:sbcl-homedir-pathname)))' --eval '(quit)'
 
 # Replace CCL's ASDF with the current one. -- Not recommended now that CCL has ASDF2.
 # for casual users, just use (asdf:load-system :asdf)
-replace-ccl-asdf: tmp/asdf.lisp
+replace-ccl-asdf: build/asdf.lisp
 	${CCL} --eval '(progn(compile-file "$<" :output-file (compile-file-pathname (format nil "~Atools/asdf.lisp" (ccl::ccl-directory))))(quit))'
 
 WRONGFUL_TAGS := 1.37 1.1720 README RELEASE STABLE
diff --git a/action.lisp b/action.lisp
index 5e8f81b5686c1578381bfa17ab332db724d84407..a972d20e7f00f2a5b409921e8476e857ba3ff96e 100644
--- a/action.lisp
+++ b/action.lisp
@@ -3,9 +3,9 @@
 
 (asdf/package:define-package :asdf/action
   (:recycle :asdf/action :asdf)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/pathname :asdf/os
-   :asdf/component :asdf/system :asdf/find-system :asdf/find-component :asdf/operation)
-  #+gcl<2.7 (:shadowing-import-from :asdf/implementation #:type-of)
+  (:use :common-lisp :asdf/compatibility :asdf/utility :asdf/pathname :asdf/os
+   :asdf/upgrade :asdf/component :asdf/system :asdf/find-system :asdf/find-component :asdf/operation)
+  #+gcl<2.7 (:shadowing-import-from :asdf/compatibility #:type-of)
   (:fmakunbound
    #:explain #:output-files #:perform #:perform-with-restarts
    #:operation-done-p #:compute-action-stamp #:component-depends-on #:mark-operation-done)
diff --git a/asdf.asd b/asdf.asd
index a84d9dbd273b5336dda22ad79ffed1d4e4b34c9d..c4ad32c7d1fc4fc33bfd08779ae62eb5e3e44722 100644
--- a/asdf.asd
+++ b/asdf.asd
@@ -11,25 +11,17 @@
 
 (defsystem :asdf
   :author ("Daniel Barlow")
+  :maintainer ("Francois-Rene Rideau")
   :licence "MIT"
   :description "Another System Definition Facility"
   :long-description "ASDF builds Common Lisp software organized into defined systems."
-  :version "2.26.70" ;; to be automatically updated by bin/bump-revision
+  :version "2.26.71" ;; to be automatically updated by bin/bump-revision
   :depends-on ()
-  :components
-  ((:file "asdf")))
+  :components ((:module "build" :components ((:file "asdf")))))
 
-;; The method below ensures that before we compile asdf, we load it as source.
-;; This ensures that when we compile asdf, it won't remove symbols and packages
-;; in the back of the compiling asdf, which then finds itself incapable of
-;; perform'ing the load-op'ing of the newly compiled asdf fasl because
-;; perform has been undefined during the initial package-frobbing eval-when code,
-;; but not redefined yet by loading the code rather than merely compiling it.
-;; Between ASDF 2.016.3 and 2.26.8, we could have used
-;; (:file "asdf" :do-first ((compile-op (load-source-op "asdf"))))
-;; What's below should be more compatible.
-;; We can't use find-component, because it's not compatible with old versions of ASDF 1.x
-
-(defmethod perform :before ((operation compile-op)
-			    (c (eql (first (module-components (find-system :asdf))))))
+(defmethod perform :before
+    ((o compile-op)
+     (c (eql (first (module-components
+                     (first (module-components (find-system :asdf))))))))
+  (declare (ignorable o))
   (perform (make-instance 'load-source-op) c))
diff --git a/backward-interface.lisp b/backward-interface.lisp
index 3f76574d87aeb97794163f26b0d7500e52bd539c..a4fcffc40d40af50413e457735e0f01c6b93e436 100644
--- a/backward-interface.lisp
+++ b/backward-interface.lisp
@@ -4,8 +4,8 @@
 (asdf/package:define-package :asdf/backward-interface
   (:recycle :asdf/backward-interface :asdf)
   (:fmakunbound #:component-load-dependencies)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/pathname :asdf/os
-   :asdf/component :asdf/system :asdf/operation :asdf/action
+  (:use :common-lisp :asdf/utility :asdf/pathname :asdf/os
+   :asdf/upgrade :asdf/component :asdf/system :asdf/operation :asdf/action
    :asdf/lisp-build :asdf/operate :asdf/output-translations)
   (:export
    #:*asdf-verbose*
diff --git a/backward-internals.lisp b/backward-internals.lisp
index 9a7e4fb7af07eb496a05741d364ad07ab130ea0b..750381723c06951904c808313de770ee057c6a7f 100644
--- a/backward-internals.lisp
+++ b/backward-internals.lisp
@@ -3,8 +3,8 @@
 
 (asdf/package:define-package :asdf/backward-internals
   (:recycle :asdf/backward-internals :asdf)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/pathname
-        :asdf/system :asdf/component :asdf/find-system :asdf/action)
+  (:use :common-lisp :asdf/utility :asdf/pathname
+   :asdf/upgrade :asdf/system :asdf/component :asdf/find-system :asdf/action)
   (:export ;; for internal use
    #:%refresh-component-inline-methods
    #:%resolve-if-component-dep-fails))
diff --git a/implementation.lisp b/compatibility.lisp
similarity index 91%
rename from implementation.lisp
rename to compatibility.lisp
index ae9bfe19d90757c96364986185be3663e2b86940..8317cf0693a615460769fc3e6a6bbe7b66ea1d9d 100644
--- a/implementation.lisp
+++ b/compatibility.lisp
@@ -1,9 +1,12 @@
 ;;;; -------------------------------------------------------------------------
-;;;; Handle ASDF portability to multiple implementations
+;;;; Handle compatibility with multiple implementations.
+;;; This file is for papering over the deficiencies and peculiarities
+;;; of various Common Lisp implementations.
+;;; For implementation-specific access to the system, see os.lisp instead.
 
-(asdf/package:define-package :asdf/implementation
+(asdf/package:define-package :asdf/compatibility
   (:use :common-lisp :asdf/package)
-  (:recycle :asdf/implementation :asdf)
+  (:recycle :asdf/compatibility :asdf)
   #+cormanlisp
   (:export
    #:logical-pathname #:translate-logical-pathname
@@ -12,9 +15,8 @@
   #+genera (:import-from :scl #:boolean)
   #+genera (:export #:boolean #:ensure-directories-exist)
   (:export
-   #:strcat #:compatfmt
-   #:asdf-message #:*asdf-verbose* #:*verbose-out*))
-(in-package :asdf/implementation)
+   #:strcat #:compatfmt))
+(in-package :asdf/compatibility)
 
 #-(or abcl allegro clisp clozure cmu cormanlisp ecl gcl genera lispworks mcl mkcl sbcl scl xcl)
 (error "ASDF is not supported on your implementation. Please help us port it.")
@@ -50,7 +52,7 @@
   (when (or (< system::*gcl-major-version* 2) ;; GCL 2.6 lacks output-translations and more.
             (and (= system::*gcl-major-version* 2)
                  (< system::*gcl-minor-version* 7)))
-    (shadow 'type-of :asdf/implementation)
+    (shadow 'type-of :asdf/compatibility)
     (pushnew 'ignorable pcl::*variable-declarations-without-argument*)
     (pushnew :gcl<2.7 *features*)))
 
@@ -135,10 +137,3 @@
         (setf format (strcat (subseq format 0 found) replacement
                              (subseq format (+ found (length unsupported)))))))
     format)
-
-(defvar *asdf-verbose* nil) ; was t from 2.000 to 2.014.12.
-(defvar *verbose-out* nil)
-
-(defun asdf-message (format-string &rest format-args)
-  (apply 'format *verbose-out* format-string format-args))
-
diff --git a/component.lisp b/component.lisp
index 661e9bda2774b2ba94f06525aecfd66811915916..cbb84b7b9181c3507da84d934a77f7cf22b68616 100644
--- a/component.lisp
+++ b/component.lisp
@@ -4,7 +4,7 @@
 (asdf/package:define-package :asdf/component
   (:recycle :asdf/component :asdf)
   (:fmakunbound #:component-relative-pathname #:source-file-type)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/pathname :asdf/upgrade)
+  (:use :common-lisp :asdf/utility :asdf/pathname :asdf/upgrade)
   (:intern #:name #:version #:description #:long-description
            #:sibling-dependencies #:if-feature #:in-order-to #:inline-methods
            #:relative-pathname #:absolute-pathname #:operation-times #:around-compile
diff --git a/configuration.lisp b/configuration.lisp
index 4407fe5a4a31513361808bcd6b5ae75f69f9249d..fe0ac956ae83c8efa341c169b9ba897cec4f1c0c 100644
--- a/configuration.lisp
+++ b/configuration.lisp
@@ -169,8 +169,7 @@ values of TAG include :source-registry and :output-translations."
                      (resolve-relative-location-component
                       (cdr x) :directory directory :wilden wilden)
                      car))))
-             ((eql :default-directory)
-              (relativize-pathname-directory (default-directory)))
+             ((eql :default-directory) (nil-pathname)) ;; OBSOLETE
              ((eql :*/) *wild-directory*)
              ((eql :**/) *wild-inferiors*)
              ((eql :*.*.*) *wild-file*)
diff --git a/defsystem.lisp b/defsystem.lisp
index da47357c515db91adff8b4bfa0d64509316052a0..f9896cd58d5f6e5d104ae181088f47c1d537ffed 100644
--- a/defsystem.lisp
+++ b/defsystem.lisp
@@ -7,7 +7,7 @@
    :asdf/component :asdf/system :asdf/find-system :asdf/find-component
    :asdf/lisp-action :asdf/operate
    :asdf/backward-internals)
-  #+gcl<2.7 (:shadowing-import-from :asdf/implementation #:type-of)
+  #+gcl<2.7 (:shadowing-import-from :asdf/compatibility #:type-of)
   (:export
    #:defsystem #:do-defsystem #:parse-component-form
    #:*default-component-class*))
diff --git a/find-system.lisp b/find-system.lisp
index c092c1d9e9cdb7d1f2cf5582acb8617ede309ba1..11ac90d0d5fb6b5e8ec4eceb4b1260016f174554 100644
--- a/find-system.lisp
+++ b/find-system.lisp
@@ -3,7 +3,7 @@
 
 (asdf/package:define-package :asdf/find-system
   (:recycle :asdf/find-system :asdf)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/upgrade :asdf/pathname :asdf/os
+  (:use :common-lisp :asdf/compatibility :asdf/utility :asdf/upgrade :asdf/pathname :asdf/os
    :asdf/component :asdf/system)
   (:export
    #:coerce-name #:find-system #:locate-system #:load-sysdef #:with-system-definitions
diff --git a/footer.lisp b/footer.lisp
index c18db13444bab49c4405b75c1ffde342e5511291..f956e3564dc11441bb7d73fb15455d9d96b2a326 100644
--- a/footer.lisp
+++ b/footer.lisp
@@ -4,7 +4,7 @@
 (asdf/package:define-package :asdf/footer
   (:recycle :asdf/footer :asdf)
   (:use :common-lisp
-   :asdf/package :asdf/implementation
+   :asdf/package :asdf/compatibility
    :asdf/utility :asdf/pathname :asdf/os :asdf/lisp-build
    :asdf/find-system :asdf/find-component :asdf/operation :asdf/action :asdf/lisp-action
    :asdf/operate :asdf/bundle :asdf/concatenate-source
diff --git a/generate-asdf.asd b/generate-asdf.asd
index b01f7df5e96febdd03532bb03a882f24767b6c91..37465389da124912f3cb1da6570c4ba827a34586 100644
--- a/generate-asdf.asd
+++ b/generate-asdf.asd
@@ -28,8 +28,8 @@
    (:module
     "utils" :pathname "" :components
     ((:file "package")
-     (:file "implementation" :depends-on ("package"))
-     (:file "utility" :depends-on ("implementation"))
+     (:file "compatibility" :depends-on ("package"))
+     (:file "utility" :depends-on ("compatibility"))
      (:file "pathname" :depends-on ("utility"))
      (:file "os" :depends-on ("pathname"))))
    (:module
diff --git a/header.lisp b/header.lisp
index 8b96421960ce874d43a0262dd34551ab6f8a3221..769a30c5589580a39d6989a46d5ee7a4a33f507b 100644
--- a/header.lisp
+++ b/header.lisp
@@ -1,5 +1,5 @@
 ;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp ; coding: utf-8 -*-
-;;; This is ASDF 2.26.70: Another System Definition Facility.
+;;; This is ASDF 2.26.71: Another System Definition Facility.
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome:
 ;;; please mail to <asdf-devel@common-lisp.net>.
diff --git a/interface.lisp b/interface.lisp
index 6e248149f77e19dad8adb1ac4097366a59045561..f9b2d88b3b77d40e2824f2dc421e879d462d1948 100644
--- a/interface.lisp
+++ b/interface.lisp
@@ -11,7 +11,7 @@
    #:loaded-systems ; makes for annoying SLIME completion
    #:output-files-for-system-and-operation) ; obsolete ASDF-BINARY-LOCATION function
   (:use :common-lisp
-   :asdf/package :asdf/implementation :asdf/utility :asdf/pathname :asdf/os :asdf/upgrade
+   :asdf/package :asdf/compatibility :asdf/utility :asdf/pathname :asdf/os :asdf/upgrade
    :asdf/component :asdf/system :asdf/find-system :asdf/find-component
    :asdf/operation :asdf/action :asdf/lisp-build :asdf/lisp-action
    :asdf/configuration :asdf/output-translations :asdf/source-registry
diff --git a/lisp-action.lisp b/lisp-action.lisp
index fc15a5627d98a089cb77b8d631ded0b35c2ab616..7c4a99a389db48b49bf811aabbd232fcd87e09d5 100644
--- a/lisp-action.lisp
+++ b/lisp-action.lisp
@@ -4,7 +4,7 @@
 (asdf/package:define-package :asdf/lisp-action
   (:recycle :asdf/lisp-action :asdf)
   (:intern #:proclamations #:flags)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/lisp-build
+  (:use :common-lisp :asdf/compatibility :asdf/utility :asdf/lisp-build
    :asdf/component :asdf/system :asdf/find-component :asdf/operation :asdf/action)
   (:export
    #:compile-error #:compile-failed #:compile-warned #:try-recompiling
diff --git a/lisp-build.lisp b/lisp-build.lisp
index b93b19e3291ec5eaa3a62f5aefa2c9b1c92053e3..184a1ddede6d258505bf879f62d092e692a3c0fb 100644
--- a/lisp-build.lisp
+++ b/lisp-build.lisp
@@ -3,7 +3,7 @@
 
 (asdf/package:define-package :asdf/lisp-build
   (:recycle :asdf/lisp-build :asdf)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/pathname :asdf/os)
+  (:use :common-lisp :asdf/compatibility :asdf/utility :asdf/pathname :asdf/os)
   (:fmakunbound #:compile-file*)
   (:export
    #:*compile-file-warnings-behaviour* #:*compile-file-failure-behaviour*
diff --git a/operate.lisp b/operate.lisp
index 038742c893bb333301c5e195918f8f7e9c513c14..6297d780efcb09f4486a8d000e191e7e20d36683 100644
--- a/operate.lisp
+++ b/operate.lisp
@@ -4,7 +4,7 @@
 (asdf/package:define-package :asdf/operate
   (:recycle :asdf/operate :asdf)
   (:fmakunbound #:operate)
-  (:use :common-lisp :asdf/implementation :asdf/utility :asdf/upgrade
+  (:use :common-lisp :asdf/utility :asdf/upgrade
         :asdf/component :asdf/system :asdf/operation :asdf/action
         :asdf/lisp-build :asdf/lisp-action #:asdf/plan
         :asdf/find-system :asdf/find-component)
diff --git a/os.lisp b/os.lisp
index fd1ae826c915e684940ce3a19af564dd5e232be8..eba027231de603b22d7068da34fa8b453f44abf2 100644
--- a/os.lisp
+++ b/os.lisp
@@ -3,7 +3,7 @@
 
 (asdf/package:define-package :asdf/os
   (:recycle :asdf/os :asdf)
-  (:use :cl :asdf/package :asdf/implementation :asdf/utility :asdf/pathname)
+  (:use :cl :asdf/package :asdf/compatibility :asdf/utility :asdf/pathname)
   (:export
    #:featurep #:os-unix-p #:os-windows-p ;; features
    #:read-file-forms ;; simple filesystem manipulation
@@ -232,4 +232,4 @@ using WRITE-SEQUENCE and a sensibly sized buffer." ; copied from xcvb-driver
     (if (and dir truename)
         (truename* dir)
         dir)))
-
+ 
\ No newline at end of file
diff --git a/package.lisp b/package.lisp
index c9087004241fdd81876feca54fac6582726ebe15..44dd9487a84f16e469c36674782c5712334c5dd1 100644
--- a/package.lisp
+++ b/package.lisp
@@ -387,20 +387,5 @@ when the symbol is not found."
 
 (defmacro define-package (package &rest clauses)
   `(eval-when (:compile-toplevel :load-toplevel :execute)
-     #+gcl (defpackage ,package (:use))
+     #+(or ecl gcl) (defpackage ,package (:use))
      (apply 'ensure-package ',(parse-define-package-form package clauses))))
-
-;;;; MAGIC FIXUP FOR ASDF.
-;; For bootstrapping reason, define-package can't do its magic on the asdf/package package itself,
-;; so instead do something ugly and special purpose. However, other packages could have imported
-;; from ASDF and be in trouble. There ought to be a better solution to merging packages without tears.
-
-(eval-when (:compile-toplevel :load-toplevel :execute)
-  (defvar *extirpated-symbols* ())
-  (when (find-package :asdf)
-    (let (l)
-      (do-external-symbols (sym :asdf/package)
-        (multiple-value-bind (symbol lstatus) (find-symbol* sym :asdf nil)
-          (when (and lstatus (not (eq sym symbol)))
-            (push symbol l))))
-      (push (cons :asdf (mapcar #'symbol-name-package (sort l 'string<))) *extirpated-symbols*))))
diff --git a/pathname.lisp b/pathname.lisp
index c28f35ca6971bf78e1626d16439fc409f5a4c839..7228ba6754b163669b3c6140c8d94f886d7446de 100644
--- a/pathname.lisp
+++ b/pathname.lisp
@@ -46,7 +46,7 @@
    #:add-pathname-suffix #:tmpize-pathname
    #:call-with-staging-pathname #:with-staging-pathname
    ;; basic pathnames
-   #:load-pathname #:default-directory #:nil-pathname
+   #:load-pathname #:default-directory #:root-pathname
    ;; physical pathnames
    #:physical-pathname-p #:sane-physical-pathname
    ;; Windows shortcut support
@@ -705,8 +705,8 @@ For the latter case, we ought pick random suffix and atomically open it."
 (defun* load-pathname ()
   (resolve-symlinks* (or *load-pathname* *compile-file-pathname*)))
 
-(defun* default-directory ()
-  (truenamize (pathname-directory-pathname *default-pathname-defaults*)))
+(defun* default-directory () ;; A default absolute directory when all else fails.
+  (pathname-root (nil-pathname)))
 
 (defun* physical-pathname-p (x)
   (and (pathnamep x) (not (typep x 'logical-pathname))))
diff --git a/plan.lisp b/plan.lisp
index c656895224d5d3aa9bf06efde48ac09ed9fc4e75..13deebc8a8fa8fa695fd269f10542670a142431a 100644
--- a/plan.lisp
+++ b/plan.lisp
@@ -7,7 +7,7 @@
   (:use :common-lisp :asdf/utility :asdf/pathname :asdf/os
    :asdf/component :asdf/system :asdf/find-system :asdf/find-component
    :asdf/operation :asdf/action)
-  #+gcl<2.7 (:shadowing-import-from :asdf/implementation #:type-of)
+  #+gcl<2.7 (:shadowing-import-from :asdf/compatibility #:type-of)
   (:intern #:planned-p #:index #:forced #:forced-not #:total-action-count
            #:planned-action-count #:planned-output-action-count #:visited-actions
            #:visiting-action-set #:visiting-action-list #:actions-r)
diff --git a/source-registry.lisp b/source-registry.lisp
index c83c8e9ba91a1f963359d4ab185983d5ee11f213..9892bc0d8bd712871cbbda49c9cab0cdf25840e2 100644
--- a/source-registry.lisp
+++ b/source-registry.lisp
@@ -5,8 +5,8 @@
 (asdf/package:define-package :asdf/source-registry
   (:recycle :asdf/source-registry :asdf)
   (:fmakunbound #:inherit-source-registry #:process-source-registry #:process-source-registry-directive)
-  (:use :common-lisp :asdf/implementation :asdf/configuration :asdf/utility :asdf/pathname :asdf/os
-        :asdf/find-system)
+  (:use :common-lisp :asdf/utility :asdf/pathname :asdf/os
+        :asdf/upgrade :asdf/find-system :asdf/configuration)
   (:export
    #:invalid-source-registry
    #:source-registry #:source-registry-initialized-p
@@ -155,16 +155,14 @@ with a different configuration, so the configuration would be re-read then."
 
 (defun* wrapping-source-registry ()
   `(:source-registry
-    #+ecl (:tree ,(translate-logical-pathname "SYS:"))
+    #+(or ecl sbcl) (:tree ,(lisp-implementation-directory :truename t))
     #+mkcl (:tree ,(translate-logical-pathname "CONTRIB:"))
-    #+sbcl (:tree ,(truenamize (getenv-pathname "SBCL_HOME" :want-directory t)))
     :inherit-configuration
     #+cmu (:tree #p"modules:")
     #+scl (:tree #p"file://modules/")))
 (defun* default-source-registry ()
   `(:source-registry
     #+sbcl (:directory ,(subpathname (user-homedir) ".sbcl/systems/"))
-    (:directory ,(default-directory))
     ,@(loop :for dir :in
         `(,@(when (os-unix-p)
               `(,(or (getenv-absolute-directory "XDG_DATA_HOME")
diff --git a/test/script-support.lisp b/test/script-support.lisp
index f18f441ef0bda0752347aa212a0a1d56b950ddd6..6d92ce9294c6eed9a191418b4b379bf3e5ea7d8e 100644
--- a/test/script-support.lisp
+++ b/test/script-support.lisp
@@ -31,9 +31,9 @@
     (make-pathname :directory '(#-gcl :relative #-gcl :back #+gcl :parent) :defaults *test-directory*)
     *test-directory*)))
 (defparameter *asdf-lisp*
-   (merge-pathnames
-    (make-pathname :directory '(#-gcl :relative "tmp") :name "asdf" :type "lisp" :defaults *asdf-directory*)
-    *asdf-directory*))
+  (merge-pathnames
+   (make-pathname :directory '(#-gcl :relative "build") :name "asdf" :type "lisp" :defaults *asdf-directory*)
+   *asdf-directory*))
 (defparameter *asdf-fasl*
   (compile-file-pathname
    (let ((impl (string-downcase
@@ -55,14 +55,14 @@
                     #+scl :scl
                     #+xcl :xcl))))
      (merge-pathnames
-      (make-pathname :directory `(#-gcl :relative "tmp" "fasls" ,impl)
+      (make-pathname :directory `(#-gcl :relative "fasls" ,impl)
                      :defaults *asdf-directory*)
       *asdf-lisp*))))
 
 (defun load-old-asdf (tag)
   (let ((old-asdf
           (merge-pathnames
-           (make-pathname :directory `(#-gcl :relative "tmp")
+           (make-pathname :directory `(#-gcl :relative "build")
                           :name (format nil "asdf-~A" tag) :type "lisp"
                           :defaults *asdf-directory*)
            *asdf-directory*)))
diff --git a/upgrade.lisp b/upgrade.lisp
index c1fb63cbcd4e0f9d5519ef51255900fdd8e0547a..dbeb5043c7bee1bd9935e566f6b4bcbb143f8feb 100644
--- a/upgrade.lisp
+++ b/upgrade.lisp
@@ -4,11 +4,12 @@
 
 (asdf/package:define-package :asdf/upgrade
   (:recycle :asdf/upgrade :asdf)
-  (:use :common-lisp :asdf/package :asdf/implementation :asdf/utility)
+  (:use :common-lisp :asdf/package :asdf/compatibility :asdf/utility)
   (:export
    #:upgrade-asdf #:asdf-upgrade-error #:with-upgrade
    #:*post-upgrade-cleanup-hook* #:*post-upgrade-restart-hook*
-   #:asdf-version #:*upgraded-p*))
+   #:asdf-version #:*upgraded-p*
+   #:asdf-message #:*asdf-verbose* #:*verbose-out*))
 (in-package :asdf/upgrade)
 
 ;;; Special magic to detect if this is an upgrade
@@ -16,6 +17,12 @@
 (eval-when (:load-toplevel :compile-toplevel :execute)
   (defvar *asdf-version* nil)
   (defvar *upgraded-p* nil)
+  (defvar *asdf-verbose* nil) ; was t from 2.000 to 2.014.12.
+  (defvar *verbose-out* nil)
+  (defun asdf-message (format-string &rest format-args)
+    (apply 'format *verbose-out* format-string format-args)))
+  
+(eval-when (:load-toplevel :compile-toplevel :execute)
   (let* (;; For bug reporting sanity, please always bump this version when you modify this file.
          ;; Please also modify asdf.asd to reflect this change. The script bin/bump-version
          ;; can help you do these changes in synch (look at the source for documentation).
@@ -24,7 +31,7 @@
          ;; "2.345.6" would be a development version in the official upstream
          ;; "2.345.0.7" would be your seventh local modification of official release 2.345
          ;; "2.345.6.7" would be your seventh local modification of development version 2.345.6
-         (asdf-version "2.26.70")
+         (asdf-version "2.26.71")
          (existing-asdf (find-class (find-symbol* :component :asdf nil) nil))
          (existing-version *asdf-version*)
          (already-there (equal asdf-version existing-version)))
@@ -37,7 +44,13 @@
       (setf *asdf-version* asdf-version))))
 
 
-;;;; User interface
+;;; Upgrade interface
+
+(defun* asdf-upgrade-error ()
+  ;; Important notice for whom it concerns. The crux of the matter is that
+  ;; TRAVERSE can be completely refactored, and so after the find-system returns, it's too late.
+  (error "When a system transitively depends on ASDF, it must :defsystem-depends-on (:asdf)~%~
+          Otherwise, when you upgrade ASDF, you must do it before you operate on any system.~%"))
 
 (defmacro with-upgrade ((&key (upgraded-p '*upgraded-p*) when) &body body)
   `(eval-when (:compile-toplevel :load-toplevel :execute)
@@ -51,12 +64,6 @@ You can compare this string with e.g.:
 (ASDF:VERSION-SATISFIES (ASDF:ASDF-VERSION) \"2.345.67\")."
   *asdf-version*)
 
-(defun* asdf-upgrade-error ()
-  ;; Important notice for whom it concerns. The crux of the matter is that
-  ;; TRAVERSE can be completely refactored, and so after the find-system returns, it's too late.
-  (error "When a system transitively depends on ASDF, it must :defsystem-depends-on (:asdf)~%~
-          Otherwise, when you upgrade ASDF, you must do it before you operate on any system.~%"))
-
 
 ;;; Self-upgrade functions
 
diff --git a/utility.lisp b/utility.lisp
index 2468cbef53289f30fa566a1ee56db14c0e9ae729..84e5a4fe40b4a82d62312eaf823cabd3e56ac046 100644
--- a/utility.lisp
+++ b/utility.lisp
@@ -3,10 +3,10 @@
 
 (asdf/package:define-package :asdf/utility
   (:recycle :asdf/utility :asdf)
-  (:use :common-lisp :asdf/package :asdf/implementation)
+  (:use :common-lisp :asdf/package :asdf/compatibility)
   (:export
    #:find-symbol* ;; reexport from asdf/package
-   #:strcat #:compatfmt ;; reexport from asdf/implementation
+   #:strcat #:compatfmt ;; reexport from asdf/compatibility
    #:defun* #:defgeneric* ;; defining macros
    #:aif #:it ;; basic flow control
    #:while-collecting #:appendf #:length=n-p ;; lists