diff --git a/asdf.asd b/asdf.asd
index af46e7a3fd5dd792a8a110d17b51cca7a65cf46b..f30646430fb3de126db2c25f8195af4e92826911 100644
--- a/asdf.asd
+++ b/asdf.asd
@@ -74,7 +74,7 @@
   :licence "MIT"
   :description "Another System Definition Facility"
   :long-description "ASDF builds Common Lisp software organized into defined systems."
-  :version "2.32.23" ;; to be automatically updated by make bump-version
+  :version "2.32.24" ;; to be automatically updated by make bump-version
   :depends-on ()
   #+asdf3 :encoding #+asdf3 :utf-8
   ;; For most purposes, asdf itself specially counts as a builtin system.
diff --git a/header.lisp b/header.lisp
index dd23a27eb8e00fb40a6cb0c8f95731dbb89f30a7..9c6c4755bf39f4833cae4befc5e14df6c988ddf6 100644
--- a/header.lisp
+++ b/header.lisp
@@ -1,5 +1,5 @@
 ;;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp -*-
-;;; This is ASDF 2.32.23: Another System Definition Facility.
+;;; This is ASDF 2.32.24: Another System Definition Facility.
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome:
 ;;; please mail to <asdf-devel@common-lisp.net>.
diff --git a/test/test-utilities.script b/test/test-utilities.script
index f1988a4b6492fcd4ab1e691a104bde8f4c742a95..c581576beb251e9f781d4ebdcafd89e6857eabc0 100644
--- a/test/test-utilities.script
+++ b/test/test-utilities.script
@@ -197,3 +197,26 @@
 (assert (not (directory-exists-p (subpathname *build-directory* "deleteme/a/b/d/"))))
 (assert (not (probe-file* (subpathname *build-directory* "deleteme/a/1.x"))))
 (assert (not (probe-file* (subpathname *build-directory* "deleteme/a/b/2"))))
+
+#+(and sbcl sb-unicode) (assert +non-base-chars-exist-p+)
+#+(or clozure (and sbcl (not sb-unicode))) (assert (not +non-base-chars-exist-p+))
+
+(assert (base-string-p (make-string 10 :element-type 'base-char)))
+(assert-equal "abcd" (strcat "a" NIL "bc" "d"))
+(assert-equal "abcd" (reduce/strcat '("a" NIL "bc" "d")))
+
+#-non-base-chars-exist-p
+(progn
+  (assert (base-string-p (make-string 10 :element-type 'character))))
+
+(defun basify (s) (coerce s 'base-string))
+
+#+non-base-chars-exist-p
+(progn
+  (assert (not (base-string-p (make-string 10 :element-type 'character))))
+  (assert (not (base-string-p "abc")))
+  (assert (base-string-p (basify "abc")))
+  (assert (not (base-string-p (strcat "a" NIL "b" "cd"))))
+  (assert (base-string-p (reduce/strcat (mapcar 'basify '("a" "b" NIL "cd")))))
+  (assert (base-string-p (strcat (basify "ab") (basify "cd"))))
+  (assert (not (base-string-p (strcat (basify "ab") "cd")))))
diff --git a/uiop/utility.lisp b/uiop/utility.lisp
index c007e0d2b137cb65950128c025e291c253b07370..433c89bfdb822f169032d04c1b2a9b05db6e81fb 100644
--- a/uiop/utility.lisp
+++ b/uiop/utility.lisp
@@ -187,21 +187,22 @@ Returns two values: \(A B C\) and \(1 2 3\)."
 
 ;;; Characters
 (with-upgradability ()
-  (defconstant +non-base-chars-exist-p+ (not (subtypep 'character 'base-char))))
+  (defconstant +non-base-chars-exist-p+ (not (subtypep 'character 'base-char)))
+  (when +non-base-chars-exist-p+ (pushnew :non-base-chars-exist-p *features*)))
 
 
 ;;; Strings
 (with-upgradability ()
   (defun base-string-p (string)
     (declare (ignorable string))
-    #.(or +non-base-chars-exist-p+ '(eq 'base-char (array-element-type string))))
+    (and #+non-base-chars-exist-p (eq 'base-char (array-element-type string))))
 
   (defun strings-common-element-type (strings)
     (declare (ignorable strings))
-    #.(if +non-base-chars-exist-p+
-          '(if (loop :for s :in strings :always (or (null s) (base-string-p s)))
-            'base-char 'character)
-          ''character))
+    #-non-base-chars-exist-p 'character
+    #+non-base-chars-exist-p
+    (if (loop :for s :in strings :always (or (null s) (base-string-p s)))
+        'base-char 'character))
 
   (defun reduce/strcat (strings &key key start end)
     "Reduce a list as if by STRCAT, accepting KEY START and END keywords like REDUCE"
diff --git a/upgrade.lisp b/upgrade.lisp
index e00bed735b21a0b1490914adc2c57c640a30ed39..bccbdfd67ca54e8dbfc00a1ecf5d45ec6242094c 100644
--- a/upgrade.lisp
+++ b/upgrade.lisp
@@ -52,7 +52,7 @@ You can compare this string with e.g.: (ASDF:VERSION-SATISFIES (ASDF:ASDF-VERSIO
          ;; "3.4.5.67" would be a development version in the official upstream 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 "2.32.23")
+         (asdf-version "2.32.24")
          (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 ba1e0a5dae391a46fbc885c2c8f390127f0d0ccd..b5719bf3818a1ad8c3901da8712e011cc452a56f 100644
--- a/version.lisp-expr
+++ b/version.lisp-expr
@@ -1 +1 @@
-"2.32.23"
+"2.32.24"