diff --git a/.gitattributes b/.gitattributes
index 34d86d8d058e1f3b8c7eeba11ef983f2a1274cde..6b28ff8e794f4209b00415d9c18102888d3bad5e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -4926,6 +4926,7 @@ SAS/OTDB/test/t_getTreeGroup.run -text
 SAS/OTDB/test/t_getTreeGroup.sh -text
 SAS/OTDB/test/unittest_db.dump.gz -text svneol=unset#application/x-gzip
 SAS/OTDB_Services/CMakeLists.txt -text
+SAS/OTDB_Services/OTDBBusListener.py -text
 SAS/OTDB_Services/OTDB_Services.ini -text
 SAS/OTDB_Services/TreeService.ini -text
 SAS/OTDB_Services/TreeService.py -text
@@ -4946,6 +4947,7 @@ SAS/ResourceAssignment/ResourceAssignmentEditor/bin/resourceassignementeditorweb
 SAS/ResourceAssignment/ResourceAssignmentEditor/config/CMakeLists.txt -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/config/__init__.py -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/config/default.py -text
+SAS/ResourceAssignment/ResourceAssignmentEditor/etc/resourceassignmenteditorwebservice.ini -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/lib/CMakeLists.txt -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/lib/__init__.py -text
 SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py -text
@@ -5087,6 +5089,11 @@ 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/src/rataskspecifiedservice -text
+SAS/ResourceAssignment/Services/src/rataskspecifiedservice.ini -text
+SAS/ResourceAssignment/Services/test/tRATaskSpecified.in_correlator -text
+SAS/ResourceAssignment/Services/test/tRATaskSpecified.in_preprocessing -text
+SAS/ResourceAssignment/Services/test/tRATaskSpecified.sh eol=lf
 SAS/Scheduler/src/.default_settings.set -text
 SAS/Scheduler/src/LOFAR_libScheduler.pro -text
 SAS/Scheduler/src/conflictdialog.ui -text
@@ -5346,6 +5353,7 @@ SubSystems/Online_Cobalt/validation/system/users/login-shell.test -text
 SubSystems/Online_Cobalt/validation/system/users/sudo.test eol=lf
 SubSystems/Online_Cobalt/validation/validate eol=lf
 SubSystems/RAServices/CMakeLists.txt -text
+SubSystems/RAServices/RAServices.ini -text
 SubSystems/SAS_Tools/CMakeLists.txt -text
 /jenkins_make -text
 /lofar_config.h.cmake -text
diff --git a/CMake/LofarPackageList.cmake b/CMake/LofarPackageList.cmake
index d73cd29ea2ec2a467357e18851a3792aef525bd3..a46926638910bc79afd5a1ce9573f7cb064699c9 100644
--- a/CMake/LofarPackageList.cmake
+++ b/CMake/LofarPackageList.cmake
@@ -1,7 +1,7 @@
 # - Create for each LOFAR package a variable containing the absolute path to
 # its source directory. 
 #
-# Generated by gen_LofarPackageList_cmake.sh at Wed Jan 20 09:55:03 UTC 2016
+# Generated by gen_LofarPackageList_cmake.sh at wo feb  3 15:36:28 CET 2016
 #
 #                      ---- DO NOT EDIT ----
 #
@@ -142,10 +142,12 @@ if(NOT DEFINED LOFAR_PACKAGE_LIST_INCLUDED)
   set(SAS_Feedback_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/Feedback_Service)
   set(CleanupTool_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/CleanupTool)
   set(OTDB_Services_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/OTDB_Services)
+  set(XML_generator_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/XML_generator)
+  set(MoMQueryService_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/MoM/MoMQueryService)
   set(jOTDB3_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/OTB/jOTDB3)
   set(OTB-Java_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/OTB/OTB)
-  set(XML_generator_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/XML_generator)
   set(ResourceAssignmentEditor_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/ResourceAssignment/ResourceAssignmentEditor)
+  set(ResourceAssignmentServices_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SAS/ResourceAssignment/Services)
   set(CCU_MAC_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/CCU_MAC)
   set(LCU_MAC_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/LCU_MAC)
   set(MCU_MAC_SOURCE_DIR ${CMAKE_SOURCE_DIR}/SubSystems/MCU_MAC)
diff --git a/LCS/Messaging/python/messaging/RPC.py b/LCS/Messaging/python/messaging/RPC.py
index b35f524f84d034a82df6500e4e211c5eb303b415..5edf3daa6261e4e7a46adc91052da7ff8d0ce500 100644
--- a/LCS/Messaging/python/messaging/RPC.py
+++ b/LCS/Messaging/python/messaging/RPC.py
@@ -69,7 +69,7 @@ class RPC():
     As a side-effect the sender and session are destroyed.
 
     """
-    def __init__(self, service, **kwargs ):
+    def __init__(self, service, broker=None, **kwargs ):
         """
         Initialize an Remote procedure call using:
             service= <str>    Service Name
@@ -84,26 +84,41 @@ class RPC():
         self.ForwardExceptions = kwargs.pop("ForwardExceptions", False)
         self.Verbose           = kwargs.pop("Verbose", False)
         self.BusName           = kwargs.pop("busname", None)
-        self.ServiceName = service
+        self.ServiceName       = service
+        self.broker            = broker
         if self.BusName is None:
-            self.Request = ToBus(self.ServiceName)
+            self.Request = ToBus(self.ServiceName, broker=self.broker)
         else:
-            self.Request = ToBus("%s/%s" % (self.BusName, self.ServiceName))
+            self.Request = ToBus("%s/%s" % (self.BusName, self.ServiceName), broker=self.broker)
         if len(kwargs):
             raise AttributeError("Unexpected argument passed to RPC class: %s" %( kwargs ))
 
+    def open(self):
+        """
+        Start accepting requests.
+        """
+
+        self.Request.open()
+
+    def close(self):
+        """
+        Stop accepting requests.
+        """
+
+        self.Request.close()
+
     def __enter__(self):
         """
         Internal use only. (handles scope 'with')
         """
-        self.Request.open()
+        self.open()
         return self
 
     def __exit__(self, exc_type, exc_val, exc_tb):
         """
         Internal use only. (handles scope 'with')
         """
-        self.Request.close()
+        self.close()
 
     def __call__(self, *args, **kwargs):
         """
@@ -122,9 +137,9 @@ class RPC():
         options = {'create':'always','delete':'receiver'}
         ReplyAddress = "reply.%s" % (str(uuid.uuid4()))
         if self.BusName is None:
-            Reply = FromBus("%s ; %s" %(ReplyAddress,str(options)))
+            Reply = FromBus("%s ; %s" %(ReplyAddress,str(options)), broker=self.broker)
         else:
-            Reply = FromBus("%s/%s" % (self.BusName, ReplyAddress))
+            Reply = FromBus("%s/%s" % (self.BusName, ReplyAddress), broker=self.broker)
         with Reply:
             MyMsg = RequestMessage(content=Content, reply_to=ReplyAddress, has_args=HasArgs, has_kwargs=HasKwArgs)
             MyMsg.ttl = timeout
diff --git a/LCS/Messaging/python/messaging/Service.py b/LCS/Messaging/python/messaging/Service.py
index 3a7434a2a1c7a88bc75dd0ec9e7885fc6abf82b3..6d452c821eb588289c6906891aaea5033d232f59 100644
--- a/LCS/Messaging/python/messaging/Service.py
+++ b/LCS/Messaging/python/messaging/Service.py
@@ -20,8 +20,8 @@
 # with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
 #
 
-from .messagebus import ToBus,FromBus
-from .messages import ReplyMessage,RequestMessage
+from .messagebus import ToBus, FromBus, AbstractBusListener
+from .messages import ReplyMessage, RequestMessage
 import threading
 import time
 import uuid
@@ -78,8 +78,7 @@ class MessageHandlerInterface(object):
         pass
 
 
-# create service:
-class Service(object):
+class Service(AbstractBusListener):
     """
     Service class for registering python functions with a Service name on a message bus.
     create new service with Service(busname, servicename, servicehandler)
@@ -97,7 +96,7 @@ class Service(object):
                                is a class in stead of a function.
     """
 
-    def __init__(self, servicename, servicehandler, **kwargs):
+    def __init__(self, servicename, servicehandler, broker=None, **kwargs):
         """
         Initialize Service object with servicename (str) and servicehandler function.
         additional parameters:
@@ -109,120 +108,65 @@ class Service(object):
         """
         self.service_name     = servicename
         self.service_handler  = servicehandler
-        self.connected        = False
-        self.running          = [False]
-        self.link_uuid        = str(uuid.uuid4())
         self.busname          = kwargs.pop("busname", None)
-        self.exclusive        = kwargs.pop("exclusive", True)
-        self._numthreads      = kwargs.pop("numthreads", 1)
-        self.verbose          = kwargs.pop("verbose", False)
-        self.options          = {"capacity": self._numthreads*20}
-        options               = kwargs.pop("options", None)
         self.parsefullmessage = kwargs.pop("parsefullmessage", False)
         self.handler_args     = kwargs.pop("handler_args", {})
-        self.listening        = False
-        if len(kwargs):
-            raise AttributeError("Unexpected argument passed to Service class: %s", kwargs)
-
-        # Set appropriate flags for exclusive binding
-        if self.exclusive == True:
-            self.options["link"] = '{name:"' + self.link_uuid + \
-                                   '", x-bindings:[{key:' + self.service_name + \
-                                   ', arguments: {"qpid.exclusive-binding":True}}]}'
-
-        # only add options if it is given as a dictionary
-        if isinstance(options,dict):
-            for key,val in options.iteritems():
-                self.options[key] = val
-
-    def _debug(self, txt):
-        """
-        Internal use only.
-        """
-        if self.verbose == True:
-            logger.debug("[Service: %s]", txt)
+
+        address = self.busname+"/"+self.service_name if self.busname else self.service_name
+        kwargs["exclusive"] = True #set binding to exclusive for services
+
+        # Force the use of a topic in the bus options by setting
+        #   options["node"]["type"] = "topic"
+        options = kwargs.get("options", {})
+        options.setdefault("node", {})
+        options["node"]["type"] = "topic"
+        kwargs["options"] = options
+
+        super(Service, self).__init__(address, broker, **kwargs)
 
     def start_listening(self, numthreads=None):
         """
         Start the background threads and process incoming messages.
         """ 
-        if self.listening == True:
+        if self.isListening():
             return
 
         # Usually a service will be listening on a 'bus' implemented by a topic exchange
         if self.busname != None:
-            self.listener  = FromBus(self.busname+"/"+self.service_name, options=self.options)
             self.reply_bus = ToBus(self.busname)
-            self.listener.open()
             self.reply_bus.open()
-        # Handle case when queues are used
         else:
-            # assume that we are listening on a queue and therefore we cannot use a generic ToBus() for replies.
-            self.listener = FromBus(self.service_name, options=self.options)
-            self.listener.open()
             self.reply_bus=None
 
-        self.connected = True
-
-        if numthreads != None:
-            self._numthreads = numthreads
-
-        # use a list to ensure that threads always 'see' changes in the running state.
-        self.running = [ True ]
-        self._tr = []
-        self.reccounter = []
-        self.okcounter =[]
-        for i in range(self._numthreads):
-            # set up service_handler
-            if str(type(self.service_handler)) == "<type 'instancemethod'>" or \
-               str(type(self.service_handler)) == "<type 'function'>":
-                thread_service_handler = MessageHandlerInterface()
-                thread_service_handler.handle_message = self.service_handler
-            else:
-                thread_service_handler = self.service_handler(**self.handler_args)
-            if not isinstance(thread_service_handler, MessageHandlerInterface):
-                raise TypeError("Servicehandler argument must by a function or a derived class from MessageHandlerInterface.")
-
-            self._tr.append(threading.Thread(target=self._loop, 
-                                             kwargs={"index":i, "service_handler":thread_service_handler}))
-            self.reccounter.append(0)
-            self.okcounter.append(0)
-            self._tr[i].start()
-        self.listening = True
+        # create listener FromBus in super class
+        super(Service, self).start_listening(numthreads=numthreads)
 
     def stop_listening(self):
         """
         Stop the background threads that listen to incoming messages.
         """
-        # stop all running threads
-        if self.running[0] == True:
-            self.running[0] = False
-            for i in range(self._numthreads):
-                self._tr[i].join()
-                logger.info("Thread %2d: STOPPED Listening for messages on Bus %s and service name %s." % (i, self.busname, self.service_name))
-                logger.info("           %d messages received and %d processed OK." % (self.reccounter[i], self.okcounter[i]))
-        self.listening = False
-        # close the listeners
-        if self.connected == True:
-            if isinstance(self.listener, FromBus):
-                self.listener.close()
-            if isinstance(self.reply_bus, ToBus):
-                self.reply_bus.close()
-            self.connected = False
+        if isinstance(self.reply_bus, ToBus):
+            self.reply_bus.close()
 
+        # close the listeners
+        super(Service, self).stop_listening()
+
+    def _create_thread_args(self, index):
+        # set up service_handler
+        if str(type(self.service_handler)) == "<type 'instancemethod'>" or \
+            str(type(self.service_handler)) == "<type 'function'>":
+            thread_service_handler = MessageHandlerInterface()
+            thread_service_handler.handle_message = self.service_handler
+        else:
+            thread_service_handler = self.service_handler(**self.handler_args)
 
-    def __enter__(self):
-        """
-        Internal use only. Handles scope with keyword 'with'
-        """
-        self.start_listening()
-        return self
+        if not isinstance(thread_service_handler, MessageHandlerInterface):
+            raise TypeError("Servicehandler argument must by a function or a derived class from MessageHandlerInterface.")
 
-    def __exit__(self, exc_type, exc_val, exc_tb):
-	"""
-	Internal use only. Handles scope with keyword 'with'
-	"""
-        self.stop_listening()
+        # add service_handler to default args for thread
+        args = super(Service, self)._create_thread_args(index)
+        args['service_handler'] = thread_service_handler
+        return args
 
     def _send_reply(self, replymessage, status, reply_to, errtxt="",backtrace=""):
 	"""
@@ -277,133 +221,95 @@ class Service(object):
             except MessageBusError as e:
                 logger.error("Failed to send reply messgage to reply address %s" %(reply_to))
 
+    def _getServiceHandlerForCurrentThread(self):
+        currentThread = threading.currentThread()
+        args = self._threads[currentThread]
+        return args['service_handler']
 
-    def _loop(self, **kwargs):
-	"""
-	Internal use only. Message listener loop that receives messages and starts the attached function with the message content as argument.
-	"""
-        thread_idx = kwargs.pop("index")
-        service_handler = kwargs.pop("service_handler")
-        logger.info( "Thread %d START Listening for messages on Bus %s and service name %s." %(thread_idx, self.busname, self.service_name))
-        try:
-            service_handler.prepare_loop()
-        except Exception as e:
-            logger.error("prepare_loop() failed with %s", e)
+    def _onListenLoopBegin(self):
+        "Called before main processing loop is entered."
+        self._getServiceHandlerForCurrentThread().prepare_loop()
 
-        while self.running[0]:
-            try:
-                service_handler.prepare_receive()
-            except Exception as e:
-                logger.error("prepare_receive() failed with %s", e)
-                continue
+    def _onBeforeReceiveMessage(self):
+        "Called in main processing loop just before a blocking wait for messages is done."
+        self._getServiceHandlerForCurrentThread().prepare_receive()
 
