diff --git a/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py b/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
index 7cf814637fd3e3db7871be092ea532a95bd1b376..3ba83888a394bbe3f67e0461060573fd8026e74b 100644
--- a/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
+++ b/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/ipad_read.py
@@ -1,6 +1,7 @@
 from ch.systemsx.cisd.openbis.ipad.v2.server import AbstractRequestHandler, ClientPreferencesRequestHandler, RootRequestHandler
 from ch.systemsx.cisd.openbis.ipad.v2.server import DrillRequestHandler, NavigationRequestHandler, DetailRequestHandler
 from ch.systemsx.cisd.openbis.ipad.v2.server import EmptyDataRequestHandler, IpadServiceUtilities
+from ch.systemsx.cisd.openbis.ipad.v2.server import IRequestHandlerFactory, RequestHandlerDispatcher
 from ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2 import MaterialIdentifierCollection
 from ch.systemsx.cisd.openbis.generic.shared.basic.dto import MaterialIdentifier
 from com.fasterxml.jackson.databind import ObjectMapper
@@ -328,18 +329,26 @@ class TestingNavigationRequestHandler(ExampleNavigationRequestHandler):
 			probe_nav = navigation_dict('Probes', [])
 			self.addRows([probe_nav])
 
+class NavigationRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return TestingNavigationRequestHandler(parameters, builder, searchService)
+		
+class RootRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return ExampleRootRequestHandler(parameters, builder, searchService)
+		
+class DrillRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return ExampleDrillRequestHandler(parameters, builder, searchService)
+
+class DetailRequestHandlerFactory(IRequestHandlerFactory):
+	def createRequestHandler(self, parameters, builder, searchService):
+		return ExampleDetailRequestHandler(parameters, builder, searchService)
+
 def aggregate(parameters, builder):
-	request_key = parameters.get('requestKey')
-	if 'CLIENT_PREFS' == request_key:
-		handler = ExampleClientPreferencesRequestHandler(parameters, builder, searchService)
-	elif 'NAVIGATION' == request_key:
-		handler = TestingNavigationRequestHandler(parameters, builder, searchService)
-	elif 'ROOT' == request_key:
-		handler = ExampleRootRequestHandler(parameters, builder, searchService)
-	elif 'DRILL' == request_key:
-		handler = ExampleDrillRequestHandler(parameters, builder, searchService)
-	elif 'DETAIL' == request_key:
-		handler = ExampleDetailRequestHandler(parameters, builder, searchService)
-	else:
-		handler = EmptyDataRequestHandler(parameters, builder, searchService)
-	handler.processRequest()		
+	dispatcher = RequestHandlerDispatcher()
+	dispatcher.navigationRequestHandlerFactory = NavigationRequestHandlerFactory()
+	dispatcher.rootRequestHandlerFactory = RootRequestHandlerFactory()
+	dispatcher.drillRequestHandlerFactory = DrillRequestHandlerFactory()
+	dispatcher.detailRequestHandlerFactory = DetailRequestHandlerFactory()
+	dispatcher.dispatch(parameters, builder, searchService)
diff --git a/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/lib/ipad-framework.jar b/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/lib/ipad-framework.jar
index 7f4b30f07994055b0176c8cb3dda135571e97610..960af774d9c21f44aa9c4e2d393259ed161f6c6b 100644
Binary files a/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/lib/ipad-framework.jar and b/openbis-ipad/source/core-plugins/ipad-ui/1/dss/reporting-plugins/ipad-read-service-v1/lib/ipad-framework.jar differ
diff --git a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DetailRequestHandler.java b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DetailRequestHandler.java
index 21f077bdd44f80b805ff6e0cd82cab9979d98eb0..a57aa0a13c5bef9f46d9f76e51c813cd58615595 100644
--- a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DetailRequestHandler.java
+++ b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DetailRequestHandler.java
@@ -23,6 +23,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISearchServic
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
 
 /**
+ * Abstract superclass for the handlers for the DETAIL request.
+ * 
  * @author cramakri
  */
 public class DetailRequestHandler extends AbstractRequestHandler
