diff --git a/src/code/filesys.lisp b/src/code/filesys.lisp
index fe997a7c7a7bdde96d3504d2365893e1bbd69cfc..60f0afc36cce7c13e669349a7f4303ea6a8e0476 100644
--- a/src/code/filesys.lisp
+++ b/src/code/filesys.lisp
@@ -1125,7 +1125,7 @@ optionally keeping some of the most recent old versions."
       (let ((*ignore-wildcards* t))
 	(mapcar #'(lambda (name)
 		    (let ((name (if (and check-for-subdirs
-					 (eq (unix:unix-file-kind name)
+					 (eq (unix:unix-file-kind name (not follow-links))
 					     :directory))
 				    (concatenate 'string name "/")
 				    name)))
diff --git a/src/general-info/release-21b.txt b/src/general-info/release-21b.txt
index 92a2bb0108431cd5777b87286fb0bef7d2895ef4..985648c8c8dee5494ec5c8f4a59a53d7b6e869d1 100644
--- a/src/general-info/release-21b.txt
+++ b/src/general-info/release-21b.txt
@@ -1,6 +1,4 @@
-========================== C M U C L  21 a =============================
-
-[Work in progress]
+========================== C M U C L  21 b =============================
 
 The CMUCL project is pleased to announce the release of CMUCL 21b.
 This is a major release which contains numerous enhancements and
@@ -76,6 +74,9 @@ New in this release:
       clang).  (See ticket #12.)
     * Cleanups in handling floating-point exceptions.  See Tickets #15
       and #16.
+    * DIRECTORY with :FOLLOW-LINKS T (and :TRUENAME NIL) will follow
+      directory links.  Previously, the directories that were links
+      weren't followed.
 
   * Trac Tickets:
 
diff --git a/tests/issues.lisp b/tests/issues.lisp
index d709a71910c4cae2e5aeca42c6ac2e950dc1c1fb..6bd341344d5a089e64a5757a7b05f6b79b14d043 100644
--- a/tests/issues.lisp
+++ b/tests/issues.lisp
@@ -12,6 +12,12 @@
   (declare (ignore arg))
   form)
 
+(defparameter *test-path*
+  (merge-pathnames (make-pathname :name :unspecific :type :unspecific
+                                  :version :unspecific)
+                   *load-truename*)
+  "Directory for temporary test files.")
+
 (define-test issue.1.a
     (:tag :issues)
   (assert-equal
@@ -321,3 +327,23 @@
   (assert-error 'kernel:simple-program-error
 		(ext:run-program "cat" nil
 				 :before-execve t)))
+
+(define-test mr.15
+    (:tag :issues)
+  (let (directories files)
+    (dolist (entry (directory (merge-pathnames "resources/mr.15/*.*" *test-path*)
+                              :check-for-subdirs t
+                              :follow-links nil
+                              :truenamep nil))
+      (let ((filename (pathname-name entry))
+            (directory (first (last (pathname-directory entry)))))
+        (if filename
+            (push filename files)
+            (push directory directories))))
+    (assert (null (set-difference files
+                                  '("file" "link-to-dir"
+                                    "link-to-dir-in-dir" "link-to-file")
+                                  :test #'string-equal)))
+    (assert (null (set-difference directories
+                                  '(".dir" "dir")
+                                  :test #'string-equal)))))
diff --git a/tests/resources/issue-24.lisp b/tests/resources/issue-24.lisp
new file mode 100644
index 0000000000000000000000000000000000000000..397241c4e888cc5ca22aacded52768d5a5477354
--- /dev/null
+++ b/tests/resources/issue-24.lisp
@@ -0,0 +1,5 @@
+;; Test case from issue #24.
+(defun foo ()
+  (print "Hello world"))
+
+(compile 'foo)
diff --git a/tests/resources/mr.15/dir/file-in-dir b/tests/resources/mr.15/dir/file-in-dir
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/resources/mr.15/file b/tests/resources/mr.15/file
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/resources/mr.15/link-to-dir b/tests/resources/mr.15/link-to-dir
new file mode 120000
index 0000000000000000000000000000000000000000..87245193225f8ff56488ceab0dcd11467fe098d0
--- /dev/null
+++ b/tests/resources/mr.15/link-to-dir
@@ -0,0 +1 @@
+dir
\ No newline at end of file
diff --git a/tests/resources/mr.15/link-to-dir-in-dir b/tests/resources/mr.15/link-to-dir-in-dir
new file mode 120000
index 0000000000000000000000000000000000000000..bef86c03dc6250104131e2bcfffac214ef2a511d
--- /dev/null
+++ b/tests/resources/mr.15/link-to-dir-in-dir
@@ -0,0 +1 @@
+dir/dir-in-dir
\ No newline at end of file
diff --git a/tests/resources/mr.15/link-to-file b/tests/resources/mr.15/link-to-file
new file mode 120000
index 0000000000000000000000000000000000000000..1a010b1c0f081b2e8901d55307a15c29ff30af0e
--- /dev/null
+++ b/tests/resources/mr.15/link-to-file
@@ -0,0 +1 @@
+file
\ No newline at end of file