diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -22,4 +22,4 @@
 
 Compiling will generate an executable called `QRPipe` which reads from `stdin` and outputs a file as the second argument, e.g.
 
-```echo 'My name is:" | QRPipe "nametag.png"```
+```echo 'My name is:" | qrpipe "nametag.png"```
diff --git a/qr-imager.cabal b/qr-imager.cabal
--- a/qr-imager.cabal
+++ b/qr-imager.cabal
@@ -1,5 +1,5 @@
 name:                qr-imager
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            Library to generate QR codes from bytestrings and objects
 description:         Please see README.md
 homepage:            https://github.com/vmchale/QRImager#readme
@@ -10,6 +10,7 @@
 copyright:           Copyright: (c) 2016 Vanessa McHale
 category:            Data
 build-type:          Simple
+stability:           stable
 extra-source-files:  README.md
 cabal-version:       >=1.10
 
@@ -28,10 +29,10 @@
                      , haskell-qrencode
   default-language:    Haskell2010
 
-executable QRPipe
+executable qrpipe
   hs-source-dirs:      app
   main-is:             Main.hs
-  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -O3
   build-depends:       base
                      , qr-imager
                      , bytestring
diff --git a/src/Data/QRCodes.hs b/src/Data/QRCodes.hs
--- a/src/Data/QRCodes.hs
+++ b/src/Data/QRCodes.hs
@@ -1,11 +1,12 @@
 {-# LANGUAGE GADTs            #-}
 {-# LANGUAGE FlexibleContexts #-}
 
-module Data.QRCodes (createSecureQRCode
-              , createQRCode
-              , byteStringToQR
-              , byteStringToQRSec
-              ) where
+-- | Module providing several functions for creating QR codes and their signed counterparts
+module Data.QRCodes ( createSecureQRCode
+                    , createQRCode
+                    , byteStringToQR
+                    , byteStringToQRSec
+                    ) where
 
 import Data.Aeson
 import Data.QRCode
@@ -30,22 +31,24 @@
 import Data.Bits ((.&.))
 import Control.Applicative ((<$>))
 
+-- | Verify a signed token
 checkSig :: BS.ByteString -> IO (Either JwtError BS.ByteString)
 checkSig tok = do
-    key <- read <$> readFile "~/.key.hk" :: IO (Cr.PublicKey, Cr.PrivateKey)
+    key <- read <$> readFile ".key.hk" :: IO (Cr.PublicKey, Cr.PrivateKey)
     let jws = rsaDecode (view _1 key) tok
     return $ fmap (view _2) jws
 
+-- | Sign a token
 mkSig :: BS.ByteString -> IO BS.ByteString
 mkSig string = do
-    switch <- doesFileExist "~/.key.hk"
+    switch <- doesFileExist ".key.hk"
     if not switch then do
         putStrLn "generating key..."
         key <- Cr.generate 512 0x10001
-        writeFile "~/.key.hk" (show key)
+        writeFile ".key.hk" (show key)
     else
         return ()
-    key' <- read <$> readFile "~/.key.hk" :: IO (Cr.PublicKey, Cr.PrivateKey)
+    key' <- read <$> readFile ".key.hk" :: IO (Cr.PublicKey, Cr.PrivateKey)
     signedToken <- rsaEncode RS512 (view _2 key') string
     let signed = fmap unJwt signedToken
     liftEither id (return <$> signed)
