diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/IProtDAO.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/IProtDAO.java
index c71eb911ada3526fb2cfe86230bbf8244a9fb24f..058bc2417a1ab0b9a88e8d6e95e9b8a8958312b5 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/IProtDAO.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/IProtDAO.java
@@ -93,8 +93,8 @@ public interface IProtDAO extends BaseQuery
             + "returning id")
     public long createSequence(Sequence sequence);
 
-    @Update("insert into identified_proteins (prot_id, sequ_id, coverage) values (?{1}, ?{2}, ?{3})")
-    public void createIdentifiedProtein(long proteinID, long sequenceID, double coverage);
+    @Update("insert into identified_proteins (prot_id, sequ_id, coverage, is_primary) values (?{1}, ?{2}, ?{3}, ?{4})")
+    public void createIdentifiedProtein(long proteinID, long sequenceID, double coverage, boolean primary);
 
     @Update("insert into abundances (prot_id, samp_id, value) values (?{1}, ?{2}, ?{3})")
     public void createAbundance(long proteinID, long sampleID, double value);
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploader.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploader.java
index 440b23de9aafc7a13bdcbe5396d7fea6e54a714e..4e8344d7b901036b0345f7370ed83b134b6a8bbe 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploader.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploader.java
@@ -259,10 +259,10 @@ class ResultDataSetUploader extends AbstractHandler
                 logException(e, "peptide", peptide.getSequence().toString());
             }
         }
-        createIdentifiedProtein(proteinID, peptideSequences, databaseID, protein.getAnnotation());
+        createIdentifiedProtein(proteinID, peptideSequences, databaseID, protein.getAnnotation(), true);
         for (AnnotatedProtein annotatedProtein : protein.getIndistinguishableProteins())
         {
-            createIdentifiedProtein(proteinID, peptideSequences, databaseID, annotatedProtein.getAnnotation());
+            createIdentifiedProtein(proteinID, peptideSequences, databaseID, annotatedProtein.getAnnotation(), false);
         }
     }
 
@@ -299,7 +299,7 @@ class ResultDataSetUploader extends AbstractHandler
     }
 
     private void createIdentifiedProtein(long proteinID, Set<String> peptideSequences,
-            Long databaseID, ProteinAnnotation annotation)
+            Long databaseID, ProteinAnnotation annotation, boolean primary)
     {
         ProteinDescription protDesc = new ProteinDescription(annotation.getDescription());
         String accessionNumber = protDesc.getAccessionNumber();
@@ -323,7 +323,7 @@ class ResultDataSetUploader extends AbstractHandler
             sequence.setId(dao.createSequence(sequence));
         }
         double coverage = calculateCoverage(sequence.getSequence(), peptideSequences);
