diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql
index 82d0819100a10576237d58744d2fc698745d5b5a..5bf33828b4be1a39aabe551b03a00c09ac84cc59 100755
--- a/migration/20.10/2010.sql
+++ b/migration/20.10/2010.sql
@@ -36,6 +36,8 @@ ALTER TABLE users ADD COLUMN mode users_modes NOT NULL DEFAULT 'standard';
 UPDATE users set mode = 'root_invisible' WHERE user_id = 'superadmin';
 ALTER TABLE users DROP COLUMN IF EXISTS authorized_api;
 ALTER TABLE users ADD COLUMN authorized_api jsonb NOT NULL DEFAULT '[]';
+ALTER TABLE users DROP COLUMN IF EXISTS feature_tour;
+ALTER TABLE users ADD COLUMN feature_tour jsonb NOT NULL DEFAULT '[]';
 
 DO $$ BEGIN
     IF (SELECT count(column_name) from information_schema.columns where table_name = 'users' and column_name = 'loginmode') THEN
diff --git a/rest/index.php b/rest/index.php
index 6e78de30eea9777c619bbfa0bfda74ff4a7cfc09..14d9259b1f380742f68c596b48c91229d7e48fca 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -567,6 +567,7 @@ $app->put('/versionsUpdateSQL', \VersionUpdate\controllers\VersionUpdateControll
 $app->get('/currentUser/profile', \User\controllers\UserController::class . ':getProfile');
 $app->put('/currentUser/profile', \User\controllers\UserController::class . ':updateProfile');
 $app->put('/currentUser/profile/preferences', \User\controllers\UserController::class . ':updateCurrentUserPreferences');
+$app->put('/currentUser/profile/featureTour', \User\controllers\UserController::class . ':updateCurrentUserFeatureTour');
 $app->post('/currentUser/emailSignature', \User\controllers\UserController::class . ':createCurrentUserEmailSignature');
 $app->put('/currentUser/emailSignature/{id}', \User\controllers\UserController::class . ':updateCurrentUserEmailSignature');
 $app->delete('/currentUser/emailSignature/{id}', \User\controllers\UserController::class . ':deleteCurrentUserEmailSignature');
diff --git a/sql/structure.sql b/sql/structure.sql
index e03bcc9a5828bb867ff9f82f919d35381a5893b3..098b8946ab974373c265fdec50ccdd0926fd1101 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -229,8 +229,9 @@ CREATE TABLE users
   reset_token text,
   failed_authentication INTEGER DEFAULT 0,
   locked_until TIMESTAMP without time zone,
-    authorized_api jsonb NOT NULL DEFAULT '[]',
-    external_id jsonb DEFAULT '{}',
+  authorized_api jsonb NOT NULL DEFAULT '[]',
+  external_id jsonb DEFAULT '{}',
+  feature_tour jsonb NOT NULL DEFAULT '[]';
   CONSTRAINT users_pkey PRIMARY KEY (user_id),
   CONSTRAINT users_id_key UNIQUE (id)
 )
diff --git a/src/app/external/exportSeda/controllers/ExportSEDATrait.php b/src/app/external/exportSeda/controllers/ExportSEDATrait.php
index c5304a32f72b60edb3126cbfbd93d432c15c4dd1..75b428ab6c91e29fa70f06177f2d1145cdeaaecf 100644
--- a/src/app/external/exportSeda/controllers/ExportSEDATrait.php
+++ b/src/app/external/exportSeda/controllers/ExportSEDATrait.php
@@ -67,20 +67,10 @@ trait ExportSEDATrait
             return ['errors' => ['No senderOrgRegNumber found in config.json']];
         }
 
