diff --git a/rest/index.php b/rest/index.php
index 8fd578d8236f6bce6403440e9ed89334cdb9f0b1..d5976395c2a01f69d21522b18f8d5c0baa37b253 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -270,6 +270,7 @@ $app->delete('/users/{id}/groups/{groupId}', \User\controllers\UserController::c
 $app->post('/users/{id}/entities', \User\controllers\UserController::class . ':addEntity');
 $app->put('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':updateEntity');
 $app->put('/users/{id}/entities/{entityId}/primaryEntity', \User\controllers\UserController::class . ':updatePrimaryEntity');
+$app->get('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':isEntityDeletable');
 $app->delete('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':deleteEntity');
 $app->post('/users/{id}/signatures', \User\controllers\UserController::class . ':addSignature');
 $app->put('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':updateSignature');
diff --git a/src/app/basket/models/BasketModelAbstract.php b/src/app/basket/models/BasketModelAbstract.php
index 6b9987db8f226847e1f5d839da814db0077d3872..0f0186a1332ef0ec21cba159b51f546915c47522 100644
--- a/src/app/basket/models/BasketModelAbstract.php
+++ b/src/app/basket/models/BasketModelAbstract.php
@@ -385,7 +385,6 @@ class BasketModelAbstract
         ]);
 
         foreach ($aBaskets as $key => $value) {
-            $aBaskets[$key]['basketOwnerId'] = UserModel::getByUserId(['select' => ['id'], 'userId' => $value['user_abs']])['id'];
             $aBaskets[$key]['userToDisplay'] = UserModel::getLabelledUserById(['userId' => $value['user_abs']]);
         }
 
diff --git a/src/app/entity/models/ListInstanceModelAbstract.php b/src/app/entity/models/ListInstanceModelAbstract.php
index d644ed2ceb40fe7851fb3599c6f868dd98e4a742..3437a2f46f2f8db54de55fe3940e8eb96593a9a8 100644
--- a/src/app/entity/models/ListInstanceModelAbstract.php
+++ b/src/app/entity/models/ListInstanceModelAbstract.php
@@ -22,13 +22,16 @@ class ListInstanceModelAbstract
     public static function get(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['select']);
-        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']);
+        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data', 'orderBy']);
+        ValidatorModel::intType($aArgs, ['limit']);
 
         $aListInstances = DatabaseModel::select([
             'select'    => $aArgs['select'],
             'table'     => ['listinstance'],
             'where'     => $aArgs['where'],
-            'data'      => $aArgs['data']
+            'data'      => $aArgs['data'],
+            'order_by'  => $aArgs['orderBy'],
+            'limit'     => $aArgs['limit']
         ]);
 
         return $aListInstances;
@@ -59,7 +62,7 @@ class ListInstanceModelAbstract
         ValidatorModel::notEmpty($aArgs, ['set', 'where', 'data']);
         ValidatorModel::arrayType($aArgs, ['set', 'where', 'data']);
 
-        DatabaseModel::delete([
+        DatabaseModel::update([
             'table' => 'listinstance',
             'set'   => $aArgs['set'],
             'where' => $aArgs['where'],
@@ -90,4 +93,20 @@ class ListInstanceModelAbstract
 
         return $aListinstance[0];
     }
+
+    public static function getWithConfidentiality(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['entityId', 'userId']);
+        ValidatorModel::stringType($aArgs, ['entityId', 'userId']);
+        ValidatorModel::arrayType($aArgs, ['select']);
+
+        $aListInstances = DatabaseModel::select([
+            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
+            'table'     => ['listinstance, res_letterbox, mlb_coll_ext'],
+            'where'     => ['listinstance.res_id = res_letterbox.res_id', 'mlb_coll_ext.res_id = res_letterbox.res_id', 'confidentiality = ?', 'destination = ?', 'item_id = ?', 'closing_date is null'],
+            'data'      => ['Y', $aArgs['entityId'], $aArgs['userId']]
+        ]);
+
+        return $aListInstances;
+    }
 }
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index ca951afdb19428b6c0a6f5618b4dfbd91ceb02f6..553a83dbaec7cb224be9dfae38573baa1ac97038 100644
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -16,6 +16,7 @@ namespace User\controllers;
 
 use Basket\models\BasketModel;
 use Basket\models\GroupBasketModel;
+use Entity\models\ListInstanceModel;
 use Group\models\ServiceModel;
 use Entity\models\EntityModel;
 use Entity\models\ListTemplateModel;
@@ -24,6 +25,7 @@ use History\controllers\HistoryController;
 use History\models\HistoryModel;
 use Notification\controllers\NotificationsEventsController;
 use Parameter\models\ParameterModel;
+use Resource\models\ResModel;
 use Respect\Validation\Validator;
 use Slim\Http\Request;
 use Slim\Http\Response;
@@ -336,7 +338,7 @@ class UserController
         }
 
         return $response->withJson([
-            'baskets'           => BasketModel::getBasketsByUserId(['userId' => $user['user_id']]),
+            'baskets'           => BasketModel::getBasketsByUserId(['userId' => $user['user_id'], 'unneededBasketId' => ['IndexingBasket']]),
             'redirectedBaskets' => BasketModel::getRedirectedBasketsByUserId(['userId' => $user['user_id']])
         ]);
     }
@@ -348,9 +350,20 @@ class UserController
             return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]);
         }
 
+        $data = $request->getParams();
+
+        $check = Validator::stringType()->notEmpty()->validate($data['basketOwner']);
+        if (!$check) {
+            return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
+        }
+
         $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]);
 
