diff --git a/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.1.ddl.aql
new file mode 100644
index 0000000..6aa28cc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.1.ddl.aql
@@ -0,0 +1,22 @@
+drop dataverse TestDataverse if exists;
+create dataverse TestDataverse;
+use dataverse TestDataverse;
+
+create type TestType as {
+  id: int64,
+  int8_u:   {{ int8   }},
+  int8_o:   [  int8    ],
+  int16_u:  {{ int16  }},
+  int16_o:  [  int16   ],
+  int32_u:  {{ int32  }},
+  int32_o:  [  int32   ],
+  int64_u:  {{ int64  }},
+  int64_o:  [  int64   ],
+  float_u:  {{ float  }},
+  float_o:  [  float   ],
+  double_u: {{ double }},
+  double_o: [  double  ]
+}
+
+create dataset TestSet(TestType)
+primary key id;
diff --git a/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.2.update.aql
new file mode 100644
index 0000000..05ffa1d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.2.update.aql
@@ -0,0 +1,23 @@
+use dataverse TestDataverse;
+
+insert into dataset TestSet (
+  let $i08 := int8("100")
+  let $i16 := int16("10000")
+  let $i32 := 1000000
+  let $i64 := int64("10000000000")
+  return {
+    "id": 1,
+    "int8_u":  {{  $i08 }},
+    "int8_o":  [   $i08  ],
+    "int16_u": {{  $i08, $i16 }},
+    "int16_o": [   $i08, $i16  ],
+    "int32_u": {{  $i08, $i16, $i32 }},
+    "int32_o": [   $i08, $i16, $i32  ],
+    "int64_u": {{  $i08, $i16, $i32, $i64 }},
+    "int64_o": [   $i08, $i16, $i32, $i64  ],
+    "float_u": {{  $i08, $i16, $i32 }},
+    "float_o": [   $i08, $i16, $i32  ],
+    "double_u": {{ $i08, $i16, $i32, $i64 }},
+    "double_o": [  $i08, $i16, $i32, $i64  ]
+  }
+)
diff --git a/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.3.query.aql
new file mode 100644
index 0000000..137b994
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/types/type_promotion_1/type_promotion_1.3.query.aql
@@ -0,0 +1,4 @@
+use dataverse TestDataverse;
+
+for $i in dataset TestSet
+return $i
diff --git a/asterix-app/src/test/resources/runtimets/results/types/type_promotion_1/type_promotion_1.1.adm b/asterix-app/src/test/resources/runtimets/results/types/type_promotion_1/type_promotion_1.1.adm
new file mode 100644
index 0000000..2fc6069
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/types/type_promotion_1/type_promotion_1.1.adm
@@ -0,0 +1 @@
+{ "id": 1i64, "int8_u": {{ 100i8 }}, "int8_o": [ 100i8 ], "int16_u": {{ 100i16, 10000i16 }}, "int16_o": [ 100i16, 10000i16 ], "int32_u": {{ 100, 10000, 1000000 }}, "int32_o": [ 100, 10000, 1000000 ], "int64_u": {{ 100i64, 10000i64, 1000000i64, 10000000000i64 }}, "int64_o": [ 100i64, 10000i64, 1000000i64, 10000000000i64 ], "float_u": {{ 100.0f, 10000.0f, 1000000.0f }}, "float_o": [ 100.0f, 10000.0f, 1000000.0f ], "double_u": {{ 100.0d, 10000.0d, 1000000.0d, 1.0E10d }}, "double_o": [ 100.0d, 10000.0d, 1000000.0d, 1.0E10d ] }
diff --git a/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterix-app/src/test/resources/runtimets/testsuite.xml
index 9cdc3df..faab5aa 100644
--- a/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -4994,5 +4994,10 @@
         <output-dir compare="Text">type_promotion_0</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="types">
+      <compilation-unit name="type_promotion_1">
+        <output-dir compare="Text">type_promotion_1</output-dir>
+      </compilation-unit>
+    </test-case>
   </test-group>
 </test-suite>
diff --git a/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java b/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
index 9643e1d..ee94c33 100644
--- a/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
+++ b/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
@@ -23,7 +23,6 @@
 import java.io.FileInputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
@@ -44,8 +43,6 @@
 import org.apache.commons.httpclient.methods.StringRequestEntity;
 import org.apache.commons.httpclient.params.HttpMethodParams;
 import org.apache.commons.io.IOUtils;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.json.JSONException;
 import org.json.JSONObject;
 
 import com.fasterxml.jackson.core.JsonFactory;
