diff --git a/compiler/main.lisp b/compiler/main.lisp
index d5c20e507a4ca26a9241a865d41110a6bb7224d3..e216b630189d6ea839b616542b3e3fa0bb38bb6d 100644
--- a/compiler/main.lisp
+++ b/compiler/main.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/main.lisp,v 1.149 2010/02/15 16:34:42 rtoy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/main.lisp,v 1.150 2010/03/14 14:51:21 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -1952,10 +1952,20 @@ in the user USER-INFO slot of STREAM-SOURCE-LOCATIONs.")
 	     ;;   If the definition is already a compiled function,
 	     ;;   compile either produces that function itself (i.e.,
 	     ;;   is an identity operation) or an equivalent function.
+	     ;;
+	     ;; But if the function lambda expression is available,
+	     ;; and if the expression is defined in a null lexical
+	     ;; environment, recompile from sources.  (This was the
+	     ;; old behavior, which is quite useful.)
 	     (form (etypecase definition
 		     ((or cons eval:interpreted-function)
 		      `#',(get-lambda-to-compile definition))
-		     (function `',definition)))
+		     (function
+		      (multiple-value-bind (exp lexenv)
+			  (function-lambda-expression definition)
+			(if (and exp (not lexenv))
+			    `#',exp
+			    `',definition)))))
 	     (*source-info* (make-lisp-source-info form))
 	     (*top-level-lambdas* ())
 	     (*converting-for-interpreter* nil)