diff --git a/System/FilePath.hs b/System/FilePath.hs
--- a/System/FilePath.hs
+++ b/System/FilePath.hs
@@ -1,4 +1,7 @@
 {-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ >= 701
+{-# LANGUAGE Safe #-}
+#endif
 {- |
 Module      :  System.FilePath
 Copyright   :  (c) Neil Mitchell 2005-2007
@@ -23,6 +26,4 @@
 module System.FilePath(module System.FilePath.Posix) where
 import System.FilePath.Posix
 #endif
-
-
 
diff --git a/System/FilePath/Internal.hs b/System/FilePath/Internal.hs
--- a/System/FilePath/Internal.hs
+++ b/System/FilePath/Internal.hs
@@ -1,3 +1,7 @@
+{-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ >= 701
+{-# LANGUAGE Safe #-}
+#endif
 --
 -- Some short examples:
 --
@@ -697,13 +701,17 @@
 -- >          normalise "." == "."
 -- > Posix:   normalise "./" == "./"
 -- > Posix:   normalise "./." == "./"
+-- > Posix:   normalise "/" == "/"
 -- > Posix:   normalise "bob/fred/." == "bob/fred/"
 normalise :: FilePath -> FilePath
-normalise path = joinDrive (normaliseDrive drv) (f pth)
+normalise path = joinDrive' (normaliseDrive drv) (f pth)
               ++ [pathSeparator | isDirPath pth]
     where
         (drv,pth) = splitDrive path
 
+        joinDrive' "" "" = "."
+        joinDrive' d p = joinDrive d p
+
         isDirPath xs = lastSep xs
             || not (null xs) && last xs == '.' && lastSep (init xs)
         lastSep xs = not (null xs) && isPathSeparator (last xs)
@@ -717,12 +725,7 @@
         propSep (x:xs) = x : propSep xs
         propSep [] = []
 
-        dropDots xs | all (== ".") xs = ["."]
-        dropDots xs = dropDots' [] xs
-
-        dropDots' acc (".":xs) = dropDots' acc xs
-        dropDots' acc (x:xs) = dropDots' (x:acc) xs
-        dropDots' acc [] = reverse acc
+        dropDots = filter ("." /=)
 
 normaliseDrive :: FilePath -> FilePath
 normaliseDrive drive | isPosix = drive
@@ -810,12 +813,14 @@
 isRelative = isRelativeDrive . takeDrive
 
 
--- > isRelativeDrive "" == True
--- > Windows: isRelativeDrive "c:\\" == False
--- > Windows: isRelativeDrive "c:/" == False
--- > Windows: isRelativeDrive "c:" == True
--- > Windows: isRelativeDrive "\\\\foo" == False
--- > Posix:   isRelativeDrive "/" == False
+-- Disable these tests for now, as we want to be able to run the
+-- testsuite without doing a special TESTING compilation
+-- -- > isRelativeDrive "" == True
+-- -- > Windows: isRelativeDrive "c:\\" == False
+-- -- > Windows: isRelativeDrive "c:/" == False
+-- -- > Windows: isRelativeDrive "c:" == True
+-- -- > Windows: isRelativeDrive "\\\\foo" == False
+-- -- > Posix:   isRelativeDrive "/" == False
 isRelativeDrive :: String -> Bool
 isRelativeDrive x = null x ||
     maybe False (not . isPathSeparator . last . fst) (readDriveLetter x)
diff --git a/System/FilePath/Posix.hs b/System/FilePath/Posix.hs
--- a/System/FilePath/Posix.hs
+++ b/System/FilePath/Posix.hs
@@ -1,4 +1,7 @@
 {-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ >= 701
+{-# LANGUAGE Safe #-}
+#endif
 #define MODULE_NAME     Posix
 #define IS_WINDOWS      False
 
diff --git a/System/FilePath/Windows.hs b/System/FilePath/Windows.hs
--- a/System/FilePath/Windows.hs
+++ b/System/FilePath/Windows.hs
@@ -1,4 +1,7 @@
 {-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ >= 701
+{-# LANGUAGE Safe #-}
+#endif
 #define MODULE_NAME     Windows
 #define IS_WINDOWS      True
 
diff --git a/filepath.cabal b/filepath.cabal
--- a/filepath.cabal
+++ b/filepath.cabal
@@ -1,5 +1,5 @@
 Name:           filepath
-Version:        1.2.0.1
+Version:        1.3.0.0
 License:        BSD3
 license-file:   LICENSE
 Author:         Neil Mitchell
