diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3f0260a5e94404fe6ddbf5d540461d019fd2f95a..0099f0ec3f6aa0cd64b6b3dc6813d59eab718c94 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
 # CHANGELOG
 
+## Version 2.9.5
+ - `Fixed` Mauvais affichage dans la liste de sélection des services versants pour la recherche dans le registre
+ - `Fixed` Erreur dans la la XSLT SEDA 0.2 vers 2.1 produisant des structures AppraisalRule et AccessRule multiples dans l'en tête du bordereau
+ - `Added` Prise en compte dans le contrôleur de réception des transferts SEDA 2 des algorithmes de condensat dans un format URI (exemple http://www.w3.org/2001/04/xmlenc#sha256)
+ - `Added` Action de changement de service producteur depuis la liste de résultats du registre, liée au droits de l'utilisateur
+
+## Version 2.9.4
+ - `Changed` La recherche dans le registre des entrées n'affiche désormais plus les archives de journaux, accessibles dans l'écran de recherche dédié.
+ - `Changed` Evolutions à la XSLT SEDA 0.2 vers 2.1 afin de prendre en compte les métadonnées de gestion au niveau du paquet d'information
+ - `Changed` Dans la liste de résultats de recherche du registre des entrées, seules les archives à terme de leur DUA et dont le sort final est la destruction sont surlignées en rouge.
+Les archives dont le sort final est la conservation ne sont plus indiquées, même si elles nécessitent un transfert vers un SAE définitif.
+ - `Changed` Ajout du messages de détection de format des SIP SEDA 2
+ - `Changed` Ajout du nom de fichier dans les messages de détection et validation de format des SIP SEDA 1 et 2
+ - `Fixed` Fichier de profil non trouvé lorsqu'un autre fichier du même nom mais d'extension différente était présent dans le répertoire
+
 ## Version 2.9.3
  - `Fixed` Description de règle de communicabilité absente pour durée illimitée (AR062)
 
diff --git a/MIGRATION.md b/MIGRATION.md
index d30158821f523cf60b0adb27adf7b9827d9d5a4d..c6ae880b4d31d26c427e883b6d7a9fd12d4c099e 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -1,3 +1,18 @@
+# Migration 2.8 vers 2.9.4
+
+Dans la section [medona], modification de la directive `packageSchemas` afin d'utiliser l'espace de nom SEDA 2.1 au lieu de SEDA 1 : 
+
+```
+packageSchemas = "{
+    'seda2' : {
+        'label' : 'SEDA 2.1',
+        'xmlNamespace' : 'fr:gouv:culture:archivesdefrance:seda:v2.1',
+        'phpNamespace' : 'seda2',
+        'presenter' : 'seda2/message'
+    }
+}"
+```
+
 # Migration 2.7 vers 2.8
 
 ## Vhost
diff --git a/bundle/archivesPubliques/Controller/content.php b/bundle/archivesPubliques/Controller/content.php
index c2988eb5a9f1a11ff94ece9900380c99cffac777..456b7e67e7f6290f03bda8901f58cf80016c87d4 100644
--- a/bundle/archivesPubliques/Controller/content.php
+++ b/bundle/archivesPubliques/Controller/content.php
@@ -517,7 +517,7 @@ class content implements \bundle\recordsManagement\Controller\archiveDescription
             $term,
             $keyword
         );
-
+        
         $jsonContentDescriptions = $this->sdoFactory->find("recordsManagement/archive", $jsonQueryString, $jsonQueryParams, '>depositDate', 0, $maxResults);
 
         return array_merge($tableContentDescriptions, $jsonContentDescriptions);
