diff --git a/.gitattributes b/.gitattributes
index a8c42bb6d818a6a34bf4c49c9f723755ad02a84f..a658a21dbeb4b7cb2b1aac94a97ca48b42541293 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -5034,6 +5034,7 @@ SAS/ResourceAssignment/ResourceAssignmentEditor/test/CMakeLists.txt -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/test/test_webservice.py -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/test/test_webservice.run -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/test/test_webservice.sh -text
+SAS/ResourceAssignment/Services/test/tJobsToSchedule.in_correlator -text
 SAS/ResourceAssignment/Services/test/tJobsToSchedule.in_preprocessing -text
 SAS/ResourceAssignment/Services/test/tJobsToSchedule.sh eol=lf
 SAS/Scheduler/src/.default_settings.set -text
diff --git a/SAS/ResourceAssignment/Services/test/tJobsToSchedule.in_correlator b/SAS/ResourceAssignment/Services/test/tJobsToSchedule.in_correlator
new file mode 100644
index 0000000000000000000000000000000000000000..065b4a4adcfe512ed30602d7f4a5080e579e40c0
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/test/tJobsToSchedule.in_correlator
@@ -0,0 +1,356 @@
+ApplCtrl.application=CorrAppl
+ApplCtrl.processes=[CorrProc]
+ApplCtrl.resultfile=/opt/lofar/var/run/ACC_CCU001:OnlineControl[0]{427282}_CorrAppl_result.param
+Cobalt.BeamFormer.CoherentStokes.nrChannelsPerSubband=1
+Cobalt.BeamFormer.CoherentStokes.subbandsPerFile=512
+Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor=1
+Cobalt.BeamFormer.CoherentStokes.which=I
+Cobalt.BeamFormer.IncoherentStokes.nrChannelsPerSubband=1
+Cobalt.BeamFormer.IncoherentStokes.subbandsPerFile=512
+Cobalt.BeamFormer.IncoherentStokes.timeIntegrationFactor=1
+Cobalt.BeamFormer.IncoherentStokes.which=I
+Cobalt.BeamFormer.coherentDedisperseChannels=false
+Cobalt.BeamFormer.flysEye=false
+Cobalt.Correlator.integrationTime=1.00139
+Cobalt.Correlator.nrBlocksPerIntegration=1
+Cobalt.Correlator.nrChannelsPerSubband=64
+Cobalt.Correlator.nrIntegrationsPerBlock=1
+Cobalt.blockSize=195584
+Cobalt.correctBandPass=true
+Cobalt.correctClocks=true
+Cobalt.delayCompensation=true
+Cobalt.realTime=true
+CorrAppl.CorrProc._executable=CN_Processing
+CorrAppl.CorrProc._hostname=cbmmaster
+CorrAppl.CorrProc._nodes=[]
+CorrAppl.CorrProc._startstopType=bgl
+CorrAppl.CorrProc.workingdir=/opt/lofar/bin/
+CorrAppl._hostname=cbmmaster
+CorrAppl.extraInfo=["PIC","Cobalt"]
+CorrAppl.procesOrder=[]
+CorrAppl.processes=["CorrProc"]
+Observation.AnaBeam[0].angle1=3.71468
+Observation.AnaBeam[0].angle2=0.91111
+Observation.AnaBeam[0].directionType=J2000
+Observation.AnaBeam[0].duration=0
+Observation.AnaBeam[0].rank=1
+Observation.AnaBeam[0].startTime=0
+Observation.AnaBeam[0].target=
+Observation.Beam[0].TiedArrayBeam.angle1=0
+Observation.Beam[0].TiedArrayBeam.angle2=0
+Observation.Beam[0].TiedArrayBeam.coherent=true
+Observation.Beam[0].TiedArrayBeam.directionType=J2000
+Observation.Beam[0].TiedArrayBeam.dispersionMeasure=0
+Observation.Beam[0].angle1=3.71468
+Observation.Beam[0].angle2=0.91111
+Observation.Beam[0].directionType=J2000
+Observation.Beam[0].duration=0
+Observation.Beam[0].momID=0
+Observation.Beam[0].nrTabRings=0
+Observation.Beam[0].nrTiedArrayBeams=0
+Observation.Beam[0].startTime=0
+Observation.Beam[0].subbandList=[52..255]
+Observation.Beam[0].tabRingSize=0
+Observation.Beam[0].target=3C 295
+Observation.Campaign.CO_I=""
+Observation.Campaign.PI="Pizzo, Dr. Roberto Francesco"
+Observation.Campaign.contact="Pizzo, Dr. Roberto Francesco"
+Observation.Campaign.name="2015LOFAROBS_new"
+Observation.Campaign.title="2015LOFAROBS_new"
+Observation.DataProducts.Input_CoherentStokes.dirmask=
+Observation.DataProducts.Input_CoherentStokes.enabled=false
+Observation.DataProducts.Input_CoherentStokes.filenames=[]
+Observation.DataProducts.Input_CoherentStokes.identifications=[]
+Observation.DataProducts.Input_CoherentStokes.locations=[]
+Observation.DataProducts.Input_CoherentStokes.mountpoints=[]
+Observation.DataProducts.Input_CoherentStokes.namemask=
+Observation.DataProducts.Input_CoherentStokes.skip=[]
+Observation.DataProducts.Input_Correlated.dirmask=
+Observation.DataProducts.Input_Correlated.enabled=false
+Observation.DataProducts.Input_Correlated.filenames=[]
+Observation.DataProducts.Input_Correlated.identifications=[]
+Observation.DataProducts.Input_Correlated.locations=[]
+Observation.DataProducts.Input_Correlated.mountpoints=[]
+Observation.DataProducts.Input_Correlated.namemask=
+Observation.DataProducts.Input_Correlated.skip=[]
+Observation.DataProducts.Input_IncoherentStokes.dirmask=
+Observation.DataProducts.Input_IncoherentStokes.enabled=false
+Observation.DataProducts.Input_IncoherentStokes.filenames=[]
+Observation.DataProducts.Input_IncoherentStokes.identifications=[]
+Observation.DataProducts.Input_IncoherentStokes.locations=[]
+Observation.DataProducts.Input_IncoherentStokes.mountpoints=[]
+Observation.DataProducts.Input_IncoherentStokes.namemask=
+Observation.DataProducts.Input_IncoherentStokes.skip=[]
+Observation.DataProducts.Input_InstrumentModel.dirmask=
+Observation.DataProducts.Input_InstrumentModel.enabled=false
+Observation.DataProducts.Input_InstrumentModel.filenames=[]
+Observation.DataProducts.Input_InstrumentModel.identifications=[]
+Observation.DataProducts.Input_InstrumentModel.locations=[]
+Observation.DataProducts.Input_InstrumentModel.mountpoints=[]
+Observation.DataProducts.Input_InstrumentModel.namemask=
+Observation.DataProducts.Input_InstrumentModel.skip=[]
+Observation.DataProducts.Input_SkyImage.dirmask=
+Observation.DataProducts.Input_SkyImage.enabled=false
+Observation.DataProducts.Input_SkyImage.filenames=[]
+Observation.DataProducts.Input_SkyImage.identifications=[]
+Observation.DataProducts.Input_SkyImage.locations=[]
+Observation.DataProducts.Input_SkyImage.mountpoints=[]
+Observation.DataProducts.Input_SkyImage.namemask=
+Observation.DataProducts.Input_SkyImage.skip=[]
+Observation.DataProducts.Output_CoherentStokes.archived=false
+Observation.DataProducts.Output_CoherentStokes.deleted=false
+Observation.DataProducts.Output_CoherentStokes.dirmask=
+Observation.DataProducts.Output_CoherentStokes.enabled=false
+Observation.DataProducts.Output_CoherentStokes.filenames=[]
+Observation.DataProducts.Output_CoherentStokes.identifications=[]
+Observation.DataProducts.Output_CoherentStokes.locations=[]
+Observation.DataProducts.Output_CoherentStokes.mountpoints=[]
+Observation.DataProducts.Output_CoherentStokes.namemask=
+Observation.DataProducts.Output_CoherentStokes.percentageWritten=[]
+Observation.DataProducts.Output_CoherentStokes.retentiontime=14
+Observation.DataProducts.Output_CoherentStokes.skip=[]
+Observation.DataProducts.Output_Correlated.archived=false
+Observation.DataProducts.Output_Correlated.deleted=false
+Observation.DataProducts.Output_Correlated.dirmask=L${OBSID}
+Observation.DataProducts.Output_Correlated.enabled=true
+Observation.DataProducts.Output_Correlated.filenames=[L427282_SAP000_SB000_uv.MS,L427282_SAP000_SB001_uv.MS,L427282_SAP000_SB002_uv.MS,L427282_SAP000_SB003_uv.MS,L427282_SAP000_SB004_uv.MS,L427282_SAP000_SB005_uv.MS,L427282_SAP000_SB006_uv.MS,L427282_SAP000_SB007_uv.MS,L427282_SAP000_SB008_uv.MS,L427282_SAP000_SB009_uv.MS,L427282_SAP000_SB010_uv.MS,L427282_SAP000_SB011_uv.MS,L427282_SAP000_SB012_uv.MS,L427282_SAP000_SB013_uv.MS,L427282_SAP000_SB014_uv.MS,L427282_SAP000_SB015_uv.MS,L427282_SAP000_SB016_uv.MS,L427282_SAP000_SB017_uv.MS,L427282_SAP000_SB018_uv.MS,L427282_SAP000_SB019_uv.MS,L427282_SAP000_SB020_uv.MS,L427282_SAP000_SB021_uv.MS,L427282_SAP000_SB022_uv.MS,L427282_SAP000_SB023_uv.MS,L427282_SAP000_SB024_uv.MS,L427282_SAP000_SB025_uv.MS,L427282_SAP000_SB026_uv.MS,L427282_SAP000_SB027_uv.MS,L427282_SAP000_SB028_uv.MS,L427282_SAP000_SB029_uv.MS,L427282_SAP000_SB030_uv.MS,L427282_SAP000_SB031_uv.MS,L427282_SAP000_SB032_uv.MS,L427282_SAP000_SB033_uv.MS,L427282_SAP000_SB034_uv.MS,L427282_SAP000_SB035_uv.MS,L427282_SAP000_SB036_uv.MS,L427282_SAP000_SB037_uv.MS,L427282_SAP000_SB038_uv.MS,L427282_SAP000_SB039_uv.MS,L427282_SAP000_SB040_uv.MS,L427282_SAP000_SB041_uv.MS,L427282_SAP000_SB042_uv.MS,L427282_SAP000_SB043_uv.MS,L427282_SAP000_SB044_uv.MS,L427282_SAP000_SB045_uv.MS,L427282_SAP000_SB046_uv.MS,L427282_SAP000_SB047_uv.MS,L427282_SAP000_SB048_uv.MS,L427282_SAP000_SB049_uv.MS,L427282_SAP000_SB050_uv.MS,L427282_SAP000_SB051_uv.MS,L427282_SAP000_SB052_uv.MS,L427282_SAP000_SB053_uv.MS,L427282_SAP000_SB054_uv.MS,L427282_SAP000_SB055_uv.MS,L427282_SAP000_SB056_uv.MS,L427282_SAP000_SB057_uv.MS,L427282_SAP000_SB058_uv.MS,L427282_SAP000_SB059_uv.MS,L427282_SAP000_SB060_uv.MS,L427282_SAP000_SB061_uv.MS,L427282_SAP000_SB062_uv.MS,L427282_SAP000_SB063_uv.MS,L427282_SAP000_SB064_uv.MS,L427282_SAP000_SB065_uv.MS,L427282_SAP000_SB066_uv.MS,L427282_SAP000_SB067_uv.MS,L427282_SAP000_SB068_uv.MS,L427282_SAP000_SB069_uv.MS,L427282_SAP000_SB070_uv.MS,L427282_SAP000_SB071_uv.MS,L427282_SAP000_SB072_uv.MS,L427282_SAP000_SB073_uv.MS,L427282_SAP000_SB074_uv.MS,L427282_SAP000_SB075_uv.MS,L427282_SAP000_SB076_uv.MS,L427282_SAP000_SB077_uv.MS,L427282_SAP000_SB078_uv.MS,L427282_SAP000_SB079_uv.MS,L427282_SAP000_SB080_uv.MS,L427282_SAP000_SB081_uv.MS,L427282_SAP000_SB082_uv.MS,L427282_SAP000_SB083_uv.MS,L427282_SAP000_SB084_uv.MS,L427282_SAP000_SB085_uv.MS,L427282_SAP000_SB086_uv.MS,L427282_SAP000_SB087_uv.MS,L427282_SAP000_SB088_uv.MS,L427282_SAP000_SB089_uv.MS,L427282_SAP000_SB090_uv.MS,L427282_SAP000_SB091_uv.MS,L427282_SAP000_SB092_uv.MS,L427282_SAP000_SB093_uv.MS,L427282_SAP000_SB094_uv.MS,L427282_SAP000_SB095_uv.MS,L427282_SAP000_SB096_uv.MS,L427282_SAP000_SB097_uv.MS,L427282_SAP000_SB098_uv.MS,L427282_SAP000_SB099_uv.MS,L427282_SAP000_SB100_uv.MS,L427282_SAP000_SB101_uv.MS,L427282_SAP000_SB102_uv.MS,L427282_SAP000_SB103_uv.MS,L427282_SAP000_SB104_uv.MS,L427282_SAP000_SB105_uv.MS,L427282_SAP000_SB106_uv.MS,L427282_SAP000_SB107_uv.MS,L427282_SAP000_SB108_uv.MS,L427282_SAP000_SB109_uv.MS,L427282_SAP000_SB110_uv.MS,L427282_SAP000_SB111_uv.MS,L427282_SAP000_SB112_uv.MS,L427282_SAP000_SB113_uv.MS,L427282_SAP000_SB114_uv.MS,L427282_SAP000_SB115_uv.MS,L427282_SAP000_SB116_uv.MS,L427282_SAP000_SB117_uv.MS,L427282_SAP000_SB118_uv.MS,L427282_SAP000_SB119_uv.MS,L427282_SAP000_SB120_uv.MS,L427282_SAP000_SB121_uv.MS,L427282_SAP000_SB122_uv.MS,L427282_SAP000_SB123_uv.MS,L427282_SAP000_SB124_uv.MS,L427282_SAP000_SB125_uv.MS,L427282_SAP000_SB126_uv.MS,L427282_SAP000_SB127_uv.MS,L427282_SAP000_SB128_uv.MS,L427282_SAP000_SB129_uv.MS,L427282_SAP000_SB130_uv.MS,L427282_SAP000_SB131_uv.MS,L427282_SAP000_SB132_uv.MS,L427282_SAP000_SB133_uv.MS,L427282_SAP000_SB134_uv.MS,L427282_SAP000_SB135_uv.MS,L427282_SAP000_SB136_uv.MS,L427282_SAP000_SB137_uv.MS,L427282_SAP000_SB138_uv.MS,L427282_SAP000_SB139_uv.MS,L427282_SAP000_SB140_uv.MS,L427282_SAP000_SB141_uv.MS,L427282_SAP000_SB142_uv.MS,L427282_SAP000_SB143_uv.MS,L427282_SAP000_SB144_uv.MS,L427282_SAP000_SB145_uv.MS,L427282_SAP000_SB146_uv.MS,L427282_SAP000_SB147_uv.MS,L427282_SAP000_SB148_uv.MS,L427282_SAP000_SB149_uv.MS,L427282_SAP000_SB150_uv.MS,L427282_SAP000_SB151_uv.MS,L427282_SAP000_SB152_uv.MS,L427282_SAP000_SB153_uv.MS,L427282_SAP000_SB154_uv.MS,L427282_SAP000_SB155_uv.MS,L427282_SAP000_SB156_uv.MS,L427282_SAP000_SB157_uv.MS,L427282_SAP000_SB158_uv.MS,L427282_SAP000_SB159_uv.MS,L427282_SAP000_SB160_uv.MS,L427282_SAP000_SB161_uv.MS,L427282_SAP000_SB162_uv.MS,L427282_SAP000_SB163_uv.MS,L427282_SAP000_SB164_uv.MS,L427282_SAP000_SB165_uv.MS,L427282_SAP000_SB166_uv.MS,L427282_SAP000_SB167_uv.MS,L427282_SAP000_SB168_uv.MS,L427282_SAP000_SB169_uv.MS,L427282_SAP000_SB170_uv.MS,L427282_SAP000_SB171_uv.MS,L427282_SAP000_SB172_uv.MS,L427282_SAP000_SB173_uv.MS,L427282_SAP000_SB174_uv.MS,L427282_SAP000_SB175_uv.MS,L427282_SAP000_SB176_uv.MS,L427282_SAP000_SB177_uv.MS,L427282_SAP000_SB178_uv.MS,L427282_SAP000_SB179_uv.MS,L427282_SAP000_SB180_uv.MS,L427282_SAP000_SB181_uv.MS,L427282_SAP000_SB182_uv.MS,L427282_SAP000_SB183_uv.MS,L427282_SAP000_SB184_uv.MS,L427282_SAP000_SB185_uv.MS,L427282_SAP000_SB186_uv.MS,L427282_SAP000_SB187_uv.MS,L427282_SAP000_SB188_uv.MS,L427282_SAP000_SB189_uv.MS,L427282_SAP000_SB190_uv.MS,L427282_SAP000_SB191_uv.MS,L427282_SAP000_SB192_uv.MS,L427282_SAP000_SB193_uv.MS,L427282_SAP000_SB194_uv.MS,L427282_SAP000_SB195_uv.MS,L427282_SAP000_SB196_uv.MS,L427282_SAP000_SB197_uv.MS,L427282_SAP000_SB198_uv.MS,L427282_SAP000_SB199_uv.MS,L427282_SAP000_SB200_uv.MS,L427282_SAP000_SB201_uv.MS,L427282_SAP000_SB202_uv.MS,L427282_SAP000_SB203_uv.MS]
+Observation.DataProducts.Output_Correlated.identifications=[]
+Observation.DataProducts.Output_Correlated.locations=[locus001:/data/L427282/,locus004:/data/L427282/,locus005:/data/L427282/,locus006:/data/L427282/,locus007:/data/L427282/,locus008:/data/L427282/,locus009:/data/L427282/,locus010:/data/L427282/,locus011:/data/L427282/,locus012:/data/L427282/,locus014:/data/L427282/,locus016:/data/L427282/,locus017:/data/L427282/,locus018:/data/L427282/,locus020:/data/L427282/,locus021:/data/L427282/,locus023:/data/L427282/,locus025:/data/L427282/,locus026:/data/L427282/,locus027:/data/L427282/,locus028:/data/L427282/,locus029:/data/L427282/,locus031:/data/L427282/,locus032:/data/L427282/,locus034:/data/L427282/,locus035:/data/L427282/,locus036:/data/L427282/,locus037:/data/L427282/,locus038:/data/L427282/,locus039:/data/L427282/,locus040:/data/L427282/,locus041:/data/L427282/,locus042:/data/L427282/,locus043:/data/L427282/,locus044:/data/L427282/,locus045:/data/L427282/,locus046:/data/L427282/,locus047:/data/L427282/,locus048:/data/L427282/,locus049:/data/L427282/,locus050:/data/L427282/,locus051:/data/L427282/,locus052:/data/L427282/,locus053:/data/L427282/,locus054:/data/L427282/,locus055:/data/L427282/,locus056:/data/L427282/,locus057:/data/L427282/,locus058:/data/L427282/,locus060:/data/L427282/,locus061:/data/L427282/,locus062:/data/L427282/,locus063:/data/L427282/,locus064:/data/L427282/,locus065:/data/L427282/,locus066:/data/L427282/,locus067:/data/L427282/,locus068:/data/L427282/,locus069:/data/L427282/,locus070:/data/L427282/,locus071:/data/L427282/,locus072:/data/L427282/,locus073:/data/L427282/,locus074:/data/L427282/,locus075:/data/L427282/,locus076:/data/L427282/,locus077:/data/L427282/,locus078:/data/L427282/,locus079:/data/L427282/,locus080:/data/L427282/,locus081:/data/L427282/,locus082:/data/L427282/,locus084:/data/L427282/,locus085:/data/L427282/,locus086:/data/L427282/,locus087:/data/L427282/,locus088:/data/L427282/,locus089:/data/L427282/,locus090:/data/L427282/,locus091:/data/L427282/,locus001:/data/L427282/,locus004:/data/L427282/,locus005:/data/L427282/,locus006:/data/L427282/,locus007:/data/L427282/,locus008:/data/L427282/,locus009:/data/L427282/,locus010:/data/L427282/,locus011:/data/L427282/,locus012:/data/L427282/,locus014:/data/L427282/,locus016:/data/L427282/,locus017:/data/L427282/,locus018:/data/L427282/,locus020:/data/L427282/,locus021:/data/L427282/,locus023:/data/L427282/,locus025:/data/L427282/,locus026:/data/L427282/,locus027:/data/L427282/,locus028:/data/L427282/,locus029:/data/L427282/,locus031:/data/L427282/,locus032:/data/L427282/,locus034:/data/L427282/,locus035:/data/L427282/,locus036:/data/L427282/,locus037:/data/L427282/,locus038:/data/L427282/,locus039:/data/L427282/,locus040:/data/L427282/,locus041:/data/L427282/,locus042:/data/L427282/,locus043:/data/L427282/,locus044:/data/L427282/,locus045:/data/L427282/,locus046:/data/L427282/,locus047:/data/L427282/,locus048:/data/L427282/,locus049:/data/L427282/,locus050:/data/L427282/,locus051:/data/L427282/,locus052:/data/L427282/,locus053:/data/L427282/,locus054:/data/L427282/,locus055:/data/L427282/,locus056:/data/L427282/,locus057:/data/L427282/,locus058:/data/L427282/,locus060:/data/L427282/,locus061:/data/L427282/,locus062:/data/L427282/,locus063:/data/L427282/,locus064:/data/L427282/,locus065:/data/L427282/,locus066:/data/L427282/,locus067:/data/L427282/,locus068:/data/L427282/,locus069:/data/L427282/,locus070:/data/L427282/,locus071:/data/L427282/,locus072:/data/L427282/,locus073:/data/L427282/,locus074:/data/L427282/,locus075:/data/L427282/,locus076:/data/L427282/,locus077:/data/L427282/,locus078:/data/L427282/,locus079:/data/L427282/,locus080:/data/L427282/,locus081:/data/L427282/,locus082:/data/L427282/,locus084:/data/L427282/,locus085:/data/L427282/,locus086:/data/L427282/,locus087:/data/L427282/,locus088:/data/L427282/,locus089:/data/L427282/,locus090:/data/L427282/,locus091:/data/L427282/,locus001:/data/L427282/,locus004:/data/L427282/,locus005:/data/L427282/,locus006:/data/L427282/,locus007:/data/L427282/,locus008:/data/L427282/,locus009:/data/L427282/,locus010:/data/L427282/,locus011:/data/L427282/,locus012:/data/L427282/,locus014:/data/L427282/,locus016:/data/L427282/,locus017:/data/L427282/,locus018:/data/L427282/,locus020:/data/L427282/,locus021:/data/L427282/,locus023:/data/L427282/,locus025:/data/L427282/,locus026:/data/L427282/,locus027:/data/L427282/,locus028:/data/L427282/,locus029:/data/L427282/,locus031:/data/L427282/,locus032:/data/L427282/,locus034:/data/L427282/,locus035:/data/L427282/,locus036:/data/L427282/,locus037:/data/L427282/,locus038:/data/L427282/,locus039:/data/L427282/,locus040:/data/L427282/,locus041:/data/L427282/,locus042:/data/L427282/,locus043:/data/L427282/,locus044:/data/L427282/,locus045:/data/L427282/,locus046:/data/L427282/,locus047:/data/L427282/,locus048:/data/L427282/,locus049:/data/L427282/,locus050:/data/L427282/,locus051:/data/L427282/,locus052:/data/L427282/,locus053:/data/L427282/]
+Observation.DataProducts.Output_Correlated.mountpoints=[locus001:/data,locus004:/data,locus005:/data,locus006:/data,locus007:/data,locus008:/data,locus009:/data,locus010:/data,locus011:/data,locus012:/data,locus014:/data,locus016:/data,locus017:/data,locus018:/data,locus020:/data,locus021:/data,locus023:/data,locus025:/data,locus026:/data,locus027:/data,locus028:/data,locus029:/data,locus031:/data,locus032:/data,locus034:/data,locus035:/data,locus036:/data,locus037:/data,locus038:/data,locus039:/data,locus040:/data,locus041:/data,locus042:/data,locus043:/data,locus044:/data,locus045:/data,locus046:/data,locus047:/data,locus048:/data,locus049:/data,locus050:/data,locus051:/data,locus052:/data,locus053:/data,locus054:/data,locus055:/data,locus056:/data,locus057:/data,locus058:/data,locus060:/data,locus061:/data,locus062:/data,locus063:/data,locus064:/data,locus065:/data,locus066:/data,locus067:/data,locus068:/data,locus069:/data,locus070:/data,locus071:/data,locus072:/data,locus073:/data,locus074:/data,locus075:/data,locus076:/data,locus077:/data,locus078:/data,locus079:/data,locus080:/data,locus081:/data,locus082:/data,locus084:/data,locus085:/data,locus086:/data,locus087:/data,locus088:/data,locus089:/data,locus090:/data,locus091:/data]
+Observation.DataProducts.Output_Correlated.namemask=L${OBSID}_SAP${SAP}_SB${SUBBAND}_uv.MS
+Observation.DataProducts.Output_Correlated.percentageWritten=[]
+Observation.DataProducts.Output_Correlated.retentiontime=14
+Observation.DataProducts.Output_Correlated.skip=[]
+Observation.DataProducts.Output_IncoherentStokes.archived=false
+Observation.DataProducts.Output_IncoherentStokes.deleted=false
+Observation.DataProducts.Output_IncoherentStokes.dirmask=
+Observation.DataProducts.Output_IncoherentStokes.enabled=false
+Observation.DataProducts.Output_IncoherentStokes.filenames=[]
+Observation.DataProducts.Output_IncoherentStokes.identifications=[]
+Observation.DataProducts.Output_IncoherentStokes.locations=[]
+Observation.DataProducts.Output_IncoherentStokes.mountpoints=[]
+Observation.DataProducts.Output_IncoherentStokes.namemask=
+Observation.DataProducts.Output_IncoherentStokes.percentageWritten=[]
+Observation.DataProducts.Output_IncoherentStokes.retentiontime=14
+Observation.DataProducts.Output_IncoherentStokes.skip=[]
+Observation.DataProducts.Output_InstrumentModel.archived=false
+Observation.DataProducts.Output_InstrumentModel.deleted=false
+Observation.DataProducts.Output_InstrumentModel.dirmask=
+Observation.DataProducts.Output_InstrumentModel.enabled=false
+Observation.DataProducts.Output_InstrumentModel.filenames=[]
+Observation.DataProducts.Output_InstrumentModel.identifications=[]
+Observation.DataProducts.Output_InstrumentModel.locations=[]
+Observation.DataProducts.Output_InstrumentModel.mountpoints=[]
+Observation.DataProducts.Output_InstrumentModel.namemask=
+Observation.DataProducts.Output_InstrumentModel.percentageWritten=[]
+Observation.DataProducts.Output_InstrumentModel.retentiontime=14
+Observation.DataProducts.Output_InstrumentModel.skip=[]
+Observation.DataProducts.Output_Pulsar.archived=false
+Observation.DataProducts.Output_Pulsar.deleted=false
+Observation.DataProducts.Output_Pulsar.dirmask=
+Observation.DataProducts.Output_Pulsar.enabled=false
+Observation.DataProducts.Output_Pulsar.filenames=[]
+Observation.DataProducts.Output_Pulsar.identifications=[]
+Observation.DataProducts.Output_Pulsar.locations=[]
+Observation.DataProducts.Output_Pulsar.mountpoints=[]
+Observation.DataProducts.Output_Pulsar.namemask=
+Observation.DataProducts.Output_Pulsar.percentageWritten=[]
+Observation.DataProducts.Output_Pulsar.retentiontime=14
+Observation.DataProducts.Output_Pulsar.skip=[]
+Observation.DataProducts.Output_SkyImage.archived=false
+Observation.DataProducts.Output_SkyImage.deleted=false
+Observation.DataProducts.Output_SkyImage.dirmask=
+Observation.DataProducts.Output_SkyImage.enabled=false
+Observation.DataProducts.Output_SkyImage.filenames=[]
+Observation.DataProducts.Output_SkyImage.identifications=[]
+Observation.DataProducts.Output_SkyImage.locations=[]
+Observation.DataProducts.Output_SkyImage.mountpoints=[]
+Observation.DataProducts.Output_SkyImage.namemask=
+Observation.DataProducts.Output_SkyImage.percentageWritten=[]
+Observation.DataProducts.Output_SkyImage.retentiontime=14
+Observation.DataProducts.Output_SkyImage.skip=[]
+Observation.Dataslots.CS001HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS001HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS002HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS002HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS003HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS003HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS004HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS004HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS005HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS005HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS006HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS006HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS007HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS007HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS011HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS011HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS013HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS013HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS017HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS017HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS021HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS021HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS024HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS024HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS026HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS026HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS028HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS028HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS030HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS030HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS031HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS031HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS032HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS032HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS101HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS101HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS103HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS103HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS201HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS201HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS301HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS301HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS302HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS302HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS401HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS401HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.CS501HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.CS501HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.DataslotInfo.DataslotList=[]
+Observation.Dataslots.DataslotInfo.RSPBoardList=[]
+Observation.Dataslots.RS106HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS106HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS205HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS205HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS208HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS208HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS210HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS210HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS305HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS305HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS306HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS306HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS307HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS307HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS310HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS310HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS406HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS406HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS407HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS407HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS409HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS409HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS503HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS503HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.Dataslots.RS508HBA.DataslotList=[0..60,0..60,0..60,0..20]
+Observation.Dataslots.RS508HBA.RSPBoardList=[61*0,61*1,61*2,21*3]
+Observation.ObsID=427282
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.CoherentStokes.nrChannelsPerSubband=1
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.CoherentStokes.subbandsPerFile=512
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor=1
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.CoherentStokes.which=I
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.IncoherentStokes.nrChannelsPerSubband=1
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.IncoherentStokes.subbandsPerFile=512
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.IncoherentStokes.timeIntegrationFactor=1
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.IncoherentStokes.which=I
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.coherentDedisperseChannels=false
+Observation.ObservationControl.OnlineControl.Cobalt.BeamFormer.flysEye=false
+Observation.ObservationControl.OnlineControl.Cobalt.Correlator.integrationTime=1.00139
+Observation.ObservationControl.OnlineControl.Cobalt.Correlator.nrBlocksPerIntegration=1
+Observation.ObservationControl.OnlineControl.Cobalt.Correlator.nrChannelsPerSubband=64
+Observation.ObservationControl.OnlineControl.Cobalt.Correlator.nrIntegrationsPerBlock=1
+Observation.ObservationControl.OnlineControl.Cobalt.blockSize=195584
+Observation.ObservationControl.OnlineControl.Cobalt.correctBandPass=true
+Observation.ObservationControl.OnlineControl.Cobalt.correctClocks=true
+Observation.ObservationControl.OnlineControl.Cobalt.delayCompensation=true
+Observation.ObservationControl.OnlineControl.Cobalt.realTime=true
+Observation.ObservationControl.OnlineControl.CorrAppl.CorrProc._executable=CN_Processing
+Observation.ObservationControl.OnlineControl.CorrAppl.CorrProc._hostname=cbmmaster
+Observation.ObservationControl.OnlineControl.CorrAppl.CorrProc._nodes=[]
+Observation.ObservationControl.OnlineControl.CorrAppl.CorrProc._startstopType=bgl
+Observation.ObservationControl.OnlineControl.CorrAppl.CorrProc.workingdir=/opt/lofar/bin/
+Observation.ObservationControl.OnlineControl.CorrAppl._hostname=cbmmaster
+Observation.ObservationControl.OnlineControl.CorrAppl.extraInfo=["PIC","Cobalt"]
+Observation.ObservationControl.OnlineControl.CorrAppl.procesOrder=[]
+Observation.ObservationControl.OnlineControl.CorrAppl.processes=["CorrProc"]
+Observation.ObservationControl.OnlineControl._hostname=CCU001
+Observation.ObservationControl.OnlineControl.applOrder=["CorrAppl"]
+Observation.ObservationControl.OnlineControl.applications=["CorrAppl"]
+Observation.ObservationControl.OnlineControl.inspectionHost=lhn001.cep2.lofar
+Observation.ObservationControl.OnlineControl.inspectionProgram=/opt/cep/pyautoplot/bin/launch-msplots.sh
+Observation.ObservationControl.StationControl.TBBControl.CoincidenceTime=0
+Observation.ObservationControl.StationControl.TBBControl.DoDirectionFit=none
+Observation.ObservationControl.StationControl.TBBControl.MaxFitVariance=0
+Observation.ObservationControl.StationControl.TBBControl.MinElevation=0
+Observation.ObservationControl.StationControl.TBBControl.NoCoincChann=0
+Observation.ObservationControl.StationControl.TBBControl.ParamExtension=
+Observation.ObservationControl.StationControl._hostname=[CS001,CS002,CS003,CS004,CS005,CS006,CS007,CS011,CS013,CS017,CS021,CS024,CS026,CS028,CS030,CS031,CS032,CS101,CS103,CS201,CS301,CS302,CS401,CS501,RS106,RS205,RS208,RS210,RS305,RS306,RS307,RS310,RS406,RS407,RS409,RS503,RS508]
+Observation.ObservationControl.StationControl.aartfaacPiggybackAllowed=true
+Observation.ObservationControl.StationControl.tbbPiggybackAllowed=true
+Observation.ObservationControl._hostname=MCU001
+Observation.ObservationControl.heartbeatInterval=10
+Observation.Scheduler.contactEmail=
+Observation.Scheduler.contactName=Pizzo, Dr. Roberto Francesco
+Observation.Scheduler.contactPhone=
+Observation.Scheduler.firstPossibleDay=5864
+Observation.Scheduler.fixedDay=false
+Observation.Scheduler.fixedTime=false
+Observation.Scheduler.lastPossibleDay=6049
+Observation.Scheduler.late=
+Observation.Scheduler.nightTimeWeightFactor=4
+Observation.Scheduler.predMaxTimeDif=0000:00:00
+Observation.Scheduler.predMinTimeDif=0000:00:00
+Observation.Scheduler.predecessors=[]
+Observation.Scheduler.priority=0
+Observation.Scheduler.reason=
+Observation.Scheduler.referenceFrame=J2000
+Observation.Scheduler.reservation=0
+Observation.Scheduler.storageSelectionMode=1
+Observation.Scheduler.taskDuration=120
+Observation.Scheduler.taskID=532
+Observation.Scheduler.taskName=(copy of) (copy of) XC HBA_JOINED
+Observation.Scheduler.taskType=0
+Observation.Scheduler.windowMaximumTime=23:59:59
+Observation.Scheduler.windowMinimumTime=00:00:00
+Observation.TBB.TBBsetting.RCUs=[]
+Observation.TBB.TBBsetting.baselevel=127
+Observation.TBB.TBBsetting.filter=0
+Observation.TBB.TBBsetting.filter0_coeff0=0
+Observation.TBB.TBBsetting.filter0_coeff1=0
+Observation.TBB.TBBsetting.filter0_coeff2=0
+Observation.TBB.TBBsetting.filter0_coeff3=0
+Observation.TBB.TBBsetting.filter1_coeff0=0
+Observation.TBB.TBBsetting.filter1_coeff1=0
+Observation.TBB.TBBsetting.filter1_coeff2=0
+Observation.TBB.TBBsetting.filter1_coeff3=0
+Observation.TBB.TBBsetting.operatingMode=1
+Observation.TBB.TBBsetting.startlevel=7
+Observation.TBB.TBBsetting.stoplevel=7
+Observation.TBB.TBBsetting.subbandList=[]
+Observation.TBB.TBBsetting.triggerMode=1
+Observation.TBB.TBBsetting.window=1M
+Observation.VirtualInstrument.minimalNrStations=1
+Observation.VirtualInstrument.stationList=[CS001,CS002,CS003,CS004,CS005,CS006,CS007,CS011,CS013,CS017,CS021,CS024,CS026,CS028,CS030,CS031,CS032,CS101,CS103,CS201,CS301,CS302,CS401,CS501,RS106,RS205,RS208,RS210,RS305,RS306,RS307,RS310,RS406,RS407,RS409,RS503,RS508]
+Observation.VirtualInstrument.stationSet=
+Observation.antennaArray=HBA
+Observation.antennaSet=HBA_JOINED
+Observation.bandFilter=HBA_210_250
+Observation.claimPeriod=35
+Observation.clockMode=<<Clock200
+Observation.momID=0
+Observation.nrAnaBeams=1
+Observation.nrBeams=1
+Observation.nrBitsPerSample=16
+Observation.nrTBBSettings=0
+Observation.originID=254020
+Observation.otdbID=427282
+Observation.preparePeriod=20
+Observation.processSubtype=Beam Observation
+Observation.processType=Observation
+Observation.sampleClock=200
+Observation.startTime=2016-01-21 14:30:00
+Observation.stopTime=2016-01-21 14:32:00
+Observation.strategy=default
+Observation.topologyID=
+_DPname=LOFAR_ObsSW_TempObs0054
diff --git a/SAS/ResourceAssignment/Services/test/tJobsToSchedule.py b/SAS/ResourceAssignment/Services/test/tJobsToSchedule.py
index eba12c9f22ff4426fccb04393d7ad227fcc0e48d..6331ea9bde02d2e5c77c8ff1ceec6266a384a661 100644
--- a/SAS/ResourceAssignment/Services/test/tJobsToSchedule.py
+++ b/SAS/ResourceAssignment/Services/test/tJobsToSchedule.py
@@ -49,6 +49,12 @@ def parset_as_dict(filename):
 
 
 class TestResourceIndicators(unittest.TestCase):
