diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/AbstractTestCaseFactory.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/AbstractTestCaseFactory.java
index cf52171..a9fd4a4 100644
--- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/AbstractTestCaseFactory.java
+++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/AbstractTestCaseFactory.java
@@ -83,7 +83,7 @@
     }
 
     private static Set<String> getPreviousTests(String previousTestResults) {
-        Set<String> tests = new LinkedHashSet<String>();
+        Set<String> tests = new LinkedHashSet<>();
         try {
             BufferedReader br = new BufferedReader(new FileReader(previousTestResults));
             String line;
diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/HTMLFileReporterImpl.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/HTMLFileReporterImpl.java
index d9e85e3..d64fcec 100644
--- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/HTMLFileReporterImpl.java
+++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/HTMLFileReporterImpl.java
@@ -76,12 +76,12 @@
                 ++userErrors;
             } else {
                 ++internalErrors;
-                Integer count = exDistribution.get(result.error.getClass());
-                if (count == null) {
-                    count = 0;
+                Integer internalCount = exDistribution.get(result.error.getClass());
+                if (internalCount == null) {
+                    internalCount = 0;
                 }
-                count++;
-                exDistribution.put(result.error.getClass(), count);
+                internalCount++;
+                exDistribution.put(result.error.getClass(), internalCount);
             }
         }
         Integer stCount = stDistribution.get(result.state);
diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestClusterUtil.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestClusterUtil.java
index 9f5bb76..75dce1b 100644
--- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestClusterUtil.java
+++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestClusterUtil.java
@@ -35,6 +35,9 @@
     private static String ccHost = "localhost";
     private static String nodeId = "nc1";
 
+    private TestClusterUtil() {
+    }
+
     public static CCConfig createCCConfig() throws UnknownHostException {
         String publicAddress = InetAddress.getLocalHost().getHostAddress();
         CCConfig ccConfig = new CCConfig();
diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTest.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTest.java
index 17dea60..fa07d9b 100644
--- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTest.java
+++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTest.java
@@ -16,9 +16,12 @@
  */
 package org.apache.vxquery.xtest;
 
+import org.apache.hyracks.control.cc.ClusterControllerService;
+import org.apache.hyracks.control.nc.NodeControllerService;
 import org.mortbay.jetty.Server;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
@@ -33,6 +36,8 @@
     private TestRunnerFactory trf;
     private int count;
     private int finishCount;
+    private static NodeControllerService nc;
+    private static ClusterControllerService cc;
 
     XTest(XTestOptions opts) {
         this.opts = opts;
@@ -76,6 +81,8 @@
                 }
             }
         });
+        cc = TestClusterUtil.startCC();
+        nc = TestClusterUtil.startNC();
         trf = new TestRunnerFactory(opts);
         trf.registerReporters(reporters);
         TestCaseFactory tcf = new TestCaseFactory(trf, eSvc, opts);
@@ -97,10 +104,14 @@
             r.close();
         }
         try {
+            TestClusterUtil.stopCluster(cc, nc);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        try {
             eSvc.awaitTermination(opts.keepalive, TimeUnit.MILLISECONDS);
         } finally {
             try {
-
                 if (server != null) {
                     server.stop();
                 }