diff --git a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DrillRequestHandler.java b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DrillRequestHandler.java
index 218856df0fbf1545ff300b5bb170354fe3cbc238..7b6d0c4c141b7f36335259c517d2c609c4850955 100644
--- a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DrillRequestHandler.java
+++ b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/DrillRequestHandler.java
@@ -23,6 +23,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISearchServic
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
 
 /**
+ * Abstract superclass for the handlers for the DRILL request.
+ * 
  * @author cramakri
  */
 public class DrillRequestHandler extends AbstractRequestHandler
diff --git a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/EmptyDataRequestHandler.java b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/EmptyDataRequestHandler.java
index 1d3f54da0db9bc487b81aa115c00cbca460350ce..93ec60a9479175d98a72a98a8ab5c5d3e090340c 100644
--- a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/EmptyDataRequestHandler.java
+++ b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/EmptyDataRequestHandler.java
@@ -23,6 +23,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISearchServic
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
 
 /**
+ * A simple request handler that just returns an empty table.
+ * 
  * @author cramakri
  */
 public class EmptyDataRequestHandler extends AbstractRequestHandler
diff --git a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/IRequestHandlerFactory.java b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/IRequestHandlerFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..efab37d275fb74a39d32c2341b580d0535aaa4c6
--- /dev/null
+++ b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/IRequestHandlerFactory.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2013 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.ipad.v2.server;
+
+import java.util.Map;
+
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISearchService;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
+
+/**
+ * @author cramakri
+ */
+public interface IRequestHandlerFactory
+{
+    IRequestHandler createRequestHandler(Map<String, Object> parameters,
+            ISimpleTableModelBuilderAdaptor builder, ISearchService searchService);
+}
diff --git a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/NavigationRequestHandler.java b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/NavigationRequestHandler.java
index 242c13a1f81793cbe4e68c3dc5c0ad21b77f55e6..a4b6f012d47f6f6556c26030313dffd107014125 100644
--- a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/NavigationRequestHandler.java
+++ b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/NavigationRequestHandler.java
@@ -23,6 +23,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISearchServic
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
 
 /**
+ * Abstract superclass for the handlers for the NAVIGATION request.
+ * 
  * @author cramakri
  */
 public class NavigationRequestHandler extends AbstractRequestHandler
