diff --git a/Data/Aeson/Encode/Pretty.hs b/Data/Aeson/Encode/Pretty.hs
--- a/Data/Aeson/Encode/Pretty.hs
+++ b/Data/Aeson/Encode/Pretty.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 -- |Aeson-compatible pretty-printing of JSON 'Value's.
 module Data.Aeson.Encode.Pretty (encodePretty) where
@@ -19,44 +19,42 @@
 
 -- |A drop-in replacement for aeson's 'Aeson.encode' function, producing 
 --  JSON-ByteStrings for human readers.
-encodePretty :: Value -> ByteString
-encodePretty = toLazyByteString . fromValue 0
+encodePretty :: ToJSON a => a -> ByteString
+encodePretty = toLazyByteString . fromValue 0 . toJSON
 
 fromValue :: Indent -> Value -> Builder
-fromValue lvl = go
+fromValue ind = go
   where
-    go (Array v)  = fromCompound lvl ('[',']') fromListItem (toList v)
-    go (Object v) = fromCompound lvl ('{','}') fromPair (assocs v)
+    go (Array v)  = fromCompound ind ('[',']') fromValue (toList v)
+    go (Object v) = fromCompound ind ('{','}') fromPair (assocs v)
     go v          = Aeson.fromValue v
 
 fromCompound :: Indent
-               -> (Char, Char)
-               -> (Indent -> a -> Builder)
-               -> [a]
-               -> Builder
-fromCompound lvl (delimL,delimR) render content =    
-    fromChar delimL `mappend` content' `mappend` fromChar delimR
+             -> (Char, Char)
+             -> (Indent -> a -> Builder)
+             -> [a]
+             -> Builder
+fromCompound ind (delimL,delimR) fromItem items =    
+    fromChar delimL `mappend` items' `mappend` fromChar delimR
   where
-    content' = if null content then mempty
+    newLine = fromChar '\n'
+    items'  = if null items then mempty
                 else mconcat
                     [ newLine
                     , mconcat . intersperse (fromChar ',' `mappend` newLine) $
-                        map (render $ lvl+1) content
+                        map (\i -> fromIndent (ind+1) `mappend`
+                                   fromItem (ind+1) i)
+                            items
                     , newLine
-                    , indent lvl
+                    , fromIndent ind
                     ]
-    newLine  = fromChar '\n'
 
-fromListItem :: Indent -> Value -> Builder
-fromListItem lvl v = indent lvl `mappend` fromValue lvl v
-
 fromPair :: Indent -> (Text, Value) -> Builder
-fromPair lvl (k,v) =
-    mconcat [ indent lvl
-            , Aeson.fromValue (toJSON k)
+fromPair ind (k,v) =
+    mconcat [ Aeson.fromValue (toJSON k)
             , fromByteString ": "
-            , fromValue lvl v
+            , fromValue ind v
             ]
 
-indent :: Indent -> Builder
-indent lvl = mconcat $ replicate (lvl*4) $ fromChar ' '
+fromIndent :: Indent -> Builder
+fromIndent ind = mconcat $ replicate (ind*4) $ fromChar ' '
diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveDataTypeable, RecordWildCards #-}
+{-# LANGUAGE DeriveDataTypeable, RecordWildCards, OverloadedStrings #-}
 module Main (main) where
 
 import Prelude hiding (interact, concat)
@@ -6,19 +6,22 @@
 import Data.Aeson.Encode.Pretty (encodePretty)
 import Data.Attoparsec.Lazy (Result(..), parse)
 import Data.ByteString.Lazy (ByteString, interact, concat, append)
-import Data.ByteString.Lazy.Char8 (pack)
 import qualified Data.ByteString.Lazy as L (null)
+import Data.Version (showVersion)
+import Paths_aeson_pretty (version)
 import System.Console.CmdArgs
 
 
 data Options = Opts { compact :: Bool } deriving (Data, Typeable)
 
 opts :: Options
-opts = Opts { compact = False &= help "Compact output. Ignores the -i flag." 
-                              &= groupname "Flags"}
-        &= program "aeson-pretty"
-        &= summary "aeson-pretty 0.1: Pretty JSON, the easy way."
+opts = Opts { compact = False &= help "Compact output." &= groupname "Flags"}
+        &= program prog
+        &= summary smry
         &= details info
+  where
+    prog = "aeson-pretty"
+    smry = prog++" "++showVersion version++": Pretty JSON, the easy way."
 
 info :: [String]
 info =
@@ -28,7 +31,7 @@
     , "(c) Falko Peters 2011"
     , ""
     , "License: BSD3, for details see the source-repository at"
-    , "http://www.github.com/informatikr/aeson-pretty"
+    , "http://www.github.com/informatikr/aeson-pretty."
     , ""
     ]
 
@@ -36,7 +39,7 @@
 main = do
     Opts{..} <- cmdArgs opts
     let enc = if compact then encode else encodePretty
-    interact (concat . map ((`append` pack "\n") . enc) . values)
+    interact $ concat . map ((`append` "\n") . enc) . values
 
 values :: ByteString -> [Value]
 values s = case parse json s of
diff --git a/aeson-pretty.cabal b/aeson-pretty.cabal
--- a/aeson-pretty.cabal
+++ b/aeson-pretty.cabal
@@ -1,8 +1,8 @@
 name:           aeson-pretty
-version:        0.2.1
+version:        0.3
 license:        BSD3
 license-file:   LICENSE
-category:       Text, Web, JSON
+category:       Text, Web, JSON, Pretty Printer
 copyright:      Copyright 2011 Falko Peters
 author:         Falko Peters <falko.peters@gmail.com>
 maintainer:     Falko Peters <falko.peters@gmail.com>
