diff --git a/hggit/gitrepo.py b/hggit/gitrepo.py
index 999d6cd96e2f8ad41dbabdf25953094f8aeb21e1_aGdnaXQvZ2l0cmVwby5weQ==..9c7845735a866503daed592a8ce30cad5f585743_aGdnaXQvZ2l0cmVwby5weQ== 100644
--- a/hggit/gitrepo.py
+++ b/hggit/gitrepo.py
@@ -15,6 +15,19 @@
     except ImportError:
         from mercurial.peer import peerrepository
 
+namespaceapi = False
+try:
+    from mercurial import templatekw
+    from mercurial.namespaces import (
+        namespace,
+        namespaces
+    )
+    namespaceapi = True
+    gitcolumn='gitbookmark'
+    gitcolumn='bookmark'
+except ImportError:
+    pass
+
 
 class basegitrepo(peerrepository):
     def __init__(self, ui, path, create, intents=None, **kwargs):
@@ -23,6 +36,16 @@
         self._ui = ui
         self.path = path
         self.localrepo = None
+        if namespaceapi:
+            self.namemap = None
+            columns = templatekw.getlogcolumns()
+            n = namespace("gitbookmarks", templatename="gitbookmark",
+                          logfmt=columns[gitcolumn],
+                          listnames=self.lazynames,
+                          namemap=self.lazynamemap, nodemap=self.lazynodemap,
+                          builtin=True)
+            self.names = namespaces()
+            self.names.addnamespace(n)
 
     _peercapabilities = ['lookup']
 
@@ -50,6 +73,40 @@
     def heads(self):
         return []
 
+    def populaterefs(self):
+        if self.localrepo is None:
+            return False
+        if self.strippedrefs is not None:
+            return True
+        handler = self.localrepo.githandler
+        result = handler.fetch_pack(self.path, heads=[])
+        # map any git shas that exist in hg to hg shas
+        self.strippedrefs = {
+            ref[11:]: handler.map_hg_get(val) or val
+            for ref, val in result.refs.iteritems()
+            if ref.startswith('refs/heads/')
+        }
+        return True
+
+    def lazynames(self):
+        if not self.populaterefs():
+            return None
+        return self.namemap.keys()
+
+    def lazynamemap(self, name):
+        if not self.populaterefs():
+            return None
+        if not name in self.namemap:
+            return None
+        return self.namemap[name]
+
+    def lazynodemap(self, node):
+        if not self.populaterefs():
+            return None
+        if not node in self.namemap:
+            return None
+        return self.namemap[node]
+
     def listkeys(self, namespace):
         if namespace == 'namespaces':
             return {'bookmarks': ''}