diff --git a/src/lib-sieve/sieve-lexer.c b/src/lib-sieve/sieve-lexer.c
index dbc7d9e915c4d137c8d1da353b1fe9779baabd69..1c51cba811769176fce27e0d43ae804fa64007ef 100644
--- a/src/lib-sieve/sieve-lexer.c
+++ b/src/lib-sieve/sieve-lexer.c
@@ -795,13 +795,10 @@ static bool sieve_lexer_scan_raw_token(struct sieve_lexer *lexer)
 
 bool sieve_lexer_skip_token(struct sieve_lexer *lexer) 
 {
-	/* Scan token */
-	if ( !sieve_lexer_scan_raw_token(lexer) ) return FALSE;
-	
-	/* Skip any whitespace */	
-	while ( lexer->token_type == STT_WHITESPACE ) {
+	/* Scan token while skipping whitespace */
+	do { 
 		if ( !sieve_lexer_scan_raw_token(lexer) ) return FALSE;
-	}
+	} while ( lexer->token_type == STT_WHITESPACE );
 	
 	return TRUE;
 }