diff --git a/mercurial/templates/gitweb/bookmarks.tmpl b/mercurial/templates/gitweb/bookmarks.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvYm9va21hcmtzLnRtcGw=
--- /dev/null
+++ b/mercurial/templates/gitweb/bookmarks.tmpl
@@ -0,0 +1,32 @@
+{header}
+<title>{repo|escape}: Bookmarks</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-bookmarks" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-bookmarks" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / bookmarks
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+bookmarks |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
+<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+<table cellspacing="0">
+{entries%bookmarkentry}
+</table>
+
+{footer}
diff --git a/mercurial/templates/gitweb/branches.tmpl b/mercurial/templates/gitweb/branches.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvYnJhbmNoZXMudG1wbA==..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvYnJhbmNoZXMudG1wbA== 100644
--- a/mercurial/templates/gitweb/branches.tmpl
+++ b/mercurial/templates/gitweb/branches.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 branches |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 <a href="{url}help{sessionvars%urlparameter}">help</a>
diff --git a/mercurial/templates/gitweb/changelog.tmpl b/mercurial/templates/gitweb/changelog.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvY2hhbmdlbG9nLnRtcGw=..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvY2hhbmdlbG9nLnRtcGw= 100644
--- a/mercurial/templates/gitweb/changelog.tmpl
+++ b/mercurial/templates/gitweb/changelog.tmpl
@@ -24,6 +24,7 @@
 changelog |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
 <a href="{url}help{sessionvars%urlparameter}">help</a>
diff --git a/mercurial/templates/gitweb/changeset.tmpl b/mercurial/templates/gitweb/changeset.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvY2hhbmdlc2V0LnRtcGw=..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvY2hhbmdlc2V0LnRtcGw= 100644
--- a/mercurial/templates/gitweb/changeset.tmpl
+++ b/mercurial/templates/gitweb/changeset.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 changeset |
diff --git a/mercurial/templates/gitweb/error.tmpl b/mercurial/templates/gitweb/error.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZXJyb3IudG1wbA==..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZXJyb3IudG1wbA== 100644
--- a/mercurial/templates/gitweb/error.tmpl
+++ b/mercurial/templates/gitweb/error.tmpl
@@ -16,6 +16,7 @@
 <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 <a href="{url}help{sessionvars%urlparameter}">help</a>
diff --git a/mercurial/templates/gitweb/fileannotate.tmpl b/mercurial/templates/gitweb/fileannotate.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZWFubm90YXRlLnRtcGw=..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZWFubm90YXRlLnRtcGw= 100644
--- a/mercurial/templates/gitweb/fileannotate.tmpl
+++ b/mercurial/templates/gitweb/fileannotate.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
diff --git a/mercurial/templates/gitweb/filediff.tmpl b/mercurial/templates/gitweb/filediff.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZWRpZmYudG1wbA==..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZWRpZmYudG1wbA== 100644
--- a/mercurial/templates/gitweb/filediff.tmpl
+++ b/mercurial/templates/gitweb/filediff.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
diff --git a/mercurial/templates/gitweb/filelog.tmpl b/mercurial/templates/gitweb/filelog.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZWxvZy50bXBs..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZWxvZy50bXBs 100644
--- a/mercurial/templates/gitweb/filelog.tmpl
+++ b/mercurial/templates/gitweb/filelog.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
 revisions |
diff --git a/mercurial/templates/gitweb/filerevision.tmpl b/mercurial/templates/gitweb/filerevision.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZXJldmlzaW9uLnRtcGw=..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZmlsZXJldmlzaW9uLnRtcGw= 100644
--- a/mercurial/templates/gitweb/filerevision.tmpl
+++ b/mercurial/templates/gitweb/filerevision.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
diff --git a/mercurial/templates/gitweb/graph.tmpl b/mercurial/templates/gitweb/graph.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZ3JhcGgudG1wbA==..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvZ3JhcGgudG1wbA== 100644
--- a/mercurial/templates/gitweb/graph.tmpl
+++ b/mercurial/templates/gitweb/graph.tmpl
@@ -24,6 +24,7 @@
 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
 graph |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 <a href="{url}help{sessionvars%urlparameter}">help</a>
