diff --git a/src/warden-server/bin/registerReceiver.pl b/src/warden-server/bin/registerReceiver.pl
index b327a82c5d0dfd3ec02ca61039b1831019c41a5e..e240ddecee0e150682a7c77c1aaaf2dec7d3bd35 100755
--- a/src/warden-server/bin/registerReceiver.pl
+++ b/src/warden-server/bin/registerReceiver.pl
@@ -37,19 +37,20 @@ WardenCommon::loadConf($conf_file);
 #                               FUNCTIONS
 ################################################################################
 sub usage {
-  print "Usage: $RealScript [-h -o -n <hostname> -r <requestor> -t <type> -i <ip_net_client>]\n";
+  print "Usage: $RealScript -h -o -n <hostname> -r <requestor> -t <type> -c <ip_net_client> [-i <client_id>]\n";
   exit 1;
 }
 
 
 sub help {
-  print "$RealScript [-h -o -n <hostname> -r <requestor> -t <type> -i <ip_net_client>]\n";
+  print "$RealScript -h -o -n <hostname> -r <requestor> -t <type> -c <ip_net_client> [-i <client_id>]\n";
   print "-h     print this text and exit\n";
   print "-n     hostname of receiver\n";
   print "-r     client registration requestor\n";
   print "-t     type of received events or '_any_' for receiving of all types of events\n";
   print "-o     enable receiving of own events\n";
-  print "-i     CIDR of receiver\n";
+  print "-c     CIDR of receiver\n";
+  print "-i     user defined client ID (optional)\n";
   exit 0;
 }
 
@@ -71,31 +72,29 @@ sub sendMsg
 ################################################################################
 #                               MAIN
 ################################################################################
-our ($opt_n, $opt_r, $opt_t, $opt_o, $opt_i, $opt_h);
+our ($opt_n, $opt_r, $opt_t, $opt_o, $opt_c, $opt_i, $opt_h);
 
 if ($#ARGV == -1) {
   usage;
 }
 
-die usage unless getopts("n:r:t:i:ho");
+die usage unless getopts("n:r:t:c:i:ho");
 my $hostname            = $opt_n;
 my $requestor           = $opt_r;
 my $type		= $opt_t;
-my $ip_net_client       = $opt_i;
+my $ip_net_client       = $opt_c;
+my $client_id		= $opt_i;
 my $help                = $opt_h;
 my $receive_own_events	= "f";
-if ($opt_o) {$receive_own_events = "t"}
+if ($opt_o) {
+  $receive_own_events = "t";
+}
 
 # catch help param
 if ($help) {
   help;
 }
 
-# check validity of IP address (CIDR format)
-if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
-  WardenCommon::errMsg("Enter correct IP address in CIDR format!");
-}
-
 # check parameters definition
 switch () {
   case {!defined $hostname} 		{WardenCommon::errMsg("Parameter 'hostname' is not defined!")}
@@ -105,6 +104,16 @@ switch () {
   case {!defined $ip_net_client} 	{WardenCommon::errMsg("Parameter 'ip_net_client' is not defined!")}
 }
 
+# check validity of IP address (CIDR format)
+if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
+  WardenCommon::errMsg("Enter correct IP address in CIDR format!");
+}
+
+# check client ID
+if (defined $client_id && $client_id !~ /^\d+\z/) {
+  WardenCommon::errMsg("Parameter 'client_id' is not a integer!");
+}
+
 # defined variables by script
 my $client_type		= "r";
 my $valid		= "t";
@@ -117,16 +126,28 @@ my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST
 
 my $warden_server = WardenCommon::trim(`hostname -f`);
 
