diff --git a/composer.json b/composer.json
index 21ca9dc49c9159472f035b5f0903283183ebc0be..d480f1ffa7ff85e1eafc65467b2e613ca1d63585 100755
--- a/composer.json
+++ b/composer.json
@@ -13,6 +13,7 @@
             "Folder\\"            : "src/app/folder/",
             "Group\\"             : "src/app/group/",
             "History\\"           : "src/app/history/",
+            "Home\\"              : "src/app/home/",
             "Link\\"              : "src/app/link/",
             "Note\\"              : "src/app/note/",
             "Notification\\"      : "src/app/notification/",
diff --git a/package.json b/package.json
index 3fc2029f9621f5aa77e8cf718a12917f6809664c..b22418630a56f2bdbbd41b5d594aae32df2e1663 100755
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
     "@angular-devkit/build-angular": "^0.6.8",
     "@angular/animations": "^6.1.0",
     "@angular/cdk": "^6.4.1",
-    "@angular/cli": "^6.1.0",
+    "@angular/cli": "^6.1.1",
     "@angular/common": "^6.1.0",
     "@angular/compiler": "^6.1.0",
     "@angular/compiler-cli": "^6.1.0",
diff --git a/rest/index.php b/rest/index.php
index 056c8b421ccb20deba13ed320b36828b7d4d7e22..921f8a4705d98ccd419554ce6f8e88986acb71e7 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -156,6 +156,9 @@ $app->put('/groups/{id}/reassign/{newGroupId}', \Group\controllers\GroupControll
 $app->get('/histories', \History\controllers\HistoryController::class . ':get');
 $app->get('/histories/users/{userSerialId}', \History\controllers\HistoryController::class . ':getByUserId');
 
+//Home
+$app->get('/home', \Home\controllers\HomeController::class . ':get');
+
 //Jnlp
 $app->post('/jnlp', \ContentManagement\controllers\JnlpController::class . ':generateJnlp');
 $app->get('/jnlp', \ContentManagement\controllers\JnlpController::class . ':renderJnlp');
diff --git a/src/app/basket/models/BasketModelAbstract.php b/src/app/basket/models/BasketModelAbstract.php
index 3318e2c351c88d3cfb25e0afe57262bfc23696d6..d6164f42637993fc8a8f787aacfb9dabd7a487f6 100644
--- a/src/app/basket/models/BasketModelAbstract.php
+++ b/src/app/basket/models/BasketModelAbstract.php
@@ -388,13 +388,13 @@ abstract class BasketModelAbstract
         return $aBaskets;
     }
 