diff --git a/mercurial/templates/gitweb/help.tmpl b/mercurial/templates/gitweb/help.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvaGVscC50bXBs..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvaGVscC50bXBs 100644
--- a/mercurial/templates/gitweb/help.tmpl
+++ b/mercurial/templates/gitweb/help.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 help
diff --git a/mercurial/templates/gitweb/helptopics.tmpl b/mercurial/templates/gitweb/helptopics.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvaGVscHRvcGljcy50bXBs..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvaGVscHRvcGljcy50bXBs 100644
--- a/mercurial/templates/gitweb/helptopics.tmpl
+++ b/mercurial/templates/gitweb/helptopics.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 help
diff --git a/mercurial/templates/gitweb/manifest.tmpl b/mercurial/templates/gitweb/manifest.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvbWFuaWZlc3QudG1wbA==..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvbWFuaWZlc3QudG1wbA== 100644
--- a/mercurial/templates/gitweb/manifest.tmpl
+++ b/mercurial/templates/gitweb/manifest.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 files |
 <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
diff --git a/mercurial/templates/gitweb/map b/mercurial/templates/gitweb/map
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvbWFw..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvbWFw 100644
--- a/mercurial/templates/gitweb/map
+++ b/mercurial/templates/gitweb/map
@@ -170,6 +170,17 @@
       <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
     </td>
   </tr>'
+bookmarks = bookmarks.tmpl
+bookmarkentry = '
+  <tr class="parity{parity}">
+    <td class="age"><i>{date|age}</i></td>
+    <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{bookmark|escape}</b></a></td>
+    <td class="link">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
+      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
 branches = branches.tmpl
 branchentry = '
   <tr class="parity{parity}">
diff --git a/mercurial/templates/gitweb/search.tmpl b/mercurial/templates/gitweb/search.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvc2VhcmNoLnRtcGw=..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvc2VhcmNoLnRtcGw= 100644
--- a/mercurial/templates/gitweb/search.tmpl
+++ b/mercurial/templates/gitweb/search.tmpl
@@ -24,6 +24,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
  |
diff --git a/mercurial/templates/gitweb/shortlog.tmpl b/mercurial/templates/gitweb/shortlog.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvc2hvcnRsb2cudG1wbA==..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvc2hvcnRsb2cudG1wbA== 100644
--- a/mercurial/templates/gitweb/shortlog.tmpl
+++ b/mercurial/templates/gitweb/shortlog.tmpl
@@ -23,6 +23,7 @@
 <a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
 <a href="{url}help{sessionvars%urlparameter}">help</a>
diff --git a/mercurial/templates/gitweb/summary.tmpl b/mercurial/templates/gitweb/summary.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvc3VtbWFyeS50bXBs..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvc3VtbWFyeS50bXBs 100644
--- a/mercurial/templates/gitweb/summary.tmpl
+++ b/mercurial/templates/gitweb/summary.tmpl
@@ -24,6 +24,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
 <a href="{url}help{sessionvars%urlparameter}">help</a>
diff --git a/mercurial/templates/gitweb/tags.tmpl b/mercurial/templates/gitweb/tags.tmpl
index b602ac02f1baf52f368366c336ef8fed39d02931_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvdGFncy50bXBs..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_bWVyY3VyaWFsL3RlbXBsYXRlcy9naXR3ZWIvdGFncy50bXBs 100644
--- a/mercurial/templates/gitweb/tags.tmpl
+++ b/mercurial/templates/gitweb/tags.tmpl
@@ -17,6 +17,7 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 tags |
+<a href="{url}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 <a href="{url}help{sessionvars%urlparameter}">help</a>
diff --git a/tests/test-hgweb-commands.t b/tests/test-hgweb-commands.t
index b602ac02f1baf52f368366c336ef8fed39d02931_dGVzdHMvdGVzdC1oZ3dlYi1jb21tYW5kcy50..fd8a6ca3a7502313bb7b172f6cb4b3764265bedb_dGVzdHMvdGVzdC1oZ3dlYi1jb21tYW5kcy50 100644
--- a/tests/test-hgweb-commands.t
+++ b/tests/test-hgweb-commands.t
@@ -640,6 +640,7 @@
   <a href="/log?style=gitweb">changelog</a> |
   <a href="/graph?style=gitweb">graph</a> |
   <a href="/tags?style=gitweb">tags</a> |
+  <a href="/bookmarks?style=gitweb">bookmarks</a> |
   <a href="/branches?style=gitweb">branches</a> |
   <a href="/file/1d22e65f027e?style=gitweb">files</a> |
   <a href="/help?style=gitweb">help</a>
@@ -792,6 +793,7 @@
   <a href="/log/2?style=gitweb">changelog</a> |
   graph |
   <a href="/tags?style=gitweb">tags</a> |
+  <a href="/bookmarks?style=gitweb">bookmarks</a> |
   <a href="/branches?style=gitweb">branches</a> |
   <a href="/file/1d22e65f027e?style=gitweb">files</a> |
   <a href="/help?style=gitweb">help</a>