diff --git a/Annex/SpecialRemote.hs b/Annex/SpecialRemote.hs
--- a/Annex/SpecialRemote.hs
+++ b/Annex/SpecialRemote.hs
@@ -42,10 +42,14 @@
 			| n' == n -> True
 			| otherwise -> False
 
-remoteNames :: Annex [RemoteName]
-remoteNames = do
+specialRemoteMap :: Annex (M.Map UUID RemoteName)
+specialRemoteMap = do
 	m <- Logs.Remote.readRemoteLog
-	return $ mapMaybe (M.lookup nameKey . snd) $ M.toList m
+	return $ M.fromList $ mapMaybe go (M.toList m)
+  where
+	go (u, c) = case M.lookup nameKey c of
+		Nothing -> Nothing
+		Just n -> Just (u, n)
 
 {- find the specified remote type -}
 findType :: RemoteConfig -> Either String RemoteType
diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,20 @@
+git-annex (5.20151102) unstable; urgency=medium
+
+  * Use statvfs on OSX.
+  * Symlink timestamp preservation code uses functions
+    from unix-2.7.0 when available, which should be more portable.
+  * enableremote: List uuids and descriptions of remotes that can be
+    enabled, and accept either the uuid or the description in leu if the
+    name.
+  * Catch up with current git behavior when both repo and repo.git exist;
+    it seems it now prefers repo in this case, although historically it may
+    have preferred repo.git.
+  * Fix failure to build with aws-0.13.0.
+  * When built with aws-0.13.0, the S3 special remote can be used to create
+    google nearline buckets, by setting storageclass=NEARLINE.
+
+ -- Joey Hess <id@joeyh.name>  Mon, 02 Nov 2015 12:41:20 -0400
+
 git-annex (5.20151019) unstable; urgency=medium
 
   * Fix a longstanding, but unlikely to occur bug, where dropping
@@ -49,7 +66,7 @@
     and stop recommending bittornado | bittorrent.
   * Debian: Remove build dependency on transformers library, as it is now
     included in ghc.
-  * Debian: Remote menu file, since a desktop file is provided and
+  * Debian: Remove menu file, since a desktop file is provided and
     lintian says there can be only one.
 
  -- Joey Hess <id@joeyh.name>  Mon, 19 Oct 2015 13:59:01 -0400
diff --git a/Command/EnableRemote.hs b/Command/EnableRemote.hs
--- a/Command/EnableRemote.hs
+++ b/Command/EnableRemote.hs
@@ -12,6 +12,8 @@
 import qualified Logs.Remote
 import qualified Types.Remote as R
 import qualified Annex.SpecialRemote
+import qualified Remote
+import Logs.UUID
 
 import qualified Data.Map as M
 
@@ -25,12 +27,19 @@
 seek = withWords start
 
 start :: [String] -> CommandStart
-start [] = unknownNameError "Specify the name of the special remote to enable."
+start [] = unknownNameError "Specify the special remote to enable."
 start (name:ws) = go =<< Annex.SpecialRemote.findExisting name
   where
 	config = Logs.Remote.keyValToConfig ws
 	
-	go Nothing = unknownNameError "Unknown special remote name."
+	go Nothing = do
+		m <- Annex.SpecialRemote.specialRemoteMap
+		confm <- Logs.Remote.readRemoteLog
+		v <- Remote.nameToUUID' name
+		case v of
+			Right u | u `M.member` m ->
+				go (Just (u, fromMaybe M.empty (M.lookup u confm)))
+			_ -> unknownNameError "Unknown special remote."
 	go (Just (u, c)) = do
 		let fullconfig = config `M.union` c	
 		t <- either error return (Annex.SpecialRemote.findType fullconfig)
@@ -39,11 +48,14 @@
 
 unknownNameError :: String -> Annex a
 unknownNameError prefix = do
-	names <- Annex.SpecialRemote.remoteNames
-	error $ prefix ++ "\n" ++
-		if null names
-			then "(No special remotes are currently known; perhaps use initremote instead?)"
-			else "Known special remotes: " ++ unwords names
+	m <- Annex.SpecialRemote.specialRemoteMap
+	descm <- M.unionWith Remote.addName <$> uuidMap <*> pure m
+	msg <- if M.null m
+			then pure "(No special remotes are currently known; perhaps use initremote instead?)"
+			else Remote.prettyPrintUUIDsDescs
+				"known special remotes"
+				descm (M.keys m)
+	error $ prefix ++ "\n" ++ msg
 
 perform :: RemoteType -> UUID -> R.RemoteConfig -> CommandPerform
 perform t u c = do
diff --git a/Command/Info.hs b/Command/Info.hs
--- a/Command/Info.hs
+++ b/Command/Info.hs
@@ -427,8 +427,9 @@
 		. M.toList
 		<$> cachedRepoData
 	let maxlen = maximum (map (length . snd) l)
+	descm <- lift uuidDescriptions
 	-- This also handles json display.
-	s <- lift $ prettyPrintUUIDsWith (Just "size") desc $
+	s <- lift $ prettyPrintUUIDsWith (Just "size") desc descm $
 		map (\(u, sz) -> (u, Just $ mkdisp sz maxlen)) l
 	return $ countRepoList (length l) s
   where
diff --git a/Git/Construct.hs b/Git/Construct.hs
--- a/Git/Construct.hs
+++ b/Git/Construct.hs
@@ -58,24 +58,29 @@
  - specified. -}
 fromAbsPath :: FilePath -> IO Repo
 fromAbsPath dir
-	| absoluteGitPath dir = ifM (doesDirectoryExist dir') ( ret dir' , hunt )
+	| absoluteGitPath dir = hunt
 	| otherwise =
 		error $ "internal error, " ++ dir ++ " is not absolute"
   where
 	ret = pure . newFrom . LocalUnknown
-	{- Git always looks for "dir.git" in preference to
-	 - to "dir", even if dir ends in a "/". -}
 	canondir = dropTrailingPathSeparator dir
-	dir' = canondir ++ ".git"
 	{- When dir == "foo/.git", git looks for "foo/.git/.git",
 	 - and failing that, uses "foo" as the repository. -}
 	hunt
 		| (pathSeparator:".git") `isSuffixOf` canondir =
 			ifM (doesDirectoryExist $ dir </> ".git")
 				( ret dir
-				, ret $ takeDirectory canondir
+				, ret (takeDirectory canondir)
 				)
