diff --git a/openbis-ipad/BisKit/Classes/CISDOBIpadServiceManager.m b/openbis-ipad/BisKit/Classes/CISDOBIpadServiceManager.m
index 3163a053e491b84426b4f3362644fe29ba7bd0c1..bc240a17513630658e60963e84e0f303822d168c 100644
--- a/openbis-ipad/BisKit/Classes/CISDOBIpadServiceManager.m
+++ b/openbis-ipad/BisKit/Classes/CISDOBIpadServiceManager.m
@@ -250,7 +250,9 @@ static NSManagedObjectContext* GetMainThreadManagedObjectContext(NSURL* storeUrl
 {
     // Create new entities in the moc, and store them.
     CISDOBIpadEntity *entity;
-    NSArray *matchedEntities = [self.serviceManager entitiesByPermId: [NSArray arrayWithObject: rawEntity.permId] error: error];
+    NSFetchRequest *fetchRequest = [self.serviceManager fetchRequestForEntitiesByPermId: [NSArray arrayWithObject: rawEntity.permId]];
+    // Run the fetch request against our own MOC -- running it against the serviceManager's MOC will cause problems (deadlocks)
+    NSArray *matchedEntities = [self.managedObjectContext executeFetchRequest: fetchRequest error: error];
     if (!matchedEntities) return NO;
     if ([matchedEntities count] > 0) {
         entity = [matchedEntities objectAtIndex: 0];
@@ -282,7 +284,8 @@ static NSManagedObjectContext* GetMainThreadManagedObjectContext(NSURL* storeUrl
     // TODO : we should treat the intial results as a root set and trace out to do a gc, but the simpler implementation is just to remove everything that is not mentioned
     if (_prune) {
         // Remove all entities that were not mentioned
-        NSArray *entitiesToDelete = [self.serviceManager entitiesNotUpdatedSince: lastUpdateDate error: &error];
+        NSFetchRequest *fetchRequest = [self.serviceManager fetchRequestForEntitiesNotUpdatedSince: lastUpdateDate];
+        NSArray *entitiesToDelete = [self.managedObjectContext executeFetchRequest: fetchRequest error: &error];
         for (CISDOBIpadEntity *entity in entitiesToDelete) {
             [self.managedObjectContext deleteObject: entity];
         }