session MAINTENANCE minor enhancements
diff --git a/src/messages_client.c b/src/messages_client.c
index ee01a57..d6ec444 100644
--- a/src/messages_client.c
+++ b/src/messages_client.c
@@ -36,6 +36,11 @@
 API NC_RPC_TYPE
 nc_rpc_get_type(const struct nc_rpc *rpc)
 {
+    if (!rpc) {
+        ERRARG;
+        return 0;
+    }
+
     return rpc->type;
 }
 
@@ -44,6 +49,11 @@
 {
     struct nc_rpc_generic *rpc;
 
+    if (!data) {
+        ERRARG;
+        return NULL;
+    }
+
     if (data->next || (data->prev != data)) {
         ERR("Generic RPC must have a single root node.");
         return NULL;
@@ -72,6 +82,11 @@
 {
     struct nc_rpc_generic *rpc;
 
+    if (!xml_str) {
+        ERRARG;
+        return NULL;
+    }
+
     rpc = malloc(sizeof *rpc);
     if (!rpc) {
         ERRMEM;
@@ -95,6 +110,11 @@
 {
     struct nc_rpc_getconfig *rpc;
 
+    if (!source) {
+        ERRARG;
+        return NULL;
+    }
+
     if (filter && (filter[0] != '<') && (filter[0] != '/') && !isalpha(filter[0])) {
         ERR("Filter must either be an XML subtree or an XPath expression.");
         return NULL;
@@ -125,6 +145,11 @@
 {
     struct nc_rpc_edit *rpc;
 
+    if (!target || !edit_content) {
+        ERRARG;
+        return NULL;
+    }
+
     if ((edit_content[0] != '<') && !isalpha(edit_content[0])) {
         ERR("<edit-config> content must either be a URL or a config (XML).");
         return NULL;
@@ -157,6 +182,11 @@
 {
     struct nc_rpc_copy *rpc;
 
+    if (!target || !source) {
+        ERRARG;
+        return NULL;
+    }
+
     if (url_or_config_src && (url_or_config_src[0] != '<') && !isalpha(url_or_config_src[0])) {
         ERR("<copy-config> source is neither a URL nor a config (XML).");
         return NULL;
@@ -192,6 +222,11 @@
 {
     struct nc_rpc_delete *rpc;
 
+    if (!target) {
+        ERRARG;
+        return NULL;
+    }
+
     rpc = malloc(sizeof *rpc);
     if (!rpc) {
         ERRMEM;
@@ -215,6 +250,11 @@
 {
     struct nc_rpc_lock *rpc;
 
+    if (!target) {
+        ERRARG;
+        return NULL;
+    }
+
     rpc = malloc(sizeof *rpc);
     if (!rpc) {
         ERRMEM;
@@ -232,6 +272,11 @@
 {
     struct nc_rpc_lock *rpc;
 
+    if (!target) {
+        ERRARG;
+        return NULL;
+    }
+
     rpc = malloc(sizeof *rpc);
     if (!rpc) {
         ERRMEM;
@@ -277,6 +322,11 @@
 {
     struct nc_rpc_kill *rpc;
 
+    if (!session_id) {
+        ERRARG;
+        return NULL;
+    }
+
     rpc = malloc(sizeof *rpc);
     if (!rpc) {
         ERRMEM;
@@ -362,6 +412,11 @@
 {
     struct nc_rpc_validate *rpc;
 
+    if (!source) {
+        ERRARG;
+        return NULL;
+    }
+
     if (url_or_config && (url_or_config[0] != '<') && !isalpha(url_or_config[0])) {
         ERR("<validate> source is neither a URL nor a config (XML).");
         return NULL;
@@ -390,6 +445,11 @@
 {
     struct nc_rpc_getschema *rpc;
 
+    if (!identifier) {
+        ERRARG;
+        return NULL;
+    }
+
     rpc = malloc(sizeof *rpc);
     if (!rpc) {
         ERRMEM;
@@ -556,10 +616,7 @@
             free(rpc_subscribe->stop);
         }
         break;
-    case NC_RPC_KILL:
-    case NC_RPC_DISCARD:
-    case NC_RPC_LOCK:
-    case NC_RPC_UNLOCK:
+    default:
         /* nothing special needed */
         break;
     }