diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,17 @@
+Version 0.10.0.2 released 1 Nov 2012
+
+*   Raised version bounds for dependencies.
+
+*   Updated post-update script to use new forms of git commands.
+    Closes #317.
+
+*   Fixed withTempDir so it returns to old directory.
+    Closes #303.  This is a slightly different solution than the one
+    proposed by tstgruby, but it has the advantage that only withTempDir
+    itself needs to be changed.
+
+*   Added nginx example for proxy setup (README) (Andre Kelpe).
+
 Version 0.10.0.1 released 07 Jun 2012
 
 *   Fixed double-encoding bug for unicode page names
diff --git a/Network/Gitit/Config.hs b/Network/Gitit/Config.hs
--- a/Network/Gitit/Config.hs
+++ b/Network/Gitit/Config.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, FlexibleContexts #-}
+{-# LANGUAGE CPP, FlexibleContexts, ScopedTypeVariables #-}
 {-
 Copyright (C) 2009 John MacFarlane <jgm@berkeley.edu>
 
@@ -39,6 +39,7 @@
 import Paths_gitit (getDataFileName)
 import System.FilePath ((</>))
 import Text.Pandoc hiding (MathML, WebTeX, MathJax)
+import qualified Control.Exception as E
 
 forceEither :: Show e => Either e a -> a
 forceEither = either (error . show) id
@@ -249,12 +250,12 @@
 -- mime type, followed by space, followed by a list of zero or more
 -- extensions, separated by spaces. Example: text/plain txt text
 readMimeTypesFile :: FilePath -> IO (M.Map String String)
-readMimeTypesFile f = catch
+readMimeTypesFile f = E.catch
   (liftM (foldr go M.empty . map words . lines) $ readFileUTF8 f)
   handleMimeTypesFileNotFound
      where go []     m = m  -- skip blank lines
            go (x:xs) m = foldr (\ext -> M.insert ext x) m xs
-           handleMimeTypesFileNotFound e = do
+           handleMimeTypesFileNotFound (e :: E.SomeException) = do
              logM "gitit" WARNING $ "Could not read mime types file: " ++
                f ++ "\n" ++ show e ++ "\n" ++ "Using defaults instead."
              return mimeTypes
diff --git a/Network/Gitit/Util.hs b/Network/Gitit/Util.hs
--- a/Network/Gitit/Util.hs
+++ b/Network/Gitit/Util.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, ScopedTypeVariables #-}
 {-
 Copyright (C) 2009 John MacFarlane <jgm@berkeley.edu>
 This program is free software; you can redistribute it and/or modify
@@ -36,6 +36,7 @@
 import Data.ByteString.Lazy.UTF8 (toString)
 import qualified Data.ByteString.Lazy as B
 import Network.Gitit.Types
+import qualified Control.Exception as E
 import Control.Monad (liftM)
 #if MIN_VERSION_base(4,5,0)
 #else
@@ -61,14 +62,18 @@
 
 -- | Perform a function in a temporary directory and clean up.
 withTempDir :: FilePath -> (FilePath -> IO a) -> IO a
-withTempDir baseName = bracket (createTempDir 0 baseName) removeDirectoryRecursive
+withTempDir baseName f = do
+  oldDir <- getCurrentDirectory
+  bracket (createTempDir 0 baseName)
+          (\tmp -> setCurrentDirectory oldDir >> removeDirectoryRecursive tmp)
+          f
 
 -- | Create a temporary directory with a unique name.
 createTempDir :: Integer -> FilePath -> IO FilePath
 createTempDir num baseName = do
   sysTempDir <- getTemporaryDirectory
   let dirName = sysTempDir </> baseName <.> show num
-  liftIO $ catch (createDirectory dirName >> return dirName) $
+  liftIO $ E.catch (createDirectory dirName >> return dirName) $
       \e -> if isAlreadyExistsError e
                then createTempDir (num + 1) baseName
                else ioError e
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -55,7 +55,7 @@
 [GHC]: http://www.haskell.org/ghc/
 [here]: http://www.haskell.org/ghc/
 [cabal-install]:  http://hackage.haskell.org/trac/hackage/wiki/CabalInstall
-[quick install]:  http://hackage.haskell.org/trac/hackage/wiki/CabalInstall#Quick Installation on Unix
+[quick install]:  http://hackage.haskell.org/trac/hackage/wiki/CabalInstall#Quick+Installation+on+Unix
 
 Once you've got cabal-install, installing gitit is trivial:
 
@@ -330,6 +330,7 @@
 
 3.  `raw`: Math will be rendered as raw LaTeX codes.
 
+[jsMath]: http://www.math.union.edu/~dpvc/jsmath/
 [jsMath download page]: http://sourceforge.net/project/showfiles.php?group_id=172663
 
 Restricting access
@@ -477,6 +478,26 @@
     </VirtualHost>
 
 Reload your apache configuration and you should be all set.
+
+Using nginx to achieve the same
+-------------------------------
+
+Drop a file called `wiki.example.com.conf` into `/etc/nginx/conf.d`
+(or where ever your distribution puts it).
+
+    server {
+        listen 80;
+        server_name wiki.example.com
+        location / {
+            proxy_pass        http://127.0.0.1:5001/;
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_redirect off;
+        }
+        access_log /var/log/nginx/wiki.example.com.log main;
+    }
+
+Reload your nginx config and you should be all set.
+
 
 Proxying to `http://mysite.com/wiki`
 ------------------------------------
diff --git a/data/post-update b/data/post-update
--- a/data/post-update
+++ b/data/post-update
@@ -11,9 +11,9 @@
 #
 # To enable this hook, make this file executable by "chmod +x post-update".
 
-git-update-server-info
+git update-server-info
 
-is_bare=$(git-config --get --bool core.bare)
+is_bare=$(git config --get --bool core.bare)
 
 if [ -z "$is_bare" ]
 then
@@ -30,7 +30,7 @@
 		echo "E:push to non-bare repository requires a HEAD reflog" >&2
 		exit 1
 	fi
-	if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)
+	if (cd $GIT_WORK_TREE; git diff-files -q --exit-code >/dev/null)
 	then
 		wc_dirty=0
 	else
@@ -56,23 +56,23 @@
 		new=$(git rev-parse HEAD)
 		echo "W:stashing dirty $desc - see git-stash(1)" >&2
 		( trap 'echo trapped $$; git symbolic-ref HEAD "'"$ref"'"' 2 3 13 15 ERR EXIT
-		git-update-ref --no-deref HEAD HEAD@{1}
+		git update-ref --no-deref HEAD HEAD@{1}
 		cd $GIT_WORK_TREE
 		git stash save "dirty $desc before update to $new";
-		git-symbolic-ref HEAD "$ref"
+		git symbolic-ref HEAD "$ref"
 		)
 	fi
 
 	# eye candy - show the WC updates :)
 	echo "Updating working copy" >&2
 	(cd $GIT_WORK_TREE
-	git-diff-index -R --name-status HEAD >&2
-	git-reset --hard HEAD)
+	git diff-index -R --name-status HEAD >&2
+	git reset --hard HEAD)
 }
 
 if [ "$is_bare" = "false" ]
 then