-        dao.createIdentifiedProtein(proteinID, sequence.getId(), coverage);
+        dao.createIdentifiedProtein(proteinID, sequence.getId(), coverage, primary);
    }
     
     private double calculateCoverage(String aminoAcidSequence, Set<String> peptideSequences)
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java
index 07e82ccd48ec6c7d6770af1a9771778c01fb66fb..2f39bb9956dcbaa4ce4c984f912937a5e70cde9a 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java
@@ -37,7 +37,7 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.server.dataaccess.IProteinQue
 public class PhosphoNetXDAOFactory implements IPhosphoNetXDAOFactory
 {
     /** Current version of the database. */
-    public static final String DATABASE_VERSION = "003";
+    public static final String DATABASE_VERSION = "004";
 
     private static final Logger operationLog =
             LogFactory.getLogger(LogCategory.OPERATION, PhosphoNetXDAOFactory.class);
diff --git a/rtd_phosphonetx/source/sql/postgresql/004/grant-004.sql b/rtd_phosphonetx/source/sql/postgresql/004/grant-004.sql
new file mode 100644
index 0000000000000000000000000000000000000000..2e85f4fb1f6fcbb7f072005f9d1ab5ad9e1fe713
--- /dev/null
+++ b/rtd_phosphonetx/source/sql/postgresql/004/grant-004.sql
@@ -0,0 +1,18 @@
+-- Granting SELECT privilege to group PHOSPHONETX_READONLY
+
+GRANT SELECT ON TABLE EXPERIMENTS TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE DATA_SETS TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE MODIFICATIONS TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE PEPTIDES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE PROTEINS TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE SAMPLES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE SEQUENCES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE IDENTIFIED_PROTEINS TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE ABUNDANCES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE PROBABILITY_FDR_MAPPINGS TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE PROTEIN_REFERENCES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE DATABASES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE MODIFIED_PEPTIDES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE SPECTRUM_REFERENCES TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE MODIFICATION_FRACTIONS TO GROUP PHOSPHONETX_READONLY;
+GRANT SELECT ON TABLE EVENTS TO GROUP PHOSPHONETX_READONLY;
diff --git a/rtd_phosphonetx/source/sql/postgresql/004/schema-004.png b/rtd_phosphonetx/source/sql/postgresql/004/schema-004.png
new file mode 100755
index 0000000000000000000000000000000000000000..fceffeedd9cb97b93e06432546eb207feba07418
Binary files /dev/null and b/rtd_phosphonetx/source/sql/postgresql/004/schema-004.png differ
diff --git a/rtd_phosphonetx/source/sql/postgresql/004/schema-004.sql b/rtd_phosphonetx/source/sql/postgresql/004/schema-004.sql
new file mode 100755
index 0000000000000000000000000000000000000000..824269ff55a707aa7124dbd2b18b3e0f6c4f6a4a
--- /dev/null
+++ b/rtd_phosphonetx/source/sql/postgresql/004/schema-004.sql
@@ -0,0 +1,296 @@
+/* ---------------------------------------------------------------------- */
+/* Script generated with: DeZign for Databases v5.2.3                     */
+/* Target DBMS:           PostgreSQL 8                                    */
+/* Project file:          schema.dez                                      */
+/* Project name:                                                          */
+/* Author:                                                                */
+/* Script type:           Database creation script                        */
+/* Created on:            2010-05-27 14:26                                */
+/* Model version:         Version 2010-05-27                              */
+/* ---------------------------------------------------------------------- */
+
+
+/* ---------------------------------------------------------------------- */
+/* Domains                                                                */
+/* ---------------------------------------------------------------------- */
+
+CREATE DOMAIN CHECKSUM AS CHARACTER VARYING(8);
+
+CREATE DOMAIN CODE AS CHARACTER VARYING(40);
+
+CREATE DOMAIN DESCRIPTION AS CHARACTER VARYING(2000);
+
+CREATE DOMAIN INTEGER_NUMBER AS INTEGER;
+
+CREATE DOMAIN REAL_NUMBER AS DOUBLE PRECISION;
+
+CREATE DOMAIN LONG_SEQUENCE AS TEXT;
+
+CREATE DOMAIN SHORT_DESCRIPTION AS CHARACTER VARYING(200);
+
+CREATE DOMAIN TECH_ID AS BIGINT;
+
+CREATE DOMAIN SHORT_SEQUENCE AS CHARACTER VARYING(1000);
+
+CREATE DOMAIN ACCESSION_NUMBER AS CHARACTER VARYING(256);
+
+CREATE DOMAIN SPECTRUM_REFERENCE AS CHARACTER VARYING(100);
+
+CREATE DOMAIN BOOLEAN_CHAR AS BOOLEAN DEFAULT FALSE;
+
+/* ---------------------------------------------------------------------- */
+/* Tables                                                                 */
+/* ---------------------------------------------------------------------- */
+
+/* ---------------------------------------------------------------------- */
+/* Add table "EXPERIMENTS"                                                */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE EXPERIMENTS (
+    ID BIGSERIAL  NOT NULL,
+    PERM_ID CODE  NOT NULL,
+    CONSTRAINT PK_EXPERIMENTS PRIMARY KEY (ID),
+    CONSTRAINT TUC_EXPERIMENTS_1 UNIQUE (PERM_ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "DATA_SETS"                                                  */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE DATA_SETS (
+    ID BIGSERIAL  NOT NULL,
+    EXPE_ID TECH_ID  NOT NULL,
+    SAMP_ID TECH_ID,
+    DB_ID TECH_ID  NOT NULL,
+    PERM_ID CODE  NOT NULL,
+    CONSTRAINT PK_DATA_SETS PRIMARY KEY (ID),
+    CONSTRAINT TUC_DATA_SETS_1 UNIQUE (PERM_ID)
+);
+
+CREATE INDEX IX_FK_DATA_SETS_EXPERIMENTS ON DATA_SETS (EXPE_ID);
+
+CREATE INDEX IX_FK_DATA_SETS_SAMPLES ON DATA_SETS (SAMP_ID);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "MODIFICATIONS"                                              */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE MODIFICATIONS (
+    ID BIGSERIAL  NOT NULL,
+    MOPE_ID TECH_ID  NOT NULL,
+    POS INTEGER_NUMBER  NOT NULL,
+    MASS REAL_NUMBER  NOT NULL,
+    CONSTRAINT PK_MODIFICATIONS PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "PEPTIDES"                                                   */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE PEPTIDES (
+    ID BIGSERIAL  NOT NULL,
+    PROT_ID TECH_ID  NOT NULL,
+    SEQUENCE SHORT_SEQUENCE  NOT NULL,
+    CHARGE INTEGER_NUMBER  NOT NULL,
+    CONSTRAINT PK_PEPTIDES PRIMARY KEY (ID)
+);
+
+CREATE INDEX IX_FK_PEPTIDES_PROTEINS ON PEPTIDES (PROT_ID);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "PROTEINS"                                                   */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE PROTEINS (
+    ID BIGSERIAL  NOT NULL,
+    DASE_ID TECH_ID  NOT NULL,
+    PROBABILITY REAL_NUMBER  NOT NULL,
+    CONSTRAINT PK_PROTEINS PRIMARY KEY (ID)
+);
+
+CREATE INDEX IDX_PROTEINS_1 ON PROTEINS (DASE_ID);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "SAMPLES"                                                    */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE SAMPLES (
+    ID BIGSERIAL  NOT NULL,
+    PERM_ID CODE  NOT NULL,
+    EXPE_ID TECH_ID  NOT NULL,
+    CONSTRAINT PK_SAMPLES PRIMARY KEY (ID),
+    CONSTRAINT TUC_SAMPLES_1 UNIQUE (PERM_ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "SEQUENCES"                                                  */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE SEQUENCES (
+    ID BIGSERIAL  NOT NULL,
+    DB_ID TECH_ID  NOT NULL,
+    PRRE_ID TECH_ID  NOT NULL,
+    AMINO_ACID_SEQUENCE LONG_SEQUENCE  NOT NULL,
+    CHECKSUM CHECKSUM  NOT NULL,
+    CONSTRAINT PK_SEQUENCES PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "IDENTIFIED_PROTEINS"                                        */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE IDENTIFIED_PROTEINS (
+    ID BIGSERIAL  NOT NULL,
+    PROT_ID TECH_ID  NOT NULL,
+    SEQU_ID TECH_ID  NOT NULL,
+    COVERAGE REAL_NUMBER,
+    IS_PRIMARY BOOLEAN_CHAR  NOT NULL,
+    CONSTRAINT PK_IDENTIFIED_PROTEINS PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "ABUNDANCES"                                                 */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE ABUNDANCES (
+    ID BIGSERIAL  NOT NULL,
+    PROT_ID TECH_ID  NOT NULL,
+    SAMP_ID TECH_ID  NOT NULL,
+    VALUE REAL_NUMBER  NOT NULL,
+    CONSTRAINT PK_ABUNDANCES PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "PROBABILITY_FDR_MAPPINGS"                                   */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE PROBABILITY_FDR_MAPPINGS (
+    ID BIGSERIAL  NOT NULL,
+    DASE_ID TECH_ID  NOT NULL,
+    PROBABILITY REAL_NUMBER  NOT NULL,
+    FALSE_DISCOVERY_RATE REAL_NUMBER  NOT NULL,
+    CONSTRAINT PK_PROBABILITY_FDR_MAPPINGS PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "PROTEIN_REFERENCES"                                         */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE PROTEIN_REFERENCES (
+    ID BIGSERIAL  NOT NULL,
+    ACCESSION_NUMBER ACCESSION_NUMBER  NOT NULL,
+    DESCRIPTION DESCRIPTION,
+    CONSTRAINT PK_PROTEIN_REFERENCES PRIMARY KEY (ID),
+    CONSTRAINT TUC_PROTEIN_REFERENCES_1 UNIQUE (ACCESSION_NUMBER)
+);
+
+CREATE INDEX IDX_PROTEIN_REFERENCES_1 ON PROTEIN_REFERENCES (ACCESSION_NUMBER);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "DATABASES"                                                  */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE DATABASES (
+    ID BIGSERIAL  NOT NULL,
+    NAME_AND_VERSION SHORT_DESCRIPTION  NOT NULL,
+    CONSTRAINT PK_DATABASES PRIMARY KEY (ID),
+    CONSTRAINT TUC_DATABASES_1 UNIQUE (NAME_AND_VERSION)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "MODIFIED_PEPTIDES"                                          */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE MODIFIED_PEPTIDES (
+    ID BIGSERIAL  NOT NULL,
+    PEPT_ID TECH_ID  NOT NULL,
+    NTERM_MASS REAL_NUMBER  NOT NULL,
+    CTERM_MASS REAL_NUMBER  NOT NULL,
+    CONSTRAINT PK_MODIFIED_PEPTIDES PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "SPECTRUM_REFERENCES"                                        */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE SPECTRUM_REFERENCES (
+    ID BIGSERIAL  NOT NULL,
+    PEPT_ID TECH_ID  NOT NULL,
+    REFERENCE SPECTRUM_REFERENCE  NOT NULL,
+    CONSTRAINT PK_SPECTRUM_REFERENCES PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "MODIFICATION_FRACTIONS"                                     */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE MODIFICATION_FRACTIONS (
+    ID BIGSERIAL  NOT NULL,
+    MODI_ID TECH_ID  NOT NULL,
+    SAMP_ID TECH_ID,
+    FRACTION REAL_NUMBER  NOT NULL,
+    CONSTRAINT PK_MODIFICATION_FRACTIONS PRIMARY KEY (ID)
+);
+
+/* ---------------------------------------------------------------------- */
+/* Add table "EVENTS"                                                     */
+/* ---------------------------------------------------------------------- */
+
+CREATE TABLE EVENTS (
+    LAST_SEEN_DELETION_EVENT_ID TECH_ID  NOT NULL
+);
+
+/* ---------------------------------------------------------------------- */
+/* Foreign key constraints                                                */
+/* ---------------------------------------------------------------------- */
+
+ALTER TABLE DATA_SETS ADD CONSTRAINT DA_EX_FK 
+    FOREIGN KEY (EXPE_ID) REFERENCES EXPERIMENTS (ID);
+
+ALTER TABLE DATA_SETS ADD CONSTRAINT DA_SA_FK 
+    FOREIGN KEY (SAMP_ID) REFERENCES SAMPLES (ID);
+
+ALTER TABLE DATA_SETS ADD CONSTRAINT DATABASES_DATA_SETS 
+    FOREIGN KEY (DB_ID) REFERENCES DATABASES (ID);
+
+ALTER TABLE MODIFICATIONS ADD CONSTRAINT MODIFIED_PEPTIDES_MODIFICATIONS 
+    FOREIGN KEY (MOPE_ID) REFERENCES MODIFIED_PEPTIDES (ID) ON DELETE CASCADE;
+
+ALTER TABLE PEPTIDES ADD CONSTRAINT PE_PR_FK 
+    FOREIGN KEY (PROT_ID) REFERENCES PROTEINS (ID) ON DELETE CASCADE;
+
+ALTER TABLE PROTEINS ADD CONSTRAINT DATA_SETS_PROTEINS 
+    FOREIGN KEY (DASE_ID) REFERENCES DATA_SETS (ID) ON DELETE CASCADE;
+
+ALTER TABLE SEQUENCES ADD CONSTRAINT DATABASES_SEQUENCES 
+    FOREIGN KEY (DB_ID) REFERENCES DATABASES (ID);
+
+ALTER TABLE SEQUENCES ADD CONSTRAINT PROTEIN_REFERENCES_SEQUENCES 
+    FOREIGN KEY (PRRE_ID) REFERENCES PROTEIN_REFERENCES (ID);
+
+ALTER TABLE IDENTIFIED_PROTEINS ADD CONSTRAINT PROTEINS_IDENTIFIED_PROTEINS 
+    FOREIGN KEY (PROT_ID) REFERENCES PROTEINS (ID) ON DELETE CASCADE;
+
+ALTER TABLE IDENTIFIED_PROTEINS ADD CONSTRAINT SEQUENCES_IDENTIFIED_PROTEINS 
+    FOREIGN KEY (SEQU_ID) REFERENCES SEQUENCES (ID);
+
+ALTER TABLE ABUNDANCES ADD CONSTRAINT SAMPLES_ABUNDANCES 
+    FOREIGN KEY (SAMP_ID) REFERENCES SAMPLES (ID);
+
+ALTER TABLE ABUNDANCES ADD CONSTRAINT PROTEINS_ABUNDANCES 
+    FOREIGN KEY (PROT_ID) REFERENCES PROTEINS (ID) ON DELETE CASCADE;
+
+ALTER TABLE PROBABILITY_FDR_MAPPINGS ADD CONSTRAINT DATA_SETS_PROBABILITY_FDR_MAPPINGS 
+    FOREIGN KEY (DASE_ID) REFERENCES DATA_SETS (ID) ON DELETE CASCADE;
+
+ALTER TABLE MODIFIED_PEPTIDES ADD CONSTRAINT PEPTIDES_MODIFIED_PEPTIDES 
+    FOREIGN KEY (PEPT_ID) REFERENCES PEPTIDES (ID) ON DELETE CASCADE;
+
+ALTER TABLE SPECTRUM_REFERENCES ADD CONSTRAINT PEPTIDES_SPECTRUM_REFERENCES 
+    FOREIGN KEY (PEPT_ID) REFERENCES PEPTIDES (ID) ON DELETE CASCADE;
+
+ALTER TABLE MODIFICATION_FRACTIONS ADD CONSTRAINT MODIFICATIONS_MODIFICATION_FRACTIONS 
+    FOREIGN KEY (MODI_ID) REFERENCES MODIFICATIONS (ID) ON DELETE CASCADE;
+
+ALTER TABLE MODIFICATION_FRACTIONS ADD CONSTRAINT SAMPLES_MODIFICATION_FRACTIONS 
+    FOREIGN KEY (SAMP_ID) REFERENCES SAMPLES (ID);
diff --git a/rtd_phosphonetx/source/sql/postgresql/migration/migration-003-004.sql b/rtd_phosphonetx/source/sql/postgresql/migration/migration-003-004.sql
new file mode 100644
index 0000000000000000000000000000000000000000..84d3d8a841b803eab39cba657d98ffd029532b8d
--- /dev/null
+++ b/rtd_phosphonetx/source/sql/postgresql/migration/migration-003-004.sql
@@ -0,0 +1,5 @@
+CREATE DOMAIN BOOLEAN_CHAR AS BOOLEAN DEFAULT FALSE;
+
+ALTER TABLE IDENTIFIED_PROTEINS ADD COLUMN IS_PRIMARY BOOLEAN_CHAR NOT NULL;
+
+UPDATE IDENTIFIED_PROTEINS SET IS_PRIMARY = 'T' WHERE ID = ANY(SELECT MIN(ID) FROM IDENTIFIED_PROTEINS GROUP BY PROT_ID);
diff --git a/rtd_phosphonetx/source/sql/postgresql/schema.dez b/rtd_phosphonetx/source/sql/postgresql/schema.dez
index f7c4d30fd3339b751c32db2d62671e1fa0e16fad..b63ef2293f4b087e5763bda67e8e60e05e61521b 100755
--- a/rtd_phosphonetx/source/sql/postgresql/schema.dez
+++ b/rtd_phosphonetx/source/sql/postgresql/schema.dez
@@ -4,14 +4,14 @@
 <VERSION>
 <PROJECTSETTINGS>
 <PROJECTFILENAME>D:\User\felmer\dev-workspace\rtd_phosphonetx\source\sql\postgresql\phosphonetx.dez</PROJECTFILENAME>
-<MODIFIED>2010-03-31</MODIFIED>
+<MODIFIED>2010-05-27</MODIFIED>
 <CREATED>2009-06-29</CREATED>
 <CREATED2></CREATED2>
 <PROJECTNAME></PROJECTNAME>
 <DESCRIPTION></DESCRIPTION>
 <AUTHOR></AUTHOR>
 <COPYRIGHT></COPYRIGHT>
-<LASTGENERATEDFILES>N:\group\cisd\phosphonetx\datamodel\schema.sql;N:\group\cisd\phosphonetx\datamodel\drop.sql;\\d.ethz.ch\dfs\groups\bsse\users\cisd\felmer\Documents\CreateDBLog_201003311.txt</LASTGENERATEDFILES>
+<LASTGENERATEDFILES>N:\group\cisd\phosphonetx\datamodel\schema.sql;N:\group\cisd\phosphonetx\datamodel\drop.sql;\\d.ethz.ch\dfs\groups\bsse\users\cisd\felmer\Documents\CreateDBLog_201005274.txt</LASTGENERATEDFILES>
 </PROJECTSETTINGS>
 <CONNECTIONSETTINGS>
 <SQLFILE>D:\User\felmer\dev-workspace\rtd_phosphonetx\source\sql\postgresql\001\schema-001.sql</SQLFILE>
@@ -20,7 +20,7 @@
 </CONNECTIONSETTINGS>
 <DATADICT>
 <DBID>postgresql8</DBID>
-<LASTID>176</LASTID>
+<LASTID>236</LASTID>
 <DDSETTINGS>
 <PKCONNAMETEMPLATE>PK_%table%</PKCONNAMETEMPLATE>
 <FKCONNAMETEMPLATE>%relname%</FKCONNAMETEMPLATE>
@@ -200,6 +200,30 @@
 <INC>1</INC>
 </DT>
 </DOMAIN>
+<DOMAIN>
+<NAME>BOOLEAN_CHAR</NAME>
+<ID>188</ID>
+<POSNR>0</POSNR>
+<SCHEMA></SCHEMA>
+<DESC></DESC>
+<DT>
+<DTLISTNAME>BOOLEAN</DTLISTNAME>
+<SD>0</SD>
+<INC>1</INC>
+</DT>
+<DEFCON>
+<NAME></NAME>
+<ID>1</ID>
+<POSNR>0</POSNR>
+<SCHEMA></SCHEMA>
+<DESC></DESC>
+<VALUE>FALSE</VALUE>
+<CONLEVEL>0</CONLEVEL>
+<CONTYPE>6</CONTYPE>
+<ATTRIBUTEIDS>
+</ATTRIBUTEIDS>
+</DEFCON>
+</DOMAIN>
 </DOMAINS>
 <ENTITIES>
 <ENT>
@@ -1209,7 +1233,7 @@
 <POSNR>0</POSNR>
 <SCHEMA></SCHEMA>
 <DESC></DESC>
-<ATTRLASTID>6</ATTRLASTID>
+<ATTRLASTID>7</ATTRLASTID>
 <IDXLASTID>1</IDXLASTID>
 <TRGLASTID>1</TRGLASTID>
 <CONLASTID>1</CONLASTID>
@@ -1322,6 +1346,47 @@
 <INC>1</INC>
 </DT>
 </ATTR>
+<ATTR>
+<NAME>IS_PRIMARY</NAME>
+<ID>7</ID>
+<POSNR>0</POSNR>
+<SCHEMA></SCHEMA>
+<DESC></DESC>
+<DOMAINID>188</DOMAINID>
+<DT>
+<DTLISTNAME>BOOLEAN</DTLISTNAME>
+<SD>0</SD>
+<INC>1</INC>
+</DT>
+<NNCON>
+<NAME></NAME>
+<NAMETEMPLATE>NN_%column%</NAMETEMPLATE>
+<ID>1</ID>
+<POSNR>0</POSNR>
+<SCHEMA></SCHEMA>
+<DESC></DESC>
+<VALUE>1</VALUE>
+<CONLEVEL>1</CONLEVEL>
+<CONTYPE>5</CONTYPE>
+<ATTRIBUTEIDS>
+<ATTRIBUTEID>7</ATTRIBUTEID>
+</ATTRIBUTEIDS>
+</NNCON>
+<DEFCON>
+<NAME></NAME>
+<NAMETEMPLATE>DEF_%table%_%column%</NAMETEMPLATE>
+<ID>2</ID>
+<POSNR>0</POSNR>
+<SCHEMA></SCHEMA>
+<DESC></DESC>
+<VALUE>FALSE</VALUE>
+<CONLEVEL>1</CONLEVEL>
+<CONTYPE>6</CONTYPE>
+<ATTRIBUTEIDS>
+<ATTRIBUTEID>7</ATTRIBUTEID>
+</ATTRIBUTEIDS>
+</DEFCON>
+</ATTR>
 </ATTRIBUTES>
 </ENT>
 <ENT>
@@ -3065,7 +3130,7 @@
 <DIAGRAMID>1</DIAGRAMID>
 <W>250</W>
 <H>108</H>
-<L>736</L>
+<L>754</L>
 <T>328</T>
 <BRUSH>0,16777215</BRUSH>
 <PEN>0,1,4,0</PEN>
@@ -3076,8 +3141,8 @@
 <ENTC>
 <ID>47</ID>
 <DIAGRAMID>1</DIAGRAMID>
-<W>167</W>
-<H>93</H>
+<W>184</W>
+<H>108</H>
 <L>518</L>
 <T>328</T>
 <BRUSH>0,16777215</BRUSH>
@@ -3117,7 +3182,7 @@
 <DIAGRAMID>1</DIAGRAMID>
 <W>252</W>
 <H>78</H>
-<L>734</L>
+<L>752</L>
 <T>480</T>
 <BRUSH>0,16777215</BRUSH>
 <PEN>0,1,4,0</PEN>
@@ -3130,7 +3195,7 @@
 <DIAGRAMID>1</DIAGRAMID>
 <W>252</W>
 <H>63</H>
-<L>734</L>
+<L>752</L>
 <T>91</T>
 <BRUSH>0,16777215</BRUSH>
 <PEN>0,1,4,0</PEN>
@@ -3182,7 +3247,7 @@
 <DIAGRAMID>1</DIAGRAMID>
 <W>226</W>
 <H>48</H>
-<L>746</L>
+<L>778</L>
 <T>1</T>
 <BRUSH>0,16777215</BRUSH>
 <PEN>0,1,4,0</PEN>
@@ -3320,7 +3385,7 @@
 <FROMRELATIVEX>5000</FROMRELATIVEX>
 <FROMRELATIVEY>5000</FROMRELATIVEY>
 <TORELATIVEX>5000</TORELATIVEX>
-<TORELATIVEY>4194</TORELATIVEY>
+<TORELATIVEY>3611</TORELATIVEY>
 <POINTS>
 <POINT>
 <X>454</X>
@@ -3346,25 +3411,25 @@
 <FONT>Arial,8,,0,clWindowText,0</FONT>
 <PEN>1,1,4,0</PEN>
 <FROMRELATIVEX>2840</FROMRELATIVEX>
-<FROMRELATIVEY>4259</FROMRELATIVEY>
+<FROMRELATIVEY>5000</FROMRELATIVEY>
 <TORELATIVEX>5000</TORELATIVEX>
-<TORELATIVEY>4946</TORELATIVEY>
+<TORELATIVEY>5000</TORELATIVEY>
 <POINTS>
 <POINT>
-<X>735</X>
-<Y>374</Y>
+<X>753</X>
+<Y>382</Y>
 </POINT>
 <POINT>
 <X>722</X>
-<Y>374</Y>
+<Y>382</Y>
 </POINT>
 <POINT>
 <X>722</X>
-<Y>374</Y>
+<Y>382</Y>
 </POINT>
 <POINT>
-<X>685</X>
-<Y>374</Y>
+<X>702</X>
+<Y>382</Y>
 </POINT>
 </POINTS>
 </RELC>
@@ -3463,19 +3528,19 @@
 <TORELATIVEY>1296</TORELATIVEY>
 <POINTS>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>154</Y>
 </POINT>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>235</Y>
 </POINT>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>235</Y>
 </POINT>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>327</Y>
 </POINT>
 </POINTS>
@@ -3491,19 +3556,19 @@
 <TORELATIVEY>3611</TORELATIVEY>
 <POINTS>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>479</Y>
 </POINT>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>447</Y>
 </POINT>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>447</Y>
 </POINT>
 <POINT>
-<X>861</X>
+<X>879</X>
 <Y>436</Y>
 </POINT>
 </POINTS>
@@ -3519,7 +3584,7 @@
 <TORELATIVEY>9167</TORELATIVEY>
 <POINTS>
 <POINT>
-<X>733</X>
+<X>751</X>
 <Y>100</Y>
 </POINT>
 <POINT>
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java
index 8a06e1477c25d1201f3a1c9e40e195b9e774d10d..71165afb4fc4d69657a9b0341b2ac3e633b03f11 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java
@@ -211,9 +211,9 @@ public class ResultDataSetUploaderTest extends AssertJUnit
         double probability = 1.0;
         prepareForCreatingProtein(probability);
         ProteinAnnotation a1 = createAnnotation(UNIPROT_ID1, PROTEIN_NAME1, SEQUENCE1);
-        prepareForCreatingIdentifiedProtein(a1, false);
+        prepareForCreatingIdentifiedProtein(a1, false, true);
         ProteinAnnotation a2 = createAnnotation(UNIPROT_ID2, PROTEIN_NAME2, SEQUENCE2);
-        prepareForCreatingIdentifiedProtein(a2, true);
+        prepareForCreatingIdentifiedProtein(a2, true, false);
 
         ProteinSummary summary = createProteinSummary();
         Protein p1 = createProtein(probability, a1, a2);
@@ -232,7 +232,7 @@ public class ResultDataSetUploaderTest extends AssertJUnit
         ProteinSummary summary = createProteinSummary();
         prepareForCreatingProtein(probability);
         ProteinAnnotation a1 = createAnnotation(UNIPROT_ID1, PROTEIN_NAME1, SEQUENCE1);
-        prepareForCreatingIdentifiedProtein(a1, false);
+        prepareForCreatingIdentifiedProtein(a1, false, true);
         Protein p1 = createProtein(probability, a1);
         p1.setName(PROTEIN_NAME1);
         p1.getParameters().add(createAbundance(CELL_LYSATE1, 2.5));
@@ -263,7 +263,7 @@ public class ResultDataSetUploaderTest extends AssertJUnit
         prepareForCreatingProtein(probability);
         summary.getProteinGroups().add(createProteinGroup(p1));
         ProteinAnnotation a2 = createAnnotation(UNIPROT_ID2, PROTEIN_NAME2, SEQUENCE2);
-        prepareForCreatingIdentifiedProtein(a2, false);
+        prepareForCreatingIdentifiedProtein(a2, false, true);
         Protein p2 = createProtein(probability, a2);
         p2.setName(PROTEIN_NAME1);
         p2.getParameters().add(createAbundance(CELL_LYSATE1, 42.5));
@@ -345,7 +345,7 @@ public class ResultDataSetUploaderTest extends AssertJUnit
         double probability = 1.0;
         prepareForCreatingProtein(probability);
         ProteinAnnotation a1 = createAnnotation(UNIPROT_ID1, PROTEIN_NAME1, SEQUENCE1);
-        prepareForCreatingIdentifiedProtein(a1, false);
+        prepareForCreatingIdentifiedProtein(a1, false, true);
 
         ProteinSummary summary = createProteinSummary();
         Protein p1 = createProtein(probability, a1);
@@ -374,7 +374,7 @@ public class ResultDataSetUploaderTest extends AssertJUnit
         double probability = 1.0;
         prepareForCreatingProtein(probability);
         ProteinAnnotation a1 = createAnnotation(UNIPROT_ID1, PROTEIN_NAME1, SEQUENCE1);
-        prepareForCreatingIdentifiedProtein(a1, false);
+        prepareForCreatingIdentifiedProtein(a1, false, true);
 
         ProteinSummary summary = createProteinSummary();
         Protein p1 = createProtein(probability, a1);
@@ -468,7 +468,7 @@ public class ResultDataSetUploaderTest extends AssertJUnit
     }
 
     private void prepareForCreatingIdentifiedProtein(ProteinAnnotation annotation,
-            final boolean referenceExist)
+            final boolean referenceExist, final boolean primary)
     {
         ProteinDescription proteinDescription = new ProteinDescription(annotation.getDescription());
         final String uniprotID = proteinDescription.getAccessionNumber();
@@ -511,7 +511,7 @@ public class ResultDataSetUploaderTest extends AssertJUnit
                         will(returnValue(Arrays.asList(seq)));
                     }
 
-                    one(dao).createIdentifiedProtein(PROTEIN1_ID, SEQUENCE_ID, 0);
+                    one(dao).createIdentifiedProtein(PROTEIN1_ID, SEQUENCE_ID, 0, primary);
                 }
             });
     }