@@ -77,7 +74,7 @@
         return path.delete();
     }
 
-    public static void runScriptAndCompareWithResult(File scriptFile, PrintWriter print, File expectedFile,
+    private static void runScriptAndCompareWithResult(File scriptFile, PrintWriter print, File expectedFile,
             File actualFile) throws Exception {
         BufferedReader readerExpected = new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile),
                 "UTF-8"));
@@ -160,7 +157,7 @@
         return fname.substring(0, dot + 1) + EXTENSION_AQL_RESULT;
     }
 
-    public static void writeResultsToFile(File actualFile, InputStream resultStream) throws IOException, JSONException {
+    private static void writeResultsToFile(File actualFile, InputStream resultStream) throws Exception {
         BufferedWriter writer = new BufferedWriter(new FileWriter(actualFile));
         try {
             JsonFactory jsonFactory = new JsonFactory();
@@ -175,12 +172,11 @@
                             String record = resultParser.getValueAsString();
                             writer.write(record);
                         }
-                    } else {
-                        String summary = resultParser.getValueAsString();
-                        if (key.equals("summary")) {
-                            writer.write(summary);
-                            throw new JsonMappingException("Could not find results key in the JSON Object");
-                        }
+                    } else if (key.equals("summary")) {
+                        String summary = resultParser.nextTextValue();
+                        writer.write(summary);
+                        throw new Exception("Could not find results key in the JSON Object, result file is at "
+                                + actualFile);
                     }
                 }
             }
@@ -293,7 +289,7 @@
     // Method that reads a DDL/Update/Query File
     // and returns the contents as a string
     // This string is later passed to REST API for execution.
