diff --git a/tools/sexp-conv.c b/tools/sexp-conv.c
index f2f027de396904d368d214a113ecf581db416623..8241a597ea7d71a45cc8f018f4b3221fbc409c63 100644
--- a/tools/sexp-conv.c
+++ b/tools/sexp-conv.c
@@ -603,8 +603,7 @@ sexp_check_token(struct sexp_parser *parser,
   sexp_get_token(parser->input,
 		 parser->transport ? SEXP_CANONICAL : parser->mode);
 
-  /* FIXME: Handle token == 0 meaning any. */ 
-  if (parser->input->token != token)
+  if (token && parser->input->token != token)
     die("Syntax error.\n");
 }
 
@@ -620,12 +619,10 @@ sexp_parse(struct sexp_parser *parser)
 {
   for (;;)
     {
-      if (!parser->expected)
-	sexp_get_token(parser->input,
-		       parser->transport ? SEXP_CANONICAL : parser->mode);
-      else
+      sexp_check_token(parser, parser->expected);
+
+      if (parser->expected)
 	{
-	  sexp_check_token(parser, parser->expected);
 	  parser->expected = 0;
 	  
 	  if (parser->input->token == SEXP_STRING)