diff --git a/rtd_phosphonetx/build/build.xml b/rtd_phosphonetx/build/build.xml
index 934cd0a46f0665fd91df9a4a1fef23db31c826ae..55eb3d6f6523678b5000bff8158039daa9848aae 100644
--- a/rtd_phosphonetx/build/build.xml
+++ b/rtd_phosphonetx/build/build.xml
@@ -33,6 +33,9 @@
 				<include name="ch/systemsx/cisd/openbis/plugin/proteomics/shared/**/*.class" />
 				<include name="${proteomics-build.info.filename}" />
 			</fileset>
+			<fileset dir="../rtd_phosphonetx/source">
+				<include name="**/*.sql" />
+			</fileset>	
 			<manifest>
 				<attribute name="Version" value="${version.number}" />
 				<attribute name="Build-Number"
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/proteomics/DatabaseVersionHolder.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/proteomics/DatabaseVersionHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..34de34da5f90afbce8ff1a544392c1aff998379a
--- /dev/null
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/proteomics/DatabaseVersionHolder.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2012 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.etlserver.proteomics;
+
+import ch.systemsx.cisd.openbis.dss.generic.shared.IDatabaseVersionHolder;
+
+/**
+ * Holds the version of the proteomics database.
+ *
+ * @author Franz-Josef Elmer
+ */
+public class DatabaseVersionHolder implements IDatabaseVersionHolder
+{
+    public String getDatabaseVersion()
+    {
+        return "005"; // changed in S124
+    }
+}
+
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinSequenceGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinSequenceGrid.java
index 070bc0682ddd334294611f2dceac53cead3ce483..cca90bf4c7bb01b7903caec4e75e6bd2fdec695f 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinSequenceGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinSequenceGrid.java
@@ -29,6 +29,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteri
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.plugin.proteomics.client.web.client.IPhosphoNetXClientServiceAsync;
 import ch.systemsx.cisd.openbis.plugin.proteomics.client.web.client.dto.ListProteinSequenceCriteria;
@@ -46,9 +47,9 @@ public class ProteinSequenceGrid extends TypedTableGrid<ProteinSequence>
     public static final String GRID_ID = PREFIX + TypedTableGrid.GRID_POSTFIX;
 
     static IDisposableComponent create(IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            TechId proteinReferenceID)
+            Experiment experimentOrNull, TechId proteinReferenceID)
     {
-        return new ProteinSequenceGrid(viewContext, proteinReferenceID)
+        return new ProteinSequenceGrid(viewContext, experimentOrNull, proteinReferenceID)
                 .asDisposableWithoutToolbar();
     }
 
