diff --git a/src/managesieve-login/client.c b/src/managesieve-login/client.c
index bb9f73d5825162b6393874d33313581a6f4fb9ac..8ceb43a68d388ab8f423f0cfa0cf5a426633a96e 100644
--- a/src/managesieve-login/client.c
+++ b/src/managesieve-login/client.c
@@ -395,7 +395,8 @@ static int managesieve_client_create(struct client *client)
 	}
 	msieve_client->parser = managesieve_parser_create(
 		msieve_client->common.input, MAX_MANAGESIEVE_LINE);
-	client->io = io_add(client->fd, IO_READ, client_input, client);
+	client->io = io_add_istream(msieve_client->common.input,
+				    client_input, client);
 	return 0;
 }