diff --git a/ChangeLog b/ChangeLog
index 6da59bd36f7c512e7c03ae38dee239b0c63bf129..28460864e9f0db6f4520e108c43d1fe301e1f5f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2017-09-24  Niels Möller  <nisse@lysator.liu.se>
 
+	* tools/pkcs1-conv.c (base64_decode_in_place): New helper
+	function.
+	(decode_base64): Use it.
+
+	* sexp-transport-format.c (base64_encode_in_place): New helper
+	function.
+	(sexp_transport_vformat): Use it.
+
+	* testsuite/base64-test.c (test_fuzz_once): Update to use char
+	type where appropriate.
+	(test_main): Use helper functions base64_encode_in_place and
+	base64_decode_in_place (copied to this file).
+
 	* testsuite/testutils.c (tstring_data): Use uint8_t for data
 	argument.
 	* testsuite/testutils.h (SDATA): Use US macro to cast data
diff --git a/base64.h b/base64.h
index a6cac86067644b2f6d6865af3564a16f0eca5c06..8e69adb1dbe916488d04054231ccc7ae0e7f0839 100644
--- a/base64.h
+++ b/base64.h
@@ -110,7 +110,9 @@ base64_encode_final(struct base64_encode_ctx *ctx,
 
 /* Encodes a string in one go, including any padding at the end.
  * Generates exactly BASE64_ENCODE_RAW_LENGTH(length) bytes of output.
- * Supports overlapped operation, if src <= dst. */
+ * Supports overlapped operation, if src <= dst. FIXME: Use of overlap
+ * is deprecated, if needed there should be a separate public fucntion
+ * to do that.*/
 void
 base64_encode_raw(char *dst, size_t length, const uint8_t *src);
 
diff --git a/sexp-transport-format.c b/sexp-transport-format.c
index 70de1c03e4f531539f892ad0d7658bc70d7521d0..4f83f8888c8abab42088da8a17f83e34696fdc0b 100644
--- a/sexp-transport-format.c
+++ b/sexp-transport-format.c
@@ -40,6 +40,12 @@
 #include "base64.h"
 #include "buffer.h"
 
+static inline void
+base64_encode_in_place (size_t length, uint8_t *data)
+{
+  base64_encode_raw ((char *) data, length, data);
+}
+
 size_t
 sexp_transport_vformat(struct nettle_buffer *buffer,
 		       const char *format, va_list args)
@@ -68,8 +74,7 @@ sexp_transport_vformat(struct nettle_buffer *buffer,
       if (!nettle_buffer_space(buffer, base64_length - length))
 	return 0;
 
-      base64_encode_raw((char*) (buffer->contents + start),
-			length, buffer->contents + start);
+      base64_encode_in_place(length, buffer->contents + start);
       
       if (!NETTLE_BUFFER_PUTC(buffer, '}'))
 	return 0;
diff --git a/testsuite/base64-test.c b/testsuite/base64-test.c
index f366a413843731a19916e1d9121831e2f993e809..cc45c471459ceda266938ecddc901ef36153bb7d 100644
--- a/testsuite/base64-test.c
+++ b/testsuite/base64-test.c
@@ -9,7 +9,7 @@ test_fuzz_once(struct base64_encode_ctx *encode,
 {
   size_t base64_len = BASE64_ENCODE_RAW_LENGTH (size);
   size_t out_len;
-  uint8_t *base64 = xalloc (base64_len + 2);
+  char *base64 = xalloc (base64_len + 2);
   uint8_t *decoded = xalloc (size + 2);
 
   *base64++ = 0x12;
@@ -66,6 +66,20 @@ test_fuzz(void)
     }
 }
 
+static inline void
+base64_encode_in_place (size_t length, uint8_t *data)
+{
+  base64_encode_raw ((char *) data, length, data);
+}
+
+static inline int
+base64_decode_in_place (struct base64_decode_ctx *ctx, size_t *dst_length,
+			size_t length, uint8_t *data)
+{
+  return base64_decode_update (ctx, dst_length,
+			       data, length, (const char *) data);
+}
+
 void
 test_main(void)
 {
@@ -111,12 +125,12 @@ test_main(void)
     size_t dst_length;
     
     ASSERT(BASE64_ENCODE_RAW_LENGTH(5) == 8);
-    base64_encode_raw(buffer, 5, buffer);
+    base64_encode_in_place(5, buffer);
     ASSERT(MEMEQ(9, buffer, "SGVsbG8=x"));
 
     base64_decode_init(&ctx);
     dst_length = 0; /* Output parameter only. */
-    ASSERT(base64_decode_update(&ctx, &dst_length, buffer, 8, buffer));
+    ASSERT(base64_decode_in_place(&ctx, &dst_length, 8, buffer));
     ASSERT(dst_length == 5);
     
     ASSERT(MEMEQ(9, buffer, "HelloG8=x"));
diff --git a/tools/pkcs1-conv.c b/tools/pkcs1-conv.c
index c8697c445dc5c2a74258a93400e90eaaf799aba4..efd6528a4ab4401f73a30f48603752723cc5ef32 100644
--- a/tools/pkcs1-conv.c
+++ b/tools/pkcs1-conv.c
@@ -244,6 +244,14 @@ read_pem(struct nettle_buffer *buffer, FILE *f,
     }
 }
 
+static inline int
+base64_decode_in_place (struct base64_decode_ctx *ctx, size_t *dst_length,
+			size_t length, uint8_t *data)
+{
+  return base64_decode_update (ctx, dst_length,
+			       data, length, (const char *) data);
+}
+
 static int
 decode_base64(struct nettle_buffer *buffer,
 	      size_t start, size_t *length)
@@ -253,9 +261,8 @@ decode_base64(struct nettle_buffer *buffer,
   base64_decode_init(&ctx);
 
   /* Decode in place */
-  if (base64_decode_update(&ctx,
-			   length, buffer->contents + start,
-			   *length, (const char *) buffer->contents + start)
+  if (base64_decode_in_place(&ctx, length,
+			     *length, buffer->contents + start)
       && base64_decode_final(&ctx))
     return 1;