diff --git a/Shellac.cabal b/Shellac.cabal
--- a/Shellac.cabal
+++ b/Shellac.cabal
@@ -1,7 +1,7 @@
 Name:           Shellac
-Cabal-Version:  >= 1.2.3
+Cabal-Version:  >= 1.22
 Build-Type:     Simple
-Version:        0.9.5.2
+Version:        0.9.9
 License:        BSD3
 License-File:   LICENSE
 Author:         Robert Dockins
@@ -21,31 +21,25 @@
   and still enjoy the advanced features that may be available from a
   powerful line editing package like readline.
 
-flag base4
-
 Library
   Hs-Source-Dirs: src
-  Build-Depends: base < 5, mtl, directory
-
-  if flag(base4)
-     Build-Depends: base >= 4
-     CPP-Options: -DBASE4
-  else
-     Build-Depends: base < 4
-
-  if impl(ghc >= 6.8) && impl(ghc < 6.10)
-     Extensions: PatternSignatures
+  Build-Depends:
+    base == 4.*,
+    mtl,
+    directory
 
   if os(windows)
      CPP-Options: -DBUILD_WINDOWS
   else
      Build-Depends: unix
 
-  Extensions:
+  Default-Language: Haskell2010
+  Default-Extensions:
      MultiParamTypeClasses
      FunctionalDependencies
      ExistentialQuantification
      CPP
+     ScopedTypeVariables
      UndecidableInstances
      GeneralizedNewtypeDeriving
      FlexibleInstances
diff --git a/src/System/Console/Shell/PPrint.hs b/src/System/Console/Shell/PPrint.hs
--- a/src/System/Console/Shell/PPrint.hs
+++ b/src/System/Console/Shell/PPrint.hs
@@ -47,6 +47,7 @@
         , displayS, displayIO
         ) where
 
+import Prelude hiding ( (<|>), (<$>) )
 import System.IO      (Handle,hPutStr,hPutChar,stdout)
 
 infixr 5 </>,<//>,<$>,<$$>
diff --git a/src/System/Console/Shell/RunShell.hs b/src/System/Console/Shell/RunShell.hs
--- a/src/System/Console/Shell/RunShell.hs
+++ b/src/System/Console/Shell/RunShell.hs
@@ -321,22 +321,12 @@
 --   ignores the thread killed exception, because that is used to
 --   implement execution canceling)
 
-#ifdef BASE4
-
 defaultExceptionHandler :: ShellacException -> Sh st ()
 defaultExceptionHandler ex =
   case Ex.fromException ex of
     Just Ex.ThreadKilled -> return ()
     _ -> shellPutErrLn $ concat ["The following exception occurred:\n   ",show ex]
 
-#else
-
-defaultExceptionHandler :: ShellacException -> Sh st ()
-defaultExceptionHandler (Ex.AsyncException Ex.ThreadKilled) = return ()
-defaultExceptionHandler ex = do
-  shellPutErrLn $ concat ["The following exception occurred:\n   ",show ex]
-
-#endif
 
 ----------------------------------------------------------------------------
 -- | Creates a simple subshell from a state mapping function
diff --git a/src/System/Console/Shell/Types.hs b/src/System/Console/Shell/Types.hs
--- a/src/System/Console/Shell/Types.hs
+++ b/src/System/Console/Shell/Types.hs
@@ -31,15 +31,7 @@
   | UsernameCompleter
   | OtherCompleter (st -> String -> IO [String])
 
-
-#ifdef BASE4
--- | Compatability layer.  For base-3, this is
---   \'Exception\'.  For base-4, this is
---   \'SomeException\'.
 type ShellacException = Ex.SomeException
-#else
-type ShellacException = Ex.Exception
-#endif
 
 -- | The result of parsing a command.
 data CommandParseResult st
@@ -74,7 +66,7 @@
 --   The type parameter @st@ allows the monad to carry around a package of
 --   user-defined state.
 newtype Sh st a = Sh { unSh :: StateT (CommandResult st) (ReaderT OutputCommand IO) a }
-   deriving (Monad, MonadIO, MonadFix, Functor)
+   deriving (Monad, MonadIO, MonadFix, Functor, Applicative)
 
 ------------------------------------------------------------------------
 -- The shell description and utility functions
