diff --git a/src/tap/resource/TAP.java b/src/tap/resource/TAP.java
index e4ab1448a5d5aaaf7dbe2557233c3aa5a6185bd1..700b46e328b8dee45d4ca3a830b6cc24f1d1558a 100644
--- a/src/tap/resource/TAP.java
+++ b/src/tap/resource/TAP.java
@@ -2,20 +2,20 @@ package tap.resource;
 
 /*
  * This file is part of TAPLibrary.
- * 
+ *
  * TAPLibrary is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
- * 
+ *
  * TAPLibrary is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public License
  * along with TAPLibrary.  If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  * Copyright 2012-2017 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
  *                       Astronomisches Rechen Institut (ARI)
  */
@@ -52,14 +52,18 @@ import uws.service.log.UWSLog.LogLevel;
 
 /**
  * <p>Root/Home of the TAP service. It is also the resource (HOME) which gathers all the others of the same TAP service.</p>
- * 
+ *
  * <p>At its creation it is creating and configuring the other resources in function of the given description of the TAP service.</p>
- * 
+ *
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
  * @version 2.1 (09/2017)
  */
 public class TAP implements VOSIResource {
 
+	/** Version of the TAP protocol used in this library.
+	 * @since 2.1 */
+	public final static String VERSION = "1.0";
+
 	/** <p>Name of the TAP AVAILABILITY resource.
 	 * This resource tells whether the TAP service is available (i.e. whether it accepts queries or not).</p>
 	 * <p><i>Note: this name is suffixing the root TAP URL in order to access one of its resources.</i></p>
@@ -124,9 +128,9 @@ public class TAP implements VOSIResource {
 	/**
 	 * Build a HOME resource of a TAP service whose the description is given in parameter.
 	 * All the other TAP resources will be created and configured here thanks to the given {@link ServiceConnection}.
-	 * 
+	 *
 	 * @param serviceConnection	Description of the TAP service.
-	 * 
+	 *
 	 * @throws UWSException	If an error occurs while creating the /async resource.
 	 * @throws TAPException	If any other error occurs.
 	 */
@@ -161,7 +165,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the logger used by this resource and all the other resources managed by it.
-	 * 
+	 *
 	 * @return	The used logger.
 	 */
 	public final TAPLog getLogger(){
@@ -170,13 +174,13 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Let initialize this resource and all the other managed resources.</p>
-	 * 
+	 *
 	 * <p>This function is called by the library just once: when the servlet is initialized.</p>
-	 * 
+	 *
 	 * @param config	Configuration of the servlet.
-	 * 
+	 *
 	 * @throws ServletException	If any error occurs while reading the given configuration.
-	 * 
+	 *
 	 * @see TAPResource#init(ServletConfig)
 	 */
 	public void init(final ServletConfig config) throws ServletException{
@@ -186,9 +190,9 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Free all the resources used by this resource and the other managed resources.</p>
-	 * 
+	 *
 	 * <p>This function is called by the library just once: when the servlet is destroyed.</p>
-	 * 
+	 *
 	 * @see TAPResource#destroy()
 	 */
 	public void destroy(){
@@ -208,16 +212,16 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Set the base URL of this TAP service.</p>
-	 * 
+	 *
 	 * <p>
 	 * 	This URL must be the same as the one of this resource ; it corresponds to the
 	 * 	URL of the root (or home) of the TAP service.
 	 * </p>
-	 * 
+	 *
 	 * <p>The given URL will be propagated to the other TAP resources automatically.</p>
-	 * 
+	 *
 	 * @param baseURL	URL of this resource.
-	 * 
+	 *
 	 * @see TAPResource#setTAPBaseURL(String)
 	 */
 	public void setTAPBaseURL(final String baseURL){
@@ -228,11 +232,11 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Build the base URL from the given HTTP request, and use it to set the base URL of this TAP service.</p>
-	 * 
+	 *
 	 * <p>The given URL will be propagated to the other TAP resources automatically.</p>
-	 * 
+	 *
 	 * @param request	HTTP request from which a TAP service's base URL will be extracted.
-	 * 
+	 *
 	 * @see #setTAPBaseURL(String)
 	 */
 	public void setTAPBaseURL(final HttpServletRequest request){
@@ -245,9 +249,9 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the description of this service.
-	 * 
+	 *
 	 * @return	Description/Configuration of this TAP service.
-	 * 
+	 *
 	 * @since 2.0
 	 */
 	public final ServiceConnection getServiceConnection(){
@@ -256,7 +260,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the /availability resource of this TAP service.
-	 * 
+	 *
 	 * @return	The /availability resource.
 	 */
 	public final Availability getAvailability(){
@@ -265,7 +269,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the /capabilities resource of this TAP service.
-	 * 
+	 *
 	 * @return	The /capabilities resource.
 	 */
 	public final Capabilities getCapabilities(){
@@ -274,7 +278,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the /sync resource of this TAP service.
-	 * 
+	 *
 	 * @return	The /sync resource.
 	 */
 	public final Sync getSync(){
@@ -283,7 +287,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the /async resource of this TAP service.
-	 * 
+	 *
 	 * @return	The /async resource.
 	 */
 	public final ASync getASync(){
@@ -292,7 +296,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the UWS service used for the /async service.
-	 * 
+	 *
 	 * @return	The used UWS service.
 	 */
 	public final UWSService getUWS(){
@@ -306,9 +310,9 @@ public class TAP implements VOSIResource {
 	/**
 	 * <p>Get the object managing all the metadata (information about the published columns and tables)
 	 * of this TAP service.</p>
-	 * 
+	 *
 	 * <p>This object is also to the /tables resource.</p>
-	 * 
+	 *
 	 * @return	List of all metadata of this TAP service.
 	 */
 	public final TAPMetadata getTAPMetadata(){
@@ -317,24 +321,24 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Add the given resource in this TAP service.</p>
-	 * 
+	 *
 	 * <p>The ID of this resource (which is also its URI) will be its name (given by {@link TAPResource#getName()}).</p>
-	 * 
+	 *
 	 * <p><b>WARNING:
 	 * 	If another resource with an ID strictly identical (case sensitively) to the name of the given resource, it will be overwritten!
 	 * 	You should check (thanks to {@link #hasResource(String)}) before calling this function that no resource is associated with the same URI.
 	 * 	If it is the case, you should then use the function {@link #addResource(String, TAPResource)} with a different ID/URI.
 	 * </b></p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	This function is equivalent to {@link #addResource(String, TAPResource)} with {@link TAPResource#getName()} in first parameter.
 	 * </i></p>
-	 * 
+	 *
 	 * @param newResource	Resource to add in the service.
-	 * 
+	 *
 	 * @return	<i>true</i> if the given resource has been successfully added,
 	 *        	<i>false</i> otherwise (and particularly if the given resource is NULL).
-	 * 
+	 *
 	 * @see #addResource(String, TAPResource)
 	 */
 	public final boolean addResource(final TAPResource newResource){
@@ -343,20 +347,20 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Add the given resource in this TAP service with the given ID (which will be also the URI to access this resource).</p>
-	 * 
+	 *
 	 * <p><b>WARNING:
 	 * 	If another resource with an ID strictly identical (case sensitively) to the name of the given resource, it will be overwritten!
 	 * 	You should check (thanks to {@link #hasResource(String)}) before calling this function that no resource is associated with the same URI.
 	 * 	If it is the case, you should then use the function {@link #addResource(String, TAPResource)} with a different ID/URI.
 	 * </b></p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	If the given ID is NULL, the name of the resource will be used.
 	 * </i></p>
-	 * 
+	 *
 	 * @param resourceId	ID/URI of the resource to add.
 	 * @param newResource	Resource to add.
-	 * 
+	 *
 	 * @return	<i>true</i> if the given resource has been successfully added to this service with the given ID/URI,
 	 *        	<i>false</I> otherwise (and particularly if the given resource is NULL).
 	 */
@@ -369,7 +373,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the number of all resources managed by this TAP service (this resource - HOME - excluded).
-	 * 
+	 *
 	 * @return	Number of managed resources.
 	 */
 	public final int getNbResources(){
@@ -378,13 +382,13 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Get the specified resource.</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	The research is case sensitive.
 	 * </i></p>
-	 * 
+	 *
 	 * @param resourceId	Exact ID/URI of the resource to get.
-	 * 
+	 *
 	 * @return	The corresponding resource,
 	 *        	or NULL if no match can be found.
 	 */
@@ -394,7 +398,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Let iterate over the full list of the TAP resources managed by this TAP service.
-	 * 
+	 *
 	 * @return	Iterator over the available TAP resources.
 	 */
 	public final Iterator<TAPResource> getResources(){
@@ -403,7 +407,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Let iterate over the full list of the TAP resources managed by this TAP service.
-	 * 
+	 *
 	 * @return	Iterator over the available TAP resources.
 	 * @deprecated	The name of this function has been normalized. So now, you should use {@link #getResources()}
 	 *            	which is doing exactly the same thing.
@@ -415,13 +419,13 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Tell whether a resource is already associated with the given ID/URI.</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	The research is case sensitive.
 	 * </i></p>
-	 * 
+	 *
 	 * @param resourceId	Exact ID/URI of the resource to find.
-	 * 
+	 *
 	 * @return	<i>true</i> if a resource is already associated with the given ID/URI,
 	 *        	<i>false</i> otherwise.
 	 */
@@ -431,13 +435,13 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Remove the resource associated with the given ID/URI.</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	The research is case sensitive.
 	 * </i></p>
-	 * 
+	 *
 	 * @param resourceId	Exact ID/URI of the resource to remove.
-	 * 
+	 *
 	 * @return	The removed resource, if associated with the given ID/URI,
 	 *        	otherwise, NULL is returned.
 	 */
@@ -451,7 +455,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the object to use in order to report errors to the user in replacement of the expected result.
-	 * 
+	 *
 	 * @return	Used error writer.
 	 */
 	public final ServiceErrorWriter getErrorWriter(){
@@ -460,7 +464,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Set the object to use in order to report errors to the user in replacement of the expected result.
-	 * 
+	 *
 	 * @param errorWriter	Error writer to use. (if NULL, nothing will be done)
 	 */
 	public final void setErrorWriter(final ServiceErrorWriter errorWriter){
@@ -631,27 +635,27 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * List and declare all IVOA Data Models supported by this TAP service.
-	 * 
+	 *
 	 * <p>Currently, only the following DMs are natively supported:</p>
 	 * <ul>
 	 * 	<li>Obscore (1.0 and PR-1.1)</li>
 	 * 	<li>RegTAP (1.0)</li>
 	 * </ul>
-	 * 
+	 *
 	 * <p>
 	 * 	More can be supported by extending this function
 	 * 	(but not overwriting it completely otherwise the above
 	 * 	supported DMs won't be anymore).
 	 * </p>
-	 * 
+	 *
 	 * <p>A DM declaration should follow this XML syntax:</p>
 	 * <pre>&lt;dataModel ivo-id="{DM-IVO_ID}"&gt;{DM-NAME}&lt;/dataModel&gt;</pre>
-	 * 
+	 *
 	 * @param xml			The <code>/capabilities</code> in-progress content in which
 	 *           			implemented DMs can be declared.
 	 * @param linePrefix	Tabulations/Spaces that should prefix all lines
 	 *                  	(for human readability).
-	 * 
+	 *
 	 * @since 2.1
 	 */
 	protected void appendDataModels(final StringBuffer xml, final String linePrefix){
@@ -664,14 +668,14 @@ public class TAP implements VOSIResource {
 	/**
 	 * <p>Append the ObsCore DM declaration in the given {@link StringBuffer}
 	 * if an <code>ivoa.Obscore</code> table can be found in <code>TAP_SCHEMA</code>.</p>
-	 * 
+	 *
 	 * <p>
 	 * 	This function has no effect if <code>ivoa.Obscore</code> can not
 	 * 	be found. The <code>ivoa</code> schema is searched case sensitively,
 	 * 	but not the table name <code>Obscore</code> which can be written
 	 * 	in any possible case.
 	 * </p>
-	 * 
+	 *
 	 * <p>
 	 * 	If an <code>ivoa.Obscore</code> table is found, this function
 	 * 	detects automatically which version of Obscore is implemented.
@@ -680,14 +684,14 @@ public class TAP implements VOSIResource {
 	 * 	<code>t_xel</code>, <code>em_xel</code> and <code>pol_xel</code>.
 	 * 	If not, the Obscore table will be declared as Obscore 1.0.
 	 * </p>
-	 * 
+	 *
 	 * @param xml			The <code>/capabilities</code> in-progress content
 	 *           			in which Obscore-DM should be declared if found.
 	 * @param linePrefix	Tabulations/Spaces that should prefix all lines
 	 *                  	(for human readability).
-	 * 
+	 *
 	 * @see TAPMetadata#getObsCoreTable()
-	 * 
+	 *
 	 * @since 2.1
 	 */
 	protected void appendObsCoreDM(final StringBuffer xml, final String linePrefix){
@@ -723,26 +727,26 @@ public class TAP implements VOSIResource {
 	 * <p>Append the RegTAP DM declaration in the given {@link StringBuffer}
 	 * if a schema <code>rr</code> can be found in <code>TAP_SCHEMA</code>
 	 * with all its required tables.</p>
-	 * 
+	 *
 	 * <p>
 	 * 	This function has no effect if the schema <code>rr</code> or its
 	 * 	mandatory children tables can not be found. The research is done
 	 * 	case sensitively by {@link TAPMetadata#getRegTAPSchema()}.
 	 * </p>
-	 * 
+	 *
 	 * <p>
 	 * 	If there is a valid schema <code>rr</code>, this function
 	 * 	detects automatically which version of RegTAP is implemented. For the
 	 * 	moment only one is supported: RegTAP-1.0.
 	 * </p>
-	 * 
+	 *
 	 * @param xml			The <code>/capabilities</code> in-progress content
 	 *           			in which RegTAP-DM should be declared if found.
 	 * @param linePrefix	Tabulations/Spaces that should prefix all lines
 	 *                  	(for human readability).
-	 * 
+	 *
 	 * @see TAPMetadata#getRegTAPTable()
-	 * 
+	 *
 	 * @since 2.1
 	 */
 	protected void appendRegTAPDM(final StringBuffer xml, final String linePrefix){
@@ -760,9 +764,9 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * Get the HOME PAGE resource of this TAP service.
-	 * 
+	 *
 	 * @return	The HOME PAGE resource.
-	 * 
+	 *
 	 * @since 2.0
 	 */
 	public final HomePage getHomePage(){
@@ -771,13 +775,13 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Change the whole behavior of the TAP home page.</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	If the given resource is NULL, the default home page (i.e. {@link HomePage}) is set.
 	 * </i></p>
-	 * 
+	 *
 	 * @param newHomePageResource	The new HOME PAGE resource for this TAP service.
-	 * 
+	 *
 	 * @since 2.0
 	 */
 	public final void setHomePage(final HomePage newHomePageResource){
@@ -790,14 +794,14 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Get the URL or the file path of a custom home page.</p>
-	 * 
+	 *
 	 * <p>The home page will be displayed when this resource is directly requested.</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	This function has a sense only if the HOME PAGE resource of this TAP service
 	 * 	is still the default home page (i.e. {@link HomePage}).
 	 * </i></p>
-	 * 
+	 *
 	 * @return	URL or file path of the file to display as home page,
 	 *        	or NULL if no custom home page has been specified.
 	 */
@@ -807,14 +811,14 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Set the URL or the file path of a custom home page.</p>
-	 * 
+	 *
 	 * <p>The home page will be displayed when this resource is directly requested.</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	This function has a sense only if the HOME PAGE resource of this TAP service
 	 * 	is still the default home page (i.e. {@link HomePage}).
 	 * </i></p>
-	 * 
+	 *
 	 * @param uri	URL or file path of the file to display as home page, or NULL to display the default home page.
 	 */
 	public final void setHomePageURI(final String uri){
@@ -825,14 +829,14 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Get the MIME type of the custom home page.</p>
-	 * 
+	 *
 	 * <p>By default, it is the same as the default home page: "text/html".</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	This function has a sense only if the HOME PAGE resource of this TAP service
 	 * 	is still the default home page (i.e. {@link HomePage}).
 	 * </i></p>
-	 * 
+	 *
 	 * @return	MIME type of the custom home page.
 	 */
 	public final String getHomePageMimeType(){
@@ -841,14 +845,14 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Set the MIME type of the custom home page.</p>
-	 * 
+	 *
 	 * <p>A NULL value will be considered as "text/html".</p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	This function has a sense only if the HOME PAGE resource of this TAP service
 	 * 	is still the default home page (i.e. {@link HomePage}).
 	 * </i></p>
-	 * 
+	 *
 	 * @param mime	MIME type of the custom home page.
 	 */
 	public final void setHomePageMimeType(final String mime){
@@ -857,13 +861,13 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Generate a unique ID for the given request.</p>
-	 * 
+	 *
 	 * <p>By default, a timestamp is returned.</p>
-	 * 
+	 *
 	 * @param request	Request whose an ID is asked.
-	 * 
+	 *
 	 * @return	The ID of the given request.
-	 * 
+	 *
 	 * @since 2.0
 	 */
 	protected synchronized String generateRequestID(final HttpServletRequest request){
@@ -878,7 +882,7 @@ public class TAP implements VOSIResource {
 
 	/**
 	 * <p>Execute the given request in the TAP service by forwarding it to the appropriate resource.</p>
-	 * 
+	 *
 	 * <h3>Home page</h3>
 	 * <p>
 	 * 	If the appropriate resource is the home page, the request is propagated to a {@link TAPResource}
@@ -888,24 +892,24 @@ public class TAP implements VOSIResource {
 	 * 	Those are well documented in the Javadoc of {@link HomePage}. What you should know, is that sometimes it is
 	 * 	using the following attributes of this class: {@link #getHomePage()}, {@link #getHomePageURI()}, {@link #getHomePageMimeType()}.
 	 * </p>
-	 * 
+	 *
 	 * <h3>Error/Exception management</h3>
 	 * <p>
 	 * 	Only this resource (the root) should write any errors in the response. For that, it catches any {@link Throwable} and
 	 * 	write an appropriate message in the HTTP response. The format and the content of this message is designed by the {@link ServiceErrorWriter}
 	 * 	set in this class. By changing it, it is then possible to change, for instance, the format of the error responses.
 	 * </p>
-	 * 
+	 *
 	 * <h3>Request ID &amp; Log</h3>
 	 * <p>
 	 * 	Each request is identified by a unique identifier (see {@link #generateRequestID(HttpServletRequest)}).
 	 * 	This ID is used only for logging purpose. Request and jobs/threads can then be associated more easily in the logs.
 	 * 	Besides, every requests and their response are logged as INFO with this ID.
 	 * </p>
-	 * 
+	 *
 	 * @param request	Request of the user to execute in this TAP service.
 	 * @param response	Object in which the result of the request must be written.
-	 * 
+	 *
 	 * @throws ServletException	If any grave/fatal error occurs.
 	 * @throws IOException		If any error occurs while reading or writing from or into a stream (and particularly the given request or response).
 	 */
diff --git a/src/uws/service/UWS.java b/src/uws/service/UWS.java
index a8d8bab6daafb61d5b7dde3795bc5bd7c7188985..08ce2c7a55d2e458568832b3e0c79a86b187656e 100644
--- a/src/uws/service/UWS.java
+++ b/src/uws/service/UWS.java
@@ -2,20 +2,20 @@ package uws.service;
 
 /*
  * This file is part of UWSLibrary.
- * 
+ *
  * UWSLibrary is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
- * 
+ *
  * UWSLibrary is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public License
  * along with UWSLibrary.  If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  * Copyright 2012-2017 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
  *                       Astronomisches Rechen Institut (ARI)
  */
@@ -34,12 +34,12 @@ import uws.service.request.UWSRequestParser;
  * 	Minimal API of a UWS service.
  * 	Basically, an instance of this interface is supposed to manage one or several jobs lists.
  * </p>
- * 
+ *
  * <p><i><u>note:</u>
  * 	All the functions of this interface are required by {@link JobList}, {@link uws.job.UWSJob}
  * 	and all the other classes available in this library.
  * </i></p>
- * 
+ *
  * <p>Two default implementations of this interface are provided in this library:</p>
  * <ul>
  * 	<li>{@link UWSService}: this class represents an object which is able to receive, to interpret
@@ -51,23 +51,27 @@ import uws.service.request.UWSRequestParser;
  * 		Indeed, for each HTTP method, a servlet has one function (i.e. doGet(...), doPost(...)). So, for each UWS action, a {@link UWSServlet}
  * 		has one function: doAddJob(...), doDestroyJob(...), doGetJob(...), ...</li>
  * </ul>
- * 
+ *
  * <p>
  * 	These two classes already implement all standard actions and behaviors of UWS 1.0. Nothing really change between them except the
  * 	way they lets creating and managing a UWS. The second implementation is the most simple to use because it gathers
  * 	the UWS and the servlet.
  * </p>
- * 
+ *
  * <p><b>IMPORTANT:
  * 	All implementations of this interface should implement properly the function {@link #destroy()} and should call it
  * 	when the JVM or the HTTP server application is closing.
  * </b></p>
- * 
+ *
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 4.2 (06/2017)
+ * @version 4.2 (09/2017)
  */
 public interface UWS extends Iterable<JobList> {
 
+	/** Version of the UWS protocol used in this library.
+	 * @since 4.2 */
+	public final static String VERSION = "1.0";
+
 	/** Attribute of the HttpServletRequest to set and to get in order to access the request ID set by the UWS library.
 	 * @since 4.1 */
 	public static final String REQ_ATTRIBUTE_ID = "UWS_REQUEST_ID";
@@ -87,14 +91,14 @@ public interface UWS extends Iterable<JobList> {
 
 	/**
 	 * Gets the name of this UWS.
-	 * 
+	 *
 	 * @return	Its name (MAY BE NULL).
 	 */
 	public String getName();
 
 	/**
 	 * Gets the description of this UWS.
-	 * 
+	 *
 	 * @return	Its description (MAY BE NULL).
 	 */
 	public String getDescription();
@@ -109,14 +113,14 @@ public interface UWS extends Iterable<JobList> {
 	 * 	open files and database connections should be closed, etc...
 	 * 	In brief, this function should release all used resources.
 	 * </p>
-	 * 
+	 *
 	 * <p><b>IMPORTANT: This function should be called only when the JVM or the Web Application Server is stopping.</b></p>
-	 * 
+	 *
 	 * <p><i>Note:
 	 * 	A call to this function may prevent this instance of {@link UWS} to execute any subsequent HTTP request, or the behavior
 	 * 	would be unpredictable.
 	 * </i></p>
-	 * 
+	 *
 	 * @since 4.1
 	 */
 	public void destroy();
@@ -127,9 +131,9 @@ public interface UWS extends Iterable<JobList> {
 
 	/**
 	 * Adds a jobs list to this UWS.
-	 * 
+	 *
 	 * @param newJL	The jobs list to add.
-	 * 
+	 *
 	 * @return		<i>true</i> if the jobs list has been successfully added,
 	 * 				<i>false</i> if the given jobs list is <i>null</i> or if a jobs list with this name already exists
 	 * 				or if a UWS is already associated with another UWS.
@@ -138,17 +142,17 @@ public interface UWS extends Iterable<JobList> {
 
 	/**
 	 * Gets the jobs list whose the name matches exactly the given one.
-	 * 
+	 *
 	 * @param name	Name of the jobs list to get.
 	 * @return		The corresponding jobs list.
-	 * 
+	 *
 	 * @throws UWSException		If the given name is <i>null</i> or empty, or if no jobs list matches.
 	 */
 	public JobList getJobList(final String name) throws UWSException;
 
 	/**
 	 * Gets the number of managed jobs lists.
-	 * 
+	 *
 	 * @return	The number of jobs lists.
 	 */
 	public int getNbJobList();
@@ -156,9 +160,9 @@ public interface UWS extends Iterable<JobList> {
 	/**
 	 * <p>Destroys the specified jobs list.</p>
 	 * <p><i><u>note:</u> After the call of this function, the UWS reference of the given jobs list should be removed (see {@link JobList#setUWS(UWS)}).</i></p>
-	 * 
+	 *
 	 * @param name	Name of the jobs list to destroy.
-	 * 
+	 *
 	 * @return	<i>true</i> if the given jobs list has been destroyed, <i>false</i> otherwise.
 	 */
 	public boolean destroyJobList(final String name) throws UWSException;
@@ -170,13 +174,13 @@ public interface UWS extends Iterable<JobList> {
 	/**
 	 * <p>Gets the serializer whose the MIME type is the same as the given one.</p>
 	 * <p><i><u>Note:</u> If this UWS has no corresponding serializer, a default one should be returned !</i></p>
-	 * 
+	 *
 	 * @param mimeTypes		The MIME type of the searched serializer (may be more than one MIME types
 	 * 						- comma separated ; see the format of the Accept header of a HTTP-Request).
 	 * @return				The corresponding serializer
 	 * 						or the default serializer of this UWS if no corresponding serializer has been found.
 	 * @throws UWSException	If there is no corresponding serializer AND if the default serializer of this UWS can not be found.
-	 * 
+	 *
 	 * @see uws.AcceptHeader#AcceptHeader(String)
 	 * @see uws.AcceptHeader#getOrderedMimeTypes()
 	 */
@@ -189,9 +193,9 @@ public interface UWS extends Iterable<JobList> {
 	/**
 	 * <p>Gets the object which is able to interpret and to build any UWS URL.
 	 * It MUST be loaded with the root URL of this UWS: see {@link UWSUrl#load(javax.servlet.http.HttpServletRequest)} and {@link UWSUrl#load(java.net.URL)}.</p>
-	 * 
+	 *
 	 * <p><i><u>note:</u> This getter is particularly used to serialize the jobs lists and their jobs.</i></p>
-	 * 
+	 *
 	 * @return	Its UWS URL interpreter (SHOULD BE NOT NULL).
 	 */
 	public UWSUrl getUrlInterpreter();
@@ -205,7 +209,7 @@ public interface UWS extends Iterable<JobList> {
 	 * <p><i><u>note:</u>A UWS logger is used to watch the HTTP requests received by the UWS and their responses.
 	 * The activity of the UWS is also logged and particularly the life of the different jobs and their threads.
 	 * A default implementation is available: {@link uws.service.log.DefaultUWSLog}.</i></p>
-	 * 
+	 *
 	 * @return	Its logger <u><b>(MUST BE NOT NULL)</b></u>.
 	 */
 	public UWSLog getLogger();
@@ -216,7 +220,7 @@ public interface UWS extends Iterable<JobList> {
 
 	/**
 	 * Gets the object which is able to identify a user from an HTTP request.
-	 * 
+	 *
 	 * @return	Its user identifier.
 	 */
 	public UserIdentifier getUserIdentifier();
@@ -230,7 +234,7 @@ public interface UWS extends Iterable<JobList> {
 	 * <p><i><u>note:</u> This objects is the only one to know how to extract job parameters from an HTTP request,
 	 * how to create a job and how to create its respective thread. A partial implementation which answers to
 	 * the 2 first questions is available: {@link AbstractUWSFactory}</i></p>
-	 * 
+	 *
 	 * @return Its job factory.
 	 */
 	public UWSFactory getFactory();
@@ -244,9 +248,9 @@ public interface UWS extends Iterable<JobList> {
 	 * <p><i><u>note:</u> This parser is the only one to be able to extract UWS and TAP parameters from any HTTP request.
 	 * Its behavior is adapted in function of the used HTTP method and of the content-type. A default implementation is
 	 * provided by the UWS library: {@link UWSRequestParser}.</i></p>
-	 * 
+	 *
 	 * @return	Its request parser.
-	 * 
+	 *
 	 * @since 4.1
 	 */
 	public RequestParser getRequestParser();
@@ -259,7 +263,7 @@ public interface UWS extends Iterable<JobList> {
 	 * <p>Gets its file manager.</p>
 	 * <p><i><u>note:</u> A file manager tells to a UWS how to create, read and write the different managed files
 	 * (i.e. log, result, errors, backup). A default implementation is available: {@link uws.service.file.LocalUWSFileManager}.</i></p>
-	 * 
+	 *
 	 * @return Its file manager.
 	 */
 	public UWSFileManager getFileManager();
@@ -272,7 +276,7 @@ public interface UWS extends Iterable<JobList> {
 	 * <p>Gets its backup manager.</p>
 	 * <p><i><u>note:</u> This object should be used at the initialization of the UWS to restore a previous "session" (see {@link UWSBackupManager#restoreAll()})
 	 * and must be used each time the list of jobs of a user (see {@link UWSBackupManager#saveOwner(uws.job.user.JobOwner)}) or all the jobs of this UWS must be saved (see {@link UWSBackupManager#saveAll()}).</i></p>
-	 * 
+	 *
 	 * @return Its backup manager.
 	 */
 	public UWSBackupManager getBackupManager();