diff --git a/ChangeLog b/ChangeLog
index b77893f37379d6bfb8d14aef0ba7d69c3081944f..ad88ece9f0083c6e674f8546cb751dcb86ec1aa9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,31 @@
 2012-06-25  Niels Möller  <nisse@lysator.liu.se>
 
+	* bignum-next-prime.c (nettle_next_prime): Consistently use the
+	type nettle_random_func * (rather then just nettle_random_func)
+	when passing the function pointer as argument. Similar change for
+	nettle_progress_func. Should have been done for the 2.0 release,
+	but a few arguments were overlooked.
+	* bignum-random-prime.c (_nettle_generate_pocklington_prime)
+	(nettle_random_prime): Likewise.
+	* bignum-random.c (nettle_mpz_random_size, nettle_mpz_random):
+	Likewise.
+	* dsa-keygen.c (dsa_generate_keypair): Likewise.
+	* dsa-sha1-sign.c (dsa_sha1_sign_digest, dsa_sha1_sign): Likewise.
+	* dsa-sha256-sign.c (dsa_sha256_sign_digest, dsa_sha256_sign):
+	Likewise.
+	* dsa-sign.c (_dsa_sign): Likewise.
+	* pkcs1-encrypt.c (pkcs1_encrypt): Likewise.
+	* rsa-blind.c (_rsa_blind): Likewise.
+	* rsa-decrypt-tr.c (rsa_decrypt_tr): Likewise.
+	* rsa-encrypt.c (rsa_encrypt): Likewise.
+	* rsa-keygen.c (rsa_generate_keypair): Likewise.
+	* rsa-pkcs1-sign-tr.c (rsa_pkcs1_sign_tr): Likewise.
+
+	* cbc.c (cbc_encrypt, cbc_decrypt): Similarly, use the type
+	nettle_crypt_func * rather than just nettle_crypt_func.
+	* ctr.c (ctr_crypt): Likewise.
+	* gcm.c (gcm_set_key): Likewise.
+
 	* testsuite/des-compat-test.c (test_main): Disable declarations of
 	disabled functions and variables, to avoid warnings. No verbose
 	output unless verbose flag is set.
