diff --git a/.gitignore b/.gitignore
index 7b8606d1776f1706181acf0c05b4d5793b6231c6..bb3f8f2381fc6c971baf1a7b76d46068d232fcd8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@ doc/asdf.dvi
 *.tmp
 
 LICENSE
+README.html
 tmp/
 man/
 lib/
@@ -52,6 +53,7 @@ debian/cl-asdf.postinst.debhelper
 debian/cl-asdf.prerm.debhelper
 debian/cl-asdf.substvars
 debian/cl-asdf/
+debian/patches/
 debian/files
 .pc
 
diff --git a/.gitmodules b/.gitmodules
index 16ec8002dc6d63d98978058423e3579e030ce0fe..4e90cd7319eed5483c8f160ae975209b24f7cc1c 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -28,3 +28,6 @@
 [submodule "ext/cl-ppcre"]
 	path = ext/cl-ppcre
 	url = https://github.com/edicl/cl-ppcre
+[submodule "ext/asdf-encodings"]
+	path = ext/asdf-encodings
+	url = git://common-lisp.net/projects/asdf/asdf-encodings.git
diff --git a/Makefile b/Makefile
index 488fe9fd7c159ae074a2810751a0c62562e09691..2201edb491a91611738239230b9ebe3668dae91d 100644
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,11 @@
 #
 # Vendors, you may want to test your implementation with:
 #   make test l=sbcl
+# BUT you first need have installed the development-time external dependencies of ASDF,
+# which will be done automatically if you are using quicklisp,
+# which you can do manually with your favorite tools (e.g. clbuild or git), or
+# which you can do using `git submodule update` which is also available as:
+#   make ext
 #
 # Other targets are for maintainer use only.
 #
@@ -19,6 +24,14 @@ l ?= sbcl
 all: build/asdf.lisp
 	@: # This dummy action is necessary so the all target does not invoke the fallback action.
 
+# Download all the development-time dependencies of ASDF:
+ext:
+	git submodule update --init
+
+# Remove all the development-time dependencies of ASDF:
+noext:
+	for i in $$(git submodule foreach 'echo $$path') ; do git submodule deinit $$i ; done
+
 header_lisp := header.lisp
 driver_lisp := uiop/package.lisp uiop/common-lisp.lisp uiop/utility.lisp uiop/os.lisp uiop/pathname.lisp uiop/filesystem.lisp uiop/stream.lisp uiop/image.lisp uiop/run-program.lisp uiop/lisp-build.lisp uiop/configuration.lisp uiop/backward-driver.lisp uiop/driver.lisp
 defsystem_lisp := upgrade.lisp component.lisp system.lisp cache.lisp find-system.lisp find-component.lisp operation.lisp action.lisp lisp-action.lisp plan.lisp operate.lisp output-translations.lisp source-registry.lisp backward-internals.lisp parse-defsystem.lisp bundle.lisp concatenate-source.lisp backward-interface.lisp package-inferred-system.lisp interface.lisp user.lisp footer.lisp
@@ -64,60 +77,15 @@ Makefile:
 #   make bump v=3.2.1
 # or
 #   ./tools/asdf-tools env v=3.2.1 bump
+# or
+#   v=3.2.1 ./tools/asdf-tools bump
 %: build/asdf.lisp
 	./tools/asdf-tools env l='$l' L='$L' u='$u' U='$u' v='$v' s='$s' t='$t' $@
 
 # This is the list of phony targets from this file
-.PHONY: all driver-files defsystem-files
+.PHONY: all driver-files defsystem-files ext force
 
 # The text below was automaticaly generated by `make --silent makefile-targets`
 # then manually inserted here to provide for completion:
