BEREncodeCallback *f;
                                void *p;
 
+                               ber->ber_usertag = 0;
+
                                f = va_arg( ap, BEREncodeCallback * );
                                p = va_arg( ap, void * );
-
                                rc = (*f)( ber, p );
+
+                               if ( ber->ber_usertag ) {
+                                       ber->ber_usertag = 0;
+                                       goto next;
+                               }
                        } break;
 
                case 'b':       /* boolean */
                case 't':       /* tag for the next element */
                        ber->ber_tag = va_arg( ap, ber_tag_t );
                        ber->ber_usertag = 1;
-                       break;
+                       goto next;
 
                case 'v':       /* vector of strings */
                        if ( (ss = va_arg( ap, char ** )) == NULL )
                        break;
                }
 
-               if ( ber->ber_usertag == 0 ) {
-                       ber->ber_tag = LBER_DEFAULT;
-               } else {
-                       ber->ber_usertag = 0;
-               }
+               ber->ber_tag = LBER_DEFAULT;
+       next:;
        }
 
        va_end( ap );