diff --git a/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/RequestHandlerDispatcher.java b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/RequestHandlerDispatcher.java
new file mode 100644
index 0000000000000000000000000000000000000000..db2b199bb9c0abc285319b99ceda4e5571b4063d
--- /dev/null
+++ b/openbis-ipad/source/java/ch/systemsx/cisd/openbis/ipad/v2/server/RequestHandlerDispatcher.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2013 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.ipad.v2.server;
+
+import java.util.Map;
+
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISearchService;
+import ch.systemsx.cisd.openbis.generic.shared.managed_property.api.ISimpleTableModelBuilderAdaptor;
+
+/**
+ * A class that takes an aggregation service request and dispatches it to the appropriate handler.
+ * 
+ * @author cramakri
+ */
+public class RequestHandlerDispatcher
+{
+
+    public static enum RequestType
+    {
+        CLIENT_PREFS, NAVIGATION, ROOT, DRILL, DETAIL
+    }
+
+    private IRequestHandlerFactory clientPreferencesRequestHandlerFactory;
+
+    private IRequestHandlerFactory navigationRequestHandlerFactory;
+
+    private IRequestHandlerFactory rootRequestHandlerFactory;
+
+    private IRequestHandlerFactory drillRequestHandlerFactory;
+
+    private IRequestHandlerFactory detailRequestHandlerFactory;
+
+    private IRequestHandlerFactory emptyDataRequestHandlerFactory;
+
+    /**
+     * The constructor initialized the clientPreferencesRequestHandlerFactory and
+     * emptyDataRequestHandlerFactory variables. All others must be initialized by the client of
+     * this object.
+     */
+    public RequestHandlerDispatcher()
+    {
+        clientPreferencesRequestHandlerFactory = new IRequestHandlerFactory()
+            {
+                @Override
+                public IRequestHandler createRequestHandler(Map<String, Object> parameters,
+                        ISimpleTableModelBuilderAdaptor builder, ISearchService searchService)
+                {
+                    return new ClientPreferencesRequestHandler(parameters, builder, searchService);
+                }
+
+            };
+        emptyDataRequestHandlerFactory = new IRequestHandlerFactory()
+            {
+                @Override
+                public IRequestHandler createRequestHandler(Map<String, Object> parameters,
+                        ISimpleTableModelBuilderAdaptor builder, ISearchService searchService)
+                {
+                    return new EmptyDataRequestHandler(parameters, builder, searchService);
+                }
+
+            };
+    }
+
+    public IRequestHandlerFactory getClientPreferencesRequestHandlerFactory()
+    {
+        return clientPreferencesRequestHandlerFactory;
+    }
+
+    public void setClientPreferencesRequestHandlerFactory(
+            IRequestHandlerFactory clientPreferencesRequestHandlerFactory)
+    {
+        this.clientPreferencesRequestHandlerFactory = clientPreferencesRequestHandlerFactory;
+    }
+
+    public IRequestHandlerFactory getNavigationRequestHandlerFactory()
+    {
+        return navigationRequestHandlerFactory;
+    }
+
+    public void setNavigationRequestHandlerFactory(
+            IRequestHandlerFactory navigationRequestHandlerFactory)
+    {
+        this.navigationRequestHandlerFactory = navigationRequestHandlerFactory;
+    }
+
+    public IRequestHandlerFactory getRootRequestHandlerFactory()
+    {
+        return rootRequestHandlerFactory;
+    }
+
+    public void setRootRequestHandlerFactory(IRequestHandlerFactory rootRequestHandlerFactory)
+    {
+        this.rootRequestHandlerFactory = rootRequestHandlerFactory;
+    }
+
+    public IRequestHandlerFactory getDrillRequestHandlerFactory()
+    {
+        return drillRequestHandlerFactory;
+    }
+
+    public void setDrillRequestHandlerFactory(IRequestHandlerFactory drillRequestHandlerFactory)
+    {
+        this.drillRequestHandlerFactory = drillRequestHandlerFactory;
+    }
+
+    public IRequestHandlerFactory getDetailRequestHandlerFactory()
+    {
+        return detailRequestHandlerFactory;
+    }
+
+    public void setDetailRequestHandlerFactory(IRequestHandlerFactory detailRequestHandlerFactory)
+    {
+        this.detailRequestHandlerFactory = detailRequestHandlerFactory;
+    }
+
+    public IRequestHandlerFactory getEmptyDataRequestHandlerFactory()
+    {
+        return emptyDataRequestHandlerFactory;
+    }
+
+    public void setEmptyDataRequestHandlerFactory(
+            IRequestHandlerFactory emptyDataRequestHandlerFactory)
+    {
+        this.emptyDataRequestHandlerFactory = emptyDataRequestHandlerFactory;
+    }
+
+    public void dispatch(Map<String, Object> parameters, ISimpleTableModelBuilderAdaptor builder,
+            ISearchService searchService)
+    {
+        RequestType requestType = tryRequestType(parameters);
+        IRequestHandlerFactory handlerFactory = getHandlerFactory(requestType);
+        handlerFactory.createRequestHandler(parameters, builder, searchService).processRequest();
+    }
+
+    protected RequestType tryRequestType(Map<String, Object> parameters)
+    {
+        String requestKey = (String) parameters.get("requestKey");
+        RequestType requestType;
+        try
+        {
+            requestType = RequestType.valueOf(requestKey);
+        } catch (IllegalArgumentException e)
+        {
+            requestType = null;
+        }
+        return requestType;
+    }
+
+    protected IRequestHandlerFactory getHandlerFactory(RequestType requestType)
+    {
+        IRequestHandlerFactory handlerFactory;
+        switch (requestType)
+        {
+            case CLIENT_PREFS:
+                handlerFactory = clientPreferencesRequestHandlerFactory;
+                break;
+            case DETAIL:
+                handlerFactory = detailRequestHandlerFactory;
+                break;
+            case DRILL:
+                handlerFactory = drillRequestHandlerFactory;
+                break;
+            case NAVIGATION:
+                handlerFactory = navigationRequestHandlerFactory;
+                break;
+            case ROOT:
+                handlerFactory = rootRequestHandlerFactory;
+                break;
+            default:
+                handlerFactory = emptyDataRequestHandlerFactory;
+                break;
+        }
+        return handlerFactory;
+    }
+}
diff --git a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m
index 146fad8ad096a783562cf5d317f3c91ff86fbbbb..e397d7d7e0a889277c55771823dabdde8f94fc7f 100644
--- a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m
+++ b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManager.m
@@ -239,6 +239,7 @@ static NSManagedObjectContext* GetMainThreadManagedObjectContext(NSURL* storeUrl
     // Login and then retry the call
     managerCall.retryCount =  managerCall.retryCount + 1;
     CISDOBAsyncCall *call = [self.service.connection loginUser: _username password: _password];
+    managerCall.loginRetryCall = call;
     call.success = ^(id result) {
         // Fix the session token
         CISDOBIpadServiceCall *serviceCall = (CISDOBIpadServiceCall *)managerCall.serviceCall;
diff --git a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManagerInternal.h b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManagerInternal.h
index a09651015330d84e21ba29ea99f7c020e8aeebc8..23bad964875d91c61ee9fcdc293bad03f3a94d35 100644
--- a/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManagerInternal.h
+++ b/openbis-ipad/source/objc/BisKit/Classes/CISDOBIpadServiceManagerInternal.h
@@ -31,6 +31,7 @@
 @property(weak, nonatomic) CISDOBIpadServiceManager *serviceManager;
 @property(strong, nonatomic) CISDOBAsyncCall *serviceCall;
 @property(nonatomic) NSUInteger retryCount;     //<! How many times has this call been retried
+@property(strong, nonatomic) CISDOBAsyncCall *loginRetryCall; //<! On a retry, it is necessary to keep the retry call live until it completes
 
 @property(copy, nonatomic) NSString *willCallNotificationName;  //<! The notification called before the call takes place, may be nil
 @property(copy, nonatomic) NSString *didCallNotificationName;   //<! The notification called after the call has completed, may be nil
diff --git a/openbis-ipad/source/objc/BisKit/Tests/CISDOBIpadServiceManagerTest.m b/openbis-ipad/source/objc/BisKit/Tests/CISDOBIpadServiceManagerTest.m
index e2f0521fb2238341106c19c0497edb34f79a06c7..73dd399c6fb5058f3186fde569b84055cd5d880d 100644
--- a/openbis-ipad/source/objc/BisKit/Tests/CISDOBIpadServiceManagerTest.m
+++ b/openbis-ipad/source/objc/BisKit/Tests/CISDOBIpadServiceManagerTest.m
@@ -279,12 +279,21 @@ static BOOL IsPermIdTarget(NSString *permId)
 }
 
 - (void)performDrill:(CISDOBIpadEntity *)drillEntity
+{
+    [self performDrill: drillEntity retry: YES];
+}
+
+- (void)performDrill:(CISDOBIpadEntity *)drillEntity retry:(BOOL)shouldRetry
 {
     CISDOBAsyncCall *call;
     [self assertBeforeDrill];
     call = [self.serviceManager drillOnEntity: drillEntity];
+    if (!shouldRetry) {
+        ((CISDOBIpadServiceManagerCall *) call).retryCount = 2;
+    }
     [self configureAndRunCallSynchronously: call];
-    STAssertNotNil(_callResult, @"The iPad service should have returned some entities.");
+    
+    STAssertTrue(_callResult != nil || _callError != nil, @"The iPad service should have returned some entities or an error.");
     [self assertAfterDrill];
 }
 
@@ -374,8 +383,24 @@ static BOOL IsPermIdTarget(NSString *permId)
     NSArray *entitiesWithChildren = [self entitiesWithChildren];
     STAssertTrue([entitiesWithChildren count] > 0, @"There should be some entities with children");    
     CISDOBIpadEntity *drillEntity = [entitiesWithChildren objectAtIndex: 0];
-    [self performDrill: drillEntity];
-    NSLog(@"Error %@", _callError);
+    [self performDrill: drillEntity retry: NO];
+    STAssertNotNil(_callError, @"The request should have failed with an error");
+}
+
+- (void)testInvalidSessionTokenRetry
+{
+    [self performLogin];
+    [self performRootLevelCall];
+    
+    // Switch the session token
+    [self.serviceManager.service.connection setSessionTokenForTesting: @"junk"];
+
+    // Get drill information on some entity
+    NSArray *entitiesWithChildren = [self entitiesWithChildren];
+    STAssertTrue([entitiesWithChildren count] > 0, @"There should be some entities with children");    
+    CISDOBIpadEntity *drillEntity = [entitiesWithChildren objectAtIndex: 0];
+    [self performDrill: drillEntity retry: YES];
+    STAssertNotNil(_callResult, @"The request should have succeeded with an error");
 }
 
 - (void)retrieveRootLevelEntitiesSimulatingRemovalOfCategory:(CISDOBIpadEntity *)categoryToRemove
