diff --git a/remote-debugger.cabal b/remote-debugger.cabal
--- a/remote-debugger.cabal
+++ b/remote-debugger.cabal
@@ -1,5 +1,5 @@
 name:                remote-debugger
-version:             0.1.1
+version:             0.2.1
 description:         Wraper to GHC debugger API allowing debugging throught socket. Used in haskell-idea-plugin.
 license:             BSD3
 license-file:        LICENSE
@@ -23,7 +23,7 @@
 
     hs-source-dirs:     src
     build-depends:      base >= 3 && <5,
-                        ghc,
+                        ghc == 7.8.3,
                         ghc-paths,
                         array,
                         network,
diff --git a/src/DebuggerImpl.hs b/src/DebuggerImpl.hs
--- a/src/DebuggerImpl.hs
+++ b/src/DebuggerImpl.hs
@@ -286,12 +286,13 @@
 changeBreakFlagInModBreaks :: String -> Int -> Bool -> DebuggerMonad Bool
 changeBreakFlagInModBreaks modName flagIndex flagValue = do
     modBreaks <- getModBreaks modName
+    dflags <- GHC.getSessionDynFlags
     let breaksFlags = modBreaks_flags modBreaks
-    liftIO $ setBreakFlag breaksFlags flagIndex flagValue
+    liftIO $ setBreakFlag dflags breaksFlags flagIndex flagValue
 
-setBreakFlag :: BreakArray -> Int -> Bool -> IO Bool
-setBreakFlag bArr ind flag | flag      = setBreakOn bArr ind
-                           | otherwise = setBreakOff bArr ind
+setBreakFlag :: DynFlags -> BreakArray -> Int -> Bool -> IO Bool
+setBreakFlag dynFlags bArr ind flag | flag      = setBreakOn dynFlags bArr ind
+                                    | otherwise = setBreakOff dynFlags bArr ind
 
 -- | ':delete <module name> <break index>' command
 deleteBreakpoint ::  String -> Int -> DebuggerMonad Result
@@ -446,7 +447,7 @@
 
             getThingType :: TyThing -> DebuggerMonad (String)
             getThingType (AnId id') = do
-                showSDoc $ pprTypeForUser False (GHC.idType id')
+                showSDoc $ pprTypeForUser (GHC.idType id')
             getThingType _ = fail "Shouldn't be here"
 
             getThingValue :: TyThing -> DebuggerMonad (String)
@@ -539,7 +540,7 @@
 getExprType :: String -> DebuggerMonad Result
 getExprType expr = do
     ty <- GHC.exprType expr
-    doc <- showSDoc $ pprTypeForUser False ty
+    doc <- showSDoc $ pprTypeForUser ty
     return [
             ("info", ConsStr "expression type"),
             ("type", ConsStr doc)
@@ -551,7 +552,7 @@
     -- it seems that __evalResult is not stored after evaluating, so it is safe to do such binding
     RunOk [name] <- GHC.runStmt ("let __evalResult = " ++ str) GHC.RunToCompletion
     Just (AnId id') <- GHC.lookupName name
-    type' <- showSDoc $ pprTypeForUser False (GHC.idType id')
+    type' <- showSDoc $ pprTypeForUser (GHC.idType id')
     term <- GHC.obtainTermFromId 100 force id'
     value <- showOutputable term
     return [
@@ -598,14 +599,14 @@
     case flag of
         "-fbreak-on-error" -> do
             dflags <- GHC.getSessionDynFlags
-            let dflags' = DynFlags.dopt_set dflags DynFlags.Opt_BreakOnError
-                dflags'' = DynFlags.dopt_unset dflags' DynFlags.Opt_BreakOnException
+            let dflags' = DynFlags.gopt_set dflags DynFlags.Opt_BreakOnError
+                dflags'' = DynFlags.gopt_unset dflags' DynFlags.Opt_BreakOnException
             GHC.setSessionDynFlags dflags''
             return [("info", ConsStr "break set")]
         "-fbreak-on-exception" -> do
             dflags <- GHC.getSessionDynFlags
-            let dflags' = DynFlags.dopt_set dflags DynFlags.Opt_BreakOnException
-                dflags'' = DynFlags.dopt_unset dflags' DynFlags.Opt_BreakOnError
+            let dflags' = DynFlags.gopt_set dflags DynFlags.Opt_BreakOnException
+                dflags'' = DynFlags.gopt_unset dflags' DynFlags.Opt_BreakOnError
             GHC.setSessionDynFlags dflags''
             return [("info", ConsStr "break set")]
         _ -> return [("info", ConsStr "exception"), ("message", ConsStr "Unknown \"set\" flag")]
@@ -619,8 +620,8 @@
         where
             unsetBreak = do
                 dflags <- GHC.getSessionDynFlags
-                let dflags' = DynFlags.dopt_unset dflags DynFlags.Opt_BreakOnException
-                    dflags'' = DynFlags.dopt_unset dflags' DynFlags.Opt_BreakOnError
+                let dflags' = DynFlags.gopt_unset dflags DynFlags.Opt_BreakOnException
+                    dflags'' = DynFlags.gopt_unset dflags' DynFlags.Opt_BreakOnError
                 GHC.setSessionDynFlags dflags''
                 return [("info", ConsStr "break unset")]
 
@@ -665,7 +666,8 @@
     modBreaks <- getModBreaks modName
     -- modBreaks_flags - 0 if unset 1 if set
     printString "# modBreaks_flags:"
-    liftIO $ showBreakArray $ modBreaks_flags $ modBreaks
+    dynFlags <- getSessionDynFlags
+    liftIO $ showBreakArray dynFlags $ modBreaks_flags $ modBreaks
     -- modBreaks_locs - breakpoint index and SrcSpan
     printString "# modBreaks_locs:"
     mapM (\(i, e) -> printString (show i ++ " : " ++ show e)) $ assocs $ modBreaks_locs $ modBreaks
diff --git a/src/ParserMonad.hs b/src/ParserMonad.hs
--- a/src/ParserMonad.hs
+++ b/src/ParserMonad.hs
@@ -1,6 +1,7 @@
 module ParserMonad where
 
 import Data.Char
+import Control.Applicative hiding (many, (<|>))
 
 -- | Parser type
 newtype Parser a = P (String -> [ (a, String) ])
@@ -22,6 +23,10 @@
     return x   = P $ \cs -> [ (x, cs) ]
     fail _     = P $ \_ ->  []
 
+instance Applicative Parser where
+    pure x = P $ \cs -> [ (x, cs) ]
+    a <*> b = a >>= (\f -> fmap f b)
+
 instance Functor Parser where
     fmap f p = p >>= \x -> return (f x)
 
@@ -88,7 +93,7 @@
 -- | Skips spacing characters (more than zero)
 waitAndSkipSpaces :: Parser ()
 waitAndSkipSpaces = do
-    restSatisfiedChars isSpace
+    _ <- restSatisfiedChars isSpace
     return ()
 
 -- | Returns remaining input
@@ -100,7 +105,7 @@
 end :: Parser ()
 end = do
     b <- do {
-             c <- anyChar ;
+             _ <- anyChar ;
              return False ;
          } <|> return True
     if b then return () else fail "End wasn't reached"