-            try:
-                # get the next message
-                lofar_msg = self.listener.receive(1)
-                # retry if timed-out
-                if lofar_msg is None:
-                    continue
-
-                # report if messages are not Service Messages
-                if not isinstance(lofar_msg, RequestMessage):
-                    logger.error( "Received wrong messagetype %s, RequestMessage expected." %(str(type(lofar_msg))))
-                    self.listener.ack(lofar_msg)
-                    continue
-
-                # Keep track of number of received messages
-                self.reccounter[thread_idx] += 1
-
-                # Execute the service handler function and send reply back to client
-                try:
-                    self._debug("Running handler")
-
-                    # determine which handler method has to be called
-                    if hasattr(service_handler, 'service2MethodMap') and lofar_msg.subject in service_handler.service2MethodMap:
-                        # pass the handling of this message on to the specific method for this service
-                        serviceHandlerMethod = service_handler.service2MethodMap[lofar_msg.subject]
-                    else:
-                        serviceHandlerMethod = service_handler.handle_message
-
-                    if self.parsefullmessage is True:
-                        replymessage = serviceHandlerMethod(lofar_msg)
-                    else:
-                        # check for positional arguments and named arguments
-                        # depending on presence of args and kwargs,
-                        # the signature of the handler method should vary as well
-                        if lofar_msg.has_args and lofar_msg.has_kwargs:
-                            # both positional and named arguments
-                            # rpcargs and rpckwargs are packed in the content
-                            rpcargs = lofar_msg.content
-
-                            # rpckwargs is the last argument in the content
-                            # rpcargs is the rest in front
-                            rpckwargs = rpcargs[-1]
-                            del rpcargs[-1]
-                            rpcargs = tuple(rpcargs)
-                            replymessage = serviceHandlerMethod(*rpcargs, **rpckwargs)
-                        elif lofar_msg.has_args:
-                            # only positional arguments
-                            # msg.content should be a list
-                            rpcargs = tuple(lofar_msg.content)
-                            replymessage = serviceHandlerMethod(*rpcargs)
-                        elif lofar_msg.has_kwargs:
-                            # only named arguments
-                            # msg.content should be a dict
-                            rpckwargs = lofar_msg.content
-                            replymessage = serviceHandlerMethod(**rpckwargs)
-                        elif lofar_msg.content:
-                            rpccontent = lofar_msg.content
-                            replymessage = serviceHandlerMethod(rpccontent)
-                        else:
-                            replymessage = serviceHandlerMethod()
-
-                    self._debug("finished handler")
-                    self._send_reply(replymessage,"OK",lofar_msg.reply_to)
-                    self.okcounter[thread_idx] += 1
-                    self.listener.ack(lofar_msg)
-                    try:
-                        service_handler.finalize_handling(True)
-                    except Exception as e:
-                        logger.error("finalize_handling() failed with %s", e)
-                    continue
-
-                except Exception as e:
-                    # Any thrown exceptions either Service exception or unhandled exception
-                    # during the execution of the service handler is caught here.
-                    self._debug("handling exception")
-                    exc_info = sys.exc_info()
-                    status="ERROR"
-                    rawbacktrace = traceback.format_exception(*exc_info)
-                    errtxt = rawbacktrace[-1]
-                    self._debug(rawbacktrace)
-                    # cleanup the backtrace print by removing the first two lines and the last
-                    del rawbacktrace[1]
-                    del rawbacktrace[0]
-                    del rawbacktrace[-1]
-                    backtrace = ''.join(rawbacktrace).encode('latin-1').decode('unicode_escape')
-                    self._debug(backtrace)
-                    if self.verbose is True:
-                        logger.info("[Service:] Status: %s", str(status))
-                        logger.info("[Service:] ERRTXT: %s", str(errtxt))
-                        logger.info("[Service:] BackTrace: %s", str( backtrace ))
-                    self._send_reply(None, status, lofar_msg.reply_to, errtxt=errtxt, backtrace=backtrace)
-                    try:
-                        service_handler.finalize_handling(False)
-                    except Exception as e:
-                        logger.error("finalize_handling() failed with %s", e)
-                    continue
-
-            except Exception as e:
-                # Unknown problem in the library. Report this and continue.
-                excinfo = sys.exc_info()
-                logger.error("[Service:] ERROR during processing of incoming message.")
-                traceback.print_exception(*excinfo)
-                logger.info("Thread %d: Resuming listening on bus %s for service %s" % 
-                            (thread_idx, self.busname, self.service_name))
+    def _handleMessage(self, lofar_msg):
+        service_handler = self._getServiceHandlerForCurrentThread()
 
         try:
-            service_handler.finalize_loop()
+            self._debug("Running handler")
+
+            # determine which handler method has to be called
+            if hasattr(service_handler, 'service2MethodMap') and lofar_msg.subject in service_handler.service2MethodMap:
+                # pass the handling of this message on to the specific method for this service
+                serviceHandlerMethod = service_handler.service2MethodMap[lofar_msg.subject]
+            else:
+                serviceHandlerMethod = service_handler.handle_message
+
+            if self.parsefullmessage is True:
+                replymessage = serviceHandlerMethod(lofar_msg)
+            else:
+                # check for positional arguments and named arguments
+                # depending on presence of args and kwargs,
+                # the signature of the handler method should vary as well
+                if lofar_msg.has_args and lofar_msg.has_kwargs:
+                    # both positional and named arguments
+                    # rpcargs and rpckwargs are packed in the content
+                    rpcargs = lofar_msg.content
+
+                    # rpckwargs is the last argument in the content
+                    # rpcargs is the rest in front
+                    rpckwargs = rpcargs[-1]
+                    del rpcargs[-1]
+                    rpcargs = tuple(rpcargs)
+                    replymessage = serviceHandlerMethod(*rpcargs, **rpckwargs)
+                elif lofar_msg.has_args:
+                    # only positional arguments
+                    # msg.content should be a list
+                    rpcargs = tuple(lofar_msg.content)
+                    replymessage = serviceHandlerMethod(*rpcargs)
+                elif lofar_msg.has_kwargs:
+                    # only named arguments
+                    # msg.content should be a dict
+                    rpckwargs = lofar_msg.content
+                    replymessage = serviceHandlerMethod(**rpckwargs)
+                elif lofar_msg.content:
+                    rpccontent = lofar_msg.content
+                    replymessage = serviceHandlerMethod(rpccontent)
+                else:
+                    replymessage = serviceHandlerMethod()
+
+            self._send_reply(replymessage,"OK",lofar_msg.reply_to)
+
         except Exception as e:
-            logger.error("finalize_loop() failed with %s", e)
+            # Any thrown exceptions either Service exception or unhandled exception
+            # during the execution of the service handler is caught here.
+            self._debug("handling exception")
+            exc_info = sys.exc_info()
+            status="ERROR"
+            rawbacktrace = traceback.format_exception(*exc_info)
+            errtxt = rawbacktrace[-1]
+            self._debug(rawbacktrace)
+            # cleanup the backtrace print by removing the first two lines and the last
+            del rawbacktrace[1]
+            del rawbacktrace[0]
+            del rawbacktrace[-1]
+            backtrace = ''.join(rawbacktrace).encode('latin-1').decode('unicode_escape')
+            self._debug(backtrace)
+            if self.verbose is True:
+                logger.info("[Service:] Status: %s", str(status))
+                logger.info("[Service:] ERRTXT: %s", str(errtxt))
+                logger.info("[Service:] BackTrace: %s", str( backtrace ))
+            self._send_reply(None, status, lofar_msg.reply_to, errtxt=errtxt, backtrace=backtrace)
+
+    def _onAfterReceiveMessage(self, successful):
+        "Called in the main loop after the result was send back to the requester."
+        "@successful@ reflects the state of the handling: true/false"
+        self._getServiceHandlerForCurrentThread().finalize_handling(successful)
+
+    def _onListenLoopEnd(self):
+        "Called after main processing loop is finished."
+        self._getServiceHandlerForCurrentThread().finalize_loop()
 
 __all__ = ["Service", "MessageHandlerInterface"]
diff --git a/LCS/Messaging/python/messaging/messagebus.py b/LCS/Messaging/python/messaging/messagebus.py
index a367294f7a43cc41e6fd15c3be99ca90f7a2e123..a57d7dbd16b10981b80cb10b267375fac436a16b 100644
--- a/LCS/Messaging/python/messaging/messagebus.py
+++ b/LCS/Messaging/python/messaging/messagebus.py
@@ -1,3 +1,5 @@
+#!/usr/bin/env python
+
 # messagebus.py: Provide an easy way exchange messages on the message bus.
 #
 # Copyright (C) 2015
@@ -31,6 +33,8 @@ from lofar.common.util import raise_exception
 import qpid.messaging
 import logging
 import sys
+import uuid
+import threading
 
 logger = logging.getLogger(__name__)
 
@@ -41,6 +45,19 @@ DEFAULT_BROKER_OPTIONS = {'reconnect': True}
 DEFAULT_RECEIVER_CAPACITY = 1
 DEFAULT_TIMEOUT = 5
 
+# Construct address options string (address options object not supported well in Python)
+def address_options_to_str(opt):
+  if isinstance(opt, dict):
+    return "{%s}" % (", ".join('%s: %s' % (k,address_options_to_str(v)) for (k,v) in opt.iteritems()))
+  elif isinstance(opt, list):
+    return "[%s]" % (", ".join(address_options_to_str(v) for v in opt))
+  elif isinstance(opt, int):
+    return '%s' % (opt,)
+  elif isinstance(opt, bool):
+    return '%s' % (opt,)
+  else:
+    return '"%s"' % (opt,)
+
 
 class FromBus(object):
     """
@@ -75,6 +92,9 @@ class FromBus(object):
         self.session = None
         self.opened=0
 
+    def isConnected(self):
+        return self.opened > 0
+
     def open(self):
         """
         The following actions will be performed when entering a context:
@@ -148,14 +168,20 @@ class FromBus(object):
         """
         self._check_session()
         options = options if options else self.options
-        options.setdefault("capacity", DEFAULT_RECEIVER_CAPACITY)
-        what = "receiver for source: %s (broker: %s, session: %s)" % \
-               (address, self.broker, self.session.name)
+
+        # Extract capacity (not supported in address string in Python, see COMMON_OPTS in qpid/messaging/driver.py)
+        capacity = options.pop("capacity", DEFAULT_RECEIVER_CAPACITY)
+
+        optstr = address_options_to_str(options)
+
+        what = "receiver for source: %s (broker: %s, session: %s, options: %s)" % \
+               (address, self.broker, self.session.name, optstr)
+
         try:
-            self.session.receiver(address, **options)
+            self.session.receiver("%s; %s" % (address, optstr), capacity=capacity)
         except qpid.messaging.MessagingError:
             raise_exception(MessageBusError,
-                            "[FromBus] Failed to create %s" % what)
+                            "[FromBus] Failed to create %s" % (what,))
         logger.info("[FromBus] Created %s", what)
 
     def receive(self, timeout=DEFAULT_TIMEOUT):
@@ -175,9 +201,9 @@ class FromBus(object):
             return None
         except qpid.messaging.MessagingError:
             raise_exception(MessageBusError,
-                            "[FromBus] Failed to fetch message from queue: "
+                            "[FromBus] Failed to fetch message from: "
                             "%s" % self.address) 
-        logger.info("[FromBus] Message received on queue: %s subject: %s" % (self.address, msg.subject))
+        logger.info("[FromBus] Message received on: %s subject: %s" % (self.address, msg.subject))
         logger.debug("[FromBus] %s" % msg)
         try:
             amsg = MESSAGE_FACTORY.create(msg)
@@ -375,13 +401,17 @@ class ToBus(object):
         :raise MessageBusError: if sender could not be created
         """
         self._check_session()
-        what = "sender for target: %s (broker: %s, session: %s)" % (
-            address, self.broker, self.session.name)
+
+        optstr = address_options_to_str(options)
+
+        what = "sender for source: %s (broker: %s, session: %s, options: %s)" % \
+               (address, self.broker, self.session.name, optstr)
+
         try:
-            self.session.sender(address, **options)
+            self.session.sender("%s; %s" % (address, optstr))
         except qpid.messaging.MessagingError:
             raise_exception(MessageBusError,
-                            "[ToBus] Failed to create %s" % what)
+                            "[ToBus] Failed to create %s" % (what,))
         logger.info("[ToBus] Created %s", what)
 
     def send(self, message, timeout=DEFAULT_TIMEOUT):
@@ -404,4 +434,206 @@ class ToBus(object):
         logger.info("[ToBus] Message sent to queue: %s subject: %s" % (sender.target, message.subject))
 
 
-__all__ = ["FromBus", "ToBus"]
+class AbstractBusListener(object):
+    """
+    AbstractBusListener class for handling messages which are received on a message bus.
+    Typical usage is to derive from this class and implement the handle_message method with concrete logic.
+    """
+
+    def __init__(self, address, broker=None, **kwargs):
+        """
+        Initialize AbstractBusListener object with servicename (str) and servicehandler function.
+        :param address: valid Qpid address
+        additional parameters in kwargs:
+            options=   <dict>  Dictionary of options passed to QPID
+            exclusive= <bool>  Create an exclusive binding so no other services can consume duplicate messages (default: False)
+            numthreads= <int>  Number of parallel threads processing messages (default: 1)
+            verbose=   <bool>  Output extra logging over stdout (default: False)
+        """
+        self.address          = address
+        self.broker           = broker
+        self.running          = [False]
+        self._listening       = False
+        self.exclusive        = kwargs.pop("exclusive", False)
+        self._numthreads      = kwargs.pop("numthreads", 1)
+        self.verbose          = kwargs.pop("verbose", False)
+        self.frombus_options  = {"capacity": self._numthreads*20}
+        options               = kwargs.pop("options", None)
+
+        # Set appropriate flags for exclusive binding
+        if self.exclusive == True:
+            binding_key = address.split('/')[-1]
+            self.frombus_options["link"] = { "name": str(uuid.uuid4()),
+                                             "x-bindings": [ { "key": binding_key,
+                                                               "arguments": { "\"qpid.exclusive-binding\"": True }
+                                                             }
+                                                           ]
+                                           }
+
+        # only add options if it is given as a dictionary
+        if isinstance(options,dict):
+            for key,val in options.iteritems():
+                self.frombus_options[key] = val
+
+    def _debug(self, txt):
+        """
+        Internal use only.
+        """
+        if self.verbose == True:
+            logger.debug("[%s: %s]", self.__class__.__name__, txt)
+
+    def isListening(self):
+        return self._listening
+
+    def start_listening(self, numthreads=None):
+        """
+        Start the background threads and process incoming messages.
+        """
+        if self._listening == True:
+            return
+
+        self._bus_listener  = FromBus(self.address, broker=self.broker, options=self.frombus_options)
+        self._bus_listener.open()
+
+        if numthreads != None:
+            self._numthreads = numthreads
+
+        # use a list to ensure that threads always 'see' changes in the running state.
+        self.running = [ True ]
+        self._threads = {}
+        for i in range(self._numthreads):
+            thread = threading.Thread(target=self._loop)
+            self._threads[thread] = self._create_thread_args(i)
+            thread.start()
+        self._listening = True
+
+    def _create_thread_args(self, index):
+        return {'index':index,
+                'num_received_messages':0,
+                'num_processed_messages':0}
+
+    def stop_listening(self):
+        """
+        Stop the background threads that listen to incoming messages.
+        """
+        # stop all running threads
+        if self.running[0] == True:
+            self.running[0] = False
+            for thread, args in self._threads.items():
+                thread.join()
+                logger.info("Thread %2d: STOPPED Listening for messages on %s" % (args['index'], self.address))
+                logger.info("           %d messages received and %d processed OK." % (args['num_received_messages'], args['num_processed_messages']))
+        self._listening = False
+
+        # close the listeners
+        if self._bus_listener.isConnected():
+            self._bus_listener.close()
+
+
+    def __enter__(self):
+        """
+        Internal use only. Handles scope with keyword 'with'
+        """
+        self.start_listening()
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        """
+        Internal use only. Handles scope with keyword 'with'
+        """
+        self.stop_listening()
+
+    def _onListenLoopBegin(self):
+        "Called before main processing loop is entered."
+        pass
+
+    def _onBeforeReceiveMessage(self):
+        "Called in main processing loop just before a blocking wait for messages is done."
+        pass
+
+    def _handleMessage(self, msg):
+        "Implement this method in your subclass to handle a received message"
+        raise NotImplementedError("Please implement the _handleMessage method in your subclass to handle a received message")
+
+    def _onAfterReceiveMessage(self, successful):
+        "Called in the main loop after the result was send back to the requester."
+        "@successful@ reflects the state of the handling: true/false"
+        pass
+
+    def _onListenLoopEnd(self):
+        "Called after main processing loop is finished."
+        pass
+
+    def _loop(self):
+        """
+        Internal use only. Message listener loop that receives messages and starts the attached function with the message content as argument.
+        """
+        currentThread = threading.currentThread()
+        args = self._threads[currentThread]
+        thread_idx = args['index']
+        logger.info( "Thread %d START Listening for messages on %s" %(thread_idx, self.address))
+        try:
+            self._onListenLoopBegin()
+        except Exception as e:
+            logger.error("onListenLoopBegin() failed with %s", e)
+
+        while self.running[0]:
+            try:
+                self._onBeforeReceiveMessage()
+            except Exception as e:
+                logger.error("onBeforeReceiveMessage() failed with %s", e)
+                continue
+
+            try:
+                # get the next message
+                lofar_msg = self._bus_listener.receive(1)
+                # retry if timed-out
+                if lofar_msg is None:
+                    continue
+
+                # Keep track of number of received messages
+                args['num_received_messages'] += 1
+
+                # Execute the service handler function and send reply back to client
+                try:
+                    self._debug("Running handler")
+
+                    self._handleMessage(lofar_msg)
+
+                    self._debug("Finished handler")
+
+                    self._bus_listener.ack(lofar_msg)
+
+                    args['num_processed_messages'] += 1
+
+                    try:
+                        self._onAfterReceiveMessage(True)
+                    except Exception as e:
+                        logger.error("onAfterReceiveMessage() failed with %s", e)
+                        continue
+
+                except Exception as e:
+                    import traceback
+                    logger.warning("Handling of message failed with %s: %s\nMessage: %s", e, traceback.format_exc(),lofar_msg.content)
+
+                    # Any thrown exceptions either Service exception or unhandled exception
+                    # during the execution of the service handler is caught here.
+                    self._debug(str(e))
+                    try:
+                        self._onAfterReceiveMessage(False)
+                    except Exception as e:
+                        logger.error("onAfterReceiveMessage() failed with %s", e)
+                    continue
+
+            except Exception as e:
+                # Unknown problem in the library. Report this and continue.
+                logger.error("[%s:] ERROR during processing of incoming message.\n%s" %(self.__class__.__name__, str(e)))
+                logger.info("Thread %d: Resuming listening on %s " % (thread_idx, self.address))
+
+        try:
+            self._onListenLoopEnd()
+        except Exception as e:
+            logger.error("finalize_loop() failed with %s", e)
+
+
+__all__ = ["FromBus", "ToBus", "AbstractBusListener"]
diff --git a/SAS/CMakeLists.txt b/SAS/CMakeLists.txt
index f2493e5907248fbd7bae55b3be0e381bc8be43ca..9a6b79312d5a831f4efdc3f1ec024ba7c2c6ba06 100644
--- a/SAS/CMakeLists.txt
+++ b/SAS/CMakeLists.txt
@@ -9,4 +9,5 @@ lofar_add_package(CleanupTool)
 lofar_add_package(OTDB_Services)
 lofar_add_package(XML_generator)
 
