diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java
index c786dc7..7d2a272 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java
@@ -45,9 +45,10 @@
 
         ServletContext context = getServletContext();
         IHyracksClientConnection hcc = (IHyracksClientConnection) context.getAttribute(HYRACKS_CONNECTION_ATTR);
+        boolean terminateNCServices = "true".equalsIgnoreCase(request.getParameter("all"));
         Thread t = new Thread(() -> {
             try {
-                hcc.stopCluster();
+                hcc.stopCluster(terminateNCServices);
             } catch (Exception e) {
                 GlobalConfig.ASTERIX_LOGGER.log(Level.SEVERE, "Exception stopping cluster", e);
             }
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java
index 419e660..424c1e3 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java
@@ -24,6 +24,7 @@
 import org.apache.asterix.clienthelper.commands.ClientCommand;
 import org.apache.asterix.clienthelper.commands.ClientCommand.Command;
 import org.apache.asterix.clienthelper.commands.GetClusterStateCommand;
+import org.apache.asterix.clienthelper.commands.ShutdownAllCommand;
 import org.apache.asterix.clienthelper.commands.ShutdownCommand;
 import org.apache.asterix.clienthelper.commands.WaitForClusterCommand;
 import org.kohsuke.args4j.CmdLineException;
@@ -108,6 +109,8 @@
                 return new WaitForClusterCommand(args);
             case SHUTDOWN_CLUSTER:
                 return new ShutdownCommand(args);
+            case SHUTDOWN_CLUSTER_ALL:
+                return new ShutdownAllCommand(args);
             default:
                 throw new IllegalStateException("NYI: " + command);
         }
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java
index 8f0cac0..c86ea36 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java
@@ -30,7 +30,8 @@
     public enum Command {
         GET_CLUSTER_STATE("Get state of cluster (errorcode 0 = UP, non-zero = DOWN)"),
         WAIT_FOR_CLUSTER("Wait for cluster to be ready (errorcode 0 = UP, non-zero = UNKNOWN)"),
-        SHUTDOWN_CLUSTER("Instructs the cluster to shut down"),;
+        SHUTDOWN_CLUSTER("Instructs the cluster to shut down, leaving NCService processes intact"),
+        SHUTDOWN_CLUSTER_ALL("Instructs the cluster to shut down, including NCService processes");
 
         private final String usage;
         private static final Map<String, Command> nameMap = new HashMap<>();
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownAllCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownAllCommand.java
new file mode 100644
index 0000000..3903262
--- /dev/null
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownAllCommand.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.clienthelper.commands;
+
+import org.apache.asterix.clienthelper.Args;
+
+public class ShutdownAllCommand extends ShutdownCommand {
+
+    public ShutdownAllCommand(Args args) {
+        super(args, "?all=true");
+    }
+}
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java
index ee6e1a7..688f4ad 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java
@@ -27,9 +27,13 @@
 public class ShutdownCommand extends RemoteCommand {
     private final String shutdownPath;
 
-    public ShutdownCommand(Args args) {
+    public ShutdownCommand(Args args, String extra) {
         super(args);
-        shutdownPath = args.getShutdownPath();
+        shutdownPath = args.getShutdownPath() + extra;
+    }
+
+    public ShutdownCommand(Args args) {
+        this(args, "");
     }
 
     private void clusterLog(String suffix) {
diff --git a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat
index 7cbf107..dfd1ada 100644
--- a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat
+++ b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat
@@ -37,15 +37,12 @@
 
 call %INSTALLDIR%\bin\${HELPER_COMMAND} get_cluster_state -quiet
 if %ERRORLEVEL% EQU 0 (
-  call %INSTALLDIR%\bin\${HELPER_COMMAND} shutdown_cluster
+  call %INSTALLDIR%\bin\${HELPER_COMMAND} shutdown_cluster_all
 ) else (
-  echo WARNING: sample cluster does not appear to be running, will attempt to kill any running
-  echo          NCServices and wait for CCDriver to terminate if running.
+  echo WARNING: sample cluster does not appear to be running, will attempt to wait for
+  echo          CCDriver to terminate if running.
 )
 echo.
-echo Terminating NC services...
-powershell "%JAVA_HOME%\bin\jps.exe -v | select-string -pattern ${NC_SERVICE_COMMAND} | %%{ $_.ToString().Split(' ')[0] } | %%{ Stop-Process $_ }"
-
 powershell "Write-Host "Waiting for CCDriver to terminate..." -nonewline; do { if ($running) { Start-Sleep 1 }; %JAVA_HOME%\bin\jps.exe -v | select-string -pattern ${CC_COMMAND} -quiet -outvariable running | Out-Null; Write-Host "." -nonewline } while ($running)"
 echo .done.
 goto :END
diff --git a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh
index 7451e4e..462d53d 100755
--- a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh
+++ b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh
@@ -43,13 +43,12 @@
 
 if $INSTALLDIR/bin/${HELPER_COMMAND} get_cluster_state -quiet;
 then
-  $INSTALLDIR/bin/${HELPER_COMMAND} shutdown_cluster
+  $INSTALLDIR/bin/${HELPER_COMMAND} shutdown_cluster_all
 else
-  echo "WARNING: sample cluster does not appear to be running, will attempt to kill any running NCServices and"
-  echo "         wait for CCDriver to terminate if running."
+  echo "WARNING: sample cluster does not appear to be running, will attempt to wait for"
+  echo "         CCDriver to terminate if running."
 fi
 
-$JAVA_HOME/bin/jps | awk '/NCService/ { print $1 }' | xargs kill 2>/dev/null
 first=1
 while [ -n "$($JAVA_HOME/bin/jps | awk '/CCDriver/')" ]; do
   if [ $first ]; then
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java
index 88c4edb..a7c2a36 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java
@@ -289,11 +289,20 @@
 
     public static class ClusterShutdownFunction extends Function {
         private static final long serialVersionUID = 1L;
+        private final boolean terminateNCService;
+
+        public ClusterShutdownFunction(boolean terminateNCService) {
+            this.terminateNCService = terminateNCService;
+        }
 
         @Override
         public FunctionId getFunctionId() {
             return FunctionId.CLUSTER_SHUTDOWN;
         }
+
+        public boolean isTerminateNCService() {
+            return terminateNCService;
+        }
     }
 
     public static class GetNodeDetailsJSONFunction extends Function {
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java
index 86a8ceb..f88f30f 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java
@@ -118,8 +118,9 @@
     }
 
     @Override
-    public void stopCluster() throws Exception {
-        HyracksClientInterfaceFunctions.ClusterShutdownFunction csdf = new HyracksClientInterfaceFunctions.ClusterShutdownFunction();
+    public void stopCluster(boolean terminateNCService) throws Exception {
+        HyracksClientInterfaceFunctions.ClusterShutdownFunction csdf =
+                new HyracksClientInterfaceFunctions.ClusterShutdownFunction(terminateNCService);
         rpci.call(ipcHandle, csdf);
         //give the CC some time to do final settling after it returns our request
         for (int i = 3; ipcHandle.isConnected() && i > 0; i--) {
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java
index 4b27caf..8c0557e 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java
@@ -189,8 +189,8 @@
     }
 
     @Override
-    public void stopCluster() throws Exception{
-        hci.stopCluster();
+    public void stopCluster(boolean terminateNCService) throws Exception {
+        hci.stopCluster(terminateNCService);
     }
 
     @Override
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java
index 6c15da2..fd4d21b 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java
@@ -185,8 +185,9 @@
 
     /**
      * Shuts down all NCs and then the CC.
+     * @param terminateNCService
      */
-    public void stopCluster() throws Exception;
+    public void stopCluster(boolean terminateNCService) throws Exception;
 
     /**
      * Get details of specified node as JSON object
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java
index c2af2e7..3f3c120 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java
@@ -54,7 +54,7 @@
 
     public JobInfo getJobInfo(JobId jobId) throws Exception;
 
-    public void stopCluster() throws Exception;
+    public void stopCluster(boolean terminateNCService) throws Exception;
 
     public String getNodeDetailsJSON(String nodeId, boolean includeStats, boolean includeConfig) throws Exception;
 
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 ce272eb..685a36b 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
@@ -516,8 +516,10 @@
                     return;
                 }
                 case CLUSTER_SHUTDOWN: {
+                    HyracksClientInterfaceFunctions.ClusterShutdownFunction csf =
+                            (HyracksClientInterfaceFunctions.ClusterShutdownFunction) fn;
                     workQueue.schedule(new ClusterShutdownWork(ClusterControllerService.this,
-                            new IPCResponder<>(handle, mid)));
+                            csf.isTerminateNCService(), new IPCResponder<>(handle, mid)));
                     return;
                 }
 
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java
index 6acab12..63ca4ae 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java
@@ -33,13 +33,16 @@
 import org.apache.hyracks.ipc.exceptions.IPCException;
 
 public class ClusterShutdownWork extends SynchronizableWork {
+    private static final Logger LOGGER = Logger.getLogger(ClusterShutdownWork.class.getName());
 
-    private ClusterControllerService ccs;
-    private IResultCallback<Boolean> callback;
-    private static Logger LOGGER = Logger.getLogger(ClusterShutdownWork.class.getName());
+    private final ClusterControllerService ccs;
+    private final boolean terminateNCService;
+    private final IResultCallback<Boolean> callback;
 
-    public ClusterShutdownWork(ClusterControllerService ncs, IResultCallback<Boolean> callback) {
+    public ClusterShutdownWork(ClusterControllerService ncs, boolean terminateNCService,
+                               IResultCallback<Boolean> callback) {
         this.ccs = ncs;
+        this.terminateNCService = terminateNCService;
         this.callback = callback;
     }
 
@@ -106,7 +109,7 @@
 
     protected void shutdownNode(String key, NodeControllerState ncState) {
         try {
-            ncState.getNodeController().shutdown();
+            ncState.getNodeController().shutdown(terminateNCService);
         } catch (Exception e) {
             LOGGER.log(
                     Level.INFO, "Exception shutting down NC " + key + " (possibly dead?), continuing shutdown...", e);
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java
index bd550b5..dff5827 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java
@@ -51,7 +51,7 @@
 
     public void dumpState(String stateDumpId) throws Exception;
 
-    public void shutdown() throws Exception;
+    public void shutdown(boolean terminateNCService) throws Exception;
 
     public void sendApplicationMessageToNC(byte[] data, DeploymentId deploymentId, String nodeId) throws Exception;
 
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java
index aeb2de7..aa9a4fe 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java
@@ -1158,10 +1158,20 @@
     public static class ShutdownRequestFunction extends Function {
         private static final long serialVersionUID = 1L;
 
+        private final boolean terminateNCService;
+
+        public ShutdownRequestFunction(boolean terminateNCService) {
+            this.terminateNCService = terminateNCService;
+        }
+
         @Override
         public FunctionId getFunctionId() {
             return FunctionId.SHUTDOWN_REQUEST;
         }
+
+        public boolean isTerminateNCService() {
+            return terminateNCService;
+        }
     }
 
     public static class ShutdownResponseFunction extends Function {
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java
index e4682dc..c3376e6 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java
@@ -90,8 +90,8 @@
     }
 
     @Override
-    public void shutdown() throws Exception {
-        CCNCFunctions.ShutdownRequestFunction sdrf = new CCNCFunctions.ShutdownRequestFunction();
+    public void shutdown(boolean terminateNCService) throws Exception {
+        CCNCFunctions.ShutdownRequestFunction sdrf = new CCNCFunctions.ShutdownRequestFunction(terminateNCService);
         ipcHandle.send(-1, sdrf, null);
     }
 
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
index dbf3af0..d7facf0 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java
@@ -572,7 +572,8 @@
                     return;
 
                 case SHUTDOWN_REQUEST:
-                    queue.schedule(new ShutdownWork(NodeControllerService.this));
+                    final CCNCFunctions.ShutdownRequestFunction sdrf = (CCNCFunctions.ShutdownRequestFunction) fn;
+                    queue.schedule(new ShutdownWork(NodeControllerService.this, sdrf.isTerminateNCService()));
                     return;
 
                 case THREAD_DUMP_REQUEST:
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java
index f81882b..4558a91 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java
@@ -19,49 +19,49 @@
 
 package org.apache.hyracks.control.nc.work;
 
-import java.net.URL;
-import java.util.List;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.hyracks.api.deployment.DeploymentId;
 import org.apache.hyracks.control.common.base.IClusterController;
-import org.apache.hyracks.control.common.deployment.DeploymentStatus;
-import org.apache.hyracks.control.common.deployment.DeploymentUtils;
 import org.apache.hyracks.control.common.work.AbstractWork;
 import org.apache.hyracks.control.nc.NodeControllerService;
 
 public class ShutdownWork extends AbstractWork {
-
-    private final NodeControllerService ncs;
     private static Logger LOGGER = Logger.getLogger(ShutdownWork.class.getName());
+    private final NodeControllerService ncs;
+    private final boolean terminateNCService;
 
-    public ShutdownWork(NodeControllerService ncs) {
+    public ShutdownWork(NodeControllerService ncs, boolean terminateNCService) {
         this.ncs = ncs;
+        this.terminateNCService = terminateNCService;
     }
 
     @Override
     public void run() {
+        IClusterController ccs = ncs.getClusterController();
         try {
-            IClusterController ccs = ncs.getClusterController();
             ccs.notifyShutdown(ncs.getId());
-            LOGGER.info("JVM Exiting.. Bye!");
+        } catch (Exception e) {
+            LOGGER.log(Level.WARNING, "Exception notifying CC of shutdown acknowledgment", e);
+            throw new RuntimeException(e);
+        }
+
+        LOGGER.info("JVM Exiting.. Bye!");
             //run the shutdown in a new thread, so we don't block this last work task
-            Thread t = new Thread() {
+            Thread t = new Thread("NC " + ncs.getId() + " Shutdown") {
+                @Override
                 public void run() {
                     try {
                         ncs.stop();
                     } catch (Exception e) {
-                        LOGGER.severe(e.getMessage());
+                        LOGGER.log(Level.SEVERE, "Exception stopping node controller service", e);
                     } finally {
                         Runtime rt = Runtime.getRuntime();
-                        rt.exit(0);
+                        rt.exit(terminateNCService ? 99 : 0);
                     }
                 }
             };
             t.start();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
     }
 
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java
index 4102b4c..5b032d9 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java
@@ -18,11 +18,6 @@
  */
 package org.apache.hyracks.control.nc.service;
 
-import org.apache.commons.lang3.SystemUtils;
-import org.apache.hyracks.control.common.controllers.IniUtils;
-import org.ini4j.Ini;
-import org.kohsuke.args4j.CmdLineParser;
-
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -37,6 +32,11 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.apache.commons.lang3.SystemUtils;
+import org.apache.hyracks.control.common.controllers.IniUtils;
+import org.ini4j.Ini;
+import org.kohsuke.args4j.CmdLineParser;
+
 /**
  * Stand-alone process which listens for configuration information from the
  * CC and starts an NC. Intended to be a constantly-running service.
@@ -164,7 +164,13 @@
             if (LOGGER.isLoggable(Level.INFO)) {
                 LOGGER.info("NCDriver exited with return value " + retval);
             }
-            return (retval == 0);
+            if (retval == 99) {
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.info("Terminating NCService based on return value from NCDriver");
+                }
+                System.exit(0);
+            }
+            return retval == 0;
         } catch (Exception e) {
             if (LOGGER.isLoggable(Level.SEVERE)) {
                 LOGGER.log(Level.SEVERE, "Configuration from CC broken", e);
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java
index 97f5a64..c1083c9f 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java
@@ -36,11 +36,11 @@
     @Test
     public void runShutdown() throws Exception {
         IHyracksClientConnection hcc = new HyracksConnection("localhost", 1098);
-        hcc.stopCluster();
+        hcc.stopCluster(false);
         //what happens here...
         closeTwice.expect(IPCException.class);
         closeTwice.expectMessage("Cannot send on a closed handle");
-        hcc.stopCluster();
+        hcc.stopCluster(false);
         ServerSocket c = null;
         ServerSocket s = null;
         try {
