diff --git a/CHANGES b/CHANGES
index 99d57a4d19326373d2a20e24b2d6b6a1cc93ae7c..4e28e98117dce099634fc704baa963a316ea46d1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,7 @@ Changes included in OpenLDAP 1.2
 	Fixed -lldap/ldap_init()
 	Updated ldap_open(3) man page to note ldap_init() is preferred.
 	Updated internal thread library
+	Updated slapd/back-shell to use void* private and pid_t
 	Build environment
 		Fixed --without-threads building
 		Fixed mkdep to handle multiple dependent files on one line
diff --git a/servers/slapd/back-shell/abandon.c b/servers/slapd/back-shell/abandon.c
index fbb799dc981fb65d610c67db56eea4a7011aeb5a..dad3204984d0bc6d4a7192f4bfb4f743faf23df6 100644
--- a/servers/slapd/back-shell/abandon.c
+++ b/servers/slapd/back-shell/abandon.c
@@ -21,7 +21,7 @@ shell_back_abandon(
 {
 	struct shellinfo	*si = (struct shellinfo *) be->be_private;
 	FILE			*rfp, *wfp;
-	int			pid;
+	pid_t			pid;
 	Operation		*o;
 
 	/* no abandon command defined - just kill the process handling it */
@@ -30,7 +30,7 @@ shell_back_abandon(
 		pid = -1;
 		for ( o = conn->c_ops; o != NULL; o = o->o_next ) {
 			if ( o->o_msgid == msgid ) {
-				pid = o->o_private;
+				pid = (pid_t) o->o_private;
 				break;
 			}
 		}
diff --git a/servers/slapd/back-shell/add.c b/servers/slapd/back-shell/add.c
index ec718618125a013ca1d1261314346644d93acf5c..61752d3278b9174b697901c0a912aac5ec523c59 100644
--- a/servers/slapd/back-shell/add.c
+++ b/servers/slapd/back-shell/add.c
@@ -28,7 +28,7 @@ shell_back_add(
 		return( -1 );
 	}
 
-	if ( (op->o_private = forkandexec( si->si_add, &rfp, &wfp )) == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_add, &rfp, &wfp )) == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return( -1 );
diff --git a/servers/slapd/back-shell/bind.c b/servers/slapd/back-shell/bind.c
index 025cbe973c2bc4ae2e1b3dc310534cac542d9cff..93ef4d869a177b225d16d01a2c55f7636bb99157 100644
--- a/servers/slapd/back-shell/bind.c
+++ b/servers/slapd/back-shell/bind.c
@@ -33,8 +33,8 @@ shell_back_bind(
 		return( -1 );
 	}
 
-	if ( (op->o_private = forkandexec( si->si_bind, &rfp, &wfp ))
-	    == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_bind, &rfp, &wfp ))
+	    == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return( -1 );
diff --git a/servers/slapd/back-shell/compare.c b/servers/slapd/back-shell/compare.c
index 9fd4343a0a083aa5e77464ac055ed4fce00231dc..1b724055f5833368f5b9c93a8156a15f3b1425b6 100644
--- a/servers/slapd/back-shell/compare.c
+++ b/servers/slapd/back-shell/compare.c
@@ -28,8 +28,8 @@ shell_back_compare(
 		return( -1 );
 	}
 
-	if ( (op->o_private = forkandexec( si->si_compare, &rfp, &wfp ))
-	    == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_compare, &rfp, &wfp ))
+	    == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return( -1 );
diff --git a/servers/slapd/back-shell/delete.c b/servers/slapd/back-shell/delete.c
index 2d55fdc429fc8dbbd4c36cc673ce114c9b12fdcb..be989ec9c5d6759da1dfea7a63c817a91e72e234 100644
--- a/servers/slapd/back-shell/delete.c
+++ b/servers/slapd/back-shell/delete.c
@@ -27,8 +27,8 @@ shell_back_delete(
 		return( -1 );
 	}
 
