diff --git a/src/ideviceinstaller.c b/src/ideviceinstaller.c
index 17f6966..27b4669 100644
--- a/src/ideviceinstaller.c
+++ b/src/ideviceinstaller.c
@@ -1,8 +1,8 @@
 /*
  * ideviceinstaller - Manage apps on iOS devices.
  *
+ * Copyright (C) 2010-2019 Nikias Bassen <nikias@gmx.li>
  * Copyright (C) 2010-2015 Martin Szulecki <m.szulecki@libimobiledevice.org>
- * Copyright (C) 2010-2014 Nikias Bassen <nikias@gmx.li>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -109,6 +109,7 @@
 
 char *last_status = NULL;
 int wait_for_command_complete = 0;
+int use_notifier = 0;
 int notification_expected = 0;
 int is_device_connected = 0;
 int command_completed = 0;
@@ -368,7 +369,7 @@
 	}
 
 	/* wait some time if a notification is expected */
-	while (notification_expected && !notified && !err_occurred && is_device_connected) {
+	while (use_notifier && notification_expected && !notified && !err_occurred && is_device_connected) {
 		wait_ms(50);
 	}
 
@@ -404,6 +405,8 @@
 		 "  -r, --restore APPID\tRestore archived app specified by APPID\n"
 		 "  -R, --remove-archive APPID  Remove app archive specified by APPID\n"
 		 "  -o, --options\t\tPass additional options to the specified command.\n"
+		 "  -n, --notify-wait\t\tWait for app installed/uninstalled notification\n"
+		 "                    \t\tto before reporting success of operation\n"
 		 "  -h, --help\t\tprints usage information\n"
 		 "  -d, --debug\t\tenable communication debugging\n" "\n");
 	printf("Homepage: <http://libimobiledevice.org>\n");
@@ -412,24 +415,25 @@
 static void parse_opts(int argc, char **argv)
 {
 	static struct option longopts[] = {
-		{"help", 0, NULL, 'h'},
-		{"udid", 1, NULL, 'u'},
-		{"list-apps", 0, NULL, 'l'},
-		{"install", 1, NULL, 'i'},
-		{"uninstall", 1, NULL, 'U'},
-		{"upgrade", 1, NULL, 'g'},
-		{"list-archives", 0, NULL, 'L'},
-		{"archive", 1, NULL, 'a'},
-		{"restore", 1, NULL, 'r'},
-		{"remove-archive", 1, NULL, 'R'},
-		{"options", 1, NULL, 'o'},
-		{"debug", 0, NULL, 'd'},
-		{NULL, 0, NULL, 0}
+		{ "help", no_argument, NULL, 'h' },
+		{ "udid", required_argument, NULL, 'u' },
+		{ "list-apps", no_argument, NULL, 'l' },
+		{ "install", required_argument, NULL, 'i' },
+		{ "uninstall", required_argument, NULL, 'U' },
+		{ "upgrade", required_argument, NULL, 'g' },
+		{ "list-archives", no_argument, NULL, 'L' },
+		{ "archive", required_argument, NULL, 'a' },
+		{ "restore", required_argument, NULL, 'r' },
+		{ "remove-archive", required_argument, NULL, 'R' },
+		{ "options", required_argument, NULL, 'o' },
+		{ "notify-wait", no_argument, NULL, 'n' },
+		{ "debug", no_argument, NULL, 'd' },
+		{ NULL, 0, NULL, 0 }
 	};
 	int c;
 
 	while (1) {
-		c = getopt_long(argc, argv, "hU:li:u:g:La:r:R:o:d", longopts,
+		c = getopt_long(argc, argv, "hU:li:u:g:La:r:R:o:nd", longopts,
 						(int *) 0);
 		if (c == -1) {
 			break;
@@ -508,6 +512,9 @@
 				options = newopts;
 			}
 			break;
+		case 'n':
+			use_notifier = 1;
+			break;
 		case 'd':
 			idevice_set_debug_level(1);
 			break;
@@ -654,34 +661,36 @@
 		goto leave_cleanup;
 	}
 
-	if ((lockdownd_start_service
-		 (client, "com.apple.mobile.notification_proxy",
-		  &service) != LOCKDOWN_E_SUCCESS) || !service) {
-		fprintf(stderr,
-				"Could not start com.apple.mobile.notification_proxy!\n");
-		res = -1;
-		goto leave_cleanup;
+	if (use_notifier) {
+		if ((lockdownd_start_service
+			 (client, "com.apple.mobile.notification_proxy",
+			  &service) != LOCKDOWN_E_SUCCESS) || !service) {
+			fprintf(stderr,
+					"Could not start com.apple.mobile.notification_proxy!\n");
+			res = -1;
+			goto leave_cleanup;
+		}
+
+		np_error_t nperr = np_client_new(device, service, &np);
+
+		if (service) {
+			lockdownd_service_descriptor_free(service);
+		}
+		service = NULL;
+
+		if (nperr != NP_E_SUCCESS) {
+			fprintf(stderr, "Could not connect to notification_proxy!\n");
+			res = -1;
+			goto leave_cleanup;
+		}
+
+		np_set_notify_callback(np, notifier, NULL);
+
+		const char *noties[3] = { NP_APP_INSTALLED, NP_APP_UNINSTALLED, NULL };
+
+		np_observe_notifications(np, noties);
 	}
 
-	np_error_t nperr = np_client_new(device, service, &np);
-
-	if (service) {
-		lockdownd_service_descriptor_free(service);
-	}
-	service = NULL;
-
-	if (nperr != NP_E_SUCCESS) {
-		fprintf(stderr, "Could not connect to notification_proxy!\n");
-		res = -1;
-		goto leave_cleanup;
-	}
-
-	np_set_notify_callback(np, notifier, NULL);
-
-	const char *noties[3] = { NP_APP_INSTALLED, NP_APP_UNINSTALLED, NULL };
-
-	np_observe_notifications(np, noties);
-
 run_again:
 	if (service) {
 		lockdownd_service_descriptor_free(service);
