diff --git a/executable/Main.hs b/executable/Main.hs
--- a/executable/Main.hs
+++ b/executable/Main.hs
@@ -1,8 +1,13 @@
+{-# LANGUAGE CPP #-}
 module Main where
 
 import Control.Monad
 import Jukebox.Options
 import Jukebox.Toolbox
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+import Data.Monoid
+#endif
 
 tools = mconcat [fof, cnf, smt, monotonox, guessmodel]
 
diff --git a/jukebox.cabal b/jukebox.cabal
--- a/jukebox.cabal
+++ b/jukebox.cabal
@@ -1,5 +1,5 @@
 Name: jukebox
-Version: 0.2.6
+Version: 0.2.7
 Cabal-version: >= 1.8
 Build-type: Simple
 Author: Nick Smallbone
diff --git a/src/Jukebox/Clausify.hs b/src/Jukebox/Clausify.hs
--- a/src/Jukebox/Clausify.hs
+++ b/src/Jukebox/Clausify.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeOperators, BangPatterns #-}
+{-# LANGUAGE TypeOperators, BangPatterns, CPP #-}
 module Jukebox.Clausify where
 
 import Jukebox.Form hiding (run)
@@ -13,6 +13,9 @@
 import Jukebox.Options
 import qualified Data.Set as Set
 import Data.Set(Set)
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+#endif
 
 newtype ClausifyFlags = ClausifyFlags { splitting :: Bool } deriving Show
 
diff --git a/src/Jukebox/HighSat.hs b/src/Jukebox/HighSat.hs
--- a/src/Jukebox/HighSat.hs
+++ b/src/Jukebox/HighSat.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving, CPP #-}
 module Jukebox.HighSat where
 
 import MiniSat hiding (neg)
@@ -12,6 +12,10 @@
 import Control.Monad.Trans.State.Strict
 import Control.Monad.Trans.Reader
 import Data.Maybe
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+import Data.Traversable(traverse)
+#endif
 
 newtype Sat1 a b = Sat1 { runSat1_ :: ReaderT Solver (ReaderT (Watch a) (StateT (Map a Lit) IO)) b } deriving (Functor, Applicative, Monad, MonadIO)
 newtype Sat a b c = Sat { runSat_ :: ReaderT (Watch a) (StateT (Map b (SatState a)) IO) c } deriving (Functor, Applicative, Monad, MonadIO)
diff --git a/src/Jukebox/Name.hs b/src/Jukebox/Name.hs
--- a/src/Jukebox/Name.hs
+++ b/src/Jukebox/Name.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeOperators, GeneralizedNewtypeDeriving, FlexibleInstances #-}
+{-# LANGUAGE TypeOperators, GeneralizedNewtypeDeriving, FlexibleInstances, CPP #-}
 module Jukebox.Name where
 
 import Control.Monad
@@ -8,6 +8,9 @@
 import Data.Symbol
 import Data.Char
 import Data.Ratio
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+#endif
 
 data Name =
     Fixed !FixedName
diff --git a/src/Jukebox/Options.hs b/src/Jukebox/Options.hs
--- a/src/Jukebox/Options.hs
+++ b/src/Jukebox/Options.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleContexts, CPP #-}
 module Jukebox.Options where
 
 import Control.Arrow((***))
@@ -8,6 +8,10 @@
 import System.Environment
 import System.Exit
 import System.IO
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+import Data.Monoid
+#endif
 
 ----------------------------------------------------------------------
 -- A parser of some kind annotated with a help text of some kind
diff --git a/src/Jukebox/Provers/SPASS.hs b/src/Jukebox/Provers/SPASS.hs
--- a/src/Jukebox/Provers/SPASS.hs
+++ b/src/Jukebox/Provers/SPASS.hs
@@ -1,10 +1,13 @@
-{-# LANGUAGE GADTs #-}
+{-# LANGUAGE GADTs, CPP #-}
 module Jukebox.Provers.SPASS where
 
 import Jukebox.Form hiding (tag, Or)
 import Jukebox.Options
 import Jukebox.Utils
 import Jukebox.TPTP.Print
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+#endif
 
 data SPASSFlags =
   SPASSFlags {
diff --git a/src/Jukebox/SMTLIB.hs b/src/Jukebox/SMTLIB.hs
--- a/src/Jukebox/SMTLIB.hs
+++ b/src/Jukebox/SMTLIB.hs
@@ -15,6 +15,9 @@
 import Text.PrettyPrint.HughesPJClass
 import Data.Maybe
 import Data.Ratio
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative hiding (empty)
+#endif
 
 keywords :: [String]
 keywords =
diff --git a/src/Jukebox/TPTP/FindFile.hs b/src/Jukebox/TPTP/FindFile.hs
--- a/src/Jukebox/TPTP/FindFile.hs
+++ b/src/Jukebox/TPTP/FindFile.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 module Jukebox.TPTP.FindFile where
 
 import System.FilePath
@@ -6,6 +7,10 @@
 import Control.Exception
 import Control.Monad
 import Jukebox.Options
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+import Data.Traversable(sequenceA)
+#endif
 
 findFile :: [FilePath] -> FilePath -> IO (Maybe FilePath)
 findFile [] _file = return Nothing
diff --git a/src/Jukebox/TPTP/ParseSnippet.hs b/src/Jukebox/TPTP/ParseSnippet.hs
--- a/src/Jukebox/TPTP/ParseSnippet.hs
+++ b/src/Jukebox/TPTP/ParseSnippet.hs
@@ -1,5 +1,6 @@
 -- Parse little bits of TPTP, e.g. a prelude for a particular tool.
 
+{-# LANGUAGE CPP #-}
 module Jukebox.TPTP.ParseSnippet where
 
 import Jukebox.TPTP.Parse.Core as TPTP.Parse.Core
@@ -9,6 +10,9 @@
 import Jukebox.Form
 import qualified Data.Map.Strict as Map
 import Data.List
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+#endif
 
 tff, cnf :: [(String, Type)] -> [(String, Function)] -> String -> Form
 tff = form TPTP.Parse.Core.tff
diff --git a/src/Jukebox/Toolbox.hs b/src/Jukebox/Toolbox.hs
--- a/src/Jukebox/Toolbox.hs
+++ b/src/Jukebox/Toolbox.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE RecordWildCards, CPP #-}
 module Jukebox.Toolbox where
 
 import Jukebox.Options
@@ -17,6 +17,9 @@
 import Jukebox.InferTypes
 import qualified Data.Map.Strict as Map
 import qualified Jukebox.SMTLIB as SMT
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+#endif
 
 data GlobalFlags =
   GlobalFlags {
diff --git a/src/Jukebox/Utils.hs b/src/Jukebox/Utils.hs
--- a/src/Jukebox/Utils.hs
+++ b/src/Jukebox/Utils.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TupleSections #-}
+{-# LANGUAGE TupleSections, CPP #-}
 module Jukebox.Utils where
 
 import System.Process
@@ -6,6 +6,9 @@
 import System.Exit
 import Control.Concurrent
 import qualified Data.Set as Set
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
+#endif
 
 usort :: Ord a => [a] -> [a]
 --usort = map head . group . sort
