diff --git a/examples/nettle-benchmark.c b/examples/nettle-benchmark.c
index b73196b0cad2aa1371a9be9df9f9e7c9509a2744..9327881b0c214bda1fcdebca6f2e35c49850effa 100644
--- a/examples/nettle-benchmark.c
+++ b/examples/nettle-benchmark.c
@@ -809,7 +809,7 @@ main(int argc, char **argv)
 	  break;
 
       case OPT_HELP:
-	printf("Usage: nettle-benchmark [-f clock frequency] [alg]\n");
+	printf("Usage: nettle-benchmark [-f clock frequency] [alg...]\n");
 	return EXIT_SUCCESS;
 
       case '?':
@@ -819,8 +819,6 @@ main(int argc, char **argv)
 	abort();
     }
 
-  alg = argv[optind];
-
   time_init();
   bench_sha1_compress();
   bench_salsa20_core();
@@ -830,29 +828,36 @@ main(int argc, char **argv)
 
   header();
 
-  if (!alg || strstr ("memxor", alg))
+  do
     {
-      time_memxor();
-      printf("\n");
-    }
-  
-  for (i = 0; hashes[i]; i++)
-    if (!alg || strstr(hashes[i]->name, alg))
-      time_hash(hashes[i]);
+      alg = argv[optind];
+
+      if (!alg || strstr ("memxor", alg))
+	{
+	  time_memxor();
+	  printf("\n");
+	}
+
+      for (i = 0; hashes[i]; i++)
+	if (!alg || strstr(hashes[i]->name, alg))
+	  time_hash(hashes[i]);
+
+      if (!alg || strstr ("umac", alg))
+	time_umac();
 
-  if (!alg || strstr ("umac", alg))
-    time_umac();
+      if (!alg || strstr ("poly1305-aes", alg))
+	time_poly1305_aes();
 
-  if (!alg || strstr ("poly1305-aes", alg))
-    time_poly1305_aes();
+      for (i = 0; ciphers[i]; i++)
+	if (!alg || strstr(ciphers[i]->name, alg))
+	  time_cipher(ciphers[i]);
 
-  for (i = 0; ciphers[i]; i++)
-    if (!alg || strstr(ciphers[i]->name, alg))
-      time_cipher(ciphers[i]);
+      for (i = 0; aeads[i]; i++)
+	if (!alg || strstr(aeads[i]->name, alg))
+	  time_aead(aeads[i]);
 
-  for (i = 0; aeads[i]; i++)
-    if (!alg || strstr(aeads[i]->name, alg))
-      time_aead(aeads[i]);
+      optind++;
+    } while (alg && argv[optind]);
 
   return 0;
 }