-    public static String readTestFile(File testFile) throws Exception {
+    private static String readTestFile(File testFile) throws Exception {
         BufferedReader reader = new BufferedReader(new FileReader(testFile));
         String line = null;
         StringBuilder stringBuilder = new StringBuilder();
@@ -377,86 +373,75 @@
             for (TestFileContext ctx : testFileCtxs) {
                 testFile = ctx.getFile();
                 statement = TestsUtils.readTestFile(testFile);
+                InputStream resultStream;
                 try {
                     switch (ctx.getType()) {
                         case "ddl":
                             TestsUtils.executeDDL(statement);
                             break;
                         case "update":
-
                             //isDmlRecoveryTest: set IP address
                             if (isDmlRecoveryTest && statement.contains("nc1://")) {
                                 statement = statement
                                         .replaceAll("nc1://", "127.0.0.1://../../../../../../asterix-app/");
-
                             }
 
                             TestsUtils.executeUpdate(statement);
                             break;
                         case "query":
-                            try {
-                                // isDmlRecoveryTest: insert Crash and Recovery
-                                if (isDmlRecoveryTest) {
-                                    executeScript(pb, pb.environment().get("SCRIPT_HOME") + File.separator
-                                            + "dml_recovery" + File.separator + "kill_cc_and_nc.sh");
-                                    executeScript(pb, pb.environment().get("SCRIPT_HOME") + File.separator
-                                            + "dml_recovery" + File.separator + "stop_and_start.sh");
-                                }
-
-                                InputStream resultStream = executeQuery(statement);
-                                expectedResultFile = expectedResultFileCtxs.get(queryCount).getFile();
-
-                                File actualFile = new File(actualPath + File.separator
-                                        + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
-                                        + cUnit.getName() + ".adm");
-                                TestsUtils.writeResultsToFile(actualFile, resultStream);
-
-                                File actualResultFile = testCaseCtx.getActualResultFile(cUnit, new File(actualPath));
-                                actualResultFile.getParentFile().mkdirs();
-
-                                TestsUtils.runScriptAndCompareWithResult(testFile, new PrintWriter(System.err),
-                                        expectedResultFile, actualFile);
-                                LOGGER.info("[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/"
-                                        + cUnit.getName() + " PASSED ");
-                            } catch (JsonMappingException e) {
-                                throw new Exception("Test \"" + testFile + "\" FAILED!\n");
+                            // isDmlRecoveryTest: insert Crash and Recovery
+                            if (isDmlRecoveryTest) {
+                                executeScript(pb, pb.environment().get("SCRIPT_HOME") + File.separator + "dml_recovery"
+                                        + File.separator + "kill_cc_and_nc.sh");
+                                executeScript(pb, pb.environment().get("SCRIPT_HOME") + File.separator + "dml_recovery"
+                                        + File.separator + "stop_and_start.sh");
                             }
+
+                            resultStream = executeQuery(statement);
+                            if (queryCount >= expectedResultFileCtxs.size()) {
+                                throw new IllegalStateException("no result file for " + testFile.toString());
+                            }
+                            expectedResultFile = expectedResultFileCtxs.get(queryCount).getFile();
+
+                            File actualFile = new File(actualPath + File.separator
+                                    + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
+                                    + cUnit.getName() + ".adm");
+                            TestsUtils.writeResultsToFile(actualFile, resultStream);
+
+                            File actualResultFile = testCaseCtx.getActualResultFile(cUnit, new File(actualPath));
+                            actualResultFile.getParentFile().mkdirs();
+
+                            TestsUtils.runScriptAndCompareWithResult(testFile, new PrintWriter(System.err),
+                                    expectedResultFile, actualFile);
+                            LOGGER.info("[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/" + cUnit.getName()
+                                    + " PASSED ");
+
                             queryCount++;
                             break;
                         case "mgx":
                             executeManagixCommand(statement);
                             break;
                         case "txnqbc": //qbc represents query before crash
-                            try {
-                                InputStream resultStream = executeQuery(statement);
-                                qbcFile = new File(actualPath + File.separator
-                                        + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
-                                        + cUnit.getName() + "_qbc.adm");
-                                qbcFile.getParentFile().mkdirs();
-                                TestsUtils.writeResultsToFile(qbcFile, resultStream);
-                            } catch (JsonMappingException e) {
-                                throw new Exception("Test \"" + testFile + "\" FAILED!\n");
-                            }
+                            resultStream = executeQuery(statement);
+                            qbcFile = new File(actualPath + File.separator
+                                    + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
+                                    + cUnit.getName() + "_qbc.adm");
+                            qbcFile.getParentFile().mkdirs();
+                            TestsUtils.writeResultsToFile(qbcFile, resultStream);
                             break;
                         case "txnqar": //qar represents query after recovery
-                            try {
+                            resultStream = executeQuery(statement);
+                            qarFile = new File(actualPath + File.separator
+                                    + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
+                                    + cUnit.getName() + "_qar.adm");
+                            qarFile.getParentFile().mkdirs();
+                            TestsUtils.writeResultsToFile(qarFile, resultStream);
 
-                                InputStream resultStream = executeQuery(statement);
+                            TestsUtils.runScriptAndCompareWithResult(testFile, new PrintWriter(System.err),
+                                    qbcFile, qarFile);
 
-                                qarFile = new File(actualPath + File.separator
-                                        + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
-                                        + cUnit.getName() + "_qar.adm");
-                                qarFile.getParentFile().mkdirs();
-                                TestsUtils.writeResultsToFile(qarFile, resultStream);
-
-                                TestsUtils.runScriptAndCompareWithResult(testFile, new PrintWriter(System.err),
-                                        qbcFile, qarFile);
-
-                                LOGGER.info("[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/"
-                                        + cUnit.getName() + " PASSED ");
-                            } catch (JsonMappingException e) {
-                                throw new Exception("Test \"" + testFile + "\" FAILED!\n");
-                            }
+                            LOGGER.info("[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/"
+                                    + cUnit.getName() + " PASSED ");
                             break;
                         case "txneu": //eu represents erroneous update
                             try {
@@ -494,13 +479,15 @@
                     }
 
                 } catch (Exception e) {
-                    e.printStackTrace();
                     if (cUnit.getExpectedError().isEmpty()) {
+                        e.printStackTrace();
                         throw new Exception("Test \"" + testFile + "\" FAILED!", e);
+                    } else {
+                        LOGGER.info("[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/" + cUnit.getName()
+                                + " failed as expected: " + e.getMessage());
                     }
                 }
             }
         }
     }
-
 }
diff --git a/asterix-installer/pom.xml b/asterix-installer/pom.xml
index c24a2e4..ed87902 100644
--- a/asterix-installer/pom.xml
+++ b/asterix-installer/pom.xml
@@ -17,7 +17,7 @@
 	<artifactId>asterix-installer</artifactId>
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<test.excludes>**/DmlRecoveryIT.java</test.excludes>
+		<failsafe.test.excludes>**/DmlRecoveryIT.java</failsafe.test.excludes>
 	</properties>
 
 	<build>
@@ -108,7 +108,7 @@
 					<runOrder>alphabetical</runOrder>
 					<forkMode>pertest</forkMode>
 					<excludes>
-						<exclude>${test.excludes}</exclude>
+						<exclude>${failsafe.test.excludes}</exclude>
 					</excludes>
 				</configuration>
 				<executions>
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java
index d46c800..77ae09a 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java
@@ -83,13 +83,10 @@
                     .getStartOffset()]);
             if (reqItemType == null || reqItemType.getTypeTag().equals(ATypeTag.ANY)) {
                 itemVisitorArg.second = DefaultOpenFieldType.getDefaultOpenFieldType(typeTag);
-                item.accept(visitor, itemVisitorArg);
             } else {
-                if (typeTag != reqItemType.getTypeTag())
-                    throw new AsterixException("mismatched item type");
                 itemVisitorArg.second = reqItemType;
-                item.accept(visitor, itemVisitorArg);
             }
