diff --git a/src/tap/ServiceConnection.java b/src/tap/ServiceConnection.java
index 40e3745205e86a5a6dcea1cdd9fa647eb5459935..1017e8d965463958574da26041cb29970815c0da 100644
--- a/src/tap/ServiceConnection.java
+++ b/src/tap/ServiceConnection.java
@@ -16,26 +16,31 @@ package tap;
  * 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 - UDS/Centre de Données astronomiques de Strasbourg (CDS)
+ * Copyright 2012-2013 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
+ *                       Astronomisches Rechen Institute (ARI)
  */
 
 import java.util.Collection;
 import java.util.Iterator;
 
 import tap.file.TAPFileManager;
-
 import tap.formatter.OutputFormat;
-
 import tap.log.TAPLog;
-
 import tap.metadata.TAPMetadata;
-
 import uws.service.UserIdentifier;
 
+/**
+ * 
+ * 
+ * @author Gr&eacute;gory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de
+ * @version 1.1 (12/2013)
+ * 
+ * @param <R>
+ */
 public interface ServiceConnection< R > {
 
 	public static enum LimitUnit{
-		rows, bytes;
+		rows, bytes, kilobytes, megabytes, gigabytes;
 	}
 
 	public String getProviderName();
diff --git a/src/tap/resource/TAP.java b/src/tap/resource/TAP.java
index 3ad3a555d13bc52bf1060a4839bab34d5ce32998..0700298414608dd331c03ec4eec6e24f87088be6 100644
--- a/src/tap/resource/TAP.java
+++ b/src/tap/resource/TAP.java
@@ -55,6 +55,12 @@ import uws.service.UWSService;
 import uws.service.UWSUrl;
 import uws.service.error.ServiceErrorWriter;
 
+/**
+ * @author Gr&eacute;gory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de
+ * @version 1.1 (12/2013)
+ * 
+ * @param <R>
+ */
 public class TAP< R > implements VOSIResource {
 
 	private static final long serialVersionUID = 1L;
@@ -243,10 +249,50 @@ public class TAP< R > implements VOSIResource {
 			if (uploadLimit != null && uploadLimit.length >= 2 && uploadLimitType != null && uploadLimitType.length >= 2){
 				if (uploadLimit[0] > -1 || uploadLimit[1] > -1){
 					xml.append("\t<uploadLimit>\n");
-					if (uploadLimit[0] > -1)
-						xml.append("\t\t<default unit=\"").append(uploadLimitType[0]).append("\">").append(uploadLimit[0]).append("</default>\n");
-					if (uploadLimit[1] > -1)
-						xml.append("\t\t<hard unit=\"").append(uploadLimitType[1]).append("\">").append(uploadLimit[1]).append("</hard>\n");
+					if (uploadLimit[0] > -1){
+						String limitType;
+						long limit = uploadLimit[0];
+						switch(uploadLimitType[0]){
+							case kilobytes:
+								limit *= 1000l;
+								limitType = LimitUnit.rows.toString();
+								break;
+							case megabytes:
+								limit *= 1000000l;
+								limitType = LimitUnit.rows.toString();
+								break;
+							case gigabytes:
+								limit *= 1000000000l;
+								limitType = LimitUnit.rows.toString();
+								break;
+							default:
+								limitType = uploadLimitType[0].toString();
+								break;
+						}
+						xml.append("\t\t<default unit=\"").append(limitType).append("\">").append(limit).append("</default>\n");
+					}
+					if (uploadLimit[1] > -1){
+						String limitType;
+						long limit = uploadLimit[1];
+						switch(uploadLimitType[1]){
+							case kilobytes:
+								limit *= 1000l;
+								limitType = LimitUnit.rows.toString();
+								break;
+							case megabytes:
+								limit *= 1000000l;
+								limitType = LimitUnit.rows.toString();
+								break;
+							case gigabytes:
+								limit *= 1000000000l;
+								limitType = LimitUnit.rows.toString();
+								break;
+							default:
+								limitType = uploadLimitType[1].toString();
+								break;
+						}
+						xml.append("\t\t<hard unit=\"").append(limitType).append("\">").append(limit).append("</hard>\n");
+					}
 					xml.append("\t</uploadLimit>\n");
 				}
 			}
diff --git a/src/tap/upload/Uploader.java b/src/tap/upload/Uploader.java
index 651a198c2b8a5b8c518766a47eb3fdccda73a809..28c22e811af7edf035505fe94177b55fbceb3a3b 100644
--- a/src/tap/upload/Uploader.java
+++ b/src/tap/upload/Uploader.java
@@ -55,7 +55,7 @@ public class Uploader {
 	protected final ServiceConnection<?> service;
 	protected final DBConnection<?> dbConn;
 	protected final int nbRowsLimit;
-	protected final int nbBytesLimit;
+	protected final long nbBytesLimit;
 
 	protected int nbRows = 0;
 
@@ -66,7 +66,6 @@ public class Uploader {
 			throw new NullPointerException("The given DBConnection is NULL !");
 
 		this.service = service;
-
 		this.dbConn = dbConn;
 
 		if (service.uploadEnabled()){
@@ -74,7 +73,23 @@ public class Uploader {
 				nbRowsLimit = ((service.getUploadLimit()[1] > 0) ? service.getUploadLimit()[1] : -1);
 				nbBytesLimit = -1;
 			}else{
-				nbBytesLimit = ((service.getUploadLimit()[1] > 0) ? service.getUploadLimit()[1] : -1);
+				long limit = ((service.getUploadLimit()[1] > 0) ? service.getUploadLimit()[1] : -1);
+				if (limit > 0){
+					switch(service.getUploadLimitType()[1]){
+						case kilobytes:
+							limit *= 1000l;
+							break;
+						case megabytes:
+							limit *= 1000000l;
+							break;
+						case gigabytes:
+							limit *= 1000000000l;
+							break;
+						default:
+							break;
+					}
+				}
+				nbBytesLimit = limit;
 				nbRowsLimit = -1;
 			}
 		}else