diff --git a/compiler/disassem.lisp b/compiler/disassem.lisp
index 0f05164e2c611a17428b48b11ddec050befb000e..e72d63d4e927bdbc7c7147bf956e765f91dd98ba 100644
--- a/compiler/disassem.lisp
+++ b/compiler/disassem.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/compiler/disassem.lisp,v 1.51 2006/01/27 20:55:19 rtoy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/disassem.lisp,v 1.52 2006/05/09 13:12:23 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -3050,8 +3050,18 @@
 			     (not first-block-seen-p))
 			(setf first-block-seen-p t))
 		       ((eq kind :external)
-			(when first-block-seen-p
-			  (return)))
+			(let* ((name (c::compiled-debug-function-name fmap-entry))
+			       (flet-p (and (list name)
+					    (member (car name) '(flet labels)))))
+			  ;; Don't return from loop if this external
+			  ;; entry is an flet or labels entry.  We
+			  ;; want to continue the disassembly, if
+			  ;; enabled.
+			  (when (and first-block-seen-p
+				     (if *disassemble-flets*
+					 (not flet-p)
+					 t))
+			    (return))))
 		       ((eq kind nil)
 			;; FIXME: Why do we return when we have a nil
 			;; block and have already seen a nil block?