diff --git a/hgitaly/service/commit.py b/hgitaly/service/commit.py
index d65b77c6102b4150c8c63b327773da00851d471f_aGdpdGFseS9zZXJ2aWNlL2NvbW1pdC5weQ==..86b6cde72e6bbd9bece6e7969948f518d0753608_aGdpdGFseS9zZXJ2aWNlL2NvbW1pdC5weQ== 100644
--- a/hgitaly/service/commit.py
+++ b/hgitaly/service/commit.py
@@ -288,7 +288,11 @@
                         "could not be found", revision)
                     return CountCommitsResponse()
 
-                revs = repo.revs('only(%s, %s)', ctx_end, ctx_start)
+                if ctx_end.obsolete() or ctx_start.obsolete():
+                    repo = repo.unfiltered()
+
+                revs = repo.revs('only(%s, %s)',
+                                 ctx_end.hex(), ctx_start.hex())
             else:
                 ctx = gitlab_revision_changeset(repo, revision)
                 if ctx is None:
@@ -296,7 +300,7 @@
                         "CountCommits revision %r could not be found",
                         revision)
                     return CountCommitsResponse()
-                revs = repo.revs('::%s', ctx)
+                revs = repo.unfiltered().revs('::%s', ctx)
             count = len(revs)
         else:
             # Note: if revision is not passed, we return all revs for now.
diff --git a/hgitaly/service/tests/test_commit.py b/hgitaly/service/tests/test_commit.py
index d65b77c6102b4150c8c63b327773da00851d471f_aGdpdGFseS9zZXJ2aWNlL3Rlc3RzL3Rlc3RfY29tbWl0LnB5..86b6cde72e6bbd9bece6e7969948f518d0753608_aGdpdGFseS9zZXJ2aWNlL3Rlc3RzL3Rlc3RfY29tbWl0LnB5 100644
--- a/hgitaly/service/tests/test_commit.py
+++ b/hgitaly/service/tests/test_commit.py
@@ -479,10 +479,10 @@
     ctx0 = wrapper.write_commit('foo')
     ctx1 = wrapper.write_commit('bar', parent=ctx0)
     wrapper.write_commit('baz', parent=ctx1)
-    wrapper.write_commit('animals',
-                         topic='feature',
-                         parent=ctx0)
+    topic_hex = wrapper.write_commit('animals',
+                                     topic='feature',
+                                     parent=ctx0).hex()
 
     # simplest calls
     assert do_rpc(b'branch/default') == 3
     assert do_rpc(b'topic/default/feature') == 2
@@ -485,7 +485,8 @@
 
     # simplest calls
     assert do_rpc(b'branch/default') == 3
     assert do_rpc(b'topic/default/feature') == 2
+    assert do_rpc(topic_hex) == 2
 
     # when no revision passed, return total commits in repo
     assert do_rpc(None) == 4
@@ -501,6 +502,12 @@
                                 b'unknown..topic/default/feature',
                                 b'unknown'))
 
+    # obsolescence
+    wrapper.command('amend', message=b'amended')
+    assert do_rpc(topic_hex) == 2
+    assert do_rpc(b'branch/default..' + topic_hex) == 1
+    assert do_rpc(topic_hex + b'..branch/default') == 2
+
 
 def test_last_commit_for_path(grpc_channel, server_repos_root):
     grpc_stub = CommitServiceStub(grpc_channel)