diff --git a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/job/JobInfo.java b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/job/JobInfo.java
index 4b7cbe5..4a58175 100644
--- a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/job/JobInfo.java
+++ b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/job/JobInfo.java
@@ -1,7 +1,20 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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 edu.uci.ics.hyracks.api.job;
 
 import java.io.Serializable;
-import java.util.List;
 import java.util.Map;
 
 import edu.uci.ics.hyracks.api.dataflow.OperatorDescriptorId;
@@ -12,15 +25,9 @@
 
 	private final JobId jobId;
 
-	private JobStatus status;
+	private final JobStatus status;
 
-	private List<Exception> exceptions;
-
-	private JobStatus pendingStatus;
-
-	private List<Exception> pendingExceptions;
-
-	private Map<OperatorDescriptorId, Map<Integer, String>> operatorLocations;
+	private final Map<OperatorDescriptorId, Map<Integer, String>> operatorLocations;
 
 	public JobInfo(JobId jobId, JobStatus jobStatus,
 			Map<OperatorDescriptorId, Map<Integer, String>> operatorLocations) {
@@ -29,48 +36,16 @@
 		this.status = jobStatus;
 	}
 
+	public JobId getJobId() {
+		return jobId;
+	}
+
 	public JobStatus getStatus() {
 		return status;
 	}
 
-	public void setStatus(JobStatus status) {
-		this.status = status;
-	}
-
-	public List<Exception> getExceptions() {
-		return exceptions;
-	}
-
-	public void setExceptions(List<Exception> exceptions) {
-		this.exceptions = exceptions;
-	}
-
-	public JobStatus getPendingStatus() {
-		return pendingStatus;
-	}
-
-	public void setPendingStatus(JobStatus pendingStatus) {
-		this.pendingStatus = pendingStatus;
-	}
-
-	public List<Exception> getPendingExceptions() {
-		return pendingExceptions;
-	}
-
-	public void setPendingExceptions(List<Exception> pendingExceptions) {
-		this.pendingExceptions = pendingExceptions;
-	}
-
 	public Map<OperatorDescriptorId, Map<Integer, String>> getOperatorLocations() {
 		return operatorLocations;
 	}
 
-	public void setOperatorLocations(
-			Map<OperatorDescriptorId, Map<Integer, String>> operatorLocations) {
-		this.operatorLocations = operatorLocations;
-	}
-
-	public JobId getJobId() {
-		return jobId;
-	}
 }
diff --git a/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/GetJobInfoWork.java b/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/GetJobInfoWork.java
index c2e08f2..72f8811 100644
--- a/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/GetJobInfoWork.java
+++ b/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/work/GetJobInfoWork.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2009-2010 by The Regents of the University of California
+ * Copyright 2009-2013 by The Regents of the University of California
  * Licensed 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 from
@@ -39,8 +39,8 @@
             if (run == null) {
                 run = ccs.getRunMapArchive().get(jobId);
             }
-            JobInfo info = run == null ? null
-                    : new JobInfo(run.getJobId(), run.getStatus(), run.getOperatorLocations());
+            JobInfo info = (run != null) ? new JobInfo(run.getJobId(), run.getStatus(), run.getOperatorLocations())
+                    : null;
             callback.setValue(info);
         } catch (Exception e) {
             callback.setException(e);
