diff --git a/servers/slapd/back-perl/add.c b/servers/slapd/back-perl/add.c
index 2e029e4af0b68d15ad7480b21effb238938f24fd..6245bc1e78f90505a5b47f2fa676d9f12bbf2c7a 100644
--- a/servers/slapd/back-perl/add.c
+++ b/servers/slapd/back-perl/add.c
@@ -26,6 +26,9 @@ perl_back_add(
 	int len;
 	int count;
 
+#if defined(HAVE_WIN32_ASPERL) || defined(USE_ITHREADS)
+	PERL_SET_CONTEXT( PERL_INTERPRETER );
+#endif
 	ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );
 	ldap_pvt_thread_mutex_lock( &entry2str_mutex );
 
diff --git a/servers/slapd/back-perl/compare.c b/servers/slapd/back-perl/compare.c
index 43985bbdcad6da564e76d55c015ab138df732e43..d900db5c22edffc07c218aa0c310b4cd99b621ac 100644
--- a/servers/slapd/back-perl/compare.c
+++ b/servers/slapd/back-perl/compare.c
@@ -41,6 +41,9 @@ perl_back_compare(
 		op->orc_ava->aa_desc->ad_cname.bv_val ), "=" ),
 		op->orc_ava->aa_value.bv_val );
 
+#if defined(HAVE_WIN32_ASPERL) || defined(USE_ITHREADS)
+	PERL_SET_CONTEXT( PERL_INTERPRETER );
+#endif
 	ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );	
 
 	{
diff --git a/servers/slapd/back-perl/delete.c b/servers/slapd/back-perl/delete.c
index 45dbbcb241c782ee3cc5468460efbef2bcf918e0..87aa499a98a792edea8e6a5a0415e2caaea99508 100644
--- a/servers/slapd/back-perl/delete.c
+++ b/servers/slapd/back-perl/delete.c
@@ -25,6 +25,9 @@ perl_back_delete(
 	PerlBackend *perl_back = (PerlBackend *) op->o_bd->be_private;
 	int count;
 
+#if defined(HAVE_WIN32_ASPERL) || defined(USE_ITHREADS)
+	PERL_SET_CONTEXT( PERL_INTERPRETER );
+#endif
 	ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );	
 
 	{
diff --git a/servers/slapd/back-perl/modify.c b/servers/slapd/back-perl/modify.c
index 1da13c00f273585d34c94809cc37c8b2e3e0a3b7..b315ee5aa03c1a09c43f7c2083a184a7276fcb11 100644
--- a/servers/slapd/back-perl/modify.c
+++ b/servers/slapd/back-perl/modify.c
@@ -27,6 +27,9 @@ perl_back_modify(
 	int count;
 	int i;
 
+#if defined(HAVE_WIN32_ASPERL) || defined(USE_ITHREADS)
+	PERL_SET_CONTEXT( PERL_INTERPRETER );
+#endif
 
 	ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );	
 
diff --git a/servers/slapd/back-perl/modrdn.c b/servers/slapd/back-perl/modrdn.c
index 60bff790fd84e117768cf68e1c1981f2fbf6144f..a8f3be5f23a237dcce37d6691def29f2a424c775 100644
--- a/servers/slapd/back-perl/modrdn.c
+++ b/servers/slapd/back-perl/modrdn.c
@@ -25,6 +25,10 @@ perl_back_modrdn(
 	PerlBackend *perl_back = (PerlBackend *) op->o_bd->be_private;
 	int count;
 
+#if defined(HAVE_WIN32_ASPERL) || defined(USE_ITHREADS)
+	PERL_SET_CONTEXT( PERL_INTERPRETER );
+#endif
+
 	ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );	
 
 	{
diff --git a/servers/slapd/back-perl/search.c b/servers/slapd/back-perl/search.c
index 1524900eb3ae6d3a8b640d37150ca288f387b777..4e8d68a791966e4d2913f3024250fa618ff01507 100644
--- a/servers/slapd/back-perl/search.c
+++ b/servers/slapd/back-perl/search.c
@@ -34,6 +34,9 @@ perl_back_search(
 	char *buf;
 	int i;
 
+#if defined(HAVE_WIN32_ASPERL) || defined(USE_ITHREADS)
+	PERL_SET_CONTEXT( PERL_INTERPRETER );
+#endif
 	ldap_pvt_thread_mutex_lock( &perl_interpreter_mutex );	
 
 	{
@@ -84,8 +87,6 @@ perl_back_search(
 						send_entry = 1;
 
 					if (send_entry) {
-						int	rc;
-
 						rs->sr_entry = e;
 						rs->sr_attrs = op->ors_attrs;
 						rs->sr_flags = REP_ENTRY_MODIFIABLE;