+            item.accept(visitor, itemVisitorArg);
             if (reqType.getTypeTag().equals(ATypeTag.ORDEREDLIST)) {
                 orderedListBuilder.addItem(itemVisitorArg.first);
             }
diff --git a/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java b/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java
index ba7d02a..04c10a5 100644
--- a/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java
+++ b/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java
@@ -60,66 +60,47 @@
         return testCase;
     }
 
-    public List<TestFileContext> getTestFiles(CompilationUnit cUnit) {
+    public List<TestFileContext> getFilesInDir(String basePath, String dirName, boolean withType) {
         List<TestFileContext> testFileCtxs = new ArrayList<TestFileContext>();
 
         File path = tsRoot;
-        path = new File(path, testSuite.getQueryOffsetPath());
+        path = new File(path, basePath);
         path = new File(path, testCase.getFilePath());
-        path = new File(path, cUnit.getName());
+        path = new File(path, dirName);
 
-        String fileNames[] = path.list();
-        for (String fName : fileNames) {
-            if (fName.startsWith(".")) {
-                continue;
+        if (path.isDirectory()) {
+            String fileNames[] = path.list();
+            for (String fName : fileNames) {
+                if (fName.startsWith(".")) {
+                    continue;
+                }
+
+                File testFile = new File(path, fName);
+                TestFileContext tfsc = new TestFileContext(testFile);
+                String[] nameSplits = fName.split("\\.");
+                if (nameSplits.length < 3) {
+                    throw new IllegalArgumentException("Test file '" + dirName + File.separatorChar + fName
+                            + "' does not have the proper test file name format.");
+                }
+                if (withType) {
+                    tfsc.setSeqNum(nameSplits[nameSplits.length - 3]);
+                    tfsc.setType(nameSplits[nameSplits.length - 2]);
+                } else {
+                    tfsc.setSeqNum(nameSplits[nameSplits.length - 2]);
+                }
+                testFileCtxs.add(tfsc);
             }
-            
-            File testFile = new File(path, fName);
-            TestFileContext tfsc = new TestFileContext(testFile);
-            String[] nameSplits = fName.split("\\.");
-            if (nameSplits.length < 3) {
-                throw new IllegalArgumentException("Test file '" + cUnit.getName() + File.separatorChar
-                        + fName + "' does not have the proper test file name format.");
-            }
-            tfsc.setSeqNum(nameSplits[nameSplits.length - 3]);
-            tfsc.setType(nameSplits[nameSplits.length - 2]);
-            testFileCtxs.add(tfsc);
         }
         Collections.sort(testFileCtxs);
         return testFileCtxs;
     }
 
+    public List<TestFileContext> getTestFiles(CompilationUnit cUnit) {
+        return getFilesInDir(testSuite.getQueryOffsetPath(), cUnit.getName(), true);
+    }
+
     public List<TestFileContext> getExpectedResultFiles(CompilationUnit cUnit) {
-        List<TestFileContext> resultFileCtxs = new ArrayList<TestFileContext>();
-
-        File path = tsRoot;
-        path = new File(path, testSuite.getResultOffsetPath());
-        path = new File(path, testCase.getFilePath());
-        path = new File(path, cUnit.getOutputDir().getValue());
-
-        String fileNames[] = path.list();
-
-        if (fileNames != null) {
-            for (String fName : fileNames) {
-                if (fName.startsWith(".")) {
-                    continue;
-                }
-                
-                File testFile = new File(path, fName);
-                TestFileContext tfsc = new TestFileContext(testFile);
-                String[] nameSplits = fName.split("\\.");
-                
-                if (nameSplits.length < 3) {
-                    throw new IllegalArgumentException("Test file '" + cUnit.getName() + File.separatorChar
-                            + fName + "' does not have the proper test file name format.");
-                }
-                
-                tfsc.setSeqNum(nameSplits[nameSplits.length - 2]);
-                resultFileCtxs.add(tfsc);
-            }
-            Collections.sort(resultFileCtxs);
-        }
-        return resultFileCtxs;
+        return getFilesInDir(testSuite.getResultOffsetPath(), cUnit.getOutputDir().getValue(), false);
     }
 
     public File getActualResultFile(CompilationUnit cUnit, File actualResultsBase) {
@@ -130,7 +111,9 @@
     }
 
     public static class Builder {
+        private final boolean m_doSlow;
         public Builder() {
+            m_doSlow = System.getProperty("runSlowAQLTests", "false").equals("true");
         }
 
         public List<TestCaseContext> build(File tsRoot) throws Exception {
@@ -157,10 +140,9 @@
         }
 
         private void addContexts(File tsRoot, TestSuite ts, List<TestGroup> tgPath, List<TestCaseContext> tccs) {
-            boolean doSlow = System.getProperty("runSlowAQLTests") != null;
             TestGroup tg = tgPath.get(tgPath.size() - 1);
             for (TestCase tc : tg.getTestCase()) {
-                if (doSlow || tc.getCategory() != CategoryEnum.SLOW) {
+                if (m_doSlow || tc.getCategory() != CategoryEnum.SLOW) {
                     tccs.add(new TestCaseContext(tsRoot, ts, tgPath.toArray(new TestGroup[tgPath.size()]), tc));
                 }
             }
diff --git a/pom.xml b/pom.xml
index e966057..1f001b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,15 +24,15 @@
     <algebricks.version>0.2.11-SNAPSHOT</algebricks.version>
     <hyracks.version>0.2.11-SNAPSHOT</hyracks.version>
     <jvm.extraargs />
-    <skipSlowTests>true</skipSlowTests>
+    <runSlowAQLTests>false</runSlowAQLTests>
 
     <!-- Definition of tests in various categories which may be excluded -->
     <optimizer.tests>**/optimizer/**/*Test.java</optimizer.tests>
     <metadata.tests>**/metadata/*Test.java</metadata.tests>
     <execution.tests>**/ExecutionTest.java</execution.tests>
     <invalid.tests>**/DmlTest.java</invalid.tests>
-    <test.includes>**/*TestSuite.java,**/*Test.java</test.includes>
-    <test.excludes>${optimizer.tests},${metadata.tests},${execution.tests},${invalid.tests}</test.excludes>
+    <global.test.includes>**/*TestSuite.java,**/*Test.java,${execution.tests}</global.test.includes>
+    <global.test.excludes>${optimizer.tests},${metadata.tests},${invalid.tests}</global.test.excludes>
   </properties>
 
 	<build>
@@ -59,13 +59,14 @@
 		<argLine>-enableassertions -Xmx${test.heap.size}m
 		-Dfile.encoding=UTF-8
 		-Djava.util.logging.config.file=${user.home}/logging.properties
+                -DrunSlowAQLTests=${runSlowAQLTests}
 		-Xdebug
 		-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n</argLine>
 		<includes>
-		  <include>${test.includes}</include>
+		  <include>${global.test.includes},${test.includes}</include>
 		</includes>
                 <excludes>
-                  <exclude>${test.excludes}</exclude>
+                  <exclude>${global.test.excludes},${test.excludes}</exclude>
                 </excludes>
 	      </configuration>
 	    </plugin>
@@ -90,6 +91,12 @@
 
     <profiles>
       <profile>
+        <id>slow-aql-tests</id>
+        <properties>
+          <runSlowAQLTests>true</runSlowAQLTests>
+        </properties>
+      </profile>
+      <profile>
         <id>optimizer-tests</id>
         <properties>
           <optimizer.tests />
@@ -139,13 +146,6 @@
           </properties>
         </profile>
 
-        <profile>
-          <id>slow</id>
-          <properties>
-            <skipSlowTests>false</skipSlowTests>
-          </properties>
-        </profile>
-
     </profiles>
 
 	<modules>
