diff --git a/test_set/cvp-sanity/tests/test_drivetrain.py b/test_set/cvp-sanity/tests/test_drivetrain.py
index 0624536..0895556 100644
--- a/test_set/cvp-sanity/tests/test_drivetrain.py
+++ b/test_set/cvp-sanity/tests/test_drivetrain.py
@@ -20,6 +20,7 @@
 from pygerrit2 import GerritRestAPI, HTTPBasicAuth
 from requests import HTTPError
 from xml.dom import minidom
+from collections import defaultdict
 
 
 def join_to_gerrit(local_salt_client, gerrit_user, gerrit_password):
@@ -313,28 +314,38 @@
     stack_info = local_salt_client.pillar_get(tgt='gerrit:client',
                                                    param='docker:client:stack')
 
-    expected_images = list()
+    expected_images_list = list()
     # find services in list of docker clients
     for key, stack in list(stack_info.items()):
         if stack.get('service'):
-            stack = [item.get('image') for _,item in list(stack.get('service').items()) if item.get('image')]
-            expected_images += stack
+            stack = [item.get('image') for _, item in
+                     list(stack.get('service').items()) if item.get('image')]
+            expected_images_list += stack
+    expected_images = defaultdict(list)
 
-    mismatch = {}
-    actual_images = {}
-    for image in set(table_with_docker_services[list(table_with_docker_services.keys())[0]].split('\n')):
-        actual_images[get_name(image)] = get_tag(image)
+    # collect unique tags for each image in same structure as for actual images
+    for image in expected_images_list:
+        if get_name(image) in expected_images:
+            if get_tag(image) not in expected_images[get_name(image)]:
+                expected_images[get_name(image)].append(get_tag(image))
+        else:
+            expected_images[get_name(image)].append(get_tag(image))
 
-    for image in set(expected_images):
-        im_name = get_name(image)
-        if im_name not in actual_images:
-            mismatch[im_name] = 'not found on env'
-        elif get_tag(image) != actual_images[im_name]:
-            mismatch[im_name] = 'has {actual} version instead of {expected}'.format(
-                actual=actual_images[im_name], expected=get_tag(image))
-    assert len(mismatch) == 0, (
+    # collect tags for each image in same structure as for expected images
+    actual_images = defaultdict(list)
+    for image in set(table_with_docker_services[
+                         list(table_with_docker_services.keys())[0]].split('\n')):
+        actual_images[get_name(image)].append(get_tag(image))
+
+    # find difference between defaultdicts
+    total_diff = 0
+    for i in expected_images:
+        diff = set(expected_images[i]) - set(actual_images[i])
+        total_diff += len(diff)
+
+    assert actual_images == expected_images, (
         "Some DriveTrain components do not have expected versions:\n{}".format(
-            json.dumps(mismatch, indent=4))
+            json.dumps(total_diff, indent=4))
     )
 
 
