diff --git a/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java b/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java
index b37b9dbc41491c70ade437818f7be63439da474f..e409e89b72c48da40166df1881032d5035baf762 100644
--- a/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java
+++ b/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java
@@ -65,6 +65,7 @@ import ch.unige.solidify.exception.SolidifyResourceNotFoundException;
 import ch.unige.solidify.exception.SolidifyRuntimeException;
 import ch.unige.solidify.model.oai.OAIMetadataPrefix;
 import ch.unige.solidify.model.oai.OAIPMH;
+import ch.unige.solidify.model.oai.OAIToken;
 import ch.unige.solidify.model.xml.oai.v2.OAIPMHerrorcodeType;
 import ch.unige.solidify.model.xml.oai.v2.OAIPMHtype;
 import ch.unige.solidify.rest.Tool;
@@ -103,7 +104,7 @@ public class OAIProviderController implements ControllerWithHateoasHome {
           // ------------
           // https://www.openarchives.org/OAI/openarchivesprotocol.html#GetRecord
           oai.setGetRecord(this.oaiService.getRecord(this.getRootUrl(request), identifier, metadataPrefix));
-          final OAIMetadataPrefix oaiMetadataPrefixForRecord = this.oaiService.getOAIMetadataPrefix(metadataPrefix);
+          final OAIMetadataPrefix oaiMetadataPrefixForRecord = this.getOAIMetadataPrefix(metadataPrefix, token, oaiUrl);
           schemaLocations.put(oaiMetadataPrefixForRecord.getSchemaNamespace(), oaiMetadataPrefixForRecord.getSchemaUrl().toString());
           break;
         case IDENTIFY:
@@ -135,7 +136,8 @@ public class OAIProviderController implements ControllerWithHateoasHome {
           // ------------
           // https://www.openarchives.org/OAI/openarchivesprotocol.html#ListRecords
           oai.setListRecords(this.oaiService.listRecords(this.getBaseUrl(request), metadataPrefix, from, until, set, token));
-          final OAIMetadataPrefix oaiMetadataPrefixForList = this.oaiService.getOAIMetadataPrefix(metadataPrefix);
+          // OAI metadata prefix
+          final OAIMetadataPrefix oaiMetadataPrefixForList = this.getOAIMetadataPrefix(metadataPrefix, token, oaiUrl);
           schemaLocations.put(oaiMetadataPrefixForList.getSchemaNamespace(), oaiMetadataPrefixForList.getSchemaUrl().toString());
           break;
         case LIST_SETS:
@@ -293,4 +295,16 @@ public class OAIProviderController implements ControllerWithHateoasHome {
     baseUrl = baseUrl.substring(0, baseUrl.indexOf(OAIConstants.OAI_PROVIDER + SolidifyConstants.URL_SEP + OAIConstants.OAI_RESOURCE));
     return baseUrl;
   }
+
+  private OAIMetadataPrefix getOAIMetadataPrefix(String metadataPrefix, String token, String oaiUrl) {
+    if (metadataPrefix != null) {
+      return this.oaiService.getOAIMetadataPrefix(metadataPrefix);
+    } else if (token != null) {
+      OAIToken oaiToken = new OAIToken();
+      oaiToken.setToken(token);
+      return this.oaiService.getOAIMetadataPrefix(oaiToken.getOaiParameters().getMetadataPrefix());
+    } else {
+      throw new OAIException(OAIPMHerrorcodeType.NO_METADATA_FORMATS, oaiUrl);
+    }
+  }
 }
diff --git a/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java b/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java
index 354fb8bdc6072846aa422c6e12c85026eaa89c10..6dc2644982a0545231511afe714c271324429cff 100644
--- a/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java
+++ b/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java
@@ -297,6 +297,7 @@ public class OAIService {
     for (final OAIRecord oaiRecord : list) {
       recList.getRecord().add(this.getRecord(baseUrl, oaiRecord, oaiToken.getOaiParameters().getMetadataPrefix()));
     }
+
     if (collection.getPage().hasNext()) {
       recList.setResumptionToken(oaiToken.getToken(collection.getPage().getTotalItems(), collection.getPage().getPreviousItems()));
     }