diff --git a/uiop/filesystem.lisp b/uiop/filesystem.lisp
index f7c3c38938d2bb5797338c24f510bd1527135af7..cf07757b4c29c8b7ed045487718ffc63791deaae 100644
--- a/uiop/filesystem.lisp
+++ b/uiop/filesystem.lisp
@@ -142,6 +142,9 @@ or the original (parsed) pathname if it is false (the default)."
 
   (defun directory-exists-p (x)
     "Is X the name of a directory that exists on the filesystem?"
+    #+allegro
+    (excl:probe-directory x)
+    #-allegro
     (let ((p (probe-file* x :truename t)))
       (and (directory-pathname-p p) p)))
 
@@ -187,8 +190,12 @@ This function is used as a helper to DIRECTORY-FILES to avoid invalid entries wh
 
 
   (defun directory-files (directory &optional (pattern *wild-file*))
-    "Return a list of the files in a directory according to the PATTERN,
-which is not very portable to override. Try not resolve symlinks if implementation allows."
+    "Return a list of the files in a directory according to the PATTERN.
+Subdirectories should NOT be returned.
+  PATTERN defaults to a pattern carefully chosen based on the implementation;
+override the default at your own risk.
+  DIRECTORY-FILES tries NOT to resolve symlinks if the implementation
+permits this."
     (let ((dir (pathname directory)))
       (when (logical-pathname-p dir)
         ;; Because of the filtering we do below,
@@ -204,13 +211,14 @@ which is not very portable to override. Try not resolve symlinks if implementati
                               #+clisp
                               (when (equal :wild (pathname-type pattern))
                                 (ignore-errors (directory* (make-pathname :type nil :defaults pat)))))))
-        (filter-logical-directory-results
-         directory entries
-         #'(lambda (f)
-             (make-pathname :defaults dir
-                            :name (make-pathname-component-logical (pathname-name f))
-                            :type (make-pathname-component-logical (pathname-type f))
-                            :version (make-pathname-component-logical (pathname-version f))))))))
+        (remove-if 'directory-exists-p
+                   (filter-logical-directory-results
+                    directory entries
+                    #'(lambda (f)
+                        (make-pathname :defaults dir
+                                       :name (make-pathname-component-logical (pathname-name f))
+                                       :type (make-pathname-component-logical (pathname-type f))
+                                       :version (make-pathname-component-logical (pathname-version f)))))))))
 
   (defun subdirectories (directory)
     "Given a DIRECTORY pathname designator, return a list of the subdirectories under it."