+add_subdirectory(MoM)
 add_subdirectory(ResourceAssignment)
diff --git a/SAS/MoM/CMakeLists.txt b/SAS/MoM/CMakeLists.txt
index fe7eed0755a032b13c9df21e015f81196840570a..bec1a7192d9efb80180504fcd590767df12c9cb1 100644
--- a/SAS/MoM/CMakeLists.txt
+++ b/SAS/MoM/CMakeLists.txt
@@ -1,3 +1,3 @@
 # $Id: CMakeLists.txt 32745 2015-11-01 20:17:08Z schoenmakers $
 
-add_directory(MoMQueryService)
+lofar_add_package(MoMQueryService)
diff --git a/SAS/OTDB_Services/CMakeLists.txt b/SAS/OTDB_Services/CMakeLists.txt
index f6c6b22d26992ab5ebd37de7aba1a431905536ce..e30e2e3f48e49dfe1a95329c0ab9438d5e827d82 100644
--- a/SAS/OTDB_Services/CMakeLists.txt
+++ b/SAS/OTDB_Services/CMakeLists.txt
@@ -2,6 +2,7 @@
 
 lofar_package(OTDB_Services 1.0 DEPENDS PyMessaging)
 
+lofar_find_package(Python 2.6 REQUIRED)
 include(PythonInstall)
 
 lofar_add_bin_scripts(
@@ -16,6 +17,13 @@ install(FILES
   OTDB_Services.ini
   DESTINATION etc/supervisord.d)
 
+set(_py_files
+  factory.py
+  util.py
+  datetimeutils.py)
+
+python_install(OTDBBusListener.py
+    DESTINATION lofar/sas/otdb)
 
 add_subdirectory(test)
 
diff --git a/SAS/OTDB_Services/OTDBBusListener.py b/SAS/OTDB_Services/OTDBBusListener.py
new file mode 100644
index 0000000000000000000000000000000000000000..8d121f66357944adf9f60b714842ecdab05bdfe0
--- /dev/null
+++ b/SAS/OTDB_Services/OTDBBusListener.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+
+# OTDBBusListener.py: OTDBBusListener listens on the lofar otdb message bus and calls (empty) on<SomeMessage> methods when such a message is received.
+#
+# Copyright (C) 2015
+# ASTRON (Netherlands Institute for Radio Astronomy)
+# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+#
+# This file is part of the LOFAR software suite.
+# The LOFAR software suite is free software: you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# The LOFAR software suite is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+#
+# $Id: messagebus.py 1580 2015-09-30 14:18:57Z loose $
+
+"""
+OTDBBusListener listens on the lofar otdb message bus and calls (empty) on<SomeMessage> methods when such a message is received.
+Typical usage is to derive your own subclass from OTDBBusListener and implement the specific on<SomeMessage> methods that you are interested in.
+"""
+
+from lofar.messaging.messagebus import AbstractBusListener
+
+import qpid.messaging
+import logging
+from datetime import datetime
+
+logger = logging.getLogger(__name__)
+
+
+class OTDBBusListener(AbstractBusListener):
+    def __init__(self, busname='lofar.otdb.notification', subject='otdb.treestatus', broker=None, **kwargs):
+        """
+        OTDBBusListener listens on the lofar otdb message bus and calls (empty) on<SomeMessage> methods when such a message is received.
+        Typical usage is to derive your own subclass from OTDBBusListener and implement the specific on<SomeMessage> methods that you are interested in.
+        :param address: valid Qpid address (default: lofar.otdb.status)
+        :param broker: valid Qpid broker host (default: None, which means localhost)
+        additional parameters in kwargs:
+            options=   <dict>  Dictionary of options passed to QPID
+            exclusive= <bool>  Create an exclusive binding so no other services can consume duplicate messages (default: False)
+            numthreads= <int>  Number of parallel threads processing messages (default: 1)
+            verbose=   <bool>  Output extra logging over stdout (default: False)
+        """
+        address = "%s/%s" % (busname, subject)
+        super(OTDBBusListener, self).__init__(address, broker, **kwargs)
+
+    def _handleMessage(self, msg):
+        logger.debug("OTDBBusListener.handleMessage: %s" %str(msg))
+
+        treeId =  msg.content['treeID']
+        modificationTime = msg.content['time_of_change'].datetime()
+
+        if msg.content['state'] == 'described':
+            self.onObservationDescribed(treeId, modificationTime)
+        elif msg.content['state'] == 'prepared':
+            self.onObservationPrepared(treeId, modificationTime)
+        elif msg.content['state'] == 'approved':
+            self.onObservationApproved(treeId, modificationTime)
+        elif msg.content['state'] == 'on_hold':
+            self.onObservationOnHold(treeId, modificationTime)
+        elif msg.content['state'] == 'conflict':
+            self.onObservationConflict(treeId, modificationTime)
+        elif msg.content['state'] == 'prescheduled':
+            self.onObservationPrescheduled(treeId, modificationTime)
+        elif msg.content['state'] == 'scheduled':
+            self.onObservationScheduled(treeId, modificationTime)
+        elif msg.content['state'] == 'queued':
+            self.onObservationQueued(treeId, modificationTime)
+        elif msg.content['state'] == 'active':
+            self.onObservationStarted(treeId, modificationTime)
+        elif msg.content['state'] == 'completing':
+            self.onObservationCompleting(treeId, modificationTime)
+        elif msg.content['state'] == 'finished':
+            self.onObservationFinished(treeId, modificationTime)
+        elif msg.content['state'] == 'aborted':
+            self.onObservationAborted(treeId, modificationTime)
+
+    def onObservationDescribed(self, treeId, modificationTime):
+        pass
+
+    def onObservationPrepared(self, treeId, modificationTime):
+        pass
+
+    def onObservationApproved(self, treeId, modificationTime):
+        pass
+
+    def onObservationOnHold(self, treeId, modificationTime):
+        pass
+
+    def onObservationConflict(self, treeId, modificationTime):
+        pass
+
+    def onObservationPrescheduled(self, treeId, modificationTime):
+        pass
+
+    def onObservationScheduled(self, treeId, modificationTime):
+        pass
+
+    def onObservationQueued(self, treeId, modificationTime):
+        pass
+
+    def onObservationStarted(self, treeId, modificationTime):
+        pass
+
+    def onObservationCompleting(self, treeId, modificationTime):
+        pass
+
+    def onObservationFinished(self, treeId, modificationTime):
+        pass
+
+    def onObservationAborted(self, treeId, modificationTime):
+        pass
+
+__all__ = ["OTDBBusListener"]
diff --git a/SAS/OTDB_Services/TreeService.py b/SAS/OTDB_Services/TreeService.py
index 33cd9ba53ef7b30220171638df8b519d13124094..588e5a672abeffd51ba62fdde177933136ad246f 100755
--- a/SAS/OTDB_Services/TreeService.py
+++ b/SAS/OTDB_Services/TreeService.py
@@ -239,7 +239,7 @@ class PostgressTaskSpecificationRequest(PostgressMessageHandlerInterface):
     def __init__(self, **kwargs):
         super(PostgressTaskSpecificationRequest, self).__init__(**kwargs)
 
-    def handle_message(self, msg):
+    def handle_message(self, **msg):
         " Connect to the right function"
         return TaskSpecificationRequest(msg, self.connection)
 
@@ -251,7 +251,7 @@ class PostgressStatusUpdateCommand(PostgressMessageHandlerInterface):
     def __init__(self, **kwargs):
         super(PostgressStatusUpdateCommand, self).__init__(**kwargs)
 
-    def handle_message(self, msg):
+    def handle_message(self, **msg):
         " Connect to the right function"
         return StatusUpdateCommand(msg, self.connection)
 
@@ -263,7 +263,7 @@ class PostgressKeyUpdateCommand(PostgressMessageHandlerInterface):
     def __init__(self, **kwargs):
         super(PostgressKeyUpdateCommand, self).__init__(**kwargs)
 
-    def handle_message(self, msg):
+    def handle_message(self, **msg):
         " Connect to the right function"
         return KeyUpdateCommand(msg, self.connection)
 
diff --git a/SAS/OTDB_Services/TreeStatusEvents.py b/SAS/OTDB_Services/TreeStatusEvents.py
index 47e4b19dd20c78be07f72fdd0a987c7a2105a353..b1d5065c17c760062368f2fbe0d0fe88a049bcd1 100755
--- a/SAS/OTDB_Services/TreeStatusEvents.py
+++ b/SAS/OTDB_Services/TreeStatusEvents.py
@@ -24,7 +24,7 @@
 Daemon that watches the OTDB database for status changes of trees and publishes those on the messagebus.
 """
 
-import sys, time, pg
+import sys, time, pg, datetime
 import logging
 from lofar.messaging import EventMessage, ToBus
 
@@ -47,8 +47,8 @@ def PollForStatusChanges(start_time, end_time, otdb_connection):
     """
     Function that asked the database for status changes in the given period
 
-    Input : start_time (string) - Oldest time of change to include in the selection.
-            end_time (string)   - Most recent time of change to include in the selection
+    Input : start_time (datetime) - Oldest time of change to include in the selection.
+            end_time (datetime)   - Most recent time of change to include in the selection
     The times must be specified in the format YYYY-Mon-DD HH24:MI:SS.US.
     The selection delivers changes the match:  startime <= time_of_change < end_time
 
@@ -64,7 +64,7 @@ def PollForStatusChanges(start_time, end_time, otdb_connection):
     record_list = []
     try:
         record_list = otdb_connection.query("select treeid,state,modtime,creation from getStateChanges('%s','%s')" %
-                      (start_time, end_time)).getresult()
+                      (start_time.strftime("%F %T.%f"), end_time.strftime("%F %T.%f"))).getresult()
     except QUERY_EXCEPTIONS, exc_info:
         raise FunctionError("Error while polling for state changes: %s"% exc_info)
     return record_list
@@ -122,23 +122,23 @@ if __name__ == "__main__":
             # When we are connected we can poll the database
             if connected:
                 # Get start_time (= creation time of last retrieved record if any)
-                start_time = ''
                 try:
                     start_time = otdb_connection.query("select treestatusevent from otdb_admin").getresult()[0][0]
+                    start_time = datetime.datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S.%f")
                 except IndexError, QUERY_EXCEPTIONS:
-                    start_time = "2015-01-01 00:00:00.00"
+                    start_time = datetime.datetime.datetime(2015, 1, 1)
  
                 try:
                     logger.info("start_time=%s, polling database" % (start_time,))
-                    record_list = PollForStatusChanges(start_time, "now", otdb_connection)
+                    record_list = PollForStatusChanges(start_time, datetime.datetime.utcnow(), otdb_connection)
                 except FunctionError, exc_info:
                     logger.error(exc_info)
                 else:
                     for (treeid, state, modtime, creation) in record_list:
