diff --git a/asterix/asterix-app/pom.xml b/asterix/asterix-app/pom.xml
index 6b5b39d..03ee55b 100644
--- a/asterix/asterix-app/pom.xml
+++ b/asterix/asterix-app/pom.xml
@@ -36,6 +36,10 @@
 									<mainClass>edu.uci.ics.asterix.drivers.AsterixClientDriver</mainClass>
 									<name>asterix-cmd</name>
 								</program>
+								<program>
+									<mainClass>edu.uci.ics.asterix.drivers.AsterixCLI</mainClass>
+									<name>asterix-cli</name>
+								</program>
 							</programs>
 							<repositoryLayout>flat</repositoryLayout>
 							<repositoryName>lib</repositoryName>
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixCLI.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixCLI.java
new file mode 100644
index 0000000..c06c29c
--- /dev/null
+++ b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixCLI.java
@@ -0,0 +1,72 @@
+package edu.uci.ics.asterix.drivers;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.Reader;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
+import edu.uci.ics.asterix.api.java.AsterixJavaClient;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+
+public class AsterixCLI {
+    private static class Options {
+        @Option(name = "-properties", usage = "Name of properties file", required = true)
+        public String properties;
+
+        @Option(name = "-output", usage = "Output folder to place results", required = true)
+        public String outputFolder;
+
+        @Argument(usage = "AQL Files to run", multiValued = true, required = true)
+        public List<String> args;
+    }
+
+    public static void main(String args[]) throws Exception {
+        Options options = new Options();
+        CmdLineParser parser = new CmdLineParser(options);
+        parser.parseArgument(args);
+
+        setUp(options);
+        try {
+            for (String queryFile : options.args) {
+                Reader in = new FileReader(queryFile);
+                AsterixJavaClient ajc = new AsterixJavaClient(
+                        AsterixHyracksIntegrationUtil.getHyracksClientConnection(), in);
+                try {
+                    ajc.compile(true, false, false, false, false, true, false);
+                } finally {
+                    in.close();
+                }
+                ajc.execute();
+            }
+        } finally {
+            tearDown();
+        }
+        System.exit(0);
+    }
+
+    public static void setUp(Options options) throws Exception {
+        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, options.properties);
+        System.setProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY, "19002");
+        File outdir = new File(options.outputFolder);
+        outdir.mkdirs();
+
+        File log = new File("asterix_logs");
+        if (log.exists())
+            FileUtils.deleteDirectory(log);
+        File lsn = new File("last_checkpoint_lsn");
+        lsn.deleteOnExit();
+
+        AsterixHyracksIntegrationUtil.init();
+    }
+
+    public static void tearDown() throws Exception {
+        AsterixHyracksIntegrationUtil.deinit();
+    }
+
+}
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
index ae29617..7adafc8 100644
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
+++ b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
@@ -54,9 +54,10 @@
             asterix.compile(true, false, false, false, false, true, false);
         } catch (AsterixException e) {
             throw new Exception("Compile ERROR for " + scriptFile + ": " + e.getMessage(), e);
+        } finally {
+            query.close();
         }
         asterix.execute();
-        query.close();
         BufferedReader readerExpected = new BufferedReader(new FileReader(expectedFile));
         BufferedReader readerActual = new BufferedReader(new FileReader(actualFile));
         String lineExpected, lineActual;
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
index 6864ec3..3e82ff6 100644
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
+++ b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
@@ -41,6 +41,8 @@
             asterixLoad.compile(true, false, false, false, false, true, false);
         } catch (AsterixException e) {
             throw new Exception("Compile ERROR for " + LOAD_FOR_ENLIST_FILE + ": " + e.getMessage(), e);
+        } finally {
+            loadReader.close();
         }
         asterixLoad.execute();
         AsterixHyracksIntegrationUtil.destroyApp();
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
index 416734f..baa91dc 100644
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
+++ b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
@@ -153,6 +153,8 @@
             asterix.compile();
         } catch (AsterixException e) {
             throw new Exception("Compile ERROR for " + queryFile + ": " + e.getMessage(), e);
+        } finally {
+            query.close();
         }
         asterix.execute();
         query.close();
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java
index 5fc3599..6081994 100644
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java
+++ b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTransactionsTest.java
@@ -84,7 +84,11 @@
             AsterixJavaClient asterix = new AsterixJavaClient(
                     AsterixHyracksIntegrationUtil.getHyracksClientConnection(), query, ERR);
             LOGGER.info("Query is: " + queryFileName);
-            asterix.compile(true, false, false, false, false, executeQuery, false);
+            try {
+                asterix.compile(true, false, false, false, false, executeQuery, false);
+            } finally {
+                query.close();
+            }
             // We don't want to execute a query if we expect only DDL
             // modifications.
             if (executeQuery) {