-		| otherwise = ret dir
+		| otherwise = ifM (doesDirectoryExist dir)
+			( ret dir
+			-- git falls back to dir.git when dir doesn't
+			-- exist, as long as dir didn't end with a
+			-- path separator
+			, if dir == canondir
+				then ret (dir ++ ".git")
+				else ret dir
+			)
 
 {- Remote Repo constructor. Throws exception on invalid url.
  -
diff --git a/Remote.hs b/Remote.hs
--- a/Remote.hs
+++ b/Remote.hs
@@ -25,6 +25,7 @@
 	remoteMap,
 	remoteMap',
 	uuidDescriptions,
+	addName,
 	byName,
 	byName',
 	byNameOrGroup,
@@ -32,6 +33,7 @@
 	byNameWithUUID,
 	byCost,
 	prettyPrintUUIDs,
+	prettyPrintUUIDsDescs,
 	prettyPrintUUIDsWith,
 	prettyListUUIDs,
 	prettyUUID,
@@ -168,34 +170,41 @@
 					_ -> Right u
 			_us -> Left "Found multiple repositories with that description"
 
-{- Pretty-prints a list of UUIDs of remotes, for human display.
+{- Pretty-prints a list of UUIDs of remotes, with their descriptions,
+ - for human display.
  -
  - When JSON is enabled, also outputs a machine-readable description
  - of the UUIDs. -}
 prettyPrintUUIDs :: String -> [UUID] -> Annex String
-prettyPrintUUIDs desc uuids = prettyPrintUUIDsWith Nothing desc $
-	zip uuids (repeat (Nothing :: Maybe String))
+prettyPrintUUIDs header uuids = do
+	descm <- uuidDescriptions
+	prettyPrintUUIDsDescs header descm uuids
 
+prettyPrintUUIDsDescs :: String -> M.Map UUID RemoteName -> [UUID] -> Annex String
+prettyPrintUUIDsDescs header descm uuids =
+	prettyPrintUUIDsWith Nothing header descm
+		(zip uuids (repeat (Nothing :: Maybe String)))
+
 {- An optional field can be included in the list of UUIDs. -}
 prettyPrintUUIDsWith
 	:: (JSON v, Show v) 
 	=> Maybe String 
 	-> String 
+	-> M.Map UUID RemoteName
 	-> [(UUID, Maybe v)] 
 	-> Annex String
-prettyPrintUUIDsWith optfield desc uuids = do
+prettyPrintUUIDsWith optfield header descm uuidvals = do
 	hereu <- getUUID
-	m <- uuidDescriptions
-	maybeShowJSON [(desc, map (jsonify m hereu) uuids)]
-	return $ unwords $ map (\u -> "\t" ++ prettify m hereu u ++ "\n") uuids
+	maybeShowJSON [(header, map (jsonify hereu) uuidvals)]
+	return $ unwords $ map (\u -> "\t" ++ prettify hereu u ++ "\n") uuidvals
   where
-	finddescription m u = M.findWithDefault "" u m
-	prettify m hereu (u, optval)
+	finddescription u = M.findWithDefault "" u descm
+	prettify hereu (u, optval)
 		| not (null d) = addoptval $ fromUUID u ++ " -- " ++ d
 		| otherwise = addoptval $ fromUUID u
 	  where
 		ishere = hereu == u
-		n = finddescription m u
+		n = finddescription u
 		d
 			| null n && ishere = "here"
 			| ishere = addName n "here"
@@ -203,9 +212,9 @@
 		addoptval s = case optval of
 			Nothing -> s
 			Just val -> show val ++ ": " ++ s
-	jsonify m hereu (u, optval) = toJSObject $ catMaybes
+	jsonify hereu (u, optval) = toJSObject $ catMaybes
 		[ Just ("uuid", toJSON $ fromUUID u)
-		, Just ("description", toJSON $ finddescription m u)
+		, Just ("description", toJSON $ finddescription u)
 		, Just ("here", toJSON $ hereu == u)
 		, case (optfield, optval) of
 			(Just field, Just val) -> Just (field, showJSON val)
diff --git a/Remote/S3.hs b/Remote/S3.hs
--- a/Remote/S3.hs
+++ b/Remote/S3.hs
@@ -330,10 +330,20 @@
 					(bucket info)
 					(acl info)
 					locconstraint
+#if MIN_VERSION_aws(0,13,0)
+					storageclass
+#endif
 		writeUUIDFile c u info h
 	
 	locconstraint = mkLocationConstraint $ T.pack datacenter
 	datacenter = fromJust $ M.lookup "datacenter" c
+#if MIN_VERSION_aws(0,13,0)
+	-- "NEARLINE" as a storage class when creating a bucket is a
+	-- nonstandard extension of Google Cloud Storage.
+	storageclass = case getStorageClass c of
+		sc@(S3.OtherStorageClass "NEARLINE") -> Just sc
+		_ -> Nothing
+#endif
 
 {- Writes the UUID to an annex-uuid file within the bucket.
  -
diff --git a/Utility/Process.hs b/Utility/Process.hs
--- a/Utility/Process.hs
+++ b/Utility/Process.hs
@@ -41,9 +41,12 @@
 	devNull,
 ) where
 
-import qualified System.Process
-import qualified System.Process as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)
-import System.Process hiding (createProcess, readProcess, waitForProcess)
+import qualified Utility.Process.Shim
+import qualified Utility.Process.Shim as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)
+import Utility.Process.Shim hiding (createProcess, readProcess, waitForProcess)
+import Utility.Misc
+import Utility.Exception
+
 import System.Exit
 import System.IO
 import System.Log.Logger
@@ -58,9 +61,6 @@
 import Data.Maybe
 import Prelude
 
-import Utility.Misc
-import Utility.Exception
-
 type CreateProcessRunner = forall a. CreateProcess -> ((Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) -> IO a) -> IO a
 
 data StdHandle = StdinHandle | StdoutHandle | StderrHandle
@@ -372,7 +372,7 @@
 createProcess :: CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
 createProcess p = do
 	debugProcess p
-	System.Process.createProcess p
+	Utility.Process.Shim.createProcess p
 
 -- | Debugging trace for a CreateProcess.
 debugProcess :: CreateProcess -> IO ()
@@ -392,6 +392,6 @@
 -- | Wrapper around 'System.Process.waitForProcess' that does debug logging.
 waitForProcess ::  ProcessHandle -> IO ExitCode
 waitForProcess h = do
-	r <- System.Process.waitForProcess h
+	r <- Utility.Process.Shim.waitForProcess h
 	debugM "Utility.Process" ("process done " ++ show r)
 	return r
diff --git a/Utility/Process/Shim.hs b/Utility/Process/Shim.hs
new file mode 100644
--- /dev/null
+++ b/Utility/Process/Shim.hs
@@ -0,0 +1,3 @@
+module Utility.Process.Shim (module X) where
+
+import System.Process as X
diff --git a/Utility/Touch.hsc b/Utility/Touch.hsc
--- a/Utility/Touch.hsc
+++ b/Utility/Touch.hsc
@@ -5,7 +5,7 @@
  - License: BSD-2-clause
  -}
 
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, CPP #-}
 
 module Utility.Touch (
 	TimeSpec(..),
@@ -13,6 +13,26 @@
 	touch
 ) where
 
+#if MIN_VERSION_unix(2,7,0)
+
+import System.Posix.Files
+import System.Posix.Types
+
+newtype TimeSpec = TimeSpec EpochTime
+
+{- Changes the access and modification times of an existing file.
+   Can follow symlinks, or not. Throws IO error on failure. -}
+touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO ()
+touchBoth file (TimeSpec atime) (TimeSpec mtime) follow
+	| follow = setFileTimes file atime mtime
+	| otherwise = setSymbolicLinkTimesHiRes file (realToFrac atime) (realToFrac mtime)
+
+touch :: FilePath -> TimeSpec -> Bool -> IO ()
+touch file mtime = touchBoth file mtime mtime
+
+#else
+{- Compatability interface for old version of unix, to be removed eventally. -}
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -35,8 +55,6 @@
 
 newtype TimeSpec = TimeSpec CTime
 
-{- Changes the access and modification times of an existing file.
-   Can follow symlinks, or not. Throws IO error on failure. -}
 touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO ()
 
 touch :: FilePath -> TimeSpec -> Bool -> IO ()
@@ -122,4 +140,6 @@
 #warning "utimensat and lutimes not available; building without symlink timestamp preservation support"
 touchBoth _ _ _ _ = return ()
 #endif
+#endif
+
 #endif
