diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+Version 0.6.3.5 released 16 Nov 2019
+
+* Compatibility with Diff-0.4.0 (Galen Huntington).
+
 Version 0.6.3.4 released 21 Dec 2018
 
 * Document git version requirement (#4).
diff --git a/Data/FileStore/DarcsXml.hs b/Data/FileStore/DarcsXml.hs
--- a/Data/FileStore/DarcsXml.hs
+++ b/Data/FileStore/DarcsXml.hs
@@ -2,7 +2,7 @@
 
 import Data.Maybe (catMaybes, fromMaybe)
 import Data.Char (isSpace)
-import Data.Time.Format (parseTime)
+import Data.Time.Format (parseTimeM)
 import Data.FileStore.Compat.Locale (defaultTimeLocale)
 import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
 import Text.XML.Light
@@ -29,7 +29,7 @@
         -- This at least makes it easy for someone to filter out bad dates, as obviously no real DVCSs
         -- were in operation then. :)
         -- date :: Element -> UTCTime
-        date = fromMaybe (posixSecondsToUTCTime $ realToFrac (0::Int)) . parseTime defaultTimeLocale "%c" . dateXML
+        date = fromMaybe (posixSecondsToUTCTime $ realToFrac (0::Int)) . parseTimeM True defaultTimeLocale "%c" . dateXML
 
 authorXML, dateXML, descriptionXML, emailXML, hashXML :: Element -> String
 authorXML = snd . splitEmailAuthor . fromMaybe "" . findAttr (QName "author" Nothing Nothing)
diff --git a/Data/FileStore/Generic.hs b/Data/FileStore/Generic.hs
--- a/Data/FileStore/Generic.hs
+++ b/Data/FileStore/Generic.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE ScopedTypeVariables, CPP #-}
 {- |
    Module      : Data.FileStore.Generic
    Copyright   : Copyright (C) 2009 John MacFarlane, Gwern Branwen, Sebastiaan Visser
@@ -14,7 +14,7 @@
 module Data.FileStore.Generic
            ( modify
            , create
-           , Diff(..)
+           , Diff
            , diff
            , searchRevisions
            , smartRetrieve
@@ -27,7 +27,11 @@
 import Control.Exception as E
 import Data.FileStore.Utils
 import Data.List (isInfixOf)
-import Data.Algorithm.Diff (Diff(..), getGroupedDiff)
+import Data.Algorithm.Diff (Diff
+#if MIN_VERSION_Diff(0,4,0)
+  , PolyDiff
+#endif
+  (..), getGroupedDiff)
 import System.FilePath ((</>))
 
 handleUnknownError :: E.SomeException -> IO a
diff --git a/Data/FileStore/Mercurial.hs b/Data/FileStore/Mercurial.hs
--- a/Data/FileStore/Mercurial.hs
+++ b/Data/FileStore/Mercurial.hs
@@ -30,7 +30,7 @@
 import System.Directory (createDirectoryIfMissing, doesDirectoryExist)
 import Control.Exception (throwIO)
 import Data.FileStore.Compat.Locale (defaultTimeLocale)
-import Data.Time (parseTime, formatTime)
+import Data.Time (parseTimeM, formatTime)
 
 -- | Return a filestore implemented using the mercurial distributed revision control system
 -- (<http://mercurial.selenic.com/>).
@@ -251,7 +251,7 @@
   let stripTrailingNewlines = reverse . dropWhile (=='\n') . reverse
   return Revision {
               revId          = rev
-            , revDateTime    = fromJust (parseTime defaultTimeLocale "%a, %d %b %Y %H:%M:%S %z" date :: Maybe UTCTime)
+            , revDateTime    = fromJust (parseTimeM True defaultTimeLocale "%a, %d %b %Y %H:%M:%S %z" date :: Maybe UTCTime)
             , revAuthor      = Author { authorName = author, authorEmail = email }
             , revDescription = stripTrailingNewlines subject
             , revChanges     = file_add ++ file_mod ++ file_del 
diff --git a/filestore.cabal b/filestore.cabal
--- a/filestore.cabal
+++ b/filestore.cabal
@@ -1,5 +1,5 @@
 Name:                filestore
-Version:             0.6.3.4
+Version:             0.6.3.5
 Cabal-Version:       >= 1.10
 Build-type:          Simple
 Synopsis:            Interface for versioning file stores.
@@ -36,10 +36,10 @@
                          directory >= 1.0 && < 1.4,
                          parsec >= 2 && < 3.2,
                          process >= 1.0 && < 1.7,
-                         time >= 1.1 && < 1.10,
+                         time >= 1.5 && < 1.10,
                          xml >= 1.3 && < 1.4,
                          split >= 0.1 && < 0.3,
-                         Diff >= 0.2 && < 0.4,
+                         Diff >= 0.2 && < 0.5,
                          old-locale >= 1.0 && < 1.1
 
     Exposed-modules:     Data.FileStore, Data.FileStore.Types, Data.FileStore.Git, Data.FileStore.Darcs, Data.FileStore.Mercurial,
@@ -68,7 +68,7 @@
                     HUnit >= 1.2 && < 1.7,
                     mtl,
                     time,
-                    Diff >= 0.2 && < 0.4,
+                    Diff >= 0.2 && < 0.5,
                     filepath >= 1.1 && < 1.5,
                     directory >= 1.1 && < 1.4,
                     filestore
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 import Data.FileStore
 import Data.List (sort, isInfixOf)
 import Test.HUnit
@@ -8,7 +9,11 @@
 import Data.Time
 import Data.Maybe (mapMaybe)
 import System.FilePath
-import Data.Algorithm.Diff (Diff(..))
+import Data.Algorithm.Diff (Diff
+#if MIN_VERSION_Diff(0,4,0)
+  , PolyDiff
+#endif
+  (..))
 import System.Exit
 import System.Environment (setEnv)
 
