diff --git a/System/Time.hsc b/System/Time.hsc
--- a/System/Time.hsc
+++ b/System/Time.hsc
@@ -233,6 +233,11 @@
 -- -----------------------------------------------------------------------------
 -- | returns the current time in its internal representation.
 
+realToInteger :: Real a => a -> Integer
+realToInteger ct = round (realToFrac ct :: Double)
+  -- CTime, CClock, CUShort etc are in Real but not Fractional, 
+  -- so we must convert to Double before we can round it
+
 getClockTime :: IO ClockTime
 #ifdef __HUGS__
 getClockTime = do
@@ -241,7 +246,6 @@
 
 #elif HAVE_GETTIMEOFDAY
 getClockTime = do
-  let realToInteger = round . realToFrac :: Real a => a -> Integer
   allocaBytes (#const sizeof(struct timeval)) $ \ p_timeval -> do
     throwErrnoIfMinus1_ "getClockTime" $ gettimeofday p_timeval nullPtr
     sec  <- (#peek struct timeval,tv_sec)  p_timeval :: IO CTime
@@ -250,7 +254,6 @@
  
 #elif HAVE_FTIME
 getClockTime = do
-  let realToInteger = round . realToFrac :: Real a => a -> Integer
   allocaBytes (#const sizeof(struct timeb)) $ \ p_timeb -> do
   ftime p_timeb
   sec  <- (#peek struct timeb,time) p_timeb :: IO CTime
@@ -260,7 +263,6 @@
 #else /* use POSIX time() */
 getClockTime = do
     secs <- time nullPtr -- can't fail, according to POSIX
-    let realToInteger = round . realToFrac :: Real a => a -> Integer
     return (TOD (realToInteger secs) 0)
 
 #endif
@@ -385,7 +387,6 @@
 gmtoff x = do 
   dst <- (#peek struct tm,tm_isdst) x
   tz <- if dst then peek altzone else peek timezone
-  let realToInteger = round . realToFrac :: Real a => a -> Integer
   return (-fromIntegral (realToInteger tz))
 # else /* ! HAVE_DECL_ALTZONE */
 
@@ -567,8 +568,7 @@
         -- result.
         -- 
         gmtoffset <- gmtoff p_tm
-        let realToInteger = round . realToFrac :: Real a => a -> Integer
-	    res = realToInteger t - fromIntegral tz + fromIntegral gmtoffset
+        let res = realToInteger t - fromIntegral tz + fromIntegral gmtoffset
 	return (TOD res psec)
 #endif /* ! __HUGS__ */
 
@@ -731,14 +731,14 @@
 type CTm = () -- struct tm
 
 #if HAVE_LOCALTIME_R
-foreign import ccall unsafe "time.h localtime_r"
+foreign import ccall unsafe "HsTime.h __hscore_localtime_r"
     localtime_r :: Ptr CTime -> Ptr CTm -> IO (Ptr CTm)
 #else
 foreign import ccall unsafe "time.h localtime"
     localtime   :: Ptr CTime -> IO (Ptr CTm)
 #endif
 #if HAVE_GMTIME_R
-foreign import ccall unsafe "time.h gmtime_r"
+foreign import ccall unsafe "HsTime.h __hscore_gmtime_r"
     gmtime_r    :: Ptr CTime -> Ptr CTm -> IO (Ptr CTm)
 #else
 foreign import ccall unsafe "time.h gmtime"
@@ -750,7 +750,7 @@
 #if HAVE_GETTIMEOFDAY
 type CTimeVal = ()
 type CTimeZone = ()
-foreign import ccall unsafe "time.h gettimeofday"
+foreign import ccall unsafe "HsTime.h __hscore_gettimeofday"
     gettimeofday :: Ptr CTimeVal -> Ptr CTimeZone -> IO CInt
 #elif HAVE_FTIME
 type CTimeB = ()
diff --git a/cbits/timeUtils.c b/cbits/timeUtils.c
--- a/cbits/timeUtils.c
+++ b/cbits/timeUtils.c
@@ -6,6 +6,27 @@
  */
 #include "HsTime.h"
 
+#if HAVE_GETTIMEOFDAY
+int __hscore_gettimeofday(struct timeval *tp, void *tzp)
+{
+    return gettimeofday(tp, tzp);
+}
+#endif
+
+#if HAVE_GMTIME_R
+struct tm *__hscore_gmtime_r(const time_t *clock, struct tm *result)
+{
+    return gmtime_r(clock, result);
+}
+#endif
+
+#if HAVE_LOCALTIME_R
+struct tm *__hscore_localtime_r(const time_t *clock, struct tm *result)
+{
+    return localtime_r(clock, result);
+}
+#endif
+
 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) /* to the end */
 
 long *__hscore_timezone( void )
diff --git a/include/HsTime.h b/include/HsTime.h
--- a/include/HsTime.h
+++ b/include/HsTime.h
@@ -34,4 +34,16 @@
 extern long *__hscore_timezone( void );
 extern char **__hscore_tzname( void );
 
+#if HAVE_GETTIMEOFDAY
+extern int __hscore_gettimeofday(struct timeval *tp, void *tzp);
+#endif
+
+#if HAVE_GMTIME_R
+extern struct tm *__hscore_gmtime_r(const time_t *clock, struct tm *result);
+#endif
+
+#if HAVE_LOCALTIME_R
+extern struct tm *__hscore_localtime_r(const time_t *clock, struct tm *result);
+#endif
+
 #endif /* __TIMEUTILS_H__ */
diff --git a/old-time.cabal b/old-time.cabal
--- a/old-time.cabal
+++ b/old-time.cabal
@@ -1,24 +1,15 @@
 name:		old-time
-version:	1.0.0.2
+version:	1.0.0.3
 license:	BSD3
 license-file:	LICENSE
 maintainer:	libraries@haskell.org
+bug-reports: http://hackage.haskell.org/trac/ghc/newticket?component=libraries/old-time
 synopsis:	Time library
 category:	System
 description:
 	This package provides the old time library.
     For new code, the new time library is recommended.
 build-type: Configure
-exposed-modules:
-	System.Time
-c-sources:
-	cbits/timeUtils.c
-include-dirs: include
-includes:	HsTime.h
-install-includes:	HsTime.h HsTimeConfig.h
-extensions:	CPP, ForeignFunctionInterface
-build-depends: base, old-locale
-nhc98-options: -K2M
 extra-source-files:
         config.guess config.sub install-sh
         configure.ac configure
@@ -26,3 +17,21 @@
 extra-tmp-files:
         config.log config.status autom4te.cache
         include/HsTimeConfig.h
+Cabal-Version: >= 1.6
+
+Library
+    exposed-modules:
+        System.Time
+    c-sources:
+        cbits/timeUtils.c
+    include-dirs: include
+    includes:	HsTime.h
+    install-includes:	HsTime.h HsTimeConfig.h
+    extensions:	CPP, ForeignFunctionInterface
+    build-depends: base >= 3 && < 5, old-locale
+    nhc98-options: -K2M
+
+source-repository head
+    type:     darcs
+    location: http://darcs.haskell.org/packages/old-time/
+