diff --git a/openbis-ipad/source/objc/BisKit/Tests/CISDOBLiveConnectionTest.m b/openbis-ipad/source/objc/BisKit/Tests/CISDOBLiveConnectionTest.m
index 42039b2d688986e3417751ac663553fb2cb8abb5..5ee8b8cc0a0e4684ec328beb1a7f84c4529d48df 100644
--- a/openbis-ipad/source/objc/BisKit/Tests/CISDOBLiveConnectionTest.m
+++ b/openbis-ipad/source/objc/BisKit/Tests/CISDOBLiveConnectionTest.m
@@ -86,7 +86,7 @@
     STAssertTrue([rows count] == 0, @"The ipad-read-service-v1 should have returned empty data.");
     
     // Call with the correct parameters
-    NSDictionary *parameters = [NSDictionary dictionaryWithObject: @"ROOT" forKey: @"requestKey"];
+    NSDictionary *parameters = [NSDictionary dictionaryWithObject: @"NAVIGATION" forKey: @"requestKey"];
     call =
         [_connection
             createReportFromDataStore: [service objectForKey: @"dataStoreCode"]
diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.pbxproj b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.pbxproj
index e15253b7a477aea07a90b5a53a95a8dcbe425c69..adbf2601f5cf2beca5fed7a63241692a93da7582 100644
--- a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.pbxproj
+++ b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.pbxproj
@@ -424,7 +424,7 @@
 		3680779715D0F78600843AD5 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0450;
+				LastUpgradeCheck = 0460;
 			};
 			buildConfigurationList = 3680779A15D0F78600843AD5 /* Build configuration list for PBXProject "BisMac" */;
 			compatibilityVersion = "Xcode 3.2";
