diff --git a/funcons-tools.cabal b/funcons-tools.cabal
--- a/funcons-tools.cabal
+++ b/funcons-tools.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                funcons-tools
-version:             0.2.0.10
+version:             0.2.0.11
 synopsis:            A modular interpreter for executing funcons
 description:
     The PLanCompS project (<http://plancomps.org>) has developed a component-based approach to formal semantics.
@@ -57,7 +57,7 @@
                       ,regex-applicative
                       ,random-strings
                       ,funcons-values >= 0.1.0.5
-                      ,readline >= 1.0.3.0
+                      ,haskeline >= 0.8.1.2
   hs-source-dirs:      src, cbs, manual
   default-language:    Haskell2010
   other-extensions:    OverloadedStrings
@@ -145,7 +145,6 @@
                         ,containers >= 0.5 && < 0.7
                         ,vector>=0.12
                         ,bv >= 0.5
-                        ,funcons-tools
                         ,multiset >= 0.3
                         ,split
                         ,directory
@@ -156,7 +155,8 @@
                         ,random-strings
                         ,funcons-values >= 0.1.0.5
                         ,exploring-interpreters >= 0.3.0.0
-                        ,readline >= 1.0.3.0
+                        ,haskeline >= 0.8.1
+                        ,transformers >= 0.5.6
    hs-source-dirs:      src, manual, cbs
    default-language:    Haskell2010
  --  ghc-options:         -rtsopts
diff --git a/src/Funcons/Explorer.hs b/src/Funcons/Explorer.hs
--- a/src/Funcons/Explorer.hs
+++ b/src/Funcons/Explorer.hs
@@ -23,7 +23,9 @@
 import Data.Tree (drawTree)
 import Text.Read (readMaybe)
 
-import System.Console.Readline
+import Control.Monad.Trans.Class (lift) 
+import System.Console.Haskeline
+import System.Console.Haskeline.History
 import System.Environment
 import System.IO
 
@@ -42,24 +44,22 @@
     Nothing -> putStrLn "Invalid reference for revert" >> return exp
 
 repl :: IO ()
-repl = getArgs >>= mk_explorer >>= repl'
+repl = getArgs >>= mk_explorer >>= (runInputT defaultSettings . repl')
  where 
   repl' exp = do
-   hFlush stdout
-   readline ("#" ++ show (EI.currRef exp) ++ " > ") >>= \case 
+   getInputLine ("#" ++ show (EI.currRef exp) ++ " > ") >>= \case 
     Nothing    -> return ()
     Just input -> do
-      addHistory input 
       case break isSpace input of
         (":session", _)   -> do
-          (putStrLn . drawTree . fmap (show . fst) . EI.toTree) exp
+          (outputStrLn . drawTree . fmap (show . fst) . EI.toTree) exp
           repl' exp
         (":revert", mint) | Just ref_id' <- readMaybe (dropWhile isSpace mint)
-                          -> handle_revert ref_id' exp  >>= repl'
-                          | otherwise -> putStrLn "Revert requires an integer argument" >> repl' exp
+                          -> lift (handle_revert ref_id' exp)  >>= repl'
+                          | otherwise -> outputStrLn "Revert requires an integer argument" >> repl' exp
         _                 -> case fct_parse_either input of 
-                                 Left err  -> putStrLn err >> repl' exp 
-                                 Right fct -> EI.execute fct exp >>= (repl'  . fst)
+                                 Left err  -> outputStrLn err >> repl' exp 
+                                 Right fct -> lift (EI.execute fct exp) >>= (repl'  . fst)
 
   
 mk_explorer :: [String] -> IO Explorer 
diff --git a/src/Funcons/Simulation.hs b/src/Funcons/Simulation.hs
--- a/src/Funcons/Simulation.hs
+++ b/src/Funcons/Simulation.hs
@@ -10,7 +10,7 @@
 
 import Control.Applicative
 import Control.Monad.State
-import System.Console.Readline
+import System.Console.Haskeline
 import qualified Data.Map as M
 import Data.Text (unpack)
 
@@ -22,10 +22,10 @@
 instance Interactive IO where
     fexec ma _ = (,M.empty) <$> ma
 
-    fread str_inp nm = do
-        mLine <- readline prompt 
+    fread str_inp nm = runInputT defaultSettings $ do
+        mLine <- getInputLine prompt 
         case mLine of Nothing -> return (string_ "")
-                      Just s  -> addHistory s >> return (toFuncon s)
+                      Just s  -> return (toFuncon s)
         where   toFuncon  str | str_inp   = string_ str
                               | otherwise = fvalue_parse str
                 prompt | nm == "standard-in" = "\n> "
