diff --git a/src/cds/util/AsciiTable.java b/src/cds/util/AsciiTable.java
index 9f3c495704a093d1a2325de70f10c5a44669ead7..b243f44b84907d853a62c68b8016ce9cac294b05 100644
--- a/src/cds/util/AsciiTable.java
+++ b/src/cds/util/AsciiTable.java
@@ -2,34 +2,39 @@ package cds.util;
 
 /*
  * 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 - UDS/Centre de Données astronomiques de Strasbourg (CDS)
+ *
+ * Copyright 2012-2018 - UDS/Centre de Données astronomiques de Strasbourg (CDS)
  */
 
 import java.util.ArrayList;
 
 /**
- * An object of this class manages an ascii table: it receives lines to add,
+ * An object of this class manages an ASCII table: it receives lines to add,
  * made of columns separated by a given separator char. Columns can be aligned
  * (RIGHT, LEFT or CENTER) before display
+ *
  * @author Marc Wenger/CDS
- * @version 1.0 May 2008 Creation<br>
- * @version 1.1 May 2008 Fix a bug: lines are kept without a newline at the end<br>
- * @version 1.2 Jun 2008 Add a toString method (items aligned).<br>
- *                       Fix a bug in align() when the last line is not full
+ * @author Gr&eacute;gory Mantelet/CDS
+ *
+ * @version 1.0 May 2008 MW Creation
+ * @version 1.1 May 2008 MW Fix a bug: lines are kept without a newline at the
+ *                          end
+ * @version 1.2 Jun 2008 MW Add a toString method (items aligned) ;
+ *                          Fix a bug in align() when the last line is not full
+ * @version 1.3 Nov 2018 GM Make the alignment process - align() - interruptible
  */
 public class AsciiTable {
 	public static final int LEFT = 0;
@@ -86,8 +91,8 @@ public class AsciiTable {
 	/**
 	 * Add a line to the table
 	 * @param line string containing the line with all the columns separated by the column separator.
-	 * The line should not end up with a newline char. If it is the case, alignement errors can be experienced
-	 * depending on the alignement type of the last column.
+	 * The line should not end up with a newline char. If it is the case, alignment errors can be experienced
+	 * depending on the alignment type of the last column.
 	 */
 	public void addLine(String line){
 		// compute the number of columns, if we add the first line
@@ -129,7 +134,7 @@ public class AsciiTable {
 	}
 
 	/**
-	 * Get all the lines without alignement, as they were entered
+	 * Get all the lines without alignment, as they were entered
 	 * @return the array of the lines in the table
 	 */
 	public String[] displayRaw(){
@@ -137,7 +142,7 @@ public class AsciiTable {
 	}
 
 	/**
-	 * Get all the lines without alignement, as they were entered, with separator control
+	 * Get all the lines without alignment, as they were entered, with separator control
 	 * @param newsep separator to use, replacing the original one
 	 * @return the array of the lines in the table
 	 */
@@ -156,49 +161,121 @@ public class AsciiTable {
 
 	/**
 	 * Get all the lines in the table, properly aligned.
-	 * @param pos array of flags, indicating how each column should be justified.
-	 * The array must have as many columns as the table has. Each column can contain
-	 * either AsciiTable.LEFT, AsciiTable.CENTER or AsciiTable.RIGHT<br>
-	 * if the array contains ONE item, it will be used for every column.
-	 * @return an array of the table lines, aligned and justified
+	 *
+	 * <p><strong>IMPORTANT:</strong>
+	 * 	The array must have as many columns as the table has. Each column can
+	 * 	contain either {@link AsciiTable#LEFT}, {@link AsciiTable#CENTER} or
+	 * 	{@link AsciiTable#RIGHT}. If the array contains ONE item, it will be
+	 * 	used for every column.
+	 * </p>
+	 *
+	 * @param pos	Array of flags, indicating how each column should be
+	 *           	justified.
+	 *
+	 * @return	An array of the table lines, aligned and justified.
+	 *
+	 * @throws InterruptedException	If the current thread has been interrupted.
+	 *                             	<em>This interruption is useful when this
+	 *                             	alignment operation becomes time and memory
+	 *                             	consuming.</em>
 	 */
-	public String[] displayAligned(int[] pos){
-		return align(pos, '\0');
+	public String[] displayAligned(int[] pos) throws InterruptedException{
+		return align(pos, '\0', null);
 	}
 
 	/**
 	 * Get all the lines in the table, properly aligned.
-	 * @param pos array of flags, indicating how each column should be justified.
-	 * The array must have as many columns as the table has. Each column can contain
-	 * either AsciiTable.LEFT, AsciiTable.CENTER or AsciiTable.RIGHT<br>
-	 * if the array contains ONE item, it will be used for every column.
-	 * @param newsep separator to use, replacing the original one
-	 * @return an array of the table lines, aligned and justified
+	 *
+	 * <p><strong>IMPORTANT:</strong>
+	 * 	The array must have as many columns as the table has. Each column can
+	 * 	contain either {@link AsciiTable#LEFT}, {@link AsciiTable#CENTER} or
+	 * 	{@link AsciiTable#RIGHT}. If the array contains ONE item, it will be
+	 * 	used for every column.
+	 * </p>
+	 *
+	 * @param pos		Array of flags, indicating how each column should be
+	 *           		justified.
+	 * @param newsep	Separator to use, replacing the original one.
+	 *
+	 * @return	An array of the table lines, aligned and justified.
+	 *
+	 * @throws InterruptedException	If the current thread has been interrupted.
+	 *                             	<em>This interruption is useful when this
+	 *                             	alignment operation becomes time and memory
+	 *                             	consuming.</em>
 	 */
-	public String[] displayAligned(int[] pos, char newsep){
+	public String[] displayAligned(int[] pos, char newsep) throws InterruptedException{
+		return displayAligned(pos, newsep, null);
+	}
+
+	/**
+	 * Get all the lines in the table, properly aligned.
+	 *
+	 * <p><strong>IMPORTANT:</strong>
+	 * 	The array must have as many columns as the table has. Each column can
+	 * 	contain either {@link AsciiTable#LEFT}, {@link AsciiTable#CENTER} or
+	 * 	{@link AsciiTable#RIGHT}. If the array contains ONE item, it will be
+	 * 	used for every column.
+	 * </p>
+	 *
+	 * @param pos		Array of flags, indicating how each column should be
+	 *           		justified.
+	 * @param newsep	Separator to use, replacing the original one.
+	 * @param thread	Thread to watch. If it is interrupted, this task should
+	 *              	be as well.
+	 *
+	 * @return	An array of the table lines, aligned and justified.
+	 *
+	 * @throws InterruptedException	If the current thread has been interrupted.
+	 *                             	<em>This interruption is useful when this
+	 *                             	alignment operation becomes time and memory
+	 *                             	consuming.</em>
+	 */
+	public String[] displayAligned(int[] pos, char newsep, final Thread thread) throws InterruptedException{
 		if (newsep == csep)
 			newsep = '\0';
-		return align(pos, newsep);
+		return align(pos, newsep, thread);
 	}
 
 	/**
 	 * Get the array of lines in which all the columns are aligned
-	 * @param pos array of flags, indicating how each column should be justified.
-	 * The array must have as many columns as the table has. Each column can contain
-	 * either AsciiTable.LEFT, AsciiTable.CENTER or AsciiTable.RIGHT<br>
-	 * if the array contains ONE item, it will be used for every column.
-	 * @param newsep separator to use, replacing the original one (no replacement if '\0')
-	 * @return an array of the table lines, aligned and justified
+	 *
+	 * <p><strong>IMPORTANT:</strong>
+	 * 	The array must have as many columns as the table has. Each column can
+	 * 	contain either {@link AsciiTable#LEFT}, {@link AsciiTable#CENTER} or
+	 * 	{@link AsciiTable#RIGHT}. If the array contains ONE item, it will be
+	 * 	used for every column.
+	 * </p>
+	 *
+	 * @param pos		Array of flags, indicating how each column should be
+	 *           		justified.
+	 * @param newsep	Separator to use, replacing the original one.
+	 * @param thread	Thread to watch. If it is interrupted, this task should
+	 *              	be as well.
+	 *
+	 * @return	An array of the table lines, aligned and justified.
+	 *
+	 * @throws InterruptedException	If the current thread has been interrupted.
+	 *                             	<em>This interruption is useful when this
+	 *                             	alignment operation becomes time and memory
+	 *                             	consuming.</em>
 	 */
-	private String[] align(int[] pos, char newsep){
+	private String[] align(int[] pos, char newsep, final Thread thread) throws InterruptedException{
 		int nblines = lines.size();
 		String[] result = new String[nblines];
 		StringBuffer buf = new StringBuffer();
 		int p0, p1, col, fldsize, colsize, n1, inserted;
 		boolean inHeader = header;	// A header can contain several lines. The end is detected by a line
+
 		// beginning by the separator char
 		int uniqueJustif = pos.length == 1 ? pos[0] : -1;
 		for(int i = 0; i < nblines; i++){
+
+			/* stop everything if this thread or the given one has been
+			 * interrupted: */
+			if (Thread.currentThread().isInterrupted() || (thread != null && thread.isInterrupted()))
+				throw new InterruptedException();
+
 			buf.delete(0, buf.length());
 			String line = lines.get(i);
 			p0 = 0;
@@ -277,20 +354,24 @@ public class AsciiTable {
 	}
 
 	/**
-	 * Display the whole table, with left alignement
+	 * Display the whole table, with left alignment
 	 * @return the table as a unique string
 	 */
 	@Override
 	public String toString(){
-		StringBuffer buf = new StringBuffer();
-		String[] ids = displayAligned(new int[]{AsciiTable.LEFT});
+		try{
+			StringBuffer buf = new StringBuffer();
+			String[] ids = displayAligned(new int[]{ AsciiTable.LEFT });
 
-		for(int i = 0; i < ids.length; i++){
-			if (i > 0)
-				buf.append("\n");
-			buf.append(ids[i]);
-		}
+			for(int i = 0; i < ids.length; i++){
+				if (i > 0)
+					buf.append("\n");
+				buf.append(ids[i]);
+			}
 
-		return buf.toString();
+			return buf.toString();
+		}catch(InterruptedException ie){
+			return "!!! Operation unexpectedly interrupted !!!";
+		}
 	}
 }
diff --git a/src/tap/config/TAPConfiguration.java b/src/tap/config/TAPConfiguration.java
index 84e1a84742b2d5c11eeb0b64319946b03f32139a..fa350036313337edf60c54d9c739ae252830d13e 100644
--- a/src/tap/config/TAPConfiguration.java
+++ b/src/tap/config/TAPConfiguration.java
@@ -41,7 +41,7 @@ import tap.backup.DefaultTAPBackupManager;
  * </i></p>
  *
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 2.3 (09/2018)
+ * @version 2.3 (11/2018)
  * @since 2.0
  */
 public final class TAPConfiguration {
@@ -157,21 +157,21 @@ public final class TAPConfiguration {
 	/** Value of the property {@link #KEY_SQL_TRANSLATOR} to select a PgSphere translator. */
 	public final static String VALUE_PGSPHERE = "pgsphere";
 	/** Value of the property {@link #KEY_SQL_TRANSLATOR} to select an SQLServer translator.
-	 * @since 2.1*/
+	 * @since 2.1 */
 	public final static String VALUE_SQLSERVER = "sqlserver";
 	/** Value of the property {@link #KEY_SQL_TRANSLATOR} to select a MySQL translator.
-	 * @since 2.1*/
+	 * @since 2.1 */
 	public final static String VALUE_MYSQL = "mysql";
 	/** Name/Key of the property specifying by how many rows the library should fetch a query result from the database.
 	 * This is the fetch size for to apply for synchronous queries. */
 	public final static String KEY_SYNC_FETCH_SIZE = "sync_fetch_size";
 	/** Default value of the property {@link #KEY_SYNC_FETCH_SIZE}: {@value #DEFAULT_SYNC_FETCH_SIZE}. */
-	public final static int DEFAULT_SYNC_FETCH_SIZE = 10000;
+	public final static int DEFAULT_SYNC_FETCH_SIZE = 1000;
 	/** Name/Key of the property specifying by how many rows the library should fetch a query result from the database.
 	 * This is the fetch size for to apply for asynchronous queries. */
 	public final static String KEY_ASYNC_FETCH_SIZE = "async_fetch_size";
 	/** Default value of the property {@link #KEY_ASYNC_FETCH_SIZE}: {@value #DEFAULT_ASYNC_FETCH_SIZE}. */
-	public final static int DEFAULT_ASYNC_FETCH_SIZE = 100000;
+	public final static int DEFAULT_ASYNC_FETCH_SIZE = 10000;
 	/** Name/Key of the property specifying the name of the DataSource into the JDNI. */
 	public final static String KEY_DATASOURCE_JNDI_NAME = "datasource_jndi_name";
 	/** Name/Key of the property specifying the full class name of the JDBC driver.
diff --git a/src/tap/config/tap_configuration_file.html b/src/tap/config/tap_configuration_file.html
index e5a7486a982f56c218373122c3c220a5244652e6..53ff196ff65751b72d0c1b4ce298ec80bf7f34de 100644
--- a/src/tap/config/tap_configuration_file.html
+++ b/src/tap/config/tap_configuration_file.html
@@ -193,9 +193,9 @@
 	 				too much waiting time from the TAP /sync users (and thus, avoiding some HTTP client timeouts).</p>
 	 				<p>A negative or null value means that the default value of the JDBC driver will be used. Generally,
 	 				it means that the database must wait to have collected all data before sending them to the library.</p>
-					<p><em>Default: <code>sync_fetch_size=10000</code></em></p>
+					<p><em>Default: <code>sync_fetch_size=1000</code></em></p>
 				</td>
-				<td><ul><li>10000 <em>(default)</em><li>0 <em>(wait for the the whole result)</em></li><li>100000</li></ul></td>
+				<td><ul><li>1000 <em>(default)</em><li>0 <em>(wait for the the whole result)</em></li><li>100000</li></ul></td>
 			</tr>
 			<tr class="optional">
 				<td class="done">async_fetch_size</td>
@@ -208,9 +208,9 @@
 	 				If supported by the DBMS and the JDBC driver, this feature may help sparing memory.</p>
 	 				<p>A negative or null value means that the default value of the JDBC driver will be used. Generally,
 	 				it means that the database must wait to have collected all data before sending them to the library.</p>
-					<p><em>Default: <code>async_fetch_size=100000</code></em></p>
+					<p><em>Default: <code>async_fetch_size=10000</code></em></p>
 				</td>
-				<td><ul><li>100000 <em>(default)</em><li>0 <em>(wait for the the whole result)</em></li><li>1000000</li></ul></td>
+				<td><ul><li>10000 <em>(default)</em><li>0 <em>(wait for the the whole result)</em></li><li>1000000</li></ul></td>
 			</tr>
 			
 			<tr><td colspan="5">&#10551; JNDI datasource <i>(only if database_access=jndi)</i></td></tr>
diff --git a/src/tap/config/tap_full.properties b/src/tap/config/tap_full.properties
index 2c358f42e5d0be1f737259fb155b4dd919f4abd9..f5349f269a11f0fd420fea94e069aaa907600854 100644
--- a/src/tap/config/tap_full.properties
+++ b/src/tap/config/tap_full.properties
@@ -2,7 +2,7 @@
 #                        FULL TAP CONFIGURATION FILE                           #
 #                                                                              #
 # TAP Version: 2.3                                                             #
-# Date: 26 Oct. 2018                                                           #
+# Date: 2 Nov. 2018                                                            #
 # Author: Gregory Mantelet (CDS;ARI)                                           #
 #                                                                              #
 ################################################################################ 
@@ -104,7 +104,7 @@ sql_translator = postgres
 # data before sending them to the library.
 # 
 # Default: sync_fetch_size=10000
-sync_fetch_size = 10000
+sync_fetch_size = 1000
 
 # [OPTIONAL]
 # Size of result blocks to fetch from the database when an ADQL query is
@@ -120,7 +120,7 @@ sync_fetch_size = 10000
 # data before sending them to the library.
 # 
 # Default: async_fetch_size=100000
-async_fetch_size=100000
+async_fetch_size=10000
 
 #############################
 # IF DATABASE ACCESS = JNDI #
diff --git a/src/tap/formatter/TextFormat.java b/src/tap/formatter/TextFormat.java
index a32c3c90487e6d631d98963c0f11f89a85361ce3..db8580d647786f5ffa440bb0eae60e3f5bfe4e1d 100644
--- a/src/tap/formatter/TextFormat.java
+++ b/src/tap/formatter/TextFormat.java
@@ -2,21 +2,21 @@ package tap.formatter;
 
 /*
  * 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-2015 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
+ *
+ * Copyright 2012-2018 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
  *                       Astronomisches Rechen Institut (ARI)
  */
 
@@ -35,9 +35,9 @@ import tap.data.TableIterator;
 /**
  * Format any given query (table) result into a simple table ASCII representation
  * (columns' width are adjusted so that all columns are well aligned and of the same width).
- * 
+ *
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 2.0 (04/2015)
+ * @version 2.3 (11/2018)
  */
 public class TextFormat implements OutputFormat {
 
@@ -51,9 +51,9 @@ public class TextFormat implements OutputFormat {
 
 	/**
 	 * Build a {@link TextFormat}.
-	 * 
+	 *
 	 * @param service	Description of the TAP service.
-	 * 
+	 *
 	 * @throws NullPointerException	If the given service connection is <code>null</code>.
 	 */
 	public TextFormat(final ServiceConnection service) throws NullPointerException{
@@ -101,10 +101,10 @@ public class TextFormat implements OutputFormat {
 
 		// Finally write the formatted ASCII table (header + data) in the output stream:
 		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
-		String[] lines = asciiTable.displayAligned(new int[]{AsciiTable.LEFT}, '|');
+		String[] lines = asciiTable.displayAligned(new int[]{ AsciiTable.LEFT }, '|', thread);
 		execReport.nbRows = 0;
 		for(String l : lines){
-			// stop right now the formatting if the job has been aborted/canceled/interrupted:
+			// stop right now the formatting if the job has been aborted/cancelled/interrupted:
 			if (thread.isInterrupted())
 				throw new InterruptedException();
 			// write the line:
@@ -128,13 +128,13 @@ public class TextFormat implements OutputFormat {
 
 	/**
 	 * Get the whole header (one row whose columns are just the columns' name).
-	 * 
+	 *
 	 * @param result		Result to write later (but it contains also metadata that was extracted from the result itself).
 	 * @param execReport	Execution report (which contains the metadata extracted/guessed from the ADQL query).
 	 * @param thread		Thread which has asked for this formatting (it must be used in order to test the {@link Thread#isInterrupted()} flag and so interrupt everything if need).
-	 * 
+	 *
 	 * @return	All the written metadata.
-	 * 
+	 *
 	 * @throws TAPException	If any other error occurs.
 	 */
 	protected String getHeader(final TableIterator result, final TAPExecutionReport execReport, final Thread thread) throws TAPException{
@@ -159,14 +159,14 @@ public class TextFormat implements OutputFormat {
 
 	/**
 	 * Write all the data rows into the given {@link AsciiTable} object.
-	 * 
+	 *
 	 * @param queryResult		Result to write.
 	 * @param asciiTable		Output in which the rows (as string) must be written.
 	 * @param execReport		Execution report (which contains the maximum allowed number of records to output).
 	 * @param thread			Thread which has asked for this formatting (it must be used in order to test the {@link Thread#isInterrupted()} flag and so interrupt everything if need).
-	 * 
+	 *
 	 * @return	<i>true</i> if an overflow (i.e. nbDBRows > MAXREC) is detected, <i>false</i> otherwise.
-	 * 
+	 *
 	 * @throws InterruptedException		If the thread has been interrupted.
 	 * @throws TAPException				If any other error occurs.
 	 */
@@ -180,7 +180,7 @@ public class TextFormat implements OutputFormat {
 
 		StringBuffer line = new StringBuffer();
 		while(queryResult.nextRow()){
-			// Stop right now the formatting if the job has been aborted/canceled/interrupted:
+			// Stop right now the formatting if the job has been aborted/cancelled/interrupted:
 			if (thread.isInterrupted())
 				throw new InterruptedException();
 
@@ -215,7 +215,7 @@ public class TextFormat implements OutputFormat {
 
 	/**
 	 * Writes the given field value in the given buffer.
-	 * 
+	 *
 	 * @param value		The value to write.
 	 * @param tapCol	The corresponding column metadata.
 	 * @param line		The buffer in which the field value must be written.