diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1a90de7239154f4472704d8e9d73c69503eb519f..b5511df7904d649e1cf5dfc50a6bd2c50ad4e3bc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -65,7 +65,7 @@ build-loader-docker-image:
 lint:
   stage: test
   tags:
-   - openstack
+    - openstack
   script: "./gradlew lint"
   cache:
     key: "$CI_COMMIT_REF_NAME"
@@ -135,7 +135,7 @@ test-and-sonarqube-master:
 
 build:
   tags:
-   - openstack
+    - openstack
   stage: build
   script:
     - ./gradlew assemble
@@ -155,26 +155,26 @@ build:
 .restart-config-server: &restart_config_server
   stage: build
   script:
-  - eval $(ssh-agent -s)
-  - ssh-add <(echo "${SSH_PRIVATE_KEY}")
-  - ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} 'echo "Successfully connected on $(hostname)"'
-  - ssh ${SERVER_USER}@${SERVER_IP} "sudo systemctl restart bootapp@config-server"
-  - eval $(ssh-agent -k)
+    - eval $(ssh-agent -s)
+    - ssh-add <(echo "${SSH_PRIVATE_KEY}")
+    - ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} 'echo "Successfully connected on $(hostname)"'
+    - ssh ${SERVER_USER}@${SERVER_IP} "sudo systemctl restart bootapp@config-server"
+    - eval $(ssh-agent -k)
   allow_failure: true
 
 restart-config-server-proxmox:
- variables:
-  SERVER_IP: ${SERVER_IP_PROXMOX}
-  SERVER_USER: ${SERVER_USER_PROXMOX}
- <<: *restart_config_server
+  variables:
+    SERVER_IP: ${SERVER_IP_PROXMOX}
+    SERVER_USER: ${SERVER_USER_PROXMOX}
+  <<: *restart_config_server
 
 restart-config-server-openstack:
- tags:
-  - openstack
- variables:
-  SERVER_IP: ${SERVER_IP_OPENSTACK_DEV}
-  SERVER_USER: ${SERVER_USER_OPENSTACK}
- <<: *restart_config_server
+  tags:
+    - openstack
+  variables:
+    SERVER_IP: ${SERVER_IP_OPENSTACK_DEV}
+    SERVER_USER: ${SERVER_USER_OPENSTACK}
+  <<: *restart_config_server
 
 
 # DEPLOY
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java
index 3a50dff4f31314230d52ec2b68ca668d4e7c8670..2ea27ac7c0c900626eb9d72ec8bf6054d5ac112e 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java
@@ -12,6 +12,7 @@ import fr.inra.urgi.faidare.domain.criteria.GermplasmGETSearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmPOSTSearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.base.PaginationCriteriaImpl;
+import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.faidare.domain.response.ApiResponseFactory;
 import fr.inra.urgi.faidare.domain.response.PaginatedList;
 import fr.inra.urgi.faidare.domain.response.Pagination;
@@ -69,6 +70,21 @@ public class GermplasmController {
         return searchGermplasmService(criteria);
     }
 
+    /**
+     * @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<GermplasmMcpdVO> getGermplasmMcpd(@PathVariable String germplasmDbId) {
+        LOGGER.debug("germplasmDbId = " + germplasmDbId);
+        GermplasmMcpdVO germplasm = germplasmService.getAsMcpdById(germplasmDbId);
+        if (germplasm == null) {
+            throw new NotFoundException("Germplasm not found for id '" + germplasmDbId + "'");
+        }
+        return ApiResponseFactory.createSingleObjectResponse(germplasm, null);
+    }
+
+
     /**
      * @link https://github.com/plantbreeding/API/blob/master/Specification/Germplasm/GermplasmSearchGET.md
      */
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java
index adda854aa0578ee311df28c14f25ac44831ab29b..70c262b935def1c8f2bf8a6037e8c7d0fec34598 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java
@@ -3,6 +3,7 @@ package fr.inra.urgi.faidare.api.faidare.v1;
 import com.google.common.base.Strings;
 import fr.inra.urgi.faidare.api.BadRequestException;
 import fr.inra.urgi.faidare.api.NotFoundException;
+import fr.inra.urgi.faidare.api.brapi.v1.GermplasmController;
 import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmGETSearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmPOSTSearchCriteria;
@@ -12,6 +13,8 @@ import fr.inra.urgi.faidare.domain.response.PaginatedList;
 import fr.inra.urgi.faidare.service.es.GermplasmService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.web.bind.annotation.*;
