diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
index ea45203..a8095af 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
@@ -21,6 +21,7 @@
 import static org.apache.asterix.api.common.AsterixHyracksIntegrationUtil.LoggerHolder.LOGGER;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.Inet4Address;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -64,20 +65,22 @@
 
     public void init(boolean deleteOldInstanceData) throws Exception {
         ncs = new NodeControllerService[0]; // ensure that ncs is not null
-        propertiesAccessor = AsterixPropertiesAccessor.getInstance();
+        final CCConfig ccConfig = createCCConfig();
+        propertiesAccessor = AsterixPropertiesAccessor.getInstance(ccConfig.getAppConfig());
         if (deleteOldInstanceData) {
             deleteTransactionLogs();
             removeTestStorageFiles();
         }
 
-        cc = new ClusterControllerService(createCCConfig());
+        cc = new ClusterControllerService(ccConfig);
         cc.start();
 
         // Starts ncs.
         List<String> nodes = propertiesAccessor.getNodeNames();
         List<NodeControllerService> nodeControllers = new ArrayList<>();
         for (String ncName : nodes) {
-            NodeControllerService nodeControllerService = new NodeControllerService(createNCConfig(ncName));
+            NodeControllerService nodeControllerService =
+                    new NodeControllerService(fixupIODevices(createNCConfig(ncName)));
             nodeControllers.add(nodeControllerService);
             Thread ncStartThread = new Thread("IntegrationUtil-" + ncName) {
                 @Override
@@ -96,7 +99,7 @@
         ncs = nodeControllers.toArray(new NodeControllerService[nodeControllers.size()]);
     }
 
-    protected CCConfig createCCConfig() {
+    protected CCConfig createCCConfig() throws IOException {
         CCConfig ccConfig = new CCConfig();
         ccConfig.clusterNetIpAddress = Inet4Address.getLoopbackAddress().getHostAddress();
         ccConfig.clientNetIpAddress = Inet4Address.getLoopbackAddress().getHostAddress();
@@ -109,7 +112,7 @@
         return ccConfig;
     }
 
-    protected NCConfig createNCConfig(String ncName) throws AsterixException {
+    protected NCConfig createNCConfig(String ncName) throws AsterixException, IOException {
         NCConfig ncConfig = new NCConfig();
         ncConfig.ccHost = "localhost";
         ncConfig.ccPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
@@ -121,15 +124,20 @@
         ncConfig.resultTTL = 30000;
         ncConfig.resultSweepThreshold = 1000;
         ncConfig.appArgs = Collections.singletonList("-virtual-NC");
+        ncConfig.appNCMainClass = NCApplicationEntryPoint.class.getName();
+        return ncConfig;
+    }
+
+    private NCConfig fixupIODevices(NCConfig ncConfig) throws AsterixException {
         String tempPath = System.getProperty(IO_DIR_KEY);
         if (tempPath.endsWith(File.separator)) {
             tempPath = tempPath.substring(0, tempPath.length() - 1);
         }
         LOGGER.info("Using the temp path: " + tempPath);
         // get initial partitions from properties
-        String[] nodeStores = propertiesAccessor.getStores().get(ncName);
+        String[] nodeStores = propertiesAccessor.getStores().get(ncConfig.nodeId);
         if (nodeStores == null) {
-            throw new AsterixException("Coudn't find stores for NC: " + ncName);
+            throw new AsterixException("Couldn't find stores for NC: " + ncConfig.nodeId);
         }
         String tempDirPath = System.getProperty(IO_DIR_KEY);
         if (!tempDirPath.endsWith(File.separator)) {
@@ -146,10 +154,10 @@
                 ncConfig.ioDevices += "," + iodevicePath;
             }
         }
-        ncConfig.appNCMainClass = NCApplicationEntryPoint.class.getName();
         return ncConfig;
     }
 
+
     public String[] getNcNames() {
         return propertiesAccessor.getNodeNames().toArray(new String[propertiesAccessor.getNodeNames().size()]);
     }
@@ -208,7 +216,7 @@
         }
     }
 
-    private void deleteTransactionLogs() throws Exception {
+    private void deleteTransactionLogs() throws IOException {
         for (String ncId : propertiesAccessor.getNodeNames()) {
             File log = new File(propertiesAccessor.getTransactionLogDirs().get(ncId));
             if (log.exists()) {
@@ -224,33 +232,32 @@
      * @param args
      *            unused
      */
-    public static void main(String[] args) {
+    public static void main(String[] args) throws Exception {
         AsterixHyracksIntegrationUtil integrationUtil = new AsterixHyracksIntegrationUtil();
-        run(integrationUtil, Boolean.getBoolean("cleanup.start"), Boolean.getBoolean("cleanup.shutdown"));
+        try {
+            integrationUtil.run(Boolean.getBoolean("cleanup.start"), Boolean.getBoolean("cleanup.shutdown"));
+        } catch (Exception e) {
+            LOGGER.log(Level.WARNING, "Unexpected exception", e);
+            System.exit(1);
+        }
     }
 
-    protected static void run(final AsterixHyracksIntegrationUtil integrationUtil, boolean cleanupOnStart,
-            boolean cleanupOnShutdown) {
+    protected void run(boolean cleanupOnStart, boolean cleanupOnShutdown) throws Exception {
         Runtime.getRuntime().addShutdownHook(new Thread() {
             @Override
             public void run() {
                 try {
-                    integrationUtil.deinit(cleanupOnShutdown);
+                    deinit(cleanupOnShutdown);
                 } catch (Exception e) {
-                    e.printStackTrace();
+                    LOGGER.log(Level.WARNING, "Unexpected exception on shutdown", e);
                 }
             }
         });
-        try {
-            System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, "asterix-build-configuration.xml");
+        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, "asterix-build-configuration.xml");
 
-            integrationUtil.init(cleanupOnStart);
-            while (true) {
-                Thread.sleep(10000);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            System.exit(1);
+        init(cleanupOnStart);
+        while (true) {
+            Thread.sleep(10000);
         }
     }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java
index c76534b..5fdcede 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java
@@ -218,7 +218,7 @@
 
     private void connectNCs() throws Exception {
         Ini ini = ccConfig.getIni();
-        if (ini == null) {
+        if (ini == null || Boolean.parseBoolean(ini.get("cc", "virtual.cluster"))) {
             return;
         }
         for (String section : ini.keySet()) {
@@ -237,7 +237,7 @@
 
     private void terminateNCServices() throws Exception {
         Ini ini = ccConfig.getIni();
-        if (ini == null) {
+        if (ini == null || Boolean.parseBoolean(ini.get("cc", "virtual.cluster"))) {
             return;
         }
         List<ShutdownNCServiceWork> shutdownNCServiceWorks = new ArrayList<>();
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java
index 98d6375..d7c3d36 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/CCConfig.java
@@ -21,6 +21,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
+import java.net.URL;
 import java.util.List;
 
 import org.apache.hyracks.api.application.IApplicationConfig;
@@ -105,12 +106,20 @@
     @Option(name = "--", handler = StopOptionHandler.class)
     public List<String> appArgs;
 
+    public URL configFileUrl = null;
+
     private Ini ini = null;
 
     private void loadINIFile() throws IOException {
         // This method simply maps from the ini parameters to the CCConfig's fields.
         // It does not apply defaults or any logic.
-        ini = IniUtils.loadINIFile(configFile);
+        if (configFile != null) {
+            ini = IniUtils.loadINIFile(configFile);
+        } else if (configFileUrl != null) {
+            ini = IniUtils.loadINIFile(configFileUrl);
+        } else {
+            return;
+        }
 
         ipAddress = IniUtils.getString(ini, "cc", "address", ipAddress);
         clientNetIpAddress = IniUtils.getString(ini, "cc", "client.address", clientNetIpAddress);
@@ -139,8 +148,8 @@
      *    clusterNetIpAddress to ipAddress
      */
     public void loadConfigAndApplyDefaults() throws IOException {
-        if (configFile != null) {
-            loadINIFile();
+        loadINIFile();
+        if (ini != null) {
             // QQQ This way of passing overridden/defaulted values back into
             // the ini feels clunky, and it's clearly incomplete
             ini.add("cc", "cluster.address", clusterNetIpAddress);
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/IniUtils.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/IniUtils.java
index e999de4..451421d 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/IniUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/IniUtils.java
@@ -22,6 +22,7 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.lang.reflect.Array;
+import java.net.URL;
 
 import org.ini4j.Ini;
 import org.ini4j.Profile.Section;
@@ -93,4 +94,10 @@
         ini.load(conffile);
         return ini;
     }
+
+    public static Ini loadINIFile(URL configURL) throws IOException {
+        Ini ini = new Ini();
+        ini.load(configURL);
+        return ini;
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
index 2e47f41..fa7d76a 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/controllers/NCConfig.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.io.Serializable;
 import java.net.InetAddress;
+import java.net.URL;
 import java.util.List;
 import java.util.Map;
 
@@ -161,10 +162,19 @@
     @Option(name = "--", handler = StopOptionHandler.class)
     public List<String> appArgs;
 
+    public URL configFileUrl = null;
+
     private transient Ini ini = null;
 
     private void loadINIFile() throws IOException {
-        ini = IniUtils.loadINIFile(configFile);
+        if (configFile != null) {
+            ini = IniUtils.loadINIFile(configFile);
+        } else if (configFileUrl != null) {
+            ini = IniUtils.loadINIFile(configFileUrl);
+        } else {
+            return;
+        }
+
         // QQQ This should default to cc/address if cluster.address not set, but
         // that logic really should be handled by the ini file sent from the CC
         ccHost = IniUtils.getString(ini, "cc", "cluster.address", ccHost);
@@ -215,9 +225,7 @@
      *    clusterNetIpAddress to ipAddress
      */
     public void loadConfigAndApplyDefaults() throws IOException {
-        if (configFile != null) {
-            loadINIFile();
-        }
+        loadINIFile();
 
         // "address" is the default for all IP addresses
         if (clusterNetIPAddress == null) {
