diff --git a/README.md b/README.md
index 0d0693895c5fd4d16691a436258bc153b602d626..4f895e0f5dcc1f3da08162bf6de75d0072638f43 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,13 @@
 # VOSpace Data Model
 
+Java classes used for modelling VOSpace entities are used both by REST web service and UI application, so they are kept in a separate software module called VOSpace Data Model:
+
+![vospace-datamodel](vospace-datamodel.jpg)
+
+The main goal of this shared library is to provide a binding between Java classes and XML defined by the VOSpace standard. We are also using `jackson-module-jaxb-annotations` to support both XML and JSON binding. Our REST service supports also JSON payloads (Spring Framework performs content negotiation based on HTTP Accept header).
+
+Some utility methods for extracting information from nodes have also been added.
+
 ## Generating beans from XML schema
 
     cd xsd
@@ -11,45 +19,48 @@ It seems that xjc does something wrong when retriving the imported XSD from the
 
 In vospace.xsd:
 
-    <xsd:import namespace="http://www.ivoa.net/xml/UWS/v1.0" schemaLocation="./uws.xsd"/>
+```xml
+<xsd:import namespace="http://www.ivoa.net/xml/UWS/v1.0" schemaLocation="./uws.xsd"/>
+```
 
 In uws.xsd:
 
-    <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="./xlink.xsd"/>
+```xml
+<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="./xlink.xsd"/>
+```
 
 ### Changes to the generated classes
 
-In package-info.java the following element has been added to serialize the XML keeping the namespace.
-
-    xmlns = {
-        @javax.xml.bind.annotation.XmlNs(
-                namespaceURI = "http://www.ivoa.net/xml/VOSpace/v2.0",
-                prefix = "vos"
-        )
-    }
+#### Namespaces issues
 
-Some issues emerged in handling inheritance and namespaces in a way compatible both to JSON and XML formats. Moreover it was necessary to setup a workaround for filling the `xsi:type` of the root node:
+In package-info.java files some `@javax.xml.bind.annotation.XmlNs` annotations have been added to serialize the XML keeping the namespaces (vos, xsi, xlink, uws).
 
-In Node.java type field and removeType() method have been added:
+To handle the `vos:` prefix in JSON a custom type id resolver (`NodeTypeJsonResolver`) has been added to the `Node` class.
 
-    // Used for generating missing type attribute for root node. For child nodes it is filled automatically.
-    @XmlAttribute(name = "type", namespace = "http://www.w3.org/2001/XMLSchema-instance", required = false)
-    private String type;
+#### Type attribute issue
 
-    /* This method exists to fix the issue with type attribute. See RemoveDuplicateTypeAdapter class. */
-    public void removeType() {
-        this.type = null;
-    }
+JAXB automatically generates the `xsi:type` attribute, however it doesn't fill it for the root node (it seems that this is by design). Since we need it, we manually added it on the `Node` class, but this caused a duplication of the attribute in the children nodes. So we added a `removeType()` method that sets it to null. This method is called by a custom adapter (`RemoveDuplicateTypeAdapter`) during the marshalling of the node.
 
-For JSON compatibility the following has been added to Node.java (annotation on class):
+#### JSON inheritance
 
-    @JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, property = "type", include = JsonTypeInfo.As.EXISTING_PROPERTY)
-    @JsonTypeIdResolver(NodeTypeJsonResolver.class)
+The `@JsonTypeInfo` annotation has been added to the `Node` class for telling to Jackson that the field type is used to handle inheritance.
 
-The `@JsonTypeInfo` tells to Jackson that the field type is used to handle inheritance. A custom type id resolver has been created to handle the `vos:` prefix.
+#### Root element tag name
 
 2 annotations have been added to each node subtype:
 
-    @XmlRootElement(name = "node")
+```java
+@XmlRootElement(name = "node")
+```
+
+`@XmlRootElement` is necessary to parse single nodes. The value `"node"` has been specified because by default the bean would be serialized as `<unstructuredDataNode>` or `<containerNode>` and so on.
+
+#### Handling generic type in JobInfo content
+
+`JobSummary` class has a `jobInfo` field that is a generic object (since it is the payload of UWS jobs). In the case of VOSpace the `jobInfo` is an instance of `Transfer`. To properly serialize this object the following annotation has been added to the `JobSummary` class:
+
+```java
+@XmlSeeAlso({Transfer.class})
+```
 
-`@XmlRootElement` is necessary to parse single nodes. The value `"node"` has been specified because by default the bean would be serialized as `<unstructuredDataNode>`.
+Moreover custom JSON serializer and deserialized have been added on the `JobInfo` class.
diff --git a/vospace-datamodel.jpg b/vospace-datamodel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6e67a71b74a3d572cae1031f813f9f16de764199
Binary files /dev/null and b/vospace-datamodel.jpg differ