Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java	(revision 44)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByResources.java	(revision 50)
@@ -7,5 +7,4 @@
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.neo4j.graphdb.Node;
 import org.restlet.data.Form;
 import org.restlet.data.Parameter;
@@ -14,10 +13,7 @@
 import org.restlet.representation.Representation;
 import org.restlet.resource.Get;
-import org.restlet.resource.ServerResource;
 
 import de.mpiwg.itgroup.annotations.Annotation;
-import de.mpiwg.itgroup.annotations.NS;
 import de.mpiwg.itgroup.annotations.Person;
-import de.mpiwg.itgroup.annotations.Tag;
 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
 import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByTags.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByTags.java	(revision 37)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorAnnotationsByTags.java	(revision 50)
@@ -7,5 +7,4 @@
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.neo4j.graphdb.Node;
 import org.restlet.data.Form;
 import org.restlet.data.Parameter;
@@ -14,10 +13,8 @@
 import org.restlet.representation.Representation;
 import org.restlet.resource.Get;
-import org.restlet.resource.ServerResource;
 
 import de.mpiwg.itgroup.annotations.Annotation;
 import de.mpiwg.itgroup.annotations.NS;
 import de.mpiwg.itgroup.annotations.Person;
-import de.mpiwg.itgroup.annotations.Tag;
 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
 import de.mpiwg.itgroup.annotations.restlet.utils.JSONObjectComparator;
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResources.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResources.java	(revision 44)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResources.java	(revision 50)
@@ -10,5 +10,4 @@
 import org.json.JSONObject;
 import org.neo4j.graphdb.Node;
-import org.restlet.data.Form;
 import org.restlet.data.Status;
 import org.restlet.ext.json.JsonRepresentation;
@@ -16,11 +15,6 @@
 import org.restlet.resource.Get;
 
-import de.mpiwg.itgroup.annotations.Actor;
-import de.mpiwg.itgroup.annotations.Group;
-import de.mpiwg.itgroup.annotations.NS;
 import de.mpiwg.itgroup.annotations.Resource;
-import de.mpiwg.itgroup.annotations.Tag;
 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
 
 
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorTags.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorTags.java	(revision 28)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorTags.java	(revision 50)
@@ -10,5 +10,4 @@
 import org.json.JSONObject;
 import org.neo4j.graphdb.Node;
-import org.restlet.data.Form;
 import org.restlet.data.Status;
 import org.restlet.ext.json.JsonRepresentation;
@@ -16,10 +15,7 @@
 import org.restlet.resource.Get;
 
-import de.mpiwg.itgroup.annotations.Actor;
-import de.mpiwg.itgroup.annotations.Group;
 import de.mpiwg.itgroup.annotations.NS;
 import de.mpiwg.itgroup.annotations.Tag;
 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
 
 
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/BaseRestlet.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/BaseRestlet.java	(revision 22)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/BaseRestlet.java	(revision 50)
@@ -57,4 +57,7 @@
     protected String ldapServerUrl;
     public static final String LDAP_SERVER_KEY = "annotationmanager.ldapserver.url";
