diff --git a/apps/maarch_entreprise/documents_list_copies.php b/apps/maarch_entreprise/documents_list_copies.php
index e1876a6a3aa7c74dad02019671b390fcac37b39c..3c5509406a5f9f7838251e42250a8ee5e7c58400 100755
--- a/apps/maarch_entreprise/documents_list_copies.php
+++ b/apps/maarch_entreprise/documents_list_copies.php
@@ -562,8 +562,12 @@ if (!empty($tab)) {
                         $arrayPDO = array($return_stmt->item_id);
                         $stmt2 = $db->query($query, $arrayPDO);
                         $return_stmt = $stmt2->fetch(PDO::FETCH_ASSOC);
-                        $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
-                        $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                        if ($return_stmt == false) {
+                            $tab[$i][$j]['value'] = '';
+                        } else {
+                            $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
+                            $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                        }
                     } elseif ($return_stmt->type == 'entity') {
                         $query = 'SELECT short_label FROM entities WHERE id = ?';
                         $arrayPDO = array($return_stmt->item_id);
diff --git a/apps/maarch_entreprise/documents_list_with_attachments.php b/apps/maarch_entreprise/documents_list_with_attachments.php
index fd4f5ccf1313b9f7fca72f04e64a8022efcf768a..ddeadb96e013717dfe2f3eebecdaaf0b083447d2 100755
--- a/apps/maarch_entreprise/documents_list_with_attachments.php
+++ b/apps/maarch_entreprise/documents_list_with_attachments.php
@@ -554,8 +554,12 @@ for ($i = 0; $i < $tabI; ++$i) {
                     $arrayPDO = array($return_stmt->item_id);
                     $stmt2 = $db->query($query, $arrayPDO);
                     $return_stmt = $stmt2->fetch(PDO::FETCH_ASSOC);
-                    $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
-                    $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                    if ($return_stmt == false) {
+                        $tab[$i][$j]['value'] = '';
+                    } else {
+                        $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
+                        $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                    }
                 } else if ($return_stmt->type == 'entity') {
                     $query = 'SELECT short_label FROM entities WHERE id = ?';
                     $arrayPDO = array($return_stmt->item_id);
diff --git a/apps/maarch_entreprise/indexing_searching/details.php b/apps/maarch_entreprise/indexing_searching/details.php
index 82ab4510f2eb1974cc63a22c9b3a1f86d77e50a6..7370deb938b46e19be4bb6ef07925b971ddac6a6 100755
--- a/apps/maarch_entreprise/indexing_searching/details.php
+++ b/apps/maarch_entreprise/indexing_searching/details.php
@@ -795,7 +795,9 @@ if ($stmt->rowCount() == 0) {
                     $rate = [];
                     if (!empty($sr['type']) && $sr['type'] == 'contact') {
                         $contactData = \Contact\models\ContactModel::getOnView(['select' => ['*'], 'where' => ['ca_id = ?'], 'data' => [$sr['item_id']]]);
-                        $rate = \Contact\controllers\ContactController::getFillingRate(['contact' => (array)$contactData[0]]);
+                        if(!empty($contactData[0])) {
+                            $rate = \Contact\controllers\ContactController::getFillingRate(['contact' => (array)$contactData[0]]);
+                        }
                     }
                     if (empty($disabledAttr)) {
                         echo '<i id="sender_recipient_icon_contactsUsers" class="fa fa-user" onclick="switchAutoCompleteType(\'sender_recipient\',\'contactsUsers\', false);" style="color:#135F7F;display: inline-block;cursor:pointer;" title="'._CONTACTS_USERS_LIST.'" ></i> <i id="sender_recipient_icon_entities" class="fa fa-sitemap" onclick="switchAutoCompleteType(\'sender_recipient\',\'entities\');" style="display: inline-block;cursor:pointer;" title="'._ENTITIES_LIST.'" ></i>';
diff --git a/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php b/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php
index 7f23683f8f75fd43fa9dbe738ac5c140e2317900..0f9e3ef821d6760e5ff92d332e15fdeaa6c59141 100755
--- a/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php
+++ b/apps/maarch_entreprise/indexing_searching/documents_list_mlb_search_adv.php
@@ -795,8 +795,13 @@ if ($mode == 'normal') {
                         $arrayPDO = array($return_stmt->item_id);
                         $stmt2 = $db->query($query, $arrayPDO);
                         $return_stmt = $stmt2->fetch(PDO::FETCH_ASSOC);
-                        $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
-                        $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                        if ($return_stmt == false) {
+                            $tab[$i][$j]['value'] = '';
+                        } else {
+                            $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
+                            $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                        }
+                        
                     } else if ($return_stmt->type == 'entity') {
                         $query = 'SELECT short_label FROM entities WHERE id = ?';
                         $arrayPDO = array($return_stmt->item_id);
diff --git a/install/class/Class_Install.php b/install/class/Class_Install.php
index b4e7230bac25cd57c4d2767f392093f28207a481..1270aa2ef98a5114d48430a9dc81328b96447a3e 100755
--- a/install/class/Class_Install.php
+++ b/install/class/Class_Install.php
@@ -1104,12 +1104,12 @@ class Install extends functions
         //$ipconfig = shell_exec($path);
         //$ipconfig = trim($ipconfig);
         //$chemin = $ipconfig . dirname($_SERVER['PHP_SELF'] .'cs_'.$_SESSION['config']['databasename']);
-        if ($_SERVER['REMOTE_ADDR'] == '::1') {
-            $REMOTE_ADDR = 'localhost';
+        if ($_SERVER['SERVER_ADDR'] == '::1') {
+            $SERVER_ADDR = 'localhost';
         } else {
-            $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
+            $SERVER_ADDR = $_SERVER['SERVER_ADDR'];
         }
-        $chemin = $REMOTE_ADDR.dirname($_SERVER['PHP_SELF'].'cs_'.$_SESSION['config']['databasename']);
+        $chemin = $SERVER_ADDR.dirname($_SERVER['PHP_SELF'].'cs_'.$_SESSION['config']['databasename']);
         $maarchUrl = rtrim($chemin, 'install');
         $maarchUrl = $maarchUrl.'cs_'.$_SESSION['config']['databasename'].'/';
         $CONFIG->MaarchUrl = $maarchUrl;
@@ -1149,13 +1149,13 @@ class Install extends functions
 
         $chemin_core = realpath('.').'/core/';
 
-        if ($_SERVER['REMOTE_ADDR'] == '::1') {
-            $REMOTE_ADDR = 'localhost';
+        if ($_SERVER['SERVER_ADDR'] == '::1') {
+            $SERVER_ADDR = 'localhost';
         } else {
-            $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
+            $SERVER_ADDR = $_SERVER['SERVER_ADDR'];
         }
         $CONFIG->MaarchDirectory = realpath('.').'/';
-        $chemin = $REMOTE_ADDR.dirname($_SERVER['PHP_SELF'].'cs_'.$_SESSION['config']['databasename']);
+        $chemin = $SERVER_ADDR.dirname($_SERVER['PHP_SELF'].'cs_'.$_SESSION['config']['databasename']);
         $maarchUrl = rtrim($chemin, 'install');
         $maarchUrl = $maarchUrl.'cs_'.$_SESSION['config']['databasename'].'/';
         $CONFIG->MaarchUrl = $maarchUrl;
diff --git a/modules/avis/documents_list_with_avis.php b/modules/avis/documents_list_with_avis.php
index 2e195d41d7e37d088b691b0dcb9e58c4841addde..bc33bd98913e0f1bbc773cc4d87d5685f3621c86 100755
--- a/modules/avis/documents_list_with_avis.php
+++ b/modules/avis/documents_list_with_avis.php
@@ -555,8 +555,12 @@ for ($i = 0; $i < $tabI; ++$i) {
                     $arrayPDO = array($return_stmt->item_id);
                     $stmt2 = $db->query($query, $arrayPDO);
                     $return_stmt = $stmt2->fetch(PDO::FETCH_ASSOC);
-                    $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
-                    $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                    if ($return_stmt == false) {
+                        $tab[$i][$j]['value'] = '';
+                    } else {
+                        $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
+                        $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                    }
                 } else if ($return_stmt->type == 'entity') {
                     $query = 'SELECT short_label FROM entities WHERE id = ?';
                     $arrayPDO = array($return_stmt->item_id);
diff --git a/modules/basket/class/class_modules_tools_Abstract.php b/modules/basket/class/class_modules_tools_Abstract.php
index 31d32c9dd31150e89c1e0859e32f6062b1f22dbf..99a20308631800c772e98f1b69dea9f7d6eba9c2 100755
--- a/modules/basket/class/class_modules_tools_Abstract.php
+++ b/modules/basket/class/class_modules_tools_Abstract.php
@@ -288,34 +288,16 @@ abstract class basket_Abstract extends Database
 
     public function load_basket_abs($userId)
     {
-        $db = new Database();
-        $arr = array();
-        $stmt = $db->query(
-            "select system_id, basket_id, user_abs from user_abs where new_user = ?",
-            array($userId)
-        );
-        //$db->show();
-        while ($res = $stmt->fetchObject()) {
-            $stmt2 = $db->query(
-            "select status from users"
-            . " where user_id = ?",
-                array($res->user_abs)
-            );
+        $user = \User\models\UserModel::getByUserId(['userId' => $userId, 'select' => ['id']]);
 
-            $res2 = $stmt2->fetchObject();
+        $redirectedBaskets = \Basket\models\RedirectBasketModel::get(['select' => ['id', 'basket_id', 'owner_user_id'], 'where' => ['actual_user_id = ?'], 'data' => [$user['id']]]);
 
-            if ($res2->status <> 'DEL') {
-                array_push(
-                    $arr,
-                    $this->get_abs_baskets_data(
-                        $res->basket_id,
-                        $userId,
-                        $res->system_id
-                    )
-                );
-            }
+        $return = [];
+        foreach ($redirectedBaskets as $redirectedBasket) {
+            $return[] = $this->get_abs_baskets_data($redirectedBasket['basket_id'], $userId, $redirectedBasket['id']);
         }
-        return $arr;
+
+        return $return;
     }
 
     /**
@@ -714,7 +696,6 @@ abstract class basket_Abstract extends Database
         $tab['basket_res_order'] = $this->show_string($res->basket_res_order);
         $tab['clause'] = $res->basket_clause;
         $tab['is_visible'] = $res->is_visible;
-        $isVirtual = 'N';
         $basketOwner = '';
         $absBasket = false;
 
@@ -766,7 +747,6 @@ abstract class basket_Abstract extends Database
         );
 
         $tab['abs_basket'] = $absBasket;
-        $tab['is_virtual'] = $isVirtual;
         $tab['basket_owner'] = $basketOwner;
         $tab['clause'] = $secCtrl->process_security_where_clause(
             $tab['clause'],
@@ -794,97 +774,46 @@ abstract class basket_Abstract extends Database
         return $tab;
     }
 
-    /**
-     * Returns in an array all the data of a basket for a user
-     * (checks if the basket is a redirected one and then if already a virtual one)
-     *
-     * @param  $basketId string Basket identifier
-     * @param  $userId string User identifier
-     */
     public function get_abs_baskets_data($basketId, $userId, $systemId)
     {
-        $tab = array();
+        $tab = [];
         $db = new Database();
         $sec = new security();
         $secCtrl = new SecurityControler();
-        $stmt = $db->query(
-            "select basket_id, coll_id, basket_name, basket_desc, basket_clause, is_visible"
-            . " from " . BASKET_TABLE . " where basket_id = ? and enabled = 'Y'",
-            array($basketId)
-        );
 
-        $res = $stmt->fetchObject();
-        $tab['id'] = $res->basket_id;
-        $tab['coll_id'] = $res->coll_id;
+        $basket = \Basket\models\BasketModel::getById(['select' => ['basket_id', 'coll_id', 'basket_name', 'basket_desc', 'basket_clause', 'is_visible'], 'id' => $basketId]);
+
+        $tab['id'] = $basket['basket_id'];
+        $tab['coll_id'] = $basket['coll_id'];
         $tab['table'] = $sec->retrieve_table_from_coll($tab['coll_id']);
         $tab['view'] = $sec->retrieve_view_from_coll_id($tab['coll_id']);
 
-        $tab['desc'] = $res->basket_desc;
-        $tab['name'] = $res->basket_name;
-        $tab['clause'] = $res->basket_clause;
-        $tab['is_visible'] = $res->is_visible;
-        $stmt = $db->query(
-            "select user_abs, is_virtual, basket_owner from user_abs where basket_id = ? and new_user = ? and system_id = ?",
-            array($basketId,$userId,$systemId)
-        );
+        $tab['desc'] = $basket['basket_desc'];
+        $tab['name'] = $basket['basket_name'];
+        $tab['clause'] = $basket['basket_clause'];
+        $tab['is_visible'] = $basket['is_visible'];
 
-        $absBasket = true;
-        $res = $stmt->fetchObject();
-        $isVirtual = $res->is_virtual;
-        $basketOwner = $res->basket_owner;
-        $userAbs = $res->user_abs;
+        $redirectedBasket = \Basket\models\RedirectBasketModel::get(['select' => ['actual_user_id', 'owner_user_id', 'group_id'], 'where' => ['id = ?'], 'data' => [$systemId]]);
 
-        if (empty($basketOwner)) {
-            $basketOwner = $userAbs;
-        }
-        if ($isVirtual == 'N') {
-            $tmpUser = $userAbs;
-            $stmt = $db->query(
-                "select firstname, lastname from " . USERS_TABLE
-                . " where user_id = ? ",
-                array($userAbs)
-            );
-            $res = $stmt->fetchObject();
-            $nameUserAbs = $res->firstname . ' ' . $res->lastname;
-            $tab['name'] .= " (" . $nameUserAbs . ")";
-            $tab['desc'] .= " (" . $nameUserAbs . ")";
-            $tab['id'] .= "_" . $userAbs;
-        } else {
-            $tmpUser = $basketOwner;  /// TO DO : test if basket_owner empty
-            $stmt = $db->query(
-                "select firstname, lastname from " . USERS_TABLE
-                ." where user_id = ?",
-                array($basketOwner)
-            );
-            $res = $stmt->fetchObject();
-            $nameBasketOwner = $res->firstname . ' ' . $res->lastname;
-            $tab['name'] .= " (" . $nameBasketOwner . ")";
-            $tab['desc'] .= " (" . $nameBasketOwner . ")";
-            $tab['id'] .= "_" . $basketOwner;
-        }
+        $absBasket = true;
+        $user = \User\models\UserModel::getById(['id' => $redirectedBasket[0]['owner_user_id'], 'select' => ['user_id']]);
+        $basketOwner = $user['user_id'];
+        $userAbs = $basketOwner;
 
-        /// TO DO : Test if tmp_user is empty
-        if ((isset($_SESSION['user']['UserId'])
-            && $tmpUser <> $_SESSION['user']['UserId'])
-            || (!isset($_SESSION['user']['UserId']))
-        ) {
-            $stmt = $db->query(
-                "select group_id from usergroup_content where primary_group = 'Y' and user_id = ?",
-                array($tmpUser)
-            );
+        $stmt = $db->query(
+            "select firstname, lastname from " . USERS_TABLE
+            . " where user_id = ? ",
+            array($userAbs)
+        );
+        $res = $stmt->fetchObject();
+        $nameUserAbs = $res->firstname . ' ' . $res->lastname;
+        $tab['name'] .= " (" . $nameUserAbs . ")";
+        $tab['desc'] .= " (" . $nameUserAbs . ")";
+        $tab['id'] .= "_" . $userAbs;
 
-            $groups = [];
-            while ($res = $stmt->fetchObject()) {
-                $groups[] = $res->group_id;
-            }
-            $stmt = $db->query("select result_page, group_id from groupbasket where group_id in (?) and basket_id = ?", array($groups, $basketId));
-            $res = $stmt->fetchObject();
-            $primaryGroup = $res->group_id;
-        } else {
-            $primaryGroup = $_SESSION['user']['primarygroup'];
-            $stmt = $db->query("select result_page from groupbasket where group_id = ? and basket_id = ?", array($primaryGroup,$basketId));
-            $res = $stmt->fetchObject();
-        }
+        $group = \Group\models\GroupModel::getById(['select' => ['group_id'], 'id' => $redirectedBasket[0]['group_id']]);
+        $stmt = $db->query("select result_page from groupbasket where group_id = ? and basket_id = ?", array($group['group_id'], $basketId));
+        $res = $stmt->fetchObject();
 
         $basketIdPage = $res->result_page;
         $tab['id_page'] = $basketIdPage;
@@ -907,15 +836,14 @@ abstract class basket_Abstract extends Database
         // Gets actions of the basket
         $tab['default_action'] = $this->_getDefaultAction(
             $basketId,
-            $primaryGroup
+            $group['group_id']
         );
         $tab['actions'] = $this->_getActionsFromGroupbaket(
             $basketId,
-            $primaryGroup,
+            $group['group_id'],
             $userId
         );
 
-        $tab['is_virtual'] = $isVirtual;
         $tab['basket_owner'] = $basketOwner;
         $tab['abs_basket'] = $absBasket;
 
@@ -924,7 +852,9 @@ abstract class basket_Abstract extends Database
             $basketOwner
         );
         $tab['clause'] = str_replace('where', '', $tab['clause']);
-        
+        $tab['group_id'] = $group['group_id'];
+        $tab['group_serial_id'] = $redirectedBasket[0]['group_id'];
+
         $tab['lock_list'] = '';
         $tab['lock_sublist'] = '';
         
diff --git a/modules/basket/lang/nl.php b/modules/basket/lang/nl.php
index c6d0ab5ba726c20496f23bf7fbd2e877039abbb2..77e1d6511d057ba42c08ce9b7e2bcf0288e52d2c 100755
--- a/modules/basket/lang/nl.php
+++ b/modules/basket/lang/nl.php
@@ -465,9 +465,6 @@ if (!defined('_BASKETS_OWNER_MISSING')) {
 if (!defined('_FORM_ERROR')) {
     define('_FORM_ERROR', 'Fout in de overdracht van het formulier...');
 }
-if (!defined('_USER_ABS')) {
-    define('_USER_ABS', 'Gebruiker afwezig: omleiding reeds ingesteld.');
-}
 if (!defined('_ABS_LOG_OUT')) {
     define('_ABS_LOG_OUT', 'Indien u zich opnieuw verbindt, zal de afwezigheidmodus uitgeschakeld worden.');
 }
diff --git a/modules/basket/view_baskets.php b/modules/basket/view_baskets.php
index 3011f01b3350333538759d2b08721d6dc65e518d..6f0ecbacc54d53ec11bd9aa9db81d3a986754e0a 100755
--- a/modules/basket/view_baskets.php
+++ b/modules/basket/view_baskets.php
@@ -215,17 +215,18 @@ if (count($_SESSION['user']['baskets']) > 0) {
             <select name="baskets" id="baskets" onchange="cleanSessionBasket('<?php echo $_SESSION['config']['businessappurl'];?>index.php?display=true&module=basket&page=cleanSessionBasket','ok');" class="listext_big" >
                 <option value=""><?php echo _CHOOSE_BASKET;?></option>
                 <?php
-                $redirectedBaskets = \Basket\models\BasketModel::getRedirectedBasketsByUserId(['userId' => $_SESSION['user']['UserId']]);
+                $user = \User\models\UserModel::getByUserId(['userId' => $_SESSION['user']['UserId'], 'select' => ['id']]);
+                $redirectedBaskets = \Basket\models\RedirectBasketModel::getRedirectedBasketsByUserId(['userId' => $user['id']]);
     for ($i = 0; $i < count($_SESSION['user']['baskets']); $i ++) {
         $redirectedTo = "";
         foreach ($redirectedBaskets as $redirectBasketValue) {
-            if ($redirectBasketValue['basket_owner'] == $_SESSION['user']['UserId']) {
-                if ($redirectBasketValue['basket_id'] == $_SESSION['user']['baskets'][$i]['id']) {
-                    $redirectedTo = $redirectBasketValue['user'];
-                }
-            } elseif ($_SESSION['user']['baskets'][$i]['id'] == $redirectBasketValue['basket_id'] . '_' . $redirectBasketValue['basket_owner']) {
+            if ($redirectBasketValue['basket_id'] == $_SESSION['user']['baskets'][$i]['id']) {
                 $redirectedTo = $redirectBasketValue['user'];
             }
+//            if ($redirectBasketValue['basket_owner'] == $_SESSION['user']['UserId']) {
+//            } elseif ($_SESSION['user']['baskets'][$i]['id'] == $redirectBasketValue['basket_id'] . '_' . $redirectBasketValue['basket_owner']) {
+//                $redirectedTo = $redirectBasketValue['user'];
+//            }
         }
 
         if((($_SESSION['user']['baskets'][$i]['is_visible'] === 'Y' &&  $_SESSION['user']['baskets'][$i]['abs_basket'] == false)
diff --git a/modules/notifications/batch/basket_event_stack.php b/modules/notifications/batch/basket_event_stack.php
index 9831b55f4123c8a9d0619df3938e30223b7629ae..571688acc01a2a7cc06b5658828149f8c9607bba 100755
--- a/modules/notifications/batch/basket_event_stack.php
+++ b/modules/notifications/batch/basket_event_stack.php
@@ -72,9 +72,9 @@ while ($state != 'END') {
                         if (empty($aRecipients)) {
                             $aRecipients = '0=1';
                         }
-                        $stmt3 = $db->query("SELECT usergroup_content.user_id,users.status FROM usergroup_content, users WHERE group_id = ? and users.status in ('OK','ABS') and usergroup_content.user_id=users.user_id and users.user_id in (?)", array($line2->group_id, $aRecipients));
+                        $stmt3 = $db->query("SELECT usergroup_content.user_id, users.id, users.status FROM usergroup_content, users WHERE group_id = ? and users.status in ('OK','ABS') and usergroup_content.user_id=users.user_id and users.user_id in (?)", array($line2->group_id, $aRecipients));
                     } else {
-                        $stmt3 = $db->query("SELECT usergroup_content.user_id,users.status FROM usergroup_content, users WHERE group_id = ? and users.status in ('OK','ABS') and usergroup_content.user_id=users.user_id", array($line2->group_id));
+                        $stmt3 = $db->query("SELECT usergroup_content.user_id, users.id, users.status FROM usergroup_content, users WHERE group_id = ? and users.status in ('OK','ABS') and usergroup_content.user_id=users.user_id", array($line2->group_id));
                     }
 
                     $baskets_notif = array();
@@ -86,13 +86,14 @@ while ($state != 'END') {
                         $whereClause = $secCtrl->process_security_where_clause($line->basket_clause, $line3->user_id);
                         $whereClause = $entities->process_where_clause($whereClause, $line3->user_id);
                         $user_id = $line3->user_id;
-                        $query = 'SELECT new_user FROM user_abs WHERE user_abs = ? AND basket_id = ?';
-                        $redirStmt = $db->query($query, array($line3->user_id,$line->basket_id));
+                        $group = \Group\models\GroupModel::getByGroupId(['select' => ['id'], 'groupId' => $line2->group_id]);
+                        $query = 'SELECT actual_user_id FROM redirected_baskets WHERE owner_user_id = ? AND basket_id = ? AND group_id = ?';
+                        $redirStmt = $db->query($query, array($line3->id, $line->basket_id, $group['id']));
                         $queryResult = $redirStmt->fetchObject();
                         if ($queryResult) {
-                            $abs_user = $queryResult;
                             $real_user_id = $user_id;
-                            $user_id = $abs_user->new_user;
+                            $user = \User\models\UserModel::getById(['id' => $queryResult->actual_user_id, 'select' => ['user_id']]);
+                            $user_id = $user['user_id'];
                         }
 
 
diff --git a/modules/notifications/batch/process_event_stack.php b/modules/notifications/batch/process_event_stack.php
index 7078dcaccea38f42bd5a372e1889d6adaaf67e88..90c35ffb63b366e2c08a97b18e45d442f6a2a00e 100755
--- a/modules/notifications/batch/process_event_stack.php
+++ b/modules/notifications/batch/process_event_stack.php
@@ -123,25 +123,25 @@ while ($state != 'END') {
                             continue;
                         }
 
-                        if ($recipient->status == 'ABS') {
-                            $logger->write($user_id.' is absent, routing to replacent', 'INFO');
-                            unset($recipients[$i]);
-                            $query = 'SELECT us.* FROM users us'
-                                .' JOIN user_abs abs ON us.user_id = abs.new_user '
-                                ." WHERE abs.user_abs = ? AND us.enabled='Y'";
-                            $dbAbs = new Database();
-                            $stmt = $dbAbs->query($query, array($user_id));
-                            if ($stmt->rowCount() > 0) {
-                                //$recipient = $dbAbs->fetchObject($user_id);
-                                $recipient = $stmt->fetchObject();
-                                $user_id = $recipient->user_id;
-                                $logger->write($user_id.' is the replacent', 'INFO');
-                                $recipients[] = $recipient;
-                            } else {
-                                $logger->write('No replacent found (probably disabled)', 'INFO');
-                                continue;
-                            }
-                        }
+//                        if ($recipient->status == 'ABS') {
+//                            $logger->write($user_id.' is absent, routing to replacent', 'INFO');
+//                            unset($recipients[$i]);
+//                            $query = 'SELECT us.* FROM users us'
+//                                .' JOIN user_abs abs ON us.user_id = abs.new_user '
+//                                ." WHERE abs.user_abs = ? AND us.enabled='Y'";
+//                            $dbAbs = new Database();
+//                            $stmt = $dbAbs->query($query, array($user_id));
+//                            if ($stmt->rowCount() > 0) {
+//                                //$recipient = $dbAbs->fetchObject($user_id);
+//                                $recipient = $stmt->fetchObject();
+//                                $user_id = $recipient->user_id;
+//                                $logger->write($user_id.' is the replacent', 'INFO');
+//                                $recipients[] = $recipient;
+//                            } else {
+//                                $logger->write('No replacent found (probably disabled)', 'INFO');
+//                                continue;
+//                            }
+//                        }
                         if (!isset($tmpNotifs[$user_id])) {
                             $tmpNotifs[$user_id]['recipient'] = $recipient;
                         }
diff --git a/modules/sendmail/batch/scripts/sendmail.sh b/modules/sendmail/batch/scripts/sendmail.sh
index c1105313494fb16ab95169804a24f6fd5f13b261..6dfa33f0adac0c1a9969dfb2b8aae5b7fc083878 100755
--- a/modules/sendmail/batch/scripts/sendmail.sh
+++ b/modules/sendmail/batch/scripts/sendmail.sh
@@ -2,4 +2,3 @@
 cd /var/www/MaarchCourrier/modules/sendmail/batch/
 emailsPath='/var/www/MaarchCourrier/modules/sendmail/batch/process_emails.php'
 php $emailsPath -c /var/www/MaarchCourrier/modules/sendmail/batch/config/config.xml
-
diff --git a/modules/visa/documents_list_with_signatory.php b/modules/visa/documents_list_with_signatory.php
index cd086437703f9f4006ac26b94cb8f9a5c74414a9..6d824fff2dfb62586046c4552d88031d14634903 100755
--- a/modules/visa/documents_list_with_signatory.php
+++ b/modules/visa/documents_list_with_signatory.php
@@ -525,8 +525,12 @@ for ($i = 0; $i < $tabI; ++$i) {
                     $arrayPDO = array($return_stmt->item_id);
                     $stmt2 = $db->query($query, $arrayPDO);
                     $return_stmt = $stmt2->fetch(PDO::FETCH_ASSOC);
-                    $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
-                    $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                    if ($return_stmt == false) {
+                        $tab[$i][$j]['value'] = '';
+                    } else {
+                        $formattedContact = \SrcCore\controllers\AutoCompleteController::getFormattedContact(['contact' => $return_stmt]);
+                        $tab[$i][$j]['value'] = $formattedContact['contact']['contact'];
+                    }
                 } else if ($return_stmt->type == 'entity') {
                     $query = 'SELECT short_label FROM entities WHERE id = ?';
                     $arrayPDO = array($return_stmt->item_id);
diff --git a/rest/index.php b/rest/index.php
index 7cf279b7efc356c63d54d68f751da9dc4545000e..1dd7ed0624866445c4f09b65070516fbf2df2f97 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -304,7 +304,7 @@ $app->get('/users/{id}/signatures/{signatureId}/content', \User\controllers\User
 $app->put('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':updateSignature');
 $app->delete('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':deleteSignature');
 $app->post('/users/{id}/redirectedBaskets', \User\controllers\UserController::class . ':setRedirectedBaskets');
-$app->delete('/users/{id}/redirectedBaskets/{basketId}', \User\controllers\UserController::class . ':deleteRedirectedBaskets');
+$app->delete('/users/{id}/redirectedBaskets/{redirectBasketid}', \User\controllers\UserController::class . ':deleteRedirectedBasket');
 $app->put('/users/{id}/baskets', \User\controllers\UserController::class . ':updateBasketsDisplay');
 
 //VersionsUpdate
diff --git a/sql/develop.sql b/sql/develop.sql
index 1d785f837f14c1d50c0d76bfdcc23a7014387dcc..2d145ad52dddbb97d25e3166aad0683bf5536a9a 100755
--- a/sql/develop.sql
+++ b/sql/develop.sql
@@ -11,3 +11,31 @@ ALTER TABLE res_letterbox ADD COLUMN external_signatory_book_id integer;
 
 ALTER TABLE users DROP COLUMN IF EXISTS external_id;
 ALTER TABLE users ADD COLUMN external_id json DEFAULT '{}';
+
+/* Redirected Baskets */
+DO $$ BEGIN
+  IF (SELECT count(TABLE_NAME)  FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'user_abs') = 1 THEN
+      DROP TABLE IF EXISTS redirected_baskets;
+      CREATE TABLE redirected_baskets
+      (
+      id serial NOT NULL,
+      actual_user_id INTEGER NOT NULL,
+      owner_user_id INTEGER NOT NULL,
+      basket_id character varying(255) NOT NULL,
+      group_id INTEGER NOT NULL,
+      CONSTRAINT redirected_baskets_pkey PRIMARY KEY (id),
+      CONSTRAINT redirected_baskets_unique_key UNIQUE (owner_user_id, basket_id, group_id)
+      )
+      WITH (OIDS=FALSE);
+
+      INSERT INTO redirected_baskets (owner_user_id, actual_user_id, basket_id, group_id) SELECT users.id, us.id, user_abs.basket_id, usergroups.id FROM usergroups, usergroup_content, user_abs, groupbasket, users, users us
+        where usergroup_content.group_id = usergroups.group_id
+        and usergroup_content.user_id = user_abs.user_abs
+        and users.user_id = user_abs.user_abs
+        and us.user_id = user_abs.new_user
+        and groupbasket.group_id = usergroup_content.group_id
+        and groupbasket.basket_id = user_abs.basket_id;
+
+--       DROP TABLE IF EXISTS user_abs;
+  END IF;
+END$$;
diff --git a/sql/structure.sql b/sql/structure.sql
index af5565deb0593b96f1ce076850b48b53fcd59a3b..62a75d74233b2908da0fba1bfafb14e054ac88da 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -381,27 +381,18 @@ CREATE TABLE groupbasket
 )
 WITH (OIDS=FALSE);
 
-CREATE SEQUENCE user_abs_seq
-  INCREMENT 1
-  MINVALUE 1
-  MAXVALUE 9223372036854775807
-  START 1
-  CACHE 1;
-
-CREATE TABLE user_abs
+CREATE TABLE redirected_baskets
 (
-  system_id bigint NOT NULL DEFAULT nextval('user_abs_seq'::regclass),
-  user_abs character varying(128) NOT NULL,
-  new_user character varying(128) NOT NULL,
-  basket_id character varying(255) NOT NULL,
-  basket_owner character varying(255),
-  is_virtual character(1) NOT NULL DEFAULT 'N'::bpchar,
-  group_id INTEGER,
-  CONSTRAINT user_abs_pkey PRIMARY KEY (system_id)
+id serial NOT NULL,
+actual_user_id INTEGER NOT NULL,
+owner_user_id INTEGER NOT NULL,
+basket_id character varying(255) NOT NULL,
+group_id INTEGER NOT NULL,
+CONSTRAINT redirected_baskets_pkey PRIMARY KEY (id),
+CONSTRAINT redirected_baskets_unique_key UNIQUE (owner_user_id, basket_id, group_id)
 )
 WITH (OIDS=FALSE);
 
-
 -- modules/cases/sql/structure/cases.postgresql.sql
 
 CREATE SEQUENCE case_id_seq
diff --git a/src/app/basket/models/BasketModelAbstract.php b/src/app/basket/models/BasketModelAbstract.php
index 3c27a9d422d8661692bf52d30fa9ca5035988374..1f58c47a18bbc66aa0a12adc7fe9135b3e800a36 100755
--- a/src/app/basket/models/BasketModelAbstract.php
+++ b/src/app/basket/models/BasketModelAbstract.php
@@ -313,7 +313,7 @@ abstract class BasketModelAbstract
             return [];
         }
 
-        $where = PreparedClauseController::getPreparedClause(['clause' => $aBasket[0]['basket_clause'], 'userId' => $aArgs['userId']]);
+        $where = PreparedClauseController::getPreparedClause(['clause' => $aBasket[0]['basket_clause'], 'login' => $aArgs['userId']]);
 
         $aResList = ResModel::getOnView([
             'select'    => $aArgs['select'],
@@ -363,15 +363,13 @@ abstract class BasketModelAbstract
             foreach ($aBaskets as $key => $value) {
                 unset($aBaskets[$key]['groupserialid']);
                 $aBaskets[$key]['groupSerialId'] = $value['groupserialid'];
-                $aBaskets[$key]['is_virtual'] = 'N';
-                $aBaskets[$key]['basket_owner'] = $aArgs['userId'];
-                $aBaskets2 = DatabaseModel::select([
-                        'select'    => ['new_user'],
-                        'table'     => ['user_abs'],
-                        'where'     => ['user_abs = ?', 'basket_id = ?'],
-                        'data'      => [$aArgs['userId'], $value['basket_id']],
+                $aBaskets[$key]['owner_user_id'] = $user['id'];
+                $redirectedBasket = RedirectBasketModel::get([
+                    'select'    => ['actual_user_id'],
+                    'where'     => ['owner_user_id = ?', 'basket_id = ?', 'group_id = ?'],
+                    'data'      => [$user['id'], $value['basket_id'], $value['groupserialid']]
                 ]);
-                $aBaskets[$key]['userToDisplay'] = UserModel::getLabelledUserById(['userId' => $aBaskets2[0]['new_user']]);
+                $aBaskets[$key]['userToDisplay'] = (empty($redirectedBasket[0]) ? null : UserModel::getLabelledUserById(['id' => $redirectedBasket[0]['actual_user_id']]));
                 $aBaskets[$key]['enabled'] = true;
                 $aBaskets[$key]['allowed'] = false;
                 foreach ($userPrefs as $userPref) {
@@ -381,106 +379,13 @@ abstract class BasketModelAbstract
                 }
             }
             if (empty($aArgs['absenceUneeded'])) {
-                $aBaskets = array_merge($aBaskets, BasketModel::getAbsBasketsByUserId(['userId' => $aArgs['userId']]));
+                $aBaskets = array_merge($aBaskets, RedirectBasketModel::getAssignedBasketsByUserId(['userId' => $user['id']]));
             }
         }
 
         return $aBaskets;
     }
 
-    public static function getAbsBasketsByUserId(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['userId']);
-        ValidatorModel::stringType($aArgs, ['userId']);
-
-        $aBaskets = DatabaseModel::select([
-                'select'    => ['ba.basket_id', 'ba.basket_name', 'ba.basket_desc', 'ba.basket_clause', 'ua.user_abs', 'ua.basket_owner', 'ua.is_virtual'],
-                'table'     => ['baskets ba, user_abs ua'],
-                'where'     => ['ua.new_user = ?', 'ua.basket_id = ba.basket_id'],
-                'data'      => [$aArgs['userId']],
-                'order_by'  => ['ba.basket_order, ba.basket_name']
-        ]);
-
-        foreach ($aBaskets as $key => $value) {
-            $aBaskets[$key]['userToDisplay'] = UserModel::getLabelledUserById(['userId' => $value['user_abs']]);
-        }
-
-        return $aBaskets;
-    }
-
-    public static function setRedirectedBaskets(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['userAbs', 'newUser', 'basketId', 'basketOwner', 'isVirtual']);
-        ValidatorModel::stringType($aArgs, ['userAbs', 'newUser', 'basketId', 'basketOwner', 'isVirtual']);
-
-        DatabaseModel::insert([
-            'table'         => 'user_abs',
-            'columnsValues' => [
-                'user_abs'      => $aArgs['userAbs'],
-                'new_user'      => $aArgs['newUser'],
-                'basket_id'     => $aArgs['basketId'],
-                'basket_owner'  => $aArgs['basketOwner'],
-                'is_virtual'    => $aArgs['isVirtual']
-            ]
-        ]);
-
-        return true;
-    }
-
-    public static function updateRedirectedBaskets(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['userId', 'basketOwner', 'basketId', 'userAbs', 'newUser']);
-        ValidatorModel::stringType($aArgs, ['userId']);
-
-        DatabaseModel::update([
-            'table'     => 'user_abs',
-            'set'       => [
-                'new_user' => $aArgs['newUser']
-            ],
-            'where'     => ['basket_id = ?', 'basket_owner = ?', 'user_abs = ?', 'new_user = ?'],
-            'data'      => [$aArgs['basketId'], $aArgs['basketOwner'], $aArgs['userAbs'], $aArgs['userId']]
-        ]);
-
-        return true;
-    }
-
-    public static function deleteBasketRedirection(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['userId', 'basketId']);
-        ValidatorModel::stringType($aArgs, ['userId', 'basketId']);
-
-        DatabaseModel::delete([
-            'table' => 'user_abs',
-            'where' => ['(user_abs = ? OR basket_owner = ?)', 'basket_id = ?'],
-            'data'  => [$aArgs['userId'], $aArgs['userId'], $aArgs['basketId']]
-        ]);
-
-        return true;
-    }
-
-    public static function getRedirectedBasketsByUserId(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['userId']);
-        ValidatorModel::stringType($aArgs, ['userId']);
-
-        $aBaskets = DatabaseModel::select([
-            'select'    => ['ba.basket_id', 'ba.basket_name', 'ua.new_user', 'ua.basket_owner'],
-            'table'     => ['baskets ba, user_abs ua'],
-            'where'     => ['ua.user_abs = ?', 'ua.basket_id = ba.basket_id'],
-            'data'      => [$aArgs['userId']],
-            'order_by'  => ['ua.system_id']
-        ]);
-
-        foreach ($aBaskets as $key => $value) {
-            $user = UserModel::getByUserId(['userId' => $value['new_user'], 'select' => ['firstname', 'lastname']]);
-            $aBaskets[$key]['userToDisplay']     = "{$user['firstname']} {$user['lastname']}";
-            $aBaskets[$key]['userIdRedirection'] = $value['new_user'];
-            $aBaskets[$key]['user']              = "{$user['firstname']} {$user['lastname']}" ;
-        }
-
-        return $aBaskets;
-    }
-
     public static function getRegroupedBasketsByUserId(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['userId']);
@@ -592,11 +497,14 @@ abstract class BasketModelAbstract
     public static function getResourceNumberByClause(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['userId', 'clause']);
-        ValidatorModel::stringType($aArgs, ['userId', 'clause']);
+        ValidatorModel::stringType($aArgs, ['clause']);
+        ValidatorModel::intVal($aArgs, ['userId']);
+
+        $user = UserModel::getById(['id' => $aArgs['userId'], 'select' => ['user_id']]);
 
         $count = ResModel::getOnView([
             'select'    => ['COUNT(1)'],
-            'where'     => [PreparedClauseController::getPreparedClause(['userId' => $aArgs['userId'], 'clause' => $aArgs['clause']])]
+            'where'     => [PreparedClauseController::getPreparedClause(['login' => $user['user_id'], 'clause' => $aArgs['clause']])]
         ]);
 
         if (empty($count[0]['count'])) {
diff --git a/src/app/basket/models/RedirectBasketModel.php b/src/app/basket/models/RedirectBasketModel.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f2d02787ccb03bee691593a079f52fead07c4e1
--- /dev/null
+++ b/src/app/basket/models/RedirectBasketModel.php
@@ -0,0 +1,129 @@
+<?php
+
+/**
+* Copyright Maarch since 2008 under licence GPLv3.
+* See LICENCE.txt file at the root folder for more details.
+* This file is part of Maarch software.
+*
+*/
+
+/**
+* @brief   Redirect Basket Model Abstract
+* @author  dev@maarch.org
+*/
+
+namespace Basket\models;
+
+use SrcCore\models\ValidatorModel;
+use SrcCore\models\DatabaseModel;
+use User\models\UserModel;
+
+class RedirectBasketModel
+{
+    public static function get(array $aArgs = [])
+    {
+        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']);
+
+        $redirectedBaskets = DatabaseModel::select([
+            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
+            'table'     => ['redirected_baskets'],
+            'where'     => empty($aArgs['where']) ? [] : $aArgs['where'],
+            'data'      => empty($aArgs['data']) ? [] : $aArgs['data'],
+        ]);
+
+        return $redirectedBaskets;
+    }
+
+    public static function create(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['actual_user_id', 'owner_user_id', 'basket_id', 'group_id']);
+        ValidatorModel::stringType($aArgs, ['basket_id']);
+        ValidatorModel::intVal($aArgs, ['actual_user_id', 'owner_user_id', 'group_id']);
+
+        DatabaseModel::insert([
+            'table'         => 'redirected_baskets',
+            'columnsValues' => [
+                'actual_user_id'    => $aArgs['actual_user_id'],
+                'owner_user_id'     => $aArgs['owner_user_id'],
+                'basket_id'         => $aArgs['basket_id'],
+                'group_id'          => $aArgs['group_id']
+            ]
+        ]);
+
+        return true;
+    }
+
+    public static function update(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['actual_user_id', 'owner_user_id', 'basket_id', 'group_id']);
+        ValidatorModel::stringType($aArgs, ['basket_id']);
+        ValidatorModel::intVal($aArgs, ['actual_user_id', 'owner_user_id', 'group_id']);
+
+        DatabaseModel::update([
+            'table'     => 'redirected_baskets',
+            'set'       => [
+                'actual_user_id'    => $aArgs['actual_user_id']
+            ],
+            'where'     => ['owner_user_id = ?', 'basket_id = ?', 'group_id = ?'],
+            'data'      => [$aArgs['owner_user_id'], $aArgs['basket_id'], $aArgs['group_id']]
+        ]);
+
+        return true;
+    }
+
+    public static function delete(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['where', 'data']);
+        ValidatorModel::arrayType($aArgs, ['where', 'data']);
+
+        DatabaseModel::delete([
+            'table' => 'redirected_baskets',
+            'where' => $aArgs['where'],
+            'data'  => $aArgs['data']
+        ]);
+
+        return true;
+    }
+
+    public static function getAssignedBasketsByUserId(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['userId']);
+        ValidatorModel::intVal($aArgs, ['userId']);
+
+        $aBaskets = DatabaseModel::select([
+            'select'    => ['ba.basket_id', 'ba.basket_name', 'ba.basket_desc', 'ba.basket_clause', 'rb.owner_user_id', 'rb.group_id', 'rb.id'],
+            'table'     => ['baskets ba, redirected_baskets rb'],
+            'where'     => ['rb.actual_user_id = ?', 'rb.basket_id = ba.basket_id'],
+            'data'      => [$aArgs['userId']],
+            'order_by'  => ['ba.basket_order, ba.basket_name']
+        ]);
+
+        foreach ($aBaskets as $key => $value) {
+            $aBaskets[$key]['userToDisplay'] = UserModel::getLabelledUserById(['id' => $value['owner_user_id']]);
+        }
+
+        return $aBaskets;
+    }
+
+    public static function getRedirectedBasketsByUserId(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['userId']);
+        ValidatorModel::intVal($aArgs, ['userId']);
+
+        $aBaskets = DatabaseModel::select([
+            'select'    => ['ba.basket_id', 'ba.basket_name', 'rb.actual_user_id', 'rb.id'],
+            'table'     => ['baskets ba, redirected_baskets rb'],
+            'where'     => ['rb.owner_user_id = ?', 'rb.basket_id = ba.basket_id'],
+            'data'      => [$aArgs['userId']],
+            'order_by'  => ['rb.id']
+        ]);
+
+        foreach ($aBaskets as $key => $value) {
+            $user = UserModel::getById(['id' => $value['actual_user_id'], 'select' => ['firstname', 'lastname']]);
+            $aBaskets[$key]['userToDisplay']     = "{$user['firstname']} {$user['lastname']}";
+            $aBaskets[$key]['user']              = "{$user['firstname']} {$user['lastname']}" ;
+        }
+
+        return $aBaskets;
+    }
+}
diff --git a/src/app/group/controllers/GroupController.php b/src/app/group/controllers/GroupController.php
index 69f9815e009685e94709133f910e98f1a9bfaccc..f94897651b77b49760411ff1a8127388bb1c0980 100755
--- a/src/app/group/controllers/GroupController.php
+++ b/src/app/group/controllers/GroupController.php
@@ -214,7 +214,7 @@ class GroupController
         $groupsClause = '';
         foreach ($groups as $key => $group) {
             if (!empty($group['where_clause'])) {
-                $groupClause = PreparedClauseController::getPreparedClause(['clause' => $group['where_clause'], 'userId' => $aArgs['userId']]);
+                $groupClause = PreparedClauseController::getPreparedClause(['clause' => $group['where_clause'], 'login' => $aArgs['userId']]);
                 if ($key > 0) {
                     $groupsClause .= ' or ';
                 }
diff --git a/src/app/home/controllers/HomeController.php b/src/app/home/controllers/HomeController.php
index d7f69a9b6eb9782cf8b9cc3bd1ede4f7a46c58e0..a52dceb5679fc0da4bb0749185f3b5a808356b92 100755
--- a/src/app/home/controllers/HomeController.php
+++ b/src/app/home/controllers/HomeController.php
@@ -15,6 +15,8 @@
 namespace Home\controllers;
 
 use Basket\models\BasketModel;
+use Basket\models\RedirectBasketModel;
+use Group\models\GroupModel;
 use Resource\models\ResModel;
 use Slim\Http\Request;
 use Slim\Http\Response;
@@ -31,7 +33,7 @@ class HomeController
         $homeMessage = ParameterModel::getById(['select' => ['param_value_string'], 'id'=> 'homepage_message']);
         $homeMessage = trim($homeMessage['param_value_string']);
 
-        $redirectedBaskets = BasketModel::getRedirectedBasketsByUserId(['userId' => $GLOBALS['userId']]);
+        $redirectedBaskets = RedirectBasketModel::getRedirectedBasketsByUserId(['userId' => $user['id']]);
         $groups = UserModel::getGroupsByUserId(['userId' => $GLOBALS['userId']]);
         foreach ($groups as $group) {
             $baskets = BasketModel::getAvailableBasketsByGroupUser([
@@ -57,7 +59,7 @@ class HomeController
                     }
                 }
 
-                $baskets[$kBasket]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $GLOBALS['userId'], 'clause' => $basket['basket_clause']]);
+                $baskets[$kBasket]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $user['id'], 'clause' => $basket['basket_clause']]);
 
                 unset($baskets[$kBasket]['pcolor'], $baskets[$kBasket]['basket_clause']);
             }
@@ -72,10 +74,12 @@ class HomeController
             }
         }
 
-        $assignedBaskets = BasketModel::getAbsBasketsByUserId(['userId' => $GLOBALS['userId']]);
+        $assignedBaskets = RedirectBasketModel::getAssignedBasketsByUserId(['userId' => $user['id']]);
         foreach ($assignedBaskets as $key => $assignedBasket) {
             $basket = BasketModel::getById(['select' => ['basket_clause'], 'id' => $assignedBasket['basket_id']]);
-            $assignedBaskets[$key]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $assignedBasket['user_abs'], 'clause' => $basket['basket_clause']]);
+            $assignedBaskets[$key]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $assignedBasket['owner_user_id'], 'clause' => $basket['basket_clause']]);
+            $assignedBaskets[$key]['uselessGroupId'] = GroupModel::getById(['id' => $assignedBasket['group_id'], 'select' => ['group_id']])['group_id'];
+            $assignedBaskets[$key]['ownerLogin'] = UserModel::getById(['id' => $assignedBasket['owner_user_id'], 'select' => ['user_id']])['user_id'];
         }
 
         return $response->withJson([
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index e563756fa0bdccdd7360594344fd52daafe6927f..d35aea0c8e6b8c76afc79d7c601fe448ad2f75cb 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -484,16 +484,15 @@ class ResController
             return $response->withStatus(400)->withJson(['errors' => 'Group is not linked to this basket']);
         }
 
-        $whereClause = PreparedClauseController::getPreparedClause(['clause' => $basket['basket_clause'], 'userId' => $GLOBALS['userId']]);
-        $resources = ResModel::getForList([
+        $whereClause = PreparedClauseController::getPreparedClause(['clause' => $basket['basket_clause'], 'login' => $GLOBALS['userId']]);
+        $list = ResModel::getForList([
             'clause'    => $whereClause,
             'orderBy'   => ["{$basket['basket_res_order']} DESC"],
             'offset'    => (int)$data['offset'],
             'limit'     => (int)$data['limit'],
         ]);
-        $count = empty($resources[0]['count']) ? 0 : $resources[0]['count'];
 
-        return $response->withJson(['resources' => $resources, 'count' => $count]);
+        return $response->withJson(['resources' => $list['resources'], 'count' => $list['count']]);
     }
 
     public function updateExternalInfos(Request $request, Response $response)
@@ -556,7 +555,7 @@ class ResController
         $groupsClause = '';
         foreach ($groups as $key => $group) {
             if (!empty($group['where_clause'])) {
-                $groupClause = PreparedClauseController::getPreparedClause(['clause' => $group['where_clause'], 'userId' => $aArgs['userId']]);
+                $groupClause = PreparedClauseController::getPreparedClause(['clause' => $group['where_clause'], 'login' => $aArgs['userId']]);
                 if ($key > 0) {
                     $groupsClause .= ' or ';
                 }
@@ -575,7 +574,8 @@ class ResController
         $basketsClause = '';
         foreach ($baskets as $key => $basket) {
             if (!empty($basket['basket_clause'])) {
-                $basketClause = PreparedClauseController::getPreparedClause(['clause' => $basket['basket_clause'], 'userId' => $basket['basket_owner']]);
+                $user = UserModel::getById(['id' => $basket['owner_user_id'], 'select' => ['user_id']]);
+                $basketClause = PreparedClauseController::getPreparedClause(['clause' => $basket['basket_clause'], 'login' => $user['user_id']]);
                 if ($key > 0) {
                     $basketsClause .= ' or ';
                 }
diff --git a/src/app/resource/models/ResModelAbstract.php b/src/app/resource/models/ResModelAbstract.php
index cff8ac890c1756c8e08fd539e2736f4cf0d18a73..5f418d2b3bd5938fb0473ea5af7eb49fb8a4bd42 100755
--- a/src/app/resource/models/ResModelAbstract.php
+++ b/src/app/resource/models/ResModelAbstract.php
@@ -45,38 +45,58 @@ abstract class ResModelAbstract
         ValidatorModel::stringType($aArgs, ['clause']);
         ValidatorModel::intType($aArgs, ['limit', 'offset']);
 
-        $where = ['res_view_letterbox.priority = priorities.id'];
-        $where[] = $aArgs['clause'];
-
-        $aResources = DatabaseModel::select([
+        $resources = ResModel::getOnView([
             'select'    => [
                 'count(1) OVER()',
-                'alt_identifier',
-                'category_id',
-                'case_label',
-                'closing_date',
-                'category_id',
-                'contact_lastname',
-                'contact_society',
-                'creation_date',
-                'entity_label as entity_destination',
-                'folder_name',
-                'priorities.color as priority_color',
-                'priorities.label as priority_label',
-                'process_limit_date',
-                'res_id',
-                'subject',
-                'type_label as doctype_label'
+                'res_id'
             ],
-            'table'     => ['res_view_letterbox, priorities'],
-            'where'     => $where,
+            'where'     => [$aArgs['clause']],
             'data'      => [],
             'order_by'  => empty($aArgs['orderBy']) ? [] : $aArgs['orderBy'],
             'offset'    => empty($aArgs['offset']) ? 0 : $aArgs['offset'],
             'limit'     => empty($aArgs['limit']) ? 0 : $aArgs['limit']
         ]);
+        $count = empty($resources[0]['count']) ? 0 : $resources[0]['count'];
 
-        return $aResources;
+        $resIds = [];
+        foreach ($resources as $resource) {
+            $resIds[] = $resource['res_id'];
+        }
+
+        if (!empty($resIds)) {
+            $resources = DatabaseModel::select([
+                'select'    => [
+                    'res_id',
+                    'subject',
+                    'alt_identifier',
+                    'category_id',
+                    'closing_date',
+                    'category_id',
+                    'contact_firstname',
+                    'contact_lastname',
+                    'contact_society',
+                    'user_lastname',
+                    'user_firstname',
+                    'creation_date',
+                    'entity_label as entity_destination',
+                    'process_limit_date',
+                    'type_label as doctype_label',
+                    'priorities.color as priority_color',
+                    'priorities.label as priority_label',
+                    'status.img_filename as status_icon',
+                    'status.label_status as status_label',
+                    'status.id as status_id',
+                    'users.lastname as user_dest_lastname',
+                    'users.firstname as user_dest_firstname',
+                ],
+                'table'     => ['res_view_letterbox, priorities, status, users'],
+                'where'     => ['res_view_letterbox.res_id in (?)', 'res_view_letterbox.priority = priorities.id', 'res_view_letterbox.status = status.id', 'res_view_letterbox.dest_user = users.user_id'],
+                'data'      => [$resIds]
+            ]);
+        }
+
+
+        return ['resources' => $resources, 'count' => $count];
     }
 
     public static function get(array $aArgs)
diff --git a/src/app/resource/models/ResourceContactModel.php b/src/app/resource/models/ResourceContactModel.php
index 6ab193a04a37e57fe09101653f10147cc4654edd..869cb138710829df3f61d686e9715f99609f5ecf 100755
--- a/src/app/resource/models/ResourceContactModel.php
+++ b/src/app/resource/models/ResourceContactModel.php
@@ -62,8 +62,10 @@ class ResourceContactModel
                     'where' => ['ca_id = ?'],
                     'data' => [$aContact['item_id']]
                 ]);
-                $contact = AutoCompleteController::getFormattedContact(['contact' => $contact[0]]);
-                $aContacts[$key]['format'] = $contact['contact']['otherInfo'];
+                if (isset($contact[0])) {
+                    $contact = AutoCompleteController::getFormattedContact(['contact' => $contact[0]]);
+                    $aContacts[$key]['format'] = $contact['contact']['otherInfo'];
+                }
             } elseif ($aContact['type'] == 'entity') {
                 $entity = EntityModel::getById(['id' => $aContact['item_id'], 'select' => ['entity_label']]);
                 $aContacts[$key]['format'] = $entity['entity_label'];
diff --git a/src/app/signatureBook/controllers/SignatureBookController.php b/src/app/signatureBook/controllers/SignatureBookController.php
index 3b8ecee1d81a57ae588d78348806678bafe119a4..e544b56d5b09be65a4d40d0c7c6fbbaa33204726 100755
--- a/src/app/signatureBook/controllers/SignatureBookController.php
+++ b/src/app/signatureBook/controllers/SignatureBookController.php
@@ -58,7 +58,7 @@ class SignatureBookController
                 if (empty($rawAction['where_clause'])) {
                     $actions[] = ['value' => $rawAction['id_action'], 'label' => $rawAction['label_action']];
                 } else {
-                    $whereClause = PreparedClauseController::getPreparedClause(['clause' => $rawAction['where_clause'], 'userId' => $GLOBALS['userId']]);
+                    $whereClause = PreparedClauseController::getPreparedClause(['clause' => $rawAction['where_clause'], 'login' => $GLOBALS['userId']]);
                     $ressource = ResModel::getOnView(['select' => [1], 'where' => ['res_id = ?', $whereClause], 'data' => [$aArgs['resId']]]);
                     if (!empty($ressource)) {
                         $actions[] = ['value' => $rawAction['id_action'], 'label' => $rawAction['label_action']];
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index 034fc98c45a7ac82b0a8c246c239042ba839b63e..1213d758c86cf994d01dc56ffe837b829407f299 100755
--- 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 Basket\models\RedirectBasketModel;
 use Docserver\controllers\DocserverController;
 use Docserver\models\DocserverModel;
 use Entity\models\ListInstanceModel;
@@ -34,6 +35,7 @@ use Slim\Http\Response;
 use SrcCore\controllers\PasswordController;
 use SrcCore\models\AuthenticationModel;
 use SrcCore\models\CoreConfigModel;
+use SrcCore\models\DatabaseModel;
 use SrcCore\models\PasswordModel;
 use User\models\UserBasketPreferenceModel;
 use User\models\UserEntityModel;
@@ -316,7 +318,7 @@ class UserController
         $user['groups'] = UserModel::getGroupsByUserId(['userId' => $user['user_id']]);
         $user['entities'] = UserModel::getEntitiesById(['userId' => $user['user_id']]);
         $user['baskets'] = BasketModel::getBasketsByUserId(['userId' => $user['user_id'], 'unneededBasketId' => ['IndexingBasket']]);
-        $user['redirectedBaskets'] = BasketModel::getRedirectedBasketsByUserId(['userId' => $user['user_id']]);
+        $user['redirectedBaskets'] = RedirectBasketModel::getRedirectedBasketsByUserId(['userId' => $user['id']]);
         $user['regroupedBaskets'] = BasketModel::getRegroupedBasketsByUserId(['userId' => $user['user_id']]);
         $user['passwordRules'] = PasswordModel::getEnabledRules();
         $user['canModifyPassword'] = true;
@@ -397,33 +399,33 @@ class UserController
             return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]);
         }
 
-        $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]);
-
         $data = $request->getParams();
 
+        DatabaseModel::beginTransaction();
         foreach ($data as $key => $value) {
-            if (empty($value['newUser']) || empty($value['basketId']) || empty($value['basketOwner']) || empty($value['virtual'])) {
+            if (empty($value['actual_user_id']) || empty($value['basket_id']) || empty($value['group_id'])) {
+                DatabaseModel::rollbackTransaction();
                 return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
             }
-            $check = UserModel::getByUserId(['userId' => $value['newUser'], 'select' => ['1']]);
+            $check = UserModel::getById(['id' => $value['actual_user_id'], 'select' => ['1']]);
             if (empty($check)) {
+                DatabaseModel::rollbackTransaction();
                 return $response->withStatus(400)->withJson(['errors' => 'User not found']);
             }
 
-            if ($value['basketOwner'] != $user['user_id']) {
-                BasketModel::updateRedirectedBaskets([
-                    'userId'      => $user['user_id'],
-                    'basketOwner' => $value['basketOwner'],
-                    'basketId'    => $value['basketId'],
-                    'userAbs'     => $value['basketOwner'],
-                    'newUser'     => $value['newUser']
+            if (!empty($value['originalOwner'])) {
+                RedirectBasketModel::update([
+                    'actual_user_id'    => $value['actual_user_id'],
+                    'basket_id'         => $value['basket_id'],
+                    'group_id'          => $value['group_id'],
+                    'owner_user_id'     => $value['originalOwner']
                 ]);
                 HistoryController::add([
-                    'tableName'    => 'user_abs',
+                    'tableName'    => 'redirected_baskets',
                     'recordId'     => $GLOBALS['userId'],
                     'eventType'    => 'UP',
                     'eventId'      => 'basketRedirection',
-                    'info'         => _BASKET_REDIRECTION . " {$value['basketId']} {$user['user_id']} => {$value['newUser']}"
+                    'info'         => _BASKET_REDIRECTION . " {$value['basket_id']} {$value['actual_user_id']}"
                 ]);
                 unset($data[$key]);
             }
@@ -431,57 +433,52 @@ class UserController
 
         if (!empty($data)) {
             foreach ($data as $value) {
-                BasketModel::setRedirectedBaskets([
-                    'userAbs'       => $user['user_id'],
-                    'newUser'       => $value['newUser'],
-                    'basketId'      => $value['basketId'],
-                    'basketOwner'   => $value['basketOwner'],
-                    'isVirtual'     => $value['virtual']
+                RedirectBasketModel::create([
+                    'actual_user_id'    => $value['actual_user_id'],
+                    'basket_id'         => $value['basket_id'],
+                    'group_id'          => $value['group_id'],
+                    'owner_user_id'     => $aArgs['id']
                 ]);
-
                 HistoryController::add([
-                    'tableName'    => 'user_abs',
+                    'tableName'    => 'redirected_baskets',
                     'recordId'     => $GLOBALS['userId'],
                     'eventType'    => 'UP',
                     'eventId'      => 'basketRedirection',
-                    'info'         => _BASKET_REDIRECTION . " {$value['basketId']} {$user['user_id']} => {$value['newUser']}"
+                    'info'         => _BASKET_REDIRECTION . " {$value['basket_id']} {$aArgs['id']} => {$value['actual_user_id']}"
                 ]);
             }
         }
 
+        DatabaseModel::commitTransaction();
+
+        $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]);
+
         return $response->withJson([
             'baskets'   => BasketModel::getBasketsByUserId(['userId' => $user['user_id'], 'unneededBasketId' => ['IndexingBasket']])
         ]);
     }
 
-    public function deleteRedirectedBaskets(Request $request, Response $response, array $aArgs)
+    public function deleteRedirectedBasket(Request $request, Response $response, array $aArgs)
     {
         $error = $this->hasUsersRights(['id' => $aArgs['id'], 'himself' => true]);
         if (!empty($error['error'])) {
             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']);
+        $redirectedBasket = RedirectBasketModel::get(['select' => ['actual_user_id', 'owner_user_id'], 'where' => ['id = ?'], 'data' => [$aArgs['redirectBasketid']]]);
+        if (empty($redirectedBasket[0]) || ($redirectedBasket[0]['actual_user_id'] != $aArgs['id'] && $redirectedBasket[0]['owner_user_id'] != $aArgs['id'])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Redirected basket out of perimeter']);
         }
 
-        $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]);
-
-        if ($data['basketOwner'] != $user['user_id']) {
-            BasketModel::deleteBasketRedirection(['userId' => $data['basketOwner'], 'basketId' => $aArgs['basketId']]);
-        } else {
-            BasketModel::deleteBasketRedirection(['userId' => $user['user_id'], 'basketId' => $aArgs['basketId']]);
-        }
+        RedirectBasketModel::delete(['where' => ['id = ?'], 'data' => [$aArgs['redirectBasketid']]]);
 
+        $user = UserModel::getById(['id' => $aArgs['id'], 'select' => ['user_id']]);
         HistoryController::add([
-            'tableName'    => 'user_abs',
+            'tableName'    => 'redirected_baskets',
             'recordId'     => $GLOBALS['userId'],
-            'eventType'    => 'UP',
+            'eventType'    => 'DEL',
             'eventId'      => 'basketRedirection',
-            'info'         => _BASKET_REDIRECTION_SUPPRESSION . " {$aArgs['basketId']} {$user['user_id']}"
+            'info'         => _BASKET_REDIRECTION_SUPPRESSION . " {$user['user_id']}"
         ]);
 
         return $response->withJson([
diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php
index 91cd8ada4c1da4c8b84215ee1a64d5bc311dcc9c..f54ac998b4e85945685c1f0a1e4646977e0e9d76 100755
--- a/src/core/controllers/AutoCompleteController.php
+++ b/src/core/controllers/AutoCompleteController.php
@@ -92,7 +92,7 @@ class AutoCompleteController
         ]);
 
         $users = UserModel::get([
-            'select'    => ['user_id', 'firstname', 'lastname'],
+            'select'    => ['id', 'user_id', 'firstname', 'lastname'],
             'where'     => $requestData['where'],
             'data'      => $requestData['data'],
             'orderBy'   => ['lastname'],
@@ -104,6 +104,7 @@ class AutoCompleteController
             $data[] = [
                 'type'          => 'user',
                 'id'            => $value['user_id'],
+                'serialId'      => $value['id'],
                 'idToDisplay'   => "{$value['firstname']} {$value['lastname']}",
                 'otherInfo'     => ''
             ];
diff --git a/src/core/controllers/PreparedClauseController.php b/src/core/controllers/PreparedClauseController.php
index e36ce707540564b3193a7351d710d2176bcfeed8..e4d44a5738a508364d4b3d732d0d19f723644ff8 100755
--- a/src/core/controllers/PreparedClauseController.php
+++ b/src/core/controllers/PreparedClauseController.php
@@ -23,20 +23,20 @@ class PreparedClauseController
 {
     public static function getPreparedClause(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['clause', 'userId']);
-        ValidatorModel::stringType($aArgs, ['clause', 'userId']);
+        ValidatorModel::notEmpty($aArgs, ['clause', 'login']);
+        ValidatorModel::stringType($aArgs, ['clause', 'login']);
 
         $clause = $aArgs['clause'];
 
         if (preg_match('/@user/', $clause)) {
-            $clause = str_replace('@user', "'{$aArgs['userId']}'", $clause);
+            $clause = str_replace('@user', "'{$aArgs['login']}'", $clause);
         }
         if (preg_match('/@email/', $clause)) {
-            $user = UserModel::getByUserId(['userId' => $aArgs['userId'], 'select' => ['mail']]);
+            $user = UserModel::getByUserId(['userId' => $aArgs['login'], 'select' => ['mail']]);
             $clause = str_replace('@email', "'{$user['mail']}'", $clause);
         }
         if (preg_match('/@my_entities/', $clause)) {
-            $entities = EntityModel::getByUserId(['userId' => $aArgs['userId'], 'select' => ['entity_id']]);
+            $entities = EntityModel::getByUserId(['userId' => $aArgs['login'], 'select' => ['entity_id']]);
 
             $myEntitiesClause = '';
             foreach ($entities as $key => $entity) {
@@ -52,7 +52,7 @@ class PreparedClauseController
             $clause = str_replace('@my_entities', $myEntitiesClause, $clause);
         }
         if (preg_match('/@my_primary_entity/', $clause)) {
-            $entity = UserModel::getPrimaryEntityByUserId(['userId' => $aArgs['userId']]);
+            $entity = UserModel::getPrimaryEntityByUserId(['userId' => $aArgs['login']]);
 
             if (empty($entity)) {
                 $primaryEntity = "''";
@@ -218,7 +218,7 @@ class PreparedClauseController
         ValidatorModel::arrayType($aArgs, ['select', 'orderBy']);
         ValidatorModel::intType($aArgs, ['limit']);
 
-        $clause = PreparedClauseController::getPreparedClause(['clause' => $aArgs['clause'], 'userId' => $aArgs['userId']]);
+        $clause = PreparedClauseController::getPreparedClause(['clause' => $aArgs['clause'], 'login' => $aArgs['userId']]);
 
         $preg = preg_match('#\b(?:abort|alter|copy|create|delete|disgard|drop|execute|grant|insert|load|lock|move|reset|truncate|update)\b#i', $clause);
         if ($preg === 1) {
diff --git a/src/core/models/DatabaseModel.php b/src/core/models/DatabaseModel.php
index ed14f7a35c6974deef789652c857bd5b28446409..06abbd1dfb1f662846d9f516d47f85308fd86122 100755
--- a/src/core/models/DatabaseModel.php
+++ b/src/core/models/DatabaseModel.php
@@ -259,4 +259,46 @@ class DatabaseModel
 
         return true;
     }
+
+    /**
+     * Database Begin Transaction Function
+     *
+     * @return bool
+     * @throws \Exception
+     */
+    public static function beginTransaction()
+    {
+        $db = new DatabasePDO();
+        $db->query('BEGIN');
+
+        return true;
+    }
+
+    /**
+     * Database Commit Transaction Function
+     *
+     * @return bool
+     * @throws \Exception
+     */
+    public static function commitTransaction()
+    {
+        $db = new DatabasePDO();
+        $db->query('COMMIT');
+
+        return true;
+    }
+
+    /**
+     * Database Rollback Transaction Function
+     *
+     * @return bool
+     * @throws \Exception
+     */
+    public static function rollbackTransaction()
+    {
+        $db = new DatabasePDO();
+        $db->query('ROLLBACK');
+
+        return true;
+    }
 }
diff --git a/src/frontend/app/app-routing.module.ts b/src/frontend/app/app-routing.module.ts
index bf6f3623a8bec854899d7fecbcaaf6b3dfa1a961..271f4700bd0731d919b9204e0fe19e0d9bf61e6a 100755
--- a/src/frontend/app/app-routing.module.ts
+++ b/src/frontend/app/app-routing.module.ts
@@ -6,7 +6,7 @@ import { PasswordModificationComponent }    from './password-modification.compon
 import { ProfileComponent }                 from './profile.component';
 import { AboutUsComponent }                 from './about-us.component';
 import { HomeComponent }                    from './home.component';
-import { BasketListComponent }              from './basket/basket-list.component';
+import { BasketListComponent }              from './list/basket-list.component';
 import { SignatureBookComponent }           from './signature-book.component';
 import { SaveNumericPackageComponent }      from './save-numeric-package.component';
 
diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts
index d5d2c5d1dac2635fd5df3a18f43eb707cd8da7a5..794879d4572d9d9448e45b9bc2c9c47e9ca8ce96 100755
--- a/src/frontend/app/app.module.ts
+++ b/src/frontend/app/app.module.ts
@@ -6,6 +6,7 @@ import { CustomSnackbarComponent }              from './notification.service';
 import { ConfirmModalComponent }                from './confirmModal.component';
 import { ShortcutMenuService }                  from '../service/shortcut-menu.service';
 import { HeaderService }                        from '../service/header.service';
+import { FiltersListService }                   from '../service/filtersList.service';
 
 import { AppComponent }                         from './app.component';
 import { AppRoutingModule }                     from './app-routing.module';
@@ -14,12 +15,15 @@ import { AdministrationModule }                 from './administration/administr
 import { ProfileComponent }                     from './profile.component';
 import { AboutUsComponent }                     from './about-us.component';
 import { HomeComponent }                        from './home.component';
-import { BasketListComponent, BottomSheetNoteList, BottomSheetAttachmentList, BottomSheetDiffusionList }  from './basket/basket-list.component';
+import { BasketListComponent, BottomSheetNoteList, BottomSheetAttachmentList, BottomSheetDiffusionList }  from './list/basket-list.component';
 import { PasswordModificationComponent, InfoChangePasswordModalComponent, }        from './password-modification.component';
 import { SignatureBookComponent, SafeUrlPipe }  from './signature-book.component';
 import { SaveNumericPackageComponent }          from './save-numeric-package.component';
 import { ActivateUserComponent }                from './activate-user.component';
 
+
+import { FiltersListComponent }                from './list/filters/filters-list.component';
+
 @NgModule({
     imports: [
         SharedModule,
@@ -42,7 +46,8 @@ import { ActivateUserComponent }                from './activate-user.component'
         ActivateUserComponent,
         BottomSheetNoteList,
         BottomSheetAttachmentList,
-        BottomSheetDiffusionList
+        BottomSheetDiffusionList,
+        FiltersListComponent
     ],
     entryComponents: [
         CustomSnackbarComponent,
@@ -52,7 +57,7 @@ import { ActivateUserComponent }                from './activate-user.component'
         BottomSheetAttachmentList,
         BottomSheetDiffusionList
     ],
-    providers: [ ShortcutMenuService, HeaderService ],
+    providers: [ ShortcutMenuService, HeaderService, FiltersListService ],
     bootstrap: [ AppComponent ]
 })
 export class AppModule { }
diff --git a/src/frontend/app/basket/basket-home.component.html b/src/frontend/app/basket/basket-home.component.html
index aa86694b4712aad5b9a8d96f1b8f4047c84d5b4e..96cd3d656453b2ceb5237b9d79879ccc7c653305 100755
--- a/src/frontend/app/basket/basket-home.component.html
+++ b/src/frontend/app/basket/basket-home.component.html
@@ -31,14 +31,14 @@
                     </p>
                 </a>
                 <!-- TODO NEW BASKET LIST-->
-                <!--<a mat-list-item *ngIf="!basket.redirected" (click)="closePanelLeft();" routerLink="/basketList/{{regroupedBasket.groupSerialId}}/baskets/{{basket.basket_id}}" style="cursor:pointer;" [ngStyle]="{'opacity': basket.resourceNumber==0 ? '0.5' : '1'}">
+                <!-- <a mat-list-item *ngIf="!basket.redirected" (click)="closePanelLeft();" routerLink="/basketList/{{regroupedBasket.groupSerialId}}/baskets/{{basket.basket_id}}" style="cursor:pointer;" [ngStyle]="{'opacity': basket.resourceNumber==0 ? '0.5' : '1'}">
                     <mat-icon [ngStyle]="{'color': basket.color}" *ngIf="!mobileMode" mat-list-icon class="fa fa-inbox"></mat-icon>
                     <span *ngIf="basket.resourceNumber==0" class="badge" style="min-width:auto;">{{basket.resourceNumber}}</span>
                     <span *ngIf="basket.resourceNumber!=0" bgcolor="warn" class="badge" style="min-width:auto;">{{basket.resourceNumber}}</span>
                     <p mat-line title="{{basket.basket_name}}" [ngStyle]="{'color': basket.color}">
                         {{basket.basket_name}}
                     </p>
-                </a>-->
+                </a> -->
             </ng-container> 
         </mat-nav-list>
     </ng-container>
@@ -50,7 +50,7 @@
                 <mat-icon *ngIf="!mobileMode" style="color:#666" mat-list-icon class="fa fa-inbox"></mat-icon>
                 <span *ngIf="basket.resourceNumber==0" class="badge" style="min-width:auto;">{{basket.resourceNumber}}</span>
                 <span *ngIf="basket.resourceNumber!=0" bgcolor="warn" class="badge" style="min-width:auto;">{{basket.resourceNumber}}</span>
-                <p mat-line (click)="goToRedirect(basket.basket_id,basket.basket_owner)" title="{{basket.basket_name}}" style="color:#666">
+                <p mat-line (click)="goToRedirect(basket.basket_id, basket.ownerLogin, basket.uselessGroupId)" title="{{basket.basket_name}}" style="color:#666">
                     {{basket.basket_name}}<br/><small color="primary">({{basket.userToDisplay}})</small>
                 </p>
             </a>
diff --git a/src/frontend/app/basket/basket-home.component.ts b/src/frontend/app/basket/basket-home.component.ts
index 845ef6215b0c29391cececb64bd1bb3e6292788a..de4d5656ec196ed5aba28c498624d42e9c34bb6e 100755
--- a/src/frontend/app/basket/basket-home.component.ts
+++ b/src/frontend/app/basket/basket-home.component.ts
@@ -28,12 +28,12 @@ export class BasketHomeComponent implements OnInit {
         this.coreUrl = angularGlobals.coreUrl;
     }
 
-    goTo(basketId:any,groupId:any) {
+    goTo(basketId:any, groupId:any) {
         window.location.href="index.php?page=view_baskets&fromV2=true&module=basket&baskets="+basketId+"&groupId="+groupId;
     }
 
-    goToRedirect(basketId:any,owner:any) {
-        window.location.href="index.php?page=view_baskets&fromV2=true&module=basket&baskets="+basketId+"_"+owner+"&groupId=";
+    goToRedirect(basketId:any, owner:any, groupId:any) {
+        window.location.href="index.php?page=view_baskets&fromV2=true&module=basket&baskets="+basketId+"_"+owner+"&groupId=" + groupId;
     }
 
     closePanelLeft() {
diff --git a/src/frontend/app/basket/attachment-list.component.html b/src/frontend/app/list/attachment-list.component.html
similarity index 100%
rename from src/frontend/app/basket/attachment-list.component.html
rename to src/frontend/app/list/attachment-list.component.html
diff --git a/src/frontend/app/list/basket-list.component.html b/src/frontend/app/list/basket-list.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..d8ffd77e3739258bf54afa00e5845ab501a363ec
--- /dev/null
+++ b/src/frontend/app/list/basket-list.component.html
@@ -0,0 +1,164 @@
+<div class="admin-container" [class.admin-is-mobile]="mobileQuery.matches">
+    <mat-sidenav-container autosize class="admin-sidenav-container">
+        <mat-sidenav #snav [mode]="mobileMode ? 'over' : 'side'" [fixedInViewport]="mobileMode" fixedTopGap="56"
+            [opened]="mobileMode ? false : true" autoFocus="false" style="overflow-x:hidden;" [ngStyle]="{'width': mobileMode ? '80%' : '400px'}">
+            <menu-shortcut></menu-shortcut>
+            <menu-nav></menu-nav>
+            <basket-home *ngIf="homeData" [homeData]="homeData" [snavL]="snav"></basket-home>
+            <mat-divider></mat-divider>
+        </mat-sidenav>
+        <mat-sidenav-content>
+            <div *ngIf="loading" style="display:flex;height:100%;">
+                <mat-spinner style="margin:auto;"></mat-spinner>
+            </div>
+            <mat-card class="card-app-content">
+                <div class="example-loading-shade" *ngIf="isLoadingResults">
+                    <mat-spinner *ngIf="isLoadingResults"></mat-spinner>
+                </div>
+                <div class="row" style="margin:0px;">
+                    <div class="col-md-9 col-xs-9">
+                        <mat-button-toggle-group #group="matButtonToggleGroup" class="envFilter" (change)="updateFilters($event)" multiple>
+                            <mat-checkbox color="primary" style="margin: 10px;" title="Sélectionner tous les courriers de la bannette"></mat-checkbox>
+                            <button mat-stroked-button (click)="openFilter()">Filtres</button>
+                            <mat-button-toggle [checked]="this.listProperties.onlyProcesLimit" value="onlyProcesLimit" title="{{lang.displayProcessLimitRes}}">
+                                <mat-icon fontSet="fas" fontIcon="fa-stopwatch fa-2x"></mat-icon>
+                            </mat-button-toggle>
+                            <mat-button-toggle [checked]="this.listProperties.onlyNewRes"value="onlyNewRes" title="{{lang.displayNewRes}}">
+                                <mat-icon fontSet="fas" fontIcon="fa-eye-slash fa-2x"></mat-icon>
+                            </mat-button-toggle>
+                            <mat-button-toggle [checked]="this.listProperties.withPj" value="withPj" title="{{lang.displayWithAttach}}">
+                                <mat-icon fontSet="fas" fontIcon="fa-reply fa-2x"></mat-icon>
+                            </mat-button-toggle>
+                            <mat-button-toggle [checked]="this.listProperties.withNote" value="withNote" title="{{lang.displayWithNotes}}">
+                                <mat-icon fontSet="fas" fontIcon="fa-comments fa-2x"></mat-icon>
+                            </mat-button-toggle>
+                            <mat-form-field appearance="outline" [style.fontSize.px]="10" style="width:200px !important;">
+                                <mat-label>{{lang.orderBy}}</mat-label>
+                                <mat-select multiple>
+                                    <mat-option [value]="column.id" *ngFor="let column of displayColsOrder">
+                                        {{lang[column.id]}}
+                                    </mat-option>
+                                </mat-select>
+                            </mat-form-field>
+                            <button mat-icon-button title="{{lang.descOrder}}" style="color: rgba(0,0,0,0.38);">
+                                <mat-icon fontSet="fas" fontIcon="fa-sort-amount-up  fa-2x"></mat-icon>
+                            </button>
+                            <button mat-icon-button [matMenuTriggerFor]="menuParamList">
+                                <mat-icon color="primary" fontSet="fas" fontIcon="fa-cog fa-2x"></mat-icon>
+                            </button>
+                            <mat-menu #menuParamList="matMenu">
+                                <button mat-menu-item>
+                                    <mat-icon fontSet="fas" fontIcon="fa-print fa-2x"></mat-icon>
+                                    <span>{{lang.printResultList}}</span>
+                                </button>
+                                <button mat-menu-item>
+                                    <mat-icon fontSet="fas" fontIcon="fa-file-export fa-2x"></mat-icon>
+                                    <span>{{lang.exportDatas}}</span>
+                                </button>
+                                <button mat-menu-item>
+                                    <mat-icon fontSet="far" fontIcon="fa-list-alt fa-2x"></mat-icon>
+                                    <span>{{lang.settingsList}}</span>
+                                </button>
+                            </mat-menu>
+                        </mat-button-toggle-group>
+                        <div class="filterBadges">
+                            <span class="label label-info" title="{{lang.currentFilters}}" *ngFor="let category of this.listProperties.categories" (click)="openFilter()">{{category.label}}</span>
+                            <span class="label label-info" title="{{lang.currentFilters}}" *ngFor="let priority of this.listProperties.priorities" (click)="openFilter()">{{priority.label}}</span>
+                            <span class="label label-info" title="{{lang.currentFilters}}" *ngFor="let entity of this.listProperties.entities" (click)="openFilter()">{{entity.label}}</span>
+                        </div>
+                    </div>
+                    <div class="col-md-3 col-xs-3">
+                        <mat-paginator [length]="resultsLength" [pageSize]="10"></mat-paginator>
+                    </div>
+                </div>
+
+                <table #tableBasketListSort="matSort" mat-table [dataSource]="data" matSort matSortActive="res_id"
+                    matSortDisableClear matSortDirection="asc" style="width:100%;table-layout: fixed;">
+                    <ng-container matColumnDef="res_id">
+                        <td mat-cell *matCellDef="let row" class="resultContainer" [class.resultContainer-mobile]="mobileMode">
+                            <!-- Secondary Info Line -->
+                            <mat-toolbar *ngIf="displayedSecondaryData.length > 0">
+                                <div class="resultCol {{data.class}}" *ngFor="let data of displayedSecondaryData">
+                                    <span *ngIf="data.id == 'status_label'">
+                                        <mat-icon [ngStyle]="{'color': row.priority_color}" color="primary" class="{{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}} {{row.status_icon}} {{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}}-2x"
+                                            title="{{row.status_label}} ({{row.status_id}})"></mat-icon><br />
+                                    </span>
+                                    <ng-container *ngIf="data.id == 'date'">
+                                        <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>&nbsp;{{row.creation_date
+                                        | timeAgo}} - <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;<span
+                                            [innerHTML]="row.process_limit_date | timeLimit" title='{{row.process_limit_date | date : "le dd/MM/y à HH:mm"}}'></span>
+                                    </ng-container>
+                                    <ng-container *ngIf="data.icon != ''">
+                                        <i class="{{data.icon}}"></i>
+                                        &nbsp;
+                                    </ng-container>
+                                    <ng-container *ngIf="data.id == 'category_id'">
+                                        {{lang[row.category_id]}}
+                                    </ng-container>
+                                    <ng-container *ngIf="data.id != 'status_label' && data.id != 'date' && data.id != 'category_id'">
+                                        {{row[data.id]}}
+                                    </ng-container>
+                                </div>
+                            </mat-toolbar>
+                            <!-- Primary Info Line -->
+                            <div class="resultRow newRow" [class.resultRow-mobile]="mobileMode">
+                                <div *ngIf="!mobileMode" class="checkThis">
+                                    <mat-checkbox color="primary"></mat-checkbox>
+                                </div>
+                                <div class="resultCol {{data.class}}" *ngFor="let data of displayedMainData">
+                                    <span *ngIf="data.id == 'alt_identifier'">
+                                        <mat-icon [ngStyle]="{'color': row.priority_color}" color="primary" class="{{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}} {{row.status_icon}} {{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}}-2x"
+                                            title="{{row.status_label}} ({{row.status_id}})"></mat-icon><br />
+                                        <span style="color: rgba(0,0,0,0.4);font-size: 90%;">{{row[data.id]}}</span>
+                                    </span>
+                                    <ng-container *ngIf="data.id == 'date'">
+                                        <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>&nbsp;{{row.creation_date
+                                        | timeAgo}} - <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;<span
+                                            [innerHTML]="row.process_limit_date | timeLimit" title='{{row.process_limit_date | date : "le dd/MM/y à HH:mm"}}'></span>
+                                    </ng-container>
+                                    <ng-container *ngIf="data.icon != ''">
+                                        <i class="{{data.icon}}"></i>
+                                        &nbsp;
+                                    </ng-container>
+                                    <ng-container *ngIf="data.id == 'category_id'">
+                                        {{lang[row.category_id]}}
+                                    </ng-container>
+                                    <ng-container *ngIf="data.id != 'status_label' && data.id != 'date' && data.id != 'category_id' && data.id != 'alt_identifier'">
+                                        {{row[data.id]}}
+                                    </ng-container>
+                                </div>
+                                <mat-button-toggle-group #group="matButtonToggleGroup" class="actions" multiple>
+                                    <button color="primary" mat-icon-button (click)="openBottomSheet(row)">
+                                        <mat-icon fontSet="fas" matBadge="??" fontIcon="fa-comments fa-2x"></mat-icon>
+                                    </button>
+                                    <button color="primary" mat-icon-button (click)="openAttachSheet(row)">
+                                        <mat-icon fontSet="fas" matBadge="??" fontIcon="fa-paperclip fa-2x"></mat-icon>
+                                    </button>
+                                    <button color="primary" mat-icon-button (click)="openDiffusionSheet(row)">
+                                        <mat-icon matBadgeSize="medium" fontSet="fas" fontIcon="fa-sitemap fa-2x"></mat-icon>
+                                    </button>
+                                    <button color="primary" mat-icon-button (click)="goTo(row)">
+                                        <mat-icon fontSet="fas" fontIcon="fa-eye fa-2x"></mat-icon>
+                                    </button>
+                                    <button color="primary" mat-icon-button (click)="goToDetail(row);">
+                                        <mat-icon fontSet="fas" fontIcon="fa-info-circle fa-2x"></mat-icon>
+                                    </button>
+                                </mat-button-toggle-group>
+                            </div>
+                        </td>
+                    </ng-container>
+                    <tr mat-row *matRowDef="let row; columns: displayedColumnsBasket;" (click)="test();"></tr>
+                </table>
+                <div class="mat-paginator" style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;">{{resultsLength}}
+                    {{lang.entries}}</div>
+            </mat-card>
+        </mat-sidenav-content>
+        <mat-sidenav #snav2 mode="over" [fixedInViewport]="mobileQuery.matches" fixedTopGap="56" position='end'
+            [opened]="mobileQuery.matches ? false : false" style="overflow-x:hidden;" [class.docView]="!filterMode" [ngStyle]="{'width': mobileMode ? '80%' : '40%'}">
+            <div *ngIf="innerHtml && !filterMode" [innerHTML]="innerHtml" style="height: 100%;overflow: hidden;"></div>
+
+            <app-filters-list *ngIf="filterMode" [listProperties]="this.listProperties"></app-filters-list>
+            <mat-divider></mat-divider>
+        </mat-sidenav>
+    </mat-sidenav-container>
+</div>
\ No newline at end of file
diff --git a/src/frontend/app/list/basket-list.component.scss b/src/frontend/app/list/basket-list.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..42aec0d03763d8bf13a1c12414f5bfa4af289b52
--- /dev/null
+++ b/src/frontend/app/list/basket-list.component.scss
@@ -0,0 +1,128 @@
+.docView {
+    overflow: hidden;
+}
+
+mat-toolbar {
+    border: solid 1px #F9983066;
+    font-size: 10px;
+    height: 20px;
+    color: #666;
+}
+
+.resultContainer {
+    // color : rgb(102, 102, 102);
+    padding: 10px;
+
+    &-mobile {
+        padding-left: 0px !important;
+        padding-right: 0px !important;
+    }
+}
+
+.resultRow {
+    align-items: center;
+    display: flex;
+    padding: 5px;
+
+    &-mobile {
+        font-size: 80%;
+    }
+}
+
+.resultCol {
+    flex: 1;
+    overflow: hidden;
+    text-overflow: ellipsis;
+
+    &-mobile {
+        overflow: inherit;
+        text-overflow: inherit;
+        word-break: break-all;
+    }
+}
+
+.twoCol {
+    flex: 2;
+}
+
+.mat-row:hover {
+    background: inherit;
+}
+
+.newRow {
+    // font-weight: bold;
+}
+.endCol {
+    text-align: right;
+}
+
+.chrono {
+    color: #666;
+    &-mobile {
+        font-size: 70%;
+    }
+}
+
+.envFilter {
+    height: 40px;
+
+    mat-icon{
+        height: auto;
+    }
+
+    .mat-button-toggle-checked {
+        background-color: #F99830;
+        color: white;
+    }
+}
+
+.checkThis {
+    width: 40px;
+    text-align: center;
+}
+
+.statusCol {
+    width: 80px;
+    text-align: center;
+}
+
+.actionsCol {
+    width: 40px;
+}
+
+
+.actions {
+    box-shadow: none;
+    flex: 1;
+    justify-content: end;
+    overflow: inherit;
+}
+.mat-badge-content {
+    background: #F99830;   
+}
+
+.smallFontData {
+    font-size: 10px;
+}
+
+.centerData {
+    text-align: center;
+}
+
+.rightData {
+    text-align: right;
+}
+
+.softColorData {
+    color: #666;
+}
+
+.longData {
+    flex: 3;
+}
+
+.filterBadges>.label {
+    margin: 5px;
+    background: #F99830;
+    cursor: pointer;
+}
\ No newline at end of file
diff --git a/src/frontend/app/basket/basket-list.component.ts b/src/frontend/app/list/basket-list.component.ts
similarity index 71%
rename from src/frontend/app/basket/basket-list.component.ts
rename to src/frontend/app/list/basket-list.component.ts
index 48618a6861266d41fb258d6bc95691d48f4c77ae..7c4ac9210e98bdead1125a7144ac88062daf9b3e 100755
--- a/src/frontend/app/basket/basket-list.component.ts
+++ b/src/frontend/app/list/basket-list.component.ts
@@ -1,14 +1,18 @@
-import { ChangeDetectorRef, Component, OnInit, ViewChild, QueryList, ViewChildren, Inject } from '@angular/core';
+import { ChangeDetectorRef, Component, OnInit, ViewChild, Inject } from '@angular/core';
 import { MediaMatcher } from '@angular/cdk/layout';
 import { HttpClient } from '@angular/common/http';
 import { LANG } from '../translate.component';
 import { merge, Observable, of as observableOf } from 'rxjs';
 import { NotificationService } from '../notification.service';
-import { MatDialog, MatSidenav, MatExpansionPanel, MatTableDataSource, MatPaginator, MatSort, MatBottomSheet, MatBottomSheetRef, MAT_BOTTOM_SHEET_DATA } from '@angular/material';
+import { MatDialog, MatSidenav, MatPaginator, MatSort, MatBottomSheet, MatBottomSheetRef, MAT_BOTTOM_SHEET_DATA, MatButtonToggleGroup } from '@angular/material';
 
 import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
 import { startWith, switchMap, map, catchError } from 'rxjs/operators';
 import { ActivatedRoute } from '@angular/router';
+import { HeaderService } from '../../service/header.service';
+import { FiltersListService } from '../../service/filtersList.service';
+
+
 
 declare function $j(selector: any): any;
 
@@ -16,6 +20,7 @@ declare var angularGlobals: any;
 
 @Component({
     templateUrl: "basket-list.component.html",
+    styleUrls: ['basket-list.component.scss'],
     providers: [NotificationService]
 })
 export class BasketListComponent implements OnInit {
@@ -32,20 +37,81 @@ export class BasketListComponent implements OnInit {
     basketUrl: string;
     homeData: any;
 
-
+    filterMode: boolean = false;
     @ViewChild('snav') sidenavLeft: MatSidenav;
     @ViewChild('snav2') sidenavRight: MatSidenav;
 
-
-    displayedColumnsBasket: string[] = ['res_id', 'subject', 'contact_society', 'creation_date'];
+    displayedColumnsBasket: string[] = ['res_id'];
+
+    displayedMainData: any = [
+        {
+            'id' : 'alt_identifier',
+            'class' : 'softColorData centerData',
+            'icon' : ''
+        },
+        {
+            'id' : 'subject',
+            'class' : 'longData',
+            'icon' : ''
+        }
+    ];
+
+    displayedSecondaryData: any = [];
+    // displayedSecondaryData: any = [
+    //     {
+    //         'id' : 'priority_label',
+    //         'class' : '',
+    //         'icon' : ''
+    //     },
+    //     {
+    //         'id' : 'category_id',
+    //         'class' : '',
+    //         'icon' : ''
+    //     },
+    //     {
+    //         'id' : 'doctype_label',
+    //         'class' : '',
+    //         'icon' : 'fa fa-file'
+    //     },
+    //     {
+    //         'id' : 'contact_society',
+    //         'class' : '',
+    //         'icon' : ''
+    //     },
+    //     {
+    //         'id' : 'contact_society',
+    //         'class' : '',
+    //         'icon' : ''
+    //     },
+    //     {
+    //         'id' : 'date',
+    //         'class' : 'rightData',
+    //         'icon' : ''
+    //     },
+    // ];
+
+    displayColsOrder = [
+        {'id' : 'dest_user'},
+        {'id' : 'creation_date'},
+        {'id' : 'process_limit_date'},
+        {'id' : 'destination'},
+        {'id' : 'subject'},
+        {'id' : 'alt_identifier'},
+        {'id' : 'priority'},
+        {'id' : 'status'},
+        {'id' : 'type_id'}
+    ]
 
     exampleDatabase: ExampleHttpDao | null;
     data: any[] = [];
     resultsLength = 0;
     isLoadingResults = true;
+    listProperties: any = {};
+    listPropertiesIndex: number = 0;
+
     @ViewChild(MatPaginator) paginator: MatPaginator;
     @ViewChild('tableBasketListSort') sort: MatSort;
-    constructor(changeDetectorRef: ChangeDetectorRef, private route: ActivatedRoute, media: MediaMatcher, public http: HttpClient, public dialog: MatDialog, private sanitizer: DomSanitizer, private bottomSheet: MatBottomSheet) {
+    constructor(changeDetectorRef: ChangeDetectorRef, private route: ActivatedRoute, media: MediaMatcher, public http: HttpClient, public dialog: MatDialog, private sanitizer: DomSanitizer, private bottomSheet: MatBottomSheet, private headerService: HeaderService, private filtersListService: FiltersListService) {
         this.mobileMode = angularGlobals.mobileMode;
         $j("link[href='merged_css.php']").remove();
         this.mobileQuery = media.matchMedia('(max-width: 768px)');
@@ -59,7 +125,8 @@ export class BasketListComponent implements OnInit {
         this.loading = false;
 
         if (this.mobileMode) {
-            this.displayedColumnsBasket = ['res_id', 'subject'];
+            $j('.mat-paginator-navigation-previous').hide();
+            $j('.mat-paginator-navigation-next').hide();
         }
 
         this.http.get(this.coreUrl + "rest/home")
@@ -67,18 +134,21 @@ export class BasketListComponent implements OnInit {
                 this.homeData = data;
             });
 
-
+        this.isLoadingResults = false;
         this.route.params.subscribe(params => {
             this.basketUrl = this.coreUrl + 'rest/resources/groups/' + params['groupSerialId'] + '/baskets/' + params['basketId'];
-            this.http.get(this.coreUrl + "rest/baskets/" + params['basketId'])
+            this.http.get(this.basketUrl)
                 .subscribe((data: any) => {
-                    window['MainHeaderComponent'].refreshTitle(data.basket.basket_name);
+                    console.log(data);
+                    this.filterMode = false;
                     window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                    window['MainHeaderComponent'].setSnavRight(null);
-                    this.exampleDatabase = new ExampleHttpDao(this.http);
+                    window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
+                    this.exampleDatabase = new ExampleHttpDao(this.http, this.filtersListService);
+
+                    this.listProperties = this.filtersListService.initListsProperties('bbain', params['groupSerialId'], params['basketId']);
 
                     // If the user changes the sort order, reset back to the first page.
-                    this.paginator.pageIndex = 0;
+                    this.paginator.pageIndex = this.listProperties.page;
                     this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
 
                     merge(this.sort.sortChange, this.paginator.page)
@@ -92,7 +162,7 @@ export class BasketListComponent implements OnInit {
                             map(data => {
                                 // Flip flag to show that loading has finished.
                                 this.isLoadingResults = false;
-                                this.resultsLength = data.number;
+                                this.resultsLength = data.count;
 
                                 return data.resources;
                             }),
@@ -111,6 +181,7 @@ export class BasketListComponent implements OnInit {
     }
 
     goTo(row: any) {
+        this.filterMode = false;
         if (this.docUrl == this.coreUrl + 'rest/res/' + row.res_id + '/content' && this.sidenavRight.opened) {
             this.sidenavRight.close();
         } else {
@@ -122,6 +193,11 @@ export class BasketListComponent implements OnInit {
         }
     }
 
+    openFilter() {
+        this.filterMode = true;
+        this.sidenavRight.open();
+    }
+
     goToDetail(row: any) {
         location.href = "index.php?page=details&dir=indexing_searching&id=" + row.res_id;
     }
@@ -151,18 +227,32 @@ export class BasketListComponent implements OnInit {
                 console.log(data);
             });
     }
+
+    updateFilters(e: any) {
+        this.listProperties.onlyProcesLimit = false;
+        this.listProperties.onlyNewRes = false;
+        this.listProperties.withPj = false;
+        this.listProperties.withNote = false;
+
+        e.value.forEach((element: any) => {
+            this.listProperties[element] = true;
+        });
+        this.filtersListService.updateListsProperties(this.listProperties);
+    }
 }
 export interface BasketList {
     resources: any[];
-    number: number;
+    count: number;
 }
 
 
 export class ExampleHttpDao {
 
-    constructor(private http: HttpClient) { }
+    constructor(private http: HttpClient, private filtersListService: FiltersListService) { }
 
     getRepoIssues(sort: string, order: string, page: number, href: string): Observable<BasketList> {
+        
+        this.filtersListService.updateListsPropertiesPage(page);
         let offset = page * 10;
         const requestUrl = `${href}?limit=10&offset=${offset}`;
 
@@ -172,6 +262,7 @@ export class ExampleHttpDao {
 
 @Component({
     templateUrl: 'note-list.component.html',
+    styleUrls: ['note-list.component.scss'],
 })
 export class BottomSheetNoteList {
     coreUrl: string;
diff --git a/src/frontend/app/basket/diffusion-list.component.html b/src/frontend/app/list/diffusion-list.component.html
similarity index 100%
rename from src/frontend/app/basket/diffusion-list.component.html
rename to src/frontend/app/list/diffusion-list.component.html
diff --git a/src/frontend/app/list/filters/filters-list.component.html b/src/frontend/app/list/filters/filters-list.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..f23a41adcc2cb0a135e9275b557a44db4e500f55
--- /dev/null
+++ b/src/frontend/app/list/filters/filters-list.component.html
@@ -0,0 +1,49 @@
+<mat-nav-list disableRipple="true">
+    <h3 mat-subheader>{{lang.filterBy}}</h3>
+    <mat-form-field appearance="outline" style="padding-left:10px;padding-right:10px;">
+        <mat-label>Numéro chrono</mat-label>
+        <input matInput>
+    </mat-form-field>
+    <mat-expansion-panel #categoriesPan>
+        <mat-expansion-panel-header>
+            <mat-panel-title style="color: rgba(0,0,0,0.54);font-size: 14px;font-weight: 500;">
+                Categories
+            </mat-panel-title>
+            <mat-panel-description>
+            </mat-panel-description>
+        </mat-expansion-panel-header>
+        <mat-selection-list #categories (selectionChange)="updateFilters(categories, 'categories')">
+            <mat-list-option checkboxPosition="before" color="primary" [value]="category.id" *ngFor="let category of categoriesList" [selected]="category.selected">
+                {{category.label}}
+            </mat-list-option>
+        </mat-selection-list>
+    </mat-expansion-panel>
+    <mat-expansion-panel #prioritiesPan>
+        <mat-expansion-panel-header>
+            <mat-panel-title style="color: rgba(0,0,0,0.54);font-size: 14px;font-weight: 500;">
+                Priorités
+            </mat-panel-title>
+            <mat-panel-description>
+            </mat-panel-description>
+        </mat-expansion-panel-header>
+        <mat-selection-list #priorities (selectionChange)="updateFilters(priorities, 'priorities')">
+            <mat-list-option checkboxPosition="before" color="primary" [value]="priority.id" *ngFor="let priority of prioritiesList" [selected]="priority.selected">
+                {{priority.label}}
+            </mat-list-option>
+        </mat-selection-list>
+    </mat-expansion-panel>
+    <mat-expansion-panel #entitiesPan>
+        <mat-expansion-panel-header>
+            <mat-panel-title style="color: rgba(0,0,0,0.54);font-size: 14px;font-weight: 500;">
+                Services
+            </mat-panel-title>
+            <mat-panel-description>
+            </mat-panel-description>
+        </mat-expansion-panel-header>
+        <mat-selection-list #entities (selectionChange)="updateFilters(entities, 'entities')">
+            <mat-list-option checkboxPosition="before" color="primary" [value]="entity.id" *ngFor="let entity of entitiesList" [selected]="entity.selected">
+                {{entity.label}}
+            </mat-list-option>
+        </mat-selection-list>
+    </mat-expansion-panel>
+</mat-nav-list>
\ No newline at end of file
diff --git a/src/frontend/app/list/filters/filters-list.component.ts b/src/frontend/app/list/filters/filters-list.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b237fb1cb4dc05432701da1d8219c9159fa82b95
--- /dev/null
+++ b/src/frontend/app/list/filters/filters-list.component.ts
@@ -0,0 +1,75 @@
+import { Component, OnInit, Input, ViewChild } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { LANG } from '../../translate.component';
+import { NotificationService } from '../../notification.service';
+import { FiltersListService } from '../../../service/filtersList.service';
+import { MatSelectionList, MatExpansionPanel } from '@angular/material';
+
+declare function $j(selector: any): any;
+
+declare var angularGlobals: any;
+
+@Component({
+    selector: 'app-filters-list',
+    templateUrl: 'filters-list.component.html',
+    providers: [NotificationService]
+})
+export class FiltersListComponent implements OnInit {
+
+    coreUrl: string;
+    lang: any = LANG;
+    prioritiesList: any[] = [];
+    categoriesList: any[] = [];
+    entitiesList: any[] = [];
+
+    @Input('listProperties') listProperties: any;
+
+    @ViewChild('categoriesPan') categoriesPan: MatExpansionPanel;
+    @ViewChild('prioritiesPan') prioritiesPan: MatExpansionPanel;
+    @ViewChild('enetitiesPan') enetitiesPan: MatExpansionPanel;
+
+
+    constructor(public http: HttpClient, private filtersListService: FiltersListService) { }
+
+    ngOnInit(): void {
+        this.http.get("../../rest/priorities")
+            .subscribe((data: any) => {
+                this.prioritiesList = data.priorities;
+                this.prioritiesList.forEach((element) => {
+                    element.selected = false;
+                    this.listProperties.priorities.forEach((listPropertyPrio: any) => {
+                        if (element.id === listPropertyPrio.id) {
+                            element.selected = true;
+                            this.prioritiesPan.open();
+                        }
+                    });
+                });
+                console.log(this.prioritiesList);
+            });
+
+        this.http.get("../../rest/categories")
+            .subscribe((data: any) => {
+                this.categoriesList = data.categories;
+                this.categoriesList.forEach(element => {
+                    element.selected = false;
+                    this.listProperties.categories.forEach((listPropertyCat: any) => {
+                        if (element.id === listPropertyCat.id) {
+                            element.selected = true;
+                            this.categoriesPan.open();
+                        }
+                    });
+                });
+                console.log(this.categoriesList);
+            });
+    }
+    updateFilters(e: MatSelectionList, id: string) {
+        this.listProperties[id] = [];
+        e.selectedOptions.selected.forEach(element => {
+            this.listProperties[id].push({
+                'id' : element.value,
+                'label': element._text.nativeElement.innerText
+            });
+        });
+        this.filtersListService.updateListsProperties(this.listProperties);
+    }
+}
\ No newline at end of file
diff --git a/src/frontend/app/basket/note-list.component.html b/src/frontend/app/list/note-list.component.html
similarity index 89%
rename from src/frontend/app/basket/note-list.component.html
rename to src/frontend/app/list/note-list.component.html
index c964c1067c0fed4426715afbcd37e7f3f8a9b881..58c3f0d61034994ee9325aa75d968695276dbb7a 100755
--- a/src/frontend/app/basket/note-list.component.html
+++ b/src/frontend/app/list/note-list.component.html
@@ -21,4 +21,9 @@
             <span *ngFor="let entity of note.entities_restriction" class="label label-default" style="background-color:rgba(0,0,0,0.4);white-space:normal;display:inline-block;margin-right: 5px;" title="Entité restreinte"><i class="fa fa-sitemap"></i> {{entity}}</span>
         </mat-card-content>
     </mat-card>
+    <mat-form-field appearance="outline">
+            <mat-label>Ecrire une note</mat-label>
+            <input matInput>
+            <mat-icon matSuffix></mat-icon>
+        </mat-form-field>
 </ng-container>
\ No newline at end of file
diff --git a/src/frontend/app/list/note-list.component.scss b/src/frontend/app/list/note-list.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..ef0193d9887f854b65d12c5f1f2c47bb38d9b286
--- /dev/null
+++ b/src/frontend/app/list/note-list.component.scss
@@ -0,0 +1,3 @@
+.mat-form-field-wrapper{
+    padding-bottom: 0px;
+}
\ No newline at end of file
diff --git a/src/frontend/app/profile.component.html b/src/frontend/app/profile.component.html
index 65e6d4f6569356ff7c0ffd518f1a0bf6c833b974..22e26f2df2ff068e6c6a51e2bf0ac1c22f324b66 100755
--- a/src/frontend/app/profile.component.html
+++ b/src/frontend/app/profile.component.html
@@ -222,13 +222,13 @@
                                         </mat-list-item>
                                         <mat-divider></mat-divider>
                                         <ng-container *ngFor="let basket of user.baskets;let i = index">
-                                            <mat-list-item *ngIf="basket.group_id && basket.userToDisplay == ''" (mouseover)="showActions(basket)" (mouseout)="hideActions(basket)"
+                                            <mat-list-item *ngIf="basket.group_id && basket.userToDisplay == null" (mouseover)="showActions(basket)" (mouseout)="hideActions(basket)"
                                                 style="cursor: pointer;">
                                                 <mat-icon mat-list-icon color="primary" *ngIf="basket.enabled">
                                                     <mat-checkbox (click)="$event.stopPropagation()" (change)="$event ? selectionBaskets.toggle(basket) : null" [checked]="selectionBaskets.isSelected(basket)"
                                                         color="primary"></mat-checkbox>
                                                 </mat-icon>
-                                                <h4 mat-line [attr.color]="basket.userToDisplay != '' ? 'primary': ''" style="display: flex;align-items: center;">
+                                                <h4 mat-line [attr.color]="basket.userToDisplay != null ? 'primary': ''" style="display: flex;align-items: center;">
                                                     <span (click)="selectionBaskets.toggle(basket);" matTooltip="{{basket.basket_name}} [{{basket.group_desc}}]" [ngStyle]="{'opacity': basket.allowed ? '1' : '0.5'}"
                                                         style="flex: 2;overflow: hidden;text-overflow: ellipsis;">
                                                         {{basket.basket_name}}
@@ -244,10 +244,10 @@
                                         <mat-tab label="{{lang.basketsRedirected}}">
                                             <mat-list>
                                                 <ng-container *ngFor="let basket of user.baskets;let i = index">
-                                                    <mat-list-item *ngIf="basket.group_id && basket.userToDisplay != ''">
+                                                    <mat-list-item *ngIf="basket.group_id && basket.userToDisplay != null">
                                                         <mat-icon mat-list-icon color="primary" *ngIf="basket.enabled" style="margin-top:-60px;" class="fa fa-paper-plane">
                                                         </mat-icon>
-                                                        <h4 mat-line [ngStyle]="{'opacity': basket.allowed ? '1' : '0.5'}" [attr.color]="basket.userToDisplay != '' ? 'primary': ''">{{basket.basket_name}}
+                                                        <h4 mat-line [ngStyle]="{'opacity': basket.allowed ? '1' : '0.5'}" [attr.color]="basket.userToDisplay != null ? 'primary': ''">{{basket.basket_name}}
                                                             <span class="label label-primary" style="font-weight:normal">{{basket.group_desc}}</span>
                                                         </h4>
                                                         <p mat-line [ngStyle]="{'opacity': basket.allowed ? '1' : '0.5'}">
@@ -271,11 +271,11 @@
                                                     <mat-list-item *ngIf="!basket.group_id">
                                                         <mat-icon mat-list-icon color="primary" style="margin-top:-60px;" class="fa fa-reply">
                                                         </mat-icon>
-                                                        <h4 mat-line [attr.color]="basket.userToDisplay != '' ? 'primary': ''">{{basket.basket_name}}
+                                                        <h4 mat-line [attr.color]="basket.userToDisplay != null ? 'primary': ''">{{basket.basket_name}}
                                                             <span class="label label-primary" style="font-weight:normal">{{basket.group_desc}}</span>
                                                         </h4>
                                                         <p mat-line>
-                                                            <mat-form-field *ngIf="basket.userToDisplay == ''" floatLabel="never">
+                                                            <mat-form-field *ngIf="basket.userToDisplay == null" floatLabel="never">
                                                                 <input matTooltip="{{lang.redirectBasket}}" matTooltipPosition="above" type="text" placeholder="{{lang.redirectBasket}}"
                                                                     matInput [matAutocomplete]="auto" [formControl]="userCtrl">
                                                                 <mat-autocomplete #auto="matAutocomplete">
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index f6ec31924fa10e5a926b7dccdbdbc9f49ff2d82d..32b187cb6d3e05e05effb98c83b6e475ab6bcf8c 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -697,5 +697,21 @@ export const LANG_EN = {
     "organization"                                      : "ORGANIZATION",
     "production"                                        : "PRODUCTION",
     "classement"                                        : "RANKING",
-    "supervision"                                       : "SUPERVISION"
+    "supervision"                                       : "SUPERVISION",
+    "subject"                                           : "Subject",
+    "alt_identifier"                                    : "Chrono number",
+    "process_limit_date"                                : "Process limit date",
+    "dest_user"                                         : "Operator",
+    "destination"                                       : "Entity",
+    "type_id"                                           : "Document type",
+    "printResultList"                                   : "Print list",
+    "exportDatas"                                       : "Export datas",
+    "settingsList"                                      : "Display settings",
+    "displayProcessLimitRes"                            : "Display Process limit document",
+    "displayNewRes"                                     : "Display new document",
+    "displayWithAttach"                                 : "Display documents with attachment(s)",
+    "displayWithNotes"                                  : "Display documents with note(s)",
+    "ascOrder"                                          : "Asc order",
+    "descOrder"                                         : "Desc order",
+    "currentFilters"                                    : "Current filters",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 168ba63b7c658405e202e1fc29a19feaee6a078d..cdffc01271be03bb55efcabd4ebe1d8a5ac80491 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -722,5 +722,22 @@ export const LANG_FR = {
     "organization"                                      : "ORGANISATION",
     "production"                                        : "PRODUCTION",
     "classement"                                        : "CLASSEMENT",
-    "supervision"                                       : "SUPERVISION"
+    "supervision"                                       : "SUPERVISION",
+    "subject"                                           : "Objet",
+    "alt_identifier"                                    : "Numéro chrono",
+    "creation_date"                                     : "Date de création",
+    "process_limit_date"                                : "Date limite de traitement",
+    "dest_user"                                         : "Attributaire",
+    "destination"                                       : "Entité",
+    "type_id"                                           : "Type de document",
+    "printResultList"                                   : "Imprimer la liste",
+    "exportDatas"                                       : "Exporter les données",
+    "settingsList"                                      : "Paramétrer l'affichage",
+    "displayProcessLimitRes"                            : "Afficher les courriers en retard",
+    "displayNewRes"                                     : "Afficher les courriers non lu",
+    "displayWithAttach"                                 : "Afficher les courriers avec pièce(s) jointe(s)",
+    "displayWithNotes"                                  : "Afficher les courriers avec annotation(s)",
+    "ascOrder"                                          : "Ordre ascendant",
+    "descOrder"                                         : "Ordre descendant",
+    "currentFilters"                                     : "Filtre(s) actif(s)",
 };
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index c381d6e546190704ba7b5c7518a1d6fe27b05971..39f3c5e475c42c77e9e6810e20c8621d4b2f21be 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -724,6 +724,23 @@ export const LANG_NL = {
     "organization" : "ORGANISATIE",
     "production" : "PRODUCTIE",
     "classement" : "STANDEN",
-    "supervision" : "TOEZICHT"
-    
+    "supervision" : "TOEZICHT",
+    "subject" : "_TO_TRANSLATE",
+    "alt_identifier" : "_TO_TRANSLATE",
+    "creation_date" : "_TO_TRANSLATE",
+    "process_limit_date" : "_TO_TRANSLATE",
+    "dest_user" : "_TO_TRANSLATE",
+    "destination" : "_TO_TRANSLATE",
+    "type_id" : "_TO_TRANSLATE",
+    "OrderBy" : "_TO_TRANSLATE",
+    "printResultList" : "_TO_TRANSLATE",
+    "exportDatas" : "_TO_TRANSLATE",
+    "settingsList" : "_TO_TRANSLATE",
+    "displayProcessLimitRes" : "_TO_TRANSLATE",
+    "displayNewRes" : "_TO_TRANSLATE",
+    "displayWithAttach" : "_TO_TRANSLATE",
+    "displayWithNotes" : "_TO_TRANSLATE",
+    "ascOrder" : "_TO_TRANSLATE",
+    "descOrder" : "_TO_TRANSLATE",
+    "currentFilters" : "_TO_TRANSLATE",
 };
diff --git a/src/frontend/service/filtersList.service.ts b/src/frontend/service/filtersList.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d46a10940eefb9d558ba5a7db7e0cc036507c2df
--- /dev/null
+++ b/src/frontend/service/filtersList.service.ts
@@ -0,0 +1,77 @@
+import { Injectable } from '@angular/core';
+
+interface listProperties {
+    'id' : string,
+    'groupId' : number,
+    'basketId' : number,
+    'page' : string,
+    'onlyProcesLimit': boolean,
+    'onlyNewRes': boolean,
+    'withPj': boolean,
+    'withNote': boolean,
+    'categories' : string[],
+    'priorities' : string[],
+    'entities' : string[]
+}
+
+@Injectable()
+export class FiltersListService {
+
+    listsProperties: any[] = [];
+    listsPropertiesIndex: number = 0;
+
+    constructor() {
+        this.listsProperties = JSON.parse(sessionStorage.getItem('propertyList'));
+    }
+
+    initListsProperties(userId: string, groupId: number, basketId: number) {
+        this.listsPropertiesIndex = 0;
+        let listProperties: listProperties;
+
+
+        if (this.listsProperties != null) {
+            this.listsProperties.forEach((element, index) => {
+                if (element.id == userId && element.groupId == groupId && element.basketId == basketId) {
+                    this.listsPropertiesIndex = index;
+                    listProperties = element;
+                }
+            });
+        } else {
+            this.listsProperties = []; 
+        }
+
+        if (!listProperties) {
+            listProperties = {
+                'id' : userId,
+                'groupId' : groupId,
+                'basketId' : basketId,
+                'page' : '0',
+                'onlyProcesLimit': false,
+                'onlyNewRes': false,
+                'withPj': false,
+                'withNote': false,
+                'categories' : [],
+                'priorities' : [],
+                'entities' : [],
+            };
+            this.listsProperties.push(listProperties);
+            this.saveListsProperties();
+        }
+        return listProperties;
+    }
+
+    updateListsPropertiesPage(page : number) {
+        this.listsProperties[this.listsPropertiesIndex].page = page;
+        this.saveListsProperties();
+    }
+    
+    updateListsProperties(listProperties : any) {
+        this.listsProperties[this.listsPropertiesIndex] = listProperties;
+        this.saveListsProperties();
+    }
+
+    saveListsProperties() {
+        sessionStorage.setItem('propertyList', JSON.stringify(this.listsProperties));
+    }
+    
+}
diff --git a/src/frontend/service/header.service.ts b/src/frontend/service/header.service.ts
index 0b6e598d72b51dd2d04c2e31edd3a4260db060c0..618d1e3f9587b61a46e05a9f7c88e4fbbcda8e59 100755
--- a/src/frontend/service/header.service.ts
+++ b/src/frontend/service/header.service.ts
@@ -2,6 +2,5 @@ import { Injectable } from '@angular/core';
 
 @Injectable()
 export class HeaderService {
-
-    headerMessage   : string = "";
+    headerMessage   : string = ""; 
 }
diff --git a/test/unitTests/app/user/UserControllerTest.php b/test/unitTests/app/user/UserControllerTest.php
index d95aca5c9831fc75cfbf4a6c769a5b14dab4f178..3a843dd413dc2a654f9c4d77447becf1f6be1760 100755
--- a/test/unitTests/app/user/UserControllerTest.php
+++ b/test/unitTests/app/user/UserControllerTest.php
@@ -790,16 +790,9 @@ class UserControllerTest extends TestCase
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
         $aArgs = [
             [
-                'newUser'       =>  'bblier',
-                'basketId'      =>  'MyBasket',
-                'basketOwner'   =>  'bbain',
-                'virtual'       =>  'Y'
-            ],
-            [
-                'newUser'       =>  'bblier',
-                'basketId'      =>  'EenvBasket',
-                'basketOwner'   =>  'bbain',
-                'virtual'       =>  'Y'
+                'actual_user_id'    =>  21,
+                'basket_id'         =>  'MyBasket',
+                'group_id'          =>  2
             ]
         ];
 
@@ -832,16 +825,9 @@ class UserControllerTest extends TestCase
 
         $aArgs = [
             [
-                'newUser'       =>  'notExist',
-                'basketId'      =>  'MyBasket',
-                'basketOwner'   =>  'bbain',
-                'virtual'       =>  'Y'
-            ],
-            [
-                'newUser'       =>  'existNot',
-                'basketId'      =>  'EenvBasket',
-                'basketOwner'   =>  'bbain',
-                'virtual'       =>  'Y'
+                'actual_user_id'    =>  -1,
+                'basket_id'         =>  'MyBasket',
+                'group_id'          =>  2
             ]
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
@@ -858,26 +844,26 @@ class UserControllerTest extends TestCase
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
 
-        $aArgs = [
-                'basketOwner'   =>  'bbain',
-        ];
-
+//        $aArgs = [
+//                'basketOwner'   =>  'bbain',
+//        ];
+//
         $user_id = \User\models\UserModel::getByUserId(['userId' => 'bbain', 'select' => ['id']]);
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $userController->deleteRedirectedBaskets($fullRequest, new \Slim\Http\Response(), ['id' => $user_id['id'], 'basketId' => 'MyBasket']);
-        $response     = $userController->deleteRedirectedBaskets($fullRequest, new \Slim\Http\Response(), ['id' => $user_id['id'], 'basketId' => 'EenvBasket']);
-        $responseBody = json_decode((string)$response->getBody());
-
-        $this->assertNotNull($responseBody->baskets);
+//        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+//        $response     = $userController->deleteRedirectedBasket($fullRequest, new \Slim\Http\Response(), ['id' => $user_id['id'], 'basketId' => 'MyBasket']);
+//        $response     = $userController->deleteRedirectedBasket($fullRequest, new \Slim\Http\Response(), ['id' => $user_id['id'], 'basketId' => 'EenvBasket']);
+//        $responseBody = json_decode((string)$response->getBody());
+//
+//        $this->assertNotNull($responseBody->baskets);
 
         $aArgs = [
             'basketOwner'   =>  null,
         ];
 
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $userController->deleteRedirectedBaskets($fullRequest, new \Slim\Http\Response(), ['id' => $user_id['id'], 'basketId' => 'MyBasket']);
+        $response     = $userController->deleteRedirectedBasket($fullRequest, new \Slim\Http\Response(), ['id' => $user_id['id'], 'redirectBasketid' => -1]);
         $responseBody = json_decode((string)$response->getBody());
 
-        $this->assertSame('Bad Request', $responseBody->errors);
+        $this->assertSame('Redirected basket out of perimeter', $responseBody->errors);
     }
 }