diff --git a/sarsi-hs/Main.hs b/sarsi-hs/Main.hs
--- a/sarsi-hs/Main.hs
+++ b/sarsi-hs/Main.hs
@@ -14,7 +14,7 @@
 import System.IO.Machine (byLine, printer)
 import System.Process (CreateProcess, StdStream(..), shell, std_in, std_out, std_err)
 import System.Process.Machine (callProcessMachines, mStdErr)
-import System.Exit (ExitCode)
+import System.Exit (ExitCode, exitWith)
 
 import qualified Data.List as List
 import qualified Data.Text as Text
@@ -35,13 +35,13 @@
     createProc  = (shell cmd) { std_in = Inherit, std_err = CreatePipe }
     appendCR = auto $ (`Text.snoc` '\n')
 
-producer :: String -> ProcessT IO Event Event -> IO ()
+producer :: String -> ProcessT IO Event Event -> IO ExitCode
 producer cmd sink = do
   (ec, xs) <- callShell cmd pipeline
   let finish = createFinish xs
   putStrLn $ concat [title, ": ", show finish]
   runT_ $ sink <~ source [finish]
-  return ()
+  return ec
     where
       pipeline = sink <~ prepended [Start $ Text.pack "haskell"] <~ auto Notify
       createFinish xs = foldl' f empty xs
@@ -53,5 +53,6 @@
 
 main :: IO ()
 main = do
-  args      <- getArgs
-  produce "." $ producer (concat $ List.intersperse " " args)
+  args  <- getArgs
+  ec    <- produce "." $ producer (concat $ List.intersperse " " args)
+  exitWith ec
diff --git a/sarsi-sbt/Main.hs b/sarsi-sbt/Main.hs
--- a/sarsi-sbt/Main.hs
+++ b/sarsi-sbt/Main.hs
@@ -5,7 +5,7 @@
 import Data.Machine (ProcessT, (<~), asParts, auto, autoM, runT_)
 import Sarsi.Producer (produce)
 import System.Environment (getArgs)
-import System.Exit (ExitCode)
+import System.Exit (ExitCode, exitWith)
 import System.Process (CreateProcess, StdStream(..), shell, std_in, std_out, std_err)
 import System.Process.Machine (callProcessMachines, mStdOut)
 import System.IO (BufferMode(NoBuffering), hSetBuffering, stdin, stdout)
@@ -27,15 +27,15 @@
     echoText h = autoM $ (\txt -> TextIO.hPutStr h txt >> return txt)
     createProc  = (shell cmd) { std_in = Inherit, std_out = CreatePipe }
 
-producer :: String -> ProcessT IO Event Event -> IO ()
+producer :: String -> ProcessT IO Event Event -> IO ExitCode
 producer cmd sink = do
   (ec, _)   <- callShell cmd sink
-  putStrLn $ concat [title, ": ", show ec]
-  return ()
+  return ec
 
 main :: IO ()
 main = do
   hSetBuffering stdin NoBuffering
   hSetBuffering stdout NoBuffering
-  args      <- getArgs
-  produce "." $ producer $ concat $ List.intersperse " " ("sbt":args)
+  args  <- getArgs
+  ec    <- produce "." $ producer $ concat $ List.intersperse " " ("sbt":args)
+  exitWith ec
diff --git a/sarsi.cabal b/sarsi.cabal
--- a/sarsi.cabal
+++ b/sarsi.cabal
@@ -1,5 +1,5 @@
 name:                sarsi
-version:             0.0.0.4
+version:             0.0.1.0
 synopsis:            A universal quickfix toolkit and his protocol.
  
 description:
@@ -53,8 +53,11 @@
 
 executable sarsi 
   main-is:              Main.hs
+  other-modules:
+    Paths_sarsi
   build-depends:       
       base
+    , Cabal
     , sarsi
   hs-source-dirs:       sarsi
   ghc-options:          -Wall
@@ -63,10 +66,9 @@
 
 executable sarsi-hs
   main-is:              Main.hs
-  other-modules:
   build-depends:       
       base
-    , sarsi                 == 0.0.0.4
+    , sarsi                 == 0.0.1.0
     , machines
     , machines-io
     , machines-process
@@ -88,7 +90,7 @@
     -- NVIM.Info
   build-depends:       
       base
-    , sarsi                 == 0.0.0.4
+    , sarsi                 == 0.0.1.0
     , machines
     , binary
     , bytestring
@@ -111,7 +113,7 @@
   other-modules:
   build-depends:       
       base
-    , sarsi                 == 0.0.0.4
+    , sarsi                 == 0.0.1.0
     , machines
     , machines-io
     , machines-process
diff --git a/sarsi/Main.hs b/sarsi/Main.hs
--- a/sarsi/Main.hs
+++ b/sarsi/Main.hs
@@ -1,14 +1,18 @@
 module Main where
 
-import Sarsi (mkSockAddr)
+import Distribution.Text
+import Sarsi (mkSockAddr, title)
 import Sarsi.Trace (traceHS, traceSBT)
 import System.IO (stdin)
 import System.Environment (getArgs)
 
+import Paths_sarsi (version)
+
 main :: IO ()
 main = getArgs >>= run where
   run ["--trace-hs"]  = traceHS stdin
   run ["--trace-sbt"] = traceSBT stdin
-  run [] = do
+  run ["--version"]   = putStrLn $ concat [title, "-", display version]
+  run _ = do
     sock <- mkSockAddr "."
     print sock
diff --git a/src/Codec/Sarsi/SBT.hs b/src/Codec/Sarsi/SBT.hs
--- a/src/Codec/Sarsi/SBT.hs
+++ b/src/Codec/Sarsi/SBT.hs
@@ -36,7 +36,7 @@
   ts  <- manyTill' (lineStart *> (untilLineBreak <* "\n")) (lookAhead $ column)
   col <- column
   _   <- end
-  return $ Message (Location fp (col + 1) ln) lvl $ formatTxts t ts
+  return $ Message (Location fp (col) ln) lvl $ formatTxts t ts
     where
       takeLineBreak = takeWhile1 $ \w -> w == '\n' || w == '\r'
       level = choice [string "[error]" *> return Error, string "[warn]" *> return Warning]
@@ -44,7 +44,7 @@
       sepChar = ':'
       formatTxts t [] = Vector.singleton t
       formatTxts t ts = Vector.fromList $ t : init ts
-      column = lineStart *> ((length <$> many1 space) <* "^\n")
+      column = level *> ((length <$> many1 space) <* "^\n")
 
 cleanEC :: Parser Text
 cleanEC = choice [noEC, withEC]
