diff --git a/servers/slapd/back-bdb/attr.c b/servers/slapd/back-bdb/attr.c
index 5540aef86d1ca5cd89c961d5be9f869da5f14b97..dd545d260211ac78e26550f9c95865f085683a00 100644
--- a/servers/slapd/back-bdb/attr.c
+++ b/servers/slapd/back-bdb/attr.c
@@ -156,12 +156,9 @@ bdb_attr_index_config(
 		}
 
 		if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) && !(
-			( ad->ad_type->sat_approx
+			ad->ad_type->sat_approx
 				&& ad->ad_type->sat_approx->smr_indexer
-				&& ad->ad_type->sat_approx->smr_filter )
-			&& ( ad->ad_type->sat_equality
-				&& ad->ad_type->sat_equality->smr_indexer
-				&& ad->ad_type->sat_equality->smr_filter ) ) )
+				&& ad->ad_type->sat_approx->smr_filter ) )
 		{
 			fprintf( stderr, "%s: line %d: "
 				"approx index of attribute \"%s\" disallowed\n",
diff --git a/servers/slapd/back-bdb/index.c b/servers/slapd/back-bdb/index.c
index f2d807eb52a8df8b56e48dea3bd585c28b5d4feb..e1f09f6fdc9becf71b4a457e5fba1e38dea59e6c 100644
--- a/servers/slapd/back-bdb/index.c
+++ b/servers/slapd/back-bdb/index.c
@@ -121,9 +121,14 @@ int bdb_index_param(
 		break;
 
 	case LDAP_FILTER_APPROX:
-		if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) ) {
-			goto done;
+		if ( desc->ad_type->sat_approx ) {
+			if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) ) {
+				goto done;
+			}
+			break;
 		}
+
+		/* Use EQUALITY rule and index for approximate match */
 		/* fall thru */
 
 	case LDAP_FILTER_EQUALITY:
diff --git a/servers/slapd/back-ldbm/attr.c b/servers/slapd/back-ldbm/attr.c
index 1ce058b966f84eba84c8157d6f1dcb583514c0cb..bb49d279c210b555c4a697c2e73432858b38806e 100644
--- a/servers/slapd/back-ldbm/attr.c
+++ b/servers/slapd/back-ldbm/attr.c
@@ -156,12 +156,9 @@ attr_index_config(
 		}
 
 		if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) && !(
-			( ad->ad_type->sat_approx
+			ad->ad_type->sat_approx
 				&& ad->ad_type->sat_approx->smr_indexer
-				&& ad->ad_type->sat_approx->smr_filter )
-			&& ( ad->ad_type->sat_equality
-				&& ad->ad_type->sat_equality->smr_indexer
-				&& ad->ad_type->sat_equality->smr_filter ) ) )
+				&& ad->ad_type->sat_approx->smr_filter ) )
 		{
 			fprintf( stderr, "%s: line %d: "
 				"approx index of attribute \"%s\" disallowed\n",
diff --git a/servers/slapd/back-ldbm/index.c b/servers/slapd/back-ldbm/index.c
index 13956bbc1ede3fe7517f9830805cbbb420c0b802..90911d36ad659610e6ef45dc274b7c61afc8625f 100644
--- a/servers/slapd/back-ldbm/index.c
+++ b/servers/slapd/back-ldbm/index.c
@@ -115,9 +115,14 @@ int index_param(
 		break;
 
 	case LDAP_FILTER_APPROX:
-		if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) ) {
-			goto done;
+		if ( desc->ad_type->sat_approx ) {
+			if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) ) {
+				goto done;
+			}
+			break;
 		}
+
+		/* Use EQUALITY rule and index for approximate match */
 		/* fall thru */
 
 	case LDAP_FILTER_EQUALITY:
diff --git a/servers/slapd/filterentry.c b/servers/slapd/filterentry.c
index 86a2db459dfcb135928fb68383a85d16df8713ae..681c66c5c156407aaf983d9996eb404d9ab20d63 100644
--- a/servers/slapd/filterentry.c
+++ b/servers/slapd/filterentry.c
@@ -437,8 +437,7 @@ test_ava_filter(
 			continue;
 		}
 
