Index: uspace/app/tmon/main.c
===================================================================
--- uspace/app/tmon/main.c	(revision ff16da5ff011339c7b70a51ff8f16b5336b3b868)
+++ uspace/app/tmon/main.c	(revision 119a794bc34ec072137c0cd0d2198857dfbfdffd)
@@ -91,5 +91,5 @@
 	printf(NAME ": benchmark USB diagnostic device\n\n");
 
-	printf("Usage: %s command [options] [device]\n", app_name);
+	printf("Usage: %s command [device] [options]\n", app_name);
 	printf("Available commands:\n");
 	for (int i = 0; commands[i].name; ++i) {
@@ -118,5 +118,5 @@
 	}
 
-	return cmd->action(argc - 2, argv + 2);
+	return cmd->action(argc - 1, argv + 1);
 }
 
Index: uspace/app/tmon/stress_test.c
===================================================================
--- uspace/app/tmon/stress_test.c	(revision ff16da5ff011339c7b70a51ff8f16b5336b3b868)
+++ uspace/app/tmon/stress_test.c	(revision 119a794bc34ec072137c0cd0d2198857dfbfdffd)
@@ -38,4 +38,5 @@
 #include <errno.h>
 #include <str_error.h>
+#include <getopt.h>
 #include <usbdiag_iface.h>
 #include "commands.h"
@@ -46,10 +47,19 @@
 typedef struct tmon_stress_test_params {
 	tmon_test_params_t base; /* inheritance */
-	int cycles;
+	uint32_t cycles;
 	size_t size;
 } tmon_stress_test_params_t;
 
+static struct option long_options[] = {
+	{"cycles", required_argument, NULL, 'n'},
+	{"size", required_argument, NULL, 's'},
+	{0, 0, NULL, 0}
+};
+
+static const char *short_options = "n:s:";
+
 static int read_params(int argc, char *argv[], tmon_test_params_t **params)
 {
+	int rc;
 	tmon_stress_test_params_t *p = (tmon_stress_test_params_t *) malloc(sizeof(tmon_stress_test_params_t));
 	if (!p)
@@ -57,11 +67,38 @@
 
 	// Default values.
-	p->cycles = 1024;
-	p->size = 65024;
-
-	// TODO: Parse argc, argv here.
+	p->cycles = 256;
+	p->size = 1024;
+
+	// Parse other than default values.
+	int c;
+	for (c = 0, optreset = 1, optind = 0; c != -1;) {
+		c = getopt_long(argc, argv, short_options, long_options, NULL);
+		switch (c) {
+		case -1:
+			break;
+		case 'n':
+			if (!optarg || str_uint32_t(optarg, NULL, 10, false, &p->cycles) != EOK) {
+				puts(NAME ": Invalid number of cycles.\n");
+				rc = EINVAL;
+				goto err_malloc;
+			}
+			break;
+		case 's':
+			if (!optarg || str_size_t(optarg, NULL, 10, false, &p->size) != EOK) {
+				puts(NAME ": Invalid data size.\n");
+				rc = EINVAL;
+				goto err_malloc;
+			}
+			break;
+		}
+	}
 
 	*params = (tmon_test_params_t *) p;
 	return EOK;
+
+err_malloc:
+	free(p);
+	*params = NULL;
+	return rc;
 }
 
@@ -70,6 +107,6 @@
 	const tmon_stress_test_params_t *params = (tmon_stress_test_params_t *) generic_params;
 	printf("Executing interrupt in stress test.\n"
-	    "      Packet count: %d\n"
-	    "      Packet size: %ld\n", params->cycles, params->size);
+	    "      Number of cycles: %d\n"
+	    "      Data size: %ld B\n", params->cycles, params->size);
 
 	int rc = usbdiag_stress_intr_in(exch, params->cycles, params->size);
@@ -86,6 +123,6 @@
 	const tmon_stress_test_params_t *params = (tmon_stress_test_params_t *) generic_params;
 	printf("Executing interrupt out stress test.\n"
-	    "      Packet count: %d\n"
-	    "      Packet size: %ld\n", params->cycles, params->size);
+	    "      Number of cycles: %d\n"
+	    "      Data size: %ld B\n", params->cycles, params->size);
 
 	int rc = usbdiag_stress_intr_out(exch, params->cycles, params->size);
@@ -102,6 +139,6 @@
 	const tmon_stress_test_params_t *params = (tmon_stress_test_params_t *) generic_params;
 	printf("Executing bulk in stress test.\n"
-	    "      Packet count: %d\n"
-	    "      Packet size: %ld\n", params->cycles, params->size);
+	    "      Number of cycles: %d\n"
+	    "      Data size: %ld B\n", params->cycles, params->size);
 
 	int rc = usbdiag_stress_bulk_in(exch, params->cycles, params->size);
@@ -118,6 +155,6 @@
 	const tmon_stress_test_params_t *params = (tmon_stress_test_params_t *) generic_params;
 	printf("Executing bulk out stress test.\n"
-	    "      Packet count: %d\n"
-	    "      Packet size: %ld\n", params->cycles, params->size);
+	    "      Number of cycles: %d\n"
+	    "      Data size: %ld B\n", params->cycles, params->size);
 
 	int rc = usbdiag_stress_bulk_out(exch, params->cycles, params->size);
@@ -134,6 +171,6 @@
 	const tmon_stress_test_params_t *params = (tmon_stress_test_params_t *) generic_params;
 	printf("Executing isochronous in stress test.\n"
-	    "      Packet count: %d\n"
-	    "      Packet size: %ld\n", params->cycles, params->size);
+	    "      Number of cycles: %d\n"
+	    "      Data size: %ld B\n", params->cycles, params->size);
 
 	int rc = usbdiag_stress_isoch_in(exch, params->cycles, params->size);
@@ -150,6 +187,6 @@
 	const tmon_stress_test_params_t *params = (tmon_stress_test_params_t *) generic_params;
 	printf("Executing isochronous out stress test.\n"
-	    "      Packet count: %d\n"
-	    "      Packet size: %ld\n", params->cycles, params->size);
+	    "      Number of cycles: %d\n"
+	    "      Data size: %ld B\n", params->cycles, params->size);
 
 	int rc = usbdiag_stress_isoch_out(exch, params->cycles, params->size);
Index: uspace/app/tmon/test.c
===================================================================
--- uspace/app/tmon/test.c	(revision ff16da5ff011339c7b70a51ff8f16b5336b3b868)
+++ uspace/app/tmon/test.c	(revision 119a794bc34ec072137c0cd0d2198857dfbfdffd)
@@ -48,13 +48,12 @@
 	devman_handle_t fun = -1;
 
-	if (argc == 0) {
+	if (argc >= 2 && *argv[1] != '-') {
+		// Assume that the first argument is device path.
+		if (tmon_resolve_named(argv[1], &fun))
+			return 1;
+	} else {
+		// The first argument is either an option or not present.
 		if (tmon_resolve_default(&fun))
 			return 1;
-	} else if (argc == 1) {
-		if (tmon_resolve_named(argv[0], &fun))
-			return 1;
-	} else {
-		printf(NAME ": Too many arguments provided.\n");
-		return 1;
 	}
 