@@ -635,7 +635,10 @@
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_OBJCPP_ARC_ABI = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
@@ -643,6 +646,7 @@
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				ONLY_ACTIVE_ARCH = YES;
@@ -655,11 +659,15 @@
 			buildSettings = {
 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
 				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_OBJCPP_ARC_ABI = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				SDKROOT = "";
diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate
index f12403d09a8b352867f2ef7cea421ab158bcf7ae..bcc4d5432ec30b74b574185ba13de64d762d94b8 100644
Binary files a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate and b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMac.xcscheme b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMac.xcscheme
index 6737b3390ddb1c569d91f041fd1fd0f10e49162d..b17575e0f13eacaff677cf2822fc116959c91b0f 100644
--- a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMac.xcscheme
+++ b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMac.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0450"
+   LastUpgradeVersion = "0460"
    version = "1.8">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacImporter.xcscheme b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacImporter.xcscheme
index ff73167ff84a687dc45d8213addc318d29c1d44c..8ac9f2deaf260c2402cac5d63cf8ca8fe582d6e4 100644
--- a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacImporter.xcscheme
+++ b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacImporter.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0450"
+   LastUpgradeVersion = "0460"
    version = "1.8">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacTests.xcscheme b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacTests.xcscheme
index efe629ce808254264962a529cf099ebb8990e611..84eae79b3a21a0070d5908f586987ef1ff1ffbcd 100644
--- a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacTests.xcscheme
+++ b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/BisMacTests.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0450"
+   LastUpgradeVersion = "0460"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/Test Minimal.xcscheme b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/Test Minimal.xcscheme
index 5a2866d3b58b284f30dee7c8629ad19e9f79cd63..1cd199ea42f7b5171a184079cfba639f30ee28f5 100644
--- a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/Test Minimal.xcscheme	
+++ b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/Test Minimal.xcscheme	
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0450"
+   LastUpgradeVersion = "0460"
    version = "1.8">
    <BuildAction
       parallelizeBuildables = "YES"
@@ -41,9 +41,6 @@
                <Test
                   Identifier = "BisMacTests">
                </Test>
-               <Test
-                  Identifier = "CISDOBAsyncTest">
-               </Test>
                <Test
                   Identifier = "CISDOBJsonRpcCallGenericTest">
                </Test>
@@ -53,15 +50,36 @@
                <Test
                   Identifier = "CISDOBJsonRpcCallTest">
                </Test>
-               <Test
-                  Identifier = "CISDOBLiveConnectionTest">
-               </Test>
                <Test
                   Identifier = "CISDOBIpadServiceTest">
                </Test>
                <Test
                   Identifier = "CISDOBIpadEntityTest">
                </Test>
+               <Test
+                  Identifier = "CISDOBAsyncTest">
+               </Test>
+               <Test
+                  Identifier = "CISDOBIpadServiceManagerTest/testDeletedEntities">
+               </Test>
+               <Test
+                  Identifier = "CISDOBIpadServiceManagerTest/testNilUrl">
+               </Test>
+               <Test
+                  Identifier = "CISDOBIpadServiceManagerTest/testPersistDrillAndDetailsOnCollections">
+               </Test>
+               <Test
+                  Identifier = "CISDOBIpadServiceManagerTest/testPersistEntities">
+               </Test>
+               <Test
+                  Identifier = "CISDOBIpadServiceManagerTest/testUnicode">
+               </Test>
+               <Test
+                  Identifier = "CISDOBIpadServiceManagerTest/testImageRetrieval">
+               </Test>
+               <Test
+                  Identifier = "CISDOBIpadServiceManagerTest">
+               </Test>
             </SkippedTests>
          </TestableReference>
       </Testables>
diff --git a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/YeastLab.xcscheme b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/YeastLab.xcscheme
index 2ed27407963dbcfd09ff05be0b66f5dab3651593..8f9b41a60837f17219eea21073ae14f2507857c3 100644
--- a/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/YeastLab.xcscheme
+++ b/openbis-ipad/source/objc/Research/BisMac.xcodeproj/xcuserdata/cramakri.xcuserdatad/xcschemes/YeastLab.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0450"
+   LastUpgradeVersion = "0460"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate b/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate
index 74f56696e61eccd65e8063ae3301e11338e9f761..ba1e115369a4b2cd7b4fd8a6dc5cfbbc97d07dae 100644
Binary files a/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate and b/openbis-ipad/source/objc/openBIS/openBIS.xcodeproj/project.xcworkspace/xcuserdata/cramakri.xcuserdatad/UserInterfaceState.xcuserstate differ