diff --git a/hgext/shelve.py b/hgext/shelve.py
index 8a021cd38719a4d4729027e44b5e0d9ea1144174_aGdleHQvc2hlbHZlLnB5..99c4b8f79324ad2ca00bf08228c87a2b40cec2af_aGdleHQvc2hlbHZlLnB5 100644
--- a/hgext/shelve.py
+++ b/hgext/shelve.py
@@ -610,7 +610,7 @@
         # but it doesn't update the inmemory structures, so addchangegroup
         # hooks still fire and try to operate on the missing commits.
         # Clean up manually to prevent this.
-        repo.changelog.strip(oldtiprev, tr)
+        repo.unfiltered().changelog.strip(oldtiprev, tr)
 
         unshelvecleanup(ui, repo, basename, opts)
     finally:
diff --git a/tests/test-shelve.t b/tests/test-shelve.t
index 8a021cd38719a4d4729027e44b5e0d9ea1144174_dGVzdHMvdGVzdC1zaGVsdmUudA==..99c4b8f79324ad2ca00bf08228c87a2b40cec2af_dGVzdHMvdGVzdC1zaGVsdmUudA== 100644
--- a/tests/test-shelve.t
+++ b/tests/test-shelve.t
@@ -520,4 +520,23 @@
   $ hg status
   A d
 
+test bug 4073 we need to enable obsolete markers for it
+
+  $ cat > ../obs.py << EOF
+  > import mercurial.obsolete
+  > mercurial.obsolete._enabled = True
+  > EOF
+  $ echo '[extensions]' >> $HGRCPATH
+  $ echo "obs=${TESTTMP}/obs.py" >> $HGRCPATH
+  $ hg shelve
+  shelved as default
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg debugobsolete `hg --debug id -i -r 1`
+  $ hg unshelve
+  unshelving change 'default'
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 2 files (+1 heads)
+
   $ cd ..