Index: trunk/BookmarkApp.pm
===================================================================
--- trunk/BookmarkApp.pm	(revision 21)
+++ trunk/BookmarkApp.pm	(revision 22)
@@ -136,4 +136,46 @@
         $base_url .= '/' if $base_url =~ m{/bookmarks$};
 
+        my @links = (
+            {
+                text => 'Link',
+                type => 'text/html',
+                rel  => 'self',
+                query => {
+                    tag => \@tags,
+                },
+            },
+            {
+                text => 'JSON',
+                type => 'application/json',
+                rel  => 'alternate',
+                query => {
+                    tag => \@tags,
+                    format => 'json',
+                },
+            },
+            {
+                text => 'XBEL',
+                type => 'application/xml',
+                rel  => 'alternate',
+                query => {
+                    tag => \@tags,
+                    format => 'xbel',
+                },
+            },
+            {
+                text => 'Atom',
+                type => 'application/atom+xml',
+                rel  => 'alternate',
+                path => 'feed',
+                query => {
+                    tag => \@tags,
+                },
+            },
+        );
+        for my $link (@links) {
+            $link->{href} = URI->new_abs($link->{path} || '', $base_uri);
+            $link->{href}->query_form($link->{query});
+        }
+        
         return $self->tt_process(
             'list.tt',
@@ -142,5 +184,5 @@
                 selected_tag => $tag,
                 search_tags  => \@tags,
-                tag_query    => join('&', map { "tag=$_" } @tags),
+                links        => \@links,
                 all_tags     => \@all_tags,
                 cotags       => \@cotags,
Index: trunk/list.tt
===================================================================
--- trunk/list.tt	(revision 21)
+++ trunk/list.tt	(revision 22)
@@ -27,4 +27,14 @@
     border-top: 6px solid #eee;
     border-bottom: 6px solid #eee;
+}
+.alternate-links {
+    margin: .5em .25em;
+}
+.alternate-links li {
+    display: inline;
+}
+.alternate-links li+li:before {
+    content: ' | ';
+    color: #ccc;
 }
 .refine {
@@ -101,13 +111,11 @@
       [%  END %]
     </ul>
-    [% IF search_tags.size %]
-    <!-- TODO: well-formatted query strings if there is no tag query -->
-      <p>
-        <a href="?[% tag_query %]">Link</a> &middot;
-        <a href="?[% tag_query %]&format=json" type="application/json">JSON</a> &middot;
-        <a href="?[% tag_query %]&format=xbel" type="application/xml">XBEL</a> &middot;
-        <a href="feed?[% tag_query %]" type="application/atom+xml">Atom</a>
-      </p>
-    [% END %]
+    <ul class="alternate-links">
+      [% FOREACH link IN links %]
+	<li>
+	  <a href="[% link.href.canonical %]" type="[% link.type %]" rel="[% link.rel %]">[% link.text %]</a>
+	</li>
+      [% END %]
+    </ul>
     <div class="refine">
       <form method="get" action="">