@@ -29,6 +32,7 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 public class GnpISGermplasmController {
 
     private final GermplasmService germplasmService;
+    private final static Logger LOGGER = LoggerFactory.getLogger(GermplasmController.class);
 
     @Autowired
     public GnpISGermplasmController(GermplasmService germplasmService) {
@@ -78,6 +82,7 @@ public class GnpISGermplasmController {
         return germplasm;
     }
 
+
     /**
      * Webservice for exporting germplasm by criteria into a CSV.
      * <p>
@@ -121,6 +126,27 @@ public class GnpISGermplasmController {
         return null;
     }
 
+
+
+    @PostMapping(value = "/germplasm-mcpd-csv", produces = "text/csv", consumes = APPLICATION_JSON_VALUE)
+    public FileSystemResource exportMcpd(@RequestBody @Valid FaidareGermplasmPOSTShearchCriteria criteria, HttpServletResponse response) {
+
+        long limitResult = 50000L;
+        long nbResult = germplasmService.germplasmFind(criteria).getMetadata().getPagination().getTotalCount();
+
+        if (!(nbResult > limitResult)) {
+            try {
+                File exportFile = germplasmService.exportGermplasmMcpd(criteria);
+                response.setHeader("Content-Disposition", "attachment; filename=germplasm.gnpis.csv");
+                return new FileSystemResource(exportFile);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new RuntimeException("An error occurred when exporting germplasm: " + e.getMessage() + ".", e);
+            }
+        }
+        return null;
+    }
+
     @ApiOperation("Search list of germplasm")
     @PostMapping(value = "/search", consumes = APPLICATION_JSON_VALUE)
     public GermplasmSearchResponse germplasmSearch(@RequestBody @Valid FaidareGermplasmPOSTShearchCriteria criteria) {
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java b/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java
index f0d3fdac1e49e4a0e8a693eed3d65ea26fa26905..c4cba9858db96ceb01def7b3a5c26d7bcf759722 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java
@@ -113,6 +113,7 @@ public class FaidareProperties {
     }
 
     public String getBaseIndexName(String documentType) {
+        documentType = documentType.replaceAll("([a-z0-9])([A-Z])", "$1-$2").toLowerCase();
         return elasticsearchIndexingTemplate
             .replace("{documentType}", documentType.toLowerCase());
     }
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..2acbf77fe3b9243509bc769f123ed41c2f529738
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java
@@ -0,0 +1,25 @@
+package fr.inra.urgi.faidare.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.JSONView;
+import fr.inra.urgi.faidare.domain.data.germplasm.ExtendedInstitute;
+import fr.inra.urgi.faidare.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/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java
new file mode 100644
index 0000000000000000000000000000000000000000..c16d41c5f6c0efdb79457536d48e3a77a010813c
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java
@@ -0,0 +1,36 @@
+package fr.inra.urgi.faidare.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.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/faidare/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..b47883d4e79387623cad7d56bf9ef5c823211872
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java
@@ -0,0 +1,17 @@
+package fr.inra.urgi.faidare.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.JSONView;
+import fr.inra.urgi.faidare.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/faidare/domain/brapi/v1/data/BrapiGermplasmInstitute.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmInstitute.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfe70de89ab640e3aed3ae90121e4b65819428bb
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmInstitute.java
@@ -0,0 +1,15 @@
+package fr.inra.urgi.faidare.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.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/faidare/domain/brapi/v1/data/BrapiGermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmMcpd.java
new file mode 100644
index 0000000000000000000000000000000000000000..f1fea8bc5d27aca6fc77d43c1a3a613d25b501e6
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmMcpd.java
@@ -0,0 +1,87 @@
+package fr.inra.urgi.faidare.domain.brapi.v1.data;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.JSONView;
+import fr.inra.urgi.faidare.domain.data.germplasm.DonorInfoVO;
+import fr.inra.urgi.faidare.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 getCommonCropName();
+
+    @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();
+
+    @JsonView(JSONView.BrapiFields.class)
+    String getRemarks();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/GnpISInternal.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/GnpISInternal.java
index ce877f5b7375b76b8d0df75f6c64cbd5820a653d..dfecbe9ec9e1c0e5ff454cbbdcb09f0b5d2dd9ef 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/GnpISInternal.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/domain/data/LocationVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/LocationVO.java
index f22c2bf57d5745eb3b30c22859f8f4c6edfe6f3d..f392d6f9627c2b5f0c2e7f2811a737da08c984c9 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/LocationVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/domain/data/ProgramVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/ProgramVO.java
index 07584931139e3f87e52379b05365392ce7bef048..70362a5ea404821db66e96123df5ea87cdb70b83 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/ProgramVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/domain/data/TrialVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/TrialVO.java
index 71a150e390d569f3e840a47f878c24ebb8e7f32d..021533298b85aad42846f7a0c6658d4ff1f8075e 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/TrialVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/domain/data/germplasm/CollPop.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPop.java
index b9ab3e1b8f3ce3973eb74607a5d8869f9bcbfc63..32cb9c4b080a7511a2a364ee010c22415f5adb8b 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPop.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPop.java
@@ -7,18 +7,18 @@ import fr.inra.urgi.faidare.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/faidare/domain/data/germplasm/CollPopVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPopVO.java
index b26131fefef747a8aaeb46ea54640c3446850068..4b62dfc16a6b50117134d15e4b63740a335e6b81 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPopVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPopVO.java
@@ -12,8 +12,8 @@ public class CollPopVO implements Serializable, CollPop {
     private Long id;
     private String name;
     private String type;
-    private SimpleVO germplasmRef;
     private Integer germplasmCount;
+    private PuiNameValueVO germplasmRef;
 
     @Override
     public Long getId() {
@@ -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/faidare/domain/data/germplasm/CollectingInfoVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingInfoVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4ec3abe7c23c4b771b9c114311fa1c40d674d5a
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingInfoVO.java
@@ -0,0 +1,85 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmCollectingInfo;
+import fr.inra.urgi.faidare.domain.data.germplasm.InstituteVO;
+
+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;
+    private String collectingDate;
+
+    @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;
+    }
+
+    public String getCollectingDate() {
+        return collectingDate;
+    }
+
+    public void setCollectingDate(String collectingDate) {
+        this.collectingDate = collectingDate;
+    }
+
+    @Override
+    public CollectingSiteVO getCollectingSite() {
+        return collectingSite;
+    }
+
+    public void setCollectingSite(CollectingSiteVO collectingSite) {
+        this.collectingSite = collectingSite;
+    }
+
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingSiteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingSiteVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..13adda7b27bb5e7c58d262b60262291ee523fcd1
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingSiteVO.java
@@ -0,0 +1,127 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+
+import fr.inra.urgi.faidare.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/faidare/domain/data/germplasm/DistributorInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..91fe99b3689dbb1bace263a4ff847c62277d7e42
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfo.java
@@ -0,0 +1,20 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.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/faidare/domain/data/germplasm/DistributorInfoVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfoVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..f30df0204a86e925f8e3b1c071c58d904219353d
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfoVO.java
@@ -0,0 +1,35 @@
+package fr.inra.urgi.faidare.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/faidare/domain/data/germplasm/DonorInfoVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorInfoVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..e82ff5a28112946d9c3027240c402096f3a6beb5
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorInfoVO.java
@@ -0,0 +1,36 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+
+import fr.inra.urgi.faidare.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/faidare/domain/data/germplasm/DonorVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorVO.java
index 8bab9ec7efae8ebfa64e178d299292dfc982a7b8..9c8af10982aef2bed5ba882772e26803cc39e5b5 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorVO.java
@@ -4,7 +4,7 @@ import fr.inra.urgi.faidare.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;
 
@@ -14,6 +14,7 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor
     private Integer donationDate;
     private InstituteVO donorInstitute;
 
+
     @Override
     public String getDonorGermplasmPUI() {
         return donorGermplasmPUI;
@@ -41,7 +42,7 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor
         this.donorInstituteCode = donorInstituteCode;
     }
 
-    @Override
+
     public InstituteVO getDonorInstitute() {
         return donorInstitute;
     }
@@ -50,7 +51,7 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor
         this.donorInstitute = donorInstitute;
     }
 
-    @Override
+
     public Integer getDonationDate() {
         return donationDate;
     }
@@ -59,4 +60,5 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor
         this.donationDate = donationDate;
     }
 
+
 }
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..b32bc616bf3f718cf3674a9ec2a454f73bcbcd22
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingInfo.java
@@ -0,0 +1,16 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+import fr.inra.urgi.faidare.domain.JSONView;
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmCollectingInfo;
+
+import java.io.Serializable;
+
+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/faidare/domain/data/germplasm/ExtendedCollectingSite.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingSite.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c13f9b443dcc41fd00f99dc846f51f7ea7fe5da
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingSite.java
@@ -0,0 +1,19 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.JSONView;
+import fr.inra.urgi.faidare.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/faidare/domain/data/germplasm/ExtendedDonorInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedDonorInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4d5ba7e132f903f56d95926c2cdde2d4469a2ec
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedDonorInfo.java
@@ -0,0 +1,14 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.JSONView;
+import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmDonorInfo;
+
+import java.io.Serializable;
+
+
+public interface ExtendedDonorInfo extends Serializable, BrapiGermplasmDonorInfo {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getDonationDate();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java
index c0d850cafb6c456119fbd43bb2aee65cc30bcd49..6b6201fbff2def00b502d45e0a221fcf85507d49 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java
@@ -39,10 +39,10 @@ public interface ExtendedGermplasm extends BrapiGermplasm, GnpISInternal {
     Photo getPhoto();
 
     @JsonView(JSONView.GnpISFields.class)
-    Institute getHoldingInstitute();
+    InstituteVO getHoldingInstitute();
 
     @JsonView(JSONView.GnpISFields.class)
-    Institute getHoldingGenbank();
+    InstituteVO getHoldingGenbank();
 
     @JsonView(JSONView.GnpISFields.class)
     String getPresenceStatus();
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasmMcpd.java
new file mode 100644
index 0000000000000000000000000000000000000000..09c154c70fada1fee50b9af1fb303fd0c104f26f
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasmMcpd.java
@@ -0,0 +1,47 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.JSONView;
+import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmMcpd;
+import fr.inra.urgi.faidare.domain.data.GnpISInternal;
+
+import java.util.List;
+
+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/faidare/domain/data/germplasm/ExtendedInstitute.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedInstitute.java
new file mode 100644
index 0000000000000000000000000000000000000000..58a61d8fb7375fe59bd6c3fc3ca18cd29a886d1e
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedInstitute.java
@@ -0,0 +1,26 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+import com.fasterxml.jackson.annotation.JsonView;
+import fr.inra.urgi.faidare.domain.JSONView;
+import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmInstitute;
+
+public interface ExtendedInstitute extends BrapiGermplasmInstitute {
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getAcronym();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getOrganisation();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getInstituteType();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getWebSite();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getAddress();
+
+    @JsonView(JSONView.GnpISFields.class)
+    String getLogo();
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Genealogy.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Genealogy.java
index e9837d90c3e0e3cda986a162fb6f8fafd738c181..5d4f3182ed82561c69963a080504a54cbcc9e787 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Genealogy.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/domain/data/germplasm/GenealogyVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GenealogyVO.java
index ba0435e978b54836ef2497a87f75e65813382885..4b4dcfa868af2540f51cace3756d7413fd8d0061 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GenealogyVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/domain/data/germplasm/GermplasmAttributeValueListVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmAttributeValueListVO.java
index 39b810782414faae48f17e861723180ab5724eed..6676f0394d8b4a7276284821fc2291dcd7ae373f 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmAttributeValueListVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/domain/data/germplasm/GermplasmInstitute.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstitute.java
index 692f62f7b58dd83e84ec830d7523da173490dfab..906d6851ef2014321234002f7d19684cf95264aa 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstitute.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstitute.java
@@ -8,7 +8,7 @@ import fr.inra.urgi.faidare.domain.JSONView;
  */
 public interface GermplasmInstitute {
     @JsonView(JSONView.GnpISFields.class)
-    Institute getInstitute();
+    InstituteVO getInstitute();
 
     @JsonView(JSONView.GnpISFields.class)
     String getGermplasmPUI();
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java
index e6da09ec204d813ef869e78620a7632c3cd19865..33d5be7f049c37f17965bc367c123f5166671685 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java
@@ -9,6 +9,10 @@ public class GermplasmInstituteVO implements Serializable, GermplasmInstitute {
 
     private static final long serialVersionUID = 7976964107440923573L;
 
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
     private InstituteVO institute;
     private String germplasmPUI;
     private String accessionNumber;
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmMcpdVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmMcpdVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d475bb1843ad5d432e2b8a986fbec3b3a39409a
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmMcpdVO.java
@@ -0,0 +1,342 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmMcpd;
+import fr.inra.urgi.faidare.elasticsearch.document.annotation.Document;
+import fr.inra.urgi.faidare.elasticsearch.document.annotation.Id;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Document(type = "germplasmMcpd")
+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 commonCropName;
+    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 getCommonCropName() {
+        return commonCropName;
+    }
+
+    public void setCommonCropName(String commonCropName) {
+        this.commonCropName = commonCropName;
+    }
+
+    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/faidare/domain/data/germplasm/GermplasmVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmVO.java
index f6954e78286f0143630e10fc0bd9acad09870249..84426201bf77cdfa0b9ec55a2cd030b56298484f 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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;
@@ -132,15 +131,6 @@ public class GermplasmVO
         this.groupId = groupId;
     }
 
-    @Override
-    public List<Long> getSpeciesGroup() {
-        return speciesGroup;
-    }
-
-    public void setSpeciesGroup(List<Long> speciesGroup) {
-        this.speciesGroup = speciesGroup;
-    }
-
     @Override
     public String getGermplasmDbId() {
         return germplasmDbId;
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java
index f29691bfbfb8f9a08908a40420aa18203e0035bf..d7bf01506020434e797effd206173f505dec902e 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java
@@ -1,9 +1,8 @@
 package fr.inra.urgi.faidare.domain.data.germplasm;
-
+import fr.inra.urgi.faidare.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;
 
     private String instituteName;
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/PuiNameValueVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/PuiNameValueVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..a397533bbbe72cc449650940ae33e08fc0af49df
--- /dev/null
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/PuiNameValueVO.java
@@ -0,0 +1,52 @@
+package fr.inra.urgi.faidare.domain.data.germplasm;
+
+import java.io.Serializable;
+
+/**
+ * @author C. Michotey
+ */
+public class PuiNameValueVO implements Serializable, PuiNameValue {
+
+    private static final long serialVersionUID = 3440255005695104200L;
+
+    private String pui;
+    private String name;
+    private String value;
+
+    public PuiNameValueVO() {
+    }
+
+    public PuiNameValueVO(String pui, String name, String value) {
+        this.pui = pui;
+        this.name = name;
+        this.value = value;
+    }
+
+    @Override
+    public String getPui() {
+        return pui;
+    }
+
+    public void setPui(String pui) {
+        this.pui = pui;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+}
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java
index 72479946d41e9a27c1ed62e2b8422edf5ad48f1b..83032740ec7b95fea5bd020d89b44a56c613c9bf 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java
@@ -8,7 +8,7 @@ import fr.inra.urgi.faidare.domain.JSONView;
  */
 public interface Site {
     @JsonView(JSONView.GnpISFields.class)
-    Long getSiteId();
+    String getSiteId();
 
     @JsonView(JSONView.GnpISFields.class)
     String getSiteName();
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java
index a62f5e2435f97aee59f79c782f317ec48aad1534..a005a4a35d31f78471bd8a4537432ae19aa78ddd 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java
@@ -6,18 +6,19 @@ public class SiteVO implements Serializable, Site {
 
     private static final long serialVersionUID = 7058708694739141664L;
 
-    private Long siteId;
+    private String siteId;
     private String siteName;
     private Float latitude;
     private Float longitude;
     private String siteType;
 
     @Override
-    public Long getSiteId() {
+    public String getSiteId() {
         return siteId;
     }
 
-    public void setSiteId(Long siteId) {
+
+    public void setSiteId(String siteId) {
         this.siteId = siteId;
     }
 
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java
index 6ad0bb93e8d50c22f27f70d0b3d21715b5358dae..3d163e02e2c7dd725966ce486497c12408afe21f 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java
@@ -312,13 +312,5 @@ 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/faidare/domain/data/study/StudyDetailVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudyDetailVO.java
index 135e3f5efcc6b8b9a9316b8e570648ac5d88fef1..d5a7ea32cc2aa2d12044c95e95308ab9c268cb8a 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudyDetailVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudyDetailVO.java
@@ -236,15 +236,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/faidare/domain/data/study/StudySummaryVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudySummaryVO.java
index d27d745dcd37d8fb05169e930d48d7c15b6f3010..adfc0d7a680e8eb3a7db53a1ffa71c7d7a6ee0c9 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudySummaryVO.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/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/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java b/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java
index 967fc51ff3403acf6eb6e19b895629be3b1ea021..27d3bfda4b3574619b70dff731337dc6e2df5272 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java
@@ -64,7 +64,6 @@ public class ESGenericGetByIdRepository<VO> implements ESGetByIdRepository<VO> {
 
             // Parse result list
             List<? extends VO> resultList = parser.parseHits(result, voClass);
-
             if (resultList != null && !resultList.isEmpty()) {
                 if (resultList.size() > 1) {
                     // Should never happen
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java
index 0929cda8dc15e0e2f1362e797c093803953fcf95..dafff525774e979f20be09872e5357a888ed01c8 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java
@@ -2,6 +2,7 @@ package fr.inra.urgi.faidare.repository.es;
 
 import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO;
@@ -40,6 +41,11 @@ public interface GermplasmRepository
      */
     Iterator<GermplasmVO> scrollAllGermplasm(FaidareGermplasmPOSTShearchCriteria criteria);
 
+    /**
+     * Scroll through all germplasmMcpd matching the given FAIDARE search criteria.
+     */
+    Iterator<GermplasmMcpdVO> scrollAllGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria);
+
     /**
      * Find pedigree for germplasm by id.
      */
@@ -50,4 +56,10 @@ public interface GermplasmRepository
      */
     ProgenyVO findProgeny(String germplasmDbId);
 
+    /**
+     * Find germplasm mcpd by id.
+     */
+    GermplasmMcpdVO getAsMcpdById(String germplasmDbId);
+
+
 }
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java
index 91db9f00e2c56a1f3a3a8c5f3608ce7a4be2b41f..31a6e1a8c55537fb4ffe7a35b418909c3a8dfede 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java
@@ -3,6 +3,7 @@ package fr.inra.urgi.faidare.repository.es;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO;
@@ -63,6 +64,7 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
     private final ESFindRepository<GermplasmSearchCriteria, GermplasmVO> findRepository;
     private final ESGetByIdRepository<GermplasmVO> getByIdRepository;
     private final ESGenericQueryFactory<GermplasmSearchCriteria> queryFactory;
+    private final ESGetByIdRepository<GermplasmMcpdVO> getMcpdByIdRepository;
 
     @Autowired
     public GermplasmRepositoryImpl(
@@ -76,9 +78,12 @@ 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);
         Class<GermplasmVO> documentClass = GermplasmVO.class;
         Class<FaidareGermplasmPOSTShearchCriteria> criteriaClass = FaidareGermplasmPOSTShearchCriteria.class;
         this.documentMetadata = DocumentAnnotationUtil.getDocumentObjectMetadata(documentClass);
@@ -99,6 +104,13 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
         return new ESScrollIterator<>(client, requestFactory, parser, GermplasmVO.class, query, fetchSize);
     }
 
+    @Override
+    public Iterator<GermplasmMcpdVO> scrollAllGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria) {
+        QueryBuilder query = queryFactory.createShouldFilterQuery(criteria);
+        int fetchSize = criteria.getPageSize().intValue();
+        return new ESScrollIterator<>(client, requestFactory, parser, GermplasmMcpdVO.class, query, fetchSize);
+    }
+
     @Override
     public GermplasmVO getById(String germplasmDbId) {
         return getByIdRepository.getById(germplasmDbId);
@@ -128,6 +140,12 @@ public class GermplasmRepositoryImpl implements GermplasmRepository {
         }
     }
 
+    @Override
+    public GermplasmMcpdVO getAsMcpdById(String germplasmDbId) {
+        return getMcpdByIdRepository.getById(germplasmDbId);
+    }
+
+
     @Override
     public PedigreeVO findPedigree(String germplasmDbId) {
         QueryBuilder termQuery = QueryBuilders.termQuery("germplasmDbId", germplasmDbId);
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java
index 7082135d6e8321035a5c41b64c3ecabdd842f43e..5194804f1231959c8d6151a858e418094fe644a9 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java
@@ -2,6 +2,7 @@ package fr.inra.urgi.faidare.service.es;
 
 import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria;
+import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO;
 import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO;
@@ -31,4 +32,9 @@ public interface GermplasmService {
 
     ProgenyVO getProgeny(String germplasmDbId);
 
+    GermplasmMcpdVO getAsMcpdById(String germplasmDbId);
+
+    File exportGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria);
+
+
 }
diff --git a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java
index cc9c2e09004470c64f08dd8e80a8e585dba0a68e..0ebb89291ce8f4b690464a6e063eb2330a03cfce 100644
--- a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java
+++ b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java
@@ -4,10 +4,7 @@ import com.opencsv.CSVWriter;
 import fr.inra.urgi.faidare.api.faidare.v1.GnpISGermplasmController;
 import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria;
 import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria;
-import fr.inra.urgi.faidare.domain.data.germplasm.CollPopVO;
-import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO;
-import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO;
-import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO;
+import fr.inra.urgi.faidare.domain.data.germplasm.*;
 import fr.inra.urgi.faidare.domain.datadiscovery.response.GermplasmSearchResponse;
 import fr.inra.urgi.faidare.domain.response.PaginatedList;
 import fr.inra.urgi.faidare.repository.es.GermplasmRepository;
@@ -23,6 +20,7 @@ import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author cpommier, gcornut, jdestin
@@ -61,6 +59,25 @@ public class GermplasmServiceImpl implements GermplasmService {
         }
     }
 
+    @Override
+    public GermplasmMcpdVO getAsMcpdById(String germplasmDbId) {
+        return germplasmRepository.getAsMcpdById(germplasmDbId);
+    }
+
+    @Override
+    public File exportGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria) {
+        try {
+            Iterator<GermplasmMcpdVO> allGermplasm = germplasmRepository.scrollAllGermplasmMcpd(criteria);
+            Path tmpDirPath = Files.createTempDirectory("germplasm");
+            Path tmpFile = Files.createTempFile(tmpDirPath, "germplasm_", ".csv");
+            writeMcpdToCSV(tmpFile, allGermplasm);
+            return tmpFile.toFile();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
     private void writeToCSV(Path tmpFile, Iterator<GermplasmVO> germplasms) throws IOException {
         Writer fileStream = new OutputStreamWriter(new FileOutputStream(tmpFile.toFile()), StandardCharsets.UTF_8);
         CSVWriter csvWriter = new CSVWriter(fileStream, ';', '"', '\\', "\n");
@@ -69,7 +86,6 @@ public class GermplasmServiceImpl implements GermplasmService {
             "LotName", "LotSynonym", "CollectionName", "CollectionType", "PanelName", "PanelSize"};
         csvWriter.writeNext(header);
 
-
         while (germplasms.hasNext()) {
             List<String> collectionNames = new ArrayList<>();
             List<String> panelNames = new ArrayList<>();
@@ -100,6 +116,88 @@ public class GermplasmServiceImpl implements GermplasmService {
         csvWriter.close();
     }
 
+
+
+
+    private void writeMcpdToCSV(Path tmpFile, Iterator<GermplasmMcpdVO> germplasms) throws IOException {
+        Writer fileStream = new OutputStreamWriter(new FileOutputStream(tmpFile.toFile()), StandardCharsets.UTF_8);
+        CSVWriter csvWriter = new CSVWriter(fileStream, ';', '"', '\\', "\n");
+        String[] header = new String[]{
+            "PUID", "INSTCODE", "ACCENUMB", "COLLNUMB", "COLLCODE", "COLLNAME",
+            "COLLINSTADDRESS", "COLLMISSID", "GENUS", "SPECIES", "SPAUTHOR", "SUBTAXA",
+            "SUBTAUTHOR", "CROPNAME", "ACCENAME", "ACQDATE", "ORIGCTY", "COLLSITE",
+            "DECLATITUDE", "LATITUDE", "DECLONGITUDE", "LONGITUDE", "COORDUNCERT",
+            "COORDDATUM", "GEOREFMETH", "ELEVATION", "COLLDATE", "BREDCODE",
+            "BREDNAME", "SAMPSTAT", "ANCEST","COLLSRC", "DONORCODE", "DONORNAME",
+            "DONORNUMB", "OTHERNUMB", "DUPLSITE", "DUPLINSTNAME", "STORAGE", "MLSSTAT", "REMARKS",
+            };
+        csvWriter.writeNext(header);
+
+        while (germplasms.hasNext()) {
+            List<String> collectionNames = new ArrayList<>();
+            List<String> panelNames = new ArrayList<>();
+            GermplasmMcpdVO germplasmMcpdVO = germplasms.next();
+
+
+            String[] line = new String[header.length];
+            line[0] = germplasmMcpdVO.getGermplasmPUI();
+            line[1] = germplasmMcpdVO.getInstituteCode();
+            line[2] = germplasmMcpdVO.getAccessionNumber();
+            line[3] = germplasmMcpdVO.getCollectingInfo().getCollectingNumber();
+            line[4] = germplasmMcpdVO.getCollectingInfo().getCollectingInstitutes().stream()
+                .map(InstituteVO::getInstituteCode).collect(Collectors.joining(";"));
+            line[5] = germplasmMcpdVO.getCollectingInfo().getCollectingInstitutes().stream()
+                .map(InstituteVO::getInstituteName).collect(Collectors.joining(";"));
+            line[6] = germplasmMcpdVO.getCollectingInfo().getCollectingInstitutes().stream()
+                .map(InstituteVO::getAddress).collect(Collectors.joining(";"));
+            line[7] = germplasmMcpdVO.getCollectingInfo().getCollectingMissionIdentifier();
+            line[8] = germplasmMcpdVO.getGenus();
+            line[9] = germplasmMcpdVO.getSpecies();
+            line[10] = germplasmMcpdVO.getSpeciesAuthority();
+            line[11] = germplasmMcpdVO.getSubtaxon();
+            line[12] = germplasmMcpdVO.getSubtaxonAuthority();
+            line[13] = germplasmMcpdVO.getCommonCropName();
+            line[14] = String.join(";",germplasmMcpdVO.getAccessionNames());
+            line[15] = germplasmMcpdVO.getAcquisitionDate();
+            line[16] = germplasmMcpdVO.getCountryOfOriginCode();
+            line[18] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getSiteName();
+            line[19] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLatitudeDecimal();
+            line[20] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLatitudeDegrees();
+            line[21] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLongitudeDecimal();
+            line[22] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLongitudeDegrees();
+            line[23] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getCoordinateUncertainty();
+            line[24] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getSpatialReferenceSystem();
+            line[25] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getGeoreferencingMethod();
+            line[26] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getElevation();
+            line[27] = germplasmMcpdVO.getCollectingInfo().getCollectingDate();
+            line[28] = germplasmMcpdVO.getBreedingInstitutes().stream()
+                .map(InstituteVO::getInstituteCode).collect(Collectors.joining(";"));
+            line[29] = germplasmMcpdVO.getBreedingInstitutes().stream()
+                .map(InstituteVO::getInstituteName).collect(Collectors.joining(";"));
+            line[30] = germplasmMcpdVO.getBiologicalStatusOfAccessionCode();
+            line[31] = germplasmMcpdVO.getAncestralData();
+            line[32] = germplasmMcpdVO.getAcquisitionSourceCode();
+            line[33] = germplasmMcpdVO.getDonorInfo().stream()
+                .map(donorInfoVO -> donorInfoVO.getDonorInstitute().getInstituteCode()).collect(Collectors.joining(";"));
+            line[34] = germplasmMcpdVO.getDonorInfo().stream()
+                .map(donorInfoVO -> donorInfoVO.getDonorInstitute().getInstituteName()).collect(Collectors.joining(";"));
+            line[35] = germplasmMcpdVO.getDonorInfo().stream()
+                .map(DonorInfoVO::getDonorAccessionNumber).collect(Collectors.joining(";"));
+            line[36] = String.join(";", germplasmMcpdVO.getAlternateIDs());
+            line[37] = germplasmMcpdVO.getSafetyDuplicateInstitutes().stream()
+                .map(InstituteVO::getInstituteName).collect(Collectors.joining(";"));
+            line[38] = String.join(";", germplasmMcpdVO.getStorageTypeCodes());
+            line[39] = germplasmMcpdVO.getMlsStatus();
+            line[40] = germplasmMcpdVO.getRemarks();
+            csvWriter.writeNext(line);
+        }
+        csvWriter.close();
+    }
+
+
+
+
+
     @Override
     public GermplasmVO getById(String germplasmDbId) {
         return germplasmRepository.getById(germplasmDbId);
diff --git a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java
index a4328166a30ed65903572c0c0698089f385ce7db..9bceca30daaf8da241f439d0585e37d3e3eacebc 100644
--- a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java
+++ b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java
@@ -42,7 +42,7 @@ class CallsControllerTest {
             .andExpect(status().isBadRequest())
             .andExpect(content().json("{" +
                 "\"metadata\":{" +
-                    "\"pagination\":{\"pageSize\":100,\"currentPage\":2,\"totalCount\":26,\"totalPages\":1}," +
+                    "\"pagination\":{\"pageSize\":100,\"currentPage\":2,\"totalCount\":27,\"totalPages\":1}," +
                     "\"status\":[{" +
                         "\"name\":\"Bad Request: The current page should be strictly less than the total number of pages.\"," +
                         "\"code\":\"400\"" +
@@ -64,7 +64,7 @@ class CallsControllerTest {
                 "    \"pagination\": {\n" +
                 "      \"pageSize\": 1000,\n" +
                 "      \"currentPage\": 0,\n" +
-                "      \"totalCount\": 26,\n" +
+                "      \"totalCount\": 27,\n" +
                 "      \"totalPages\": 1\n" +
                 "    },\n" +
                 "    \"status\": [],\n" +
@@ -97,6 +97,11 @@ class CallsControllerTest {
                 "      \"methods\": [\"GET\"],\n" +
                 "      \"versions\": [\"1.0\", \"1.1\", \"1.2\"]\n" +
                 "    }, {\n" +
+                "      \"call\": \"germplasm/{germplasmDbId}/mcpd\",\n" +
+                "      \"datatypes\": [\"json\"],\n" +
+                "      \"methods\": [\"GET\"],\n" +
+                "      \"versions\": [\"1.0\", \"1.1\", \"1.2\"]\n" +
+                "    }, {\n" +
                 "      \"call\": \"germplasm/{germplasmDbId}/pedigree\",\n" +
                 "      \"datatypes\": [\"json\"],\n" +
                 "      \"methods\": [\"GET\"],\n" +
diff --git a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java
index 12fd243970bf52a90c9e0c9610b3280ffb5c8d1f..3a0011514394260fe8e2310743087d43fdf90ebe 100644
--- a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java
+++ b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java
@@ -108,7 +108,6 @@ class GermplasmControllerTest {
         GermplasmVO germplasm = new GermplasmVO();
 
         germplasm.setGroupId(0L);
-        germplasm.setSpeciesGroup(Collections.singletonList(1L));
 
         germplasm.setGermplasmDbId("germplasmDbId");
         germplasm.setDefaultDisplayName("defaultDisplayName");
@@ -119,7 +118,6 @@ class GermplasmControllerTest {
 
         DonorVO donor = new DonorVO();
         donor.setDonorGermplasmPUI("pui");
-        donor.setDonationDate(1);
         germplasm.setDonors(Collections.singletonList(donor));
 
         when(service.getById(anyString())).thenReturn(germplasm);
diff --git a/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java b/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java
index a9150b26b6974be834a1e95830caeb977aae2658..ad6f539d096dddb194038ec133c9bb97688c0140 100644
--- a/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java
+++ b/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java
@@ -95,7 +95,6 @@ class GnpISGermplasmControllerTest {
         GermplasmVO germplasm = new GermplasmVO();
 
         germplasm.setGroupId(0L);
-        germplasm.setSpeciesGroup(Collections.singletonList(1L));
 
         germplasm.setGermplasmDbId("germplasmDbId");
         germplasm.setDefaultDisplayName("defaultDisplayName");
@@ -107,7 +106,6 @@ class GnpISGermplasmControllerTest {
 
         DonorVO donor = new DonorVO();
         donor.setDonorGermplasmPUI("pui");
-        donor.setDonationDate(1);
         germplasm.setDonors(Collections.singletonList(donor));
 
         PaginatedList<GermplasmVO> germplasmPage = new PaginatedList<>(null, Collections.singletonList(germplasm));
@@ -127,7 +125,7 @@ class GnpISGermplasmControllerTest {
             .andExpect(jsonPath("$.donors[0].donorGermplasmPUI", is(donor.getDonorGermplasmPUI())))
 
             // GnpIS specific fields should appear
-            .andExpect(jsonPath("$.donors[0].donationDate", is(donor.getDonationDate())))
+            //.andExpect(jsonPath("$.donors[0].donationDate", is(donor.getDonationDate())))
             .andExpect(jsonPath("$.collection[0].name", is(collection.getName())));
 
     }
diff --git a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java
index 42190131c14ef1b9889611311d0e2812a3990be0..76285c6934b21838e2af8c7c9446aafde00787e5 100644
--- a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java
+++ b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java
@@ -22,6 +22,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.Import;
 import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
+import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -47,6 +48,8 @@ class GermplasmRepositoryTest {
         esSetUp.initialize(GermplasmVO.class, 0L);
         esSetUp.initialize(ProgenyVO.class, 0L);
         esSetUp.initialize(PedigreeVO.class, 0L);
+        esSetUp.initialize(GermplasmMcpdVO.class, 0L);
+
     }
 
     @Autowired
@@ -71,6 +74,36 @@ class GermplasmRepositoryTest {
         assertThat(germplasm.get(0).getGermplasmPUI()).isEqualTo(germplasmPUI);
     }
 
+
+    @Test
+    void should_Get_Mcpd_By_Id() {
+        String germplasmDbId = "13705";
+        GermplasmMcpdVO germplasm = repository.getAsMcpdById(germplasmDbId);
+        assertThat(germplasm).isNotNull();
+        assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId);
+    }
+
+
+    @Test
+    void should_Not_Get_Mcpd_With_Wrong_Id() {
+        String germplasmDbId = "489485184";
+        GermplasmMcpdVO germplasm = repository.getAsMcpdById(germplasmDbId);
+        assertThat(germplasm).isNull();
+    }
+
+    @Test
+    void should_Get_Mcpd_By_Id_checkAll() {
+        String germplasmDbId = "13705";
+        GermplasmMcpdVO germplasm = repository.getAsMcpdById(germplasmDbId);
+        assertThat(germplasm).isNotNull();
+        assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId);
+        assertThat(germplasm.getCollectingInfo()).isNotNull();
+        assertThat(germplasm.getCollectingInfo().getCollectingSite()).isNotNull();
+        assertThat(germplasm.getCollectingInfo().getCollectingSite().getLocationDbId()).isNotNull();
+        assertThat(germplasm.getCollectingInfo().getCollectingSite().getLocationDbId()).isEqualTo("dXJuOlVSR0kvbG9jYXRpb24vNDA2MzU=");
+        assertThat(germplasm.getCollectingInfo().getCollectingSite().getLocationDbId()).isNotEqualTo("dXJuOlVSR0kvbG9");
+    }
+
     @Test
     void should_Not_Get_By_Incorrect_Id() {
         String germplasmDbId = "FOOO";
diff --git a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java
index 13a40d2b49294bf5e2bca0f243665c2ea85ef1d3..235e03b61c1439246e811b7ba02355d4f2fe6cd7 100644
--- a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java
+++ b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java
@@ -103,7 +103,7 @@ public class ESSetUp {
 
         if (response.hasFailures()) {
             System.err.println(response.buildFailureMessage());
-            throw new RuntimeException("Indexing failed (index name: '" + indexName + "'");
+            throw new RuntimeException("Indexing failed (index name: '" + indexName + "')");
         }
     }
 
@@ -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/faidare/repository/es/setup/fixture/germplasmMcpd0.json b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/fixture/germplasmMcpd0.json
new file mode 100644
index 0000000000000000000000000000000000000000..676a8611f5b21347b326fdbb924bc453dc9b9ac2
--- /dev/null
+++ b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/fixture/germplasmMcpd0.json
@@ -0,0 +1,91 @@
+[{
+  "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": "test",
+  "breedingInstitutes": [
+    {
+      "instituteName": null,
+      "instituteCode": null
+    }
+  ],
+  "collectingInfo": {
+    "collectingDate": 20040000,
+    "collectingInstitutes": [
+      {
+        "instituteAddress": "",
+        "instituteCode": null,
+        "instituteName": null
+      }
+    ],
+    "collectingMissionIdentifier": null,
+    "collectingNumber": null,
+    "collectingSite": {
+      "locationDbId": "dXJuOlVSR0kvbG9jYXRpb24vNDA2MzU=",
+      "locationName": "(U) Liamone - ULI",
+      "latitudeDecimal": 42.124165,
+      "locationDescription": "Liamone",
+      "longitudeDecimal": 8.749445,
+      "locationURI": "urn:URGI/location/40635",
+      "coordinateUncertainty": "test",
+      "elevation": "test",
+      "georeferencingMethod": "test",
+      "latitudeDegrees": "test",
+      "longitudeDegrees": "test",
+      "spatialReferenceSystem": "test"
+    }
+  },
+  "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.",
+  "holdingInstitute": {
+    "instituteName": "UMR0588-BioForA (Biologie Intégrée pour la valorisation de la diversité des arbres et de la Forêt)",
+    "acronym": "BioForA",
+    "organisation": "INRA-ONF",
+    "instituteType": "Public-sector research organization",
+    "webSite": "https://www6.val-de-loire.inrae.fr/biofora",
+    "instituteAddress": "2163 avenue de la Pomme de Pin - CS 40001 ARDON, 45075 ORLÉANS CEDEX 2, France"
+  },
+  "storageTypeCodes": [
+    ""
+  ],
+  "subtaxon": "subsp. vulgaris",
+  "subtaxonAuthority": "L.",
+  "originLocationDbId": "2400",
+  "originLocationName": "test"
+}
+]
diff --git a/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/index/germplasmMcpd_mapping.json b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/index/germplasmMcpd_mapping.json
new file mode 100644
index 0000000000000000000000000000000000000000..e26ea0b6ab897bd65e7bfd81a90b4c2575eeb0c1
--- /dev/null
+++ b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/index/germplasmMcpd_mapping.json
@@ -0,0 +1,455 @@
+{
+  "germplasmMcpd": {
+    "dynamic": "false",
+    "properties": {
+      "germplasmURI": {
+        "type": "keyword"
+      },
+      "germplasmName": {
+        "type": "keyword",
+        "doc_values": true
+      },
+      "accessionNames": {
+        "type": "keyword",
+        "doc_values": true
+      },
+      "accessionNumber": {
+        "type": "keyword",
+        "doc_values": true
+      },
+      "acquisitionDate": {
+        "type": "integer"
+      },
+      "acquisitionSourceCode": {
+        "type": "keyword"
+      },
+      "alternateIDs": {
+        "type": "keyword"
+      },
+      "ancestralData": {
+        "type": "keyword"
+      },
+      "biologicalStatusOfAccessionCode": {
+        "type": "keyword"
+      },
+      "breedingInstitutes": {
+        "properties": {
+          "instituteCode": {
+            "type": "keyword"
+          },
+          "instituteName": {
+            "type": "keyword"
+          },
+          "acronym": {
+            "type": "keyword"
+          },
+          "organisation": {
+            "type": "keyword"
+          },
+          "instituteType": {
+            "type": "keyword"
+          },
+          "webSite": {
+            "type": "keyword"
+          },
+          "instituteAddress": {
+            "type": "keyword"
+          },
+          "logo": {
+            "type": "keyword"
+          }
+        }
+      },
+      "breedingMethodDbId": {
+        "type": "keyword"
+      },
+      "breederAccessionNumber": {
+        "type": "keyword"
+      },
+      "breedingCreationYear": {
+        "type": "keyword"
+      },
+      "catalogRegistrationYear": {
+        "type": "keyword"
+      },
+      "catalogDeregistrationYear": {
+        "type": "keyword"
+      },
+      "collectingInfo": {
+        "properties": {
+          "collectingDate": {
+            "type": "integer"
+          },
+          "collectingInstitutes": {
+            "properties": {
+              "instituteCode": {
+                "type": "keyword"
+              },
+              "instituteName": {
+                "type": "keyword"
+              },
+              "acronym": {
+                "type": "keyword"
+              },
+              "organisation": {
+                "type": "keyword"
+              },
+              "instituteType": {
+                "type": "keyword"
+              },
+              "webSite": {
+                "type": "keyword"
+              },
+              "instituteAddress": {
+                "type": "keyword"
+              },
+              "logo": {
+                "type": "keyword"
+              }
+            }
+          },
+          "collectingMissionIdentifier": {
+            "type": "keyword"
+          },
+          "collectingNumber": {
+            "type": "keyword"
+          },
+          "collectors": {
+            "type": "keyword"
+          },
+          "materialType": {
+            "type": "keyword"
+          },
+          "collectingSite": {
+            "properties": {
+              "locationDbId": {
+                "type": "keyword"
+              },
+              "locationName": {
+                "type": "keyword"
+              },
+              "coordinateUncertainty": {
+                "type": "keyword"
+              },
+              "elevation": {
+                "type": "keyword"
+              },
+              "georeferencingMethod":{
+                "type": "keyword"
+              },
+              "latitudeDecimal": {
+                "type": "keyword"
+              },
+              "latitudeDegrees": {
+                "type": "keyword"
+              },
+              "locationDescription": {
+                "type": "keyword"
+              },
+              "longitudeDecimal":  {
+                "type": "keyword"
+              },
+              "longitudeDegrees":  {
+                "type": "keyword"
+              },
+              "spatialReferenceSystem": {
+                "type": "keyword"
+              },
+              "locationURI": {
+                "type": "keyword"
+              }
+
+            }
+
+          }
+
+        }
+      },
+      "commonCropName": {
+        "type": "keyword",
+        "doc_values": true
+      },
+      "countryOfOrigin": {
+        "type": "keyword"
+      },
+      "countryOfOriginCode": {
+        "type": "keyword"
+      },
+      "originLocationDbId": {
+        "type": "keyword"
+      },
+      "originLocationName": {
+        "type": "keyword"
+      },
+      "documentationURL": {
+        "type": "keyword"
+      },
+      "donors": {
+        "properties": {
+          "donorInstituteCode": {
+            "type": "keyword"
+          },
+          "donorGermplasmPUI": {
+            "type": "keyword"
+          },
+          "germplasmPUI": {
+            "type": "keyword"
+          },
+          "donorAccessionNumber": {
+            "type": "keyword"
+          },
+          "donorInstitute": {
+            "properties": {
+              "instituteName": {
+                "type": "keyword"
+              },
+              "instituteCode": {
+                "type": "keyword"
+              },
+              "acronym": {
+                "type": "keyword"
+              },
+              "organisation": {
+                "type": "keyword"
+              },
+              "instituteType": {
+                "type": "keyword"
+              },
+              "webSite": {
+                "type": "keyword"
+              },
+              "address": {
+                "type": "keyword"
+              },
+              "logo": {
+                "type": "keyword"
+              }
+            }
+          },
+          "donationDate": {
+            "type": "integer"
+          }
+        }
+      },
+      "donorInfo": {
+        "properties":{
+          "donorAccessionNumber": {
+            "type": "keyword"
+          },
+          "donorAccessionPui": {
+            "type": "keyword"
+          },
+          "donationDate": {
+            "type": "keyword"
+          },
+          "donorInstitute": {
+            "properties":{
+              "instituteCode": {
+                "type": "keyword"
+              },
+              "instituteName": {
+                "type": "keyword"
+              },
+              "acronym": {
+                "type": "keyword"
+              },
+              "organisation": {
+                "type": "keyword"
+              },
+              "instituteType": {
+                "type": "keyword"
+              },
+              "webSite": {
+                "type": "keyword"
+              },
+              "instituteAddress": {
+                "type": "keyword"
+              },
+              "logo": {
+                "type": "keyword"
+              }
+            }
+          }
+        }
+      },
+      "genus":{
+        "type": "keyword",
+        "doc_values": true
+      },
+      "genusSpecies": {
+        "type": "keyword",
+        "doc_values": true
+      },
+      "germplasmDbId": {
+        "type": "keyword"
+      },
+      "germplasmMcpdDbId": {
+        "type": "keyword"
+      },
+      "germplasmMcpdURI": {
+        "type": "keyword"
+      },
+      "germplasmGenus": {
+        "type": "keyword",
+        "doc_values": true
+      },
+      "germplasmPUI": {
+        "type": "keyword"
+      },
+      "germplasmSpecies": {
+        "type": "keyword",
+        "doc_values": true
+      },
+      "holdingInstitute": {
+        "properties": {
+          "instituteName": {
+            "type": "keyword"
+          },
+          "instituteCode": {
+            "type": "keyword"
+          },
+          "acronym": {
+            "type": "keyword"
+          },
+          "organisation": {
+            "type": "keyword"
+          },
+          "instituteType": {
+            "type": "keyword"
+          },
+          "webSite": {
+            "type": "keyword"
+          },
+          "instituteAddress": {
+            "type": "keyword"
+          },
+          "logo": {
+            "type": "keyword"
+          }
+        }
+      },
+      "holdingGenbank": {
+        "properties": {
+          "instituteName": {
+            "type": "keyword",
+            "doc_values": true
+          },
+          "instituteCode": {
+            "type": "keyword"
+          },
+          "webSite": {
+            "type": "keyword"
+          },
+          "logo": {
+            "type": "keyword"
+          }
+        }
+      },
+      "distributorInfos": {
+        "properties": {
+          "institute": {
+            "properties": {
+              "instituteName": {
+                "type": "keyword"
+              },
+              "instituteCode": {
+                "type": "keyword"
+              },
+              "acronym": {
+                "type": "keyword"
+              },
+              "organisation": {
+                "type": "keyword"
+              },
+              "instituteType": {
+                "type": "keyword"
+              },
+              "webSite": {
+                "type": "keyword"
+              },
+              "instituteAddress": {
+                "type": "keyword"
+              },
+              "logo": {
+                "type": "keyword"
+              }
+            }
+          },
+          "accessionNumber": {
+            "type": "keyword"
+          },
+          "distributionStatus": {
+            "type": "keyword"
+          }
+        }
+      },
+      "instituteCode": {
+        "type": "keyword"
+      },
+      "mlsStatus": {
+        "type": "keyword"
+      },
+      "remarks": {
+        "type": "keyword"
+      },
+      "safetyDuplicateInstitutes": {
+        "properties":{
+          "instituteCode": {
+            "type": "keyword"
+          },
+          "instituteName": {
+            "type": "keyword"
+          }
+        }
+      },
+      "geneticNature": {
+        "type": "keyword"
+      },
+      "species": {
+        "type": "keyword"
+      },
+      "speciesAuthority": {
+        "type": "keyword"
+      },
+      "storageTypeCodes": {
+        "type": "keyword"
+      },
+      "subtaxon": {
+        "type": "keyword"
+      },
+      "subtaxonAuthority": {
+        "type": "keyword"
+      },
+      "subtaxaAuthority": {
+        "type": "keyword"
+      },
+      "groupId": {
+        "type": "long"
+      },
+      "presenceStatus": {
+        "type": "keyword"
+      },
+      "@type": {
+        "type": "keyword"
+      },
+      "@id": {
+        "type": "keyword"
+      },
+      "schema:includedInDataCatalog": {
+        "type": "keyword"
+      },
+      "schema:identifier": {
+        "type": "keyword"
+      },
+      "schema:name": {
+        "type": "keyword"
+      },
+      "schema:url": {
+        "type": "keyword"
+      },
+      "defaultDisplayName": {
+        "type": "keyword"
+      }
+    }
+  }
+}
diff --git a/frontend/src/app/brapi.service.spec.ts b/frontend/src/app/brapi.service.spec.ts
index 7f60d4fa9ea5b9e2ec28d0add5926bf412616a31..521ac19c2866e62618d5153a4660e40b42befa12 100644
--- a/frontend/src/app/brapi.service.spec.ts
+++ b/frontend/src/app/brapi.service.spec.ts
@@ -1,10 +1,13 @@
 import { BrapiService } from './brapi.service';
 import {
+    BrapiCollectingSite,
     BrapiContacts,
     BrapiGermplasm,
     BrapiGermplasmAttributes,
+    BrapiGermplasmMcpd,
     BrapiGermplasmPedigree,
     BrapiGermplasmProgeny,
+    BrapiInstitute,
     BrapiLocation,
     BrapiObservationVariable,
     BrapiProgeny,
@@ -14,9 +17,19 @@ import {
     BrapiStudy,
     BrapiTrial
 } from './models/brapi.model';
-import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import {
+    HttpClientTestingModule,
+    HttpTestingController
+} from '@angular/common/http/testing';
 import { TestBed } from '@angular/core/testing';
-import { Donor, Germplasm, GermplasmInstitute, GermplasmSet, Institute, Site } from './models/gnpis.model';
+import {
+    Donor,
+    Germplasm,
+    GermplasmInstitute,
+    GermplasmSet,
+    Institute,
+    Site
+} from './models/gnpis.model';
 
 describe('BrapiService', () => {
 
@@ -214,6 +227,16 @@ describe('BrapiService', () => {
         address: '12',
         logo: null
     };
+    const brapiInstitute: BrapiInstitute = {
+        instituteName: 'INRAE URGI',
+        instituteCode: '78000',
+        acronym: 'INRAE',
+        organisation: 'inrae',
+        instituteType: 'lab',
+        webSite: 'www.labo.fr',
+        instituteAddress: '18',
+        logo: null
+    };
     const origin: GermplasmInstitute = {
         ...institute,
         institute: institute,
@@ -226,6 +249,20 @@ describe('BrapiService', () => {
         distributionStatus: null
     };
 
+    const collectingSite: BrapiCollectingSite = {
+        locationDbId: 'FR-78-INRAE',
+        locationName: 'Versailles',
+        coordinateUncertainty: null,
+        elevation: null,
+        georeferencingMethod: null,
+        latitudeDecimal: null,
+        latitudeDegrees: null,
+        locationDescription: null,
+        longitudeDecimal: null,
+        longitudeDegrees: null,
+        spatialReferenceSystem: null,
+    };
+
     const brapiDonor: Donor = {
         donorInstitute: institute,
         donorGermplasmPUI: '12',
@@ -303,6 +340,62 @@ describe('BrapiService', () => {
         'schema:includedInDataCatalog': null
     };
 
+    const germplasmMcpdTest: BrapiGermplasmMcpd = {
+        groupId: '0',
+        accessionNames: ['test accession'],
+        accessionNumber: '01',
+        acquisitionDate: '2021',
+        acquisitionSourceCode: 'FR-urgi',
+        alternateIDs: ['Id1', 'Id2'],
+        ancestralData: null,
+        biologicalStatusOfAccessionCode: 'maintained',
+        breedingInstitutes: brapiInstitute,
+        collectingInfo: {
+            collectingDate: '2021',
+            collectingInstitutes: brapiInstitute,
+            collectingMissionIdentifier: '007',
+            collectingNumber: '3',
+            collectors: 'urgi',
+            materialType: 'germplasm',
+            collectingSite: collectingSite,
+        },
+        commonCropName: 'wheat',
+        countryOfOriginCode: 'FR',
+        donorInfo: {
+            donorAccessionNumber: 'ING007',
+            donorInstitute: brapiInstitute,
+            donationDate: '2021',
+        },
+        genus: 'Triti',
+        germplasmDbId: 'Fr-007',
+        germplasmPUI: 'urn/fr-007',
+        instituteCode: 'FR-INRAE',
+        mlsStatus: '0',
+        remarks: null,
+        safetyDuplicateInstitutes: null,
+        species: 'Triti',
+        speciesAuthority: null,
+        storageTypeCodes: null,
+        subtaxon: null,
+        subtaxonAuthority: null,
+        breederAccessionNumber: null,
+        breedingCreationYear: null,
+        catalogRegistrationYear: null,
+        catalogDeregistrationYear: null,
+        originLocationDbId: 'FR-Ver',
+        originLocationName: 'Versailles',
+        holdingInstitute: brapiInstitute,
+        holdingGenbank: brapiInstitute,
+        geneticNature: 'hybrid',
+        presenceStatus: null,
+        distributorInfos: null
+    };
+
+    const germplasmMcpdTestResult: BrapiResult<BrapiGermplasmMcpd> = {
+        metadata: null,
+        result: germplasmMcpdTest
+    };
+
     let brapiService: BrapiService;
     let http: HttpTestingController;
 
@@ -428,4 +521,18 @@ describe('BrapiService', () => {
 
     });
 
+    it('should fetch the germplasm mcpd', () => {
+
+        let fetchedGermplasmMcpd: BrapiResult<BrapiGermplasmMcpd>;
+        const germplasmDbId: string = germplasmTest.germplasmDbId;
+        brapiService.germplasmMcpd(germplasmDbId).subscribe(response => {
+            fetchedGermplasmMcpd = response;
+        });
+        http.expectOne(`brapi/v1/germplasm/${germplasmDbId}/mcpd`)
+            .flush(germplasmMcpdTestResult);
+
+        expect(fetchedGermplasmMcpd).toEqual(germplasmMcpdTestResult);
+
+    });
+
 });
diff --git a/frontend/src/app/brapi.service.ts b/frontend/src/app/brapi.service.ts
index e1b0b584f2b933f24b58f62f1221648ebbc3ed57..aca2463a41295b6b0d303e164733b13d5f96ab02 100644
--- a/frontend/src/app/brapi.service.ts
+++ b/frontend/src/app/brapi.service.ts
@@ -4,6 +4,7 @@ import { HttpClient } from '@angular/common/http';
 import {
     BrapiGermplasm,
     BrapiGermplasmAttributes,
+    BrapiGermplasmMcpd,
     BrapiGermplasmPedigree,
     BrapiLocation,
     BrapiObservationVariable,
@@ -13,6 +14,7 @@ import {
     BrapiTrial
 } from './models/brapi.model';
 
+
 export const BASE_URL = 'brapi/v1';
 
 @Injectable({
@@ -60,6 +62,10 @@ export class BrapiService {
         return this.http
             .get<BrapiResult<BrapiTrial>>(`${BASE_URL}/trials/${trialsId}`);
     }
+    germplasmMcpd(germplasmDbId: string): Observable<BrapiResult<BrapiGermplasmMcpd>> {
+        return this.http
+            .get<BrapiResult<BrapiGermplasmMcpd>>(`${BASE_URL}/germplasm/${germplasmDbId}/mcpd`);
+    }
 
 
     /**
diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.html b/frontend/src/app/germplasm-card/germplasm-card.component.html
index 053b76ff0d3315bdad63d6f6b133e0b956f41551..188729a86340ebc0e6e7cf62af5e51473016601f 100644
--- a/frontend/src/app/germplasm-card/germplasm-card.component.html
+++ b/frontend/src/app/germplasm-card/germplasm-card.component.html
@@ -42,6 +42,7 @@
         </ng-template>
       </faidare-card-row>
 
+
       <faidare-card-row
         label="Authority"
         [test]="germplasmTaxonAuthor">
@@ -280,7 +281,7 @@
 
           <faidare-card-row
             label="Pedigree"
-            [value]="germplasmGnpis.pedigree">
+              [value]="germplasmGnpis.pedigree">
           </faidare-card-row>
 
           <faidare-card-row
@@ -298,6 +299,14 @@
             </ng-template>
           </faidare-card-row>
 
+          <faidare-card-row
+            label="MLS status"
+            [test]="germplasmMcpd && germplasmMcpd.mlsStatus">
+            <ng-template>
+              {{ germplasmMcpd.mlsStatus }}
+            </ng-template>
+          </faidare-card-row>
+
         </div>
       </ng-template>
     </faidare-card-section>
@@ -344,7 +353,6 @@
           label="Presence status"
           [value]="germplasmGnpis.presenceStatus">
         </faidare-card-row>
-
       </div>
     </ng-template>
   </faidare-card-section>
@@ -366,6 +374,14 @@
           </ng-template>
         </faidare-card-row>
 
+        <faidare-card-row
+          label="Acquisition Source Code"
+          [test]="germplasmMcpd && germplasmMcpd.acquisitionSourceCode">
+          <ng-template>
+            {{ germplasmMcpd.acquisitionSourceCode }}
+          </ng-template>
+        </faidare-card-row>
+
         <faidare-card-row
           label="Material type"
           [test]="germplasmGnpis.collector && germplasmGnpis.collector.materialType">
@@ -483,7 +499,7 @@
                 ]"
           [rows]="germplasmGnpis.donors">
           <ng-template let-row>
-            <tr>
+            <tr *ngIf="row.donorInstitute">
               <ng-template #donorInstituteTemplate>
                 <ng-container *ngTemplateOutlet="instituteTemplate;context:row.donorInstitute">
                 </ng-container>
diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts b/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts
index b0fa68a891c1b0ab425b895723bec06825e81f2a..4f0d779fd44741e9649e3321bb997730dd9a0089 100644
--- a/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts
+++ b/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts
@@ -14,8 +14,22 @@ import { CardSectionComponent } from '../card-section/card-section.component';
 import { CardRowComponent } from '../card-row/card-row.component';
 import { CardTableComponent } from '../card-table/card-table.component';
 import { MapComponent } from '../map/map.component';
-import { BrapiGermplasmAttributes, BrapiGermplasmPedigree, BrapiResult, BrapiSibling } from '../models/brapi.model';
-import { Donor, Germplasm, GermplasmInstitute, GermplasmSet, Institute, Site } from '../models/gnpis.model';
+import {
+    BrapiCollectingSite,
+    BrapiGermplasmAttributes,
+    BrapiGermplasmMcpd,
+    BrapiGermplasmPedigree,
+    BrapiInstitute,
+    BrapiResult,
+    BrapiSibling
+} from '../models/brapi.model';
+import {
+    Donor,
+    Germplasm,
+    GermplasmInstitute,
+    GermplasmSet,
+    Institute
+} from '../models/gnpis.model';
 import { DataDiscoverySource } from '../models/data-discovery.model';
 import { MockComponent } from 'ng-mocks';
 import { XrefsComponent } from '../xrefs/xrefs.component';
@@ -38,6 +52,14 @@ describe('GermplasmCardComponent', () => {
         get cardHeader() {
             return this.elements('div.card-header');
         }
+
+        get cardRowField() {
+            return this.elements('div.field');
+        }
+
+        get cardRowValue() {
+            return this.elements('div.value');
+        }
     }
 
     const brapiSibling: BrapiSibling = {
@@ -84,6 +106,17 @@ describe('GermplasmCardComponent', () => {
         logo: null
     };
 
+    const brapiInstitute: BrapiInstitute = {
+        instituteName: 'INRAE URGI',
+        instituteCode: '78000',
+        acronym: 'INRAE',
+        organisation: 'inrae',
+        instituteType: 'lab',
+        webSite: 'www.labo.fr',
+        instituteAddress: '18',
+        logo: null
+    };
+
     const gnpisGermplasmInstitute: GermplasmInstitute = {
         ...gnpisInstitute,
         institute: gnpisInstitute,
@@ -96,6 +129,20 @@ describe('GermplasmCardComponent', () => {
         distributionStatus: null
     };
 
+    const collectingSite: BrapiCollectingSite = {
+        locationDbId: 'FR-78-INRAE',
+        locationName: 'Versailles',
+        coordinateUncertainty: null,
+        elevation: null,
+        georeferencingMethod: null,
+        latitudeDecimal: null,
+        latitudeDegrees: null,
+        locationDescription: null,
+        longitudeDecimal: null,
+        longitudeDegrees: null,
+        spatialReferenceSystem: null,
+    };
+
     const gnpisDonor: Donor = {
         donorInstitute: gnpisInstitute,
         donorGermplasmPUI: '12',
@@ -138,7 +185,7 @@ describe('GermplasmCardComponent', () => {
         germplasmDbId: 'test',
         defaultDisplayName: 'test',
         accessionNumber: 'test',
-        germplasmName: 'test',
+        germplasmName: 'testName',
         germplasmPUI: 'doi:1256',
         pedigree: 'tree',
         seedSource: 'inra',
@@ -181,6 +228,61 @@ describe('GermplasmCardComponent', () => {
         'schema:includedInDataCatalog': source
     };
 
+    const germplasmMcpdTest: BrapiGermplasmMcpd = {
+        groupId: '0',
+        accessionNames: ['test accession'],
+        accessionNumber: '01',
+        acquisitionDate: '2021',
+        acquisitionSourceCode: 'FR-urgi',
+        alternateIDs: ['Id1', 'Id2'],
+        ancestralData: null,
+        biologicalStatusOfAccessionCode: 'maintained',
+        breedingInstitutes: brapiInstitute,
+        collectingInfo: {
+            collectingDate: '2021',
+            collectingInstitutes: brapiInstitute,
+            collectingMissionIdentifier: '007',
+            collectingNumber: '3',
+            collectors: 'urgi',
+            materialType: 'germplasm',
+            collectingSite: collectingSite,
+        },
+        commonCropName: 'wheat',
+        countryOfOriginCode: 'FR',
+        donorInfo: {
+            donorAccessionNumber: 'ING007',
+            donorInstitute: brapiInstitute,
+            donationDate: '2021',
+        },
+        genus: 'Triti',
+        germplasmDbId: 'Fr-007',
+        germplasmPUI: 'urn/fr-007',
+        instituteCode: 'FR-INRAE',
+        mlsStatus: '0',
+        remarks: null,
+        safetyDuplicateInstitutes: null,
+        species: 'Triti',
+        speciesAuthority: null,
+        storageTypeCodes: null,
+        subtaxon: null,
+        subtaxonAuthority: null,
+        breederAccessionNumber: null,
+        breedingCreationYear: null,
+        catalogRegistrationYear: null,
+        catalogDeregistrationYear: null,
+        originLocationDbId: 'FR-Ver',
+        originLocationName: 'Versailles',
+        holdingInstitute: brapiInstitute,
+        holdingGenbank: brapiInstitute,
+        geneticNature: 'hybrid',
+        presenceStatus: null,
+        distributorInfos: null
+    };
+    const germplasmMcpdTestResult: BrapiResult<BrapiGermplasmMcpd> = {
+        metadata: null,
+        result: germplasmMcpdTest
+    };
+
     const gnpisService = jasmine.createSpyObj(
         'GnpisService', [
             'getGermplasm',
@@ -194,12 +296,14 @@ describe('GermplasmCardComponent', () => {
         'BrapiService', [
             // 'germplasmProgeny',
             'germplasmPedigree',
-            'germplasmAttributes'
+            'germplasmAttributes',
+            'germplasmMcpd'
         ]
     );
     // brapiService.germplasmProgeny.and.returnValue(of(brapiGermplasmProgeny));
     brapiService.germplasmPedigree.and.returnValue(of(brapiGermplasmPedigree));
     brapiService.germplasmAttributes.and.returnValue(of(brapiGermplasmAttributes));
+    brapiService.germplasmMcpd.and.returnValue(of(germplasmMcpdTestResult));
 
 
     const activatedRouteParams = {
@@ -236,15 +340,22 @@ describe('GermplasmCardComponent', () => {
 
         component.loaded.then(() => {
             expect(component.germplasmGnpis).toBeTruthy();
+            expect(component.germplasmMcpd).toBeTruthy();
             tester.detectChanges();
             expect(tester.title).toContainText('Germplasm: test');
             expect(tester.cardHeader[0]).toContainText('Identification');
+            expect(tester.cardRowField[0]).toContainText('Germplasm name');
+            expect(tester.cardRowValue[0]).toContainText('testName');
+
             expect(tester.cardHeader[1]).toContainText('Depositary');
             expect(tester.cardHeader[2]).toContainText('Collector');
             expect(tester.cardHeader[3]).toContainText('Breeder');
             expect(tester.cardHeader[4]).toContainText('Donor');
             expect(tester.cardHeader[5]).toContainText('Distributor');
             expect(tester.cardHeader[6]).toContainText('Evaluation Data');
+
+            expect(tester.cardRowField[5]).toContainText('MLS status');
+            expect(tester.cardRowValue[5]).toContainText('0');
         });
     }));
 
diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.ts b/frontend/src/app/germplasm-card/germplasm-card.component.ts
index 6c8d91088dc726cf22f485fa4d9198ab5cf07313..2569cee684c4e6d78bbdb8393855d96c11963374 100644
--- a/frontend/src/app/germplasm-card/germplasm-card.component.ts
+++ b/frontend/src/app/germplasm-card/germplasm-card.component.ts
@@ -4,9 +4,10 @@ import { BrapiService } from '../brapi.service';
 import { GnpisService } from '../gnpis.service';
 import {
     BrapiAttributeData,
+    BrapiGermplasmMcpd,
     BrapiGermplasmPedigree,
     BrapiLocation,
-    BrapiTaxonIds
+    BrapiTaxonIds,
 } from '../models/brapi.model';
 import { Children, Germplasm, Site } from '../models/gnpis.model';
 import { environment } from '../../environments/environment';
@@ -26,6 +27,7 @@ export class GermplasmCardComponent implements OnInit {
 
     taxonIdsWithURL: BrapiTaxonIds[] = [];
     germplasmGnpis: Germplasm;
+    germplasmMcpd: BrapiGermplasmMcpd;
     germplasmPedigree: BrapiGermplasmPedigree;
     germplasmProgeny: Children[];
     germplasmAttributes: BrapiAttributeData[];
@@ -45,7 +47,6 @@ export class GermplasmCardComponent implements OnInit {
                 .then(germplasm => {
                     const germplasmId = id || germplasm.germplasmDbId;
                     this.germplasmGnpis = germplasm;
-                    this.getTaxon();
                     this.reformatData();
 
                     // TODO use the progeny call when the information about parent will be added.
@@ -55,6 +56,12 @@ export class GermplasmCardComponent implements OnInit {
                             this.germplasmProgeny = germplasmProgeny.result;
                         });*/
 
+
+                    this.brapiService.germplasmMcpd(germplasmId).subscribe(germplasmMcpd => {
+                        this.germplasmMcpd = germplasmMcpd.result;
+                    });
+                    this.getTaxon();
+
                     this.germplasmPedigree = null;
                     this.brapiService.germplasmPedigree(germplasmId)
                         .subscribe(germplasmPedigree => {
diff --git a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html
index 0c1539367f44f43d0deb9ddf1c58ecc0799fb245..feda59ea7d9f7c4c359d38729226913315f4902e 100644
--- a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html
+++ b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html
@@ -23,12 +23,19 @@
    You must filter your results to have less than <strong>50,000 results</strong> before exporting the data.
   </div>
 
-  <button type="button" class="btn btn-outline-success mb-2"
+  <button type="button" class="btn btn-outline-success btn-sm mb-2"
           (click)="exportPlantMaterial(localCriteria)">
     <span class="iconify" data-icon="fa-solid:file-csv" data-inline="false"></span>
     Export Plant Material list
   </button>
 
+<!--TODO Activate when export webservice will be ready-->
+<!--  <button type="button" class="btn btn-outline-info btn-sm ml-3  mb-2"-->
+<!--          (click)="exportMcpd(localCriteria)">-->
+<!--    <span class="iconify" data-icon="fa-solid:file-csv" data-inline="false"></span>-->
+<!--    Export MCPD list-->
+<!--  </button>-->
+
   <!-- Loading spinner-->
   <div class="text-center">
     <faidare-loading-spinner [loading]="loading"></faidare-loading-spinner>
diff --git a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts
index 585f960620c1e7501ee3a99cd76f823166535755..a4b993e1b348a7702f8a8a7c623593f6a95203ed 100644
--- a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts
+++ b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts
@@ -131,7 +131,24 @@ export class GermplasmResultPageComponent implements OnInit {
             result => {
                 if (result) {
                     const blob = new Blob([result], { type: 'text/plain;charset=utf-8' });
-                    saveAs(blob, 'germplasm.gnpis.csv');
+                    saveAs(blob, 'germplasm_gnpis.csv');
+                } else {
+                    this.overLimitSizeExport = true;
+                }
+                this.loading = false;
+            },
+            error => {
+                console.log(error);
+            });
+    }
+
+    exportMcpd(criteria: GermplasmSearchCriteria) {
+        this.loading = true;
+        this.service.mcpdExport(criteria).subscribe(
+            result => {
+                if (result) {
+                    const blob = new Blob([result], { type: 'text/plain;charset=utf-8' });
+                    saveAs(blob, 'germplasm_mcpd.csv');
                 } else {
                     this.overLimitSizeExport = true;
                 }
diff --git a/frontend/src/app/gnpis.service.ts b/frontend/src/app/gnpis.service.ts
index 32e43a0ae23c348f0a8e19bd8f0881e4d1972a3e..bf0b3b2a44fe9862498e028673e6562d80aa6dac 100644
--- a/frontend/src/app/gnpis.service.ts
+++ b/frontend/src/app/gnpis.service.ts
@@ -152,6 +152,19 @@ export class GnpisService {
         );
     }
 
+    // TODO Change the service's response to return an object with the number of results and handle here if the number is over the limit
+    mcpdExport(criteria: GermplasmSearchCriteria): Observable<any> {
+        const requestOptions: Object = {
+            /* other options here */
+            responseType: 'text'
+        };
+        return this.http.post<any>(
+            `${BASE_URL}/germplasm/germplasm-mcpd-csv`,
+            criteria,
+            requestOptions
+        );
+    }
+
     getSourcesName(sourceByURI, response) {
         response.facets = response.facets.map((facet: DataDiscoveryFacet) => {
             facet.terms = facet.terms.map(term => {
diff --git a/frontend/src/app/models/brapi.model.ts b/frontend/src/app/models/brapi.model.ts
index f8630ff08b968c324a9e842a9707c1aa9ae5c64d..27a75f05e8c6ead1870c4f886311ddd271e5f82c 100644
--- a/frontend/src/app/models/brapi.model.ts
+++ b/frontend/src/app/models/brapi.model.ts
@@ -177,6 +177,89 @@ export interface BrapiGermplasm extends BrapiHasDocumentationURL, schema.Dataset
     acquisitionDate: string;
 }
 
+export interface BrapiGermplasmMcpd extends BrapiHasDocumentationURL {
+    groupId: string;
+    accessionNames: string[];
+    accessionNumber: string;
+    acquisitionDate: string;
+    acquisitionSourceCode: string;
+    alternateIDs: string[];
+    ancestralData: string;
+    biologicalStatusOfAccessionCode: string;
+    breedingInstitutes: BrapiInstitute;
+    collectingInfo: {
+        collectingDate: string;
+        collectingInstitutes: BrapiInstitute;
+        collectingMissionIdentifier: string;
+        collectingNumber: string;
+        collectors: string;
+        materialType: string;
+        collectingSite: BrapiCollectingSite
+    };
+    commonCropName: string;
+    countryOfOriginCode: string;
+    donorInfo: {
+        donorAccessionNumber: string;
+        donorInstitute: BrapiInstitute;
+        donationDate: string;
+    };
+    genus: string;
+    germplasmDbId: string;
+    germplasmPUI: string;
+    instituteCode: string;
+    mlsStatus: string;
+    remarks: string;
+    safetyDuplicateInstitutes: {
+        instituteCode: string;
+        instituteName: string;
+    }[];
+    species: string;
+    speciesAuthority: string;
+    storageTypeCodes: string[];
+    subtaxon: string;
+    subtaxonAuthority: string;
+    breederAccessionNumber: string;
+    breedingCreationYear: string;
+    catalogRegistrationYear: string;
+    catalogDeregistrationYear: string;
+    originLocationDbId: string;
+    originLocationName: string;
+    holdingInstitute: BrapiInstitute;
+    holdingGenbank: BrapiInstitute;
+    geneticNature: string;
+    presenceStatus: string;
+    distributorInfos: {
+        institute: BrapiInstitute;
+        accessionNumber: string;
+        distrubutionStatus: string;
+    };
+}
+
+export interface BrapiInstitute {
+    instituteName: string;
+    instituteCode: string;
+    acronym: string;
+    organisation: string;
+    instituteType: string;
+    webSite: string;
+    instituteAddress: string;
+    logo: string;
+}
+
+export interface BrapiCollectingSite {
+    locationDbId: string;
+    locationName: string;
+    coordinateUncertainty: string;
+    elevation: string;
+    georeferencingMethod: string;
+    latitudeDecimal: string;
+    latitudeDegrees: string;
+    locationDescription: string;
+    longitudeDecimal: string;
+    longitudeDegrees: string;
+    spatialReferenceSystem: string;
+}
+
 
 export interface BrapiTaxonIds {
     sourceName: string;
diff --git a/frontend/src/app/models/gnpis.model.ts b/frontend/src/app/models/gnpis.model.ts
index 93760346383a76dcc5e9d8ee4e46cd4a8dd40d01..8e9ebeb989ea827de823db84753534efa851154b 100644
--- a/frontend/src/app/models/gnpis.model.ts
+++ b/frontend/src/app/models/gnpis.model.ts
@@ -60,6 +60,12 @@ export interface Germplasm extends BrapiGermplasm {
     'schema:includedInDataCatalog': any;
 }
 
+
+/* export interface GermplasmMcpd extends  BrapiGermplasm {
+    mlsStatus: string;
+} */
+
+
 export interface Site {
     latitude: number;
     longitude: number;
@@ -125,4 +131,6 @@ export interface GermplasmSet {
         pui: string;
         name: string;
     };
+
+
 }
diff --git a/frontend/src/app/site-card/site-card.component.html b/frontend/src/app/site-card/site-card.component.html
index 928a341b2d5670ffa717231ab76633b78c06e467..0a8f72355067335c4139ef656b61aef8283672c0 100644
--- a/frontend/src/app/site-card/site-card.component.html
+++ b/frontend/src/app/site-card/site-card.component.html
@@ -52,7 +52,7 @@
 
         <faidare-card-row
           label="Coordinates precision"
-          [test]="location.additionalInfo && location.additionalInfo[' Coordinates precision']">
+          [test]="location.additionalInfo && location.additionalInfo['Coordinates precision']">
           <ng-template>
             {{ location.additionalInfo['Coordinates precision'] }}
           </ng-template>
@@ -76,7 +76,7 @@
 
         <faidare-card-row
           label="Geographical location"
-          [test]="location.additionalInfo && location.additionalInfo[' Geographical location']">
+          [test]="location.additionalInfo && location.additionalInfo['Geographical location']">
           <ng-template>
             {{ location.additionalInfo['Geographical location'] }}
           </ng-template>
@@ -84,7 +84,7 @@
 
         <faidare-card-row
           label="Country name"
-          [test]="location.countryName && !location.additionalInfo['Geographical location']">
+          [test]="location.countryName">
           <ng-template>
             {{ location.countryName }}
           </ng-template>
@@ -92,7 +92,7 @@
 
         <faidare-card-row
           label="Country code"
-          [test]="location.countryCode && location.additionalInfo && !location.additionalInfo['Geographical location']">
+          [test]="location.countryCode">
           <ng-template>
             {{ location.countryCode }}
           </ng-template>
@@ -113,7 +113,7 @@
 
         <faidare-card-row
           label="Exposure"
-          [test]="location.additionalInfo && location.additionalInfo[' Exposure']">
+          [test]="location.additionalInfo && location.additionalInfo['Exposure']">
           <ng-template>
             {{ location.additionalInfo['Exposure'] }}
           </ng-template>
@@ -121,7 +121,7 @@
 
         <faidare-card-row
           label="Topography"
-          [test]="location.additionalInfo && location.additionalInfo[' Topography']">
+          [test]="location.additionalInfo && location.additionalInfo['Topography']">
           <ng-template>
             {{ location.additionalInfo['Topography'] }}
           </ng-template>
@@ -129,7 +129,7 @@
 
         <faidare-card-row
           label="Environment type"
-          [test]="location.additionalInfo && location.additionalInfo[' Environment type']">
+          [test]="location.additionalInfo && location.additionalInfo['Environment type']">
           <ng-template>
             {{ location.additionalInfo['Environment type'] }}
           </ng-template>
@@ -137,7 +137,7 @@
 
         <faidare-card-row
           label="Distance to city"
-          [test]="location.additionalInfo && location.additionalInfo[' Distance to city']">
+          [test]="location.additionalInfo && location.additionalInfo['Distance to city']">
           <ng-template>
             {{ location.additionalInfo['Distance to city'] }}
           </ng-template>
@@ -145,7 +145,7 @@
 
         <faidare-card-row
           label="Direction from city"
-          [test]="location.additionalInfo && location.additionalInfo[' Direction from city']">
+          [test]="location.additionalInfo && location.additionalInfo['Direction from city']">
           <ng-template>
             {{ location.additionalInfo['Direction from city'] }}
           </ng-template>
@@ -153,7 +153,7 @@
 
         <faidare-card-row
           label="Comment"
-          [test]="location.additionalInfo && location.additionalInfo[' Comment']">
+          [test]="location.additionalInfo && location.additionalInfo['Comment']">
           <ng-template>
             {{ location.additionalInfo['Comment'] }}
           </ng-template>
diff --git a/scripts/harvest.sh b/scripts/harvest.sh
index 86379b8cb238ac2f34d1742b56385139555a1eaf..7f8672e4784179d5cf5ce8ab14def43b8d3eb267 100755
--- a/scripts/harvest.sh
+++ b/scripts/harvest.sh
@@ -7,8 +7,7 @@ ES_PORT="9200"
 ENV="dev"
 DOCUMENT_TYPES="all"
 
-#ALL_DOCUMENT_TYPES="germplasm germplasmMcpd germplasmAttribute germplasmPedigree germplasmProgeny location program study trial observationUnit datadiscovery"
-ALL_DOCUMENT_TYPES="germplasm germplasmAttribute germplasmPedigree germplasmProgeny location program study trial observationUnit datadiscovery"
+ALL_DOCUMENT_TYPES="germplasm germplasmMcpd germplasmAttribute germplasmPedigree germplasmProgeny location program study trial observationUnit datadiscovery"
 ALL_ENVS="dev beta staging int prod test"
 BASEDIR=$(dirname "$0")
 TMP_FILE="log.tmp"