diff --git a/ghc/compiler/simplCore/SimplCore.lhs b/ghc/compiler/simplCore/SimplCore.lhs
index 4d2d4fda98f77f1a66a4cd6202bce145761cdede..11b14f10a81b95aee50f996dba4831b728d1d9db 100644
--- a/ghc/compiler/simplCore/SimplCore.lhs
+++ b/ghc/compiler/simplCore/SimplCore.lhs
@@ -26,7 +26,7 @@ import Rules		( RuleBase, ProtoCoreRule(..), pprProtoCoreRule, prepareLocalRuleB
 import CoreUnfold
 import PprCore		( pprCoreBindings )
 import OccurAnal	( occurAnalyseBinds )
-import CoreUtils	( exprIsTrivial, etaReduceExpr )
+import CoreUtils	( exprIsTrivial, etaReduceExpr, coreBindsSize )
 import Simplify		( simplTopBinds, simplExpr )
 import SimplUtils	( findDefault, simplBinders )
 import SimplMonad
@@ -283,6 +283,9 @@ simplifyPgm (imported_rule_ids, rule_lhs_fvs)
 		         | otherwise		   = empty
 
     iteration us iteration_no counts binds
+      -- Try and force thunks off the binds; significantly reduces
+      -- space usage, especially with -O.  JRS, 000620.
+      | let sz = coreBindsSize binds in sz == sz
       = do {
 		-- Occurrence analysis
 	   let { tagged_binds = _scc_ "OccAnal" occurAnalyseBinds binds } ;