+  """
+    The spec for the resource indicators is a draft at this point,
+    and the output is quite extensive (many parset keys), so
+    verification of the output is pending.
+  """
+
   def test_preprocessing_pipeline(self):
     parset = parset_as_dict("tJobsToSchedule.in_preprocessing")
     r = resourceIndicatorsFromParset(parset)
@@ -59,19 +65,20 @@ class TestResourceIndicators(unittest.TestCase):
 
 
 class TestService(unittest.TestCase):
-  def test(self):
-    """
-      Request the resources for a simulated obsid 1, with the following predecessor tree:
+  def setUp(self):
+    # Create a random bus
+    self.busname = "%s-%s" % (sys.argv[0], str(uuid.uuid4())[:8])
+    self.bus = ToBus(self.busname + '; { create: "always", delete: "always", node: { type: "topic" }}')
+    self.bus.open()
 
-        1 requires 2, 3
-        2 requires 3
-        3 requires nothing
-    """
+    # Define the services we use
+    self.status_service = "%s/TaskStatus" % (self.busname,)
+    self.parset_service = "%s/TaskSpecification" % (self.busname,)
+    self.jts_service    = "%s/TaskSpecified" % (self.busname,)
 
     # setup mock parset service
     def TaskSpecificationService( input_dict ):
       obsid = input_dict["OtdbID"]