+
+    public static final String ADMIN_USER_KEY = "annotationmanager.admin.user";
+    public static final String ADMIN_PASSWORD_KEY = "annotationmanager.admin.password";
 
     /**
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java	(revision 50)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationResource.java	(revision 50)
@@ -0,0 +1,172 @@
+/**
+ * 
+ */
+package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
+
+import org.apache.log4j.Logger;
+import org.restlet.data.Form;
+import org.restlet.data.MediaType;
+import org.restlet.data.Reference;
+import org.restlet.data.Status;
+import org.restlet.representation.Representation;
+import org.restlet.representation.StringRepresentation;
+import org.restlet.resource.Delete;
+import org.restlet.resource.Get;
+import org.restlet.resource.Put;
+import org.restlet.resource.ResourceException;
+import org.restlet.resource.ServerResource;
+
+import de.mpiwg.itgroup.annotations.Annotation;
+import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
+import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
+
+/**
+ * Resource class for a single annotation.
+ * 
+ * @author casties
+ * 
+ */
+public class AnnotationResource extends ServerResource {
+
+    public static Logger logger = Logger.getLogger(AnnotationResource.class);
+
+    protected AnnotationStore store;
+
+    protected String requestId;
+
+    protected Annotation annotation;
+
+    @Override
+    protected void doInit() throws ResourceException {
+        super.doInit();
+        // id from URI /annotations/persons/{id}
+        requestId = (String) getRequest().getAttributes().get("id");
+        logger.debug("annoation-id=" + requestId);
+        // get store instance
+        if (store == null) {
+            store = ((BaseRestlet) getApplication()).getAnnotationStore();
+        }
+        // get annotation from store
+        if (requestId != null) {
+            // the ID in the path is encoded
+            String id = Annotation.decodeId(requestId);
+            annotation = store.getAnnotationById(id);
+        }
+    }
+
+    /**
+     * GET with HTML content type. Shows the person.
+     * 
+     * @param entity
+     * @return
+     */
+    @Get("html")
+    public Representation doGetHTML(Representation entity) {
+        if (annotation == null) {
+            // invalid id
+            setStatus(Status.CLIENT_ERROR_NOT_FOUND);
+            return null;
+        }
+        String result = null;
+        // get form parameter
+        Form f = this.getQuery();
+        String form = f.getFirstValue("form");
+        if (form != null && form.equals("edit")) {
+            /*
+            // output edit form
+            result = "<html><body>\n";
+            result += String.format("<h1>Edit person %s</h1>\n", annotation.getId());
+            result += String.format("<p><a href=\"%s\">All persons</a></p>", this.getReference().getParentRef());
+            // tunnel PUT method through POST
+            result += String.format("<form method=\"post\" action=\"%s?method=PUT\">\n", this.getReference().getHierarchicalPart());
+            result += "<table>";
+            result += String.format("<tr><td><b>name</b></td><td><input type=\"text\" name=\"name\" value=\"%s\"/></td></tr>\n",
+                    annotation.getName());
+            result += String.format("<tr><td><b>uri</b></td><td><input type=\"text\" name=\"uri\" value=\"%s\"/></td></tr>\n",
+                    annotation.getUriString());
+            result += "</table>\n";
+            result += "<p><input type=\"submit\"/></p>";
+            result += "</table>\n</form>\n</body>\n</html>";
+            */
+        } else {
+            // output person content
+            result = "<html><body>\n<h1>Annotation</h1>\n";
+            result += String.format("<p><a href=\"%s\">All annotations</a></p>", this.getReference().getParentRef());
+            result += "<table>";
+            result += String.format("<tr><td><b>uri</b></td><td>%s</td></tr>\n", annotation.getUri());
+            result += String.format("<tr><td><b>text</b></td><td>%s</td></tr>\n", annotation.getBodyText());
+            result += String.format("<tr><td><b>target</b></td><td>%s</td></tr>\n", annotation.getTargetBaseUri());
+            result += String.format("<tr><td><b>fragment</b></td><td>%s</td></tr>\n", annotation.getTargetFragment());
+            result += String.format("<tr><td><b>creator</b></td><td>%s</td></tr>\n", annotation.getCreatorName());
+            result += "</table>\n";
+            //result += "<p><a href=\"?form=edit\">Edit annotation</a></p>\n";
+            // tunnel POST as DELETE
+            result += String.format(
+                    "<form method=\"post\" action=\"%s?method=DELETE\"><input type=\"submit\" value=\"Delete annotation\"/></form>\n",
+                    this.getReference().getHierarchicalPart());
+            result += "</body>\n</html>";
+        }
+        return new StringRepresentation(result, MediaType.TEXT_HTML);
+    }
+
+    /**
+     * PUT updates the annotation.
+     * 
+     * @param entity
+     * @return
+     */
+    @Put
+    public Representation doPut(Representation entity) {
+        logger.debug("AnnotationResource.doPut!");
+        if (annotation == null) {
+            // invalid id
+            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
+            return null;
+        }
+        // NOT YET
+        return null;
+        /*
+        // TODO: do authentication
+        Form form = new Form(entity);
+        String name = form.getFirstValue("name");
+        String uri = form.getFirstValue("uri");
+        if (name != null && !name.isEmpty()) {
+            annotation.setName(name);
+        }
+        if (uri != null && !uri.isEmpty()) {
+            annotation.setUri(uri);
+        }
+        store.storeActor(annotation);
+        // return 303: see other
+        setStatus(Status.REDIRECTION_SEE_OTHER);
+        // go GET same URL
+        Reference url = this.getReference();
+        this.getResponse().setLocationRef(url);
+        return null;
+        */
+    }
+
+    /**
+     * DELETE deletes the annotation.
+     * 
+     * @param entity
+     * @return
+     */
+    @Delete
+    public Representation doDelete(Representation entity) {
+        logger.debug("AnnotationResource.doDelete!");
+        if (annotation == null) {
+            // invalid id
+            setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
+            return null;
+        }
+        // TODO: do authentication
+        store.deleteAnnotationById(annotation.getUri());
+        // return 303: see other
+        setStatus(Status.REDIRECTION_SEE_OTHER);
+        // go GET parent URL
+        Reference url = this.getReference().getParentRef();
+        this.getResponse().setLocationRef(url);
+        return null;
+    }
+}
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsResource.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsResource.java	(revision 50)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsResource.java	(revision 50)
@@ -0,0 +1,67 @@
+/**
+ * 
+ */
+package de.mpiwg.itgroup.annotations.restlet.annotations_ui;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.restlet.data.MediaType;
+import org.restlet.data.Reference;
+import org.restlet.representation.Representation;
+import org.restlet.representation.StringRepresentation;
+import org.restlet.resource.Get;
+import org.restlet.resource.ResourceException;
+import org.restlet.resource.ServerResource;
+
+import de.mpiwg.itgroup.annotations.Annotation;
+import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
+import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
+
+/**
+ * Resource class for the list of annotations.
+ * 
+ * @author casties
+ * 
+ */
+public class AnnotationsResource extends ServerResource {
+
+    public static Logger logger = Logger.getLogger(AnnotationsResource.class);
+
+    private AnnotationStore store;
+
+    @Override
+    protected void doInit() throws ResourceException {
+        super.doInit();
+        // get store instance
+        if (store == null) {
+            store = ((BaseRestlet) getApplication()).getAnnotationStore();
+        }
+    }
+
+    /**
+     * GET with HTML content type. Lists all annotations.
+     * 
+     * @param entity
+     * @return
+     */
+    @Get("html")
+    public Representation doGetHTML(Representation entity) {
+        String result = null;
+        // list all annotations
+        result = "<html><body>\n<h1>Annotations</h1>\n<table>";
+        result += "<tr><th>uri</th><th>text</th><th>target</th><th>fragment</th><th>creator</th></tr>";
+        List<Annotation> annotations = store.getAnnotations("id", "*");
+        for (Annotation annotation : annotations) {
+            Reference url = this.getReference().clone();
+            url.addSegment(annotation.getUrlId());
+            result += String.format("<tr><td><a href=\"%s\">%s</a></td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n", url,
+                    annotation.getUri(), annotation.getBodyText(), annotation.getTargetBaseUri(), annotation.getTargetFragment(),
+                    annotation.getCreatorName());
+        }
+        result += "</table>\n";
+        result += "</body>\n</html>";
+        return new StringRepresentation(result, MediaType.TEXT_HTML);
+    }
+
+}
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java	(revision 49)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/AnnotationsUiRestlet.java	(revision 50)
@@ -20,5 +20,5 @@
 public class AnnotationsUiRestlet extends BaseRestlet {
 
-    public final String version = "AnnotationManagerN4J/AnnotationsUI 0.2";
+    public final String version = "AnnotationManagerN4J/AnnotationsUI 0.3";
 
     public static Logger logger = Logger.getLogger(AnnotationsUiRestlet.class);
@@ -26,5 +26,5 @@
     public AnnotationsUiRestlet(Context context) {
         super(context);
-        logger.debug("StoreRestlet!");
+        logger.info(version);
     }
 
@@ -49,10 +49,17 @@
         router.attach("/persons/{id}", PersonResource.class);
         router.attach("/persons/{id}/", PersonResource.class);
+        router.attach("/annotations", AnnotationsResource.class);
+        router.attach("/annotations/", AnnotationsResource.class);
+        router.attach("/annotations/{id}", AnnotationResource.class);
+        router.attach("/annotations/{id}/", AnnotationResource.class);
 
         router.attach("/", InfoResource.class);
 
-        // Create a simple password verifier
+        // use simple password verifier
         MapVerifier verifier = new MapVerifier();
-        verifier.getLocalSecrets().put("scott", "tiger".toCharArray());
+        // get user name and password
+        String user = serverConfig.getProperty(BaseRestlet.ADMIN_USER_KEY);
+        String pw = serverConfig.getProperty(BaseRestlet.ADMIN_PASSWORD_KEY);
+        verifier.getLocalSecrets().put(user, pw.toCharArray());
         // Create a Guard
         ChallengeAuthenticator guard = new ChallengeAuthenticator(getContext(), ChallengeScheme.HTTP_BASIC, "Tutorial");
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java	(revision 45)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/GroupMembersResource.java	(revision 50)
@@ -15,7 +15,5 @@
 import org.restlet.resource.Post;
 
-import de.mpiwg.itgroup.annotations.Actor;
 import de.mpiwg.itgroup.annotations.Person;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
 
 /**
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/PersonsResource.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/PersonsResource.java	(revision 45)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/annotations_ui/PersonsResource.java	(revision 50)
@@ -21,5 +21,4 @@
 import de.mpiwg.itgroup.annotations.Person;
 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
-import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore.NodeTypes;
 import de.mpiwg.itgroup.annotations.restlet.BaseRestlet;
 
