diff --git a/CHANGES b/CHANGES
index feadc798f3c91e6ea97938b6ca1fc3d830cc78e9..422bb19460ac9024b620e6ad1c18b208914168e4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -40,6 +40,7 @@ OpenLDAP 2.4.17 Engineering
 	Fixed slapo-collect collectinfo ordering (ITS#6076)
 	Fixed slapo-collect missing equality match rule (ITS#6075)
 	Fixed slapo-dds entry expiration (ITS#6169)
+	Fixed slapo-perl symbols (ITS#5658)
 	Fixed slapo-refint refint_repair handling (ITS#6056)
 	Added slapo-rwm rwm-drop-unrequested-attrs config option (ITS#6057)
 	Fixed slapo-rwm dn passing (ITS#6070)
diff --git a/servers/slapd/back-perl/close.c b/servers/slapd/back-perl/close.c
index 48fd480eb8ce91c1c7f3e636b7e62c247e453f0c..24263b04ae03eba956ac7d8dad7ce65969d8e25f 100644
--- a/servers/slapd/back-perl/close.c
+++ b/servers/slapd/back-perl/close.c
@@ -31,6 +31,9 @@ perl_back_close(
 	perl_destruct(PERL_INTERPRETER);
 	perl_free(PERL_INTERPRETER);
 	PERL_INTERPRETER = NULL;
+#ifdef PERL_SYS_TERM
+	PERL_SYS_TERM();
+#endif
 
 	ldap_pvt_thread_mutex_destroy( &perl_interpreter_mutex );	
 
diff --git a/servers/slapd/back-perl/init.c b/servers/slapd/back-perl/init.c
index 74e2dd052c31e37ba1603609d9a0fb9ed1b62068..c461bb2d478752e7d9a9fc17ea42ca81f4c05ec9 100644
--- a/servers/slapd/back-perl/init.c
+++ b/servers/slapd/back-perl/init.c
@@ -37,6 +37,7 @@ perl_back_initialize(
 )
 {
 	char *embedding[] = { "", "-e", "0" };
+	int argc = 3;
 
 	bi->bi_open = NULL;
 	bi->bi_config = 0;
@@ -77,9 +78,15 @@ perl_back_initialize(
 	
 	ldap_pvt_thread_mutex_init( &perl_interpreter_mutex );
 
+#ifdef PERL_SYS_INIT3
+	PERL_SYS_INIT3(&argc, &embedding, (char **)NULL);
+#endif
 	PERL_INTERPRETER = perl_alloc();
 	perl_construct(PERL_INTERPRETER);
-	perl_parse(PERL_INTERPRETER, perl_back_xs_init, 3, embedding, (char **)NULL);
+#ifdef PERL_EXIT_DESTRUCT_END
+	PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
+#endif
+	perl_parse(PERL_INTERPRETER, perl_back_xs_init, argc, embedding, (char **)NULL);
 	perl_run(PERL_INTERPRETER);
 	return 0;
 }