-archive:
-build-asdf:
-bump:
-bump-version:
-check-all-results:
-check-all-scripts-results:
-check-all-upgrade-results:
-clean:
-debian-package:
-doc:
-extract:
-extract-all-tagged-asdf:
-extract-tagged-asdf:
-fix-local-git-tags:
-fix-remote-git-tags:
-git-all-committed-p:
-help:
-install:
-install-asdf:
-link-archive:
-list-source-registry:
-load:
-make-archive:
-makefile-targets:
-merge-master-into-release:
-publish-archive:
-publish-debian-package:
-push:
-re:
-show-commands:
-t:
-test:
-test-all:
-test-all-clean-load:
-test-all-no-stop:
-test-all-no-upgrade:
-test-all-no-upgrade-no-stop:
-test-all-scripts:
-test-all-scripts-no-stop:
-test-all-upgrade:
-test-all-upgrade-no-stop:
-test-basic:
-test-clean-load:
-test-load-systems:
-test-scripts:
-test-upgrade:
-u:
-wc:
-website:
+archive build-asdf bump bump-version check-all-results check-all-scripts-results check-all-upgrade-results clean debian-package doc extract extract-all-tagged-asdf extract-tagged-asdf fix-local-git-tags fix-remote-git-tags git-all-committed-p help install install-asdf link-archive load make-and-publish-archive make-archive makefile-targets merge-master-into-release publish-archive publish-debian-package push re show-commands t test test-all test-all-clean-load test-all-no-stop test-all-no-upgrade test-all-no-upgrade-no-stop test-all-scripts test-all-scripts-no-stop test-all-upgrade test-all-upgrade-no-stop test-basic test-clean-load test-load-systems test-scripts test-upgrade u wc website: force
+        ./tools/asdf-tools env l='$l' L='$L' u='$u' U='$u' v='$v' s='$s' t='$t' $@
diff --git a/README b/README
deleted file mode 100644
index a22b4a337df8a472db4d9c7a179a586830b0dc23..0000000000000000000000000000000000000000
--- a/README
+++ /dev/null
@@ -1,156 +0,0 @@
-ASDF: Another System Definition Facility
-========================================
-
-Quick Summary
--------------
-
-  1- Build it with::
-
-	make
-
-
-  2- Make sure you put it under a path registered by the source-registry,
-    if that isn't the case yet (see the manual). One place would be::
-
-	~/.local/share/common-lisp/source/asdf/
-
-
-What is ASDF?
--------------
-
-ASDF is the de facto standard build facility for Common Lisp.
-
-If you come from the C/C++ world, the function ASDF covers a bit of what
-each of make, autoconf, dlopen and libc do for C programs:
-it orchestrates the compilation and dependency management,
-handles some of the portability issues, dynamically finds and loads code,
-and offers some portable system access.
-Except everything is different in Common Lisp, and ultimately much simpler,
-though it requires acquiring some basic concepts.
-Importantly, ASDF builds all software in the current Lisp image.
-
-To use ASDF, read our manual::
-
-    http://common-lisp.net/project/asdf/asdf.html
-
-The first few sections, Loading ASDF, Configuring ASDF and Using ASDF,
-will get you started as a simple user.
-If you want to define your own systems, further read the section
-Defining systems with defsystem.
-
-The manual is also in the doc/ subdirectory, and can be prepared with::
-
-    make doc
-
-
-ASDF 3 now includes an extensive runtime support library:
-UIOP, the Utilities for Implementation- and OS- Portability.
-Its documentation unhappily lies mainly in the source code and docstrings.
-See uiop/README for an introduction.
-
-More information and additional links can be found on ASDF's home page at::
-
-    http://common-lisp.net/project/asdf/
-
-
-Building and testing it
------------------------
-
-If you cloned our git repository, bootstrap a copy of build/asdf.lisp with::
-
-    make
-
-To run all the tests on your favorite Lisp implementation $L,
-choose your most elaborate installed system $S, and try::
-
-    make t u l=$L s=$S
-
-
-Debugging tip
--------------
-
-To load ASDF in such a way that M-. will work, install the source code, and run::
-
-  (asdf:load-system :uiop) ;; loading uiop is simple
-  (map () 'load ;; loading asdf/defsystem is tricky
-   (mapcar 'asdf:component-pathname
-    (asdf::required-components :asdf/defsystem :keep-component 'asdf:cl-source-file)))
-
-
-What has changed?
------------------
-
-You can consult the debian/changelog for an overview of the
-significant changes in each release, and
-the git log for a detailed description of each commit.
-
-
-How do I navigate this source directory?
-----------------------------------------
-
-asdf.asd
-	The system definition for building ASDF with ASDF.
-
-*.lisp
-	The source code files for asdf/defsystem.
-	See asdf.asd for the order in which they are loaded.
-
-uiop/
-	Utilities of Implementation- and OS- Portability,
-        the portability layer of ASDF. It has its own README,
-        and functions all have docstrings.
-
-Makefile
-	a minimal Makefile for bootstrapping purposes.
-        Most of the logic is in the asdf-tools system
-
-tools/
-	asdf-tools, a system to build, test and release ASDF. It includes:
-        asdf-tools -- a shell script to run it as a shell command.
-        load-asdf.lisp -- how to load ASDF in a self-contained project
-        asdf-tools.asd -- system definition for asdf-tools
-        *.lisp -- the source code for asdf-tools
-        install-asdf-as-module -- replace and update an implementation's ASDF
-
-build.xcvb
-	The system definition for building ASDF with XCVB.
-	It hasn't been tested or maintained for years and has bitrotten.
-
-version.lisp-expr
-        The current version. Bumped up every time the code changes, using
-		./tools/asdf-builder bump
-
-doc/
-	documentation for ASDF, including:
-        index.html -- the web page for http://common-lisp.net/project/asdf/
-        asdf.texinfo -- our manual
-        Makefile -- how to build the manual
-        cclan.png lisp-logo120x80.png style.css favicon.ico
-		-- auxiliaries of index.html
-
-test/
-	regression test scripts (and ancillary files) for developers to check
-        that they don't unintentionally break any of the functionality of ASDF.
-        Far from covering all of ASDF.
-
-contrib/
-	a few contributed files that show case how to use ASDF.
-
-debian/
-	files for packaging on debian, ubuntu, etc.
-
-build/
-	where the Makefile and asdf-tools store their output files, including
-        asdf.lisp -- the current one-file deliverable of ASDF
-        asdf-XXX.lisp -- for upgrade test purposes, old versions
-        results/ -- logs of tests that have been run
-        fasls/ -- output files while running tests.
-
-README
-	this file
-
-TODO
-	plenty of ideas for how to further improve ASDF.
-
-
-Last updated Wednesday, May 19th, 2014.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..94fc18ef15371254e29c28a2683da271e27e3762
--- /dev/null
+++ b/README.md
@@ -0,0 +1,195 @@
+ASDF: Another System Definition Facility
+========================================
+
+What is ASDF?
+-------------
+
+ASDF is the de facto standard build facility for Common Lisp.
+Your Lisp implementation probably contains a copy of ASDF,
+which you can load using `(require "asdf")`.
+
+If you come from the C/C++ world, the function ASDF covers a bit of what
+each of make, autoconf, dlopen and libc do for C programs:
+it orchestrates the compilation and dependency management,
+handles some of the portability issues, dynamically finds and loads code,
+and offers some portable system access.
+Except everything is different in Common Lisp, and ultimately much simpler,
+though it requires acquiring some basic concepts.
+Importantly, ASDF builds all software in the current Lisp image.
+
+To use ASDF, read our manual:
+
+    http://common-lisp.net/project/asdf/asdf.html
+
+The first few sections, Loading ASDF, Configuring ASDF and Using ASDF,
+will get you started as a simple user.
+If you want to define your own systems, further read the section
+Defining systems with defsystem.
+
+The manual is also in the doc/ subdirectory, and can be prepared with:
+
+    make doc
+
+
+ASDF 3 now includes an extensive runtime support library:
+UIOP, the Utilities for Implementation- and OS- Portability.
+Its documentation unhappily lies mainly in the source code and docstrings.
+See [`uiop/README.md`](uiop/README.md) for an introduction.
+
+More information and additional links can be found on ASDF's home page at:
+
+    http://common-lisp.net/project/asdf/
+
+
+Quick Start
+-----------
+
+Just use `(require "asdf")` to load your implementation-provided ASDF.
+
+If it is recent enough (3.0 or later, check its `(asdf:asdf-version)`),
+then it will automatically upgrade to the ASDF provided as source code,
+assuming the source code in under a path registered by the source-registry.
+
+
+Building and testing it
+-----------------------
+
+First, make sure ASDF is checked out under a path registered by the source-registry,
+if that isn't the case yet (see the manual). One place would be:
+
+    ~/.local/share/common-lisp/source/asdf/
+
+or, assuming your implementation provides ASDF 3.1 or later:
+
+    ~/common-lisp/asdf/
+
+
+If you cloned our git repository, bootstrap a copy of build/asdf.lisp with:
+
+    make
+
+Before you may run tests, you need a few CL libraries.
+The simplest way to get them is as follows, but read below:
+
+    make ext
+
+The above make target uses `git submodule update --init` to download
+all these libraries using git. If you don't otherwise maintain your
+own set of carefully controlled CL libraries, that's what you want to use.
+However, if you do maintain your own set of carefully controlled CL libraries
+then you will want to use whichever tools you use (e.g. quicklisp, clbuild,
+or your own scripts around git) to download these libraries:
+alexandria, closer-mop, cl-ppcre, fare-mop, fare-quasiquote, fare-utils,
+inferior-shell, lisp-invocation, named-readtables, optima.
+
+If you are a CL developer, you may already have them, or may want
+to use your own tools to download a version of them you control.
+If you use Quicklisp, you may let Quicklisp download those you don't have.
+In these cases, you do NOT want to use
+However, if you want to let ASDF download known-working versions
+of its dependencies, you can do it with:
+
+    make ext
+
+To run all the tests on your favorite Lisp implementation $L,
+choose your most elaborate installed system $S, and try:
+
+    make t u l=$L s=$S
+
+
+Debugging tip
+-------------
+
+To load ASDF in such a way that M-. will work, install the source code, and run:
+
+    (asdf:load-system :uiop) ;; loading uiop is simple
+    (map () 'load ;; loading asdf/defsystem is tricky
+     (mapcar 'asdf:component-pathname
+      (asdf::required-components :asdf/defsystem :keep-component 'asdf:cl-source-file)))
+
+
+What has changed?
+-----------------
+
+You can consult the `debian/changelog` for an overview of the
+significant changes in each release, and
+the `git log` for a detailed description of each commit.
+
+
+How do I navigate this source directory?
+----------------------------------------
+
+* `asdf.asd`
+    * The system definition for building ASDF with ASDF.
+
+* `*.lisp`
+    * The source code files for asdf/defsystem.
+      See asdf.asd for the order in which they are loaded.
+
+* `uiop/`
+    * Utilities of Implementation- and OS- Portability,
+      the portability layer of ASDF. It has its own `README`,
+      and functions all have docstrings.
+
+* `Makefile`
+    * a minimal Makefile for bootstrapping purposes.
+      Most of the logic is in the asdf-tools system
+
+* `tools/`
+    * `asdf-tools`, a system to build, test and release ASDF. It includes:
+        * `asdf-tools` -- a shell script to run it as a shell command.
+        * `load-asdf.lisp` -- how to load ASDF in a self-contained project
+        * `asdf-tools.asd` -- system definition for asdf-tools
+        * `*.lisp` -- the source code for asdf-tools
+    * also a couple scripts to help ASDF users:
+        * `load-asdf.lisp` -- a build script to load, configure and use ASDF
+        * `install-asdf.lisp` -- replace and update an implementation's ASDF
+        * `cl-source-registry-cache.lisp` -- update a cache for the source-registry
+
+* `build.xcvb`
+    * The system definition for building ASDF with XCVB.
+      It hasn't been tested or maintained for years and has bitrotten.
+
+* `version.lisp-expr`
+    * The current version. Bumped up every time the code changes, using:
+
+        ./tools/asdf-builder bump
+
+* `doc/`
+    * documentation for ASDF, including:
+        * `index.html` -- the web page for http://common-lisp.net/project/asdf/
+        * `asdf.texinfo` -- our manual
+        * `Makefile` -- how to build the manual
+        * `cclan.png` `lisp-logo120x80.png` `style.css` `favicon.ico`
+		-- auxiliaries of `index.html`
+
+* `test/`
+    * regression test scripts (and ancillary files) for developers to check
+      that they don't unintentionally break any of the functionality of ASDF.
+      Far from covering all of ASDF.
+
+* `contrib/`
+    * a few contributed files that show case how to use ASDF.
+
+* `debian/`
+	files for packaging on debian, ubuntu, etc.
+
+* `build/`
+    * where the Makefile and asdf-tools store their output files, including
+        * `asdf.lisp` -- the current one-file deliverable of ASDF
+        * `asdf-XXX.lisp` -- for upgrade test purposes, old versions
+        * `results/` -- logs of tests that have been run
+        * `fasls/` -- output files while running tests.
+
+* `ext/`
+    * external dependencies, that can be populated with `make ext`
+      or equivalently with `git submodule update --init`.
+
+* `README`
+    * this file
+
+* `TODO`
+    * plenty of ideas for how to further improve ASDF.
+
+
+Last updated Thursday, September 11th, 2014.
diff --git a/TODO b/TODO
index 84cfd0d7bc1a4a601c45697b7f636f14801bbc81..5900b8c68923fe4847392854ff20b55d2fb3e323 100644
--- a/TODO
+++ b/TODO
@@ -105,6 +105,8 @@
     but possibly also triggered by the non-standard declaim.
 *** `#5(1 ,@`(2 3)))` returns #(1 2 3),
      rather than #(1 2 3 2 3 2 3 2 3) or even better #(1 2 3 3 3).
+*** It purports to support Unicode, but it has only 16-bit characters.
+   Note that (subtypep 'character 'base-char) says T -- everything is a base char(!)
 
 ** SCL has bugs:
 *** it doesn't like run-program from a modified directory?
@@ -131,7 +133,16 @@
 *** XCL doesn't properly process files the name of which contains a *
 
 ** GCL is almost working again; but implementation bugs remain.
-   See November 2013 discussion on gcl-devel.
+   See Francois-Rene Rideau's messages on gcl-devel starting November 2013.
+*** Missing support for many UIOP functions:
+   combine-fasls, get-optimization-settings...
+*** ASDF may now be included for (require "asdf") and (require "ASDF"),
+    but how to compile it properly?
+*** GCL fails to properly compile ASDF with the default compilation settings,
+   but works with those in script-support.lisp.
+   Symptoms when trying to load asdf.o:
+   Signalled by "AN ANONYMOUS FUNCTION".
+   INTERNAL-SIMPLE-ERROR: The package named ASDF/INTERFACE, does not exist
 *** Another GCL compiler bug:
    when I changed the definition of getcwd from
    (let ((*default-pathname-defaults* #p"")) (truename #p"")) to
@@ -143,11 +154,11 @@
    before `(#',beforef)) ,@(when after `(#',afterf))))
 *** (typep p 'logical-pathname) should be T if p has a logical-pathname host.
 *** apropos is case-sensitive and returns a same symbol many times
+   (presumably once per package where it is present,
+   instead of just once for its home package)
 *** compile-file fails to return proper secondary values in case of non-style WARNING.
 *** (pathname-directory #p"foo/") is incorrectly ("foo") instead of (:RELATIVE "foo")
-*** Missing: chdir, combine-fasls, and plenty more UIOP functions.
 *** Do whatever it takes to pass the asdf tests, add the above?
-*** Have (require "asdf") and (require "ASDF") both work.
 *** Trying to uiop:slurp-stream-forms from a stream with #+(or) :foo
    (or read-file-forms from an file with same) results in an error,
    rather than nil. This is probably a bug in #+ processing.
@@ -155,14 +166,12 @@
    /etc/common-lisp/asdf-output-translations.conf.d/01-common-lisp-controller.conf
 *** Tests that try to catch an error fail (but catching a warning succeeds),
    which suggests brokenness in handler-bind and/or error.
+*** COMPILE-FILE* fails due to handler-bind error in
+   with-muffled-compiler-conditions or so.
 *** `#5(1 ,@`(2 3)))` returns #(1 2 3),
      rather than #(1 2 3 2 3 2 3 2 3) or even better #(1 2 3 3 3).
 *** (DIRECTORY #p"*.*") fails to match files with pathname type NIL.
 *** GCL doesn't properly process files the name of which contains a *
-*** Require is useless, because there is no system search path,
-   and so you can't put ASDF (or anything) there.
-*** Low-level compiler bug:
-   ./cl-launch.sh -B redo_test sh gcl exec noupdate noinc file system noinit
 
 ** ABCL has a few bugs.
 *** ABCL fails the timestamp propagation test.
@@ -172,10 +181,11 @@
 
 ** ECL has issues with its bundles.
    On MacOS X, test-bundle.script fails.
-   On Linux, test-program.script fails with recent ECL 237af2e,
-   but used to work quite fine earlier in 2013.
 *** ECL doesn't properly process files the name of which contains a *
 
+** Allegro fails to parse argv the correct Windows way wrt C++ escaping conventions.
+   Is this (still) the case? What about LispWorks? Other implementations?
+
 * Design & Implement some out-of-line configuration mechanism for various options?
   i.e. let configuration files override some variables around some actions.
 ** Could be used to override new backward-incompatible defaults
@@ -226,7 +236,7 @@
 * Include some ABL test for stassats's (now obsolete?) thing:
    (asdf:enable-asdf-binary-locations-compatibility
    :centralize-lisp-binaries t :default-toplevel-directory *fasl-dir*)
-** Or deprecate and remove ABL compatibility altogether?
+** Or deprecate and remove ABL compatibility altogether? Move it to contrib?
    No one has been using ASDF1 for years.
    There is no ABL to be compatible with —
    is anyone still using the compatibility mode?
@@ -395,3 +405,20 @@ It looks like SWANK can be fixed soon, though, so we'll see.
 *** when everyone has migrated, remove the old mode and the short-circuit.
 ** However, we cannot deprecate component-depends-on yet — not until we have
    some transition in place to a better interface.
+
+
+* Faster source-registry:
+   In addition and/or as a substitute to the .cl-source-registry.cache,
+   that is meant to be semi-automatically managed, there could be
+   a cl-source-registry.conf meant for manual management:
+   when recursing into a source-registry :tree, if such file is present
+   (or if not, if a hidden .cl-source-registry.conf is present instead?),
+   its contents is read as a (:source-registry ...) specification, and
+   replaces the actual or notional (:tree ...) for the current directory;
+   it may then include :file entries as well as :directory and :tree entries,
+   whereby the programmer can explicitly give a definitive list of
+   systems exported by his software, while excluding any test system
+   that he doesn't want to export. This means that developers have
+   both a way of speeding up the build of their software and of
+   avoiding pollution by test systems that should remain private,
+   and that they can otherwise explicitly enable when they need them.
diff --git a/asdf.asd b/asdf.asd
index a9c16fb43a041254612fec3d559ce790b8612b23..58613161ce8e8454ec807ba3c0274c887e04730e 100644
--- a/asdf.asd
+++ b/asdf.asd
@@ -75,7 +75,7 @@
   :licence "MIT"
   :description "Another System Definition Facility"
   :long-description "ASDF builds Common Lisp software organized into defined systems."
-  :version "3.1.3.5" ;; to be automatically updated by make bump-version
+  :version "3.1.4" ;; to be automatically updated by make bump-version
   :depends-on ()
   #+asdf3 :encoding #+asdf3 :utf-8
   :class #.(if (find-class 'package-inferred-system nil) 'package-inferred-system 'system)
diff --git a/bundle.lisp b/bundle.lisp
index 222d0e56c021366d8885d6b60ace335a3f38e06b..f09d0e94ec01ac049d63c2d2c70bb34d0a7dd5a9 100644
--- a/bundle.lisp
+++ b/bundle.lisp
@@ -470,6 +470,11 @@ itself.")) ;; operation on a system and its dependencies
   ;;(unless (or #+ecl (use-ecl-byte-compiler-p))
   ;;  (setf *load-system-operation* 'load-bundle-op))
 
+  (defun uiop-library-pathname ()
+    #+ecl (or (probe-file* (compile-file-pathname "sys:uiop" :type :lib)) ;; new style
+              (probe-file* (compile-file-pathname "sys:uiop" :type :object))) ;; old style
+    #+mkcl (make-pathname :type (bundle-pathname-type :lib) :defaults #p"sys:contrib;uiop"))
+
   (defun asdf-library-pathname ()
     #+ecl (or (probe-file* (compile-file-pathname "sys:asdf" :type :lib)) ;; new style
               (probe-file* (compile-file-pathname "sys:asdf" :type :object))) ;; old style
@@ -491,10 +496,12 @@ itself.")) ;; operation on a system and its dependencies
                `(,(make-library-system
                    "cmp" (compiler-library-pathname))))
            ,@(unless (or (no-uiop c) (has-it-p "uiop") (has-it-p "asdf"))
-               `(,(cond
-                    ((system-source-directory :uiop) (find-system :uiop))
-                    ((system-source-directory :asdf) (find-system :asdf))
-                    (t (make-library-system "asdf" (asdf-library-pathname))))))
+               `(cond
+                  ((system-source-directory :uiop) `(,(find-system :uiop)))
+                  ((system-source-directory :asdf) `(,(find-system :asdf)))
+                  (t `(,@(if-let (uiop (uiop-library-pathname))
+                           `(,(make-library-system "uiop" uiop)))
+                       ,(make-library-system "asdf" (asdf-library-pathname))))))
            ,@deps)))))
 
   (defmethod perform ((o link-op) (c system))
diff --git a/debian/changelog b/debian/changelog
index 6da5ad6c2d2ef2008802c2787880532787a40663..474913264e851cecdabb31cab1a493151d106afb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,20 @@
+cl-asdf (2:3.1.4-1) unstable; urgency=low
+
+  [ Robert P. Goldman ]
+  Bug fix release:
+  * Remove compatibility stubs for old bundle classes (not working
+    properly, anyway), these are now available in a contrib.
+  * Add INPUT-STRING function to UIOP.
+  * For developer and tester convenience, bring all the external
+    dependencies into the git repo as submodules. See target make ext
+  * Optionally speed up registry search by providing a cache for
+    the SOURCE-REGISTRY. See the cache-generating script in:
+      asdf/tools/cl-source-registry-cache.lisp
+  * Fixes to tests and documentation.
+  * Many minor bugfixes.
+
+ -- François-René Rideau <fare@tunes.org>  Thu, 09 Oct 2014 21:18:21 -0400
+
 cl-asdf (2:3.1.3-1) unstable; urgency=low
 
   Bug fix release:
@@ -10,7 +27,7 @@ cl-asdf (2:3.1.3-1) unstable; urgency=low
   * Miscellaneous bug fixes and tweaks to UIOP.
   * Documentation improvements.
 
- -- Francois-Rene Rideau <fare@tunes.org>  Thu, 24 Jul 2014 12:48:29 -0400
+ -- Francois-Rene Rideau <fare@tunes.org>  Mon, 14 Jul 2014 16:54:49 -0400
 
 cl-asdf (2:3.1.2-2) unstable; urgency=low
 
diff --git a/debian/cl-asdf.dirs b/debian/cl-asdf.dirs
index 79b5aecdbcb32d26642d89c733f2274a6c17095d..79daeb8087bebca3a7f00668e168776bc56a0f69 100644
--- a/debian/cl-asdf.dirs
+++ b/debian/cl-asdf.dirs
@@ -3,6 +3,7 @@
 /usr/share/common-lisp/source/cl-asdf/uiop/
 /usr/share/common-lisp/source/cl-asdf/uiop/contrib/
 /usr/share/common-lisp/source/cl-asdf/contrib/
+/usr/share/common-lisp/source/cl-asdf/tools/
 /usr/share/doc/cl-asdf/
 /usr/share/doc/cl-asdf/examples/
 /etc/common-lisp/source-registry.conf.d/
diff --git a/debian/cl-asdf.docs b/debian/cl-asdf.docs
index 10a48301a7e72f1c4ca5ffba79e4c55e40f307e1..315943ed0d14295f111c4e242b6466aec492ce2f 100644
--- a/debian/cl-asdf.docs
+++ b/debian/cl-asdf.docs
@@ -1,3 +1,4 @@
 doc/asdf.pdf
 doc/asdf
-README
+README.md
+uiop/README.md
diff --git a/debian/cl-asdf.install b/debian/cl-asdf.install
index 5048d5efb45d2811b909b3b6e1556948354f36f4..9260b40a93368fd15e4d83979cb0ecd39718e129 100644
--- a/debian/cl-asdf.install
+++ b/debian/cl-asdf.install
@@ -1 +1 @@
-uiop/ *.lisp build/ contrib/ asdf.asd build.xcvb version.lisp-expr usr/share/common-lisp/source/cl-asdf/
+uiop/ *.lisp build/ contrib/ tools/ asdf.asd build.xcvb version.lisp-expr usr/share/common-lisp/source/cl-asdf/
diff --git a/debian/control b/debian/control
index 9ff5cff326244772044d8fbdb40b0854731663a1..9bea65c17ba080d4a6cecf30de8b2cc932c0feee 100644
--- a/debian/control
+++ b/debian/control
@@ -6,11 +6,11 @@ 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>,
+  François-René Rideau <fare@tunes.org>,
   Robert P. Goldman <rpgoldman@sift.info>
 Build-Depends: debhelper (>> 7)
 Build-Depends-Indep: texinfo, texlive-extra-utils, texlive, texlive-generic-recommended
-Standards-Version: 3.9.5
+Standards-Version: 3.9.6
 Homepage: http://common-lisp.net/project/asdf/
 Vcs-Git: git://common-lisp.net/projects/asdf/asdf.git
 
@@ -20,6 +20,7 @@ Recommends: common-lisp-controller, sbcl | lisp-compiler
 Replaces: sbcl-common (<= 1:0.9.13.0-2)
 Breaks: sbcl-common (<= 1:0.9.13.0-2), common-lisp-controller (<< 7.3)
 Depends: ${misc:Depends}
+Suggests: cl-launch (>= 4.1)
 Description: Another System Definition Facility
  ASDF provides the functionality of make and ld.so for Common Lisp software:
  It drives compilation and dynamic loading for complex Lisp systems
diff --git a/debian/copyright b/debian/copyright
index b7ed5c60dd1eec51d97418a45d4205d331e5b679..52ae103e62cf10efbeb75ac15557d49a999c6e6c 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,39 +1,45 @@
-This package was initially debianized by Kevin M. Rosenberg <kmr@debian.org> on
-Fri, 16 Aug 2002 23:14:49 -0600.
-Peter Van Eynde took over in 2005. Then from 2010 to 2014, Francois-Rene Rideau
-maintained the debian package as part of the upstream git repository at
-	git://common-lisp.net/projects/asdf/asdf.git
-
-The debian related changes and files are licensed according to the GPL-v2, see
-/usr/share/common-licenses/GPL-2
-
-Upstream Authors: Dan Barlow <dan@telent.net>, Francois-Rene Rideau
-(fare@tunes.org), Robert P. Goldman (rpgoldman@sift.net) & Contributors.
-
-Copyright:
-
-(This is the MIT / X Consortium license as taken from 
- http://www.opensource.org/licenses/mit-license.html on or about
- Monday; July 13, 2009)
-
-Copyright (c) 2001-2014 Daniel Barlow, Francois-Rene Rideau, Robert P. Goldman,
-and contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: asdf
+Upstream-Contact: asdf-devel <asdf-devel@common-lisp.net>
+Source: http://common-lisp.net/project/asdf/
+
+Files: *
+Copyright: 2001-2014 Daniel Barlow, Francois-Rene Rideau, Robert P. Goldman, and contributors
+Comment: This is the MIT license, but Debian, after GNU, calls it the Expat license
+ to unambiguously distinguish it from other licenses once used by MIT.
+License: Expat
+ On Debian systems, the full text of the Expat License can be found in the file
+ `/usr/share/common-licenses/Expat'.
+ .
+ (This is the MIT / X Consortium license as taken from
+  http://www.opensource.org/licenses/mit-license.html on or about
+  Monday; July 13, 2009)
+ .
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Files: debian/*
+Copyright: 2002 Kevin M. Rosenberg <kmr@debian.org>
+License: GPL-2
+ On Debian systems, the full text of the Expat License can be found in the file
+ `/usr/share/common-licenses/GPL-2'.
+Comment: This package was initially debianized by Kevin M. Rosenberg <kmr@debian.org>
+ on Fri, 16 Aug 2002 23:14:49 -0600.
+ Peter Van Eynde took over in 2005. Then from 2010 to 2014, Francois-Rene Rideau
+ maintained the debian package as part of the upstream git repository.
diff --git a/doc/Makefile b/doc/Makefile
index 0afd36b0a630ac24605aa274c871d76f85d01fcb..88f5076c5b2fb0eab285e192a1efa774b76a45a7 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -26,6 +26,7 @@ asdf.pdf: asdf.texinfo
 
 website: all
 	rsync -av ${webfiles} ${website}
+	rsync -av ../debian/changelog ${website}/changelog
 
 .PHONY: clean veryclean manual-html
 clean:
diff --git a/doc/asdf.texinfo b/doc/asdf.texinfo
index 901512083035199a83601fca98316b65e4cdd74f..61e2e04e81d173faa6038750836f5e4d1c9e9611 100644
--- a/doc/asdf.texinfo
+++ b/doc/asdf.texinfo
@@ -505,10 +505,10 @@ You can invoke it from the shell command-line as
 or you can @code{(load "tools/install-asdf.lisp")} from your Lisp REPL.
 
 It works on
-Allegro CL, Clozure CL, CMU CL, GNU CLISP, LispWorks, SBCL, SCL, XCL.
-It doesn't work on ABCL, Corman CL, ECL, GCL, Genera, MCL, MKCL, MOCL.
-Happily, ABCL, ECL and MKCL are usually pretty up to date and shouldn't need that script.
-GCL would be supported, except that so far is still lacking usable support for @code{require}.
+Allegro CL, Clozure CL, CMU CL, ECL, GCL, GNU CLISP, LispWorks, MKCL, SBCL, SCL, XCL.
+It doesn't work on ABCL, Corman CL, Genera, MCL, MOCL.
+Happily, ABCL is usually pretty up to date and shouldn't need that script.
+GCL requires a very recent version, and hasn't been tested for lack of success compiling it.
 Corman CL, Genera, MCL are obsolete anyway.
 MOCL is under development.
 
@@ -1751,25 +1751,21 @@ and create a file @file{my-lib.asd}
 with the @code{:class :package-inferred-system} option in its @code{defsystem}.
 For instance:
 @example
-#-asdf (error "my-lib requires ASDF 3")
+#-asdf3 (error "my-lib requires ASDF 3")
 (defsystem my-lib
   :class :package-inferred-system
   :defsystem-depends-on (:asdf-package-system)
-  :depends-on (:lil/interface/all
-               :lil/pure/all
-               :lil/stateful/all
-               :lil/transform/all)
-  :in-order-to ((test-op (load-op :lil/test/all)))
-  :perform (test-op (o c) (symbol-call :lil/test/all :test-suite)))
-
-(defsystem :lil/test :depends-on (:lil/test/all))
-
-(register-system-packages :lil/interface/all '(:interface))
-(register-system-packages :lil/pure/all '(:pure))
-(register-system-packages :lil/stateful/all '(:stateful))
-(register-system-packages :lil/transform/classy '(:classy))
-(register-system-packages :lil/transform/posh '(:posh))
-(register-system-packages :lil/test/all '(:lil/test))
+  :depends-on (:my-lib/interface/all
+               :my-lib/src/all
+               :my-lib/extras/all)
+  :in-order-to ((test-op (load-op :my-lib/test/all)))
+  :perform (test-op (o c) (symbol-call :my-lib/test/all :test-suite)))
+
+(defsystem :my-lib/test :depends-on (:my-lib/test/all))
+
+(register-system-packages :my-lib/interface/all '(:my-lib-interface))
+(register-system-packages :my-lib/src/all '(:my-lib-implementation))
+(register-system-packages :my-lib/test/all '(:my-lib-test))
 
 (register-system-packages
  :closer-mop
@@ -1809,9 +1805,11 @@ ASDF can tell that this file depends on system @code{closer-mop} (registered abo
 (package and system names match, and they will be looked up hierarchically).
 
 ASDF also detects dependencies from @code{:import-from} clauses.
-To depend on a system without using a package or importing any symbol from it
-(because you'll fully qualify them when used),
-you may thus use an @code{:import-from} clause with an empty list of symbols, as in:
+You may thus import a well-defined set of symbols from an existing package
+as loaded from suitably named system;
+or if you prefer to use any such symbol fully qualified by a package prefix,
+you may declare a dependency on such a package and its corresponding system
+via an @code{:import-from} clause with an empty list of symbols, as in:
 
 @example
 (defpackage :foo/bar
@@ -3433,7 +3431,56 @@ specifications from the next configuration
 The implementation is allowed to either eagerly compute the information
 from the configurations and file system, or to lazily re-compute it
 every time, or to cache any part of it as it goes.
-To explicitly flush any information cached by the system, use the API below.
+In practice, the recommended @code{source-registry} eagerly collects and caches results
+and you need to explicitly flush the cache for change to be taken into account,
+whereas the old-style @code{*central-registry*} mechanism queries the filesystem every time.
+
+To explicitly flush any information cached by the system
+after a change was made in the filesystem, @xref{Configuration API},
+and e.g. call @code{asdf:clear-source-registry}.
+
+Starting with ASDF 3.1.4, you can also explicitly build a persistent cache
+of the @file{.asd} files found under a tree:
+when recursing into a directory declared by @code{:tree} and its transitive subdirectories,
+if a file @file{.cl-source-registry.cache} exists containing a form
+that is a list starting with @code{:source-registry-cache} followed by a list of strings,
+as in @code{(:source-registry-cache @emph{"foo/bar.asd" "path/to/more.asd" ...})},
+then the strings are assumed to be @code{unix-namestring}s designating
+the available asd files under that tree, and the recursion otherwise stops.
+The list can also be empty, allowing to stop a costly recursion in a huge directory tree.
+
+To update such a cache after you install, update or remove source repositories,
+you can run a script distributed with ASDF:
+@code{tools/cl-source-registry-cache.lisp @emph{/path/to/directory}}.
+To wholly invalidate the cache, you can
+delete the file @file{.cl-source-registry.cache} in that directory.
+In either case, for an existing Lisp process to see this change,
+it needs to clear its own cache with e.g. @code{(asdf:clear-source-registry)}.
+
+Developers may safely create a cache in their development tree,
+and we recommend they do it at the top of their source tree if
+it contains more than a small number of files and directories;
+they only need update it when they create, remove or move @file{.asd} files.
+Software distribution managers may also safely create such a cache,
+but they must be careful to update it every time they install, update or remove
+a software source repository or installation package.
+Finally, advanced developers who juggle with a lot of code
+in their @code{source-registry} may manually manage such a cache,
+to allow for faster startup of Lisp programs.
+
+This persistence cache can help you reduce startup latency.
+For instance, on one machine with hundreds of source repositories,
+such a cache shaves half a second at the startup
+of every @code{#!/usr/bin/cl} script using SBCL, more on other implementations;
+this makes a notable difference as to
+their subjective interactivity and usability.
+The speedup will only happen if the implementation-provided ASDF is recent enough
+(3.1.3.7 or later); it is not enough for a recent ASDF upgrade to be present,
+since the upgrade will itself be found but
+after the old version has scanned the directories without heeding such a cache.
+To upgrade the implementation-provided ASDF,
+use our script @code{tools/install-asdf.lisp}.
+
 
 @node Configuration API, Introspection, Caching Results, Controlling where ASDF searches for systems
 @section Configuration API
diff --git a/doc/index.html b/doc/index.html
index b00580aab69a3396a97409f173f4c578346998a5..6b3f65bc3627024ee2f45ac40c196a3179a5509b 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -26,8 +26,7 @@
         <li><a href="#extensions">Extensions</a></li>
         <li><a href="#bugs">Reporting Bugs</a></li>
         <li><a href="#mailing-lists">Mailing Lists</a></li>
-        <li><a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf.git;a=log"
-               >Changelog</a></li>
+        <li><a href="changelog">Changelog</a></li>
       </ul>
     </div>
     <div class="contents">
@@ -37,9 +36,10 @@
           It was rewritten for improved portability, robustness, usability,
           extensibility, configurability, internal consistency,
           and the ability to deliver standalone executables.
-          It was pre-released as 2.27 on February 1st 2013,
-          released as 3.0.0 on May 15th 2013,
-          again as 3.1.2 on May 6th 2014, and as 3.1.3 on 24 July 2014.
+          Its notable versions include pre-release 2.27 on February 1st 2013,
+          first release 3.0.0 on May 15th 2013,
+          major release 3.1.2 on May 6th 2014,
+          and latest release 3.1.4 on October 10th 2014.
         </p>
         <a id="what_it_is"></a>
         <h3>What it is</h3>
@@ -170,45 +170,43 @@
           and you can simply <tt>(require "asdf")</tt>.
           (All of them but CLISP also accept
           <tt>:asdf</tt>, <tt>"ASDF"</tt> or <tt>'asdf</tt> as an argument.)
-          Most of these implementations provide ASDF 3,
-          a few only provide ASDF 2.
-          Some implementations don't provide ASDF yet,
+          Most of these implementations provide ASDF 3.
+          Some implementations don't provide ASDF 3 yet,
           but have announced they will in their next release.
           As for remaining implementations,
-          they are obsolete and/or mostly unmaintained;
-          still ASDF 3 supports them if you load it manually,
-          though there might never be a next release
-          to provide it through <tt>require</tt>.
+          they are obsolete and/or mostly unmaintained.
         </p>
         <table border="1">
           <tr><th></th>
             <th align="left">Provide ASDF 3</th>
-            <th align="left">Provide ASDF 2</th>
-            <th align="left">Will provide ASDF(?)</th>
-            <th align="left">Obsolete</th></tr>
+            <th align="left">Will provide ASDF 3</th>
+            <th align="left">Unmaintained</th></tr>
           <tr><th align="left">Free</th>
             <td align="left"><tt>abcl ccl clisp cmucl ecl mkcl sbcl</tt></td>
-            <td align="left"><tt>xcl</tt></td>
-            <td> </td>
-            <td align="left"><tt>gcl mcl</tt></td></tr>
+            <td align="left"><tt>clasp gcl</tt></td>
+            <td align="left"><tt>mcl xcl</tt></td></tr>
           <tr><th align="left">Proprietary</th>
             <td align="left"><tt>allegro</tt></td>
             <td align="left"><tt>lispworks mocl</tt></td>
-            <td align="left"><tt>scl</tt></td>
-            <td align="left"><tt>cormanlisp genera</tt></td></tr>
+            <td align="left"><tt>cormanlisp genera scl</tt></td></tr>
         </table>
         <p>
           To deal with an implementation that doesn't yet provide ASDF 3,
           we provide <a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf.git;a=blob;f=tools/install-asdf.lisp">a script</a> that can install ASDF 3
           where your implementation goes looking for it
-          when you <tt>require</tt> it.
-          Alternatively, if the implementation provides ASDF 2 or an older ASDF 3,
+          when you <tt>(require "asdf")</tt> .
+        </p><p>
+          Alternatively, if the implementation provides ASDF 2
+          (as do <tt>lispworks mocl xcl</tt> or older versions of some implementations)
+          or an overly old version of ASDF 3,
           you can download, install and configure a more recent ASDF 3,
-          and use <tt>(asdf:load-system :asdf)</tt> to upgrade it.
-          Beware: when upgrading from ASDF 2, you should always do it
-          immediately after the <tt>require</tt>,
-          and before you use ASDF for anything else
-          (ASDF 3 does that automatically).
+          then use <tt>(require "asdf") (asdf:load-system :asdf)</tt> to load it.
+          Beware: when upgrading that way from ASDF 2, you should always do it
+          <em>immediately</em> after the <tt>require</tt> (and optional configuration),
+          and before you use ASDF to do anything else;
+          ASDF 3 does this early upgrade automatically.
+          Also note that <tt>mocl</tt> only supports a heavily modified variant of ASDF 2,
+          and its cross-compilation setup isn't yet supported by ASDF 3.
         </p>
         <!-- Note to self:
              asdf-announce may have been a casualty of some recent mailing-list reorganization. Check.
@@ -305,8 +303,10 @@ XCL (Peter Graves) <gnooth@gmail.com>
             get our "release" branch for the latest stable release.
             Run <tt>make</tt> to create <tt>build/asdf.lisp</tt>);
           </li>
-          <li>browse the latest <em>development</em> tree from our git repository:
-            <a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf.git">gitweb</a>
+          <li>browse the latest <em>development</em> tree from our git
+        repository:
+          <a href="http://common-lisp.net/gitweb/?p=asdf/asdf.git;a=summary;js=1">gitweb</a>
+            <!-- <a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf.git">gitweb</a> -->
           </li>
           <li>download the tarball of a past release:
             <a href="http://common-lisp.net/project/asdf/archives/">archives</a>
@@ -315,31 +315,33 @@ XCL (Peter Graves) <gnooth@gmail.com>
         <a id="extensions"></a>
         <h3>Extensions</h3>
         <p>Known extensions to ASDF include:</p>
-	<ul>
-	  <li><a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf-contrib.git"
-		 ><tt>asdf-contrib</tt></a>,
-	    a collection of most of the below.</li>
-	  <li><a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf-encodings.git"
-		 ><tt>asdf-encodings</tt></a>,
-	    to compile Lisp source files with character encodings other than UTF-8.</li>
-	  <li><a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf-finalizers.git"
-		 ><tt>asdf-finalizers</tt></a>,
-	    to allow macros to include code to be evaluated
-	    at the end of a file being compiled.</li>
-	  <li><a href="http://common-lisp.net/gitweb?p=projects/xcvb/asdf-dependency-grovel.git"
-		 ><tt>asdf-dependency-grovel</tt></a>,
-	    to compute the actual dependencies in a big ASDF system.</li>
-	  <li><a href="http://common-lisp.net/project/qitab/"
-		 ><tt>poiu</tt></a>,
-	    to compile a system in parallel.</li>
-	  <li><a href="http://common-lisp.net/project/asdf-system-connections/"
-		 ><tt>asdf-system-connections</tt></a>,
-	    lets you specify systems that are automatically loaded when
+        <ul>
+          <li><a href="http://common-lisp.net/gitweb/?p=asdf/asdf-contrib.git"
+                 ><tt>asdf-contrib</tt></a>,
+            a collection of most of the below.</li>
+          <li><a href="http://common-lisp.net/gitweb/?p=asdf/asdf-encodings.git"
+                 ><tt>asdf-encodings</tt></a>,
+            to compile Lisp source files with character encodings other than UTF-8.</li>
+          <li><a href="http://common-lisp.net/gitweb/?p=asdf/asdf-finalizers.git"
+                 ><tt>asdf-finalizers</tt></a>,
+            to allow macros to include code to be evaluated
+            at the end of a file being compiled.</li>
+          <li>
+            <!-- <a href="http://common-lisp.net/gitweb?p=projects/xcvb/asdf-dependency-grovel.git"> -->
+            <a href="http://common-lisp.net/gitweb/?p=xcvb/asdf-dependency-grovel.git;a=summary;js=1">
+            <tt>asdf-dependency-grovel</tt></a>,
+            to compute the actual dependencies in a big ASDF system.</li>
+          <li><a href="http://common-lisp.net/project/qitab/"
+                 ><tt>poiu</tt></a>,
+            to compile a system in parallel.</li>
+          <li><a href="http://common-lisp.net/project/asdf-system-connections/"
+                 ><tt>asdf-system-connections</tt></a>,
+            lets you specify systems that are automatically loaded when
             two other systems are loaded, to connect them.</li>
-	  <li><a href="http://www.lrde.epita.fr/~didier/software/lisp/misc.php#asdf-flv"
-		 ><tt>asdf-flv</tt></a>,
-	    to bind file-local variables around the compilation of some files.</li>
-          <li><a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf-package-system.git"
+          <li><a href="http://www.lrde.epita.fr/~didier/software/lisp/misc.php#asdf-flv"
+                 ><tt>asdf-flv</tt></a>,
+            to bind file-local variables around the compilation of some files.</li>
+          <li><a href="http://common-lisp.net/gitweb/?p=asdf/asdf-package-system.git"
                  ><tt>asdf-package-system</tt></a>,
             to compile Lisp source files with one package per file
             that also determines dependencies, in the style of
@@ -351,7 +353,7 @@ XCL (Peter Graves) <gnooth@gmail.com>
         </ul>
         <p>Former extensions, now superseded, include:</p>
         <ul>
-	  <li><tt>asdf-binary-locations</tt> allowed one to redirect where ASDF creates its output files,
+          <li><tt>asdf-binary-locations</tt> allowed one to redirect where ASDF creates its output files,
             so they don't clash between implementations and don't pollute source directories.
             It is superseded by <tt>asdf/defsystem</tt>'s builtin
             <tt>asdf-output-translations</tt> mechanism;
@@ -360,7 +362,7 @@ XCL (Peter Graves) <gnooth@gmail.com>
             <tt>common-lisp-controller</tt> and <tt>cl-launch</tt> used to provide similar mechanisms,
             and have also been superseded by <tt>asdf-output-translations</tt>.
           </li>
-	  <li><tt>asdf-bundle</tt>, n&eacute;e <tt>asdf-ecl</tt>,
+          <li><tt>asdf-bundle</tt>, n&eacute;e <tt>asdf-ecl</tt>,
             allowed you to create a single-file bundle out of a system,
             for easier delivery.
             It is now a builtin part of <tt>asdf/defsystem</tt>,
@@ -368,17 +370,17 @@ XCL (Peter Graves) <gnooth@gmail.com>
             a standalone executable program (on supported implementations),
             or an image containing your system precompiled.
           </li>
-	  <li><tt>asdf-utils</tt> was a collection of utilities that originated with ASDF.
+          <li><tt>asdf-utils</tt> was a collection of utilities that originated with ASDF.
             It is now superseded by <tt>uiop</tt>, aka <tt>asdf/driver</tt>,
             which is part of ASDF,
             and exports its functionality
             in its own package <tt>uiop</tt>.
           </li>
-	  <li><tt>asdf-condition-control</tt>, initially part of XCVB's <tt>xcvb-driver</tt>,
+          <li><tt>asdf-condition-control</tt>, initially part of XCVB's <tt>xcvb-driver</tt>,
             allowed you to muffle uninteresting conditions during compilation.
             Is now superseded by equivalent functionality in <tt>uiop</tt>.
           </li>
-	</ul>
+        </ul>
 
         <h3>Contributing</h3>
         <p>Join our mailing list, check the code out from git,
@@ -398,17 +400,17 @@ XCL (Peter Graves) <gnooth@gmail.com>
         <ul>
           <li><b>asdf-devel</b>
             A list for questions, suggestions, bug reports, patches, and so on.
-	    It's for everyone and everything. Please join the conversation!
+            It's for everyone and everything. Please join the conversation!
           <a
         href="http://mailman.common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel">asdf-devel
         mailman site to subscribe</a>
-	  </li>
+          </li>
           <li><b>asdf-announce</b>
             A low-volume mailing-list for announcements only, mostly regarding new releases.
-	    Posting is restricted to project administrators and to important notices.
-	    Please subscribe to it if you're a Lisp implementation or distribution vendor,
-	    who needs to know when to upgrade the ASDF you distribute,
-	    but are otherwise not interested in day to day design and
+            Posting is restricted to project administrators and to important notices.
+            Please subscribe to it if you're a Lisp implementation or distribution vendor,
+            who needs to know when to upgrade the ASDF you distribute,
+            but are otherwise not interested in day to day design and
         development.
           <a
         href="http://mailman.common-lisp.net/cgi-bin/mailman/listinfo/asdf-announce">asdf-announce
@@ -423,6 +425,10 @@ XCL (Peter Graves) <gnooth@gmail.com>
         <a id="news"></a>
         <h3>What is happening</h3>
         <dl>
+          <dt>October 2014</dt>
+          <dd>More bug fixing leads to release of 3.1.4 on 10 October 2014.
+          There should be no incompatibilities. See the <a
+          href="changelog">Changelog</a> for more details.</dd>
           <dt>August 2014</dt>
           <dd>The ASDF mailing lists have been reestablished, in particular
         asdf-announce, which should allow CL implementers better access to only
@@ -497,7 +503,7 @@ XCL (Peter Graves) <gnooth@gmail.com>
         <a class="nav" href="http://common-lisp.net/" title="Common-Lisp.net"> <img src="http://common-lisp.net/project/cl-containers/shared/buttons/lisp-lizard.png" width="80" height="15" title="Common-Lisp.net" alt="Common-Lisp.net button" /></a>
         <p><span class="copyright"Copyright &copy; 2001-2014 Daniel Barlow and contributors</span></p>
         <p>ASDF has an <a href="http://www.opensource.org/licenses/mit-license.php">MIT style</a> license</p>
-        <div id="timestamp">Last updated 2014-05-19</div>
+        <div id="timestamp">Last updated 2014-10-10</div>
     </div>
   </body>
 </html>
diff --git a/ext/asdf-encodings b/ext/asdf-encodings
new file mode 160000
index 0000000000000000000000000000000000000000..41a46874671111c6a04c9a7c284cd9d8b37b1d4e
--- /dev/null
+++ b/ext/asdf-encodings
@@ -0,0 +1 @@
+Subproject commit 41a46874671111c6a04c9a7c284cd9d8b37b1d4e
diff --git a/ext/closer-closer-mop b/ext/closer-closer-mop
index 6bd277086ff95b0880f5f35aa074e1d35c21ab6f..48f9010870d0499a915349ba2bf3c7c3098ccb7d 160000
--- a/ext/closer-closer-mop
+++ b/ext/closer-closer-mop
@@ -1 +1 @@
-Subproject commit 6bd277086ff95b0880f5f35aa074e1d35c21ab6f
+Subproject commit 48f9010870d0499a915349ba2bf3c7c3098ccb7d
diff --git a/footer.lisp b/footer.lisp
index f90c8ef47782c06aedc85d710621eb081414800c..f78a763547c0eb56654e9865941a04449da3997c 100644
--- a/footer.lisp
+++ b/footer.lisp
@@ -3,7 +3,8 @@
 
 (uiop/package:define-package :asdf/footer
   (:recycle :asdf/footer :asdf)
-  (:use :uiop/common-lisp :uiop :asdf/upgrade :asdf/operate :asdf/bundle))
+  (:use :uiop/common-lisp :uiop
+        :asdf/upgrade :asdf/find-system :asdf/operate :asdf/bundle))
 (in-package :asdf/footer)
 
 ;;;; Hook ASDF into the implementation's REQUIRE and other entry points.
@@ -33,7 +34,7 @@
                 (if (eq f 'module-provide-asdf) f
                     #'(lambda (name)
                         (let ((l (multiple-value-list (funcall f name))))
-                          (and (first l) (register-pre-built-system (coerce-name name)))
+                          (and (first l) (register-preloaded-system (coerce-name name)))
                           (values-list l))))))))
 
 #+cmu ;; Hook into the CMUCL herald.
@@ -58,4 +59,3 @@
 
 (when *load-verbose*
   (asdf-message ";; ASDF, version ~a~%" (asdf-version)))
-
diff --git a/header.lisp b/header.lisp
index 8a4f8fea366bcc0b7210ca8b9ab1cc671579e55b..209c5c8dc3dc17ece4c47e9a847c6d7b68364888 100644
--- a/header.lisp
+++ b/header.lisp
@@ -1,5 +1,5 @@
 ;;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp ; buffer-read-only: t; -*-
-;;; This is ASDF 3.1.3.5: Another System Definition Facility.
+;;; This is ASDF 3.1.4: Another System Definition Facility.
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome:
 ;;; please mail to <asdf-devel@common-lisp.net>.
diff --git a/source-registry.lisp b/source-registry.lisp
index d85285fdb052002cdd4a0602f035397121f01d34..e6b51deec7a3762fa8577db5c680097e3a84db2b 100644
--- a/source-registry.lisp
+++ b/source-registry.lisp
@@ -13,7 +13,7 @@
    #:ensure-source-registry #:*source-registry-parameter*
    #:*default-source-registry-exclusions* #:*source-registry-exclusions*
    #:*wild-asd* #:directory-asd-files #:register-asd-directory
-   #:collect-asds-in-directory #:collect-sub*directories-asd-files
+   #:*recurse-beyond-asds* #:collect-asds-in-directory #:collect-sub*directories-asd-files
    #:validate-source-registry-directive #:validate-source-registry-form
    #:validate-source-registry-file #:validate-source-registry-directory
    #:parse-source-registry-string #:wrapping-source-registry
@@ -59,15 +59,33 @@ system names to pathnames of .asd files")
     (directory-files directory *wild-asd*))
 
   (defun collect-asds-in-directory (directory collect)
-    (map () collect (directory-asd-files directory)))
+    (let ((asds (directory-asd-files directory)))
+      (map () collect asds)
+      asds))
+
+  (defvar *recurse-beyond-asds* t
+    "Should :tree entries of the source-registry recurse in subdirectories
+after having found a .asd file? True by default.")
+
+  (defun process-source-registry-cache (directory collect)
+    (let ((cache (ignore-errors
+                  (safe-read-file-form (subpathname directory ".cl-source-registry.cache")))))
+      (when (and (listp cache) (eq :source-registry-cache (first cache)))
+        (loop :for s :in (rest cache) :do (funcall collect (subpathname directory s)))
+        t)))
 
   (defun collect-sub*directories-asd-files
-      (directory &key (exclude *default-source-registry-exclusions*) collect)
+      (directory &key (exclude *default-source-registry-exclusions*) collect
+                   (recurse-beyond-asds *recurse-beyond-asds*) ignore-cache)
     (collect-sub*directories
      directory
-     (constantly t)
-     #'(lambda (x &aux (l (car (last (pathname-directory x))))) (not (member l exclude :test #'equal)))
-     #'(lambda (dir) (collect-asds-in-directory dir collect))))
+     #'(lambda (dir)
+         (unless (and (not ignore-cache) (process-source-registry-cache directory collect))
+           (let ((asds (collect-asds-in-directory dir collect)))
+             (or recurse-beyond-asds (not asds)))))
+     #'(lambda (x)
+         (not (member (car (last (pathname-directory x))) exclude :test #'equal)))
+     (constantly nil)))
 
   (defun validate-source-registry-directive (directive)
     (or (member directive '(:default-registry))
@@ -223,7 +241,8 @@ system names to pathnames of .asd files")
         ((:also-exclude)
          (appendf *source-registry-exclusions* rest))
         ((:default-registry)
-         (inherit-source-registry '(default-source-registry) :register register))
+         (inherit-source-registry
+          '(default-user-source-registry default-system-source-registry) :register register))
         ((:inherit-configuration)
          (inherit-source-registry inherit :register register))
         ((:ignore-inherited-configuration)
diff --git a/test/hello-world-example.asd b/test/hello-world-example.asd
index 90aa5556dead167a3fe6377b7a968ffe85c5699d..446fa9b61a21ab402605e05046f87bd20cbaa08c 100644
--- a/test/hello-world-example.asd
+++ b/test/hello-world-example.asd
@@ -8,6 +8,7 @@
      #+mkcl
      ,@`(:prefix-lisp-object-files (,(namestring (truename (translate-logical-pathname #P"SYS:cmp.a"))))
          :extra-build-args ,(or #-windows '(:use-mkcl-shared-libraries nil))
+         :class program-system
          :epilogue-code (progn
                           (setq uiop/image:*image-dumped-p* :executable)
                           (setq uiop/image:*lisp-interaction* nil)
diff --git a/test/test-bundle.script b/test/test-bundle.script
index fe30636e38fbc3dfaf2386c52c5e8de9ccb4fbf8..20d9e4dc8977d5327ee7bbd404da85944e1cf55a 100644
--- a/test/test-bundle.script
+++ b/test/test-bundle.script
@@ -54,6 +54,10 @@
 (progn
   #+ecl (trace c::builder)
   (require 'sockets) ;; Test the pre-compiled system feature
+  ;; Test that we didn't break require for non-asdf modules
+  (progn
+    (pop #+ecl ext:*module-provider-functions* #+mkcl mk-ext:*module-provider-functions*)
+    (require 'serve-event))
   (operate 'dll-op :test-asdf/dll-test)
   (let ((dll (first (output-files 'dll-op :test-asdf/dll-test))))
     (si:load-foreign-module dll)
diff --git a/test/test-program.script b/test/test-program.script
index d0f5cb2663174615a52a72574aedb03af836d9d2..9deae7c76d61359cabc801632bb95cd8c95daac7 100644
--- a/test/test-program.script
+++ b/test/test-program.script
@@ -7,6 +7,8 @@
 
 (assert (find-system :hello-world-example))
 
+(trace run-program)
+
 #+allegro
 (defparameter *lisp*
   (let ((argv0 (parse-native-namestring (first (raw-command-line-arguments)))))
@@ -18,7 +20,7 @@
       (list *asdf-directory* ;; be sure that *OUR* asdf is first of any possible ASDF
             *uiop-directory*
             ;; try finding xcvb's lisp-invocation right next to asdf.
-            (subpathname *asdf-directory* "../lisp-invocation/")))
+            (subpathname *asdf-directory* "ext/lisp-invocation/")))
 (unless (find-system :lisp-invocation nil)
   ;; try harder by enabling the user's source-registry
   (initialize-source-registry ""))
diff --git a/test/test-retry-loading-component-1.script b/test/test-retry-loading-component-1.script
index 35a8c13bad612dd156522c171d9d2a1f6c8f2a9f..63620a5fbefeff54a55288c4d184333f0e756ba7 100644
--- a/test/test-retry-loading-component-1.script
+++ b/test/test-retry-loading-component-1.script
@@ -10,7 +10,8 @@
 (handler-bind
     ((error #'(lambda (c)
                 (format t "~&Caught error ~s" c)
-		(assert (not *caught-error*) () "Déjà vu")
+                (assert (not *caught-error*) ()
+                        "The missing system component error is not fixed by the handler, as expected.")
                 (setf *caught-error* t)
                 ;; Evil side-effect: create a .asd file from .hidden file.
                 (concatenate-files (list (test-source "try-reloading-dependency.hidden"))
diff --git a/tools/asdf-tools b/tools/asdf-tools
index d82f64843148485c2ea031032b7293197b413cb3..7b3b989860c90cd049a2be86885dce0a626b8ccc 100755
--- a/tools/asdf-tools
+++ b/tools/asdf-tools
@@ -1,6 +1,7 @@
 ":" ; exec sbcl --script "$0" "$@" ; exit # -*- Lisp -*-
 ;;;;; Really runs on any decent Common Lisp implementation
-;;;;; Can also be invoked by cl-launch 4: cl-launch -sp asdf-tools -r restart -- "$@"
+;;;;; Can also be invoked by cl-launch 4:
+;;;;;    cl-launch -sp asdf-tools -r entry-point -- "$@"
 
 (in-package :cl-user) ;; That may be default, but let's make double sure and tell SLIME.
 
diff --git a/tools/build.lisp b/tools/build.lisp
index fc06f9967f1b209cf29d0d96774eb104c09c2bf6..3a9e781c562dc923b52a626cce22cc1a167afb3d 100644
--- a/tools/build.lisp
+++ b/tools/build.lisp
@@ -8,11 +8,13 @@
 ;;; Documentation
 (defun doc ()
   "build documentation in doc/ directory"
-  (run '(make) :directory (pn "doc/")))
+  (run '(make) :directory (pn "doc/"))
+  (values))
 
 (defun website ()
   "publish documentation onto the public website"
-  (run '(make website) :directory (pn "doc/")))
+  (run '(make website) :directory (pn "doc/"))
+  (values))
 
 
 ;;; Line counting
diff --git a/tools/cl-source-registry-cache.lisp b/tools/cl-source-registry-cache.lisp
new file mode 100755
index 0000000000000000000000000000000000000000..59dd1ddf2219f7e078e6cf6f78c713928da2a0cf
--- /dev/null
+++ b/tools/cl-source-registry-cache.lisp
@@ -0,0 +1,30 @@
+#!/usr/bin/cl -sp asdf -E main
+
+(in-package :asdf)
+
+(uiop-debug)
+
+(defun collect-asd (table asd)
+  (multiple-value-bind (previous foundp)
+      (gethash (pathname-name asd) table)
+    (when (or (not foundp) (< (length (pathname-directory previous))
+                              (length (pathname-directory asd))))
+      (setf (gethash (pathname-name asd) table) asd))))
+
+(defun update-cache (directory)
+  (let* ((dir (ensure-pathname directory
+                               :namestring :native
+                               :ensure-absolute t :want-non-wild t :ensure-directory t
+                               :want-existing t))
+         (table (make-hash-table :test 'equal)))
+    (collect-sub*directories-asd-files
+     dir :collect #'(lambda (asd) (collect-asd table asd)) :ignore-cache t)
+    (with-output-file (s (subpathname dir ".cl-source-registry.cache")
+                         :if-exists :rename-and-delete :if-does-not-exist :create)
+      (format s "(:source-registry-cache~{~% ~S~})~%"
+              (sort (loop :for p :being :the :hash-values :of table
+                          :collect (unix-namestring (enough-pathname p dir)))
+                    'string<)))))
+
+(defun main (argv)
+  (map () 'update-cache argv))
diff --git a/tools/git.lisp b/tools/git.lisp
index c02fffe6a4517fe453081de42ea60facd6d76584..e177f4c8295eaffca3051f60b61ea2a4bc590581 100644
--- a/tools/git.lisp
+++ b/tools/git.lisp
@@ -53,5 +53,5 @@
 
 (defun git-all-committed-p ()
   "is your checkout clean, with all files committed?"
-  (null (git '(status -s) :output :lines)))
+  (null (nth-value 1 (git '(status -s) :output :lines))))
 
diff --git a/tools/install-asdf.lisp b/tools/install-asdf.lisp
old mode 100644
new mode 100755
index 4008b9be6f81768e3a344f5c60569d21bba06383..f3e7a3358303fac67c550b44ddf8a417aa03c4d5
--- a/tools/install-asdf.lisp
+++ b/tools/install-asdf.lisp
@@ -1,7 +1,11 @@
 ":" ; exec cl-launch "$0" "$@" # -*- Lisp -*-
 #|
-Usage: ./tools/asdf-tools install-asdf lispworks
-    or l=lispworks ./tools/asdf-tools install-asdf
+Usage: make && ./tools/asdf-tools install-asdf lispworks
+    or make && l=lispworks ./tools/asdf-tools install-asdf
+    or make && cl-launch -l lispworks bin/install-asdf-as-module
+    or make
+       sbcl # or otherwise start your Lisp
+       (load "bin/install-asdf-as-module")
 
 This script will install the current version of ASDF
 as a module pre-compiled for your implementation,
@@ -18,11 +22,21 @@ It notably doesn't work on:
  Also, MKCL now delivers UIOP separately from ASDF, which is great,
  but requires support. Happily, both ECL and MKCL tend to sport
  a recent ASDF 3, too.
-* SBCL since 1.2.2 now like MKCL delivers UIOP separately from ASDF.
+* SBCL since 1.2.3 now like MKCL delivers UIOP separately from ASDF.
 * mocl, that doesn't support ASDF 3 yet.
 * Corman Lisp, RMCL, Genera, that are obsolete anyway.
 
 |#
+
+#+gcl
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (declaim (optimize (speed 1) (safety 0) (space 0)))
+  (proclaim '(optimize (speed 1) (safety 0) (space 0)))
+  (si::use-fast-links nil)
+  (compile-file (merge-pathnames #p"../build/asdf.lisp" *load-truename*)
+                :output-file (merge-pathnames #p"../modules/asdf.o" system:*system-directory*))
+  (system:quit 0))
+
 ;;; Ensure we load and configure this particular ASDF
 #-cl-launch
 (eval-when (:compile-toplevel :load-toplevel :execute)
@@ -44,7 +58,7 @@ It notably doesn't work on:
   #+clozure #p"ccl:tools;"
   #+cmu #p"modules:asdf/"
   #+(or ecl mkcl) #p"sys:"
-  #+gcl system:*system-directory*
+  #+gcl (subpathname system:*system-directory* "../modules/")
   #+lispworks (system:lispworks-dir "load-on-demand/utilities/")
   #+sbcl (subpathname (sb-int:sbcl-homedir-pathname) "contrib/")
   #+scl #p"file://modules/"
@@ -89,7 +103,7 @@ It notably doesn't work on:
 
 (defun install-asdf-as-module ()
   (nest
-   (let* ((asdf.lisp (system-relative-pathname :asdf-tools "../build/asdf.lisp"))
+   (let* ((asdf.lisp (system-relative-pathname :uiop "../build/asdf.lisp"))
           (asdf.fasl (asdf-module-fasl))
           #+(or ecl mkcl) (asdf.o (object-file asdf.fasl :object))
           #+(or ecl mkcl) (asdf.a (object-file asdf.fasl :lib))))
diff --git a/tools/main.lisp b/tools/main.lisp
index fef8ee5c702d7809a0e7c1fba47be697d050d220..dd27417c439aa47a411cf2569e2a923db59fa168 100644
--- a/tools/main.lisp
+++ b/tools/main.lisp
@@ -45,7 +45,7 @@
     test-all test-all-scripts-no-stop test-all-upgrade-no-stop
     test-all-no-upgrade-no-stop test-all-no-stop
     check-all-scripts-results check-all-upgrade-results check-all-results
-    make-archive publish-archive link-archive archive install ;; release
+    make-archive make-and-publish-archive publish-archive link-archive archive install ;; release
     debian-package publish-debian-package
     re help show-commands makefile-targets)) ;; main
 
@@ -62,8 +62,8 @@
 so that, when included in the Makefile, they will enable shell completion
 based on a list of targets"
   (let ((c (public-command-strings)))
-    ;;(format t ".PHONY: ~{~A~^ ~}~%~%~{~A:~%~}~%" c c))
-    (format t "~{~A:~%~}~%" c))
+    (format t ".PHONY: ~{~A~^ ~}~%~%~{~A~^ ~}: force
+	./tools/asdf-tools env l='$l' L='$L' u='$u' U='$u' v='$v' s='$s' t='$t' $@~%" c c))
   (values))
 
 (defun help (&optional x)
diff --git a/tools/release.lisp b/tools/release.lisp
index 76f05036765de7a54d1d801720a3b8b13b58ae3f..d16ba67bb1fd51ffd34c9073cc22a9ad78a2ad38 100644
--- a/tools/release.lisp
+++ b/tools/release.lisp
@@ -119,7 +119,8 @@
 (defun publish-archive ()
   "publish tarballs to the website"
   (let ((tarballs (mapcar 'tarname (list (driver-name) (asdf-defsystem-name) (asdf-git-name)))))
-    (run `(rsync ,@tarballs ,(asdf-lisp-name) (,*clnet* ":" ,(public-path "archives/")))
+    (run `(rsync "--times" "--chmod=a+rX,ug+w"
+                 ,@tarballs ,(asdf-lisp-name) (,*clnet* ":" ,(public-path "archives/")))
          :show t :directory (pn "build/")))
   (format t "~&To download the tarballs, point your browser at:~%
         http://common-lisp.net/project/asdf/archives/
@@ -176,7 +177,7 @@
 
 (defun publish-debian-package (&optional release)
   "publish a debian package"
-  (let ((changes (strcat "cl-asdf_" (debian-version-from-file release)
+  (let ((changes (strcat "cl-asdf_" (debian-version-without-epoch (debian-version-from-file release))
                          "_" (debian-architecture) ".changes")))
     (run* `(dput mentors ,(pn "../" changes)))))
 
diff --git a/tools/version.lisp b/tools/version.lisp
index 45cb33c04da38b3913a38b7be7cb85d8a11d5887..71fac8440d08007062273e035051d66224027c21 100644
--- a/tools/version.lisp
+++ b/tools/version.lisp
@@ -5,17 +5,18 @@
 (defparameter *version-tag-glob* "[0-9][.][0-9]*")
 
 (defun version-from-tag (&optional commit)
-  (git `(describe --tags --match ,*version-tag-glob* ,commit)
-       :output :line :directory (pn)))
+  ;; run-program issue: :output :line closes the fd, which causes the program to die in error.
+  (first (nth-value 1 (git `(describe --tags --match ,*version-tag-glob* ,commit) :output :lines))))
 
 (defun version-from-file (&optional commit)
   (if commit
-      (git `(show (,commit":version.lisp-expr")) :output :form)
+      (nth-value 1 (git `(show (,commit":version.lisp-expr")) :output :form))
       (safe-read-file-form (pn "version.lisp-expr"))))
 
 (defun debian-version-from-file (&optional commit)
   (match (if commit
-             (git `(show (,commit":debian/changelog")) :output :line)
+             ;; run-program issue: :output :line closes the fd, which causes the program to die in error.
+             (first (nth-value 1 (git `(show (,commit":debian/changelog")) :output :lines)))
              (read-file-line (pn "debian/changelog")))
     ((ppcre "^[^(]*\\(([-0-9.:-]+)\\)" ver) ver)))
 
@@ -27,6 +28,14 @@
     ;; (C) rel = nil is for debian-native packages, e.g. base-passwd or cowbuilder
     (values ver epoch rel)))
 
+(defun debian-version-string (ver epoch rel)
+  (format nil "~@[~D:~]~A~@[-~A~]" epoch ver rel))
+
+(defun debian-version-without-epoch (version-string)
+  (multiple-value-bind (ver epoch rel) (parse-debian-version version-string)
+    (declare (ignore epoch))
+    (debian-version-string ver nil rel)))
+
 (defparameter *version* (version-from-file))
 
 ;;; Bumping the version of ASDF
diff --git a/uiop/README b/uiop/README.md
similarity index 69%
rename from uiop/README
rename to uiop/README.md
index bb943450b44f41ba578407d39a1dcc8221026487..b3a23b1ebb699fc315cddaccc29a08548c9b8b60 100644
--- a/uiop/README
+++ b/uiop/README.md
@@ -7,70 +7,70 @@ between operating systems, and between what the standard provides and
 what programmers actually need, to write portable Common Lisp programs.
 
 It is organized by topic in many files, each of which defines its own package
-according to its topic: e.g pathname.lisp will define package UIOP/PATHNAME
+according to its topic: e.g `pathname.lisp` will define package `UIOP/PATHNAME`
 and contain utilities related to the handling of pathname objects.
-All exported symbols are reexported in a convenience package UIOP.
+All exported symbols are reexported in a convenience package `UIOP`.
 
 The files that constitute UIOP are, in loading order:
 
-* package: deals with packages and their symbols, most notably including
-  define-package, a variant of defpackage capable of hot-upgrade, or
-  symbol-call and find-symbol* that are also useful for use in .asd files
+* `package`: deals with packages and their symbols, most notably including
+  `define-package`, a variant of `defpackage` capable of hot-upgrade, or
+  `symbol-call` and `find-symbol*` that are also useful for use in `.asd` files
   before packages have been defined.
 
-* common-lisp: lets you paper over various sub-standard implementations.
+* `common-lisp`: lets you paper over various sub-standard implementations.
   Big offenders are Corman, GCL, Genera, MCL, all of them unmaintained.
   Supported without serious issues are:
   ABCL, Allegro, CCL, CMUCL, CLISP, ECL, LispWorks, MKCL, SBCL, SCL, XCL.
 
-* utility: provides macros and functions that do not involve I/O; it handles
+* `utility`: provides macros and functions that do not involve I/O; it handles
   control-flow, (p)lists, characters, strings, functions, classes, conditions,
   "stamps" (real number or boolean for +/- infinity), versions, etc.
-  It also sports uiop-debug, a useful tool to help you debug programs.
+  It also sports `uiop-debug`, a useful tool to help you debug programs.
 
-* os: extracts information from your environment, including
+* `os`: extracts information from your environment, including
   an ABI identifier, features that distinguish Unix vs Windows,
-  getenv, hostname, getcwd and chdir, etc.
+  `getenv`, `hostname`, `getcwd` and `chdir`, etc.
 
-* pathname: overcomes the gruesome non-portability trap that are CL pathnames
+* `pathname`: overcomes the gruesome non-portability trap that are CL pathnames
   (and their lovecraftian "logical" variant), offering a vast array of
   functions and a sensible, usable abstraction to specify relative pathnames.
-  It has a function merge-pathnames* to use instead of merge-pathnames, or
-  even better, subpathname and its variant subpathname*; it has also plenty
+  It has a function `merge-pathnames*` to use instead of `merge-pathnames`, or
+  even better, `subpathname` and its variant `subpathname*`; it has also plenty
   of functions for dealing with pathnames being directory vs file,
   physical vs logical, absolute vs relative, and more.
 
-* filesystem: provides portable access to the filesystem, inspecting it,
+* `filesystem`: provides portable access to the filesystem, inspecting it,
   only using truename when desired, using native OS namestrings,
   atomic file renaming, creating or deleting directories, etc.
 
-* stream: portably deals with *stderr* vs *error-output*, character encodings
-  (external formats), element types, safe READing and WRITEing, opening files
-  or temporary files, providing FORMAT-like designators for streams,
+* `stream`: portably deals with `*stderr*` vs `*error-output*`, character encodings
+  (external formats), element types, safe `read`ing and `write`ing, opening files
+  or temporary files, providing `format`-like designators for streams,
   flushing output buffers, consuming or copying streams, concatenating streams
   or files, copying files, etc.
 
-* image: portably deals with images, dumping them, restoring from them,
+* `image`: portably deals with images, dumping them, restoring from them,
   registering hooks to run at suitable events in the image lifetime,
   printing backtraces, handling fatal conditions, using or avoiding debug modes,
   accessing command line arguments or quitting the process.
 
-* run-program: portably spawns external processes and captures their output.
+* `run-program`: portably spawns external processes and captures their output.
   Can also capture error-output, inject input, or let it all be interactive.
 
-* lisp-build: portably compiles common-lisp code, handles compilation results,
+* `lisp-build`: portably compiles Common Lisp code, handles compilation results,
   muffles uninteresting conditions, saves and restores deferred warnings,
   runs hooks around compilation (to e.g. control optimizations or syntax),
   identifies the pathname of the current file, combines FASLs, etc.
 
-* configuration: helps you define portable configuration files, using best
+* `configuration`: helps you define portable configuration files, using best
   practices to define and validate syntax, search standard paths,
   let users specify pathnames or pathname patterns, etc.
 
-* backward-driver: provides backward-compatibility with earlier incarnations
+* `backward-driver`: provides backward-compatibility with earlier incarnations
   of this library (i.e. ASDF internals that have leaked, or ASDF-UTILS)
 
-* driver: reexports all the above utilities in a single package UIOP.
+* `driver`: reexports all the above utilities in a single package `UIOP`.
 
 
 Documentation
@@ -86,12 +86,12 @@ make a webpage from it, at which point it would be nice to insert a link here.
 
 One tool with which you can extract all the documentation is HEΛP.
 At this time, the interface is not great, but if you use the scrollbar on the right
-of the left side panel, you can see many packages and from there the defined symbols::
+of the left side panel, you can see many packages and from there the defined symbols:
 
 	http://bimib.disco.unimib.it/people/Marco.Antoniotti/Projects/CL/HELAMBDAP/tests/asdf-uiop/docs/html/dictionary/dictionary.html
 
 Another automated documentation tool is quickdocs, but unhappily, at the time of this writing,
-it only extracts information from the first package::
+it only extracts information from the first package:
 
 	http://quickdocs.org/uiop/api
 
@@ -100,16 +100,18 @@ Using UIOP
 ----------
 
 UIOP is part of ASDF 3, and any modern Common Lisp implementation
-will have all of UIOP available when you (require "asdf").
-NB: (require :asdf) also works on all implementations but CLISP.
+will have all of UIOP available when you `(require "asdf")`.
+NB: `(require :asdf)` also works on all implementations but CLISP.
 
 If you need some functionality only available in a recent version of UIOP,
 but cannot or will not upgrade ASDF, UIOP is also distributed separately;
-see e.g. in Quicklisp. You may then have to load it like any other library::
+see e.g. in Quicklisp. You may then have to load it like any other library:
+
 	(asdf:load-system :uiop)
 
 If you want to use UIOP while preserving compatibility with ASDF 2,
-we recommend that in your ASDF system definition you may use the like of::
+we recommend that in your ASDF system definition you may use the like of:
+
 	:depends-on (#-asdf3 :uiop)
 
 
diff --git a/uiop/contrib/debug.lisp b/uiop/contrib/debug.lisp
index b65d00e17dd0561a52f1a673ed4ff2e15a60fe61..1cd6da295e3dd82bdaee110d77a3d613612c6f65 100644
--- a/uiop/contrib/debug.lisp
+++ b/uiop/contrib/debug.lisp
@@ -1,4 +1,4 @@
-;;;;; A few essential debugging utilities by Faré,
+;;;;; A few essential debugging utilities by fare@tunes.org,
 ;;;;; to be loaded in the *PACKAGE* that you wish to debug.
 ;;
 ;; We want debugging utilities in the _current_ package,
diff --git a/uiop/filesystem.lisp b/uiop/filesystem.lisp
index dd016626a29632647ae720e62456eb16409d1dbd..ff1beb92497a4023f516715e557f19cdda4de990 100644
--- a/uiop/filesystem.lisp
+++ b/uiop/filesystem.lisp
@@ -198,8 +198,8 @@ This function is used as a helper to DIRECTORY-FILES to avoid invalid entries wh
 Subdirectories should NOT be returned.
   PATTERN defaults to a pattern carefully chosen based on the implementation;
 override the default at your own risk.
-  DIRECTORY-FILES tries NOT to resolve symlinks if the implementation
-permits this."
+  DIRECTORY-FILES tries NOT to resolve symlinks if the implementation permits this,
+but the behavior in presence of symlinks is not portable. Use IOlib to handle such situations."
     (let ((dir (pathname directory)))
       (when (logical-pathname-p dir)
         ;; Because of the filtering we do below,
@@ -225,7 +225,8 @@ permits this."
                                        :version (make-pathname-component-logical (pathname-version f)))))))))
 
   (defun subdirectories (directory)
-    "Given a DIRECTORY pathname designator, return a list of the subdirectories under it."
+    "Given a DIRECTORY pathname designator, return a list of the subdirectories under it.
+The behavior in presence of symlinks is not portable. Use IOlib to handle such situations."
     (let* ((directory (ensure-directory-pathname directory))
            #-(or abcl cormanlisp genera xcl)
            (wild (merge-pathnames*
@@ -263,9 +264,12 @@ permits this."
                      :directory (append prefix (make-pathname-component-logical (last dir)))))))))))
 
   (defun collect-sub*directories (directory collectp recursep collector)
-    "Given a DIRECTORY, call-function the COLLECTOR function designator
-on the directory if COLLECTP returns true when CALL-FUNCTION'ed with the directory,
-and recurse each of its subdirectories on which the RECURSEP returns true when CALL-FUNCTION'ed with them."
+    "Given a DIRECTORY, when COLLECTP returns true when CALL-FUNCTION'ed with the directory,
+call-function the COLLECTOR function designator on the directory,
+and recurse each of its subdirectories on which the RECURSEP returns true when CALL-FUNCTION'ed with them.
+This function will thus let you traverse a filesystem hierarchy,
+superseding the functionality of CL-FAD:WALK-DIRECTORY.
+The behavior in presence of symlinks is not portable. Use IOlib to handle such situations."
     (when (call-function collectp directory)
       (call-function collector directory)
       (dolist (subdir (subdirectories directory))
diff --git a/uiop/os.lisp b/uiop/os.lisp
index 86ed3ba558b655b73b0f567d6deff79f4fb47ac7..3306ced5c0b01b6848878273f09c5a25e953a18d 100644
--- a/uiop/os.lisp
+++ b/uiop/os.lisp
@@ -271,19 +271,21 @@ suitable for use as a directory name to segregate Lisp FASLs, C dynamic librarie
   (defun chdir (x)
     "Change current directory, as per POSIX chdir(2), to a given pathname object"
     (if-let (x (pathname x))
-      (or #+abcl (java:jstatic "setProperty" "java.lang.System" "user.dir" (namestring x))
-          #+allegro (excl:chdir x)
-          #+clisp (ext:cd x)
-          #+clozure (setf (ccl:current-directory) x)
-          #+(or cmu scl) (unix:unix-chdir (ext:unix-namestring x))
-          #+cormanlisp (unless (zerop (win32::_chdir (namestring x)))
-                         (error "Could not set current directory to ~A" x))
-          #+ecl (ext:chdir x)
-          #+genera (setf *default-pathname-defaults* x)
-          #+lispworks (hcl:change-directory x)
-          #+mkcl (mk-ext:chdir x)
-          #+sbcl (progn (require :sb-posix) (symbol-call :sb-posix :chdir (sb-ext:native-namestring x)))
-          (error "chdir not supported on your implementation")))))
+      #+abcl (java:jstatic "setProperty" "java.lang.System" "user.dir" (namestring x))
+      #+allegro (excl:chdir x)
+      #+clisp (ext:cd x)
+      #+clozure (setf (ccl:current-directory) x)
+      #+(or cmu scl) (unix:unix-chdir (ext:unix-namestring x))
+      #+cormanlisp (unless (zerop (win32::_chdir (namestring x)))
+                     (error "Could not set current directory to ~A" x))
+      #+ecl (ext:chdir x)
+      #+gcl (system:chdir x)
+      #+genera (setf *default-pathname-defaults* x)
+      #+lispworks (hcl:change-directory x)
+      #+mkcl (mk-ext:chdir x)
+      #+sbcl (progn (require :sb-posix) (symbol-call :sb-posix :chdir (sb-ext:native-namestring x)))
+      #-(or abcl allegro clisp clozure cmu cormanlisp ecl gcl genera lispworks mkcl sbcl scl)
+      (error "chdir not supported on your implementation"))))
 
 
 ;;;; -----------------------------------------------------------------
