diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+Darcs 2.12.5, 11 January 2017
+
+ * Bump some dependency upper bounds (Ganesh Sittampalam)
+ * Fix issue2516 - failure cloning from URLs on Windows (Ben Franksen)
+
+
 Darcs 2.12.4, 14 September 2016
 
  * *really* fix compile error under Windows (Guillaume Hoffmann)
diff --git a/darcs.cabal b/darcs.cabal
--- a/darcs.cabal
+++ b/darcs.cabal
@@ -1,5 +1,5 @@
 Name:           darcs
-version:        2.12.4
+version:        2.12.5
 License:        GPL
 License-file:   COPYING
 Author:         David Roundy <droundy@darcs.net>, <darcs-devel@darcs.net>
@@ -407,7 +407,7 @@
                      cryptohash   >= 0.4 && < 0.12,
                      base16-bytestring >= 0.1 && < 0.2,
                      utf8-string  >= 0.3.6 && < 1.1,
-                     vector       >= 0.10.0.1 && < 0.12,
+                     vector       >= 0.10.0.1 && < 0.13,
                      tar          >= 0.4 && < 0.6,
                      data-ordlist == 0.4.*,
                      attoparsec   >= 0.11 && < 0.14,
@@ -417,11 +417,11 @@
                      unix-compat  >= 0.1.2 && < 0.5,
                      bytestring   >= 0.10.0.2 && < 0.11,
                      old-time     >= 1.1 && < 1.2,
-                     time         >= 1.5 && < 1.7,
+                     time         >= 1.5 && < 1.8,
     -- release notes of GHC 7.10.2 recommends to use text >= 1.2.1.3:
     -- https://mail.haskell.org/pipermail/haskell/2015-July/024641.html
                      text         >= 1.2.1.3 && < 1.3,
-                     directory    >= 1.2.0.1 && < 1.3.0.0,
+                     directory    >= 1.2.0.1 && < 1.4.0.0,
                      process      >= 1.1.0.2 && < 1.5.0.0,
                      array        >= 0.4.0.1 && < 0.6,
                      random       >= 1.0.1.1 && < 1.2,
@@ -572,10 +572,10 @@
                    shelly       >= 1.6.2 && < 1.7,
                    split        >= 0.2.2 && < 0.3,
                    text         >= 1.2.1.3 && < 1.3,
-                   directory    >= 1.2.0.1 && < 1.3.0.0,
+                   directory    >= 1.2.0.1 && < 1.4.0.0,
                    FindBin      >= 0.0 && < 0.1,
                    QuickCheck   >= 2.6 && < 2.10,
-                   HUnit        >= 1.2.5.2 && < 1.4,
+                   HUnit        >= 1.2.5.2 && < 1.6,
                    test-framework             >= 0.4.0 && < 0.9,
                    test-framework-hunit       >= 0.2.2 && < 0.4,
                    test-framework-quickcheck2 >= 0.3 && < 0.4,
diff --git a/release/distributed-context b/release/distributed-context
--- a/release/distributed-context
+++ b/release/distributed-context
@@ -1,1 +1,1 @@
-Just "\nContext:\n\n[TAG 2.12.4\nGuillaume Hoffmann <guillaumh@gmail.com>**20160914143914\n Ignore-this: fee5b93a45e3a175e63e6fdb837ec4dc\n] \n"
+Just "\nContext:\n\n[TAG 2.12.5\nGanesh Sittampalam <ganesh@earth.li>**20170111174540\n Ignore-this: 5e9ed0bfd6de3ef43d6933f2bda92147\n] \n"
diff --git a/src/Darcs/Repository/Clone.hs b/src/Darcs/Repository/Clone.hs
--- a/src/Darcs/Repository/Clone.hs
+++ b/src/Darcs/Repository/Clone.hs
@@ -13,6 +13,7 @@
 import Control.Exception ( catch, SomeException )
 import Control.Monad ( when, void )
 import qualified Data.ByteString.Char8 as BS
+import Data.List( intercalate )
 import Data.Maybe( catMaybes, isJust )
 import System.FilePath( (</>) )
 import System.Directory
@@ -184,6 +185,9 @@
       NoPatchIndex -> return () -- default
       YesPatchIndex -> createOrUpdatePatchIndexDisk repo
 
+joinUrl :: [String] -> String
+joinUrl = intercalate "/"
+
 cloneRepository ::
     String    -- origin repository path
     -> String -- new repository name (for relative path)
@@ -218,7 +222,7 @@
         Just e ->  fail $ "Incompatibility with repository " ++ fromDir ++ ":\n" ++ e
         Nothing -> return ()
       debugMessage "Copying prefs"
-      copyFileOrUrl (remoteDarcs rdarcs) (fromDir </> darcsdir </> "prefs" </> "prefs")
+      copyFileOrUrl (remoteDarcs rdarcs) (joinUrl [fromDir, darcsdir, "prefs", "prefs"])
         (darcsdir </> "prefs/prefs") (MaxAge 600) `catchall` return ()
       -- prepare sources and cache
       (Repo toDir toFormat toPristine toCache) <- identifyRepository uc "."
@@ -305,9 +309,9 @@
   -> WithWorkingDir
   -> IO ()
 copyBasicRepoPacked r@(Repo fromDir _ _ _) toRepo verb rdarcs withWorkingDir =
-  do let hashURL = fromDir </> darcsdir </> packsDir </> "pristine"
+  do let hashURL = joinUrl [fromDir, darcsdir, packsDir, "pristine"]
      mPackHash <- (Just <$> gzFetchFilePS hashURL Uncachable) `catchall` (return Nothing)
-     let hiURL = fromDir </> darcsdir </> "hashed_inventory"
+     let hiURL = joinUrl [fromDir, darcsdir, "hashed_inventory"]
      i <- gzFetchFilePS hiURL Uncachable
      let currentHash = BS.pack $ inv2pris i
      let copyNormally = copyBasicRepoNotPacked r toRepo verb rdarcs withWorkingDir
diff --git a/src/Darcs/Repository/Job.hs b/src/Darcs/Repository/Job.hs
--- a/src/Darcs/Repository/Job.hs
+++ b/src/Darcs/Repository/Job.hs
@@ -125,7 +125,7 @@
     -- This was added to support darcsden, which inspects the internals of V1 prim patches.
     --
     -- In future this should be replaced with a more abstract inspection API as part of 'PrimPatch'.
-    | PrimV1Job (forall rt p wR wU . (RepoPatch p, ApplyState p ~ Tree, PrimOf p ~ Prim)
+    | PrimV1Job (forall rt p wR wU . (IsRepoType rt, RepoPatch p, ApplyState p ~ Tree, PrimOf p ~ Prim)
                => Repository rt p wR wU wR -> IO a)
     -- A job that works on normal darcs repositories, but will want access to the rebase patch if it exists.
     | RebaseAwareJob RebaseJobFlags (forall rt p wR wU . (IsRepoType rt, RepoPatch p, ApplyState p ~ Tree, ApplyState (PrimOf p) ~ Tree) => Repository rt p wR wU wR -> IO a)