@@ -57,12 +58,16 @@ public class ProteinSequenceGrid extends TypedTableGrid<ProteinSequence>
     private ListProteinSequenceCriteria criteria;
 
     private ProteinSequenceGrid(IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
-            TechId proteinReferenceID)
+            Experiment experimentOrNull, TechId proteinReferenceID)
     {
         super(viewContext.getCommonViewContext(), BROWSER_ID + proteinReferenceID, true,
                 PhosphoNetXDisplayTypeIDGenerator.PROTEIN_SEQUENCE_BROWSER_GRID);
         specificViewContext = viewContext;
         criteria = new ListProteinSequenceCriteria();
+        if (experimentOrNull != null)
+        {
+            criteria.setExperimentID(new TechId(experimentOrNull.getId()));
+        }
         criteria.setProteinReferenceID(proteinReferenceID);
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinViewer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinViewer.java
index 92fb27a5eff2ef927df3c55a86df8d9f4004af80..f16523ef81d9a67b62a973d3d84ac345014aadb4 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinViewer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ProteinViewer.java
@@ -260,7 +260,7 @@ public class ProteinViewer extends AbstractViewerWithVerticalSplit<IEntityInform
                         protected IDisposableComponent createDisposableContent()
                         {
                             return ProteinSequenceGrid.create(ProteinViewer.this.getViewContext(),
-                                    proteinReferenceID);
+                                    experimentOrNull, proteinReferenceID);
                         }
                     };
         add(sequencesSection, createRightBorderLayoutData());
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/dto/ListProteinSequenceCriteria.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/dto/ListProteinSequenceCriteria.java
index 62bf4d4de048eb5ea540f288434cde8ca037502d..a06dea8c7821b0061d12bd613e63656ed11c17de 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/dto/ListProteinSequenceCriteria.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/dto/ListProteinSequenceCriteria.java
@@ -33,6 +33,7 @@ public class ListProteinSequenceCriteria extends
         IsSerializable
 {
     private TechId proteinReferenceID;
+    private TechId experimentID;
 
     public final TechId getProteinReferenceID()
     {
@@ -43,4 +44,15 @@ public class ListProteinSequenceCriteria extends
     {
         this.proteinReferenceID = proteinReferenceID;
     }
+
+    public void setExperimentID(TechId experimentID)
+    {
+        this.experimentID = experimentID;
+    }
+
+    public TechId getExperimentID()
+    {
+        return experimentID;
+    }
+    
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/PhosphoNetXClientService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/PhosphoNetXClientService.java
index b0ceedfcaccefab3aa29e413106ff0b4fbb92ca2..0a4dca52a9446723c80df91fdb90ec879ea62486 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/PhosphoNetXClientService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/PhosphoNetXClientService.java
@@ -310,7 +310,7 @@ public class PhosphoNetXClientService extends AbstractClientService implements
     {
         final String sessionToken = getSessionToken();
         return listEntities(
-                new ProteinSequenceProvider(server, sessionToken, criteria.getProteinReferenceID()),
+                new ProteinSequenceProvider(server, sessionToken, criteria.getExperimentID(), criteria.getProteinReferenceID()),
                 criteria);
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProvider.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProvider.java
index 03390de6b095abb246f3c96c1b98dea3b4817400..1192d15682a9255761d58eb039893d4de4634396 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProvider.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProvider.java
@@ -38,13 +38,15 @@ public class ProteinSequenceProvider extends AbstractTableModelProvider<ProteinS
 {
     private final IPhosphoNetXServer server;
     private final String sessionToken;
+    private final TechId experimentID;
     private final TechId proteinReferenceID;
 
     public ProteinSequenceProvider(IPhosphoNetXServer server, String sessionToken,
-            TechId proteinReferenceID)
+            TechId experimentID, TechId proteinReferenceID)
     {
         this.server = server;
         this.sessionToken = sessionToken;
+        this.experimentID = experimentID;
         this.proteinReferenceID = proteinReferenceID;
     }
 
@@ -52,7 +54,7 @@ public class ProteinSequenceProvider extends AbstractTableModelProvider<ProteinS
     protected TypedTableModel<ProteinSequence> createTableModel()
     {
         List<ProteinSequence> sequences =
-                server.listProteinSequencesByProteinReference(sessionToken, proteinReferenceID);
+                server.listProteinSequencesByProteinReference(sessionToken, experimentID, proteinReferenceID);
         TypedTableModelBuilder<ProteinSequence> builder =
                 new TypedTableModelBuilder<ProteinSequence>();
         builder.addColumn(SEQUENCE_SHORT_NAME).withDefaultWidth(20);
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServer.java
index ae1701df3052313a5e684540c3b37ca940d0089a..843c343143b3e6222d8474ce92b60ab169de63a0 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServer.java
@@ -123,7 +123,7 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
             ISampleProvider sampleProvider, TechId experimentID, String treatmentTypeOrNull)
     {
         String experimentPermID = getExperimentPermIDFor(experimentID);
-        IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAO();
+        IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAO(experimentID);
         DataSet<String> samplePermIDs =
                 dao.listAbundanceRelatedSamplePermIDsByExperiment(experimentPermID);
         try
@@ -169,7 +169,7 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
             TechId proteinReferenceID) throws UserFailureException
     {
         Session session = getSession(sessionToken);
-        IProteinQueryDAO proteinQueryDAO = specificDAOFactory.getProteinQueryDAO();
+        IProteinQueryDAO proteinQueryDAO = specificDAOFactory.getProteinQueryDAO(experimentID);
         ProteinByExperiment proteinByExperiment = new ProteinByExperiment();
         ProteinReference proteinReference =
                 proteinQueryDAO.tryToGetProteinReference(proteinReferenceID.getId());
@@ -190,11 +190,11 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
     }
 
     public List<ProteinSequence> listProteinSequencesByProteinReference(String sessionToken,
-            TechId proteinReferenceID) throws UserFailureException
+            TechId experimentID, TechId proteinReferenceID) throws UserFailureException
     {
         final Session session = getSession(sessionToken);
         IProteinSequenceTable sequenceTable = specificBOFactory.createProteinSequenceTable(session);
-        sequenceTable.loadByReference(proteinReferenceID);
+        sequenceTable.loadByReference(experimentID, proteinReferenceID);
         return sequenceTable.getSequences();
     }
 
@@ -203,7 +203,7 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
     {
         final Session session = getSession(sessionToken);
         IProteinSequenceTable sequenceTable = specificBOFactory.createProteinSequenceTable(session);
-        sequenceTable.loadByReference(proteinReferenceID);
+        sequenceTable.loadByReference(experimentId, proteinReferenceID);
         IDataSetProteinTable dataSetProteinTable = specificBOFactory.createDataSetProteinTable(session);
         dataSetProteinTable.load(getExperimentPermIDFor(experimentId), proteinReferenceID, sequenceTable);
         return dataSetProteinTable.getDataSetProteins();
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerLogger.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerLogger.java
index ccf44388000c4d397eb584051a331d073690b843..f710f694f02d5650cfa00f11caf6a0e423115d38 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerLogger.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerLogger.java
@@ -90,10 +90,10 @@ public class PhosphoNetXServerLogger extends AbstractServerLogger implements IPh
     }
 
     public List<ProteinSequence> listProteinSequencesByProteinReference(String sessionToken,
-            TechId proteinReferenceID) throws UserFailureException
+            TechId experimentID, TechId proteinReferenceID) throws UserFailureException
     {
         logAccess(sessionToken, "list_protein_sequences_by_reference",
-                "PROTEIN_REFERENCE_ID(%s)", proteinReferenceID);
+                "EXPERIMENT_ID(%s) PROTEIN_REFERENCE_ID(%s)", experimentID, proteinReferenceID);
         return null;
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/DataSetProteinTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/DataSetProteinTable.java
index 8a6643aaa14b486f07a337ec07bfa5f8b4b3bdf9..c11bc4522c90ad3dc9aad239daf1377d5a82fd2a 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/DataSetProteinTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/DataSetProteinTable.java
@@ -50,8 +50,8 @@ class DataSetProteinTable extends AbstractBusinessObject implements IDataSetProt
     public void load(String experimentPermID, TechId proteinReferenceID,
             IProteinSequenceTable sequenceTable)
     {
-        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
-        ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO(experimentPermID);
+        ErrorModel errorModel = new ErrorModel(proteinQueryDAO);
         DataSet<IdentifiedProtein> proteins =
                 proteinQueryDAO.listProteinsByProteinReferenceAndExperiment(experimentPermID,
                         proteinReferenceID.getId());
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModel.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModel.java
index 80e8f3986a5a97dc49f50ff9ee6475081bee51e2..dcf16b6e031976c65b6793e2c603bbd2a62b6c30 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModel.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModel.java
@@ -21,7 +21,6 @@ import java.util.Map;
 
 import net.lemnik.eodsql.DataSet;
 
-import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IPhosphoNetXDAOFactory;
 import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IProteinQueryDAO;
 import ch.systemsx.cisd.openbis.plugin.proteomics.shared.ProbabilityToFDRCalculator;
 import ch.systemsx.cisd.openbis.plugin.proteomics.shared.dto.IdentifiedProtein;
@@ -35,12 +34,11 @@ class ErrorModel
 {
     private final Map<Long, ProbabilityToFDRCalculator> calculators =
             new HashMap<Long, ProbabilityToFDRCalculator>();
+    private final IProteinQueryDAO dao;
 
-    private final IPhosphoNetXDAOFactory specificDAOFactory;
-
-    ErrorModel(IPhosphoNetXDAOFactory specificDAOFactory)
+    ErrorModel(IProteinQueryDAO dao)
     {
-        this.specificDAOFactory = specificDAOFactory;
+        this.dao = dao;
     }
 
     boolean passProtein(ProteinReferenceWithProtein protein, double falseDiscoveryRate)
@@ -69,7 +67,6 @@ class ErrorModel
         if (calculator == null)
         {
             calculator = new ProbabilityToFDRCalculator();
-            IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAO();
             DataSet<ProbabilityFDRMapping> mappings = dao.getProbabilityFDRMapping(dataSetID);
             for (ProbabilityFDRMapping probabilityFDRMapping : mappings)
             {
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/IProteinSequenceTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/IProteinSequenceTable.java
index 45ab1915a503f72c891e3b22bb2c1f591a3cd484..f0bd8e7fd00d956d79b4fe0b6b04e94892c6f30b 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/IProteinSequenceTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/IProteinSequenceTable.java
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.plugin.proteomics.shared.basic.dto.ProteinSequen
 public interface IProteinSequenceTable
 {
 
-    public void loadByReference(TechId proteinReferenceID);
+    public void loadByReference(TechId experimentID, TechId proteinReferenceID);
     
     public List<ProteinSequence> getSequences();
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinDetailsBO.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinDetailsBO.java
index 57a67ff776ae59e0486fcb5405b41eb29aae3435..004b2d70f1c42e97dddd730314afc92791088654 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinDetailsBO.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinDetailsBO.java
@@ -61,7 +61,7 @@ class ProteinDetailsBO extends AbstractBusinessObject implements IProteinDetails
     public void loadByExperimentAndReference(TechId experimentID, TechId proteinReferenceID)
     {
         String experimentPermID = getExperimentPermIDFor(experimentID);
-        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO(experimentID);
         DataSet<IdentifiedProtein> proteins =
                 proteinQueryDAO.listProteinsByProteinReferenceAndExperiment(experimentPermID,
                         proteinReferenceID.getId());
@@ -69,7 +69,7 @@ class ProteinDetailsBO extends AbstractBusinessObject implements IProteinDetails
         {
             if (proteins.size() == 1)
             {
-                ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
+                ErrorModel errorModel = new ErrorModel(proteinQueryDAO);
                 IdentifiedProtein protein = proteins.get(0);
                 errorModel.setFalseDiscoveryRateFor(protein);
                 details = new ProteinDetails();
@@ -86,10 +86,10 @@ class ProteinDetailsBO extends AbstractBusinessObject implements IProteinDetails
                     details.setDataSetTechID(ds.getId());
                     details.setDataSetTypeCode(ds.getDataSetType().getCode());
                 }
-                details.setPeptides(loadPeptides(protein));
+                details.setPeptides(loadPeptides(proteinQueryDAO, protein));
                 long proteinID = protein.getProteinID();
                 details.setProteinID(new TechId(proteinID));
-                details.setIndistinguishableProteinInfos(loadIndistinguishableProteinInfos(proteinID));
+                details.setIndistinguishableProteinInfos(loadIndistinguishableProteinInfos(proteinQueryDAO, proteinID));
             }
         } finally
         {
@@ -97,9 +97,8 @@ class ProteinDetailsBO extends AbstractBusinessObject implements IProteinDetails
         }
     }
 
-    private List<IndistinguishableProteinInfo> loadIndistinguishableProteinInfos(long proteinID)
+    private List<IndistinguishableProteinInfo> loadIndistinguishableProteinInfos(IProteinQueryDAO proteinQueryDAO, long proteinID)
     {
-        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
         DataSet<IndistinguishableProtein> proteins =
                 proteinQueryDAO.listIndistinguishableProteinsByProteinID(proteinID);
         try
@@ -125,9 +124,8 @@ class ProteinDetailsBO extends AbstractBusinessObject implements IProteinDetails
         }
     }
 
-    private List<Peptide> loadPeptides(IdentifiedProtein protein)
+    private List<Peptide> loadPeptides(IProteinQueryDAO proteinQueryDAO, IdentifiedProtein protein)
     {
-        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
         DataSet<PeptideWithModification> identifiedPeptides =
                 proteinQueryDAO.listIdentifiedPeptidesByProtein(protein.getProteinID());
         try
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTable.java
index d2d620583e65380c0aeefca2f035c61823141aed..c5c08fbeb245dd5fd784d456b6641c7695c5c97a 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTable.java
@@ -131,7 +131,7 @@ class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTab
     {
         AbundanceManager abundanceManager = new AbundanceManager(sampleProvider);
         IPhosphoNetXDAOFactory specificDAOFactory = getSpecificDAOFactory();
-        IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAO();
+        IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAO(experimentPermID);
         long time = System.currentTimeMillis();
         DataSet<ProteinReferenceWithProtein> dataSet =
                 dao.listProteinReferencesByExperiment(experimentPermID);
@@ -149,8 +149,8 @@ class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTab
             dataSet.close();
         }
         operationLog.info("(" + (System.currentTimeMillis() - time) + "ms) for listProteinReferencesByExperiment");
-        Map<Long, List<ProteinAbundance>> abundancesPerProtein = getAbudancesPerProtein(proteinIDs);
-        ErrorModel errorModel = new ErrorModel(specificDAOFactory);
+        Map<Long, List<ProteinAbundance>> abundancesPerProtein = getAbudancesPerProtein(dao, proteinIDs);
+        ErrorModel errorModel = new ErrorModel(dao);
         for (ProteinReferenceWithProtein protein : proteins)
         {
             if (errorModel.passProtein(protein, falseDiscoveryRate))
@@ -162,9 +162,8 @@ class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTab
         return abundanceManager;
     }
 
-    private Map<Long, List<ProteinAbundance>> getAbudancesPerProtein(LongOpenHashSet proteinIDs)
+    private Map<Long, List<ProteinAbundance>> getAbudancesPerProtein(IProteinQueryDAO dao, LongOpenHashSet proteinIDs)
     {
-        IProteinQueryDAO dao = getSpecificDAOFactory().getProteinQueryDAO();
         long time = System.currentTimeMillis();
         DataSet<ProteinAbundance> dataSet = dao.listProteinWithAbundanceByExperiment(proteinIDs);
         List<ProteinAbundance> proteinAbundances = new ArrayList<ProteinAbundance>();
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java
index 946ad65d4009a1ef642014072973cced0ddc0731..1b10940300a7b1c2eeaa19d70dbf181186806ecd 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTable.java
@@ -69,7 +69,7 @@ class ProteinRelatedSampleTable implements IProteinRelatedSampleTable
     {
         String experimentPermID =
                 daoFactory.getExperimentDAO().getByTechId(experimentID).getPermId();
-        IProteinQueryDAO proteinQueryDAO = specificDAOFactory.getProteinQueryDAO();
+        IProteinQueryDAO proteinQueryDAO = specificDAOFactory.getProteinQueryDAO(experimentID);
         Map<String, List<SampleAbundance>> sampleAbundanceMap =
                 createSampleMap(proteinQueryDAO.listSampleAbundanceByProtein(experimentPermID,
                         proteinReferenceID.getId()));
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSequenceTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSequenceTable.java
index 3fa864fc93ff5b633bcd548431fefca63fe7e18d..2ab3e6d555686508a841a39befa26ab384265934 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSequenceTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSequenceTable.java
@@ -70,9 +70,9 @@ class ProteinSequenceTable extends AbstractBusinessObject implements IProteinSeq
         return shortName;
     }
 
-    public void loadByReference(TechId proteinReferenceID)
+    public void loadByReference(TechId experimentID, TechId proteinReferenceID)
     {
-        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO(experimentID);
         DataSet<Sequence> sequences =
                 proteinQueryDAO.listProteinSequencesByProteinReference(proteinReferenceID.getId());
         proteinSequences = new ArrayList<ProteinSequence>(sequences.size());
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTable.java
index c8bd95e4610b70c8bfeee0175a1efbaaf017a8ba..ac8528e517cfcd02c10e8790fbb1e551d9c4f498 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTable.java
@@ -107,8 +107,8 @@ class ProteinSummaryTable extends AbstractBusinessObject implements IProteinSumm
     {
         IExperimentDAO experimentDAO = getDaoFactory().getExperimentDAO();
         String permID = experimentDAO.getByTechId(experimentID).getPermId();
-        IProteinQueryDAO dao = getSpecificDAOFactory().getProteinQueryDAO();
-        ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
+        IProteinQueryDAO dao = getSpecificDAOFactory().getProteinQueryDAO(experimentID);
+        ErrorModel errorModel = new ErrorModel(dao);
         DataSet<ProteinReferenceWithProbabilityAndPeptide> resultSet =
                 dao.listProteinsWithProbabilityAndPeptidesByExperiment(permID);
         List<Counter> counters = new ArrayList<Counter>(FDR_LEVELS.length);
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java
index 2d92850ca72e6ecb8c6cc4dc53c6a164e30f8c58..b2cc41cc2c8baaed6e4b9c9f4030795b227b2f55 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/SampleTable.java
@@ -61,7 +61,7 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable
     public void loadSamplesWithAbundance(TechId experimentID, TechId proteinReferenceID)
     {
         samples = new ArrayList<SampleWithPropertiesAndAbundance>();
-        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO(experimentID);
         IDAOFactory daoFactory = getDaoFactory();
         String experimentPermID =
                 daoFactory.getExperimentDAO().getByTechId(experimentID).getPermId();
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/IPhosphoNetXDAOFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/IPhosphoNetXDAOFactory.java
index f5629915e7d22c8066892bda1699652936bccda4..c063b1bb1224c2bd0927ab1a64b6225862c8e1df 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/IPhosphoNetXDAOFactory.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/IPhosphoNetXDAOFactory.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+
 
 /**
  * A factory for PhosphoNetX specific DAOs.
@@ -24,5 +26,7 @@ package ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess;
  */
 public interface IPhosphoNetXDAOFactory
 {
-    public IProteinQueryDAO getProteinQueryDAO();
+    public IProteinQueryDAO getProteinQueryDAO(TechId experimentID);
+    
+    public IProteinQueryDAO getProteinQueryDAO(String experimentPermID);
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/db/PhosphoNetXDAOFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/db/PhosphoNetXDAOFactory.java
index dd45f366288c352cb303db797298699b2d101938..ed1cc9c4f2683260981f518639ac58d3535b3387 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/db/PhosphoNetXDAOFactory.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/dataaccess/db/PhosphoNetXDAOFactory.java
@@ -16,14 +16,27 @@
 
 package ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.db;
 
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.sql.DataSource;
+
 import net.lemnik.eodsql.QueryTool;
 
 import org.apache.log4j.Logger;
 
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 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.IDAOFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataSourceProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IPhosphoNetXDAOFactory;
 import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IProteinQueryDAO;
 
@@ -32,26 +45,84 @@ import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IProteinQuer
  */
 public class PhosphoNetXDAOFactory implements IPhosphoNetXDAOFactory
 {
-    /** Current version of the database. */
-    public static final String DATABASE_VERSION = "005";
-
     private static final Logger operationLog =
             LogFactory.getLogger(LogCategory.OPERATION, PhosphoNetXDAOFactory.class);
+    
+    private final Map<DataSource, IProteinQueryDAO> daos = new HashMap<DataSource, IProteinQueryDAO>();
 
-    private final IProteinQueryDAO proteinQueryDAO;
+    private final IDAOFactory daoFactory;
 
-    public PhosphoNetXDAOFactory(DatabaseConfigurationContext context)
+    private final IDataSourceProvider dataSourceProvider;
+
+    public PhosphoNetXDAOFactory(IDataSourceProvider dataSourceProvider, IDAOFactory daoFactory)
     {
-        DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(context, DATABASE_VERSION);
-        proteinQueryDAO = QueryTool.getQuery(context.getDataSource(), IProteinQueryDAO.class);
+        this.dataSourceProvider = dataSourceProvider;
+        this.daoFactory = daoFactory;
         if (operationLog.isInfoEnabled())
         {
             operationLog.info("DAO factory for proteomics created.");
         }
     }
     
-    public IProteinQueryDAO getProteinQueryDAO()
+    public IProteinQueryDAO getProteinQueryDAO(String experimentPermID)
+    {
+        ExperimentPE experiment = daoFactory.getExperimentDAO().tryGetByPermID(experimentPermID);
+        if (experiment == null)
+        {
+            throw new UserFailureException("No experiment with following perm ID found: "
+                    + experimentPermID);
+        }
+        return getProteinQueryDAO(experiment);
+    }
+
+    public IProteinQueryDAO getProteinQueryDAO(TechId experimentID)
     {
-        return proteinQueryDAO;
+        ExperimentPE experiment = daoFactory.getExperimentDAO().tryGetByTechId(experimentID);
+        if (experiment == null)
+        {
+            throw new UserFailureException("No experiment with following technical ID found: "
+                    + experimentID);
+        }
+        return getProteinQueryDAO(experiment);
     }
+
+    public IProteinQueryDAO getProteinQueryDAO(ExperimentPE experiment)
+    {
+        DataSource dataSource = getDataSource(experiment);
+        IProteinQueryDAO dao = daos.get(dataSource);
+        if (dao == null)
+        {
+            dao = QueryTool.getQuery(dataSource, IProteinQueryDAO.class);
+            daos.put(dataSource, dao);
+        }
+        return dao;
+    }
+    
+    private DataSource getDataSource(ExperimentPE experiment)
+    {
+        IDataDAO dataDAO = daoFactory.getDataDAO();
+        
+        List<DataPE> dataSets = dataDAO.listDataSets(experiment);
+        Set<String> dataStores = new HashSet<String>();
+        for (DataPE data : dataSets)
+        {
+            dataStores.add(data.getDataStore().getCode());
+        }
+        if (dataStores.isEmpty())
+        {
+            throw new UserFailureException("Experiment with " + experiment.getIdentifier()
+                    + " has no data sets.");
+        }
+        if (dataStores.size() > 1)
+        {
+            throw new UserFailureException("Experiment with " + experiment.getIdentifier()
+                    + " has data sets from more than one store. The stores are the following: "
+                    + dataStores);
+        }
+        DataSource dataSource =
+                dataSourceProvider.getDataSourceByDataStoreServerCode(dataStores.iterator()
+                        .next(), "proteomics");
+        return dataSource;
+    }
+
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/shared/IPhosphoNetXServer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/shared/IPhosphoNetXServer.java
index 3fc47cfda959d61720a33ff2cf5268f444dde8e0..283ca2b1b07655f6446b469d125aca7b7986a014 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/shared/IPhosphoNetXServer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/shared/IPhosphoNetXServer.java
@@ -81,7 +81,7 @@ public interface IPhosphoNetXServer extends IServer
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
     public List<ProteinSequence> listProteinSequencesByProteinReference(String sessionToken,
-            TechId proteinReferenceID) throws UserFailureException;
+            TechId experimentID, TechId proteinReferenceID) throws UserFailureException;
     
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
diff --git a/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml b/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml
index 6834762327ba0cd0238c980d3b90be324a2a3cf1..59a6dcaf5320bc073c9eb81ddcc17d5e059d485e 100644
--- a/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml
+++ b/rtd_phosphonetx/source/java/proteomics-plugin-applicationContext.xml
@@ -7,29 +7,15 @@
                         http://www.springframework.org/schema/tx
                         http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
-    <bean id="proteomics-db-configuration-context"
-        class="ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext">
-        <property name="basicDatabaseName" value="${proteomics.database.basic-name}" />
-        <property name="createFromScratch" value="${proteomics.database.create-from-scratch}" />
-        <property name="scriptSingleStepMode" value="${proteomics.database.script-single-step-mode}" />
-        <property name="sequenceNameMapper">
-            <bean class="ch.systemsx.cisd.openbis.generic.server.dataaccess.db.SequenceNameMapper" />
-        </property>
-        <property name="urlHostPart" value="${proteomics.database.url-host-part}" />
-        <property name="adminUser" value="${proteomics.database.admin-user}" />
-        <property name="owner" value="${proteomics.database.owner}" />
-        <property name="readOnlyGroup" value="phosphonetx_readonly" />
-        <property name="password" value="${proteomics.database.owner-password}" />
-        <property name="adminPassword" value="${proteomics.database.admin-password}" />
-        <property name="databaseKind" value="${proteomics.database.kind}" />
-        <property name="databaseEngineCode" value="${proteomics.database.engine}" />
-        <property name="scriptFolder" value="${proteomics.script-folder}" />
-        <property name="databaseInstance" value="${proteomics.database-instance}" />
+    <bean id="dss-based-data-source-provider" class="ch.systemsx.cisd.openbis.generic.server.dataaccess.DataStoreServerBasedDataSourceProvider">
+        <constructor-arg ref="dao-factory"/>
     </bean>
     
+    
     <bean id="proteomics-dao-factory"
           class="ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.db.PhosphoNetXDAOFactory">
-        <constructor-arg ref="proteomics-db-configuration-context"/>
+        <constructor-arg ref="dss-based-data-source-provider"/>
+        <constructor-arg ref="dao-factory"/>
     </bean>
     
     <bean id="proteomics-bo-factory"
diff --git a/rtd_phosphonetx/source/java/service.properties b/rtd_phosphonetx/source/java/service.properties
index e465bbd10f2d0e2ab438c5cf50ba021fc3326b5e..5eeac2a677bbf7461e58e53d814f8d9ceb24c4b2 100644
--- a/rtd_phosphonetx/source/java/service.properties
+++ b/rtd_phosphonetx/source/java/service.properties
@@ -25,18 +25,6 @@ database.owner-password =
 database.admin-user = 
 database.admin-password =
 
-proteomics.database.engine = postgresql
-proteomics.database.create-from-scratch = false
-proteomics.database.script-single-step-mode = false
-proteomics.database.url-host-part =
-proteomics.database.basic-name = phosphonetx
-proteomics.database.kind = dev
-proteomics.database.owner =
-proteomics.database.owner-password =
-proteomics.database.admin-user = 
-proteomics.database.admin-password =
-proteomics.script-folder = source/sql/proteomics
-
 crowd.service.host = crowd.systemsx.ch
 crowd.service.port = 8443
 crowd.application.name = lims
@@ -64,6 +52,11 @@ hibernate.search.maxResults = 100000
 
 web-client-configuration-file = etc/web-client.properties
 
+dss-based-data-source-provider.data-store-servers = DSS1
+dss-based-data-source-provider.DSS1.database-driver = org.postgresql.Driver
+dss-based-data-source-provider.DSS1.database-url = jdbc:postgresql://localhost/proteomics_dev
+
+
 # Database Configurations for Query module
 query-databases = 1, 2
 
@@ -77,4 +70,4 @@ query-databases = 1, 2
 2.label = Protein Data
 2.creator-minimal-role = SPACE_USER
 2.database-driver = org.postgresql.Driver
-2.database-url = jdbc:postgresql://localhost/phosphonetx_${proteomics.database.kind}
+2.database-url = ${dss-based-data-source-provider.DSS1.database-url}
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProviderTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProviderTest.java
index 32bce8d1949989dea12aa0473b9ac2aeff7c095f..a08b7602edd125f207fd5dd093a697076ff77b9a 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProviderTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/server/resultset/ProteinSequenceProviderTest.java
@@ -46,12 +46,12 @@ public class ProteinSequenceProviderTest extends AbstractProviderTest
         context.checking(new Expectations()
             {
                 {
-                    one(phosphonetxServer).listProteinSequencesByProteinReference(SESSION_TOKEN, new TechId(42));
+                    one(phosphonetxServer).listProteinSequencesByProteinReference(SESSION_TOKEN, new TechId(42), new TechId(43));
                     will(returnValue(Arrays.asList(ps)));
                 }
             });
         ProteinSequenceProvider provider =
-                new ProteinSequenceProvider(phosphonetxServer, SESSION_TOKEN, new TechId(42));
+                new ProteinSequenceProvider(phosphonetxServer, SESSION_TOKEN, new TechId(42), new TechId(43));
 
         TypedTableModel<ProteinSequence> model = provider.createTableModel();
 
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerTest.java
index db8c6772e1251054112ea74108a2f618db86dd23..05d74ca9b1307b7e7a5a5337e964dfb91fad5723 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/PhosphoNetXServerTest.java
@@ -85,9 +85,6 @@ public class PhosphoNetXServerTest extends AbstractServerTestCase
         context.checking(new Expectations()
             {
                 {
-                    allowing(phosphoNetXDAOFactory).getProteinQueryDAO();
-                    will(returnValue(proteinDAO));
-                    
                     allowing(boFactory).createProteinDetailsBO(SESSION);
                     will(returnValue(proteinDetailsBO));
                     
@@ -112,6 +109,9 @@ public class PhosphoNetXServerTest extends AbstractServerTestCase
                     experimentPE.setPermId(EXPERIMENT_PERM_ID);
                     will(returnValue(experimentPE));
                     
+                    allowing(phosphoNetXDAOFactory).getProteinQueryDAO(EXPERIMENT_ID);
+                    will(returnValue(proteinDAO));
+                    
                     one(proteinDAO).listAbundanceRelatedSamplePermIDsByExperiment(EXPERIMENT_PERM_ID);
                     will(returnValue(mockDataSet));
                     
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/AbstractBOTestCase.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/AbstractBOTestCase.java
index 20771d7999e3d94c22c5cba8ac251585c5de58f4..3f8c5e9d52a9a9cd5bcd97a9eeef92df38962954 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/AbstractBOTestCase.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/AbstractBOTestCase.java
@@ -16,7 +16,6 @@
 
 package ch.systemsx.cisd.openbis.plugin.proteomics.server.business;
 
-import org.jmock.Expectations;
 import org.testng.annotations.BeforeMethod;
 
 import ch.systemsx.cisd.openbis.generic.shared.AbstractServerTestCase;
@@ -40,13 +39,6 @@ public abstract class AbstractBOTestCase extends AbstractServerTestCase
         super.setUp();
         specificDAOFactory = context.mock(IPhosphoNetXDAOFactory.class);
         proteinDAO = context.mock(IProteinQueryDAO.class);
-        context.checking(new Expectations()
-            {
-                {
-                    allowing(specificDAOFactory).getProteinQueryDAO();
-                    will(returnValue(proteinDAO));
-                }
-            });
     }
 
 }
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModelTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModelTest.java
index 1e6ae7ebb69e969218e50cdb552cc96bf43b4d35..fdde68882d8cbd1e81e2ddb608b75b6c5a66392e 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModelTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ErrorModelTest.java
@@ -24,8 +24,6 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.common.eodsql.MockDataSet;
-import ch.systemsx.cisd.openbis.plugin.proteomics.server.business.ErrorModel;
-import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IPhosphoNetXDAOFactory;
 import ch.systemsx.cisd.openbis.plugin.proteomics.server.dataaccess.IProteinQueryDAO;
 import ch.systemsx.cisd.openbis.plugin.proteomics.shared.dto.IdentifiedProtein;
 import ch.systemsx.cisd.openbis.plugin.proteomics.shared.dto.ProbabilityFDRMapping;
@@ -44,7 +42,6 @@ public class ErrorModelTest extends AssertJUnit
     private static final long DATA_SET3_ID = 44;
     
     private Mockery context;
-    private IPhosphoNetXDAOFactory specificDAOFactory;
     private IProteinQueryDAO proteinQueryDAO;
     private ErrorModel errorModel;
     
@@ -52,14 +49,11 @@ public class ErrorModelTest extends AssertJUnit
     public void beforeMethod()
     {
         context = new Mockery();
-        specificDAOFactory = context.mock(IPhosphoNetXDAOFactory.class);
         proteinQueryDAO = context.mock(IProteinQueryDAO.class);
-        errorModel = new ErrorModel(specificDAOFactory);
+        errorModel = new ErrorModel(proteinQueryDAO);
         context.checking(new Expectations()
             {
                 {
-                    allowing(specificDAOFactory).getProteinQueryDAO();
-                    will(returnValue(proteinQueryDAO));
                     
                     atMost(1).of(proteinQueryDAO).getProbabilityFDRMapping(DATA_SET1_ID);
                     MockDataSet<ProbabilityFDRMapping> dataSet1 = new MockDataSet<ProbabilityFDRMapping>();
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTableTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTableTest.java
index c9d1d92a2f983c63639ba001c6a6aa62d19900c5..00702afb6343b18c4c624bce8aab20b2fc212e57 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTableTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinInfoTableTest.java
@@ -95,6 +95,7 @@ public class ProteinInfoTableTest extends AbstractBOTestCase
     @Test
     public void testLoadLeadingToAnEmptyTable()
     {
+        prepareGetProteinQueryDAO(EXPERIMENT_PERM_ID);
         MockDataSet<ProteinReferenceWithProtein> proteinReferences = new MockDataSet<ProteinReferenceWithProtein>();
         MockDataSet<ProteinAbundance> proteinAbundances = new MockDataSet<ProteinAbundance>();
         prepareLoadDataSet(proteinReferences, proteinAbundances);
@@ -112,6 +113,7 @@ public class ProteinInfoTableTest extends AbstractBOTestCase
     @Test
     public void testSimpleLoad()
     {
+        prepareGetProteinQueryDAO(EXPERIMENT_PERM_ID);
         MockDataSet<ProteinReferenceWithProtein> proteinReferences =
             new MockDataSet<ProteinReferenceWithProtein>();
         MockDataSet<ProteinAbundance> abundances = new MockDataSet<ProteinAbundance>();
@@ -182,6 +184,7 @@ public class ProteinInfoTableTest extends AbstractBOTestCase
     
     private void checkAggregationType(double expectedAbundance, boolean aggregateOriginal)
     {
+        prepareGetProteinQueryDAO(EXPERIMENT_PERM_ID);
         final MockDataSet<ProteinReferenceWithProtein> proteinReferences =
             new MockDataSet<ProteinReferenceWithProtein>();
         ProteinReferenceWithProtein proteinReference = new ProteinReferenceWithProtein();
@@ -238,6 +241,17 @@ public class ProteinInfoTableTest extends AbstractBOTestCase
         context.assertIsSatisfied();
     }
     
+    private void prepareGetProteinQueryDAO(final String experimentPermID)
+    {
+        context.checking(new Expectations()
+        {
+            {
+                one(specificDAOFactory).getProteinQueryDAO(experimentPermID);
+                will(returnValue(proteinDAO));
+            }
+        });
+    }
+    
     private void prepareLoadDataSet(
             final MockDataSet<ProteinReferenceWithProtein> proteinReferences,
             final DataSet<ProteinAbundance> proteinAbundances)
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java
index f257e456f7f297491bee005b2318b36fa633765c..e32ad6a91cd9f8682c8d2abb0dd531cc157b8d64 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinRelatedSampleTableTest.java
@@ -92,6 +92,9 @@ public class ProteinRelatedSampleTableTest extends AbstractBOTestCase
         context.checking(new Expectations()
             {
                 {
+                    one(specificDAOFactory).getProteinQueryDAO(experimentID);
+                    will(returnValue(proteinDAO));
+                    
                     one(experimentDAO).getByTechId(experimentID);
                     ExperimentPE experiment = new ExperimentPE();
                     experiment.setPermId("exp-1");
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTableTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTableTest.java
index 96a8e791d62bc18f443eefc1e32ecc00f1cd4b98..8bba9b0753f2aed1a87e7289c423a209fdb4fe5d 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTableTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/proteomics/server/business/ProteinSummaryTableTest.java
@@ -60,13 +60,6 @@ public class ProteinSummaryTableTest extends AbstractServerTestCase
         super.setUp();
         specificDAOFactory = context.mock(IPhosphoNetXDAOFactory.class);
         proteinDAO = context.mock(IProteinQueryDAO.class);
-        context.checking(new Expectations()
-            {
-                {
-                    allowing(specificDAOFactory).getProteinQueryDAO();
-                    will(returnValue(proteinDAO));
-                }
-            });
         table = new ProteinSummaryTable(daoFactory, specificDAOFactory, SESSION);
     }
 
@@ -180,6 +173,9 @@ public class ProteinSummaryTableTest extends AbstractServerTestCase
         context.checking(new Expectations()
             {
                 {
+                    allowing(specificDAOFactory).getProteinQueryDAO(EXPERIMENT_ID);
+                    will(returnValue(proteinDAO));
+                    
                     one(experimentDAO).getByTechId(EXPERIMENT_ID);
                     ExperimentPE experimentPE = new ExperimentPE();
                     experimentPE.setPermId(EXPERIMENT_PERM_ID);