-      print obsid
 
       if obsid == 1:
         predecessors = "[2,3]"
@@ -88,40 +95,82 @@ class TestService(unittest.TestCase):
         PARSET_PREFIX + "Observation.Scheduler.predecessors": predecessors,
       }
 
-    # Create a random bus
-    busname = "%s-%s" % (sys.argv[0], uuid.uuid4())
-    with ToBus(busname, options={ "create": "always", "delete": "always", "node": { "type": "topic" }}):
-      status_service = "%s/TaskStatus" % (busname,)
-      parset_service = "%s/TaskSpecification" % (busname,)
-      jts_service    = "%s/TaskSpecified" % (busname,)
-
-      # Setup our fake TaskSpecification server, and start our JobsToSchedule service to test
-      with Service("TaskSpecification", TaskSpecificationService, busname=busname):
-        with JobsToSchedule("TaskSpecified", otdb_busname=busname, my_busname=busname) as jts:
-          # Start listening for answer before we trigger it
-          with FromBus(jts_service) as fb:
-
-            # Send fake status update
-            with ToBus(status_service) as tb:
-              msg = EventMessage(content={
-                "treeID": 1,
-                "state": "prescheduled",
-                "time_of_change": "2016-01-01 00:00:00.00",
-              })
-              tb.send(msg)
-
-            # Wait for answer from service
-            result = fb.receive(1.0)
-            self.assertIsNotNone(result)
-
-            # Verify result
-            self.assertIn("sasID", result.content)
-            self.assertIn("resource_indicators", result.content)
-
-            self.assertEqual(result.content["sasID"], 1)
-            self.assertIn("1", result.content["resource_indicators"])
-            self.assertIn("2", result.content["resource_indicators"])
-            self.assertIn("3", result.content["resource_indicators"])
+
+    # Setup our fake TaskSpecification server, and start our JobsToSchedule service to test
+    self.parset_service = Service("TaskSpecification", TaskSpecificationService, busname=self.busname)
+    self.parset_service.start_listening()
+
+  def tearDown(self):
+    self.parset_service.stop_listening()
+    self.bus.close()
+
+  def testNoPredecessors(self):
+    """
+      Request the resources for a simulated obsid 3, with the following predecessor tree:
+
+        3 requires nothing
+    """
+
+    with JobsToSchedule("TaskSpecified", otdb_busname=self.busname, my_busname=self.busname) as jts:
+      # Start listening for answer before we trigger it
+      with FromBus(self.jts_service) as fb:
+
+        # Send fake status update
+        with ToBus(self.status_service) as tb:
+          msg = EventMessage(content={
+            "treeID": 3,
+            "state": "prescheduled",
+            "time_of_change": "2016-01-01 00:00:00.00",
+          })
+          tb.send(msg)
+
+        # Wait for answer from service
+        result = fb.receive(1.0)
+        self.assertIsNotNone(result)
+
+        # Verify result
+        self.assertIn("sasID", result.content)
+        self.assertIn("resource_indicators", result.content)
+
+        self.assertEqual(result.content["sasID"], 3)
+        self.assertNotIn("1", result.content["resource_indicators"])
+        self.assertNotIn("2", result.content["resource_indicators"])
+        self.assertIn("3", result.content["resource_indicators"])
+
+  def testPredecessors(self):
+    """
+      Request the resources for a simulated obsid 1, with the following predecessor tree:
+
+        1 requires 2, 3
+        2 requires 3
+        3 requires nothing
+    """
+
+    with JobsToSchedule("TaskSpecified", otdb_busname=self.busname, my_busname=self.busname) as jts:
+      # Start listening for answer before we trigger it
+      with FromBus(self.jts_service) as fb:
+
+        # Send fake status update
+        with ToBus(self.status_service) as tb:
+          msg = EventMessage(content={
+            "treeID": 1,
+            "state": "prescheduled",
+            "time_of_change": "2016-01-01 00:00:00.00",
+          })
+          tb.send(msg)
+
+        # Wait for answer from service
+        result = fb.receive(1.0)
+        self.assertIsNotNone(result)
+
+        # Verify result
+        self.assertIn("sasID", result.content)
+        self.assertIn("resource_indicators", result.content)
+
+        self.assertEqual(result.content["sasID"], 1)
+        self.assertIn("1", result.content["resource_indicators"])
+        self.assertIn("2", result.content["resource_indicators"])
+        self.assertIn("3", result.content["resource_indicators"])
 
 def main(argv):
   unittest.main(verbosity=2)