diff --git a/src/trees-istream.c b/src/trees-istream.c
index b08ff161a469b2d25f62640c89810d5da46ea999..e94be7d2bbb54906be3dd737abec78561841ab44 100644
--- a/src/trees-istream.c
+++ b/src/trees-istream.c
@@ -431,5 +431,9 @@ trees_istream_create(struct istream *input,
   sstream->out_byte_count = 0;
 #endif
 
+#if DOVECOT_PREREQ(2, 3)
+	return i_stream_create(&sstream->istream, input, i_stream_get_fd(input), 0);
+#else
   return i_stream_create(&sstream->istream, input, i_stream_get_fd(input));
+#endif /* DOVECOT_PREREQ */
 }
diff --git a/src/trees-ostream.c b/src/trees-ostream.c
index 1b25a91f574f1dadb59b3e1aa6034168bb75542c..0cb786782bb943358e5aadaab60d5e4920ad449c 100644
--- a/src/trees-ostream.c
+++ b/src/trees-ostream.c
@@ -174,7 +174,14 @@ trees_ostream_sendv(struct ostream_private *stream,
 static int
 trees_ostream_flush(struct ostream_private *stream)
 {
+  /* This is pretty ugly but unfortunately between 2.2 and 2.3, Dovecot changed
+   * the expected value to be non zero in 2.3+ . */
+#if DOVECOT_PREREQ(2, 3)
+  ssize_t result = 1;
+#else
   ssize_t result = 0;
+#endif /* DOVECOT_PREREQ */
+
   struct trees_ostream *sstream = (struct trees_ostream *) stream;
 
   if (sstream->flushed) {