diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+2018-08-11 v0.5.7.0
+	* Include support for GHC 8.6.1 beta 1
 2018-07-11 v0.5.7.0
 	* Include support for GHC 8.6.1 alpha 1
 2018-03-11 v0.5.6.1
diff --git a/ghc-exactprint.cabal b/ghc-exactprint.cabal
--- a/ghc-exactprint.cabal
+++ b/ghc-exactprint.cabal
@@ -1,5 +1,5 @@
 name:                ghc-exactprint
-version:             0.5.7.0
+version:             0.5.7.1
 synopsis:            ExactPrint for GHC
 description:         Using the API Annotations available from GHC 7.10.2, this
                      library provides a means to round trip any code that can
@@ -172,6 +172,8 @@
   main-is: Roundtrip.hs
   hs-source-dirs: tests
   other-modules: Test.Common
+                 Test.CommonUtils
+                 Test.Consistency
   default-language:    Haskell2010
   if impl (ghc >= 7.10.2) && flag (roundtrip)
     build-depends:
diff --git a/src/Language/Haskell/GHC/ExactPrint/Transform.hs b/src/Language/Haskell/GHC/ExactPrint/Transform.hs
--- a/src/Language/Haskell/GHC/ExactPrint/Transform.hs
+++ b/src/Language/Haskell/GHC/ExactPrint/Transform.hs
@@ -92,6 +92,9 @@
 import Language.Haskell.GHC.ExactPrint.Types
 import Language.Haskell.GHC.ExactPrint.Utils
 
+#if __GLASGOW_HASKELL__ > 804
+import Control.Monad.Fail
+#endif
 import Control.Monad.RWS
 
 
@@ -108,7 +111,6 @@
 import qualified Data.Map as Map
 
 import Data.Functor.Identity
--- import Control.Monad.Identity
 import Control.Monad.State
 import Control.Monad.Writer
 
@@ -128,9 +130,15 @@
                          ,MonadWriter [String]
                          ,MonadState (Anns,Int)
                          ,MonadTrans
+#if __GLASGOW_HASKELL__ > 804
+                         ,MonadFail
+#endif
                          )
 
-
+#if __GLASGOW_HASKELL__ > 804
+instance MonadFail Identity where
+  fail x = Control.Monad.Fail.fail x
+#endif
 
 -- | Run a transformation in the 'Transform' monad, returning the updated
 -- annotations and any logging generated via 'logTr'
diff --git a/tests/Test/CommonUtils.hs b/tests/Test/CommonUtils.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test/CommonUtils.hs
@@ -0,0 +1,130 @@
+module Test.CommonUtils
+  (
+    findSrcFiles
+  , readFileGhc
+
+  -- * File paths and directories
+  , hackageWorkDir
+  , workDir
+  , configDir
+  , failuresDir
+  , failuresHtmlDir
+  , cppFile
+  , parseFailFile
+  , processed
+  , processedFailFile
+  , logFile
+  , origFailuresFile
+  , badpackagesFile
+  , blackListed
+  , knownFailuresFile
+  , failuresHtmlFile
+  ) where
+
+import Data.List hiding (find)
+import System.FilePath
+import System.FilePath.Find
+import qualified StringBuffer as GHC
+
+-- ---------------------------------------------------------------------
+
+-- | Round trip working dir holding current hackage contents, can be deleted
+hackageWorkDir :: FilePath
+hackageWorkDir = "./hackage-roundtrip-work"
+
+-- ---------------------------------------------------------------------
+
+-- | Round trip working dir, can be deleted
+workDir :: FilePath
+workDir = "./roundtrip-work"
+
+-- | Round trip configuration dir, keept under version control
+configDir :: FilePath
+configDir = "./roundtrip-config"
+
+-- |Directory where results of failing tests are stored for later analysis
+failuresDir :: FilePath
+failuresDir = workDir </> "failures"
+
+-- |Directory where results of failing tests are provided in html format
+failuresHtmlDir :: FilePath
+failuresHtmlDir = workDir </> "html"
+
+-- |Generated:files known to fail due to CPP parse failures, caused by an Exception
+cppFile :: FilePath
+cppFile = workDir </> "cpp.txt"
+
+-- |Generated:files returning ParseFail status
+parseFailFile :: FilePath
+parseFailFile = workDir </> "pfail.txt"
+
+-- |Generated:files successfully processed
+processed :: FilePath
+processed = workDir </> "processed.txt"
+
+-- |Generated:files which failed comparison
+processedFailFile :: FilePath
+processedFailFile = workDir </> "failed.txt"
+
+-- |log of current file being processed, for knowing what to blacklist
+logFile :: FilePath
+logFile = workDir </> "roundtrip.log"
+
+-- |list of original failures, when rerunning tests after static processing
+origFailuresFile :: FilePath
+origFailuresFile = workDir </> "origfailures.txt"
+
+-- |name of index html page
+failuresHtmlFile :: FilePath
+failuresHtmlFile = "failures.html"
+
+-- -- |location and name of index html page
+-- failuresHtmlFile :: FilePath
+-- failuresHtmlFile = failuresHtmlDir </> "failures.html"
+
+-- ---------------------------------------------------------------------
+
+-- |Hand edited list of files known to segfault
+badpackagesFile :: FilePath
+badpackagesFile = configDir </> "badpackages.txt"
+
+-- |Hand edited list of files known to segfault
+blackListed :: FilePath
+blackListed = configDir </> "blacklist.txt"
+
+-- |Hand edited list of files known to fail, no fix required/possible
+knownFailuresFile :: FilePath
+knownFailuresFile = configDir </> "knownfailures.txt"
+
+-- ---------------------------------------------------------------------
+
+-- Given base directory finds all haskell source files
+findSrcFiles :: FilePath -> IO [FilePath]
+findSrcFiles = find filterDirectory filterFilename
+
+filterDirectory :: FindClause Bool
+filterDirectory =
+  p <$> fileName
+  where
+    p x
+      | "." `isPrefixOf` x = False
+      | otherwise = True
+
+filterFilename :: FindClause Bool
+filterFilename = do
+  ext <- extension
+  fname <- fileName
+  return (ext == ".hs" && p fname)
+  where
+    p x
+      | "refactored" `isInfixOf` x = False
+      | "Setup.hs" `isInfixOf` x = False
+      | "HLint.hs" `isInfixOf` x = False -- HLint config files
+      | otherwise                 = True
+
+-- ---------------------------------------------------------------------
+
+readFileGhc :: FilePath -> IO String
+readFileGhc file = do
+  buf@(GHC.StringBuffer _ len _) <- GHC.hGetStringBuffer file
+  return (GHC.lexemeToString buf len)