@@ -848,7 +848,7 @@ class content implements \bundle\recordsManagement\Controller\archiveDescription
         $keyword = array()
     ) {
         //$queryParts['json'] = "(descriptionClass = 'seda2' || descriptionClass = 'seda2/Content')";
-        $queryParts['json'] = "(descriptionClass != 'archivesPubliques/content' || descriptionClass = null)";
+        $queryParts['json'] = "(descriptionClass != 'archivesPubliques/content' && descriptionClass != 'recordsManagement/log')";
 
         if (is_array($keyword) && !empty($keyword)) {
             foreach ($keyword as $keywordObj) {
diff --git a/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl b/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl
index e014ac209777da7e0f4276a673c8a6db1dca9ce1..8c683ccc68c46cf4276e24d0d7f0959ae195f5cb 100644
--- a/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl
+++ b/bundle/archivesPubliques/Resources/xslt/restitution_v02totransfer_v20.xsl
@@ -39,16 +39,16 @@
                 </Signature>
             </xsl:if>
 
-            <xsl:if test="seda:Contains/seda:ArchivalAgreement">
+            <xsl:if test="seda:Archive/seda:ArchivalAgreement">
                 <ArchivalAgreement>
                     <xsl:attribute name="schemeAgencyName">
                         <xsl:value-of
-                            select="seda:Contains/seda:ArchivalAgreement/@schemeAgencyName"/>
+                            select="seda:Archive/seda:ArchivalAgreement/@schemeAgencyName"/>
                     </xsl:attribute>
                     <xsl:attribute name="schemeName">
-                        <xsl:value-of select="seda:Contains/seda:ArchivalAgreement/@schemeName"/>
+                        <xsl:value-of select="seda:Archive/seda:ArchivalAgreement/@schemeName"/>
                     </xsl:attribute>
-                    <xsl:value-of select="seda:Contains/seda:ArchivalAgreement"/>
+                    <xsl:value-of select="seda:Archive/seda:ArchivalAgreement"/>
                 </ArchivalAgreement>
             </xsl:if>
 
@@ -60,25 +60,19 @@
                     <xsl:apply-templates select="//seda:ArchiveRestitution/seda:Archive"/>
                 </DescriptiveMetadata>
                 <ManagementMetadata>
-                    <xsl:if test="seda:Contains/seda:ArchivalProfile">
+                    <xsl:if test="seda:Archive/seda:ArchivalProfile">
                         <ArchivalProfile>
                             <xsl:attribute name="schemeAgencyName">
                                 <xsl:value-of
-                                    select="seda:Contains/seda:ArchivalProfile/@schemeAgencyName"/>
+                                    select="seda:Archive/seda:ArchivalProfile/@schemeAgencyName"/>
                             </xsl:attribute>
                             <xsl:attribute name="schemeName">
                                 <xsl:value-of
-                                    select="seda:Contains/seda:ArchivalProfile/@schemeName"/>
+                                    select="seda:Archive/seda:ArchivalProfile/@schemeName"/>
                             </xsl:attribute>
-                            <xsl:value-of select="seda:Contains/seda:ArchivalProfile"/>
+                            <xsl:value-of select="seda:Archive/seda:ArchivalProfile"/>
                         </ArchivalProfile>
                     </xsl:if>
-                    <xsl:if test="seda:Contains/seda:Appraisal">
-                        <xsl:apply-templates select="seda:Contains/seda:Appraisal"/>
-                    </xsl:if>
-                    <xsl:if test="seda:Contains/seda:AccessRestriction">
-                        <xsl:apply-templates select="seda:Contains/seda:AccessRestriction"/>
-                    </xsl:if>
                 </ManagementMetadata>
             </DataObjectPackage>
 			<ArchivalAgency>
diff --git a/bundle/seda/Controller/ArchiveTransfer.php b/bundle/seda/Controller/ArchiveTransfer.php
index 33b8aad1af03d5b8c9eb3fb9cc962863d399e1df..a6ba733cac9baa2bb916fa791e00dba10cecb9fb 100644
--- a/bundle/seda/Controller/ArchiveTransfer.php
+++ b/bundle/seda/Controller/ArchiveTransfer.php
@@ -177,6 +177,7 @@ class ArchiveTransfer extends abstractMessage implements \bundle\medona\Controll
     public function validate($message, $archivalAgreement = null)
     {
         $this->errors = array();
+        $this->infos = array();
         $this->replyCode = null;
 
         $this->loadMessage($message);
@@ -277,72 +278,46 @@ class ArchiveTransfer extends abstractMessage implements \bundle\medona\Controll
 
     protected function validateProfile($message, $archivalProfileReference)
     {
-        /*if (!isset($message->object->archive[0]->archivalProfile) || $message->object->archive[0]->archivalProfile->value == "") {
-            $this->sendError("203", "Le profil d'archive n'est pas renseigné");
-
-            return;
-        }*/
         $errors = array();
 
-        $profileFiles = glob($this->profilesDirectory.DIRECTORY_SEPARATOR.$archivalProfileReference.'.*');
-        if (count($profileFiles) == 0) {
-            $this->sendError("203", "Le profil d'archive identifié par '$archivalProfileReference' n'est pas référencé dans le système.");
-
-            return;
-        }
-
-        foreach ($profileFiles as $profileFile) {
-            $extension = pathinfo($profileFile, \PATHINFO_EXTENSION);
+        $profilePath = $this->profilesDirectory.DIRECTORY_SEPARATOR.$archivalProfileReference;
 
-            switch ($extension) {
-                case 'rng':
-                    //if ($validationMode == 'jing') {
-                    if (true) {
-                        $jing = \laabs::newService('dependency/xml/plugins/jing/jing');
-                        $xmlFile = $this->message->path;
-                        $valid = $jing->validate($profileFile, $xmlFile);
-                        if (!$valid) {
-                            $this->sendError("203");
+        if (file_exists($profilePath . '.rng')) {
+            //if ($validationMode == 'jing') {
+            //if (true) {
+                $jing = \laabs::newService('dependency/xml/plugins/jing/jing');
+                $valid = $jing->validate($profilePath.'.rng', $this->message->path);
+                if (!$valid) {
+                    $this->sendError("203");
 
-                            foreach ($jing->getErrors() as $errorMessage) {
-                                $this->errors[] = new \core\Error($errorMessage);
-                            }
-                        }
-                    } else {
-                        libxml_use_internal_errors(true);
-                        $valid = $message->xml->relaxNGValidate($profileFile);
-                        if ($valid == false) {
-                            $this->sendError("203");
-                            foreach (libxml_get_errors() as $libxmlError) {
-                                $this->errors[] = new \core\Error($libxmlError->message, null, $libxmlError->code);
-                            }
-                        }
-                        libxml_clear_errors();
-                        libxml_use_internal_errors(false);
+                    foreach ($jing->getErrors() as $errorMessage) {
+                        $this->errors[] = new \core\Error($errorMessage);
                     }
-                    break;
-
-                case 'xsd':
-                    libxml_use_internal_errors(true);
-                    $valid = $message->xml->schemaValidate($profileFile);
-                    if ($valid == false) {
-                        foreach (libxml_get_errors() as $libxmlError) {
-                            $this->errors[] = new \core\Error($libxmlError->message, null, $libxmlError->code);
-                        }
-                    }
-                    libxml_clear_errors();
-                    libxml_use_internal_errors(false);
-                    break;
-
-                default:
-                    $path = $this->profilesDirectory.DIRECTORY_SEPARATOR.$archivalprofileReference;
-                    // if a profile were previously saved without extension
-                    if (empty($extension) && (file_exists($path . '.rng') || file_exists($path . '.xsd'))) {
-                        break;
+                }
+            /*} else {
+                libxml_use_internal_errors(true);
+                $valid = $message->xml->relaxNGValidate($profileFile);
+                if ($valid == false) {
+                    $this->sendError("203");
+                    foreach (libxml_get_errors() as $libxmlError) {
+                        $this->errors[] = new \core\Error($libxmlError->message, null, $libxmlError->code);
                     }
-                    $this->sendError("203", "Le profil d'archive identifié par '$archivalProfileReference' est dans un format non géré par le système.");
-                    break;
+                }
+                libxml_clear_errors();
+                libxml_use_internal_errors(false);
+            }*/
+        } elseif (file_exists($profilePath . '.xsd')) {
+            libxml_use_internal_errors(true);
+            $valid = $message->xml->schemaValidate($profilePath.'.xsd');
+            if ($valid == false) {
+                foreach (libxml_get_errors() as $libxmlError) {
+                    $this->errors[] = new \core\Error($libxmlError->message, null, $libxmlError->code);
+                }
             }
+            libxml_clear_errors();
+            libxml_use_internal_errors(false);
+        } else {
+            $this->sendError("203", "Le fichier de profil d'archive identifié par '$archivalProfileReference' n'existe pas.");
         }
     }
 
@@ -441,14 +416,14 @@ class ArchiveTransfer extends abstractMessage implements \bundle\medona\Controll
                             $fileInfo->format = $format;
 
                             if (isset($sentPuid) && $format->puid != $sentPuid) {
-                                $this->sendError("205", "Format de document '$filename' non conforme au format déclaré.");
+                                $this->sendError("205", "Format de document '".$filename."' non conforme au format déclaré.");
                             }
                         }
                     } catch (\Exception $e) {
-                        $this->sendError("205", "Le format du document '$filename' n'a pas pu être déterminé");
+                        $this->sendError("205", "Le format du document '".$filename."' n'a pas pu être déterminé");
                     }
 
-                    $this->infos[] = (string)\laabs::newDateTime() . ": Détection du format par Maarch FID";
+                    $this->infos[] = "Détection du format du document '".$filename."'' par Maarch FID";
                 } else {
                     if (isset($attachment->format)) {
                         $puid = $attachment->format;
@@ -461,15 +436,15 @@ class ArchiveTransfer extends abstractMessage implements \bundle\medona\Controll
                     $validation = $formatController->validateFormat($filepath);
                     if (!$validation !== true && is_array($validation)) {
                         $message = implode(', ', reset($validation));
-                        $this->sendError("307", "Le format du document '$filename' n'est pas valide : " . $message);
+                        $this->sendError("307", "Le format du document '".$filename."' n'est pas valide : " . $message);
                     }
 
-                    $this->infos[] = (string)\laabs::newDateTime() . ": Validation du format par JHOVE 1.11";
+                    $this->infos[] = "Validation du format du document '".$filename."'' par JHOVE 1.11";
                 }
 
 
                 if (isset($allowedFormats) && (count($allowedFormats) && isset($puid) && !in_array($puid, $allowedFormats))) {
-                    $this->sendError("307", "Le format du document '$filename' (" . $puid . ") n'est pas autorisé par l'accord de versement.");
+                    $this->sendError("307", "Le format du document '".$filename."' (".$puid.") n'est pas autorisé par l'accord de versement.");
                 }
 
                 $attachmentId++;
diff --git a/bundle/seda2/Controller/ArchiveTransferReceptionTrait.php b/bundle/seda2/Controller/ArchiveTransferReceptionTrait.php
index d161e289e572b0d4d1213e614129077faf65a9d4..d06a36d1554d1210e2fe0235635c21047cd18121 100644
--- a/bundle/seda2/Controller/ArchiveTransferReceptionTrait.php
+++ b/bundle/seda2/Controller/ArchiveTransferReceptionTrait.php
@@ -170,6 +170,10 @@ trait ArchiveTransferReceptionTrait
                 // Validate hash
                 $messageDigest = $binaryDataObject->messageDigest;
 
+                if (strpos($messageDigest->algorithm, "#") !== false) {
+                    $messageDigest->algorithm = substr($messageDigest->algorithm, strrpos($messageDigest->algorithm, '#') + 1);
+                }
+                
                 if (!in_array($messageDigest->algorithm, ['sha3-224', 'sha3-256', 'sha3-384', 'sha3-512'])) {
                     $messageDigest->algorithm = str_replace('-', '', $messageDigest->algorithm);
                 }
diff --git a/bundle/seda2/Controller/ArchiveTransferValidationTrait.php b/bundle/seda2/Controller/ArchiveTransferValidationTrait.php
index 40394fe538bd293c1b46359f1275ceb20baeb149..e397cbcf5a2770f9a280269fa24a3ebee84db2f9 100644
--- a/bundle/seda2/Controller/ArchiveTransferValidationTrait.php
+++ b/bundle/seda2/Controller/ArchiveTransferValidationTrait.php
@@ -37,6 +37,7 @@ trait ArchiveTransferValidationTrait
     public function validate($message, $archivalAgreement = null)
     {
         $this->errors = array();
+        $this->infos = array();
         $this->replyCode = null;
 
         $this->loadMessage($message);
@@ -312,6 +313,8 @@ trait ArchiveTransferValidationTrait
                     } else {
                         $puid = $format->puid;
                         $binaryDataObject->formatIdentification->formatId = $puid;
+
+                        $this->infos[] = "Détection du format du document '".$binaryDataObject->uri."'' par Maarch FID";
                     }
                 }
 
@@ -326,7 +329,7 @@ trait ArchiveTransferValidationTrait
                     if (!$validation !== true && is_array($validation)) {
                         $this->sendError("307", "Le format du document '".$binaryDataObject->uri."' n'est pas valide : ".implode(', ', $validation));
                     }
-                    $this->infos[] = (string) \laabs::newDateTime().": Validation du format par JHOVE 1.11";
+                    $this->infos[] = "Validation du format du document '".$binaryDataObject->uri."'' par JHOVE 1.11";
                 }
             }
         }
diff --git a/data/conf/configuration.ini.default b/data/conf/configuration.ini.default
index abe1ee4573028217432b2a83416b9c1e25513dfa..05d67b872541dbe114be5ad8e8ccde6907eee009 100644
--- a/data/conf/configuration.ini.default
+++ b/data/conf/configuration.ini.default
@@ -208,7 +208,7 @@ packageSchemas = "{
     },
     'seda2' : {
         'label' : 'SEDA 2.1',
-        'xmlNamespace' : 'fr:gouv:culture:archivesdefrance:seda:v2.0',
+        'xmlNamespace' : 'fr:gouv:culture:archivesdefrance:seda:v2.1',
         'phpNamespace' : 'seda2',
         'presenter' : 'seda2/message'
     }
@@ -987,7 +987,22 @@ conversionServices = "[
         'softwareVersion' : '10.0',
         'inputFormats'    : ['fmt/14', 'fmt/15', 'fmt/16', 'fmt/17', 'fmt/18', 'fmt/19', 'fmt/20', 'fmt/276', 'fmt/1129'],
         'outputFormats'   : {
-            'fmt/95' : {}
+            'fmt/95' : {
+                '-dPDFSETTINGS' : '/prepress',
+                '-dNOOUTERSAVE' : null,
+                '-sColorConversionStrategy' : 'UseDeviceIndependentColor',
+                '-sProcessColorModel' : 'DeviceRGB',
+                '-dPDFA' : null,
+                '-sPDFACompatibilityPolicy' : '1'
+            },
+            'fmt/480' : {
+                '-dPDFSETTINGS' : '/prepress',
+                '-dNOOUTERSAVE' : null,
+                '-sColorConversionStrategy' : 'UseDeviceIndependentColor',
+                '-sProcessColorModel' : 'DeviceRGB',
+                '-dPDFA' : '3',
+                '-sPDFACompatibilityPolicy' : '1'
+            }
         }
     }
 ]"