-		for ( bv = a->a_nvals; bv->bv_val != NULL; bv++ )
-		{
+		for ( bv = a->a_nvals; bv->bv_val != NULL; bv++ ) {
 			int ret;
 			int rc;
 			const char *text;
diff --git a/servers/slapd/matchedValues.c b/servers/slapd/matchedValues.c
index ef7b39638d06defa1b4aca7908e24a34cd5edece..b8a8e61c45d0f2ce62b6fc0fde8746f011e2dd4b 100644
--- a/servers/slapd/matchedValues.c
+++ b/servers/slapd/matchedValues.c
@@ -206,8 +206,8 @@ test_ava_vrFilter(
 		case LDAP_FILTER_APPROX:
 			mr = a->a_desc->ad_type->sat_approx;
 			if( mr != NULL ) break;
+			/* use EQUALITY matching rule if no APPROX rule */
 
-		/* use EQUALITY matching rule if no APPROX rule */
 		case LDAP_FILTER_EQUALITY:
 			mr = a->a_desc->ad_type->sat_equality;
 			break;
@@ -221,10 +221,7 @@ test_ava_vrFilter(
 			mr = NULL;
 		}
 
-		if( mr == NULL ) {
-			continue;
-
-		}
+		if( mr == NULL ) continue;
 
 		bv = a->a_nvals;
 		for ( j=0; bv->bv_val != NULL; bv++, j++ ) {
diff --git a/tests/data/search.out.master b/tests/data/search.out.master
index 6545de94a0d13aa4fe8e0cef6d60997dd703ac83..79ab08ab85939568dc3846f85e792131fcc69f39 100644
--- a/tests/data/search.out.master
+++ b/tests/data/search.out.master
@@ -39,6 +39,20 @@ pager: +1 313 555 4474
 facsimiletelephonenumber: +1 313 555 2177
 telephonenumber: +1 313 555 0355
 
+dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Universit
+ y of Michigan,c=US
+cn: Barbara Jensen
+cn: Babs Jensen
+sn:: IEplbnNlbiA=
+title: Mythical Manager, Research Systems
+
+dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,o=University 
+ of Michigan,c=US
+cn: Bjorn Jensen
+cn: Biiff Jensen
+sn: Jensen
+title: Director, Embedded Systems
+
 dn: cn=All Staff,ou=Groups,o=University of Michigan,c=US
 member: cn=Manager,o=University of Michigan,c=US
 member: cn=Barbara Jensen,ou=Information Technology Division,ou=People,o=Unive
diff --git a/tests/scripts/test003-search b/tests/scripts/test003-search
index f473680b31615cf8898e74aed2fd877d21bab104..4adf693f0a516fc696b127dc0be53655de477bdd 100755
--- a/tests/scripts/test003-search
+++ b/tests/scripts/test003-search
@@ -75,6 +75,16 @@ if test $RC != 0 ; then
 	exit $RC
 fi
 
+echo "Testing approximate searching..."
+$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
+	'(sn~=jENSEN)' name >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+	echo "ldapsearch failed ($RC)!"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit $RC
+fi
+
 echo "Testing OR searching..."
 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
 	'(|(givenname=Xx*yY*Z)(cn=)(undef=*)(objectclass=groupofnames)(sn~=jones)(member=cn=Manager,o=University of Michigan,c=US)(uniqueMember=cn=Manager,o=University of Michigan,c=US))' >> $SEARCHOUT 2>&1
diff --git a/tests/scripts/test009-referral b/tests/scripts/test009-referral
index d20edc21d2c2d8d0dfbb8bfebab9e333bac107fe..00a352393518bb7e05c205e39420410229fe5fd3 100755
--- a/tests/scripts/test009-referral
+++ b/tests/scripts/test009-referral
@@ -92,6 +92,16 @@ if test $RC != 0 ; then
 	exit $RC
 fi
 
+echo "Testing approximate searching..."
+$LDAPSEARCH -C -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
+	'(sn=jENSEN)' name >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+	echo "ldapsearch failed ($RC)!"
+	test $KILLSERVERS != no && kill -HUP $KILLPIDS
+	exit $RC
+fi
+
 echo "Testing OR searching..."
 $LDAPSEARCH -C -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
 	'(|(objectclass=groupofnames)(objectClass=groupofuniquenames)(sn=jones))' >> $SEARCHOUT 2>&1