diff --git a/code/bsd-os.lisp b/code/bsd-os.lisp
index dd9eee4d5980a77c36f3e694f1740e7adf2d1e50..1b730980023451320d0b94e7a894969b975fa951 100644
--- a/code/bsd-os.lisp
+++ b/code/bsd-os.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/bsd-os.lisp,v 1.7 2004/07/25 19:32:37 pmai Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/bsd-os.lisp,v 1.8 2005/07/13 13:40:55 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -31,6 +31,11 @@
 		       #+Darwin :Darwin
 		       #-(or FreeBSD NetBSD OpenBSD Darwin) :bsd)
 
+#+freebsd4
+(register-lisp-feature :freebsd4)
+#+elf
+(register-lisp-feature :elf)
+
 (setq *software-type* #+OpenBSD "OpenBSD"
                       #+NetBSD "NetBSD"
                       #+FreeBSD "FreeBSD"
diff --git a/tools/create-target.sh b/tools/create-target.sh
index 5fc06f13b0c2af80139af4b7e06ea5a4f534c568..859698421dad5fca0b5570744bffc22586112a8b 100755
--- a/tools/create-target.sh
+++ b/tools/create-target.sh
@@ -117,6 +117,13 @@ case $LISP_VARIANT in
       esac
       sed "s;@@gcname@@;$gcname;" $SETENV/openbsd-features.lisp >> $TARGET/setenv.lisp
       ;;
+  *FreeBSD*)
+      case $LISP_VARIANT in
+        *_gencgc*) gcname=":gencgc" ;;
+	*) gcname=":cgc" ;;
+      esac
+      sed "s;@@gcname@@;$gcname;" $SETENV/freebsd-features.lisp >> $TARGET/setenv.lisp
+      ;;
   *solaris*)
       cat $SETENV/solaris-features.lisp >> $TARGET/setenv.lisp
       ;;
diff --git a/tools/setenv-scripts/freebsd-features.lisp b/tools/setenv-scripts/freebsd-features.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..6b35514ddeeef88be8d2f521b8d4f00ed11a9930
--- /dev/null
+++ b/tools/setenv-scripts/freebsd-features.lisp
@@ -0,0 +1,9 @@
+;; e.g. for FreeBSD on x86 you probably want:
+;;(pushnew :freebsd4 *features*)
+;;(pushnew :freebsd *features*)
+;;(pushnew :elf *features*)
+
+;; We can't really do this before adding #+freebsd5 reader
+;; conditionals to the source code at appropiate places
+;; (setf *features* (remove :freebsd4 *features*))
+;; (pushnew :freebsd5 *features*)