diff --git a/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/Stagelet.java b/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/Stagelet.java
index d6c3ee2..587fd01 100644
--- a/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/Stagelet.java
+++ b/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/Stagelet.java
@@ -32,139 +32,145 @@
 import edu.uci.ics.hyracks.control.nc.runtime.OperatorRunnable;
 
 public class Stagelet {
-    private static final long serialVersionUID = 1L;
+	private static final long serialVersionUID = 1L;
 
-    private static final Logger LOGGER = Logger.getLogger(Stagelet.class.getName());
+	private static final Logger LOGGER = Logger.getLogger(Stagelet.class
+			.getName());
 
-    private final Joblet joblet;
+	private final Joblet joblet;
 
-    private final UUID stageId;
+	private final UUID stageId;
 
-    private final int attempt;
+	private final int attempt;
 
-    private final Map<OperatorInstanceId, OperatorRunnable> honMap;
+	private final Map<OperatorInstanceId, OperatorRunnable> honMap;
 
-    private List<Endpoint> endpointList;
+	private List<Endpoint> endpointList;
 
-    private boolean started;
+	private boolean started;
 
-    private volatile boolean abort;
+	private volatile boolean abort;
 
-    private final Set<OperatorInstanceId> pendingOperators;
+	private final Set<OperatorInstanceId> pendingOperators;
 
-    private final StageletStatistics stats;
+	private final StageletStatistics stats;
 
-    public Stagelet(Joblet joblet, UUID stageId, int attempt, String nodeId) throws RemoteException {
-        this.joblet = joblet;
-        this.stageId = stageId;
-        this.attempt = attempt;
-        pendingOperators = new HashSet<OperatorInstanceId>();
-        started = false;
-        honMap = new HashMap<OperatorInstanceId, OperatorRunnable>();
-        stats = new StageletStatistics();
-        stats.setNodeId(nodeId);
-    }
+	public Stagelet(Joblet joblet, UUID stageId, int attempt, String nodeId)
+			throws RemoteException {
+		this.joblet = joblet;
+		this.stageId = stageId;
+		this.attempt = attempt;
+		pendingOperators = new HashSet<OperatorInstanceId>();
+		started = false;
+		honMap = new HashMap<OperatorInstanceId, OperatorRunnable>();
+		stats = new StageletStatistics();
+		stats.setNodeId(nodeId);
+	}
 
-    public void setOperator(OperatorDescriptorId odId, int partition, OperatorRunnable hon) {
-        honMap.put(new OperatorInstanceId(odId, partition), hon);
-    }
+	public void setOperator(OperatorDescriptorId odId, int partition,
+			OperatorRunnable hon) {
+		honMap.put(new OperatorInstanceId(odId, partition), hon);
+	}
 
-    public Map<OperatorInstanceId, OperatorRunnable> getOperatorMap() {
-        return honMap;
-    }
+	public Map<OperatorInstanceId, OperatorRunnable> getOperatorMap() {
+		return honMap;
+	}
 
-    public void setEndpointList(List<Endpoint> endpointList) {
-        this.endpointList = endpointList;
-    }
+	public void setEndpointList(List<Endpoint> endpointList) {
+		this.endpointList = endpointList;
+	}
 
-    public List<Endpoint> getEndpointList() {
-        return endpointList;
-    }
+	public List<Endpoint> getEndpointList() {
+		return endpointList;
+	}
 
-    public synchronized void start() throws Exception {
-        if (started) {
-            throw new Exception("Joblet already started");
-        }
-        started = true;
-        stats.setStartTime(new Date());
-        notifyAll();
-    }
+	public synchronized void start() throws Exception {
+		if (started) {
+			throw new Exception("Joblet already started");
+		}
+		started = true;
+		stats.setStartTime(new Date());
+		notifyAll();
+	}
 
-    public synchronized void abort() {
-        this.abort = true;
-        for (OperatorRunnable r : honMap.values()) {
-            r.abort();
-        }
-    }
+	public synchronized void abort() {
+		this.abort = true;
+		for (OperatorRunnable r : honMap.values()) {
+			r.abort();
+		}
+	}
 
-    public void installRunnable(final OperatorInstanceId opIId) {
-        pendingOperators.add(opIId);
-        final OperatorRunnable hon = honMap.get(opIId);
-        joblet.getExecutor().execute(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    waitUntilStarted();
-                } catch (InterruptedException e) {
-                    e.printStackTrace();
-                    return;
-                }
-                if (abort) {
-                    return;
-                }
-                try {
-                    LOGGER.log(Level.INFO, joblet.getJobId() + ":" + stageId + ":" + opIId.getOperatorId() + ":"
-                            + opIId.getPartition() + ": STARTING");
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    // notifyOperatorFailure(opIId);
-                }
-                try {
-                    hon.run();
-                    notifyOperatorCompletion(opIId);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    // notifyOperatorFailure(opIId);
-                }
-                try {
-                    LOGGER.log(Level.INFO, joblet.getJobId() + ":" + stageId + ":" + opIId.getOperatorId() + ":"
-                            + opIId.getPartition() + ": TERMINATED");
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    // notifyOperatorFailure(opIId);
-                }
-            }
-        });
-    }
+	public void installRunnable(final OperatorInstanceId opIId) {
+		pendingOperators.add(opIId);
+		final OperatorRunnable hon = honMap.get(opIId);
+		joblet.getExecutor().execute(new Runnable() {
+			@Override
+			public void run() {
+				try {
+					waitUntilStarted();
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+					return;
+				}
+				if (abort) {
+					return;
+				}
+				try {
+					LOGGER.log(Level.INFO, joblet.getJobId() + ":" + stageId
+							+ ":" + opIId.getOperatorId() + ":"
+							+ opIId.getPartition() + ": STARTING");
+				} catch (Exception e) {
+					e.printStackTrace();
+					// notifyOperatorFailure(opIId);
+				}
+				try {
+					hon.run();
+					notifyOperatorCompletion(opIId);
+				} catch (Exception e) {
+					e.printStackTrace();
+					notifyOperatorFailure(opIId);
+				}
+				try {
+					LOGGER.log(Level.INFO, joblet.getJobId() + ":" + stageId
+							+ ":" + opIId.getOperatorId() + ":"
+							+ opIId.getPartition() + ": TERMINATED");
+				} catch (Exception e) {
+					e.printStackTrace();
+					// notifyOperatorFailure(opIId);
+				}
+			}
+		});
+	}
 
