diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..303da24
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,41 @@
+# Automatically generated by `hgimportsvn`
+.svn
+.hgsvn
+
+# Ignore local virtualenvs
+lib/
+bin/
+include/
+.Python/
+
+# These lines are suggested according to the svn:ignore property
+# Feel free to enable them by uncommenting them
+*.pyc
+*.pyo
+*.swp
+*.class
+*.orig
+*~
+.hypothesis/
+
+# autogenerated
+src/_pytest/_version.py
+# setuptools
+.eggs/
+
+doc/*/_build
+build/
+dist/
+*.egg-info
+issue/
+env/
+.env/
+3rdparty/
+.tox
+.cache
+.pytest_cache
+.coverage
+.ropeproject
+.idea
+.hypothesis
+
diff --git a/cvp_checks/tests/ceph/test_ceph_pg_count.py b/cvp_checks/tests/ceph/test_ceph_pg_count.py
index 46e50c4..28783e8 100644
--- a/cvp_checks/tests/ceph/test_ceph_pg_count.py
+++ b/cvp_checks/tests/ceph/test_ceph_pg_count.py
@@ -22,7 +22,7 @@
     pg_num and pgp_num should be the same and 
     set according formula to higher value of powered 2
     """
-    
+    pytest.skip("This test needs redesign. Skipped for now")
     ceph_monitors = local_salt_client.cmd(
         'ceph:mon', 
         'test.ping', 
diff --git a/cvp_checks/tests/ceph/test_ceph_tell_bench.py b/cvp_checks/tests/ceph/test_ceph_tell_bench.py
index db45435..b275022 100644
--- a/cvp_checks/tests/ceph/test_ceph_tell_bench.py
+++ b/cvp_checks/tests/ceph/test_ceph_tell_bench.py
@@ -12,6 +12,7 @@
     and gives the "bytes_per_sec" speed for each OSD.
 
     """
+    pytest.skip("This test needs redesign. Skipped for now")
     ceph_monitors = local_salt_client.cmd(
         'ceph:mon', 
         'test.ping', 
diff --git a/cvp_checks/tests/test_cinder_services.py b/cvp_checks/tests/test_cinder_services.py
index 2117f6f..20bd17d 100644
--- a/cvp_checks/tests/test_cinder_services.py
+++ b/cvp_checks/tests/test_cinder_services.py
@@ -2,19 +2,28 @@
 
 
 def test_cinder_services(local_salt_client):
-    service_down = local_salt_client.cmd(
+    cinder_backends_info = local_salt_client.cmd(
         'cinder:controller',
+        'pillar.get',
+        ['cinder:controller:backend'],
+        expr_form='pillar')
+    if not cinder_backends_info:
+        pytest.skip("Cinder is not found on this environment")
+    service_down = local_salt_client.cmd(
+        'keystone:server',
         'cmd.run',
         ['. /root/keystonerc; cinder service-list | grep "down\|disabled"'],
         expr_form='pillar')
-    if not service_down:
-        pytest.skip("Cinder is not found on this environment")
     cinder_volume = local_salt_client.cmd(
         'keystone:server',
         'cmd.run',
-        ['. /root/keystonerc; cinder service-list | grep "volume" | wc -l'],
+        ['. /root/keystonerc; cinder service-list | grep -c "volume"'],
         expr_form='pillar')
+    backends_cinder = cinder_backends_info[cinder_backends_info.keys()[0]]
+    backends_num = len(backends_cinder.keys())
     assert service_down[service_down.keys()[0]] == '', \
         '''Some cinder services are in wrong state'''
-    assert cinder_volume[cinder_volume.keys()[0]] == '1', \
-        '''There are more than 1 host/backend for cinder'''
+    assert cinder_volume[cinder_volume.keys()[0]] == str(backends_num), \
+        'Number of cinder-volume services ({0}) does not match ' \
+        'number of volume backends ({1})'.format(
+        cinder_volume[cinder_volume.keys()[0]], str(backends_num))
diff --git a/cvp_checks/tests/test_packet_checker.py b/cvp_checks/tests/test_packet_checker.py
index a583c24..f76c339 100644
--- a/cvp_checks/tests/test_packet_checker.py
+++ b/cvp_checks/tests/test_packet_checker.py
@@ -1,26 +1,24 @@
 import pytest
 import json
-import os
-from cvp_checks import utils
 
 
 def test_check_package_versions(local_salt_client, nodes_in_group):
-    output = local_salt_client.cmd("L@"+','.join(nodes_in_group), 'lowpkg.list_pkgs', expr_form='compound')
+    output = local_salt_client.cmd("L@"+','.join(nodes_in_group),
+                                   'lowpkg.list_pkgs',
+                                   expr_form='compound')
     # Let's exclude cid01 and dbs01 nodes from this check
     exclude_nodes = local_salt_client.cmd("I@galera:master or I@gerrit:client",
                                           'test.ping',
                                           expr_form='compound').keys()
-
-    if len(output.keys()) < 2:
+    total_nodes = [i for i in output.keys() if i not in exclude_nodes]
+    if len(total_nodes) < 2:
         pytest.skip("Nothing to compare - only 1 node")
 
     nodes = []
     pkts_data = []
     my_set = set()
 
-    for node in output:
-        if node in exclude_nodes:
-            continue
+    for node in total_nodes:
         nodes.append(node)
         my_set.update(output[node].keys())
 
@@ -44,19 +42,29 @@
 
 def test_check_module_versions(local_salt_client, nodes_in_group):
     pre_check = local_salt_client.cmd(
-        "L@"+','.join(nodes_in_group), 'cmd.run', ['dpkg -l | grep "python-pip "'], expr_form='compound')
+        "L@"+','.join(nodes_in_group),
+        'cmd.run',
+        ['dpkg -l | grep "python-pip "'],
+        expr_form='compound')
     if pre_check.values().count('') > 0:
         pytest.skip("pip is not installed on one or more nodes")
-    if len(pre_check.keys()) < 2:
+
+    exclude_nodes = local_salt_client.cmd("I@galera:master or I@gerrit:client",
+                                          'test.ping',
+                                          expr_form='compound').keys()
+    total_nodes = [i for i in pre_check.keys() if i not in exclude_nodes]
+
+    if len(total_nodes) < 2:
         pytest.skip("Nothing to compare - only 1 node")
-    output = local_salt_client.cmd("L@"+','.join(nodes_in_group), 'pip.freeze', expr_form='compound')
+    output = local_salt_client.cmd("L@"+','.join(nodes_in_group),
+                                   'pip.freeze', expr_form='compound')
 
     nodes = []
 
     pkts_data = []
     my_set = set()
 
-    for node in output:
+    for node in total_nodes:
         nodes.append(node)
         my_set.update([x.split("=")[0] for x in output[node]])
         output[node] = dict([x.split("==") for x in output[node]])
