diff --git a/HXQ.cabal b/HXQ.cabal
--- a/HXQ.cabal
+++ b/HXQ.cabal
@@ -1,6 +1,6 @@
 Cabal-Version:       >= 1.2
 Name:                HXQ
-Version:             0.19.0
+Version:             0.20.0
 Synopsis:            A Compiler from XQuery to Haskell
 Description:         
         HXQ is a fast and space-efficient compiler from XQuery (the standard
@@ -13,7 +13,7 @@
 License-file:        LICENSE
 License:             BSD3
 Author:              Leonidas Fegaras
-Copyright:           2008-2011 Leonidas Fegaras
+Copyright:           2008-2016 Leonidas Fegaras
 Stability:           experimental
 Maintainer:          Leonidas Fegaras <fegaras@cse.uta.edu>
 Homepage:            http://lambda.uta.edu/HXQ/
@@ -86,9 +86,9 @@
      Build-Depends: base >= 3 && < 4
      ghc-options: -funfolding-use-threshold=16
   else
-     Build-Depends: base >= 4 && < 5
+     Build-Depends: base >= 4.0 && < 5
      ghc-options:      -funfolding-use-threshold=16 -fspec-constr-count=100
-  Build-Depends:       haskell98, array, regex-base, regex-compat, template-haskell, mtl, haskeline, HTTP > 4000.0.4
+  Build-Depends:       array, regex-base, regex-compat, template-haskell, mtl, haskeline, HTTP > 4000.0.4
   if flag(mysql)
      Other-Modules:    Text.XML.HXQ.DB, Connect
      Build-Depends:    HDBC, HDBC-odbc
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@
 
 driver = mysql
 base3 = false
-extras = -rtsopts
+extras =
 
 
 ifeq (${driver},mysql)
diff --git a/src/Text/XML/HXQ/Compiler.hs b/src/Text/XML/HXQ/Compiler.hs
--- a/src/Text/XML/HXQ/Compiler.hs
+++ b/src/Text/XML/HXQ/Compiler.hs
@@ -25,9 +25,7 @@
 import Text.XML.HXQ.XTree
 import Text.XML.HXQ.OptionalDB
 import Control.Monad
-import Char(toLower)
-import List(sortBy)
-import Data.List(foldl')
+import Data.List
 import XMLParse(parseDocument)
 import Text.XML.HXQ.Optimizer
 import Text.XML.HXQ.Functions
diff --git a/src/Text/XML/HXQ/Functions.hs b/src/Text/XML/HXQ/Functions.hs
--- a/src/Text/XML/HXQ/Functions.hs
+++ b/src/Text/XML/HXQ/Functions.hs
@@ -21,7 +21,7 @@
 
 import HXML(AttList)
 import Data.List
-import Char
+import Data.Char
 import Text.XML.HXQ.XTree
 import Text.XML.HXQ.Types
 import Language.Haskell.TH(Q,Exp)
diff --git a/src/Text/XML/HXQ/Interpreter.hs b/src/Text/XML/HXQ/Interpreter.hs
--- a/src/Text/XML/HXQ/Interpreter.hs
+++ b/src/Text/XML/HXQ/Interpreter.hs
@@ -21,9 +21,8 @@
 import Text.XML.HXQ.XTree
 import Text.XML.HXQ.OptionalDB
 import Control.Monad
-import List(sortBy)
-import Data.List(foldl')
-import Char(isSpace)
+import Data.List
+import Data.Char
 import XMLParse(parseDocument)
 import Text.XML.HXQ.Optimizer
 import Text.XML.HXQ.Functions
@@ -414,6 +413,7 @@
                                   else if line == "quit"
                                        then return $! (line,0)
                                        else readlines (x++" "++line) (bs+c)
+            loop:: Environment -> Functions -> NS -> Views -> InputT IO XSeq
             loop es fs ns vs
                 = do (line,c) <- oneline prompt
                      (stmt,_) <- if head line == '{'
@@ -432,8 +432,7 @@
                                                                             (error "Cannot use database operations here") False False)
                                                                         (return ([],es,fs,ns,vs))
                                           return result
-                                  else do h <- get
-                                          put $ addHistory stmt h
+                                  else do modifyHistory (addHistory stmt)
                                           (nes,nfs,nns,nvs) <- liftIO $ eval stmt es fs ns vs
                                           loop nes nfs nns nvs
 
diff --git a/src/Text/XML/HXQ/Optimizer.hs b/src/Text/XML/HXQ/Optimizer.hs
--- a/src/Text/XML/HXQ/Optimizer.hs
+++ b/src/Text/XML/HXQ/Optimizer.hs
@@ -17,13 +17,11 @@
 module Text.XML.HXQ.Optimizer(optimize,subst) where
 
 import Control.Monad
-import Char(toLower)
-import List(union)
 import HXML(AttList)
 import Text.XML.HXQ.Parser
 import Text.XML.HXQ.XTree
 import Text.XML.HXQ.OptionalDB
-
+import Data.List
 
 empty = Ast "call" [Avar "empty"]
 true = Ast "call" [Avar "true"]
diff --git a/src/Text/XML/HXQ/Parser.hs b/src/Text/XML/HXQ/Parser.hs
--- a/src/Text/XML/HXQ/Parser.hs
+++ b/src/Text/XML/HXQ/Parser.hs
@@ -1,7 +1,7 @@
 {-# OPTIONS_GHC -w #-}
 {-# OPTIONS -fglasgow-exts -cpp #-}
 module Text.XML.HXQ.Parser(Ast(..),scan,parse,call,concatenateAll,ppAst) where
-import Char
+import Data.Char
 import qualified Data.Array as Happy_Data_Array
 import qualified GHC.Exts as Happy_GHC_Exts
 
diff --git a/src/Text/XML/HXQ/TypeInference.hs b/src/Text/XML/HXQ/TypeInference.hs
--- a/src/Text/XML/HXQ/TypeInference.hs
+++ b/src/Text/XML/HXQ/TypeInference.hs
@@ -18,14 +18,13 @@
 
 module Text.XML.HXQ.TypeInference where
 
-import List(nub,intersect,union)
 import Control.Monad
 import Text.XML.HXQ.Parser
 import Text.XML.HXQ.XTree
 import Text.XML.HXQ.Functions
 import Text.XML.HXQ.Types
 import Debug.Trace
-
+import Data.List
 
 type Subst = [(TVar,Type)]
 
diff --git a/src/Text/XML/HXQ/Types.hs b/src/Text/XML/HXQ/Types.hs
--- a/src/Text/XML/HXQ/Types.hs
+++ b/src/Text/XML/HXQ/Types.hs
@@ -20,13 +20,12 @@
 
 module Text.XML.HXQ.Types where
 
-import Char(isDigit,isSpace)
-import List(isSuffixOf,inits,tails)
 import Text.XML.HXQ.Parser
 import Text.XML.HXQ.XTree
 import XMLParse(XMLEvent(..),parseDocument)
 import HXML(Name,AttList)
 import DeepSeq
+import Data.Char
 
 
 buildInTypes :: [(String,String)]
diff --git a/src/Text/XML/HXQ/XQuery.hs b/src/Text/XML/HXQ/XQuery.hs
--- a/src/Text/XML/HXQ/XQuery.hs
+++ b/src/Text/XML/HXQ/XQuery.hs
@@ -53,8 +53,8 @@
 import Text.XML.HXQ.Interpreter
 import Text.XML.HXQ.Types
 import Text.XML.HXQ.Functions(systemFunctions,pathFunctions)
-import List(sort)
 import System.CPUTime(getCPUTime)
+import Data.List
 
 
 #if _BASE_3_
diff --git a/src/Text/XML/HXQ/XTree.hs b/src/Text/XML/HXQ/XTree.hs
--- a/src/Text/XML/HXQ/XTree.hs
+++ b/src/Text/XML/HXQ/XTree.hs
@@ -20,7 +20,6 @@
 module Text.XML.HXQ.XTree where
 
 import System.IO
-import Char(isSpace)
 import Data.List(foldl',isPrefixOf)
 import XMLParse(XMLEvent(..))
 import HXML(Name,AttList)
@@ -28,6 +27,7 @@
 import System.CPUTime
 -- import System.IO.Unsafe
 import DeepSeq
+import Data.Char
 
 
 -- | Namespace prefix
diff --git a/src/XQueryParser.y b/src/XQueryParser.y
--- a/src/XQueryParser.y
+++ b/src/XQueryParser.y
@@ -15,7 +15,7 @@
 
 {
 module Text.XML.HXQ.Parser(Ast(..),scan,parse,call,concatenateAll,ppAst) where
-import Char
+import Data.Char
 }
 
 %name parse
diff --git a/src/hxml-0.2/XMLParse.hs b/src/hxml-0.2/XMLParse.hs
--- a/src/hxml-0.2/XMLParse.hs
+++ b/src/hxml-0.2/XMLParse.hs
@@ -29,7 +29,7 @@
 import XML
 import DTD
 import Misc
-import List(unfoldr)
+import Data.List
 
 parseInstance :: String -> [XMLEvent]
 
diff --git a/src/hxml-0.2/XMLScanner.hs b/src/hxml-0.2/XMLScanner.hs
--- a/src/hxml-0.2/XMLScanner.hs
+++ b/src/hxml-0.2/XMLScanner.hs
@@ -25,9 +25,9 @@
     ) where
 
 import XML		-- for "Name"
-import Char
 
 import qualified DTD
+import Data.Char
 
 isSEPCHAR, isNMCHAR, isNMSTART :: Char -> Bool
 
