diff --git a/ghc/lib/std/PrelHandle.lhs b/ghc/lib/std/PrelHandle.lhs
index 337184f2e26e8317bc9b226d137fd1ec5991dc11..52d66821e42e39fd1ac5c640aa114ca435e31cd5 100644
--- a/ghc/lib/std/PrelHandle.lhs
+++ b/ghc/lib/std/PrelHandle.lhs
@@ -242,16 +242,7 @@ stdout = unsafePerformIO (do
 	    (bm, bf_size)  <- getBMode__ fo
 	    mkBuffer__ fo bf_size
 #endif
-	    hdl <- newHandle (Handle__ fo WriteHandle bm "stdout")
-	     -- when stdin and stdout are both connected to a terminal, ensure
-	     -- that anything buffered on stdout is flushed prior to reading from stdin.
-	     -- 
-	    hConnectTerms hdl stdin
-  	     -- when stderr and stdout are both connected to a terminal, ensure
-	     -- that anything buffered on stdout is flushed prior to writing to
-	     -- stderr.
-	    hConnectTo hdl stderr
-	    return hdl
+	    newHandle (Handle__ fo WriteHandle bm "stdout")
        _ -> do ioError <- constructError "stdout"
                newHandle (mkErrorHandle__ ioError)
   )
@@ -277,7 +268,12 @@ stdin = unsafePerformIO (do
 #endif
 	    (bm, bf_size) <- getBMode__ fo
 	    mkBuffer__ fo bf_size
-	    newHandle (Handle__ fo ReadHandle bm "stdin")
+	    hdl <- newHandle (Handle__ fo ReadHandle bm "stdin")
+	     -- when stdin and stdout are both connected to a terminal, ensure
+	     -- that anything buffered on stdout is flushed prior to reading from stdin.
+	     -- 
+	    hConnectTerms stdout hdl
+	    return hdl
        _ -> do ioError <- constructError "stdin"
                newHandle (mkErrorHandle__ ioError)
   )
@@ -302,7 +298,12 @@ stderr = unsafePerformIO (do
             fo <- makeForeignObj fo
 	    addForeignFinalizer fo (freeStdFileObject fo)
 #endif
-            newHandle (Handle__ fo WriteHandle NoBuffering "stderr")
+            hdl <- newHandle (Handle__ fo WriteHandle NoBuffering "stderr")
+	    -- when stderr and stdout are both connected to a terminal, ensure
+	    -- that anything buffered on stdout is flushed prior to writing to
+	    -- stderr.
+	    hConnectTo stdout hdl
+	    return hdl
 
        _ -> do ioError <- constructError "stderr"
                newHandle (mkErrorHandle__ ioError)