diff --git a/samples/knot.full.conf b/samples/knot.full.conf
index 7ef63e2a402cc9646733c14b232f29c4b28b8e76..55084bdc3cc6d591b2099a6b7a7146d1149a7edb 100644
--- a/samples/knot.full.conf
+++ b/samples/knot.full.conf
@@ -21,6 +21,8 @@ system {
   version "0.1";
 
   # Server identifier 
+  # Use string format "text"
+  # Or hexstring 0x01ab00
   nsid "myserver0";
 
   # Working directory of the server
diff --git a/src/knot/conf/cf-parse.y b/src/knot/conf/cf-parse.y
index 6f227ef119a2b6ca7dd776a95b4853b8e1264cb9..d7eb5635afc8630fa547dfc93001834922648263 100644
--- a/src/knot/conf/cf-parse.y
+++ b/src/knot/conf/cf-parse.y
@@ -286,7 +286,8 @@ system:
    SYSTEM '{'
  | system VERSION TEXT ';' { new_config->version = $3.t; }
  | system IDENTITY TEXT ';' { new_config->identity = $3.t; }
- | system NSID TEXT ';' { new_config->nsid = $3.t; }
+ | system NSID HEXSTR ';' { new_config->nsid = $3.t; new_config->nsid_len = $3.l; }
+ | system NSID TEXT ';' { new_config->nsid = $3.t; new_config->nsid_len = strlen(new_config->nsid); }
  | system STORAGE TEXT ';' { new_config->storage = $3.t; }
  | system KEY TSIG_ALGO_NAME TEXT ';' {
      fprintf(stderr, "warning: Config option 'system.key' is deprecated "
diff --git a/src/knot/conf/conf.h b/src/knot/conf/conf.h
index 0f89dee5cefa0ff41845f859dda54b31d0f80be9..80c07de17461f4f87356a3a48303122beb93b760 100644
--- a/src/knot/conf/conf.h
+++ b/src/knot/conf/conf.h
@@ -156,6 +156,7 @@ typedef struct conf_t {
 	char *storage;  /*!< Persistent storage path for databases and such. */
 	char *pidfile;  /*!< PID file path. */
 	char *nsid;     /*!< Server's NSID. */
+	size_t nsid_len;/*!< Server's NSID length. */
 	int   workers;  /*!< Number of workers per interface. */
 	int   uid;      /*!< Specified user id. */
 	int   gid;      /*!< Specified group id. */
diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c
index de56f0ad0bf8914fd7bd5aa7701189412721a765..45abd1ba7d919ca4e27fddabfd0d28a3ca734732 100644
--- a/src/knot/server/zones.c
+++ b/src/knot/server/zones.c
@@ -2356,7 +2356,7 @@ int zones_ns_conf_hook(const struct conf_t *conf, void *data)
 	dbg_zones_verb("zones: reconfiguring name server.\n");
 	
 	/* Set NSID. */
-	knot_ns_set_nsid(ns, conf->nsid);
+	knot_ns_set_nsid(ns, conf->nsid, conf->nsid_len);
 
 	knot_zonedb_t *old_db = 0;
 
diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c
index 69838cd0ac118c000de9838455f0c2c342595284..f473793828618eaaa15a9b4d9c5ae70f34b9b504 100644
--- a/src/libknot/nameserver/name-server.c
+++ b/src/libknot/nameserver/name-server.c
@@ -2631,7 +2631,7 @@ knot_nameserver_t *knot_ns_create()
 
 /*----------------------------------------------------------------------------*/
 
-void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid)
+void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid, size_t len)
 {
 	if (nameserver == NULL) {
 		dbg_ns("NS: set_nsid: nameserver=NULL.\n");
@@ -2644,7 +2644,7 @@ void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid)
 	}
 	
 	int ret = knot_edns_add_option(nameserver->opt_rr, EDNS_OPTION_NSID,
-	                               strlen(nsid), (const uint8_t *)nsid);
+	                               len, (const uint8_t *)nsid);
 	if (ret != KNOT_EOK) {
 		dbg_ns("NS: set_nsid: could not add EDNS option.\n");
 		return;
diff --git a/src/libknot/nameserver/name-server.h b/src/libknot/nameserver/name-server.h
index ca6a0d759cd71e701afef17909d7066b013b952e..5c05a5c49a06374326c7ce67ab76edf4ae097f54 100644
--- a/src/libknot/nameserver/name-server.h
+++ b/src/libknot/nameserver/name-server.h
@@ -177,7 +177,8 @@ typedef enum knot_ns_xfr_type_t {
  */
 knot_nameserver_t *knot_ns_create();
 
-void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid);
+/*! \todo Document me. */
+void knot_ns_set_nsid(knot_nameserver_t *nameserver, const char *nsid, size_t len);
 
 /*!
  * \brief Parses the given query into the response structure and recognizes