Index: trunk/BookmarkController.pm
===================================================================
--- trunk/BookmarkController.pm	(revision 60)
+++ trunk/BookmarkController.pm	(revision 61)
@@ -9,7 +9,13 @@
 use Template;
 
+has dbname => (
+    is => 'ro',
+    required => 1,
+);
 has bookmarks => (
-    is => 'rw',
+    is => 'ro',
     handles => [qw{get_bookmark}],
+    builder => '_build_bookmarks',
+    lazy => 1,
 );
 has base_uri => (
@@ -20,5 +26,14 @@
 has request => (
     is => 'ro',
+    required => 1,
 );
+
+sub _build_bookmarks {
+    my $self = shift;
+    return Bookmarks->new({
+        dbname   => $self->dbname,
+        base_uri => $self->base_uri,
+    });
+}
 
 sub _build_base_uri {
Index: trunk/api
===================================================================
--- trunk/api	(revision 60)
+++ trunk/api	(revision 61)
@@ -3,5 +3,5 @@
 
   Params:
-    format=json|xbel
+    format=json|xbel|text|csv|html
     tag={tag} (repeatable)
     limit={limit}
@@ -16,4 +16,7 @@
 GET /feed
   Gets an Atom feed of the bookmarks
+
+  Params:
+    tag={tag} (repeatable)
 
 POST /
Index: trunk/app.psgi
===================================================================
--- trunk/app.psgi	(revision 60)
+++ trunk/app.psgi	(revision 61)
@@ -8,5 +8,4 @@
 
 use BookmarkController;
-use Bookmarks;
 
 #TODO: allow a different config file on the command line, or set options from the command line
@@ -19,13 +18,8 @@
     my $req = shift;
 
-    my $controller = BookmarkController->new({
+    return BookmarkController->new({
         request => $req,
+        dbname  => $config->{dbname},
     });
-    my $bookmarks = Bookmarks->new({
-        dbname   => $config->{dbname},
-        base_uri => $controller->base_uri,
-    });
-    $controller->bookmarks($bookmarks);
-    return $controller;
 }
 
