diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index bacf4600266dff8b870f46abc42e877711439c2a..79d0f864042ded758c4d627371a1ef011323df86 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -108,7 +108,6 @@ client_create(int fd_in, int fd_out, const char *session_id,
 	      const struct managesieve_settings *set)
 {
 	struct client *client;
-	const char *ident;
 	struct sieve_environment svenv;
 	struct sieve_instance *svinst;
 	struct sieve_storage *storage;
@@ -167,14 +166,11 @@ client_create(int fd_in, int fd_out, const char *session_id,
 	client->svinst = svinst;
 	client->storage = storage;
 
-	ident = mail_user_get_anvil_userip_ident(client->user);
-	if (ident != NULL) {
-		master_service_anvil_send(
-			master_service, t_strconcat("CONNECT\t", my_pid,
-						    "\tsieve/", ident,
-						    "\n", NULL));
+	struct master_service_anvil_session anvil_session;
+	mail_user_get_anvil_session(client->user, &anvil_session);
+	if (master_service_anvil_connect(master_service, &anvil_session, TRUE,
+					 client->anvil_conn_guid))
 		client->anvil_sent = TRUE;
-	}
 
 	managesieve_client_count++;
 	DLLIST_PREPEND(&managesieve_clients, client);
@@ -254,11 +250,10 @@ void client_destroy(struct client *client, const char *reason)
 	}
 
 	if (client->anvil_sent) {
-		master_service_anvil_send(
-			master_service, t_strconcat(
-				"DISCONNECT\t", my_pid, "\tsieve/",
-				mail_user_get_anvil_userip_ident(client->user),
-				"\n", NULL));
+		struct master_service_anvil_session anvil_session;
+		mail_user_get_anvil_session(client->user, &anvil_session);
+		master_service_anvil_disconnect(master_service, &anvil_session,
+						client->anvil_conn_guid);
 	}
 
 	managesieve_parser_destroy(&client->parser);
diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h
index 6053eb6a86c8cce4401cdef34e95946e85fa14cf..2448dc22bf1decded3133a1a17f5dc5fdbd27b95 100644
--- a/src/managesieve/managesieve-client.h
+++ b/src/managesieve/managesieve-client.h
@@ -1,6 +1,7 @@
 #ifndef MANAGESIEVE_CLIENT_H
 #define MANAGESIEVE_CLIENT_H
 
+#include "guid.h"
 #include "managesieve-commands.h"
 
 struct client;
@@ -45,6 +46,7 @@ struct client {
 	struct istream *input;
 	struct ostream *output;
 	struct timeout *to_idle, *to_idle_output;
+	guid_128_t anvil_conn_guid;
 
 	pool_t pool;
 	struct mail_storage_service_user *service_user;