-                        content = { "treeID" : treeid, "state" : allowed_states.get(state, "unknwon_state"), 
+                        content = { "treeID" : treeid, "state" : allowed_states.get(state, "unknown_state"), 
                                     "time_of_change" : modtime }
                         msg = EventMessage(context="otdb.treestatus", content=content)
-                        logger.info("sending message treeid %s state %s modtime %s" % (treeid, allowed_states.get(state, "unknwon_state"), modtime))
+                        logger.info("sending message treeid %s state %s modtime %s" % (treeid, allowed_states.get(state, "unknown_state"), modtime))
                         send_bus.send(msg)
 
                         start_time = creation
diff --git a/SAS/OTDB_Services/test/t_TreeService.py b/SAS/OTDB_Services/test/t_TreeService.py
index ff208e810339388539f6d57149c83fbd55e330bb..ee2bc1fb2455f3ff86b4fa4b5143c760d2c4a220 100644
--- a/SAS/OTDB_Services/test/t_TreeService.py
+++ b/SAS/OTDB_Services/test/t_TreeService.py
@@ -37,7 +37,7 @@ logger = logging.getLogger(__name__)
 
 def do_rpc(rpc_instance, arg_dict):
 #    try:
-    (data, status) = (rpc_instance)(arg_dict)
+    (data, status) = (rpc_instance)(**arg_dict)
     if status != "OK":
         raise Exception("Status returned is %s" % status)
     for key in sorted(data):
@@ -56,58 +56,58 @@ if __name__ == "__main__":
 
     with RPC("StatusUpdateCmd", ForwardExceptions=True, busname=busname, timeout=5) as status_update_command:
         # PIC
-        (data, status) = status_update_command({'OtdbID':1099269, 'NewStatus':'finished', 'UpdateTimestamps':True})
+        (data, status) = status_update_command(OtdbID=1099269, NewStatus='finished', UpdateTimestamps=True)
         print status, data
         # Template
-        (data, status) = status_update_command({'OtdbID':1099238, 'NewStatus':'finished', 'UpdateTimestamps':True})
+        (data, status) = status_update_command(OtdbID=1099238, NewStatus='finished', UpdateTimestamps=True)
         print status, data
         # VIC
-        (data, status) = status_update_command({'OtdbID':1099266, 'NewStatus':'finished', 'UpdateTimestamps':True})
+        (data, status) = status_update_command(OtdbID=1099266, NewStatus='finished', UpdateTimestamps=True)
         print status, data
 
         # Nonexisting tree
         try:
-            (data, status) = status_update_command({'OtdbID':10, 'NewStatus':'finished', 'UpdateTimestamps':True})
+            (data, status) = status_update_command(OtdbID=10, NewStatus='finished', UpdateTimestamps=True)
         except RPCException as e:
             print "Caught expected exception on invalid treeID in status update"
 
         # VIC tree: invalid status
         try:
-            (data, status) = status_update_command({'OtdbID':1099266, 'NewStatus':'what_happend', 'UpdateTimestamps':True})
+            (data, status) = status_update_command(OtdbID=1099266, NewStatus='what_happend', UpdateTimestamps=True)
         except RPCException as e:
             print "Caught expected exception on invalid status in status update"
 
 
     with RPC("KeyUpdateCmd", ForwardExceptions=True, busname=busname, timeout=5) as key_update:
         # VIC tree: valid
-        (data, status) = key_update({'OtdbID':1099266,
-                          'Updates':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'}})
+        (data, status) = key_update(OtdbID=1099266,
+                          Updates={'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'})
         print status, data
 
         # Template tree: not supported yet
         try:
-            (data, status) = key_update({'OtdbID':1099238,
-                          'Updates':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'}})
+            (data, status) = key_update(OtdbID=1099238,
+                          Updates={'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'})
         except RPCException as e:
             print "Caught expected exception on invalid treetype in key update"
 
         # PIC tree: not supported yet
         try:
-            (data, status) = key_update({'OtdbID':1099269, 'Updates':{'LOFAR.PIC.Core.CS001.status_state':'50'}})
+            (data, status) = key_update(OtdbID=1099269, Updates={'LOFAR.PIC.Core.CS001.status_state':'50'})
         except RPCException as e:
             print "Caught expected exception on invalid treetype (PIC) in key update"
 
         # Non exsisting tree
         try:
-            (data, status) = key_update({'OtdbID':10,
-                          'Updates':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'}})
+            (data, status) = key_update(OtdbID=10,
+                          Updates={'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'})
         except RPCException as e:
             print "Caught expected exception on invalid treeID in key update"
 
         # VIC tree: wrong key
         try:
-            (data, status) = key_update({'OtdbID':1099266,
-                          'Updates':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.NoSuchKey':'NameOfTestHost'}})
+            (data, status) = key_update(OtdbID=1099266,
+                          Updates={'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.NoSuchKey':'NameOfTestHost'})
         except RPCException as e:
             print "Caught expected exception on invalid key in key update"
 
diff --git a/SAS/ResourceAssignment/CMakeLists.txt b/SAS/ResourceAssignment/CMakeLists.txt
index f17d9b9367e6c29c624e558759cc5970b71d98fa..42e6524146015ad14024aae36f70ef0f71869591 100644
--- a/SAS/ResourceAssignment/CMakeLists.txt
+++ b/SAS/ResourceAssignment/CMakeLists.txt
@@ -1,4 +1,5 @@
 # $Id: CMakeLists.txt 32401 2015-09-03 13:41:57Z klijn $
 
 lofar_add_package(ResourceAssignmentEditor)
+lofar_add_package(Services)
 
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/CMakeLists.txt b/SAS/ResourceAssignment/ResourceAssignmentEditor/CMakeLists.txt
index 62f065324294a663a75ac8b8e6b547663e30fb4d..172cb3d602a37d0ee5307544e01a8915c8ed9b50 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/CMakeLists.txt
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/CMakeLists.txt
@@ -7,5 +7,6 @@ set(USE_PYTHON_COMPILATION Off)
 
 add_subdirectory(lib)
 add_subdirectory(bin)
+add_subdirectory(etc)
 add_subdirectory(test)
 add_subdirectory(config)
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/etc/CMakeLists.txt b/SAS/ResourceAssignment/ResourceAssignmentEditor/etc/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d2c29f37df9a41ba3cbd631cead7a9ad643b4254
--- /dev/null
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/etc/CMakeLists.txt
@@ -0,0 +1,6 @@
+# $Id$
+
+# supervisord config files
+install(FILES
+  resourceassignmenteditorwebservice.ini
+  DESTINATION etc/supervisord.d)
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/etc/resourceassignmenteditorwebservice.ini b/SAS/ResourceAssignment/ResourceAssignmentEditor/etc/resourceassignmenteditorwebservice.ini
new file mode 100644
index 0000000000000000000000000000000000000000..47183122c6ac3bc7b076e9ccc9e89857a007cc30
--- /dev/null
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/etc/resourceassignmenteditorwebservice.ini
@@ -0,0 +1,7 @@
+[program:ResourceAssignmentEditor]
+command=/bin/bash -c 'source $LOFARROOT/lofarinit.sh;resourceassignmenteditorwebservice.py'
+user=nginx
+stopsignal=INT ; KeyboardInterrupt
+stopasgroup=true
+stdout_logfile=%(program_name)s.log
+stderr_logfile=%(program_name)s.stderr
diff --git a/SAS/ResourceAssignment/Services/CMakeLists.txt b/SAS/ResourceAssignment/Services/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fd8e52e033e4de0cb4010ff14ff02e22c3deb517
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/CMakeLists.txt
@@ -0,0 +1,8 @@
+# $Id$
+
+lofar_package(ResourceAssignmentServices 1.0 DEPENDS PyMessaging PyCommon pyparameterset OTDB_Services)
+
+include(PythonInstall)
+
+add_subdirectory(src)
+add_subdirectory(test)
diff --git a/SAS/ResourceAssignment/Services/src/CMakeLists.txt b/SAS/ResourceAssignment/Services/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..69a3891eb85e3b053a050947496e081cf36e16af
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/src/CMakeLists.txt
@@ -0,0 +1,16 @@
+# $Id$
+
+lofar_add_bin_scripts(
+  rataskspecifiedservice
+)
+
+python_install(
+  RATaskSpecified.py
+  RABusListener.py
+  DESTINATION lofar/sas/resourceassignment
+)
+
+# supervisord config files
+install(FILES
+  rataskspecifiedservice.ini
+  DESTINATION etc/supervisord.d)
diff --git a/SAS/ResourceAssignment/Services/src/RABusListener.py b/SAS/ResourceAssignment/Services/src/RABusListener.py
new file mode 100644
index 0000000000000000000000000000000000000000..6d5f5a7712577503bedd09cda5845123905031cb
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/src/RABusListener.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+
+# RABusListener.py: RABusListener listens on the lofar ra message bus and calls (empty) on<SomeMessage> methods when such a message is received.
+#
+# Copyright (C) 2015
+# ASTRON (Netherlands Institute for Radio Astronomy)
+# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+#
+# This file is part of the LOFAR software suite.
+# The LOFAR software suite is free software: you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# The LOFAR software suite is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+#
+# $Id$
+
+"""
+RABusListener listens on the lofar otdb message bus and calls (empty) on<SomeMessage> methods when such a message is received.
+Typical usage is to derive your own subclass from RABusListener and implement the specific on<SomeMessage> methods that you are interested in.
+"""
+
+from lofar.messaging.messagebus import AbstractBusListener
+
+import qpid.messaging
+import logging
+from datetime import datetime
+
+logger = logging.getLogger(__name__)
+
+
+class RATaskSpecifiedBusListener(AbstractBusListener):
+    def __init__(self, busname='lofar.ra.notification', subject='OTDB.TaskSpecified', broker=None, **kwargs):
+        """
+        RATaskSpecifiedBusListener listens on the lofar ra message bus and calls (empty) on<SomeMessage> methods when such a message is received.
+        Typical usage is to derive your own subclass from RATaskSpecifiedBusListener and implement the specific on<SomeMessage> methods that you are interested in.
+        :param address: valid Qpid address (default: lofar.otdb.status)
+        :param broker: valid Qpid broker host (default: None, which means localhost)
+        additional parameters in kwargs:
+            options=   <dict>  Dictionary of options passed to QPID
+            exclusive= <bool>  Create an exclusive binding so no other services can consume duplicate messages (default: False)
+            numthreads= <int>  Number of parallel threads processing messages (default: 1)
+            verbose=   <bool>  Output extra logging over stdout (default: False)
+        """
+        address = "%s/%s" % (busname, subject)
+        super(RATaskSpecifiedBusListener, self).__init__(address, broker, **kwargs)
+
+    def _handleMessage(self, msg):
+        logger.debug("RABusListener.handleMessage: %s" %str(msg))
+
+        sasId = msg.content['sasID']
+        modificationTime = msg.content['time_of_change'].datetime()
+        resource_indicators = msg.content['resource_indicators']
+
+        self.onTaskSpecified(sasId, modificationTime, resource_indicators)
+
+    def onTaskSpecified(self, sasId, modificationTime, resourceIndicators):
+        pass
+
+__all__ = ["RATaskSpecifiedBusListener"]
diff --git a/SAS/ResourceAssignment/Services/src/RATaskSpecified.py b/SAS/ResourceAssignment/Services/src/RATaskSpecified.py
new file mode 100755
index 0000000000000000000000000000000000000000..e05047d467f60f5276525967282e9b7e47d730cb
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/src/RATaskSpecified.py
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+#coding: iso-8859-15
+#
+# Copyright (C) 2015
+# ASTRON (Netherlands Institute for Radio Astronomy)
+# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+#
+# This file is part of the LOFAR software suite.
+# The LOFAR software suite is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# The LOFAR software suite is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+#
+# $Id$
+"""
+Daemon that listens to OTDB status changes to PRESCHEDULED and SCHEDULED, requests
+the parset of such jobs (+ their predecessors), and posts them on the bus.
+"""
+
+from lofar.messaging import FromBus, ToBus, RPC, EventMessage
+from lofar.parameterset import PyParameterValue
+from lofar.sas.otdb.OTDBBusListener import OTDBBusListener
+from lofar.common.util import waitForInterrupt
+
+import logging
+logger = logging.getLogger(__name__)
+
+""" Prefix that is common to all parset keys, depending on the exact source. """
+PARSET_PREFIX="ObsSW."
+
+def predecessors( parset ):
+  """ Extract the list of predecessor obs IDs from the given parset. """
+
+  key = PARSET_PREFIX + "Observation.Scheduler.predecessors"
+  strlist = PyParameterValue(str(parset[key]), True).getStringVector()
+
+  # Key contains "Lxxxxx" values, we want to have "xxxxx" only
+  result = [int(filter(str.isdigit,x)) for x in strlist]
+
+  return result
+
+def resourceIndicatorsFromParset( parset ):
+  """ Extract the parset keys that are required for resource assignment. """
+
+  subset = {}
+
+  def get(key, default=None):
+    """ Return the value of parset key `key', or `default' if the key
+        is not defined. """
+    return parset.get(PARSET_PREFIX + key, default)
+
+  def add(key, conversion=lambda x: x):
+    """ Add the given key to our subset selection, using an optional
+        conversion. """
+    value = get(key)
+    if value is not None:
+      subset[key] = conversion(value)
+
+  """ Some conversion functions for common parameter-value types."""
+  def strvector(value):
+    return PyParameterValue(value, True).getStringVector()
+
+  def intvector(value):
+    return PyParameterValue(value, True).getIntVector()
+
+  def bool(value):
+    return PyParameterValue(value, True).getBool()
+
+  # =====================================
+  # Parset meta info
+  # =====================================
+  subset["Version.number"] = parset.get("Version.number")
+
+  # =====================================
+  # Observation settings
+  # =====================================
+  add("Observation.sampleClock")
+  add("Observation.nrBitsPerSample")
+  add("Observation.antennaSet")
+  add("Observation.VirtualInstrument.stationList", strvector)
+  add("Observation.startTime")
+  add("Observation.stopTime")
+  add("Observation.nrBeams")
+  nrSAPs = int(get("Observation.nrBeams", 0))
+  for sap in xrange(0, nrSAPs):
+    add("Observation.Beam[%d].subbandList" % (sap,), intvector)
+
+  # =====================================
+  # Correlator settings
+  # =====================================
+  add("Observation.DataProducts.Output_Correlated.enabled", bool)
+  add("Cobalt.Correlator.integrationTime")
+  add("Cobalt.Correlator.nrChannelsPerSubband")
+  # TODO: We need a service that computes these 3 values
+  add("Cobalt.Correlator.nrBlocksPerIntegration")
+  add("Cobalt.Correlator.nrIntegrationsPerBlock")
+  add("Cobalt.blockSize")
+
+  # =====================================
+  # Beamformer settings
+  # =====================================
+  add("Observation.DataProducts.Output_IncoherentStokes.enabled", bool)
+  add("Observation.DataProducts.Output_CoherentStokes.enabled", bool)
+  add("Cobalt.BeamFormer.flysEye", bool)
+  #add("Cobalt.BeamFormer.CoherentStokes.nrChannelsPerSubband") # only needed to determine Cobalt.blockSize
+  add("Cobalt.BeamFormer.CoherentStokes.subbandsPerFile")
+  add("Cobalt.BeamFormer.CoherentStokes.timeIntegrationFactor")
+  add("Cobalt.BeamFormer.CoherentStokes.which")
+  #add("Cobalt.BeamFormer.IncoherentStokes.nrChannelsPerSubband") # only needed to determine Cobalt.blockSize
+  add("Cobalt.BeamFormer.IncoherentStokes.subbandsPerFile")
+  add("Cobalt.BeamFormer.IncoherentStokes.timeIntegrationFactor")
+  add("Cobalt.BeamFormer.IncoherentStokes.which")
+  for sap in xrange(0, nrSAPs):
+    add("Observation.Beam[%d].nrTabRings" % (sap,))
+
+    nrTABs = int(get("Observation.Beam[%d].nrTiedArrayBeams" % (sap,), 0))
+    for tab in xrange(0, nrTABs):
+      add("Observation.Beam[%d].TiedArrayBeam[%d].coherent" % (sap,tab), bool)
+
+  # =====================================
+  # Pipeline settings
+  # =====================================
+  # Calibrator / Averaging pipelines
+  add("Observation.DataProducts.Output_Correlated.enabled", bool)
+  add("Observation.DataProducts.Output_InstrumentModel.enabled", bool)
+  add("Observation.DataProducts.Input_Correlated.enabled", bool)
+  add("Observation.DataProducts.Input_Correlated.skip", intvector)
+  add("Observation.ObservationControl.PythonControl.DPPP.demixer.demixfreqstep")
+  add("Observation.ObservationControl.PythonControl.DPPP.demixer.demixtimestep")
+
+  # Imaging pipeline
+  add("Observation.DataProducts.Output_SkyImage.enabled", bool)
+  add("Observation.ObservationControl.PythonControl.Imaging.slices_per_image")
+  add("Observation.ObservationControl.PythonControl.Imaging.subbands_per_image")
+
+  # Long-baseline pipeline
+  add("Observation.ObservationControl.PythonControl.LongBaseline.subbandgroups_per_ms")
+  add("Observation.ObservationControl.PythonControl.LongBaseline.subbands_per_subbandgroup")
+
+  # Pulsar pipeline
+  add("Observation.DataProducts.Output_Pulsar.enabled", bool)
+  add("Observation.DataProducts.Input_CoherentStokes.enabled", bool)
+  add("Observation.DataProducts.Input_CoherentStokes.skip", intvector)
+  add("Observation.DataProducts.Input_IncoherentStokes.enabled", bool)
+  add("Observation.DataProducts.Input_IncoherentStokes.skip", intvector)
+
+  return subset
+
+class RATaskSpecified(OTDBBusListener):
+  def __init__(self, servicename, otdb_busname=None, my_busname=None, **kwargs):
+    super(RATaskSpecified, self).__init__(busname=otdb_busname, subject="TaskStatus", **kwargs)
+
+    self.parset_rpc = RPC(service="TaskSpecification", busname=otdb_busname)
+    self.send_bus   = ToBus("%s/%s" % (my_busname, servicename))
+
+  def start_listening(self, **kwargs):
+    self.parset_rpc.open()
+    self.send_bus.open()
+
+    super(RATaskSpecified, self).start_listening(**kwargs)
+
+  def stop_listening(self, **kwargs):
+    super(RATaskSpecified, self).stop_listening(**kwargs)
+
+    self.send_bus.close()
+    self.parset_rpc.close()
+
+  def onObservationPrescheduled(self, treeId, modificationTime):
+    logger.info("Processing obs ID %s", treeId)
+
+    # Request the parset
+    main_obsID  = treeId
+    main_parset,_ = self.parset_rpc( OtdbID=main_obsID )
+
+    # Construct a dict of all the parsets we retrieved
+    parsets = {}
+    parsets[main_obsID] = main_parset
+
+    logger.info("Processing predecessors")
+
+    # Collect the initial set of predecessors
+    request_obsIDs = set(predecessors(main_parset))
+
+    logger.info("Processing %s", request_obsIDs)
+
+    # Iterate recursively over all known predecessor obsIDs, and request their parsets
+    while request_obsIDs:
+        obsID = request_obsIDs.pop()
+
+        if obsID in parsets:
+            # Predecessor lists can overlap -- we already have this one
+            continue
+
+        logger.info("Fetching predecessor %s", obsID)
+
+        # Request predecessor parset
+        parsets[obsID],_ = self.parset_rpc( OtdbID=obsID )
+
+        # Add the list of predecessors
+        request_obsIDs = request_obsIDs.union(predecessors(parsets[obsID]))
+
+    # Convert parsets to resource indicators
+    logger.info("Extracting resource indicators")
+    resourceIndicators = dict([(str(obsID), resourceIndicatorsFromParset(parset)) for (obsID,parset) in parsets.iteritems()])
+
+    # Construct and send result message
+    logger.info("Sending result")
+    result = {
+      "sasID": main_obsID,
+      "state": "prescheduled",
+      "time_of_change": modificationTime,
+      "resource_indicators": resourceIndicators,
+    }
+
+    # Put result on bus
+    msg = EventMessage(content=result)
+    self.send_bus.send(msg)
+
+    logger.info("Result sent")
+
diff --git a/SAS/ResourceAssignment/Services/src/rataskspecifiedservice b/SAS/ResourceAssignment/Services/src/rataskspecifiedservice
new file mode 100644
index 0000000000000000000000000000000000000000..bac878107d95e35d39803351ecd97b1debaad5eb
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/src/rataskspecifiedservice
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+#coding: iso-8859-15
+#
+# Copyright (C) 2015
+# ASTRON (Netherlands Institute for Radio Astronomy)
+# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+#
+# This file is part of the LOFAR software suite.
+# The LOFAR software suite is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# The LOFAR software suite is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+#
+# $Id: JobsToSchedule.py 33364 2016-01-21 21:21:12Z mol $
+"""
+Daemon that listens to OTDB status changes to PRESCHEDULED, requests
+the parset of such jobs (+ their predecessors), and posts them on the bus.
+"""
+
+from lofar.sas.resourceassignment.RATaskSpecified import RATaskSpecified
+
+if __name__ == "__main__":
+    import sys
+    from optparse import OptionParser
+
+    # Check the invocation arguments
+    parser = OptionParser("%prog -O otdb_bus -B my_bus [options]")
+    parser.add_option("-O", "--otdb_bus", dest="otdb_busname", type="string", default="",
+                      help="Bus or queue OTDB operates on")
+    parser.add_option("-B", "--my_bus", dest="my_busname", type="string", default="",
+                      help="Bus or queue we publish resource requests on")
+    (options, args) = parser.parse_args()
+
+    if not options.statusbus or not options.parsetbus or not options.busname:
+        parser.print_help()
+        sys.exit(1)
+
+    with RATaskSpecified("OTDB.TaskSpecified", otdb_busname=options.otdb_busname, my_busname=options.my_busname) as jts:
+        waitForInterrupt()
+
diff --git a/SAS/ResourceAssignment/Services/src/rataskspecifiedservice.ini b/SAS/ResourceAssignment/Services/src/rataskspecifiedservice.ini
new file mode 100644
index 0000000000000000000000000000000000000000..fa18d43856d59896880b29913019cf21734076e6
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/src/rataskspecifiedservice.ini
@@ -0,0 +1,7 @@
+[program:RATaskSpecified]
+command=/bin/bash -c 'source $LOFARROOT/lofarinit.sh;rataskspecifiedservice'
+user=lofarsys
+stopsignal=INT ; KeyboardInterrupt
+stopasgroup=true
+stdout_logfile=%(program_name)s.log
+stderr_logfile=%(program_name)s.stderr
diff --git a/SAS/ResourceAssignment/Services/test/CMakeLists.txt b/SAS/ResourceAssignment/Services/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2dccf9d7337830a2811eb3f730a88e2f579f49d7
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/test/CMakeLists.txt
@@ -0,0 +1,5 @@
+# $Id$
+
+include(LofarCTest)
+
+lofar_add_test(tRATaskSpecified)
diff --git a/SAS/ResourceAssignment/Services/test/tRATaskSpecified.in_correlator b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.in_correlator
new file mode 100644
index 0000000000000000000000000000000000000000..065b4a4adcfe512ed30602d7f4a5080e579e40c0
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.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/tRATaskSpecified.in_preprocessing b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.in_preprocessing
new file mode 100644
index 0000000000000000000000000000000000000000..88bf9567fb31a55e9a86fbc60632d3df2e1c8a98
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.in_preprocessing
@@ -0,0 +1,273 @@
+Clock160.channelWidth=610.3515625
+Clock160.samplesPerSecond=155648
+Clock160.subbandWidth=156.250
+Clock160.systemClock=160
+Clock200.channelWidth=762.939453125
+Clock200.samplesPerSecond=196608
+Clock200.subbandWidth=195.3125
+Clock200.systemClock=200
+ObsSW.Observation.Campaign.CO_I=""
+ObsSW.Observation.Campaign.PI="Pizzo, Dr. Roberto Francesco"
+ObsSW.Observation.Campaign.contact="Pizzo, Dr. Roberto Francesco"
+ObsSW.Observation.Campaign.name="2015LOFAROBS_new"
+ObsSW.Observation.Campaign.title="2015LOFAROBS_new"
+ObsSW.Observation.DataProducts.Input_CoherentStokes.dirmask=
+ObsSW.Observation.DataProducts.Input_CoherentStokes.enabled=false
+ObsSW.Observation.DataProducts.Input_CoherentStokes.filenames=[]
+ObsSW.Observation.DataProducts.Input_CoherentStokes.identifications=[]
+ObsSW.Observation.DataProducts.Input_CoherentStokes.locations=[]
+ObsSW.Observation.DataProducts.Input_CoherentStokes.mountpoints=[]
+ObsSW.Observation.DataProducts.Input_CoherentStokes.namemask=
+ObsSW.Observation.DataProducts.Input_CoherentStokes.skip=[]
+ObsSW.Observation.DataProducts.Input_Correlated.dirmask=
+ObsSW.Observation.DataProducts.Input_Correlated.enabled=true
+ObsSW.Observation.DataProducts.Input_Correlated.filenames=[L426528_SAP000_SB000_uv.MS,L426528_SAP000_SB001_uv.MS,L426528_SAP000_SB002_uv.MS,L426528_SAP000_SB003_uv.MS,L426528_SAP000_SB004_uv.MS,L426528_SAP000_SB005_uv.MS,L426528_SAP000_SB006_uv.MS,L426528_SAP000_SB007_uv.MS,L426528_SAP000_SB008_uv.MS,L426528_SAP000_SB009_uv.MS,L426528_SAP000_SB010_uv.MS,L426528_SAP000_SB011_uv.MS,L426528_SAP000_SB012_uv.MS,L426528_SAP000_SB013_uv.MS,L426528_SAP000_SB014_uv.MS,L426528_SAP000_SB015_uv.MS,L426528_SAP000_SB016_uv.MS,L426528_SAP000_SB017_uv.MS,L426528_SAP000_SB018_uv.MS,L426528_SAP000_SB019_uv.MS,L426528_SAP000_SB020_uv.MS,L426528_SAP000_SB021_uv.MS,L426528_SAP000_SB022_uv.MS,L426528_SAP000_SB023_uv.MS,L426528_SAP000_SB024_uv.MS,L426528_SAP000_SB025_uv.MS,L426528_SAP000_SB026_uv.MS,L426528_SAP000_SB027_uv.MS,L426528_SAP000_SB028_uv.MS,L426528_SAP000_SB029_uv.MS,L426528_SAP000_SB030_uv.MS,L426528_SAP000_SB031_uv.MS,L426528_SAP000_SB032_uv.MS,L426528_SAP000_SB033_uv.MS,L426528_SAP000_SB034_uv.MS,L426528_SAP000_SB035_uv.MS,L426528_SAP000_SB036_uv.MS,L426528_SAP000_SB037_uv.MS,L426528_SAP000_SB038_uv.MS,L426528_SAP000_SB039_uv.MS,L426528_SAP000_SB040_uv.MS,L426528_SAP000_SB041_uv.MS,L426528_SAP000_SB042_uv.MS,L426528_SAP000_SB043_uv.MS,L426528_SAP000_SB044_uv.MS,L426528_SAP000_SB045_uv.MS,L426528_SAP000_SB046_uv.MS,L426528_SAP000_SB047_uv.MS,L426528_SAP000_SB048_uv.MS,L426528_SAP000_SB049_uv.MS,L426528_SAP000_SB050_uv.MS,L426528_SAP000_SB051_uv.MS,L426528_SAP000_SB052_uv.MS,L426528_SAP000_SB053_uv.MS,L426528_SAP000_SB054_uv.MS,L426528_SAP000_SB055_uv.MS,L426528_SAP000_SB056_uv.MS,L426528_SAP000_SB057_uv.MS,L426528_SAP000_SB058_uv.MS,L426528_SAP000_SB059_uv.MS,L426528_SAP000_SB060_uv.MS,L426528_SAP000_SB061_uv.MS,L426528_SAP000_SB062_uv.MS,L426528_SAP000_SB063_uv.MS,L426528_SAP000_SB064_uv.MS,L426528_SAP000_SB065_uv.MS,L426528_SAP000_SB066_uv.MS,L426528_SAP000_SB067_uv.MS,L426528_SAP000_SB068_uv.MS,L426528_SAP000_SB069_uv.MS,L426528_SAP000_SB070_uv.MS,L426528_SAP000_SB071_uv.MS,L426528_SAP000_SB072_uv.MS,L426528_SAP000_SB073_uv.MS,L426528_SAP000_SB074_uv.MS,L426528_SAP000_SB075_uv.MS,L426528_SAP000_SB076_uv.MS,L426528_SAP000_SB077_uv.MS,L426528_SAP000_SB078_uv.MS,L426528_SAP000_SB079_uv.MS,L426528_SAP000_SB080_uv.MS,L426528_SAP000_SB081_uv.MS,L426528_SAP000_SB082_uv.MS,L426528_SAP000_SB083_uv.MS,L426528_SAP000_SB084_uv.MS,L426528_SAP000_SB085_uv.MS,L426528_SAP000_SB086_uv.MS,L426528_SAP000_SB087_uv.MS,L426528_SAP000_SB088_uv.MS,L426528_SAP000_SB089_uv.MS,L426528_SAP000_SB090_uv.MS,L426528_SAP000_SB091_uv.MS,L426528_SAP000_SB092_uv.MS,L426528_SAP000_SB093_uv.MS,L426528_SAP000_SB094_uv.MS,L426528_SAP000_SB095_uv.MS,L426528_SAP000_SB096_uv.MS,L426528_SAP000_SB097_uv.MS,L426528_SAP000_SB098_uv.MS,L426528_SAP000_SB099_uv.MS,L426528_SAP000_SB100_uv.MS,L426528_SAP000_SB101_uv.MS,L426528_SAP000_SB102_uv.MS,L426528_SAP000_SB103_uv.MS,L426528_SAP000_SB104_uv.MS,L426528_SAP000_SB105_uv.MS,L426528_SAP000_SB106_uv.MS,L426528_SAP000_SB107_uv.MS,L426528_SAP000_SB108_uv.MS,L426528_SAP000_SB109_uv.MS,L426528_SAP000_SB110_uv.MS,L426528_SAP000_SB111_uv.MS,L426528_SAP000_SB112_uv.MS,L426528_SAP000_SB113_uv.MS,L426528_SAP000_SB114_uv.MS,L426528_SAP000_SB115_uv.MS,L426528_SAP000_SB116_uv.MS,L426528_SAP000_SB117_uv.MS,L426528_SAP000_SB118_uv.MS,L426528_SAP000_SB119_uv.MS,L426528_SAP000_SB120_uv.MS,L426528_SAP000_SB121_uv.MS,L426528_SAP000_SB122_uv.MS,L426528_SAP000_SB123_uv.MS,L426528_SAP000_SB124_uv.MS,L426528_SAP000_SB125_uv.MS,L426528_SAP000_SB126_uv.MS,L426528_SAP000_SB127_uv.MS,L426528_SAP000_SB128_uv.MS,L426528_SAP000_SB129_uv.MS,L426528_SAP000_SB130_uv.MS,L426528_SAP000_SB131_uv.MS,L426528_SAP000_SB132_uv.MS,L426528_SAP000_SB133_uv.MS,L426528_SAP000_SB134_uv.MS,L426528_SAP000_SB135_uv.MS,L426528_SAP000_SB136_uv.MS,L426528_SAP000_SB137_uv.MS,L426528_SAP000_SB138_uv.MS,L426528_SAP000_SB139_uv.MS,L426528_SAP000_SB140_uv.MS,L426528_SAP000_SB141_uv.MS,L426528_SAP000_SB142_uv.MS,L426528_SAP000_SB143_uv.MS,L426528_SAP000_SB144_uv.MS,L426528_SAP000_SB145_uv.MS,L426528_SAP000_SB146_uv.MS,L426528_SAP000_SB147_uv.MS,L426528_SAP000_SB148_uv.MS,L426528_SAP000_SB149_uv.MS,L426528_SAP000_SB150_uv.MS,L426528_SAP000_SB151_uv.MS,L426528_SAP000_SB152_uv.MS,L426528_SAP000_SB153_uv.MS,L426528_SAP000_SB154_uv.MS,L426528_SAP000_SB155_uv.MS,L426528_SAP000_SB156_uv.MS,L426528_SAP000_SB157_uv.MS,L426528_SAP000_SB158_uv.MS,L426528_SAP000_SB159_uv.MS,L426528_SAP000_SB160_uv.MS,L426528_SAP000_SB161_uv.MS,L426528_SAP000_SB162_uv.MS,L426528_SAP000_SB163_uv.MS,L426528_SAP000_SB164_uv.MS,L426528_SAP000_SB165_uv.MS,L426528_SAP000_SB166_uv.MS,L426528_SAP000_SB167_uv.MS,L426528_SAP000_SB168_uv.MS,L426528_SAP000_SB169_uv.MS,L426528_SAP000_SB170_uv.MS,L426528_SAP000_SB171_uv.MS,L426528_SAP000_SB172_uv.MS,L426528_SAP000_SB173_uv.MS,L426528_SAP000_SB174_uv.MS,L426528_SAP000_SB175_uv.MS,L426528_SAP000_SB176_uv.MS,L426528_SAP000_SB177_uv.MS,L426528_SAP000_SB178_uv.MS,L426528_SAP000_SB179_uv.MS,L426528_SAP000_SB180_uv.MS,L426528_SAP000_SB181_uv.MS,L426528_SAP000_SB182_uv.MS,L426528_SAP000_SB183_uv.MS,L426528_SAP000_SB184_uv.MS,L426528_SAP000_SB185_uv.MS,L426528_SAP000_SB186_uv.MS,L426528_SAP000_SB187_uv.MS,L426528_SAP000_SB188_uv.MS,L426528_SAP000_SB189_uv.MS,L426528_SAP000_SB190_uv.MS,L426528_SAP000_SB191_uv.MS,L426528_SAP000_SB192_uv.MS,L426528_SAP000_SB193_uv.MS,L426528_SAP000_SB194_uv.MS,L426528_SAP000_SB195_uv.MS,L426528_SAP000_SB196_uv.MS,L426528_SAP000_SB197_uv.MS,L426528_SAP000_SB198_uv.MS,L426528_SAP000_SB199_uv.MS,L426528_SAP000_SB200_uv.MS,L426528_SAP000_SB201_uv.MS,L426528_SAP000_SB202_uv.MS,L426528_SAP000_SB203_uv.MS,L426528_SAP000_SB204_uv.MS,L426528_SAP000_SB205_uv.MS,L426528_SAP000_SB206_uv.MS,L426528_SAP000_SB207_uv.MS,L426528_SAP000_SB208_uv.MS,L426528_SAP000_SB209_uv.MS,L426528_SAP000_SB210_uv.MS,L426528_SAP000_SB211_uv.MS,L426528_SAP000_SB212_uv.MS,L426528_SAP000_SB213_uv.MS,L426528_SAP000_SB214_uv.MS,L426528_SAP000_SB215_uv.MS,L426528_SAP000_SB216_uv.MS,L426528_SAP000_SB217_uv.MS,L426528_SAP000_SB218_uv.MS,L426528_SAP000_SB219_uv.MS,L426528_SAP000_SB220_uv.MS,L426528_SAP000_SB221_uv.MS,L426528_SAP000_SB222_uv.MS,L426528_SAP000_SB223_uv.MS,L426528_SAP000_SB224_uv.MS,L426528_SAP000_SB225_uv.MS,L426528_SAP000_SB226_uv.MS,L426528_SAP000_SB227_uv.MS,L426528_SAP000_SB228_uv.MS,L426528_SAP000_SB229_uv.MS,L426528_SAP000_SB230_uv.MS,L426528_SAP000_SB231_uv.MS,L426528_SAP000_SB232_uv.MS,L426528_SAP000_SB233_uv.MS,L426528_SAP000_SB234_uv.MS,L426528_SAP000_SB235_uv.MS,L426528_SAP000_SB236_uv.MS,L426528_SAP000_SB237_uv.MS,L426528_SAP000_SB238_uv.MS,L426528_SAP000_SB239_uv.MS,L426528_SAP000_SB240_uv.MS,L426528_SAP000_SB241_uv.MS,L426528_SAP000_SB242_uv.MS,L426528_SAP000_SB243_uv.MS]
+ObsSW.Observation.DataProducts.Input_Correlated.identifications=[mom.G630967.B0.1.T.SAP000.uv.dps]
+ObsSW.Observation.DataProducts.Input_Correlated.locations=[locus001:/data/L426528/,locus003:/data/L426528/,locus004:/data/L426528/,locus005:/data/L426528/,locus006:/data/L426528/,locus007:/data/L426528/,locus008:/data/L426528/,locus009:/data/L426528/,locus010:/data/L426528/,locus011:/data/L426528/,locus012:/data/L426528/,locus014:/data/L426528/,locus016:/data/L426528/,locus017:/data/L426528/,locus018:/data/L426528/,locus020:/data/L426528/,locus021:/data/L426528/,locus023:/data/L426528/,locus025:/data/L426528/,locus026:/data/L426528/,locus027:/data/L426528/,locus028:/data/L426528/,locus029:/data/L426528/,locus031:/data/L426528/,locus032:/data/L426528/,locus034:/data/L426528/,locus035:/data/L426528/,locus036:/data/L426528/,locus037:/data/L426528/,locus038:/data/L426528/,locus039:/data/L426528/,locus040:/data/L426528/,locus041:/data/L426528/,locus042:/data/L426528/,locus043:/data/L426528/,locus044:/data/L426528/,locus045:/data/L426528/,locus046:/data/L426528/,locus047:/data/L426528/,locus048:/data/L426528/,locus049:/data/L426528/,locus050:/data/L426528/,locus051:/data/L426528/,locus052:/data/L426528/,locus053:/data/L426528/,locus054:/data/L426528/,locus055:/data/L426528/,locus056:/data/L426528/,locus057:/data/L426528/,locus058:/data/L426528/,locus060:/data/L426528/,locus061:/data/L426528/,locus062:/data/L426528/,locus063:/data/L426528/,locus064:/data/L426528/,locus065:/data/L426528/,locus066:/data/L426528/,locus067:/data/L426528/,locus068:/data/L426528/,locus069:/data/L426528/,locus070:/data/L426528/,locus071:/data/L426528/,locus072:/data/L426528/,locus073:/data/L426528/,locus074:/data/L426528/,locus075:/data/L426528/,locus076:/data/L426528/,locus077:/data/L426528/,locus078:/data/L426528/,locus079:/data/L426528/,locus080:/data/L426528/,locus081:/data/L426528/,locus082:/data/L426528/,locus084:/data/L426528/,locus085:/data/L426528/,locus086:/data/L426528/,locus087:/data/L426528/,locus088:/data/L426528/,locus089:/data/L426528/,locus090:/data/L426528/,locus091:/data/L426528/,locus001:/data/L426528/,locus003:/data/L426528/,locus004:/data/L426528/,locus005:/data/L426528/,locus006:/data/L426528/,locus007:/data/L426528/,locus008:/data/L426528/,locus009:/data/L426528/,locus010:/data/L426528/,locus011:/data/L426528/,locus012:/data/L426528/,locus014:/data/L426528/,locus016:/data/L426528/,locus017:/data/L426528/,locus018:/data/L426528/,locus020:/data/L426528/,locus021:/data/L426528/,locus023:/data/L426528/,locus025:/data/L426528/,locus026:/data/L426528/,locus027:/data/L426528/,locus028:/data/L426528/,locus029:/data/L426528/,locus031:/data/L426528/,locus032:/data/L426528/,locus034:/data/L426528/,locus035:/data/L426528/,locus036:/data/L426528/,locus037:/data/L426528/,locus038:/data/L426528/,locus039:/data/L426528/,locus040:/data/L426528/,locus041:/data/L426528/,locus042:/data/L426528/,locus043:/data/L426528/,locus044:/data/L426528/,locus045:/data/L426528/,locus046:/data/L426528/,locus047:/data/L426528/,locus048:/data/L426528/,locus049:/data/L426528/,locus050:/data/L426528/,locus051:/data/L426528/,locus052:/data/L426528/,locus053:/data/L426528/,locus054:/data/L426528/,locus055:/data/L426528/,locus056:/data/L426528/,locus057:/data/L426528/,locus058:/data/L426528/,locus060:/data/L426528/,locus061:/data/L426528/,locus062:/data/L426528/,locus063:/data/L426528/,locus064:/data/L426528/,locus065:/data/L426528/,locus066:/data/L426528/,locus067:/data/L426528/,locus068:/data/L426528/,locus069:/data/L426528/,locus070:/data/L426528/,locus071:/data/L426528/,locus072:/data/L426528/,locus073:/data/L426528/,locus074:/data/L426528/,locus075:/data/L426528/,locus076:/data/L426528/,locus077:/data/L426528/,locus078:/data/L426528/,locus079:/data/L426528/,locus080:/data/L426528/,locus081:/data/L426528/,locus082:/data/L426528/,locus084:/data/L426528/,locus085:/data/L426528/,locus086:/data/L426528/,locus087:/data/L426528/,locus088:/data/L426528/,locus089:/data/L426528/,locus090:/data/L426528/,locus091:/data/L426528/,locus001:/data/L426528/,locus003:/data/L426528/,locus004:/data/L426528/,locus005:/data/L426528/,locus006:/data/L426528/,locus007:/data/L426528/,locus008:/data/L426528/,locus009:/data/L426528/,locus010:/data/L426528/,locus011:/data/L426528/,locus012:/data/L426528/,locus014:/data/L426528/,locus016:/data/L426528/,locus017:/data/L426528/,locus018:/data/L426528/,locus020:/data/L426528/,locus021:/data/L426528/,locus023:/data/L426528/,locus025:/data/L426528/,locus026:/data/L426528/,locus027:/data/L426528/,locus028:/data/L426528/,locus029:/data/L426528/,locus031:/data/L426528/,locus032:/data/L426528/,locus034:/data/L426528/,locus035:/data/L426528/,locus036:/data/L426528/,locus037:/data/L426528/,locus038:/data/L426528/,locus039:/data/L426528/,locus040:/data/L426528/,locus041:/data/L426528/,locus042:/data/L426528/,locus043:/data/L426528/,locus044:/data/L426528/,locus045:/data/L426528/,locus046:/data/L426528/,locus047:/data/L426528/,locus048:/data/L426528/,locus049:/data/L426528/,locus050:/data/L426528/,locus051:/data/L426528/,locus052:/data/L426528/,locus053:/data/L426528/,locus054:/data/L426528/,locus055:/data/L426528/,locus056:/data/L426528/,locus057:/data/L426528/,locus058:/data/L426528/,locus060:/data/L426528/,locus061:/data/L426528/,locus062:/data/L426528/,locus063:/data/L426528/,locus064:/data/L426528/,locus065:/data/L426528/,locus066:/data/L426528/,locus067:/data/L426528/,locus068:/data/L426528/,locus069:/data/L426528/,locus070:/data/L426528/,locus071:/data/L426528/,locus072:/data/L426528/,locus073:/data/L426528/,locus074:/data/L426528/,locus075:/data/L426528/,locus076:/data/L426528/,locus077:/data/L426528/,locus078:/data/L426528/,locus079:/data/L426528/,locus080:/data/L426528/,locus081:/data/L426528/,locus082:/data/L426528/,locus084:/data/L426528/,locus085:/data/L426528/,locus086:/data/L426528/,locus087:/data/L426528/,locus088:/data/L426528/,locus089:/data/L426528/,locus090:/data/L426528/,locus091:/data/L426528/,locus001:/data/L426528/]
+ObsSW.Observation.DataProducts.Input_Correlated.mountpoints=[]
+ObsSW.Observation.DataProducts.Input_Correlated.namemask=
+ObsSW.Observation.DataProducts.Input_Correlated.skip=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.dirmask=
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.enabled=false
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.filenames=[]
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.identifications=[]
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.locations=[]
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.mountpoints=[]
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.namemask=
+ObsSW.Observation.DataProducts.Input_IncoherentStokes.skip=[]
+ObsSW.Observation.DataProducts.Input_InstrumentModel.dirmask=
+ObsSW.Observation.DataProducts.Input_InstrumentModel.enabled=false
+ObsSW.Observation.DataProducts.Input_InstrumentModel.filenames=[]
+ObsSW.Observation.DataProducts.Input_InstrumentModel.identifications=[]
+ObsSW.Observation.DataProducts.Input_InstrumentModel.locations=[]
+ObsSW.Observation.DataProducts.Input_InstrumentModel.mountpoints=[]
+ObsSW.Observation.DataProducts.Input_InstrumentModel.namemask=
+ObsSW.Observation.DataProducts.Input_InstrumentModel.skip=[]
+ObsSW.Observation.DataProducts.Input_SkyImage.dirmask=
+ObsSW.Observation.DataProducts.Input_SkyImage.enabled=false
+ObsSW.Observation.DataProducts.Input_SkyImage.filenames=[]
+ObsSW.Observation.DataProducts.Input_SkyImage.identifications=[]
+ObsSW.Observation.DataProducts.Input_SkyImage.locations=[]
+ObsSW.Observation.DataProducts.Input_SkyImage.mountpoints=[]
+ObsSW.Observation.DataProducts.Input_SkyImage.namemask=
+ObsSW.Observation.DataProducts.Input_SkyImage.skip=[]
+ObsSW.Observation.DataProducts.Output_CoherentStokes.archived=false
+ObsSW.Observation.DataProducts.Output_CoherentStokes.deleted=false
+ObsSW.Observation.DataProducts.Output_CoherentStokes.dirmask=
+ObsSW.Observation.DataProducts.Output_CoherentStokes.enabled=false
+ObsSW.Observation.DataProducts.Output_CoherentStokes.filenames=[]
+ObsSW.Observation.DataProducts.Output_CoherentStokes.identifications=[]
+ObsSW.Observation.DataProducts.Output_CoherentStokes.locations=[]
+ObsSW.Observation.DataProducts.Output_CoherentStokes.mountpoints=[]
+ObsSW.Observation.DataProducts.Output_CoherentStokes.namemask=
+ObsSW.Observation.DataProducts.Output_CoherentStokes.percentageWritten=[]
+ObsSW.Observation.DataProducts.Output_CoherentStokes.retentiontime=14
+ObsSW.Observation.DataProducts.Output_CoherentStokes.skip=[]
+ObsSW.Observation.DataProducts.Output_Correlated.archived=false
+ObsSW.Observation.DataProducts.Output_Correlated.deleted=false
+ObsSW.Observation.DataProducts.Output_Correlated.dirmask=L${OBSID}
+ObsSW.Observation.DataProducts.Output_Correlated.enabled=true
+ObsSW.Observation.DataProducts.Output_Correlated.filenames=[L426942_SB000_uv.dppp.MS,L426942_SB001_uv.dppp.MS,L426942_SB002_uv.dppp.MS,L426942_SB003_uv.dppp.MS,L426942_SB004_uv.dppp.MS,L426942_SB005_uv.dppp.MS,L426942_SB006_uv.dppp.MS,L426942_SB007_uv.dppp.MS,L426942_SB008_uv.dppp.MS,L426942_SB009_uv.dppp.MS,L426942_SB010_uv.dppp.MS,L426942_SB011_uv.dppp.MS,L426942_SB012_uv.dppp.MS,L426942_SB013_uv.dppp.MS,L426942_SB014_uv.dppp.MS,L426942_SB015_uv.dppp.MS,L426942_SB016_uv.dppp.MS,L426942_SB017_uv.dppp.MS,L426942_SB018_uv.dppp.MS,L426942_SB019_uv.dppp.MS,L426942_SB020_uv.dppp.MS,L426942_SB021_uv.dppp.MS,L426942_SB022_uv.dppp.MS,L426942_SB023_uv.dppp.MS,L426942_SB024_uv.dppp.MS,L426942_SB025_uv.dppp.MS,L426942_SB026_uv.dppp.MS,L426942_SB027_uv.dppp.MS,L426942_SB028_uv.dppp.MS,L426942_SB029_uv.dppp.MS,L426942_SB030_uv.dppp.MS,L426942_SB031_uv.dppp.MS,L426942_SB032_uv.dppp.MS,L426942_SB033_uv.dppp.MS,L426942_SB034_uv.dppp.MS,L426942_SB035_uv.dppp.MS,L426942_SB036_uv.dppp.MS,L426942_SB037_uv.dppp.MS,L426942_SB038_uv.dppp.MS,L426942_SB039_uv.dppp.MS,L426942_SB040_uv.dppp.MS,L426942_SB041_uv.dppp.MS,L426942_SB042_uv.dppp.MS,L426942_SB043_uv.dppp.MS,L426942_SB044_uv.dppp.MS,L426942_SB045_uv.dppp.MS,L426942_SB046_uv.dppp.MS,L426942_SB047_uv.dppp.MS,L426942_SB048_uv.dppp.MS,L426942_SB049_uv.dppp.MS,L426942_SB050_uv.dppp.MS,L426942_SB051_uv.dppp.MS,L426942_SB052_uv.dppp.MS,L426942_SB053_uv.dppp.MS,L426942_SB054_uv.dppp.MS,L426942_SB055_uv.dppp.MS,L426942_SB056_uv.dppp.MS,L426942_SB057_uv.dppp.MS,L426942_SB058_uv.dppp.MS,L426942_SB059_uv.dppp.MS,L426942_SB060_uv.dppp.MS,L426942_SB061_uv.dppp.MS,L426942_SB062_uv.dppp.MS,L426942_SB063_uv.dppp.MS,L426942_SB064_uv.dppp.MS,L426942_SB065_uv.dppp.MS,L426942_SB066_uv.dppp.MS,L426942_SB067_uv.dppp.MS,L426942_SB068_uv.dppp.MS,L426942_SB069_uv.dppp.MS,L426942_SB070_uv.dppp.MS,L426942_SB071_uv.dppp.MS,L426942_SB072_uv.dppp.MS,L426942_SB073_uv.dppp.MS,L426942_SB074_uv.dppp.MS,L426942_SB075_uv.dppp.MS,L426942_SB076_uv.dppp.MS,L426942_SB077_uv.dppp.MS,L426942_SB078_uv.dppp.MS,L426942_SB079_uv.dppp.MS,L426942_SB080_uv.dppp.MS,L426942_SB081_uv.dppp.MS,L426942_SB082_uv.dppp.MS,L426942_SB083_uv.dppp.MS,L426942_SB084_uv.dppp.MS,L426942_SB085_uv.dppp.MS,L426942_SB086_uv.dppp.MS,L426942_SB087_uv.dppp.MS,L426942_SB088_uv.dppp.MS,L426942_SB089_uv.dppp.MS,L426942_SB090_uv.dppp.MS,L426942_SB091_uv.dppp.MS,L426942_SB092_uv.dppp.MS,L426942_SB093_uv.dppp.MS,L426942_SB094_uv.dppp.MS,L426942_SB095_uv.dppp.MS,L426942_SB096_uv.dppp.MS,L426942_SB097_uv.dppp.MS,L426942_SB098_uv.dppp.MS,L426942_SB099_uv.dppp.MS,L426942_SB100_uv.dppp.MS,L426942_SB101_uv.dppp.MS,L426942_SB102_uv.dppp.MS,L426942_SB103_uv.dppp.MS,L426942_SB104_uv.dppp.MS,L426942_SB105_uv.dppp.MS,L426942_SB106_uv.dppp.MS,L426942_SB107_uv.dppp.MS,L426942_SB108_uv.dppp.MS,L426942_SB109_uv.dppp.MS,L426942_SB110_uv.dppp.MS,L426942_SB111_uv.dppp.MS,L426942_SB112_uv.dppp.MS,L426942_SB113_uv.dppp.MS,L426942_SB114_uv.dppp.MS,L426942_SB115_uv.dppp.MS,L426942_SB116_uv.dppp.MS,L426942_SB117_uv.dppp.MS,L426942_SB118_uv.dppp.MS,L426942_SB119_uv.dppp.MS,L426942_SB120_uv.dppp.MS,L426942_SB121_uv.dppp.MS,L426942_SB122_uv.dppp.MS,L426942_SB123_uv.dppp.MS,L426942_SB124_uv.dppp.MS,L426942_SB125_uv.dppp.MS,L426942_SB126_uv.dppp.MS,L426942_SB127_uv.dppp.MS,L426942_SB128_uv.dppp.MS,L426942_SB129_uv.dppp.MS,L426942_SB130_uv.dppp.MS,L426942_SB131_uv.dppp.MS,L426942_SB132_uv.dppp.MS,L426942_SB133_uv.dppp.MS,L426942_SB134_uv.dppp.MS,L426942_SB135_uv.dppp.MS,L426942_SB136_uv.dppp.MS,L426942_SB137_uv.dppp.MS,L426942_SB138_uv.dppp.MS,L426942_SB139_uv.dppp.MS,L426942_SB140_uv.dppp.MS,L426942_SB141_uv.dppp.MS,L426942_SB142_uv.dppp.MS,L426942_SB143_uv.dppp.MS,L426942_SB144_uv.dppp.MS,L426942_SB145_uv.dppp.MS,L426942_SB146_uv.dppp.MS,L426942_SB147_uv.dppp.MS,L426942_SB148_uv.dppp.MS,L426942_SB149_uv.dppp.MS,L426942_SB150_uv.dppp.MS,L426942_SB151_uv.dppp.MS,L426942_SB152_uv.dppp.MS,L426942_SB153_uv.dppp.MS,L426942_SB154_uv.dppp.MS,L426942_SB155_uv.dppp.MS,L426942_SB156_uv.dppp.MS,L426942_SB157_uv.dppp.MS,L426942_SB158_uv.dppp.MS,L426942_SB159_uv.dppp.MS,L426942_SB160_uv.dppp.MS,L426942_SB161_uv.dppp.MS,L426942_SB162_uv.dppp.MS,L426942_SB163_uv.dppp.MS,L426942_SB164_uv.dppp.MS,L426942_SB165_uv.dppp.MS,L426942_SB166_uv.dppp.MS,L426942_SB167_uv.dppp.MS,L426942_SB168_uv.dppp.MS,L426942_SB169_uv.dppp.MS,L426942_SB170_uv.dppp.MS,L426942_SB171_uv.dppp.MS,L426942_SB172_uv.dppp.MS,L426942_SB173_uv.dppp.MS,L426942_SB174_uv.dppp.MS,L426942_SB175_uv.dppp.MS,L426942_SB176_uv.dppp.MS,L426942_SB177_uv.dppp.MS,L426942_SB178_uv.dppp.MS,L426942_SB179_uv.dppp.MS,L426942_SB180_uv.dppp.MS,L426942_SB181_uv.dppp.MS,L426942_SB182_uv.dppp.MS,L426942_SB183_uv.dppp.MS,L426942_SB184_uv.dppp.MS,L426942_SB185_uv.dppp.MS,L426942_SB186_uv.dppp.MS,L426942_SB187_uv.dppp.MS,L426942_SB188_uv.dppp.MS,L426942_SB189_uv.dppp.MS,L426942_SB190_uv.dppp.MS,L426942_SB191_uv.dppp.MS,L426942_SB192_uv.dppp.MS,L426942_SB193_uv.dppp.MS,L426942_SB194_uv.dppp.MS,L426942_SB195_uv.dppp.MS,L426942_SB196_uv.dppp.MS,L426942_SB197_uv.dppp.MS,L426942_SB198_uv.dppp.MS,L426942_SB199_uv.dppp.MS,L426942_SB200_uv.dppp.MS,L426942_SB201_uv.dppp.MS,L426942_SB202_uv.dppp.MS,L426942_SB203_uv.dppp.MS,L426942_SB204_uv.dppp.MS,L426942_SB205_uv.dppp.MS,L426942_SB206_uv.dppp.MS,L426942_SB207_uv.dppp.MS,L426942_SB208_uv.dppp.MS,L426942_SB209_uv.dppp.MS,L426942_SB210_uv.dppp.MS,L426942_SB211_uv.dppp.MS,L426942_SB212_uv.dppp.MS,L426942_SB213_uv.dppp.MS,L426942_SB214_uv.dppp.MS,L426942_SB215_uv.dppp.MS,L426942_SB216_uv.dppp.MS,L426942_SB217_uv.dppp.MS,L426942_SB218_uv.dppp.MS,L426942_SB219_uv.dppp.MS,L426942_SB220_uv.dppp.MS,L426942_SB221_uv.dppp.MS,L426942_SB222_uv.dppp.MS,L426942_SB223_uv.dppp.MS,L426942_SB224_uv.dppp.MS,L426942_SB225_uv.dppp.MS,L426942_SB226_uv.dppp.MS,L426942_SB227_uv.dppp.MS,L426942_SB228_uv.dppp.MS,L426942_SB229_uv.dppp.MS,L426942_SB230_uv.dppp.MS,L426942_SB231_uv.dppp.MS,L426942_SB232_uv.dppp.MS,L426942_SB233_uv.dppp.MS,L426942_SB234_uv.dppp.MS,L426942_SB235_uv.dppp.MS,L426942_SB236_uv.dppp.MS,L426942_SB237_uv.dppp.MS,L426942_SB238_uv.dppp.MS,L426942_SB239_uv.dppp.MS,L426942_SB240_uv.dppp.MS,L426942_SB241_uv.dppp.MS,L426942_SB242_uv.dppp.MS,L426942_SB243_uv.dppp.MS]
+ObsSW.Observation.DataProducts.Output_Correlated.identifications=[mom.G630967.M631401.fP.dps.uv]
+ObsSW.Observation.DataProducts.Output_Correlated.locations=[locus001:/data/L426942/,locus003:/data/L426942/,locus004:/data/L426942/,locus005:/data/L426942/,locus006:/data/L426942/,locus007:/data/L426942/,locus008:/data/L426942/,locus009:/data/L426942/,locus010:/data/L426942/,locus011:/data/L426942/,locus012:/data/L426942/,locus014:/data/L426942/,locus016:/data/L426942/,locus017:/data/L426942/,locus018:/data/L426942/,locus020:/data/L426942/,locus021:/data/L426942/,locus023:/data/L426942/,locus025:/data/L426942/,locus026:/data/L426942/,locus027:/data/L426942/,locus028:/data/L426942/,locus029:/data/L426942/,locus031:/data/L426942/,locus032:/data/L426942/,locus034:/data/L426942/,locus035:/data/L426942/,locus036:/data/L426942/,locus037:/data/L426942/,locus038:/data/L426942/,locus039:/data/L426942/,locus040:/data/L426942/,locus041:/data/L426942/,locus042:/data/L426942/,locus043:/data/L426942/,locus044:/data/L426942/,locus045:/data/L426942/,locus046:/data/L426942/,locus047:/data/L426942/,locus048:/data/L426942/,locus049:/data/L426942/,locus050:/data/L426942/,locus051:/data/L426942/,locus052:/data/L426942/,locus053:/data/L426942/,locus054:/data/L426942/,locus055:/data/L426942/,locus056:/data/L426942/,locus057:/data/L426942/,locus058:/data/L426942/,locus060:/data/L426942/,locus061:/data/L426942/,locus062:/data/L426942/,locus063:/data/L426942/,locus064:/data/L426942/,locus065:/data/L426942/,locus066:/data/L426942/,locus067:/data/L426942/,locus068:/data/L426942/,locus069:/data/L426942/,locus070:/data/L426942/,locus071:/data/L426942/,locus072:/data/L426942/,locus073:/data/L426942/,locus074:/data/L426942/,locus075:/data/L426942/,locus076:/data/L426942/,locus077:/data/L426942/,locus078:/data/L426942/,locus079:/data/L426942/,locus080:/data/L426942/,locus081:/data/L426942/,locus082:/data/L426942/,locus084:/data/L426942/,locus085:/data/L426942/,locus086:/data/L426942/,locus087:/data/L426942/,locus088:/data/L426942/,locus089:/data/L426942/,locus090:/data/L426942/,locus091:/data/L426942/,locus001:/data/L426942/,locus003:/data/L426942/,locus004:/data/L426942/,locus005:/data/L426942/,locus006:/data/L426942/,locus007:/data/L426942/,locus008:/data/L426942/,locus009:/data/L426942/,locus010:/data/L426942/,locus011:/data/L426942/,locus012:/data/L426942/,locus014:/data/L426942/,locus016:/data/L426942/,locus017:/data/L426942/,locus018:/data/L426942/,locus020:/data/L426942/,locus021:/data/L426942/,locus023:/data/L426942/,locus025:/data/L426942/,locus026:/data/L426942/,locus027:/data/L426942/,locus028:/data/L426942/,locus029:/data/L426942/,locus031:/data/L426942/,locus032:/data/L426942/,locus034:/data/L426942/,locus035:/data/L426942/,locus036:/data/L426942/,locus037:/data/L426942/,locus038:/data/L426942/,locus039:/data/L426942/,locus040:/data/L426942/,locus041:/data/L426942/,locus042:/data/L426942/,locus043:/data/L426942/,locus044:/data/L426942/,locus045:/data/L426942/,locus046:/data/L426942/,locus047:/data/L426942/,locus048:/data/L426942/,locus049:/data/L426942/,locus050:/data/L426942/,locus051:/data/L426942/,locus052:/data/L426942/,locus053:/data/L426942/,locus054:/data/L426942/,locus055:/data/L426942/,locus056:/data/L426942/,locus057:/data/L426942/,locus058:/data/L426942/,locus060:/data/L426942/,locus061:/data/L426942/,locus062:/data/L426942/,locus063:/data/L426942/,locus064:/data/L426942/,locus065:/data/L426942/,locus066:/data/L426942/,locus067:/data/L426942/,locus068:/data/L426942/,locus069:/data/L426942/,locus070:/data/L426942/,locus071:/data/L426942/,locus072:/data/L426942/,locus073:/data/L426942/,locus074:/data/L426942/,locus075:/data/L426942/,locus076:/data/L426942/,locus077:/data/L426942/,locus078:/data/L426942/,locus079:/data/L426942/,locus080:/data/L426942/,locus081:/data/L426942/,locus082:/data/L426942/,locus084:/data/L426942/,locus085:/data/L426942/,locus086:/data/L426942/,locus087:/data/L426942/,locus088:/data/L426942/,locus089:/data/L426942/,locus090:/data/L426942/,locus091:/data/L426942/,locus001:/data/L426942/,locus003:/data/L426942/,locus004:/data/L426942/,locus005:/data/L426942/,locus006:/data/L426942/,locus007:/data/L426942/,locus008:/data/L426942/,locus009:/data/L426942/,locus010:/data/L426942/,locus011:/data/L426942/,locus012:/data/L426942/,locus014:/data/L426942/,locus016:/data/L426942/,locus017:/data/L426942/,locus018:/data/L426942/,locus020:/data/L426942/,locus021:/data/L426942/,locus023:/data/L426942/,locus025:/data/L426942/,locus026:/data/L426942/,locus027:/data/L426942/,locus028:/data/L426942/,locus029:/data/L426942/,locus031:/data/L426942/,locus032:/data/L426942/,locus034:/data/L426942/,locus035:/data/L426942/,locus036:/data/L426942/,locus037:/data/L426942/,locus038:/data/L426942/,locus039:/data/L426942/,locus040:/data/L426942/,locus041:/data/L426942/,locus042:/data/L426942/,locus043:/data/L426942/,locus044:/data/L426942/,locus045:/data/L426942/,locus046:/data/L426942/,locus047:/data/L426942/,locus048:/data/L426942/,locus049:/data/L426942/,locus050:/data/L426942/,locus051:/data/L426942/,locus052:/data/L426942/,locus053:/data/L426942/,locus054:/data/L426942/,locus055:/data/L426942/,locus056:/data/L426942/,locus057:/data/L426942/,locus058:/data/L426942/,locus060:/data/L426942/,locus061:/data/L426942/,locus062:/data/L426942/,locus063:/data/L426942/,locus064:/data/L426942/,locus065:/data/L426942/,locus066:/data/L426942/,locus067:/data/L426942/,locus068:/data/L426942/,locus069:/data/L426942/,locus070:/data/L426942/,locus071:/data/L426942/,locus072:/data/L426942/,locus073:/data/L426942/,locus074:/data/L426942/,locus075:/data/L426942/,locus076:/data/L426942/,locus077:/data/L426942/,locus078:/data/L426942/,locus079:/data/L426942/,locus080:/data/L426942/,locus081:/data/L426942/,locus082:/data/L426942/,locus084:/data/L426942/,locus085:/data/L426942/,locus086:/data/L426942/,locus087:/data/L426942/,locus088:/data/L426942/,locus089:/data/L426942/,locus090:/data/L426942/,locus091:/data/L426942/,locus001:/data/L426942/]
+ObsSW.Observation.DataProducts.Output_Correlated.mountpoints=[locus001:/data,locus003:/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]
+ObsSW.Observation.DataProducts.Output_Correlated.namemask=L${OBSID}_SAP${SAP}_SB${SUBBAND}_uv.MS
+ObsSW.Observation.DataProducts.Output_Correlated.percentageWritten=[]
+ObsSW.Observation.DataProducts.Output_Correlated.retentiontime=14
+ObsSW.Observation.DataProducts.Output_Correlated.skip=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.archived=false
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.deleted=false
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.dirmask=
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.enabled=false
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.filenames=[]
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.identifications=[]
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.locations=[]
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.mountpoints=[]
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.namemask=
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.percentageWritten=[]
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.retentiontime=14
+ObsSW.Observation.DataProducts.Output_IncoherentStokes.skip=[]
+ObsSW.Observation.DataProducts.Output_InstrumentModel.archived=false
+ObsSW.Observation.DataProducts.Output_InstrumentModel.deleted=false
+ObsSW.Observation.DataProducts.Output_InstrumentModel.dirmask=
+ObsSW.Observation.DataProducts.Output_InstrumentModel.enabled=false
+ObsSW.Observation.DataProducts.Output_InstrumentModel.filenames=[]
+ObsSW.Observation.DataProducts.Output_InstrumentModel.identifications=[]
+ObsSW.Observation.DataProducts.Output_InstrumentModel.locations=[]
+ObsSW.Observation.DataProducts.Output_InstrumentModel.mountpoints=[]
+ObsSW.Observation.DataProducts.Output_InstrumentModel.namemask=
+ObsSW.Observation.DataProducts.Output_InstrumentModel.percentageWritten=[]
+ObsSW.Observation.DataProducts.Output_InstrumentModel.retentiontime=14
+ObsSW.Observation.DataProducts.Output_InstrumentModel.skip=[]
+ObsSW.Observation.DataProducts.Output_Pulsar.archived=false
+ObsSW.Observation.DataProducts.Output_Pulsar.deleted=false
+ObsSW.Observation.DataProducts.Output_Pulsar.dirmask=
+ObsSW.Observation.DataProducts.Output_Pulsar.enabled=false
+ObsSW.Observation.DataProducts.Output_Pulsar.filenames=[]
+ObsSW.Observation.DataProducts.Output_Pulsar.identifications=[]
+ObsSW.Observation.DataProducts.Output_Pulsar.locations=[]
+ObsSW.Observation.DataProducts.Output_Pulsar.mountpoints=[]
+ObsSW.Observation.DataProducts.Output_Pulsar.namemask=
+ObsSW.Observation.DataProducts.Output_Pulsar.percentageWritten=[]
+ObsSW.Observation.DataProducts.Output_Pulsar.retentiontime=14
+ObsSW.Observation.DataProducts.Output_Pulsar.skip=[]
+ObsSW.Observation.DataProducts.Output_SkyImage.archived=false
+ObsSW.Observation.DataProducts.Output_SkyImage.deleted=false
+ObsSW.Observation.DataProducts.Output_SkyImage.dirmask=
+ObsSW.Observation.DataProducts.Output_SkyImage.enabled=false
+ObsSW.Observation.DataProducts.Output_SkyImage.filenames=[]
+ObsSW.Observation.DataProducts.Output_SkyImage.identifications=[]
+ObsSW.Observation.DataProducts.Output_SkyImage.locations=[]
+ObsSW.Observation.DataProducts.Output_SkyImage.mountpoints=[]
+ObsSW.Observation.DataProducts.Output_SkyImage.namemask=
+ObsSW.Observation.DataProducts.Output_SkyImage.percentageWritten=[]
+ObsSW.Observation.DataProducts.Output_SkyImage.retentiontime=14
+ObsSW.Observation.DataProducts.Output_SkyImage.skip=[]
+ObsSW.Observation.ObservationControl.PythonControl.Calibration.SkyModel=
+ObsSW.Observation.ObservationControl.PythonControl.Calibration.exportCalibrationParameters=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.autocorr=F
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.count.path=-
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.count.save=FALSE
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.keepstatistics=T
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.memorymax=10
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.memoryperc=0
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.overlapmax=0
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.overlapperc=0
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.pedantic=F
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.pulsar=F
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.strategy=HBAdefault
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.timewindow=0
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.aoflagger.type=aoflagger
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.checkparset=-1
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.baseline=CS*,RS*&
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.blrange=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.corrtype=cross
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.demixfreqstep=64
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.demixtimestep=10
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.elevationcutoff=0.0deg
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.freqstep=4
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.ignoretarget=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.instrumentmodel=instrument
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.modelsources=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.ntimechunk=0
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.othersources=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.skymodel=sky
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.subtractsources=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.targetsource=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.timestep=1
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.demixer.type=demixer
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.autoweight=true
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.band=-1
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.baseline=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.blrange=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.corrtype=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.datacolumn=DATA
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.forceautoweight=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.missingdata=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.nchan=nchan
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.orderms=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.sort=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.startchan=0
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msin.useflag=true
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msout.overwrite=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msout.tilenchan=8
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msout.tilesize=1024
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msout.vdsdir=A
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.msout.writefullresflag=true
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].abstime=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].azimuth=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].baseline=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].blrange=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].chan=[0..nchan/32-1,31*nchan/32..nchan-1]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].corrtype=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].count.path=-
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].count.save=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].elevation=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].expr=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].freqrange=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].lst=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].reltime=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].timeofday=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].timeslot=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[0].type=preflagger
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].abstime=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].azimuth=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].baseline=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].blrange=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].chan=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].corrtype=auto
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].count.path=-
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].count.save=false
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].elevation=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].expr=
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].freqrange=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].lst=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].reltime=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].timeofday=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].timeslot=[]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.preflagger[1].type=preflagger
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.showprogress=F
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.showtimings=F
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.steps=[preflagger[0],preflagger[1],aoflagger,demixer]
+ObsSW.Observation.ObservationControl.PythonControl.DPPP.uselogger=T
+ObsSW.Observation.ObservationControl.PythonControl.LongBaseline.subbandgroups_per_ms=1
+ObsSW.Observation.ObservationControl.PythonControl.LongBaseline.subbands_per_subbandgroup=1
+ObsSW.Observation.ObservationControl.PythonControl.PreProcessing.SkyModel=Ateam_LBA_CC
+ObsSW.Observation.ObservationControl.PythonControl.PreProcessing.demix_always=[]
+ObsSW.Observation.ObservationControl.PythonControl.PreProcessing.demix_if_needed=[]
+ObsSW.Observation.ObservationControl.PythonControl._hostname=CCU001
+ObsSW.Observation.ObservationControl.PythonControl.canCommunicate=false
+ObsSW.Observation.ObservationControl.PythonControl.pythonHost=lhn001.cep2.lofar
+ObsSW.Observation.ObservationControl.PythonControl.pythonProgram=preprocessing_pipeline.py
+ObsSW.Observation.ObservationControl.PythonControl.softwareVersion=
+ObsSW.Observation.ObservationControl._hostname=MCU001
+ObsSW.Observation.ObservationControl.heartbeatInterval=10
+ObsSW.Observation.Scheduler.contactEmail=
+ObsSW.Observation.Scheduler.contactName=
+ObsSW.Observation.Scheduler.contactPhone=
+ObsSW.Observation.Scheduler.firstPossibleDay=0
+ObsSW.Observation.Scheduler.fixedDay=false
+ObsSW.Observation.Scheduler.fixedTime=false
+ObsSW.Observation.Scheduler.lastPossibleDay=0
+ObsSW.Observation.Scheduler.late=false
+ObsSW.Observation.Scheduler.nightTimeWeightFactor=0
+ObsSW.Observation.Scheduler.predMaxTimeDif=
+ObsSW.Observation.Scheduler.predMinTimeDif=
+ObsSW.Observation.Scheduler.predecessors=[L426528]
+ObsSW.Observation.Scheduler.priority=0.0
+ObsSW.Observation.Scheduler.reason=
+ObsSW.Observation.Scheduler.referenceFrame=0
+ObsSW.Observation.Scheduler.reservation=0
+ObsSW.Observation.Scheduler.storageSelectionMode=1
+ObsSW.Observation.Scheduler.taskDuration=600
+ObsSW.Observation.Scheduler.taskID=1450
+ObsSW.Observation.Scheduler.taskName=Preprocessing_newHBA
+ObsSW.Observation.Scheduler.taskType=0
+ObsSW.Observation.Scheduler.windowMaximumTime=
+ObsSW.Observation.Scheduler.windowMinimumTime=
+ObsSW.Observation.VirtualInstrument.minimalNrStations=1
+ObsSW.Observation.VirtualInstrument.stationList=[]
+ObsSW.Observation.VirtualInstrument.stationSet=
+ObsSW.Observation.antennaArray=LBA
+ObsSW.Observation.antennaSet=LBA_INNER
+ObsSW.Observation.bandFilter=LBA_30_90
+ObsSW.Observation.claimPeriod=10
+ObsSW.Observation.clockMode=<<Clock200
+ObsSW.Observation.momID=631401
+ObsSW.Observation.nrAnaBeams=0
+ObsSW.Observation.nrBeams=0
+ObsSW.Observation.nrBitsPerSample=16
+ObsSW.Observation.nrTBBSettings=0
+ObsSW.Observation.originID=254009
+ObsSW.Observation.otdbID=426942
+ObsSW.Observation.preparePeriod=10
+ObsSW.Observation.processSubtype=Averaging Pipeline
+ObsSW.Observation.processType=Pipeline
+ObsSW.Observation.sampleClock=200
+ObsSW.Observation.startTime=2016-01-19 11:50:00
+ObsSW.Observation.stopTime=2016-01-19 12:00:00
+ObsSW.Observation.strategy=Preprocessing only
+ObsSW.Observation.topologyID=mom.G630967.M631401.fP
+Version.number=30577
+_DPname=LOFAR_ObsSW_TempObs0162
+prefix=LOFAR.
diff --git a/SAS/ResourceAssignment/Services/test/tRATaskSpecified.py b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.py
new file mode 100644
index 0000000000000000000000000000000000000000..94ca0643706ef3fc78022568563b138aac90ee86
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.py
@@ -0,0 +1,209 @@
+#!/usr/bin/env python
+
+# Be able to find service python file
+import sys, os
+sys.path.insert(0, "{srcdir}/../src".format(**os.environ))
+
+from RATaskSpecified import *
+from RABusListener import RATaskSpecifiedBusListener
+from lofar.parameterset import PyParameterSet
+from lofar.messaging import EventMessage, Service
+
+import unittest
+from glob import glob
+import uuid
+import datetime
+from threading import Condition, Lock
+
+import logging
+logging.basicConfig(stream=sys.stdout, level=logging.INFO)
+
+def setUpModule():
+  pass
+
+def tearDownModule():
+  pass
+
+
+class TestGetPredecessors(unittest.TestCase):
+  def test_0_predecessors(self):
+    parset = { PARSET_PREFIX + "Observation.Scheduler.predecessors": "[]" }
+
+    self.assertEqual(predecessors(parset), [])
+
+  def test_1_predecessor(self):
+    parset = { PARSET_PREFIX + "Observation.Scheduler.predecessors": "[L426528]" }
+
+    self.assertEqual(predecessors(parset), [426528])
+
+  def test_2_predecessors(self):
+    parset = { PARSET_PREFIX + "Observation.Scheduler.predecessors": "[L426528,L1]" }
+
+    self.assertEqual(sorted(predecessors(parset)), [1,426528])
+
+
+def parset_as_dict(filename):
+    parset = PyParameterSet(filename, False)
+    d = {}
+    for k in parset.keywords():
+      d[k] = parset.getString(k)
+
+    return d
+
+
+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("tRATaskSpecified.in_preprocessing")
+    r = resourceIndicatorsFromParset(parset)
+
+  def test_correlator_observation(self):
+    parset = parset_as_dict("tRATaskSpecified.in_correlator")
+    r = resourceIndicatorsFromParset(parset)
+
+
+class TestService(unittest.TestCase):
+  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()
+
+    # Define the services we use
+    self.status_service = "%s/TaskStatus" % (self.busname,)
+
+    # ================================
+    # Setup mock parset service
+    # ================================
+
+    # Nr of parsets requested, to detect multiple requests for the same parset, or of superfluous parsets
+    self.requested_parsets = 0
+
+    def TaskSpecificationService( OtdbID ):
+      if OtdbID == 1:
+        predecessors = "[2,3]"
+      elif OtdbID == 2:
+        predecessors = "[3]"
+      elif OtdbID == 3:
+        predecessors = "[]"
+      else:
+        raise Exception("Invalid OtdbID: %s" % OtdbID)
+
+      self.requested_parsets += 1
+
+      return {
+        "Version.number":                                     "1",
+        PARSET_PREFIX + "Observation.ObsID":                  str(OtdbID),
+        PARSET_PREFIX + "Observation.Scheduler.predecessors": predecessors,
+      }
+
+    self.parset_service = Service("TaskSpecification", TaskSpecificationService, busname=self.busname)
+    self.parset_service.start_listening()
+
+    # ================================
+    # Setup listener to catch result
+    # of our service
+    # ================================
+
+    class Listener(RATaskSpecifiedBusListener):
+      def __init__(self, **kwargs):
+        super(Listener, self).__init__(**kwargs)
+
+        self.messageReceived = False
+        self.lock = Lock()
+        self.cond = Condition(self.lock)
+
+      def onTaskSpecified(self, sasId, modificationTime, resourceIndicators):
+        self.messageReceived = True
+
+        self.sasID = sasId
+        self.resourceIndicators = resourceIndicators
+
+        # Release waiting parent
+        with self.lock:
+          self.cond.notify()
+
+      def waitForMessage(self):
+        with self.lock:
+          self.cond.wait(5.0)
+        return self.messageReceived
+
+    self.listener = Listener(busname=self.busname)
+    self.listener.start_listening()
+
+  def tearDown(self):
+    self.listener.stop_listening()
+    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 RATaskSpecified("OTDB.TaskSpecified", otdb_busname=self.busname, my_busname=self.busname) as jts:
+      # Send fake status update
+      with ToBus(self.status_service) as tb:
+        msg = EventMessage(content={
+          "treeID": 3,
+          "state": "prescheduled",
+          "time_of_change": datetime.datetime(2016,1,1),
+        })
+        tb.send(msg)
+
+      # Wait for message to arrive
+      self.assertTrue(self.listener.waitForMessage())
+
+      # Verify message
+      self.assertEqual(self.listener.sasID, 3)
+      self.assertNotIn("1", self.listener.resourceIndicators);
+      self.assertNotIn("2", self.listener.resourceIndicators);
+      self.assertIn("3", self.listener.resourceIndicators);
+
+      # Make sure we only requested one parset
+      self.assertEqual(self.requested_parsets, 1)
+
+  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 RATaskSpecified("OTDB.TaskSpecified", otdb_busname=self.busname, my_busname=self.busname) as jts:
+      # Send fake status update
+      with ToBus(self.status_service) as tb:
+        msg = EventMessage(content={
+          "treeID": 1,
+          "state": "prescheduled",
+          "time_of_change": datetime.datetime(2016,1,1),
+        })
+        tb.send(msg)
+
+      # Wait for message to arrive
+      self.assertTrue(self.listener.waitForMessage())
+
+      # Verify message
+      self.assertEqual(self.listener.sasID, 1)
+      self.assertIn("1", self.listener.resourceIndicators);
+      self.assertIn("2", self.listener.resourceIndicators);
+      self.assertIn("3", self.listener.resourceIndicators);
+
+      # Make sure we only requested exactly three parsets
+      self.assertEqual(self.requested_parsets, 3)
+
+def main(argv):
+  unittest.main(verbosity=2)
+
+if __name__ == "__main__":
+  # run all tests
+  import sys
+  main(sys.argv[1:])
diff --git a/SAS/ResourceAssignment/Services/test/tRATaskSpecified.sh b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e8f7135ea210eefbd42b0ecd8adb19e532f027c8
--- /dev/null
+++ b/SAS/ResourceAssignment/Services/test/tRATaskSpecified.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+./runctest.sh tRATaskSpecified
diff --git a/SubSystems/RAServices/CMakeLists.txt b/SubSystems/RAServices/CMakeLists.txt
index 0b464656737cb4f740e17350db8e95830e7657e4..bb31f489a4798af9bf250b7c3db3a2bf2a9ad353 100644
--- a/SubSystems/RAServices/CMakeLists.txt
+++ b/SubSystems/RAServices/CMakeLists.txt
@@ -1,4 +1,11 @@
 # $Id: CMakeLists.txt 20934 2012-05-15 09:26:48Z schoenmakers $
 