-    public static function getAbsBasketsByUserId(array $aArgs = [])
+    public static function getAbsBasketsByUserId(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['userId']);
         ValidatorModel::stringType($aArgs, ['userId']);
 
         $aBaskets = DatabaseModel::select([
-                'select'    => ['ba.basket_id', 'ba.basket_name', 'ua.user_abs', 'ua.basket_owner', 'ua.is_virtual'],
+                'select'    => ['ba.basket_id', 'ba.basket_name', 'ba.basket_desc', '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']],
@@ -492,28 +492,21 @@ abstract class BasketModelAbstract
 
         $groups = UserModel::getGroupsByUserId(['userId' => $aArgs['userId']]);
         foreach ($groups as $group) {
-            $baskets = DatabaseModel::select([
-                'select'    => ['baskets.basket_id', 'baskets.basket_name', 'baskets.color'],
-                'table'     => ['groupbasket, baskets'],
-                'where'     => ['groupbasket.basket_id = baskets.basket_id', 'groupbasket.group_id = ?', 'baskets.is_visible = ?', 'baskets.basket_id != ?'],
-                'data'      => [$group['group_id'], 'Y', 'IndexingBasket'],
-                'order_by'  => ['baskets.basket_order', 'baskets.basket_name']
-            ]);
-            $coloredBaskets = UserBasketPreferenceModel::get([
-                'select'    => ['basket_id', 'color'],
-                'where'     => ['user_serial_id = ?', 'group_serial_id = ?', 'color is not null'],
-                'data'      => [$user['id'], $group['id']]
+            $baskets = BasketModel::getAvailableBasketsByGroupUser([
+                'select'        => ['baskets.basket_id', 'baskets.basket_name', 'baskets.basket_desc', 'baskets.color', 'users_baskets_preferences.color as pcolor'],
+                'userSerialId'  => $user['id'],
+                'groupId'       => $group['group_id'],
+                'groupSerialId' => $group['id']
             ]);
 
             foreach ($baskets as $kBasket => $basket) {
-                foreach ($coloredBaskets as $coloredBasket) {
-                    if ($basket['basket_id'] == $coloredBasket['basket_id']) {
-                        $baskets[$kBasket]['color'] = $coloredBasket['color'];
-                    }
+                if (!empty($basket['pcolor'])) {
+                    $baskets[$kBasket]['color'] = $basket['pcolor'];
                 }
                 if (empty($baskets[$kBasket]['color'])) {
                     $baskets[$kBasket]['color'] = '#666666';
                 }
+                unset($baskets[$kBasket]['pcolor']);
             }
 
             $regroupedBaskets[] = [
@@ -527,6 +520,32 @@ abstract class BasketModelAbstract
         return $regroupedBaskets;
     }
 
+    public static function getAvailableBasketsByGroupUser(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['userSerialId', 'groupId', 'groupSerialId', 'select']);
+        ValidatorModel::intVal($aArgs, ['userSerialId', 'groupSerialId']);
+        ValidatorModel::stringType($aArgs, ['groupId']);
+        ValidatorModel::arrayType($aArgs, ['select']);
+
+        $baskets = DatabaseModel::select([
+            'select'    => $aArgs['select'],
+            'table'     => ['groupbasket, baskets, users_baskets_preferences'],
+            'where'     => [
+                'groupbasket.basket_id = baskets.basket_id',
+                'baskets.basket_id = users_baskets_preferences.basket_id',
+                'groupbasket.group_id = ?',
+                'users_baskets_preferences.group_serial_id = ?',
+                'users_baskets_preferences.user_serial_id = ?',
+                'baskets.is_visible = ?',
+                'baskets.basket_id != ?'
+            ],
+            'data'      => [$aArgs['groupId'], $aArgs['groupSerialId'], $aArgs['userSerialId'], 'Y', 'IndexingBasket'],
+            'order_by'  => ['baskets.basket_order', 'baskets.basket_name']
+        ]);
+
+        return $baskets;
+    }
+
     public static function getBasketPages(array $aArgs = [])
     {
         ValidatorModel::arrayType($aArgs, ['unneeded']);
@@ -549,7 +568,7 @@ abstract class BasketModelAbstract
         return $basketPages;
     }
 
-    public static function getDefaultActionIdByBasketId(array $aArgs = [])
+    public static function getDefaultActionIdByBasketId(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['basketId', 'groupId']);
         ValidatorModel::stringType($aArgs, ['basketId', 'groupId']);
@@ -569,4 +588,21 @@ abstract class BasketModelAbstract
 
         return $aAction[0]['id_action'];
     }
+
+    public static function getResourceNumberByClause(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['userId', 'clause']);
+        ValidatorModel::stringType($aArgs, ['userId', 'clause']);
+
+        $count = ResModel::getOnView([
+            'select'    => ['COUNT(1)'],
+            'where'     => [PreparedClauseController::getPreparedClause(['userId' => $aArgs['userId'], 'clause' => $aArgs['clause']])]
+        ]);
+
+        if (empty($count[0]['count'])) {
+            return 0;
+        }
+
+        return $count[0]['count'];
+    }
 }
diff --git a/src/app/home/controllers/HomeController.php b/src/app/home/controllers/HomeController.php
new file mode 100644
index 0000000000000000000000000000000000000000..6867aa52ac8c629f0d52874a5db9b4cff2c931f0
--- /dev/null
+++ b/src/app/home/controllers/HomeController.php
@@ -0,0 +1,79 @@
+<?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 Home Controller
+ * @author dev@maarch.org
+ */
+
+namespace Home\controllers;
+
+use Basket\models\BasketModel;
+use Slim\Http\Request;
+use Slim\Http\Response;
+use User\models\UserModel;
+
+class HomeController
+{
+    public function get(Request $request, Response $response)
+    {
+        $regroupedBaskets = [];
+
+        $user = UserModel::getByUserId(['userId' => $GLOBALS['userId'], 'select' => ['id']]);
+
+        $redirectedBaskets = BasketModel::getRedirectedBasketsByUserId(['userId' => $GLOBALS['userId']]);
+        $groups = UserModel::getGroupsByUserId(['userId' => $GLOBALS['userId']]);
+        foreach ($groups as $group) {
+            $baskets = BasketModel::getAvailableBasketsByGroupUser([
+                'select'        => ['baskets.basket_id', 'baskets.basket_name', 'baskets.basket_desc', 'baskets.basket_clause', 'baskets.color', 'users_baskets_preferences.color as pcolor'],
+                'userSerialId'  => $user['id'],
+                'groupId'       => $group['group_id'],
+                'groupSerialId' => $group['id']
+            ]);
+
+            foreach ($baskets as $kBasket => $basket) {
+                if (!empty($basket['pcolor'])) {
+                    $baskets[$kBasket]['color'] = $basket['pcolor'];
+                }
+                if (empty($baskets[$kBasket]['color'])) {
+                    $baskets[$kBasket]['color'] = '#666666';
+                }
+
+                $baskets[$kBasket]['redirected'] = false;
+                foreach ($redirectedBaskets as $redirectedBasket) {
+                    if ($redirectedBasket['basket_id'] == $basket['basket_id']) {
+                        $baskets[$kBasket]['redirected'] = true;
+                        $baskets[$kBasket]['redirectedUser'] = $redirectedBasket['userToDisplay'];
+                    }
+                }
+
+                $baskets[$kBasket]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $GLOBALS['userId'], 'clause' => $basket['basket_clause']]);
+
+                unset($baskets[$kBasket]['pcolor'], $baskets[$kBasket]['basket_clause']);
+            }
+
+            if (!empty($baskets)) {
+                $regroupedBaskets[] = [
+                    'groupSerialId' => $group['id'],
+                    'groupId'       => $group['group_id'],
+                    'groupDesc'     => $group['group_desc'],
+                    'baskets'       => $baskets
+                ];
+            }
+        }
+
+        $assignedBaskets = BasketModel::getAbsBasketsByUserId(['userId' => $GLOBALS['userId']]);
+        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']]);
+        }
+
+        return $response->withJson(['regroupedBaskets' => $regroupedBaskets, 'assignedBaskets' => $assignedBaskets]);
+    }
+}
diff --git a/src/app/resource/models/ResModelAbstract.php b/src/app/resource/models/ResModelAbstract.php
index 15268416915fbb9313c618daa3f3418167a895fe..a4d9d5b85cd303ac35a326f1d3e5a1ae605bd074 100644
--- a/src/app/resource/models/ResModelAbstract.php
+++ b/src/app/resource/models/ResModelAbstract.php
@@ -29,10 +29,10 @@ abstract class ResModelAbstract
         $aResources = DatabaseModel::select([
             'select'    => $aArgs['select'],
             'table'     => ['res_view_letterbox'],
-            'where'     => $aArgs['where'],
-            'data'      => $aArgs['data'],
-            'order_by'  => $aArgs['orderBy'],
-            'limit'     => $aArgs['limit']
+            'where'     => empty($aArgs['where']) ? [] : $aArgs['where'],
+            'data'      => empty($aArgs['data']) ? [] : $aArgs['data'],
+            'order_by'  => empty($aArgs['orderBy']) ? [] : $aArgs['orderBy'],
+            'limit'     => empty($aArgs['limit']) ? 0 : $aArgs['limit']
         ]);
         
         return $aResources;
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index b9035104607b8576c3c87febf92c4ea6d4825626..9ac8e1c45caf2bc7c23e24cfb4892bf8041b7679 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -37,6 +37,7 @@ return array(
     'Http\\Client\\Common\\' => array($vendorDir . '/php-http/client-common/src'),
     'Http\\Client\\' => array($vendorDir . '/php-http/httplug/src'),
     'Http\\Adapter\\Guzzle6\\' => array($vendorDir . '/php-http/guzzle6-adapter/src'),
+    'Home\\' => array($baseDir . '/src/app/home'),
     'History\\' => array($baseDir . '/src/app/history'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
     'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index b125ed14c7c052f3e4612ec7580e7aa30c24b18c..c3c880fcee5ef899a41988ac08ed213e3a2344ac 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -83,6 +83,7 @@ class ComposerStaticInitf21aebccfa6df888200dcb099aa69fbd
             'Http\\Client\\Common\\' => 19,
             'Http\\Client\\' => 12,
             'Http\\Adapter\\Guzzle6\\' => 21,
+            'Home\\' => 5,
             'History\\' => 8,
         ),
         'G' => 
@@ -251,6 +252,10 @@ class ComposerStaticInitf21aebccfa6df888200dcb099aa69fbd
         array (
             0 => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src',
         ),
+        'Home\\' => 
+        array (
+            0 => __DIR__ . '/../..' . '/src/app/home',
+        ),
         'History\\' => 
         array (
             0 => __DIR__ . '/../..' . '/src/app/history',