diff --git a/ihaskell.cabal b/ihaskell.cabal
--- a/ihaskell.cabal
+++ b/ihaskell.cabal
@@ -7,7 +7,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.8.3.0
+version:             0.8.4.0
 
 -- A short (one-line) description of the package.
 synopsis:            A Haskell backend kernel for the IPython project.
@@ -54,7 +54,7 @@
   hs-source-dirs:      src
   default-language:    Haskell2010
   build-depends:
-                       aeson                >=0.7 && < 0.11,
+                       aeson                >=0.7 && < 0.12,
                        base                 >=4.6 && < 4.9,
                        base64-bytestring    >=1.0,
                        bytestring           >=0.10,
@@ -141,7 +141,7 @@
                        transformers         -any,
                        ghc                  >=7.6 || < 7.11,
                        process              >=1.1,
-                       aeson                >=0.7 && < 0.11,
+                       aeson                >=0.7 && < 0.12,
                        bytestring           >=0.10,
                        containers           >=0.5,
                        strict               >=0.3,
@@ -165,7 +165,7 @@
     default-language: Haskell2010
     build-depends:
         ihaskell,
-        aeson >=0.6 && < 0.11,
+        aeson >=0.6 && < 0.12,
         base >=4.6 && < 4.9,
         base64-bytestring >=1.0,
         bytestring >=0.10,
diff --git a/main/Main.hs b/main/Main.hs
--- a/main/Main.hs
+++ b/main/Main.hs
@@ -27,7 +27,8 @@
 import           System.Posix.Signals
 import qualified Data.Map as Map
 import qualified Data.Text.Encoding as E
-import           Data.List (break)
+import           Data.List (break, last)
+import           Data.Version (showVersion)
 
 -- IHaskell imports.
 import           IHaskell.Convert (convert)
@@ -46,6 +47,9 @@
 import qualified IHaskell.IPython.Message.UUID as UUID
 import qualified IHaskell.IPython.Stdin as Stdin
 
+-- Cabal imports.
+import           Paths_ihaskell(version)
+
 -- GHC API imports.
 import           GHC hiding (extensions, language)
 
@@ -69,7 +73,7 @@
     Right args        -> ihaskell args
 
 ihaskell :: Args -> IO ()
-ihaskell (Args (ShowHelp help) _) = putStrLn help
+ihaskell (Args (ShowDefault helpStr) args) = showDefault helpStr args
 ihaskell (Args ConvertLhs args) = showingHelp ConvertLhs args $ convert args
 ihaskell (Args InstallKernelSpec args) = showingHelp InstallKernelSpec args $ do
   let kernelSpecOpts = parseKernelArgs args
@@ -82,6 +86,14 @@
   hPutStrLn stderr "This may be a bug!"
   hPrint stderr a
 
+showDefault :: String -> [Argument] -> IO ()
+showDefault helpStr flags =
+  case find (== Version) flags of
+  Just _ ->
+    putStrLn (showVersion version)
+  Nothing ->
+    putStrLn helpStr
+
 showingHelp :: IHaskellMode -> [Argument] -> IO () -> IO ()
 showingHelp mode flags act =
   case find (== Help) flags of
@@ -239,8 +251,10 @@
   return
     (state, KernelInfoReply
               { header = replyHeader
+              , protocolVersion = "5.0"
+              , banner = "IHaskell " ++ (showVersion version) ++ " GHC " ++ VERSION_ghc
               , implementation = "IHaskell"
-              , implementationVersion = VERSION_ipython_kernel
+              , implementationVersion = showVersion version
               , languageInfo = LanguageInfo
                 { languageName = "haskell"
                 , languageVersion = VERSION_ghc
@@ -305,11 +319,21 @@
                      , status = Ok
                      })
 
--- Always assume that the code is complete, which allows for only
--- single line inputs for now.
-replyTo _ IsCompleteRequest{} replyHeader state = do
-  let reply = IsCompleteReply { header = replyHeader, reviewResult = CodeComplete }
+-- Check for a trailing empty line. If it doesn't exist, we assume the code is incomplete,
+-- otherwise we assume the code is complete. Todo: Implement a mechanism that only requests
+-- a trailing empty line, when multiline code is entered.
+replyTo _ req@IsCompleteRequest{} replyHeader state = do
+  isComplete <- isInputComplete
+  let reply  = IsCompleteReply { header = replyHeader, reviewResult = isComplete }
   return (state, reply)
+
+  where
+    isInputComplete = do
+      let code = lines $ inputToReview req
+      if nub (last code) == " "
+         then return CodeComplete
+         else return $ CodeIncomplete $ indent 4
+    indent n = take n $ repeat ' '
 
 replyTo _ req@CompleteRequest{} replyHeader state = do
   let code = getCode req
diff --git a/src/IHaskell/Eval/Lint.hs b/src/IHaskell/Eval/Lint.hs
--- a/src/IHaskell/Eval/Lint.hs
+++ b/src/IHaskell/Eval/Lint.hs
@@ -187,7 +187,7 @@
             _ -> "warning"
 
     style :: String -> String -> String
-    style =  printf "<div class=\"suggestion-${cls}\">%s</div>"
+    style =  printf "<div class=\"suggestion-%s\">%s</div>"
 
     named :: String -> String
     named = printf "<div class=\"suggestion-name\" style=\"clear:both;\">%s</div>"
diff --git a/src/IHaskell/Flags.hs b/src/IHaskell/Flags.hs
--- a/src/IHaskell/Flags.hs
+++ b/src/IHaskell/Flags.hs
@@ -32,6 +32,7 @@
               | GhcLibDir String    -- ^ Where to find the GHC libraries.
               | KernelDebug         -- ^ Spew debugging output from the kernel.
               | Help                -- ^ Display help text.
+              | Version             -- ^ Display version text.
               | ConvertFrom String
               | ConvertTo String
               | ConvertFromFormat NotebookFormat
@@ -57,7 +58,7 @@
   deriving (Eq, Show)
 
 -- Which mode IHaskell is being invoked in.
-data IHaskellMode = ShowHelp String
+data IHaskellMode = ShowDefault String
                   | InstallKernelSpec
                   | ConvertLhs
                   | Kernel (Maybe String)
@@ -70,9 +71,7 @@
   in case modeIndex of
     Nothing ->
       -- Treat no mode as 'console'.
-      if "--help" `elem` flags
-        then Left $ showText (Wrap 100) $ helpText [] HelpFormatAll ihaskellArgs
-        else process ihaskellArgs flags
+      process ihaskellArgs flags
     Just 0 -> process ihaskellArgs flags
 
     Just idx ->
@@ -177,10 +176,12 @@
 
 ihaskellArgs :: Mode Args
 ihaskellArgs =
-  let descr = "Haskell for Interactive Computing."
+  let noMode = mode "IHaskell" defaultReport descr noArgs [helpFlag, versionFlag]
+      defaultReport = Args (ShowDefault helpStr) []
+      descr = "Haskell for Interactive Computing."
+      helpFlag = flagHelpSimple (add Help)
+      versionFlag = flagVersion (add Version)
       helpStr = showText (Wrap 100) $ helpText [] HelpFormatAll ihaskellArgs
-      onlyHelp = [flagHelpSimple (add Help)]
-      noMode = mode "IHaskell" (Args (ShowHelp helpStr) []) descr noArgs onlyHelp
   in noMode { modeGroupModes = toGroup allModes }
   where
     add flag (Args mode flags) = Args mode $ flag : flags
