if( rc != LDAP_SUCCESS ) {
                                return rc;
                        }
-                       if ( tmpval.bv_len ) {
-                               mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
-                               mod->sml_op = mop;
-                               mod->sml_type.bv_val = NULL;
-                               mod->sml_desc = slap_schema.si_ad_structuralObjectClass;
-                               mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
-                               ber_dupbv( &mod->sml_bvalues[0], &tmpval );
-                               mod->sml_bvalues[1].bv_val = NULL;
-                               assert( mod->sml_bvalues[0].bv_val );
-                               *modtail = mod;
-                               modtail = &mod->sml_next;
-                       }
+
+                       mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
+                       mod->sml_op = mop;
+                       mod->sml_type.bv_val = NULL;
+                       mod->sml_desc = slap_schema.si_ad_structuralObjectClass;
+                       mod->sml_bvalues = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
+                       ber_dupbv( &mod->sml_bvalues[0], &tmpval );
+                       mod->sml_bvalues[1].bv_val = NULL;
+                       assert( mod->sml_bvalues[0].bv_val );
+                       *modtail = mod;
+                       modtail = &mod->sml_next;
                }
 
                if( SLAP_LASTMOD(be) ) {
 
        rc = structural_class( aoc->a_vals, &nsc, &oc, text, textbuf, textlen );
        if( rc != LDAP_SUCCESS ) {
                return rc;
-       } else if ( nsc.bv_len == 0 ) {
-               return LDAP_OBJECT_CLASS_VIOLATION;
        }
 
        *text = textbuf;
                }
        }
 
-       if( scp )
+       if( scp ) {
                *scp = sc;
+       }
 
        if( sc == NULL ) {
                *text = "no structural object classes provided";
        }
 
        *scbv = ocs[scn];
+
+       if( scbv->bv_len ) {
+               *text = "invalid structural object class";
+               return LDAP_OBJECT_CLASS_VIOLATION;
+       }
+
        return LDAP_SUCCESS;
 }