-	if ( (op->o_private = forkandexec( si->si_delete, &rfp, &wfp ))
-	    == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_delete, &rfp, &wfp ))
+	    == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return( -1 );
diff --git a/servers/slapd/back-shell/fork.c b/servers/slapd/back-shell/fork.c
index 2c2f9b72f889c1d44fb8628a5b82a4a894c48494..7619c367457656ad9856aaeaa38a4ad288c8ea67 100644
--- a/servers/slapd/back-shell/fork.c
+++ b/servers/slapd/back-shell/fork.c
@@ -11,7 +11,7 @@
 #include "slap.h"
 #include "shell.h"
 
-int
+pid_t
 forkandexec(
     char	**args,
     FILE	**rfp,
@@ -19,7 +19,7 @@ forkandexec(
 )
 {
 	int	p2c[2], c2p[2];
-	int	pid;
+	pid_t	pid;
 
 	if ( pipe( p2c ) != 0 || pipe( c2p ) != 0 ) {
 		Debug( LDAP_DEBUG_ANY, "pipe failed\n", 0, 0, 0 );
diff --git a/servers/slapd/back-shell/modify.c b/servers/slapd/back-shell/modify.c
index 034830b649baadb0a66f982903a0246fa74ca021..6e8d909c02ee098bac51f8ec13ddc93d9c31d0f9 100644
--- a/servers/slapd/back-shell/modify.c
+++ b/servers/slapd/back-shell/modify.c
@@ -29,8 +29,8 @@ shell_back_modify(
 		return( -1 );
 	}
 
-	if ( (op->o_private = forkandexec( si->si_modify, &rfp, &wfp ))
-	    == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_modify, &rfp, &wfp ))
+	    == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return( -1 );
diff --git a/servers/slapd/back-shell/modrdn.c b/servers/slapd/back-shell/modrdn.c
index ad7cc5ad4123b6c2001adb22cb9041996f180542..36bec9e4bc21bd83e15df0d950aceaf78f046f22 100644
--- a/servers/slapd/back-shell/modrdn.c
+++ b/servers/slapd/back-shell/modrdn.c
@@ -29,8 +29,8 @@ shell_back_modrdn(
 		return( -1 );
 	}
 
-	if ( (op->o_private = forkandexec( si->si_modrdn, &rfp, &wfp ))
-	    == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_modrdn, &rfp, &wfp ))
+	    == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return( -1 );
diff --git a/servers/slapd/back-shell/search.c b/servers/slapd/back-shell/search.c
index ded0b2f5fcc2851f73d5c8d503ddcbecfb2c015b..dc26be2d08a809e9bb117a81e740df466ac8a210 100644
--- a/servers/slapd/back-shell/search.c
+++ b/servers/slapd/back-shell/search.c
@@ -38,8 +38,8 @@ shell_back_search(
 		return( -1 );
 	}
 
-	if ( (op->o_private = forkandexec( si->si_search, &rfp, &wfp ))
-	    == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_search, &rfp, &wfp ))
+	    == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return( -1 );
diff --git a/servers/slapd/back-shell/unbind.c b/servers/slapd/back-shell/unbind.c
index 84bb05138ac789ee5a341f08e6a04806543ae561..7ad4ba619b34ed213fed5210b89d520d3cc0defc 100644
--- a/servers/slapd/back-shell/unbind.c
+++ b/servers/slapd/back-shell/unbind.c
@@ -26,8 +26,8 @@ shell_back_unbind(
 		return;
 	}
 
-	if ( (op->o_private = forkandexec( si->si_unbind, &rfp, &wfp ))
-	    == -1 ) {
+	if ( (op->o_private = (void *) forkandexec( si->si_unbind, &rfp, &wfp ))
+	    == (void *) -1 ) {
 		send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, NULL,
 		    "could not fork/exec" );
 		return;
diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h
index 085e30a507f1b490b834b3bb2dfda28ff2e7defd..fa683b37dd1c5caf0123ad19b494fa33ca630c09 100644
--- a/servers/slapd/slap.h
+++ b/servers/slapd/slap.h
@@ -286,7 +286,7 @@ typedef struct slap_op {
 	int		o_abandon;	/* signals op has been abandoned  */
 	ldap_pvt_thread_mutex_t	o_abandonmutex;	/* signals op has been abandoned  */
 
-	int		o_private;	/* anything the backend needs	  */
+	void	*o_private;	/* anything the backend needs	  */
 } Operation;
 
 /*