diff --git a/Annex/Action.hs b/Annex/Action.hs
new file mode 100644
--- /dev/null
+++ b/Annex/Action.hs
@@ -0,0 +1,35 @@
+{- git-annex actions
+ -
+ - Copyright 2010-2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Annex.Action where
+
+import qualified Data.Map as M
+#ifndef mingw32_HOST_OS
+import System.Posix.Signals
+#endif
+
+import Common.Annex
+import qualified Annex
+import Annex.Content
+
+{- Actions to perform each time ran. -}
+startup :: Annex ()
+startup =
+#ifndef mingw32_HOST_OS
+	liftIO $ void $ installHandler sigINT Default Nothing
+#else
+	return ()
+#endif
+
+{- Cleanup actions. -}
+shutdown :: Bool -> Annex ()
+shutdown nocommit = do
+	saveState nocommit
+	sequence_ =<< M.elems <$> Annex.getState Annex.cleanup
+	liftIO reapZombies -- zombies from long-running git processes
diff --git a/Annex/Content.hs b/Annex/Content.hs
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -176,8 +176,6 @@
 		(const $ a $ ContentLock key )
   where
 	alreadylocked = error "content is locked"
-	failedtolock e = error $ "failed to lock content: " ++ show e
-	trylock locker = locker `catchIO` failedtolock
 	cleanuplockfile lockfile = modifyContent lockfile $
 		void $ liftIO $ tryIO $
 			nukeFile lockfile
@@ -197,6 +195,9 @@
 	unlock mlockfile lck = do
 		maybe noop cleanuplockfile mlockfile
 		liftIO $ dropLock lck
+	
+	failedtolock e = error $ "failed to lock content: " ++ show e
+	trylock locker = locker `catchIO` failedtolock
 #else
 	lock _ (Just lockfile) = do
 		modifyContent lockfile $
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -230,7 +230,7 @@
 
 mergeDirectCleanup :: FilePath -> Git.Ref -> Annex ()
 mergeDirectCleanup d oldref = do
-	updateWorkTree d oldref
+	updateWorkTree d oldref False
 	liftIO $ removeDirectoryRecursive d
 
 {- Updates the direct mode work tree to reflect the changes staged in the
@@ -247,8 +247,8 @@
  - order, but we cannot add the directory until the file with the
  - same name is removed.)
  -}
-updateWorkTree :: FilePath -> Git.Ref -> Annex ()
-updateWorkTree d oldref = do
+updateWorkTree :: FilePath -> Git.Ref -> Bool -> Annex ()
+updateWorkTree d oldref force = do
 	(items, cleanup) <- inRepo $ DiffTree.diffIndex oldref
 	makeabs <- flip fromTopFilePath <$> gitRepo
 	let fsitems = zip (map (makeabs . DiffTree.file) items) items
@@ -281,7 +281,7 @@
 	 - Otherwise, create the symlink and then if possible, replace it
 	 - with the content. -}
 	movein item makeabs k f = unlessM (goodContent k f) $ do
-		preserveUnannexed item makeabs f oldref
+		unless force $ preserveUnannexed item makeabs f oldref
 		l <- calcRepo $ gitAnnexLink f k
 		replaceFile f $ makeAnnexLink l
 		toDirect k f
@@ -289,7 +289,7 @@
 	{- Any new, modified, or renamed files were written to the temp
 	 - directory by the merge, and are moved to the real work tree. -}
 	movein_raw item makeabs f = do
-		preserveUnannexed item makeabs f oldref
+		unless force $ preserveUnannexed item makeabs f oldref
 		liftIO $ do
 			createDirectoryIfMissing True $ parentDir f
 			void $ tryIO $ rename (d </> getTopFilePath (DiffTree.file item)) f
diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs
--- a/Annex/Ssh.hs
+++ b/Annex/Ssh.hs
@@ -266,9 +266,9 @@
  - to set GIT_SSH=git-annex, and sets sshOptionsEnv. -}
 sshOptionsTo :: Git.Repo -> RemoteGitConfig -> Git.Repo -> Annex Git.Repo
 sshOptionsTo remote gc g 
-	| not (Git.repoIsUrl remote) || Git.repoIsHttp remote = uncached
+	| not (Git.repoIsUrl remote) || Git.repoIsHttp remote = unchanged
 	| otherwise = case Git.Url.hostuser remote of
-		Nothing -> uncached
+		Nothing -> unchanged
 		Just host -> do
 			(msockfile, _) <- sshCachingInfo (host, Git.Url.port remote)
 			case msockfile of
@@ -277,17 +277,21 @@
 					prepSocket sockfile
 					use (sshConnectionCachingParams sockfile)
   where
-	uncached = return g
+	unchanged = return g
 
 	use opts = do
-		let val = toSshOptionsEnv $ concat
+		let sshopts = concat
 			[ opts
 			, map Param (remoteAnnexSshOptions gc)
 			]
-		command <- liftIO programPath
-		liftIO $ do
-			g' <- addGitEnv g sshOptionsEnv val
-			addGitEnv g' "GIT_SSH" command
+		if null sshopts
+			then unchanged
+			else do
+				command <- liftIO programPath
+				liftIO $ do
+					g' <- addGitEnv g sshOptionsEnv
+						(toSshOptionsEnv sshopts)
+					addGitEnv g' "GIT_SSH" command
 
 runSshOptions :: [String] -> String -> IO ()
 runSshOptions args s = do
diff --git a/Annex/TaggedPush.hs b/Annex/TaggedPush.hs
--- a/Annex/TaggedPush.hs
+++ b/Annex/TaggedPush.hs
@@ -45,7 +45,6 @@
 	("refs":"synced":u:_base) ->
 		Just (toUUID u, Nothing)
 	_ -> Nothing
-  where
 
 taggedPush :: UUID -> Maybe String -> Git.Ref -> Remote -> Git.Repo -> IO Bool
 taggedPush u info branch remote = Git.Command.runBool
diff --git a/Assistant/Gpg.hs b/Assistant/Gpg.hs
--- a/Assistant/Gpg.hs
+++ b/Assistant/Gpg.hs
@@ -5,8 +5,6 @@
  - Licensed under the GNU AGPL version 3 or higher.
  -}
 
-{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}
-
 module Assistant.Gpg where
 
 import Utility.Gpg
diff --git a/Backend/Hash.hs b/Backend/Hash.hs
--- a/Backend/Hash.hs
+++ b/Backend/Hash.hs
@@ -1,10 +1,12 @@
-{- git-tnnex hashing backends
+{- git-annex hashing backends
  -
- - Copyright 2011-2013 Joey Hess <id@joeyh.name>
+ - Copyright 2011-2015 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
 
+{-# LANGUAGE CPP #-}
+
 module Backend.Hash (
 	backends,
 	testKeyBackend,
@@ -22,21 +24,30 @@
 import qualified Data.ByteString.Lazy as L
 import Data.Char
 
-data Hash = SHAHash HashSize | SkeinHash HashSize | MD5Hash
+data Hash
+	= MD5Hash
+	| SHA1Hash
+	| SHA2Hash HashSize
+	| SHA3Hash HashSize
+	| SkeinHash HashSize
 type HashSize = Int
 
 {- Order is slightly significant; want SHA256 first, and more general
  - sizes earlier. -}
 hashes :: [Hash]
 hashes = concat 
-	[ map SHAHash [256, 1, 512, 224, 384]
+	[ map SHA2Hash [256, 512, 224, 384]
+#ifdef WITH_CRYPTONITE
+	, map SHA3Hash [256, 512, 224, 384]
+#endif
 	, map SkeinHash [256, 512]
+	, [SHA1Hash]
 	, [MD5Hash]
 	]
 
 {- The SHA256E backend is the default, so genBackendE comes first. -}
 backends :: [Backend]
-backends = map genBackendE hashes ++ map genBackend hashes
+backends = concatMap (\h -> [genBackendE h, genBackend h]) hashes
 
 genBackend :: Hash -> Backend
 genBackend hash = Backend
@@ -55,9 +66,11 @@
 	}
 
 hashName :: Hash -> String
-hashName (SHAHash size) = "SHA" ++ show size
-hashName (SkeinHash size) = "SKEIN" ++ show size
 hashName MD5Hash = "MD5"
+hashName SHA1Hash = "SHA1"
+hashName (SHA2Hash size) = "SHA" ++ show size
+hashName (SHA3Hash size) = "SHA3_" ++ show size
+hashName (SkeinHash size) = "SKEIN" ++ show size
 
 hashNameE :: Hash -> String
 hashNameE hash = hashName hash ++ "E"
@@ -153,7 +166,15 @@
 hashFile :: Hash -> FilePath -> Integer -> Annex String
 hashFile hash file filesize = go hash
   where
-	go (SHAHash hashsize) = case shaHasher hashsize filesize of
+	go MD5Hash = use md5Hasher
+	go SHA1Hash = usehasher 1
+	go (SHA2Hash hashsize) = usehasher hashsize
+	go (SHA3Hash hashsize) = use (sha3Hasher hashsize)
+	go (SkeinHash hashsize) = use (skeinHasher hashsize)
+	
+	use hasher = liftIO $ hasher <$> L.readFile file
+	
+	usehasher hashsize = case shaHasher hashsize filesize of
 		Left sha -> use sha
 		Right (external, internal) -> do
 			v <- liftIO $ externalSHA external hashsize file
@@ -164,19 +185,15 @@
 					-- fall back to internal since
 					-- external command failed
 					use internal
-	go (SkeinHash hashsize) = use (skeinHasher hashsize)
-	go MD5Hash = use md5Hasher
-	
-	use hasher = liftIO $ hasher <$> L.readFile file
 
 shaHasher :: HashSize -> Integer -> Either (L.ByteString -> String) (String, L.ByteString -> String)
 shaHasher hashsize filesize
 	| hashsize == 1 = use SysConfig.sha1 sha1
-	| hashsize == 256 = use SysConfig.sha256 sha256
-	| hashsize == 224 = use SysConfig.sha224 sha224
-	| hashsize == 384 = use SysConfig.sha384 sha384
-	| hashsize == 512 = use SysConfig.sha512 sha512
-	| otherwise = error $ "unsupported sha size " ++ show hashsize
+	| hashsize == 256 = use SysConfig.sha256 sha2_256
+	| hashsize == 224 = use SysConfig.sha224 sha2_224
+	| hashsize == 384 = use SysConfig.sha384 sha2_384
+	| hashsize == 512 = use SysConfig.sha512 sha2_512
+	| otherwise = error $ "unsupported SHA size " ++ show hashsize
   where
 	use Nothing hasher = Left $ usehasher hasher
 	use (Just c) hasher
@@ -189,11 +206,21 @@
 		| otherwise = Right (c, usehasher hasher)
 	usehasher hasher = show . hasher
 
+sha3Hasher :: HashSize -> (L.ByteString -> String)
+sha3Hasher hashsize
+#ifdef WITH_CRYPTONITE
+	| hashsize == 256 = show . sha3_256
+	| hashsize == 224 = show . sha3_224
+	| hashsize == 384 = show . sha3_384
+	| hashsize == 512 = show . sha3_512
+#endif
+	| otherwise = error $ "unsupported SHA3 size " ++ show hashsize
+
 skeinHasher :: HashSize -> (L.ByteString -> String)
 skeinHasher hashsize 
 	| hashsize == 256 = show . skein256
 	| hashsize == 512 = show . skein512
-	| otherwise = error $ "unsupported skein size " ++ show hashsize
+	| otherwise = error $ "unsupported SKEIN size " ++ show hashsize
 
 md5Hasher :: L.ByteString -> String
 md5Hasher = show . md5
@@ -207,7 +234,7 @@
  -}
 testKeyBackend :: Backend
 testKeyBackend = 
-	let b = genBackendE (SHAHash 256)
+	let b = genBackendE (SHA2Hash 256)
 	in b { getKey = (fmap addE) <$$> getKey b } 
   where
 	addE k = k { keyName = keyName k ++ longext }
diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,46 @@
+git-annex (5.20150812) unstable; urgency=medium
+
+  * Added support for SHA3 hashed keys (in 8 varieties), when git-annex is
+    built using the cryptonite library.
+  * metadata: Fix reversion introduced in 5.20150727 that caused recursive
+    display of metadata to not work.
+  * Windows: Fix bug that caused git-annex sync to fail due to missing
+    environment variable.
+  * Fix setting/setting/viewing metadata that contains unicode or other
+    special characters, when in a non-unicode locale.
+  * Simplify setup process for a ssh remote. Now it suffices to run git
+    remote add, followed by git-annex sync. Now the remote is automatically
+    initialized for use by git-annex, where before the git-annex branch had
+    to manually be pushed before using git-annex sync. Note that this
+    involved changes to git-annex-shell, so if the remote is using an old
+    version, the manual push is still needed.
+  * git-annex-shell: Don't let configlist auto-init repository when in
+    readonly mode.
+  * Perform a clean shutdown when --time-limit is reached.
+    This includes running queued git commands, and cleanup actions normally
+    run when a command is finished.
+  * fsck: Commit incremental fsck database when --time-limit is reached.
+    Previously, some of the last files fscked did not make it into the
+    database when using --time-limit.
+  * fsck: Commit incremental fsck database after every 1000 files
+    fscked, or every 5 minutes, whichever comes first. Previously,
+    commits were made every 1000 files fscked.
+  * Linux standalone: Work around problem that prevented it from working
+    properly if unpacked into a directory that contains ":" or ";" in its
+    name.
+  * proxy: Fix proxy git commit of non-annexed files in direct mode. 
+  * proxy: If a non-proxied git command, such as git revert
+    would normally fail because of unstaged files in the work tree,
+    make the proxied command fail the same way.
+  * proxy: Fix removal of files deleted by the proxied command.
+  * proxy: Fix behavior when run in subdirectory of git repo.
+  * Improve Setup.hs file so that cabal copy --destdir works.
+    Thanks, Magnus Therning.
+  * Tighten dependency on optparse-applicative to 0.11.0.
+  * Added back debian/cabal-wrapper, since it still seems needed after all.
+
+ -- Joey Hess <id@joeyh.name>  Wed, 12 Aug 2015 11:14:58 -0400
+
 git-annex (5.20150731) unstable; urgency=medium
 
   * webapp: Support enabling known gitlab.com remotes.
diff --git a/CmdLine.hs b/CmdLine.hs
--- a/CmdLine.hs
+++ b/CmdLine.hs
@@ -5,29 +5,22 @@
  - Licensed under the GNU GPL version 3 or higher.
  -}
 
-{-# LANGUAGE CPP #-}
-
 module CmdLine (
 	dispatch,
 	usage,
-	shutdown
 ) where
 
 import qualified Options.Applicative as O
 import qualified Options.Applicative.Help as H
 import qualified Control.Exception as E
-import qualified Data.Map as M
 import Control.Exception (throw)
-#ifndef mingw32_HOST_OS
-import System.Posix.Signals
-#endif
 
 import Common.Annex
 import qualified Annex
 import qualified Git
 import qualified Git.AutoCorrect
 import qualified Git.Config
-import Annex.Content
+import Annex.Action
 import Annex.Environment
 import Command
 import Types.Messages
@@ -117,19 +110,3 @@
 	inexactcmds = case name of
 		Nothing -> []
 		Just n -> Git.AutoCorrect.fuzzymatches n cmdname cmds
-
-{- Actions to perform each time ran. -}
-startup :: Annex ()
-startup =
-#ifndef mingw32_HOST_OS
-	liftIO $ void $ installHandler sigINT Default Nothing
-#else
-	return ()
-#endif
-
-{- Cleanup actions. -}
-shutdown :: Bool -> Annex ()
-shutdown nocommit = do
-	saveState nocommit
-	sequence_ =<< M.elems <$> Annex.getState Annex.cleanup
-	liftIO reapZombies -- zombies from long-running git processes
diff --git a/CmdLine/GitAnnexShell.hs b/CmdLine/GitAnnexShell.hs
--- a/CmdLine/GitAnnexShell.hs
+++ b/CmdLine/GitAnnexShell.hs
@@ -7,8 +7,6 @@
 
 module CmdLine.GitAnnexShell where
 
-import System.Environment
-
 import Common.Annex
 import qualified Git.Construct
 import qualified Git.Config
@@ -16,11 +14,9 @@
 import CmdLine.GlobalSetter
 import Command
 import Annex.UUID
+import CmdLine.GitAnnexShell.Checks
 import CmdLine.GitAnnexShell.Fields
-import Utility.UserInfo
 import Remote.GCrypt (getGCryptUUID)
-import qualified Annex
-import Annex.Init
 
 import qualified Command.ConfigList
 import qualified Command.InAnnex
@@ -34,7 +30,7 @@
 
 cmds_readonly :: [Command]
 cmds_readonly =
-	[ gitAnnexShellCheck Command.ConfigList.cmd
+	[ Command.ConfigList.cmd
 	, gitAnnexShellCheck Command.InAnnex.cmd
 	, gitAnnexShellCheck Command.SendKey.cmd
 	, gitAnnexShellCheck Command.TransferInfo.cmd
@@ -96,7 +92,8 @@
 
 builtin :: String -> String -> [String] -> IO ()
 builtin cmd dir params = do
-	checkNotReadOnly cmd
+	unless (cmd `elem` map cmdname cmds_readonly)
+		checkNotReadOnly
 	checkDirectory $ Just dir
 	let (params', fieldparams, opts) = partitionParams params
 	    rsyncopts = ("RsyncOptions", unwords opts)
@@ -146,63 +143,10 @@
 	| field == fieldName remoteUUID = fieldCheck remoteUUID val
 	| field == fieldName associatedFile = fieldCheck associatedFile val
 	| field == fieldName direct = fieldCheck direct val
+	| field == fieldName autoInit = fieldCheck autoInit val
 	| otherwise = False
 
 failure :: IO ()
 failure = error $ "bad parameters\n\n" ++ usage h cmds
   where
 	h = "git-annex-shell [-c] command [parameters ...] [option ...]"
-
-checkNotLimited :: IO ()
-checkNotLimited = checkEnv "GIT_ANNEX_SHELL_LIMITED"
-
-checkNotReadOnly :: String -> IO ()
-checkNotReadOnly cmd
-	| cmd `elem` map cmdname cmds_readonly = noop
-	| otherwise = checkEnv "GIT_ANNEX_SHELL_READONLY"
-
-checkDirectory :: Maybe FilePath -> IO ()
-checkDirectory mdir = do
-	v <- catchMaybeIO $ getEnv "GIT_ANNEX_SHELL_DIRECTORY"
-	case (v, mdir) of
-		(Nothing, _) -> noop
-		(Just d, Nothing) -> req d Nothing
-		(Just d, Just dir)
-			|  d `equalFilePath` dir -> noop
-			| otherwise -> do
-				home <- myHomeDir
-				d' <- canondir home d
-				dir' <- canondir home dir
-				if d' `equalFilePath` dir'
-					then noop
-					else req d' (Just dir')
-  where
-	req d mdir' = error $ unwords 
-		[ "Only allowed to access"
-		, d
-		, maybe "and could not determine directory from command line" ("not " ++) mdir'
-		]
-
-	{- A directory may start with ~/ or in some cases, even /~/,
-	 - or could just be relative to home, or of course could
-	 - be absolute. -}
-	canondir home d
-		| "~/" `isPrefixOf` d = return d
-		| "/~/" `isPrefixOf` d = return $ drop 1 d
-		| otherwise = relHome $ absPathFrom home d
-
-checkEnv :: String -> IO ()
-checkEnv var = do
-	v <- catchMaybeIO $ getEnv var
-	case v of
-		Nothing -> noop
-		Just "" -> noop
-		Just _ -> error $ "Action blocked by " ++ var
-
-{- Modifies a Command to check that it is run in either a git-annex
- - repository, or a repository with a gcrypt-id set. -}
-gitAnnexShellCheck :: Command -> Command
-gitAnnexShellCheck = addCheck okforshell . dontCheck repoExists
-  where
-	okforshell = unlessM (isInitialized <||> isJust . gcryptId <$> Annex.getGitConfig) $
-		error "Not a git-annex or gcrypt repository."
diff --git a/CmdLine/GitAnnexShell/Checks.hs b/CmdLine/GitAnnexShell/Checks.hs
new file mode 100644
--- /dev/null
+++ b/CmdLine/GitAnnexShell/Checks.hs
@@ -0,0 +1,67 @@
+{- git-annex-shell checks
+ -
+ - Copyright 2012 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module CmdLine.GitAnnexShell.Checks where
+
+import Common.Annex
+import Command
+import qualified Annex
+import Annex.Init
+import Utility.UserInfo
+import Utility.Env
+
+checkNotLimited :: IO ()
+checkNotLimited = checkEnv "GIT_ANNEX_SHELL_LIMITED"
+
+checkNotReadOnly :: IO ()
+checkNotReadOnly = checkEnv "GIT_ANNEX_SHELL_READONLY"
+
+checkEnv :: String -> IO ()
+checkEnv var = do
+	v <- getEnv var
+	case v of
+		Nothing -> noop
+		Just "" -> noop
+		Just _ -> error $ "Action blocked by " ++ var
+
+checkDirectory :: Maybe FilePath -> IO ()
+checkDirectory mdir = do
+	v <- getEnv "GIT_ANNEX_SHELL_DIRECTORY"
+	case (v, mdir) of
+		(Nothing, _) -> noop
+		(Just d, Nothing) -> req d Nothing
+		(Just d, Just dir)
+			|  d `equalFilePath` dir -> noop
+			| otherwise -> do
+				home <- myHomeDir
+				d' <- canondir home d
+				dir' <- canondir home dir
+				if d' `equalFilePath` dir'
+					then noop
+					else req d' (Just dir')
+  where
+	req d mdir' = error $ unwords 
+		[ "Only allowed to access"
+		, d
+		, maybe "and could not determine directory from command line" ("not " ++) mdir'
+		]
+
+	{- A directory may start with ~/ or in some cases, even /~/,
+	 - or could just be relative to home, or of course could
+	 - be absolute. -}
+	canondir home d
+		| "~/" `isPrefixOf` d = return d
+		| "/~/" `isPrefixOf` d = return $ drop 1 d
+		| otherwise = relHome $ absPathFrom home d
+
+{- Modifies a Command to check that it is run in either a git-annex
+ - repository, or a repository with a gcrypt-id set. -}
+gitAnnexShellCheck :: Command -> Command
+gitAnnexShellCheck = addCheck okforshell . dontCheck repoExists
+  where
+	okforshell = unlessM (isInitialized <||> isJust . gcryptId <$> Annex.getGitConfig) $
+		error "Not a git-annex or gcrypt repository."
diff --git a/CmdLine/GitAnnexShell/Fields.hs b/CmdLine/GitAnnexShell/Fields.hs
--- a/CmdLine/GitAnnexShell/Fields.hs
+++ b/CmdLine/GitAnnexShell/Fields.hs
@@ -34,3 +34,6 @@
 
 direct :: Field
 direct = Field "direct" $ \f -> f == "1"
+
+autoInit :: Field
+autoInit = Field "autoinit" $ \f -> f == "1"
diff --git a/CmdLine/Seek.hs b/CmdLine/Seek.hs
--- a/CmdLine/Seek.hs
+++ b/CmdLine/Seek.hs
@@ -33,11 +33,11 @@
 withFilesInGit a params = seekActions $ prepFiltered a $
 	seekHelper LsFiles.inRepo params
 
-withFilesInGitNonRecursive :: (FilePath -> CommandStart) -> CmdParams -> CommandSeek
-withFilesInGitNonRecursive a params = ifM (Annex.getState Annex.force)
+withFilesInGitNonRecursive :: String -> (FilePath -> CommandStart) -> CmdParams -> CommandSeek
+withFilesInGitNonRecursive needforce a params = ifM (Annex.getState Annex.force)
 	( withFilesInGit a params
 	, if null params
-		then needforce
+		then error needforce
 		else seekActions $ prepFiltered a (getfiles [] params)
 	)
   where
@@ -51,8 +51,7 @@
 			[] -> do
 				void $ liftIO $ cleanup
 				getfiles c ps
-			_ -> needforce
-	needforce = error "Not recursively setting metadata. Use --force to do that."
+			_ -> error needforce
 
 withFilesNotInGit :: Bool -> (FilePath -> CommandStart) -> CmdParams -> CommandSeek
 withFilesNotInGit skipdotfiles a params
diff --git a/Command/ConfigList.hs b/Command/ConfigList.hs
--- a/Command/ConfigList.hs
+++ b/Command/ConfigList.hs
@@ -14,9 +14,11 @@
 import qualified Annex.Branch
 import qualified Git.Config
 import Remote.GCrypt (coreGCryptId)
+import qualified CmdLine.GitAnnexShell.Fields as Fields
+import CmdLine.GitAnnexShell.Checks
 
 cmd :: Command
-cmd = noCommit $ 
+cmd = noCommit $ dontCheck repoExists $
 	command "configlist" SectionPlumbing 
 		"outputs relevant git configuration"
 		paramNothing (withParams seek)
@@ -34,14 +36,16 @@
 	showConfig k v = liftIO $ putStrLn $ k ++ "=" ++ v
 
 {- The repository may not yet have a UUID; automatically initialize it
- - when there's a git-annex branch available. -}
+ - when there's a git-annex branch available or if the autoinit field was
+ - set. -}
 findOrGenUUID :: Annex UUID
 findOrGenUUID = do
 	u <- getUUID
 	if u /= NoUUID
 		then return u
-		else ifM Annex.Branch.hasSibling
+		else ifM (Annex.Branch.hasSibling <||> (isJust <$> Fields.getField Fields.autoInit))
 			( do
+				liftIO checkNotReadOnly
 				initialize Nothing
 				getUUID
 			, return NoUUID
diff --git a/Command/Fsck.hs b/Command/Fsck.hs
--- a/Command/Fsck.hs
+++ b/Command/Fsck.hs
@@ -457,18 +457,12 @@
 
 {- Check if a key needs to be fscked, with support for incremental fscks. -}
 needFsck :: Incremental -> Key -> Annex Bool
+needFsck (ScheduleIncremental _ _ i) k = needFsck i k
 #ifdef WITH_DATABASE
 needFsck (ContIncremental h) key = liftIO $ not <$> FsckDb.inDb h key
 #endif
 needFsck _ _ = return True
 
-#ifdef WITH_DATABASE
-withFsckDb :: Incremental -> (FsckDb.FsckHandle -> Annex ()) -> Annex ()
-withFsckDb (ContIncremental h) a = a h
-withFsckDb (StartIncremental h) a = a h
-withFsckDb NonIncremental _ = noop
-#endif
-
 recordFsckTime :: Incremental -> Key -> Annex ()
 #ifdef WITH_DATABASE
 recordFsckTime inc key = withFsckDb inc $ \h -> liftIO $ FsckDb.addDb h key
@@ -527,7 +521,8 @@
 	= NonIncremental
 #ifdef WITH_DATABASE
 	| StartIncremental FsckDb.FsckHandle 
-	| ContIncremental FsckDb.FsckHandle 
+	| ContIncremental FsckDb.FsckHandle
+	| ScheduleIncremental Duration UUID Incremental
 #endif
 
 prepIncremental :: UUID -> Maybe IncrementalOpt -> Annex Incremental
@@ -536,31 +531,44 @@
 prepIncremental u (Just StartIncrementalO) = do
 	recordStartTime u
 	ifM (FsckDb.newPass u)
-		( StartIncremental <$> FsckDb.openDb u
+		( StartIncremental <$> openFsckDb u
 		, error "Cannot start a new --incremental fsck pass; another fsck process is already running."
 		)
 prepIncremental u (Just MoreIncrementalO) =
-	ContIncremental <$> FsckDb.openDb u
+	ContIncremental <$> openFsckDb u
 prepIncremental u (Just (ScheduleIncrementalO delta)) = do
-	Annex.addCleanup FsckCleanup $ do
-		v <- getStartTime u
-		case v of
-			Nothing -> noop
-			Just started -> do
-				now <- liftIO getPOSIXTime
-				when (now - realToFrac started >= durationToPOSIXTime delta) $
-					resetStartTime u
 	started <- getStartTime u
-	prepIncremental u $ Just $ case started of
+	i <- prepIncremental u $ Just $ case started of
 		Nothing -> StartIncrementalO
 		Just _ -> MoreIncrementalO
+	return (ScheduleIncremental delta u i)
 #else
 prepIncremental _ _ = error "This git-annex was not built with database support; incremental fsck not supported"
 #endif
 
 cleanupIncremental :: Incremental -> Annex ()
-#ifdef WITH_DATABASE
-cleanupIncremental i = withFsckDb i FsckDb.closeDb
-#else
+cleanupIncremental (ScheduleIncremental delta u i) = do
+	v <- getStartTime u
+	case v of
+		Nothing -> noop
+		Just started -> do
+			now <- liftIO getPOSIXTime
+			when (now - realToFrac started >= durationToPOSIXTime delta) $
+				resetStartTime u
+	cleanupIncremental i
 cleanupIncremental _ = return ()
+
+#ifdef WITH_DATABASE
+openFsckDb :: UUID -> Annex FsckDb.FsckHandle
+openFsckDb u = do
+	h <- FsckDb.openDb u
+	Annex.addCleanup FsckCleanup $
+		FsckDb.closeDb h
+	return h
+
+withFsckDb :: Incremental -> (FsckDb.FsckHandle -> Annex ()) -> Annex ()
+withFsckDb (ContIncremental h) a = a h
+withFsckDb (StartIncremental h) a = a h
+withFsckDb NonIncremental _ = noop
+withFsckDb (ScheduleIncremental _ _ i) a = withFsckDb i a
 #endif
diff --git a/Command/MetaData.hs b/Command/MetaData.hs
--- a/Command/MetaData.hs
+++ b/Command/MetaData.hs
@@ -27,12 +27,12 @@
 	, keyOptions :: Maybe KeyOptions
 	}
 
-data GetSet = Get MetaField | Set [ModMeta]
+data GetSet = Get MetaField | GetAll | Set [ModMeta]
 
 optParser :: CmdParamsDesc -> Parser MetaDataOptions
 optParser desc = MetaDataOptions
 	<$> cmdParams desc
-	<*> ((Get <$> getopt) <|> (Set <$> many modopts))
+	<*> ((Get <$> getopt) <|> (Set <$> some modopts) <|> pure GetAll)
 	<*> optional (parseKeyOptions False)
   where
 	getopt = option (eitherReader mkMetaField)
@@ -57,7 +57,9 @@
 	now <- liftIO getPOSIXTime
 	let seeker = case getSet o of
 		Get _ -> withFilesInGit
+		GetAll -> withFilesInGit
 		Set _ -> withFilesInGitNonRecursive
+			"Not recursively setting metadata. Use --force to do that."
 	withKeyOptions (keyOptions o) False
 		(startKeys now o)
 		(seeker $ whenAnnexed $ start now o)
@@ -71,23 +73,24 @@
 
 start' :: AssociatedFile -> POSIXTime -> MetaDataOptions -> Key -> CommandStart
 start' afile now o k = case getSet o of
-	Set ms -> do
-		showStart' "metadata" k afile
-		next $ perform now ms k
 	Get f -> do
 		l <- S.toList . currentMetaDataValues f <$> getCurrentMetaData k
 		liftIO $ forM_ l $
 			putStrLn . fromMetaValue
 		stop
+	_ -> do
+		showStart' "metadata" k afile
+		next $ perform now o k
 
-perform :: POSIXTime -> [ModMeta] -> Key -> CommandPerform
-perform _ [] k = next $ cleanup k
-perform now ms k = do
-	oldm <- getCurrentMetaData k
-	let m = combineMetaData $ map (modMeta oldm) ms
-	addMetaData' k m now
-	next $ cleanup k
-	
+perform :: POSIXTime -> MetaDataOptions -> Key -> CommandPerform
+perform now o k = case getSet o of
+	Set ms -> do
+		oldm <- getCurrentMetaData k
+		let m = combineMetaData $ map (modMeta oldm) ms
+		addMetaData' k m now
+		next $ cleanup k
+	_ -> next $ cleanup k
+
 cleanup :: Key -> CommandCleanup
 cleanup k = do
 	l <- map unwrapmeta . fromMetaData <$> getCurrentMetaData k
diff --git a/Command/Proxy.hs b/Command/Proxy.hs
--- a/Command/Proxy.hs
+++ b/Command/Proxy.hs
@@ -13,9 +13,13 @@
 import Utility.Tmp
 import Utility.Env
 import Annex.Direct
+import qualified Git
 import qualified Git.Sha
 import qualified Git.Ref
 import qualified Git.Branch
+import qualified Git.LsFiles
+import Git.FilePath
+import Utility.CopyFile
 
 cmd :: Command
 cmd = notBareRepo $
@@ -37,13 +41,41 @@
   where
 	go tmp = do
 		oldref <- fromMaybe Git.Sha.emptyTree
-			<$> inRepo Git.Ref.headSha
+			<$> (inRepo . maybe Git.Ref.headSha Git.Ref.sha
+				=<< inRepo Git.Branch.currentUnsafe)
+		
 		exitcode <- proxy tmp
-		mergeDirectCleanup tmp oldref
+
+		cleanupproxy tmp oldref
+
 		return exitcode
+	
 	proxy tmp = do
 		usetmp <- liftIO $ Just . addEntry "GIT_WORK_TREE" tmp  <$> getEnvironment
+
+		-- Set up the tmp work tree, to contain both a checkout of all
+		-- staged files as well as hard links (or copies) of any
+		-- unstaged files.
 		unlessM (isNothing <$> inRepo Git.Branch.current) $
 			unlessM (liftIO $ boolSystemEnv "git" [Param "checkout", Param "--", Param "."] usetmp) $
 				error "Failed to set up proxy work tree."
+		top <- fromRepo Git.repoPath
+		(fs, cleanup) <- inRepo $ Git.LsFiles.notInRepo True [top]
+		forM_ fs $ \f -> do
+			tf <- inRepo $ toTopFilePath f
+			let tmpf = tmp </> getTopFilePath tf
+			liftIO $ do
+				createDirectoryIfMissing True (takeDirectory tmpf)
+				createLinkOrCopy f tmpf
+		liftIO $ void cleanup
+
 		liftIO $ safeSystemEnv c (map Param ps) usetmp
+		
+	-- To merge the changes made by the proxied command into
+	-- the work tree is similar to cleaning up after a
+	-- direct mode merge. But, here we force updates of any
+	-- non-annxed files that were changed by the proxied
+	-- command.
+	cleanupproxy tmp oldref = do
+		updateWorkTree tmp oldref True
+		liftIO $ removeDirectoryRecursive tmp
diff --git a/Command/RecvKey.hs b/Command/RecvKey.hs
--- a/Command/RecvKey.hs
+++ b/Command/RecvKey.hs
@@ -9,8 +9,8 @@
 
 import Common.Annex
 import Command
-import CmdLine
 import Annex.Content
+import Annex.Action
 import Annex
 import Utility.Rsync
 import Logs.Transfer
diff --git a/Command/Sync.hs b/Command/Sync.hs
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -137,19 +137,24 @@
 remoteBranch remote = Git.Ref.underBase $ "refs/remotes/" ++ Remote.name remote
 
 syncRemotes :: [String] -> Annex [Remote]
-syncRemotes rs = ifM (Annex.getState Annex.fast) ( nub <$> pickfast , wanted )
+syncRemotes ps = do
+	-- Get remote list first, doing automatic initialization
+	-- of remotes when possible.
+	syncRemotes' ps =<< Remote.remoteList' True
+
+syncRemotes' :: [String] -> [Remote] -> Annex [Remote]
+syncRemotes' ps remotelist = ifM (Annex.getState Annex.fast) ( nub <$> pickfast , wanted )
   where
-	pickfast = (++) <$> listed <*> (filterM good =<< fastest <$> available)
+	pickfast = (++) <$> listed <*> (filterM good (fastest available))
 	
 	wanted
-		| null rs = filterM good =<< concat . Remote.byCost <$> available
+		| null ps = filterM good (concat $ Remote.byCost available)
 		| otherwise = listed
 	
-	listed = concat <$> mapM Remote.byNameOrGroup rs
+	listed = concat <$> mapM Remote.byNameOrGroup ps
 	
 	available = filter (remoteAnnexSync . Remote.gitconfig)
-		. filter (not . Remote.isXMPPRemote)
-		<$> Remote.remoteList
+		$ filter (not . Remote.isXMPPRemote) remotelist
 	
 	good r
 		| Remote.gitSyncableRemote r = Remote.Git.repoAvail $ Remote.repo r
diff --git a/Database/Fsck.hs b/Database/Fsck.hs
--- a/Database/Fsck.hs
+++ b/Database/Fsck.hs
@@ -34,6 +34,7 @@
 
 import Database.Persist.TH
 import Database.Esqueleto hiding (Key)
+import Data.Time.Clock
 
 data FsckHandle = FsckHandle H.DbHandle UUID
 
@@ -84,10 +85,17 @@
 	unlockFile =<< fromRepo (gitAnnexFsckDbLock u)
 
 addDb :: FsckHandle -> Key -> IO ()
-addDb (FsckHandle h _) k = H.queueDb h 1000 $ 
+addDb (FsckHandle h _) k = H.queueDb h checkcommit $ 
 	void $ insertUnique $ Fscked sk
   where
 	sk = toSKey k
+
+	-- commit queue after 1000 files or 5 minutes, whichever comes first
+	checkcommit sz lastcommittime
+		| sz > 1000 = return True
+		| otherwise = do
+			now <- getCurrentTime
+			return $ diffUTCTime lastcommittime now > 300
 
 inDb :: FsckHandle -> Key -> IO Bool
 inDb (FsckHandle h _) = H.queryDb h . inDb' . toSKey
diff --git a/Database/Handle.hs b/Database/Handle.hs
--- a/Database/Handle.hs
+++ b/Database/Handle.hs
@@ -20,6 +20,7 @@
 ) where
 
 import Utility.Exception
+import Utility.Monad
 import Messages
 
 import Database.Persist.Sqlite
@@ -33,6 +34,7 @@
 import Control.Monad.Trans.Resource (runResourceT)
 import Control.Monad.Logger (runNoLoggingT)
 import Data.List
+import Data.Time.Clock
 
 {- A DbHandle is a reference to a worker thread that communicates with
  - the database. It has a MVar which Jobs are submitted to. -}
@@ -64,7 +66,7 @@
 openDb db tablename = do
 	jobs <- newEmptyMVar
 	worker <- async (workerThread (T.pack db) tablename jobs)
-	q <- newMVar emptyDbQueue
+	q <- newMVar =<< emptyDbQueue
 	return $ DbHandle worker jobs q
 
 data Job
@@ -145,16 +147,19 @@
 
 type Size = Int
 
+type LastCommitTime = UTCTime
+
 {- A queue of actions to perform, with a count of the number of actions
- - queued. -}
-data DbQueue = DbQueue Size (SqlPersistM ())
+ - queued, and a last commit time. -}
+data DbQueue = DbQueue Size LastCommitTime (SqlPersistM ())
 
-emptyDbQueue :: DbQueue
-emptyDbQueue = DbQueue 0 (return ())
+emptyDbQueue :: IO DbQueue
+emptyDbQueue = do
+	now <- getCurrentTime
+	return $ DbQueue 0 now (return ())
 
 {- Queues a change to be made to the database. It will be buffered
- - to be committed later, unless the queue gets larger than the specified
- - size.
+ - to be committed later, unless the commitchecker action returns true.
  -
  - (Be sure to call closeDb or flushQueueDb to ensure the change
  - gets committed.)
@@ -164,25 +169,32 @@
  - process, the transaction is put back in the queue. This solves
  - the sqlite multiple writer problem.
  -}
-queueDb :: DbHandle -> Size -> SqlPersistM () -> IO ()
-queueDb h@(DbHandle _ _ qvar) maxsz a = do
-	DbQueue sz qa <- takeMVar qvar
+queueDb 
+	:: DbHandle
+	-> (Size -> LastCommitTime -> IO Bool) 
+	-> SqlPersistM ()
+	-> IO ()
+queueDb h@(DbHandle _ _ qvar) commitchecker a = do
+	DbQueue sz lastcommittime qa <- takeMVar qvar
 	let !sz' = sz + 1
 	let qa' = qa >> a
-	let enqueue newsz = putMVar qvar (DbQueue newsz qa')
-	if sz' > maxsz
-		then do
+	let enqueue = putMVar qvar
+	ifM (commitchecker sz' lastcommittime)
+		( do
 			r <- commitDb h qa'
 			case r of
-				Left _ -> enqueue 0
-				Right _ -> putMVar qvar emptyDbQueue
-		else enqueue sz'
+				Left _ -> enqueue $ DbQueue sz' lastcommittime qa'
+				Right _ -> do
+					now <- getCurrentTime
+					enqueue $ DbQueue 0 now (return ())
+		, enqueue $ DbQueue sz' lastcommittime qa'
+		)
 
 {- If flushing the queue fails, this could be because there is another
  - writer to the database. Retry repeatedly for up to 10 seconds. -}
 flushQueueDb :: DbHandle -> IO ()
 flushQueueDb h@(DbHandle _ _ qvar) = do
-	DbQueue sz qa <- takeMVar qvar	
+	DbQueue sz _ qa <- takeMVar qvar	
 	when (sz > 0) $
 		robustly Nothing 100 (commitDb h qa)
   where
diff --git a/Git/UnionMerge.hs b/Git/UnionMerge.hs
--- a/Git/UnionMerge.hs
+++ b/Git/UnionMerge.hs
@@ -93,7 +93,7 @@
 	-- FileSystemEncoding for this is a hack, but ensures there
 	-- are no decoding errors. Note that this works because
 	-- hashObject sets fileEncoding on its write handle.
-	getcontents s = lines . encodeW8 . L.unpack <$> catObject h s
+	getcontents s = lines . encodeW8NUL . L.unpack <$> catObject h s
 
 {- Calculates a union merge between a list of refs, with contents.
  -
diff --git a/Limit.hs b/Limit.hs
--- a/Limit.hs
+++ b/Limit.hs
@@ -13,6 +13,7 @@
 import qualified Remote
 import qualified Backend
 import Annex.Content
+import Annex.Action
 import Annex.UUID
 import Logs.Trust
 import Annex.NumCopies
@@ -271,6 +272,7 @@
 		if now > cutoff
 			then do
 				warning $ "Time limit (" ++ s ++ ") reached!"
+				shutdown True
 				liftIO $ exitWith $ ExitFailure 101
 			else return True
 
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -212,7 +212,7 @@
 # and not overwritten.)
 	cp -uR tmp/splices/* tmp/androidtree || true
 # Some additional dependencies needed by the expanded splices.
-	sed -i 's/^  Build-Depends: */  Build-Depends: yesod-core, shakespeare, blaze-markup, file-embed, wai-app-static, wai, unordered-containers, /' tmp/androidtree/git-annex.cabal
+	sed -i 's/^  Build-Depends: */  Build-Depends: yesod-core, yesod-routes, shakespeare, blaze-markup, file-embed, wai-app-static, wai, unordered-containers, /' tmp/androidtree/git-annex.cabal
 # Avoid warnings due to sometimes unused imports added for the splices.
 	sed -i 's/GHC-Options: \(.*\)-Wall/GHC-Options: \1-Wall -fno-warn-unused-imports /i' tmp/androidtree/git-annex.cabal
 	sed -i 's/Extensions: /Extensions: MagicHash /i' tmp/androidtree/git-annex.cabal
diff --git a/Remote.hs b/Remote.hs
--- a/Remote.hs
+++ b/Remote.hs
@@ -20,6 +20,7 @@
 
 	remoteTypes,
 	remoteList,
+	remoteList',
 	gitSyncableRemote,
 	remoteMap,
 	remoteMap',
diff --git a/Remote/BitTorrent.hs b/Remote/BitTorrent.hs
--- a/Remote/BitTorrent.hs
+++ b/Remote/BitTorrent.hs
@@ -43,8 +43,8 @@
 }
 
 -- There is only one bittorrent remote, and it always exists.
-list :: Annex [Git.Repo]
-list = do
+list :: Bool -> Annex [Git.Repo]
+list _autoinit = do
 	r <- liftIO $ Git.Construct.remoteNamed "bittorrent" (pure Git.Construct.fromUnknown)
 	return [r]
 
diff --git a/Remote/Bup.hs b/Remote/Bup.hs
--- a/Remote/Bup.hs
+++ b/Remote/Bup.hs
@@ -36,7 +36,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "bup",
-	enumerate = findSpecialRemotes "buprepo",
+	enumerate = const (findSpecialRemotes "buprepo"),
 	generate = gen,
 	setup = bupSetup
 }
@@ -270,7 +270,7 @@
 bupRef :: Key -> String
 bupRef k
 	| Git.Ref.legal True shown = shown
-	| otherwise = "git-annex-" ++ show (sha256 (fromString shown))
+	| otherwise = "git-annex-" ++ show (sha2_256 (fromString shown))
   where
 	shown = key2file k
 
diff --git a/Remote/Ddar.hs b/Remote/Ddar.hs
--- a/Remote/Ddar.hs
+++ b/Remote/Ddar.hs
@@ -31,7 +31,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "ddar",
-	enumerate = findSpecialRemotes "ddarrepo",
+	enumerate = const (findSpecialRemotes "ddarrepo"),
 	generate = gen,
 	setup = ddarSetup
 }
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -33,7 +33,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "directory",
-	enumerate = findSpecialRemotes "directory",
+	enumerate = const (findSpecialRemotes "directory"),
 	generate = gen,
 	setup = directorySetup
 }
diff --git a/Remote/External.hs b/Remote/External.hs
--- a/Remote/External.hs
+++ b/Remote/External.hs
@@ -34,7 +34,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "external",
-	enumerate = findSpecialRemotes "externaltype",
+	enumerate = const (findSpecialRemotes "externaltype"),
 	generate = gen,
 	setup = externalSetup
 }
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -54,7 +54,7 @@
 	typename = "gcrypt",
 	-- Remote.Git takes care of enumerating gcrypt remotes too,
 	-- and will call our gen on them.
-	enumerate = return [],
+	enumerate = const (return []),
 	generate = gen,
 	setup = gCryptSetup
 }
diff --git a/Remote/Git.hs b/Remote/Git.hs
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -67,11 +67,11 @@
 	setup = gitSetup
 }
 
-list :: Annex [Git.Repo]
-list = do
+list :: Bool -> Annex [Git.Repo]
+list autoinit = do
 	c <- fromRepo Git.config
 	rs <- mapM (tweakurl c) =<< fromRepo Git.remotes
-	mapM configRead rs
+	mapM (configRead autoinit) rs
   where
 	annexurl n = "remote." ++ n ++ ".annexurl"
 	tweakurl c r = do
@@ -116,14 +116,14 @@
  -
  - Conversely, the config of an URL remote is only read when there is no
  - cached UUID value. -}
-configRead :: Git.Repo -> Annex Git.Repo
-configRead r = do
+configRead :: Bool -> Git.Repo -> Annex Git.Repo
+configRead autoinit r = do
 	gc <- Annex.getRemoteGitConfig r
 	u <- getRepoUUID r
 	case (repoCheap r, remoteAnnexIgnore gc, u) of
 		(_, True, _) -> return r
-		(True, _, _) -> tryGitConfigRead r
-		(False, _, NoUUID) -> tryGitConfigRead r
+		(True, _, _) -> tryGitConfigRead autoinit r
+		(False, _, NoUUID) -> tryGitConfigRead autoinit r
 		_ -> return r
 
 gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
@@ -196,11 +196,12 @@
 
 {- Tries to read the config for a specified remote, updates state, and
  - returns the updated repo. -}
-tryGitConfigRead :: Git.Repo -> Annex Git.Repo
-tryGitConfigRead r 
+tryGitConfigRead :: Bool -> Git.Repo -> Annex Git.Repo
+tryGitConfigRead autoinit r 
 	| haveconfig r = return r -- already read
 	| Git.repoIsSsh r = store $ do
-		v <- Ssh.onRemote r (pipedconfig, return (Left $ error "configlist failed")) "configlist" [] []
+		liftIO $ print autoinit
+		v <- Ssh.onRemote r (pipedconfig, return (Left $ error "configlist failed")) "configlist" [] configlistfields
 		case v of
 			Right r'
 				| haveconfig r' -> return r'
@@ -302,6 +303,10 @@
 			Annex.BranchState.disableUpdate
 			void $ tryNonAsync $ ensureInitialized
 			Annex.getState Annex.repo
+		
+	configlistfields = if autoinit
+		then [(Fields.autoInit, "1")]
+		else []
 
 {- Checks if a given remote has the content for a key in its annex. -}
 inAnnex :: Remote -> Key -> Annex Bool
diff --git a/Remote/Glacier.hs b/Remote/Glacier.hs
--- a/Remote/Glacier.hs
+++ b/Remote/Glacier.hs
@@ -31,7 +31,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "glacier",
-	enumerate = findSpecialRemotes "glacier",
+	enumerate = const (findSpecialRemotes "glacier"),
 	generate = gen,
 	setup = glacierSetup
 }
diff --git a/Remote/Hook.hs b/Remote/Hook.hs
--- a/Remote/Hook.hs
+++ b/Remote/Hook.hs
@@ -27,7 +27,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "hook",
-	enumerate = findSpecialRemotes "hooktype",
+	enumerate = const (findSpecialRemotes "hooktype"),
 	generate = gen,
 	setup = hookSetup
 }
diff --git a/Remote/List.hs b/Remote/List.hs
--- a/Remote/List.hs
+++ b/Remote/List.hs
@@ -72,14 +72,19 @@
 remoteList = do
 	rs <- Annex.getState Annex.remotes
 	if null rs
-		then do
-			m <- readRemoteLog
-			rs' <- concat <$> mapM (process m) remoteTypes
-			Annex.changeState $ \s -> s { Annex.remotes = rs' }
-			return rs'
+		then remoteList' False
 		else return rs
+
+remoteList' :: Bool -> Annex [Remote]
+remoteList' autoinit = do
+	m <- readRemoteLog
+	rs <- concat <$> mapM (process m) remoteTypes
+	Annex.changeState $ \s -> s { Annex.remotes = rs }
+	return rs
   where
-	process m t = enumerate t >>= mapM (remoteGen m t) >>= return . catMaybes
+	process m t = enumerate t autoinit 
+		>>= mapM (remoteGen m t) 
+		>>= return . catMaybes
 
 {- Forces the remoteList to be re-generated, re-reading the git config. -}
 remoteListRefresh :: Annex [Remote]
@@ -109,7 +114,7 @@
   where
 	updaterepo r
 		| Git.repoIsLocal r || Git.repoIsLocalUnknown r =
-			Remote.Git.configRead r
+			Remote.Git.configRead False r
 		| otherwise = return r
 
 {- Checks if a remote is syncable using git. -}
diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs
--- a/Remote/Rsync.hs
+++ b/Remote/Rsync.hs
@@ -33,8 +33,6 @@
 import Utility.CopyFile
 import Messages.Progress
 import Utility.Metered
-import Utility.PID
-import Annex.Perms
 import Logs.Transfer
 import Types.Creds
 import Types.Key (isChunkKey)
@@ -46,7 +44,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "rsync",
-	enumerate = findSpecialRemotes "rsyncurl",
+	enumerate = const (findSpecialRemotes "rsyncurl"),
 	generate = gen,
 	setup = rsyncSetup
 }
diff --git a/Remote/S3.hs b/Remote/S3.hs
--- a/Remote/S3.hs
+++ b/Remote/S3.hs
@@ -54,7 +54,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "S3",
-	enumerate = findSpecialRemotes "s3",
+	enumerate = const (findSpecialRemotes "s3"),
 	generate = gen,
 	setup = s3Setup
 }
diff --git a/Remote/Tahoe.hs b/Remote/Tahoe.hs
--- a/Remote/Tahoe.hs
+++ b/Remote/Tahoe.hs
@@ -53,7 +53,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "tahoe",
-	enumerate = findSpecialRemotes "tahoe",
+	enumerate = const (findSpecialRemotes "tahoe"),
 	generate = gen,
 	setup = tahoeSetup
 }
diff --git a/Remote/Web.hs b/Remote/Web.hs
--- a/Remote/Web.hs
+++ b/Remote/Web.hs
@@ -36,8 +36,8 @@
 -- There is only one web remote, and it always exists.
 -- (If the web should cease to exist, remove this module and redistribute
 -- a new release to the survivors by carrier pigeon.)
-list :: Annex [Git.Repo]
-list = do
+list :: Bool -> Annex [Git.Repo]
+list _autoinit = do
 	r <- liftIO $ Git.Construct.remoteNamed "web" (pure Git.Construct.fromUnknown)
 	return [r]
 
diff --git a/Remote/WebDAV.hs b/Remote/WebDAV.hs
--- a/Remote/WebDAV.hs
+++ b/Remote/WebDAV.hs
@@ -36,7 +36,7 @@
 remote :: RemoteType
 remote = RemoteType {
 	typename = "webdav",
-	enumerate = findSpecialRemotes "webdav",
+	enumerate = const (findSpecialRemotes "webdav"),
 	generate = gen,
 	setup = webdavSetup
 }
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -27,13 +27,13 @@
 	}
 
 myPostCopy :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO ()
-myPostCopy _ (CopyFlags { copyVerbosity }) pkg lbi = do
+myPostCopy _ flags pkg lbi = do
 	installGitAnnexShell dest verbosity pkg lbi
 	installManpages      dest verbosity pkg lbi
 	installDesktopFile   dest verbosity pkg lbi
   where
-	dest      = NoCopyDest
-	verbosity = fromFlag copyVerbosity
+	dest      = fromFlag $ copyDest flags
+	verbosity = fromFlag $ copyVerbosity flags
 
 installGitAnnexShell :: CopyDest -> Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
 installGitAnnexShell copyDest verbosity pkg lbi =
@@ -62,7 +62,9 @@
 	srcManDir   = "man"
 
 installDesktopFile :: CopyDest -> Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
-installDesktopFile copyDest _verbosity pkg lbi =
-	DesktopFile.install $ dstBinDir </> "git-annex"
+installDesktopFile copyDest _verbosity pkg lbi
+	| progfile copyDest == progfile NoCopyDest =
+		DesktopFile.install (progfile copyDest)
+	| otherwise = return ()
   where
-	dstBinDir = bindir $ absoluteInstallDirs pkg lbi copyDest
+	progfile cd = bindir (absoluteInstallDirs pkg lbi cd) </> "git-annex"
diff --git a/Types/MetaData.hs b/Types/MetaData.hs
--- a/Types/MetaData.hs
+++ b/Types/MetaData.hs
@@ -270,10 +270,16 @@
 		legal k _v = legalField $ fromMetaField k
 
 instance Arbitrary MetaValue where
-	arbitrary = MetaValue <$> arbitrary <*> arbitrary
+	arbitrary = MetaValue 
+		<$> arbitrary
+		-- Avoid non-ascii metavalues because fully arbitrary
+		-- strings may not be encoded using the filesystem
+		-- encoding, which is norally applied to all input.
+		<*> arbitrary `suchThat` all isAscii
 
 instance Arbitrary MetaField where
-	arbitrary = MetaField . CI.mk <$> arbitrary `suchThat` legalField 
+	arbitrary = MetaField . CI.mk 
+		<$> arbitrary `suchThat` legalField 
 
 prop_metadata_sane :: MetaData -> MetaField -> MetaValue -> Bool
 prop_metadata_sane m f v = and
diff --git a/Types/Remote.hs b/Types/Remote.hs
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -40,7 +40,8 @@
 	-- human visible type name
 	typename :: String,
 	-- enumerates remotes of this type
-	enumerate :: a [Git.Repo],
+	-- The Bool is True if automatic initialization of remotes is desired
+	enumerate :: Bool -> a [Git.Repo],
 	-- generates a remote of this type
 	generate :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> a (Maybe (RemoteA a)),
 	-- initializes or changes a remote
diff --git a/Utility/Base64.hs b/Utility/Base64.hs
--- a/Utility/Base64.hs
+++ b/Utility/Base64.hs
@@ -1,5 +1,8 @@
 {- Simple Base64 encoding of Strings
  -
+ - Note that this uses the FileSystemEncoding, so it can be used on Strings
+ - that repesent filepaths containing arbitrarily encoded characters.
+ -
  - Copyright 2011, 2015 Joey Hess <id@joeyh.name>
  -
  - License: BSD-2-clause
@@ -7,15 +10,19 @@
 
 module Utility.Base64 (toB64, fromB64Maybe, fromB64, prop_b64_roundtrips) where
 
+import Utility.FileSystemEncoding
+
 import qualified "sandi" Codec.Binary.Base64 as B64
 import Data.Maybe
+import qualified Data.ByteString.Lazy as L
 import Data.ByteString.UTF8 (fromString, toString)
+import Data.Char
 
 toB64 :: String -> String	
-toB64 = toString . B64.encode . fromString
+toB64 = toString . B64.encode . L.toStrict . encodeBS
 
 fromB64Maybe :: String -> Maybe String
-fromB64Maybe s = either (const Nothing) (Just . toString)
+fromB64Maybe s = either (const Nothing) (Just . decodeBS . L.fromStrict)
 	(B64.decode $ fromString s)
 
 fromB64 :: String -> String
@@ -23,5 +30,10 @@
   where
 	bad = error "bad base64 encoded data"
 
+-- Only ascii strings are tested, because an arbitrary string may contain
+-- characters not encoded using the FileSystemEncoding, which would thus
+-- not roundtrip, as fromB64 always generates an output encoded that way.
 prop_b64_roundtrips :: String -> Bool
-prop_b64_roundtrips s = s == fromB64 (toB64 s)
+prop_b64_roundtrips s
+	| all (isAscii) s = s == fromB64 (toB64 s)
+	| otherwise = True
diff --git a/Utility/Directory.hs b/Utility/Directory.hs
--- a/Utility/Directory.hs
+++ b/Utility/Directory.hs
@@ -13,7 +13,6 @@
 import System.IO.Error
 import System.Directory
 import Control.Monad
-import Control.Monad.IfElse
 import System.FilePath
 import Control.Applicative
 import Control.Concurrent
@@ -25,10 +24,11 @@
 import qualified System.Win32 as Win32
 #else
 import qualified System.Posix as Posix
+import Utility.SafeCommand
+import Control.Monad.IfElse
 #endif
 
 import Utility.PosixFiles
-import Utility.SafeCommand
 import Utility.Tmp
 import Utility.Exception
 import Utility.Monad
@@ -126,7 +126,7 @@
 #else
 			r <- tryIO $ copyFile src tmp
 			let (ok, e') = case r of
-				Left e' -> (False, e')
+				Left err -> (False, err)
 				Right _ -> (True, e)
 #endif
 			unless ok $ do
diff --git a/Utility/FileSystemEncoding.hs b/Utility/FileSystemEncoding.hs
--- a/Utility/FileSystemEncoding.hs
+++ b/Utility/FileSystemEncoding.hs
@@ -13,6 +13,7 @@
 	withFilePath,
 	md5FilePath,
 	decodeBS,
+	encodeBS,
 	decodeW8,
 	encodeW8,
 	encodeW8NUL,
@@ -34,6 +35,8 @@
 import qualified Data.ByteString.Lazy.UTF8 as L8
 #endif
 
+import Utility.Exception
+
 {- Sets a Handle to use the filesystem encoding. This causes data
  - written or read from it to be encoded/decoded the same
  - as ghc 7.4 does to filenames etc. This special encoding
@@ -67,12 +70,16 @@
  - only allows doing this conversion with CStrings, and the CString buffer
  - is allocated, used, and deallocated within the call, with no side
  - effects.
+ -
+ - If the FilePath contains a value that is not legal in the filesystem
+ - encoding, rather than thowing an exception, it will be returned as-is.
  -}
 {-# NOINLINE _encodeFilePath #-}
 _encodeFilePath :: FilePath -> String
 _encodeFilePath fp = unsafePerformIO $ do
 	enc <- Encoding.getFileSystemEncoding
-	GHC.withCString enc fp $ GHC.peekCString Encoding.char8
+	GHC.withCString enc fp (GHC.peekCString Encoding.char8)
+		`catchNonAsync` (\_ -> return fp)
 
 {- Encodes a FilePath into a Md5.Str, applying the filesystem encoding. -}
 md5FilePath :: FilePath -> MD5.Str
@@ -81,11 +88,19 @@
 {- Decodes a ByteString into a FilePath, applying the filesystem encoding. -}
 decodeBS :: L.ByteString -> FilePath
 #ifndef mingw32_HOST_OS
-decodeBS = encodeW8 . L.unpack
+decodeBS = encodeW8NUL . L.unpack
 #else
 {- On Windows, we assume that the ByteString is utf-8, since Windows
  - only uses unicode for filenames. -}
 decodeBS = L8.toString
+#endif
+
+{- Encodes a FilePath into a ByteString, applying the filesystem encoding. -}
+encodeBS :: FilePath -> L.ByteString
+#ifndef mingw32_HOST_OS
+encodeBS = L.pack . decodeW8NUL
+#else
+encodeBS = L8.fromString
 #endif
 
 {- Converts a [Word8] to a FilePath, encoding using the filesystem encoding.
diff --git a/Utility/Hash.hs b/Utility/Hash.hs
--- a/Utility/Hash.hs
+++ b/Utility/Hash.hs
@@ -1,11 +1,23 @@
-{- Convenience wrapper around cryptohash. -}
+{- Convenience wrapper around cryptohash/cryptonite.
+ -
+ - SHA3 hashes are currently only enabled when using cryptonite,
+ - because of https://github.com/vincenthz/hs-cryptohash/issues/36
+ -}
 
+{-# LANGUAGE CPP #-}
+
 module Utility.Hash (
 	sha1,
-	sha224,
-	sha256,
-	sha384,
-	sha512,
+	sha2_224,
+	sha2_256,
+	sha2_384,
+	sha2_512,
+#ifdef WITH_CRYPTONITE
+	sha3_224,
+	sha3_256,
+	sha3_384,
+	sha3_512,
+#endif
 	skein256,
 	skein512,
 	md5,
@@ -20,26 +32,39 @@
 import qualified Data.Text.Encoding as T
 import qualified Data.ByteString as S
 import Crypto.Hash
+#ifdef WITH_CRYPTONITE
+import Crypto.MAC.HMAC
+#endif
 
 sha1 :: L.ByteString -> Digest SHA1
 sha1 = hashlazy
 
-sha224 :: L.ByteString -> Digest SHA224
-sha224 = hashlazy
+sha2_224 :: L.ByteString -> Digest SHA224
+sha2_224 = hashlazy
 
-sha256 :: L.ByteString -> Digest SHA256
-sha256 = hashlazy
+sha2_256 :: L.ByteString -> Digest SHA256
+sha2_256 = hashlazy
 
-sha384 :: L.ByteString -> Digest SHA384
-sha384 = hashlazy
+sha2_384 :: L.ByteString -> Digest SHA384
+sha2_384 = hashlazy
 
-sha512 :: L.ByteString -> Digest SHA512
-sha512 = hashlazy
+sha2_512 :: L.ByteString -> Digest SHA512
+sha2_512 = hashlazy
 
--- sha3 is not yet fully standardized
---sha3 :: L.ByteString -> Digest SHA3
---sha3 = hashlazy
+#ifdef WITH_CRYPTONITE
+sha3_224 :: L.ByteString -> Digest SHA3_224
+sha3_224 = hashlazy
 
+sha3_256 :: L.ByteString -> Digest SHA3_256
+sha3_256 = hashlazy
+
+sha3_384 :: L.ByteString -> Digest SHA3_384
+sha3_384 = hashlazy
+
+sha3_512 :: L.ByteString -> Digest SHA3_512
+sha3_512 = hashlazy
+#endif
+
 skein256 :: L.ByteString -> Digest Skein256_256
 skein256 = hashlazy
 
@@ -53,12 +78,18 @@
 prop_hashes_stable :: Bool
 prop_hashes_stable = all (\(hasher, result) -> hasher foo == result)
 	[ (show . sha1, "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33")
-	, (show . sha224, "0808f64e60d58979fcb676c96ec938270dea42445aeefcd3a4e6f8db")
-	, (show . sha256, "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae")
-	, (show . sha384, "98c11ffdfdd540676b1a137cb1a22b2a70350c9a44171d6b1180c6be5cbb2ee3f79d532c8a1dd9ef2e8e08e752a3babb")
-	, (show . sha512, "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7")
+	, (show . sha2_224, "0808f64e60d58979fcb676c96ec938270dea42445aeefcd3a4e6f8db")
+	, (show . sha2_256, "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae")
+	, (show . sha2_384, "98c11ffdfdd540676b1a137cb1a22b2a70350c9a44171d6b1180c6be5cbb2ee3f79d532c8a1dd9ef2e8e08e752a3babb")
+	, (show . sha2_512, "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7")
 	, (show . skein256, "a04efd9a0aeed6ede40fe5ce0d9361ae7b7d88b524aa19917b9315f1ecf00d33")
 	, (show . skein512, "fd8956898113510180aa4658e6c0ac85bd74fb47f4a4ba264a6b705d7a8e8526756e75aecda12cff4f1aca1a4c2830fbf57f458012a66b2b15a3dd7d251690a7")
+#ifdef WITH_CRYPTONITE
+	, (show . sha3_224, "f4f6779e153c391bbd29c95e72b0708e39d9166c7cea51d1f10ef58a")
+	, (show . sha3_256, "76d3bc41c9f588f7fcd0d5bf4718f8f84b1c41b20882703100b9eb9413807c01")
+	, (show . sha3_384, "665551928d13b7d84ee02734502b018d896a0fb87eed5adb4c87ba91bbd6489410e11b0fbcc06ed7d0ebad559e5d3bb5")
+	, (show . sha3_512, "4bca2b137edc580fe50a88983ef860ebaca36c857b1f492839d6d7392452a63c82cbebc68e3b70a2a1480b4bb5d437a7cba6ecf9d89f9ff3ccd14cd6146ea7e7")
+#endif
 	, (show . md5, "acbd18db4cc2f85cedef654fccc4a4d8")
 	]
   where
@@ -83,7 +114,10 @@
 	HmacSha384 -> use SHA384
 	HmacSha512 -> use SHA512
   where
-	use alg k m = show (hmacGetDigest (hmacAlg alg k m))
+	use alg k m = show (hmacGetDigest (hmacWitnessAlg alg k m))
+
+	hmacWitnessAlg :: HashAlgorithm a => a -> S.ByteString -> S.ByteString -> HMAC a
+	hmacWitnessAlg _ = hmac
 
 -- Check that all the MACs continue to produce the same.
 prop_mac_stable :: Bool
diff --git a/Utility/LockPool/Windows.hs b/Utility/LockPool/Windows.hs
--- a/Utility/LockPool/Windows.hs
+++ b/Utility/LockPool/Windows.hs
@@ -16,14 +16,7 @@
 import qualified Utility.LockFile.Windows as F
 import qualified Utility.LockPool.STM as P
 import Utility.LockPool.LockHandle
-import Utility.LockPool.STM (LockPool, LockFile, LockMode(..))
-import Utility.Monad
-
-import Control.Concurrent.STM
-import System.IO
-import Data.Maybe
-import Control.Applicative
-import Prelude
+import Utility.LockPool.STM (LockFile, LockMode(..))
 
 {- Tries to lock a file with a shared lock, which allows other processes to
  - also lock it shared. Fails if the file is exclusively locked. -}
diff --git a/Utility/Path.hs b/Utility/Path.hs
--- a/Utility/Path.hs
+++ b/Utility/Path.hs
@@ -30,8 +30,8 @@
 import Utility.Monad
 import Utility.UserInfo
 
-{- Simplifies a path, removing any ".." or ".", and removing the trailing
- - path separator.
+{- Simplifies a path, removing any "." component, collapsing "dir/..", 
+ - and removing the trailing path separator.
  -
  - On Windows, preserves whichever style of path separator might be used in
  - the input FilePaths. This is done because some programs in Windows
@@ -50,7 +50,8 @@
 
 	norm c [] = reverse c
 	norm c (p:ps)
-		| p' == ".." = norm (drop 1 c) ps
+		| p' == ".." && not (null c) && dropTrailingPathSeparator (c !! 0) /= ".." = 
+			norm (drop 1 c) ps
 		| p' == "." = norm c ps
 		| otherwise = norm (p:c) ps
 	  where
diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs
--- a/Utility/WebApp.hs
+++ b/Utility/WebApp.hs
@@ -185,7 +185,7 @@
 fromAuthToken = id
 #endif
 
-{- Generates a random sha512 string, encapsulated in a SecureMem,
+{- Generates a random sha2_512 string, encapsulated in a SecureMem,
  - suitable to be used for an authentication secret. -}
 genAuthToken :: IO AuthToken
 genAuthToken = do
@@ -193,7 +193,7 @@
 	return $
 		case genBytes 512 g of
 			Left e -> error $ "failed to generate auth token: " ++ show e
-			Right (s, _) -> toAuthToken $ T.pack $ show $ sha512 $ L.fromChunks [s]
+			Right (s, _) -> toAuthToken $ T.pack $ show $ sha2_512 $ L.fromChunks [s]
 
 {- A Yesod isAuthorized method, which checks the auth cgi parameter
  - against a token extracted from the Yesod application.
diff --git a/Utility/Yesod.hs b/Utility/Yesod.hs
--- a/Utility/Yesod.hs
+++ b/Utility/Yesod.hs
@@ -17,7 +17,7 @@
 	, widgetFile
 	, hamletTemplate
 #endif
-#if ! MIN_VERSION_yesod(1,4,0)
+#if ! MIN_VERSION_yesod_core(1,2,20)
 	, withUrlRenderer
 #endif
 	) where
diff --git a/debian/.changelog.swp b/debian/.changelog.swp
new file mode 100644
Binary files /dev/null and b/debian/.changelog.swp differ
diff --git a/debian/cabal-wrapper b/debian/cabal-wrapper
new file mode 100644
--- /dev/null
+++ b/debian/cabal-wrapper
@@ -0,0 +1,16 @@
+#!/bin/sh
+# It would be more usual to use:
+#   export CABAL=./Setup
+# But Setup currently has a very bad dependency resolver, and very bad
+# debugging output, and tends to eat all memory and die on small buildds.
+#
+# This should be revisited once Debian has a newer ghc than 7.6.3,
+# and hopefully gets the improved dependency resolver from cabal.
+set -e
+
+# Avoid cabal writing to HOME, and avoid local cabal settings
+# influencing the build.
+HOME=$(mktemp -d)
+export HOME
+
+cabal "$@"
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,46 @@
+git-annex (5.20150812) unstable; urgency=medium
+
+  * Added support for SHA3 hashed keys (in 8 varieties), when git-annex is
+    built using the cryptonite library.
+  * metadata: Fix reversion introduced in 5.20150727 that caused recursive
+    display of metadata to not work.
+  * Windows: Fix bug that caused git-annex sync to fail due to missing
+    environment variable.
+  * Fix setting/setting/viewing metadata that contains unicode or other
+    special characters, when in a non-unicode locale.
+  * Simplify setup process for a ssh remote. Now it suffices to run git
+    remote add, followed by git-annex sync. Now the remote is automatically
+    initialized for use by git-annex, where before the git-annex branch had
+    to manually be pushed before using git-annex sync. Note that this
+    involved changes to git-annex-shell, so if the remote is using an old
+    version, the manual push is still needed.
+  * git-annex-shell: Don't let configlist auto-init repository when in
+    readonly mode.
+  * Perform a clean shutdown when --time-limit is reached.
+    This includes running queued git commands, and cleanup actions normally
+    run when a command is finished.
+  * fsck: Commit incremental fsck database when --time-limit is reached.
+    Previously, some of the last files fscked did not make it into the
+    database when using --time-limit.
+  * fsck: Commit incremental fsck database after every 1000 files
+    fscked, or every 5 minutes, whichever comes first. Previously,
+    commits were made every 1000 files fscked.
+  * Linux standalone: Work around problem that prevented it from working
+    properly if unpacked into a directory that contains ":" or ";" in its
+    name.
+  * proxy: Fix proxy git commit of non-annexed files in direct mode. 
+  * proxy: If a non-proxied git command, such as git revert
+    would normally fail because of unstaged files in the work tree,
+    make the proxied command fail the same way.
+  * proxy: Fix removal of files deleted by the proxied command.
+  * proxy: Fix behavior when run in subdirectory of git repo.
+  * Improve Setup.hs file so that cabal copy --destdir works.
+    Thanks, Magnus Therning.
+  * Tighten dependency on optparse-applicative to 0.11.0.
+  * Added back debian/cabal-wrapper, since it still seems needed after all.
+
+ -- Joey Hess <id@joeyh.name>  Wed, 12 Aug 2015 11:14:58 -0400
+
 git-annex (5.20150731) unstable; urgency=medium
 
   * webapp: Support enabling known gitlab.com remotes.
diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -4,12 +4,13 @@
 Build-Depends: 
 	debhelper (>= 9),
 	ghc (>= 7.4),
+	cabal-install,
 	libghc-mtl-dev (>= 2.1.1),
 	libghc-missingh-dev,
 	libghc-data-default-dev,
 	libghc-hslogger-dev,
 	libghc-pcre-light-dev,
-	libghc-cryptohash-dev (>= 0.11.0),
+	libghc-cryptonite-dev | libghc-cryptohash-dev (>= 0.11.0),
 	libghc-sandi-dev,
 	libghc-utf8-string-dev,
 	libghc-aws-dev (>= 0.9.2-2~),
@@ -69,7 +70,7 @@
 	libghc-tasty-hunit-dev,
 	libghc-tasty-quickcheck-dev,
 	libghc-tasty-rerun-dev,
-	libghc-optparse-applicative-dev (>= 0.10),
+	libghc-optparse-applicative-dev (>= 0.11.0),
 	lsof [linux-any],
 	ikiwiki,
 	perlmagick,
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -1,7 +1,6 @@
 #!/usr/bin/make -f
 
-# Avoid using cabal, as it writes to $HOME
-export CABAL=./Setup
+export CABAL=debian/cabal-wrapper
 
 STANDALONE_BUILD=$(shell grep -qe '^Package: git-annex-standalone' debian/control \
                          && echo 1 || echo 0)
diff --git a/doc/backends.mdwn b/doc/backends.mdwn
--- a/doc/backends.mdwn
+++ b/doc/backends.mdwn
@@ -10,24 +10,29 @@
   verifying that the file content is right, and can avoid duplicates of
   files with the same content. Its need to generate checksums
   can make it slower for large files. 
-* `SHA256` -- Does not include the file extension in the key, which can
-  lead to better deduplication but can confuse some programs.
-* `WORM` ("Write Once, Read Many") This assumes that any file with
-  the same filename, size, and modification time has the same content.
-  This is the least expensive backend, recommended for really large
-  files or slow systems.
+* `SHA256` -- SHA-2 hash that does not include the file extension in the
+  key, which can lead to better deduplication but can confuse some programs.
 * `SHA512`, `SHA512E` -- Best SHA-2 hash, for the very paranoid.
-* `SHA1`, `SHA1E`, `MD5`, `MD5E` -- Smaller hashes than `SHA256`
-   for those who want a checksum but are not concerned about security.
-* `SHA384`, `SHA384E`, `SHA224`, `SHA224E` -- Hashes for people who like
-  unusual sizes.
+* `SHA384`, `SHA384E`, `SHA224`, `SHA224E` -- SHA-2 hashes for
+  people who like unusual sizes.
+* `SHA3_512`, `SHA_512E`, `SHA3_384`, `SHA3_384E`, `SHA3_256`, `SHA3_256E`, `SHA3_224`, `SHA3_224E`
+  -- SHA-3 hashes, for bleeding edge fun.
 * `SKEIN512`, `SKEIN512E`, `SKEIN256`, `SKEIN256E`
   -- [Skein hash](http://en.wikipedia.org/wiki/Skein_hash),
   a well-regarded SHA3 hash competition finalist.
+* `SHA1`, `SHA1E`, `MD5`, `MD5E` -- Smaller hashes than `SHA256`
+   for those who want a checksum but are not concerned about security.
+* `WORM` ("Write Once, Read Many") -- This assumes that any file with
+  the same filename, size, and modification time has the same content.
+  This is the least expensive backend, recommended for really large
+  files or slow systems.
+* `URL` -- This is a key that is generated from the url to a file.
+  It's generated when using eg, `git annex addurl --fast`, when the file
+  content is not available for hashing.
 
-Note that the SHA512, SKEIN512 and SHA384 generate long paths,
+Note that the various 512 and 384 length hashes result in long paths,
 which are known to not work on Windows. If interoperability on Windows is a
-concern, avoid those backends.
+concern, avoid those.
 
 The `annex.backends` git-config setting can be used to list the backends
 git-annex should use. The first one listed will be used by default when
diff --git a/doc/bugs.mdwn b/doc/bugs.mdwn
--- a/doc/bugs.mdwn
+++ b/doc/bugs.mdwn
@@ -2,6 +2,6 @@
 
 [[!inline pages="./bugs/* and !./bugs/*/* and !./bugs/done and !link(done) 
 and !./bugs/moreinfo and !./bugs/confirmed and !./bugs/forwarded and !*/Discussion"
-actions=yes postform=yes show=0 archive=yes template=buglist]]
+actions=yes postform=yes postformtext="Report a new bug titled:" show=0 archive=yes template=buglist]]
 
 [[!edittemplate template=templates/bugtemplate match="bugs/*" silent=yes]]
diff --git a/doc/bugs/Error_writing_log_message_when_filename_contains_Unicode_chars.mdwn b/doc/bugs/Error_writing_log_message_when_filename_contains_Unicode_chars.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/Error_writing_log_message_when_filename_contains_Unicode_chars.mdwn
@@ -0,0 +1,25 @@
+### Please describe the problem.
+I’ve noticed that daemon.log will sometimes contain error messages arising from logging a file name during transfer. Additionally, I’ve occasionally noticed that certain files get «stuck» after being added to the objects store, i. e., they will never be committed by the assistant and have to be staged manually; it appears there is a correlation between files where the logger errors out and files getting stuck.
+
+I can reproduce this using the en-dash (U+2013).
+
+### What steps will reproduce the problem?
+1. Create a file named «Behold – the majestic en-dash» in a repository where the assistant is running.
+2. Observe file has not been added by the assistant and daemon.log contains no message pertaining to new file.
+3. Restart assistant.
+4. Observe in daemon.log that the logger has errored out with «hPutChar: invalid argument» and gives the Unicode replacement character thrice for each en-dash.
+5. Observe that file is added to object store, but the symlink is not staged or committed by the assistant.
+
+### What version of git-annex are you using? On what operating system?
+git-annex 5.20150731
+Linux 4.0.9
+
+### Please provide any additional information below.
+[[!format sh """
+# After restarting the assistant.
+[2015-07-28 14:24:58 CEST] Committer: Adding 978Error writing log message: <stderr>: hPutChar: invalid argument (invalid character) (original message: [2015-07-28 14:24:58 CEST] Committer: Adding 978\65533\65533\655330\65533\65533..1\65533\65533\655330.pdf)
+[2015-07-28 14:24:59 CEST] Transferrer: Uploaded 978Error writing log message: <stderr>: hPutChar: invalid argument (invalid character) (original message: [2015-07-28 14:24:59 CEST] Transferrer: Uploaded 978\65533\65533\655330\65533\65533..1\65533\65533\655330.pdf)
+"""]]
+
+> Closing this because the main bug is fixed in hinotify git and will
+> percolate to the git-annex builds eventually. [[done]] --[[Joey]]
diff --git a/doc/bugs/__39__copy_destdir__61____60__path__62____39___fails.mdwn b/doc/bugs/__39__copy_destdir__61____60__path__62____39___fails.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/__39__copy_destdir__61____60__path__62____39___fails.mdwn
@@ -0,0 +1,56 @@
+### Please describe the problem.
+
+Using `copy --destdir=<path>` fails.
+
+### What steps will reproduce the problem?
+
+~~~
+% ./Setup.hs configure --prefix=/usr
+% ./Setup.hs build
+% ./Setup.hs copy --destdir=my/pkg/dir
+~~~
+
+### What version of git-annex are you using? On what operating system?
+
+5.20150731 on Linux (Arch Linux)
+
+### Please provide any additional information below.
+
+The steps in `myPostCopy` doesn't consider the destination directory, the following change is enough for my uses:
+
+~~~
+Index: habs/git-annex/src/git-annex-5.20150731/Setup.hs
+===================================================================
+--- habs.orig/git-annex/src/git-annex-5.20150731/Setup.hs
++++ habs/git-annex/src/git-annex-5.20150731/Setup.hs
+@@ -27,13 +27,13 @@ main = defaultMainWithHooks simpleUserHo
+ 	}
+ 
+ myPostCopy :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO ()
+-myPostCopy _ (CopyFlags { copyVerbosity }) pkg lbi = do
++myPostCopy _ flags pkg lbi = do
+ 	installGitAnnexShell dest verbosity pkg lbi
+ 	installManpages      dest verbosity pkg lbi
+-	installDesktopFile   dest verbosity pkg lbi
++	-- installDesktopFile   dest verbosity pkg lbi
+   where
+-	dest      = NoCopyDest
+-	verbosity = fromFlag copyVerbosity
++	dest      = fromFlag $ copyDest flags
++	verbosity = fromFlag $ copyVerbosity flags
+ 
+ installGitAnnexShell :: CopyDest -> Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
+ installGitAnnexShell copyDest verbosity pkg lbi =
+~~~
+
+As you see I commented out installation of desktop files completely for the moment.  I don't really need them, and they require larger changes to be correct.
+
+> So, by "fails", you mean it installs to ~/.cabal instead of the speficied
+> location.
+> 
+> And, the issue with the desktop file installation is that it's not inside
+> ~/.cabal at all.
+> 
+> I've applied your patch, thanks. And dealt with the desktop file by
+> making it not install it anywhere, unless it's installing to the regular
+> ~/.cabal location. [[done]] --[[Joey]]
diff --git a/doc/bugs/cannot_change_locale___40__en__95__US.UTF-8__41__.mdwn b/doc/bugs/cannot_change_locale___40__en__95__US.UTF-8__41__.mdwn
--- a/doc/bugs/cannot_change_locale___40__en__95__US.UTF-8__41__.mdwn
+++ b/doc/bugs/cannot_change_locale___40__en__95__US.UTF-8__41__.mdwn
@@ -27,4 +27,6 @@
 he_IL.utf8
 POSIX
 
-
+> Closing since I've seen nothing to indicate this is anything other than a
+> misconfigured OS that doesn't have the requested locale available.
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_get_with_umlaut_characters_in_filenames.mdwn b/doc/bugs/git-annex_get_with_umlaut_characters_in_filenames.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/git-annex_get_with_umlaut_characters_in_filenames.mdwn
@@ -0,0 +1,59 @@
+### Please describe the problem.
+
+Files with umlauts were not copied from local system, all other files were copied successfully.
+
+### What steps will reproduce the problem?
+
+Trying to sync content from a repository on the same machine.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20150727 / Darwin tba.lan 14.4.0 Darwin Kernel Version 14.4.0: Thu May 28 11:35:04 PDT 2015; root:xnu-2782.30.5~1/RELEASE_X86_64 x86_64
+
+### Please provide any additional information below.
+
+[[!format sh """
+$ git annex get .
+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/03 Ihr wollt mich töten.m4a
+  Unable to access these remotes: tba
+
+  Try making some of these repositories available:
+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]
+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music
+failed
+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/03 Ihr wollt mich töten.m4a
+  Unable to access these remotes: tba
+
+  Try making some of these repositories available:
+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]
+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music
+failed
+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/10 Der Bär.m4a
+  Unable to access these remotes: tba
+
+  Try making some of these repositories available:
+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]
+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music
+failed
+get Die Sterne/Flucht in die Flucht (Bonus Track Version)/10 Der Bär.m4a
+  Unable to access these remotes: tba
+
+  Try making some of these repositories available:
+  	2cabf5e0-00ae-4cc6-b9b7-5d303a7f3f06 -- Music [tba]
+   	8e315ed0-f318-45f7-98ca-1a791f9c92df -- jan@hostname:/srv/annex-Music
+failed
+"""]]
+
+the *tba* repository is accessible since all the other files were synced correctly.
+
+Git status reports untracked files which look like they were renamed.
+
+[[!format sh """
+$ git status
+Untracked files:
+  (use "git add <file>..." to include in what will be committed)
+
+	"Ant\303\263nio Varia\303\247\303\265es/"
+	"B Fachada/B Fachada/01 sozinho no r\303\263que.mp3"
+	"B Fachada/B Fachada/03 D\303\241 mais m\303\272sica \303\240 b\303\263fia.mp3"
+"""]]
diff --git a/doc/bugs/git_annex_assistant_failing_with_ARM_NAS.mdwn b/doc/bugs/git_annex_assistant_failing_with_ARM_NAS.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_failing_with_ARM_NAS.mdwn
@@ -0,0 +1,29 @@
+I'm trying to use a Synology NAS (ARM architecture, DiskStation 214+) as a remote repository for my laptop, but I'm failing to get a convenient configuration to work.
+
+I already set-up git-annex on the NAS following the explanations found [here](http://git-annex.branchable.com/tips/Synology_NAS_and_git_annex/). I installed version **5.20150714-g8695533**.
+
+On my laptop I have the version provided with Ubuntu 14.04: **5.20140412ubuntu1**.
+
+If calling git annex from my laptop's command line and doing everything manually (git remote add, copy file to the dir, git annex add, git commit, git push, git annex copy), then it works properly.
+
+But when trying with the assistant I get this error:
+
+```
+fatal: unrecognized command 'sh -c 'mkdir -p '"'"'annex'"'"'&&cd '"'"'annex'"'"'&&if [ ! -d .git ]; then git init --bare --shared && git config receive.denyNonFastforwards false; fi&&git annex init''
+git-annex-shell: git-shell failed
+```
+
+This is the content of daemon.log:
+[[!format sh """
+[2015-08-04 00:51:41 CEST] main: starting assistant version 5.20140412ubuntu1
+[2015-08-04 00:51:41 CEST] Cronner: You should enable consistency checking to protect your data. 
+(Recording state in git...)
+(scanning...) [2015-08-04 00:51:41 CEST] Watcher: Performing startup scan
+(started...) [2015-08-04 00:52:41 CEST] Cronner: Consistency check in progress
+[2015-08-04 00:59:12 CEST] read: ssh-keygen ["-F","git-annex-trusted"]
+[2015-08-04 00:59:12 CEST] read: ssh ["-oNumberOfPasswordPrompts=0","-oStrictHostKeyChecking=no","-n","-p","22","git-annex@git-annex-trusted","sh -c 'echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which git; then echo git-annex-probe git; fi;if which rsync; then echo git-annex-probe rsync; fi;if which ~/.ssh/git-annex-shell; then echo git-annex-probe ~/.ssh/git-annex-shell; fi;cd '\"'\"'annex'\"'\"' && git config --list'"]
+[2015-08-04 00:59:13 CEST] read: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--with-colons","--list-secret-keys","--fixed-list-mode"]
+[2015-08-04 00:59:15 CEST] read: ssh ["-p","22","git-annex@git-annex-trusted","sh -c 'mkdir -p '\"'\"'annex'\"'\"'&&cd '\"'\"'annex'\"'\"'&&if [ ! -d .git ]; then git init --bare --shared && git config receive.denyNonFastforwards false; fi&&git annex init'"]
+"""]]
+
+Is there any problem with the version provided by Ubuntu that is producing this strange behavior?
diff --git a/doc/bugs/gitlab_repos_cannot_use_gcrypt.mdwn b/doc/bugs/gitlab_repos_cannot_use_gcrypt.mdwn
--- a/doc/bugs/gitlab_repos_cannot_use_gcrypt.mdwn
+++ b/doc/bugs/gitlab_repos_cannot_use_gcrypt.mdwn
@@ -20,3 +20,14 @@
 > and has not had any opportunity to get a git-annex uuid set..
 > 
 > I wonder what version of git-annex gitlab.com is running? --[[Joey]]
+
+>> gitlab tells me their version is 5.20140412ubuntu1. 
+>> I tried installing git-annex-shell from 5.20140412, but
+>> was not able to reproduce the problem using it. This makes me think the
+>> problem is somehow in gitlab's git-annex-shell integration code.
+>>
+>> Update: Root-caused and filed a bug:
+>> <https://gitlab.com/gitlab-org/gitlab-shell/issues/24
+>>
+>> This will need to be fixed on the gitlab side, so closing it here.
+>> [[done]] --[[Joey]]
diff --git a/doc/bugs/sync_content_has_really_suboptimal_behavior.mdwn b/doc/bugs/sync_content_has_really_suboptimal_behavior.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/sync_content_has_really_suboptimal_behavior.mdwn
@@ -0,0 +1,50 @@
+### Please describe the problem.
+
+In a client, backup, smallarchive setup, new non-archive files will be copied to backup, copied to smallarchive, then dropped from smallarchive.
+
+### What steps will reproduce the problem?
+
+Create three repos, assign them groups client, backup, smallarchive.
+
+Add files to the client, not in the archive folder.
+
+Run sync --content
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20150710
+
+### Please provide any additional information below.
+
+[[!format sh """
+copy SOMEFILE copy SOMEFILE (checking BACKUP...) (to BACKUP...)
+SHA256E-s309049--00bb4f52d3d9af507eaf8c837ce29ad133cf1964c0f8fbf586906b1e5676f0af.pdf
+        309,049 100%   87.83MB/s    0:00:00 (xfr#1, to-chk=0/1)
+ok
+copy SOMEFILE copy SOMEFILE (checking SMALLARCHIVE...) (to SMALLARCHIVE...)
+ok
+drop SMALLARCHIVE SOMEFILE (checking BACKUP...) ok
+""" ]]
+
+> Indeed, but this was fixed in version 5.20150727.
+> From the changelog:
+>>
+>>   * sync --content: Fix bug that caused files to be uploaded to eg,
+>>    more archive remotes than wanted copies, only to later be dropped
+>>    to satisfy the preferred content settings.
+> 
+> [[done]] --[[Joey]]
+
+>> Oh, sorry about the noise then. I assumed the version I was running was the latest since it was pretty recent.
+>> Thanks. -- [[filippo]]
+
+Note: it's extremely and unnecessarily hard to report a bug. There are no
+links leading to instructions or anything on the home page. The "bugs" link
+leads to a list of pages with no instructions. Please at least add
+explanation to the bugs page. I had to edit an existing bug and change the
+edit URL.
+
+> Eh? The first thing on the bugs page is a form to add a new post to the
+> list of bugs. --[[Joey]]
+
+>> I'm an idiot. I mistook that for a search box. -- [[filippo]]
diff --git a/doc/bugs/view_fails_with___34__invalid_character__34__.mdwn b/doc/bugs/view_fails_with___34__invalid_character__34__.mdwn
--- a/doc/bugs/view_fails_with___34__invalid_character__34__.mdwn
+++ b/doc/bugs/view_fails_with___34__invalid_character__34__.mdwn
@@ -28,3 +28,29 @@
 supported repository version: 5
 upgrade supported from repository versions: 0 1 2 4
 """]]
+
+> I'm assuming the setlocale part of this is a misconfigured system locale;
+> as also seen by an arch linux user in
+> <http://git-annex.branchable.com/bugs/cannot_change_locale___40__en__95__US.UTF-8__41__/>
+> 
+> So, disregarding that part of the bug report, we still have the actual
+> failure. 
+> 
+> With LANG=C, setting and getting metadata like "Rondò Veneziano" fails,
+> as does generating views of that metadata.
+> 
+> In all cases, it's an IO encoding failure, "commitBuffer: invalid argument (invalid character)"
+> 
+> This only occurs when there's a space in the metadata; in this case the
+
+> value is base64ed. While the 'ò' comes back out as "\242", which is the right
+> character, it's not encoded using the filesystem encoding. This means that
+> the IO layer can't handle it, when not in a unicode locale. Instead, it
+> needs to come back out as "\56515\56498".
+> 
+> Apparently this is a reversion; it worked in an earlier version of
+> git-annex. Commits such as 9b93278e8abe1163d53fbf56909d0fe6d7de69e9
+> or the conversion to Sandi may have caused the reversion, unsure.
+> 
+> Fix is to apply the filesystem encoding when decoding base64ed values.
+> [[done]] --[[Joey]]
diff --git a/doc/design/external_special_remote_protocol.mdwn b/doc/design/external_special_remote_protocol.mdwn
--- a/doc/design/external_special_remote_protocol.mdwn
+++ b/doc/design/external_special_remote_protocol.mdwn
@@ -274,7 +274,9 @@
   Gets any state that has been stored for the key.  
   (git-annex replies with VALUE followed by the state.)
 * `SETURLPRESENT Key Url`  
-  Records an URL where the Key can be downloaded from.
+  Records an URL where the Key can be downloaded from.  
+  Note that this does not make git-annex think that the url is present on
+  the web special remote.
 * `SETURLMISSING Key Url`  
   Records that the key can no longer be downloaded from the specified
   URL.
diff --git a/doc/devblog/day_307__two_release_week.mdwn b/doc/devblog/day_307__two_release_week.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_307__two_release_week.mdwn
@@ -0,0 +1,11 @@
+Made a release this morning, mostly because the release earlier this week
+turns out to have accidentially removed several options from `git annex copy`.
+
+Spent some time this afternoon improving how git-annex shuts down when
+--time-limit is used. This used to be a quick and dirty shutdown, similar
+to if git-annex were ctrl-c'd, but I reworked things so it does a clean
+shutdown, including running any buffered git commands. 
+This made incremental fsck with --time-limit resume much better, since
+it saves the incremental fsck database on shutdown. Also tuned when the
+database gets checkpointed during an incremental fsck, to resume better after
+it's interrupted.
diff --git a/doc/devblog/day_308__other_peoples_bugs.mdwn b/doc/devblog/day_308__other_peoples_bugs.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_308__other_peoples_bugs.mdwn
@@ -0,0 +1,11 @@
+Work today has started in the git-annex bug tracker, but the real bugs were
+elsewhere. Got a patch into hinotify to fix its handling of filenames
+received from inotify events when used in a non-unicode locale. Tracked
+down why gitlab's git-annex-shell fails to initialize gcrypt repositories,
+and filed a bug on gitlab-shell.
+
+Yesterday, I got the Android autobuilder fixed. I had started upgrading it
+to new versions of yesod etc, 2 months ago, and something in those new
+versions led to character encoding problems that broke the template haskell
+splicing. Had to throw away the work done for that upgrade, but at least
+it's building again, at last.
diff --git a/doc/devblog/day_309__proxy.mdwn b/doc/devblog/day_309__proxy.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_309__proxy.mdwn
@@ -0,0 +1,5 @@
+Ended up sending most of today working on `git annex proxy`. It had a lot
+of buggy edge cases, which are all cleaned up now.
+
+Spent another couple hours catching up on recent traffic and fixing a
+couple other misc bugs.
diff --git a/doc/devblog/day_310__half_day.mdwn b/doc/devblog/day_310__half_day.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_310__half_day.mdwn
@@ -0,0 +1,7 @@
+Took a half day and worked on making it simpler to set up ssh remotes.
+The complexity I've gotten rid of is there's no need to take any action to
+get a ssh remote initialized as a git-annex repository. Where before,
+either git-annex init needed to be ran on the remote, or a git-annex branch
+manually pushed to it, now the remote can simply be added and `git annex sync`
+will do the rest. This needed git-annex-shell changes, so will only work
+once servers are upgraded to use a newer version of git-annex.
diff --git a/doc/devblog/day_311__SHA-3.mdwn b/doc/devblog/day_311__SHA-3.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_311__SHA-3.mdwn
@@ -0,0 +1,6 @@
+The SHA-3 specification was released yesterday; git-annex got support for
+using SHA-3 hashes today. I had to add support for building with the new
+cryptonite library, as cryptohash doesn't (correctly) implement SHA-3 yet.
+Of course, nobody is likely to find a use for this for years, since SHA-2
+is still prefectly fine, but it's nice to get support for new hashes
+in early. :)
diff --git a/doc/devblog/day_312__release_prep.mdwn b/doc/devblog/day_312__release_prep.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_312__release_prep.mdwn
@@ -0,0 +1,12 @@
+Catching up on weekend's traffic, and preparing for a release tomorrow.
+
+Found another place where the optparse-applicative conversion broke some
+command-line parsing; using git-annex metadata to dump metadata recursively
+got broken. This is the second known bug caused by that transition, which
+is not too surpising given how large it was.
+
+Tracked down and fixed a [very tricky encoding problem with metadata values](http://git-annex.branchable.com/bugs/view_fails_with___34__invalid_character__34__/).
+
+The arm autobuilder broke so it won't boot; got a serial console hooked up
+to it and looks like a botched upgrade resulting in a udev/systemd/linux
+version mismatch.
diff --git a/doc/forum/Remote__39__s_git-annex-shell_not_detected.mdwn b/doc/forum/Remote__39__s_git-annex-shell_not_detected.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/Remote__39__s_git-annex-shell_not_detected.mdwn
@@ -0,0 +1,20 @@
+When doing `git annex get fname` in a repo A with 2 remotes on LAN (B and C), it says they don't have git annex installed so it sets the `annex-ignore` flag. However, they do have it, and I can `annex-get` files from C to B. Versions of git and git-annex vary between the machines. Any idea what could be causing it? Perhaps A's git needs an update?
+
+
+A:
+
+* Ubuntu. 
+* git 1.9.1
+* git-annex 5.20140412ubuntu1
+
+B: 
+
+* Fedora 22
+* git 2.3.2 (installed through Nix package manager, so its in a nonstandard path)
+* git-annex 5.20140717 (installed normally, in /usr/bin)
+
+C: 
+
+* Fedora 22
+* git 2.3.2 (installed through Nix package manager, so its in a nonstandard path)
+* git-annex 5.20150219 (installed through Nix
diff --git a/doc/forum/can__39__t_sync_content.mdwn b/doc/forum/can__39__t_sync_content.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/can__39__t_sync_content.mdwn
@@ -0,0 +1,35 @@
+Hi,
+
+I'm completely new to git-annex, I'm trying to follow this guide:
+
+https://git-annex.branchable.com/tips/centralized_git_repository_tutorial/on_GitLab/
+
+All steps succeeded except the `git annex sync --content` which results in the following message:
+
+'Remote origin not usable by git-annex; setting annex-ignore'
+
+Here is an example of the output I receive:
+
+    $ git status
+    On branch master
+    Your branch is up-to-date with 'origin/master'.
+    nothing to commit, working directory clean
+    $
+    $ git push origin master git-annex
+    Everything up-to-date
+    $
+    $ git annex sync --content
+    
+      Remote origin not usable by git-annex; setting annex-ignore
+    commit  ok
+    pull origin
+    ok
+    pull origin
+    ok
+    $
+    $ git config remote.origin.url
+    https://user:pass@gitlab.com/user/repname.git
+
+Is it required to use the ssh protocol in order to get annex working?
+
+I'm using https since I'm behind a firewall, and the ssh protocol always time out. Is there anything I can do?
diff --git a/doc/forum/checkout_view_to_directory_outside_of_annex.mdwn b/doc/forum/checkout_view_to_directory_outside_of_annex.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/checkout_view_to_directory_outside_of_annex.mdwn
@@ -0,0 +1,23 @@
+i am working on a project where i need to copy many subsets of files stored in a single annex repo to separate folders outside of the annex repo (each subset to a separate folder).
+
+to select each subset, i'm using `git annex metadata --set <tag>=<value> <path>`.
+
+what i would like to do, ideally, is to leverage each `git annex view <tag>=<value>` invocation to directly check out the view's files to a specific directory outside of the annex repo.
+
+the use case is basically the "Copying objects" strategy of the [syncthing special remote discussion](http://git-annex.branchable.com/todo/syncthing_special_remote/), although rather than having the 'directory' special remote contain files in that remote's specific layout, i would like them to be checked out simply with their original file names.
+
+say i have these files in my main annex repo:
+
+    a.pdf (metadata: topic=haskell)
+    b.pdf (metadata: topic=haskell)
+    c.pdf (metadata: topic=iojs)
+    d.pdf (metadata: topic=python)
+    e.pdf (metadata: topic=haskell)
+
+if i issue `git annex view topic=haskell`, i have the files i want in my annex' root:
+
+    a.pdf
+    b.pdf
+    e.pdf
+
+obviously i could then simply run `rsync --exclude .git -aL --delete . ../other/dir`, which is totally fine, but maybe i'm just blindly missing something obvious and i could simply use something like `git annex --work-tree=../other/dir view topic=haskell` and see `a.pdf`, `b.pdf` and `e.pdf` appear in the target directory (i don't need any metadata in that directory, so only the plain files and no .git folder for a remote is fine).
diff --git a/doc/git-annex-fsck.mdwn b/doc/git-annex-fsck.mdwn
--- a/doc/git-annex-fsck.mdwn
+++ b/doc/git-annex-fsck.mdwn
@@ -37,7 +37,12 @@
 
 * `--more`
 
-  Continue the last incremental fsck pass, where it left off.
+  Resume the last incremental fsck pass, where it left off.
+
+  Resuming may redundantly check some files that were checked
+  before. Any files that fsck found problems with before will be re-checked
+  on resume. Also, checkpoints are made every 1000 files or every 5 minutes
+  during a fsck, and it resumes from the last checkpoint.
 
 * `--incremental-schedule=time`
 
diff --git a/doc/git-annex-proxy.mdwn b/doc/git-annex-proxy.mdwn
--- a/doc/git-annex-proxy.mdwn
+++ b/doc/git-annex-proxy.mdwn
@@ -31,6 +31,14 @@
 	git annex add myfile
 	git annex proxy -- git commit myfile -m foo
 
+The temporary work tree that the git command is run in is set up by
+checking out all files that are in the index, and copying (or hard linking)
+any unstaged files from the real work tree. Since the git command is run
+using this temporary work tree, it won't see eg, local modifications to
+files. So, it probably is not useful to proxy a command like "git add".
+However, you can use the proxy with any git command you like, as long as
+you think about how it will interact with the temporary work tree.
+
 # SEE ALSO
 
 [[git-annex]](1)
diff --git a/doc/git-annex-shell.mdwn b/doc/git-annex-shell.mdwn
--- a/doc/git-annex-shell.mdwn
+++ b/doc/git-annex-shell.mdwn
@@ -31,7 +31,8 @@
 
   When run in a repository that does not yet have an annex.uuid, one
   will be created, as long as a git-annex branch has already been pushed to
-  the repository.
+  the repository, or if the autoinit= flag is used to indicate
+  initialization is desired.
 
 * inannex directory [key ...]
 
@@ -69,12 +70,12 @@
   This commits any staged changes to the git-annex branch.
   It also runs the annex-content hook.
 
-* notifychanges
+* notifychanges directory
 
   This is used by `git-annex remotedaemon` to be notified when
   refs in the remote repository are changed.
 
-* gcryptsetup gcryptid
+* gcryptsetup directory gcryptid
 
   Sets up a repository as a gcrypt repository.
 
@@ -95,7 +96,7 @@
   on new dashed options).
 
   Currently used fields include remoteuuid=, associatedfile=,
-  and direct=
+  direct=, and autoinit=
 
 # HOOK
 
diff --git a/doc/news/version_5.20150617.mdwn b/doc/news/version_5.20150617.mdwn
deleted file mode 100644
--- a/doc/news/version_5.20150617.mdwn
+++ /dev/null
@@ -1,50 +0,0 @@
-git-annex 5.20150617 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Now supports git annex sync --all --content to sync all versions of all
-     files with all repos that want them.
-   * Added new "anything" preferred content expression, which matches all
-     versions of all files.
-   * Standard preferred content for client, backup, incremental backup,
-     and unwanted groups have been adjusted to work better when used
-     with git annex sync --all --content.
-   * fromkey, registerurl: Improve handling of urls that happen to also
-     be parsable as strange keys.
-   * sync, remotedaemon: Pass configured ssh-options even when
-     annex.sshcaching is disabled.
-   * assistant: Consume systemd-networkd dbus events to learn about
-     changes to network connections, as was already done with
-     network-manager and wicd.
-     Thanks to Sebastian Reuße for the patches.
-   * get --incomplete: New option to resume any interrupted downloads.
-   * dead --key: Can be used to mark a key as dead.
-   * fsck: Ignore keys that are known to be dead when running in
-     --all/--unused/--key mode or a in a bare repo. Closes: #[753888](http://bugs.debian.org/753888)
-     Otherwise, still reports files with lost contents, even if the content
-     is dead.
-   * S3: Special remotes can be configured with public=yes to allow
-     the public to access the bucket's content.
-   * S3: Publically accessible buckets can be used without creds.
-   * import --clean-duplicates: Fix bug that didn't count local or trusted
-     repo's copy of a file as one of the necessary copies to allow removing
-     it from the import location.
-   * tahoe: Use ~/.tahoe-git-annex/ rather than ~/.tahoe/git-annex/
-     when setting up a tahoe special remote to avoid old versions of
-     tahoe create-client choking.
-   * Fix bug that prevented enumerating locally present objects in repos
-     tuned with annex.tune.objecthash1=true.
-     Fixes: unused, object count in info, unannex.
-   * Improve url parsing to handle some urls containing illegal []
-     characters in their paths.
-   * info: Added json output for "backend usage", "numcopies stats",
-     "repositories containing these files", and "transfers in progress".
-   * Fix incremental backup standard preferred content expression to match
-     its documentation, which says it does not want files that have reached
-     a backup repository.
-   * Increased the default annex.bloomaccuracy from 1000 to 10000000.
-     This makes git annex unused use up to 16 mb more memory than it did
-     before, but the massive increase in accuracy makes this worthwhile
-     for all but the smallest systems.
-   * Build documentation with deterministic=1 for reproducible builds.
-     (A new ikiwiki feature.) Closes: #[785736](http://bugs.debian.org/785736)
-   * Re-remove dependency on obsolete hamlet package. Closes: #[786659](http://bugs.debian.org/786659)
-   * debian/cabal-wrapper: Removed this hack which should not be needed anymore."""]]
diff --git a/doc/news/version_5.20150812.mdwn b/doc/news/version_5.20150812.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/news/version_5.20150812.mdwn
@@ -0,0 +1,40 @@
+git-annex 5.20150812 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added support for SHA3 hashed keys (in 8 varieties), when git-annex is
+     built using the cryptonite library.
+   * metadata: Fix reversion introduced in 5.20150727 that caused recursive
+     display of metadata to not work.
+   * Windows: Fix bug that caused git-annex sync to fail due to missing
+     environment variable.
+   * Fix setting/setting/viewing metadata that contains unicode or other
+     special characters, when in a non-unicode locale.
+   * Simplify setup process for a ssh remote. Now it suffices to run git
+     remote add, followed by git-annex sync. Now the remote is automatically
+     initialized for use by git-annex, where before the git-annex branch had
+     to manually be pushed before using git-annex sync. Note that this
+     involved changes to git-annex-shell, so if the remote is using an old
+     version, the manual push is still needed.
+   * git-annex-shell: Don't let configlist auto-init repository when in
+     readonly mode.
+   * Perform a clean shutdown when --time-limit is reached.
+     This includes running queued git commands, and cleanup actions normally
+     run when a command is finished.
+   * fsck: Commit incremental fsck database when --time-limit is reached.
+     Previously, some of the last files fscked did not make it into the
+     database when using --time-limit.
+   * fsck: Commit incremental fsck database after every 1000 files
+     fscked, or every 5 minutes, whichever comes first. Previously,
+     commits were made every 1000 files fscked.
+   * Linux standalone: Work around problem that prevented it from working
+     properly if unpacked into a directory that contains ":" or ";" in its
+     name.
+   * proxy: Fix proxy git commit of non-annexed files in direct mode.
+   * proxy: If a non-proxied git command, such as git revert
+     would normally fail because of unstaged files in the work tree,
+     make the proxied command fail the same way.
+   * proxy: Fix removal of files deleted by the proxied command.
+   * proxy: Fix behavior when run in subdirectory of git repo.
+   * Improve Setup.hs file so that cabal copy --destdir works.
+     Thanks, Magnus Therning.
+   * Tighten dependency on optparse-applicative to 0.11.0.
+   * Added back debian/cabal-wrapper, since it still seems needed after all."""]]
diff --git a/doc/special_remotes/comment_23_aba4abb897c6ecc0c6ba72cbd21b9f4b._comment b/doc/special_remotes/comment_23_aba4abb897c6ecc0c6ba72cbd21b9f4b._comment
deleted file mode 100644
--- a/doc/special_remotes/comment_23_aba4abb897c6ecc0c6ba72cbd21b9f4b._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnWvnTWY6LrcPB4BzYEBn5mRTpNhg5EtEg"
- nickname="Bence"
- subject="Amazon Cloud Drive support"
- date="2015-03-28T10:35:47Z"
- content="""
-Is there a special remote implementation for Amazon Cloud Drive?
-
-It's just became unlimited for a fair price: $60/year ( https://www.amazon.com/clouddrive/pricing ).
-
-http://techcrunch.com/2015/03/26/amazon-goes-after-dropbox-google-microsoft-with-unlimited-cloud-drive-storage/
-"""]]
diff --git a/doc/tips/centralized_git_repository_tutorial/on_your_own_server.mdwn b/doc/tips/centralized_git_repository_tutorial/on_your_own_server.mdwn
--- a/doc/tips/centralized_git_repository_tutorial/on_your_own_server.mdwn
+++ b/doc/tips/centralized_git_repository_tutorial/on_your_own_server.mdwn
@@ -8,9 +8,15 @@
 ## set up the server
 
 On the server, you'll want to [[install]] git, and git-annex, if you haven't
-already.
+already. If possible, install it using your distribution's package manager:
 
 	server# sudo apt-get install git git-annex
+
+Note that git-annex-shell needs to be located somewhere in the PATH, so
+that a client can successfully run "ssh yourserver git-annex-shell".
+Installing git-annex using a package manager will take care of this for
+you. But if you're not root or otherwise can't install git-annex that way,
+you may need to do more work; see [[get_git-annex-shell_into_PATH]].
 
 Decide where to put the repository on the server, and create a bare git repo
 there. In your home directory is a simple choice:
diff --git a/doc/tips/get_git-annex-shell_into_PATH.mdwn b/doc/tips/get_git-annex-shell_into_PATH.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/tips/get_git-annex-shell_into_PATH.mdwn
@@ -0,0 +1,55 @@
+The [[git-annex-shell]] program is a part of git-annex that is used when
+accessing a git-annex repository on a remote server. The client runs
+something like "ssh server git-annex-shell". For this to work,
+git-annex-shell needs to be installed in PATH.
+
+If you install git-annex on your server as root, using a distribution's
+package manager, like apt-get, or otherwise installing it into /usr/bin, or
+/usr/local/bin, then git-annex-shell will be in PATH, and you'll not have
+any trouble (and can stop reading here).
+
+But, if you need to install git-annex on a server without being root,
+it can be tricky to get it into PATH. The bash shell doesn't source all of
+its config files when ssh uses it to run a non-interactive command like
+git-annex-shell, so even if git-annex-shell seems to be in PATH when you're
+logged onto the server, "ssh server git-annex-shell" won't find it.
+
+	bash: git-annex-shell: command not found; failed; exit code 127
+
+----
+
+In some systems (when it's compiled with `SSH_SOURCE_BASHRC` set), bash will
+load your `~/.bashrc` (but not your `~/.bash_profile`). So you can add to
+PATH in the .bashrc.
+
+Note that many .bashrc files start with something like this: 
+
+	# If not running interactively, don't do anything
+	[ -z "$PS1" ] && return
+
+So, make sure to make any PATH changes before such a guard. For example:
+
+	PATH=$HOME/bin/:$PATH
+
+	# If not running interactively, don't do anything else
+	[ -z "$PS1" ] && return
+
+----
+
+In some systems, bash won't load *any* config files at all.
+A few ways to deal with that:
+
+* Move or symlink git-annex-shell into a directory like
+  /usr/bin, that is in the default PATH.
+
+* If you're not root, ask the system administrator to please install
+  git-annex system-wide.
+
+* As a last resort, you can configure the git repository that's using
+  the server to know where git-annex shell is installed, by configuring
+  `remote.<name>.annex-shell`
+
+  For example, if git-annex-shell is installed in ~/bin/git-annex-shell
+  on the server, and the git remote named "annoyingserver" uses the server:
+
+	git config remote.annoyingserver.annex-shell /home/me/bin/git-annex-shell
diff --git a/doc/tips/using_the_SHA1_backend.mdwn b/doc/tips/using_the_SHA1_backend.mdwn
deleted file mode 100644
--- a/doc/tips/using_the_SHA1_backend.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-A handy alternative to the default [[backend|backends]] is the
-SHA1 backend. This backend provides more git-style assurance that your data
-has not been damaged. And the checksum means that when you add the same
-content to the annex twice, only one copy need be stored in the backend.
-
-The only reason it's not the default is that it needs to checksum
-files when they're added to the annex, and this can slow things down
-significantly for really big files. To make SHA1 the default, just
-add something like this to `.gitattributes`:
-
-	* annex.backend=SHA1
diff --git a/doc/todo.mdwn b/doc/todo.mdwn
--- a/doc/todo.mdwn
+++ b/doc/todo.mdwn
@@ -1,4 +1,4 @@
 This is git-annex's todo list. Link items to [[todo/done]] when done. A more complete [[design/roadmap/]] is also available.
 
 [[!inline pages="./todo/* and !./todo/done and !link(done) 
-and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]
+and !*/Discussion" actions=yes postform=yes postformtext="Add a new todo titled:" show=0 archive=yes]]
diff --git a/doc/todo/Amazon_Cloud_Drive.mdwn b/doc/todo/Amazon_Cloud_Drive.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/Amazon_Cloud_Drive.mdwn
@@ -0,0 +1,14 @@
+Is there a special remote implementation for Amazon Cloud Drive?
+
+It's just became unlimited for a fair price: $60/year ( https://www.amazon.com/clouddrive/pricing ).
+
+http://techcrunch.com/2015/03/26/amazon-goes-after-dropbox-google-microsoft-with-unlimited-cloud-drive-storage/
+
+-- bence
+
+> Not yet, but I just need to investigate haskell api bindings for it, I
+> suppose. --[[Joey]]
+
+> > Don't know if there's such a thing... there seems to be SDKs for android and IOS, but nothing more. It seems like it's a REST API: https://developer.amazon.com/public/apis/experience/cloud-drive/... --[[anarcat]]
+
+>> requested it be added to amazonka <https://github.com/brendanhay/amazonka/issues/168> --[[Joey]]
diff --git a/doc/todo/amazon_prime_photos.mdwn b/doc/todo/amazon_prime_photos.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/amazon_prime_photos.mdwn
@@ -0,0 +1,3 @@
+ just  thought to check if you anyhow considered it  Joey: https://www.amazon.ca/clouddrive/primephotos ,  which could be a  great  feature for  those with prime,  even if only for photos.  didn't check about any API
+
+ cheers
diff --git a/doc/todo/better_git-annex-shell_init_workflow.mdwn b/doc/todo/better_git-annex-shell_init_workflow.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/better_git-annex-shell_init_workflow.mdwn
@@ -0,0 +1,12 @@
+Currently, the workflow for initializing a remote repo has to involve
+manually pushing the git-annex branch to the repo, first. This primes
+git-annex-shell to auto-initialize the repo. Only after that first push,
+can git-annex sync be used. If git-annex sync is run earlier, it will try
+to get the remore uuid, fail, and set annex-ignore.
+
+This should be improved.. It ought to be possible to add a new remote and
+have git-annex sync do everything needed.
+
+> [[done]]; the remote needs git-annex-shell 5.20150805 installed, and so
+> does the user, and then `git-annex sync` will automatically handle
+> initialization of the remote. --[[Joey]]
diff --git a/doc/todo/ditch_yesod.mdwn b/doc/todo/ditch_yesod.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/ditch_yesod.mdwn
@@ -0,0 +1,32 @@
+I'd like to move away from using yesod for the web app, for a number of
+reasons:
+
+* It's by far the largest use of TH in git-annex, and TH is of course very
+  painful for the android port, other builds like debian mips that don't
+  currently support TH, etc.
+* I think it's responsible for at least 50% of the executable size, and I
+  suspect a lot of that is unncessary bloat for parts of yesod that
+  git-annex doesn't really use.
+* Hamlet constantly annoys me by rejecting any file that contains tabs.
+  **Rage**
+* Hamlet contains code that's not really haskell, but looks a lot like it.
+  This is a continual frustration when dealing with the hamlet files.
+* I find that Hamlet does not lend itself to being refactored, everything
+  is essentially an IO action with side effects of generating html, so
+  can't really bring proper FP tools to bear.
+
+At the moment, servant seems like the nicest place to end up. Just as type
+safe as yesod afaik, and very lightweight and simple and rather awesome.
+
+As for the html generation, lucid seems like a good way to do it. Just as
+fast as hamlet, and pure haskell code.
+
+Game plan:
+
+1. Uploadd a yesod-lucid to hackage. (done)
+2. Get servant, lucid, maybe yesod-lucid, packaged in Debian
+3. Start converting individual yesod Handler Html to Handler LucidHtml.
+   This will ditch the hamlet. This is by far the most work, but it can be
+   done incrementally w/o breaking the build.
+4. Once all the hamlet is gone, remove the rest of the yesod stuff and
+   re-implement the routing etc with servant.
diff --git a/doc/todo/git_annex_push.mdwn b/doc/todo/git_annex_push.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/git_annex_push.mdwn
@@ -0,0 +1,1 @@
+A common use case for me is to use annex as really just an addition to git to store additional content.  What I am ending up with is two stage procedure to submit my changes to our shared repository:  git push REMOTE; git annex copy --to=REMOTE . IMHO it would only be logical if there was "git annex push REMOTE [GITPUSHOPTIONS]" which would be merely an alias for "git push REMOTE [GITPUSHOPTIONS]; git annex copy --to=REMOTE" but which will make use of annex for such common usecase simple(r)
diff --git a/doc/todo/git_annex_push/comment_1_54c5494ec21621298b3111cd7c2325b1._comment b/doc/todo/git_annex_push/comment_1_54c5494ec21621298b3111cd7c2325b1._comment
new file mode 100644
--- /dev/null
+++ b/doc/todo/git_annex_push/comment_1_54c5494ec21621298b3111cd7c2325b1._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-08-04T20:19:22Z"
+ content="""
+`git annex sync --content` does what you want, only it also does a pull and
+a merge from remotes.
+
+I don't know that wanting to only push, w/o pull and merge, is common
+enough to make a separate command for it.
+
+There's also the problem that to push the git-annex branch, it really
+makes sense to first pull/merge from the remote. Otherwise, the push
+is not likely to work as well. And too, it makes sense to update the
+git-annex branch from remotes in order to know what files that have, so
+that info can be better used to decide which files to send to them --
+especially when preferred content might make some file not be sent to all
+remotes, depending on which other remotes contain the file.
+"""]]
diff --git a/doc/todo/git_annex_push/comment_2_67938223c42c2a81dbfd32cd8a6a39c2._comment b/doc/todo/git_annex_push/comment_2_67938223c42c2a81dbfd32cd8a6a39c2._comment
new file mode 100644
--- /dev/null
+++ b/doc/todo/git_annex_push/comment_2_67938223c42c2a81dbfd32cd8a6a39c2._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/EbvxpTI_xP9Aod7Mg4cwGhgjrCrdM5s-#7c0f4"
+ subject="comment 2"
+ date="2015-08-09T03:04:31Z"
+ content="""
+ indeed  pull/merge ( ie sync)  would often  be  needed.  but the same  in regular git  workflow -  we  can't push if remote has new  changes.  so we know that we need to \" git  pull\" ( or alternative merge dance).   my  whining here is pretty much about  dichotomy  between  regular git command  and  accompanying  annex commands  for simple typical workflows - i  need to  educate people  much more  beyond \" in your typical use case,  when you all collaborate  on this repo,  just use git annex add  to place big files under annex control,  and then git annex push  to push all your  changes\".   then if  annex push  checked  first that push   of annex  branch can't happen  and that annex  merge is due,  and let user know  to run it first -  they will do,  and things will remain clear.  now there is a  lot of annex  uniquely named commands  which do not \" correlate\"  with git ones   even for simple  use cases, which makes  adoption harder imho.
+"""]]
diff --git a/doc/todo/git_annex_push/comment_3_ccb822eeb9b0d60f811568e4f27f970a._comment b/doc/todo/git_annex_push/comment_3_ccb822eeb9b0d60f811568e4f27f970a._comment
new file mode 100644
--- /dev/null
+++ b/doc/todo/git_annex_push/comment_3_ccb822eeb9b0d60f811568e4f27f970a._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-08-11T17:37:05Z"
+ content="""
+I tend to be uncomfortable with wrapping many git commands into git-annex
+commands with the same name. All the regular git commands can be used
+in a git-annex repository, and I don't want to get users thinking they need
+to look for git-annex commands instead when the git commands work perfectly
+well.
+
+`git annex copy` is fundamentally different than `git push`, so the user
+needs to learn about the complication of needing to copy the contents
+around separately. Perhaps even copying content to different (special)
+remotes than where git pushes to. `git annex sync --content` is there for
+users who want to keep two repos in sync and don't want to be concerned with the details.
+`git annex push` would seem to be for users who want to know about the details,
+but not all of them. Seems like a losing and/or confusing choice.
+"""]]
diff --git a/doc/todo/subsecond_timestamping_of_the_--debug_output.mdwn b/doc/todo/subsecond_timestamping_of_the_--debug_output.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/subsecond_timestamping_of_the_--debug_output.mdwn
@@ -0,0 +1,1 @@
+ATM --debug uses timestamps at second precision.  Would be nice (to see where time is spent) to have subsecond timing
diff --git a/doc/walkthrough/using_ssh_remotes.mdwn b/doc/walkthrough/using_ssh_remotes.mdwn
--- a/doc/walkthrough/using_ssh_remotes.mdwn
+++ b/doc/walkthrough/using_ssh_remotes.mdwn
@@ -31,3 +31,6 @@
 Also, note that you need full shell access for this to work -- 
 git-annex needs to be able to ssh in and run commands. Or at least,
 your shell needs to be able to run the [[git-annex-shell]] command.
+
+For details on setting up ssh remotes, see the
+[[tips/centralized_git_repository_tutorial]].
diff --git a/git-annex.cabal b/git-annex.cabal
--- a/git-annex.cabal
+++ b/git-annex.cabal
@@ -1,5 +1,5 @@
 Name: git-annex
-Version: 5.20150731
+Version: 5.20150812
 Cabal-Version: >= 1.8
 License: GPL-3
 Maintainer: Joey Hess <id@joeyh.name>
@@ -109,12 +109,14 @@
   Description: Enable building with persistent for database use (disable to build on platforms not supporting TH)
   Default: True
 
+Flag Cryptonite
+  Description: Use the cryptonite library, instead of the older cryptohash
+
 Executable git-annex
   Main-Is: git-annex.hs
   Build-Depends:
    base (>= 4.5 && < 4.9),
-   optparse-applicative (>= 0.10), 
-   cryptohash (>= 0.11.0),
+   optparse-applicative (>= 0.11.0), 
    containers (>= 0.5.0.0), 
    exceptions (>= 0.6),
    QuickCheck (>= 2.1),
@@ -143,6 +145,12 @@
     Build-Depends: network-uri (>= 2.6), network (>= 2.6)
   else
     Build-Depends: network (< 2.6), network (>= 2.0)
+
+  if flag(Cryptonite)
+    Build-Depends: cryptonite
+    CPP-Options: -DWITH_CRYPTONITE
+  else
+    Build-Depends: cryptohash (>= 0.11.0)
 
   if flag(Production)
     GHC-Options: -O2
diff --git a/man/git-annex-fsck.1 b/man/git-annex-fsck.1
--- a/man/git-annex-fsck.1
+++ b/man/git-annex-fsck.1
@@ -31,7 +31,12 @@
 at any time, with eg ctrl\-c.
 .IP
 .IP "\fB\-\-more\fP"
-Continue the last incremental fsck pass, where it left off.
+Resume the last incremental fsck pass, where it left off.
+.IP
+Resuming may redundantly check some files that were checked
+before. Any files that fsck found problems with before will be re\-checked
+on resume. Also, checkpoints are made every 1000 files or every 5 minutes
+during a fsck, and it resumes from the last checkpoint.
 .IP
 .IP "\fB\-\-incremental\-schedule=time\fP"
 This makes a new incremental fsck be started only a specified
diff --git a/man/git-annex-proxy.1 b/man/git-annex-proxy.1
--- a/man/git-annex-proxy.1
+++ b/man/git-annex-proxy.1
@@ -29,6 +29,14 @@
  git annex add myfile
  git annex proxy \-\- git commit myfile \-m foo
 .PP
+The temporary work tree that the git command is run in is set up by
+checking out all files that are in the index, and copying (or hard linking)
+any unstaged files from the real work tree. Since the git command is run
+using this temporary work tree, it won't see eg, local modifications to
+files. So, it probably is not useful to proxy a command like "git add".
+However, you can use the proxy with any git command you like, as long as
+you think about how it will interact with the temporary work tree.
+.PP
 .SH SEE ALSO
 git-annex(1)
 .PP
diff --git a/man/git-annex-shell.1 b/man/git-annex-shell.1
--- a/man/git-annex-shell.1
+++ b/man/git-annex-shell.1
@@ -27,7 +27,8 @@
 .IP
 When run in a repository that does not yet have an annex.uuid, one
 will be created, as long as a git-annex branch has already been pushed to
-the repository.
+the repository, or if the autoinit= flag is used to indicate
+initialization is desired.
 .IP
 .IP "inannex directory [key ...]"
 This checks if all specified keys are present in the annex, 
@@ -59,11 +60,11 @@
 This commits any staged changes to the git-annex branch.
 It also runs the annex\-content hook.
 .IP
-.IP "notifychanges"
+.IP "notifychanges directory"
 This is used by \fBgit-annex remotedaemon\fP to be notified when
 refs in the remote repository are changed.
 .IP
-.IP "gcryptsetup gcryptid"
+.IP "gcryptsetup directory gcryptid"
 Sets up a repository as a gcrypt repository.
 .IP
 .SH OPTIONS
@@ -80,7 +81,7 @@
 on new dashed options).
 .IP
 Currently used fields include remoteuuid=, associatedfile=,
-and direct=
+direct=, and autoinit=
 .IP
 .SH HOOK
 After content is received or dropped from the repository by git-annex\-shell,
diff --git a/standalone/android/cabal.config b/standalone/android/cabal.config
--- a/standalone/android/cabal.config
+++ b/standalone/android/cabal.config
@@ -1,1062 +1,199 @@
-constraints: abstract-deque ==0.3,
-             abstract-par ==0.3.3,
-             accelerate ==0.15.1.0,
-             ace ==0.6,
-             action-permutations ==0.0.0.1,
-             active ==0.1.0.19,
-             AC-Vector ==2.3.2,
-             ad ==4.2.2,
-             adjunctions ==4.2.1,
-             aeson-pretty ==0.7.2,
-             aeson-qq ==0.7.4,
-             aeson-utils ==0.3.0.1,
-             alarmclock ==0.2.0.6,
-             alex ==3.1.4,
-             amazonka ==0.3.4,
-             amazonka-autoscaling ==0.3.4,
-             amazonka-cloudformation ==0.3.4,
-             amazonka-cloudfront ==0.3.4,
-             amazonka-cloudhsm ==0.3.4,
-             amazonka-cloudsearch ==0.3.4,
-             amazonka-cloudsearch-domains ==0.3.4,
-             amazonka-cloudtrail ==0.3.4,
-             amazonka-cloudwatch ==0.3.4,
-             amazonka-cloudwatch-logs ==0.3.4,
-             amazonka-codedeploy ==0.3.4,
-             amazonka-cognito-identity ==0.3.4,
-             amazonka-cognito-sync ==0.3.4,
-             amazonka-config ==0.3.4,
-             amazonka-core ==0.3.4,
-             amazonka-datapipeline ==0.3.4,
-             amazonka-directconnect ==0.3.4,
-             amazonka-dynamodb ==0.3.4,
-             amazonka-ec2 ==0.3.4,
-             amazonka-ecs ==0.3.4,
-             amazonka-elasticache ==0.3.4,
-             amazonka-elasticbeanstalk ==0.3.4,
-             amazonka-elastictranscoder ==0.3.4,
-             amazonka-elb ==0.3.4,
-             amazonka-emr ==0.3.4,
-             amazonka-glacier ==0.3.4,
-             amazonka-iam ==0.3.4,
-             amazonka-importexport ==0.3.4,
-             amazonka-kinesis ==0.3.4,
-             amazonka-kms ==0.3.4,
-             amazonka-lambda ==0.3.4,
-             amazonka-opsworks ==0.3.4,
-             amazonka-rds ==0.3.4,
-             amazonka-redshift ==0.3.4,
-             amazonka-route53 ==0.3.4,
-             amazonka-route53-domains ==0.3.4,
-             amazonka-s3 ==0.3.4,
-             amazonka-sdb ==0.3.4,
-             amazonka-ses ==0.3.4,
-             amazonka-sns ==0.3.4,
-             amazonka-sqs ==0.3.4,
-             amazonka-ssm ==0.3.4,
-             amazonka-storagegateway ==0.3.4,
-             amazonka-sts ==0.3.4,
-             amazonka-support ==0.3.4,
-             amazonka-swf ==0.3.4,
-             amqp ==0.12.2,
-             ansi-terminal ==0.6.2.1,
-             ansi-wl-pprint ==0.6.7.2,
-             appar ==0.1.4,
-             applicative-quoters ==0.1.0.8,
-             approximate ==0.2.1.1,
-             arbtt ==0.9.0.2,
-             arithmoi ==0.4.1.2,
-             array installed,
-             arrow-list ==0.7,
-             asn1-data ==0.7.1,
-             asn1-encoding ==0.9.0,
-             asn1-parse ==0.9.1,
-             asn1-types ==0.3.0,
-             async ==2.0.2,
-             atto-lisp ==0.2.2,
-             attoparsec ==0.12.1.6,
-             attoparsec-enumerator ==0.3.4,
-             attoparsec-expr ==0.1.1.2,
-             authenticate ==1.3.2.11,
-             authenticate-oauth ==1.5.1.1,
-             auto-update ==0.1.2.1,
-             aws ==0.11.4,
-             bake ==0.2,
-             bank-holidays-england ==0.1.0.3,
-             base installed,
-             base16-bytestring ==0.1.1.6,
-             base64-bytestring ==1.0.0.1,
-             base64-string ==0.2,
-             base-compat ==0.6.0,
-             base-prelude ==0.1.19,
-             base-unicode-symbols ==0.2.2.4,
-             basic-prelude ==0.3.13,
-             bcrypt ==0.0.6,
-             bifunctors ==4.2.1,
-             binary installed,
-             binary-conduit ==1.2.3,
-             binary-list ==1.1.1.0,
-             bindings-DSL ==1.0.22,
-             bin-package-db installed,
-             bioace ==0.0.1,
-             bioalign ==0.0.5,
-             biocore ==0.3.1,
-             biofasta ==0.0.3,
-             biofastq ==0.1,
-             biophd ==0.0.7,
-             biopsl ==0.4,
-             biosff ==0.3.7.1,
-             bits ==0.4,
-             blank-canvas ==0.5,
-             BlastHTTP ==1.0.1,
-             blastxml ==0.3.2,
-             blaze-builder ==0.4.0.1,
-             blaze-builder-enumerator ==0.2.1.0,
-             blaze-html ==0.8.0.2,
-             blaze-markup ==0.7.0.2,
-             blaze-svg ==0.3.4.1,
-             blaze-textual ==0.2.0.9,
-             bloodhound ==0.5.0.1,
-             bmp ==1.2.5.2,
-             Boolean ==0.2.3,
-             boolsimplifier ==0.1.8,
-             bound ==1.0.5,
-             BoundedChan ==1.0.3.0,
-             broadcast-chan ==0.1.0,
-             bson ==0.3.1,
-             bumper ==0.6.0.3,
-             byteable ==0.1.1,
-             bytedump ==1.0,
-             byteorder ==1.0.4,
-             bytes ==0.15,
-             bytestring installed,
-             bytestring-builder ==0.10.6.0.0,
-             bytestring-conversion ==0.3.0,
-             bytestring-lexing ==0.4.3.2,
-             bytestring-mmap ==0.2.2,
-             bytestring-progress ==1.0.5,
-             bytestring-trie ==0.2.4.1,
-             bzlib ==0.5.0.5,
-             bzlib-conduit ==0.2.1.3,
-             c2hs ==0.25.2,
-             Cabal installed,
-             cabal-file-th ==0.2.3,
-             Cabal-ide-backend ==1.23.0.0,
-             cabal-install ==1.18.1.0,
-             cabal-rpm ==0.9.6,
-             cabal-src ==0.2.5.1,
-             cabal-test-quickcheck ==0.1.4,
-             cairo ==0.13.1.0,
-             cartel ==0.14.2.6,
-             case-insensitive ==1.2.0.4,
-             cases ==0.1.2.1,
-             cassava ==0.4.2.4,
-             cereal ==0.4.1.1,
-             cereal-conduit ==0.7.2.3,
-             certificate ==1.3.9,
-             charset ==0.3.7.1,
-             Chart ==1.3.3,
-             Chart-diagrams ==1.3.3,
-             ChasingBottoms ==1.3.0.12,
-             check-email ==1.0,
-             checkers ==0.4.3,
-             chell ==0.4.0.1,
-             chell-quickcheck ==0.2.5,
-             chunked-data ==0.1.0.1,
-             cipher-aes ==0.2.10,
-             cipher-aes128 ==0.6.4,
-             cipher-blowfish ==0.0.3,
-             cipher-camellia ==0.0.2,
-             cipher-des ==0.0.6,
-             cipher-rc4 ==0.1.4,
-             circle-packing ==0.1.0.4,
-             classy-prelude ==0.11.1.1,
-             classy-prelude-conduit ==0.11.1,
-             classy-prelude-yesod ==0.11.1,
-             clay ==0.10.1,
-             clientsession ==0.9.1.1,
-             clock ==0.4.6.0,
-             cmdargs ==0.10.13,
-             code-builder ==0.1.3,
-             colour ==2.3.3,
-             comonad ==4.2.6,
-             comonads-fd ==4.0,
-             comonad-transformers ==4.0,
-             compdata ==0.9,
-             compensated ==0.6.1,
-             composition ==1.0.1.1,
-             compressed ==3.10,
-             concatenative ==1.0.1,
-             concurrent-extra ==0.7.0.9,
-             concurrent-supply ==0.1.7.1,
-             cond ==0.4.1.1,
-             conduit ==1.2.4.2,
-             conduit-combinators ==0.3.1,
-             conduit-extra ==1.1.8,
-             configurator ==0.3.0.0,
-             connection ==0.2.4,
-             constraints ==0.4.1.3,
-             consul-haskell ==0.1,
-             containers installed,
-             containers-unicode-symbols ==0.3.1.1,
-             contravariant ==1.3.1.1,
-             control-monad-free ==0.6.1,
-             control-monad-loop ==0.1,
-             convertible ==1.1.1.0,
-             cookie ==0.4.1.5,
-             courier ==0.1.0.15,
-             cpphs ==1.19,
-             cprng-aes ==0.6.1,
-             cpu ==0.1.2,
-             criterion ==1.1.0.0,
-             crypto-api ==0.13.2,
-             crypto-api-tests ==0.3,
-             cryptocipher ==0.6.2,
-             crypto-cipher-tests ==0.0.11,
-             crypto-cipher-types ==0.0.9,
-             cryptohash ==0.11.6,
-             cryptohash-conduit ==0.1.1,
-             cryptohash-cryptoapi ==0.1.3,
-             cryptol ==2.2.2,
-             crypto-numbers ==0.2.7,
-             crypto-pubkey ==0.2.8,
-             crypto-pubkey-types ==0.4.3,
-             crypto-random ==0.0.9,
-             crypto-random-api ==0.2.0,
-             css-text ==0.1.2.1,
-             csv ==0.1.2,
-             csv-conduit ==0.6.6,
-             cubicspline ==0.1.1,
-             curl ==1.3.8,
-             data-accessor ==0.2.2.6,
-             data-accessor-mtl ==0.2.0.4,
-             data-binary-ieee754 ==0.4.4,
-             data-default ==0.5.3,
-             data-default-class ==0.0.1,
-             data-default-instances-base ==0.0.1,
-             data-default-instances-containers ==0.0.1,
-             data-default-instances-dlist ==0.0.1,
-             data-default-instances-old-locale ==0.0.1,
-             data-inttrie ==0.1.0,
-             data-lens-light ==0.1.2.1,
-             data-memocombinators ==0.5.1,
-             data-reify ==0.6.1,
-             DAV ==1.0.5,
-             Decimal ==0.4.2,
-             deepseq installed,
-             deepseq-generics ==0.1.1.2,
-             derive ==2.5.22,
-             descriptive ==0.9.3,
-             diagrams ==1.2,
-             diagrams-cairo ==1.2.0.7,
-             diagrams-canvas ==0.3.0.4,
-             diagrams-contrib ==1.1.2.6,
-             diagrams-core ==1.2.0.6,
-             diagrams-lib ==1.2.0.9,
-             diagrams-postscript ==1.1.0.5,
-             diagrams-rasterific ==0.1.0.8,
-             diagrams-svg ==1.1.0.5,
-             Diff ==0.3.2,
-             digest ==0.0.1.2,
-             digestive-functors ==0.7.1.5,
-             dimensional ==0.13.0.2,
-             directory installed,
-             directory-tree ==0.12.0,
-             direct-sqlite ==2.3.15,
-             distributed-process ==0.5.3,
-             distributed-process-async ==0.2.1,
-             distributed-process-client-server ==0.1.2,
-             distributed-process-execution ==0.1.1,
-             distributed-process-extras ==0.2.0,
-             distributed-process-simplelocalnet ==0.2.2.0,
-             distributed-process-supervisor ==0.1.2,
-             distributed-process-task ==0.1.1,
-             distributed-static ==0.3.1.0,
-             distributive ==0.4.4,
-             djinn-ghc ==0.0.2.3,
-             djinn-lib ==0.0.1.2,
-             dlist ==0.7.1.1,
-             dlist-instances ==0.1,
-             doctest ==0.9.13,
-             double-conversion ==2.0.1.0,
-             DRBG ==0.5.4,
-             dual-tree ==0.2.0.6,
-             easy-file ==0.2.1,
-             ede ==0.2.8.2,
-             edit-distance ==0.2.1.3,
-             effect-handlers ==0.1.0.6,
-             either ==4.3.4,
-             elm-core-sources ==1.0.0,
-             email-validate ==2.0.1,
-             enclosed-exceptions ==1.0.1.1,
-             entropy ==0.3.6,
-             enumerator ==0.4.20,
-             eq ==4.0.4,
-             erf ==2.0.0.0,
-             errorcall-eq-instance ==0.2.0.1,
-             errors ==1.4.7,
-             ersatz ==0.3,
-             esqueleto ==2.1.3,
-             exception-mtl ==0.3.0.5,
-             exceptions ==0.8.0.2,
-             exception-transformers ==0.3.0.4,
-             executable-hash ==0.2.0.0,
-             executable-path ==0.0.3,
-             extensible-exceptions ==0.1.1.4,
-             extra ==1.1,
-             fast-logger ==2.3.1,
-             fay ==0.23.1.4,
-             fay-base ==0.20.0.0,
-             fay-builder ==0.2.0.5,
-             fay-dom ==0.5.0.1,
-             fay-jquery ==0.6.0.3,
-             fay-text ==0.3.2.2,
-             fay-uri ==0.2.0.0,
-             fb ==1.0.10,
-             fb-persistent ==0.3.4,
-             fclabels ==2.0.2.2,
-             FenwickTree ==0.1.2.1,
-             fgl ==5.5.1.0,
-             file-embed ==0.0.8.2,
-             file-location ==0.4.7.1,
-             filemanip ==0.3.6.3,
-             filepath installed,
-             fingertree ==0.1.0.2,
-             fixed ==0.2.1.1,
-             fixed-list ==0.1.6,
-             fixed-vector ==0.7.0.3,
-             flexible-defaults ==0.0.1.1,
-             flock ==0.3.1.8,
-             fmlist ==0.9,
-             focus ==0.1.4,
-             foldl ==1.0.10,
-             FontyFruity ==0.5.1.1,
-             force-layout ==0.3.0.11,
-             foreign-store ==0.2,
-             formatting ==6.2.0,
-             free ==4.11,
-             freenect ==1.2,
-             frisby ==0.2,
-             fsnotify ==0.1.0.3,
-             fuzzcheck ==0.1.1,
-             gd ==3000.7.3,
-             generic-aeson ==0.2.0.5,
-             generic-deriving ==1.6.3,
-             GenericPretty ==1.2.1,
-             generics-sop ==0.1.1.2,
-             generic-xmlpickler ==0.1.0.2,
-             ghc installed,
-             ghc-heap-view ==0.5.3,
-             ghcid ==0.3.6,
-             ghc-mod ==5.2.1.2,
-             ghc-mtl ==1.2.1.0,
-             ghc-paths ==0.1.0.9,
-             ghc-prim installed,
-             ghc-syb-utils ==0.2.3,
-             gio ==0.13.1.0,
-             gipeda ==0.1.0.2,
-             git-embed ==0.1.0,
-             gitlib ==3.1.0.1,
-             gitlib-libgit2 ==3.1.0.4,
-             gitlib-test ==3.1.0.2,
-             gitrev ==1.0.0,
-             gitson ==0.5.1,
-             gl ==0.7.7,
-             glib ==0.13.1.0,
-             Glob ==0.7.5,
-             GLURaw ==1.5.0.1,
-             GLUT ==2.7.0.1,
-             graph-core ==0.2.2.0,
-             graphs ==0.6.0.1,
-             GraphSCC ==1.0.4,
-             graphviz ==2999.17.0.2,
-             gravatar ==0.8.0,
-             groundhog ==0.7.0.3,
-             groundhog-mysql ==0.7.0.1,
-             groundhog-postgresql ==0.7.0.2,
-             groundhog-sqlite ==0.7.0.1,
-             groundhog-th ==0.7.0.1,
-             groupoids ==4.0,
-             groups ==0.4.0.0,
-             gtk ==0.13.6,
-             gtk2hs-buildtools ==0.13.0.3,
-             gtk3 ==0.13.6,
-             hackage-mirror ==0.1.0.0,
-             haddock-api ==2.15.0.2,
-             haddock-library ==1.1.1,
-             hakyll ==4.6.9.0,
-             half ==0.2.0.1,
-             HandsomeSoup ==0.3.5,
-             happstack-server ==7.4.2,
-             happy ==1.19.5,
-             hashable ==1.2.3.2,
-             hashable-extras ==0.2.1,
-             hashmap ==1.3.0.1,
-             hashtables ==1.2.0.2,
-             haskeline installed,
-             haskell2010 installed,
-             haskell98 installed,
-             haskell-lexer ==1.0,
-             haskell-names ==0.5.2,
-             HaskellNet ==0.4.4,
-             haskell-packages ==0.2.4.4,
-             haskell-src ==1.0.2.0,
-             haskell-src-exts ==1.16.0.1,
-             haskell-src-meta ==0.6.0.9,
-             haskintex ==0.5.0.3,
-             hasql ==0.7.3.1,
-             hasql-backend ==0.4.1,
-             hasql-postgres ==0.10.3.1,
-             hastache ==0.6.1,
-             HaTeX ==3.16.1.1,
-             HaXml ==1.25.3,
-             haxr ==3000.10.4.2,
-             HCodecs ==0.5,
-             hdaemonize ==0.5.0.0,
-             hdevtools ==0.1.0.8,
-             hdocs ==0.4.1.3,
-             heap ==1.0.2,
-             heaps ==0.3.2.1,
-             hebrew-time ==0.1.1,
-             heist ==0.14.1,
-             here ==1.2.7,
-             heredoc ==0.2.0.0,
-             hexpat ==0.20.9,
-             hflags ==0.4,
-             highlighting-kate ==0.5.12,
-             hindent ==4.4.2,
-             hinotify ==0.3.7,
-             hint ==0.4.2.3,
-             histogram-fill ==0.8.4.1,
-             hit ==0.6.3,
-             hjsmin ==0.1.4.7,
-             hledger ==0.24.1,
-             hledger-lib ==0.24.1,
-             hledger-web ==0.24.1,
-             hlibgit2 ==0.18.0.14,
-             hlint ==1.9.20,
-             hmatrix ==0.16.1.5,
-             hmatrix-gsl ==0.16.0.3,
-             hmatrix-gsl-stats ==0.2.1,
-             hmatrix-repa ==0.1.2.1,
-             hoauth2 ==0.4.7,
-             holy-project ==0.1.1.1,
-             hoogle ==4.2.41,
-             hoopl installed,
-             hOpenPGP ==2.0,
-             hopenpgp-tools ==0.14.1,
-             hostname ==1.0,
-             hostname-validate ==1.0.0,
-             hourglass ==0.2.9,
-             hpc installed,
-             hpc-coveralls ==0.9.0,
-             hPDB ==1.2.0.3,
-             hPDB-examples ==1.2.0.2,
-             hs-bibutils ==5.5,
-             hscolour ==1.22,
-             hsdev ==0.1.3.4,
-             hse-cpp ==0.1,
-             hsignal ==0.2.7,
-             hslogger ==1.2.9,
-             hslua ==0.3.13,
-             HsOpenSSL ==0.11.1.1,
-             hspec ==2.1.7,
-             hspec-attoparsec ==0.1.0.2,
-             hspec-core ==2.1.7,
-             hspec-discover ==2.1.7,
-             hspec-expectations ==0.6.1.1,
-             hspec-meta ==2.1.7,
-             hspec-smallcheck ==0.3.0,
-             hspec-wai ==0.6.3,
-             hspec-wai-json ==0.6.0,
-             hstatistics ==0.2.5.2,
-             HStringTemplate ==0.8.3,
-             hsyslog ==2.0,
-             HTF ==0.12.2.4,
-             html ==1.0.1.2,
-             html-conduit ==1.1.1.2,
-             HTTP ==4000.2.19,
-             http-client ==0.4.11.2,
-             http-client-openssl ==0.2.0.1,
-             http-client-tls ==0.2.2,
-             http-conduit ==2.1.5,
-             http-date ==0.0.6.1,
-             http-media ==0.6.2,
-             http-reverse-proxy ==0.4.2,
-             http-types ==0.8.6,
-             HUnit ==1.2.5.2,
-             hweblib ==0.6.3,
-             hxt ==9.3.1.15,
-             hxt-charproperties ==9.2.0.1,
-             hxt-curl ==9.1.1.1,
-             hxt-expat ==9.1.1,
-             hxt-http ==9.1.5.2,
-             hxt-pickle-utils ==0.1.0.3,
-             hxt-regex-xmlschema ==9.2.0.2,
-             hxt-relaxng ==9.1.5.5,
-             hxt-tagsoup ==9.1.3,
-             hxt-unicode ==9.0.2.4,
-             hybrid-vectors ==0.1.2.1,
-             hyphenation ==0.4.2.1,
-             iconv ==0.4.1.2,
-             ide-backend ==0.9.0.9,
-             ide-backend-common ==0.9.1.1,
-             ide-backend-rts ==0.1.3.1,
-             idna ==0.3.0,
-             ieee754 ==0.7.6,
-             IfElse ==0.85,
-             imagesize-conduit ==1.1,
-             immortal ==0.2,
-             include-file ==0.1.0.2,
-             incremental-parser ==0.2.3.4,
-             indents ==0.3.3,
-             ini ==0.3.1,
-             integer-gmp installed,
-             integration ==0.2.1,
-             interpolate ==0.1.0,
-             interpolatedstring-perl6 ==0.9.0,
-             intervals ==0.7.1,
-             io-choice ==0.0.5,
-             io-manager ==0.1.0.2,
-             io-memoize ==1.1.1.0,
-             iproute ==1.3.2,
-             iterable ==3.0,
-             ixset ==1.0.6,
-             jmacro ==0.6.12,
-             jmacro-rpc ==0.3.2,
-             jmacro-rpc-happstack ==0.3.2,
-             jmacro-rpc-snap ==0.3,
-             jose-jwt ==0.4.2,
-             js-flot ==0.8.3,
-             js-jquery ==1.11.3,
-             json ==0.9.1,
-             json-autotype ==0.2.5.13,
-             json-schema ==0.7.3.5,
-             JuicyPixels ==3.2.4,
-             JuicyPixels-repa ==0.7,
-             kan-extensions ==4.2.2,
-             kansas-comet ==0.3.1,
-             kdt ==0.2.3,
-             keter ==1.3.10.1,
-             keys ==3.10.2,
-             kmeans ==0.1.3,
-             koofr-client ==1.0.0.3,
-             kure ==2.16.10,
-             language-c ==0.4.7,
-             language-c-quote ==0.10.2.1,
-             language-ecmascript ==0.17,
-             language-glsl ==0.1.1,
-             language-haskell-extract ==0.2.4,
-             language-java ==0.2.7,
-             language-javascript ==0.5.13.3,
-             lattices ==1.2.1.1,
-             lazy-csv ==0.5,
-             lca ==0.3,
-             lens ==4.7.0.1,
-             lens-action ==0.1.0.1,
-             lens-aeson ==1.0.0.4,
-             lens-family-core ==1.2.0,
-             lens-family-th ==0.4.1.0,
-             lhs2tex ==1.19,
-             libgit ==0.3.1,
-             libnotify ==0.1.1.0,
-             lifted-async ==0.7.0.1,
-             lifted-base ==0.2.3.6,
-             linear ==1.18.1.1,
-             linear-accelerate ==0.2,
-             List ==0.5.2,
-             ListLike ==4.2.0,
-             list-t ==0.4.5.1,
-             loch-th ==0.2.1,
-             log-domain ==0.10.0.1,
-             logict ==0.6.0.2,
-             loop ==0.2.0,
-             lrucache ==1.2.0.0,
-             lucid ==2.9.2,
-             lucid-svg ==0.4.0.4,
-             lzma-conduit ==1.1.3,
-             machines ==0.4.1,
-             machines-directory ==0.2.0.6,
-             machines-io ==0.2.0.6,
-             machines-process ==0.2.0.4,
-             mainland-pretty ==0.2.7.2,
-             managed ==1.0.0,
-             mandrill ==0.2.2.0,
-             map-syntax ==0.2,
-             markdown ==0.1.13.2,
-             markdown-unlit ==0.2.0.1,
-             math-functions ==0.1.5.2,
-             matrix ==0.3.4.3,
-             maximal-cliques ==0.1.1,
-             MaybeT ==0.1.2,
-             mbox ==0.3.1,
-             MemoTrie ==0.6.2,
-             mersenne-random-pure64 ==0.2.0.4,
-             messagepack ==0.3.0,
-             messagepack-rpc ==0.1.0.3,
-             MFlow ==0.4.5.9,
-             mime-mail ==0.4.8.2,
-             mime-mail-ses ==0.3.2.2,
-             mime-types ==0.1.0.6,
-             missing-foreign ==0.1.1,
-             MissingH ==1.3.0.1,
-             mmap ==0.5.9,
-             mmorph ==1.0.4,
-             MonadCatchIO-transformers ==0.3.1.3,
-             monad-control ==1.0.0.4,
-             monad-coroutine ==0.9.0.1,
-             monadcryptorandom ==0.6.1,
-             monadic-arrays ==0.2.1.4,
-             monad-journal ==0.7,
-             monadLib ==3.7.3,
-             monadloc ==0.7.1,
-             monad-logger ==0.3.13.1,
-             monad-logger-json ==0.1.0.0,
-             monad-logger-syslog ==0.1.1.1,
-             monad-loops ==0.4.2.1,
-             monad-par ==0.3.4.7,
-             monad-parallel ==0.7.1.4,
-             monad-par-extras ==0.3.3,
-             monad-primitive ==0.1,
-             monad-products ==4.0.0.1,
-             MonadPrompt ==1.0.0.5,
-             MonadRandom ==0.3.0.2,
-             monad-st ==0.2.4,
-             monads-tf ==0.1.0.2,
-             mongoDB ==2.0.5,
-             monoid-extras ==0.3.3.5,
-             monoid-subclasses ==0.4.0.4,
-             mono-traversable ==0.9.1,
-             mtl ==2.1.3.1,
-             mtl-compat ==0.2.1.1,
-             mtlparse ==0.1.4.0,
-             mtl-prelude ==1.0.3,
-             multiarg ==0.30.0.8,
-             multimap ==1.2.1,
-             multipart ==0.1.2,
-             MusicBrainz ==0.2.4,
-             mutable-containers ==0.3.0,
-             mwc-random ==0.13.3.2,
-             mysql ==0.1.1.8,
-             mysql-simple ==0.2.2.5,
-             nanospec ==0.2.1,
-             nats ==1,
-             neat-interpolation ==0.2.2.1,
-             nettle ==0.1.0,
-             network ==2.6.1.0,
-             network-anonymous-i2p ==0.10.0,
-             network-attoparsec ==0.12.2,
-             network-conduit ==1.1.0,
-             network-conduit-tls ==1.1.2,
-             network-info ==0.2.0.5,
-             network-multicast ==0.0.11,
-             network-simple ==0.4.0.4,
-             network-transport ==0.4.1.0,
-             network-transport-tcp ==0.4.1,
-             network-transport-tests ==0.2.2.0,
-             network-uri ==2.6.0.3,
-             newtype ==0.2,
-             nsis ==0.2.5,
-             numbers ==3000.2.0.1,
-             numeric-extras ==0.0.3,
-             NumInstances ==1.4,
-             numtype ==1.1,
-             ObjectName ==1.1.0.0,
-             Octree ==0.5.4.2,
-             old-locale installed,
-             OneTuple ==0.2.1,
-             opaleye ==0.3.1.2,
-             OpenGL ==2.12.0.1,
-             OpenGLRaw ==2.4.1.0,
-             openpgp-asciiarmor ==0.1,
-             operational ==0.2.3.2,
-             options ==1.2.1.1,
-             optparse-applicative ==0.11.0.2,
-             optparse-simple ==0.0.2,
-             osdkeys ==0.0,
-             pagerduty ==0.0.3.1,
-             palette ==0.1.0.2,
-             pandoc ==1.13.2.1,
-             pandoc-citeproc ==0.6.0.1,
-             pandoc-types ==1.12.4.2,
-             pango ==0.13.1.0,
-             parallel ==3.2.0.6,
-             parallel-io ==0.3.3,
-             parseargs ==0.1.5.2,
-             parsec ==3.1.9,
-             parsers ==0.12.2.1,
-             partial-handler ==0.1.1,
-             path-pieces ==0.2.0,
-             patience ==0.1.1,
-             pcre-heavy ==0.2.2,
-             pcre-light ==0.4.0.3,
-             pdfinfo ==1.5.4,
-             pem ==0.2.2,
-             persistent ==2.1.5,
-             persistent-mongoDB ==2.1.2.2,
-             persistent-mysql ==2.1.3.1,
-             persistent-postgresql ==2.1.5.3,
-             persistent-sqlite ==2.1.4.2,
-             persistent-template ==2.1.3.1,
-             phantom-state ==0.2.0.2,
-             picoparsec ==0.1.2.2,
-             pipes ==4.1.5,
-             pipes-aeson ==0.4.1.3,
-             pipes-attoparsec ==0.5.1.2,
-             pipes-binary ==0.4.0.4,
-             pipes-bytestring ==2.1.1,
-             pipes-concurrency ==2.0.3,
-             pipes-group ==1.0.2,
-             pipes-network ==0.6.4,
-             pipes-parse ==3.0.2,
-             pipes-safe ==2.2.2,
-             placeholders ==0.1,
-             plot ==0.2.3.4,
-             plot-gtk ==0.2.0.2,
-             plot-gtk3 ==0.1,
-             pointed ==4.2.0.2,
-             polyparse ==1.11,
-             postgresql-binary ==0.5.2.1,
-             postgresql-libpq ==0.9.0.2,
-             postgresql-simple ==0.4.10.0,
-             post-mess-age ==0.1.0.0,
-             prednote ==0.32.0.6,
-             prefix-units ==0.1.0.2,
-             prelude-extras ==0.4,
-             presburger ==1.3.1,
-             present ==2.2,
-             pretty installed,
-             prettyclass ==1.0.0.0,
-             pretty-class ==1.0.1.1,
-             pretty-show ==1.6.8.2,
-             primes ==0.2.1.0,
-             primitive ==0.6,
-             process installed,
-             process-extras ==0.3.3.4,
-             product-profunctors ==0.6.1,
-             profunctor-extras ==4.0,
-             profunctors ==4.4.1,
-             project-template ==0.1.4.2,
-             PSQueue ==1.1,
-             publicsuffixlist ==0.1,
-             punycode ==2.0,
-             pure-io ==0.2.1,
-             pureMD5 ==2.1.2.1,
-             pwstore-fast ==2.4.4,
-             quandl-api ==0.2.1.0,
-             QuasiText ==0.1.2.5,
-             QuickCheck ==2.7.6,
-             quickcheck-assertions ==0.2.0,
-             quickcheck-instances ==0.3.11,
-             quickcheck-io ==0.1.1,
-             quickcheck-unicode ==1.0.0.1,
-             rainbow ==0.22.0.2,
-             random ==1.1,
-             random-fu ==0.2.6.2,
-             random-shuffle ==0.0.4,
-             random-source ==0.3.0.6,
-             rank1dynamic ==0.2.0.1,
-             Rasterific ==0.5.2.1,
-             rasterific-svg ==0.1.0.3,
-             raw-strings-qq ==1.0.2,
-             ReadArgs ==1.2.2,
-             reducers ==3.10.3.1,
-             reflection ==1.5.2.1,
-             RefSerialize ==0.3.1.4,
-             regex-applicative ==0.3.1,
-             regex-base ==0.93.2,
-             regex-compat ==0.95.1,
-             regex-pcre-builtin ==0.94.4.8.8.35,
-             regex-posix ==0.95.2,
-             regexpr ==0.5.4,
-             regex-tdfa ==1.2.0,
-             regex-tdfa-rc ==1.1.8.3,
-             regular ==0.3.4.4,
-             regular-xmlpickler ==0.2,
-             rematch ==0.2.0.0,
-             repa ==3.3.1.2,
-             repa-algorithms ==3.3.1.2,
-             repa-devil ==0.3.2.6,
-             repa-io ==3.3.1.2,
-             reroute ==0.2.3.0,
-             resource-pool ==0.2.3.2,
-             resourcet ==1.1.5,
-             rest-client ==0.5.0.3,
-             rest-core ==0.35.1,
-             rest-gen ==0.17.0.4,
-             rest-happstack ==0.2.10.8,
-             rest-snap ==0.1.17.18,
-             rest-stringmap ==0.2.0.4,
-             rest-types ==1.13.1,
-             rest-wai ==0.1.0.8,
-             rethinkdb-client-driver ==0.0.18,
-             retry ==0.6,
-             rev-state ==0.1,
-             rfc5051 ==0.1.0.3,
-             RSA ==2.1.0.1,
-             rts installed,
-             runmemo ==1.0.0.1,
-             rvar ==0.2.0.2,
-             safe ==0.3.9,
-             safecopy ==0.8.5,
-             sbv ==4.2,
-             scientific ==0.3.3.8,
-             scotty ==0.9.1,
-             scrobble ==0.2.1.1,
-             sdl2 ==1.3.1,
-             securemem ==0.1.7,
-             semigroupoid-extras ==4.0,
-             semigroupoids ==4.3,
-             semigroups ==0.16.2.2,
-             semver ==0.3.3.1,
-             sendfile ==0.7.9,
-             seqloc ==0.6.1.1,
-             servant ==0.2.2,
-             servant-client ==0.2.2,
-             servant-docs ==0.3.1,
-             servant-jquery ==0.2.2.1,
-             servant-server ==0.2.4,
-             setenv ==0.1.1.3,
-             set-monad ==0.2.0.0,
-             SHA ==1.6.4.2,
-             shake ==0.15.2,
-             shake-language-c ==0.6.4,
-             shakespeare ==2.0.5,
-             shakespeare-text ==1.1.0,
-             shell-conduit ==4.5.2,
-             shelltestrunner ==1.3.5,
-             shelly ==1.6.1.2,
-             silently ==1.2.4.1,
-             simple-reflect ==0.3.2,
-             simple-sendfile ==0.2.20,
-             singletons ==1.1.2,
-             siphash ==1.0.3,
-             skein ==1.0.9.3,
-             slave-thread ==0.1.6,
-             smallcheck ==1.1.1,
-             smoothie ==0.1.3,
-             smtLib ==1.0.7,
-             snap ==0.14.0.4,
-             snap-core ==0.9.7.0,
-             snaplet-fay ==0.3.3.11,
-             snap-server ==0.9.5.1,
-             snowflake ==0.1.1.1,
-             soap ==0.2.2.5,
-             soap-openssl ==0.1.0.2,
-             soap-tls ==0.1.1.2,
-             socks ==0.5.4,
-             sodium ==0.11.0.3,
-             sourcemap ==0.1.3.0,
-             speculation ==1.5.0.2,
-             sphinx ==0.6.0.1,
-             split ==0.2.2,
-             Spock ==0.7.9.0,
-             Spock-digestive ==0.1.0.0,
-             Spock-worker ==0.2.1.3,
-             spoon ==0.3.1,
-             sqlite-simple ==0.4.8.0,
-             srcloc ==0.4.1,
-             stackage ==0.7.2.0,
-             stackage-build-plan ==0.1.1.0,
-             stackage-cli ==0.1.0.2,
-             stackage-curator ==0.7.4,
-             stackage-install ==0.1.1.1,
-             stackage-types ==1.0.1.1,
-             stackage-update ==0.1.2,
-             stackage-upload ==0.1.0.5,
-             stateref ==0.3,
-             statestack ==0.2.0.4,
-             StateVar ==1.1.0.0,
-             statistics ==0.13.2.3,
-             statistics-linreg ==0.3,
-             stm ==2.4.4,
-             stm-chans ==3.0.0.3,
-             stm-conduit ==2.5.4,
-             stm-containers ==0.2.9,
-             stm-stats ==0.2.0.0,
-             storable-complex ==0.2.2,
-             storable-endian ==0.2.5,
-             streaming-commons ==0.1.12.1,
-             streams ==3.2,
-             strict ==0.3.2,
-             stringable ==0.1.3,
-             stringbuilder ==0.5.0,
-             string-conversions ==0.3.0.3,
-             stringprep ==1.0.0,
-             stringsearch ==0.3.6.6,
-             stylish-haskell ==0.5.13.0,
-             SVGFonts ==1.4.0.3,
-             svg-tree ==0.1.1,
-             syb ==0.4.4,
-             syb-with-class ==0.6.1.5,
-             symbol ==0.2.4,
-             system-canonicalpath ==0.3.2.0,
-             system-fileio ==0.3.16.3,
-             system-filepath ==0.4.13.4,
-             system-posix-redirect ==1.1.0.1,
-             tabular ==0.2.2.7,
-             tagged ==0.7.3,
-             tagshare ==0.0,
-             tagsoup ==0.13.3,
-             tagstream-conduit ==0.5.5.3,
-             tar ==0.4.1.0,
-             tardis ==0.3.0.0,
-             tasty ==0.10.1.2,
-             tasty-ant-xml ==1.0.1,
-             tasty-golden ==2.3.0.1,
-             tasty-hunit ==0.9.2,
-             tasty-kat ==0.0.3,
-             tasty-quickcheck ==0.8.3.2,
-             tasty-smallcheck ==0.8.0.1,
-             tasty-th ==0.1.3,
-             TCache ==0.12.0,
-             template-haskell installed,
-             temporary ==1.2.0.3,
-             temporary-rc ==1.2.0.3,
-             terminal-progress-bar ==0.0.1.4,
-             terminal-size ==0.3.0,
-             terminfo installed,
-             test-framework ==0.8.1.1,
-             test-framework-hunit ==0.3.0.1,
-             test-framework-quickcheck2 ==0.3.0.3,
-             test-framework-th ==0.2.4,
-             testing-feat ==0.4.0.2,
-             testpack ==2.1.3.0,
-             texmath ==0.8.2,
-             text ==1.2.0.6,
-             text-binary ==0.1.0,
-             text-format ==0.3.1.1,
-             text-icu ==0.7.0.1,
-             text-manipulate ==0.1.3.1,
-             tf-random ==0.5,
-             th-desugar ==1.5.3,
-             th-expand-syns ==0.3.0.6,
-             th-extras ==0.0.0.2,
-             th-lift ==0.7.2,
-             th-orphans ==0.11.1,
-             threads ==0.5.1.3,
-             th-reify-many ==0.1.3,
-             thyme ==0.3.5.5,
-             time installed,
-             time-compat ==0.1.0.3,
-             time-lens ==0.4.0.1,
-             time-locale-compat ==0.1.0.1,
-             timezone-olson ==0.1.7,
-             timezone-series ==0.1.5.1,
-             tls ==1.2.17,
-             tls-debug ==0.3.4,
-             tostring ==0.2.1.1,
-             transformers-base ==0.4.4,
-             transformers-compat ==0.4.0.3,
-             traverse-with-class ==0.2.0.3,
-             tree-view ==0.4,
-             trifecta ==1.5.1.3,
-             tttool ==1.3,
-             tuple ==0.3.0.2,
-             turtle ==1.0.2,
-             type-eq ==0.5,
-             type-list ==0.0.0.1,
-             udbus ==0.2.1,
-             unbounded-delays ==0.1.0.9,
-             unbound-generics ==0.1.2.1,
-             union-find ==0.2,
-             uniplate ==1.6.12,
-             unix installed,
-             unix-compat ==0.4.1.4,
-             unix-time ==0.3.5,
-             unordered-containers ==0.2.5.1,
-             uri-encode ==1.5.0.4,
-             url ==2.1.3,
-             users ==0.1.0.0,
-             users-postgresql-simple ==0.1.0.1,
-             users-test ==0.1.0.0,
-             utf8-light ==0.4.2,
-             utf8-string ==1,
-             uuid ==1.3.10,
-             uuid-types ==1.0.1,
-             vault ==0.3.0.4,
-             vector ==0.10.12.3,
-             vector-algorithms ==0.6.0.4,
-             vector-binary-instances ==0.2.1.0,
-             vector-buffer ==0.4.1,
-             vector-instances ==3.3.0.1,
-             vector-space ==0.9,
-             vector-space-points ==0.2.1.1,
-             vector-th-unbox ==0.2.1.2,
-             vhd ==0.2.2,
-             void ==0.7,
-             wai ==3.0.2.3,
-             wai-app-static ==3.0.1.1,
-             wai-conduit ==3.0.0.2,
-             wai-eventsource ==3.0.0,
-             wai-extra ==3.0.7.1,
-             wai-handler-launch ==3.0.0.3,
-             wai-logger ==2.2.4,
-             wai-middleware-consul ==0.1.0.2,
-             wai-middleware-static ==0.6.0.1,
-             waitra ==0.0.3.0,
-             wai-websockets ==3.0.0.5,
-             warp ==3.0.13.1,
-             warp-tls ==3.0.3,
-             webdriver ==0.6.1,
-             web-fpco ==0.1.1.0,
-             websockets ==0.9.4.0,
-             wizards ==1.0.2,
-             wl-pprint ==1.1,
-             wl-pprint-extras ==3.5.0.4,
-             wl-pprint-terminfo ==3.7.1.3,
-             wl-pprint-text ==1.1.0.4,
-             word8 ==0.1.2,
-             wordpass ==1.0.0.3,
-             Workflow ==0.8.3,
-             wrap ==0.0.0,
-             wreq ==0.3.0.1,
-             X11 ==1.6.1.2,
-             x509 ==1.5.0.1,
-             x509-store ==1.5.0,
-             x509-system ==1.5.0,
-             x509-validation ==1.5.2,
-             xenstore ==0.1.1,
-             xhtml installed,
-             xml ==1.3.14,
-             xml-conduit ==1.2.6,
-             xml-conduit-writer ==0.1.1.1,
-             xmlgen ==0.6.2.1,
-             xml-hamlet ==0.4.0.11,
-             xmlhtml ==0.2.3.4,
-             xml-to-json ==2.0.1,
-             xml-to-json-fast ==2.0.0,
-             xml-types ==0.3.4,
-             xss-sanitize ==0.3.5.5,
-             yackage ==0.7.0.8,
-             yaml ==0.8.11,
-             Yampa ==0.9.7,
-             YampaSynth ==0.2,
-             yarr ==1.3.3.3,
-             yesod ==1.4.1.5,
-             yesod-auth ==1.4.5,
-             yesod-auth-deskcom ==1.4.0,
-             yesod-auth-fb ==1.6.6,
-             yesod-auth-hashdb ==1.4.2.1,
-             yesod-auth-oauth ==1.4.0.2,
-             yesod-auth-oauth2 ==0.0.12,
-             yesod-bin ==1.4.9.2,
-             yesod-core ==1.4.9.1,
-             yesod-eventsource ==1.4.0.1,
-             yesod-fay ==0.7.1,
-             yesod-fb ==0.3.4,
-             yesod-form ==1.4.4.1,
-             yesod-gitrepo ==0.1.1.0,
-             yesod-newsfeed ==1.4.0.1,
-             yesod-persistent ==1.4.0.2,
-             yesod-sitemap ==1.4.0.1,
-             yesod-static ==1.4.0.4,
-             yesod-test ==1.4.3.1,
-             yesod-text-markdown ==0.1.7,
-             yesod-websockets ==0.2.1.1,
-             zeromq4-haskell ==0.6.3,
-             zip-archive ==0.2.3.7,
-             zlib ==0.5.4.2,
-             zlib-bindings ==0.1.1.5,
-             zlib-enum ==0.2.3.1,
-             zlib-lens ==0.1.2
+constraints: Crypto ==4.2.5.1,
+             binary ==0.7.6.1,
+             DAV ==1.0.3,
+             HTTP ==4000.2.17,
+             HUnit ==1.2.5.2,
+             IfElse ==0.85,
+             MissingH ==1.2.1.0,
+             MonadRandom ==0.1.13,
+             QuickCheck ==2.7.6,
+             SafeSemaphore ==0.10.1,
+             aeson ==0.7.0.6,
+             ansi-wl-pprint ==0.6.7.1,
+             appar ==0.1.4,
+             asn1-encoding ==0.8.1.3,
+             asn1-parse ==0.8.1,
+             asn1-types ==0.2.3,
+             async ==2.0.1.5,
+             attoparsec ==0.11.3.4,
+             attoparsec-conduit ==1.1.0,
+             authenticate ==1.3.2.10,
+             base-unicode-symbols ==0.2.2.4,
+             base16-bytestring ==0.1.1.6,
+             base64-bytestring ==1.0.0.1,
+             bifunctors ==4.1.1.1,
+             bloomfilter ==2.0.0.0,
+             byteable ==0.1.1,
+             byteorder ==1.0.4,
+             case-insensitive ==1.2.0.1,
+             cereal ==0.4.0.1,
+             cipher-aes ==0.2.8,
+             cipher-des ==0.0.6,
+             cipher-rc4 ==0.1.4,
+             clientsession ==0.9.0.3,
+             comonad ==4.2,
+             conduit ==1.1.6,
+             conduit-extra ==1.1.3,
+             connection ==0.2.3,
+             contravariant ==0.6.1.1,
+             cookie ==0.4.1.2,
+             cprng-aes ==0.5.2,
+             crypto-api ==0.13.2,
+             crypto-cipher-types ==0.0.9,
+             crypto-numbers ==0.2.3,
+             crypto-pubkey ==0.2.4,
+             crypto-pubkey-types ==0.4.2.2,
+             crypto-random ==0.0.7,
+             cryptohash ==0.11.6,
+             cryptohash-conduit ==0.1.1,
+             css-text ==0.1.2.1,
+             data-default ==0.5.3,
+             data-default-class ==0.0.1,
+             data-default-instances-base ==0.0.1,
+             data-default-instances-containers ==0.0.1,
+             data-default-instances-dlist ==0.0.1,
+             data-default-instances-old-locale ==0.0.1,
+             sandi ==0.3.0.1,
+             dbus ==0.10.8,
+             distributive ==0.4.4,
+             dlist ==0.7.0.1,
+             dns ==1.3.0,
+             edit-distance ==0.2.1.2,
+             either ==4.3,
+             email-validate ==1.0.0,
+             entropy ==0.2.1,
+             errors ==1.4.7,
+             exceptions ==0.6.1,
+             failure ==0.2.0.3,
+             fast-logger ==2.1.5,
+             fdo-notify ==0.3.1,
+             feed ==0.3.9.2,
+             file-embed ==0.0.6,
+             fingertree ==0.1.0.0,
+             free ==4.9,
+             gnuidn ==0.2,
+             gnutls ==0.1.4,
+             gsasl ==0.3.5,
+             hS3 ==0.5.7,
+             hashable ==1.2.1.0,
+             hinotify ==0.3.5,
+             hjsmin ==0.1.4.7,
+             hslogger ==1.2.1,
+             http-client ==0.4.11.1,
+             http-client-tls ==0.2.2,
+             http-conduit ==2.1.5,
+             http-date ==0.0.2,
+             http-types ==0.8.5,
+             hxt ==9.3.1.4,
+             hxt-charproperties ==9.1.1.1,
+             hxt-regex-xmlschema ==9.0.4,
+             hxt-unicode ==9.0.2.2,
+             idna ==0.2,
+             iproute ==1.2.11,
+             json ==0.5,
+             keys ==3.10.1,
+             language-javascript ==0.5.13,
+             lens ==4.4.0.2,
+             libxml-sax ==0.7.5,
+             mime-mail ==0.4.1.2,
+             mime-types ==0.1.0.4,
+             mmorph ==1.0.3,
+             monad-control ==0.3.2.2,
+             monad-logger ==0.3.6.1,
+             monad-loops ==0.4.2.1,
+             monads-tf ==0.1.0.2,
+             mtl ==2.1.2,
+             nats ==0.1.2,
+             network ==2.4.1.2,
+             network-conduit ==1.1.0,
+             network-info ==0.2.0.5,
+             network-multicast ==0.0.10,
+             network-protocol-xmpp ==0.4.6,
+             network-uri ==2.6.0.1,
+             optparse-applicative ==0.11.0.2,
+             parallel ==3.2.0.4,
+             path-pieces ==0.1.4,
+             pem ==0.2.2,
+             persistent ==1.3.3,
+             persistent-template ==1.3.2.2,
+             pointed ==4.0,
+             prelude-extras ==0.4,
+             profunctors ==4.0.4,
+             publicsuffixlist ==0.1,
+             punycode ==2.0,
+             random ==1.0.1.1,
+             ranges ==0.2.4,
+             reducers ==3.10.2.1,
+             reflection ==1.2.0.1,
+             regex-base ==0.93.2,
+             regex-compat ==0.95.1,
+             regex-posix ==0.95.2,
+             regex-tdfa ==1.2.0,
+             resource-pool ==0.2.1.1,
+             resourcet ==1.1.2.3,
+             safe ==0.3.8,
+             securemem ==0.1.3,
+             semigroupoids ==4.2,
+             semigroups ==0.15.3,
+             shakespeare ==2.0.5,
+             silently ==1.2.4.1,
+             simple-sendfile ==0.2.14,
+             skein ==1.0.9,
+             socks ==0.5.4,
+             split ==0.2.2,
+             stm ==2.4.2,
+             stm-chans ==3.0.0.2,
+             streaming-commons ==0.1.4.1,
+             stringprep ==0.1.5,
+             stringsearch ==0.3.6.5,
+             syb ==0.4.0,
+             system-fileio ==0.3.14,
+             system-filepath ==0.4.12,
+             tagged ==0.7.2,
+             tagsoup ==0.13.1,
+             tagstream-conduit ==0.5.5.1,
+             text ==1.1.1.0,
+             text-icu ==0.6.3.7,
+             tf-random ==0.5,
+             tls ==1.2.9,
+             transformers ==0.3.0.0,
+             transformers-base ==0.4.1,
+             transformers-compat ==0.3.3.3,
+             unbounded-delays ==0.1.0.8,
+             unix-compat ==0.4.1.3,
+             unix-time ==0.2.2,
+             unordered-containers ==0.2.5.0,
+             utf8-string ==0.3.7,
+             uuid ==1.3.3,
+             vault ==0.3.0.3,
+             vector ==0.10.0.1,
+             void ==0.6.1,
+             wai ==3.0.1.1,
+             wai-app-static ==3.0.0.1,
+             wai-extra ==3.0.1.2,
+             wai-logger ==2.1.1,
+             warp ==3.0.0.5,
+             warp-tls ==3.0.0,
+             word8 ==0.1.1,
+             x509 ==1.4.11,
+             x509-store ==1.4.4,
+             x509-system ==1.4.5,
+             x509-validation ==1.5.0,
+             xml ==1.3.13,
+             xml-conduit ==1.2.1,
+             xml-hamlet ==0.4.0.9,
+             xml-types ==0.3.4,
+             xss-sanitize ==0.3.5.2,
+             yaml ==0.8.9.3,
+             yesod ==1.2.6.1,
+             yesod-auth ==1.3.4.6,
+             yesod-core ==1.2.20.1,
+             yesod-default ==1.2.0,
+             yesod-form ==1.3.16,
+             yesod-persistent ==1.2.3.1,
+             yesod-routes ==1.2.0.7,
+             yesod-static ==1.2.4,
+             zlib ==0.5.4.1,
+             bytestring ==0.10.4.0,
+             scientific ==0.3.3.1,
+             clock ==0.4.6.0
diff --git a/standalone/android/haskell-patches/crypto-numbers_build-fix.patch b/standalone/android/haskell-patches/crypto-numbers_build-fix.patch
new file mode 100644
--- /dev/null
+++ b/standalone/android/haskell-patches/crypto-numbers_build-fix.patch
@@ -0,0 +1,227 @@
+From 0cfdb30120976290068f4bcbebbf236b960afbb6 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 26 Dec 2013 20:01:30 -0400
+Subject: [PATCH] hack to build
+
+---
+ Crypto/Number/Basic.hs         |   14 --------------
+ Crypto/Number/ModArithmetic.hs |   29 -----------------------------
+ Crypto/Number/Prime.hs         |   18 ------------------
+ crypto-numbers.cabal           |    2 +-
+ 4 files changed, 1 insertion(+), 62 deletions(-)
+
+diff --git a/Crypto/Number/Basic.hs b/Crypto/Number/Basic.hs
+index 65c14b3..eaee853 100644
+--- a/Crypto/Number/Basic.hs
++++ b/Crypto/Number/Basic.hs
+@@ -20,11 +20,7 @@ module Crypto.Number.Basic
+     , areEven
+     ) where
+ 
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-import GHC.Integer.GMP.Internals
+-#else
+ import Data.Bits
+-#endif
+ 
+ -- | sqrti returns two integer (l,b) so that l <= sqrt i <= b
+ -- the implementation is quite naive, use an approximation for the first number
+@@ -63,25 +59,16 @@ sqrti i
+ -- gcde 'a' 'b' find (x,y,gcd(a,b)) where ax + by = d
+ --
+ gcde :: Integer -> Integer -> (Integer, Integer, Integer)
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-gcde a b = (s, t, g)
+-  where (# g, s #) = gcdExtInteger a b
+-        t = (g - s * a) `div` b
+-#else
+ gcde a b = if d < 0 then (-x,-y,-d) else (x,y,d) where
+     (d, x, y)                     = f (a,1,0) (b,0,1)
+     f t              (0, _, _)    = t
+     f (a', sa, ta) t@(b', sb, tb) =
+         let (q, r) = a' `divMod` b' in
+         f t (r, sa - (q * sb), ta - (q * tb))
+-#endif
+ 
+ -- | get the extended GCD of two integer using the extended binary algorithm (HAC 14.61)
+ -- get (x,y,d) where d = gcd(a,b) and x,y satisfying ax + by = d
+ gcde_binary :: Integer -> Integer -> (Integer, Integer, Integer)
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-gcde_binary = gcde
+-#else
+ gcde_binary a' b'
+     | b' == 0   = (1,0,a')
+     | a' >= b'  = compute a' b'
+@@ -105,7 +92,6 @@ gcde_binary a' b'
+              in if u2 >= v2
+                 then loop g x y (u2 - v2) v2 (a2 - c2) (b2 - d2) c2 d2
+                 else loop g x y u2 (v2 - u2) a2 b2 (c2 - a2) (d2 - b2)
+-#endif
+ 
+ -- | check if a list of integer are all even
+ areEven :: [Integer] -> Bool
+diff --git a/Crypto/Number/ModArithmetic.hs b/Crypto/Number/ModArithmetic.hs
+index 942c12f..f8cfc32 100644
+--- a/Crypto/Number/ModArithmetic.hs
++++ b/Crypto/Number/ModArithmetic.hs
+@@ -29,12 +29,8 @@ module Crypto.Number.ModArithmetic
+ import Control.Exception (throw, Exception)
+ import Data.Typeable
+ 
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-import GHC.Integer.GMP.Internals
+-#else
+ import Crypto.Number.Basic (gcde_binary)
+ import Data.Bits
+-#endif
+ 
+ -- | Raised when two numbers are supposed to be coprimes but are not.
+ data CoprimesAssertionError = CoprimesAssertionError
+@@ -55,13 +51,7 @@ expSafe :: Integer -- ^ base
+         -> Integer -- ^ exponant
+         -> Integer -- ^ modulo
+         -> Integer -- ^ result
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-expSafe b e m
+-    | odd m     = powModSecInteger b e m
+-    | otherwise = powModInteger b e m
+-#else
+ expSafe = exponentiation
+-#endif
+ 
+ -- | Compute the modular exponentiation of base^exponant using
+ -- the fastest algorithm without any consideration for
+@@ -74,11 +64,7 @@ expFast :: Integer -- ^ base
+         -> Integer -- ^ modulo
+         -> Integer -- ^ result
+ expFast =
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-    powModInteger
+-#else
+     exponentiation
+-#endif
+ 
+ -- note on exponentiation: 0^0 is treated as 1 for mimicking the standard library;
+ -- the mathematic debate is still open on whether or not this is true, but pratically
+@@ -87,22 +73,15 @@ expFast =
+ -- | exponentiation_rtl_binary computes modular exponentiation as b^e mod m
+ -- using the right-to-left binary exponentiation algorithm (HAC 14.79)
+ exponentiation_rtl_binary :: Integer -> Integer -> Integer -> Integer
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-exponentiation_rtl_binary = expSafe
+-#else
+ exponentiation_rtl_binary 0 0 m = 1 `mod` m
+ exponentiation_rtl_binary b e m = loop e b 1
+     where sq x          = (x * x) `mod` m
+           loop !0 _  !a = a `mod` m
+           loop !i !s !a = loop (i `shiftR` 1) (sq s) (if odd i then a * s else a)
+-#endif
+ 
+ -- | exponentiation computes modular exponentiation as b^e mod m
+ -- using repetitive squaring.
+ exponentiation :: Integer -> Integer -> Integer -> Integer
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-exponentiation = expSafe
+-#else
+ exponentiation b e m
+     | b == 1    = b
+     | e == 0    = 1
+@@ -110,7 +89,6 @@ exponentiation b e m
+     | even e    = let p = (exponentiation b (e `div` 2) m) `mod` m
+                    in (p^(2::Integer)) `mod` m
+     | otherwise = (b * exponentiation b (e-1) m) `mod` m
+-#endif
+ 
+ --{-# DEPRECATED exponantiation_rtl_binary "typo in API name it's called exponentiation_rtl_binary #-}
+ exponantiation_rtl_binary :: Integer -> Integer -> Integer -> Integer
+@@ -122,17 +100,10 @@ exponantiation = exponentiation
+ 
+ -- | inverse computes the modular inverse as in g^(-1) mod m
+ inverse :: Integer -> Integer -> Maybe Integer
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-inverse g m
+-    | r == 0    = Nothing
+-    | otherwise = Just r
+-  where r = recipModInteger g m
+-#else
+ inverse g m
+     | d > 1     = Nothing
+     | otherwise = Just (x `mod` m)
+   where (x,_,d) = gcde_binary g m
+-#endif
+ 
+ -- | Compute the modular inverse of 2 coprime numbers.
+ -- This is equivalent to inverse except that the result
+diff --git a/Crypto/Number/Prime.hs b/Crypto/Number/Prime.hs
+index 0cea9da..458c94d 100644
+--- a/Crypto/Number/Prime.hs
++++ b/Crypto/Number/Prime.hs
+@@ -3,9 +3,7 @@
+ #ifndef MIN_VERSION_integer_gmp
+ #define MIN_VERSION_integer_gmp(a,b,c) 0
+ #endif
+-#if MIN_VERSION_integer_gmp(0,5,1)
+ {-# LANGUAGE MagicHash #-}
+-#endif
+ -- |
+ -- Module      : Crypto.Number.Prime
+ -- License     : BSD-style
+@@ -30,12 +28,7 @@ import Crypto.Number.Generate
+ import Crypto.Number.Basic (sqrti, gcde_binary)
+ import Crypto.Number.ModArithmetic (exponantiation)
+ 
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-import GHC.Integer.GMP.Internals
+-import GHC.Base
+-#else
+ import Data.Bits
+-#endif
+ 
+ -- | returns if the number is probably prime.
+ -- first a list of small primes are implicitely tested for divisibility,
+@@ -78,21 +71,11 @@ findPrimeFromWith rng prop !n
+ -- | find a prime from a starting point with no specific property.
+ findPrimeFrom :: CPRG g => g -> Integer -> (Integer, g)
+ findPrimeFrom rng n =
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-    (nextPrimeInteger n, rng)
+-#else
+     findPrimeFromWith rng (\g _ -> (True, g)) n
+-#endif
+ 
+ -- | Miller Rabin algorithm return if the number is probably prime or composite.
+ -- the tries parameter is the number of recursion, that determines the accuracy of the test.
+ primalityTestMillerRabin :: CPRG g => g -> Int -> Integer -> (Bool, g)
+-#if MIN_VERSION_integer_gmp(0,5,1)
+-primalityTestMillerRabin rng (I# tries) !n =
+-    case testPrimeInteger n tries of
+-        0# -> (False, rng)
+-        _  -> (True, rng)
+-#else
+ primalityTestMillerRabin rng tries !n
+     | n <= 3     = error "Miller-Rabin requires tested value to be > 3"
+     | even n     = (False, rng)
+@@ -129,7 +112,6 @@ primalityTestMillerRabin rng tries !n
+                   | x2 == 1   = False
+                   | x2 /= nm1 = loop' ws ((x2*x2) `mod` n) (r+1)
+                   | otherwise = loop ws
+-#endif
+ 
+ {-
+     n < z -> witness to test
+diff --git a/crypto-numbers.cabal b/crypto-numbers.cabal
+index 9610e34..6669d78 100644
+--- a/crypto-numbers.cabal
++++ b/crypto-numbers.cabal
+@@ -15,7 +15,7 @@ Extra-Source-Files:  Tests/*.hs
+ 
+ Flag integer-gmp
+   Description: Are we using integer-gmp?
+-  Default: True
++  Default: False
+ 
+ Library
+   Build-Depends:     base >= 4 && < 5
+-- 
+1.7.10.4
+
diff --git a/standalone/android/haskell-patches/entropy_cross-build.patch b/standalone/android/haskell-patches/entropy_cross-build.patch
deleted file mode 100644
--- a/standalone/android/haskell-patches/entropy_cross-build.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 8e942c1f661b30e5477607b78528634e6d345ae8 Mon Sep 17 00:00:00 2001
-From: androidbuilder <androidbuilder@example.com>
-Date: Thu, 2 Jul 2015 21:16:15 +0000
-Subject: [PATCH] cross build
-
----
- entropy.cabal | 5 +----
- 1 file changed, 1 insertion(+), 4 deletions(-)
-
-diff --git a/entropy.cabal b/entropy.cabal
-index e4fb436..e26896c 100644
---- a/entropy.cabal
-+++ b/entropy.cabal
-@@ -14,10 +14,7 @@ category:       Data, Cryptography
- homepage:       https://github.com/TomMD/entropy
- bug-reports:    https://github.com/TomMD/entropy/issues
- stability:      stable
---- build-type:  Simple
---- ^^ Used for HaLVM
--build-type:        Custom
---- ^^ Test for RDRAND support using 'ghc'
-+build-type:  Simple
- cabal-version:  >=1.10
- tested-with:    GHC == 7.8.2
- -- data-files:
--- 
-2.1.4
diff --git a/standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch b/standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch
new file mode 100644
--- /dev/null
+++ b/standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch
@@ -0,0 +1,50 @@
+From afdec6c9e66211a0ac8419fffe191b059d1fd00c Mon Sep 17 00:00:00 2001
+From: foo <foo@bar>
+Date: Sun, 22 Sep 2013 17:24:33 +0000
+Subject: [PATCH] fix build with new base
+
+---
+ Data/Text/IDN/IDNA.chs       |    1 +
+ Data/Text/IDN/Punycode.chs   |    1 +
+ Data/Text/IDN/StringPrep.chs |    1 +
+ 3 files changed, 3 insertions(+)
+
+diff --git a/Data/Text/IDN/IDNA.chs b/Data/Text/IDN/IDNA.chs
+index ed29ee4..dbb4ba5 100644
+--- a/Data/Text/IDN/IDNA.chs
++++ b/Data/Text/IDN/IDNA.chs
+@@ -31,6 +31,7 @@ import Foreign
+ import Foreign.C
+ 
+ import Data.Text.IDN.Internal
++import System.IO.Unsafe
+ 
+ #include <idna.h>
+ #include <idn-free.h>
+diff --git a/Data/Text/IDN/Punycode.chs b/Data/Text/IDN/Punycode.chs
+index 24b5fa6..4e62555 100644
+--- a/Data/Text/IDN/Punycode.chs
++++ b/Data/Text/IDN/Punycode.chs
+@@ -32,6 +32,7 @@ import Data.List (unfoldr)
+ import qualified Data.ByteString as B
+ import qualified Data.Text as T
+ 
++import System.IO.Unsafe
+ import Foreign
+ import Foreign.C
+ 
+diff --git a/Data/Text/IDN/StringPrep.chs b/Data/Text/IDN/StringPrep.chs
+index 752dc9e..5e9fd84 100644
+--- a/Data/Text/IDN/StringPrep.chs
++++ b/Data/Text/IDN/StringPrep.chs
+@@ -39,6 +39,7 @@ import qualified Data.ByteString as B
+ import qualified Data.Text as T
+ import qualified Data.Text.Encoding as TE
+ 
++import System.IO.Unsafe
+ import Foreign
+ import Foreign.C
+ 
+-- 
+1.7.10.4
+
diff --git a/standalone/android/haskell-patches/network_2.4.1.0_0006-build-fixes.patch b/standalone/android/haskell-patches/network_2.4.1.0_0006-build-fixes.patch
deleted file mode 100644
--- a/standalone/android/haskell-patches/network_2.4.1.0_0006-build-fixes.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From cf110acc7f5863bb80ba835a009a7f59d3453239 Mon Sep 17 00:00:00 2001
-From: dummy <dummy@example.com>
-Date: Thu, 2 Jul 2015 20:19:14 +0000
-Subject: [PATCH] fix build
-
----
- Network/BSD.hsc | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/Network/BSD.hsc b/Network/BSD.hsc
-index e11ac71..039d0f1 100644
---- a/Network/BSD.hsc
-+++ b/Network/BSD.hsc
-@@ -396,7 +396,6 @@ instance Storable NetworkEntry where
-    poke _p = error "Storable.poke(BSD.NetEntry) not implemented"
- 
- 
--#if !defined(cygwin32_HOST_OS) && !defined(mingw32_HOST_OS) && !defined(_WIN32)
- getNetworkByName :: NetworkName -> IO NetworkEntry
- getNetworkByName name = withLock $ do
-  withCString name $ \ name_cstr -> do
--- 
-2.1.4
-
diff --git a/standalone/android/haskell-patches/optparse-applicative_remove-ANN.patch b/standalone/android/haskell-patches/optparse-applicative_remove-ANN.patch
deleted file mode 100644
--- a/standalone/android/haskell-patches/optparse-applicative_remove-ANN.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From b128590966d4946219e45e2efd88acf7a354abc2 Mon Sep 17 00:00:00 2001
-From: androidbuilder <androidbuilder@example.com>
-Date: Tue, 14 Oct 2014 02:28:02 +0000
-Subject: [PATCH] remove ANN
-
----
- Options/Applicative.hs           |    2 --
- Options/Applicative/Help/Core.hs |    2 --
- 2 files changed, 4 deletions(-)
-
-diff --git a/Options/Applicative.hs b/Options/Applicative.hs
-index bd4129d..f412062 100644
---- a/Options/Applicative.hs
-+++ b/Options/Applicative.hs
-@@ -34,5 +34,3 @@ import Options.Applicative.Common
- import Options.Applicative.Builder
- import Options.Applicative.Builder.Completer
- import Options.Applicative.Extra
--
--{-# ANN module "HLint: ignore Use import/export shortcut" #-}
-diff --git a/Options/Applicative/Help/Core.hs b/Options/Applicative/Help/Core.hs
-index 0a79169..3f1ce3f 100644
---- a/Options/Applicative/Help/Core.hs
-+++ b/Options/Applicative/Help/Core.hs
-@@ -139,5 +139,3 @@ parserUsage pprefs p progn = hsep
-   [ string "Usage:"
-   , string progn
-   , align (extractChunk (briefDesc pprefs p)) ]
--
--{-# ANN footerHelp "HLint: ignore Eta reduce" #-}
--- 
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/skein_hardcode_little-endian.patch b/standalone/android/haskell-patches/skein_hardcode_little-endian.patch
deleted file mode 100644
--- a/standalone/android/haskell-patches/skein_hardcode_little-endian.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 3a04b41ffce4e4e87b0fedd3a1e3434a3f06cc76 Mon Sep 17 00:00:00 2001
-From: foo <foo@bar>
-Date: Sun, 22 Sep 2013 00:18:12 +0000
-Subject: [PATCH] hardcode little endian
-
-This is the same as building with a cabal flag.
-
----
- c_impl/optimized/skein_port.h |    1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/c_impl/optimized/skein_port.h b/c_impl/optimized/skein_port.h
-index a2d0fc2..6929bb0 100644
---- a/c_impl/optimized/skein_port.h
-+++ b/c_impl/optimized/skein_port.h
-@@ -45,6 +45,7 @@ typedef uint64_t        u64b_t;             /* 64-bit unsigned integer */
-  * platform-specific code instead (e.g., for big-endian CPUs).
-  *
-  */
-+#define SKEIN_NEED_SWAP  (0)
- #ifndef SKEIN_NEED_SWAP /* compile-time "override" for endianness? */
- 
- #include "brg_endian.h"                     /* get endianness selection */
--- 
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch b/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch
--- a/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch
+++ b/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch
@@ -1,6 +1,6 @@
-From da127aa3b2c6cbf679950eb593eb8c88384cc26b Mon Sep 17 00:00:00 2001
+From db9eb179885874af342bb2c3adef7185496ba1f1 Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Thu, 2 Jul 2015 20:34:05 +0000
+Date: Wed, 15 Oct 2014 16:37:32 +0000
 Subject: [PATCH] hack for bionic
 
 ---
@@ -9,10 +9,10 @@
  2 files changed, 1 insertion(+), 13 deletions(-)
 
 diff --git a/Data/UnixTime/Types.hsc b/Data/UnixTime/Types.hsc
-index 6253b27..fb5b3fa 100644
+index d30f39b..ec7ca4c 100644
 --- a/Data/UnixTime/Types.hsc
 +++ b/Data/UnixTime/Types.hsc
-@@ -12,8 +12,6 @@ import Data.Binary
+@@ -9,8 +9,6 @@ import Foreign.Storable
  
  #include <sys/time.h>
  
@@ -20,8 +20,8 @@
 -
  -- |
  -- Data structure for Unix time.
- --
-@@ -33,16 +31,6 @@ data UnixTime = UnixTime {
+ data UnixTime = UnixTime {
+@@ -20,16 +18,6 @@ data UnixTime = UnixTime {
    , utMicroSeconds :: {-# UNPACK #-} !Int32
    } deriving (Eq,Ord,Show)
  
@@ -35,14 +35,14 @@
 -            (#poke struct timeval, tv_sec)  ptr (utSeconds ut)
 -            (#poke struct timeval, tv_usec) ptr (utMicroSeconds ut)
 -
- #if __GLASGOW_HASKELL__ >= 704
- instance Binary UnixTime where
-         put (UnixTime (CTime sec) msec) = do
+ -- |
+ -- Format of the strptime()/strftime() style.
+ type Format = ByteString
 diff --git a/cbits/conv.c b/cbits/conv.c
-index 669cfda..8fa5f9a 100644
+index ec31fef..b7bc0f9 100644
 --- a/cbits/conv.c
 +++ b/cbits/conv.c
-@@ -98,7 +98,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) {
+@@ -96,7 +96,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) {
  #else
      strptime(src, fmt, &dst);
  #endif
@@ -52,5 +52,5 @@
  
  size_t c_format_unix_time(char *fmt, time_t src, char* dst, int siz) {
 -- 
-2.1.4
+2.1.1
 
diff --git a/standalone/android/haskell-patches/vector_cross-build.patch b/standalone/android/haskell-patches/vector_cross-build.patch
deleted file mode 100644
--- a/standalone/android/haskell-patches/vector_cross-build.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 6ffd4fcb7d27ec6df709d80a40a262406446a259 Mon Sep 17 00:00:00 2001
-From: dummy <dummy@example.com>
-Date: Wed, 15 Oct 2014 17:00:56 +0000
-Subject: [PATCH] cross build
-
----
- Data/Vector/Fusion/Stream/Monadic.hs |  1 -
- 2 files changed, 14 deletions(-)
-
-diff --git a/Data/Vector/Fusion/Stream/Monadic.hs b/Data/Vector/Fusion/Stream/Monadic.hs
-index 51fec75..b089b3d 100644
---- a/Data/Vector/Fusion/Stream/Monadic.hs
-+++ b/Data/Vector/Fusion/Stream/Monadic.hs
-@@ -101,7 +101,6 @@ import GHC.Exts ( SpecConstrAnnotation(..) )
- 
- data SPEC = SPEC | SPEC2
- #if __GLASGOW_HASKELL__ >= 700
--{-# ANN type SPEC ForceSpecConstr #-}
- #endif
- 
- emptyStream :: String
--- 
-2.1.1
-
diff --git a/standalone/android/haskell-patches/warp_avoid-ipv6-for-android.patch b/standalone/android/haskell-patches/warp_avoid-ipv6-for-android.patch
deleted file mode 100644
--- a/standalone/android/haskell-patches/warp_avoid-ipv6-for-android.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From a33437e3150fb33d2fd22d29ff196be28a81c747 Mon Sep 17 00:00:00 2001
-From: androidbuilder <androidbuilder@example.com>
-Date: Thu, 2 Jul 2015 21:48:18 +0000
-Subject: [PATCH] avoid ipv6 for android
-
----
- Network/Wai/Handler/Warp/Run.hs | 9 +--------
- 1 file changed, 1 insertion(+), 8 deletions(-)
-
-diff --git a/Network/Wai/Handler/Warp/Run.hs b/Network/Wai/Handler/Warp/Run.hs
-index 34ae455..ea7475c 100644
---- a/Network/Wai/Handler/Warp/Run.hs
-+++ b/Network/Wai/Handler/Warp/Run.hs
-@@ -14,7 +14,7 @@ import Control.Monad (when, unless, void)
- import Data.ByteString (ByteString)
- import qualified Data.ByteString as S
- import Data.Char (chr)
--import Data.IP (toHostAddress, toHostAddress6)
-+import Data.IP (toHostAddress)
- import Data.IORef (IORef, newIORef, readIORef, writeIORef)
- import Data.Streaming.Network (bindPortTCP)
- import Network (sClose, Socket)
-@@ -323,13 +323,6 @@ serveConnection conn ii origAddr transport settings app = do
-                         [a] -> Just (SockAddrInet (readInt clientPort)
-                                                        (toHostAddress a))
-                         _ -> Nothing
--                ["PROXY","TCP6",clientAddr,_,clientPort,_] ->
--                    case [x | (x, t) <- reads (decodeAscii clientAddr), null t] of
--                        [a] -> Just (SockAddrInet6 (readInt clientPort)
--                                                        0
--                                                        (toHostAddress6 a)
--                                                        0)
--                        _ -> Nothing
-                 ("PROXY":"UNKNOWN":_) ->
-                     Just origAddr
-                 _ ->
--- 
-2.1.4
-
diff --git a/standalone/android/install-haskell-packages b/standalone/android/install-haskell-packages
--- a/standalone/android/install-haskell-packages
+++ b/standalone/android/install-haskell-packages
@@ -55,7 +55,7 @@
 	if [ -e config.guess ]; then
 		cp /usr/share/misc/config.guess .
 	fi
-	cabal install # --reinstall --force-reinstalls
+	cabal install # --force-reinstalls --reinstall
 	rm -f cabal.config
 
 	rm -rf $pkg*
@@ -65,7 +65,7 @@
 installgitannexdeps () {
 	pushd ../..
 	ln -sf standalone/android/cabal.config
-	cabal install --only-dependencies "$@"
+	cabal install --only-dependencies "$@" # --force-reinstalls --reinstall
 	rm -f cabal.config
 	popd
 }
@@ -86,9 +86,9 @@
 	patched iproute
 	patched primitive
 	patched socks
-	patched entropy
 	patched vector
 	patched stm-chans
+	patched persistent
 	patched profunctors
 	patched skein
 	patched lens
@@ -97,32 +97,35 @@
 	patched persistent-template
 	patched system-filepath
 	patched optparse-applicative
-	patched warp
 	patched wai-app-static
+	patched yesod-routes
 	patched shakespeare
 	patched yesod-core
+	patched yesod-persistent
 	patched yesod-form
+	patched crypto-numbers
 	patched clock
 	patched yesod-auth
 	patched yesod
 	patched process-conduit
 	patched DAV
 	patched yesod-static
-	patched uuid
 	patched dns
 	patched gnutls
 	patched unbounded-delays
+	patched gnuidn
 	patched network-protocol-xmpp
+	patched uuid
 
 	cd ..
 
 	installgitannexdeps -fAndroid -f-Pairing
 }
 
+cabal update
 setupcabal
 
 # Install packages for host ghc.
-cabal update
 installgitannexdeps
 
 # Install packages for cross ghc, with patches as necessary.
diff --git a/standalone/android/tmp/network-2.4.1.2/cabal.config b/standalone/android/tmp/network-2.4.1.2/cabal.config
--- a/standalone/android/tmp/network-2.4.1.2/cabal.config
+++ b/standalone/android/tmp/network-2.4.1.2/cabal.config
@@ -1,1062 +1,199 @@
-constraints: abstract-deque ==0.3,
-             abstract-par ==0.3.3,
-             accelerate ==0.15.1.0,
-             ace ==0.6,
-             action-permutations ==0.0.0.1,
-             active ==0.1.0.19,
-             AC-Vector ==2.3.2,
-             ad ==4.2.2,
-             adjunctions ==4.2.1,
-             aeson-pretty ==0.7.2,
-             aeson-qq ==0.7.4,
-             aeson-utils ==0.3.0.1,
-             alarmclock ==0.2.0.6,
-             alex ==3.1.4,
-             amazonka ==0.3.4,
-             amazonka-autoscaling ==0.3.4,
-             amazonka-cloudformation ==0.3.4,
-             amazonka-cloudfront ==0.3.4,
-             amazonka-cloudhsm ==0.3.4,
-             amazonka-cloudsearch ==0.3.4,
-             amazonka-cloudsearch-domains ==0.3.4,
-             amazonka-cloudtrail ==0.3.4,
-             amazonka-cloudwatch ==0.3.4,
-             amazonka-cloudwatch-logs ==0.3.4,
-             amazonka-codedeploy ==0.3.4,
-             amazonka-cognito-identity ==0.3.4,
-             amazonka-cognito-sync ==0.3.4,
-             amazonka-config ==0.3.4,
-             amazonka-core ==0.3.4,
-             amazonka-datapipeline ==0.3.4,
-             amazonka-directconnect ==0.3.4,
-             amazonka-dynamodb ==0.3.4,
-             amazonka-ec2 ==0.3.4,
-             amazonka-ecs ==0.3.4,
-             amazonka-elasticache ==0.3.4,
-             amazonka-elasticbeanstalk ==0.3.4,
-             amazonka-elastictranscoder ==0.3.4,
-             amazonka-elb ==0.3.4,
-             amazonka-emr ==0.3.4,
-             amazonka-glacier ==0.3.4,
-             amazonka-iam ==0.3.4,
-             amazonka-importexport ==0.3.4,
-             amazonka-kinesis ==0.3.4,
-             amazonka-kms ==0.3.4,
-             amazonka-lambda ==0.3.4,
-             amazonka-opsworks ==0.3.4,
-             amazonka-rds ==0.3.4,
-             amazonka-redshift ==0.3.4,
-             amazonka-route53 ==0.3.4,
-             amazonka-route53-domains ==0.3.4,
-             amazonka-s3 ==0.3.4,
-             amazonka-sdb ==0.3.4,
-             amazonka-ses ==0.3.4,
-             amazonka-sns ==0.3.4,
-             amazonka-sqs ==0.3.4,
-             amazonka-ssm ==0.3.4,
-             amazonka-storagegateway ==0.3.4,
-             amazonka-sts ==0.3.4,
-             amazonka-support ==0.3.4,
-             amazonka-swf ==0.3.4,
-             amqp ==0.12.2,
-             ansi-terminal ==0.6.2.1,
-             ansi-wl-pprint ==0.6.7.2,
-             appar ==0.1.4,
-             applicative-quoters ==0.1.0.8,
-             approximate ==0.2.1.1,
-             arbtt ==0.9.0.2,
-             arithmoi ==0.4.1.2,
-             array installed,
-             arrow-list ==0.7,
-             asn1-data ==0.7.1,
-             asn1-encoding ==0.9.0,
-             asn1-parse ==0.9.1,
-             asn1-types ==0.3.0,
-             async ==2.0.2,
-             atto-lisp ==0.2.2,
-             attoparsec ==0.12.1.6,
-             attoparsec-enumerator ==0.3.4,
-             attoparsec-expr ==0.1.1.2,
-             authenticate ==1.3.2.11,
-             authenticate-oauth ==1.5.1.1,
-             auto-update ==0.1.2.1,
-             aws ==0.11.4,
-             bake ==0.2,
-             bank-holidays-england ==0.1.0.3,
-             base installed,
-             base16-bytestring ==0.1.1.6,
-             base64-bytestring ==1.0.0.1,
-             base64-string ==0.2,
-             base-compat ==0.6.0,
-             base-prelude ==0.1.19,
-             base-unicode-symbols ==0.2.2.4,
-             basic-prelude ==0.3.13,
-             bcrypt ==0.0.6,
-             bifunctors ==4.2.1,
-             binary installed,
-             binary-conduit ==1.2.3,
-             binary-list ==1.1.1.0,
-             bindings-DSL ==1.0.22,
-             bin-package-db installed,
-             bioace ==0.0.1,
-             bioalign ==0.0.5,
-             biocore ==0.3.1,
-             biofasta ==0.0.3,
-             biofastq ==0.1,
-             biophd ==0.0.7,
-             biopsl ==0.4,
-             biosff ==0.3.7.1,
-             bits ==0.4,
-             blank-canvas ==0.5,
-             BlastHTTP ==1.0.1,
-             blastxml ==0.3.2,
-             blaze-builder ==0.4.0.1,
-             blaze-builder-enumerator ==0.2.1.0,
-             blaze-html ==0.8.0.2,
-             blaze-markup ==0.7.0.2,
-             blaze-svg ==0.3.4.1,
-             blaze-textual ==0.2.0.9,
-             bloodhound ==0.5.0.1,
-             bmp ==1.2.5.2,
-             Boolean ==0.2.3,
-             boolsimplifier ==0.1.8,
-             bound ==1.0.5,
-             BoundedChan ==1.0.3.0,
-             broadcast-chan ==0.1.0,
-             bson ==0.3.1,
-             bumper ==0.6.0.3,
-             byteable ==0.1.1,
-             bytedump ==1.0,
-             byteorder ==1.0.4,
-             bytes ==0.15,
-             bytestring installed,
-             bytestring-builder ==0.10.6.0.0,
-             bytestring-conversion ==0.3.0,
-             bytestring-lexing ==0.4.3.2,
-             bytestring-mmap ==0.2.2,
-             bytestring-progress ==1.0.5,
-             bytestring-trie ==0.2.4.1,
-             bzlib ==0.5.0.5,
-             bzlib-conduit ==0.2.1.3,
-             c2hs ==0.25.2,
-             Cabal installed,
-             cabal-file-th ==0.2.3,
-             Cabal-ide-backend ==1.23.0.0,
-             cabal-install ==1.18.1.0,
-             cabal-rpm ==0.9.6,
-             cabal-src ==0.2.5.1,
-             cabal-test-quickcheck ==0.1.4,
-             cairo ==0.13.1.0,
-             cartel ==0.14.2.6,
-             case-insensitive ==1.2.0.4,
-             cases ==0.1.2.1,
-             cassava ==0.4.2.4,
-             cereal ==0.4.1.1,
-             cereal-conduit ==0.7.2.3,
-             certificate ==1.3.9,
-             charset ==0.3.7.1,
-             Chart ==1.3.3,
-             Chart-diagrams ==1.3.3,
-             ChasingBottoms ==1.3.0.12,
-             check-email ==1.0,
-             checkers ==0.4.3,
-             chell ==0.4.0.1,
-             chell-quickcheck ==0.2.5,
-             chunked-data ==0.1.0.1,
-             cipher-aes ==0.2.10,
-             cipher-aes128 ==0.6.4,
-             cipher-blowfish ==0.0.3,
-             cipher-camellia ==0.0.2,
-             cipher-des ==0.0.6,
-             cipher-rc4 ==0.1.4,
-             circle-packing ==0.1.0.4,
-             classy-prelude ==0.11.1.1,
-             classy-prelude-conduit ==0.11.1,
-             classy-prelude-yesod ==0.11.1,
-             clay ==0.10.1,
-             clientsession ==0.9.1.1,
-             clock ==0.4.6.0,
-             cmdargs ==0.10.13,
-             code-builder ==0.1.3,
-             colour ==2.3.3,
-             comonad ==4.2.6,
-             comonads-fd ==4.0,
-             comonad-transformers ==4.0,
-             compdata ==0.9,
-             compensated ==0.6.1,
-             composition ==1.0.1.1,
-             compressed ==3.10,
-             concatenative ==1.0.1,
-             concurrent-extra ==0.7.0.9,
-             concurrent-supply ==0.1.7.1,
-             cond ==0.4.1.1,
-             conduit ==1.2.4.2,
-             conduit-combinators ==0.3.1,
-             conduit-extra ==1.1.8,
-             configurator ==0.3.0.0,
-             connection ==0.2.4,
-             constraints ==0.4.1.3,
-             consul-haskell ==0.1,
-             containers installed,
-             containers-unicode-symbols ==0.3.1.1,
-             contravariant ==1.3.1.1,
-             control-monad-free ==0.6.1,
-             control-monad-loop ==0.1,
-             convertible ==1.1.1.0,
-             cookie ==0.4.1.5,
-             courier ==0.1.0.15,
-             cpphs ==1.19,
-             cprng-aes ==0.6.1,
-             cpu ==0.1.2,
-             criterion ==1.1.0.0,
-             crypto-api ==0.13.2,
-             crypto-api-tests ==0.3,
-             cryptocipher ==0.6.2,
-             crypto-cipher-tests ==0.0.11,
-             crypto-cipher-types ==0.0.9,
-             cryptohash ==0.11.6,
-             cryptohash-conduit ==0.1.1,
-             cryptohash-cryptoapi ==0.1.3,
-             cryptol ==2.2.2,
-             crypto-numbers ==0.2.7,
-             crypto-pubkey ==0.2.8,
-             crypto-pubkey-types ==0.4.3,
-             crypto-random ==0.0.9,
-             crypto-random-api ==0.2.0,
-             css-text ==0.1.2.1,
-             csv ==0.1.2,
-             csv-conduit ==0.6.6,
-             cubicspline ==0.1.1,
-             curl ==1.3.8,
-             data-accessor ==0.2.2.6,
-             data-accessor-mtl ==0.2.0.4,
-             data-binary-ieee754 ==0.4.4,
-             data-default ==0.5.3,
-             data-default-class ==0.0.1,
-             data-default-instances-base ==0.0.1,
-             data-default-instances-containers ==0.0.1,
-             data-default-instances-dlist ==0.0.1,
-             data-default-instances-old-locale ==0.0.1,
-             data-inttrie ==0.1.0,
-             data-lens-light ==0.1.2.1,
-             data-memocombinators ==0.5.1,
-             data-reify ==0.6.1,
-             DAV ==1.0.5,
-             Decimal ==0.4.2,
-             deepseq installed,
-             deepseq-generics ==0.1.1.2,
-             derive ==2.5.22,
-             descriptive ==0.9.3,
-             diagrams ==1.2,
-             diagrams-cairo ==1.2.0.7,
-             diagrams-canvas ==0.3.0.4,
-             diagrams-contrib ==1.1.2.6,
-             diagrams-core ==1.2.0.6,
-             diagrams-lib ==1.2.0.9,
-             diagrams-postscript ==1.1.0.5,
-             diagrams-rasterific ==0.1.0.8,
-             diagrams-svg ==1.1.0.5,
-             Diff ==0.3.2,
-             digest ==0.0.1.2,
-             digestive-functors ==0.7.1.5,
-             dimensional ==0.13.0.2,
-             directory installed,
-             directory-tree ==0.12.0,
-             direct-sqlite ==2.3.15,
-             distributed-process ==0.5.3,
-             distributed-process-async ==0.2.1,
-             distributed-process-client-server ==0.1.2,
-             distributed-process-execution ==0.1.1,
-             distributed-process-extras ==0.2.0,
-             distributed-process-simplelocalnet ==0.2.2.0,
-             distributed-process-supervisor ==0.1.2,
-             distributed-process-task ==0.1.1,
-             distributed-static ==0.3.1.0,
-             distributive ==0.4.4,
-             djinn-ghc ==0.0.2.3,
-             djinn-lib ==0.0.1.2,
-             dlist ==0.7.1.1,
-             dlist-instances ==0.1,
-             doctest ==0.9.13,
-             double-conversion ==2.0.1.0,
-             DRBG ==0.5.4,
-             dual-tree ==0.2.0.6,
-             easy-file ==0.2.1,
-             ede ==0.2.8.2,
-             edit-distance ==0.2.1.3,
-             effect-handlers ==0.1.0.6,
-             either ==4.3.4,
-             elm-core-sources ==1.0.0,
-             email-validate ==2.0.1,
-             enclosed-exceptions ==1.0.1.1,
-             entropy ==0.3.6,
-             enumerator ==0.4.20,
-             eq ==4.0.4,
-             erf ==2.0.0.0,
-             errorcall-eq-instance ==0.2.0.1,
-             errors ==1.4.7,
-             ersatz ==0.3,
-             esqueleto ==2.1.3,
-             exception-mtl ==0.3.0.5,
-             exceptions ==0.8.0.2,
-             exception-transformers ==0.3.0.4,
-             executable-hash ==0.2.0.0,
-             executable-path ==0.0.3,
-             extensible-exceptions ==0.1.1.4,
-             extra ==1.1,
-             fast-logger ==2.3.1,
-             fay ==0.23.1.4,
-             fay-base ==0.20.0.0,
-             fay-builder ==0.2.0.5,
-             fay-dom ==0.5.0.1,
-             fay-jquery ==0.6.0.3,
-             fay-text ==0.3.2.2,
-             fay-uri ==0.2.0.0,
-             fb ==1.0.10,
-             fb-persistent ==0.3.4,
-             fclabels ==2.0.2.2,
-             FenwickTree ==0.1.2.1,
-             fgl ==5.5.1.0,
-             file-embed ==0.0.8.2,
-             file-location ==0.4.7.1,
-             filemanip ==0.3.6.3,
-             filepath installed,
-             fingertree ==0.1.0.2,
-             fixed ==0.2.1.1,
-             fixed-list ==0.1.6,
-             fixed-vector ==0.7.0.3,
-             flexible-defaults ==0.0.1.1,
-             flock ==0.3.1.8,
-             fmlist ==0.9,
-             focus ==0.1.4,
-             foldl ==1.0.10,
-             FontyFruity ==0.5.1.1,
-             force-layout ==0.3.0.11,
-             foreign-store ==0.2,
-             formatting ==6.2.0,
-             free ==4.11,
-             freenect ==1.2,
-             frisby ==0.2,
-             fsnotify ==0.1.0.3,
-             fuzzcheck ==0.1.1,
-             gd ==3000.7.3,
-             generic-aeson ==0.2.0.5,
-             generic-deriving ==1.6.3,
-             GenericPretty ==1.2.1,
-             generics-sop ==0.1.1.2,
-             generic-xmlpickler ==0.1.0.2,
-             ghc installed,
-             ghc-heap-view ==0.5.3,
-             ghcid ==0.3.6,
-             ghc-mod ==5.2.1.2,
-             ghc-mtl ==1.2.1.0,
-             ghc-paths ==0.1.0.9,
-             ghc-prim installed,
-             ghc-syb-utils ==0.2.3,
-             gio ==0.13.1.0,
-             gipeda ==0.1.0.2,
-             git-embed ==0.1.0,
-             gitlib ==3.1.0.1,
-             gitlib-libgit2 ==3.1.0.4,
-             gitlib-test ==3.1.0.2,
-             gitrev ==1.0.0,
-             gitson ==0.5.1,
-             gl ==0.7.7,
-             glib ==0.13.1.0,
-             Glob ==0.7.5,
-             GLURaw ==1.5.0.1,
-             GLUT ==2.7.0.1,
-             graph-core ==0.2.2.0,
-             graphs ==0.6.0.1,
-             GraphSCC ==1.0.4,
-             graphviz ==2999.17.0.2,
-             gravatar ==0.8.0,
-             groundhog ==0.7.0.3,
-             groundhog-mysql ==0.7.0.1,
-             groundhog-postgresql ==0.7.0.2,
-             groundhog-sqlite ==0.7.0.1,
-             groundhog-th ==0.7.0.1,
-             groupoids ==4.0,
-             groups ==0.4.0.0,
-             gtk ==0.13.6,
-             gtk2hs-buildtools ==0.13.0.3,
-             gtk3 ==0.13.6,
-             hackage-mirror ==0.1.0.0,
-             haddock-api ==2.15.0.2,
-             haddock-library ==1.1.1,
-             hakyll ==4.6.9.0,
-             half ==0.2.0.1,
-             HandsomeSoup ==0.3.5,
-             happstack-server ==7.4.2,
-             happy ==1.19.5,
-             hashable ==1.2.3.2,
-             hashable-extras ==0.2.1,
-             hashmap ==1.3.0.1,
-             hashtables ==1.2.0.2,
-             haskeline installed,
-             haskell2010 installed,
-             haskell98 installed,
-             haskell-lexer ==1.0,
-             haskell-names ==0.5.2,
-             HaskellNet ==0.4.4,
-             haskell-packages ==0.2.4.4,
-             haskell-src ==1.0.2.0,
-             haskell-src-exts ==1.16.0.1,
-             haskell-src-meta ==0.6.0.9,
-             haskintex ==0.5.0.3,
-             hasql ==0.7.3.1,
-             hasql-backend ==0.4.1,
-             hasql-postgres ==0.10.3.1,
-             hastache ==0.6.1,
-             HaTeX ==3.16.1.1,
-             HaXml ==1.25.3,
-             haxr ==3000.10.4.2,
-             HCodecs ==0.5,
-             hdaemonize ==0.5.0.0,
-             hdevtools ==0.1.0.8,
-             hdocs ==0.4.1.3,
-             heap ==1.0.2,
-             heaps ==0.3.2.1,
-             hebrew-time ==0.1.1,
-             heist ==0.14.1,
-             here ==1.2.7,
-             heredoc ==0.2.0.0,
-             hexpat ==0.20.9,
-             hflags ==0.4,
-             highlighting-kate ==0.5.12,
-             hindent ==4.4.2,
-             hinotify ==0.3.7,
-             hint ==0.4.2.3,
-             histogram-fill ==0.8.4.1,
-             hit ==0.6.3,
-             hjsmin ==0.1.4.7,
-             hledger ==0.24.1,
-             hledger-lib ==0.24.1,
-             hledger-web ==0.24.1,
-             hlibgit2 ==0.18.0.14,
-             hlint ==1.9.20,
-             hmatrix ==0.16.1.5,
-             hmatrix-gsl ==0.16.0.3,
-             hmatrix-gsl-stats ==0.2.1,
-             hmatrix-repa ==0.1.2.1,
-             hoauth2 ==0.4.7,
-             holy-project ==0.1.1.1,
-             hoogle ==4.2.41,
-             hoopl installed,
-             hOpenPGP ==2.0,
-             hopenpgp-tools ==0.14.1,
-             hostname ==1.0,
-             hostname-validate ==1.0.0,
-             hourglass ==0.2.9,
-             hpc installed,
-             hpc-coveralls ==0.9.0,
-             hPDB ==1.2.0.3,
-             hPDB-examples ==1.2.0.2,
-             hs-bibutils ==5.5,
-             hscolour ==1.22,
-             hsdev ==0.1.3.4,
-             hse-cpp ==0.1,
-             hsignal ==0.2.7,
-             hslogger ==1.2.9,
-             hslua ==0.3.13,
-             HsOpenSSL ==0.11.1.1,
-             hspec ==2.1.7,
-             hspec-attoparsec ==0.1.0.2,
-             hspec-core ==2.1.7,
-             hspec-discover ==2.1.7,
-             hspec-expectations ==0.6.1.1,
-             hspec-meta ==2.1.7,
-             hspec-smallcheck ==0.3.0,
-             hspec-wai ==0.6.3,
-             hspec-wai-json ==0.6.0,
-             hstatistics ==0.2.5.2,
-             HStringTemplate ==0.8.3,
-             hsyslog ==2.0,
-             HTF ==0.12.2.4,
-             html ==1.0.1.2,
-             html-conduit ==1.1.1.2,
-             HTTP ==4000.2.19,
-             http-client ==0.4.11.2,
-             http-client-openssl ==0.2.0.1,
-             http-client-tls ==0.2.2,
-             http-conduit ==2.1.5,
-             http-date ==0.0.6.1,
-             http-media ==0.6.2,
-             http-reverse-proxy ==0.4.2,
-             http-types ==0.8.6,
-             HUnit ==1.2.5.2,
-             hweblib ==0.6.3,
-             hxt ==9.3.1.15,
-             hxt-charproperties ==9.2.0.1,
-             hxt-curl ==9.1.1.1,
-             hxt-expat ==9.1.1,
-             hxt-http ==9.1.5.2,
-             hxt-pickle-utils ==0.1.0.3,
-             hxt-regex-xmlschema ==9.2.0.2,
-             hxt-relaxng ==9.1.5.5,
-             hxt-tagsoup ==9.1.3,
-             hxt-unicode ==9.0.2.4,
-             hybrid-vectors ==0.1.2.1,
-             hyphenation ==0.4.2.1,
-             iconv ==0.4.1.2,
-             ide-backend ==0.9.0.9,
-             ide-backend-common ==0.9.1.1,
-             ide-backend-rts ==0.1.3.1,
-             idna ==0.3.0,
-             ieee754 ==0.7.6,
-             IfElse ==0.85,
-             imagesize-conduit ==1.1,
-             immortal ==0.2,
-             include-file ==0.1.0.2,
-             incremental-parser ==0.2.3.4,
-             indents ==0.3.3,
-             ini ==0.3.1,
-             integer-gmp installed,
-             integration ==0.2.1,
-             interpolate ==0.1.0,
-             interpolatedstring-perl6 ==0.9.0,
-             intervals ==0.7.1,
-             io-choice ==0.0.5,
-             io-manager ==0.1.0.2,
-             io-memoize ==1.1.1.0,
-             iproute ==1.3.2,
-             iterable ==3.0,
-             ixset ==1.0.6,
-             jmacro ==0.6.12,
-             jmacro-rpc ==0.3.2,
-             jmacro-rpc-happstack ==0.3.2,
-             jmacro-rpc-snap ==0.3,
-             jose-jwt ==0.4.2,
-             js-flot ==0.8.3,
-             js-jquery ==1.11.3,
-             json ==0.9.1,
-             json-autotype ==0.2.5.13,
-             json-schema ==0.7.3.5,
-             JuicyPixels ==3.2.4,
-             JuicyPixels-repa ==0.7,
-             kan-extensions ==4.2.2,
-             kansas-comet ==0.3.1,
-             kdt ==0.2.3,
-             keter ==1.3.10.1,
-             keys ==3.10.2,
-             kmeans ==0.1.3,
-             koofr-client ==1.0.0.3,
-             kure ==2.16.10,
-             language-c ==0.4.7,
-             language-c-quote ==0.10.2.1,
-             language-ecmascript ==0.17,
-             language-glsl ==0.1.1,
-             language-haskell-extract ==0.2.4,
-             language-java ==0.2.7,
-             language-javascript ==0.5.13.3,
-             lattices ==1.2.1.1,
-             lazy-csv ==0.5,
-             lca ==0.3,
-             lens ==4.7.0.1,
-             lens-action ==0.1.0.1,
-             lens-aeson ==1.0.0.4,
-             lens-family-core ==1.2.0,
-             lens-family-th ==0.4.1.0,
-             lhs2tex ==1.19,
-             libgit ==0.3.1,
-             libnotify ==0.1.1.0,
-             lifted-async ==0.7.0.1,
-             lifted-base ==0.2.3.6,
-             linear ==1.18.1.1,
-             linear-accelerate ==0.2,
-             List ==0.5.2,
-             ListLike ==4.2.0,
-             list-t ==0.4.5.1,
-             loch-th ==0.2.1,
-             log-domain ==0.10.0.1,
-             logict ==0.6.0.2,
-             loop ==0.2.0,
-             lrucache ==1.2.0.0,
-             lucid ==2.9.2,
-             lucid-svg ==0.4.0.4,
-             lzma-conduit ==1.1.3,
-             machines ==0.4.1,
-             machines-directory ==0.2.0.6,
-             machines-io ==0.2.0.6,
-             machines-process ==0.2.0.4,
-             mainland-pretty ==0.2.7.2,
-             managed ==1.0.0,
-             mandrill ==0.2.2.0,
-             map-syntax ==0.2,
-             markdown ==0.1.13.2,
-             markdown-unlit ==0.2.0.1,
-             math-functions ==0.1.5.2,
-             matrix ==0.3.4.3,
-             maximal-cliques ==0.1.1,
-             MaybeT ==0.1.2,
-             mbox ==0.3.1,
-             MemoTrie ==0.6.2,
-             mersenne-random-pure64 ==0.2.0.4,
-             messagepack ==0.3.0,
-             messagepack-rpc ==0.1.0.3,
-             MFlow ==0.4.5.9,
-             mime-mail ==0.4.8.2,
-             mime-mail-ses ==0.3.2.2,
-             mime-types ==0.1.0.6,
-             missing-foreign ==0.1.1,
-             MissingH ==1.3.0.1,
-             mmap ==0.5.9,
-             mmorph ==1.0.4,
-             MonadCatchIO-transformers ==0.3.1.3,
-             monad-control ==1.0.0.4,
-             monad-coroutine ==0.9.0.1,
-             monadcryptorandom ==0.6.1,
-             monadic-arrays ==0.2.1.4,
-             monad-journal ==0.7,
-             monadLib ==3.7.3,
-             monadloc ==0.7.1,
-             monad-logger ==0.3.13.1,
-             monad-logger-json ==0.1.0.0,
-             monad-logger-syslog ==0.1.1.1,
-             monad-loops ==0.4.2.1,
-             monad-par ==0.3.4.7,
-             monad-parallel ==0.7.1.4,
-             monad-par-extras ==0.3.3,
-             monad-primitive ==0.1,
-             monad-products ==4.0.0.1,
-             MonadPrompt ==1.0.0.5,
-             MonadRandom ==0.3.0.2,
-             monad-st ==0.2.4,
-             monads-tf ==0.1.0.2,
-             mongoDB ==2.0.5,
-             monoid-extras ==0.3.3.5,
-             monoid-subclasses ==0.4.0.4,
-             mono-traversable ==0.9.1,
-             mtl ==2.1.3.1,
-             mtl-compat ==0.2.1.1,
-             mtlparse ==0.1.4.0,
-             mtl-prelude ==1.0.3,
-             multiarg ==0.30.0.8,
-             multimap ==1.2.1,
-             multipart ==0.1.2,
-             MusicBrainz ==0.2.4,
-             mutable-containers ==0.3.0,
-             mwc-random ==0.13.3.2,
-             mysql ==0.1.1.8,
-             mysql-simple ==0.2.2.5,
-             nanospec ==0.2.1,
-             nats ==1,
-             neat-interpolation ==0.2.2.1,
-             nettle ==0.1.0,
-             network ==2.6.1.0,
-             network-anonymous-i2p ==0.10.0,
-             network-attoparsec ==0.12.2,
-             network-conduit ==1.1.0,
-             network-conduit-tls ==1.1.2,
-             network-info ==0.2.0.5,
-             network-multicast ==0.0.11,
-             network-simple ==0.4.0.4,
-             network-transport ==0.4.1.0,
-             network-transport-tcp ==0.4.1,
-             network-transport-tests ==0.2.2.0,
-             network-uri ==2.6.0.3,
-             newtype ==0.2,
-             nsis ==0.2.5,
-             numbers ==3000.2.0.1,
-             numeric-extras ==0.0.3,
-             NumInstances ==1.4,
-             numtype ==1.1,
-             ObjectName ==1.1.0.0,
-             Octree ==0.5.4.2,
-             old-locale installed,
-             OneTuple ==0.2.1,
-             opaleye ==0.3.1.2,
-             OpenGL ==2.12.0.1,
-             OpenGLRaw ==2.4.1.0,
-             openpgp-asciiarmor ==0.1,
-             operational ==0.2.3.2,
-             options ==1.2.1.1,
-             optparse-applicative ==0.11.0.2,
-             optparse-simple ==0.0.2,
-             osdkeys ==0.0,
-             pagerduty ==0.0.3.1,
-             palette ==0.1.0.2,
-             pandoc ==1.13.2.1,
-             pandoc-citeproc ==0.6.0.1,
-             pandoc-types ==1.12.4.2,
-             pango ==0.13.1.0,
-             parallel ==3.2.0.6,
-             parallel-io ==0.3.3,
-             parseargs ==0.1.5.2,
-             parsec ==3.1.9,
-             parsers ==0.12.2.1,
-             partial-handler ==0.1.1,
-             path-pieces ==0.2.0,
-             patience ==0.1.1,
-             pcre-heavy ==0.2.2,
-             pcre-light ==0.4.0.3,
-             pdfinfo ==1.5.4,
-             pem ==0.2.2,
-             persistent ==2.1.5,
-             persistent-mongoDB ==2.1.2.2,
-             persistent-mysql ==2.1.3.1,
-             persistent-postgresql ==2.1.5.3,
-             persistent-sqlite ==2.1.4.2,
-             persistent-template ==2.1.3.1,
-             phantom-state ==0.2.0.2,
-             picoparsec ==0.1.2.2,
-             pipes ==4.1.5,
-             pipes-aeson ==0.4.1.3,
-             pipes-attoparsec ==0.5.1.2,
-             pipes-binary ==0.4.0.4,
-             pipes-bytestring ==2.1.1,
-             pipes-concurrency ==2.0.3,
-             pipes-group ==1.0.2,
-             pipes-network ==0.6.4,
-             pipes-parse ==3.0.2,
-             pipes-safe ==2.2.2,
-             placeholders ==0.1,
-             plot ==0.2.3.4,
-             plot-gtk ==0.2.0.2,
-             plot-gtk3 ==0.1,
-             pointed ==4.2.0.2,
-             polyparse ==1.11,
-             postgresql-binary ==0.5.2.1,
-             postgresql-libpq ==0.9.0.2,
-             postgresql-simple ==0.4.10.0,
-             post-mess-age ==0.1.0.0,
-             prednote ==0.32.0.6,
-             prefix-units ==0.1.0.2,
-             prelude-extras ==0.4,
-             presburger ==1.3.1,
-             present ==2.2,
-             pretty installed,
-             prettyclass ==1.0.0.0,
-             pretty-class ==1.0.1.1,
-             pretty-show ==1.6.8.2,
-             primes ==0.2.1.0,
-             primitive ==0.6,
-             process installed,
-             process-extras ==0.3.3.4,
-             product-profunctors ==0.6.1,
-             profunctor-extras ==4.0,
-             profunctors ==4.4.1,
-             project-template ==0.1.4.2,
-             PSQueue ==1.1,
-             publicsuffixlist ==0.1,
-             punycode ==2.0,
-             pure-io ==0.2.1,
-             pureMD5 ==2.1.2.1,
-             pwstore-fast ==2.4.4,
-             quandl-api ==0.2.1.0,
-             QuasiText ==0.1.2.5,
-             QuickCheck ==2.7.6,
-             quickcheck-assertions ==0.2.0,
-             quickcheck-instances ==0.3.11,
-             quickcheck-io ==0.1.1,
-             quickcheck-unicode ==1.0.0.1,
-             rainbow ==0.22.0.2,
-             random ==1.1,
-             random-fu ==0.2.6.2,
-             random-shuffle ==0.0.4,
-             random-source ==0.3.0.6,
-             rank1dynamic ==0.2.0.1,
-             Rasterific ==0.5.2.1,
-             rasterific-svg ==0.1.0.3,
-             raw-strings-qq ==1.0.2,
-             ReadArgs ==1.2.2,
-             reducers ==3.10.3.1,
-             reflection ==1.5.2.1,
-             RefSerialize ==0.3.1.4,
-             regex-applicative ==0.3.1,
-             regex-base ==0.93.2,
-             regex-compat ==0.95.1,
-             regex-pcre-builtin ==0.94.4.8.8.35,
-             regex-posix ==0.95.2,
-             regexpr ==0.5.4,
-             regex-tdfa ==1.2.0,
-             regex-tdfa-rc ==1.1.8.3,
-             regular ==0.3.4.4,
-             regular-xmlpickler ==0.2,
-             rematch ==0.2.0.0,
-             repa ==3.3.1.2,
-             repa-algorithms ==3.3.1.2,
-             repa-devil ==0.3.2.6,
-             repa-io ==3.3.1.2,
-             reroute ==0.2.3.0,
-             resource-pool ==0.2.3.2,
-             resourcet ==1.1.5,
-             rest-client ==0.5.0.3,
-             rest-core ==0.35.1,
-             rest-gen ==0.17.0.4,
-             rest-happstack ==0.2.10.8,
-             rest-snap ==0.1.17.18,
-             rest-stringmap ==0.2.0.4,
-             rest-types ==1.13.1,
-             rest-wai ==0.1.0.8,
-             rethinkdb-client-driver ==0.0.18,
-             retry ==0.6,
-             rev-state ==0.1,
-             rfc5051 ==0.1.0.3,
-             RSA ==2.1.0.1,
-             rts installed,
-             runmemo ==1.0.0.1,
-             rvar ==0.2.0.2,
-             safe ==0.3.9,
-             safecopy ==0.8.5,
-             sbv ==4.2,
-             scientific ==0.3.3.8,
-             scotty ==0.9.1,
-             scrobble ==0.2.1.1,
-             sdl2 ==1.3.1,
-             securemem ==0.1.7,
-             semigroupoid-extras ==4.0,
-             semigroupoids ==4.3,
-             semigroups ==0.16.2.2,
-             semver ==0.3.3.1,
-             sendfile ==0.7.9,
-             seqloc ==0.6.1.1,
-             servant ==0.2.2,
-             servant-client ==0.2.2,
-             servant-docs ==0.3.1,
-             servant-jquery ==0.2.2.1,
-             servant-server ==0.2.4,
-             setenv ==0.1.1.3,
-             set-monad ==0.2.0.0,
-             SHA ==1.6.4.2,
-             shake ==0.15.2,
-             shake-language-c ==0.6.4,
-             shakespeare ==2.0.5,
-             shakespeare-text ==1.1.0,
-             shell-conduit ==4.5.2,
-             shelltestrunner ==1.3.5,
-             shelly ==1.6.1.2,
-             silently ==1.2.4.1,
-             simple-reflect ==0.3.2,
-             simple-sendfile ==0.2.20,
-             singletons ==1.1.2,
-             siphash ==1.0.3,
-             skein ==1.0.9.3,
-             slave-thread ==0.1.6,
-             smallcheck ==1.1.1,
-             smoothie ==0.1.3,
-             smtLib ==1.0.7,
-             snap ==0.14.0.4,
-             snap-core ==0.9.7.0,
-             snaplet-fay ==0.3.3.11,
-             snap-server ==0.9.5.1,
-             snowflake ==0.1.1.1,
-             soap ==0.2.2.5,
-             soap-openssl ==0.1.0.2,
-             soap-tls ==0.1.1.2,
-             socks ==0.5.4,
-             sodium ==0.11.0.3,
-             sourcemap ==0.1.3.0,
-             speculation ==1.5.0.2,
-             sphinx ==0.6.0.1,
-             split ==0.2.2,
-             Spock ==0.7.9.0,
-             Spock-digestive ==0.1.0.0,
-             Spock-worker ==0.2.1.3,
-             spoon ==0.3.1,
-             sqlite-simple ==0.4.8.0,
-             srcloc ==0.4.1,
-             stackage ==0.7.2.0,
-             stackage-build-plan ==0.1.1.0,
-             stackage-cli ==0.1.0.2,
-             stackage-curator ==0.7.4,
-             stackage-install ==0.1.1.1,
-             stackage-types ==1.0.1.1,
-             stackage-update ==0.1.2,
-             stackage-upload ==0.1.0.5,
-             stateref ==0.3,
-             statestack ==0.2.0.4,
-             StateVar ==1.1.0.0,
-             statistics ==0.13.2.3,
-             statistics-linreg ==0.3,
-             stm ==2.4.4,
-             stm-chans ==3.0.0.3,
-             stm-conduit ==2.5.4,
-             stm-containers ==0.2.9,
-             stm-stats ==0.2.0.0,
-             storable-complex ==0.2.2,
-             storable-endian ==0.2.5,
-             streaming-commons ==0.1.12.1,
-             streams ==3.2,
-             strict ==0.3.2,
-             stringable ==0.1.3,
-             stringbuilder ==0.5.0,
-             string-conversions ==0.3.0.3,
-             stringprep ==1.0.0,
-             stringsearch ==0.3.6.6,
-             stylish-haskell ==0.5.13.0,
-             SVGFonts ==1.4.0.3,
-             svg-tree ==0.1.1,
-             syb ==0.4.4,
-             syb-with-class ==0.6.1.5,
-             symbol ==0.2.4,
-             system-canonicalpath ==0.3.2.0,
-             system-fileio ==0.3.16.3,
-             system-filepath ==0.4.13.4,
-             system-posix-redirect ==1.1.0.1,
-             tabular ==0.2.2.7,
-             tagged ==0.7.3,
-             tagshare ==0.0,
-             tagsoup ==0.13.3,
-             tagstream-conduit ==0.5.5.3,
-             tar ==0.4.1.0,
-             tardis ==0.3.0.0,
-             tasty ==0.10.1.2,
-             tasty-ant-xml ==1.0.1,
-             tasty-golden ==2.3.0.1,
-             tasty-hunit ==0.9.2,
-             tasty-kat ==0.0.3,
-             tasty-quickcheck ==0.8.3.2,
-             tasty-smallcheck ==0.8.0.1,
-             tasty-th ==0.1.3,
-             TCache ==0.12.0,
-             template-haskell installed,
-             temporary ==1.2.0.3,
-             temporary-rc ==1.2.0.3,
-             terminal-progress-bar ==0.0.1.4,
-             terminal-size ==0.3.0,
-             terminfo installed,
-             test-framework ==0.8.1.1,
-             test-framework-hunit ==0.3.0.1,
-             test-framework-quickcheck2 ==0.3.0.3,
-             test-framework-th ==0.2.4,
-             testing-feat ==0.4.0.2,
-             testpack ==2.1.3.0,
-             texmath ==0.8.2,
-             text ==1.2.0.6,
-             text-binary ==0.1.0,
-             text-format ==0.3.1.1,
-             text-icu ==0.7.0.1,
-             text-manipulate ==0.1.3.1,
-             tf-random ==0.5,
-             th-desugar ==1.5.3,
-             th-expand-syns ==0.3.0.6,
-             th-extras ==0.0.0.2,
-             th-lift ==0.7.2,
-             th-orphans ==0.11.1,
-             threads ==0.5.1.3,
-             th-reify-many ==0.1.3,
-             thyme ==0.3.5.5,
-             time installed,
-             time-compat ==0.1.0.3,
-             time-lens ==0.4.0.1,
-             time-locale-compat ==0.1.0.1,
-             timezone-olson ==0.1.7,
-             timezone-series ==0.1.5.1,
-             tls ==1.2.17,
-             tls-debug ==0.3.4,
-             tostring ==0.2.1.1,
-             transformers-base ==0.4.4,
-             transformers-compat ==0.4.0.3,
-             traverse-with-class ==0.2.0.3,
-             tree-view ==0.4,
-             trifecta ==1.5.1.3,
-             tttool ==1.3,
-             tuple ==0.3.0.2,
-             turtle ==1.0.2,
-             type-eq ==0.5,
-             type-list ==0.0.0.1,
-             udbus ==0.2.1,
-             unbounded-delays ==0.1.0.9,
-             unbound-generics ==0.1.2.1,
-             union-find ==0.2,
-             uniplate ==1.6.12,
-             unix installed,
-             unix-compat ==0.4.1.4,
-             unix-time ==0.3.5,
-             unordered-containers ==0.2.5.1,
-             uri-encode ==1.5.0.4,
-             url ==2.1.3,
-             users ==0.1.0.0,
-             users-postgresql-simple ==0.1.0.1,
-             users-test ==0.1.0.0,
-             utf8-light ==0.4.2,
-             utf8-string ==1,
-             uuid ==1.3.10,
-             uuid-types ==1.0.1,
-             vault ==0.3.0.4,
-             vector ==0.10.12.3,
-             vector-algorithms ==0.6.0.4,
-             vector-binary-instances ==0.2.1.0,
-             vector-buffer ==0.4.1,
-             vector-instances ==3.3.0.1,
-             vector-space ==0.9,
-             vector-space-points ==0.2.1.1,
-             vector-th-unbox ==0.2.1.2,
-             vhd ==0.2.2,
-             void ==0.7,
-             wai ==3.0.2.3,
-             wai-app-static ==3.0.1.1,
-             wai-conduit ==3.0.0.2,
-             wai-eventsource ==3.0.0,
-             wai-extra ==3.0.7.1,
-             wai-handler-launch ==3.0.0.3,
-             wai-logger ==2.2.4,
-             wai-middleware-consul ==0.1.0.2,
-             wai-middleware-static ==0.6.0.1,
-             waitra ==0.0.3.0,
-             wai-websockets ==3.0.0.5,
-             warp ==3.0.13.1,
-             warp-tls ==3.0.3,
-             webdriver ==0.6.1,
-             web-fpco ==0.1.1.0,
-             websockets ==0.9.4.0,
-             wizards ==1.0.2,
-             wl-pprint ==1.1,
-             wl-pprint-extras ==3.5.0.4,
-             wl-pprint-terminfo ==3.7.1.3,
-             wl-pprint-text ==1.1.0.4,
-             word8 ==0.1.2,
-             wordpass ==1.0.0.3,
-             Workflow ==0.8.3,
-             wrap ==0.0.0,
-             wreq ==0.3.0.1,
-             X11 ==1.6.1.2,
-             x509 ==1.5.0.1,
-             x509-store ==1.5.0,
-             x509-system ==1.5.0,
-             x509-validation ==1.5.2,
-             xenstore ==0.1.1,
-             xhtml installed,
-             xml ==1.3.14,
-             xml-conduit ==1.2.6,
-             xml-conduit-writer ==0.1.1.1,
-             xmlgen ==0.6.2.1,
-             xml-hamlet ==0.4.0.11,
-             xmlhtml ==0.2.3.4,
-             xml-to-json ==2.0.1,
-             xml-to-json-fast ==2.0.0,
-             xml-types ==0.3.4,
-             xss-sanitize ==0.3.5.5,
-             yackage ==0.7.0.8,
-             yaml ==0.8.11,
-             Yampa ==0.9.7,
-             YampaSynth ==0.2,
-             yarr ==1.3.3.3,
-             yesod ==1.4.1.5,
-             yesod-auth ==1.4.5,
-             yesod-auth-deskcom ==1.4.0,
-             yesod-auth-fb ==1.6.6,
-             yesod-auth-hashdb ==1.4.2.1,
-             yesod-auth-oauth ==1.4.0.2,
-             yesod-auth-oauth2 ==0.0.12,
-             yesod-bin ==1.4.9.2,
-             yesod-core ==1.4.9.1,
-             yesod-eventsource ==1.4.0.1,
-             yesod-fay ==0.7.1,
-             yesod-fb ==0.3.4,
-             yesod-form ==1.4.4.1,
-             yesod-gitrepo ==0.1.1.0,
-             yesod-newsfeed ==1.4.0.1,
-             yesod-persistent ==1.4.0.2,
-             yesod-sitemap ==1.4.0.1,
-             yesod-static ==1.4.0.4,
-             yesod-test ==1.4.3.1,
-             yesod-text-markdown ==0.1.7,
-             yesod-websockets ==0.2.1.1,
-             zeromq4-haskell ==0.6.3,
-             zip-archive ==0.2.3.7,
-             zlib ==0.5.4.2,
-             zlib-bindings ==0.1.1.5,
-             zlib-enum ==0.2.3.1,
-             zlib-lens ==0.1.2
+constraints: Crypto ==4.2.5.1,
+             binary ==0.7.6.1,
+             DAV ==1.0.3,
+             HTTP ==4000.2.17,
+             HUnit ==1.2.5.2,
+             IfElse ==0.85,
+             MissingH ==1.2.1.0,
+             MonadRandom ==0.1.13,
+             QuickCheck ==2.7.6,
+             SafeSemaphore ==0.10.1,
+             aeson ==0.7.0.6,
+             ansi-wl-pprint ==0.6.7.1,
+             appar ==0.1.4,
+             asn1-encoding ==0.8.1.3,
+             asn1-parse ==0.8.1,
+             asn1-types ==0.2.3,
+             async ==2.0.1.5,
+             attoparsec ==0.11.3.4,
+             attoparsec-conduit ==1.1.0,
+             authenticate ==1.3.2.10,
+             base-unicode-symbols ==0.2.2.4,
+             base16-bytestring ==0.1.1.6,
+             base64-bytestring ==1.0.0.1,
+             bifunctors ==4.1.1.1,
+             bloomfilter ==2.0.0.0,
+             byteable ==0.1.1,
+             byteorder ==1.0.4,
+             case-insensitive ==1.2.0.1,
+             cereal ==0.4.0.1,
+             cipher-aes ==0.2.8,
+             cipher-des ==0.0.6,
+             cipher-rc4 ==0.1.4,
+             clientsession ==0.9.0.3,
+             comonad ==4.2,
+             conduit ==1.1.6,
+             conduit-extra ==1.1.3,
+             connection ==0.2.3,
+             contravariant ==0.6.1.1,
+             cookie ==0.4.1.2,
+             cprng-aes ==0.5.2,
+             crypto-api ==0.13.2,
+             crypto-cipher-types ==0.0.9,
+             crypto-numbers ==0.2.3,
+             crypto-pubkey ==0.2.4,
+             crypto-pubkey-types ==0.4.2.2,
+             crypto-random ==0.0.7,
+             cryptohash ==0.11.6,
+             cryptohash-conduit ==0.1.1,
+             css-text ==0.1.2.1,
+             data-default ==0.5.3,
+             data-default-class ==0.0.1,
+             data-default-instances-base ==0.0.1,
+             data-default-instances-containers ==0.0.1,
+             data-default-instances-dlist ==0.0.1,
+             data-default-instances-old-locale ==0.0.1,
+             sandi ==0.3.0.1,
+             dbus ==0.10.8,
+             distributive ==0.4.4,
+             dlist ==0.7.0.1,
+             dns ==1.3.0,
+             edit-distance ==0.2.1.2,
+             either ==4.3,
+             email-validate ==1.0.0,
+             entropy ==0.2.1,
+             errors ==1.4.7,
+             exceptions ==0.6.1,
+             failure ==0.2.0.3,
+             fast-logger ==2.1.5,
+             fdo-notify ==0.3.1,
+             feed ==0.3.9.2,
+             file-embed ==0.0.6,
+             fingertree ==0.1.0.0,
+             free ==4.9,
+             gnuidn ==0.2,
+             gnutls ==0.1.4,
+             gsasl ==0.3.5,
+             hS3 ==0.5.7,
+             hashable ==1.2.1.0,
+             hinotify ==0.3.5,
+             hjsmin ==0.1.4.7,
+             hslogger ==1.2.1,
+             http-client ==0.4.11.1,
+             http-client-tls ==0.2.2,
+             http-conduit ==2.1.5,
+             http-date ==0.0.2,
+             http-types ==0.8.5,
+             hxt ==9.3.1.4,
+             hxt-charproperties ==9.1.1.1,
+             hxt-regex-xmlschema ==9.0.4,
+             hxt-unicode ==9.0.2.2,
+             idna ==0.2,
+             iproute ==1.2.11,
+             json ==0.5,
+             keys ==3.10.1,
+             language-javascript ==0.5.13,
+             lens ==4.4.0.2,
+             libxml-sax ==0.7.5,
+             mime-mail ==0.4.1.2,
+             mime-types ==0.1.0.4,
+             mmorph ==1.0.3,
+             monad-control ==0.3.2.2,
+             monad-logger ==0.3.6.1,
+             monad-loops ==0.4.2.1,
+             monads-tf ==0.1.0.2,
+             mtl ==2.1.2,
+             nats ==0.1.2,
+             network ==2.4.1.2,
+             network-conduit ==1.1.0,
+             network-info ==0.2.0.5,
+             network-multicast ==0.0.10,
+             network-protocol-xmpp ==0.4.6,
+             network-uri ==2.6.0.1,
+             optparse-applicative ==0.11.0.2,
+             parallel ==3.2.0.4,
+             path-pieces ==0.1.4,
+             pem ==0.2.2,
+             persistent ==1.3.3,
+             persistent-template ==1.3.2.2,
+             pointed ==4.0,
+             prelude-extras ==0.4,
+             profunctors ==4.0.4,
+             publicsuffixlist ==0.1,
+             punycode ==2.0,
+             random ==1.0.1.1,
+             ranges ==0.2.4,
+             reducers ==3.10.2.1,
+             reflection ==1.2.0.1,
+             regex-base ==0.93.2,
+             regex-compat ==0.95.1,
+             regex-posix ==0.95.2,
+             regex-tdfa ==1.2.0,
+             resource-pool ==0.2.1.1,
+             resourcet ==1.1.2.3,
+             safe ==0.3.8,
+             securemem ==0.1.3,
+             semigroupoids ==4.2,
+             semigroups ==0.15.3,
+             shakespeare ==2.0.5,
+             silently ==1.2.4.1,
+             simple-sendfile ==0.2.14,
+             skein ==1.0.9,
+             socks ==0.5.4,
+             split ==0.2.2,
+             stm ==2.4.2,
+             stm-chans ==3.0.0.2,
+             streaming-commons ==0.1.4.1,
+             stringprep ==0.1.5,
+             stringsearch ==0.3.6.5,
+             syb ==0.4.0,
+             system-fileio ==0.3.14,
+             system-filepath ==0.4.12,
+             tagged ==0.7.2,
+             tagsoup ==0.13.1,
+             tagstream-conduit ==0.5.5.1,
+             text ==1.1.1.0,
+             text-icu ==0.6.3.7,
+             tf-random ==0.5,
+             tls ==1.2.9,
+             transformers ==0.3.0.0,
+             transformers-base ==0.4.1,
+             transformers-compat ==0.3.3.3,
+             unbounded-delays ==0.1.0.8,
+             unix-compat ==0.4.1.3,
+             unix-time ==0.2.2,
+             unordered-containers ==0.2.5.0,
+             utf8-string ==0.3.7,
+             uuid ==1.3.3,
+             vault ==0.3.0.3,
+             vector ==0.10.0.1,
+             void ==0.6.1,
+             wai ==3.0.1.1,
+             wai-app-static ==3.0.0.1,
+             wai-extra ==3.0.1.2,
+             wai-logger ==2.1.1,
+             warp ==3.0.0.5,
+             warp-tls ==3.0.0,
+             word8 ==0.1.1,
+             x509 ==1.4.11,
+             x509-store ==1.4.4,
+             x509-system ==1.4.5,
+             x509-validation ==1.5.0,
+             xml ==1.3.13,
+             xml-conduit ==1.2.1,
+             xml-hamlet ==0.4.0.9,
+             xml-types ==0.3.4,
+             xss-sanitize ==0.3.5.2,
+             yaml ==0.8.9.3,
+             yesod ==1.2.6.1,
+             yesod-auth ==1.3.4.6,
+             yesod-core ==1.2.20.1,
+             yesod-default ==1.2.0,
+             yesod-form ==1.3.16,
+             yesod-persistent ==1.2.3.1,
+             yesod-routes ==1.2.0.7,
+             yesod-static ==1.2.4,
+             zlib ==0.5.4.1,
+             bytestring ==0.10.4.0,
+             scientific ==0.3.3.1,
+             clock ==0.4.6.0
diff --git a/standalone/linux/skel/runshell b/standalone/linux/skel/runshell
--- a/standalone/linux/skel/runshell
+++ b/standalone/linux/skel/runshell
@@ -26,6 +26,22 @@
 base="$(pwd)"
 cd "$orig"
 
+# --library-path won't work if $base contains : or ;
+# Detect this problem, and work around it by using a temp directory.
+if echo "$base" | grep -q '[:;]'; then
+	tbase=$(mktemp -d -p /tmp annexshimXXXXXXXXX 2>/dev/null || true)
+	if [ -z "$tbase" ]; then
+		tbase="/tmp/annexshim.$$"
+		mkdir "$tbase"
+	fi
+	ln -s "$base" "$tbase/link"
+	base="$tbase/link"
+	cleanuptbase () {
+		rm -rf "$tbase"
+	}
+	trap cleanuptbase EXIT
+fi
+
 # Install shim that's used to run git-annex-shell from ssh authorized_keys.
 # The assistant also does this when run, but the user may not be using the
 # assistant.
@@ -63,7 +79,7 @@
 PATH="$base/bin:$PATH"
 export PATH
 
-# This is used by the shim wrapper around each binary.
+# These env vars are used by the shim wrapper around each binary.
 for lib in $(cat "$base/libdirs"); do
 	GIT_ANNEX_LD_LIBRARY_PATH="$base/$lib:$GIT_ANNEX_LD_LIBRARY_PATH"
 done
@@ -103,7 +119,12 @@
 if [ "$1" ]; then
 	cmd="$1"
 	shift 1
-	exec "$cmd" "$@"
+	if [ -z "$tbase" ]; then
+		exec "$cmd" "$@"
+	else
+		# allow EXIT trap to cleanup
+		"$cmd" "$@"
+	fi
 else
 	sh
 fi
diff --git a/standalone/no-th/evilsplicer-headers.hs b/standalone/no-th/evilsplicer-headers.hs
--- a/standalone/no-th/evilsplicer-headers.hs
+++ b/standalone/no-th/evilsplicer-headers.hs
@@ -24,6 +24,7 @@
 import qualified Yesod.Core.Widget
 import qualified Yesod.Routes.TH.Types
 import qualified Yesod.Core.Dispatch
+import qualified Yesod.Routes.Dispatch
 import qualified WaiAppStatic.Storage.Embedded
 import qualified WaiAppStatic.Storage.Embedded.Runtime
 import qualified Data.FileEmbed
diff --git a/standalone/no-th/haskell-patches/DAV_build-without-TH.patch b/standalone/no-th/haskell-patches/DAV_build-without-TH.patch
--- a/standalone/no-th/haskell-patches/DAV_build-without-TH.patch
+++ b/standalone/no-th/haskell-patches/DAV_build-without-TH.patch
@@ -1,6 +1,6 @@
-From 6d4a7c63d737c9215ee55996715250c89f14c398 Mon Sep 17 00:00:00 2001
+From e54cfacbb9fb24f75d3d93cd8ee6da67b161574f Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Fri, 3 Jul 2015 01:36:31 +0000
+Date: Thu, 16 Oct 2014 02:51:28 +0000
 Subject: [PATCH] remove TH
 
 ---
@@ -10,7 +10,7 @@
  3 files changed, 306 insertions(+), 46 deletions(-)
 
 diff --git a/DAV.cabal b/DAV.cabal
-index f78c2e5..1ec4d80 100644
+index 95fffd8..5669c51 100644
 --- a/DAV.cabal
 +++ b/DAV.cabal
 @@ -47,33 +47,7 @@ library
@@ -27,7 +27,7 @@
 -                     , containers
 -                     , data-default
 -                     , either >= 4.3
--                     , errors < 2.0
+-                     , errors
 -                     , exceptions
 -                     , http-client >= 0.2
 -                     , http-client-tls >= 0.2
@@ -49,7 +49,7 @@
  source-repository head
    type:     git
 diff --git a/Network/Protocol/HTTP/DAV.hs b/Network/Protocol/HTTP/DAV.hs
-index 5d5d6fd..7265d42 100644
+index 4c6d68f..55979b6 100644
 --- a/Network/Protocol/HTTP/DAV.hs
 +++ b/Network/Protocol/HTTP/DAV.hs
 @@ -82,6 +82,7 @@ import Network.HTTP.Types (hContentType, Method, Status, RequestHeaders, unautho
@@ -416,5 +416,5 @@
 +     Data.Functor.<$> (_f_a3k7 __userAgent'_a3kg))
 +{-# INLINE userAgent #-}
 -- 
-2.1.4
+2.1.1
 
diff --git a/standalone/no-th/haskell-patches/aeson_remove-TH.patch b/standalone/no-th/haskell-patches/aeson_remove-TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/aeson_remove-TH.patch
@@ -0,0 +1,40 @@
+From f147ec9aeaa03ca6e30232c84c413ef29b95fb62 Mon Sep 17 00:00:00 2001
+From: Your Name <you@example.com>
+Date: Tue, 20 May 2014 19:53:55 +0000
+Subject: [PATCH] avoid TH
+
+---
+ aeson.cabal | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/aeson.cabal b/aeson.cabal
+index 493d625..02dc6f4 100644
+--- a/aeson.cabal
++++ b/aeson.cabal
+@@ -88,7 +88,6 @@ library
+     Data.Aeson.Generic
+     Data.Aeson.Parser
+     Data.Aeson.Types
+-    Data.Aeson.TH
+ 
+   other-modules:
+     Data.Aeson.Functions
+@@ -121,7 +120,6 @@ library
+     old-locale,
+     scientific >= 0.3.1 && < 0.4,
+     syb,
+-    template-haskell >= 2.4,
+     time,
+     unordered-containers >= 0.2.3.0,
+     vector >= 0.7.1
+@@ -164,7 +162,6 @@ test-suite tests
+     base,
+     containers,
+     bytestring,
+-    template-haskell,
+     test-framework,
+     test-framework-quickcheck2,
+     test-framework-hunit,
+-- 
+2.0.0.rc2
+
diff --git a/standalone/no-th/haskell-patches/file-embed_remove-TH.patch b/standalone/no-th/haskell-patches/file-embed_remove-TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/file-embed_remove-TH.patch
@@ -0,0 +1,132 @@
+From 497d09a91f9eb1e5979948cd128078491b0e8bca Mon Sep 17 00:00:00 2001
+From: Joey Hess <joey@kitenet.net>
+Date: Fri, 12 Sep 2014 20:52:08 -0400
+Subject: [PATCH] remove TH
+
+---
+ Data/FileEmbed.hs | 87 ++++---------------------------------------------------
+ 1 file changed, 5 insertions(+), 82 deletions(-)
+
+diff --git a/Data/FileEmbed.hs b/Data/FileEmbed.hs
+index 5617493..adacdba 100644
+--- a/Data/FileEmbed.hs
++++ b/Data/FileEmbed.hs
+@@ -17,13 +17,13 @@
+ -- > {-# LANGUAGE TemplateHaskell #-}
+ module Data.FileEmbed
+     ( -- * Embed at compile time
+-      embedFile
+-    , embedOneFileOf
+-    , embedDir
+-    , getDir
++    --  embedFile
++    --, embedOneFileOf
++    --, embedDir
++      getDir
+       -- * Inject into an executable
+ #if MIN_VERSION_template_haskell(2,5,0)
+-    , dummySpace
++    --, dummySpace
+ #endif
+     , inject
+     , injectFile
+@@ -56,73 +56,12 @@ import Data.ByteString.Unsafe (unsafePackAddressLen)
+ import System.IO.Unsafe (unsafePerformIO)
+ import System.FilePath ((</>))
+ 
+--- | Embed a single file in your source code.
+---
+--- > import qualified Data.ByteString
+--- >
+--- > myFile :: Data.ByteString.ByteString
+--- > myFile = $(embedFile "dirName/fileName")
+-embedFile :: FilePath -> Q Exp
+-embedFile fp =
+-#if MIN_VERSION_template_haskell(2,7,0)
+-    qAddDependentFile fp >>
+-#endif
+-  (runIO $ B.readFile fp) >>= bsToExp
+-
+--- | Embed a single existing file in your source code
+--- out of list a list of paths supplied.
+---
+--- > import qualified Data.ByteString
+--- >
+--- > myFile :: Data.ByteString.ByteString
+--- > myFile = $(embedFile' [ "dirName/fileName", "src/dirName/fileName" ])
+-embedOneFileOf :: [FilePath] -> Q Exp
+-embedOneFileOf ps =
+-  (runIO $ readExistingFile ps) >>= \ ( path, content ) -> do
+-#if MIN_VERSION_template_haskell(2,7,0)
+-    qAddDependentFile path
+-#endif
+-    bsToExp content
+-  where
+-    readExistingFile :: [FilePath] -> IO ( FilePath, B.ByteString )
+-    readExistingFile xs = do
+-      ys <- filterM doesFileExist xs
+-      case ys of
+-        (p:_) -> B.readFile p >>= \ c -> return ( p, c )
+-        _ -> throw $ ErrorCall "Cannot find file to embed as resource"
+-
+--- | Embed a directory recursively in your source code.
+---
+--- > import qualified Data.ByteString
+--- >
+--- > myDir :: [(FilePath, Data.ByteString.ByteString)]
+--- > myDir = $(embedDir "dirName")
+-embedDir :: FilePath -> Q Exp
+-embedDir fp = do
+-    typ <- [t| [(FilePath, B.ByteString)] |]
+-    e <- ListE <$> ((runIO $ fileList fp) >>= mapM (pairToExp fp))
+-    return $ SigE e typ
+-
+ -- | Get a directory tree in the IO monad.
+ --
+ -- This is the workhorse of 'embedDir'
+ getDir :: FilePath -> IO [(FilePath, B.ByteString)]
+ getDir = fileList
+ 
+-pairToExp :: FilePath -> (FilePath, B.ByteString) -> Q Exp
+-pairToExp _root (path, bs) = do
+-#if MIN_VERSION_template_haskell(2,7,0)
+-    qAddDependentFile $ _root ++ '/' : path
+-#endif
+-    exp' <- bsToExp bs
+-    return $! TupE [LitE $ StringL path, exp']
+-
+-bsToExp :: B.ByteString -> Q Exp
+-bsToExp bs = do
+-    helper <- [| stringToBs |]
+-    let chars = B8.unpack bs
+-    return $! AppE helper $! LitE $! StringL chars
+-
+ stringToBs :: String -> B.ByteString
+ stringToBs = B8.pack
+ 
+@@ -164,22 +103,6 @@ padSize i =
+     let s = show i
+      in replicate (sizeLen - length s) '0' ++ s
+ 
+-#if MIN_VERSION_template_haskell(2,5,0)
+-dummySpace :: Int -> Q Exp
+-dummySpace space = do
+-    let size = padSize space
+-    let start = magic ++ size
+-    let chars = LitE $ StringPrimL $
+-#if MIN_VERSION_template_haskell(2,6,0)
+-            map (toEnum . fromEnum) $
+-#endif
+-            start ++ replicate space '0'
+-    let len = LitE $ IntegerL $ fromIntegral $ length start + space
+-    upi <- [|unsafePerformIO|]
+-    pack <- [|unsafePackAddressLen|]
+-    getInner' <- [|getInner|]
+-    return $ getInner' `AppE` (upi `AppE` (pack `AppE` len `AppE` chars))
+-#endif
+ 
+ inject :: B.ByteString -- ^ bs to inject
+        -> B.ByteString -- ^ original BS containing dummy
+-- 
+2.1.0
+
diff --git a/standalone/no-th/haskell-patches/generic-deriving_remove-TH.patch b/standalone/no-th/haskell-patches/generic-deriving_remove-TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/generic-deriving_remove-TH.patch
@@ -0,0 +1,394 @@
+From 9a41401d903f160e11d56fff35c24eb59d97885d Mon Sep 17 00:00:00 2001
+From: Joey Hess <joey@kitenet.net>
+Date: Tue, 17 Dec 2013 19:04:40 +0000
+Subject: [PATCH] remove TH
+
+---
+ src/Generics/Deriving/TH.hs | 354 --------------------------------------------
+ 1 file changed, 354 deletions(-)
+
+diff --git a/src/Generics/Deriving/TH.hs b/src/Generics/Deriving/TH.hs
+index 783cb65..9aab713 100644
+--- a/src/Generics/Deriving/TH.hs
++++ b/src/Generics/Deriving/TH.hs
+@@ -19,18 +19,6 @@
+ 
+ -- Adapted from Generics.Regular.TH
+ module Generics.Deriving.TH (
+-      
+-      deriveMeta
+-    , deriveData
+-    , deriveConstructors
+-    , deriveSelectors
+-
+-#if __GLASGOW_HASKELL__ < 701
+-    , deriveAll
+-    , deriveRepresentable0
+-    , deriveRep0
+-    , simplInstance
+-#endif
+   ) where
+ 
+ import Generics.Deriving.Base
+@@ -41,124 +29,6 @@ import Language.Haskell.TH.Syntax (Lift(..))
+ import Data.List (intercalate)
+ import Control.Monad
+ 
+--- | Given the names of a generic class, a type to instantiate, a function in
+--- the class and the default implementation, generates the code for a basic
+--- generic instance.
+-simplInstance :: Name -> Name -> Name -> Name -> Q [Dec]
+-simplInstance cl ty fn df = do
+-  i <- reify (genRepName 0 ty)
+-  x <- newName "x"
+-  let typ = ForallT [PlainTV x] [] 
+-        ((foldl (\a -> AppT a . VarT . tyVarBndrToName) (ConT (genRepName 0 ty)) 
+-          (typeVariables i)) `AppT` (VarT x))
+-  fmap (: []) $ instanceD (cxt []) (conT cl `appT` conT ty)
+-    [funD fn [clause [] (normalB (varE df `appE` 
+-      (sigE (global 'undefined) (return typ)))) []]]
+-
+-
+--- | Given the type and the name (as string) for the type to derive,
+--- generate the 'Data' instance, the 'Constructor' instances, the 'Selector'
+--- instances, and the 'Representable0' instance.
+-deriveAll :: Name -> Q [Dec]
+-deriveAll n =
+-  do a <- deriveMeta n
+-     b <- deriveRepresentable0 n
+-     return (a ++ b)
+-
+--- | Given the type and the name (as string) for the type to derive,
+--- generate the 'Data' instance, the 'Constructor' instances, and the 'Selector'
+--- instances.
+-deriveMeta :: Name -> Q [Dec]
+-deriveMeta n =
+-  do a <- deriveData n
+-     b <- deriveConstructors n
+-     c <- deriveSelectors n
+-     return (a ++ b ++ c)
+-
+--- | Given a datatype name, derive a datatype and instance of class 'Datatype'.
+-deriveData :: Name -> Q [Dec]
+-deriveData = dataInstance
+-
+--- | Given a datatype name, derive datatypes and 
+--- instances of class 'Constructor'.
+-deriveConstructors :: Name -> Q [Dec]
+-deriveConstructors = constrInstance
+-
+--- | Given a datatype name, derive datatypes and instances of class 'Selector'.
+-deriveSelectors :: Name -> Q [Dec]
+-deriveSelectors = selectInstance
+-
+--- | Given the type and the name (as string) for the Representable0 type
+--- synonym to derive, generate the 'Representable0' instance.
+-deriveRepresentable0 :: Name -> Q [Dec]
+-deriveRepresentable0 n = do
+-    rep0 <- deriveRep0 n
+-    inst <- deriveInst n
+-    return $ rep0 ++ inst
+-
+--- | Derive only the 'Rep0' type synonym. Not needed if 'deriveRepresentable0'
+--- is used.
+-deriveRep0 :: Name -> Q [Dec]
+-deriveRep0 n = do
+-  i <- reify n
+-  fmap (:[]) $ tySynD (genRepName 0 n) (typeVariables i) (rep0Type n)
+-
+-deriveInst :: Name -> Q [Dec]
+-deriveInst t = do
+-  i <- reify t
+-  let typ q = foldl (\a -> AppT a . VarT . tyVarBndrToName) (ConT q) 
+-                (typeVariables i)
+-#if __GLASGOW_HASKELL__ >= 707
+-  let tyIns = TySynInstD ''Rep (TySynEqn [typ t] (typ (genRepName 0 t)))
+-#else
+-  let tyIns = TySynInstD ''Rep [typ t] (typ (genRepName 0 t))
+-#endif
+-  fcs <- mkFrom t 1 0 t
+-  tcs <- mkTo   t 1 0 t
+-  liftM (:[]) $
+-    instanceD (cxt []) (conT ''Generic `appT` return (typ t))
+-                         [return tyIns, funD 'from fcs, funD 'to tcs]
+-
+-
+-dataInstance :: Name -> Q [Dec]
+-dataInstance n = do
+-  i <- reify n
+-  case i of
+-    TyConI (DataD    _ n _ _ _) -> mkInstance n
+-    TyConI (NewtypeD _ n _ _ _) -> mkInstance n
+-    _ -> return []
+-  where
+-    mkInstance n = do
+-      ds <- mkDataData n
+-      is <- mkDataInstance n
+-      return $ [ds,is]
+-
+-constrInstance :: Name -> Q [Dec]
+-constrInstance n = do
+-  i <- reify n
+-  case i of
+-    TyConI (DataD    _ n _ cs _) -> mkInstance n cs
+-    TyConI (NewtypeD _ n _ c  _) -> mkInstance n [c]
+-    _ -> return []
+-  where
+-    mkInstance n cs = do
+-      ds <- mapM (mkConstrData n) cs
+-      is <- mapM (mkConstrInstance n) cs
+-      return $ ds ++ is
+-
+-selectInstance :: Name -> Q [Dec]
+-selectInstance n = do
+-  i <- reify n
+-  case i of
+-    TyConI (DataD    _ n _ cs _) -> mkInstance n cs
+-    TyConI (NewtypeD _ n _ c  _) -> mkInstance n [c]
+-    _ -> return []
+-  where
+-    mkInstance n cs = do
+-      ds <- mapM (mkSelectData n) cs
+-      is <- mapM (mkSelectInstance n) cs
+-      return $ concat (ds ++ is)
+-
+ typeVariables :: Info -> [TyVarBndr]
+ typeVariables (TyConI (DataD    _ _ tv _ _)) = tv
+ typeVariables (TyConI (NewtypeD _ _ tv _ _)) = tv
+@@ -179,233 +49,9 @@ genName = mkName . (++"_") . intercalate "_" . map nameBase
+ genRepName :: Int -> Name -> Name
+ genRepName n = mkName . (++"_") . (("Rep" ++ show n) ++) . nameBase
+ 
+-mkDataData :: Name -> Q Dec
+-mkDataData n = dataD (cxt []) (genName [n]) [] [] []
+-
+-mkConstrData :: Name -> Con -> Q Dec
+-mkConstrData dt (NormalC n _) =
+-  dataD (cxt []) (genName [dt, n]) [] [] [] 
+-mkConstrData dt r@(RecC _ _) =
+-  mkConstrData dt (stripRecordNames r)
+-mkConstrData dt (InfixC t1 n t2) =
+-  mkConstrData dt (NormalC n [t1,t2])
+-
+-mkSelectData :: Name -> Con -> Q [Dec]
+-mkSelectData dt r@(RecC n fs) = return (map one fs)
+-  where one (f, _, _) = DataD [] (genName [dt, n, f]) [] [] []
+-mkSelectData dt _ = return []
+-
+-
+-mkDataInstance :: Name -> Q Dec
+-mkDataInstance n =
+-  instanceD (cxt []) (appT (conT ''Datatype) (conT $ genName [n]))
+-    [funD 'datatypeName [clause [wildP] (normalB (stringE (nameBase n))) []]
+-    ,funD 'moduleName   [clause [wildP] (normalB (stringE name)) []]]
+-  where
+-    name = maybe (error "Cannot fetch module name!") id (nameModule n)
+-
+-instance Lift Fixity where
+-  lift Prefix      = conE 'Prefix
+-  lift (Infix a n) = conE 'Infix `appE` [| a |] `appE` [| n |]
+-
+-instance Lift Associativity where
+-  lift LeftAssociative  = conE 'LeftAssociative
+-  lift RightAssociative = conE 'RightAssociative
+-  lift NotAssociative   = conE 'NotAssociative
+-
+-mkConstrInstance :: Name -> Con -> Q Dec
+-mkConstrInstance dt (NormalC n _) = mkConstrInstanceWith dt n []
+-mkConstrInstance dt (RecC    n _) = mkConstrInstanceWith dt n
+-      [ funD 'conIsRecord [clause [wildP] (normalB (conE 'True)) []]]
+-mkConstrInstance dt (InfixC t1 n t2) =
+-    do
+-      i <- reify n
+-      let fi = case i of
+-                 DataConI _ _ _ f -> convertFixity f
+-                 _ -> Prefix
+-      instanceD (cxt []) (appT (conT ''Constructor) (conT $ genName [dt, n]))
+-        [funD 'conName   [clause [wildP] (normalB (stringE (nameBase n))) []],
+-         funD 'conFixity [clause [wildP] (normalB [| fi |]) []]]
+-  where
+-    convertFixity (Fixity n d) = Infix (convertDirection d) n
+-    convertDirection InfixL = LeftAssociative
+-    convertDirection InfixR = RightAssociative
+-    convertDirection InfixN = NotAssociative
+-
+-mkConstrInstanceWith :: Name -> Name -> [Q Dec] -> Q Dec
+-mkConstrInstanceWith dt n extra = 
+-  instanceD (cxt []) (appT (conT ''Constructor) (conT $ genName [dt, n]))
+-    (funD 'conName [clause [wildP] (normalB (stringE (nameBase n))) []] : extra)
+-
+-mkSelectInstance :: Name -> Con -> Q [Dec]
+-mkSelectInstance dt r@(RecC n fs) = return (map one fs) where
+-  one (f, _, _) = 
+-    InstanceD ([]) (AppT (ConT ''Selector) (ConT $ genName [dt, n, f]))
+-      [FunD 'selName [Clause [WildP] 
+-        (NormalB (LitE (StringL (nameBase f)))) []]]
+-mkSelectInstance _ _ = return []
+-
+-rep0Type :: Name -> Q Type
+-rep0Type n =
+-    do
+-      -- runIO $ putStrLn $ "processing " ++ show n
+-      i <- reify n
+-      let b = case i of
+-                TyConI (DataD _ dt vs cs _) ->
+-                  (conT ''D1) `appT` (conT $ genName [dt]) `appT` 
+-                    (foldr1' sum (conT ''V1) 
+-                      (map (rep0Con (dt, map tyVarBndrToName vs)) cs))
+-                TyConI (NewtypeD _ dt vs c _) ->
+-                  (conT ''D1) `appT` (conT $ genName [dt]) `appT`
+-                    (rep0Con (dt, map tyVarBndrToName vs) c)
+-                TyConI (TySynD t _ _) -> error "type synonym?" 
+-                _ -> error "unknown construct" 
+-      --appT b (conT $ mkName (nameBase n))
+-      b where
+-    sum :: Q Type -> Q Type -> Q Type
+-    sum a b = conT ''(:+:) `appT` a `appT` b
+-
+-
+-rep0Con :: (Name, [Name]) -> Con -> Q Type
+-rep0Con (dt, vs) (NormalC n []) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` 
+-     (conT ''S1 `appT` conT ''NoSelector `appT` conT ''U1)
+-rep0Con (dt, vs) (NormalC n fs) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` 
+-     (foldr1 prod (map (repField (dt, vs) . snd) fs)) where
+-    prod :: Q Type -> Q Type -> Q Type
+-    prod a b = conT ''(:*:) `appT` a `appT` b
+-rep0Con (dt, vs) r@(RecC n []) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` conT ''U1
+-rep0Con (dt, vs) r@(RecC n fs) =
+-    conT ''C1 `appT` (conT $ genName [dt, n]) `appT` 
+-      (foldr1 prod (map (repField' (dt, vs) n) fs)) where
+-    prod :: Q Type -> Q Type -> Q Type
+-    prod a b = conT ''(:*:) `appT` a `appT` b
+-
+-rep0Con d (InfixC t1 n t2) = rep0Con d (NormalC n [t1,t2])
+-
+---dataDeclToType :: (Name, [Name]) -> Type
+---dataDeclToType (dt, vs) = foldl (\a b -> AppT a (VarT b)) (ConT dt) vs
+-
+-repField :: (Name, [Name]) -> Type -> Q Type
+---repField d t | t == dataDeclToType d = conT ''I
+-repField d t = conT ''S1 `appT` conT ''NoSelector `appT`
+-                 (conT ''Rec0 `appT` return t)
+-
+-repField' :: (Name, [Name]) -> Name -> (Name, Strict, Type) -> Q Type
+---repField' d ns (_, _, t) | t == dataDeclToType d = conT ''I
+-repField' (dt, vs) ns (f, _, t) = conT ''S1 `appT` conT (genName [dt, ns, f]) 
+-                                    `appT` (conT ''Rec0 `appT` return t)
+--- Note: we should generate Par0 too, at some point
+-
+-
+-mkFrom :: Name -> Int -> Int -> Name -> Q [Q Clause]
+-mkFrom ns m i n =
+-    do
+-      -- runIO $ putStrLn $ "processing " ++ show n
+-      let wrapE e = lrE m i e
+-      i <- reify n
+-      let b = case i of
+-                TyConI (DataD _ dt vs cs _) ->
+-                  zipWith (fromCon wrapE ns (dt, map tyVarBndrToName vs)
+-                    (length cs)) [0..] cs
+-                TyConI (NewtypeD _ dt vs c _) ->
+-                  [fromCon wrapE ns (dt, map tyVarBndrToName vs) 1 0 c]
+-                TyConI (TySynD t _ _) -> error "type synonym?" 
+-                  -- [clause [varP (field 0)] (normalB (wrapE $ conE 'K1 `appE` varE (field 0))) []]
+-                _ -> error "unknown construct"
+-      return b
+-
+-mkTo :: Name -> Int -> Int -> Name -> Q [Q Clause]
+-mkTo ns m i n =
+-    do
+-      -- runIO $ putStrLn $ "processing " ++ show n
+-      let wrapP p = lrP m i p
+-      i <- reify n
+-      let b = case i of
+-                TyConI (DataD _ dt vs cs _) ->
+-                  zipWith (toCon wrapP ns (dt, map tyVarBndrToName vs)
+-                    (length cs)) [0..] cs
+-                TyConI (NewtypeD _ dt vs c _) ->
+-                  [toCon wrapP ns (dt, map tyVarBndrToName vs) 1 0 c]
+-                TyConI (TySynD t _ _) -> error "type synonym?" 
+-                  -- [clause [wrapP $ conP 'K1 [varP (field 0)]] (normalB $ varE (field 0)) []]
+-                _ -> error "unknown construct" 
+-      return b
+-
+-fromCon :: (Q Exp -> Q Exp) -> Name -> (Name, [Name]) -> Int -> Int -> Con -> Q Clause
+-fromCon wrap ns (dt, vs) m i (NormalC cn []) =
+-  clause
+-    [conP cn []]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ appE (conE 'M1) $ 
+-      conE 'M1 `appE` (conE 'U1)) []
+-fromCon wrap ns (dt, vs) m i (NormalC cn fs) =
+-  -- runIO (putStrLn ("constructor " ++ show ix)) >>
+-  clause
+-    [conP cn (map (varP . field) [0..length fs - 1])]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ conE 'M1 `appE` 
+-      foldr1 prod (zipWith (fromField (dt, vs)) [0..] (map snd fs))) []
+-  where prod x y = conE '(:*:) `appE` x `appE` y
+-fromCon wrap ns (dt, vs) m i r@(RecC cn []) =
+-  clause
+-    [conP cn []]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ conE 'M1 `appE` (conE 'U1)) []
+-fromCon wrap ns (dt, vs) m i r@(RecC cn fs) =
+-  clause
+-    [conP cn (map (varP . field) [0..length fs - 1])]
+-    (normalB $ appE (conE 'M1) $ wrap $ lrE m i $ conE 'M1 `appE` 
+-      foldr1 prod (zipWith (fromField (dt, vs)) [0..] (map trd fs))) []
+-  where prod x y = conE '(:*:) `appE` x `appE` y
+-fromCon wrap ns (dt, vs) m i (InfixC t1 cn t2) =
+-  fromCon wrap ns (dt, vs) m i (NormalC cn [t1,t2])
+-
+-fromField :: (Name, [Name]) -> Int -> Type -> Q Exp
+---fromField (dt, vs) nr t | t == dataDeclToType (dt, vs) = conE 'I `appE` varE (field nr)
+-fromField (dt, vs) nr t = conE 'M1 `appE` (conE 'K1 `appE` varE (field nr))
+-
+-toCon :: (Q Pat -> Q Pat) -> Name -> (Name, [Name]) -> Int -> Int -> Con -> Q Clause
+-toCon wrap ns (dt, vs) m i (NormalC cn []) =
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1 [conP 'M1 [conP 'U1 []]]]]
+-      (normalB $ conE cn) []
+-toCon wrap ns (dt, vs) m i (NormalC cn fs) =
+-    -- runIO (putStrLn ("constructor " ++ show ix)) >>
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1
+-        [foldr1 prod (zipWith (toField (dt, vs)) [0..] (map snd fs))]]]
+-      (normalB $ foldl appE (conE cn) (map (varE . field) [0..length fs - 1])) []
+-  where prod x y = conP '(:*:) [x,y]
+-toCon wrap ns (dt, vs) m i r@(RecC cn []) =
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1 [conP 'U1 []]]]
+-      (normalB $ conE cn) []
+-toCon wrap ns (dt, vs) m i r@(RecC cn fs) =
+-    clause
+-      [wrap $ conP 'M1 [lrP m i $ conP 'M1
+-        [foldr1 prod (zipWith (toField (dt, vs)) [0..] (map trd fs))]]]
+-      (normalB $ foldl appE (conE cn) (map (varE . field) [0..length fs - 1])) []
+-  where prod x y = conP '(:*:) [x,y]
+-toCon wrap ns (dt, vs) m i (InfixC t1 cn t2) =
+-  toCon wrap ns (dt, vs) m i (NormalC cn [t1,t2])
+-
+-toField :: (Name, [Name]) -> Int -> Type -> Q Pat
+---toField (dt, vs) nr t | t == dataDeclToType (dt, vs) = conP 'I [varP (field nr)]
+-toField (dt, vs) nr t = conP 'M1 [conP 'K1 [varP (field nr)]]
+-
+-
+ field :: Int -> Name
+ field n = mkName $ "f" ++ show n
+ 
+-lrP :: Int -> Int -> (Q Pat -> Q Pat)
+-lrP 1 0 p = p
+-lrP m 0 p = conP 'L1 [p]
+-lrP m i p = conP 'R1 [lrP (m-1) (i-1) p]
+-
+-lrE :: Int -> Int -> (Q Exp -> Q Exp)
+-lrE 1 0 e = e
+-lrE m 0 e = conE 'L1 `appE` e
+-lrE m i e = conE 'R1 `appE` lrE (m-1) (i-1) e
+ 
+ trd (_,_,c) = c
+ 
+-- 
+1.8.5.1
+
diff --git a/standalone/no-th/haskell-patches/lens_no-TH.patch b/standalone/no-th/haskell-patches/lens_no-TH.patch
--- a/standalone/no-th/haskell-patches/lens_no-TH.patch
+++ b/standalone/no-th/haskell-patches/lens_no-TH.patch
@@ -1,20 +1,20 @@
-From 88ff2174944daf90530a33ee06e2e3f667089b6a Mon Sep 17 00:00:00 2001
+From 10c9ade98b3ac2054947f411d77db2eb28896b9f Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Fri, 3 Jul 2015 02:06:43 +0000
-Subject: [PATCH] remove TH
+Date: Thu, 16 Oct 2014 01:43:10 +0000
+Subject: [PATCH] avoid TH
 
 ---
- lens.cabal                          | 16 +---------------
- src/Control/Lens.hs                 |  6 ++----
+ lens.cabal                          | 17 +----------------
+ src/Control/Lens.hs                 |  8 ++------
  src/Control/Lens/Cons.hs            |  2 --
  src/Control/Lens/Internal/Fold.hs   |  2 --
  src/Control/Lens/Operators.hs       |  2 +-
  src/Control/Lens/Prism.hs           |  2 --
  src/Control/Monad/Primitive/Lens.hs |  1 -
- 7 files changed, 4 insertions(+), 27 deletions(-)
+ 7 files changed, 4 insertions(+), 30 deletions(-)
 
 diff --git a/lens.cabal b/lens.cabal
-index c7f6009..ab206c5 100644
+index 5388301..d7b02b9 100644
 --- a/lens.cabal
 +++ b/lens.cabal
 @@ -10,7 +10,7 @@ stability:     provisional
@@ -26,7 +26,15 @@
  -- build-tools:   cpphs
  tested-with:   GHC == 7.4.1, GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.1, GHC == 7.8.2
  synopsis:      Lenses, Folds and Traversals
-@@ -230,8 +230,6 @@ library
+@@ -217,7 +217,6 @@ library
+     Control.Exception.Lens
+     Control.Lens
+     Control.Lens.Action
+-    Control.Lens.At
+     Control.Lens.Combinators
+     Control.Lens.Cons
+     Control.Lens.Each
+@@ -234,8 +233,6 @@ library
      Control.Lens.Internal.Context
      Control.Lens.Internal.Deque
      Control.Lens.Internal.Exception
@@ -35,7 +43,7 @@
      Control.Lens.Internal.Fold
      Control.Lens.Internal.Getter
      Control.Lens.Internal.Indexed
-@@ -243,25 +241,21 @@ library
+@@ -247,25 +244,21 @@ library
      Control.Lens.Internal.Reflection
      Control.Lens.Internal.Review
      Control.Lens.Internal.Setter
@@ -61,7 +69,7 @@
      Control.Monad.Primitive.Lens
      Control.Parallel.Strategies.Lens
      Control.Seq.Lens
-@@ -287,12 +281,8 @@ library
+@@ -291,12 +284,8 @@ library
      Data.Typeable.Lens
      Data.Vector.Lens
      Data.Vector.Generic.Lens
@@ -74,7 +82,7 @@
      Numeric.Lens
  
    other-modules:
-@@ -395,7 +385,6 @@ test-suite doctests
+@@ -403,7 +392,6 @@ test-suite doctests
        deepseq,
        doctest        >= 0.9.1,
        filepath,
@@ -82,7 +90,7 @@
        mtl,
        nats,
        parallel,
-@@ -433,7 +422,6 @@ benchmark plated
+@@ -441,7 +429,6 @@ benchmark plated
      comonad,
      criterion,
      deepseq,
@@ -90,7 +98,7 @@
      lens,
      transformers
  
-@@ -468,7 +456,6 @@ benchmark unsafe
+@@ -476,7 +463,6 @@ benchmark unsafe
      comonads-fd,
      criterion,
      deepseq,
@@ -98,7 +106,7 @@
      lens,
      transformers
  
-@@ -485,6 +472,5 @@ benchmark zipper
+@@ -493,6 +479,5 @@ benchmark zipper
      comonads-fd,
      criterion,
      deepseq,
@@ -106,10 +114,18 @@
      lens,
      transformers
 diff --git a/src/Control/Lens.hs b/src/Control/Lens.hs
-index d879c58..3d6015b 100644
+index 7e15267..433f1fc 100644
 --- a/src/Control/Lens.hs
 +++ b/src/Control/Lens.hs
-@@ -56,12 +56,11 @@ module Control.Lens
+@@ -41,7 +41,6 @@
+ ----------------------------------------------------------------------------
+ module Control.Lens
+   ( module Control.Lens.Action
+-  , module Control.Lens.At
+   , module Control.Lens.Cons
+   , module Control.Lens.Each
+   , module Control.Lens.Empty
+@@ -53,12 +52,11 @@ module Control.Lens
    , module Control.Lens.Lens
    , module Control.Lens.Level
    , module Control.Lens.Loupe
@@ -123,7 +139,15 @@
    , module Control.Lens.TH
  #endif
    , module Control.Lens.Traversal
-@@ -83,12 +82,11 @@ import Control.Lens.Iso
+@@ -69,7 +67,6 @@ module Control.Lens
+   ) where
+ 
+ import Control.Lens.Action
+-import Control.Lens.At
+ import Control.Lens.Cons
+ import Control.Lens.Each
+ import Control.Lens.Empty
+@@ -81,12 +78,11 @@ import Control.Lens.Iso
  import Control.Lens.Lens
  import Control.Lens.Level
  import Control.Lens.Loupe
@@ -138,12 +162,12 @@
  #endif
  import Control.Lens.Traversal
 diff --git a/src/Control/Lens/Cons.hs b/src/Control/Lens/Cons.hs
-index 7b35db4..269f307 100644
+index a80e9c8..7d27b80 100644
 --- a/src/Control/Lens/Cons.hs
 +++ b/src/Control/Lens/Cons.hs
-@@ -56,8 +56,6 @@ import qualified Data.Vector.Unboxed as Unbox
+@@ -55,8 +55,6 @@ import           Data.Vector.Unboxed (Unbox)
+ import qualified Data.Vector.Unboxed as Unbox
  import           Data.Word
- import           Prelude
  
 -{-# ANN module "HLint: ignore Eta reduce" #-}
 -
@@ -151,12 +175,12 @@
  -- >>> :set -XNoOverloadedStrings
  -- >>> import Control.Lens
 diff --git a/src/Control/Lens/Internal/Fold.hs b/src/Control/Lens/Internal/Fold.hs
-index 4bbde21..16295f4 100644
+index ab09c6b..43aa905 100644
 --- a/src/Control/Lens/Internal/Fold.hs
 +++ b/src/Control/Lens/Internal/Fold.hs
-@@ -35,8 +35,6 @@ import Data.Semigroup hiding (Min, getMin, Max, getMax)
+@@ -37,8 +37,6 @@ import Data.Maybe
+ import Data.Semigroup hiding (Min, getMin, Max, getMax)
  import Data.Reflection
- import Prelude
  
 -{-# ANN module "HLint: ignore Avoid lambda" #-}
 -
@@ -164,10 +188,10 @@
  -- Folding
  ------------------------------------------------------------------------------
 diff --git a/src/Control/Lens/Operators.hs b/src/Control/Lens/Operators.hs
-index 302f68e..1625fe5 100644
+index 9992e63..631e8e6 100644
 --- a/src/Control/Lens/Operators.hs
 +++ b/src/Control/Lens/Operators.hs
-@@ -104,7 +104,7 @@ module Control.Lens.Operators
+@@ -111,7 +111,7 @@ module Control.Lens.Operators
    , (<#~)
    , (<#=)
    -- * "Control.Lens.Plated"
@@ -177,12 +201,12 @@
    , ( # )
    -- * "Control.Lens.Setter"
 diff --git a/src/Control/Lens/Prism.hs b/src/Control/Lens/Prism.hs
-index 36152d6..3af6bd3 100644
+index b75c870..c6c6596 100644
 --- a/src/Control/Lens/Prism.hs
 +++ b/src/Control/Lens/Prism.hs
-@@ -62,8 +62,6 @@ import Data.Profunctor.Unsafe
+@@ -61,8 +61,6 @@ import Unsafe.Coerce
+ import Data.Profunctor.Unsafe
  #endif
- import Prelude
  
 -{-# ANN module "HLint: ignore Use camelCase" #-}
 -
@@ -190,17 +214,17 @@
  -- >>> :set -XNoOverloadedStrings
  -- >>> import Control.Lens
 diff --git a/src/Control/Monad/Primitive/Lens.hs b/src/Control/Monad/Primitive/Lens.hs
-index 8f1ec94..482764a 100644
+index ee942c6..2f37134 100644
 --- a/src/Control/Monad/Primitive/Lens.hs
 +++ b/src/Control/Monad/Primitive/Lens.hs
-@@ -26,7 +26,6 @@ import Control.Lens
- import Control.Monad.Primitive
+@@ -20,7 +20,6 @@ import Control.Lens
+ import Control.Monad.Primitive (PrimMonad(..))
  import GHC.Prim (State#)
  
 -{-# ANN module "HLint: ignore Unused LANGUAGE pragma" #-}
  
- #if MIN_VERSION_primitive(0,6,0)
- prim :: PrimBase m => Iso' (m a) (State# (PrimState m) -> (# State# (PrimState m), a #))
+ prim :: (PrimMonad m) => Iso' (m a) (State# (PrimState m) -> (# State# (PrimState m), a #))
+ prim = iso internal primitive
 -- 
-2.1.4
+2.1.1
 
diff --git a/standalone/no-th/haskell-patches/monad-logger_remove-TH.patch b/standalone/no-th/haskell-patches/monad-logger_remove-TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/monad-logger_remove-TH.patch
@@ -0,0 +1,27 @@
+From 8e78a25ce0cc19e52d063f66bd4cd316462393d4 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 6 Mar 2014 23:27:06 +0000
+Subject: [PATCH] disable th
+
+---
+ monad-logger.cabal | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/monad-logger.cabal b/monad-logger.cabal
+index b0aa271..cd56c0f 100644
+--- a/monad-logger.cabal
++++ b/monad-logger.cabal
+@@ -14,8 +14,8 @@ cabal-version:       >=1.8
+ 
+ flag template_haskell {
+       Description: Enable Template Haskell support
+-      Default:     True
+-      Manual:      True
++      Default:     False
++      Manual:      False
+ }
+ 
+ library
+-- 
+1.9.0
+
diff --git a/standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch b/standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch
@@ -0,0 +1,33 @@
+From b128590966d4946219e45e2efd88acf7a354abc2 Mon Sep 17 00:00:00 2001
+From: androidbuilder <androidbuilder@example.com>
+Date: Tue, 14 Oct 2014 02:28:02 +0000
+Subject: [PATCH] remove ANN
+
+---
+ Options/Applicative.hs           |    2 --
+ Options/Applicative/Help/Core.hs |    2 --
+ 2 files changed, 4 deletions(-)
+
+diff --git a/Options/Applicative.hs b/Options/Applicative.hs
+index bd4129d..f412062 100644
+--- a/Options/Applicative.hs
++++ b/Options/Applicative.hs
+@@ -34,5 +34,3 @@ import Options.Applicative.Common
+ import Options.Applicative.Builder
+ import Options.Applicative.Builder.Completer
+ import Options.Applicative.Extra
+-
+-{-# ANN module "HLint: ignore Use import/export shortcut" #-}
+diff --git a/Options/Applicative/Help/Core.hs b/Options/Applicative/Help/Core.hs
+index 0a79169..3f1ce3f 100644
+--- a/Options/Applicative/Help/Core.hs
++++ b/Options/Applicative/Help/Core.hs
+@@ -139,5 +139,3 @@ parserUsage pprefs p progn = hsep
+   [ string "Usage:"
+   , string progn
+   , align (extractChunk (briefDesc pprefs p)) ]
+-
+-{-# ANN footerHelp "HLint: ignore Eta reduce" #-}
+-- 
+1.7.10.4
+
diff --git a/standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch b/standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch
@@ -0,0 +1,41 @@
+From aae3ace106cf26c931cc94c96fb6fbfe83f950f2 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Wed, 15 Oct 2014 17:05:37 +0000
+Subject: [PATCH] avoid TH
+
+---
+ Database/Persist/Sql/Raw.hs | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/Database/Persist/Sql/Raw.hs b/Database/Persist/Sql/Raw.hs
+index 3ac2ca9..bcc2011 100644
+--- a/Database/Persist/Sql/Raw.hs
++++ b/Database/Persist/Sql/Raw.hs
+@@ -11,7 +11,7 @@ import Data.IORef (writeIORef, readIORef, newIORef)
+ import Control.Exception (throwIO)
+ import Control.Monad (when, liftM)
+ import Data.Text (Text, pack)
+-import Control.Monad.Logger (logDebugS)
++--import Control.Monad.Logger (logDebugS)
+ import Data.Int (Int64)
+ import Control.Monad.Trans.Class (lift)
+ import qualified Data.Text as T
+@@ -23,7 +23,6 @@ rawQuery :: (MonadSqlPersist m, MonadResource m)
+          -> [PersistValue]
+          -> Source m [PersistValue]
+ rawQuery sql vals = do
+-    lift $ $logDebugS (pack "SQL") $ pack $ show sql ++ " " ++ show vals
+     conn <- lift askSqlConn
+     bracketP
+         (getStmtConn conn sql)
+@@ -35,7 +34,6 @@ rawExecute x y = liftM (const ()) $ rawExecuteCount x y
+ 
+ rawExecuteCount :: MonadSqlPersist m => Text -> [PersistValue] -> m Int64
+ rawExecuteCount sql vals = do
+-    $logDebugS (pack "SQL") $ pack $ show sql ++ " " ++ show vals
+     stmt <- getStmt sql
+     res <- liftIO $ stmtExecute stmt vals
+     liftIO $ stmtReset stmt
+-- 
+2.1.1
+
diff --git a/standalone/no-th/haskell-patches/profunctors_3.3-0001-fix-cross-build.patch b/standalone/no-th/haskell-patches/profunctors_3.3-0001-fix-cross-build.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/profunctors_3.3-0001-fix-cross-build.patch
@@ -0,0 +1,26 @@
+From 392602f5ff14c0b5a801397d075ddcbcd890aa83 Mon Sep 17 00:00:00 2001
+From: Joey Hess <joey@kitenet.net>
+Date: Thu, 18 Apr 2013 17:50:59 -0400
+Subject: [PATCH] fix cross build
+
+---
+ src/Data/Profunctor/Unsafe.hs | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/src/Data/Profunctor/Unsafe.hs b/src/Data/Profunctor/Unsafe.hs
+index 025c7c4..0249274 100644
+--- a/src/Data/Profunctor/Unsafe.hs
++++ b/src/Data/Profunctor/Unsafe.hs
+@@ -40,9 +40,6 @@ import Data.Tagged
+ import Prelude hiding (id,(.),sequence)
+ import Unsafe.Coerce
+ 
+-{-# ANN module "Hlint: ignore Redundant lambda" #-}
+-{-# ANN module "Hlint: ignore Collapse lambdas" #-}
+-
+ infixr 9 #.
+ infixl 8 .#
+ 
+-- 
+1.8.2.rc3
+
diff --git a/standalone/no-th/haskell-patches/reflection_remove-TH.patch b/standalone/no-th/haskell-patches/reflection_remove-TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/reflection_remove-TH.patch
@@ -0,0 +1,59 @@
+From c0f5dcfd6ba7a05bb84b6adc4664c8dde109e6ac Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Fri, 7 Mar 2014 04:30:22 +0000
+Subject: [PATCH] remove TH
+
+---
+ fast/Data/Reflection.hs | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/fast/Data/Reflection.hs b/fast/Data/Reflection.hs
+index ca57d35..d3f8356 100644
+--- a/fast/Data/Reflection.hs
++++ b/fast/Data/Reflection.hs
+@@ -59,7 +59,7 @@ module Data.Reflection
+     , Given(..)
+     , give
+     -- * Template Haskell reflection
+-    , int, nat
++    --, int, nat
+     -- * Useful compile time naturals
+     , Z, D, SD, PD
+     ) where
+@@ -161,6 +161,7 @@ instance Reifies n Int => Reifies (PD n) Int where
+ -- instead of @$(int 3)@. Sometimes the two will produce the same
+ -- representation (if compiled without the @-DUSE_TYPE_LITS@ preprocessor
+ -- directive).
++{-
+ int :: Int -> TypeQ
+ int n = case quotRem n 2 of
+   (0, 0) -> conT ''Z
+@@ -176,7 +177,7 @@ nat :: Int -> TypeQ
+ nat n
+   | n >= 0 = int n
+   | otherwise = error "nat: negative"
+-
++-}
+ #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL < 704
+ instance Show (Q a)
+ instance Eq (Q a)
+@@ -195,6 +196,7 @@ instance Fractional a => Fractional (Q a) where
+   recip = fmap recip
+   fromRational = return . fromRational
+ 
++{-
+ -- | This permits the use of $(5) as a type splice.
+ instance Num Type where
+ #ifdef USE_TYPE_LITS
+@@ -254,7 +256,7 @@ instance Num Exp where
+   abs = onProxyType1 abs
+   signum = onProxyType1 signum
+   fromInteger n = ConE 'Proxy `SigE` (ConT ''Proxy `AppT` fromInteger n)
+-
++-}
+ #ifdef USE_TYPE_LITS
+ addProxy :: Proxy a -> Proxy b -> Proxy (a + b)
+ addProxy _ _ = Proxy
+-- 
+1.9.0
+
diff --git a/standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch b/standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch
@@ -0,0 +1,26 @@
+From 3a04b41ffce4e4e87b0fedd3a1e3434a3f06cc76 Mon Sep 17 00:00:00 2001
+From: foo <foo@bar>
+Date: Sun, 22 Sep 2013 00:18:12 +0000
+Subject: [PATCH] hardcode little endian
+
+This is the same as building with a cabal flag.
+
+---
+ c_impl/optimized/skein_port.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/c_impl/optimized/skein_port.h b/c_impl/optimized/skein_port.h
+index a2d0fc2..6929bb0 100644
+--- a/c_impl/optimized/skein_port.h
++++ b/c_impl/optimized/skein_port.h
+@@ -45,6 +45,7 @@ typedef uint64_t        u64b_t;             /* 64-bit unsigned integer */
+  * platform-specific code instead (e.g., for big-endian CPUs).
+  *
+  */
++#define SKEIN_NEED_SWAP  (0)
+ #ifndef SKEIN_NEED_SWAP /* compile-time "override" for endianness? */
+ 
+ #include "brg_endian.h"                     /* get endianness selection */
+-- 
+1.7.10.4
+
diff --git a/standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch b/standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch
@@ -0,0 +1,49 @@
+From 6ffd4fcb7d27ec6df709d80a40a262406446a259 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Wed, 15 Oct 2014 17:00:56 +0000
+Subject: [PATCH] cross build
+
+---
+ Data/Vector/Fusion/Stream/Monadic.hs |  1 -
+ Data/Vector/Unboxed/Base.hs          | 13 -------------
+ 2 files changed, 14 deletions(-)
+
+diff --git a/Data/Vector/Fusion/Stream/Monadic.hs b/Data/Vector/Fusion/Stream/Monadic.hs
+index 51fec75..b089b3d 100644
+--- a/Data/Vector/Fusion/Stream/Monadic.hs
++++ b/Data/Vector/Fusion/Stream/Monadic.hs
+@@ -101,7 +101,6 @@ import GHC.Exts ( SpecConstrAnnotation(..) )
+ 
+ data SPEC = SPEC | SPEC2
+ #if __GLASGOW_HASKELL__ >= 700
+-{-# ANN type SPEC ForceSpecConstr #-}
+ #endif
+ 
+ emptyStream :: String
+diff --git a/Data/Vector/Unboxed/Base.hs b/Data/Vector/Unboxed/Base.hs
+index 00350cb..34bfc4a 100644
+--- a/Data/Vector/Unboxed/Base.hs
++++ b/Data/Vector/Unboxed/Base.hs
+@@ -65,19 +65,6 @@ vectorTyCon = mkTyCon3 "vector"
+ vectorTyCon m s = mkTyCon $ m ++ "." ++ s
+ #endif
+ 
+-instance Typeable1 Vector where
+-  typeOf1 _ = mkTyConApp (vectorTyCon "Data.Vector.Unboxed" "Vector") []
+-
+-instance Typeable2 MVector where
+-  typeOf2 _ = mkTyConApp (vectorTyCon "Data.Vector.Unboxed.Mutable" "MVector") []
+-
+-instance (Data a, Unbox a) => Data (Vector a) where
+-  gfoldl       = G.gfoldl
+-  toConstr _   = error "toConstr"
+-  gunfold _ _  = error "gunfold"
+-  dataTypeOf _ = G.mkType "Data.Vector.Unboxed.Vector"
+-  dataCast1    = G.dataCast
+-
+ -- ----
+ -- Unit
+ -- ----
+-- 
+2.1.1
+
diff --git a/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch b/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch
--- a/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch
+++ b/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch
@@ -1,8 +1,12 @@
-From a020dd27eda45263db6ac887df4a94efb6ca86db Mon Sep 17 00:00:00 2001
+From 3aef808eee43c973ae1fbf6e8769d89b7f0d355b Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Thu, 2 Jul 2015 21:36:02 +0000
+Date: Tue, 10 Jun 2014 14:47:42 +0000
 Subject: [PATCH] deal with TH
 
+Export modules referenced by it.
+
+Should not need these icons in git-annex, so not worth using the Evil
+Splicer.
 ---
  Network/Wai/Application/Static.hs | 4 ----
  WaiAppStatic/Storage/Embedded.hs  | 8 ++++----
@@ -10,10 +14,10 @@
  3 files changed, 5 insertions(+), 11 deletions(-)
 
 diff --git a/Network/Wai/Application/Static.hs b/Network/Wai/Application/Static.hs
-index 228582d..7d72bb0 100644
+index db2b835..b2c1aec 100644
 --- a/Network/Wai/Application/Static.hs
 +++ b/Network/Wai/Application/Static.hs
-@@ -34,8 +34,6 @@ import Control.Monad.IO.Class (liftIO)
+@@ -33,8 +33,6 @@ import Control.Monad.IO.Class (liftIO)
  
  import Blaze.ByteString.Builder (toByteString)
  
@@ -22,10 +26,10 @@
  import Data.Text (Text)
  import qualified Data.Text as T
  
-@@ -218,8 +216,6 @@ staticAppPieces _ _ req sendResponse
+@@ -198,8 +196,6 @@ staticAppPieces _ _ req sendResponse
          H.status405
          [("Content-Type", "text/plain")]
-         "Only GET or HEAD is supported"
+         "Only GET is supported"
 -staticAppPieces _ [".hidden", "folder.png"] _ sendResponse = sendResponse $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/folder.png")]
 -staticAppPieces _ [".hidden", "haskell.png"] _ sendResponse = sendResponse $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/haskell.png")]
  staticAppPieces ss rawPieces req sendResponse = liftIO $ do
@@ -51,10 +55,10 @@
 -import WaiAppStatic.Storage.Embedded.TH
 +--import WaiAppStatic.Storage.Embedded.TH
 diff --git a/wai-app-static.cabal b/wai-app-static.cabal
-index 4cca237..3fbfcee 100644
+index ef6f898..9a59d71 100644
 --- a/wai-app-static.cabal
 +++ b/wai-app-static.cabal
-@@ -35,7 +35,6 @@ library
+@@ -33,7 +33,6 @@ library
                     , containers                >= 0.2
                     , time                      >= 1.1.4
                     , old-locale                >= 1.0.0.2
@@ -62,7 +66,7 @@
                     , text                      >= 0.7
                     , blaze-builder             >= 0.2.1.4
                     , base64-bytestring         >= 0.1
-@@ -63,9 +62,8 @@ library
+@@ -61,9 +60,8 @@ library
                       WaiAppStatic.Listing
                       WaiAppStatic.Types
                       WaiAppStatic.CmdLine
@@ -74,5 +78,5 @@
      extensions:     CPP
  
 -- 
-2.1.4
+2.0.0
 
diff --git a/standalone/no-th/haskell-patches/xml-hamlet_remove_TH.patch b/standalone/no-th/haskell-patches/xml-hamlet_remove_TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/xml-hamlet_remove_TH.patch
@@ -0,0 +1,108 @@
+From b53713fbb4f3bb6bdd25b07afcaed4940b32dfa8 Mon Sep 17 00:00:00 2001
+From: Joey Hess <joey@kitenet.net>
+Date: Wed, 18 Dec 2013 03:32:44 +0000
+Subject: [PATCH] remove TH
+
+---
+ Text/Hamlet/XML.hs | 81 +-----------------------------------------------------
+ 1 file changed, 1 insertion(+), 80 deletions(-)
+
+diff --git a/Text/Hamlet/XML.hs b/Text/Hamlet/XML.hs
+index f587410..4e830bd 100644
+--- a/Text/Hamlet/XML.hs
++++ b/Text/Hamlet/XML.hs
+@@ -1,9 +1,7 @@
+ {-# LANGUAGE TemplateHaskell #-}
+ {-# OPTIONS_GHC -fno-warn-missing-fields #-}
+ module Text.Hamlet.XML
+-    ( xml
+-    , xmlFile
+-    ) where
++    () where
+ 
+ import Language.Haskell.TH.Syntax
+ import Language.Haskell.TH.Quote
+@@ -19,80 +17,3 @@ import qualified Data.Foldable as F
+ import Data.Maybe (fromMaybe)
+ import qualified Data.Map as Map
+ 
+-xml :: QuasiQuoter
+-xml = QuasiQuoter { quoteExp = strToExp }
+-
+-xmlFile :: FilePath -> Q Exp
+-xmlFile = strToExp . TL.unpack <=< qRunIO . readUtf8File
+-
+-strToExp :: String -> Q Exp
+-strToExp s =
+-    case parseDoc s of
+-        Error e -> error e
+-        Ok x -> docsToExp [] x
+-
+-docsToExp :: Scope -> [Doc] -> Q Exp
+-docsToExp scope docs = [| concat $(fmap ListE $ mapM (docToExp scope) docs) |]
+-
+-docToExp :: Scope -> Doc -> Q Exp
+-docToExp scope (DocTag name attrs cs) =
+-    [| [ X.NodeElement (X.Element ($(liftName name)) $(mkAttrs scope attrs) $(docsToExp scope cs))
+-       ] |]
+-docToExp _ (DocContent (ContentRaw s)) = [| [ X.NodeContent (pack $(lift s)) ] |]
+-docToExp scope (DocContent (ContentVar d)) = [| [ X.NodeContent $(return $ derefToExp scope d) ] |]
+-docToExp scope (DocContent (ContentEmbed d)) = return $ derefToExp scope d
+-docToExp scope (DocForall deref ident@(Ident ident') inside) = do
+-    let list' = derefToExp scope deref
+-    name <- newName ident'
+-    let scope' = (ident, VarE name) : scope
+-    inside' <- docsToExp scope' inside
+-    let lam = LamE [VarP name] inside'
+-    [| F.concatMap $(return lam) $(return list') |]
+-docToExp scope (DocWith [] inside) = docsToExp scope inside
+-docToExp scope (DocWith ((deref, ident@(Ident name)):dis) inside) = do
+-    let deref' = derefToExp scope deref
+-    name' <- newName name
+-    let scope' = (ident, VarE name') : scope
+-    inside' <- docToExp scope' (DocWith dis inside)
+-    let lam = LamE [VarP name'] inside'
+-    return $ lam `AppE` deref'
+-docToExp scope (DocMaybe deref ident@(Ident name) just nothing) = do
+-    let deref' = derefToExp scope deref
+-    name' <- newName name
+-    let scope' = (ident, VarE name') : scope
+-    inside' <- docsToExp scope' just
+-    let inside'' = LamE [VarP name'] inside'
+-    nothing' <-
+-        case nothing of
+-            Nothing -> [| [] |]
+-            Just n -> docsToExp scope n
+-    [| maybe $(return nothing') $(return inside'') $(return deref') |]
+-docToExp scope (DocCond conds final) = do
+-    unit <- [| () |]
+-    body <- fmap GuardedB $ mapM go $ conds ++ [(DerefIdent $ Ident "otherwise", fromMaybe [] final)]
+-    return $ CaseE unit [Match (TupP []) body []]
+-  where
+-    go (deref, inside) = do
+-        inside' <- docsToExp scope inside
+-        return (NormalG $ derefToExp scope deref, inside')
+-
+-mkAttrs :: Scope -> [(Maybe Deref, String, [Content])] -> Q Exp
+-mkAttrs _ [] = [| Map.empty |]
+-mkAttrs scope ((mderef, name, value):rest) = do
+-    rest' <- mkAttrs scope rest
+-    this <- [| Map.insert $(liftName name) (T.concat $(fmap ListE $ mapM go value)) |]
+-    let with = [| $(return this) $(return rest') |]
+-    case mderef of
+-        Nothing -> with
+-        Just deref -> [| if $(return $ derefToExp scope deref) then $(with) else $(return rest') |]
+-  where
+-    go (ContentRaw s) = [| pack $(lift s) |]
+-    go (ContentVar d) = return $ derefToExp scope d
+-    go ContentEmbed{} = error "Cannot use embed interpolation in attribute value"
+-
+-liftName :: String -> Q Exp
+-liftName s = do
+-    X.Name local mns _ <- return $ fromString s
+-    case mns of
+-        Nothing -> [| X.Name (pack $(lift $ unpack local)) Nothing Nothing |]
+-        Just ns -> [| X.Name (pack $(lift $ unpack local)) (Just $ pack $(lift $ unpack ns)) Nothing |]
+-- 
+1.8.5.1
+
diff --git a/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch b/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch
--- a/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch
+++ b/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch
@@ -1,6 +1,6 @@
-From bec7dac77cc7fbe9a620c371d7c2cdbcf234eac6 Mon Sep 17 00:00:00 2001
+From f1feea61dcba0b16afed5ce8dd5d2433fe505461 Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Fri, 3 Jul 2015 00:39:53 +0000
+Date: Thu, 16 Oct 2014 02:15:23 +0000
 Subject: [PATCH] hack TH
 
 ---
@@ -15,7 +15,7 @@
  8 files changed, 213 insertions(+), 288 deletions(-)
 
 diff --git a/Yesod/Core.hs b/Yesod/Core.hs
-index f7436e6..2fa62cc 100644
+index 9b29317..7c0792d 100644
 --- a/Yesod/Core.hs
 +++ b/Yesod/Core.hs
 @@ -31,16 +31,16 @@ module Yesod.Core
@@ -45,7 +45,7 @@
        -- * Sessions
      , SessionBackend (..)
      , customizeSessionCookies
-@@ -90,17 +90,15 @@ module Yesod.Core
+@@ -87,17 +87,15 @@ module Yesod.Core
      , readIntegral
        -- * Shakespeare
        -- ** Hamlet
@@ -68,10 +68,10 @@
      , renderCssUrl
      ) where
 diff --git a/Yesod/Core/Class/Yesod.hs b/Yesod/Core/Class/Yesod.hs
-index c2e707a..b594353 100644
+index 8631d27..c40eb10 100644
 --- a/Yesod/Core/Class/Yesod.hs
 +++ b/Yesod/Core/Class/Yesod.hs
-@@ -5,11 +5,15 @@
+@@ -5,18 +5,22 @@
  {-# LANGUAGE CPP               #-}
  module Yesod.Core.Class.Yesod where
  
@@ -88,16 +88,15 @@
  
  import           Blaze.ByteString.Builder           (Builder)
  import           Blaze.ByteString.Builder.Char.Utf8 (fromText)
-@@ -18,7 +22,7 @@ import           Control.Exception                  (bracket)
+ import           Control.Arrow                      ((***), second)
  import           Control.Monad                      (forM, when, void)
  import           Control.Monad.IO.Class             (MonadIO (liftIO))
- import           Control.Monad.Logger               (LogLevel (LevelInfo, LevelOther),
--                                                     LogSource)
-+                                                     LogSource, Loc)
- import           Control.Monad.Trans.Resource       (InternalState, createInternalState, closeInternalState)
+-import           Control.Monad.Logger               (LogLevel (LevelInfo, LevelOther),
++import           Control.Monad.Logger               (Loc, LogLevel (LevelInfo, LevelOther),
+                                                      LogSource)
  import qualified Data.ByteString.Char8              as S8
  import qualified Data.ByteString.Lazy               as L
-@@ -35,7 +39,6 @@ import qualified Data.Text.Encoding.Error           as TEE
+@@ -33,7 +37,6 @@ import qualified Data.Text.Encoding.Error           as TEE
  import           Data.Text.Lazy.Builder             (toLazyText)
  import           Data.Text.Lazy.Encoding            (encodeUtf8)
  import           Data.Word                          (Word64)
@@ -105,7 +104,7 @@
  import           Network.HTTP.Types                 (encodePath)
  import qualified Network.Wai                        as W
  import           Data.Default                       (def)
-@@ -87,18 +90,26 @@ class RenderRoute site => Yesod site where
+@@ -94,18 +97,26 @@ class RenderRoute site => Yesod site where
      defaultLayout w = do
          p <- widgetToPageContent w
          mmsg <- getMessage
@@ -144,7 +143,7 @@
  
      -- | Override the rendering function for a particular URL. One use case for
      -- this is to offload static hosting to a different domain name to avoid
-@@ -410,45 +421,103 @@ widgetToPageContent w = do
+@@ -374,45 +385,103 @@ widgetToPageContent w = do
      -- modernizr should be at the end of the <head> http://www.modernizr.com/docs/#installing
      -- the asynchronous loader means your page doesn't have to wait for all the js to load
      let (mcomplete, asyncScripts) = asyncHelper render scripts jscript jsLoc
@@ -287,7 +286,7 @@
  
      return $ PageContent title headAll $
          case jsLoader master of
-@@ -478,10 +547,13 @@ defaultErrorHandler NotFound = selectRep $ do
+@@ -442,10 +511,13 @@ defaultErrorHandler NotFound = selectRep $ do
          r <- waiRequest
          let path' = TE.decodeUtf8With TEE.lenientDecode $ W.rawPathInfo r
          setTitle "Not Found"
@@ -305,7 +304,7 @@
      provideRep $ return $ object ["message" .= ("Not Found" :: Text)]
  
  -- For API requests.
-@@ -491,10 +563,11 @@ defaultErrorHandler NotFound = selectRep $ do
+@@ -455,10 +527,11 @@ defaultErrorHandler NotFound = selectRep $ do
  defaultErrorHandler NotAuthenticated = selectRep $ do
      provideRep $ defaultLayout $ do
          setTitle "Not logged in"
@@ -321,7 +320,7 @@
  
      provideRep $ do
          -- 401 *MUST* include a WWW-Authenticate header
-@@ -516,10 +589,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do
+@@ -480,10 +553,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do
  defaultErrorHandler (PermissionDenied msg) = selectRep $ do
      provideRep $ defaultLayout $ do
          setTitle "Permission Denied"
@@ -339,7 +338,7 @@
      provideRep $
          return $ object $ [
            "message" .= ("Permission Denied. " <> msg)
-@@ -528,30 +604,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do
+@@ -492,30 +568,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do
  defaultErrorHandler (InvalidArgs ia) = selectRep $ do
      provideRep $ defaultLayout $ do
          setTitle "Invalid Arguments"
@@ -397,7 +396,7 @@
      provideRep $ return $ object ["message" .= ("Bad method" :: Text), "method" .= TE.decodeUtf8With TEE.lenientDecode m]
  
  asyncHelper :: (url -> [x] -> Text)
-@@ -718,8 +806,4 @@ loadClientSession key getCachedDate sessionName req = load
+@@ -682,8 +770,4 @@ loadClientSession key getCachedDate sessionName req = load
  -- turn the TH Loc loaction information into a human readable string
  -- leaving out the loc_end parameter
  fileLocationToString :: Loc -> String
@@ -408,7 +407,7 @@
 -    char = show . snd . loc_start
 +fileLocationToString loc = "unknown"
 diff --git a/Yesod/Core/Dispatch.hs b/Yesod/Core/Dispatch.hs
-index 7e43f74..625a901 100644
+index e0d1f0e..cc23fdd 100644
 --- a/Yesod/Core/Dispatch.hs
 +++ b/Yesod/Core/Dispatch.hs
 @@ -1,4 +1,3 @@
@@ -445,9 +444,9 @@
      , PathMultiPiece (..)
      , Texts
        -- * Convert to WAI
-@@ -141,13 +140,6 @@ toWaiAppLogger logger site = do
+@@ -135,13 +134,6 @@ toWaiAppLogger logger site = do
+                 , yreSite = site
                  , yreSessionBackend = sb
-                 , yreGen = gen
                  }
 -    messageLoggerSource
 -        site
@@ -459,10 +458,10 @@
      middleware <- mkDefaultMiddlewares logger
      return $ middleware $ toWaiAppYre yre
  
-@@ -167,14 +159,7 @@ warp port site = do
-         Network.Wai.Handler.Warp.setPort port $
-         Network.Wai.Handler.Warp.setServerName serverValue $
-         Network.Wai.Handler.Warp.setOnException (\_ e ->
+@@ -170,14 +162,7 @@ warp port site = do
+                 ]
+             -}
+             , Network.Wai.Handler.Warp.settingsOnException = const $ \e ->
 -                when (shouldLog' e) $
 -                messageLoggerSource
 -                    site
@@ -470,12 +469,12 @@
 -                    $(qLocation >>= liftLoc)
 -                    "yesod-core"
 -                    LevelError
--                    (toLogStr $ "Exception from Warp: " ++ show e)) $
-+                when (shouldLog' e) $ error (show e)) $
-         Network.Wai.Handler.Warp.defaultSettings)
+-                    (toLogStr $ "Exception from Warp: " ++ show e)
++                when (shouldLog' e) $ error (show e)
+             }
    where
-     shouldLog' = Network.Wai.Handler.Warp.defaultShouldDisplayException
-@@ -208,7 +193,6 @@ defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverr
+     shouldLog' =
+@@ -211,7 +196,6 @@ defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverr
  -- | Deprecated synonym for 'warp'.
  warpDebug :: YesodDispatch site => Int -> site -> IO ()
  warpDebug = warp
@@ -484,10 +483,10 @@
  -- | Runs your application using default middlewares (i.e., via 'toWaiApp'). It
  -- reads port information from the PORT environment variable, as used by tools
 diff --git a/Yesod/Core/Handler.hs b/Yesod/Core/Handler.hs
-index 19f4152..c97fb24 100644
+index d2b196b..13cac17 100644
 --- a/Yesod/Core/Handler.hs
 +++ b/Yesod/Core/Handler.hs
-@@ -178,7 +178,7 @@ import           Data.Text.Encoding            (decodeUtf8With, encodeUtf8)
+@@ -174,7 +174,7 @@ import           Data.Text.Encoding            (decodeUtf8With, encodeUtf8)
  import           Data.Text.Encoding.Error      (lenientDecode)
  import qualified Data.Text.Lazy                as TL
  import qualified Text.Blaze.Html.Renderer.Text as RenderText
@@ -496,7 +495,7 @@
  
  import qualified Data.ByteString               as S
  import qualified Data.ByteString.Lazy          as L
-@@ -206,6 +206,7 @@ import Control.Exception (throwIO)
+@@ -203,6 +203,7 @@ import Control.Exception (throwIO)
  import Blaze.ByteString.Builder (Builder)
  import Safe (headMay)
  import Data.CaseInsensitive (CI)
@@ -504,7 +503,7 @@
  import qualified Data.Conduit.List as CL
  import Control.Monad (unless)
  import           Control.Monad.Trans.Resource  (MonadResource, InternalState, runResourceT, withInternalState, getInternalState, liftResourceT, resourceForkIO
-@@ -848,19 +849,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url)
+@@ -855,19 +856,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url)
                 -> m a
  redirectToPost url = do
      urlText <- toTextUrl url
@@ -534,7 +533,7 @@
  -- | Wraps the 'Content' generated by 'hamletToContent' in a 'RepHtml'.
  hamletToRepHtml :: MonadHandler m => HtmlUrl (Route (HandlerSite m)) -> m Html
 diff --git a/Yesod/Core/Internal/Run.hs b/Yesod/Core/Internal/Run.hs
-index 651c11c..46e1d2a 100644
+index 311f208..63f666f 100644
 --- a/Yesod/Core/Internal/Run.hs
 +++ b/Yesod/Core/Internal/Run.hs
 @@ -16,7 +16,7 @@ import           Control.Exception.Lifted     (catch)
@@ -544,18 +543,18 @@
 -import           Control.Monad.Logger         (LogLevel (LevelError), LogSource,
 +import           Control.Monad.Logger         (Loc, LogLevel (LevelError), LogSource,
                                                 liftLoc)
- import           Control.Monad.Trans.Resource (runResourceT, withInternalState, runInternalState)
+ import           Control.Monad.Trans.Resource (runResourceT, withInternalState, runInternalState, createInternalState, closeInternalState)
  import qualified Data.ByteString              as S
-@@ -32,7 +32,7 @@ import           Data.Text.Encoding           (encodeUtf8)
+@@ -31,7 +31,7 @@ import qualified Data.Text                    as T
+ import           Data.Text.Encoding           (encodeUtf8)
  import           Data.Text.Encoding           (decodeUtf8With)
  import           Data.Text.Encoding.Error     (lenientDecode)
- import           Data.Time                    (getCurrentTime, addUTCTime)
 -import           Language.Haskell.TH.Syntax   (Loc, qLocation)
 +import           Language.Haskell.TH.Syntax   (qLocation)
  import qualified Network.HTTP.Types           as H
  import           Network.Wai
- import           Network.Wai.Internal
-@@ -160,8 +160,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
+ #if MIN_VERSION_wai(2, 0, 0)
+@@ -158,8 +158,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
         -> ErrorResponse
         -> YesodApp
  safeEh log' er req = do
@@ -684,26 +683,26 @@
 -                ]
 -    return $ LetE [fun] (VarE helper)
 diff --git a/Yesod/Core/Types.hs b/Yesod/Core/Types.hs
-index 5fa5c3d..1646d54 100644
+index 388dfe3..b3fce0f 100644
 --- a/Yesod/Core/Types.hs
 +++ b/Yesod/Core/Types.hs
-@@ -19,6 +19,7 @@ import           Control.Monad.Base                 (MonadBase (liftBase))
- import           Control.Monad.Catch                (MonadCatch (..))
+@@ -21,6 +21,7 @@ import           Control.Monad.Catch                (MonadCatch (..))
  import           Control.Monad.Catch                (MonadMask (..))
+ #endif
  import           Control.Monad.IO.Class             (MonadIO (liftIO))
 +import qualified Control.Monad.Logger
  import           Control.Monad.Logger               (LogLevel, LogSource,
                                                       MonadLogger (..))
  import           Control.Monad.Trans.Control        (MonadBaseControl (..))
-@@ -179,7 +180,7 @@ data RunHandlerEnv site = RunHandlerEnv
+@@ -191,7 +192,7 @@ data RunHandlerEnv site = RunHandlerEnv
      , rheRoute    :: !(Maybe (Route site))
      , rheSite     :: !site
      , rheUpload   :: !(RequestBodyLength -> FileUpload)
 -    , rheLog      :: !(Loc -> LogSource -> LogLevel -> LogStr -> IO ())
 +    , rheLog      :: !(Control.Monad.Logger.Loc -> LogSource -> LogLevel -> LogStr -> IO ())
      , rheOnError  :: !(ErrorResponse -> YesodApp)
-     , rheGetMaxExpires :: IO Text
        -- ^ How to respond when an error is thrown internally.
+       --
 diff --git a/Yesod/Core/Widget.hs b/Yesod/Core/Widget.hs
 index 481199e..8489fbe 100644
 --- a/Yesod/Core/Widget.hs
@@ -765,5 +764,5 @@
  ihamletToRepHtml :: (MonadHandler m, RenderMessage (HandlerSite m) message)
                   => HtmlUrlI18n message (Route (HandlerSite m))
 -- 
-2.1.4
+2.1.1
 
diff --git a/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch b/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch
--- a/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch
+++ b/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch
@@ -1,27 +1,22 @@
-From 4cf9a045569ea0b51b4ee11df2dadbde330f7813 Mon Sep 17 00:00:00 2001
+From 1b24ece1a40c9365f719472ca6e342c8c4065c25 Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Fri, 3 Jul 2015 01:06:34 +0000
+Date: Thu, 16 Oct 2014 02:31:20 +0000
 Subject: [PATCH] hack TH
 
-1. EvilSplicer
-2. Add imports
-3. Fix some syntax errors in spliced code
-4. Remove some persistent stuff that doesn't build.
 ---
- Yesod/Form/Bootstrap3.hs | 189 +++++++++--
- Yesod/Form/Fields.hs     | 811 ++++++++++++++++++++++++++++++++++++-----------
- Yesod/Form/Functions.hs  | 255 ++++++++++++---
- Yesod/Form/Jquery.hs     | 124 ++++++--
+ Yesod/Form/Bootstrap3.hs | 186 +++++++++--
+ Yesod/Form/Fields.hs     | 816 +++++++++++++++++++++++++++++++++++------------
+ Yesod/Form/Functions.hs  | 257 ++++++++++++---
+ Yesod/Form/Jquery.hs     | 134 ++++++--
  Yesod/Form/MassInput.hs  | 226 ++++++++++---
- Yesod/Form/Nic.hs        |  60 +++-
- yesod-form.cabal         |   2 +-
- 7 files changed, 1311 insertions(+), 356 deletions(-)
+ Yesod/Form/Nic.hs        |  67 +++-
+ 6 files changed, 1322 insertions(+), 364 deletions(-)
 
 diff --git a/Yesod/Form/Bootstrap3.hs b/Yesod/Form/Bootstrap3.hs
-index 8377a68..fa8b7d4 100644
+index 84e85fc..1954fb4 100644
 --- a/Yesod/Form/Bootstrap3.hs
 +++ b/Yesod/Form/Bootstrap3.hs
-@@ -35,6 +35,9 @@ import Data.String (IsString(..))
+@@ -26,6 +26,9 @@ import Data.String (IsString(..))
  import Yesod.Core
  
  import qualified Data.Text as T
@@ -31,7 +26,7 @@
  
  import Yesod.Form.Types
  import Yesod.Form.Functions
-@@ -155,44 +158,144 @@ renderBootstrap3 formLayout aform fragment = do
+@@ -152,44 +155,144 @@ renderBootstrap3 formLayout aform fragment = do
      let views = views' []
          has (Just _) = True
          has Nothing  = False
@@ -64,22 +59,22 @@
 -                |]
 +        widget =         do { (asWidgetT . toWidget) (toHtml fragment);
 +             Data.Foldable.mapM_
-+               (\ view_a2d4p
++               (\ view_as0a
 +                  -> do { (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                               "<div class=\"form-group ");
 +                          Text.Hamlet.condH
-+                            [(fvRequired view_a2d4p, 
++                            [(fvRequired view_as0a, 
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . T.pack) "required "))]
 +                            Nothing;
 +                          Text.Hamlet.condH
-+                            [(not (fvRequired view_a2d4p), 
++                            [(not (fvRequired view_as0a), 
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . T.pack) "optional "))]
 +                            Nothing;
 +                          Text.Hamlet.condH
-+                            [(has (fvErrors view_a2d4p), 
++                            [(has (fvErrors view_as0a), 
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . T.pack) "has-error"))]
 +                            Nothing;
@@ -88,66 +83,66 @@
 +                          case formLayout of {
 +                            ; BootstrapBasicForm
 +                              -> do { Text.Hamlet.condH
-+                                        [((/=) (fvId view_a2d4p) bootstrapSubmitId, 
++                                        [((/=) (fvId view_as0a) bootstrapSubmitId, 
 +                                          do { (asWidgetT . toWidget)
 +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                                                    "<label for=\"");
-+                                               (asWidgetT . toWidget) (toHtml (fvId view_a2d4p));
++                                               (asWidgetT . toWidget) (toHtml (fvId view_as0a));
 +                                               (asWidgetT . toWidget)
 +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
-+                                               (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p));
++                                               (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));
 +                                               (asWidgetT . toWidget)
 +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                                                    "</label>") })]
 +                                        Nothing;
-+                                      (asWidgetT . toWidget) (fvInput view_a2d4p);
-+                                      (asWidgetT . toWidget) (helpWidget view_a2d4p) }
++                                      (asWidgetT . toWidget) (fvInput view_as0a);
++                                      (asWidgetT . toWidget) (helpWidget view_as0a) }
 +                            ; BootstrapInlineForm
 +                              -> do { Text.Hamlet.condH
-+                                        [((/=) (fvId view_a2d4p) bootstrapSubmitId, 
++                                        [((/=) (fvId view_as0a) bootstrapSubmitId, 
 +                                          do { (asWidgetT . toWidget)
 +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                                                    "<label class=\"sr-only\" for=\"");
-+                                               (asWidgetT . toWidget) (toHtml (fvId view_a2d4p));
++                                               (asWidgetT . toWidget) (toHtml (fvId view_as0a));
 +                                               (asWidgetT . toWidget)
 +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
-+                                               (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p));
++                                               (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));
 +                                               (asWidgetT . toWidget)
 +                                                 ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                                                    "</label>") })]
 +                                        Nothing;
-+                                      (asWidgetT . toWidget) (fvInput view_a2d4p);
-+                                      (asWidgetT . toWidget) (helpWidget view_a2d4p) }
-+                            ; BootstrapHorizontalForm labelOffset_a2d4q
-+                                                    labelSize_a2d4r
-+                                                    inputOffset_a2d4s
-+                                                    inputSize_a2d4t
++                                      (asWidgetT . toWidget) (fvInput view_as0a);
++                                      (asWidgetT . toWidget) (helpWidget view_as0a) }
++                            ; BootstrapHorizontalForm labelOffset_as0b
++                                                    labelSize_as0c
++                                                    inputOffset_as0d
++                                                    inputSize_as0e
 +                              -> Text.Hamlet.condH
-+                                   [((/=) (fvId view_a2d4p) bootstrapSubmitId, 
++                                   [((/=) (fvId view_as0a) bootstrapSubmitId, 
 +                                     do { (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                                               "<label class=\"control-label ");
-+                                          (asWidgetT . toWidget) (toHtml (toOffset labelOffset_a2d4q));
++                                          (asWidgetT . toWidget) (toHtml (toOffset labelOffset_as0b));
 +                                          (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) " ");
-+                                          (asWidgetT . toWidget) (toHtml (toColumn labelSize_a2d4r));
++                                          (asWidgetT . toWidget) (toHtml (toColumn labelSize_as0c));
 +                                          (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "\" for=\"");
-+                                          (asWidgetT . toWidget) (toHtml (fvId view_a2d4p));
++                                          (asWidgetT . toWidget) (toHtml (fvId view_as0a));
 +                                          (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
-+                                          (asWidgetT . toWidget) (toHtml (fvLabel view_a2d4p));
++                                          (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));
 +                                          (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                                               "</label><div class=\"");
-+                                          (asWidgetT . toWidget) (toHtml (toOffset inputOffset_a2d4s));
++                                          (asWidgetT . toWidget) (toHtml (toOffset inputOffset_as0d));
 +                                          (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) " ");
-+                                          (asWidgetT . toWidget) (toHtml (toColumn inputSize_a2d4t));
++                                          (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e));
 +                                          (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
-+                                          (asWidgetT . toWidget) (fvInput view_a2d4p);
-+                                          (asWidgetT . toWidget) (helpWidget view_a2d4p);
++                                          (asWidgetT . toWidget) (fvInput view_as0a);
++                                          (asWidgetT . toWidget) (helpWidget view_as0a);
 +                                          (asWidgetT . toWidget)
 +                                            ((Text.Blaze.Internal.preEscapedText . T.pack) "</div>") })]
 +                                   (Just
@@ -158,15 +153,15 @@
 +                                              (toHtml
 +                                                 (toOffset
 +                                                    (addGO
-+                                                       inputOffset_a2d4s
-+                                                       (addGO labelOffset_a2d4q labelSize_a2d4r))));
++                                                       inputOffset_as0d
++                                                       (addGO labelOffset_as0b labelSize_as0c))));
 +                                            (asWidgetT . toWidget)
 +                                              ((Text.Blaze.Internal.preEscapedText . T.pack) " ");
-+                                            (asWidgetT . toWidget) (toHtml (toColumn inputSize_a2d4t));
++                                            (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e));
 +                                            (asWidgetT . toWidget)
 +                                              ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
-+                                            (asWidgetT . toWidget) (fvInput view_a2d4p);
-+                                            (asWidgetT . toWidget) (helpWidget view_a2d4p);
++                                            (asWidgetT . toWidget) (fvInput view_as0a);
++                                            (asWidgetT . toWidget) (helpWidget view_as0a);
 +                                            (asWidgetT . toWidget)
 +                                              ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                                                 "</div>") })) };
@@ -187,21 +182,21 @@
 -|]
 +helpWidget view = do { Text.Hamlet.maybeH
 +       (fvTooltip view)
-+       (\ tt_a2d5x
++       (\ tt_as0k
 +          -> do { (asWidgetT . toWidget)
 +                    ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                       "<span class=\"help-block\">");
-+                  (asWidgetT . toWidget) (toHtml tt_a2d5x);
++                  (asWidgetT . toWidget) (toHtml tt_as0k);
 +                  (asWidgetT . toWidget)
 +                    ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") })
 +       Nothing;
 +     Text.Hamlet.maybeH
 +       (fvErrors view)
-+       (\ err_a2d5y
++       (\ err_as0l
 +          -> do { (asWidgetT . toWidget)
 +                    ((Text.Blaze.Internal.preEscapedText . T.pack)
 +                       "<span class=\"help-block\">");
-+                  (asWidgetT . toWidget) (toHtml err_a2d5y);
++                  (asWidgetT . toWidget) (toHtml err_as0l);
 +                  (asWidgetT . toWidget)
 +                    ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") })
 +       Nothing }
@@ -209,7 +204,7 @@
  
  
  -- | How the 'bootstrapSubmit' button should be rendered.
-@@ -247,7 +350,23 @@ mbootstrapSubmit
+@@ -244,7 +347,22 @@ mbootstrapSubmit
      => BootstrapSubmit msg -> MForm m (FormResult (), FieldView site)
  mbootstrapSubmit (BootstrapSubmit msg classes attrs) =
      let res = FormSuccess ()
@@ -226,26 +221,40 @@
 +             (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . T.pack) ">");
 +             ((liftM (toHtml .) getMessageRender)
-+              >>=
-+                (\ urender_a2d6f -> (asWidgetT . toWidget) (urender_a2d6f msg)));
++              >>= (\ urender_as0w -> (asWidgetT . toWidget) (urender_as0w msg)));
 +             (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . T.pack) "</button>") }
 +
          fv  = FieldView { fvLabel    = ""
                          , fvTooltip  = Nothing
                          , fvId       = bootstrapSubmitId
-@@ -314,4 +433,4 @@ bootstrapSubmitId = "b:ootstrap___unique__:::::::::::::::::submit-id"
- -- >        <$> areq textField nameSettings Nothing
- -- >      where nameSettings = withAutofocus $
- -- >                           withPlaceholder "First name" $
---- >                           (bfs ("Name" :: Text))
-\ No newline at end of file
-+-- >                           (bfs ("Name" :: Text))
 diff --git a/Yesod/Form/Fields.hs b/Yesod/Form/Fields.hs
-index 5fe123e..42fd7d6 100644
+index c6091a9..9e6bd4e 100644
 --- a/Yesod/Form/Fields.hs
 +++ b/Yesod/Form/Fields.hs
-@@ -52,8 +52,6 @@ module Yesod.Form.Fields
+@@ -1,4 +1,3 @@
+-{-# LANGUAGE QuasiQuotes #-}
+ {-# LANGUAGE TypeFamilies #-}
+ {-# LANGUAGE OverloadedStrings #-}
+ {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+@@ -18,9 +17,6 @@ module Yesod.Form.Fields
+     , timeField
+     , htmlField
+     , emailField
+-    , multiEmailField
+-    , searchField
+-    , AutoFocus
+     , urlField
+     , doubleField
+     , parseDate
+@@ -37,15 +33,11 @@ module Yesod.Form.Fields
+     , selectFieldList
+     , radioField
+     , radioFieldList
+-    , checkboxesFieldList
+-    , checkboxesField
+     , multiSelectField
+     , multiSelectFieldList
      , Option (..)
      , OptionList (..)
      , mkOptionList
@@ -254,7 +263,7 @@
      , optionsPairs
      , optionsEnum
      ) where
-@@ -80,6 +78,15 @@ import Control.Monad (when, unless)
+@@ -72,6 +64,15 @@ import Control.Monad (when, unless)
  import Data.Either (partitionEithers)
  import Data.Maybe (listToMaybe, fromMaybe)
  
@@ -270,8 +279,15 @@
  import qualified Blaze.ByteString.Builder.Html.Utf8 as B
  import Blaze.ByteString.Builder (writeByteString, toLazyByteString)
  import Blaze.ByteString.Builder.Internal.Write (fromWriteList)
-@@ -102,8 +109,6 @@ import Control.Applicative ((<$>), (<|>))
+@@ -91,15 +92,12 @@ import qualified Data.Text as T (drop, dropWhile)
+ import qualified Data.Text.Read
  
+ import qualified Data.Map as Map
+-import Yesod.Persist (selectList, runDB, Filter, SelectOpt, Key, YesodPersist, PersistEntity, PersistQuery)
+ import Control.Arrow ((&&&))
+ 
+ import Control.Applicative ((<$>), (<|>))
+ 
  import Data.Attoparsec.Text (Parser, char, string, digit, skipSpace, endOfInput, parseOnly)
  
 -import Yesod.Persist.Core
@@ -279,7 +295,7 @@
  defaultFormMessage :: FormMessage -> Text
  defaultFormMessage = englishFormMessage
  
-@@ -115,10 +120,25 @@ intField = Field
+@@ -111,10 +109,25 @@ intField = Field
              Right (a, "") -> Right a
              _ -> Left $ MsgInvalidInteger s
  
@@ -287,7 +303,7 @@
 -$newline never
 -<input id="#{theId}" name="#{name}" *{attrs} type="number" step=1 :isReq:required="" value="#{showVal val}">
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nCq
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJh
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml theId);
@@ -309,7 +325,7 @@
      , fieldEnctype = UrlEncoded
      }
    where
-@@ -133,10 +153,25 @@ doubleField = Field
+@@ -128,10 +141,25 @@ doubleField = Field
              Right (a, "") -> Right a
              _ -> Left $ MsgInvalidNumber s
  
@@ -317,7 +333,7 @@
 -$newline never
 -<input id="#{theId}" name="#{name}" *{attrs} type="number" step=any :isReq:required="" value="#{showVal val}">
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nCV
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJu
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml theId);
@@ -339,7 +355,7 @@
      , fieldEnctype = UrlEncoded
      }
    where showVal = either id (pack . show)
-@@ -147,10 +182,24 @@ $newline never
+@@ -139,10 +167,24 @@ $newline never
  dayField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Day
  dayField = Field
      { fieldParse = parseHelper $ parseDate . unpack
@@ -347,7 +363,7 @@
 -$newline never
 -<input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}">
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nDh
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJF
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml theId);
@@ -368,22 +384,20 @@
      , fieldEnctype = UrlEncoded
      }
    where showVal = either id (pack . show)
-@@ -179,10 +228,25 @@ timeFieldTypeText = timeFieldOfType "text"
- timeFieldOfType :: Monad m => RenderMessage (HandlerSite m) FormMessage => Text -> Field m TimeOfDay
- timeFieldOfType inputType = Field
+@@ -150,10 +192,23 @@ $newline never
+ timeField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m TimeOfDay
+ timeField = Field
      { fieldParse = parseHelper parseTime
 -    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
 -$newline never
--<input id="#{theId}" name="#{name}" *{attrs} type="#{inputType}" :isReq:required="" value="#{showVal val}">
+-<input id="#{theId}" name="#{name}" *{attrs} :isReq:required="" value="#{showVal val}">
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nDN
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJJT
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml theId);
 +              id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
 +              id (toHtml name);
-+              id ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"");
-+              id (toHtml inputType);
 +              id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
 +              condH
 +                [(isReq, 
@@ -398,7 +412,7 @@
      , fieldEnctype = UrlEncoded
      }
    where
-@@ -196,10 +260,23 @@ $newline never
+@@ -166,10 +221,23 @@ $newline never
  htmlField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Html
  htmlField = Field
      { fieldParse = parseHelper $ Right . preEscapedText . sanitizeBalance
@@ -406,7 +420,7 @@
 -$newline never
 -<textarea :isReq:required="" id="#{theId}" name="#{name}" *{attrs}>#{showVal val}
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nEc
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJK4
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<textarea");
 +              condH
@@ -426,25 +440,21 @@
      , fieldEnctype = UrlEncoded
      }
    where showVal = either id (pack . renderHtml)
-@@ -231,10 +308,22 @@ instance ToHtml Textarea where
+@@ -197,10 +265,18 @@ instance ToHtml Textarea where
  textareaField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Textarea
  textareaField = Field
      { fieldParse = parseHelper $ Right . Textarea
--    , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+-    , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|
 -$newline never
--<textarea id="#{theId}" name="#{name}" :isReq:required="" *{attrs}>#{either id unTextarea val}
+-<textarea id="#{theId}" name="#{name}" *{attrs}>#{either id unTextarea val}
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nEL
++    , fieldView = \theId name attrs val _isReq -> toWidget  $     \ _render_aJKe
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<textarea id=\"");
 +              id (toHtml theId);
 +              id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
 +              id (toHtml name);
 +              id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+              condH
-+                [(isReq, 
-+                  id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
-+                Nothing;
 +              id ((attrsToHtml . toAttributes) attrs);
 +              id ((Text.Blaze.Internal.preEscapedText . pack) ">");
 +              id (toHtml (either id unTextarea val));
@@ -453,7 +463,7 @@
      , fieldEnctype = UrlEncoded
      }
  
-@@ -243,10 +332,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage)
+@@ -208,10 +284,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage)
              => Field m p
  hiddenField = Field
      { fieldParse = parseHelper $ maybe (Left MsgValueRequired) Right . fromPathPiece
@@ -461,7 +471,7 @@
 -$newline never
 -<input type="hidden" id="#{theId}" name="#{name}" *{attrs} value="#{either id toPathPiece val}">
 -|]
-+    , fieldView = \theId name attrs val _isReq -> toWidget  $     \ _render_a2nFl
++    , fieldView = \theId name attrs val _isReq -> toWidget  $     \ _render_aJKo
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack)
 +                   "<input type=\"hidden\" id=\"");
@@ -477,7 +487,7 @@
      , fieldEnctype = UrlEncoded
      }
  
-@@ -255,20 +353,53 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex
+@@ -219,20 +304,53 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex
  textField = Field
      { fieldParse = parseHelper $ Right
      , fieldView = \theId name attrs val isReq ->
@@ -509,7 +519,7 @@
 +
      , fieldEnctype = UrlEncoded
      }
- -- | Creates an input with @type="password"@.
+ 
  passwordField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Text
  passwordField = Field
      { fieldParse = parseHelper $ Right
@@ -517,7 +527,7 @@
 -$newline never
 -<input id="#{theId}" name="#{name}" *{attrs} type="password" :isReq:required="" value="#{either id id val}">
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nG7
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJKH
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml theId);
@@ -539,7 +549,7 @@
      , fieldEnctype = UrlEncoded
      }
  
-@@ -342,10 +473,24 @@ emailField = Field
+@@ -304,10 +422,24 @@ emailField = Field
              case Email.canonicalizeEmail $ encodeUtf8 s of
                  Just e -> Right $ decodeUtf8With lenientDecode e
                  Nothing -> Left $ MsgInvalidEmail s
@@ -547,7 +557,7 @@
 -$newline never
 -<input id="#{theId}" name="#{name}" *{attrs} type="email" :isReq:required="" value="#{either id id val}">
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nKu
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJLq
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml theId);
@@ -568,7 +578,7 @@
      , fieldEnctype = UrlEncoded
      }
  
-@@ -360,10 +505,25 @@ multiEmailField = Field
+@@ -322,10 +454,25 @@ multiEmailField = Field
              in case partitionEithers addrs of
                  ([], good) -> Right good
                  (bad, _) -> Left $ MsgInvalidEmail $ cat bad
@@ -576,7 +586,7 @@
 -$newline never
 -<input id="#{theId}" name="#{name}" *{attrs} type="email" multiple :isReq:required="" value="#{either id cat val}">
 -|]
-+    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_a2nL5
++    , fieldView = \theId name attrs val isReq -> toWidget  $     \ _render_aJMd
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml theId);
@@ -598,7 +608,7 @@
      , fieldEnctype = UrlEncoded
      }
      where
-@@ -380,20 +540,74 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus
+@@ -341,20 +488,75 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus
  searchField autoFocus = Field
      { fieldParse = parseHelper Right
      , fieldView = \theId name attrs val isReq -> do
@@ -651,31 +661,32 @@
 +                 ((Text.Blaze.Internal.preEscapedText . pack)
 +                    "').focus();}</script>") }
 +
-+          toWidget  $           \ _render_a2nMA
-+            -> (Text.Css.CssNoWhitespace . (foldr ($) []))
++          toWidget  $           \ _render_aJMx
++            -> (Text.Css.CssNoWhitespace
++                . (foldr ($) []))
 +                 [((++)
 +                   $ (map
 +                        Text.Css.TopBlock
 +                        (((Text.Css.Block
 +                             {Text.Css.blockSelector = Data.Monoid.mconcat
-+                                                                           [(Text.Css.fromText
-+                                                                             . Text.Css.pack)
-+                                                                              "#",
-+                                                                            toCss theId],
++                                                                                 [(Text.Css.fromText
++                                                                                   . Text.Css.pack)
++                                                                                    "#",
++                                                                                  toCss theId],
 +                              Text.Css.blockAttrs = (Prelude.concat
-+                                                                       $ ([Text.Css.Attr
-+                                                                             (Data.Monoid.mconcat
-+                                                                                [(Text.Css.fromText
-+                                                                                  . Text.Css.pack)
-+                                                                                   "-webkit-appearance"])
-+                                                                             (Data.Monoid.mconcat
-+                                                                                [(Text.Css.fromText
-+                                                                                  . Text.Css.pack)
-+                                                                                   "textfield"])]
-+                                                                          :
-+                                                                            (map
-+                                                                               Text.Css.mixinAttrs
-+                                                                               []))),
++                                                                             $ ([Text.Css.Attr
++                                                                                   (Data.Monoid.mconcat
++                                                                                      [(Text.Css.fromText
++                                                                                        . Text.Css.pack)
++                                                                                         "-webkit-appearance"])
++                                                                                   (Data.Monoid.mconcat
++                                                                                      [(Text.Css.fromText
++                                                                                        . Text.Css.pack)
++                                                                                         "textfield"])]
++                                                                                :
++                                                                                  (map
++                                                                                     Text.Css.mixinAttrs
++                                                                                     []))),
 +                              Text.Css.blockBlocks = (),
 +                              Text.Css.blockMixins = ()}               :)
 +                          . ((foldr (.) id [])
@@ -684,8 +695,8 @@
 +
      , fieldEnctype = UrlEncoded
      }
- -- | Creates an input with @type="url"@, validating the URL according to RFC3986.
-@@ -404,7 +618,28 @@ urlField = Field
+ 
+@@ -365,7 +567,28 @@ urlField = Field
              Nothing -> Left $ MsgInvalidUrl s
              Just _ -> Right s
      , fieldView = \theId name attrs val isReq ->
@@ -715,7 +726,7 @@
      , fieldEnctype = UrlEncoded
      }
  
-@@ -423,18 +658,54 @@ selectField :: (Eq a, RenderMessage site FormMessage)
+@@ -378,18 +601,54 @@ selectField :: (Eq a, RenderMessage site FormMessage)
              => HandlerT site IO (OptionList a)
              -> Field (HandlerT site IO) a
  selectField = selectFieldHelper
@@ -758,8 +769,8 @@
 +           ((Text.Blaze.Internal.preEscapedText . pack) ">");
 +         ((Control.Monad.liftM (toHtml .) getMessageRender)
 +          >>=
-+            (\ urender_a2nOk
-+               -> (asWidgetT . toWidget) (urender_a2nOk MsgSelectNone)));
++            (\ urender_aJMX
++               -> (asWidgetT . toWidget) (urender_aJMX MsgSelectNone)));
 +         (asWidgetT . toWidget)
 +           ((Text.Blaze.Internal.preEscapedText . pack) "</option>") })
 + -- onOpt
@@ -780,9 +791,9 @@
 +           ((Text.Blaze.Internal.preEscapedText . pack) "</option>") })
 + -- inside
  
- -- | Creates a @\<select>@ tag for selecting multiple options.
  multiSelectFieldList :: (Eq a, RenderMessage site FormMessage, RenderMessage site msg)
-@@ -459,11 +730,45 @@ multiSelectField ioptlist =
+                      => [(msg, a)]
+@@ -412,11 +671,45 @@ multiSelectField ioptlist =
      view theId name attrs val isReq = do
          opts <- fmap olOptions $ handlerToWidget ioptlist
          let selOpts = map (id &&& (optselected val)) opts
@@ -810,20 +821,20 @@
 +             (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . pack) ">");
 +             Data.Foldable.mapM_
-+               (\ (opt_a2nPy, optsel_a2nPz)
++               (\ (opt_aJNs, optsel_aJNt)
 +                  -> do { (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . pack) "<option value=\"");
-+                          (asWidgetT . toWidget) (toHtml (optionExternalValue opt_a2nPy));
++                          (asWidgetT . toWidget) (toHtml (optionExternalValue opt_aJNs));
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . pack) "\"");
 +                          condH
-+                            [(optsel_a2nPz, 
++                            [(optsel_aJNt, 
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . pack) " selected"))]
 +                            Nothing;
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . pack) ">");
-+                          (asWidgetT . toWidget) (toHtml (optionDisplay opt_a2nPy));
++                          (asWidgetT . toWidget) (toHtml (optionDisplay opt_aJNs));
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . pack) "</option>") })
 +               selOpts;
@@ -833,7 +844,7 @@
          where
              optselected (Left _) _ = False
              optselected (Right vals) opt = (optionInternalValue opt) `elem` vals
-@@ -489,37 +794,115 @@ checkboxesField ioptlist = (multiSelectField ioptlist)
+@@ -439,54 +732,196 @@ checkboxesField ioptlist = (multiSelectField ioptlist)
              opts <- fmap olOptions $ handlerToWidget ioptlist
              let optselected (Left _) _ = False
                  optselected (Right vals) opt = (optionInternalValue opt) `elem` vals
@@ -850,25 +861,25 @@
 +                 (asWidgetT . toWidget)
 +                   ((Text.Blaze.Internal.preEscapedText . pack) "\">");
 +                 Data.Foldable.mapM_
-+                   (\ opt_a2nQo
++                   (\ opt_aJNI
 +                      -> do { (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . pack)
 +                                   "<label><input type=\"checkbox\" name=\"");
 +                              (asWidgetT . toWidget) (toHtml name);
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"");
-+                              (asWidgetT . toWidget) (toHtml (optionExternalValue opt_a2nQo));
++                              (asWidgetT . toWidget) (toHtml (optionExternalValue opt_aJNI));
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . pack) "\"");
 +                              condH
-+                                [(optselected val opt_a2nQo, 
++                                [(optselected val opt_aJNI, 
 +                                  (asWidgetT . toWidget)
 +                                    ((Text.Blaze.Internal.preEscapedText . pack) " checked"))]
 +                                Nothing;
 +                              (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . pack) ">");
-+                              (asWidgetT . toWidget) (toHtml (optionDisplay opt_a2nQo));
++                              (asWidgetT . toWidget) (toHtml (optionDisplay opt_aJNI));
 +                              (asWidgetT . toWidget)
 +                                ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })
 +                   opts;
@@ -876,7 +887,7 @@
 +                   ((Text.Blaze.Internal.preEscapedText . pack) "</span>") }
 +
      }
- -- | Creates an input with @type="radio"@ for selecting one option.
+ 
  radioField :: (Eq a, RenderMessage site FormMessage)
             => HandlerT site IO (OptionList a)
             -> Field (HandlerT site IO) a
@@ -931,8 +942,8 @@
 +           ((Text.Blaze.Internal.preEscapedText . pack) ">");
 +         ((Control.Monad.liftM (toHtml .) getMessageRender)
 +          >>=
-+            (\ urender_a2nR7
-+               -> (asWidgetT . toWidget) (urender_a2nR7 MsgSelectNone)));
++            (\ urender_aJNY
++               -> (asWidgetT . toWidget) (urender_aJNY MsgSelectNone)));
 +         (asWidgetT . toWidget)
 +           ((Text.Blaze.Internal.preEscapedText . pack) "</div></label>") })
 +
@@ -972,9 +983,6 @@
 +           ((Text.Blaze.Internal.preEscapedText . pack) "</div></label>") })
 +
  
- -- | Creates a group of radio buttons to answer the question given in the message. Radio buttons are used to allow differentiating between an empty response (@Nothing@) and a no response (@Just False@). Consider using the simpler 'checkBoxField' if you don't need to make this distinction.
- --
-@@ -531,19 +914,83 @@ $newline never
  boolField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Bool
  boolField = Field
        { fieldParse = \e _ -> return $ boolParser e
@@ -984,9 +992,6 @@
 -      <input id=#{theId}-none *{attrs} type=radio name=#{name} value=none checked>
 -      <label for=#{theId}-none>_{MsgSelectNone}
 -
--
--<input id=#{theId}-yes *{attrs} type=radio name=#{name} value=yes :showVal id val:checked>
--<label for=#{theId}-yes>_{MsgBoolYes}
 +      , fieldView = \theId name attrs val isReq ->       do { condH
 +             [(not isReq, 
 +               do { (asWidgetT . toWidget)
@@ -1007,8 +1012,8 @@
 +                      ((Text.Blaze.Internal.preEscapedText . pack) "-none\">");
 +                    ((Control.Monad.liftM (toHtml .) getMessageRender)
 +                     >>=
-+                       (\ urender_a2nSk
-+                          -> (asWidgetT . toWidget) (urender_a2nSk MsgSelectNone)));
++                       (\ urender_aJOn
++                          -> (asWidgetT . toWidget) (urender_aJOn MsgSelectNone)));
 +                    (asWidgetT . toWidget)
 +                      ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })]
 +             Nothing;
@@ -1034,8 +1039,8 @@
 +             ((Text.Blaze.Internal.preEscapedText . pack) "-yes\">");
 +           ((Control.Monad.liftM (toHtml .) getMessageRender)
 +            >>=
-+              (\ urender_a2nSl
-+                 -> (asWidgetT . toWidget) (urender_a2nSl MsgBoolYes)));
++              (\ urender_aJOo
++                 -> (asWidgetT . toWidget) (urender_aJOo MsgBoolYes)));
 +           (asWidgetT . toWidget)
 +             ((Text.Blaze.Internal.preEscapedText . pack)
 +                "</label><input id=\"");
@@ -1059,18 +1064,21 @@
 +             ((Text.Blaze.Internal.preEscapedText . pack) "-no\">");
 +           ((Control.Monad.liftM (toHtml .) getMessageRender)
 +            >>=
-+              (\ urender_a2nSm
-+                 -> (asWidgetT . toWidget) (urender_a2nSm MsgBoolNo)));
++              (\ urender_aJOp
++                 -> (asWidgetT . toWidget) (urender_aJOp MsgBoolNo)));
 +           (asWidgetT . toWidget)
 +             ((Text.Blaze.Internal.preEscapedText . pack) "</label>") }
  
+-<input id=#{theId}-yes *{attrs} type=radio name=#{name} value=yes :showVal id val:checked>
+-<label for=#{theId}-yes>_{MsgBoolYes}
+-
 -<input id=#{theId}-no *{attrs} type=radio name=#{name} value=no :showVal not val:checked>
 -<label for=#{theId}-no>_{MsgBoolNo}
 -|]
      , fieldEnctype = UrlEncoded
      }
    where
-@@ -570,10 +1017,24 @@ $newline never
+@@ -512,10 +947,24 @@ $newline never
  checkBoxField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Bool
  checkBoxField = Field
      { fieldParse = \e _ -> return $ checkBoxParser e
@@ -1099,31 +1107,25 @@
      , fieldEnctype = UrlEncoded
      }
  
-@@ -619,66 +1080,6 @@ optionsPairs opts = do
+@@ -559,69 +1008,6 @@ optionsPairs opts = do
  optionsEnum :: (MonadHandler m, Show a, Enum a, Bounded a) => m (OptionList a)
  optionsEnum = optionsPairs $ map (\x -> (pack $ show x, x)) [minBound..maxBound]
  
---- | Selects a list of 'Entity's with the given 'Filter' and 'SelectOpt's. The @(a -> msg)@ function is then used to derive the display value for an 'OptionList'. Example usage:
----
---- > Country
---- >    name Text
---- >    deriving Eq -- Must derive Eq
----
---- > data CountryForm = CountryForm
---- >   { country :: Entity Country
---- >   }
---- >
---- > countryNameForm :: AForm Handler CountryForm
---- > countryNameForm = CountryForm
---- >         <$> areq (selectField countries) "Which country do you live in?" Nothing
---- >         where
---- >           countries = optionsPersist [] [Asc CountryName] countryName
+-#if MIN_VERSION_persistent(2, 0, 0)
 -optionsPersist :: ( YesodPersist site, PersistEntity a
 -                  , PersistQuery (PersistEntityBackend a)
 -                  , PathPiece (Key a)
 -                  , RenderMessage site msg
 -                  , YesodPersistBackend site ~ PersistEntityBackend a
 -                  )
+-#else
+-optionsPersist :: ( YesodPersist site, PersistEntity a
+-                  , PersistQuery (YesodPersistBackend site (HandlerT site IO))
+-                  , PathPiece (Key a)
+-                  , PersistEntityBackend a ~ PersistMonadBackend (YesodPersistBackend site (HandlerT site IO))
+-                  , RenderMessage site msg
+-                  )
+-#endif
 -               => [Filter a]
 -               -> [SelectOpt a]
 -               -> (a -> msg)
@@ -1137,10 +1139,11 @@
 -        , optionExternalValue = toPathPiece key
 -        }) pairs
 -
---- | An alternative to 'optionsPersist' which returns just the 'Key' instead of
---- the entire 'Entity'.
+--- | An alternative to 'optionsPersist' which returns just the @Key@ instead of
+--- the entire @Entity@.
 ---
 --- Since 1.3.2
+-#if MIN_VERSION_persistent(2, 0, 0)
 -optionsPersistKey
 -  :: (YesodPersist site
 -     , PersistEntity a
@@ -1149,6 +1152,15 @@
 -     , RenderMessage site msg
 -     , YesodPersistBackend site ~ PersistEntityBackend a
 -     )
+-#else
+-optionsPersistKey
+-  :: (YesodPersist site
+-     , PersistEntity a
+-     , PersistQuery (YesodPersistBackend site (HandlerT site IO))
+-     , PathPiece (Key a)
+-     , RenderMessage site msg
+-     , PersistEntityBackend a ~ PersistMonadBackend (YesodDB site))
+-#endif
 -  => [Filter a]
 -  -> [SelectOpt a]
 -  -> (a -> msg)
@@ -1162,18 +1174,17 @@
 -        , optionInternalValue = key
 -        , optionExternalValue = toPathPiece key
 -        }) pairs
--
+ 
  selectFieldHelper
          :: (Eq a, RenderMessage site FormMessage)
-         => (Text -> Text -> [(Text, Text)] -> WidgetT site IO () -> WidgetT site IO ())
-@@ -722,9 +1123,21 @@ fileField = Field
+@@ -665,9 +1051,21 @@ fileField = Field
          case files of
              [] -> Right Nothing
              file:_ -> Right $ Just file
 -    , fieldView = \id' name attrs _ isReq -> toWidget [hamlet|
 -            <input id=#{id'} name=#{name} *{attrs} type=file :isReq:required>
 -        |]
-+    , fieldView = \id' name attrs _ isReq -> toWidget  $     \ _render_a2nUV
++    , fieldView = \id' name attrs _ isReq -> toWidget  $     \ _render_aJPt
 +      -> do { id
 +                ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +              id (toHtml id');
@@ -1191,7 +1202,7 @@
      , fieldEnctype = Multipart
      }
  
-@@ -751,10 +1164,19 @@ fileAFormReq fs = AForm $ \(site, langs) menvs ints -> do
+@@ -694,10 +1092,19 @@ fileAFormReq fs = AForm $ \(site, langs) menvs ints -> do
              { fvLabel = toHtml $ renderMessage site langs $ fsLabel fs
              , fvTooltip = fmap (toHtml . renderMessage site langs) $ fsTooltip fs
              , fvId = id'
@@ -1215,7 +1226,7 @@
              , fvErrors = errs
              , fvRequired = True
              }
-@@ -783,10 +1205,19 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do
+@@ -726,10 +1133,19 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do
              { fvLabel = toHtml $ renderMessage master langs $ fsLabel fs
              , fvTooltip = fmap (toHtml . renderMessage master langs) $ fsTooltip fs
              , fvId = id'
@@ -1240,26 +1251,28 @@
              , fvRequired = False
              }
 diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs
-index 0d83b79..61e9b66 100644
+index 9e6abaf..0c2a0ce 100644
 --- a/Yesod/Form/Functions.hs
 +++ b/Yesod/Form/Functions.hs
-@@ -60,12 +60,14 @@ import Text.Blaze (Markup, toMarkup)
+@@ -60,12 +60,16 @@ import Text.Blaze (Markup, toMarkup)
  #define toHtml toMarkup
  import Yesod.Core
  import Network.Wai (requestMethod)
 -import Text.Hamlet (shamlet)
++--import Text.Hamlet (shamlet)
  import Data.Monoid (mempty)
  import Data.Maybe (listToMaybe, fromMaybe)
  import qualified Data.Map as Map
  import qualified Data.Text.Encoding as TE
  import Control.Arrow (first)
-+import qualified Text.Hamlet
 +import qualified Text.Blaze.Internal
++import qualified Yesod.Core.Widget
 +import qualified Data.Foldable
++import qualified Text.Hamlet
  
  -- | Get a unique identifier.
  newFormIdent :: Monad m => MForm m Text
-@@ -217,7 +219,14 @@ postHelper form env = do
+@@ -217,7 +221,14 @@ postHelper form env = do
      let token =
              case reqToken req of
                  Nothing -> mempty
@@ -1275,7 +1288,7 @@
      m <- getYesod
      langs <- languages
      ((res, xml), enctype) <- runFormGeneric (form token) m langs env
-@@ -298,7 +307,12 @@ getHelper :: MonadHandler m
+@@ -297,7 +308,12 @@ getHelper :: MonadHandler m
            -> Maybe (Env, FileEnv)
            -> m (a, Enctype)
  getHelper form env = do
@@ -1289,7 +1302,7 @@
      langs <- languages
      m <- getYesod
      runFormGeneric (form fragment) m langs env
-@@ -333,10 +347,15 @@ identifyForm
+@@ -332,10 +348,15 @@ identifyForm
  identifyForm identVal form = \fragment -> do
      -- Create hidden <input>.
      let fragment' =
@@ -1309,7 +1322,7 @@
  
      -- Check if we got its value back.
      mp <- askParams
-@@ -366,22 +385,70 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a
+@@ -365,22 +386,70 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a
  renderTable aform fragment = do
      (res, views') <- aFormToForm aform
      let views = views' []
@@ -1332,20 +1345,20 @@
 +    let widget =     do { Text.Hamlet.condH
 +           [(null views, (asWidgetT . toWidget) (toHtml fragment))] Nothing;
 +         Data.Foldable.mapM_
-+           (\ (isFirst_aNqW, view_aNqX)
++           (\ (isFirst_ab5u, view_ab5v)
 +              -> do { (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "<tr");
 +                      Text.Hamlet.condH
-+                        [(or [fvRequired view_aNqX, not (fvRequired view_aNqX)], 
++                        [(or [fvRequired view_ab5v, not (fvRequired view_ab5v)], 
 +                          do { (asWidgetT . toWidget)
 +                                 ((Text.Blaze.Internal.preEscapedText . pack) " class=\"");
 +                               Text.Hamlet.condH
-+                                 [(fvRequired view_aNqX, 
++                                 [(fvRequired view_ab5v, 
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "required "))]
 +                                 Nothing;
 +                               Text.Hamlet.condH
-+                                 [(not (fvRequired view_aNqX), 
++                                 [(not (fvRequired view_ab5v), 
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "optional"))]
 +                                 Nothing;
@@ -1355,37 +1368,37 @@
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "><td>");
 +                      Text.Hamlet.condH
-+                        [(isFirst_aNqW, (asWidgetT . toWidget) (toHtml fragment))] Nothing;
++                        [(isFirst_ab5u, (asWidgetT . toWidget) (toHtml fragment))] Nothing;
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");
-+                      (asWidgetT . toWidget) (toHtml (fvId view_aNqX));
++                      (asWidgetT . toWidget) (toHtml (fvId view_ab5v));
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "\">");
-+                      (asWidgetT . toWidget) (toHtml (fvLabel view_aNqX));
++                      (asWidgetT . toWidget) (toHtml (fvLabel view_ab5v));
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "</label>");
 +                      Text.Hamlet.maybeH
-+                        (fvTooltip view_aNqX)
-+                        (\ tt_aNqY
++                        (fvTooltip view_ab5v)
++                        (\ tt_ab5w
 +                           -> do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack)
 +                                        "<div class=\"tooltip\">");
-+                                   (asWidgetT . toWidget) (toHtml tt_aNqY);
++                                   (asWidgetT . toWidget) (toHtml tt_ab5w);
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
 +                        Nothing;
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "</td><td>");
-+                      (asWidgetT . toWidget) (fvInput view_aNqX);
++                      (asWidgetT . toWidget) (fvInput view_ab5v);
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "</td>");
 +                      Text.Hamlet.maybeH
-+                        (fvErrors view_aNqX)
-+                        (\ err_aNqZ
++                        (fvErrors view_ab5v)
++                        (\ err_ab5x
 +                           -> do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack)
 +                                        "<td class=\"errors\">");
-+                                   (asWidgetT . toWidget) (toHtml err_aNqZ);
++                                   (asWidgetT . toWidget) (toHtml err_ab5x);
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</td>") })
 +                        Nothing;
@@ -1396,7 +1409,7 @@
      return (res, widget)
    where
      addIsFirst [] = []
-@@ -397,19 +464,66 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a
+@@ -396,19 +465,66 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a
  renderDivsMaybeLabels withLabels aform fragment = do
      (res, views') <- aFormToForm aform
      let views = views' []
@@ -1415,20 +1428,20 @@
 -|]
 +    let widget =     do { (asWidgetT . toWidget) (toHtml fragment);
 +         Data.Foldable.mapM_
-+           (\ view_aNsz
++           (\ view_ab5K
 +              -> do { (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "<div");
 +                      Text.Hamlet.condH
-+                        [(or [fvRequired view_aNsz, not (fvRequired view_aNsz)], 
++                        [(or [fvRequired view_ab5K, not (fvRequired view_ab5K)], 
 +                          do { (asWidgetT . toWidget)
 +                                 ((Text.Blaze.Internal.preEscapedText . pack) " class=\"");
 +                               Text.Hamlet.condH
-+                                 [(fvRequired view_aNsz, 
++                                 [(fvRequired view_ab5K, 
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "required "))]
 +                                 Nothing;
 +                               Text.Hamlet.condH
-+                                 [(not (fvRequired view_aNsz), 
++                                 [(not (fvRequired view_ab5K), 
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "optional"))]
 +                                 Nothing;
@@ -1441,31 +1454,31 @@
 +                        [(withLabels, 
 +                          do { (asWidgetT . toWidget)
 +                                 ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");
-+                               (asWidgetT . toWidget) (toHtml (fvId view_aNsz));
++                               (asWidgetT . toWidget) (toHtml (fvId view_ab5K));
 +                               (asWidgetT . toWidget)
 +                                 ((Text.Blaze.Internal.preEscapedText . pack) "\">");
-+                               (asWidgetT . toWidget) (toHtml (fvLabel view_aNsz));
++                               (asWidgetT . toWidget) (toHtml (fvLabel view_ab5K));
 +                               (asWidgetT . toWidget)
 +                                 ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })]
 +                        Nothing;
 +                      Text.Hamlet.maybeH
-+                        (fvTooltip view_aNsz)
-+                        (\ tt_aNsL
++                        (fvTooltip view_ab5K)
++                        (\ tt_ab5L
 +                           -> do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack)
 +                                        "<div class=\"tooltip\">");
-+                                   (asWidgetT . toWidget) (toHtml tt_aNsL);
++                                   (asWidgetT . toWidget) (toHtml tt_ab5L);
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
 +                        Nothing;
-+                      (asWidgetT . toWidget) (fvInput view_aNsz);
++                      (asWidgetT . toWidget) (fvInput view_ab5K);
 +                      Text.Hamlet.maybeH
-+                        (fvErrors view_aNsz)
-+                        (\ err_aNsP
++                        (fvErrors view_ab5K)
++                        (\ err_ab5M
 +                           -> do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack)
 +                                        "<div class=\"errors\">");
-+                                   (asWidgetT . toWidget) (toHtml err_aNsP);
++                                   (asWidgetT . toWidget) (toHtml err_ab5M);
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
 +                        Nothing;
@@ -1476,7 +1489,7 @@
      return (res, widget)
  
  -- | Render a form using Bootstrap v2-friendly shamlet syntax.
-@@ -437,19 +551,62 @@ renderBootstrap2 aform fragment = do
+@@ -436,19 +552,62 @@ renderBootstrap2 aform fragment = do
      let views = views' []
          has (Just _) = True
          has Nothing  = False
@@ -1495,53 +1508,53 @@
 -                |]
 +    let widget =     do { (asWidgetT . toWidget) (toHtml fragment);
 +         Data.Foldable.mapM_
-+           (\ view_aNw8
++           (\ view_ab5Y
 +              -> do { (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack)
 +                           "<div class=\"control-group clearfix ");
 +                      Text.Hamlet.condH
-+                        [(fvRequired view_aNw8, 
++                        [(fvRequired view_ab5Y, 
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . pack) "required "))]
 +                        Nothing;
 +                      Text.Hamlet.condH
-+                        [(not (fvRequired view_aNw8), 
++                        [(not (fvRequired view_ab5Y), 
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . pack) "optional "))]
 +                        Nothing;
 +                      Text.Hamlet.condH
-+                        [(has (fvErrors view_aNw8), 
++                        [(has (fvErrors view_ab5Y), 
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . pack) "error"))]
 +                        Nothing;
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack)
 +                           "\"><label class=\"control-label\" for=\"");
-+                      (asWidgetT . toWidget) (toHtml (fvId view_aNw8));
++                      (asWidgetT . toWidget) (toHtml (fvId view_ab5Y));
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack) "\">");
-+                      (asWidgetT . toWidget) (toHtml (fvLabel view_aNw8));
++                      (asWidgetT . toWidget) (toHtml (fvLabel view_ab5Y));
 +                      (asWidgetT . toWidget)
 +                        ((Text.Blaze.Internal.preEscapedText . pack)
 +                           "</label><div class=\"controls input\">");
-+                      (asWidgetT . toWidget) (fvInput view_aNw8);
++                      (asWidgetT . toWidget) (fvInput view_ab5Y);
 +                      Text.Hamlet.maybeH
-+                        (fvTooltip view_aNw8)
-+                        (\ tt_aNw9
++                        (fvTooltip view_ab5Y)
++                        (\ tt_ab5Z
 +                           -> do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack)
 +                                        "<span class=\"help-block\">");
-+                                   (asWidgetT . toWidget) (toHtml tt_aNw9);
++                                   (asWidgetT . toWidget) (toHtml tt_ab5Z);
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</span>") })
 +                        Nothing;
 +                      Text.Hamlet.maybeH
-+                        (fvErrors view_aNw8)
-+                        (\ err_aNwa
++                        (fvErrors view_ab5Y)
++                        (\ err_ab60
 +                           -> do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack)
 +                                        "<span class=\"help-block\">");
-+                                   (asWidgetT . toWidget) (toHtml err_aNwa);
++                                   (asWidgetT . toWidget) (toHtml err_ab60);
 +                                   (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . pack) "</span>") })
 +                        Nothing;
@@ -1553,15 +1566,16 @@
  
  -- | Deprecated synonym for 'renderBootstrap2'.
 diff --git a/Yesod/Form/Jquery.hs b/Yesod/Form/Jquery.hs
-index 63e3d57..47503c2 100644
+index 362eb8a..1df9966 100644
 --- a/Yesod/Form/Jquery.hs
 +++ b/Yesod/Form/Jquery.hs
-@@ -18,11 +18,23 @@ import Yesod.Core
+@@ -17,11 +17,23 @@ import Yesod.Core
  import Yesod.Form
  import Data.Time (Day)
  import Data.Default
 -import Text.Hamlet (shamlet)
 -import Text.Julius (julius, rawJS)
++--import Text.Hamlet (shamlet)
 +import Text.Julius (rawJS)
  import Data.Text (Text, pack, unpack)
  import Data.Monoid (mconcat)
@@ -1577,27 +1591,25 @@
 +import qualified Text.Julius
 +import qualified Data.Text.Lazy.Builder
 +import qualified Text.Shakespeare
-+import qualified Data.Text.Lazy.Builder as Data.Text.Internal.Builder
 +
  -- | Gets the Google hosted jQuery UI 1.8 CSS file with the given theme.
  googleHostedJqueryUiCss :: Text -> Text
  googleHostedJqueryUiCss theme = mconcat
-@@ -71,27 +83,54 @@ jqueryDayField' jds inputType = Field
+@@ -61,27 +73,59 @@ jqueryDayField jds = Field
                . readMay
                . unpack
      , fieldView = \theId name attrs val isReq -> do
 -        toWidget [shamlet|
 -$newline never
--<input id="#{theId}" name="#{name}" *{attrs} type="#{inputType}" :isReq:required="" value="#{showVal val}">
+-<input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}">
 -|]
 +        toWidget  $         do { id
 +               ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
 +             id (toHtml theId);
 +             id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
 +             id (toHtml name);
-+             id ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"");
-+             id (toHtml inputType);
-+             id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
++             id
++               ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"date\"");
 +             Text.Hamlet.condH
 +               [(isReq, 
 +                 id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
@@ -1626,36 +1638,42 @@
 -});
 -|]
 +        toWidget  $         Text.Julius.asJavascriptUrl
-+          (\ _render_a3iGM
++          (\ _render_a2l4S
 +             -> mconcat
 +                  [Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                        "\n\n$(function(){\n\n    var i = document.getElementById(\""),
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
++                        "\n$(function(){\n    var i = document.getElementById(\""),
 +                   Text.Julius.toJavascript (rawJS theId),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                        "\");\n\n    if (i.type != \"date\") {\n\n        $(i).datepicker({\n\n            dateFormat:'yy-mm-dd',\n\n            changeMonth:"),
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
++                        "\");\n    if (i.type != \"date\") {\n        $(i).datepicker({\n            dateFormat:'yy-mm-dd',\n            changeMonth:"),
 +                   Text.Julius.toJavascript (jsBool (jdsChangeMonth jds)),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                        ",\n\n            changeYear:"),
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
++                        ",\n            changeYear:"),
 +                   Text.Julius.toJavascript (jsBool (jdsChangeYear jds)),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                        ",\n\n            numberOfMonths:"),
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
++                        ",\n            numberOfMonths:"),
 +                   Text.Julius.toJavascript (rawJS (mos (jdsNumberOfMonths jds))),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                        ",\n\n            yearRange:"),
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
++                        ",\n            yearRange:"),
 +                   Text.Julius.toJavascript (toJSON (jdsYearRange jds)),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                        "\n\n        });\n\n    }\n\n});")])
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
++                        "\n        });\n    }\n});")])
 +
      , fieldEnctype = UrlEncoded
      }
    where
-@@ -118,16 +157,47 @@ jqueryAutocompleteField' :: (RenderMessage site FormMessage, YesodJquery site)
+@@ -108,16 +152,52 @@ jqueryAutocompleteField' :: (RenderMessage site FormMessage, YesodJquery site)
  jqueryAutocompleteField' minLen src = Field
      { fieldParse = parseHelper $ Right
      , fieldView = \theId name attrs val isReq -> do
@@ -1688,35 +1706,40 @@
 -$(function(){$("##{rawJS theId}").autocomplete({source:"@{src}",minLength:#{toJSON minLen}})});
 -|]
 +        toWidget  $         Text.Julius.asJavascriptUrl
-+          (\ _render_a3iHO
++          (\ _render_a2l58
 +             -> mconcat
 +                  [Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                        "\n\n$(function(){$(\"#"),
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
++                        "\n$(function(){$(\"#"),
 +                   Text.Julius.toJavascript (rawJS theId),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
 +                        "\").autocomplete({source:\""),
 +                   Text.Julius.Javascript
-+                     (Data.Text.Internal.Builder.fromText (_render_a3iHO src [])),
++                     (Data.Text.Lazy.Builder.fromText
++                        (_render_a2l58 src [])),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
 +                        "\",minLength:"),
 +                   Text.Julius.toJavascript (toJSON minLen),
 +                   Text.Julius.Javascript
-+                     ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
++                     ((Data.Text.Lazy.Builder.fromText
++                       . Text.Shakespeare.pack')
 +                        "})});")])
 +
      , fieldEnctype = UrlEncoded
      }
  
 diff --git a/Yesod/Form/MassInput.hs b/Yesod/Form/MassInput.hs
-index a2b434d..29b45b5 100644
+index a2b434d..75eb484 100644
 --- a/Yesod/Form/MassInput.hs
 +++ b/Yesod/Form/MassInput.hs
-@@ -22,6 +22,16 @@ import Data.Traversable (sequenceA)
- import qualified Data.Map as Map
- import Data.Maybe (listToMaybe)
+@@ -9,6 +9,16 @@ module Yesod.Form.MassInput
+     , massTable
+     ) where
  
 +import qualified Data.Text
 +import qualified Text.Blaze as Text.Blaze.Internal
@@ -1728,9 +1751,9 @@
 +import qualified Data.Foldable
 +import qualified Control.Monad
 +
- down :: Monad m => Int -> MForm m ()
- down 0 = return ()
- down i | i < 0 = error "called down with a negative number"
+ import Yesod.Form.Types
+ import Yesod.Form.Functions
+ import Yesod.Form.Fields (checkBoxField)
 @@ -70,16 +80,27 @@ inputList label fixXml single mdef = formToAForm $ do
          { fvLabel = label
          , fvTooltip = Nothing
@@ -1749,7 +1772,7 @@
 +             (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<p>");
 +             Data.Foldable.mapM_
-+               (\ xml_a3hPg -> (asWidgetT . toWidget) xml_a3hPg) xmls;
++               (\ xml_a1yM1 -> (asWidgetT . toWidget) xml_a1yM1) xmls;
 +             (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                  "<input class=\"count\" type=\"hidden\" name=\"");
@@ -1806,27 +1829,27 @@
 -                    <div .errors>#{err}
 -|]
 +massDivs viewss = Data.Foldable.mapM_
-+  (\ views_a3hPz
++  (\ views_a1yMm
 +     -> do { (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                  "<fieldset>");
 +             Data.Foldable.mapM_
-+               (\ view_a3hPA
++               (\ view_a1yMn
 +                  -> do { (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<div");
 +                          Text.Hamlet.condH
-+                            [(or [fvRequired view_a3hPA, not (fvRequired view_a3hPA)], 
++                            [(or [fvRequired view_a1yMn, not (fvRequired view_a1yMn)], 
 +                              do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                        " class=\"");
 +                                   Text.Hamlet.condH
-+                                     [(fvRequired view_a3hPA, 
++                                     [(fvRequired view_a1yMn, 
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "required "))]
 +                                     Nothing;
 +                                   Text.Hamlet.condH
-+                                     [(not (fvRequired view_a3hPA), 
++                                     [(not (fvRequired view_a1yMn), 
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "optional"))]
@@ -1838,38 +1861,38 @@
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                               "><label for=\"");
-+                          (asWidgetT . toWidget) (toHtml (fvId view_a3hPA));
++                          (asWidgetT . toWidget) (toHtml (fvId view_a1yMn));
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");
-+                          (asWidgetT . toWidget) (toHtml (fvLabel view_a3hPA));
++                          (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMn));
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>");
 +                          Text.Hamlet.maybeH
-+                            (fvTooltip view_a3hPA)
-+                            (\ tt_a3hPB
++                            (fvTooltip view_a1yMn)
++                            (\ tt_a1yMo
 +                               -> do { (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "<div class=\"tooltip\">");
-+                                       (asWidgetT . toWidget) (toHtml tt_a3hPB);
++                                       (asWidgetT . toWidget) (toHtml tt_a1yMo);
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "</div>") })
 +                            Nothing;
-+                          (asWidgetT . toWidget) (fvInput view_a3hPA);
++                          (asWidgetT . toWidget) (fvInput view_a1yMn);
 +                          Text.Hamlet.maybeH
-+                            (fvErrors view_a3hPA)
-+                            (\ err_a3hPC
++                            (fvErrors view_a1yMn)
++                            (\ err_a1yMp
 +                               -> do { (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "<div class=\"errors\">");
-+                                       (asWidgetT . toWidget) (toHtml err_a3hPC);
++                                       (asWidgetT . toWidget) (toHtml err_a1yMp);
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "</div>") })
 +                            Nothing;
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</div>") })
-+               views_a3hPz;
++               views_a1yMm;
 +             (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                  "</fieldset>") })
@@ -1877,27 +1900,27 @@
 +
 +
 +massTable viewss = Data.Foldable.mapM_
-+  (\ views_a3hPH
++  (\ views_a1yMv
 +     -> do { (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                  "<fieldset><table>");
 +             Data.Foldable.mapM_
-+               (\ view_a3hPI
++               (\ view_a1yMw
 +                  -> do { (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<tr");
 +                          Text.Hamlet.condH
-+                            [(or [fvRequired view_a3hPI, not (fvRequired view_a3hPI)], 
++                            [(or [fvRequired view_a1yMw, not (fvRequired view_a1yMw)], 
 +                              do { (asWidgetT . toWidget)
 +                                     ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                        " class=\"");
 +                                   Text.Hamlet.condH
-+                                     [(fvRequired view_a3hPI, 
++                                     [(fvRequired view_a1yMw, 
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "required "))]
 +                                     Nothing;
 +                                   Text.Hamlet.condH
-+                                     [(not (fvRequired view_a3hPI), 
++                                     [(not (fvRequired view_a1yMw), 
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "optional"))]
@@ -1909,19 +1932,19 @@
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                               "><td><label for=\"");
-+                          (asWidgetT . toWidget) (toHtml (fvId view_a3hPI));
++                          (asWidgetT . toWidget) (toHtml (fvId view_a1yMw));
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");
-+                          (asWidgetT . toWidget) (toHtml (fvLabel view_a3hPI));
++                          (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMw));
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>");
 +                          Text.Hamlet.maybeH
-+                            (fvTooltip view_a3hPI)
-+                            (\ tt_a3hPJ
++                            (fvTooltip view_a1yMw)
++                            (\ tt_a1yMx
 +                               -> do { (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "<div class=\"tooltip\">");
-+                                       (asWidgetT . toWidget) (toHtml tt_a3hPJ);
++                                       (asWidgetT . toWidget) (toHtml tt_a1yMx);
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "</div>") })
@@ -1929,23 +1952,23 @@
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                               "</td><td>");
-+                          (asWidgetT . toWidget) (fvInput view_a3hPI);
++                          (asWidgetT . toWidget) (fvInput view_a1yMw);
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</td>");
 +                          Text.Hamlet.maybeH
-+                            (fvErrors view_a3hPI)
-+                            (\ err_a3hPK
++                            (fvErrors view_a1yMw)
++                            (\ err_a1yMy
 +                               -> do { (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "<td class=\"errors\">");
-+                                       (asWidgetT . toWidget) (toHtml err_a3hPK);
++                                       (asWidgetT . toWidget) (toHtml err_a1yMy);
 +                                       (asWidgetT . toWidget)
 +                                         ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                                            "</td>") })
 +                            Nothing;
 +                          (asWidgetT . toWidget)
 +                            ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</tr>") })
-+               views_a3hPH;
++               views_a1yMv;
 +             (asWidgetT . toWidget)
 +               ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
 +                  "</table></fieldset>") })
@@ -1967,19 +1990,12 @@
 -                        <td .errors>#{err}
 -|]
 diff --git a/Yesod/Form/Nic.hs b/Yesod/Form/Nic.hs
-index 2862678..a773553 100644
+index 7e4af07..b59745a 100644
 --- a/Yesod/Form/Nic.hs
 +++ b/Yesod/Form/Nic.hs
-@@ -12,12 +12,24 @@ module Yesod.Form.Nic
- import Yesod.Core
- import Yesod.Form
- import Text.HTML.SanitizeXSS (sanitizeBalance)
--import Text.Hamlet (shamlet)
--import Text.Julius (julius, rawJS)
-+import Text.Julius (rawJS)
- import Text.Blaze.Html.Renderer.String (renderHtml)
- import Data.Text (Text, pack)
- import Data.Maybe (listToMaybe)
+@@ -9,11 +9,22 @@ module Yesod.Form.Nic
+     , nicHtmlField
+     ) where
  
 +import qualified Text.Blaze as Text.Blaze.Internal
 +import qualified Text.Blaze.Internal
@@ -1991,19 +2007,24 @@
 +import qualified Control.Monad
 +import qualified Text.Julius
 +import qualified Data.Text.Lazy.Builder
-+import qualified Data.Text.Lazy.Builder as Data.Text.Internal.Builder
 +import qualified Text.Shakespeare
 +
- class Yesod a => YesodNic a where
-     -- | NIC Editor Javascript file.
-     urlNicEdit :: a -> Either (Route a) Text
-@@ -27,20 +39,44 @@ nicHtmlField :: YesodNic site => Field (HandlerT site IO) Html
+ import Yesod.Core
+ import Yesod.Form
+ import Text.HTML.SanitizeXSS (sanitizeBalance)
+-import Text.Hamlet (shamlet)
+-import Text.Julius (julius, rawJS)
++import Text.Julius ( rawJS)
+ import Text.Blaze.Html.Renderer.String (renderHtml)
+ import Data.Text (Text, pack)
+ import Data.Maybe (listToMaybe)
+@@ -27,20 +38,52 @@ nicHtmlField :: YesodNic site => Field (HandlerT site IO) Html
  nicHtmlField = Field
      { fieldParse = \e _ -> return . Right . fmap (preEscapedToMarkup . sanitizeBalance) . listToMaybe $ e
-     , fieldView = \theId name attrs val _isReq -> do
+     , fieldView = \theId name attrs val isReq -> do
 -        toWidget [shamlet|
 -$newline never
--    <textarea id="#{theId}" *{attrs} name="#{name}" .html>#{showVal val}
+-    <textarea id="#{theId}" *{attrs} name="#{name}" :isReq:required .html>#{showVal val}
 -|]
 +        toWidget  $         do { id
 +               ((Text.Blaze.Internal.preEscapedText . pack)
@@ -2012,6 +2033,10 @@
 +             id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
 +             id (toHtml name);
 +             id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
++             Text.Hamlet.condH
++               [(isReq, 
++                 id ((Text.Blaze.Internal.preEscapedText . pack) " required"))]
++               Nothing;
 +             id ((Text.Hamlet.attrsToHtml . Text.Hamlet.toAttributes) attrs);
 +             id ((Text.Blaze.Internal.preEscapedText . pack) ">");
 +             id (toHtml (showVal val));
@@ -2028,43 +2053,34 @@
 -(function(){new nicEditor({fullPanel:true}).panelInstance("#{rawJS theId}")})();
 -|]
 +            BottomOfHeadBlocking ->             Text.Julius.asJavascriptUrl
-+              (\ _render_a3hYy
++              (\ _render_a2rMh
 +                 -> Data.Monoid.mconcat
 +                      [Text.Julius.Javascript
-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                            "\n\nbkLib.onDomLoaded(function(){new nicEditor({fullPanel:true}).panelInstance(\""),
++                         ((Data.Text.Lazy.Builder.fromText
++                           . Text.Shakespeare.pack')
++                            "\nbkLib.onDomLoaded(function(){new nicEditor({fullPanel:true}).panelInstance(\""),
 +                       Text.Julius.toJavascript (rawJS theId),
 +                       Text.Julius.Javascript
-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
++                         ((Data.Text.Lazy.Builder.fromText
++                           . Text.Shakespeare.pack')
 +                            "\")});")])
 +
 +            _ ->             Text.Julius.asJavascriptUrl
-+              (\ _render_a3i1Q
++              (\ _render_a2rMm
 +                 -> Data.Monoid.mconcat
 +                      [Text.Julius.Javascript
-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
-+                            "\n\n(function(){new nicEditor({fullPanel:true}).panelInstance(\""),
++                         ((Data.Text.Lazy.Builder.fromText
++                           . Text.Shakespeare.pack')
++                            "\n(function(){new nicEditor({fullPanel:true}).panelInstance(\""),
 +                       Text.Julius.toJavascript (rawJS theId),
 +                       Text.Julius.Javascript
-+                         ((Data.Text.Internal.Builder.fromText . Text.Shakespeare.pack')
++                         ((Data.Text.Lazy.Builder.fromText
++                           . Text.Shakespeare.pack')
 +                            "\")})();")])
 +
      , fieldEnctype = UrlEncoded
      }
    where
-diff --git a/yesod-form.cabal b/yesod-form.cabal
-index 7849763..9694fe1 100644
---- a/yesod-form.cabal
-+++ b/yesod-form.cabal
-@@ -23,7 +23,7 @@ library
-                    , yesod-core            >= 1.4      && < 1.5
-                    , yesod-persistent      >= 1.4      && < 1.5
-                    , time                  >= 1.1.4
--                   , shakespeare           >= 2.0
-+                   , shakespeare           >= 2.0.5
-                    , persistent
-                    , template-haskell
-                    , transformers          >= 0.2.2
 -- 
-2.1.4
+2.1.1
 
diff --git a/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch b/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch
--- a/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch
+++ b/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch
@@ -1,6 +1,6 @@
-From 4d8650bd806f50aa2538270f80fa93261c43d056 Mon Sep 17 00:00:00 2001
+From e82ed4e6fd7b5ea6dbe474b5de2755ec5794161c Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Fri, 3 Jul 2015 00:12:02 +0000
+Date: Thu, 16 Oct 2014 02:23:50 +0000
 Subject: [PATCH] stub out
 
 ---
@@ -8,16 +8,16 @@
  1 file changed, 10 deletions(-)
 
 diff --git a/yesod-persistent.cabal b/yesod-persistent.cabal
-index c3bc1bf..1727dba 100644
+index b116f3a..017b184 100644
 --- a/yesod-persistent.cabal
 +++ b/yesod-persistent.cabal
-@@ -15,16 +15,6 @@ extra-source-files: README.md ChangeLog.md
+@@ -14,16 +14,6 @@ description:     Some helpers for using Persistent from Yesod.
  
  library
      build-depends:   base                      >= 4        && < 5
--                   , yesod-core                >= 1.4.0    && < 1.5
--                   , persistent                >= 2.1      && < 2.2
--                   , persistent-template       >= 2.1      && < 2.2
+-                   , yesod-core                >= 1.2.2    && < 1.3
+-                   , persistent                >= 1.2      && < 2.1
+-                   , persistent-template       >= 1.2      && < 2.1
 -                   , transformers              >= 0.2.2
 -                   , blaze-builder
 -                   , conduit
@@ -29,5 +29,5 @@
  
  test-suite test
 -- 
-2.1.4
+2.1.1
 
diff --git a/standalone/no-th/haskell-patches/yesod-routes_remove-TH.patch b/standalone/no-th/haskell-patches/yesod-routes_remove-TH.patch
new file mode 100644
--- /dev/null
+++ b/standalone/no-th/haskell-patches/yesod-routes_remove-TH.patch
@@ -0,0 +1,170 @@
+From 8ba08c0efc035486a65f2fd33916a5da7e5210e7 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 26 Dec 2013 19:32:55 -0400
+Subject: [PATCH] remove TH
+
+---
+ Yesod/Routes/Parse.hs    |   40 +++++-----------------------------------
+ Yesod/Routes/TH.hs       |   16 ++++++++--------
+ Yesod/Routes/TH/Types.hs |   16 ----------------
+ yesod-routes.cabal       |    4 ----
+ 4 files changed, 13 insertions(+), 63 deletions(-)
+
+diff --git a/Yesod/Routes/Parse.hs b/Yesod/Routes/Parse.hs
+index 232982d..7df7750 100644
+--- a/Yesod/Routes/Parse.hs
++++ b/Yesod/Routes/Parse.hs
+@@ -2,11 +2,11 @@
+ {-# LANGUAGE DeriveDataTypeable #-}
+ {-# OPTIONS_GHC -fno-warn-missing-fields #-} -- QuasiQuoter
+ module Yesod.Routes.Parse
+-    ( parseRoutes
+-    , parseRoutesFile
+-    , parseRoutesNoCheck
+-    , parseRoutesFileNoCheck
+-    , parseType
++    --( parseRoutes
++    --, parseRoutesFile
++    --, parseRoutesNoCheck
++    --, parseRoutesFileNoCheck
++    ( parseType
+     , parseTypeTree
+     , TypeTree (..)
+     ) where
+@@ -19,42 +19,12 @@ import Yesod.Routes.TH
+ import Yesod.Routes.Overlap (findOverlapNames)
+ import Data.List (foldl')
+ 
+--- | A quasi-quoter to parse a string into a list of 'Resource's. Checks for
+--- overlapping routes, failing if present; use 'parseRoutesNoCheck' to skip the
+--- checking. See documentation site for details on syntax.
+-parseRoutes :: QuasiQuoter
+-parseRoutes = QuasiQuoter { quoteExp = x }
+-  where
+-    x s = do
+-        let res = resourcesFromString s
+-        case findOverlapNames res of
+-            [] -> lift res
+-            z -> error $ unlines $ "Overlapping routes: " : map show z
+-
+-parseRoutesFile :: FilePath -> Q Exp
+-parseRoutesFile = parseRoutesFileWith parseRoutes
+-
+-parseRoutesFileNoCheck :: FilePath -> Q Exp
+-parseRoutesFileNoCheck = parseRoutesFileWith parseRoutesNoCheck
+-
+-parseRoutesFileWith :: QuasiQuoter -> FilePath -> Q Exp
+-parseRoutesFileWith qq fp = do
+-    qAddDependentFile fp
+-    s <- qRunIO $ readUtf8File fp
+-    quoteExp qq s
+-
+ readUtf8File :: FilePath -> IO String
+ readUtf8File fp = do
+     h <- SIO.openFile fp SIO.ReadMode
+     SIO.hSetEncoding h SIO.utf8_bom
+     SIO.hGetContents h
+ 
+--- | Same as 'parseRoutes', but performs no overlap checking.
+-parseRoutesNoCheck :: QuasiQuoter
+-parseRoutesNoCheck = QuasiQuoter
+-    { quoteExp = lift . resourcesFromString
+-    }
+-
+ -- | Convert a multi-line string to a set of resources. See documentation for
+ -- the format of this string. This is a partial function which calls 'error' on
+ -- invalid input.
+diff --git a/Yesod/Routes/TH.hs b/Yesod/Routes/TH.hs
+index 7b2e50b..b05fc57 100644
+--- a/Yesod/Routes/TH.hs
++++ b/Yesod/Routes/TH.hs
+@@ -2,15 +2,15 @@
+ module Yesod.Routes.TH
+     ( module Yesod.Routes.TH.Types
+       -- * Functions
+-    , module Yesod.Routes.TH.RenderRoute
+-    , module Yesod.Routes.TH.ParseRoute
+-    , module Yesod.Routes.TH.RouteAttrs
++    -- , module Yesod.Routes.TH.RenderRoute
++    -- , module Yesod.Routes.TH.ParseRoute
++    -- , module Yesod.Routes.TH.RouteAttrs
+       -- ** Dispatch
+-    , module Yesod.Routes.TH.Dispatch
++    -- , module Yesod.Routes.TH.Dispatch
+     ) where
+ 
+ import Yesod.Routes.TH.Types
+-import Yesod.Routes.TH.RenderRoute
+-import Yesod.Routes.TH.ParseRoute
+-import Yesod.Routes.TH.RouteAttrs
+-import Yesod.Routes.TH.Dispatch
++--import Yesod.Routes.TH.RenderRoute
++--import Yesod.Routes.TH.ParseRoute
++--import Yesod.Routes.TH.RouteAttrs
++--import Yesod.Routes.TH.Dispatch
+diff --git a/Yesod/Routes/TH/Types.hs b/Yesod/Routes/TH/Types.hs
+index d0a0405..3232e99 100644
+--- a/Yesod/Routes/TH/Types.hs
++++ b/Yesod/Routes/TH/Types.hs
+@@ -31,10 +31,6 @@ instance Functor ResourceTree where
+     fmap f (ResourceLeaf r) = ResourceLeaf (fmap f r)
+     fmap f (ResourceParent a b c) = ResourceParent a (map (second $ fmap f) b) $ map (fmap f) c
+ 
+-instance Lift t => Lift (ResourceTree t) where
+-    lift (ResourceLeaf r) = [|ResourceLeaf $(lift r)|]
+-    lift (ResourceParent a b c) = [|ResourceParent $(lift a) $(lift b) $(lift c)|]
+-
+ data Resource typ = Resource
+     { resourceName :: String
+     , resourcePieces :: [(CheckOverlap, Piece typ)]
+@@ -48,9 +44,6 @@ type CheckOverlap = Bool
+ instance Functor Resource where
+     fmap f (Resource a b c d) = Resource a (map (second $ fmap f) b) (fmap f c) d
+ 
+-instance Lift t => Lift (Resource t) where
+-    lift (Resource a b c d) = [|Resource a b c d|]
+-
+ data Piece typ = Static String | Dynamic typ
+     deriving Show
+ 
+@@ -58,10 +51,6 @@ instance Functor Piece where
+     fmap _ (Static s) = (Static s)
+     fmap f (Dynamic t) = Dynamic (f t)
+ 
+-instance Lift t => Lift (Piece t) where
+-    lift (Static s) = [|Static $(lift s)|]
+-    lift (Dynamic t) = [|Dynamic $(lift t)|]
+-
+ data Dispatch typ =
+     Methods
+         { methodsMulti :: Maybe typ -- ^ type of the multi piece at the end
+@@ -77,11 +66,6 @@ instance Functor Dispatch where
+     fmap f (Methods a b) = Methods (fmap f a) b
+     fmap f (Subsite a b) = Subsite (f a) b
+ 
+-instance Lift t => Lift (Dispatch t) where
+-    lift (Methods Nothing b) = [|Methods Nothing $(lift b)|]
+-    lift (Methods (Just t) b) = [|Methods (Just $(lift t)) $(lift b)|]
+-    lift (Subsite t b) = [|Subsite $(lift t) $(lift b)|]
+-
+ resourceMulti :: Resource typ -> Maybe typ
+ resourceMulti Resource { resourceDispatch = Methods (Just t) _ } = Just t
+ resourceMulti _ = Nothing
+diff --git a/yesod-routes.cabal b/yesod-routes.cabal
+index 61980d1..33d2380 100644
+--- a/yesod-routes.cabal
++++ b/yesod-routes.cabal
+@@ -27,10 +27,6 @@ library
+                      Yesod.Routes.Class
+                      Yesod.Routes.Parse
+                      Yesod.Routes.Overlap
+-    other-modules:   Yesod.Routes.TH.Dispatch
+-                     Yesod.Routes.TH.RenderRoute
+-                     Yesod.Routes.TH.ParseRoute
+-                     Yesod.Routes.TH.RouteAttrs
+                      Yesod.Routes.TH.Types
+     ghc-options:     -Wall
+ 
+-- 
+1.7.10.4
+
diff --git a/standalone/no-th/haskell-patches/yesod-static_hack.patch b/standalone/no-th/haskell-patches/yesod-static_hack.patch
--- a/standalone/no-th/haskell-patches/yesod-static_hack.patch
+++ b/standalone/no-th/haskell-patches/yesod-static_hack.patch
@@ -1,6 +1,6 @@
-From 09d7340ff4c9b43f7c8c2ad6529a6c60871d265f Mon Sep 17 00:00:00 2001
+From 606c5f4f4b2d476d274907eb2bb8c12b60fc451f Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Fri, 3 Jul 2015 01:39:14 +0000
+Date: Wed, 21 May 2014 04:43:30 +0000
 Subject: [PATCH] remove TH
 
 ---
@@ -31,7 +31,7 @@
  -- | Use <https://github.com/mishoo/UglifyJS2 UglifyJS2> to compress javascript.
  -- Assumes @uglifyjs@ is located in the path and uses options @[\"-m\", \"-c\"]@
 diff --git a/Yesod/Static.hs b/Yesod/Static.hs
-index a18d88e..afb1cda 100644
+index 725ebf4..33eaffd 100644
 --- a/Yesod/Static.hs
 +++ b/Yesod/Static.hs
 @@ -37,8 +37,8 @@ module Yesod.Static
@@ -99,7 +99,7 @@
 @@ -267,7 +270,7 @@ staticFilesList dir fs =
  -- see if their copy is up-to-date.
  publicFiles :: Prelude.FilePath -> Q [Dec]
- publicFiles dir = mkStaticFiles' dir False
+ publicFiles dir = mkStaticFiles' dir "StaticRoute" False
 -
 +-}
  
@@ -111,17 +111,17 @@
  
 +{-
  mkStaticFiles :: Prelude.FilePath -> Q [Dec]
- mkStaticFiles fp = mkStaticFiles' fp True
+ mkStaticFiles fp = mkStaticFiles' fp "StaticRoute" True
  
-@@ -354,6 +358,7 @@ mkStaticFilesList fp fs makeHash = do
-                 [ Clause [] (NormalB $ (ConE 'StaticRoute) `AppE` f' `AppE` qs) []
+@@ -357,6 +361,7 @@ mkStaticFilesList fp fs routeConName makeHash = do
+                 [ Clause [] (NormalB $ (ConE route) `AppE` f' `AppE` qs) []
                  ]
              ]
 +-}
  
  base64md5File :: Prelude.FilePath -> IO String
  base64md5File = fmap (base64 . encode) . hashFile
-@@ -392,7 +397,7 @@ base64 = map tr
+@@ -395,7 +400,7 @@ base64 = map tr
  -- single static file at compile time.
  
  data CombineType = JS | CSS
@@ -130,7 +130,7 @@
  combineStatics' :: CombineType
                  -> CombineSettings
                  -> [Route Static] -- ^ files to combine
-@@ -426,7 +431,7 @@ combineStatics' combineType CombineSettings {..} routes = do
+@@ -429,7 +434,7 @@ combineStatics' combineType CombineSettings {..} routes = do
          case combineType of
              JS -> "js"
              CSS -> "css"
@@ -139,7 +139,7 @@
  -- | Data type for holding all settings for combining files.
  --
  -- This data type is a settings type. For more information, see:
-@@ -502,6 +507,7 @@ instance Default CombineSettings where
+@@ -505,6 +510,7 @@ instance Default CombineSettings where
  errorIntro :: [FilePath] -> [Char] -> [Char]
  errorIntro fps s = "Error minifying " ++ show fps ++ ": " ++ s
  
@@ -147,7 +147,7 @@
  liftRoutes :: [Route Static] -> Q Exp
  liftRoutes =
      fmap ListE . mapM go
-@@ -548,4 +554,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining
+@@ -551,4 +557,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining
                  -> Q Exp
  combineScripts' development cs con routes
      | development = [| mapM_ (addScript . $(return $ ConE con)) $(liftRoutes routes) |]
@@ -155,18 +155,18 @@
 +    | otherwise = [| addScript $ $(return $ ConE con) $(combineStatics' JS cs routes) |]a
 +-}
 diff --git a/yesod-static.cabal b/yesod-static.cabal
-index 4ccb0d7..8758aaa 100644
+index 2582a95..5df03b3 100644
 --- a/yesod-static.cabal
 +++ b/yesod-static.cabal
-@@ -50,7 +50,6 @@ library
-                    , system-fileio         >= 0.3
+@@ -49,7 +49,6 @@ library
                     , data-default
+                    , shakespeare-css       >= 1.0.3
                     , mime-types            >= 0.1
 -                   , hjsmin
                     , filepath              >= 1.3
                     , resourcet             >= 0.4
                     , unordered-containers  >= 0.2
-@@ -63,13 +62,6 @@ library
+@@ -62,13 +61,6 @@ library
                     , hashable              >= 1.1
  
      exposed-modules: Yesod.Static
@@ -181,13 +181,13 @@
      ghc-options:     -Wall
      extensions: TemplateHaskell
 @@ -108,7 +100,6 @@ test-suite tests
-                    , system-fileio
                     , data-default
+                    , shakespeare-css
                     , mime-types
 -                   , hjsmin
                     , filepath
                     , resourcet
                     , unordered-containers
 -- 
-2.1.4
+2.0.0.rc2
 
diff --git a/standalone/no-th/haskell-patches/yesod_hack-TH.patch b/standalone/no-th/haskell-patches/yesod_hack-TH.patch
--- a/standalone/no-th/haskell-patches/yesod_hack-TH.patch
+++ b/standalone/no-th/haskell-patches/yesod_hack-TH.patch
@@ -1,13 +1,13 @@
-From 86e7cf433fcd3386893556d690748781f46d3f03 Mon Sep 17 00:00:00 2001
+From 59091cd37958fee79b9e346fe3118d5ed7d0104b Mon Sep 17 00:00:00 2001
 From: dummy <dummy@example.com>
-Date: Fri, 3 Jul 2015 01:33:03 +0000
+Date: Thu, 16 Oct 2014 02:36:37 +0000
 Subject: [PATCH] hack TH
 
 ---
  Yesod.hs              | 19 ++++++++++++--
- Yesod/Default/Main.hs | 28 +--------------------
- Yesod/Default/Util.hs | 68 ++-------------------------------------------------
- 3 files changed, 20 insertions(+), 95 deletions(-)
+ Yesod/Default/Main.hs | 31 +----------------------
+ Yesod/Default/Util.hs | 69 ++-------------------------------------------------
+ 3 files changed, 20 insertions(+), 99 deletions(-)
 
 diff --git a/Yesod.hs b/Yesod.hs
 index b367144..fbe309c 100644
@@ -41,7 +41,7 @@
 +insert = undefined
 +
 diff --git a/Yesod/Default/Main.hs b/Yesod/Default/Main.hs
-index 2694825..5a5fbb9 100644
+index 565ed35..bf46642 100644
 --- a/Yesod/Default/Main.hs
 +++ b/Yesod/Default/Main.hs
 @@ -1,10 +1,8 @@
@@ -64,7 +64,7 @@
  import System.Log.FastLogger (LogStr, toLogStr)
  import Language.Haskell.TH.Syntax (qLocation)
  
-@@ -56,30 +54,6 @@ defaultMain load getApp = do
+@@ -55,33 +53,6 @@ defaultMain load getApp = do
  
  type LogFunc = Loc -> LogSource -> LogLevel -> LogStr -> IO ()
  
@@ -79,24 +79,27 @@
 -defaultMainLog load getApp = do
 -    config <- load
 -    (app, logFunc) <- getApp config
--    runSettings 
--        ( setPort (appPort config)
--        $ setHost (appHost config)
--        $ setOnException (const $ \e -> when (shouldLog' e) $ logFunc
+-    runSettings defaultSettings
+-        { settingsPort = appPort config
+-        , settingsHost = appHost config
+-        , settingsOnException = const $ \e -> when (shouldLog' e) $ logFunc
 -            $(qLocation >>= liftLoc)
 -            "yesod"
 -            LevelError
--            (toLogStr $ "Exception from Warp: " ++ show e))
--        $ defaultSettings
--        ) app
+-            (toLogStr $ "Exception from Warp: " ++ show e)
+-        } app
 -  where
--    shouldLog' = Warp.defaultShouldDisplayException
--
+-    shouldLog' =
+-#if MIN_VERSION_warp(2,1,3)
+-        Warp.defaultShouldDisplayException
+-#else
+-        const True
+-#endif
+ 
  -- | Run your application continously, listening for SIGINT and exiting
  --   when received
- --
 diff --git a/Yesod/Default/Util.hs b/Yesod/Default/Util.hs
-index 488312a..5476b54 100644
+index a10358e..0547424 100644
 --- a/Yesod/Default/Util.hs
 +++ b/Yesod/Default/Util.hs
 @@ -5,10 +5,9 @@
@@ -122,7 +125,7 @@
  import Text.Hamlet (HamletSettings, defaultHamletSettings)
  import Data.Maybe (catMaybes)
  import Data.Default (Default (def))
-@@ -69,68 +65,8 @@ data TemplateLanguage = TemplateLanguage
+@@ -69,68 +65,7 @@ data TemplateLanguage = TemplateLanguage
      , tlReload :: FilePath -> Q Exp
      }
  
@@ -140,7 +143,7 @@
      { wfsLanguages :: HamletSettings -> [TemplateLanguage]
      , wfsHamletSettings :: HamletSettings
      }
- 
+-
 -instance Default WidgetFileSettings where
 -    def = WidgetFileSettings defaultTemplateLanguages defaultHamletSettings
 -
@@ -159,7 +162,7 @@
 -            , func
 -            , " on "
 -            , show file
--            , ", but no templates were found."
+-            , ", but no template were found."
 -            ]
 -        exps -> return $ DoE $ map NoBindS exps
 -  where
@@ -192,5 +195,5 @@
 -                else return $ Just ex
 -        else return Nothing
 -- 
-2.1.4
+2.1.1
 
