diff --git a/core/stream_interface.c b/core/stream_interface.c
index 3f8a168..39fa64e 100644
--- a/core/stream_interface.c
+++ b/core/stream_interface.c
@@ -504,10 +504,17 @@ void *network_initializer(void *data)
 		/*
 		 * Check if the dry run flag is overwritten
 		 */
-		if (req->dry_run)
+		switch (req->dry_run){
+		case RUN_DRYRUN:
 			software->globals.dry_run = 1;
-		else
+			break;
+		case RUN_INSTALL:
 			software->globals.dry_run = 0;
+			break;
+		case RUN_DEFAULT:
+		default:
+			software->globals.dry_run = software->globals.default_dry_run;
+		}
 
 		/*
 		 * Find the selection to be installed
diff --git a/core/swupdate.c b/core/swupdate.c
index 5099abd..0684de4 100644
--- a/core/swupdate.c
+++ b/core/swupdate.c
@@ -390,6 +390,7 @@ static int install_from_file(char *fname, int check)
 		save_state_string((char*)BOOTVAR_TRANSACTION, STATE_IN_PROGRESS);
 	}
 
+	swcfg.globals.dry_run = swcfg.globals.default_dry_run;
 	ret = install_images(&swcfg, fdsw, 1);
 
 	swupdate_progress_end(ret == 0 ? SUCCESS : FAILURE);
@@ -799,7 +800,7 @@ int main(int argc, char **argv)
 			loglevel = strtoul(optarg, NULL, 10);
 			break;
 		case 'n':
-			swcfg.globals.dry_run = 1;
+			swcfg.globals.default_dry_run = 1;
 			break;
 		case 'L':
 			swcfg.globals.syslog_enabled = 1;
diff --git a/doc/source/swupdate-ipc.rst b/doc/source/swupdate-ipc.rst
index 31aa8d4..f506215 100644
--- a/doc/source/swupdate-ipc.rst
+++ b/doc/source/swupdate-ipc.rst
@@ -105,7 +105,7 @@ the update process:
         struct swupdate_request {
                 unsigned int apiversion;
                 sourcetype source;
-                bool dry_run;
+                int dry_run;
                 size_t len;
                 char info[512];
                 char software_set[256];
@@ -123,7 +123,7 @@ other fields as:
 
         - *sourcetype* : one of SOURCE_UNKNOWN, SOURCE_WEBSERVER,
 	  SOURCE_SURICATTA, SOURCE_DOWNLOADER, SOURCE_LOCAL
-        - *dry_run* : true if the update must run without installing on the hardware
+        - *dry_run* : one of RUN_DEFAULT (set from command line), RUN_DRYRUN, RUN_INSTALL.
         - *info, len* : a variable length data that can be forwarded to the progress
           interface. The installer in SWUpdate does not evaluate it.
         - *software_set* and *running_mode* : this allows to set the `selection` fot the update.
diff --git a/include/network_ipc.h b/include/network_ipc.h
index 2e6f75d..22ecb9a 100644
--- a/include/network_ipc.h
+++ b/include/network_ipc.h
@@ -48,6 +48,12 @@ enum {
 	CMD_ENABLE	/* Enable or disable suricatta mode */
 };
 
+enum run_type {
+	RUN_DEFAULT,
+	RUN_DRYRUN,
+	RUN_INSTALL
+};
+
 #define SWUPDATE_API_VERSION 	0x1
 /*
  * Install structure to be filled before calling
@@ -56,7 +62,7 @@ enum {
 struct swupdate_request {
 	unsigned int apiversion;
 	sourcetype source;
-	bool dry_run;
+	enum run_type dry_run;
 	size_t len;
 	char info[512];
 	char software_set[256];
diff --git a/include/swupdate.h b/include/swupdate.h
index 2b554b6..720868c 100644
--- a/include/swupdate.h
+++ b/include/swupdate.h
@@ -137,6 +137,7 @@ struct swupdate_global_cfg {
 	char preupdatecmd[SWUPDATE_GENERAL_STRING_SIZE];
 	char default_software_set[SWUPDATE_GENERAL_STRING_SIZE];
 	char default_running_mode[SWUPDATE_GENERAL_STRING_SIZE];
+	int  default_dry_run;
 	char minimum_version[SWUPDATE_GENERAL_STRING_SIZE];
 	char current_version[SWUPDATE_GENERAL_STRING_SIZE];
 	int cert_purpose;
diff --git a/ipc/network_ipc-if.c b/ipc/network_ipc-if.c
index fb59339..f09c417 100644
--- a/ipc/network_ipc-if.c
+++ b/ipc/network_ipc-if.c
@@ -177,5 +177,6 @@ void swupdate_prepare_req(struct swupdate_request *req) {
 		return;
 	memset(req, 0, sizeof(struct swupdate_request));
 	req->apiversion = SWUPDATE_API_VERSION;
+	req->dry_run = RUN_DEFAULT;
 	return;
 }
diff --git a/tools/swupdate-client.c b/tools/swupdate-client.c
index f6bff6b..3e29bad 100644
--- a/tools/swupdate-client.c
+++ b/tools/swupdate-client.c
@@ -134,7 +134,8 @@ static int send_file(const char* filename) {
 
 	struct swupdate_request req;
 	swupdate_prepare_req(&req);
-	req.dry_run = dry_run;
+	if (dry_run)
+		req.dry_run = RUN_DRYRUN;
 	if (software_set && strlen(software_set)) {
 		strncpy(req.software_set, software_set, sizeof(req.software_set) - 1);
 		strncpy(req.running_mode, running_mode, sizeof(req.running_mode) - 1);
