Index: src/main/java/de/mpiwg/itgroup/annotations/Annotation.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/Annotation.java	(revision 40)
+++ src/main/java/de/mpiwg/itgroup/annotations/Annotation.java	(revision 48)
@@ -29,7 +29,7 @@
     
     /**
-     * The base URI of the annotation target.
-     */
-    protected String targetBaseUri;
+     * The annotation target.
+     */
+    protected Target target;
     
     /**
@@ -53,8 +53,8 @@
     
     /**
-     * The uri of the resource that is annotated e.g. a book. 
+     * The Resource that is annotated e.g. a book. 
      * The target is part of this resource e.g. a page of a book.
      */
-    protected String resourceUri;
+    protected Resource resource;
     
     /**
@@ -189,15 +189,23 @@
 
     /**
+     * @return the target
+     */
+    public Target getTarget() {
+        return target;
+    }
+
+    /**
+     * @param target the target to set
+     */
+    public void setTarget(Target target) {
+        this.target = target;
+    }
+
+    /**
      * @return the targetBaseUri
      */
     public String getTargetBaseUri() {
-        return targetBaseUri;
-    }
-
-    /**
-     * @param targetBaseUri the targetBaseUri to set
-     */
-    public void setTargetBaseUri(String targetBaseUri) {
-        this.targetBaseUri = targetBaseUri;
+        if (target == null) return null;
+        return target.getUri();
     }
 
@@ -231,15 +239,23 @@
 
     /**
+     * @return the resource
+     */
+    public Resource getResource() {
+        return resource;
+    }
+
+    /**
+     * @param resource the resource to set
+     */
+    public void setResource(Resource resource) {
+        this.resource = resource;
+    }
+
+    /**
      * @return the resourceUri
      */
     public String getResourceUri() {
-        return resourceUri;
-    }
-
-    /**
-     * @param resourceUri the resourceUri to set
-     */
-    public void setResourceUri(String resourceUri) {
-        this.resourceUri = resourceUri;
+        if (resource == null) return null;
+        return resource.getUri();
     }
 
Index: src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java	(revision 45)
+++ src/main/java/de/mpiwg/itgroup/annotations/neo4j/AnnotationStore.java	(revision 48)
@@ -488,10 +488,10 @@
             String type = (String) target.getProperty("TYPE");
             if (type.equals("TARGET")) {
-                annot.setTargetBaseUri((String) target.getProperty("uri", null));
+                annot.setTarget(new Target((String) target.getProperty("uri", null)));
             } else if (type.equals("RESOURCE")) {
-                annot.setResourceUri((String) target.getProperty("uri", null));
-            }
-        }
-        if (annot.getTargetBaseUri() == null) {
+                annot.setResource(new Resource((String) target.getProperty("uri", null)));
+            }
+        }
+        if (annot.getTarget() == null) {
             logger.error("annotation " + annotNode + " has no target node!");
         }
@@ -653,8 +653,8 @@
              * the annotation target
              */
-            String targetBaseUri = annot.getTargetBaseUri();
+            Target target = annot.getTarget();
             Node targetNode = null;
-            if (targetBaseUri != null) {
-                targetNode = getOrCreateTargetNode(targetBaseUri, NodeTypes.TARGET);
+            if (target != null) {
+                targetNode = getOrCreateUriNode(target.getUri(), NodeTypes.TARGET);
                 getOrCreateRelation(annotNode, RelationTypes.ANNOTATES, targetNode);
             }
@@ -673,9 +673,9 @@
              * the annotation resource
              */
-            String resourceUri = annot.getResourceUri();
-            if (resourceUri != null) {
-                Node resource = getOrCreateTargetNode(resourceUri, NodeTypes.RESOURCE);
-                getOrCreateRelation(annotNode, RelationTypes.ANNOTATES, resource);
-                getOrCreateRelation(targetNode, RelationTypes.PART_OF, resource);
+            Resource resource = annot.getResource();
+            if (resource != null) {
+                Node resourceNode = getOrCreateUriNode(resource.getUri(), NodeTypes.RESOURCE);
+                getOrCreateRelation(annotNode, RelationTypes.ANNOTATES, resourceNode);
+                getOrCreateRelation(targetNode, RelationTypes.PART_OF, resourceNode);
             }
 
@@ -892,5 +892,5 @@
     }
 
-    protected Node getOrCreateTargetNode(String uri, NodeTypes type) {
+    protected Node getOrCreateUriNode(String uri, NodeTypes type) {
         Index<Node> idx = getNodeIndex(type);
         IndexHits<Node> targets = idx.get("uri", uri);
Index: src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java
===================================================================
--- src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java	(revision 40)
+++ src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java	(revision 48)
@@ -40,4 +40,6 @@
 import de.mpiwg.itgroup.annotations.NS;
 import de.mpiwg.itgroup.annotations.Person;
+import de.mpiwg.itgroup.annotations.Resource;
+import de.mpiwg.itgroup.annotations.Target;
 import de.mpiwg.itgroup.annotations.neo4j.AnnotationStore;
 
@@ -442,5 +444,5 @@
          */
         if (jo.has("uri")) {
-            annot.setTargetBaseUri(jo.getString("uri"));
+            annot.setTarget(new Target(jo.getString("uri")));
         }
         /*
@@ -448,5 +450,5 @@
          */
         if (jo.has("resource")) {
-            annot.setResourceUri(jo.getString("resource"));
+            annot.setResource(new Resource(jo.getString("resource")));
         }
         /*
