diff --git a/src/tap/resource/TAP.java b/src/tap/resource/TAP.java
index 44dbff51ef86a5cf18f950a340ddee11abd70a9c..3ff1789009a082557d3c2eaf0cf19fa635766bed 100644
--- a/src/tap/resource/TAP.java
+++ b/src/tap/resource/TAP.java
@@ -46,6 +46,7 @@ import tap.metadata.TAPMetadata;
 import uk.ac.starlink.votable.VOSerializer;
 import uws.UWSException;
 import uws.job.user.JobOwner;
+import uws.service.UWS;
 import uws.service.UWSService;
 import uws.service.UWSUrl;
 import uws.service.error.ServiceErrorWriter;
@@ -656,6 +657,8 @@ public class TAP implements VOSIResource {
 
 		// Generate a unique ID for this request execution (for log purpose only):
 		final String reqID = generateRequestID(request);
+		if (request.getAttribute(UWS.REQ_ATTRIBUTE_ID) == null)
+			request.setAttribute(UWS.REQ_ATTRIBUTE_ID, reqID);
 
 		// Retrieve the resource path parts:
 		String[] resourcePath = (request.getPathInfo() == null) ? null : request.getPathInfo().split("/");
@@ -675,6 +678,10 @@ public class TAP implements VOSIResource {
 
 		JobOwner owner = null;
 		try{
+			// Extract all parameters:
+			if (request.getAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS) == null)
+				request.setAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS, getUWS().getRequestParser().parse(request));
+
 			// Identify the user:
 			try{
 				if (service.getUserIdentifier() != null)
diff --git a/src/uws/service/UWS.java b/src/uws/service/UWS.java
index 257960fc785888e1800f14885b4a24c69724209d..ebd0689add0a0a40e423e4c89c892d80039ae1f1 100644
--- a/src/uws/service/UWS.java
+++ b/src/uws/service/UWS.java
@@ -26,6 +26,8 @@ import uws.job.serializer.UWSSerializer;
 import uws.service.backup.UWSBackupManager;
 import uws.service.file.UWSFileManager;
 import uws.service.log.UWSLog;
+import uws.service.request.RequestParser;
+import uws.service.request.UWSRequestParser;
 
 /**
  * <p>
@@ -197,6 +199,22 @@ public interface UWS extends Iterable<JobList> {
 	 */
 	public UWSFactory getFactory();
 
+	/* ******************** */
+	/* HTTP REQUEST PARSING */
+	/* ******************** */
+
+	/**
+	 * <p>Get its HTTP request parser.</p>
+	 * <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();
+
 	/* *************** */
 	/* FILE MANAGEMENT */
 	/* *************** */
diff --git a/src/uws/service/UWSService.java b/src/uws/service/UWSService.java
index 8232173ff85099bbf89e1d7682f9722b4b7a6bf9..b09dddbecee5c6d5c0659733b2c14a39330986a1 100644
--- a/src/uws/service/UWSService.java
+++ b/src/uws/service/UWSService.java
@@ -184,7 +184,7 @@ import uws.service.request.RequestParser;
  * 
  * 
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 4.1 (09/2014)
+ * @version 4.1 (12/2014)
  */
 public class UWSService implements UWS {
 
@@ -550,6 +550,11 @@ public class UWSService implements UWS {
 		this.backupManager = backupManager;
 	}
 
+	@Override
+	public final RequestParser getRequestParser(){
+		return requestParser;
+	}
+
 	/* ******************** */
 	/* HOME PAGE MANAGEMENT */
 	/* ******************** */
@@ -1058,7 +1063,8 @@ public class UWSService implements UWS {
 
 		// Generate a unique ID for this request execution (for log purpose only):
 		final String reqID = generateRequestID(request);
-		request.setAttribute(UWS.REQ_ATTRIBUTE_ID, reqID);
+		if (request.getAttribute(UWS.REQ_ATTRIBUTE_ID) == null)
+			request.setAttribute(UWS.REQ_ATTRIBUTE_ID, reqID);
 
 		// Log the reception of the request:
 		logger.logHttp(LogLevel.INFO, request, reqID, null, null);
@@ -1081,7 +1087,8 @@ public class UWSService implements UWS {
 			urlInterpreter.load(request);
 
 			// Extract all parameters:
-			request.setAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS, requestParser.parse(request));
+			if (request.getAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS) == null)
+				request.setAttribute(UWS.REQ_ATTRIBUTE_PARAMETERS, requestParser.parse(request));
 
 			// Identify the user:
 			user = (userIdentifier == null) ? null : userIdentifier.extractUserId(urlInterpreter, request);
diff --git a/src/uws/service/UWSServlet.java b/src/uws/service/UWSServlet.java
index 8dab40a1e799b90b0b32553cc073b43de3fd1a27..2eed06289dd385cf91b55f0fb61a65e69b9b375f 100644
--- a/src/uws/service/UWSServlet.java
+++ b/src/uws/service/UWSServlet.java
@@ -132,7 +132,7 @@ import uws.service.request.UploadFile;
  * </p>
  * 
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 4.1 (11/2014)
+ * @version 4.1 (12/2014)
  */
 public abstract class UWSServlet extends HttpServlet implements UWS, UWSFactory {
 	private static final long serialVersionUID = 1L;
@@ -257,6 +257,11 @@ public abstract class UWSServlet extends HttpServlet implements UWS, UWSFactory
 		return fileManager;
 	}
 
+	@Override
+	public RequestParser getRequestParser(){
+		return requestParser;
+	}
+
 	@Override
 	public final void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException{
 		super.service(req, resp);