-# check if receiver has been already registered or register it
-my $sth = $dbh->prepare("SELECT registered FROM clients WHERE hostname = ? AND client_type = ? AND type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
+# check if user defined client_id wasn't used
+my ($sth, $client_id_db, $registered_db);
+if (defined $client_id) {
+  $sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
+  $sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
+  ($client_id_db, $registered_db) = $sth->fetchrow();
+  if (defined $client_id_db) {
+    sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
+    WardenCommon::errMsg("Client with ID '$client_id_db' has been already registered at Warden server '$warden_server' in '$registered_db'");
+  }
+}
+# check if receiver has been already registered
+$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE hostname = ? AND client_type = ? AND type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute($hostname, $client_type, $type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
-my $result = $sth->fetchrow();
-if (defined $result) {
-  sendMsg("err", "Attempt to re-register receiver [Hostname: '$hostname', Type: '$type', CIDR: '$ip_net_client'] at Warden server '$warden_server'");
-  WardenCommon::errMsg("Receiver has already been registered at Warden server '$warden_server' in '$result'");
+($client_id_db, $registered_db) = $sth->fetchrow();
+if (defined $client_id_db) {
+  sendMsg("err", "Attempt to re-register receiver (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
+  WardenCommon::errMsg("Receiver has been already registered at Warden server '$warden_server' in '$registered_db' with ID '$client_id_db'");
 } else {
+  # register receiver
   $sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
-  my $ret_val = $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
+  my $ret_val = $sth->execute($client_id, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
   if ($ret_val == 1) {
     my $last_insert_id = $dbh->last_insert_id(undef, undef, "clients", undef);
     sendMsg("info", "New receiver [ID: '$last_insert_id', Hostname: '$hostname', Requestor: '$requestor', Type: '$type', ROE: '$receive_own_events', CIDR: '$ip_net_client'] has been registered");
diff --git a/src/warden-server/bin/registerSender.pl b/src/warden-server/bin/registerSender.pl
index 5d5b03de47699260bbbdcff63b434632e4a6a8e6..8056b6d9a25c20122485aceb50cf8df9d63ce2f4 100755
--- a/src/warden-server/bin/registerSender.pl
+++ b/src/warden-server/bin/registerSender.pl
@@ -37,19 +37,20 @@ WardenCommon::loadConf($conf_file);
 #                               FUNCTIONS
 ################################################################################
 sub usage {
-  print "Usage: $RealScript [-h -n <hostname> -r <requestor> -s <service> -d <description_tags> -i <ip_net_client>]\n";
+  print "Usage: $RealScript -h -n <hostname> -r <requestor> -s <service> -d <description_tags> -c <ip_net_client> [-i <client_id>]\n";
   exit 1;
 }
 
 
 sub help {
-  print "$RealScript [-h -n <hostname> -r <requestor> -s <service> -d <description_tags> -i <ip_net_client>]\n";
+  print "$RealScript -h -n <hostname> -r <requestor> -s <service> -d <description_tags> -c <ip_net_client> [-i <client_id>]\n";
   print "-h 	print this text and exit\n";
   print "-n 	hostname of sender\n";
   print "-r 	client registration requestor\n";
   print "-s 	name of service which sent events\n";
   print "-d 	description tags of send events\n";
-  print "-i 	CIDR of sender\n";
+  print "-c 	CIDR of sender\n";
+  print "-i	user defined client ID (optional)\n";
   exit 0;
 }
 
@@ -71,18 +72,19 @@ sub sendMsg
 ################################################################################
 #                               MAIN
 ################################################################################
-our ($opt_n, $opt_r, $opt_s, $opt_d, $opt_i, $opt_h);
+our ($opt_n, $opt_r, $opt_s, $opt_d, $opt_c, $opt_i, $opt_h);
 
 if ($#ARGV == -1) {
   usage;
 }
 
-die usage unless getopts("n:r:s:d:i:h");
+die usage unless getopts("n:r:s:d:c:i:h");
 my $hostname		= $opt_n;
 my $requestor		= $opt_r;
 my $service		= $opt_s;
 my $description_tags 	= $opt_d;
-my $ip_net_client	= $opt_i;
+my $ip_net_client	= $opt_c;
+my $client_id		= $opt_i;
 my $help 		= $opt_h;
 
 # catch help param
@@ -90,11 +92,6 @@ if ($help) {
   help;
 }
 
-# check validity of IP address (CIDR format)
-if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
-  WardenCommon::errMsg("Enter correct IP in CIDR format!");
-}
-
 # check parameters definition
 switch () {
   case {!defined $hostname} {WardenCommon::errMsg("Parameter 'hostname' is not defined!")}
@@ -104,6 +101,16 @@ switch () {
   case {!defined $ip_net_client} {WardenCommon::errMsg("Parameter 'ip_net_client' is not defined!")}
 }
 
+# check validity of IP address (CIDR format)
+if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
+  WardenCommon::errMsg("Enter correct IP in CIDR format!");
+}
+
+# check client ID
+if (defined $client_id && $client_id !~ /^\d+\z/) {
+  WardenCommon::errMsg("Parameter 'client_id' is not a integer!");
+}
+
 # defined variables by method
 my $client_type		= "s";
 my $valid		= "t";
@@ -116,16 +123,28 @@ my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST
 
 my $warden_server = WardenCommon::trim(`hostname -f`);
 
-# check if receiver has been already registered or do its registration
-my $sth = $dbh->prepare("SELECT registered FROM clients WHERE hostname = ? AND service = ? AND client_type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
+# check if user defined client_id wasn't used
+my ($sth, $client_id_db, $registered_db);
+if (defined $client_id) {
+  $sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
+  $sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
+  ($client_id_db, $registered_db) = $sth->fetchrow();
+  if (defined $client_id_db) {
+    sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
+    WardenCommon::errMsg("Client with ID '$client_id_db' has been already registered at Warden server '$warden_server' in '$registered_db'");
+  }
+}
+# check if sender has been already registered
+$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE hostname = ? AND service = ? AND client_type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
 $sth->execute($hostname, $service, $client_type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
-my $result = $sth->fetchrow();
-if (defined $result) {
-  sendMsg("err", "Attempt to re-register sender [Hostname: '$hostname', Service: '$service', CIDR: '$ip_net_client'] at Warden server '$warden_server'");
-  WardenCommon::errMsg("Sender has already been registered at Warden server '$warden_server' in '$result'");
+($client_id_db, $registered_db) = $sth->fetchrow();
+if (defined $client_id_db) {
+  sendMsg("err", "Attempt to re-register sender (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
+  WardenCommon::errMsg("Sender has been already registered at Warden server '$warden_server' in '$registered_db' with ID '$client_id_db'");
 } else {
+  # register sender
   $sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
-  my $ret_val = $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
+  my $ret_val = $sth->execute($client_id, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
   if ($ret_val == 1) {
     my $last_insert_id = $dbh->last_insert_id(undef, undef, "clients", undef);
     sendMsg("info", "New sender [ID: '$last_insert_id', Hostname: '$hostname', Requestor: '$requestor', Service: '$service', Description_tags: '$description_tags', CIDR: '$ip_net_client'] has been registered");
diff --git a/src/warden-server/doc/README b/src/warden-server/doc/README
index 74d10d376dfc6773d3faeaf6c2062a52aaabe8e5..b1ceaf79c6c99a618856feba109af2f215c46c8c 100644
--- a/src/warden-server/doc/README
+++ b/src/warden-server/doc/README
@@ -272,7 +272,7 @@ G. Registration of Clients
  The Warden server administrator is responsible for registering new clients or
  removing those already registered. Both registration or unregistration scripts
  are provided in the Warden server package. Those scripts should be run from
- localhost (the same machine the Warden server is installed and running on).
+ the same machine the Warden server is installed and running on.
 
  Members of Warden community who would like to have their client registered must
  contact the Warden server administrator with the requirement. This is usually
@@ -291,7 +291,8 @@ G. Registration of Clients
                          client registration, 
     service            - name of the service of a new registered client,
     description_tags   - tags describing the nature of the service,
-    ip_net_client      - CIDR the client is only allowed to communicate from.
+    ip_net_client      - CIDR the client is only allowed to communicate from,
+    client_id          - user defined client ID (optionaly).
 
     One can run registerSender.pl with -h argument to see a help.
 
@@ -310,7 +311,8 @@ G. Registration of Clients
     			 for receiving of all types of events,
     receive_own_events - boolean value describing if events originating from
                          the same CIDR will be sent to the client,
-    ip_net_client      - CIDR the client is only allowed to communicate from.
+    ip_net_client      - CIDR the client is only allowed to communicate from,
+    client_id          - user defined client ID (optionaly)
 
     One can run registerReceiver.pl with -h argument to see a help.