diff --git a/src/lib/mpstream/mpstream.c b/src/lib/mpstream/mpstream.c
index 2860fd9efd670a62b28c39fdb748d9b38645851e..e70639aecfc788daf59e8e80555c5f3022c2cd7a 100644
--- a/src/lib/mpstream/mpstream.c
+++ b/src/lib/mpstream/mpstream.c
@@ -31,19 +31,6 @@ mpstream_reserve_slow(struct mpstream *stream, size_t size)
 	stream->end = stream->pos + size;
 }
 
-void
-mpstream_reset(struct mpstream *stream)
-{
-	size_t size = 0;
-	stream->buf = stream->reserve(stream->ctx, &size);
-	if (stream->buf == NULL) {
-		diag_set(OutOfMemory, size, "mpstream", "reset");
-		stream->error(stream->error_ctx);
-	}
-	stream->pos = stream->buf;
-	stream->end = stream->pos + size;
-}
-
 /**
  * A streaming API so that it's possible to encode to any output
  * stream.
@@ -58,7 +45,9 @@ mpstream_init(struct mpstream *stream, void *ctx,
 	stream->alloc = alloc;
 	stream->error = error;
 	stream->error_ctx = error_ctx;
-	mpstream_reset(stream);
+	stream->buf = NULL;
+	stream->pos = NULL;
+	stream->end = NULL;
 }
 
 void
diff --git a/src/lib/mpstream/mpstream.h b/src/lib/mpstream/mpstream.h
index 9a0359389578379b60ee157ddeb1fafd8656a0e7..4dd382f68cb5722f5c8cf05d9eeb9d38cda18d21 100644
--- a/src/lib/mpstream/mpstream.h
+++ b/src/lib/mpstream/mpstream.h
@@ -50,9 +50,6 @@ struct mpstream {
 void
 mpstream_reserve_slow(struct mpstream *stream, size_t size);
 
-void
-mpstream_reset(struct mpstream *stream);
-
 /**
  * A streaming API so that it's possible to encode to any output
  * stream.
@@ -65,7 +62,8 @@ mpstream_init(struct mpstream *stream, void *ctx,
 static inline void
 mpstream_flush(struct mpstream *stream)
 {
-	stream->alloc(stream->ctx, stream->pos - stream->buf);
+	if (stream->pos != stream->buf)
+		stream->alloc(stream->ctx, stream->pos - stream->buf);
 	stream->buf = stream->pos;
 }
 
diff --git a/test/unit/lua_msgpack.c b/test/unit/lua_msgpack.c
index ab8a996e60d320627087a40e88f0a4d2fa6dd258..fd6d194d9900feb1744b4c4cfc839f86ba50dead 100644
--- a/test/unit/lua_msgpack.c
+++ b/test/unit/lua_msgpack.c
@@ -61,7 +61,6 @@ test_encode_ext(lua_State *L)
 	   "UUID is correctly encoded as MP_EXT");
 	ok(type == MP_EXT, "type of UUID is MP_EXT");
 	ibuf_reset(ibuf);
-	mpstream_reset(&stream);
 
 	cord_ibuf_drop(ibuf);
 	mh_strnu32_delete(translation);
@@ -91,12 +90,12 @@ test_translation_in_encoding(lua_State *L)
 
 	struct ibuf *ibuf = cord_ibuf_take();
 	struct mpstream stream;
-	mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb,
-		      mpstream_error_mock, L);
 
 	lua_createtable(L, 0, 1);
 	lua_pushboolean(L, true);
 	lua_setfield(L, 1, alias);
+	mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb,
+		      mpstream_error_mock, L);
 	luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1,
 				      translation, NULL);
 	lua_pop(L, 1);
@@ -104,13 +103,14 @@ test_translation_in_encoding(lua_State *L)
 	ok(strncmp(ibuf->buf, "\x81\x00\xc3", ibuf_used(ibuf)) == 0,
 	   "first-level MP_MAP key is translated");
 	ibuf_reset(ibuf);
-	mpstream_reset(&stream);
 
 	lua_createtable(L, 0, 1);
 	lua_createtable(L, 0, 1);
 	lua_pushboolean(L, true);
 	lua_setfield(L, -2, alias);
 	lua_setfield(L, -2, "k");
+	mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb,
+		      mpstream_error_mock, L);
 	luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1,
 				      translation, NULL);
 	lua_pop(L, 1);
@@ -118,19 +118,19 @@ test_translation_in_encoding(lua_State *L)
 	ok(strncmp(ibuf->buf, "\x81\xa1k\x81\xa1x\xc3", ibuf_used(ibuf)) == 0,
 	   "only first-level MP_MAP key is translated");
 	ibuf_reset(ibuf);
-	mpstream_reset(&stream);
 
 	lua_createtable(L, 0, 1);
 	lua_pushnumber(L, 0);
 	lua_pushboolean(L, true);
 	lua_settable(L, -3);
+	mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb,
+		      mpstream_error_mock, L);
 	luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1,
 				      translation, NULL);
 	mpstream_flush(&stream);
 	ok(strncmp(ibuf->buf, "\x81\x00\xc3", ibuf_used(ibuf)) == 0,
 	   "only keys with MP_STRING type are translated");
 	ibuf_reset(ibuf);
-	mpstream_reset(&stream);
 
 	lua_createtable(L, 0, 1);
 	lua_pushboolean(L, true);
@@ -138,6 +138,8 @@ test_translation_in_encoding(lua_State *L)
 	lua_pushnumber(L, 0);
 	lua_pushboolean(L, false);
 	lua_settable(L, -3);
+	mpstream_init(&stream, ibuf, ibuf_reserve_cb, ibuf_alloc_cb,
+		      mpstream_error_mock, L);
 	luamp_encode_with_translation(L, luaL_msgpack_default, &stream, 1,
 				      translation, NULL);
 	lua_pop(L, 1);
@@ -147,7 +149,6 @@ test_translation_in_encoding(lua_State *L)
 	   "MP_MAP key that is the value of the translation are translated "
 	   "correctly");
 	ibuf_reset(ibuf);
-	mpstream_reset(&stream);
 
 	cord_ibuf_drop(ibuf);
 	mh_strnu32_delete(translation);