diff --git a/heptapod/testhelpers.py b/heptapod/testhelpers.py
index e7762e3b26d62b07c390178b09cb67356b148330_aGVwdGFwb2QvdGVzdGhlbHBlcnMucHk=..e79710251b38b6b98feb76def5225363f27541f6_aGVwdGFwb2QvdGVzdGhlbHBlcnMucHk= 100644
--- a/heptapod/testhelpers.py
+++ b/heptapod/testhelpers.py
@@ -126,9 +126,9 @@
                                        message=message))
         return repo[new_node] if return_ctx else new_node
 
-    def update_bin(self, bin_node):
+    def update_bin(self, bin_node, **opts):
         """Update to a revision specified by its node in binary form.
 
         This is separated in order to avoid ambiguities
         """
         # maybe we'll do something lower level later
@@ -130,7 +130,7 @@
         """Update to a revision specified by its node in binary form.
 
         This is separated in order to avoid ambiguities
         """
         # maybe we'll do something lower level later
-        self.update(node.hex(bin_node))
+        self.update(node.hex(bin_node), **opts)
 
@@ -136,6 +136,6 @@
 
-    def update(self, rev):
-        repo = self.repo
+    def update(self, rev, hidden=False):
+        repo = self.repo.unfiltered() if hidden else self.repo
         cmdutil.findcmd('update', commands.table)[1][0](repo.ui, repo, rev)
 
     def set_phase(self, phase_name, revs, force=True):
diff --git a/heptapod/tests/test_testhelpers.py b/heptapod/tests/test_testhelpers.py
index e7762e3b26d62b07c390178b09cb67356b148330_aGVwdGFwb2QvdGVzdHMvdGVzdF90ZXN0aGVscGVycy5weQ==..e79710251b38b6b98feb76def5225363f27541f6_aGVwdGFwb2QvdGVzdHMvdGVzdF90ZXN0aGVscGVycy5weQ== 100644
--- a/heptapod/tests/test_testhelpers.py
+++ b/heptapod/tests/test_testhelpers.py
@@ -4,8 +4,9 @@
 # GNU General Public License version 2 or any later version.
 from __future__ import absolute_import
 from mercurial import (
+    error,
     extensions,
     phases,
     ui as uimod,
 )
 from os.path import dirname
@@ -7,8 +8,9 @@
     extensions,
     phases,
     ui as uimod,
 )
 from os.path import dirname
+import pytest
 
 from ..testhelpers import (
     LocalRepoWrapper,
@@ -173,10 +175,10 @@
     assert ctx.phase() == phases.draft
 
 
-def test_prune(tmpdir):
+def test_prune_update_hidden(tmpdir):
     wrapper = LocalRepoWrapper.init(tmpdir,
                                     config=dict(extensions=dict(evolve='')))
     wrapper.write_commit('foo', content='Foo 0')
     ctx = wrapper.write_commit('foo', content='Foo 1', return_ctx=True)
     wrapper.prune('.')
     assert ctx.obsolete()
@@ -177,6 +179,15 @@
     wrapper = LocalRepoWrapper.init(tmpdir,
                                     config=dict(extensions=dict(evolve='')))
     wrapper.write_commit('foo', content='Foo 0')
     ctx = wrapper.write_commit('foo', content='Foo 1', return_ctx=True)
     wrapper.prune('.')
     assert ctx.obsolete()
+
+    wrapper.update(0)
+    assert tmpdir.join('foo').read() == 'Foo 0'
+
+    with pytest.raises(error.FilteredRepoLookupError):
+        wrapper.update(ctx.hex())
+
+    wrapper.update_bin(ctx.node(), hidden=True)
+    assert tmpdir.join('foo').read() == 'Foo 1'