diff --git a/cfg_checker/cfg_check.py b/cfg_checker/cfg_check.py
index b46ca60..d38defa 100644
--- a/cfg_checker/cfg_check.py
+++ b/cfg_checker/cfg_check.py
@@ -11,7 +11,6 @@
 from cfg_checker.common.exception import CheckerException, ConfigException
 from cfg_checker.common import utils, const
 from cfg_checker.common import config, logger, logger_cli, pkg_dir
-from cfg_checker.clients import salt
 
 import cfg_checker.reclass_cmp as reclass_cmp
 from cfg_checker.pkg_check import CloudPackageChecker
diff --git a/cfg_checker/common/salt_utils.py b/cfg_checker/common/salt_utils.py
index 1a9d1da..4aba178 100644
--- a/cfg_checker/common/salt_utils.py
+++ b/cfg_checker/common/salt_utils.py
@@ -283,13 +283,15 @@
     def list_minions(self):
         """
             Fails in salt version 2016.3.8
+            Works starting from 2017.7.7
             api returns dict of minions with grains
         """
-        return self.salt_request('get', 'minions')
+        return self.salt_request('get', 'minions')[0]
 
     def list_keys(self):
         """
             Fails in salt version 2016.3.8
+            Works starting from 2017.7.7
             api should return dict:
             {
                 'local': [],
@@ -303,6 +305,7 @@
 
     def get_status(self):
         """
+            Fails in salt version 2017.7.7
             'runner' client is the equivalent of 'salt-run'
             Returns the
         """
@@ -312,6 +315,10 @@
         )
 
     def get_active_nodes(self):
+        """Used when other minion list metods fail
+        
+        :return: json result from salt test.ping
+        """
         if config.skip_nodes:
             logger.info("Nodes to be skipped: {0}".format(config.skip_nodes))
             return self.cmd(
diff --git a/cfg_checker/common/settings.py b/cfg_checker/common/settings.py
index 1ee36b4..39aeff2 100644
--- a/cfg_checker/common/settings.py
+++ b/cfg_checker/common/settings.py
@@ -13,6 +13,12 @@
 
 
 class CheckerConfiguration(object):
+    def load_nodes_list():
+        return utils.get_nodes_list(
+            os.environ.get('CFG_ALL_NODES', None),
+            os.environ.get('SALT_NODE_LIST_FILE', None)
+        )
+
     def _init_values(self):
         """Load values from environment variables or put default ones
         """
@@ -39,10 +45,7 @@
             'SALT_SCRIPTS_FOLDER',
             'cfg_checker_scripts'
         )
-        self.all_nodes = utils.get_nodes_list(
-            os.environ.get('CFG_ALL_NODES', None),
-            os.environ.get('SALT_NODE_LIST_FILE', None)
-        )
+
         self.skip_nodes = utils.node_string_to_list(os.environ.get(
             'CFG_SKIP_NODES',
             None
diff --git a/cfg_checker/nodes.py b/cfg_checker/nodes.py
index aa14dac..d269393 100644
--- a/cfg_checker/nodes.py
+++ b/cfg_checker/nodes.py
@@ -25,20 +25,39 @@
 
         # Keys for all nodes
         # this is not working in scope of 2016.8.3, will overide with list
-        # cls.node_keys = cls.salt.list_keys()
+        logger_cli.info("# Collecting node names existing in the cloud")
+        try:
+            _keys = self.salt.list_keys()
+            _str = []
+            for _k, _v in _keys.iteritems():
+                _str.append("{}: {}".format(_k, len(_v)))
+            logger_cli.info("-> keys collected: {}".format(", ".join(_str)))
 
-        logger_cli.info("### Collecting node names existing in the cloud")
-        self.node_keys = {
-            'minions': config.all_nodes
-        }
+            self.node_keys = {
+                'minions': _keys['minions']
+            }
+        except Exception as e:
+            _keys = None
+            self.node_keys = None
+        
+        # List of minions with grains
+        _minions = self.salt.list_minions()
+        if _minions:
+            logger_cli.info("-> api reported {} active minions".format(len(_minions)))
+        elif not self.node_keys:
+            # this is the last resort
+            _minions = config.load_nodes_list()
+            logger_cli.info("-> {} nodes loaded from list file".format(len(_minions)))
+        else:
+            _minions = self.node_keys['minions']
 
-        # all that answer ping
+        # in case API not listed minions, we need all that answer ping
         _active = self.salt.get_active_nodes()
-        logger_cli.debug("-> Nodes responded: {}".format(_active))
+        logger_cli.info("-> nodes responded: {}".format(len(_active)))
         # just inventory for faster interaction
         # iterate through all accepted nodes and create a dict for it
         self.nodes = {}
-        for _name in self.node_keys['minions']:
+        for _name in _minions:
             _nc = utils.get_node_code(_name)
             _rmap = const.all_roles_map
             _role = _rmap[_nc] if _nc in _rmap else 'unknown'
