diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
index 9962117f06dae9dcc9feb8453a6bb72f64eb1e9c..c9053c998d8ace7efe98df7f060a7431d464ca42 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
@@ -534,27 +534,31 @@ class RADatabase:
 
         raise KeyError('No such resource_claim_property_type: %s Valid values are: %s' % (type_name, ', '.join(self.getResourceClaimPropertyTypeNames())))
 
+    def getResourceClaimProperties(self, claim_ids=None, task_id=None):
+        query = '''SELECT rcpv.* from resource_allocation.resource_claim_property_view rcpv'''
 
-    def getResourceClaimProperties(self, claim_id=None, task_id=None):
-        query = '''SELECT * from resource_allocation.resource_claim_property_view'''
-
-        qargs = None
-
-        if claim_id is not None or task_id is not None:
-            conditions = []
-            qargs = []
+        conditions = []
+        qargs = []
 
-            if claim_id is not None:
-                conditions.append('id = %s')
-                qargs.append(claim_id)
+        if claim_ids is not None:
+            if isinstance(claim_ids, int): # just a single id
+                conditions.append('resource_claim_id = %s')
+                qargs.append(claim_ids)
+            elif len(claim_ids) == 1:  # just a single id from a list
+                conditions.append('resource_claim_id = %s')
+                qargs.append(claim_ids[0])
+            else: # list of id's
+                conditions.append('resource_claim_id in %s')
+                qargs.append(tuple(claim_ids))
 
-            if task_id is not None:
-                conditions.append('task_id = %s')
-                qargs.append(task_id)
+        if task_id is not None:
+            query += ' JOIN resource_allocation.resource_claim rc on rc.id = rcpv.resource_claim_id'
+            conditions.append('rc.task_id = %s')
+            qargs.append(task_id)
 
+        if conditions:
             query += ' WHERE ' + ' AND '.join(conditions)
 
-        query += ';'
         return list(self._executeQuery(query, qargs, fetch=_FETCH_ALL))
 
     def insertResourceClaimProperty(self, claim_id, property_type, value, commit=False):
@@ -588,7 +592,7 @@ class RADatabase:
             self.commit()
         return ids
 
-    def getResourceClaims(self, claim_ids=None, lower_bound=None, upper_bound=None, resource_ids=None, task_ids=None, status=None, resource_type=None, extended=False):
+    def getResourceClaims(self, claim_ids=None, lower_bound=None, upper_bound=None, resource_ids=None, task_ids=None, status=None, resource_type=None, extended=False, include_properties=False):
         extended |= resource_type is not None
         query = '''SELECT * from %s''' % ('resource_allocation.resource_claim_extended_view' if extended else 'resource_allocation.resource_claim_view')
 
@@ -668,7 +672,23 @@ class RADatabase:
         if conditions:
             query += ' WHERE ' + ' AND '.join(conditions)
 
