diff --git a/cvp_checks/utils/__init__.py b/cvp_checks/utils/__init__.py
index 35aa54e..746b5bf 100644
--- a/cvp_checks/utils/__init__.py
+++ b/cvp_checks/utils/__init__.py
@@ -28,6 +28,9 @@
             raise EnvironmentError("401 Not authorized.")
 
 
+node_groups = {}
+
+
 def init_salt_client():
     local = salt_remote()
     return local
@@ -71,37 +74,39 @@
     return nodes
 
 
-def get_groups(test):
+def calculate_groups():
     config = get_configuration()
-    testname = test.split('.')[0]
-    # assume that node name is like <name>.domain
-    # last 1-3 digits of name are index, e.g. 001 in cpu001
-    # name doesn't contain dots
-    active_nodes = get_active_nodes()
-
-    skipped_groups = config.get('skipped_groups') or []
-    if config.get(testname):
-        if 'skipped_groups' in config.get(testname).keys():
-            skipped_groups += config.get(testname)['skipped_groups'] or []
-
-    groups = []
-
-    for node in active_nodes:
-        index = re.search('[0-9]{1,3}$', node.split('.')[0])
-        if index:
-            group_name = node.split('.')[0][:-len(index.group(0))]
-        else:
-            group_name = node
-        if group_name not in groups:
-            if group_name not in skipped_groups:
-                groups.append(group_name)
+    local_salt_client = init_salt_client()
+    nodes_names = set ()
+    expr_form = ''
+    if 'groups' in config.keys():
+        nodes_names.update(config['groups'].keys())
+        expr_form = 'pillar'
+    else:
+        nodes = local_salt_client.cmd('*', 'test.ping')
+        for node in nodes:
+            index = re.search('[0-9]{1,3}$', node.split('.')[0])
+            if index:
+                nodes_names.add(node.split('.')[0][:-len(index.group(0))])
             else:
-                if group_name + " - skipped" not in groups:
-                    groups.append(group_name + " - skipped")
+                nodes_names.add(node)
+        expr_form = 'pcre'
 
-    return groups
-
-
+    for node_name in nodes_names:
+        skipped_groups = config.get('skipped_groups') or []
+        if node_name in skipped_groups:
+            continue
+        if expr_form == 'pcre':
+            nodes = local_salt_client.cmd(node_name,
+                                          'test.ping',
+                                          expr_form=expr_form)
+        else:
+            nodes = local_salt_client.cmd(config['groups'][node_name],
+                                          'test.ping',
+                                          expr_form=expr_form)
+        node_groups[node_name]=[x for x in nodes if x not in config['skipped_nodes']]
+                
+            
 def get_configuration():
     """function returns configuration for environment
     and for test if it's specified"""
@@ -119,3 +124,6 @@
                 global_config[param] = os.environ[param]
 
     return global_config
+
+
+calculate_groups()