-        if (empty($args['data']['packageName'])) {
-            return ['errors' => ['packageName is empty']];
-        }
-        if (empty($args['data']['archivalAgreement'])) {
-            return ['errors' => ['archivalAgreement is empty']];
-        }
-        if (empty($args['data']['slipId'])) {
-            return ['errors' => ['slipId is empty']];
-        }
-        if (empty($args['data']['entityArchiveRecipient'])) {
-            return ['errors' => ['entityArchiveRecipient is empty']];
-        }
-        if (empty($args['data']['archiveDescriptionLevel'])) {
-            return ['errors' => ['archiveDescriptionLevel is empty']];
+        foreach (['packageName', 'archivalAgreement', 'slipId', 'entityArchiveRecipient', 'archiveDescriptionLevel'] as $value) {
+            if (empty($args['data'][$value])) {
+                return ['errors' => [$value . ' is empty']];
+            }
         }
 
         foreach ($args['data']['archives'] as $archiveUnit) {
diff --git a/src/app/registeredMail/controllers/RegisteredMailController.php b/src/app/registeredMail/controllers/RegisteredMailController.php
index 2c785d3ef143b8106220bbd040c05b7236fbe4f2..f49209b189fe3b38cf6a86fc77c3e7fce0d6f6f8 100644
--- a/src/app/registeredMail/controllers/RegisteredMailController.php
+++ b/src/app/registeredMail/controllers/RegisteredMailController.php
@@ -1084,8 +1084,10 @@ class RegisteredMailController
             $registeredMail[0]['number']      = $registeredMail[0]['alt_identifier'];
             $registeredMail[0]['issuingSite'] = $registeredMail[0]['issuing_site'];
             unset($registeredMail[0]['issuing_site']);
+
+            return $registeredMail[0];
         }
 
-        return $registeredMail[0];
+        return [];
     }
 }
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index 6a3e73df43ec4097d80e000c66b01058a419ccc8..4e9a368b5f45b9cb5162ccbca32143a6e5ea7995 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -527,9 +527,10 @@ class UserController
 
     public function getProfile(Request $request, Response $response)
     {
-        $user = UserModel::getById(['id' => $GLOBALS['id'], 'select' => ['id', 'user_id', 'firstname', 'lastname', 'phone', 'mail', 'initials', 'preferences', 'external_id', 'status', 'mode']]);
+        $user = UserModel::getById(['id' => $GLOBALS['id'], 'select' => ['id', 'user_id', 'firstname', 'lastname', 'phone', 'mail', 'initials', 'preferences', 'external_id', 'status', 'mode', 'feature_tour']]);
         $user['external_id']        = json_decode($user['external_id'], true);
         $user['preferences']        = json_decode($user['preferences'], true);
+        $user['featureTour']        = json_decode($user['feature_tour'], true);
         $user['signatures']         = UserSignatureModel::getByUserSerialId(['userSerialid' => $user['id']]);
         $user['emailSignatures']    = UserEmailSignatureModel::getByUserId(['userId' => $GLOBALS['id']]);
         $user['groups']             = UserModel::getGroupsByLogin(['login' => $user['user_id']]);
@@ -604,6 +605,33 @@ class UserController
         return $response->withStatus(204);
     }
 
+    public function updateCurrentUserFeatureTour(Request $request, Response $response)
+    {
+        $body = $request->getParsedBody();
+
+        if (!Validator::notEmpty()->validate($body['featureTour'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Body featureTour is empty']);
+        }
+
+        UserModel::update([
+            'set'   => [
+                'feature_tour' => json_encode($body['featureTour'])
+            ],
+            'where' => ['id = ?'],
+            'data'  => [$GLOBALS['id']]
+        ]);
+
+        HistoryController::add([
+            'tableName'    => 'users',
+            'recordId'     => $GLOBALS['id'],
+            'eventType'    => 'UP',
+            'eventId'      => 'userModification',
+            'info'         => _USER_FEATURE_TOUR_UPDATED . " {$user['firstname']} {$user['lastname']}"
+        ]);
+
+        return $response->withStatus(204);
+    }
+
     public function updateCurrentUserPreferences(Request $request, Response $response)
     {
         $body = $request->getParsedBody();
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index ba7fa2c1b22ca4812a14053555cce963f5daaebd..211b7d9173323228d4700505d42ca5cf90dfb2cc 100755
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -417,6 +417,7 @@ define("_CANNOT_SYNCHRONIZE_M2M_ANNUARY", "Contact cannot be added in M2M annuar
 define("_DATE_LOCALE", "en_US.utf8");
 
 define("_USER_PREFERENCE_UPDATED", "User preferences updated");
+define("_USER_FEATURE_TOUR_UPDATED", "One or some steps done in the feature tour");
 
 define("_NO_SENDERS", "No sender linked to resource");
 
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index e8ea8885c7f75867a755e3da541f76e361e4e4cd..0ee2a8697a443403f05eaaa406788cab44530ba3 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -417,6 +417,7 @@ define("_CANNOT_SYNCHRONIZE_M2M_ANNUARY", "Le contact ne peut pas être ajouté
 define("_DATE_LOCALE", "fr_FR.utf8");
 
 define("_USER_PREFERENCE_UPDATED", "Préférences utilisateur modifiées");
+define("_USER_FEATURE_TOUR_UPDATED", "Une ou plusieurs étapes du tutorial a été fait");
 
 define("_NO_SENDERS", "Aucun expéditeur lié au courrier");
 
diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php
index f1011adde6df31de83f22f6df078ebe2b4695108..4febea0ff8533ec415a7afd10d203159840e8244 100755
--- a/src/core/lang/lang-nl.php
+++ b/src/core/lang/lang-nl.php
@@ -418,6 +418,7 @@ define("_CANNOT_SYNCHRONIZE_M2M_ANNUARY", "Contact can not be added in M2M annua
 define("_DATE_LOCALE", "en_US.utf8");
 
 define("_USER_PREFERENCE_UPDATED", "User preferences updated"); //TO TRANSLATE
+define("_USER_FEATURE_TOUR_UPDATED", "One or some steps done in the feature tour"); //TO TRANSLATE
 
 define("_NO_SENDERS", "No sender linked to resource"); //TO TRANSLATE