diff --git a/asdf.asd b/asdf.asd
index cacb0c8a4780ebbd3e5f2701e096c7210cbee5ff..c6694ef65e1b5ff1b25476d06565b39eaf82631c 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.1" ;; to be automatically updated by make bump-version
+  :version "3.1.3.2" ;; 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/contrib/fasl-op.lisp b/contrib/fasl-op.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..acbd5cdf9975f05bb2af0f82436e66f0e0b541da
--- /dev/null
+++ b/contrib/fasl-op.lisp
@@ -0,0 +1,31 @@
+(uiop:define-package :asdf/contrib/fasl-op
+  (:use :common-lisp :uiop
+        :asdf :asdf/component :asdf/operation :asdf/lisp-action :asdf/bundle))
+
+(in-package :asdf/contrib/fasl-op)
+
+;;; Backward compatibility with pre-3.1.2 names
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (defun frob-symbol (sym)
+    (loop :for dest :in '(:asdf/bundle :asdf/interface) :do
+      (uiop/package::ensure-import
+       (symbol-name sym) (find-package dest) (symbol-package sym)
+       (make-hash-table :test 'equal) (make-hash-table :test 'equal)))))
+
+(defmacro declare-ops (&rest ops)
+  `(progn
+     ,@(loop :for (compat-name current-name) :in ops :append
+             `((defclass ,compat-name (selfward-operation)
+                 ((selfward-operation :initform ',current-name :allocation :class)))
+               (defmethod output-files ((o ,compat-name) (c component))
+                 (output-files (find-operation o ',current-name) c))
+               (frob-symbol ',compat-name)))))
+
+(declare-ops
+ (fasl-op compile-bundle-op)
+ (load-fasl-op load-bundle-op)
+ (binary-op deliver-asd-op)
+ (monolithic-fasl-op monolithic-compile-bundle-op)
+ (monolithic-load-fasl-op monolithic-load-bundle-op)
+ (monolithic-binary-op monolithic-deliver-asd-op))
diff --git a/header.lisp b/header.lisp
index e4e298c5d3536965ab4f3b662f4dcc12a5ca9578..53e2e064f934c6cb68ee2b1a83c44c1a8c6efb71 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.1: Another System Definition Facility.
+;;; This is ASDF 3.1.3.2: Another System Definition Facility.
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome:
 ;;; please mail to <asdf-devel@common-lisp.net>.
diff --git a/uiop/os.lisp b/uiop/os.lisp
index 522f4a388e3684ed2b8be4a45ae2713db45854b2..86ed3ba558b655b73b0f567d6deff79f4fb47ac7 100644
--- a/uiop/os.lisp
+++ b/uiop/os.lisp
@@ -262,7 +262,7 @@ suitable for use as a directory name to segregate Lisp FASLs, C dynamic librarie
         #+ecl (ext:getcwd)
         #+gcl (let ((*default-pathname-defaults* #p"")) (truename #p""))
         #+genera *default-pathname-defaults* ;; on a Lisp OS, it *is* canonical!
-        #+lispworks (system:current-directory)
+        #+lispworks (hcl:get-working-directory)
         #+mkcl (mk-ext:getcwd)
         #+sbcl (sb-ext:parse-native-namestring (sb-unix:posix-getcwd/))
         #+xcl (extensions:current-directory)
diff --git a/uiop/stream.lisp b/uiop/stream.lisp
index 7103dbdf800c33e88ad65c26939363ca80748db7..db7ae94e892f6b62b23fa5dea75dff9a8b268a4e 100644
--- a/uiop/stream.lisp
+++ b/uiop/stream.lisp
@@ -12,7 +12,7 @@
    #:encoding-external-format #:*encoding-external-format-hook* #:default-encoding-external-format
    #:*default-encoding* #:*utf-8-external-format*
    #:with-safe-io-syntax #:call-with-safe-io-syntax #:safe-read-from-string
-   #:with-output #:output-string #:with-input
+   #:with-output #:output-string #:with-input #:input-string
    #:with-input-file #:call-with-input-file #:with-output-file #:call-with-output-file
    #:null-device-pathname #:call-with-null-input #:with-null-input
    #:call-with-null-output #:with-null-output
@@ -263,8 +263,14 @@ Otherwise, signal an error."
   (defmacro with-input ((input-var &optional (value input-var)) &body body)
     "Bind INPUT-VAR to an input stream, coercing VALUE (default: previous binding of INPUT-VAR)
 as per CALL-WITH-INPUT, and evaluate BODY within the scope of this binding."
-    `(call-with-input ,value #'(lambda (,input-var) ,@body))))
-
+    `(call-with-input ,value #'(lambda (,input-var) ,@body)))
+
+  (defun input-string (&optional input)
+    "If the desired INPUT is a string, return that string; otherwise slurp the INPUT into a string
+and return that"
+    (if (stringp input)
+        input
+        (with-input (input) (funcall 'slurp-stream-string input)))))
 
 ;;; Null device
 (with-upgradability ()
diff --git a/upgrade.lisp b/upgrade.lisp
index f5b97a524931d8c3339dd1fe9f1e6f2d90d28604..69499d02cca0af1d38e929aaf700c87f7e341f05 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.1")
+         (asdf-version "3.1.3.2")
          (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 f5ed7d57659935b85b74b99c5fbbd3681548fbf1..0fff27f200244cc0ccd580c47b8ceffe12845396 100644
--- a/version.lisp-expr
+++ b/version.lisp-expr
@@ -1,2 +1,2 @@
-"3.1.3.1"
+"3.1.3.2"