diff --git a/NEWS b/NEWS
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+Darcs 2.8.3, 4 November 2012
+
+  * Darcs API: #ifdef some FFI imports so ghci works with -f-curl
+  * Darcs API: Use darcs-specific names in sha2.c to avoid clashes with other packages
+
+
 Darcs 2.8.2, 3 September 2012
 
  * Added PrimV1Job type to API to support darcsden
diff --git a/README b/README
--- a/README
+++ b/README
@@ -11,14 +11,22 @@
 Compilation and Installation
 ============================
 
-Building Darcs requires GHC, version 6.10.3 or higher. It also requires the
-Cabal package, version 1.6 or higher.  The cabal-install package is also
-recommended.
+Building Darcs is best done with the Haskell Platform:
+http://www.haskell.org/platform/. Any release of darcs should build with
+the most recent version of the Platform at the time of the release. This
+will also generally apply to unstable versions.
 
-If you have the "cabal-install" package on your system (that is, there is a
-"cabal" executable in your path), you can use the following command to create
-an executable in ~/.cabal/bin/darcs (this will also automatically fetch and
-build dependencies from the Hackage server).
+If you are not using the Platform, then you need GHC and Cabal.
+The versions required can be found in the darcs.cabal file under
+'build-tools' and 'Cabal-Version' respectively.
+
+The cabal-install package is also recommended.
+
+If you have the Platform or otherwise have the "cabal-install" package
+on your system (that is, there is a "cabal" executable in your path),
+you can use the following command to create an executable in
+~/.cabal/bin/darcs (this will also automatically fetch and build
+dependencies from the Hackage server).
 
     $ cabal update
     $ cabal install
diff --git a/darcs.cabal b/darcs.cabal
--- a/darcs.cabal
+++ b/darcs.cabal
@@ -1,5 +1,5 @@
 Name:           darcs
-version:        2.8.2
+version:        2.8.3
 License:        GPL
 License-file:   COPYING
 Author:         David Roundy <droundy@darcs.net>, <darcs-devel@darcs.net>
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.8.2\nGanesh Sittampalam <ganesh@earth.li>**20120903201442\n Ignore-this: 603c2b42c63331aaa13e02c2ea75fdfc\n] \n"
+Just "\nContext:\n\n[TAG 2.8.3\nGanesh Sittampalam <ganesh@earth.li>**20121104174910\n Ignore-this: 3198f6deecf3d1b44df6e05a2657d9ca\n] \n"
diff --git a/src/Crypt/SHA256.hs b/src/Crypt/SHA256.hs
--- a/src/Crypt/SHA256.hs
+++ b/src/Crypt/SHA256.hs
@@ -39,6 +39,6 @@
 
 -- void sha256sum(const unsigned char *d, size_t n, unsigned char *md);
 --
-foreign import ccall unsafe "sha2.h sha256" c_sha256
+foreign import ccall unsafe "sha2.h darcs_sha256" c_sha256
     :: Ptr CChar -> CSize -> Ptr Word8 -> IO ()
 
diff --git a/src/Crypt/sha2.c b/src/Crypt/sha2.c
--- a/src/Crypt/sha2.c
+++ b/src/Crypt/sha2.c
@@ -127,27 +127,27 @@
     wv[h] = t1 + t2;                                        \
 }
 
-uint32 sha224_h0[8] =
+static uint32 sha224_h0[8] =
             {0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
              0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4};
 
-uint32 sha256_h0[8] =
+static uint32 sha256_h0[8] =
             {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
              0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
 
-uint64 sha384_h0[8] =
+static uint64 sha384_h0[8] =
             {0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL,
              0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL,
              0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL,
              0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL};
 
-uint64 sha512_h0[8] =
+static uint64 sha512_h0[8] =
             {0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,
              0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
              0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
              0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL};
 
-uint32 sha256_k[64] =
+static uint32 sha256_k[64] =
             {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
              0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
              0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
@@ -165,7 +165,7 @@
              0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
              0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};
 
-uint64 sha512_k[80] =
+static uint64 sha512_k[80] =
             {0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
              0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
              0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
@@ -209,8 +209,8 @@
 
 /* SHA-256 functions */
 
-void sha256_transf(sha256_ctx *ctx, const unsigned char *message,
-                   unsigned int block_nb)
+static void sha256_transf(sha256_ctx *ctx, const unsigned char *message,
+                          unsigned int block_nb)
 {
     uint32 w[64];
     uint32 wv[8];
@@ -324,16 +324,7 @@
     }
 }
 
-void sha256(const unsigned char *message, unsigned int len, unsigned char *digest)
-{
-    sha256_ctx ctx;
-
-    sha256_init(&ctx);
-    sha256_update(&ctx, message, len);
-    sha256_final(&ctx, digest);
-}
-
-void sha256_init(sha256_ctx *ctx)
+static void sha256_init(sha256_ctx *ctx)
 {
 #ifndef UNROLL_LOOPS
     int i;
@@ -351,8 +342,8 @@
     ctx->tot_len = 0;
 }
 
-void sha256_update(sha256_ctx *ctx, const unsigned char *message,
-                   unsigned int len)
+static void sha256_update(sha256_ctx *ctx, const unsigned char *message,
+                          unsigned int len)
 {
     unsigned int block_nb;
     unsigned int new_len, rem_len, tmp_len;
@@ -385,7 +376,7 @@
     ctx->tot_len += (block_nb + 1) << 6;
 }
 
-void sha256_final(sha256_ctx *ctx, unsigned char *digest)
+static void sha256_final(sha256_ctx *ctx, unsigned char *digest)
 {
     unsigned int block_nb;
     unsigned int pm_len;
@@ -423,10 +414,19 @@
 #endif /* !UNROLL_LOOPS */
 }
 
+void darcs_sha256(const unsigned char *message, unsigned int len, unsigned char *digest)
+{
+    sha256_ctx ctx;
+
+    sha256_init(&ctx);
+    sha256_update(&ctx, message, len);
+    sha256_final(&ctx, digest);
+}
+
 /* SHA-512 functions */
 
-void sha512_transf(sha512_ctx *ctx, const unsigned char *message,
-                   unsigned int block_nb)
+static void sha512_transf(sha512_ctx *ctx, const unsigned char *message,
+                          unsigned int block_nb)
 {
     uint64 w[80];
     uint64 wv[8];
@@ -520,17 +520,7 @@
     }
 }
 
