diff --git a/tools/idevicedebug.c b/tools/idevicedebug.c
index aa7a400..53e84b7 100644
--- a/tools/idevicedebug.c
+++ b/tools/idevicedebug.c
@@ -32,6 +32,7 @@
 #include <time.h>
 #include <unistd.h>
 #include <libgen.h>
+#include <getopt.h>
 
 #ifdef WIN32
 #include <windows.h>
@@ -173,28 +174,30 @@
 	return dres;
 }
 
-static void print_usage(int argc, char **argv)
+static void print_usage(int argc, char **argv, int is_error)
 {
 	char *name = NULL;
 	name = strrchr(argv[0], '/');
-	printf("Usage: %s [OPTIONS] COMMAND\n", (name ? name + 1: argv[0]));
-	printf("\n");
-	printf("Interact with the debugserver service of a device.\n");
-	printf("\n");
-	printf("Where COMMAND is one of:\n");
-	printf("  run BUNDLEID [ARGS...]\trun app with BUNDLEID and optional ARGS on device.\n");
-	printf("\n");
-	printf("The following OPTIONS are accepted:\n");
-	printf("  -u, --udid UDID\ttarget specific device by UDID\n");
-	printf("  -n, --network\t\tconnect to network device\n");
-	printf("      --detach\t\tdetach from app after launch, keeping it running\n");
-	printf("  -e, --env NAME=VALUE\tset environment variable NAME to VALUE\n");
-	printf("  -d, --debug\t\tenable communication debugging\n");
-	printf("  -h, --help\t\tprints usage information\n");
-	printf("  -v, --version\t\tprints version information\n");
-	printf("\n");
-	printf("Homepage:    <" PACKAGE_URL ">\n");
-	printf("Bug Reports: <" PACKAGE_BUGREPORT ">\n");
+	fprintf(is_error ? stderr : stdout, "Usage: %s [OPTIONS] COMMAND\n", (name ? name + 1: argv[0]));
+	fprintf(is_error ? stderr : stdout,
+		"\n" \
+		"Interact with the debugserver service of a device.\n" \
+		"\n" \
+		"Where COMMAND is one of:\n" \
+		"  run BUNDLEID [ARGS...]\trun app with BUNDLEID and optional ARGS on device.\n" \
+		"\n" \
+		"The following OPTIONS are accepted:\n" \
+		"  -u, --udid UDID\ttarget specific device by UDID\n" \
+		"  -n, --network\t\tconnect to network device\n" \
+		"      --detach\t\tdetach from app after launch, keeping it running\n" \
+		"  -e, --env NAME=VALUE\tset environment variable NAME to VALUE\n" \
+		"  -d, --debug\t\tenable communication debugging\n" \
+		"  -h, --help\t\tprints usage information\n" \
+		"  -v, --version\t\tprints version information\n" \
+		"\n" \
+		"Homepage:    <" PACKAGE_URL ">\n" \
+		"Bug Reports: <" PACKAGE_BUGREPORT ">\n"
+	);
 }
 
 int main(int argc, char *argv[])
@@ -220,6 +223,18 @@
 	debugserver_command_t command = NULL;
 	debugserver_error_t dres = DEBUGSERVER_E_UNKNOWN_ERROR;
 
+	int c = 0;
+	const struct option longopts[] = {
+		{ "debug", no_argument, NULL, 'd' },
+		{ "help", no_argument, NULL, 'h' },
+		{ "udid", required_argument, NULL, 'u' },
+		{ "network", no_argument, NULL, 'n' },
+		{ "detach", no_argument, NULL, 1 },
+		{ "env", required_argument, NULL, 'e' },
+		{ "version", no_argument, NULL, 'v' },
+		{ NULL, 0, NULL, 0 }
+	};
+
 	/* map signals */
 	signal(SIGINT, on_signal);
 	signal(SIGTERM, on_signal);
@@ -228,32 +243,31 @@
 	signal(SIGPIPE, SIG_IGN);
 #endif
 