diff --git a/bignum-next-prime.c b/bignum-next-prime.c
index d3980a554be676c141f47fc7c60d4bc2bfd2582e..953f6b72f081d4bd6ab013182cb9da6abe6d09c3 100644
--- a/bignum-next-prime.c
+++ b/bignum-next-prime.c
@@ -74,7 +74,7 @@ static const uint16_t primes[] = {
 /* NOTE: The mpz_nextprime in current GMP is unoptimized. */
 void
 nettle_next_prime(mpz_t p, mpz_t n, unsigned count, unsigned prime_limit,
-		  void *progress_ctx, nettle_progress_func progress)
+		  void *progress_ctx, nettle_progress_func *progress)
 {
   mpz_t tmp;
   TMP_DECL(moduli, unsigned, NUMBER_OF_PRIMES);
diff --git a/bignum-random-prime.c b/bignum-random-prime.c
index e0454a88c3c14c0f143b57f177d253c8efaf2cc2..f172d6d85a1fcac3a4751feed484b1102932e4e4 100644
--- a/bignum-random-prime.c
+++ b/bignum-random-prime.c
@@ -260,7 +260,7 @@ miller_rabin_pocklington(mpz_t n, mpz_t nm1, mpz_t nm1dq, mpz_t a)
 void
 _nettle_generate_pocklington_prime (mpz_t p, mpz_t r,
 				    unsigned bits, int top_bits_set, 
-				    void *ctx, nettle_random_func random, 
+				    void *ctx, nettle_random_func *random, 
 				    const mpz_t p0,
 				    const mpz_t q,
 				    const mpz_t p0q)
@@ -345,8 +345,8 @@ _nettle_generate_pocklington_prime (mpz_t p, mpz_t r,
    the variant in fips186-3). */
 void
 nettle_random_prime(mpz_t p, unsigned bits, int top_bits_set,
-		    void *random_ctx, nettle_random_func random,
-		    void *progress_ctx, nettle_progress_func progress)
+		    void *random_ctx, nettle_random_func *random,
+		    void *progress_ctx, nettle_progress_func *progress)
 {
   assert (bits >= 3);
   if (bits <= 10)
diff --git a/bignum-random.c b/bignum-random.c
index 6b745d88bbae7be72e57af649b4773a252133aa2..d1174d9d036cf2b90097c187306c5b74144db029 100644
--- a/bignum-random.c
+++ b/bignum-random.c
@@ -34,7 +34,7 @@
 
 void
 nettle_mpz_random_size(mpz_t x,
-		       void *ctx, nettle_random_func random,
+		       void *ctx, nettle_random_func *random,
 		       unsigned bits)
 {
   unsigned length = (bits + 7) / 8;
@@ -52,7 +52,7 @@ nettle_mpz_random_size(mpz_t x,
 /* Returns a random number x, 0 <= x < n */
 void
 nettle_mpz_random(mpz_t x,
-		  void *ctx, nettle_random_func random,
+		  void *ctx, nettle_random_func *random,
 		  const mpz_t n)
 {
   /* NOTE: This leaves some bias, which may be bad for DSA. A better
diff --git a/bignum.h b/bignum.h
index d9e06e2ea60915d20c65352d79e57ec61bfba6c2..f1dad7e156cb958394e6e2bee07e0a183f8ac9cd 100644
--- a/bignum.h
+++ b/bignum.h
@@ -71,29 +71,29 @@ nettle_mpz_init_set_str_256_u(mpz_t x,
 /* Returns a uniformly distributed random number 0 <= x < 2^n */
 void
 nettle_mpz_random_size(mpz_t x,
-		       void *ctx, nettle_random_func random,
+		       void *ctx, nettle_random_func *random,
 		       unsigned bits);
 
 /* Returns a number x, almost uniformly random in the range
  * 0 <= x < n. */
 void
 nettle_mpz_random(mpz_t x, 
-		  void *ctx, nettle_random_func random,
+		  void *ctx, nettle_random_func *random,
 		  const mpz_t n);
 
 void
 nettle_next_prime(mpz_t p, mpz_t n, unsigned count, unsigned prime_limit,
-		  void *progress_ctx, nettle_progress_func progress);
+		  void *progress_ctx, nettle_progress_func *progress);
 
 void
 nettle_random_prime(mpz_t p, unsigned bits, int top_bits_set,
-		    void *ctx, nettle_random_func random,
-		    void *progress_ctx, nettle_progress_func progress);
+		    void *ctx, nettle_random_func *random,
+		    void *progress_ctx, nettle_progress_func *progress);
 
 void
 _nettle_generate_pocklington_prime (mpz_t p, mpz_t r,
 				    unsigned bits, int top_bits_set, 
-				    void *ctx, nettle_random_func random, 
+				    void *ctx, nettle_random_func *random, 
 				    const mpz_t p0,
 				    const mpz_t q,
 				    const mpz_t p0q);
diff --git a/cbc.c b/cbc.c
index 6e09c9bd0099ff2f5f85d570bf5fda7bd9ac574f..4eb9a19b540b81912a2925012a24f07aa4836448 100644
--- a/cbc.c
+++ b/cbc.c
@@ -37,7 +37,7 @@
 #include "nettle-internal.h"
 
 void
-cbc_encrypt(void *ctx, nettle_crypt_func f,
+cbc_encrypt(void *ctx, nettle_crypt_func *f,
 	    unsigned block_size, uint8_t *iv,
 	    unsigned length, uint8_t *dst,
 	    const uint8_t *src)
@@ -56,7 +56,7 @@ cbc_encrypt(void *ctx, nettle_crypt_func f,
 #define CBC_BUFFER_LIMIT 512
 
 void
-cbc_decrypt(void *ctx, nettle_crypt_func f,
+cbc_decrypt(void *ctx, nettle_crypt_func *f,
 	    unsigned block_size, uint8_t *iv,
 	    unsigned length, uint8_t *dst,
 	    const uint8_t *src)
diff --git a/cbc.h b/cbc.h
index b100ab166a43df6c4432269f5f722a5c9f2d5937..8c1a7c03406ba54e9efb36eacd413adf233367c0 100644
--- a/cbc.h
+++ b/cbc.h
@@ -37,13 +37,13 @@ extern "C" {
 #define cbc_decrypt nettle_cbc_decrypt
 
 void
-cbc_encrypt(void *ctx, nettle_crypt_func f,
+cbc_encrypt(void *ctx, nettle_crypt_func *f,
 	    unsigned block_size, uint8_t *iv,
 	    unsigned length, uint8_t *dst,
 	    const uint8_t *src);
 
 void
-cbc_decrypt(void *ctx, nettle_crypt_func f,
+cbc_decrypt(void *ctx, nettle_crypt_func *f,
 	    unsigned block_size, uint8_t *iv,
 	    unsigned length, uint8_t *dst,
 	    const uint8_t *src);
diff --git a/ctr.c b/ctr.c
index 4d60eff7f9466b3ac6ffb73d5811c6cc1598e003..db13f7c5c567601fe177b3ecd8bfe61d69a7fe07 100644
--- a/ctr.c
+++ b/ctr.c
@@ -40,7 +40,7 @@
 #define NBLOCKS 4
 
 void
-ctr_crypt(void *ctx, nettle_crypt_func f,
+ctr_crypt(void *ctx, nettle_crypt_func *f,
 	  unsigned block_size, uint8_t *ctr,
 	  unsigned length, uint8_t *dst,
 	  const uint8_t *src)
diff --git a/ctr.h b/ctr.h
index ebd2a28f3337ff175cbdba2b408fdc164d79c962..3420abef38df09f9cb33a09c7a6333a9270b928e 100644
--- a/ctr.h
+++ b/ctr.h
@@ -37,7 +37,7 @@ extern "C" {
 #define ctr_crypt nettle_ctr_crypt
 
 void
-ctr_crypt(void *ctx, nettle_crypt_func f,
+ctr_crypt(void *ctx, nettle_crypt_func *f,
 	  unsigned block_size, uint8_t *ctr,
 	  unsigned length, uint8_t *dst,
 	  const uint8_t *src);
@@ -51,7 +51,7 @@ memcpy((ctx)->ctr, (data), sizeof((ctx)->ctr))
 #define CTR_CRYPT(self, f, length, dst, src)		\
 (0 ? ((f)(&(self)->ctx, 0, NULL, NULL))			\
    : ctr_crypt((void *) &(self)->ctx,			\
-               (nettle_crypt_func) (f),			\
+               (nettle_crypt_func *) (f),		\
 	       sizeof((self)->ctr), (self)->ctr,	\
                (length), (dst), (src)))
 
diff --git a/dsa-keygen.c b/dsa-keygen.c
index 757f175337c52848a52b6017af95806bbd7b3834..84cea545ae012330ffafe47e701c3aec0e430137 100644
--- a/dsa-keygen.c
+++ b/dsa-keygen.c
@@ -42,8 +42,8 @@
 int
 dsa_generate_keypair(struct dsa_public_key *pub,
 		     struct dsa_private_key *key,
-		     void *random_ctx, nettle_random_func random,
-		     void *progress_ctx, nettle_progress_func progress,
+		     void *random_ctx, nettle_random_func *random,
+		     void *progress_ctx, nettle_progress_func *progress,
 		     unsigned p_bits, unsigned q_bits)
 {
   mpz_t p0, p0q, r;
diff --git a/dsa-sha1-sign.c b/dsa-sha1-sign.c
index 264a89c11bf2852694b224091fbd0c0b2be83b2e..821702e8f6efc5b8f073e93000c3ef0f1434a6b2 100644
--- a/dsa-sha1-sign.c
+++ b/dsa-sha1-sign.c
@@ -32,7 +32,7 @@
 int
 dsa_sha1_sign_digest(const struct dsa_public_key *pub,
 		     const struct dsa_private_key *key,
-		     void *random_ctx, nettle_random_func random,
+		     void *random_ctx, nettle_random_func *random,
 		     const uint8_t *digest,
 		     struct dsa_signature *signature)
 {
@@ -44,7 +44,7 @@ dsa_sha1_sign_digest(const struct dsa_public_key *pub,
 int
 dsa_sha1_sign(const struct dsa_public_key *pub,
 	      const struct dsa_private_key *key,
-	      void *random_ctx, nettle_random_func random,
+	      void *random_ctx, nettle_random_func *random,
 	      struct sha1_ctx *hash,
 	      struct dsa_signature *signature)
 {
diff --git a/dsa-sha256-sign.c b/dsa-sha256-sign.c
index f8569f9fb1d371eb2f24f35237a289569e6e17c2..020d146b8e3a32f177371a8718ac112a78a369fd 100644
--- a/dsa-sha256-sign.c
+++ b/dsa-sha256-sign.c
@@ -32,7 +32,7 @@
 int
 dsa_sha256_sign_digest(const struct dsa_public_key *pub,
 		       const struct dsa_private_key *key,
-		       void *random_ctx, nettle_random_func random,
+		       void *random_ctx, nettle_random_func *random,
 		       const uint8_t *digest,
 		       struct dsa_signature *signature)
 {
@@ -43,7 +43,7 @@ dsa_sha256_sign_digest(const struct dsa_public_key *pub,
 int
 dsa_sha256_sign(const struct dsa_public_key *pub,
 		const struct dsa_private_key *key,
-		void *random_ctx, nettle_random_func random,
+		void *random_ctx, nettle_random_func *random,
 		struct sha256_ctx *hash,
 		struct dsa_signature *signature)
 {
diff --git a/dsa-sign.c b/dsa-sign.c
index 8c7058ce25c71fc9c559dc808f88f66575402594..18eeca34aeecc3b128614f2de5855c5aabd06c03 100644
--- a/dsa-sign.c
+++ b/dsa-sign.c
@@ -38,7 +38,7 @@
 int
 _dsa_sign(const struct dsa_public_key *pub,
 	  const struct dsa_private_key *key,
-	  void *random_ctx, nettle_random_func random,
+	  void *random_ctx, nettle_random_func *random,
 	  unsigned digest_size,
 	  const uint8_t *digest,
 	  struct dsa_signature *signature)
diff --git a/dsa.h b/dsa.h
index cb103d6344cc4ebc5ff80bf62593a92f06168921..7143d1ff68fac6ee23edb2fb2752eb7799415d14 100644
--- a/dsa.h
+++ b/dsa.h
@@ -32,9 +32,6 @@
 
 #include "sha.h"
 
-/* For nettle_random_func */
-#include "nettle-meta.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -152,14 +149,14 @@ dsa_signature_clear(struct dsa_signature *signature);
 int
 dsa_sha1_sign(const struct dsa_public_key *pub,
 	      const struct dsa_private_key *key,
-	      void *random_ctx, nettle_random_func random,
+	      void *random_ctx, nettle_random_func *random,
 	      struct sha1_ctx *hash,
 	      struct dsa_signature *signature);
 
 int
 dsa_sha256_sign(const struct dsa_public_key *pub,
 		const struct dsa_private_key *key,
-		void *random_ctx, nettle_random_func random,
+		void *random_ctx, nettle_random_func *random,
 		struct sha256_ctx *hash,
 		struct dsa_signature *signature);
 
@@ -176,13 +173,13 @@ dsa_sha256_verify(const struct dsa_public_key *key,
 int
 dsa_sha1_sign_digest(const struct dsa_public_key *pub,
 		     const struct dsa_private_key *key,
-		     void *random_ctx, nettle_random_func random,
+		     void *random_ctx, nettle_random_func *random,
 		     const uint8_t *digest,
 		     struct dsa_signature *signature);
 int
 dsa_sha256_sign_digest(const struct dsa_public_key *pub,
 		       const struct dsa_private_key *key,
-		       void *random_ctx, nettle_random_func random,
+		       void *random_ctx, nettle_random_func *random,
 		       const uint8_t *digest,
 		       struct dsa_signature *signature);
 
@@ -202,9 +199,9 @@ int
 dsa_generate_keypair(struct dsa_public_key *pub,
 		     struct dsa_private_key *key,
 
-		     void *random_ctx, nettle_random_func random,
+		     void *random_ctx, nettle_random_func *random,
 
-		     void *progress_ctx, nettle_progress_func progress,
+		     void *progress_ctx, nettle_progress_func *progress,
 		     unsigned p_bits, unsigned q_bits);
 
 /* Keys in sexp form. */
@@ -277,7 +274,7 @@ dsa_openssl_private_key_from_der(struct dsa_public_key *pub,
 int
 _dsa_sign(const struct dsa_public_key *pub,
 	  const struct dsa_private_key *key,
-	  void *random_ctx, nettle_random_func random,
+	  void *random_ctx, nettle_random_func *random,
 	  unsigned digest_size,
 	  const uint8_t *digest,
 	  struct dsa_signature *signature);
diff --git a/gcm.c b/gcm.c
index 7b2e6057591993f25166ad16e87638426a62b7c7..7829aff0ea9644d0c038fb4554f7289b2dcc76bf 100644
--- a/gcm.c
+++ b/gcm.c
@@ -323,7 +323,7 @@ gcm_gf_mul (union gcm_block *x, const union gcm_block *table)
  */
 void
 gcm_set_key(struct gcm_key *key,
-	    void *cipher, nettle_crypt_func f)
+	    void *cipher, nettle_crypt_func *f)
 {
   /* Middle element if GCM_TABLE_BITS > 0, otherwise the first
      element */
diff --git a/pkcs1-encrypt.c b/pkcs1-encrypt.c
index 10f4f9a307891d4c7dac8f619e62da511735493e..403bf69607881c20a7f6645161fe2a7582833530 100644
--- a/pkcs1-encrypt.c
+++ b/pkcs1-encrypt.c
@@ -39,7 +39,7 @@
 int
 pkcs1_encrypt (unsigned key_size,
 	       /* For padding */
-	       void *random_ctx, nettle_random_func random,
+	       void *random_ctx, nettle_random_func *random,
 	       unsigned length, const uint8_t *message,
 	       mpz_t m)
 {
diff --git a/pkcs1.h b/pkcs1.h
index 27219554ce1535bee82274f7cee25d87d61bc90a..d6e60539cf89910b4d912a0a8f849123a013c3cf 100644
--- a/pkcs1.h
+++ b/pkcs1.h
@@ -62,7 +62,7 @@ pkcs1_signature_prefix(unsigned key_size,
 int
 pkcs1_encrypt (unsigned key_size,
 	       /* For padding */
-	       void *random_ctx, nettle_random_func random,
+	       void *random_ctx, nettle_random_func *random,
 	       unsigned length, const uint8_t *message,
 	       mpz_t m);
 
diff --git a/rsa-blind.c b/rsa-blind.c
index eb5d0088806206c41af9520298a16dfa69ded6b6..96ed81ff91ba4cb5ee01b8acff5965c975c4c24d 100644
--- a/rsa-blind.c
+++ b/rsa-blind.c
@@ -35,7 +35,7 @@
    returns the inverse (ri), for use by rsa_unblind. */
 void
 _rsa_blind (const struct rsa_public_key *pub,
-	    void *random_ctx, nettle_random_func random,
+	    void *random_ctx, nettle_random_func *random,
 	    mpz_t c, mpz_t ri)
 {
   mpz_t r;
diff --git a/rsa-decrypt-tr.c b/rsa-decrypt-tr.c
index 1e21e985bf75bd46300d0f593aefa0ee94349c57..0ef5211220f1d2d3bd08f062ee5d23e2a7cc4842 100644
--- a/rsa-decrypt-tr.c
+++ b/rsa-decrypt-tr.c
@@ -36,7 +36,7 @@
 int
 rsa_decrypt_tr(const struct rsa_public_key *pub,
 	       const struct rsa_private_key *key,
-	       void *random_ctx, nettle_random_func random,
+	       void *random_ctx, nettle_random_func *random,
 	       unsigned *length, uint8_t *message,
 	       const mpz_t gibberish)
 {
diff --git a/rsa-encrypt.c b/rsa-encrypt.c
index 2e1df1d8d9ce1e54d951478687b2f4238d1509e4..877de7c976cc6a9dbebecdda6ab443413e29561a 100644
--- a/rsa-encrypt.c
+++ b/rsa-encrypt.c
@@ -34,7 +34,7 @@
 int
 rsa_encrypt(const struct rsa_public_key *key,
 	    /* For padding */
-	    void *random_ctx, nettle_random_func random,
+	    void *random_ctx, nettle_random_func *random,
 	    unsigned length, const uint8_t *message,
 	    mpz_t gibberish)
 {
diff --git a/rsa-keygen.c b/rsa-keygen.c
index b67aab85a01ed2248d616444806f57220cf11f08..8ca947f275eb1fb4573f13b90ae54063f2a5638e 100644
--- a/rsa-keygen.c
+++ b/rsa-keygen.c
@@ -45,8 +45,8 @@
 int
 rsa_generate_keypair(struct rsa_public_key *pub,
 		     struct rsa_private_key *key,
-		     void *random_ctx, nettle_random_func random,
-		     void *progress_ctx, nettle_progress_func progress,
+		     void *random_ctx, nettle_random_func *random,
+		     void *progress_ctx, nettle_progress_func *progress,
 		     unsigned n_size,
 		     unsigned e_size)
 {
diff --git a/rsa-pkcs1-sign-tr.c b/rsa-pkcs1-sign-tr.c
index 672b902b0c8e671698c20c173cc1b7af49a76ba6..90c412c3e092d06b5c76450a493778bb47016f51 100644
--- a/rsa-pkcs1-sign-tr.c
+++ b/rsa-pkcs1-sign-tr.c
@@ -34,7 +34,7 @@
 int
 rsa_pkcs1_sign_tr(const struct rsa_public_key *pub,
   	          const struct rsa_private_key *key,
-	          void *random_ctx, nettle_random_func random,
+	          void *random_ctx, nettle_random_func *random,
 	          unsigned length, const uint8_t *digest_info,
    	          mpz_t s)
 {
diff --git a/rsa.h b/rsa.h
index 9857b67c21f933bcbe5edd45143c909c1cd095da..eaeba8a351f8aefd9c0aed8d8da2d6b0fba6b7bd 100644
--- a/rsa.h
+++ b/rsa.h
@@ -179,7 +179,7 @@ rsa_pkcs1_sign(const struct rsa_private_key *key,
 int
 rsa_pkcs1_sign_tr(const struct rsa_public_key *pub,
   	          const struct rsa_private_key *key,
-	          void *random_ctx, nettle_random_func random,
+	          void *random_ctx, nettle_random_func *random,
 	          unsigned length, const uint8_t *digest_info,
    	          mpz_t s);
 int
@@ -406,7 +406,7 @@ _rsa_check_size(mpz_t n);
 
 void
 _rsa_blind (const struct rsa_public_key *pub,
-	    void *random_ctx, nettle_random_func random,
+	    void *random_ctx, nettle_random_func *random,
 	    mpz_t c, mpz_t ri);
 void
 _rsa_unblind (const struct rsa_public_key *pub, mpz_t c, const mpz_t ri);