diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..12f69936a9c46a4d9b667b7d2673224167ae444b
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+gpds
\ No newline at end of file
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java b/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
index 45544b9610b9ad80b5f14a44afdba5965c310d40..900f2e5b4d2fe022fceb112c287bf55965bf91ab 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/api/brapi/v1/GermplasmController.java
@@ -1,10 +1,7 @@
 package fr.inra.urgi.gpds.api.brapi.v1;
 
 import fr.inra.urgi.gpds.api.NotFoundException;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasm;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmAttributeValueList;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiPedigree;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiProgeny;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.*;
 import fr.inra.urgi.gpds.domain.brapi.v1.response.BrapiListResponse;
 import fr.inra.urgi.gpds.domain.brapi.v1.response.BrapiResponse;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmAttributeCriteria;
@@ -58,6 +55,27 @@ public class GermplasmController {
         return ApiResponseFactory.createSingleObjectResponse(germplasm, null);
     }
 
+
+
+
+    /**
+     * @link https://brapi.docs.apiary.io/#reference/germplasm/germplasm/get-germplasm-mcpd-by-germplasmdbid
+     */
+    @ApiOperation("Get germplasm mcpd by id")
+    @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/mcpd")
+    public BrapiResponse<BrapiGermplasmMcpd> getGermplasmMcpd(@PathVariable String germplasmDbId) {
+        LOGGER.debug("germplasmDbId = " + germplasmDbId);
+        BrapiGermplasmMcpd germplasm = germplasmService.getMcpdById(germplasmDbId);
+        if (germplasm == null) {
+            throw new NotFoundException("Germplasm not found for id '" + germplasmDbId + "'");
+        }
+        return ApiResponseFactory.createSingleObjectResponse(germplasm, null);
+    }
+
+
+
+
+
     @ApiOperation("List germplasm")
     @GetMapping("/brapi/v1/germplasm")
     public BrapiListResponse<? extends BrapiGermplasm> listGermplasm(
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java b/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java
index 41e14ce708c47e7ab02907706602de2332cd82ed..2e73d72fa44d51a77514a392972f001da5266469 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/api/gnpis/v1/GnpISJSONViewHandler.java
@@ -23,7 +23,7 @@ public class GnpISJSONViewHandler extends AbstractMappingJacksonResponseBodyAdvi
         ServerHttpRequest req,
         ServerHttpResponse response
     ) {
-        // Default: display only GnpIS API Fields (BrAPI + GnpIS fileds)
+        // Default: display only GnpIS API Fields (BrAPI + GnpIS fields)
         bodyContainer.setSerializationView(JSONView.GnpISAPI.class);
     }
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..23f9e8cc2c4ee4f2458a2f2806701eab3d3287b0
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java
@@ -0,0 +1,25 @@
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.data.germplasm.ExtendedInstitute;
+import fr.inra.urgi.gpds.domain.data.germplasm.InstituteVO;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface BrapiGermplasmCollectingInfo extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<? extends BrapiGermplasmInstitute> getCollectingInstitutes();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCollectingMissionIdentifier();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCollectingNumber();
+
+    @JsonView(JSONView.BrapiFields.class)
+    BrapiGermplasmCollectingSite getCollectingSite();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java
new file mode 100644
index 0000000000000000000000000000000000000000..11f9f78fe50b10f10775e5a09178aaffbca817d9
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java
@@ -0,0 +1,36 @@
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface BrapiGermplasmCollectingSite extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCoordinateUncertainty();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getElevation();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getGeoreferencingMethod();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLatitudeDecimal();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLatitudeDegrees();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLocationDescription();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLongitudeDecimal();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getLongitudeDegrees();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getSpatialReferenceSystem();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..dea76ad48f04fb36ee44c675d8b49ed18ae45826
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java
@@ -0,0 +1,17 @@
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.data.germplasm.ExtendedInstitute;
+
+import java.io.Serializable;
+
+public interface BrapiGermplasmDonorInfo extends Serializable {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getDonorAccessionNumber();
+
+    @JsonView(JSONView.BrapiFields.class)
+    BrapiGermplasmInstitute getDonorInstitute();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmInstitute.java
new file mode 100644
index 0000000000000000000000000000000000000000..57664b562e8d6c8894f3e2a322185cbb10f8fabc
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmInstitute.java
@@ -0,0 +1,15 @@
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+/**
+ * @author gcornut
+ */
+public interface BrapiGermplasmInstitute {
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteName();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteCode();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmMcpd.java
new file mode 100644
index 0000000000000000000000000000000000000000..f84a9dc61706d382acb5b76930ce5def269697ba
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/brapi/v1/data/BrapiGermplasmMcpd.java
@@ -0,0 +1,84 @@
+package fr.inra.urgi.gpds.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.data.germplasm.DonorInfoVO;
+import fr.inra.urgi.gpds.domain.data.germplasm.InstituteVO;
+
+import java.util.List;
+
+/**
+ * @author gcornut
+ */
+public interface BrapiGermplasmMcpd {
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getGermplasmDbId();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getGermplasmPUI();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getAccessionNumber();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<String> getAccessionNames();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<String> getAlternateIDs();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCropName();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getGenus();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getSpecies();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getSpeciesAuthority();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getSubtaxon();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getSubtaxonAuthority();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getAncestralData();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getBiologicalStatusOfAccessionCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getMlsStatus();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getCountryOfOriginCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getInstituteCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    BrapiGermplasmCollectingInfo getCollectingInfo();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getAcquisitionDate();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getAcquisitionSourceCode();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<DonorInfoVO> getDonorInfo();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<? extends BrapiGermplasmInstitute> getBreedingInstitutes();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<? extends BrapiGermplasmInstitute> getSafetyDuplicateInstitutes();
+
+    @JsonView(JSONView.BrapiFields.class)
+    List<String> getStorageTypeCodes();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java
index 1bdc77a9dc4e852c527f44e110692af73805b44a..e31e9d2bd9fb4357fe49a9748b91ccb253a73748 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/GnpISInternal.java
@@ -13,12 +13,6 @@ import java.util.List;
  */
 public interface GnpISInternal extends Serializable {
 
-    /**
-     * List of species group the VO belongs to
-     */
-    @JsonView(JSONView.Internal.class)
-    List<Long> getSpeciesGroup();
-
     /**
      * Restricted group DB identifier from which the VO belong
      */
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java
index 010ebf16c32c9afeedb2f410945211732b624ecf..53711063c7ccac8fcd190a4965c0230f4d5578fb 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/LocationVO.java
@@ -212,15 +212,6 @@ public class LocationVO implements GnpISInternal, BrapiLocation, HasURI, HasURL,
         this.additionalInfo = additionalInfo;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java
index d96141e5b5306e57c9613a293499eb3efe69ff8e..9b03d8e2c750399144c28db2e498088dd99eefd4 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/ProgramVO.java
@@ -123,15 +123,6 @@ public class ProgramVO implements GnpISInternal, BrapiProgram, HasURI, HasURL, I
         this.programDbId = programDbId;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java
index b2b39d4cd72590d48231830735ba4aa441dd1ce6..49d118909006eac4b7c243c885a00f62b5aff47c 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/TrialVO.java
@@ -198,15 +198,6 @@ public class TrialVO implements GnpISInternal, BrapiTrial, HasURI, HasURL, Inclu
         this.additionalInfo = additionalInfo;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java
index 463f4ce2b56aa63b4da2e22fee75c3356f226373..a05c5c6c7e54ef85770b880380b2f47346496ef5 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPop.java
@@ -7,18 +7,18 @@ import fr.inra.urgi.gpds.domain.JSONView;
  * @author gcornut
  */
 public interface CollPop {
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     Long getId();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     String getName();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     String getType();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     PuiNameValue getGermplasmRef();
 
-    @JsonView(JSONView.GnpISFields.class)
+    @JsonView(JSONView.BrapiFields.class)
     Integer getGermplasmCount();
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java
index 9b87927dba76fa32e7f4ab5e7c6ceeb8fc7910f3..f9b79f320d4868d3b1831b11902bbb24f006abb4 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollPopVO.java
@@ -12,7 +12,7 @@ public class CollPopVO implements Serializable, CollPop {
     private Long id;
     private String name;
     private String type;
-    private SimpleVO germplasmRef;
+    private PuiNameValueVO germplasmRef;
     private Integer germplasmCount;
 
     @Override
@@ -43,11 +43,11 @@ public class CollPopVO implements Serializable, CollPop {
     }
 
     @Override
-    public SimpleVO getGermplasmRef() {
+    public PuiNameValueVO getGermplasmRef() {
         return germplasmRef;
     }
 
-    public void setGermplasmRef(SimpleVO germplasmRef) {
+    public void setGermplasmRef(PuiNameValueVO germplasmRef) {
         this.germplasmRef = germplasmRef;
     }
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..20a4cab28025e5d0c6924107f89afa2d3e09c34e
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingInfoVO.java
@@ -0,0 +1,75 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingInfo;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class CollectingInfoVO implements BrapiGermplasmCollectingInfo, ExtendedCollectingInfo, Serializable {
+
+    @JsonDeserialize(contentAs = InstituteVO.class)
+    private List<InstituteVO> collectingInstitutes;
+
+    private String collectingMissionIdentifier;
+    private String collectingNumber;
+    private String materialType;
+    private String collectors;
+
+    @JsonDeserialize(as = CollectingSiteVO.class)
+    private CollectingSiteVO collectingSite;
+
+    @Override
+    public List<InstituteVO> getCollectingInstitutes() {
+        return collectingInstitutes;
+    }
+
+    public void setCollectingInstitutes(List<InstituteVO> collectingInstitutes) {
+        this.collectingInstitutes = collectingInstitutes;
+    }
+
+    @Override
+    public String getCollectingMissionIdentifier() {
+        return collectingMissionIdentifier;
+    }
+
+    public void setCollectingMissionIdentifier(String collectingMissionIdentifier) {
+        this.collectingMissionIdentifier = collectingMissionIdentifier;
+    }
+
+    @Override
+    public String getCollectingNumber() {
+        return collectingNumber;
+    }
+
+    public void setCollectingNumber(String collectingNumber) {
+        this.collectingNumber = collectingNumber;
+    }
+
+    public String getMaterialType() {
+        return materialType;
+    }
+
+    public void setMaterialType(String materialType) {
+        this.materialType = materialType;
+    }
+
+    public String getCollectors() {
+        return collectors;
+    }
+
+    public void setCollectors(String collectors) {
+        this.collectors = collectors;
+    }
+
+    @Override
+    public CollectingSiteVO getCollectingSite() {
+        return collectingSite;
+    }
+
+    public void setCollectingSite(CollectingSiteVO collectingSite) {
+        this.collectingSite = collectingSite;
+    }
+
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc8b52483e4bb24b6e2fc92d65c443b4ac5253ee
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/CollectingSiteVO.java
@@ -0,0 +1,127 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingSite;
+
+public class CollectingSiteVO implements BrapiGermplasmCollectingSite, ExtendedCollectingSite {
+
+    private String locationDbId;
+    private String siteName;
+    private String siteType;
+    private String coordinateUncertainty;
+    private String elevation;
+    private String georeferencingMethod;
+    private String latitudeDecimal;
+    private String latitudeDegrees;
+    private String locationDescription;
+    private String longitudeDecimal;
+    private String longitudeDegrees;
+    private String spatialReferenceSystem;
+
+    @Override
+    public String getLocationDbId() {
+        return locationDbId;
+    }
+
+    public void setLocationDbId(String locationDbId) {
+        this.locationDbId = locationDbId;
+    }
+
+    public String getSiteName() {
+        return siteName;
+    }
+
+    public void setSiteName(String siteName) {
+        this.siteName = siteName;
+    }
+
+
+    public String getSiteType() {
+        return siteType;
+    }
+
+    public void setSiteType(String siteType) {
+        this.siteType = siteType;
+    }
+
+    @Override
+    public String getCoordinateUncertainty() {
+        return coordinateUncertainty;
+    }
+
+    @Override
+    public String getElevation() {
+        return elevation;
+    }
+
+    @Override
+    public String getGeoreferencingMethod() {
+        return georeferencingMethod;
+    }
+
+    @Override
+    public String getLatitudeDecimal() {
+        return latitudeDecimal;
+    }
+
+    @Override
+    public String getLatitudeDegrees() {
+        return latitudeDegrees;
+    }
+
+    @Override
+    public String getLocationDescription() {
+        return locationDescription;
+    }
+
+    @Override
+    public String getLongitudeDecimal() {
+        return longitudeDecimal;
+    }
+
+    @Override
+    public String getLongitudeDegrees() {
+        return longitudeDegrees;
+    }
+
+    @Override
+    public String getSpatialReferenceSystem() {
+        return spatialReferenceSystem;
+    }
+
+
+    public void setCoordinateUncertainty(String coordinateUncertainty) {
+        this.coordinateUncertainty = coordinateUncertainty;
+    }
+
+    public void setElevation(String elevation) {
+        this.elevation = elevation;
+    }
+
+    public void setGeoreferencingMethod(String georeferencingMethod) {
+        this.georeferencingMethod = georeferencingMethod;
+    }
+
+    public void setLatitudeDecimal(String latitudeDecimal) {
+        this.latitudeDecimal = latitudeDecimal;
+    }
+
+    public void setLatitudeDegrees(String latitudeDegrees) {
+        this.latitudeDegrees = latitudeDegrees;
+    }
+
+    public void setLocationDescription(String locationDescription) {
+        this.locationDescription = locationDescription;
+    }
+
+    public void setLongitudeDecimal(String longitudeDecimal) {
+        this.longitudeDecimal = longitudeDecimal;
+    }
+
+    public void setLongitudeDegrees(String longitudeDegrees) {
+        this.longitudeDegrees = longitudeDegrees;
+    }
+
+    public void setSpatialReferenceSystem(String spatialReferenceSystem) {
+        this.spatialReferenceSystem = spatialReferenceSystem;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6fdee08564a19c39bb944c8382cda2980db76be5
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfo.java
@@ -0,0 +1,18 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+
+import java.io.Serializable;
+
+public interface DistributorInfo extends Serializable {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getAccessionNumber();
+
+    @JsonView(JSONView.GnpISFields.class)
+    ExtendedInstitute getInstitute();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getDistributionStatus();
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfoVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..5dabd5e06839bb41114bbd3e163a66c2f714e93b
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DistributorInfoVO.java
@@ -0,0 +1,35 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+public class DistributorInfoVO implements DistributorInfo {
+
+    private String accessionNumber;
+    private InstituteVO institute;
+    private String distributionStatus;
+
+    public String getAccessionNumber() {
+        return accessionNumber;
+    }
+
+    public void setAccessionNumber(String accessionNumber) {
+        this.accessionNumber = accessionNumber;
+    }
+
+    public InstituteVO getInstitute() {
+        return institute;
+    }
+
+    public void setInstitute(InstituteVO institute) {
+        this.institute = institute;
+    }
+
+    public String getDistributionStatus() {
+        return distributionStatus;
+    }
+
+    public void setDistributionStatus(String distributionStatus) {
+        this.distributionStatus = distributionStatus;
+    }
+
+
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..0254a71404eb2345a521a1df3734defdd064d0d8
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorInfoVO.java
@@ -0,0 +1,36 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonorInfo;
+
+public class DonorInfoVO implements BrapiGermplasmDonorInfo, ExtendedDonorInfo {
+
+    private String donorAccessionNumber;
+    private InstituteVO donorInstitute;
+    private String donationDate;
+
+    @Override
+    public String getDonorAccessionNumber() {
+        return donorAccessionNumber;
+    }
+
+    @Override
+    public InstituteVO getDonorInstitute() {
+        return donorInstitute;
+    }
+
+    public void setDonorAccessionNumber(String donorAccessionNumber) {
+        this.donorAccessionNumber = donorAccessionNumber;
+    }
+
+    public void setDonorInstitute(InstituteVO donorInstitute) {
+        this.donorInstitute = donorInstitute;
+    }
+
+    public String getDonationDate() {
+        return donationDate;
+    }
+
+    public void setDonationDate(String donationDate) {
+        this.donationDate = donationDate;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java
index 8cd5d7cd7b6f63b68ceaabba0f867f545ccab398..9f09793d7cc55421dc70e33e578072156d711c93 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/DonorVO.java
@@ -4,15 +4,13 @@ import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonor;
 
 import java.io.Serializable;
 
-public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor {
+public class DonorVO implements Serializable, BrapiGermplasmDonor {
 
     private static final long serialVersionUID = 7976964107440923573L;
 
     private String donorGermplasmPUI;
     private String donorAccessionNumber;
     private String donorInstituteCode;
-    private Integer donationDate;
-    private InstituteVO donorInstitute;
 
     @Override
     public String getDonorGermplasmPUI() {
@@ -41,22 +39,4 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor
         this.donorInstituteCode = donorInstituteCode;
     }
 
-    @Override
-    public InstituteVO getDonorInstitute() {
-        return donorInstitute;
-    }
-
-    public void setDonorInstitute(InstituteVO donorInstitute) {
-        this.donorInstitute = donorInstitute;
-    }
-
-    @Override
-    public Integer getDonationDate() {
-        return donationDate;
-    }
-
-    public void setDonationDate(Integer donationDate) {
-        this.donationDate = donationDate;
-    }
-
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..57240ac201ea1fb4a159104e6bf8f09baa69b7fe
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingInfo.java
@@ -0,0 +1,18 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingInfo;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface ExtendedCollectingInfo extends Serializable, BrapiGermplasmCollectingInfo {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getMaterialType();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getCollectors();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingSite.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingSite.java
new file mode 100644
index 0000000000000000000000000000000000000000..affd74720f13bfb6dffa3669476d04efa6a2cb08
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedCollectingSite.java
@@ -0,0 +1,19 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmCollectingSite;
+
+import java.io.Serializable;
+
+public interface ExtendedCollectingSite extends Serializable, BrapiGermplasmCollectingSite {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getLocationDbId();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getSiteName();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getSiteType() ;
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonor.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonorInfo.java
similarity index 50%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonor.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonorInfo.java
index a18dd7e4ab56f9f38e0d72bfeca5535e3be4bae2..968070d6ffe9da57077f8672623153174f4a365e 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonor.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedDonorInfo.java
@@ -2,18 +2,13 @@ package fr.inra.urgi.gpds.domain.data.germplasm;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
-import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonor;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmDonorInfo;
 
-/**
- * Extends the BrAPI germplasm with GnpIS fields
- *
- * @author gcornut
- */
-public interface ExtendedDonor extends BrapiGermplasmDonor {
+import java.io.Serializable;
 
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getDonorInstitute();
+public interface ExtendedDonorInfo extends Serializable, BrapiGermplasmDonorInfo {
 
     @JsonView(JSONView.GnpISFields.class)
-    Integer getDonationDate();
+    String getDonationDate();
+
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java
index 254e0c333d87a67d87be9286a7dac189411321a4..a0874d779d12bd02ad24ac4e81bfd779f6680588 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasm.java
@@ -23,51 +23,18 @@ public interface ExtendedGermplasm extends BrapiGermplasm, GnpISInternal {
     @JsonView(JSONView.GnpISFields.class)
     String getTaxonComment();
 
-    @JsonView(JSONView.GnpISFields.class)
-    String getGeneticNature();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getComment();
-
     @JsonView(JSONView.GnpISFields.class)
     Photo getPhoto();
 
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getHoldingInstitute();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getHoldingGenbank();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getPresenceStatus();
-
     @JsonView(JSONView.GnpISFields.class)
     Genealogy getGenealogy();
 
     @JsonView(JSONView.GnpISFields.class)
     List<? extends Genealogy> getChildren();
 
-    @JsonView(JSONView.GnpISFields.class)
-    List<? extends PuiNameValue> getDescriptors();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Site getOriginSite();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Site getCollectingSite();
-
     @JsonView(JSONView.GnpISFields.class)
     List<? extends Site> getEvaluationSites();
 
-    @JsonView(JSONView.GnpISFields.class)
-    GermplasmInstitute getCollector();
-
-    @JsonView(JSONView.GnpISFields.class)
-    GermplasmInstitute getBreeder();
-
-    @JsonView(JSONView.GnpISFields.class)
-    List<? extends GermplasmInstitute> getDistributors();
-
     @JsonView(JSONView.GnpISFields.class)
     List<? extends CollPop> getPanel();
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasmMcpd.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5d3e112bcfa6442a82a9277c39e7fe9bca2f026
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedGermplasmMcpd.java
@@ -0,0 +1,54 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasm;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmMcpd;
+import fr.inra.urgi.gpds.domain.data.GnpISInternal;
+
+import java.util.List;
+
+/**
+ * Extends the BrAPI germplasm with GnpIS fields
+ *
+ * @author gcornut
+ */
+public interface ExtendedGermplasmMcpd extends BrapiGermplasmMcpd, GnpISInternal {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getGeneticNature();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getPresenceStatus();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getRemarks();
+
+    @JsonView(JSONView.GnpISFields.class)
+    Site getOriginSite();
+
+    @JsonView(JSONView.GnpISFields.class)
+    ExtendedInstitute getHoldingInstitute();
+
+    @JsonView(JSONView.GnpISFields.class)
+    ExtendedInstitute getHoldingGenbank();
+
+    @JsonView(JSONView.GnpISFields.class)
+    List<? extends DistributorInfo> getDistributorInfo();
+
+    @JsonView(JSONView.GnpISFields.class)
+    List<? extends ExtendedInstitute> getBreedingInstitutes();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getBreederAccessionNumber();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getBreedingCreationYear();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getCatalogRegistrationYear();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getCatalogDeregistrationYear();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Institute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedInstitute.java
similarity index 76%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Institute.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedInstitute.java
index 0dccd21f3994556d8ef78ae2aa46bc8075144e90..cc2a7a13f9ffd5c568385d6be8e516bb68ab5d9b 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Institute.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/ExtendedInstitute.java
@@ -2,17 +2,12 @@ package fr.inra.urgi.gpds.domain.data.germplasm;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import fr.inra.urgi.gpds.domain.JSONView;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmInstitute;
 
 /**
  * @author gcornut
  */
-public interface Institute {
-    @JsonView(JSONView.GnpISFields.class)
-    String getInstituteName();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getInstituteCode();
-
+public interface ExtendedInstitute extends BrapiGermplasmInstitute {
     @JsonView(JSONView.GnpISFields.class)
     String getAcronym();
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java
index 34c11b708ec2e0b1446b9fb163f6eb4aa3c08e7b..6a9d5ec85391e8684545485770133c86f42259f8 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Genealogy.java
@@ -37,5 +37,5 @@ public interface Genealogy {
     String getSecondParentType();
 
     @JsonView(JSONView.GnpISFields.class)
-    List<SimpleVO> getSibblings();
+    List<PuiNameValueVO> getSibblings();
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java
index 492157c70a72b5c117c4e52ac2b150bdb520d3e7..cbcf4f4ed2d4aec9de2de99ca0af686048f3f300 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GenealogyVO.java
@@ -21,7 +21,7 @@ public class GenealogyVO implements java.io.Serializable, Genealogy {
     private String secondParentPUI;
     private String secondParentType;
 
-    private List<SimpleVO> sibblings; // puid + name
+    private List<PuiNameValueVO> sibblings; // puid + name
 
     @Override
     public String getCrossingPlan() {
@@ -105,11 +105,11 @@ public class GenealogyVO implements java.io.Serializable, Genealogy {
     }
 
     @Override
-    public List<SimpleVO> getSibblings() {
+    public List<PuiNameValueVO> getSibblings() {
         return sibblings;
     }
 
-    public void setSibblings(List<SimpleVO> sibblings) {
+    public void setSibblings(List<PuiNameValueVO> sibblings) {
         this.sibblings = sibblings;
     }
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java
index a4d153cbe4e3daa04ef34d1120eac0324454c75e..2c8f4da16ae26f7d16e56d0bc239e47f676c23a7 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmAttributeValueListVO.java
@@ -43,15 +43,6 @@ public class GermplasmAttributeValueListVO implements BrapiGermplasmAttributeVal
         this.data = data;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstitute.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstitute.java
deleted file mode 100644
index a90b324ab014c33344b3c8392fb9bc984eeb9919..0000000000000000000000000000000000000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstitute.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import com.fasterxml.jackson.annotation.JsonView;
-import fr.inra.urgi.gpds.domain.JSONView;
-
-/**
- * @author gcornut
- */
-public interface GermplasmInstitute {
-    @JsonView(JSONView.GnpISFields.class)
-    Institute getInstitute();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getGermplasmPUI();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getAccessionNumber();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Integer getAccessionCreationDate();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getMaterialType();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getCollectors();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Integer getRegistrationYear();
-
-    @JsonView(JSONView.GnpISFields.class)
-    Integer getDeregistrationYear();
-
-    @JsonView(JSONView.GnpISFields.class)
-    String getDistributionStatus();
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstituteVO.java
deleted file mode 100644
index e8a9d5f80b48af014355acabb2d3c82ab22c09ba..0000000000000000000000000000000000000000
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmInstituteVO.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package fr.inra.urgi.gpds.domain.data.germplasm;
-
-import java.io.Serializable;
-
-/**
- * @author C. Michotey
- */
-public class GermplasmInstituteVO implements Serializable, GermplasmInstitute {
-
-    private static final long serialVersionUID = 7976964107440923573L;
-
-    private InstituteVO institute;
-    private String germplasmPUI;
-    private String accessionNumber;
-    private Integer accessionCreationDate;
-    private String materialType;
-    private String collectors;
-    private Integer registrationYear;
-    private Integer deregistrationYear;
-    private String distributionStatus;
-
-    @Override
-    public InstituteVO getInstitute() {
-        return institute;
-    }
-
-    public void setInstitute(InstituteVO institute) {
-        this.institute = institute;
-    }
-
-    @Override
-    public String getGermplasmPUI() {
-        return germplasmPUI;
-    }
-
-    public void setGermplasmPUI(String germplasmPUI) {
-        this.germplasmPUI = germplasmPUI;
-    }
-
-    @Override
-    public String getAccessionNumber() {
-        return accessionNumber;
-    }
-
-    public void setAccessionNumber(String accessionNumber) {
-        this.accessionNumber = accessionNumber;
-    }
-
-    @Override
-    public Integer getAccessionCreationDate() {
-        return accessionCreationDate;
-    }
-
-    public void setAccessionCreationDate(Integer accessionCreationDate) {
-        this.accessionCreationDate = accessionCreationDate;
-    }
-
-    @Override
-    public String getMaterialType() {
-        return materialType;
-    }
-
-    public void setMaterialType(String materialType) {
-        this.materialType = materialType;
-    }
-
-    @Override
-    public String getCollectors() {
-        return collectors;
-    }
-
-    public void setCollectors(String collectors) {
-        this.collectors = collectors;
-    }
-
-    @Override
-    public Integer getRegistrationYear() {
-        return registrationYear;
-    }
-
-    public void setRegistrationYear(Integer registrationYear) {
-        this.registrationYear = registrationYear;
-    }
-
-    @Override
-    public Integer getDeregistrationYear() {
-        return deregistrationYear;
-    }
-
-    public void setDeregistrationYear(Integer deregistrationYear) {
-        this.deregistrationYear = deregistrationYear;
-    }
-
-    @Override
-    public String getDistributionStatus() {
-        return distributionStatus;
-    }
-
-    public void setDistributionStatus(String distributionStatus) {
-        this.distributionStatus = distributionStatus;
-    }
-
-}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f07e42128e8161747214e9be4735634be33ca2c
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmMcpdVO.java
@@ -0,0 +1,342 @@
+package fr.inra.urgi.gpds.domain.data.germplasm;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmMcpd;
+import fr.inra.urgi.gpds.elasticsearch.document.annotation.Document;
+import fr.inra.urgi.gpds.elasticsearch.document.annotation.Id;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Document(type = "germplasm-mcpd")
+public class GermplasmMcpdVO implements Serializable, BrapiGermplasmMcpd, ExtendedGermplasmMcpd {
+
+    private Long groupId;
+
+    @Id
+    private String germplasmDbId;
+    private String germplasmPUI;
+    private String accessionNumber;
+    private List<String> alternateIDs;
+    private List<String> accessionNames;
+
+    private String cropName;
+    private String genus;
+    private String species;
+    private String speciesAuthority;
+    private String subtaxon;
+    private String subtaxonAuthority;
+
+    private String ancestralData;
+    private String biologicalStatusOfAccessionCode;
+    private String mlsStatus;
+    private String geneticNature;
+    private String presenceStatus;
+    private String remarks;
+
+    private String countryOfOriginCode;
+    private SiteVO originSite;
+
+    private String instituteCode;
+    private InstituteVO holdingInstitute;
+    private InstituteVO holdingGenbank;
+
+    private CollectingInfoVO collectingInfo;
+    private String acquisitionDate;
+    private String acquisitionSourceCode;
+
+    private List<DonorInfoVO> donorInfo;
+    private List<DistributorInfoVO> distributorInfo;
+
+
+    @JsonDeserialize(contentAs = InstituteVO.class)
+    private List<InstituteVO> breedingInstitutes;
+    private String breederAccessionNumber;
+    private String breedingCreationYear;
+    private String catalogRegistrationYear;
+    private String catalogDeregistrationYear;
+
+    @JsonDeserialize(contentAs = InstituteVO.class)
+    private List<InstituteVO> safetyDuplicateInstitutes;
+    private List<String> storageTypeCodes;
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getGermplasmDbId() {
+        return germplasmDbId;
+    }
+
+    public void setGermplasmDbId(String germplasmDbId) {
+        this.germplasmDbId = germplasmDbId;
+    }
+
+    public String getGermplasmPUI() {
+        return germplasmPUI;
+    }
+
+    public void setGermplasmPUI(String germplasmPUI) {
+        this.germplasmPUI = germplasmPUI;
+    }
+
+    public String getAccessionNumber() {
+        return accessionNumber;
+    }
+
+    public void setAccessionNumber(String accessionNumber) {
+        this.accessionNumber = accessionNumber;
+    }
+
+    public List<String> getAlternateIDs() {
+        return alternateIDs;
+    }
+
+    public void setAlternateIDs(List<String> alternateIDs) {
+        this.alternateIDs = alternateIDs;
+    }
+
+    public List<String> getAccessionNames() {
+        return accessionNames;
+    }
+
+    public void setAccessionNames(List<String> accessionNames) {
+        this.accessionNames = accessionNames;
+    }
+
+    public String getCropName() {
+        return cropName;
+    }
+
+    public void setCropName(String cropName) {
+        this.cropName = cropName;
+    }
+
+    public String getGenus() {
+        return genus;
+    }
+
+    public void setGenus(String genus) {
+        this.genus = genus;
+    }
+
+    public String getSpecies() {
+        return species;
+    }
+
+    public void setSpecies(String species) {
+        this.species = species;
+    }
+
+    public String getSpeciesAuthority() {
+        return speciesAuthority;
+    }
+
+    public void setSpeciesAuthority(String speciesAuthority) {
+        this.speciesAuthority = speciesAuthority;
+    }
+
+    public String getSubtaxon() {
+        return subtaxon;
+    }
+
+    public void setSubtaxon(String subtaxon) {
+        this.subtaxon = subtaxon;
+    }
+
+    public String getSubtaxonAuthority() {
+        return subtaxonAuthority;
+    }
+
+    public void setSubtaxonAuthority(String subtaxonAuthority) {
+        this.subtaxonAuthority = subtaxonAuthority;
+    }
+
+    public String getAncestralData() {
+        return ancestralData;
+    }
+
+    public void setAncestralData(String ancestralData) {
+        this.ancestralData = ancestralData;
+    }
+
+    public String getBiologicalStatusOfAccessionCode() {
+        return biologicalStatusOfAccessionCode;
+    }
+
+    public void setBiologicalStatusOfAccessionCode(String biologicalStatusOfAccessionCode) {
+        this.biologicalStatusOfAccessionCode = biologicalStatusOfAccessionCode;
+    }
+
+    public String getMlsStatus() {
+        return mlsStatus;
+    }
+
+    public void setMlsStatus(String mlsStatus) {
+        this.mlsStatus = mlsStatus;
+    }
+
+    public String getGeneticNature() {
+        return geneticNature;
+    }
+
+    public void setGeneticNature(String geneticNature) {
+        this.geneticNature = geneticNature;
+    }
+
+    public String getPresenceStatus() {
+        return presenceStatus;
+    }
+
+    public void setPresenceStatus(String presenceStatus) {
+        this.presenceStatus = presenceStatus;
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public String getCountryOfOriginCode() {
+        return countryOfOriginCode;
+    }
+
+    public void setCountryOfOriginCode(String countryOfOriginCode) {
+        this.countryOfOriginCode = countryOfOriginCode;
+    }
+
+    public SiteVO getOriginSite() {
+        return originSite;
+    }
+
+    public void setOriginSite(SiteVO originSite) {
+        this.originSite = originSite;
+    }
+
+    public String getInstituteCode() {
+        return instituteCode;
+    }
+
+    public void setInstituteCode(String instituteCode) {
+        this.instituteCode = instituteCode;
+    }
+
+    public InstituteVO getHoldingInstitute() {
+        return holdingInstitute;
+    }
+
+    public void setHoldingInstitute(InstituteVO holdingInstitute) {
+        this.holdingInstitute = holdingInstitute;
+    }
+
+    public InstituteVO getHoldingGenbank() {
+        return holdingGenbank;
+    }
+
+    public void setHoldingGenbank(InstituteVO holdingGenbank) {
+        this.holdingGenbank = holdingGenbank;
+    }
+
+    public CollectingInfoVO getCollectingInfo() {
+        return collectingInfo;
+    }
+
+    public void setCollectingInfo(CollectingInfoVO collectingInfo) {
+        this.collectingInfo = collectingInfo;
+    }
+
+    public String getAcquisitionDate() {
+        return acquisitionDate;
+    }
+
+    public void setAcquisitionDate(String acquisitionDate) {
+        this.acquisitionDate = acquisitionDate;
+    }
+
+    public String getAcquisitionSourceCode() {
+        return acquisitionSourceCode;
+    }
+
+    public void setAcquisitionSourceCode(String acquisitionSourceCode) {
+        this.acquisitionSourceCode = acquisitionSourceCode;
+    }
+
+    public List<DonorInfoVO> getDonorInfo() {
+        return donorInfo;
+    }
+
+    public void setDonorInfo(List<DonorInfoVO> donorInfo) {
+        this.donorInfo = donorInfo;
+    }
+
+    public List<DistributorInfoVO> getDistributorInfo() {
+        return distributorInfo;
+    }
+
+    public void setDistributorInfo(List<DistributorInfoVO> distributorInfo) {
+        this.distributorInfo = distributorInfo;
+    }
+
+    public List<InstituteVO> getBreedingInstitutes() {
+        return breedingInstitutes;
+    }
+
+    public void setBreedingInstitutes(List<InstituteVO> breedingInstitutes) {
+        this.breedingInstitutes = breedingInstitutes;
+    }
+
+    public String getBreederAccessionNumber() {
+        return breederAccessionNumber;
+    }
+
+    public void setBreederAccessionNumber(String breederAccessionNumber) {
+        this.breederAccessionNumber = breederAccessionNumber;
+    }
+
+    public String getBreedingCreationYear() {
+        return breedingCreationYear;
+    }
+
+    public void setBreedingCreationYear(String breedingCreationYear) {
+        this.breedingCreationYear = breedingCreationYear;
+    }
+
+    public String getCatalogRegistrationYear() {
+        return catalogRegistrationYear;
+    }
+
+    public void setCatalogRegistrationYear(String catalogRegistrationYear) {
+        this.catalogRegistrationYear = catalogRegistrationYear;
+    }
+
+    public String getCatalogDeregistrationYear() {
+        return catalogDeregistrationYear;
+    }
+
+    public void setCatalogDeregistrationYear(String catalogDeregistrationYear) {
+        this.catalogDeregistrationYear = catalogDeregistrationYear;
+    }
+
+    public List<InstituteVO> getSafetyDuplicateInstitutes() {
+        return safetyDuplicateInstitutes;
+    }
+
+    public void setSafetyDuplicateInstitutes(List<InstituteVO> safetyDuplicateInstitutes) {
+        this.safetyDuplicateInstitutes = safetyDuplicateInstitutes;
+    }
+
+    public List<String> getStorageTypeCodes() {
+        return storageTypeCodes;
+    }
+
+    public void setStorageTypeCodes(List<String> storageTypeCodes) {
+        this.storageTypeCodes = storageTypeCodes;
+    }
+}
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java
index 10c8779f8b44f5991f645cbb79da8d36d8750a8d..2ff825651aaf7ef0c274245e47c78317ef5ff02f 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/GermplasmVO.java
@@ -24,7 +24,6 @@ public class GermplasmVO
     private static final long serialVersionUID = -7719928853974382749L;
 
     private Long groupId;
-    private List<Long> speciesGroup;
 
     @Id
     private String germplasmDbId;
@@ -56,25 +55,13 @@ public class GermplasmVO
     private List<String> taxonSynonyms;
     private List<String> taxonCommonNames;
     private String taxonComment;
-    private String geneticNature;
-    private String comment;
-    private PhotoVO photo;
-    private InstituteVO holdingInstitute;
-    private InstituteVO holdingGenbank;
-    private String presenceStatus;
 
     private GenealogyVO genealogy;
     private List<GenealogyVO> children;
-    private List<SimpleVO> descriptors;
 
-    private SiteVO originSite;
-    private SiteVO collectingSite;
+    private PhotoVO photo;
     private List<SiteVO> evaluationSites;
 
-    private GermplasmInstituteVO collector;
-    private GermplasmInstituteVO breeder;
-    private List<GermplasmInstituteVO> distributors;
-
     private List<CollPopVO> panel;
     private List<CollPopVO> collection;
     private List<CollPopVO> population;
@@ -130,16 +117,7 @@ public class GermplasmVO
         this.groupId = groupId;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
-    @Override
+   @Override
     public String getGermplasmDbId() {
         return germplasmDbId;
     }
@@ -364,60 +342,6 @@ public class GermplasmVO
         this.taxonComment = taxonComment;
     }
 
-    @Override
-    public String getGeneticNature() {
-        return geneticNature;
-    }
-
-    public void setGeneticNature(String geneticNature) {
-        this.geneticNature = geneticNature;
-    }
-
-    @Override
-    public String getComment() {
-        return comment;
-    }
-
-    public void setComment(String comment) {
-        this.comment = comment;
-    }
-
-    @Override
-    public PhotoVO getPhoto() {
-        return photo;
-    }
-
-    public void setPhoto(PhotoVO photo) {
-        this.photo = photo;
-    }
-
-    @Override
-    public InstituteVO getHoldingInstitute() {
-        return holdingInstitute;
-    }
-
-    public void setHoldingInstitute(InstituteVO holdingInstitute) {
-        this.holdingInstitute = holdingInstitute;
-    }
-
-    @Override
-    public InstituteVO getHoldingGenbank() {
-        return holdingGenbank;
-    }
-
-    public void setHoldingGenbank(InstituteVO holdingGenbank) {
-        this.holdingGenbank = holdingGenbank;
-    }
-
-    @Override
-    public String getPresenceStatus() {
-        return presenceStatus;
-    }
-
-    public void setPresenceStatus(String presenceStatus) {
-        this.presenceStatus = presenceStatus;
-    }
-
     @Override
     public GenealogyVO getGenealogy() {
         return genealogy;
@@ -437,30 +361,8 @@ public class GermplasmVO
     }
 
     @Override
-    public List<SimpleVO> getDescriptors() {
-        return descriptors;
-    }
-
-    public void setDescriptors(List<SimpleVO> descriptors) {
-        this.descriptors = descriptors;
-    }
-
-    @Override
-    public SiteVO getOriginSite() {
-        return originSite;
-    }
-
-    public void setOriginSite(SiteVO originSite) {
-        this.originSite = originSite;
-    }
-
-    @Override
-    public SiteVO getCollectingSite() {
-        return collectingSite;
-    }
-
-    public void setCollectingSite(SiteVO collectingSite) {
-        this.collectingSite = collectingSite;
+    public PhotoVO getPhoto() {
+        return photo;
     }
 
     @Override
@@ -468,35 +370,12 @@ public class GermplasmVO
         return evaluationSites;
     }
 
-    public void setEvaluationSites(List<SiteVO> evaluationSites) {
-        this.evaluationSites = evaluationSites;
-    }
-
-    @Override
-    public GermplasmInstituteVO getCollector() {
-        return collector;
-    }
-
-    public void setCollector(GermplasmInstituteVO collector) {
-        this.collector = collector;
-    }
-
-    @Override
-    public GermplasmInstituteVO getBreeder() {
-        return breeder;
-    }
-
-    public void setBreeder(GermplasmInstituteVO breeder) {
-        this.breeder = breeder;
-    }
-
-    @Override
-    public List<GermplasmInstituteVO> getDistributors() {
-        return distributors;
+    public void setPhoto(PhotoVO photo) {
+        this.photo = photo;
     }
 
-    public void setDistributors(List<GermplasmInstituteVO> distributors) {
-        this.distributors = distributors;
+    public void setEvaluationSites(List<SiteVO> evaluationSites) {
+        this.evaluationSites = evaluationSites;
     }
 
     @Override
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java
index b1e4f8fa23605b46cae8a8cda28e3e2ee70a8628..7e7eb0ea997c8222a6eb5e1e7ce8c9fde6601d07 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/InstituteVO.java
@@ -1,8 +1,10 @@
 package fr.inra.urgi.gpds.domain.data.germplasm;
 
+import fr.inra.urgi.gpds.domain.brapi.v1.data.BrapiGermplasmInstitute;
+
 import java.io.Serializable;
 
-public class InstituteVO implements Serializable, Institute {
+public class InstituteVO implements Serializable, BrapiGermplasmInstitute, ExtendedInstitute {
 
     private static final long serialVersionUID = -680211100453576319L;
 
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SimpleVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/PuiNameValueVO.java
similarity index 82%
rename from backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SimpleVO.java
rename to backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/PuiNameValueVO.java
index 27006991db19639526bcfd31473cf7c649f8f2a4..4f881bf471f85bfb2bd8014177a0718125c96b4c 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SimpleVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/PuiNameValueVO.java
@@ -5,7 +5,7 @@ import java.io.Serializable;
 /**
  * @author C. Michotey
  */
-public class SimpleVO implements Serializable, PuiNameValue {
+public class PuiNameValueVO implements Serializable, PuiNameValue {
 
     private static final long serialVersionUID = 3440255005695104200L;
 
@@ -13,10 +13,10 @@ public class SimpleVO implements Serializable, PuiNameValue {
     private String name;
     private String value;
 
-    public SimpleVO() {
+    public PuiNameValueVO() {
     }
 
-    public SimpleVO(String pui, String name, String value) {
+    public PuiNameValueVO(String pui, String name, String value) {
         this.pui = pui;
         this.name = name;
         this.value = value;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java
index e23d19b3c962ee5c6f61decd8558e8c88beedf77..afc0bad482d7466f18db64a86230e25483c00dea 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/Site.java
@@ -8,7 +8,7 @@ import fr.inra.urgi.gpds.domain.JSONView;
  */
 public interface Site {
     @JsonView(JSONView.GnpISFields.class)
-    Long getSiteId();
+    String getLocationDbId();
 
     @JsonView(JSONView.GnpISFields.class)
     String getSiteName();
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java
index 72db155a6bc50fb4090389083ce968e049596c3b..dbc4626a2a06f6dc1d44c6db381346c8f8992de3 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/germplasm/SiteVO.java
@@ -6,19 +6,19 @@ public class SiteVO implements Serializable, Site {
 
     private static final long serialVersionUID = 7058708694739141664L;
 
-    private Long siteId;
+    private String locationDbId;
     private String siteName;
     private Float latitude;
     private Float longitude;
     private String siteType;
 
     @Override
-    public Long getSiteId() {
-        return siteId;
+    public String getLocationDbId() {
+        return locationDbId;
     }
 
-    public void setSiteId(Long siteId) {
-        this.siteId = siteId;
+    public void setLocationDbId(String locationDbId) {
+        this.locationDbId = locationDbId;
     }
 
     @Override
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java
index 88b4c7252d6ea88bd71cad2d9c3a07e702772c57..a32f5aed10211299921b5f7702d812ee652f723c 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/phenotype/ObservationUnitVO.java
@@ -312,13 +312,4 @@ public class ObservationUnitVO implements BrapiObservationUnit, GnpISInternal, H
         this.groupId = groupId;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
 }
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java
index e61775edf7e28bf4b6da594d73c0f95f629b00b6..f0236e96d9a44d0f24cdb7931fb455f137b96c10 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudyDetailVO.java
@@ -233,15 +233,6 @@ public class StudyDetailVO implements GnpISInternal, BrapiStudyDetail, HasURI, H
         this.additionalInfo = additionalInfo;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java
index 328a695e83ea64b91a88fc458344082de39ac46c..36bb922b05d297eeaa10aa622bc27dc61ce91ca6 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/domain/data/study/StudySummaryVO.java
@@ -244,15 +244,6 @@ public class StudySummaryVO implements GnpISInternal, BrapiStudySummary, HasURI,
         this.seasons = seasons;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public Long getGroupId() {
         return groupId;
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java
index c1bf7b19ccf2ceef33fa3ab1df27d06672901057..f5256126dd54604d80354ca09da977ed64927c68 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepository.java
@@ -1,6 +1,7 @@
 package fr.inra.urgi.gpds.repository.es;
 
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -23,6 +24,10 @@ public interface GermplasmRepository
      */
     GermplasmVO getById(String germplasmDbId);
 
+
+    GermplasmMcpdVO getMcpdById(String germplasmDbId);
+
+
     /**
      * Scroll through all germplasm matching the given criteria.
      */
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java
index 84108f48d1a4159f84bee3099453de921c5e693e..a0b36332bf3d0d8c30da794f5dca22f360e7ab6f 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryImpl.java
@@ -2,6 +2,7 @@ package fr.inra.urgi.gpds.repository.es;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -42,6 +43,7 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
 
     private final ESFindRepository<GermplasmSearchCriteria, GermplasmVO> findRepository;
     private final ESGetByIdRepository<GermplasmVO> getByIdRepository;
+    private final ESGetByIdRepository<GermplasmMcpdVO> getMcpdByIdRepository;
     private final ESGenericQueryFactory<GermplasmSearchCriteria> queryFactory;
 
     @Autowired
@@ -56,9 +58,14 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
         this.mapper = mapper;
         this.parser = parser;
         Class<GermplasmVO> voClass = GermplasmVO.class;
+        Class<GermplasmMcpdVO> voMcpdClass = GermplasmMcpdVO.class;
         this.queryFactory = new ESGenericQueryFactory<>();
         this.findRepository = new ESGenericFindRepository<>(client, requestFactory, voClass, this.parser);
         this.getByIdRepository = new ESGenericGetByIdRepository<>(client, requestFactory, voClass, this.parser);
+        this.getMcpdByIdRepository = new ESGenericGetByIdRepository<>(client, requestFactory, voMcpdClass, this.parser);
+
+
+
     }
 
     @Override
@@ -73,6 +80,11 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
         return getByIdRepository.getById(germplasmDbId);
     }
 
+    @Override
+    public GermplasmMcpdVO getMcpdById(String germplasmDbId) {
+        return getMcpdByIdRepository.getById(germplasmDbId);
+    }
+
     @Override
     public PaginatedList<GermplasmVO> find(GermplasmSearchCriteria criteria) {
         return findRepository.find(criteria);
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
index 72eddc190a12e7804573a6f3a1992605a17ce055..ae2f9e86004c6898761468994687b49ce9f677f7 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/repository/es/XRefDocumentRepositoryImpl.java
@@ -69,6 +69,9 @@ public class XRefDocumentRepositoryImpl implements XRefDocumentRepository {
             LOGGER.debug("Search Xref aliases: " + String.join(",", aliases));
             LOGGER.debug("Query:\n " + source.toString());
 
+
+            
+
             SearchRequest searchRequest = new SearchRequest()
                 .indices(aliases)
                 .source(source);
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
index dc79a190d895bebbd1007560752c622988747753..6ccf7a778e4df01b507edbc033bbe733e28a1c3e 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmService.java
@@ -1,6 +1,7 @@
 package fr.inra.urgi.gpds.service.es;
 
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -13,6 +14,8 @@ public interface GermplasmService {
 
     GermplasmVO getById(String germplasmDbId);
 
+    GermplasmMcpdVO getMcpdById(String germplasmDbId);
+
     PaginatedList<GermplasmVO> find(GermplasmSearchCriteria criteria);
 
     File exportCSV(GermplasmSearchCriteria criteria);
diff --git a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java
index d48999a901b3a8768b3509e96e91b3a5079c1476..6cdbe0e4cf6e60260efe4adb2890dfa7ab937fd3 100644
--- a/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/gpds/service/es/GermplasmServiceImpl.java
@@ -3,6 +3,7 @@ package fr.inra.urgi.gpds.service.es;
 import com.opencsv.CSVWriter;
 import fr.inra.urgi.gpds.api.gnpis.v1.GnpISGermplasmController;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -69,6 +70,11 @@ public class GermplasmServiceImpl implements GermplasmService {
         return germplasmRepository.getById(germplasmDbId);
     }
 
+    @Override
+    public GermplasmMcpdVO getMcpdById(String germplasmDbId) {
+        return germplasmRepository.getMcpdById(germplasmDbId);
+    }
+
     @Override
     public PaginatedList<GermplasmVO> find(GermplasmSearchCriteria sCrit) {
         return germplasmRepository.find(sCrit);
diff --git a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java
index ae608d3137122445a5444d59769ed112f397531b..83063d083e04cab3a2ccf48944c667c1ca72de96 100644
--- a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java
+++ b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/GermplasmRepositoryTest.java
@@ -6,6 +6,7 @@ import fr.inra.urgi.gpds.Application;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmGETSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmPOSTSearchCriteria;
 import fr.inra.urgi.gpds.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.gpds.domain.data.germplasm.ProgenyVO;
@@ -45,6 +46,7 @@ class GermplasmRepositoryTest {
     @BeforeAll
     void before() {
         esSetUp.initialize(GermplasmVO.class, 0L);
+        esSetUp.initialize(GermplasmMcpdVO.class, 0L);
         esSetUp.initialize(ProgenyVO.class, 0L);
         esSetUp.initialize(PedigreeVO.class, 0L);
     }
@@ -60,6 +62,26 @@ class GermplasmRepositoryTest {
         assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId);
     }
 
+
+    @Test
+    void should_Get_By_Id_Mcpd() {
+        String germplasmDbId = "13705";
+        GermplasmMcpdVO germplasm = repository.getMcpdById(germplasmDbId);
+        assertThat(germplasm).isNotNull();
+        assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId);
+    }
+
+
+    @Test
+    void should_Not_Get_Mcpd_With_Wrong_Id() {
+        String germplasmDbId = "489485184";
+        GermplasmMcpdVO germplasm = repository.getMcpdById(germplasmDbId);
+        assertThat(germplasm).isNull();
+    }
+
+
+
+
     @Test
     void should_Find_By_PUI() {
         String germplasmPUI = "doi:10.15454/1.4921786381783696E12";
diff --git a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java
index 7f38d301ba6ca9714d75f879d66d7a3668a3e5fd..6d7fa9f6a5acabbddd1cff74bacffd8d4564784f 100644
--- a/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java
+++ b/backend/src/test/java/fr/inra/urgi/gpds/repository/es/setup/ESSetUp.java
@@ -170,7 +170,11 @@ public class ESSetUp {
     @SuppressWarnings("UnstableApiUsage")
     private String readResource(String path) {
         try {
-            return CharStreams.toString(new InputStreamReader(getClass().getResourceAsStream(path)));
+            InputStream resource = getClass().getResourceAsStream(path);
+            if (resource == null) {
+                throw new RuntimeException("Could not find resource at path '"+path+"'");
+            }
+            return CharStreams.toString(new InputStreamReader(resource));
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
diff --git a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/germplasm-mcpd0.json b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/germplasm-mcpd0.json
new file mode 100644
index 0000000000000000000000000000000000000000..4981d539735ebe4d7a8c2d079f2683221af9cc4a
--- /dev/null
+++ b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/germplasm-mcpd0.json
@@ -0,0 +1,78 @@
+[{
+  "docId": 13705,
+  "groupId": 0,
+  "accessionNames": [
+    "Belle Magnifique",
+    "Angleterre tardive,Belle de Chatenay,Belle de Sceaux,Belle de Spa,Cerise d'Agen,Cerise de Crêve,Cerise de Planchoury,Cerise de Saxe,de Spa,Gros de Sceaux,Magnifique de Sceaux"
+  ],
+  "accessionNumber": "V3853",
+  "acquisitionDate": 20040000,
+  "acquisitionSourceCode": null,
+  "alternateIDs": [
+    "V3853",
+    "https://doi.org/10.15454/QOYDZ8",
+    "13705"
+  ],
+  "ancestralData": "Il y a deux hypothèses sur l'origine de cette variété : elle aurait été obtenue dans une pépinière de Vitry-sur-Seine ou trouvée dans une propriété à Chatenay (Pomologie de la France 1871).",
+  "biologicalStatusOfAccessionCode": null,
+  "breedingInstitutes": [
+    {
+      "instituteName": null,
+      "instituteCode": null
+    }
+  ],
+  "collectingInfo": {
+    "collectingDate": 20040000,
+    "collectingInstitutes": [
+      {
+        "instituteAddress": "",
+        "instituteCode": null,
+        "instituteName": null
+      }
+    ],
+    "collectingMissionIdentifier": null,
+    "collectingNumber": null,
+    "collectingSite": {
+      "coordinateUncertainty": null,
+      "elevation": null,
+      "georeferencingMethod": null,
+      "latitudeDecimal": null,
+      "latitudeDegrees": null,
+      "locationDescription": null,
+      "longitudeDecimal": null,
+      "longitudeDegrees": null,
+      "spatialReferenceSystem": null
+    }
+  },
+  "cropName": "Cherry",
+  "countryOfOriginCode": "France",
+  "donorInfo ": [
+    {
+      "donorAccessionNumber": "C101",
+      "donorInstitute": {
+        "donorInstituteCode": null,
+        "donorInstitute": "Conservatoire Végétal Régional d'Aquitaine"
+      }
+    }
+  ],
+  "genus": "Prunus",
+  "germplasmDbId": 13705,
+  "germplasmPUI": "https://doi.org/10.15454/QOYDZ8",
+  "instituteCode": "FRA057",
+  "mlsStatus": "0",
+  "remarks": "Quelques auteurs disent que cette variété a été obtenue vers 1795 par un nommé Chatenay, dit le Magnifique, pépiniériste à Vitry-sur-Seine (Pomologie de la France 1871).  D'autres disent qu'elle a été trouvée dans une propriété à Chatenay, et multipliée par les pépiniéristes de Sceaux et de Chatenay, localités où elle a porté pendant longtemps le nom de Cerise de la Madeleine (Pomologie de la France 1871).",
+  "safetyDuplicateInstitues": [
+    {
+      "instituteCode": null,
+      "instituteName": null
+    }
+  ],
+  "species": "cerasus",
+  "speciesAuthority": "L.",
+  "storageTypeCodes": [
+    ""
+  ],
+  "subtaxon": "",
+  "subtaxonAuthority": "L."
+}
+]
diff --git a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json
index 05809a8ce030a613e8cb4cc1d2649afe33e08063..a51b8787c82d00d4f19c60e75771508442cf65df 100644
--- a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json
+++ b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/fixture/urgi_xref_test-group0.json
@@ -17,6 +17,7 @@
     "sequence_id": "",
     "sequence_version": "",
     "start_position": "",
+
     "end_position": "",
     "map": "",
     "map_position": "",
diff --git a/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/index/germplasm-mcpd_mapping.json b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/index/germplasm-mcpd_mapping.json
new file mode 100644
index 0000000000000000000000000000000000000000..64e68c060eb54f68fefc947f8b6cfd42061e6887
--- /dev/null
+++ b/backend/src/test/resources/fr/inra/urgi/gpds/repository/es/setup/index/germplasm-mcpd_mapping.json
@@ -0,0 +1,13 @@
+{
+  "germplasm-mcpd": {
+    "dynamic": "false",
+    "properties": {
+      "germplasmDbId": {
+        "type": "keyword"
+      },
+      "groupId": {
+        "type": "long"
+      }
+    }
+  }
+}
diff --git a/frontend/src/app/brapi.service.ts b/frontend/src/app/brapi.service.ts
index a32154a558e86966cdc2a69014343a7c2649e6fc..ac197c24ec7a13f2cfad2e949f0260062cf45785 100644
--- a/frontend/src/app/brapi.service.ts
+++ b/frontend/src/app/brapi.service.ts
@@ -12,7 +12,7 @@ import {
     BrapiStudy,
     BrapiTrial
 } from './models/brapi.model';
-import { Germplasm } from './models/gnpis.model';
+import { Germplasm, GermplasmMcpd } from './models/gnpis.model';
 
 export const BASE_URL = 'brapi/v1';
 
@@ -29,6 +29,11 @@ export class BrapiService {
             .get<Germplasm>(`${BASE_URL}/germplasm/${germplasmDbId}`);
     }
 
+    germplasmMcpd(germplasmDbId: string): Observable<BrapiResult<GermplasmMcpd>> {
+        return this.http
+            .get<BrapiResult<GermplasmMcpd>>(`${BASE_URL}/germplasm/${germplasmDbId}/mcpd`);
+    }
+
     germplasmPedigree(germplasmDbId: string): Observable<BrapiResult<BrapiGermplasmPedigree>> {
         return this.http
             .get<BrapiResult<BrapiGermplasmPedigree>>(`${BASE_URL}/germplasm/${germplasmDbId}/pedigree`);
diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.html b/frontend/src/app/germplasm-card/germplasm-card.component.html
index 45d8adb7825386544951ae4cbd2997dfa7120d7d..faac57788487fa7f55930921915955957ffaa5ed 100644
--- a/frontend/src/app/germplasm-card/germplasm-card.component.html
+++ b/frontend/src/app/germplasm-card/germplasm-card.component.html
@@ -1,10 +1,12 @@
 <gpds-loading-spinner [loading]="loading" class="float-right"></gpds-loading-spinner>
 
-<ng-container *ngIf="germplasmGnpis">
+<ng-container *ngIf="germplasmGnpis && germplasmMcpd">
   <h3 class="mb-4">
     <img *ngIf="germplasmGnpis.holdingGenbank && germplasmGnpis.holdingGenbank.instituteName"
          [src]="germplasmGnpis.holdingGenbank.logo"
          align="right"/>
+
+
     Germplasm: {{ germplasmGnpis.germplasmName }}
   </h3>
 
@@ -493,9 +495,7 @@
 
       <gpds-card-table
         [headers]="[
-                'Institute name',
                 'Institute code',
-                'Donation date',
                 'Accession number',
                 'Accession PUI'
                 ]"
@@ -503,7 +503,7 @@
         <ng-template let-row>
           <tr>
             <ng-template #donorInstituteTemplate>
-              <ng-container *ngTemplateOutlet="instituteTemplate;context:row.donorInstitute">
+              <ng-container *ngTemplateOutlet="instituteTemplate;context:row.donors">
               </ng-container>
             </ng-template>
 
@@ -511,12 +511,11 @@
               <a class="popovers" placement="auto"
                  [autoClose]="'outside'"
                  [ngbPopover]="donorInstituteTemplate"
-                 [popoverTitle]="row.donorInstitute.instituteName">
-                {{ row.donorInstitute.instituteName }}
+                 [popoverTitle]="row.donorInstituteCode">
+                {{ row.donorInstituteCode }}
               </a>
             </td>
             <td>{{ row.donorInstituteCode }}</td>
-            <td>{{ row.donationDate }}</td>
             <td>{{ row.donorAccessionNumber }}</td>
             <td>{{ row.donorGermplasmPUI }}</td>
             </tr>
@@ -782,6 +781,9 @@
     </ng-template>
   </gpds-card-section>
 
+
+
+
   <!-- XRefs part -->
   <gpds-xrefs [xrefId]="germplasmGnpis.germplasmPUI"></gpds-xrefs>
 </ng-container>
diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.ts b/frontend/src/app/germplasm-card/germplasm-card.component.ts
index b1aaf9f658b29aae12832fdd3e0f33c57ceca47d..112d00cadf5595e8fca0219b367c04af444b9d1f 100644
--- a/frontend/src/app/germplasm-card/germplasm-card.component.ts
+++ b/frontend/src/app/germplasm-card/germplasm-card.component.ts
@@ -3,7 +3,7 @@ import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
 import { BrapiService } from '../brapi.service';
 import { GnpisService } from '../gnpis.service';
 import { BrapiAttributeData, BrapiGermplasmPedigree, BrapiLocation, BrapiTaxonIds } from '../models/brapi.model';
-import { Children, Germplasm, Site } from '../models/gnpis.model';
+import { Children, Germplasm, GermplasmMcpd, Site } from '../models/gnpis.model';
 import { DataDiscoverySource } from '../models/data-discovery.model';
 
 @Component({
@@ -36,6 +36,7 @@ export class GermplasmCardComponent implements OnInit {
     taxonIdsWithURL: BrapiTaxonIds[] = [];
 
     germplasmGnpis: Germplasm;
+    germplasmMcpd: GermplasmMcpd;
     germplasmPedigree: BrapiGermplasmPedigree;
     germplasmProgeny: Children[];
     germplasmAttributes: BrapiAttributeData[];
@@ -53,6 +54,13 @@ export class GermplasmCardComponent implements OnInit {
         this.germplasmId = this.route.snapshot.queryParams.id;
         this.germplasmPuid = this.route.snapshot.queryParams.pui;
 
+
+        const germplasmMcpd$ = this.brapiService.germplasmMcpd(this.germplasmId).toPromise();
+        germplasmMcpd$
+            .then(germplasmMcpd => {
+                this.germplasmMcpd = germplasmMcpd.result;
+            });
+
         const germplasm$ = this.getGermplasm(this.germplasmId, this.germplasmPuid);
         germplasm$.then(result => {
             const germplasmId = this.germplasmId ? this.germplasmId : result.germplasmDbId;
@@ -80,7 +88,7 @@ export class GermplasmCardComponent implements OnInit {
                 });
         });
 
-        this.loaded = Promise.all([germplasm$]);
+        this.loaded = Promise.all([germplasm$, germplasmMcpd$]);
         this.loaded.then(() => {
             this.loading = false;
             this.alreadyInitialize = true;
@@ -107,6 +115,7 @@ export class GermplasmCardComponent implements OnInit {
         return germplasm$;
     }
 
+
     // TODO Remove the condition when the field includedInDataCatalog will be added to URGI study.
     getGermplasmSource(sourceURI: string) {
         if (sourceURI) {
diff --git a/frontend/src/app/models/gnpis.model.ts b/frontend/src/app/models/gnpis.model.ts
index edee6ddf7211609bc3009ecf1f15df4f404590da..d7cd3a47053dd259432359e9e15278d4857ac93a 100644
--- a/frontend/src/app/models/gnpis.model.ts
+++ b/frontend/src/app/models/gnpis.model.ts
@@ -25,6 +25,13 @@ export interface Germplasm extends BrapiGermplasm {
     population: GermplasmSet[];
 }
 
+
+
+export interface GermplasmMcpd extends  BrapiGermplasm{
+    mlsStatus: string;
+}
+
+
 export interface Site {
     latitude: number;
     longitude: number;