diff --git a/screening/dist/etc/service.properties b/screening/dist/etc/service.properties
index d0fb442545f0a97612c0728652933ad7bcf2bcba..c41aca0a3da83ad96e0d9462d9769a1b7755862c 100644
--- a/screening/dist/etc/service.properties
+++ b/screening/dist/etc/service.properties
@@ -86,9 +86,11 @@ mail.smtp.host = file://${root-dir}
 # ---------------------------------------------------------------------------
 
 data-sources = imaging-db
+imaging-db.version-holder-class = ch.systemsx.cisd.openbis.dss.etl.ImagingDatabaseVersionHolder
 imaging-db.databaseEngineCode = postgresql
 imaging-db.basicDatabaseName = imaging
 imaging-db.databaseKind = productive
+imaging-db.scriptFolder = sql
 
 # ---------------------------------------------------------------------------
 # reporting and processing plugins configuration
diff --git a/screening/etc/service.properties b/screening/etc/service.properties
index a366eea8f7526db895502c91183992074dda659a..6d2f7c43a16ab8ef139a89852f7821507e466404 100644
--- a/screening/etc/service.properties
+++ b/screening/etc/service.properties
@@ -86,9 +86,11 @@ mail.smtp.host = file://${root-dir}/emails
 # ---------------------------------------------------------------------------
 
 data-sources = imaging-db
+imaging-db.version-holder-class = ch.systemsx.cisd.openbis.dss.etl.ImagingDatabaseVersionHolder
 imaging-db.databaseEngineCode = postgresql
 imaging-db.basicDatabaseName = imaging
 imaging-db.databaseKind = dev
