diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,5 @@
+# 0.2.0
+
+* Compliance with the tldr spec
+* Fix `--update` flag bug
+* Backported till GHC 7.8.3 and lts-2.22
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,11 +1,33 @@
 # tldr
 
-Haskell client for tldr
+[![Build Status](https://travis-ci.org/psibi/tldr-hs.svg?branch=master)](https://travis-ci.org/psibi/tldr-hs)
 
-![tldr](https://cloud.githubusercontent.com/assets/737477/24076451/2a5a604c-0c57-11e7-9bf7-13d76e8e7f12.png)
+Haskell client for tldr
 
 ## Installation
 
 1. [Install stack](https://docs.haskellstack.org/en/stable/README/#how-to-install)
 2. Clone this repo  (TODO: Publish this to Stackage)
 3. `stack install`
+
+## Usage
+
+``` shellsession
+$ tldr --help
+tldr - Simplified and community-driven man pages
+
+Usage: tldr [-v|--version] [--update] COMMAND
+  tldr Client program
+
+Available options:
+  -h,--help                Show this help text
+  -v,--version             Show version
+  --update                 Update tldr pages
+  COMMAND                  name of the command
+```
+
+## Snapshot
+
+![tldr](https://cloud.githubusercontent.com/assets/737477/24076451/2a5a604c-0c57-11e7-9bf7-13d76e8e7f12.png)
+
+
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,16 +1,18 @@
+{-#LANGUAGE CPP#-}
+
 module Main where
 
 import Tldr
-import Options.Applicative
+import Options.Applicative hiding ((<>))
 import Data.Semigroup ((<>))
 import Control.Monad
 import System.Directory
 import System.FilePath
 import Data.Conduit.Shell hiding (info)
+import System.Environment (getArgs, withArgs)
 
 data TldrOpts = TldrOpts
   { pageName :: String
-  , updateFlag :: Bool
   } deriving (Show)
 
 tldrDirName :: String
@@ -46,25 +48,29 @@
 updateTldrPages :: IO ()
 updateTldrPages = do
   homeDir <- getHomeDirectory
-  let repoDir = homeDir </> tldrDirName <> "tldr"
+  let repoDir = homeDir </> tldrDirName </> "tldr"
   run $
     do cd repoDir
        git "pull" ["origin", "master"]
 
+updateOption :: Parser (a -> a)
+updateOption = infoOption "update" (long "update" <> help "Update tldr pages")
+
 tldrParserInfo :: ParserInfo TldrOpts
 tldrParserInfo =
   info
-    (helper <*> versionOption <*> programOptions)
+    (helper <*> versionOption <*> updateOption <*> programOptions)
     (fullDesc <> progDesc "tldr Client program" <>
      header "tldr - Simplified and community-driven man pages")
   where
-    versionOption = infoOption "0.1" (long "version" <> help "Show version")
-    programOptions :: Parser TldrOpts
-    programOptions =
-      TldrOpts <$>
-      (strArgument (metavar "COMMAND" <> help "name of the command")) <*>
-      (switch (long "update" <> help "Update tldr pages"))
+    versionOption :: Parser (a -> a)
+    versionOption =
+      infoOption "0.1" (long "version" <> short 'v' <> help "Show version")
 
+programOptions :: Parser TldrOpts
+programOptions =
+  (TldrOpts <$> strArgument (metavar "COMMAND" <> help "name of the command"))
+
 pageExists :: FilePath -> IO (Maybe FilePath)
 pageExists fname = do
   exists <- doesFileExist fname
@@ -77,14 +83,26 @@
   homeDir <- getHomeDirectory
   let pageDir = homeDir </> tldrDirName </> "tldr" </> "pages"
       x@(f1:f2:f3:[]) = map (\x -> pageDir </> x </> page <.> "md") checkDirs
+#if MIN_VERSION_base(4,7,0)
+  f1' <- pageExists f1
+  f2' <- pageExists f2
+  f3' <- pageExists f3
+  return $ f1' <|> f2' <|> f3'
+#else
   pageExists f1 <|> pageExists f2 <|> pageExists f3
+#endif
 
+
 main :: IO ()
 main = do
   initializeTldrPages
-  opts <- execParser tldrParserInfo
-  when (updateFlag opts) updateTldrPages
-  fname <- getPagePath (pageName opts)
-  case fname of
-    Nothing -> putStrLn ("No tldr entry for " <> (pageName opts))
-    Just fpath -> renderPage fpath
+  args <- getArgs
+  case execParserPure (prefs noBacktrack) tldrParserInfo args of
+    Failure _
+      | null args -> withArgs ["--help"] (execParser tldrParserInfo) >> return ()
+      | args == ["--update"] -> updateTldrPages
+    parseResult -> do
+      opts <- handleParseResult parseResult
+      let page = pageName opts
+      fname <- getPagePath page
+      maybe (putStrLn ("No tldr entry for " <> page)) renderPage fname
diff --git a/tldr.cabal b/tldr.cabal
--- a/tldr.cabal
+++ b/tldr.cabal
@@ -1,5 +1,5 @@
 name:                tldr
-version:             0.1.0.0
+version:             0.2.0
 synopsis:            Haskell tldr client
 description:         Haskell tldr client with support for updating and viewing tldr pages.
 homepage:            https://github.com/psibi/tldr-hs#readme
@@ -10,7 +10,7 @@
 copyright:           2017 Sibi
 category:            Web
 build-type:          Simple
-extra-source-files:  README.md
+extra-source-files:  README.md, CHANGELOG.md
 cabal-version:       >=1.10
 
 library
@@ -32,7 +32,8 @@
                      , optparse-applicative
                      , directory
                      , filepath
-                     , shell-conduit
+                     , shell-conduit >= 4.6.0
+                     , semigroups
   default-language:    Haskell2010
 
 test-suite tldr-test