diff --git a/data/sql/pgsql/default.sql b/data/sql/pgsql/default.sql
index 128ed8363aa8be446d4f8271e5a61ad203c3dbe9..68b636d29d28ed41ec750c5d2c0688fc784b45f1 100644
--- a/data/sql/pgsql/default.sql
+++ b/data/sql/pgsql/default.sql
@@ -98,7 +98,7 @@ INSERT INTO "lifeCycle"."eventFormat" ("type", "format", "notification", "messag
     ('recordsManagement/unfreeze', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber originatorArchiveId', FALSE, 'Dégel de l''archive %6$s'),
     ('recordsManagement/resourceDestruction', 'resId hashAlgorithm hash address originatorOrgRegNumber archiverOrgRegNumber originatorArchiveId', FALSE, 'Destruction de la ressource %9$s'),
     ('recordsManagement/depositNewResource', 'resId hashAlgorithm hash address originatorOrgRegNumber depositorOrgRegNumber archiverOrgRegNumber format size originatorArchiveId', FALSE, 'Dépôt d''une nouvelle ressource dans l''archive %6$s'),
-    ('recordsManagement/completenessCheck', 'lastCheckedResId lastCheckedResCreated repositoryReference resourcesToCheck checkedResources failed timeout timeoutError', 'Contrôle d''exhaustivité des ressources', false)
+    ('recordsManagement/completenessCheck', 'lastCheckedResId lastCheckedResCreated repositoryReference resourcesToCheck checkedResources failed timeout timeoutError', 'Contrôle d''exhaustivité des ressources', false),
 
     ('medona/sending', 'type senderOrgRegNumber senderOrgName recipientOrgRegNumber recipientOrgName reference code info', FALSE, 'Envoi du message %14$s de type %9$s de %11$s (%10$s) à %13$s (%12$s)'),
     ('medona/reception', 'type senderOrgRegNumber senderOrgName recipientOrgRegNumber recipientOrgName reference', FALSE, 'Réception du message %14$s de type %9$s de %11$s (%10$s) par %13$s (%12$s)'),
diff --git a/presentation/maarchRM/Presenter/archivesPubliques/content.php b/presentation/maarchRM/Presenter/archivesPubliques/content.php
index 6f6bd1f1e9924e39baadd25ff93ce0774c2f0d16..e6504ad4c4a3758ca982a05a0edccfe8da68a5fc 100644
--- a/presentation/maarchRM/Presenter/archivesPubliques/content.php
+++ b/presentation/maarchRM/Presenter/archivesPubliques/content.php
@@ -221,10 +221,10 @@ class content
 
                         $userOrgs[(string) $orgObject->orgId] = new \stdClass();
                         $userOrgs[(string) $orgObject->orgId]->displayName = $orgObject->displayName;
-                        $userOrgs[(string) $orgObject->orgId]->originators = [];
+                        $userOrgs[(string) $orgObject->orgId]->{$role} = [];
                     }
-                    if (!in_array($orgUnit, $userOrgs[(string) $orgObject->orgId]->originators)) {
-                        $userOrgs[(string)$orgObject->orgId]->originators[] = $orgUnit;
+                    if (!in_array($orgUnit, $userOrgs[(string) $orgObject->orgId]->{$role})) {
+                        $userOrgs[(string)$orgObject->orgId]->{$role}[] = $orgUnit;
                     }
                 }
             }