-        BasketModel::deleteBasketRedirection(['userId' => $user['user_id'], 'basketId' => $aArgs['basketId']]);
+        if ($data['basketOwner'] != $user['user_id']) {
+            BasketModel::deleteBasketRedirection(['userId' => $data['basketOwner'], 'basketId' => $aArgs['basketId']]);
+        } else {
+            BasketModel::deleteBasketRedirection(['userId' => $user['user_id'], 'basketId' => $aArgs['basketId']]);
+        }
 
         HistoryController::add([
             'tableName'    => 'user_abs',
@@ -361,7 +374,7 @@ class UserController
         ]);
 
         return $response->withJson([
-            'baskets'           => BasketModel::getBasketsByUserId(['userId' => $user['user_id']]),
+            'baskets'           => BasketModel::getBasketsByUserId(['userId' => $user['user_id'], 'unneededBasketId' => ['IndexingBasket']]),
             'redirectedBaskets' => BasketModel::getRedirectedBasketsByUserId(['userId' => $user['user_id']])
         ]);
     }
@@ -769,6 +782,69 @@ class UserController
         }
 
         $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]);
+
+        $data = $request->getParams();
+        if (!empty($data['mode'])) {
+            if ($data['mode'] == 'reaffect') {
+                ListTemplateModel::update([
+                    'set'   => ['item_id' => $data['newUser']],
+                    'where' => ['object_id = ?', 'item_id = ?'],
+                    'data'  => [$aArgs['entityId'], $user['user_id']]
+                ]);
+                $listInstances = ListInstanceModel::getWithConfidentiality(['select' => ['listinstance.res_id'], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]);
+                $resIdsToReplace = [];
+                foreach ($listInstances as $listInstance) {
+                    $resIdsToReplace[] = $listInstance['res_id'];
+                }
+                if (!empty($resIdsToReplace)) {
+                    ListInstanceModel::update([
+                        'set'   => ['item_id' => $data['newUser']],
+                        'where' => ['res_id in (?)', 'item_id = ?'],
+                        'data'  => [$resIdsToReplace, $user['user_id']]
+                    ]);
+                }
+            } else {
+                ListTemplateModel::delete([
+                    'where' => ['object_id = ?', 'item_id = ?'],
+                    'data'  => [$aArgs['entityId'], $user['user_id']]
+                ]);
+
+                $resIds = ResModel::getOnView([
+                    'select'    => ['res_id'],
+                    'where'     => ['confidentiality = ?', 'destination = ?', 'closing_date is null'],
+                    'data'      => ['Y', $aArgs['entityId']]
+                ]);
+                foreach ($resIds as $resId) {
+                    $listInstanceId = ListInstanceModel::get([
+                        'select'    => ['listinstance_id'],
+                        'where'     => ['res_id = ?', 'item_id = ?', 'item_type = ?', 'difflist_type = ?', 'item_mode = ?'],
+                        'data'      => [$resId, $user['user_id'], 'user_id', 'VISA_CIRCUIT', 'sign']
+                    ]);
+
+                    if (!empty($listInstanceId)) {
+                        ListInstanceModel::update([
+                            'set'   => ['process_date' => null],
+                            'where' => ['res_id = ?', 'difflist_type = ?', 'listinstance_id = ?'],
+                            'data'  => [$resId, 'VISA_CIRCUIT', $listInstanceId[0]['listinstance_id'] - 1]
+                        ]);
+                    }
+                }
+
+                $listInstances = ListInstanceModel::getWithConfidentiality(['select' => ['listinstance.res_id', 'listinstance.difflist_type'], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]);
+                $resIdsToReplace = [];
+                foreach ($listInstances as $listInstance) {
+                    $resIdsToReplace[] = $listInstance['res_id'];
+                }
+                if (!empty($resIdsToReplace)) {
+                    ListInstanceModel::update([
+                        'set'   => ['process_comment' => '[DEL] supprimé - changement d\'entité', 'process_date' => 'CURRENT_TIMESTAMP'],
+                        'where' => ['res_id in (?)', 'item_id = ?'],
+                        'data'  => [$resIdsToReplace, $user['user_id']]
+                    ]);
+                }
+            }
+        }
+
         $primaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $user['user_id']]);
         UserEntityModel::deleteUserEntity(['id' => $aArgs['id'], 'entityId' => $aArgs['entityId']]);
 
@@ -791,6 +867,29 @@ class UserController
         ]);
     }
 
+    public function isEntityDeletable(Request $request, Response $response, array $aArgs)
+    {
+        $error = $this->hasUsersRights(['id' => $aArgs['id']]);
+        if (!empty($error['error'])) {
+            return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]);
+        }
+        if (empty(EntityModel::getById(['entityId' => $aArgs['entityId']]))) {
+            return $response->withStatus(400)->withJson(['errors' => 'Entity not found']);
+        }
+
+        $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]);
+
+        $listInstances = ListInstanceModel::getWithConfidentiality(['select' => [1], 'entityId' => $aArgs['entityId'], 'userId' => $user['user_id']]);
+
+        $listTemplates = ListTemplateModel::get(['select' => [1], 'where' => ['object_id = ?', 'item_type = ?', 'item_id = ?'], 'data' => [$aArgs['entityId'], 'user_id', $user['user_id']]]);
+
+        if (empty($listInstances) && empty($listTemplates)) {
+            return $response->withJson(['isDeletable' => true]);
+        } else {
+            return $response->withJson(['isDeletable' => false]);
+        }
+    }
+
     public function updateBasketsDisplay(Request $request, Response $response, array $aArgs)
     {
         $error = $this->hasUsersRights(['id' => $aArgs['id']]);