diff --git a/ghc/lib/std/Directory.lhs b/ghc/lib/std/Directory.lhs
index 6ca00295fd4fd19f3314e95a96182a5fb4aed1ac..ab9010e2682de848cc9b0d6a7e533f84b827e171 100644
--- a/ghc/lib/std/Directory.lhs
+++ b/ghc/lib/std/Directory.lhs
@@ -56,7 +56,7 @@ module Directory
 
 import Prelude		-- Just to get it in the dependencies
 
-import PrelGHC		( RealWorld, int2Word#, or#, and# )
+import PrelGHC		( RealWorld, or#, and# )
 import PrelByteArr	( ByteArray, MutableByteArray,
 			  newWordArray, readWordArray, newCharArray,
 			  unsafeFreezeByteArray
@@ -66,7 +66,7 @@ import PrelIOBase	( stToIO,
 			  constructErrorAndFail, constructErrorAndFailWithInfo,
 			  IOError(IOError), IOErrorType(SystemError) )
 import Time             ( ClockTime(..) )
-import PrelAddr		( Addr, nullAddr, Word(..), wordToInt )
+import PrelAddr		( Addr, nullAddr, Word(..), wordToInt, intToWord )
 #endif
 
 \end{code}
@@ -545,8 +545,7 @@ emptyFileMode     = primIntToWord 0
 unionFileMode     = primOrWord
 intersectFileMode = primAndWord
 #else
---ToDo: tidy up.
-emptyFileMode     = W# (int2Word# 0#)
+emptyFileMode     = intToWord 0
 unionFileMode     = orWord
 intersectFileMode = andWord
 #endif
diff --git a/ghc/lib/std/PrelAddr.lhs b/ghc/lib/std/PrelAddr.lhs
index 1f61cec4ad0e1001523c4c67a854937ede8234ec..3b9f77d95d5bdce741cd496c069c48ec257fbcee 100644
--- a/ghc/lib/std/PrelAddr.lhs
+++ b/ghc/lib/std/PrelAddr.lhs
@@ -15,6 +15,7 @@ module PrelAddr (
 
 	, Word(..)
 	, wordToInt
+	, intToWord
 
 	, Word64(..)
 	, Int64(..)
@@ -43,6 +44,9 @@ instance CReturnable Word
 wordToInt :: Word -> Int
 wordToInt (W# w#) = I# (word2Int# w#)
 
+intToWord :: Int -> Word
+intToWord (I# i#) = W# (int2Word# i#)
+
 #if WORD_SIZE_IN_BYTES == 8
 data Word64 = W64# Word#
 data Int64  = I64# Int#