diff --git a/asdf.asd b/asdf.asd
index 7794573162c6cdecb5caf09918c4a57d8e006b0b..aab2cb42a1c746cc653b5d1560d13d35f234b0b7 100644
--- a/asdf.asd
+++ b/asdf.asd
@@ -59,7 +59,7 @@
   :licence "MIT"
   :description "Another System Definition Facility"
   :long-description "ASDF builds Common Lisp software organized into defined systems."
-  :version "2.26.146" ;; to be automatically updated by make bump-version
+  :version "2.26.147" ;; to be automatically updated by make bump-version
   :depends-on ()
   :components
   ((:module "build"
diff --git a/backward-interface.lisp b/backward-interface.lisp
index b94cfba9f44f7d1fdf93b99dc2c8f4293f64891f..b6de9890a4c8172e2fce53a7a87c2af1a590de76 100644
--- a/backward-interface.lisp
+++ b/backward-interface.lisp
@@ -73,13 +73,18 @@ if that's whay you mean." ;;)
          (subpathname (user-homedir) ".fasls/")) ;; Use ".cache/common-lisp/" instead ???
      (include-per-user-information nil)
      (map-all-source-files (or #+(or clisp ecl mkcl) t nil))
-     (source-to-target-mappings nil))
+     (source-to-target-mappings nil)
+     (file-types (list (compile-file-type)
+                         #+ecl (compile-file-type :type :object)
+                         #+mkcl (compile-file-type :fasl-p nil)
+                         #+clisp "lib" #+sbcl "cfasl"
+                         #+sbcl "sbcl-warnings" #+clozure "ccl-warnings")))
   #+(or clisp ecl mkcl)
   (when (null map-all-source-files)
     (error "asdf:enable-asdf-binary-locations-compatibility doesn't support :map-all-source-files nil on CLISP, ECL and MKCL"))
-  (let* ((fasl-type (compile-file-type))
-         (mapped-files (if map-all-source-files *wild-file*
-                           (make-pathname :type fasl-type :defaults *wild-file*)))
+  (let* ((patterns (if map-all-source-files (list *wild-file*)
+                       (loop :for type :in file-types
+                             :collect (make-pathname :type type :defaults *wild-file*))))
          (destination-directory
           (if centralize-lisp-binaries
               `(,default-toplevel-directory
@@ -92,8 +97,9 @@ if that's whay you mean." ;;)
        ,@source-to-target-mappings
        #+abcl (#p"jar:file:/**/*.jar!/**/*.*" (:function translate-jar-pathname))
        #+abcl (#p"/___jar___file___root___/**/*.*" (,@destination-directory))
-       ((:root ,*wild-inferiors* ,mapped-files)
-        (,@destination-directory ,mapped-files))
+       ,(loop :for pattern :in patterns
+              :collect `((:root ,*wild-inferiors* ,pattern)
+                         (,@destination-directory ,pattern)))
        (t t)
        :ignore-inherited-configuration))))
 
diff --git a/debian/control b/debian/control
index 6ef5e131bc0cf033670360644d0f5e0469ab59e5..7e85f97a9575f30f5c67ba2be93aa76cf0350a6e 100644
--- a/debian/control
+++ b/debian/control
@@ -5,6 +5,7 @@ Maintainer: Debian Common Lisp Team <pkg-common-lisp-devel@lists.alioth.debian.o
 Uploaders: Peter Van Eynde <pvaneynd@debian.org>,
   Milan Zamazal <pdm@zamazal.org>,
   Christoph Egger <christoph@debian.org>,
+  Julien Danjou <acid@debian.org>,
   Francois-Rene Rideau <fare@tunes.org>
 Build-Depends: debhelper (>> 7)
 Build-Depends-Indep: texinfo, texlive-extra-utils, texlive, texlive-generic-recommended
diff --git a/header.lisp b/header.lisp
index 113ea01b9b53f31638a96ea97b45624a3e7cf645..96f6bffaf187a5a0381bda739cbddba22bfc0a15 100644
--- a/header.lisp
+++ b/header.lisp
@@ -1,5 +1,5 @@
 ;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp -*-
-;;; This is ASDF 2.26.146: Another System Definition Facility.
+;;; This is ASDF 2.26.147: 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 8fb39ab82fea0d243d0bdc5ff3ac5c3221b25f52..0252375fd499b09e6d8d0a1db48424f6b1cf2697 100644
--- a/interface.lisp
+++ b/interface.lisp
@@ -127,6 +127,7 @@
    #:apply-output-translations
    #:compile-file*
    #:compile-file-pathname*
+   #:*warnings-file-type*
    #:enable-asdf-binary-locations-compatibility
    #:*default-source-registries*
    #:*source-registry-parameter*
diff --git a/lisp-build.lisp b/lisp-build.lisp
index 241f2d2d9ff06301dc157e046440d1a80b3654fa..c9d750a3352c1f71c3e8ceedb7fd5eca8ccee077 100644
--- a/lisp-build.lisp
+++ b/lisp-build.lisp
@@ -14,7 +14,6 @@
    #:compile-warned-warning #:compile-failed-warning
    #:check-lisp-compile-results #:check-lisp-compile-warnings
    #:*uninteresting-compiler-conditions* #:*uninteresting-loader-conditions*
-   #:*deferred-warnings*
    ;; Functions & Macros
    #:get-optimization-settings #:proclaim-optimization-settings
    #:call-with-muffled-compiler-conditions #:with-muffled-compiler-conditions
@@ -22,7 +21,7 @@
    #:reify-simple-sexp #:unreify-simple-sexp
    #:reify-deferred-warnings #:reify-undefined-warning #:unreify-deferred-warnings
    #:reset-deferred-warnings #:save-deferred-warnings #:check-deferred-warnings
-   #:with-saved-deferred-warnings #:warnings-file-p #:warnings-file-type
+   #:with-saved-deferred-warnings #:warnings-file-p #:warnings-file-type #:*warnings-file-type*
    #:call-with-asdf-compilation-unit #:with-asdf-compilation-unit
    #:current-lisp-file-pathname #:load-pathname
    #:lispize-pathname #:compile-file-type #:call-around-hook
@@ -110,9 +109,6 @@ Note that ASDF ALWAYS raises an error if it fails to create an output file when
    #+clisp '(clos::simple-gf-replacing-method-warning))
   "Additional conditions that may be skipped while loading")
 
-(defvar *deferred-warnings* ()
-  "Warnings the handling of which is deferred until the end of the compilation unit")
-
 ;;;; ----- Filtering conditions while building -----
 
 (defun* call-with-muffled-compiler-conditions (thunk)
@@ -181,6 +177,10 @@ Note that ASDF ALWAYS raises an error if it fails to create an output file when
 
 
 ;;;; Deferred-warnings treatment, originally implemented by Douglas Katzman.
+;;
+;; To support an implementation, three functions must be implemented:
+;; reify-deferred-warnings unreify-deferred-warnings reset-deferred-warnings
+;; See their respective docstrings.
 
 (defun reify-simple-sexp (sexp)
   (etypecase sexp
@@ -245,6 +245,9 @@ Note that ASDF ALWAYS raises an error if it fails to create an output file when
     (sb-c::undefined-warning-warnings warning))))
 
 (defun reify-deferred-warnings ()
+  "return a portable S-expression, portably readable and writeable in any Common Lisp implementation
+using READ within a WITH-SAFE-IO-SYNTAX, that represents the warnings currently deferred by
+WITH-COMPILATION-UNIT. One of three functions required for deferred-warnings support in ASDF."
   #+clozure
   (mapcar 'reify-deferred-warning
           (if-let (dw ccl::*outstanding-deferred-warnings*)
@@ -266,6 +269,11 @@ Note that ASDF ALWAYS raises an error if it fails to create an output file when
                 :collect `(,what . ,value)))))
 
 (defun unreify-deferred-warnings (reified-deferred-warnings)
+  "given a S-expression created by REIFY-DEFERRED-WARNINGS, reinstantiate the corresponding
+deferred warnings as to be handled at the end of the current WITH-COMPILATION-UNIT.
+Handle any warning that has been resolved already,
+such as an undefined function that has been defined since.
+One of three functions required for deferred-warnings support in ASDF."
   (declare (ignorable reified-deferred-warnings))
   #+clozure
   (let ((dw (or ccl::*outstanding-deferred-warnings*
@@ -300,6 +308,8 @@ Note that ASDF ALWAYS raises an error if it fails to create an output file when
          (set symbol (+ (symbol-value symbol) adjustment)))))))
 
 (defun reset-deferred-warnings ()
+  "Reset the set of deferred warnings to be handled at the end of the current WITH-COMPILATION-UNIT.
+One of three functions required for deferred-warnings support in ASDF."
   #+clozure
   (if-let (dw ccl::*outstanding-deferred-warnings*)
     (let ((mdw (ccl::ensure-merged-deferred-warnings dw)))
@@ -327,8 +337,13 @@ possibly in a different process."
     (:sbcl "sbcl-warnings")
     ((:clozure :ccl) "ccl-warnings")))
 
+(defvar *warnings-file-type* (warnings-file-type)
+  "Type for warnings files")
+
 (defun* warnings-file-p (file &optional implementation-type)
-  (if-let (type (warnings-file-type implementation-type))
+  (if-let (type (if implementation-type
+                    (warnings-file-type implementation-type)
+                    *warnings-file-type*))
     (equal (pathname-type file) type)))
 
 (defun* check-deferred-warnings (files &optional context-format context-arguments)
@@ -379,8 +394,7 @@ report-deferred-warnings
 (defun* call-with-saved-deferred-warnings (thunk warnings-file)
   (if warnings-file
       (with-compilation-unit (:override t)
-        (let ((*deferred-warnings* ())
-              #+sbcl (sb-c::*undefined-warnings* nil))
+        (let (#+sbcl (sb-c::*undefined-warnings* nil))
           (multiple-value-prog1
               (with-muffled-compiler-conditions ()
                 (funcall thunk))
diff --git a/test/test-module-depend.script b/test/test-module-depend.script
index 6ba5c561d752fe75feae37fb8adf8a6cbd000845..2edc100cf1e5bdfa8504f1bf0fc1b556dac21cbd 100644
--- a/test/test-module-depend.script
+++ b/test/test-module-depend.script
@@ -1,15 +1,16 @@
 ;;; -*- Lisp -*-
 
-
-
-(asdf:load-system 'test-module-depend)
+(load-system 'test-module-depend)
 
 ;; test that it compiled
-(defparameter file1.fasl (test-fasl "file1"))
-(defparameter file2.fasl (test-fasl "file2"))
-(defparameter file3.fasl (test-fasl "file3"))
+(defparameter file1.fasl (first (output-files 'compile-op '(test-module-depend "file1"))))
+(defparameter file2.fasl (first (output-files 'compile-op '(test-module-depend "quux" "file2"))))
+(defparameter file3.fasl (first (output-files 'compile-op '(test-module-depend "quux" "file3mod" "file3"))))
 (defparameter file1-date (file-write-date file1.fasl))
 (defparameter file3-date (file-write-date file3.fasl))
+(assert-pathname-equal file1.fasl (test-fasl "file1"))
+(assert-pathname-equal file2.fasl (test-fasl "file2"))
+(assert-pathname-equal file3.fasl (test-fasl "file3"))
 
 (assert (and file1-date file3-date))
 
@@ -25,6 +26,6 @@
 (touch-file file2.fasl :timestamp (- file3-date 30))
 (touch-file file3.fasl :timestamp (- file3-date 15))
 (asdf:operate 'asdf:load-op 'test-module-depend)
-(assert (>= (file-write-date (test-fasl "file2")) file3-date))
+(assert (>= (file-write-date file2.fasl) file3-date))
 ;; does this properly go to the second level?
-(assert (>= (file-write-date (test-fasl "file3")) file3-date))
+(assert (>= (file-write-date file3.fasl) file3-date))
diff --git a/test/test1.script b/test/test1.script
index 026dc14655467529ee2ca53a2c3317e5887100a8..985592e6f9d4e2211cad5abaaa2c7c717e68f368 100644
--- a/test/test1.script
+++ b/test/test1.script
@@ -4,15 +4,15 @@
 (defparameter test1.asd (system-source-file 'test1))
 (defparameter file1.lisp (component-pathname (find-component 'test1 "file1")))
 (defparameter file2.lisp (component-pathname (find-component 'test1 "file2")))
-(assert-equal test1.asd (test-source "test1.asd")) ; unhappily, not usually equal.
-(assert-equal file1.lisp (test-source "file1.lisp")) ; unhappily, not usually equal.
-(assert-equal file2.lisp (test-source "file2.lisp")) ; unhappily, not usually equal.
+(assert-pathname-equal test1.asd (test-source "test1.asd")) ; unhappily, not usually equal.
+(assert-pathname-equal file1.lisp (test-source "file1.lisp")) ; unhappily, not usually equal.
+(assert-pathname-equal file2.lisp (test-source "file2.lisp")) ; unhappily, not usually equal.
 (defparameter *file1.out* (output-files 'compile-op '(test1 "file1")))
 (defparameter *file2.out* (output-files 'compile-op '(test1 "file2")))
 (defparameter file1.fasl (first *file1.out*))
 (defparameter file2.fasl (first *file2.out*))
-(assert-equal file1.fasl (test-fasl "file1"))
-(assert-equal file2.fasl (test-fasl "file2"))
+(assert-pathname-equal file1.fasl (test-fasl "file1"))
+(assert-pathname-equal file2.fasl (test-fasl "file2"))
 
 (defparameter *date* (- (file-write-date test1.asd) 3600))
 (touch-file test1.asd :timestamp *date*) ;; touch test1.asd an hour back.
diff --git a/upgrade.lisp b/upgrade.lisp
index 7df11124f8df2684c1d298fbb938dc94ac090fd0..590f924335706fb124d54b07ce6531bc1a479e93 100644
--- a/upgrade.lisp
+++ b/upgrade.lisp
@@ -35,7 +35,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.146")
+         (asdf-version "2.26.147")
          (existing-asdf (find-class (find-symbol* :component :asdf nil) nil))
          (existing-version *asdf-version*)
          (already-there (equal asdf-version existing-version))
diff --git a/version.lisp-expr b/version.lisp-expr
index 85b49d53be2198233e2eb9f68fa58e02fc4acb1c..edfca377d014958e46762bbd1ce76b4ef9630482 100644
--- a/version.lisp-expr
+++ b/version.lisp-expr
@@ -1 +1 @@
-"2.26.146"
+"2.26.147"