if ( id == 0 && msgid > LDAP_RES_UNSOLICITED ) {
                int     is_nod = 0;
 
-               tag = ber_peek_tag( ber, &len );
+               tag = ber_peek_tag( &tmpber, &len );
 
                /* we have a res oid */
                if ( tag == LDAP_TAG_EXOP_RES_OID ) {
                        static struct berval    bv_nod = BER_BVC( LDAP_NOTICE_OF_DISCONNECTION );
                        struct berval           resoid = BER_BVNULL;
 
-                       if ( ber_scanf( ber, "m", &resoid ) == LBER_ERROR ) {
+                       if ( ber_scanf( &tmpber, "m", &resoid ) == LBER_ERROR ) {
                                ld->ld_errno = LDAP_DECODING_ERROR;
                                ber_free( ber, 1 );
                                return -1;
 
                        is_nod = ber_bvcmp( &resoid, &bv_nod ) == 0;
 
-                       tag = ber_peek_tag( ber, &len );
+                       tag = ber_peek_tag( &tmpber, &len );
                }
 
 #if 0 /* don't need right now */
                if ( tag == LDAP_TAG_EXOP_RES_VALUE ) {
                        struct berval resdata;
 
-                       if ( ber_scanf( ber, "m", &resdata ) == LBER_ERROR ) {
+                       if ( ber_scanf( &tmpber, "m", &resdata ) == LBER_ERROR ) {
                                ld->ld_errno = LDAP_DECODING_ERROR;
                                ber_free( ber, 0 );
                                return ld->ld_errno;
                                *lcp = NULL;
                        }
 
-                       return LDAP_RES_EXTENDED;
+                       /* need to return -1, because otherwise
+                        * a valid result is expected */
+                       return -1;
                }
        }