diff --git a/Utility/libdiskfree.c b/Utility/libdiskfree.c
--- a/Utility/libdiskfree.c
+++ b/Utility/libdiskfree.c
@@ -7,14 +7,6 @@
 
 /* Include appropriate headers for the OS, and define what will be used to
  * check the free space. */
-#if defined(__APPLE__)
-# define _DARWIN_FEATURE_64_BIT_INODE 1
-# include <sys/param.h>
-# include <sys/mount.h>
-# define STATCALL statfs
-# define STATSTRUCT statfs64
-# define BSIZE f_bsize
-#else
 #if defined (__FreeBSD__)
 # include <sys/param.h>
 # include <sys/mount.h>
@@ -26,8 +18,8 @@
 # warning free space checking code not available for Android
 # define UNKNOWN
 #else
-#if defined (__linux__) || defined (__FreeBSD_kernel__) || (defined (__SVR4) && defined (__sun))
-/* Linux or Debian kFreeBSD or Solaris */
+#if defined (__linux__) || defined (__APPLE__) || defined (__FreeBSD_kernel__) || (defined (__SVR4) && defined (__sun))
+/* Linux or OSX or Debian kFreeBSD or Solaris */
 /* This is a POSIX standard, so might also work elsewhere too. */
 # include <sys/statvfs.h>
 # define STATCALL statvfs
@@ -36,7 +28,6 @@
 #else
 # warning free space checking code not available for this OS
 # define UNKNOWN
-#endif
 #endif
 #endif
 #endif
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,20 @@
+git-annex (5.20151102) unstable; urgency=medium
+
+  * Use statvfs on OSX.
+  * Symlink timestamp preservation code uses functions
+    from unix-2.7.0 when available, which should be more portable.
+  * enableremote: List uuids and descriptions of remotes that can be
+    enabled, and accept either the uuid or the description in leu if the
+    name.
+  * Catch up with current git behavior when both repo and repo.git exist;
+    it seems it now prefers repo in this case, although historically it may
+    have preferred repo.git.
+  * Fix failure to build with aws-0.13.0.
+  * When built with aws-0.13.0, the S3 special remote can be used to create
+    google nearline buckets, by setting storageclass=NEARLINE.
+
+ -- Joey Hess <id@joeyh.name>  Mon, 02 Nov 2015 12:41:20 -0400
+
 git-annex (5.20151019) unstable; urgency=medium
 
   * Fix a longstanding, but unlikely to occur bug, where dropping
@@ -49,7 +66,7 @@
     and stop recommending bittornado | bittorrent.
   * Debian: Remove build dependency on transformers library, as it is now
     included in ghc.
-  * Debian: Remote menu file, since a desktop file is provided and
+  * Debian: Remove menu file, since a desktop file is provided and
     lintian says there can be only one.
 
  -- Joey Hess <id@joeyh.name>  Mon, 19 Oct 2015 13:59:01 -0400