-	/* parse command line arguments */
-	for (i = 1; i < argc; i++) {
-		if (!strcmp(argv[i], "-d") || !strcmp(argv[i], "--debug")) {
+	while ((c = getopt_long(argc, argv, "dhu:ne:v", longopts, NULL)) != -1) {
+		switch (c) {
+		case 'd':
 			debug_level++;
 			idevice_set_debug_level(debug_level);
-			continue;
-		} else if (!strcmp(argv[i], "-u") || !strcmp(argv[i], "--udid")) {
-			i++;
-			if (!argv[i] || !*argv[i]) {
-				print_usage(argc, argv);
-				res = 0;
-				goto cleanup;
+			break;
+		case 'u':
+			if (!*optarg) {
+				fprintf(stderr, "ERROR: UDID must not be empty!\n");
+				print_usage(argc, argv, 1);
+				return 2;
 			}
-			udid = argv[i];
-			continue;
-		} else if (!strcmp(argv[i], "-n") || !strcmp(argv[i], "--network")) {
+			udid = optarg;
+			break;
+		case 'n':
 			use_network = 1;
-			continue;
-		} else if (!strcmp(argv[i], "--detach")) {
+			break;
+		case 1:
 			detach_after_start = 1;
-			continue;
-		} else if (!strcmp(argv[i], "-e") || !strcmp(argv[i], "--env")) {
-			i++;
-			if (!argv[i] || (strlen(argv[i]) <= 1) || strchr(argv[i], '=') == NULL) {
-				print_usage(argc, argv);
-				res = 0;
+			break;
+		case 'e':
+			if (!*optarg || strchr(optarg, '=') == NULL) {
+				fprintf(stderr, "ERROR: environment variables need to be specified as -e KEY=VALUE\n");
+				print_usage(argc, argv, 1);
+				res = 2;
 				goto cleanup;
 			}
 			/* add environment variable */
@@ -261,36 +275,50 @@
 				newlist = malloc((environment_count + 1) * sizeof(char*));
 			else
 				newlist = realloc(environment, (environment_count + 1) * sizeof(char*));
-			newlist[environment_count++] = strdup(argv[i]);
+			newlist[environment_count++] = strdup(optarg);
 			environment = newlist;
-			continue;
-		} else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
-			print_usage(argc, argv);
+			break;
+		case 'h':
+			print_usage(argc, argv, 0);
 			res = 0;
 			goto cleanup;
-		} else if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) {
+			break;
+		case 'v':
 			printf("%s %s\n", TOOL_NAME, PACKAGE_VERSION);
 			res = 0;
 			goto cleanup;
-		} else if (!strcmp(argv[i], "run")) {
-			cmd = CMD_RUN;
-
-			i++;
-			if (!argv[i]) {
-				/* make sure at least the bundle identifier was provided */
-				printf("Please supply the bundle identifier of the app to run.\n");
-				print_usage(argc, argv);
-				res = 0;
-				goto cleanup;
-			}
-			/*  read bundle identifier */
-			bundle_identifier = argv[i];
 			break;
-		} else {
-			print_usage(argc, argv);
-			res = 0;
+		}
+	}
+
+	argc -= optind;
+	argv += optind;
+
+	if (argc < 1) {
+		fprintf(stderr, "ERROR: Missing command.\n");
+		print_usage(argc+optind, argv-optind, 1);
+	}
+
+	if (!strcmp(argv[0], "run")) {
+		cmd = CMD_RUN;
+		if (argc < 2) {
+			/* make sure at least the bundle identifier was provided */
+			fprintf(stderr, "ERROR: Please supply the bundle identifier of the app to run.\n");
+			print_usage(argc+optind, argv-optind, 1);
+			res = 2;
 			goto cleanup;
 		}
+		/*  read bundle identifier */
+		bundle_identifier = argv[1];
+		i = 1;
+	}
+
+	/* verify options */
+	if (cmd == CMD_NONE) {
+		fprintf(stderr, "ERROR: Unsupported command specified.\n");
+		print_usage(argc+optind, argv-optind, 1);
+		res = 2;
+		goto cleanup;
 	}
 
 	if (environment) {
@@ -299,12 +327,6 @@
 		environment = newlist;
 	}
 
-	/* verify options */
-	if (cmd == CMD_NONE) {
-		print_usage(argc, argv);
-		goto cleanup;
-	}
-
 	/* connect to the device */
 	ret = idevice_new_with_options(&device, udid, (use_network) ? IDEVICE_LOOKUP_NETWORK : IDEVICE_LOOKUP_USBMUX);
 	if (ret != IDEVICE_E_SUCCESS) {
