diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c
index 0ce75ba9af94e1a4939849a101a03973a1d513a0..b25feb5d31f65bce166391a992a5c330327afb6f 100644
--- a/servers/slapd/connection.c
+++ b/servers/slapd/connection.c
@@ -1167,15 +1167,16 @@ operations_error:
 	return NULL;
 }
 
+static const Listener dummy_list = { {0, ""}, {0, ""} };
+
 int connection_client_setup(
 	ber_socket_t s,
-	Listener *l,
 	ldap_pvt_thread_start_t *func,
 	void *arg )
 {
 	Connection *c;
 
-	if ( connection_init( s, l, "", "", CONN_IS_CLIENT, 0, NULL ) < 0 ) {
+	if ( connection_init( s, &dummy_list, "", "", CONN_IS_CLIENT, 0, NULL ) < 0 ) {
 		return -1;
 	}
 
@@ -1858,3 +1859,26 @@ int connection_write(ber_socket_t s)
 	return 0;
 }
 
+void
+connection_fake_init(
+	Connection *conn,
+	Operation *op,
+	void *ctx )
+{
+        conn->c_connid = -1;
+        conn->c_send_ldap_result = slap_send_ldap_result;
+        conn->c_send_search_entry = slap_send_search_entry;
+        conn->c_send_search_reference = slap_send_search_reference;
+        conn->c_listener = (Listener *)&dummy_list;
+        conn->c_peer_name = slap_empty_bv;
+
+        /* set memory context */
+        op->o_tmpmemctx = sl_mem_create( SLMALLOC_SLAB_SIZE, ctx );
+        op->o_tmpmfuncs = &sl_mfuncs;
+	op->o_threadctx = ctx;
+
+        op->o_conn = conn;
+        op->o_connid = op->o_conn->c_connid;
+
+	op->o_time = slap_get_time();
+}
diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h
index cbcd3faf7083c9bcf5cf340a9761be47fb0d6daa..2956c7ed7071fb76111fca74576c186a96c1659e 100644
--- a/servers/slapd/proto-slap.h
+++ b/servers/slapd/proto-slap.h
@@ -340,7 +340,6 @@ LDAP_SLAPD_F (int) connections_timeout_idle LDAP_P((time_t));
 
 LDAP_SLAPD_F (int) connection_client_setup LDAP_P((
 	ber_socket_t s,
-	Listener *l,
 	ldap_pvt_thread_start_t *func,
 	void *arg ));
 LDAP_SLAPD_F (void) connection_client_enable LDAP_P(( ber_socket_t s ));
@@ -372,6 +371,10 @@ LDAP_SLAPD_F (Connection *) connection_next LDAP_P((
 LDAP_SLAPD_F (void) connection_done LDAP_P((Connection *));
 
 LDAP_SLAPD_F (void) connection2anonymous LDAP_P((Connection *));
+LDAP_SLAPD_F (void) connection_fake_init LDAP_P((
+	Connection *conn,
+	Operation *op,
+	void *threadctx ));
 
 /*
  * cr.c
diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c
index ea3da5f929513ec5e2990d86f6fd69234fc3e842..cb0a461adc4c00126cde391ee670cdeafcdf9b6e 100644
--- a/servers/slapd/syncrepl.c
+++ b/servers/slapd/syncrepl.c
@@ -165,8 +165,6 @@ ldap_sync_search(
 	return rc;
 }
 
-static const Listener dummy_list = { {0, ""}, {0, ""} };
-
 static int
 do_syncrep1(
 	Operation *op,
@@ -809,25 +807,12 @@ do_syncrepl(
 		return NULL;
 	}
 
-	conn.c_connid = -1;
-	conn.c_send_ldap_result = slap_send_ldap_result;
-	conn.c_send_search_entry = slap_send_search_entry;
-	conn.c_send_search_reference = slap_send_search_reference;
-	conn.c_listener = (Listener *)&dummy_list;
-	conn.c_peer_name = slap_empty_bv;
-
-	/* set memory context */
-	op.o_tmpmemctx = sl_mem_create( SLMALLOC_SLAB_SIZE, ctx );
-	op.o_tmpmfuncs = &sl_mfuncs;
+	connection_fake_init( &conn, &op, ctx );
 
 	op.o_dn = si->si_updatedn;
 	op.o_ndn = si->si_updatedn;
-	op.o_time = slap_get_time();
-	op.o_threadctx = ctx;
 	op.o_managedsait = 1;
 	op.o_bd = si->si_be;
-	op.o_conn = &conn;
-	op.o_connid = op.o_conn->c_connid;
 
 	op.o_sync_state.ctxcsn = NULL;
 	op.o_sync_state.sid = -1;
@@ -854,7 +839,7 @@ do_syncrepl(
 			 */
 			if ( rc == LDAP_SUCCESS ) {
 				if ( first ) {
-					rc = connection_client_setup( s, (Listener *)&dummy_list, do_syncrepl,
+					rc = connection_client_setup( s, do_syncrepl,
 						arg );
 				} else {
 					connection_client_enable( s );