diff --git a/json-lines.hs b/json-lines.hs
--- a/json-lines.hs
+++ b/json-lines.hs
@@ -1,15 +1,35 @@
 import Text.JSON.AttoJSON
 import qualified Data.ByteString.Char8 as S
+import Control.Monad (when)
+import System.Environment (getArgs)
+import System.Exit (exitFailure)
+import System.IO (hPutStrLn,stderr)
+import Utils (readFilesS)
 
 jsonUnlines :: JSValue -> [JSValue]
 jsonUnlines (JSArray xs) = xs
 jsonUnlines _            = error "Unexpected JSON value, only an array was expected"
 
+usage :: IO a
+usage = mapM_ (hPutStrLn stderr)
+  ["Usage: json-line [--help] <file>*"
+  ,""
+  ,"Reads the given files as JSON arrays (or standard input, if '-' or"
+  ,"no file is given). Writes on standard output the elements of these"
+  ,"arrays as one JSON document per line."]
+  >> exitFailure
+
 main :: IO ()
-main = S.putStr                     -- printing the output
-     . S.unlines                    -- joining lines
-     . map showJSON                 -- showing each item
-     . jsonUnlines                  -- main processing
-     . either err id                -- error handling
-     . parseJSON =<< S.getContents  -- reading the input
+main =
+ do args <- getArgs
+    when ("--help"`elem`args) usage
+    S.putStr                  -- printing the output
+     . S.unlines              -- joining lines
+     . map showJSON           -- showing each item
+     . concat                 -- merge lines from all files
+     . map (                  -- for each file
+         jsonUnlines          -- main processing
+         . either err id      -- error handling
+         . parseJSON          -- parsing each file as JSON
+       ) =<< readFilesS args  -- reading the input
   where err msg = error $ "JSON parsing: "++msg
diff --git a/json-tools.cabal b/json-tools.cabal
--- a/json-tools.cabal
+++ b/json-tools.cabal
@@ -1,6 +1,6 @@
 Name:           json-tools
 Cabal-Version:  >=1.6
-Version:        0.2.2
+Version:        0.2.3
 License:        BSD3
 License-File:   LICENSE
 Copyright:      (c) Nicolas Pouillard
diff --git a/json-unlines.hs b/json-unlines.hs
--- a/json-unlines.hs
+++ b/json-unlines.hs
@@ -1,17 +1,10 @@
 {-# LANGUAGE OverloadedStrings #-}
-import qualified Data.ByteString.Char8 as L
+import qualified Data.ByteString.Lazy.Char8 as L
 import Control.Monad (when)
 import System.Environment (getArgs)
 import System.Exit (exitFailure)
 import System.IO (hPutStrLn,stderr)
-
--- utility function
-getAllContents :: [String] -> IO L.ByteString
-getAllContents args
-  | null args = L.getContents
-  | otherwise = fmap L.concat . mapM file $ args
-  where file "-" = L.getContents
-        file xs  = L.readFile xs
+import Utils (readFilesL)
 
 usage :: IO a
 usage = mapM_ (hPutStrLn stderr)
@@ -26,6 +19,6 @@
 main = do
   args <- getArgs
   when ("--help"`elem`args) usage
-  L.putStrLn . L.cons '[' . L.intercalate "\n," . L.lines
-    =<< getAllContents args
+  L.putStrLn . L.cons '[' . L.intercalate "\n," . L.lines . L.concat
+    =<< readFilesL args
   L.putStrLn "]"