-    protected synchronized void notifyOperatorCompletion(OperatorInstanceId opIId) {
-        pendingOperators.remove(opIId);
-        if (pendingOperators.isEmpty()) {
-            stats.setEndTime(new Date());
-            try {
-                joblet.notifyStageletComplete(stageId, attempt, stats);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
+	protected synchronized void notifyOperatorCompletion(
+			OperatorInstanceId opIId) {
+		pendingOperators.remove(opIId);
+		if (pendingOperators.isEmpty()) {
+			stats.setEndTime(new Date());
+			try {
+				joblet.notifyStageletComplete(stageId, attempt, stats);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
 
-    protected synchronized void notifyOperatorFailure(OperatorInstanceId opIId) {
-        abort();
-        try {
-            joblet.notifyStageletFailed(stageId, attempt);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
+	protected synchronized void notifyOperatorFailure(OperatorInstanceId opIId) {
+		abort();
+		try {
+			joblet.notifyStageletFailed(stageId, attempt);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
 
-    private synchronized void waitUntilStarted() throws InterruptedException {
-        while (!started && !abort) {
-            wait();
-        }
-    }
+	private synchronized void waitUntilStarted() throws InterruptedException {
+		while (!started && !abort) {
+			wait();
+		}
+	}
 
-    public StageletStatistics getStatistics() {
-        return stats;
-    }
+	public StageletStatistics getStatistics() {
+		return stats;
+	}
 }
\ No newline at end of file