+imaging-db.scriptFolder = source/sql
 
 # ---------------------------------------------------------------------------
 # reporting and processing plugins configuration
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bf19aec9c090226637c470a147c3943eadc6c7e
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2010 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.dss.etl;
+
+import ch.systemsx.cisd.openbis.dss.generic.shared.IDatabaseVersionHolder;
+
+/**
+ * Version holder for imaging database.
+ *
+ * @author Franz-Josef Elmer
+ */
+public class ImagingDatabaseVersionHolder implements IDatabaseVersionHolder
+{
+
+    public String getDatabaseVersion()
+    {
+        return "003"; // S83
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java
index e5dc92736c6a22dfcd884f453c3a856d91039e57..94b91bfaad93e41958373e687fa7523561521535 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java
@@ -54,7 +54,7 @@ public final class ScreeningBusinessObjectFactory extends AbstractPluginBusiness
 
     public final IHCSDatasetLoader createHCSDatasetLoader(final String datasetPermId)
     {
-        return new HCSDatasetLoader(specificDAOFactory.getImagingQueryDAO(), datasetPermId);
+        return new HCSDatasetLoader(specificDAOFactory.getImagingQueryDAO(datasetPermId), datasetPermId);
     }
 
     public final ISampleBO createSampleBO(final Session session)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java
index 4fca2d05c4d3ce0438b6d1d748a3236e4533f414..bf74bea5e8ed588481fcf304e5aab6e81882b413 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java
@@ -25,5 +25,5 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImag
  */
 public interface IScreeningDAOFactory
 {
-    public IImagingQueryDAO getImagingQueryDAO();
+    public IImagingQueryDAO getImagingQueryDAO(String datasetPermId);
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
index e73c2a82b543a92d980ec7a5c796c69e78497607..f8abfc1f196b5812d220033507a1e1df75005345 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java
@@ -16,14 +16,18 @@
 
 package ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.db;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.sql.DataSource;
+
 import net.lemnik.eodsql.QueryTool;
 
 import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.dbmigration.DBMigrationEngine;
-import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataSourceProvider;
 import ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.IScreeningDAOFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImagingQueryDAO;
 
@@ -32,26 +36,34 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImag
  */
 public class ScreeningDAOFactory implements IScreeningDAOFactory
 {
-    /** Current version of the database. */
-    public static final String DATABASE_VERSION = "003"; // S83
+    private static final String TECHNOLOGY = "screening";
 
     private static final Logger operationLog =
             LogFactory.getLogger(LogCategory.OPERATION, ScreeningDAOFactory.class);
 
-    private final IImagingQueryDAO imagingQueryDAO;
+    private final IDataSourceProvider dataSourceProvider;
+    
+    private final Map<DataSource, IImagingQueryDAO> daos = new HashMap<DataSource, IImagingQueryDAO>();
 
-    public ScreeningDAOFactory(DatabaseConfigurationContext context)
+    public ScreeningDAOFactory(IDataSourceProvider dataSourceProvider)
     {
-        DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(context, DATABASE_VERSION);
-        imagingQueryDAO = QueryTool.getQuery(context.getDataSource(), IImagingQueryDAO.class);
+        this.dataSourceProvider = dataSourceProvider;
         if (operationLog.isInfoEnabled())
         {
-            operationLog.info("DAO factory for Screening created.");
+            operationLog.info("DAO factory for Screening created. Data source provider: "
+                    + dataSourceProvider.getClass());
         }
     }
 
-    public IImagingQueryDAO getImagingQueryDAO()
+    public IImagingQueryDAO getImagingQueryDAO(String datasetPermId)
     {
-        return imagingQueryDAO;
+        DataSource dataSource = dataSourceProvider.getDataSourceByDataSetCode(datasetPermId, TECHNOLOGY);
+        IImagingQueryDAO dao = daos.get(dataSource);
+        if (dao == null)
+        {
+            dao = QueryTool.getQuery(dataSource, IImagingQueryDAO.class);
+            daos.put(dataSource, dao);
+        }
+        return dao;
     }
 }
diff --git a/screening/source/java/screening-applicationContext.xml b/screening/source/java/screening-applicationContext.xml
index c8f42648252ace1fe19d2b3baa070af337d321e9..9045e564a9730eaddda880c3711ad20be1e0f360 100644
--- a/screening/source/java/screening-applicationContext.xml
+++ b/screening/source/java/screening-applicationContext.xml
@@ -29,9 +29,17 @@
         <property name="databaseInstance" value="${imaging.database-instance}" />
     </bean>
     
+    <bean id="single-data-source-provider" class="ch.systemsx.cisd.openbis.generic.server.dataaccess.SingleDataSourceProvider">
+        <constructor-arg ref="imaging-db-configuration-context"/>
+    </bean>
+    
+    <bean id="dss-based-data-source-provider" class="ch.systemsx.cisd.openbis.generic.server.dataaccess.DataStoreServerBasedDataSourceProvider">
+        <constructor-arg ref="dao-factory"/>
+    </bean>
+    
     <bean id="screening-dao-factory"
           class="ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.db.ScreeningDAOFactory">
-        <constructor-arg ref="imaging-db-configuration-context"/>
+        <constructor-arg ref="${data-source-provider}"/>
     </bean>
     
     <!--
diff --git a/screening/source/java/service.properties b/screening/source/java/service.properties
index 1d4aa1792cebe508c4faa4d855454f61b81e8e35..4e7182c78e673117c2b2f4b4db17811f9dc1e427 100644
--- a/screening/source/java/service.properties
+++ b/screening/source/java/service.properties
@@ -21,6 +21,13 @@ database.owner-password =
 database.admin-user = 
 database.admin-password =
 
+data-source-provider = dss-based-data-source-provider
+
+dss-based-data-source-provider.data-store-servers = dss-screening, my-dss
+dss-based-data-source-provider.dss-screening.database-driver = org.postgresql.Driver
+dss-based-data-source-provider.dss-screening.database-url = jdbc:postgresql://localhost/imaging_dev
+dss-based-data-source-provider.my-dss. = dss-based-data-source-provider.dss-screening.
+
 imaging.database.engine = postgresql
 imaging.database.create-from-scratch = false
 imaging.database.script-single-step-mode = false
@@ -30,7 +37,6 @@ imaging.database.owner =
 imaging.database.owner-password =
 imaging.database.admin-user = 
 imaging.database.admin-password =
-imaging.script-folder = source
 
 crowd.service.host = crowd-bsse.ethz.ch
 crowd.service.port = 8443
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java
index 702e5448ec29ca8a2224923c3d748d61e0ca06a3..90ba0936bc21ed1fc08d78fdefbddf0a43c36f43 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess;
 import ch.rinn.restrictions.Friend;
 import ch.systemsx.cisd.dbmigration.DBMigrationEngine;
 import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext;
+import ch.systemsx.cisd.openbis.dss.etl.ImagingDatabaseVersionHolder;
 import ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.db.ScreeningDAOFactory;
 
 /**
@@ -32,7 +33,8 @@ public class DBUtilsForTests
 
     public static void init(DatabaseConfigurationContext context)
     {
+        String databaseVersion = new ImagingDatabaseVersionHolder().getDatabaseVersion();
         DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(context,
-                ScreeningDAOFactory.DATABASE_VERSION);
+                databaseVersion);
     }
 }