diff --git a/doc/bugs/.mdwn b/doc/bugs/.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/.mdwn
@@ -0,0 +1,250 @@
+### Please describe the problem.
+
+For shared repositories git annex refuses to move file out of repository (git annex move --to) if user triggering the move is not the owner of the file.
+
+### What steps will reproduce the problem?
+
+ * Init two shared repositories and create a file
+ * Modify that file in repo1 as user u1
+ * Move the file to repo2 as "repository maintenance" user u2
+     - this gives permission denied error
+
+Alternatively -- mabye better understandable usecase(repository maintainer moves unused files to backup):
+
+ * Init two shared repositories and create a file
+ * Modify that file in repo1 as user u1
+ * Modify that file in repo1 a second time (regardless which user) -- this makes the version edited by u1 unused
+ * Display unused files as repository maintenance user u2  
+     - this gives permission denied error
+ * Move unused files to repo2 as "repository maintenance" user u2 
+     - this gives permission denied error
+
+### What version of git-annex are you using? On what operating system?
+
+[[!format sh """
+stefan@atom-linux:/tmp/git-annex-test/a$ git --version
+git version 2.6.2
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex version
+git-annex version: 5.20150610+gitg608172f-1~ndall+1
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E MD5E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 MD5 WORM URL
+remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+stefan@atom-linux:/tmp/git-annex-test/a$ uname -a
+Linux atom-linux 3.13.0-66-generic #108-Ubuntu SMP Wed Oct 7 15:21:40 UTC 2015 i686 i686 i686 GNU/Linux
+"""]]
+
+### Please provide any additional information below.
+
+[[!format sh """
+
+# init two shared repositories and create a file "file.txt"
+
+stefan@atom-linux:/tmp/git-annex-test$ mkdir a
+stefan@atom-linux:/tmp/git-annex-test$ mkdir b
+stefan@atom-linux:/tmp/git-annex-test$ sudo chown :fileadmin-data *
+stefan@atom-linux:/tmp/git-annex-test$ sudo chmod g+s *
+stefan@atom-linux:/tmp/git-annex-test$ cd a
+stefan@atom-linux:/tmp/git-annex-test/a$ git init --shared .
+Initialized empty shared Git repository in /tmp/git-annex-test/a/.git/
+stefan@atom-linux:/tmp/git-annex-test/a$ git config core.sharedrepository group
+stefan@atom-linux:/tmp/git-annex-test/a$ echo "test" >> file.txt
+stefan@atom-linux:/tmp/git-annex-test/a$ ls -al
+total 16
+drwxrwsr-x 3 stefan fileadmin-data 4096 Nov  1 16:41 .
+drwxrwxr-x 4 stefan stefan         4096 Nov  1 16:39 ..
+-rw-rw-r-- 1 stefan fileadmin-data    5 Nov  1 16:41 file.txt
+drwxrwsr-x 7 stefan fileadmin-data 4096 Nov  1 16:40 .git
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex init
+init  ok
+(recording state in git...)
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex add file.txt
+add file.txt ok
+(recording state in git...)
+stefan@atom-linux:/tmp/git-annex-test/a$ git commit -m "new file"
+[master (root-commit) 7aeaa5f] new file
+ 1 file changed, 1 insertion(+)
+ create mode 120000 file.txt
+stefan@atom-linux:/tmp/git-annex-test/a$ cd ..
+stefan@atom-linux:/tmp/git-annex-test$ cd b
+stefan@atom-linux:/tmp/git-annex-test/b$ git clone -o a ssh://127.0.0.1/tmp/git-annex-test/a .
+Cloning into '.'...
+remote: Counting objects: 13, done.
+remote: Compressing objects: 100% (9/9), done.
+remote: Total 13 (delta 0), reused 0 (delta 0)
+Receiving objects: 100% (13/13), done.
+Checking connectivity... done.
+stefan@atom-linux:/tmp/git-annex-test/b$ git config core.sharedrepository group
+stefan@atom-linux:/tmp/git-annex-test/b$ git annex init "B"
+init B (merging a/git-annex into git-annex...)
+(recording state in git...)
+ok
+(recording state in git...)
+stefan@atom-linux:/tmp/git-annex-test/b$ cd ..
+stefan@atom-linux:/tmp/git-annex-test$ cd a
+stefan@atom-linux:/tmp/git-annex-test/a$ git remote add b ssh://127.0.0.1/tmp/git-annex-test/b
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex sync
+commit  ok
+pull b
+remote: Counting objects: 6, done.
+remote: Compressing objects: 100% (5/5), done.
+remote: Total 6 (delta 0), reused 1 (delta 0)
+Unpacking objects: 100% (6/6), done.
+From ssh://127.0.0.1/tmp/git-annex-test/b
+ * [new branch]      git-annex  -> b/git-annex
+ * [new branch]      master     -> b/master
+ok
+(merging b/git-annex into git-annex...)
+push b
+Total 0 (delta 0), reused 0 (delta 0)
+To ssh://127.0.0.1/tmp/git-annex-test/b
+ * [new branch]      git-annex -> synced/git-annex
+ * [new branch]      master -> synced/master
+ok
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b
+move file.txt (checking b...) (to b...)
+SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2.txt
+              5 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)
+ok
+(recording state in git...)
+
+## ok, everything fine so far - we have a file "file.txt" which was created in a and moved to b successfully. 
+## Now we go to a different user account and modify "file.txt"
+## -------------------------------------- userswitch
+
+unison@atom-linux:/tmp/git-annex-test/a$ git annex get file.txt
+get file.txt (from b...)
+SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2.txt
+              5 100%    4.88kB/s    0:00:00 (xfr#1, to-chk=0/1)
+ok
+(recording state in git...)
+unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt
+unlock file.txt (copying...) ok
+unison@atom-linux:/tmp/git-annex-test/a$ ls -al
+total 16
+drwxrwsr-x 3 stefan fileadmin-data 4096 Nov  1 16:48 .
+drwxrwxr-x 4 stefan stefan         4096 Nov  1 16:39 ..
+-rw-rw-r-- 1 unison fileadmin-data    5 Nov  1 16:47 file.txt
+drwxrwsr-x 9 stefan fileadmin-data 4096 Nov  1 16:44 .git
+unison@atom-linux:/tmp/git-annex-test/a$ echo "a change by unison user" >> file.txt
+unison@atom-linux:/tmp/git-annex-test/a$ git annex add .
+add file.txt ok
+(recording state in git...)
+unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "unison change"
+[master 37bd55d] unison change
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+## now the original user / repository maintainer wants to move the file 
+## out to b which gives an permission denied error for setFileMode
+## git annex does copy it to b, but not remove it from a
+## -------------------------------------- userswitch
+
+stefan@atom-linux:/tmp/git-annex-test/a$ ls -al
+total 16
+drwxrwsr-x 3 stefan fileadmin-data 4096 Nov  1 16:48 .
+drwxrwxr-x 4 stefan stefan         4096 Nov  1 16:39 ..
+lrwxrwxrwx 1 unison fileadmin-data  188 Nov  1 16:48 file.txt -> .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.tx
+t/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
+drwxrwsr-x 9 stefan fileadmin-data 4096 Nov  1 16:48 .git
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b
+move file.txt (checking b...) (to b...)
+SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
+             29 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)
+git-annex: failed to lock content: .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29--6aec68aad4745c6
+eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt: setFileMode: permission denied (Operation not permitted)
+
+# which makes sense - the file is owned by other user:
+stefan@atom-linux:/tmp/git-annex-test/a$ ls -al .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29--6
+aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
+-r--r--r-- 1 unison fileadmin-data 29 Nov  1 16:48 .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29-
+-6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
+
+## the last editor of the file can move it, though:
+## -------------------------------------- userswitch
+unison@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b
+move file.txt (checking b...) ok
+(recording state in git...)
+
+## continued - for second usecase...
+## edit file two more times as unison user:
+
+unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt
+unlock file.txt (copying...) ok
+unison@atom-linux:/tmp/git-annex-test/a$ echo "another unison modification" >> file.txt
+unison@atom-linux:/tmp/git-annex-test/a$ ls
+file.txt
+unison@atom-linux:/tmp/git-annex-test/a$ git annex add
+add file.txt ok
+(recording state in git...)
+unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "another unison change"
+[master df85491] another unison change
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt
+unlock file.txt (copying...) ok
+(recording state in git...)
+unison@atom-linux:/tmp/git-annex-test/a$ echo "changes once more" >> file.txt
+unison@atom-linux:/tmp/git-annex-test/a$ git annex add .
+add file.txt ok
+(recording state in git...)
+unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "1 more"
+[master 099a2c7] 1 more
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+unison@atom-linux:/tmp/git-annex-test/a$ git annex unused
+unused . (checking for unused data...) (checking b/master...) (checking master...)
+  Some annexed data is no longer used by any files:
+    NUMBER  KEY
+    1       SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
+    2       SHA256E-s57--dc131ed3874c3b51a6801c43f5d5c0706a9aea58134459eeddf3436626adc89f.txt
+  (To see where data was previously used, try: git log --stat -S'KEY')
+
+  To remove unwanted data: git-annex dropunused NUMBER
+
+ok
+
+## switch to repository maintenance user and list unused:
+## -------------------------------------- userswitch
+
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex unused --debug
+unused . (checking for unused data...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","ls-files","--cached","--others","-z","
+--","."]
+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","symbolic-ref","-q","HEAD"]
+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--hash","refs/heads/master"]
+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref"]
+(checking b/master...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","diff-index","-z","--raw","--no-renames","-l0","refs/remotes/b/master","--"]
+[2015-11-01 17:35:09 CET] chat: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","cat-file","--batch"]
+(checking master...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
+[2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","diff-index","-z","--raw","--no-renames","-l0","refs/heads/master","--"]
+
+  Some annexed data is no longer used by any files:
+    NUMBER  KEY
+    1       SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
+    2       SHA256E-s57--dc131ed3874c3b51a6801c43f5d5c0706a9aea58134459eeddf3436626adc89f.txt
+  (To see where data was previously used, try: git log --stat -S'KEY')
+
+  To remove unwanted data: git-annex dropunused NUMBER
+
+
+git-annex: .git/annex/unused: openFile: permission denied (Permission denied)
+failed
+git-annex: unused: 1 failed
+
+
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex move --unused --to b
+git-annex: .git/annex/unused: openFile: permission denied (Permission denied)
+stefan@atom-linux:/tmp/git-annex-test/a$ git annex move --debug --unused --to b
+[2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","git-annex"]
+[2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--hash","refs/heads/git-annex"]
+[2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","log","refs/heads/git-annex..4cdcc1b4550b2737e018d382022f3ce3e1dcb029","-n1","
+--pretty=%H"]
+[2015-11-01 17:38:48 CET] chat: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","cat-file","--batch"]
+git-annex: .git/annex/unused: openFile: permission denied (Permission denied)
+
+# End of transcript or log.
+"""]]
+
diff --git a/doc/bugs/Files_in___34__here__34___not_known_to_git_annex.mdwn b/doc/bugs/Files_in___34__here__34___not_known_to_git_annex.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/Files_in___34__here__34___not_known_to_git_annex.mdwn
@@ -0,0 +1,50 @@
+### Please describe the problem.
+
+Not sure how I created this mess. But here, I have my git annex repository:
+
+    $ cat .git/config 
+    [annex]
+    	uuid = 206e9fb3-0c68-4c45-a3d7-dad1d9425d28
+    	version = 5
+
+And judging from this, I would expect the file to be present:
+
+    $ git annex log Movies/Bad\ Taste\ -\ Englisch.avi 
+    - 2015-10-28 20:51:42 Movies/Bad Taste - Englisch.avi | f53b3f8a-0f04-11e1-93ae-136c6986c818 -- jeff-media [kent]
+    + 2014-10-13 00:12:50 Movies/Bad Taste - Englisch.avi | 206e9fb3-0c68-4c45-a3d7-dad1d9425d28 -- 1T
+    + 2011-12-24 13:38:23 Movies/Bad Taste - Englisch.avi | 9dd8c662-296d-11e1-b28a-f3c66fd5e263 -- 500G
+    - 2011-12-18 14:59:38 Movies/Bad Taste - Englisch.avi | 9dd8c662-296d-11e1-b28a-f3c66fd5e263 -- 500G
+    + 2011-12-18 12:48:17 Movies/Bad Taste - Englisch.avi | 9dd8c662-296d-11e1-b28a-f3c66fd5e263 -- 500G
+    + 2011-11-14 22:15:57 Movies/Bad Taste - Englisch.avi | f53b3f8a-0f04-11e1-93ae-136c6986c818 -- jeff-media [kent]
+    $ ls -l Movies/Bad\ Taste\ -\ Englisch.avi
+    lrwxrwxrwx 1 jojo jojo 135 Okt  7  2014 Movies/Bad Taste - Englisch.avi -> ../.git/annex/objects/Wx/P0/WORM-s723351552-m1100368371--Bad Taste - Englisch.avi/WORM-s723351552-m1100368371--Bad Taste - Englisch.avi
+    $ ls -shL Movies/Bad\ Taste\ -\ Englisch.avi
+    690M Movies/Bad Taste - Englisch.avi
+
+But git annex seems to be very confused:
+
+    $ git annex whereis Movies/Bad\ Taste\ -\ Englisch.avi 
+    whereis Movies/Bad Taste - Englisch.avi (0 copies) failed
+    git-annex: whereis: 1 failed
+    $ git annex list Movies/Bad\ Taste\ -\ Englisch.avi 
+    here
+    |kent-direct
+    ||kent
+    |||web
+    ||||bittorrent
+    |||||
+    _____ Movies/Bad Taste - Englisch.avi
+    $ git annex fsck  Movies/Bad\ Taste\ -\ Englisch.avi 
+    fsck Movies/Bad Taste - Englisch.avi (fixing location log) 
+      ** No known copies exist of Movies/Bad Taste - Englisch.avi
+    failed
+    (recording state in git...)
+    git-annex: fsck: 1 failed
+
+The `fsck` call does not change anything about the problem.
+
+File system is ext4.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20151019-1, Debian unstable.
diff --git a/doc/bugs/Support_non-default_storage_classes_with_Google_Cloud_Storage.mdwn b/doc/bugs/Support_non-default_storage_classes_with_Google_Cloud_Storage.mdwn
--- a/doc/bugs/Support_non-default_storage_classes_with_Google_Cloud_Storage.mdwn
+++ b/doc/bugs/Support_non-default_storage_classes_with_Google_Cloud_Storage.mdwn
@@ -90,3 +90,5 @@
 [2015-05-31 17:38:22 EDT] Response metadata: S3: request ID=<none>, x-amz-id-2=<none>
 git-annex: S3Error {s3StatusCode = Status {statusCode = 400, statusMessage = "Bad Request"}, s3ErrorCode = "InvalidArgument", s3ErrorMessage = "Invalid argument.", s3ErrorResource = Nothing, s3ErrorHostId = Nothing, s3ErrorAccessKeyId = Nothing, s3ErrorStringToSign = Nothing}
 """]]
+
+> [[done]], see comments --[[Joey]] 
diff --git a/doc/bugs/git_annex_assistant_cannot_run_rsync___40__windows__41__.mdwn b/doc/bugs/git_annex_assistant_cannot_run_rsync___40__windows__41__.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_cannot_run_rsync___40__windows__41__.mdwn
@@ -0,0 +1,22 @@
+### Please describe the problem.
+
+When the assistant decides to sync the content of a file, it launches rsync. Windows shows an Application Error popup which says this:
+
+    The application was unable to start correctly (0xc000007b).
+
+Presumably it's crashing. 
+
+### What version of git-annex are you using? On what operating system?
+
+    git-annex version: 5.20151019-gcc50c00
+    build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA     TorrentParser Database
+    key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 SHA1E SHA1 MD5E MD5 WORM URL
+    remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
+
+### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
+
+Not on windows so far :)
+
+> The page doesn't suggest getting the 32 bit version, it just says to get
+> it. Implication should be that's the version that works. I've noted that
+> this is an important requirement now. [[done]] --[[Joey]]
diff --git a/doc/design/assistant/polls/Android_default_directory.mdwn b/doc/design/assistant/polls/Android_default_directory.mdwn
--- a/doc/design/assistant/polls/Android_default_directory.mdwn
+++ b/doc/design/assistant/polls/Android_default_directory.mdwn
@@ -4,4 +4,4 @@
 want the first time they run it, but to save typing on android, anything
 that gets enough votes will be included in a list of choices as well.
 
-[[!poll open=yes expandable=yes 72 "/sdcard/annex" 6 "Whole /sdcard" 7 "DCIM directory (photos and videos only)" 2 "Same as for regular git-annex. ~/annex/"]]
+[[!poll open=yes expandable=yes 73 "/sdcard/annex" 6 "Whole /sdcard" 7 "DCIM directory (photos and videos only)" 2 "Same as for regular git-annex. ~/annex/"]]
diff --git a/doc/devblog/day_328__git-annex_is_five.mdwn b/doc/devblog/day_328__git-annex_is_five.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day_328__git-annex_is_five.mdwn
@@ -0,0 +1,15 @@
+The first release of git-annex was 5 years ago.
+
+There have been a total of 187 releases, growing to 50k lines of haskell
+code developed by 28 contributors (and another 10 or so external special
+remote contributors). Approximately 2000 people have posted questions,
+answers, bugs, todos, etc to this website, with 18900 posts in total.
+
+I've been funded for 3 of the 5 years to work on git-annex, with support
+from [[1451 individuals and 6 organizations|thanks]].
+
+Released a new version today with rather more significant changes than usual
+(see recent devblog entries).
+
+The [2015 git-annex user survey](http://git-annex-survey.branchable.com/polls/2015/)
+is now live.
diff --git a/doc/devblog/day__329-330__a_rising_tide.mdwn b/doc/devblog/day__329-330__a_rising_tide.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/devblog/day__329-330__a_rising_tide.mdwn
@@ -0,0 +1,15 @@
+Things have been relatively quiet on git-annex this week. I've been
+distracted with other projects. But, a library that I developed for
+[propellor](http://propellor.branchable.com/) to help with 
+[concurrent console output](http://joeyh.name/blog/entry/concurrent_output_library/)
+has been rapidly developing into a kind of
+[tiling region manager for the console](http://joeyh.name/blog/entry/a_tiling_region_manager_for_the_console),
+which may be just the thing git-annex needs on the concurrent
+download progress display front.
+
+After seeing it could go that way, and working on it around the clock to
+add features git-annex will need, here's a teaser of its abilities.
+
+<img src="https://joeyh.name/code/concurrent-output/aptdemo.gif">
+
+Probably coming soonish to a `git-annex -J` near you!
diff --git a/doc/forum/Getting_metadata.mdwn b/doc/forum/Getting_metadata.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/forum/Getting_metadata.mdwn
@@ -0,0 +1,30 @@
+Hi!
+
+what's wrong here with getting metadata back:
+
+    # setup
+    $ git init .
+    $ git annex init
+    init  ok
+    (Recording state in git...)
+    $ touch testfile
+    $ git add testfile 
+    $ git commit -m "imp"
+    [master (Basis-Commit) 55c385e] imp
+     1 file changed, 0 insertions(+), 0 deletions(-)
+     create mode 100644 testfile
+
+    # set metadata
+    $ git annex metadata testfile --set key=val
+
+    # retrieval doesn't work
+    $ git annex metadata testfile --get key
+    $ git annex metadata testfile
+    $ 
+
+What I would expect here is to get "val" back.
+
+What am I doing wrong?
+
+
+Thanks!
diff --git a/doc/git-annex-assistant.mdwn b/doc/git-annex-assistant.mdwn
--- a/doc/git-annex-assistant.mdwn
+++ b/doc/git-annex-assistant.mdwn
@@ -25,6 +25,8 @@
   Wait N seconds before running the startup scan. This process can
   be expensive and you may not want to run it immediately upon login.
 
+  When --autostart is used, defaults to --startdelay=5.
+
 * `--foreground`
 
   Avoid forking to the background.
diff --git a/doc/git-annex-enableremote.mdwn b/doc/git-annex-enableremote.mdwn
--- a/doc/git-annex-enableremote.mdwn
+++ b/doc/git-annex-enableremote.mdwn
@@ -4,7 +4,7 @@
 
 # SYNOPSIS
 
-git annex enableremote `name [param=value ...]`
+git annex enableremote `name|uuid|desc [param=value ...]`
 
 # DESCRIPTION
 
@@ -15,7 +15,8 @@
 The name of the remote is the same name used when originally
 creating that remote with `git annex initremote`. Run 
 `git annex enableremote` without any name to get a list of
-special remote names.
+special remote names. Or you can specify the uuid or description of the
+remote.
   
 Some special remotes may need parameters to be specified every time they are
 enabled. For example, the directory special remote requires a directory=
diff --git a/doc/install/Windows.mdwn b/doc/install/Windows.mdwn
--- a/doc/install/Windows.mdwn
+++ b/doc/install/Windows.mdwn
@@ -1,7 +1,7 @@
 git-annex now does Windows!
 
 * First, [install git for Windows](http://git-scm.com/downloads)  
-  Get the 32 bit version not the 64 bit version.  
+  Important: **Get the 32 bit version not the 64 bit version.**  
   (Note that msysgit is no longer supported.)
 * Then, [install git-annex](https://downloads.kitenet.net/git-annex/windows/current/)
 
diff --git a/doc/news/2015_git-annex_user_survey.mdwn b/doc/news/2015_git-annex_user_survey.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/news/2015_git-annex_user_survey.mdwn
@@ -0,0 +1,5 @@
+Similar to the yearly git user survey, there is a
+[2015 git-annex user survey](http://git-annex-survey.branchable.com/polls/2015/).
+
+If you use git-annex,
+please take a few minutes to answer the questions!
diff --git a/doc/news/version_5.20150916.mdwn b/doc/news/version_5.20150916.mdwn
deleted file mode 100644
--- a/doc/news/version_5.20150916.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-git-annex 5.20150916 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix Windows build to work with ghc 7.10.
-   * init: Fix reversion in detection of repo made with git clone --shared
-   * info: Support querying info of individual files in direct mode.
-   * unused: Fix reversion in 5.20150727 that broke parsing of the
-     --unused-refspec option. Thanks, Øyvind A. Holm.
-   * Make full option parsing be done when not in a git repo, so --help
-     can be displayed for commands that require a git repo, etc.
-   * fsck: Work around bug in persistent that broke display of
-     problematically encoded filenames on stderr when using --incremental.
-   * When gpg.program is configured, it's used to get the command to run
-     for gpg. Useful on systems that have only a gpg2 command or want to
-     use it instead of the gpg command.
-   * Windows: Switched to using git for Windows, rather than msysgit.
-     Using msysgit with git-annex is no longer supported.
-   * Windows: Even when the user neglects to tell the git installer to
-     add git to PATH, git-annex will still work from within the git bash
-     shell, and the webapp can be used too.
-   * sync: Add --no-commit, --no-pull, --no-push options to turn off parts of
-     the sync process, as well as supporting --commit, --pull, --push, and
-     --no-content options to specify the (current) default behavior.
-   * annex.hardlink extended to also try to use hard links when copying from
-     the repository to a remote.
-   * Improve bash completion, so it completes names of remotes and backends
-     in appropriate places.
-   * Special remotes configured with autoenable=true will be automatically
-     enabled when git-annex init is run.
-   * Fix bug in combination of preferred and required content settings.
-     When one was set to the empty string and the other set to some expression,
-     this bug caused all files to be wanted, instead of only files matching
-     the expression."""]]
diff --git a/doc/news/version_5.20151019.mdwn b/doc/news/version_5.20151019.mdwn
--- a/doc/news/version_5.20151019.mdwn
+++ b/doc/news/version_5.20151019.mdwn
@@ -49,5 +49,5 @@
      and stop recommending bittornado | bittorrent.
    * Debian: Remove build dependency on transformers library, as it is now
      included in ghc.
