diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/controller/clustercontroller/JOLJobManagerImpl.java b/hyracks-core/src/main/java/edu/uci/ics/hyracks/controller/clustercontroller/JOLJobManagerImpl.java
index 3c39379..e82a49f 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/controller/clustercontroller/JOLJobManagerImpl.java
+++ b/hyracks-core/src/main/java/edu/uci/ics/hyracks/controller/clustercontroller/JOLJobManagerImpl.java
@@ -24,6 +24,7 @@
 import jol.types.basic.Tuple;
 import jol.types.basic.TupleSet;
 import jol.types.table.BasicTable;
+import jol.types.table.EventTable;
 import jol.types.table.Key;
 import jol.types.table.TableName;
 import edu.uci.ics.hyracks.api.comm.Endpoint;
@@ -83,7 +84,7 @@
         this.anTable = new ActivityNodeTable(jolRuntime);
         this.acTable = new ActivityConnectionTable(jolRuntime);
         this.abTable = new ActivityBlockedTable(jolRuntime);
-        this.jobStartTable = new JobStartTable(jolRuntime);
+        this.jobStartTable = new JobStartTable();
         this.startMessageTable = new StartMessageTable(jolRuntime);
 
         jolRuntime.catalog().register(jobTable);
@@ -434,17 +435,15 @@
     /*
      * declare(jobstart, keys(0), {JobId, SubmitTime})
      */
-    private static class JobStartTable extends BasicTable {
+    private static class JobStartTable extends EventTable {
         private static TableName TABLE_NAME = new TableName(JOL_SCOPE, "jobstart");
 
-        private static Key PRIMARY_KEY = new Key(0);
-
         private static final Class[] SCHEMA = new Class[] {
             UUID.class, Long.class
         };
 
-        public JobStartTable(Runtime context) {
-            super(context, TABLE_NAME, PRIMARY_KEY, SCHEMA);
+        public JobStartTable() {
+            super(TABLE_NAME, SCHEMA);
         }
 
         static Tuple createTuple(UUID jobId, long submitTime) {
@@ -458,10 +457,10 @@
     private static class StartMessageTable extends BasicTable {
         private static TableName TABLE_NAME = new TableName(JOL_SCOPE, "startmessage");
 
-        private static Key PRIMARY_KEY = new Key(0, 1);
+        private static Key PRIMARY_KEY = new Key(0, 1, 2);
 
         private static final Class[] SCHEMA = new Class[] {
-            UUID.class, UUID.class, JobPlan.class, TupleSet.class
+            UUID.class, UUID.class, JobPlan.class, Set.class
         };
 
         public StartMessageTable(Runtime context) {
diff --git a/hyracks-core/src/main/resources/edu/uci/ics/hyracks/controller/clustercontroller/scheduler.olg b/hyracks-core/src/main/resources/edu/uci/ics/hyracks/controller/clustercontroller/scheduler.olg
index dd62758..d05dcb2 100644
--- a/hyracks-core/src/main/resources/edu/uci/ics/hyracks/controller/clustercontroller/scheduler.olg
+++ b/hyracks-core/src/main/resources/edu/uci/ics/hyracks/controller/clustercontroller/scheduler.olg
@@ -70,11 +70,9 @@
     job(JobId, edu.uci.ics.hyracks.api.job.JobStatus.INITIALIZED, _, _),
     notin stagestart(JobId, _);
 
-/*
 update_job_status_RUNNING job(JobId, edu.uci.ics.hyracks.api.job.JobStatus.RUNNING, JobSpec, JobPlan) :-
     job(JobId, edu.uci.ics.hyracks.api.job.JobStatus.INITIALIZED, JobSpec, JobPlan),
     jobstart(JobId, _);
-*/
 
 stagestart_NEXT stagestart(JobId, NextStageNumber) :-
     stagestart(JobId, StageNumber),
@@ -97,19 +95,19 @@
 
 watch(activitystart, a);
 
-define(stageletstart, keys(0, 1), {UUID, UUID, JobPlan, String, ActivityNodeId});
+define(stageletstart, keys(0, 1), {UUID, UUID, JobPlan, String, Set});
 
-stageletstart(JobId, StageId, JobPlan, NodeId, ActivityId) :-
+stageletstart(JobId, StageId, JobPlan, NodeId, set<ActivityId>) :-
     activitystart(JobId, _, ActivityId, _, StageId, NodeId),
     job(JobId, _, _, JobPlan);
 
 watch(stageletstart, a);
 watch(stageletstart, i);
 
-startmessage(JobId, StageId, JobPlan, tupleset<Tuple>) :-
-    stageletstart(JobId, StageId, JobPlan, NodeId, ActivityId)
+startmessage(JobId, StageId, JobPlan, set<Tuple>) :-
+    stageletstart(JobId, StageId, JobPlan, NodeId, ActivityIdSet)
     {
-        Tuple := new Tuple([NodeId, ActivityId]);
+        Tuple := new Tuple([NodeId, ActivityIdSet]);
     };
 
 watch(startmessage, i);
\ No newline at end of file
