diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -17,8 +17,12 @@ class changectx(object):
         if changeid == '':
             changeid = '.'
         self._repo = repo
-        self._node = self._repo.lookup(changeid)
-        self._rev = self._repo.changelog.rev(self._node)
+        if isinstance(changeid, (long, int)):
+            self._rev = changeid
+            self._node = self._repo.changelog.node(changeid)
+        else:
+            self._node = self._repo.lookup(changeid)
+            self._rev = self._repo.changelog.rev(self._node)
 
     def __str__(self):
         return short(self.node())
@@ -59,8 +63,8 @@ class changectx(object):
             self._manifestdelta = md
             return self._manifestdelta
         elif name == '_parents':
-            p = self._repo.changelog.parents(self._node)
-            if p[1] == nullid:
+            p = self._repo.changelog.parentrevs(self._rev)
+            if p[1] == nullrev:
                 p = p[:-1]
             self._parents = [changectx(self._repo, x) for x in p]
             return self._parents