diff --git a/uiop/package.lisp b/uiop/package.lisp
index 1d928a326571241a03d536ac5877333107b0f3a0..58d8e67aa6b33809a8deacc602f88aa4d91f0c3e 100644
--- a/uiop/package.lisp
+++ b/uiop/package.lisp
@@ -66,7 +66,7 @@ or when loading the package is optional."
   (defun shadowing-import* (symbol package-designator)
     (shadowing-import (or symbol (list symbol)) (find-package* package-designator)))
   (defun shadow* (name package-designator)
-    (shadow (string name) (find-package* package-designator)))
+    (shadow (list (string name)) (find-package* package-designator)))
   (defun make-symbol* (name)
     (etypecase name
       (string (make-symbol name))
diff --git a/uiop/pathname.lisp b/uiop/pathname.lisp
index 7d89b755f295cd874bfeb8449a0a8bd9f2aebe55..555b542d351eec585c8b27146ce4f79a656207b7 100644
--- a/uiop/pathname.lisp
+++ b/uiop/pathname.lisp
@@ -354,7 +354,7 @@ will be treated as part of the directory path.
 
 An empty string is thus read as meaning a pathname object with all fields nil.
 
-Note that : characters will NOT be interpreted as host specification.
+Note that colon characters #\: will NOT be interpreted as host specification.
 Absolute pathnames are only appropriate on Unix-style systems.
 
 The intention of this function is to support structured component names,
diff --git a/upgrade.lisp b/upgrade.lisp
index 82a077d9c956fb5152eef0f860c06b566baddeb5..4335b73c0dae3563009ec7435d19e92693832462 100644
--- a/upgrade.lisp
+++ b/upgrade.lisp
@@ -67,7 +67,7 @@ previously-loaded version of ASDF."
          ;; "3.4.5.67" would be a development version in the official branch, on top of 3.4.5.
          ;; "3.4.5.0.8" would be your eighth local modification of official release 3.4.5
          ;; "3.4.5.67.8" would be your eighth local modification of development version 3.4.5.67
-         (asdf-version "3.1.3.5")
+         (asdf-version "3.1.4")
          (existing-version (asdf-version)))
     (setf *asdf-version* asdf-version)
     (when (and existing-version (not (equal asdf-version existing-version)))
diff --git a/version.lisp-expr b/version.lisp-expr
index 22b558deb520b19d5db886838b42b27541510a40..1d9aaf8c63ab4909b748287de6cf4b224e717971 100644
--- a/version.lisp-expr
+++ b/version.lisp-expr
@@ -1,2 +1,2 @@
-"3.1.3.5"
+"3.1.4"