-   * Debian: Remote menu file, since a desktop file is provided and
+   * Debian: Remove menu file, since a desktop file is provided and
      lintian says there can be only one."""]]
diff --git a/doc/news/version_5.20151102.mdwn b/doc/news/version_5.20151102.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/news/version_5.20151102.mdwn
@@ -0,0 +1,14 @@
+git-annex 5.20151102 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Use statvfs on OSX.
+   * Symlink timestamp preservation code uses functions
+     from unix-2.7.0 when available, which should be more portable.
+   * enableremote: List uuids and descriptions of remotes that can be
+     enabled, and accept either the uuid or the description in leu if the
+     name.
+   * Catch up with current git behavior when both repo and repo.git exist;
+     it seems it now prefers repo in this case, although historically it may
+     have preferred repo.git.
+   * Fix failure to build with aws-0.13.0.
+   * When built with aws-0.13.0, the S3 special remote can be used to create
+     google nearline buckets, by setting storageclass=NEARLINE."""]]
diff --git a/doc/polls.mdwn b/doc/polls.mdwn
--- a/doc/polls.mdwn
+++ b/doc/polls.mdwn
@@ -1,2 +1,3 @@
+* [[2015 git-annex user survey|2015]]
 * [[2013 git-annex user survey|2013]]
 * [[old polls|design/assistant/polls]]
