diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,15 +2,30 @@
 =====
 
 [![Build Status](https://travis-ci.org/agrafix/ignore.svg)](https://travis-ci.org/agrafix/ignore)
+[![Hackage](https://img.shields.io/hackage/v/ignore.svg)](http://hackage.haskell.org/package/ignore)
 
 ## Intro
 
 Hackage: [ignore](http://hackage.haskell.org/package/ignore)
+Stackage: [ignore](https://www.stackage.org/package/ignore)
 
-Library and tiny tool for working with ignore files of different version control systems.
+Handle ignore files of different VCSes
 
-## Library Usage
+## Cli Usage: ignore
 
+```sh
+$ ignore --help
+The ignore tool
+(c) 2015 Alexander Thiemann
+
+Tiny tool to check if a file in a repo is ignored by a VCS
+
+Usage: ignore [--help|-h] file1 file2 file3 ... fileN
+
+```
+
+## Library Usage Example
+
 ```haskell
 module Main where
 
@@ -28,25 +43,27 @@
        case checker of
            Left err -> error err
            Right (FileIgnoredChecker isFileIgnored) ->
-           	  putStrLn $ 
-           	    "Main.hs is " 
-           	    ++ (if isFileIgnored "Main.hs" 
-           	        then "ignored" else "not ignored")
-```
-
-## Commandline Usage
-
-Run in any project under version control to check if a file is ignored or not.
+                  putStrLn $
+                    "Main.hs is "
+                    ++ (if isFileIgnored "Main.hs"
+                        then "ignored" else "not ignored")
 
-```bash
-$ ignore foo~ dist/bar distinct
-File foo~ IGNORED
-File dist/foo IGNORED
-File distinct not ignored
 ```
 
 ## Install
 
 * Using cabal: `cabal install ignore`
-* From Source: `git clone https://github.com/agrafix/ignore.git && cd ignore && cabal install`
-* Using stack: `git clone https://github.com/agrafix/ignore.git && cd ignore && stack build`
+* Using Stack: `stack install ignore`
+* From Source (cabal): `git clone https://github.com/agrafix/ignore.git && cd ignore && cabal install`
+* From Source (stack): `git clone https://github.com/agrafix/ignore.git && cd ignore && stack build`
+
+
+## Misc
+
+### Supported GHC Versions
+
+
+### License
+
+Released under the BSD3 license.
+(c) 2015 Alexander Thiemann
diff --git a/ignore.cabal b/ignore.cabal
--- a/ignore.cabal
+++ b/ignore.cabal
@@ -1,5 +1,5 @@
 name:                ignore
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            Handle ignore files of different VCSes
 description:         Library and tiny tool for working with ignore files of different version control systems
 homepage:            http://github.com/agrafix/ignore
@@ -13,6 +13,11 @@
 extra-source-files:  README.md
 cabal-version:       >=1.10
 
+flag without-pcre
+     manual: True
+     default: False
+     description: Disable pcre support. If you enable this flag, version control ignore files that rely on pcre will not work correctly
+
 library
   hs-source-dirs:      src
   exposed-modules:
@@ -27,11 +32,14 @@
   build-depends:
                        base >= 4 && < 5,
                        path >= 0.5.1,
-                       pcre-heavy >=0.2,
                        Glob >=0.7,
                        text >=1.2.0.4,
                        mtl >=2.1.3.1,
                        directory >= 1.2.1.0
+  if !flag(without-pcre)
+    build-depends:     pcre-heavy >=0.2
+  else
+    cpp-options:       -DNO_PCRE
   default-language:    Haskell2010
 
 executable ignore
diff --git a/src/Ignore/Builder.hs b/src/Ignore/Builder.hs
--- a/src/Ignore/Builder.hs
+++ b/src/Ignore/Builder.hs
@@ -17,10 +17,12 @@
 #else
 import Control.Monad.Error
 #endif
+#ifndef NO_PCRE
 import Text.Regex.PCRE.Heavy ((=~))
+import qualified Text.Regex.PCRE.Heavy as Re
+#endif
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
-import qualified Text.Regex.PCRE.Heavy as Re
 import qualified System.FilePath.Glob as G
 
 #if MIN_VERSION_mtl(2,2,0)
@@ -59,6 +61,11 @@
           do let simplified = G.simplify pat
              lift $ tell $ FileIgnoredChecker (G.matchWith G.matchPosix simplified)
 
+#ifdef NO_PCRE
+registerRegex :: MonadIO m => T.Text -> CheckerBuilderT m ()
+registerRegex rePattern =
+    CheckerBuilderT $ return ()
+#else
 registerRegex :: Monad m => T.Text -> CheckerBuilderT m ()
 registerRegex rePattern =
     CheckerBuilderT $
@@ -66,3 +73,4 @@
       Left err -> throwError ("Failed to compile regex pattern " ++ T.unpack rePattern ++ ": " ++ err)
       Right pat ->
           lift $ tell $ FileIgnoredChecker (=~ pat)
+#endif
diff --git a/src/Ignore/VCS/Darcs.hs b/src/Ignore/VCS/Darcs.hs
--- a/src/Ignore/VCS/Darcs.hs
+++ b/src/Ignore/VCS/Darcs.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE TemplateHaskell #-}
 module Ignore.VCS.Darcs
     ( makeChecker
@@ -7,16 +8,25 @@
 
 import Ignore.Builder
 
+import Control.Monad.Trans
 import Path
 import qualified Data.Text as T
 
-makeChecker :: Monad m => [T.Text] -> CheckerBuilderT m ()
+#ifdef NO_PCRE
+makeChecker :: MonadIO m => [T.Text] -> CheckerBuilderT m ()
+makeChecker _ =
+    liftIO $
+    do putStrLn "The ignore library was compiled with the without-pcre flag."
+       putStrLn "This means that we can not handle darcs boring files for now."
+#else
+makeChecker :: MonadIO m => [T.Text] -> CheckerBuilderT m ()
 makeChecker = go
+#endif
 
 file :: Path Rel File
 file = $(mkRelDir "_darcs/prefs") </> $(mkRelFile "boring")
 
-go :: Monad m => [T.Text] -> CheckerBuilderT m ()
+go :: MonadIO m => [T.Text] -> CheckerBuilderT m ()
 go [] = return ()
 go (x : xs)
     | T.null ln = go xs
diff --git a/src/Ignore/VCS/Git.hs b/src/Ignore/VCS/Git.hs
--- a/src/Ignore/VCS/Git.hs
+++ b/src/Ignore/VCS/Git.hs
@@ -8,16 +8,17 @@
 
 import Ignore.Builder
 
+import Control.Monad.Trans
 import Path
 import qualified Data.Text as T
 
-makeChecker :: Monad m => [T.Text] -> CheckerBuilderT m ()
+makeChecker :: MonadIO m => [T.Text] -> CheckerBuilderT m ()
 makeChecker = mapM_ handleLine
 
 file :: Path Rel File
 file = $(mkRelFile ".gitignore")
 
-handleLine :: Monad m => T.Text -> CheckerBuilderT m ()
+handleLine :: MonadIO m => T.Text -> CheckerBuilderT m ()
 handleLine origLn
     | T.null ln = return ()
     | T.head ln == '#' = return ()
diff --git a/src/Ignore/VCS/Mercurial.hs b/src/Ignore/VCS/Mercurial.hs
--- a/src/Ignore/VCS/Mercurial.hs
+++ b/src/Ignore/VCS/Mercurial.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE OverloadedStrings #-}
 module Ignore.VCS.Mercurial
@@ -8,16 +9,24 @@
 
 import Ignore.Builder
 
+import Control.Monad.Trans
 import Path
 import qualified Data.Text as T
 
-makeChecker :: Monad m => [T.Text] -> CheckerBuilderT m ()
-makeChecker = go registerRegex
+makeChecker :: MonadIO m => [T.Text] -> CheckerBuilderT m ()
+makeChecker files =
+    do
+#ifdef NO_PCRE
+       liftIO $
+          do putStrLn "The ignore library was compiled with the without-pcre flag."
+             putStrLn "This means it will only support 'syntax: glob' mercurial blocks"
+#endif
+       go registerRegex files
 
 file :: Path Rel File
 file = $(mkRelFile ".hgignore")
 
-go :: Monad m => (T.Text -> CheckerBuilderT m ()) -> [T.Text] -> CheckerBuilderT m ()
+go :: MonadIO m => (T.Text -> CheckerBuilderT m ()) -> [T.Text] -> CheckerBuilderT m ()
 go _ [] = return ()
 go register (x : xs)
     | T.null ln = go register xs
