diff --git a/libraries/libldap/tls.c b/libraries/libldap/tls.c
index 6053ef85cbf062b322c6e15694bc3c9067a1628b..d7e9e650e9051ff8b7db33416f63b36c57da40d6 100644
--- a/libraries/libldap/tls.c
+++ b/libraries/libldap/tls.c
@@ -809,13 +809,8 @@ ldap_pvt_tls_get_option( LDAP *ld, int option, void *arg )
 {
 	struct ldapoptions *lo;
 
-	/* Get pointer to global option structure */
-	lo = LDAP_INT_GLOBAL_OPT();   
-	if (NULL == lo)	{
-		return LDAP_NO_MEMORY;
-	}
 
-	if(ld != NULL) {
+	if( ld != NULL ) {
 		assert( LDAP_VALID( ld ) );
 
 		if( !LDAP_VALID( ld ) ) {
@@ -823,6 +818,13 @@ ldap_pvt_tls_get_option( LDAP *ld, int option, void *arg )
 		}
 
 		lo = &ld->ld_options;
+
+	} else {
+		/* Get pointer to global option structure */
+		lo = LDAP_INT_GLOBAL_OPT();   
+		if( lo == NULL ) {
+			return LDAP_NO_MEMORY;
+		}
 	}
 
 	switch( option ) {
@@ -868,13 +870,7 @@ ldap_pvt_tls_set_option( LDAP *ld, int option, void *arg )
 {
 	struct ldapoptions *lo;
 
-	/* Get pointer to global option structure */
-	lo = LDAP_INT_GLOBAL_OPT();   
-	if (NULL == lo)	{
-		return LDAP_NO_MEMORY;
-	}
-
-	if(ld != NULL) {
+	if( ld != NULL ) {
 		assert( LDAP_VALID( ld ) );
 
 		if( !LDAP_VALID( ld ) ) {
@@ -882,6 +878,13 @@ ldap_pvt_tls_set_option( LDAP *ld, int option, void *arg )
 		}
 
 		lo = &ld->ld_options;
+
+	} else {
+		/* Get pointer to global option structure */
+		lo = LDAP_INT_GLOBAL_OPT();   
+		if( lo == NULL ) {
+			return LDAP_NO_MEMORY;
+		}
 	}
 
 	switch( option ) {
@@ -910,7 +913,7 @@ ldap_pvt_tls_set_option( LDAP *ld, int option, void *arg )
 		return 0;
 	}
 
-	if ( lo != NULL ) {
+	if ( ld != NULL ) {
 		return -1;
 	}
 
diff --git a/servers/slapd/main.c b/servers/slapd/main.c
index 28be1d10d16ab463aa271b7f365dd55026004427..1d01179062fb1da6b40e962c8e7f5f2dfb8fdadf 100644
--- a/servers/slapd/main.c
+++ b/servers/slapd/main.c
@@ -358,10 +358,21 @@ int main( int argc, char **argv )
 	}
 
 #ifdef HAVE_TLS
-	ldap_pvt_tls_init();
+	rc = ldap_pvt_tls_init();
+	if( rc != 0) {
+		Debug( LDAP_DEBUG_ANY,
+		    "main: TLS init failed: %d\n",
+		    0, 0, 0 );
+		rc = 1;
+		SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
+		goto destroy;
+	}
 
-	if (ldap_pvt_tls_init_def_ctx() != 0)
-	{
+	rc = ldap_pvt_tls_init_def_ctx();
+	if( rc != 0) {
+		Debug( LDAP_DEBUG_ANY,
+		    "main: TLS init def ctx failed: %d\n",
+		    0, 0, 0 );
 		rc = 1;
 		SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
 		goto destroy;