-	active_branch=`git-symbolic-ref HEAD`
+	active_branch=`git symbolic-ref HEAD`
 	export GIT_DIR=$(cd $GIT_DIR; pwd)
 	GIT_WORK_TREE=${GIT_WORK_TREE-..}
 	for ref
diff --git a/gitit.cabal b/gitit.cabal
--- a/gitit.cabal
+++ b/gitit.cabal
@@ -1,5 +1,5 @@
 name:                gitit
-version:             0.10.0.1
+version:             0.10.0.2
 Cabal-version:       >= 1.6
 build-type:          Simple
 synopsis:            Wiki using happstack, git or darcs, and pandoc.
@@ -146,7 +146,7 @@
                      bytestring,
                      text,
                      random,
-                     network >= 2.1.0.0 && < 2.4,
+                     network >= 2.1.0.0 && < 2.5,
                      utf8-string >= 0.3 && < 0.4,
                      SHA > 1 && < 1.6,
                      HTTP >= 4000.0 && < 4000.3,
@@ -157,22 +157,22 @@
                      filestore >= 0.5 && < 0.6,
                      zlib >= 0.5 && < 0.6,
                      url >= 2.1 && < 2.2,
-                     happstack-server >= 7.0 && < 7.1,
-                     base64-bytestring >= 0.1 && < 0.2,
+                     happstack-server >= 7.0 && < 7.2,
+                     base64-bytestring >= 0.1 && < 1.1,
                      xml >= 1.3.5,
-                     hslogger >= 1 && < 1.2,
+                     hslogger >= 1 && < 1.3,
                      ConfigFile >= 1 && < 1.2,
                      feed >= 0.3.6 && < 0.4,
                      xss-sanitize >= 0.3 && < 0.4,
                      tagsoup >= 0.12 && < 0.13,
                      blaze-html >= 0.4 && < 0.6,
-                     json >= 0.4 && < 0.6
+                     json >= 0.4 && < 0.8
   if impl(ghc >= 6.10)
     build-depends:   base >= 4, syb
   if impl(ghc >= 7.0.3)
     -- without this, 'cabal install' tries to install an older
     -- version of network; I'm not sure why:
-    build-depends:   network >= 2.3 && < 2.4
+    build-depends:   network >= 2.3 && < 2.5
   if flag(plugins)
     build-depends:   ghc, ghc-paths
     cpp-options:     -D_PLUGINS
diff --git a/gitit.hs b/gitit.hs
--- a/gitit.hs
+++ b/gitit.hs
@@ -35,7 +35,7 @@
 import Network.Socket hiding (Debug)
 import Network.URI
 import Data.Version (showVersion)
-import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as B
 import Data.ByteString.UTF8 (fromString)
 
 import Paths_gitit (version, getDataFileName)
@@ -76,8 +76,8 @@
   -- initialize state
   initializeGititState conf'
 
-  let serverConf = Conf { validator = Nothing, port = portNumber conf',
-                          timeout = 20, logAccess = Nothing }
+  let serverConf = nullConf { validator = Nothing, port = portNumber conf',
+                             timeout = 20, logAccess = Nothing }
 
   -- open the requested interface
   sock <- socket AF_INET Stream defaultProtocol
