diff --git a/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/ApplicationStartWork.java b/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/ApplicationStartWork.java
index 2022c7e..637c55d 100644
--- a/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/ApplicationStartWork.java
+++ b/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/ApplicationStartWork.java
@@ -40,34 +40,30 @@
 
     @Override
     public void run() {
-        ApplicationContext appCtx = ccs.getApplicationMap().get(appName);
+        final ApplicationContext appCtx = ccs.getApplicationMap().get(appName);
         if (appCtx == null) {
             fv.setException(new HyracksException("No application with name: " + appName));
             return;
         }
-        try {
-            appCtx.initializeClassPath();
-            appCtx.initialize();
-            final byte[] distributedState = JavaSerializationUtils.serialize(appCtx.getDistributedState());
-            final boolean deployHar = appCtx.containsHar();
-            List<RemoteOp<Void>> opList = new ArrayList<RemoteOp<Void>>();
-            for (final String nodeId : ccs.getNodeMap().keySet()) {
-                opList.add(new ApplicationStarter(nodeId, appName, deployHar, distributedState));
-            }
-            final RemoteOp[] ops = opList.toArray(new RemoteOp[opList.size()]);
-            ccs.getExecutor().execute(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        RemoteRunner.runRemote(ccs, ops, null);
-                        fv.setValue(null);
-                    } catch (Exception e) {
-                        fv.setException(e);
+        ccs.getExecutor().execute(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    appCtx.initializeClassPath();
+                    appCtx.initialize();
+                    final byte[] distributedState = JavaSerializationUtils.serialize(appCtx.getDistributedState());
+                    final boolean deployHar = appCtx.containsHar();
+                    List<RemoteOp<Void>> opList = new ArrayList<RemoteOp<Void>>();
+                    for (final String nodeId : ccs.getNodeMap().keySet()) {
+                        opList.add(new ApplicationStarter(nodeId, appName, deployHar, distributedState));
                     }
+                    final RemoteOp[] ops = opList.toArray(new RemoteOp[opList.size()]);
+                    RemoteRunner.runRemote(ccs, ops, null);
+                    fv.setValue(null);
+                } catch (Exception e) {
+                    fv.setException(e);
                 }
-            });
-        } catch (Exception e) {
-            fv.setException(e);
-        }
+            }
+        });
     }
 }
\ No newline at end of file
