diff --git a/ChangeLog.md b/ChangeLog.md
deleted file mode 100644
--- a/ChangeLog.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## 0.9.0.8
-
-* Simple example in the README
diff --git a/IdeSession.hs b/IdeSession.hs
--- a/IdeSession.hs
+++ b/IdeSession.hs
@@ -143,6 +143,7 @@
   , RunBufferMode(..)
   , BreakInfo(..)
   , runStmt
+  , runStmtPty
   , runExe
   , resume
   , runWaitAll
diff --git a/IdeSession/GHC/Client.hs b/IdeSession/GHC/Client.hs
--- a/IdeSession/GHC/Client.hs
+++ b/IdeSession/GHC/Client.hs
@@ -311,7 +311,7 @@
         }
 
     sendRequests :: (GhcRunRequest -> IO ()) -> Chan GhcRunRequest -> IO ()
-    sendRequests put reqChan = forever $ put =<< $readChan reqChan
+    sendRequests put reqChan = printExceptions "sendRequests" $ forever $ put =<< $readChan reqChan
 
     -- TODO: should we restart the session when ghc crashes?
     -- Maybe recommend that the session is started on GhcExceptions?
@@ -359,3 +359,8 @@
 ignoreIOExceptions = let handler :: Ex.IOException -> IO ()
                          handler _ = return ()
                      in Ex.handle handler
+
+printExceptions :: String -> IO a -> IO a
+printExceptions msg f = f `Ex.catch` \ex -> do
+  print (msg, ex :: Ex.SomeException)
+  Ex.throwIO ex
diff --git a/IdeSession/Update.hs b/IdeSession/Update.hs
--- a/IdeSession/Update.hs
+++ b/IdeSession/Update.hs
@@ -34,6 +34,7 @@
   , buildLicenses
     -- * Running code
   , runStmt
+  , runStmtPty
   , runExe
   , resume
   , setBreakpoint
@@ -479,6 +480,17 @@
   , runCmdFunction = fun
   , runCmdStdout   = idleState ^. ideStdoutBufferMode
   , runCmdStderr   = idleState ^. ideStderrBufferMode
+  , runCmdPty      = False
+  }
+
+-- | Like 'runStmt', but runs the statement in a pseudoterminal.
+runStmtPty :: IdeSession -> String -> String -> IO (RunActions Public.RunResult)
+runStmtPty ideSession m fun = runCmd ideSession $ \idleState -> RunStmt {
+    runCmdModule   = m
+  , runCmdFunction = fun
+  , runCmdStdout   = idleState ^. ideStdoutBufferMode
+  , runCmdStderr   = idleState ^. ideStderrBufferMode
+  , runCmdPty      = True
   }
 
 -- | Run the main function from the last compiled executable.
diff --git a/TestSuite/TestSuite.hs b/TestSuite/TestSuite.hs
--- a/TestSuite/TestSuite.hs
+++ b/TestSuite/TestSuite.hs
@@ -25,6 +25,7 @@
 import TestSuite.Tests.Issues
 import TestSuite.Tests.Packages
 import TestSuite.Tests.Performance
+import TestSuite.Tests.Pseudoterminal
 import TestSuite.Tests.SessionRestart
 import TestSuite.Tests.SessionState
 import TestSuite.Tests.SnippetEnvironment
@@ -70,6 +71,7 @@
   , testGroupDebugger           env
   , testGroupConcurrency        env
   , testGroupPerformance        env
+  , testGroupPseudoterminal     env
   ]
 
 main :: IO ()
diff --git a/ide-backend.cabal b/ide-backend.cabal
--- a/ide-backend.cabal
+++ b/ide-backend.cabal
@@ -1,5 +1,5 @@
 name:                 ide-backend
-version:              0.9.0.9
+version:              0.9.0.10
 synopsis:             An IDE backend library
 description:          See README.md for more details
 license:              MIT
@@ -11,7 +11,7 @@
 category:             Development
 build-type:           Simple
 cabal-version:        >=1.10
-extra-source-files:   README.md ChangeLog.md
+extra-source-files:   README.md
 
 library
   exposed-modules:    IdeSession
@@ -85,7 +85,7 @@
                       bytestring           >= 0.9.2   && < 1,
                       mtl                  >= 2.1     && < 2.3,
                       async                >= 2.0     && < 2.1,
-                      aeson                >= 0.6.2   && < 0.9,
+                      aeson                >= 0.6.2   && < 0.10,
                       executable-path      >= 0.0     && < 0.1,
                       unix                 >= 2.5     && < 2.8,
                       temporary            >= 1.1.2.4 && < 1.3,
@@ -200,7 +200,7 @@
                       random               >= 1.0.1   && < 2,
                       bytestring           >= 0.9.2   && < 1,
                       async                >= 2.0     && < 2.1,
-                      aeson                >= 0.6     && < 0.9,
+                      aeson                >= 0.6     && < 0.10,
                       temporary            >= 1.1.2.4 && < 1.3,
                       test-framework       >= 0.6     && < 0.9,
                       test-framework-hunit >= 0.2     && < 0.4,
