diff --git a/bin/build.sh b/bin/build.sh
index 0ac13c8f0cc4a717a8f216329eb047b8f6ce9f0f..f451ac110d11baae0bfe8ac61850d160fedb408f 100755
--- a/bin/build.sh
+++ b/bin/build.sh
@@ -39,7 +39,7 @@ ENABLE2="yes"
 ENABLE3="yes"
 ENABLE4="yes"
 
-version=20c
+version=20d
 SRCDIR=src
 BINDIR=bin
 TOOLDIR=$BINDIR
diff --git a/src/bootfiles/20d/boot-2012-12-1.lisp b/src/bootfiles/20d/boot-2012-12-1.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..58dc3161baf1dccc5ab13aeba13773d708d90849
--- /dev/null
+++ b/src/bootfiles/20d/boot-2012-12-1.lisp
@@ -0,0 +1,6 @@
+;; Add :alien-callback to *features* to build callback support for
+;; platforms that support alien callbacks.
+
+#+(or x86 sparc ppc)
+(pushnew :alien-callback *features*)
+
diff --git a/src/code/lispinit.lisp b/src/code/lispinit.lisp
index f5548b23de547d2528041846786d885fc8ad47d6..81a6e20a39563b376d5463fe8bc1d571b441fcd7 100644
--- a/src/code/lispinit.lisp
+++ b/src/code/lispinit.lisp
@@ -39,12 +39,16 @@
 #+stack-checking
 (sys:register-lisp-runtime-feature :stack-checking)
 
-#+heap-overflow-check
+;; Currently, heap-overflow-check depends on gencgc.
+#+(and heap-overflow-check gencgc)
 (sys:register-lisp-runtime-feature :heap-overflow-check)
 
 #+double-double
 (sys:register-lisp-feature :double-double)
 
+#+alien-callback
+(sys:register-lisp-feature :alien-callback)
+
 ;;; Make the error system enable interrupts.
 
 (defconstant most-positive-fixnum #.vm:target-most-positive-fixnum
diff --git a/src/tools/comcom.lisp b/src/tools/comcom.lisp
index 0953dc07d83a261bd226cc4973d10a556bf1709e..2205e11f08e4c3c01ed93d359a0986f90596e99c 100644
--- a/src/tools/comcom.lisp
+++ b/src/tools/comcom.lisp
@@ -197,7 +197,8 @@
 	    (vmdir "target:compiler/sse2-c-call")
 	    (vmdir "target:compiler/x87-c-call"))
 	:byte-compile *byte-compile*))
-(comf (vmdir "target:compiler/c-callback"))
+(when (c:target-featurep :alien-callback)
+  (comf (vmdir "target:compiler/c-callback")))
 (comf (vmdir "target:compiler/cell"))
 (comf (vmdir "target:compiler/values") :byte-compile *byte-compile*)
 (comf (vmdir "target:compiler/alloc"))
diff --git a/src/tools/worldcom.lisp b/src/tools/worldcom.lisp
index 9a74818bd6f8d2297af9d4244edaf6ce651d784d..f8ac65ac06ad3b7d00d20ee778af33997a4d7fcd 100644
--- a/src/tools/worldcom.lisp
+++ b/src/tools/worldcom.lisp
@@ -138,7 +138,8 @@
 (setf (fdefinition 'lisp::%deftype) *original-%deftype*)
 
 (comf "target:code/alieneval")
-(comf "target:code/alien-callback")
+(when (c:target-featurep :alien-callback)
+  (comf "target:code/alien-callback"))
 (comf "target:code/c-call")
 (comf "target:code/sap")