diff --git a/cvp_checks/utils/__init__.py b/cvp_checks/utils/__init__.py
index 74af967..6ad3a6d 100644
--- a/cvp_checks/utils/__init__.py
+++ b/cvp_checks/utils/__init__.py
@@ -5,6 +5,10 @@
 import sys, traceback
 
 
+class AuthenticationError(Exception):
+    pass
+
+
 class salt_remote:
     def cmd(self, tgt, fun, param=None, expr_form=None, tgt_type=None):
         config = get_configuration()
@@ -23,17 +27,31 @@
             login_request = requests.post(os.path.join(url, 'login'),
                                           headers=headers, data=login_payload,
                                           proxies=proxies)
-            if login_request.ok:
-                request = requests.post(url, headers=headers,
-                                        data=accept_key_payload,
-                                        cookies=login_request.cookies,
-                                        proxies=proxies)
-                return request.json()['return'][0]
-        except Exception:
-            print "\033[91m\nConnection to SaltMaster " \
-                  "was not established.\n" \
-                  "Please make sure that you " \
-                  "provided correct credentials.\033[0m\n"
+            if not login_request.ok:
+                raise AuthenticationError("Authentication to SaltMaster failed")
+
+            request = requests.post(url, headers=headers,
+                                    data=accept_key_payload,
+                                    cookies=login_request.cookies,
+                                    proxies=proxies)
+
+            response = request.json()['return'][0]
+            not_responded = [k for k,v in response.iteritems() if v is False]
+            if not_responded:
+                print ("WARNING: Some nodes are unavailable and removed "
+                      "from response: {}".format(', '.join(not_responded))
+                )
+            for node in not_responded:
+                del response[node]
+            return response
+
+        except Exception as e:
+            print ("\033[91m\nConnection to SaltMaster "
+                  "was not established.\n"
+                  "Please make sure that you "
+                  "provided correct credentials.\n"
+                  "Error message: {}\033[0m\n".format(e.message or e)
+            )
             traceback.print_exc(file=sys.stdout)
             sys.exit()
 
@@ -43,11 +61,10 @@
     return local
 
 
-def list_to_target_string(node_list, separator):
-    result = ''
-    for node in node_list:
-        result += node + ' ' + separator + ' '
-    return result[:-(len(separator)+2)]
+def list_to_target_string(node_list, separator, add_spaces=True):
+    if add_spaces:
+        separator = ' ' + separator.strip() + ' '
+    return separator.join(node_list)
 
 
 def get_monitoring_ip(param_name):