-        return list(self._executeQuery(query, qargs, fetch=_FETCH_ALL))
+        claims = list(self._executeQuery(query, qargs, fetch=_FETCH_ALL))
+
+        if include_properties:
+            claimDict = {c['id']:c for c in claims}
+            claim_ids = claimDict.keys()
+            properties = self.getResourceClaimProperties(claim_ids=claim_ids)
+            for p in properties:
+                try:
+                    claim = claimDict[p['resource_claim_id']]
+                    if not 'properties' in claim:
+                        claim['properties'] = []
+                    del p['resource_claim_id']
+                    claim['properties'].append(p)
+                except KeyError:
+                    pass
+
+        return claims
 
     def getResourceClaim(self, id):
         query = '''SELECT * from resource_allocation.resource_claim_view rcv
@@ -743,15 +763,17 @@ class RADatabase:
         claimId2Props = { claim_id: [(p['type'], p['value']) for p in claim['properties']]
                          for claim_id, claim
                          in zip(claimIds, claims)
-                         if 'properties' in claim }
+                         if 'properties' in claim and
+                         len(claim['properties']) > 0 }
 
         # convert all type strings to id's
         # this saves a lot of lookup queries in the db
         prop_type_strings = set(p[0] for p in claimId2Props.values() if isinstance(p[0], basestring))
-        type_string2id = {t:self.getResourceClaimPropertyTypeId(t) for t in prop_type_strings}
-        for p in claimId2Props.values():
-            if isinstance(p[0], basestring):
-                p[0] = type_string2id[p[0]]
+        if prop_type_strings:
+            type_string2id = {t:self.getResourceClaimPropertyTypeId(t) for t in prop_type_strings}
+            for p in claimId2Props.values():
+                if isinstance(p[0], basestring):
+                    p[0] = type_string2id[p[0]]
 
         # and insert all properties for each claim with properties
         for claim_id, props in claimId2Props.items():
@@ -1076,7 +1098,7 @@ if __name__ == '__main__':
 
     from lofar.common.datetimeutils import totalSeconds
     begin = datetime.utcnow()
-    for i in range(1):
+    for i in range(2):
         stepbegin = datetime.utcnow()
         result = db.insertSpecificationAndTask(1234+i, 5678+i, 600, 0, datetime.utcnow() + timedelta(hours=1.25*i*0), datetime.utcnow() + timedelta(hours=1.25*i+1), "", False)
 
@@ -1102,11 +1124,15 @@ if __name__ == '__main__':
         now = datetime.utcnow()
         print totalSeconds(now - begin), totalSeconds(now - stepbegin)
 
-    resultPrint(db.getResourceClaims)
-    #resultPrint(db.getResourceClaimPropertyTypes)
+    #resultPrint(db.getResourceClaims)
+    resultPrint(db.getResourceClaimPropertyTypes)
     #resultPrint(db.getResourceClaimPropertyTypeNames)
     #resultPrint(db.getResourceClaimProperties)
 
+    print '\n'.join(str(x) for x in db.getResourceClaimProperties())
+    print '\n'.join(str(x) for x in db.getResourceClaimProperties(task_id=task['id']))
+    print '\n'.join(str(x) for x in db.getResourceClaims(include_properties=True))
+
     #db.commit()
 
     #resultPrint(db.getTasks)
diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
index 753e0b3e087f7018ad723d9cee7ecec3744483ac..d0f3d2de60bc724adf003da02d494985fb395ffc 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
@@ -30,19 +30,20 @@ class RARPC(RPCWrapper):
     def getResourceClaimPropertyTypes(self):
         return self.rpc('GetResourceClaimPropertyTypes')
 
-    def getResourceClaimProperties(self, claim_id=None, task_id=None):
-        return self.rpc('GetResourceClaimProperties', claim_id=claim_id, task_id=task_id)
+    def getResourceClaimProperties(self, claim_ids=None, task_id=None):
+        return self.rpc('GetResourceClaimProperties', claim_ids=claim_ids, task_id=task_id)
 
     def insertResourceClaimProperty(self, claim_id, property_type, value):
         return self.rpc('InsertResourceClaimProperty', claim_id=claim_id, property_type=property_type, value=value)
 
-    def getResourceClaims(self, lower_bound=None, upper_bound=None, task_id=None, status=None, resource_type=None, extended=False):
+    def getResourceClaims(self, lower_bound=None, upper_bound=None, task_id=None, status=None, resource_type=None, extended=False, include_properties=False):
         claims = self.rpc('GetResourceClaims', lower_bound=lower_bound,
                                                upper_bound=upper_bound,
                                                task_id=task_id,
                                                status=status,
                                                resource_type=resource_type,
-                                               extended=extended)
+                                               extended=extended,
+                                               include_properties=include_properties)
         for claim in claims:
             claim['starttime'] = claim['starttime'].datetime()
             claim['endtime'] = claim['endtime'].datetime()
diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/service.py b/SAS/ResourceAssignment/ResourceAssignmentService/service.py
index ad86519e627c71e79eee75e02b5dd7702c1f520e..898462a7d5b9f6dcb1b4ade84e51db6ad95c1275 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentService/service.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentService/service.py
@@ -85,7 +85,7 @@ class RADBHandler(MessageHandlerInterface):
         return self.radb.getResourceClaimPropertyTypes()
 
     def _getResourceClaimProperties(self, **kwargs):
-        return self.radb.getResourceClaimProperties(claim_id=kwargs.get('claim_id'), task_id=kwargs.get('task_id'))
+        return self.radb.getResourceClaimProperties(claim_ids=kwargs.get('claim_ids'), task_id=kwargs.get('task_id'))
 
     def _insertResourceClaimProperty(self, **kwargs):
         id = self.radb.insertResourceClaimProperty(kwargs.get('claim_id'), kwargs.get('property_type'), kwargs.get('value'))
@@ -97,7 +97,8 @@ class RADBHandler(MessageHandlerInterface):
                                            task_ids=kwargs.get('task_id'),
                                            status=kwargs.get('status'),
                                            resource_type=kwargs.get('resource_type'),
-                                           extended=kwargs.get('extended', False))
+                                           extended=kwargs.get('extended', False),
+                                           include_properties=kwargs.get('include_properties'))
 
     def _getResourceClaim(self, **kwargs):
         claim = self.radb.getResourceClaim(kwargs['id'])