diff --git a/Config/Dyre.hs b/Config/Dyre.hs
--- a/Config/Dyre.hs
+++ b/Config/Dyre.hs
@@ -65,6 +65,13 @@
 >    import DyreExample
 >    main = dyreExample defaultConfig
 
+The user can then create a custom configuration file, which
+overrides some or all of the default configuration:
+
+>    -- ~/.config/dyreExample/dyreExample.hs --
+>    import DyreExample
+>    main = dyreExample $ defaultConfig { message = "Dyre Example v0.1 (Modified)" }
+
 When reading the above program, notice that the majority of the
 code is simply *program logic*. Dyre is designed to intelligently
 handle recompilation with a minimum of programmer work.
@@ -80,6 +87,11 @@
 cache files in '$XDG_CACHE_HOME/<appName>/' directory. The module
 'System.Environment.XDG' is used for this purpose, which also provides
 analogous behaviour on Windows.
+
+The above example can be tested by running Main.hs with 'runhaskell',
+and will detect custom configurations and recompile correctly even when
+the library isn't installed, so long as it is in the current directory
+when run.
 -}
 module Config.Dyre ( wrapMain, Params(..), defaultParams ) where
 
diff --git a/Config/Dyre/Paths.hs b/Config/Dyre/Paths.hs
--- a/Config/Dyre/Paths.hs
+++ b/Config/Dyre/Paths.hs
@@ -27,7 +27,10 @@
                       (False, Just cd) -> cd
     let tempBinary = cacheDir </> pName ++ "-" ++ os ++ "-" ++ arch
     let configFile = configDir </> pName ++ ".hs"
-    return (thisBinary, tempBinary, configFile, cacheDir)
+
+    thisBinary' <- canonicalizePath thisBinary
+    tempBinary' <- canonicalizePath tempBinary
+    return (thisBinary', tempBinary', configFile, cacheDir)
 
 -- | Check if a file exists. If it exists, return Just the modification
 --   time. If it doesn't exist, return Nothing.
diff --git a/dyre.cabal b/dyre.cabal
--- a/dyre.cabal
+++ b/dyre.cabal
@@ -1,5 +1,5 @@
 name:          dyre
-version:       0.8.3
+version:       0.8.4
 category:      Development, Configuration
 synopsis:      Dynamic reconfiguration in Haskell
 
