if ( LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_REFERRALS)
                                                         || lr->lr_parent != NULL )
                                        {
-                                               /* Assume referral not chased and return it to app */
-                                               v3ref = V3REF_TOAPP;
-
                                                /* Get the referral list */
                                                if ( ber_scanf( &tmpber, "{v}", &refs) == LBER_ERROR) {
                                                        rc = LDAP_DECODING_ERROR;
                                                                0, &lr->lr_res_error, &hadref );
                                                        lr->lr_status = LDAP_REQST_COMPLETED;
                                                        Debug( LDAP_DEBUG_TRACE,
-                                                               "read1msg: referral chased, "
+                                                               "read1msg: referral %s chased, "
                                                                "mark request completed, ld %p msgid %d\n",
-                                                               (void *)ld, lr->lr_msgid, 0);
+                                                               hadref ? "" : "not",
+                                                               (void *)ld, lr->lr_msgid);
                                                        if ( refer_cnt > 0 ) {
                                                                /* Referral successfully chased */
                                                                v3ref = V3REF_SUCCESS;
+                                                       } else {
+                                                               refer_cnt = 0;
                                                        }
                                                }
                                        }
                                        LDAP_FREE( lr->lr_res_error );
                                        lr->lr_res_error = NULL;
                                }
-
-                               /* Since it's not a SearchReference, it must be a
-                                * result. Since we're not chasing the referral,
-                                * this request is done.
-                                */
-                               if ( v3ref == V3REF_TOAPP ) {
-                                       lr->lr_status = LDAP_REQST_COMPLETED;
-                                       Debug( LDAP_DEBUG_TRACE,
-                                               "request done: ld %p msgid %d, "
-                                               "referral returned to app\n",
-                                               (void *)ld, lr->lr_msgid, 0);
-                                       ldap_return_request( ld, lr, 1 );
-                                       lr = NULL;
-                               }
                        }
                }
        }
         * and checks if all referrals have been chased.
         */
        if ( tag != LDAP_RES_SEARCH_ENTRY &&
-               v3ref != V3REF_TOAPP &&
+               tag != LDAP_RES_SEARCH_REFERENCE &&
                tag != LDAP_RES_INTERMEDIATE )
        {
                /* For a v3 search referral/reference, only come here if already chased it */
                if ( ld->ld_version >= LDAP_VERSION2 &&
+                       v3ref != V3REF_TOAPP &&
                        ( lr->lr_parent != NULL ||
                        LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_REFERRALS) ) )
                {