diff --git a/doc/special_remotes/S3.mdwn b/doc/special_remotes/S3.mdwn
--- a/doc/special_remotes/S3.mdwn
+++ b/doc/special_remotes/S3.mdwn
@@ -43,9 +43,14 @@
 
   When using Amazon S3, if you have configured git-annex to preserve
   multiple [[copies]], consider setting this to "REDUCED_REDUNDANCY"
-  to save money. Or, if the remote will be used for backup or archival,
+  to save money. 
+  
+  Or, if the remote will be used for backup or archival,
   and so its files are Infrequently Accessed, "STANDARD_IA" is also a
-  good choice to save money.
+  good choice to save money. (Requires a git-annex built with aws-0.13.0)
+
+  When using Google Cloud Storage, to make a nearline bucket, set this to
+  "NEARLINE". (Requires a git-annex built with aws-0.13.0)
 
   Note that changing the storage class of an existing S3 remote will
   affect new objects sent to the remote, but not objects already
diff --git a/doc/special_remotes/comment_25_d9f298f284d66fb0aff029eb01f1ce23._comment b/doc/special_remotes/comment_25_d9f298f284d66fb0aff029eb01f1ce23._comment
new file mode 100644
--- /dev/null
+++ b/doc/special_remotes/comment_25_d9f298f284d66fb0aff029eb01f1ce23._comment
@@ -0,0 +1,90 @@
+[[!comment format=mdwn
+ username="craig@6ddb6e2c94325e18a0d631a06e63fdc111ab1f12"
+ nickname="craig"
+ subject="Replicating my key for encrypted special remotes"
+ date="2015-10-25T19:00:56Z"
+ content="""
+Cool, thanks.  I see the gpg key in remote.log in the git-annex branch, so it's saved, which is the thing I care about most.  I'm now sure I could recover my data in a DR scenario.  However, I seem to be missing something with enableremote and how this is all supposed to work.
+
+My main repo is ~/local/pics and here's the result of git annex info glacier:
+
+    11:45:24 [24623]; git annex info glacier
+    remote: glacier
+    description: glacier backup [glacier]
+    uuid: e34c5f10-2a97-4477-a248-b96e050557dc
+    trust: semitrusted
+    cost: 1050.0
+    type: glacier
+    creds: stored locally
+    glacier vault: ...snip...
+    encryption: encrypted (encryption key stored in git repository)
+    chunking: none
+    remote annex keys: 27519
+    remote annex size: 47.95 gigabytes
+
+I used git annex assistant to create a manual mode remote on my usb key.  This created a annex-pics directory on the usb key with a bare repo.
+
+    11:50:50 [24626]; pwd
+    /media/craig/KINGSTON/annex-pics
+    11:50:51 [24627]; ls
+    annex  branches  config  description  HEAD  hooks  info  objects  refs
+
+I then did a git clone from the bare repo into a tmp dir:
+
+    11:52:48 [24670]; git clone /media/craig/KINGSTON/annex-pics annex-pics
+    Cloning into 'annex-pics'...
+    done.
+
+But when I enable the glacier remote, which I'd have to do in a DR scenario, I get an error:
+
+    11:53:29 [24672]; git annex enableremote glacier
+    (merging origin/git-annex into git-annex...)
+    (recording state in git...)
+    git-annex: Unknown special remote name.
+    Known special remotes: gitannexpics
+
+It knows about the remote, but hasn't assigned a name to it:
+
+    11:53:36 [24673]; git annex info glacier
+    git-annex: glacier is not a directory or an annexed file or a remote or a uuid
+    11:53:49 [24674]; git annex info
+    repository mode: indirect
+    trusted repositories: 0
+    semitrusted repositories: 7
+            00000000-0000-0000-0000-000000000001 -- web
+            00000000-0000-0000-0000-000000000002 -- bittorrent
+            082b6805-3264-4f1b-8e15-a5cd0cef3e7f -- craig@jester:~/local/pics
+            71132283-1a3b-47f8-a548-1d5fb2f645d4 -- craig@jester:~/tmp/annex-pics [here]
+            a4598ad6-390c-40cf-a71d-edfe7511b20c -- craig@storage:~/local/pics
+            d4ee044d-e0e0-4012-b6cd-353da37b9867 -- KINGSTON [origin]
+            e34c5f10-2a97-4477-a248-b96e050557dc -- glacier backup
+    untrusted repositories: 1
+            3796b34c-61af-4e45-a276-07097c1ac6f9 -- craig@desktop:~/local/pics
+    transfers in progress: none
+    available local disk space: 414.4 gigabytes (+1 megabyte reserved)
+    local annex keys: 0
+    local annex size: 0 bytes
+    annexed files in working tree: 33204
+    size of annexed files in working tree: 48.38 gigabytes (+ 148 unknown size)
+    bloom filter size: 32 mebibytes (0% full)
+    backend usage: 
+            SHA1: 148
+            SHA256E: 33056
+
+Doing a git annex info on the uuid does something, but I'm not clear what it does:
+
+    11:53:56 [24675]; git annex info e34c5f10-2a97-4477-a248-b96e050557dc
+    remote annex keys: 27519
+    remote annex size: 47.95 gigabytes
+
+An enable remote on the uuid doesn't work either:
+
+    11:57:33 [24678]; git annex enableremote e34c5f10-2a97-4477-a248-b96e050557dc
+    git-annex: Unknown special remote name.
+    Known special remotes: gitannexpics
+
+I feel like I'm missing a step.  What am I missing?
+
+Thanks,
+Craig
+"""]]
diff --git a/doc/special_remotes/comment_26_606c1bee71a265f9df3a8cf50fce9a21._comment b/doc/special_remotes/comment_26_606c1bee71a265f9df3a8cf50fce9a21._comment
new file mode 100644
--- /dev/null
+++ b/doc/special_remotes/comment_26_606c1bee71a265f9df3a8cf50fce9a21._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 26"""
+ date="2015-10-26T17:36:26Z"
+ content="""
+@craig, this can be slightly confusing, since `git-annex enableremote`
+uses the same name that you used when creating the remote in the first
+place, with `git-annex initremote`... which might be different than
+the name used for that remote in some repository or other, and from
+the description shown in `git annex into`.
+
+Since every remote listed by `git annex info` is apparently a regular git
+repo, not a special remote, with the exception of the glacier one, process
+of deduction suggests that the "gitannexpics" special remote is the same as
+the glacier one.
+
+I've made some changes now, so `git annex enableremote` will list the
+uuid and description, along with the name used by enableremote, and
+will accept any one of those things to specify which remote to enable.
+"""]]
diff --git a/doc/thanks.mdwn b/doc/thanks.mdwn
--- a/doc/thanks.mdwn
+++ b/doc/thanks.mdwn
@@ -380,3 +380,5 @@
 * The Hodges, for providing such a congenial place for me to live and work
   on these first world problems, while you're off helping people in the
   third world.
+* And Mom, for stamping and stuffing so many thank you envelopes, and all the
+  rhubarb pies.
diff --git a/doc/todo/Amazon_Cloud_Drive.mdwn b/doc/todo/Amazon_Cloud_Drive.mdwn
--- a/doc/todo/Amazon_Cloud_Drive.mdwn
+++ b/doc/todo/Amazon_Cloud_Drive.mdwn
@@ -4,7 +4,7 @@
 
 http://techcrunch.com/2015/03/26/amazon-goes-after-dropbox-google-microsoft-with-unlimited-cloud-drive-storage/
 
--- bence
+-- bence aka [[parhuzamos]] 
 
 > Not yet, but I just need to investigate haskell api bindings for it, I
 > suppose. --[[Joey]]
diff --git a/doc/todo/Bittorrent-like_features.mdwn b/doc/todo/Bittorrent-like_features.mdwn
--- a/doc/todo/Bittorrent-like_features.mdwn
+++ b/doc/todo/Bittorrent-like_features.mdwn
@@ -39,6 +39,9 @@
  * [syncthing](https://syncthing.net/) looks like a btsync replacement, and could also be interesting, see the [[todo/syncthing_special_remote]] discussion
  * [gittorrent](http://blog.printf.net/articles/2015/05/29/announcing-gittorrent-a-decentralized-github/) allows for decentralised sharing of the git objects, which could replace pairing between repositories, except it [doesn't support push yet](https://github.com/cjb/GitTorrent/issues/3)
  * [gitocalypse](https://github.com/SeekingFor/gitocalypse) is similar to gittorrent, except it uses Freenet and HG (Mercurial?!) instead of the bittorrent DHT
+ * [tox](https://tox.chat/) - DHT-enabled chat, file transfer and messaging platform, [no stable release](https://github.com/irungentoo/toxcore/issues/1353), [security concerns](http://lists.alioth.debian.org/pipermail/pkg-privacy-maintainers/Week-of-Mon-20150928/000046.html)
+ * [ricochet](https://ricochet.im/) - similar, but relies on Tor, unclear if it supports file transfers, packaged in Debian
+ * [pond](https://pond.imperialviolet.org/) - similar to ricochet
 
 joeyh's approach for now is to [[wait and see what will emerge|devblog/day_219__catching_up_and_looking_back/]], but of course people are welcome to implement their own [[special_remotes]] to fix this problem!
 
diff --git a/doc/todo/show_me_where_unused_file_was__44___i_can_wait.mdwn b/doc/todo/show_me_where_unused_file_was__44___i_can_wait.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/todo/show_me_where_unused_file_was__44___i_can_wait.mdwn
@@ -0,0 +1,7 @@
+i know that `git annex unused` would be slower if, instead of just showing the hash, it would also show the pathname where the file was. it does tell me that i can use `git log --stat -SKEY` to find that out myself, but then i would need to make some silly shell script to loop over multiple files. i'm hoping that git-annex has more efficient and clever ways of doing that, and even if it's slower, i'd be ready to wait if there was an extra flag to show me where it was...
+
+i have used this oneliner so far, but it's ugly and painful, especially since `git annex unused` doesn't have a very parseable output format...
+
+    git annex unused 2>&1 | grep '^  *[0-9][0-9]*' | sed 's/^ *[0-9][0-9]* *//' | xargs -I'{}' git log --oneline --stat -S'{}' -1
+
+any way to do this more easily? --[[anarcat]]
diff --git a/doc/todo/xmpp_removal/comment_2_1c92cde199612bbd765c818e7b64f944._comment b/doc/todo/xmpp_removal/comment_2_1c92cde199612bbd765c818e7b64f944._comment
new file mode 100644
--- /dev/null
+++ b/doc/todo/xmpp_removal/comment_2_1c92cde199612bbd765c818e7b64f944._comment
@@ -0,0 +1,46 @@
+[[!comment format=mdwn
+ username="Gastlag"
+ subject="Is xmpp the problem ?"
+ date="2015-10-30T10:42:06Z"
+ content="""
+Hello, 
+
+I was wondering why assistant \"is increasingly rarely used\" ?
+if you look the different item of the survey http://git-annex-survey.branchable.com/polls/2015/, yes 53% of people said \"I use the assistant, but without XMPP\"
+
+And \"missing ports\" :
+
+ - \"I'm good -- git-annex runs on my OSes of choice! (43%)\"
+   - \"Windows (13%)\"
+   - Android (6%)
+
+But if you look other anwsers you see
+
+ - \"using with\" :
+   - by myself (59%)
+   - by myself so far but I hope to get others using my repository (28%)
+
+And :
+
+  - \"Pick the operating system which you use git-annex on the most.\" :
+    - \"Linux (78%)\"
+    - \"OSX (13%)\"
+
+
+Further more \"blocking problems\" :
+
+  - too hard to install (4%)
+  - too hard to use (7%)
+  - not good enough documentation (16%)
+  - The only use for the assistant would be in combination with a good, native, fully automagic Android version which includes some sort of native UI (16%)
+  - I use the command line, and **find it difficult to show others** how to use the git-annex assistant (12%)
+  - The lack of selective file sync (ie, git annex get and git annex drop) is what prevents me from using the Assistant (5%)
+
+And \"focus\" : 
+
+  -  make it easier for nontechnical users (25%) 
+
+I think remove xmpp is a bad idea because as you say it's enable \"Friend discovery and easy sharing of git repo to friends.\" and there is already a lot of people who use xmpp and XMPP address are user friendly because close to email adress. And the main problem seems to be that git-annex assistant still too hard to use and not usable on the platform where users are : windows.
+
+The main problem is that git-annex is still not ready for users. It have too reach other people than \"hardcore linux users\" to be a social tool and remove xmpp may not be the good solution.
+"""]]
diff --git a/doc/todo/xmpp_removal/comment_3_661be364029ce45db7d6a111b9d65ee7._comment b/doc/todo/xmpp_removal/comment_3_661be364029ce45db7d6a111b9d65ee7._comment
new file mode 100644
--- /dev/null
+++ b/doc/todo/xmpp_removal/comment_3_661be364029ce45db7d6a111b9d65ee7._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="re tox"
+ date="2015-10-30T15:37:09Z"
+ content="""
+i am not sure the proper replacement for XMPP is tox. First off, Debian privacy folks have [expressed concerns about the actual security of Tox](http://lists.alioth.debian.org/pipermail/pkg-privacy-maintainers/Week-of-Mon-20150928/000046.html), which is not a big requirement here, but nevertheless is a question worth adressing. [Pond](https://pond.imperialviolet.org/) and [Ricochet](http://ricochet.im/) are interesting alternatives that are being packaged in Debian (the latter which just entered unstable).
+
+Furthermore, it seems that XMPP is really a \"patch\", a workaround for NAT issues and, in general, how to share git-annex repositories with users in arbitrary locations. This problem space is more similar to [[todo/Bittorrent-like_features/#index1h1]] than XMPP. Using tox libraries may enable git-annex to share git metadata around, but would it allow git-annex to download actual files from other users through tox? How stable is tox? Last I checked, [tox core don't actually want to make any releases](https://github.com/irungentoo/toxcore/issues/1353), which makes it a much less attractive option because the API can change all the time...
+
+I have nevertheless added the three tools to [[todo/Bittorrent-like_features/]].
+
+Anyways, it seems that XMPP is rarely used and could be removed if it makes maintenance easier: i have never found a good use case for it, personnally: you can usually find a space for a private git repo fairly easily... the problem is sharing the big files! --[[anarcat]]
+"""]]
diff --git a/doc/users/parhuzamos.mdwn b/doc/users/parhuzamos.mdwn
new file mode 100644
--- /dev/null
+++ b/doc/users/parhuzamos.mdwn
@@ -0,0 +1,8 @@
+My life with git-annex
+
+Todos: 
+
+- publish git-annex scripts
+
+[[!inline pages="todo/* and !todo/done and !link(todo/done) and
+link(users/parhuzamos)" sort=mtime feeds=no actions=yes archive=yes show=0]]
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.20151019
+Version: 5.20151102
 Cabal-Version: >= 1.8
 License: GPL-3
 Maintainer: Joey Hess <id@joeyh.name>
diff --git a/man/git-annex-assistant.1 b/man/git-annex-assistant.1
--- a/man/git-annex-assistant.1
+++ b/man/git-annex-assistant.1
@@ -21,6 +21,8 @@
 Wait N seconds before running the startup scan. This process can
 be expensive and you may not want to run it immediately upon login.
 .IP
+When \-\-autostart is used, defaults to \-\-startdelay=5.
+.IP
 .IP "\fB\-\-foreground\fP"
 Avoid forking to the background.
 .IP
diff --git a/man/git-annex-enableremote.1 b/man/git-annex-enableremote.1
--- a/man/git-annex-enableremote.1
+++ b/man/git-annex-enableremote.1
@@ -3,7 +3,7 @@
 git-annex-enableremote \- enables use of an existing special remote
 .PP
 .SH SYNOPSIS
-git annex enableremote \fBname [param=value ...]\fP
+git annex enableremote \fBname|uuid|desc [param=value ...]\fP
 .PP
 .SH DESCRIPTION
 Enables use of an existing special remote in the current repository,
@@ -13,7 +13,8 @@
 The name of the remote is the same name used when originally
 creating that remote with \fBgit annex initremote\fP. Run 
 \fBgit annex enableremote\fP without any name to get a list of
-special remote names.
+special remote names. Or you can specify the uuid or description of the
+remote.
 .PP
 Some special remotes may need parameters to be specified every time they are
 enabled. For example, the directory special remote requires a directory=