+#lofar_package(RAServices 
+#  DEPENDS OTDB_Services ResourceAssignmentEditor ResourceAssignmentServices)
 lofar_package(RAServices 
-  DEPENDS OTDB_Services)
+  DEPENDS OTDB_Services ResourceAssignmentServices)
+
+# supervisord config files
+install(FILES
+  RAServices.ini
+  DESTINATION etc/supervisord.d)
diff --git a/SubSystems/RAServices/RAServices.ini b/SubSystems/RAServices/RAServices.ini
new file mode 100644
index 0000000000000000000000000000000000000000..af2c78183b2a9a5492841efb2ed22659f5b6633d
--- /dev/null
+++ b/SubSystems/RAServices/RAServices.ini
@@ -0,0 +1,3 @@
+[group:RA_Services]
+programs=ResourceAssignmentEditor,JobsToSchedule
+priority=200
diff --git a/lofarinit.sh.in b/lofarinit.sh.in
index 9f3b8f7c48fd74ddf0eb309b29501a81915e3bbc..fda93db9c73e472ef9a1a85c1aa3dfd737d8af76 100644
--- a/lofarinit.sh.in
+++ b/lofarinit.sh.in
@@ -62,8 +62,8 @@ fi
 # Now define the new LOFARROOT (if possible)
 # Do it only if the bin directory exists.
 lfr_nroot=`cd $lfr_root > /dev/null; pwd`      # make path absolute
-if [ "$lfr_nroot" = ""  -o  ! -d $lfr_nroot/bin ]; then
-    echo "LOFAR root directory $lfr_nroot/bin does not exist; keeping old LOFARROOT $LOFARROOT"
+if [ "$lfr_nroot" = "" -o ! -d $lfr_nroot ]; then
+    echo "LOFAR root directory $lfr_nroot does not exist; keeping old LOFARROOT $LOFARROOT"
 else
     LOFARROOT=$lfr_nroot
     export LOFARROOT
@@ -84,9 +84,9 @@ else
     export PYTHONPATH
 fi
 
-# Add to the paths if the bin directory exists.
-if [ "$LOFARROOT" = ""  -o  ! -d $LOFARROOT/bin ]; then
-    echo "No LOFARROOT defined"
+# Add to the paths
+if [ "$LOFARROOT" = "" -o ! -d $LOFARROOT ]; then
+    echo "LOFARROOT is empty or does not point to a directory."
 else
     # Add the path to the standard paths.
     if [ "$PATH" = "" ]; then