diff --git a/mercurial/context.py b/mercurial/context.py
index 28ed1c4511ce03768f70b10b6389ec5f8a453426_bWVyY3VyaWFsL2NvbnRleHQucHk=..75f4180509a473db613e3af569fa8cfc641b5152_bWVyY3VyaWFsL2NvbnRleHQucHk= 100644
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -230,6 +230,10 @@
         for d in self._repo.changelog.descendants([self._rev]):
             yield changectx(self._repo, d)
 
+    def obsolete(self):
+        """True if the changeset is obsolete"""
+        return self.node() in self._repo.obsstore.obsoleted
+
     def _fileinfo(self, path):
         if '_manifest' in self.__dict__:
             try:
diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
index 28ed1c4511ce03768f70b10b6389ec5f8a453426_bWVyY3VyaWFsL29ic29sZXRlLnB5..75f4180509a473db613e3af569fa8cfc641b5152_bWVyY3VyaWFsL29ic29sZXRlLnB5 100644
--- a/mercurial/obsolete.py
+++ b/mercurial/obsolete.py
@@ -267,3 +267,13 @@
     for markerdata in repo.obsstore:
         yield marker(repo, markerdata)
 
+def precursormarkers(ctx):
+    """obsolete marker making this changeset obsolete"""
+    for data in ctx._repo.obsstore.precursors.get(ctx.node(), ()):
+        yield marker(ctx._repo, data)
+
+def successormarkers(ctx):
+    """obsolete marker marking this changeset as a successors"""
+    for data in ctx._repo.obsstore.successors.get(ctx.node(), ()):
+        yield marker(ctx._repo, data)
+