@@ -304,7 +304,7 @@ class content
             if ($archive->status == 'disposed' || $archive->status == 'error' || $archive->status == 'restituted' || $archive->status == 'transfered') {
                 $archive->statusModif = true;
             }
-            if (!empty($archive->disposalDate) && $archive->disposalDate <= $currentDate) {
+            if (!empty($archive->disposalDate) && $archive->disposalDate <= $currentDate && $archive->finalDisposition == 'destruction') {
                 $archive->disposable = true;
             }
             if (isset($originators[$archive->originatorOrgRegNumber])) {
@@ -437,6 +437,7 @@ class content
         $hasDeliveryPrivilege = \laabs::callService('auth/userAccount/readHasprivilege', "delivery/deliveryRequest");
         $hasTransferPrivilege = \laabs::callService('auth/userAccount/readHasprivilege', "definitiveTransfer/outgoingTransferSend");
         $hasModificationRequestPrivilege = \laabs::callService('auth/userAccount/readHasprivilege', "archiveManagement/modificationRequestSend");
+        $hasModificationOriginatorPrivilege = \laabs::callService('auth/userAccount/readHasprivilege', "archiveManagement/adminOriginator");
         
         $this->view->setSource('hasModificationPrivilege', $hasModificationPrivilege);
         $this->view->setSource('hasIntegrityCheckPrivilege', $hasIntegrityCheckPrivilege);
@@ -446,6 +447,7 @@ class content
         $this->view->setSource('hasDeliveryPrivilege', $hasDeliveryPrivilege);
         $this->view->setSource('hasTransferPrivilege', $hasTransferPrivilege);
         $this->view->setSource('hasModificationRequestPrivilege', $hasModificationRequestPrivilege);
+        $this->view->setSource('hasModificationOriginatorPrivilege', $hasModificationOriginatorPrivilege);
     }
 
     /**