diff --git a/tests_with_gitaly/comparison.py b/tests_with_gitaly/comparison.py
index bd9e9d777e70fc6442ab07b717848d2f17f0ef26_dGVzdHNfd2l0aF9naXRhbHkvY29tcGFyaXNvbi5weQ==..42fb2ee5dc24abad47bf9a89ac767b5a41273c15_dGVzdHNfd2l0aF9naXRhbHkvY29tcGFyaXNvbi5weQ== 100644
--- a/tests_with_gitaly/comparison.py
+++ b/tests_with_gitaly/comparison.py
@@ -97,7 +97,57 @@
         )
 
 
-class RpcHelper:
+class BaseRpcHelper:
+    """Common helper for all comparisons.
+
+    Will handle comparison between Gitaly and (HGitaly or HGitaly) as well
+    as comparison beween HGitaly and RHGitaly, or whatever comes next.
+    """
+
+    def __init__(self, comparison, stub_cls, method_name, request_cls,
+                 repository_arg=True,
+                 request_defaults=None,
+                 feature_flags=(),
+                 streaming=False):
+        self.comparison = comparison
+        self.stub_cls = stub_cls
+        self.method_name = method_name
+        self.request_cls = request_cls
+        self.streaming = streaming
+        self.repository_arg = repository_arg
+
+        self.request_defaults = request_defaults
+        self.streaming = streaming
+        self.feature_flags = list(feature_flags)
+
+        self.init_stubs()
+
+    def init_stubs(self):
+        """To be provided by subclasses."""
+        raise NotImplementedError  # pragma no cover
+
+    def grpc_metadata(self):
+        return feature.as_grpc_metadata(self.feature_flags)
+
+    def rpc(self, backend, **kwargs):
+        if self.repository_arg:
+            kwargs.setdefault('repository', self.comparison.gitaly_repo)
+        request = self.request_cls(**kwargs)
+        meth = getattr(self.stubs[backend], self.method_name)
+        metadata = self.grpc_metadata()
+        if self.streaming:
+            return [resp for resp in meth(request, metadata=metadata)]
+
+        return meth(request, metadata=metadata)
+
+    def apply_request_defaults(self, kwargs):
+        defaults = self.request_defaults
+        if defaults is not None:
+            for k, v in defaults.items():
+                kwargs.setdefault(k, v)
+
+
+class RpcHelper(BaseRpcHelper):
     """Encapsulates a comparison fixture with call and compare helpers.
 
     As Mercurial and Git responses are expected to differ (commit hashes and
@@ -113,7 +163,5 @@
 
     def __init__(self, comparison, stub_cls, method_name, request_cls,
                  hg_server='hgitaly',
-                 repository_arg=True,
-                 request_defaults=None,
                  request_sha_attrs=(),
                  response_sha_attrs=(),
@@ -118,7 +166,6 @@
                  request_sha_attrs=(),
                  response_sha_attrs=(),
-                 feature_flags=(),
                  normalizer=None,
                  error_details_normalizer=None,
                  chunked_fields_remover=None,
                  chunks_concatenator=None,
@@ -121,13 +168,28 @@
                  normalizer=None,
                  error_details_normalizer=None,
                  chunked_fields_remover=None,
                  chunks_concatenator=None,
-                 streaming=False):
-        self.comparison = comparison
-        if hg_server == 'rhgitaly':
+                 **kwargs,
+                 ):
+        self.hg_server = hg_server
+        super(RpcHelper, self).__init__(
+            comparison, stub_cls, method_name, request_cls,
+            **kwargs
+        )
+        self.request_sha_attrs = request_sha_attrs
+        self.response_sha_attrs = response_sha_attrs
+        self.normalizer = normalizer
+        self.error_details_normalizer = error_details_normalizer
+        self.chunked_fields_remover = chunked_fields_remover
+        self.chunks_concatenator = chunks_concatenator
+
+    def init_stubs(self):
+        comparison, stub_cls = self.comparison, self.stub_cls
+
+        if self.hg_server == 'rhgitaly':
             hg_channel = comparison.rhgitaly_channel
         else:
             hg_channel = comparison.hgitaly_channel
         self.stubs = dict(git=stub_cls(comparison.gitaly_channel),
                           hg=stub_cls(hg_channel))
 
@@ -128,39 +190,9 @@
             hg_channel = comparison.rhgitaly_channel
         else:
             hg_channel = comparison.hgitaly_channel
         self.stubs = dict(git=stub_cls(comparison.gitaly_channel),
                           hg=stub_cls(hg_channel))
 
-        self.stub_cls = stub_cls
-        self.method_name = method_name
-        self.request_cls = request_cls
-        self.streaming = streaming
-        self.repository_arg = repository_arg
-
-        self.request_defaults = request_defaults
-        self.request_sha_attrs = request_sha_attrs
-        self.response_sha_attrs = response_sha_attrs
-        self.streaming = streaming
-        self.feature_flags = list(feature_flags)
-        self.normalizer = normalizer
-        self.error_details_normalizer = error_details_normalizer
-        self.chunked_fields_remover = chunked_fields_remover
-        self.chunks_concatenator = chunks_concatenator
-
-    def grpc_metadata(self):
-        return feature.as_grpc_metadata(self.feature_flags)
-
-    def rpc(self, vcs, **kwargs):
-        if self.repository_arg:
-            kwargs.setdefault('repository', self.comparison.gitaly_repo)
-        request = self.request_cls(**kwargs)
-        meth = getattr(self.stubs[vcs], self.method_name)
-        metadata = self.grpc_metadata()
-        if self.streaming:
-            return [resp for resp in meth(request, metadata=metadata)]
-
-        return meth(request, metadata=metadata)
-
     def hg2git(self, hg_sha):
         """Convert a Mercurial hex SHA to its counterpart SHA in Git repo.
 
@@ -240,12 +272,6 @@
             else:
                 setattr(obj, obj_attr, self.hg2git(value))
 
-    def apply_request_defaults(self, kwargs):
-        defaults = self.request_defaults
-        if defaults is not None:
-            for k, v in defaults.items():
-                kwargs.setdefault(k, v)
-
     def call_backends(self, **hg_kwargs):
         """Call Gitaly and HGitaly with uniform request kwargs.