diff --git a/src/tap/data/ResultSetTableIterator.java b/src/tap/data/ResultSetTableIterator.java
index 91a8faa980e0a9ffdec6271968dc32a8a57e6d50..d90f9447565ed0ecff3ae1a2fe320374340f4db4 100644
--- a/src/tap/data/ResultSetTableIterator.java
+++ b/src/tap/data/ResultSetTableIterator.java
@@ -581,7 +581,7 @@ public class ResultSetTableIterator implements TableIterator {
 				if (resultMeta != null && (i - 1) < resultMeta.length && resultMeta[i - 1] != null){
 					if (resultMeta[i - 1] instanceof TAPColumn)
 						colMeta[i - 1] = (TAPColumn)resultMeta[i - 1];
-					else if (resultMeta[i - 1].getDatatype() != null){
+					else if (resultMeta[i - 1].getDatatype() != null && !resultMeta[i - 1].getDatatype().isUnknown()){
 						colMeta[i - 1] = new TAPColumn(resultMeta[i - 1].getADQLName(), resultMeta[i - 1].getDatatype());
 						colMeta[i - 1].setDBName(resultMeta[i - 1].getDBName());
 					}else{
diff --git a/test/tap/data/ResultSetTableIteratorTest.java b/test/tap/data/ResultSetTableIteratorTest.java
index 2b177f61508a76a87313a83aefe55c09066c6388..063cc3ca0e052231007d697555e8a690e4dbc8ab 100644
--- a/test/tap/data/ResultSetTableIteratorTest.java
+++ b/test/tap/data/ResultSetTableIteratorTest.java
@@ -198,7 +198,43 @@ public class ResultSetTableIteratorTest {
 
 		}catch(Exception ex){
 			ex.printStackTrace(System.err);
-			fail("An exception occurs while formatting dates/times.");
+			fail("An exception occurs while checking geometrical functions datatypes.");
+		}finally{
+			if (rs != null){
+				try{
+					rs.close();
+				}catch(Exception ex){}
+			}
+		}
+	}
+
+	@Test
+	public void testSQLFunctions(){
+		ResultSet rs = null;
+		try{
+			ADQLQuery query = (new ADQLParser()).parseQuery("SELECT COUNT(*), MIN(vmag), AVG(plx) FROM hipparcos;");
+
+			// create a valid ResultSet:
+			rs = DBTools.select(conn, (new PgSphereTranslator()).translate(query));
+
+			// Create the iterator:
+			ResultSetTableIterator rsit = new ResultSetTableIterator(rs, query.getResultingColumns());
+			assertTrue(rsit.nextRow());
+
+			// Fetch the metadata:
+			TAPColumn[] cols = rsit.getMetadata();
+			assertEquals(3, cols.length);
+
+			// Check that the first column is a BIGINT:
+			assertEquals(DBType.DBDatatype.BIGINT, cols[0].getDatatype().type);
+
+			// Check that the two next columns are REAL:
+			for(int i = 1; i < 3; i++)
+				assertEquals(DBType.DBDatatype.REAL, cols[i].getDatatype().type);
+
+		}catch(Exception ex){
+			ex.printStackTrace(System.err);
+			fail("An exception occurs while checking SQL functions datatypes");
 		}finally{
 			if (rs != null){
 				try{