diff --git a/core/swupdate.c b/core/swupdate.c
index e959568..f823f83 100644
--- a/core/swupdate.c
+++ b/core/swupdate.c
@@ -84,6 +84,7 @@ static struct option long_options[] = {
 	{"no-reinstalling", required_argument, NULL, 'R'},
 	{"no-transaction-marker", no_argument, NULL, 'M'},
 	{"no-state-marker", no_argument, NULL, 'm'},
+	{"device-id", required_argument, NULL, 'D'},
 #ifdef CONFIG_SIGNED_IMAGES
 	{"key", required_argument, NULL, 'k'},
 	{"ca-path", required_argument, NULL, 'k'},
@@ -156,6 +157,7 @@ static void usage(char *programname)
 		" -M, --no-transaction-marker    : disable setting bootloader transaction marker\n"
 		" -m, --no-state-marker          : disable setting update state in bootloader\n"
 		" -o, --output <filename>        : saves the incoming stream\n"
+		" -D, --device-id <device id>    : defines this device's ID\n"
 		" -v, --verbose                  : be verbose, set maximum loglevel\n"
 		"     --version                  : print SWUpdate version and exit\n"
 #ifdef CONFIG_HW_COMPATIBILITY
@@ -374,6 +376,8 @@ static int read_globals_settings(void *elem, void *data)
 		/* by convention, errors in a configuration section are ignored */
 		(void)parse_image_selector(software_select, sw);
 	}
+	GET_FIELD_STRING(LIBCFG_PARSER, elem,
+				"device-id", sw->globals.device_id);
 
 	return 0;
 }
@@ -482,7 +486,7 @@ int main(int argc, char **argv)
 #endif
 	memset(main_options, 0, sizeof(main_options));
 	memset(image_url, 0, sizeof(image_url));
-	strcpy(main_options, "vhni:e:q:l:Lcf:p:P:o:N:R:Mm");
+	strcpy(main_options, "vhni:e:q:l:Lcf:p:P:o:N:R:MmD:");
 #ifdef CONFIG_MTD
 	strcat(main_options, "b:");
 #endif
@@ -633,6 +637,10 @@ int main(int argc, char **argv)
 				optarg,
 			       	sizeof(swcfg.globals.publickeyfname));
 			break;
+		case 'D':
+			strlcpy(swcfg.globals.device_id, optarg,
+				sizeof(swcfg.globals.device_id));
+			break;
 		case '1':
 			swcfg.globals.cert_purpose = parse_cert_purpose(optarg);
 			break;
diff --git a/doc/source/swupdate.rst b/doc/source/swupdate.rst
index 22d135a..dd1bc6e 100644
--- a/doc/source/swupdate.rst
+++ b/doc/source/swupdate.rst
@@ -548,6 +548,12 @@ Command line parameters
 +-------------+----------+--------------------------------------------+
 | -p <cmd>    | string   | Execute post-update command.               |
 +-------------+----------+--------------------------------------------+
+| -D <id>     | string   | Define a device ID. This ID will be used   |
+|             |          | for suricatta when no hawkBit ID is given. |
+|             |          | This device ID will be blended into the    |
+|             |          | remote handler's zmq socket.               |
++-------------+----------+--------------------------------------------+
+
 
 Downloader command line parameters
 ..................................
@@ -592,6 +598,8 @@ Mandatory arguments are marked with '\*':
 |                         |          | e.g., localhost:8080                       |
 +-------------------------+----------+--------------------------------------------+
 | -i <id>                 | integer  | \* The device ID to communicate to hawkBit.|
+|                         |          | This argument is optional if a device ID   |
+|                         |          | argument is given to SWUpdate (-D option)  |
 +-------------------------+----------+--------------------------------------------+
 | -c <confirm>            | integer  | Confirm update status to server: 1=AGAIN,  |
 |                         |          | 2=SUCCESS, 3=FAILED                        |
diff --git a/examples/configuration/swupdate.cfg b/examples/configuration/swupdate.cfg
index a97f982..36356d1 100644
--- a/examples/configuration/swupdate.cfg
+++ b/examples/configuration/swupdate.cfg
@@ -40,6 +40,8 @@
 #			  set expected common name of signer certificate
 # select:		: string
 #			  select software images set and source (<software>,<mode>)
+# device-id		: string
+#			  define a device ID
 globals :
 {
 
@@ -48,6 +50,7 @@ globals :
 	syslog = true;
 	/* public-key-file = "test.pem";*/
 	mtd-blacklist = "0 1 2 3 4 5 6";
+	device-id = "Default_ID";
 };
 
 # logcolors : set colors for output to stdout / stderr
diff --git a/handlers/remote_handler.c b/handlers/remote_handler.c
index 275859f..bc3b642 100644
--- a/handlers/remote_handler.c
+++ b/handlers/remote_handler.c
@@ -159,8 +159,10 @@ static int install_remote_image(struct img_type *img,
 	struct RHmsg RHmessage;
 	char bufcmd[80];
 
-	len = strlen(img->type_data) + strlen(CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY) + strlen("ipc://") + 4;
+	char* device_id = get_swupdate_cfg()->globals.device_id;
 
+	len = strlen(img->type_data) + strlen(CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY)
+		+ strlen(device_id) + strlen("ipc://") + 4;
 	/*
 	 * Allocate maximum string
 	 */
@@ -169,8 +171,8 @@ static int install_remote_image(struct img_type *img,
 		ERROR("Not enough memory");
 		return -ENOMEM;
 	}
-	snprintf(connect_string, len, "ipc://%s%s", CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY,
-			img->type_data);
+	snprintf(connect_string, len, "ipc://%s%s%s", CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY,
+		 device_id, img->type_data);
 
 	ret = zmq_connect(request, connect_string);
 	if (ret < 0) {
diff --git a/include/swupdate.h b/include/swupdate.h
index e607ed6..bc55970 100644
--- a/include/swupdate.h
+++ b/include/swupdate.h
@@ -125,6 +125,7 @@ enum {
 struct swupdate_global_cfg {
 	int verbose;
 	char mtdblacklist[SWUPDATE_GENERAL_STRING_SIZE];
+	char device_id[SWUPDATE_GENERAL_STRING_SIZE];
 	int loglevel;
 	int syslog_enabled;
 	int dry_run;
diff --git a/suricatta/server_hawkbit.c b/suricatta/server_hawkbit.c
index ed4c800..da133ba 100644
--- a/suricatta/server_hawkbit.c
+++ b/suricatta/server_hawkbit.c
@@ -1766,6 +1766,18 @@ server_op_res_t server_start(char *fname, int argc, char *argv[])
 		}
 	}
 
+	/*
+	 * If no hawkBit device ID has been set, check if the global
+	 * device ID is set and, if yes, use it as hawkBit device ID.
+	 */
+	if ((mandatory_argument_count & ID_BIT) != ID_BIT) {
+		char* id = get_swupdate_cfg()->globals.device_id;
+		if (strnlen(id, SWUPDATE_GENERAL_STRING_SIZE)) {
+			SETSTRING(server_hawkbit.device_id, id);
+			mandatory_argument_count |= ID_BIT;
+		}
+	}
+
 	if (mandatory_argument_count != ALL_MANDATORY_SET) {
 		fprintf(stderr, "Mandatory arguments missing!\n");
 		suricatta_print_help();