-void sha512(const unsigned char *message, unsigned int len,
-            unsigned char *digest)
-{
-    sha512_ctx ctx;
-
-    sha512_init(&ctx);
-    sha512_update(&ctx, message, len);
-    sha512_final(&ctx, digest);
-}
-
-void sha512_init(sha512_ctx *ctx)
+static void sha512_init(sha512_ctx *ctx)
 {
 #ifndef UNROLL_LOOPS
     int i;
@@ -548,8 +538,8 @@
     ctx->tot_len = 0;
 }
 
-void sha512_update(sha512_ctx *ctx, const unsigned char *message,
-                   unsigned int len)
+static void sha512_update(sha512_ctx *ctx, const unsigned char *message,
+                          unsigned int len)
 {
     unsigned int block_nb;
     unsigned int new_len, rem_len, tmp_len;
@@ -582,7 +572,7 @@
     ctx->tot_len += (block_nb + 1) << 7;
 }
 
-void sha512_final(sha512_ctx *ctx, unsigned char *digest)
+static void sha512_final(sha512_ctx *ctx, unsigned char *digest)
 {
     unsigned int block_nb;
     unsigned int pm_len;
@@ -620,19 +610,19 @@
 #endif /* !UNROLL_LOOPS */
 }
 
-/* SHA-384 functions */
-
-void sha384(const unsigned char *message, unsigned int len,
+void darcs_sha512(const unsigned char *message, unsigned int len,
             unsigned char *digest)
 {
-    sha384_ctx ctx;
+    sha512_ctx ctx;
 
-    sha384_init(&ctx);
-    sha384_update(&ctx, message, len);
-    sha384_final(&ctx, digest);
+    sha512_init(&ctx);
+    sha512_update(&ctx, message, len);
+    sha512_final(&ctx, digest);
 }
 
-void sha384_init(sha384_ctx *ctx)
+/* SHA-384 functions */
+
+static void sha384_init(sha384_ctx *ctx)
 {
 #ifndef UNROLL_LOOPS
     int i;
@@ -650,8 +640,8 @@
     ctx->tot_len = 0;
 }
 
-void sha384_update(sha384_ctx *ctx, const unsigned char *message,
-                   unsigned int len)
+static void sha384_update(sha384_ctx *ctx, const unsigned char *message,
+                          unsigned int len)
 {
     unsigned int block_nb;
     unsigned int new_len, rem_len, tmp_len;
@@ -684,7 +674,7 @@
     ctx->tot_len += (block_nb + 1) << 7;
 }
 
-void sha384_final(sha384_ctx *ctx, unsigned char *digest)
+static void sha384_final(sha384_ctx *ctx, unsigned char *digest)
 {
     unsigned int block_nb;
     unsigned int pm_len;
@@ -720,19 +710,19 @@
 #endif /* !UNROLL_LOOPS */
 }
 
-/* SHA-224 functions */
-
-void sha224(const unsigned char *message, unsigned int len,
+void darcs_sha384(const unsigned char *message, unsigned int len,
             unsigned char *digest)
 {
-    sha224_ctx ctx;
+    sha384_ctx ctx;
 
-    sha224_init(&ctx);
-    sha224_update(&ctx, message, len);
-    sha224_final(&ctx, digest);
+    sha384_init(&ctx);
+    sha384_update(&ctx, message, len);
+    sha384_final(&ctx, digest);
 }
 
-void sha224_init(sha224_ctx *ctx)
+/* SHA-224 functions */
+
+static void sha224_init(sha224_ctx *ctx)
 {
 #ifndef UNROLL_LOOPS
     int i;
@@ -750,8 +740,8 @@
     ctx->tot_len = 0;
 }
 
-void sha224_update(sha224_ctx *ctx, const unsigned char *message,
-                   unsigned int len)
+static void sha224_update(sha224_ctx *ctx, const unsigned char *message,
+                          unsigned int len)
 {
     unsigned int block_nb;
     unsigned int new_len, rem_len, tmp_len;
@@ -784,7 +774,7 @@
     ctx->tot_len += (block_nb + 1) << 6;
 }
 
-void sha224_final(sha224_ctx *ctx, unsigned char *digest)
+static void sha224_final(sha224_ctx *ctx, unsigned char *digest)
 {
     unsigned int block_nb;
     unsigned int pm_len;
@@ -821,6 +811,16 @@
 #endif /* !UNROLL_LOOPS */
 }
 
+void darcs_sha224(const unsigned char *message, unsigned int len,
+            unsigned char *digest)
+{
+    sha224_ctx ctx;
+
+    sha224_init(&ctx);
+    sha224_update(&ctx, message, len);
+    sha224_final(&ctx, digest);
+}
+
 #ifdef TEST_VECTORS
 
 /* FIPS 180-2 Validation tests */
@@ -947,4 +947,3 @@
 }
 
 #endif /* TEST_VECTORS */
-
diff --git a/src/Crypt/sha2.h b/src/Crypt/sha2.h
--- a/src/Crypt/sha2.h
+++ b/src/Crypt/sha2.h
@@ -72,37 +72,17 @@
 typedef sha512_ctx sha384_ctx;
 typedef sha256_ctx sha224_ctx;
 
-void sha224_init(sha224_ctx *ctx);
-void sha224_update(sha224_ctx *ctx, const unsigned char *message,
-                   unsigned int len);
-void sha224_final(sha224_ctx *ctx, unsigned char *digest);
-void sha224(const unsigned char *message, unsigned int len,
-            unsigned char *digest);
-
-void sha256_init(sha256_ctx * ctx);
-void sha256_update(sha256_ctx *ctx, const unsigned char *message,
-                   unsigned int len);
-void sha256_final(sha256_ctx *ctx, unsigned char *digest);
-void sha256(const unsigned char *message, unsigned int len,
-            unsigned char *digest);
-
-void sha384_init(sha384_ctx *ctx);
-void sha384_update(sha384_ctx *ctx, const unsigned char *message,
-                   unsigned int len);
-void sha384_final(sha384_ctx *ctx, unsigned char *digest);
-void sha384(const unsigned char *message, unsigned int len,
-            unsigned char *digest);
-
-void sha512_init(sha512_ctx *ctx);
-void sha512_update(sha512_ctx *ctx, const unsigned char *message,
-                   unsigned int len);
-void sha512_final(sha512_ctx *ctx, unsigned char *digest);
-void sha512(const unsigned char *message, unsigned int len,
-            unsigned char *digest);
+void darcs_sha224(const unsigned char *message, unsigned int len,
+                  unsigned char *digest);
+void darcs_sha256(const unsigned char *message, unsigned int len,
+                  unsigned char *digest);
+void darcs_sha384(const unsigned char *message, unsigned int len,
+                  unsigned char *digest);
+void darcs_sha512(const unsigned char *message, unsigned int len,
+                  unsigned char *digest);
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif /* !SHA2_H */
-
diff --git a/src/URL/Curl.hs b/src/URL/Curl.hs
--- a/src/URL/Curl.hs
+++ b/src/URL/Curl.hs
@@ -2,6 +2,8 @@
 
 module URL.Curl where
 
+#ifdef HAVE_CURL
+
 import Control.Exception.Extensible ( bracket )
 import Control.Monad ( when )
 import Foreign.C.Types ( CLong, CInt )
@@ -73,3 +75,5 @@
 
 foreign import ccall "hscurl.h curl_pipelining_enabled"
   curl_pipelining_enabled :: IO CInt
+
+#endif
diff --git a/tests/bin/hspwd.hi b/tests/bin/hspwd.hi
deleted file mode 100644
Binary files a/tests/bin/hspwd.hi and /dev/null differ
diff --git a/tests/bin/hspwd.o b/tests/bin/hspwd.o
deleted file mode 100644
Binary files a/tests/bin/hspwd.o and /dev/null differ
diff --git a/tests/bin/trackdown-bisect-helper.hi b/tests/bin/trackdown-bisect-helper.hi
deleted file mode 100644
Binary files a/tests/bin/trackdown-bisect-helper.hi and /dev/null differ
diff --git a/tests/bin/trackdown-bisect-helper.o b/tests/bin/trackdown-bisect-helper.o
deleted file mode 100644
Binary files a/tests/bin/trackdown-bisect-helper.o and /dev/null differ
