diff --git a/src/app/folder/controllers/FolderController.php b/src/app/folder/controllers/FolderController.php
index 23f9399dc22d50f7e0e25a50e20f93b442865c9e..896dcd1d603a56bec46ea8e0208f231d280ce062 100755
--- a/src/app/folder/controllers/FolderController.php
+++ b/src/app/folder/controllers/FolderController.php
@@ -124,13 +124,15 @@ class FolderController
         if ($folder['public']) {
             $entitiesFolder = EntityFolderModel::getEntitiesByFolderId(['folder_id' => $args['id'], 'select' => ['entities_folders.entity_id', 'entities_folders.edition', 'entities.entity_label']]);
             foreach ($entitiesFolder as $value) {
-                $canDelete = FolderController::areChildrenInPerimeter(['folderId' => $args['id']]);
+                $canDelete = FolderController::areChildrenInPerimeter(['folderId' => $args['id'], 'entityId' => $value['entity_id']]);
+                $canDelete = $canDelete && $value['edition'] == true;
                 $folder['sharing']['entities'][] = ['entity_id' => $value['entity_id'], 'edition' => $value['edition'], 'canDelete' => $canDelete, 'label' => $value['entity_label']];
             }
 
             $keywordsFolder = EntityFolderModel::getKeywordsByFolderId(['folder_id' => $args['id'], 'select' => ['edition', 'keyword']]);
             foreach ($keywordsFolder as $value) {
-                $canDelete = FolderController::areChildrenInPerimeter(['folderId' => $args['id']]);
+                $canDelete = FolderController::areChildrenInPerimeter(['folderId' => $args['id'], 'keyword' => $value['keyword']]);
+                $canDelete = $canDelete && $value['edition'] == true;
                 $folder['sharing']['entities'][] = ['keyword' => $value['keyword'], 'edition' => $value['edition'], 'canDelete' => $canDelete];
             }
         }
@@ -482,6 +484,12 @@ class FolderController
             return $response->withStatus(400)->withJson(['errors' => 'Query id is empty or not an integer']);
         }
 
+        $canDelete = FolderController::areChildrenInPerimeter(['folderId' => $aArgs['id']]);
+
+        if (!$canDelete) {
+            return $response->withStatus(400)->withJson(['errors' => 'Cannot delete because at least one folder is out of your perimeter']);
+        }
+
         $folder = FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $aArgs['id'], 'edition' => true]);
         
         DatabaseModel::beginTransaction();
@@ -528,25 +536,49 @@ class FolderController
         return true;
     }
 
-    public static function areChildrenInPerimeter(array $aArgs = [])
+    public static function areChildrenInPerimeter(array $args = [])
     {
-        $folder = FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $aArgs['folderId'], 'edition' => true]);
+        ValidatorModel::notEmpty($args, ['folderId']);
+        ValidatorModel::intVal($args, ['folderId', 'entityId']);
+        ValidatorModel::stringType($args, ['keyword']);
+
+        $folder = FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $args['folderId'], 'edition' => true]);
         if (empty($folder[0])) {
             return false;
         }
 
+        $where = ['parent_id = ?'];
+        $data = [$args['folderId']];
+
+        if (!empty($args['entityId'])) {
+            $where[] = 'entity_id = ?';
+            $data[] = $args['entityId'];
+        } else if (!empty($args['keyword'])) {
+            $where[] = 'keyword = ?';
+            $data[] = $args['keyword'];
+        }
+
         $children = FolderModel::getWithEntities([
-            'select' =>  ['distinct (folders.id), edition'],
-            'where'  =>  ['parent_id = ?'],
-            'data'   =>  [$aArgs['folderId']]
+            'select' => ['distinct (folders.id)', 'edition', 'user_id', 'keyword'],
+            'where'  => $where,
+            'data'   => $data
         ]);
 
+        $allEntitiesCanDelete = false;
+        foreach ($children as $key => $child) {
+            if ($child['keyword'] == 'ALL_ENTITIES') {
+                $allEntitiesCanDelete = true;
+                unset($children[$key]);
+            }
+        }
+
+
         if (!empty($children)) {
             foreach ($children as $child) {
-                if ($child['edition'] == false or $child['edition'] == null) {
+                if ($child['user_id'] != $GLOBALS['id'] && ($child['edition'] == false || $child['edition'] == null) && !$allEntitiesCanDelete) {
                     return false;
                 }
-                if (!FolderController::areChildrenInPerimeter(['folderId' => $child['id']])) {
+                if (!FolderController::areChildrenInPerimeter(['folderId' => $child['id'], 'entityId' => $args['entityId'], 'keyword' => $args['keyword']])) {
                     return false;
                 }
             }
@@ -843,8 +875,14 @@ class FolderController
             $userEntities = 0;
         }
 
-        $where = ['keyword = ?'];
-        $data = ['ALL_ENTITIES'];
+        if ($args['edition']) {
+            $edition = [1];
+        } else {
+            $edition = [0, 1, null];
+        }
+
+        $where = ['keyword = ?', 'entities_folders.edition in (?)'];
+        $data = ['ALL_ENTITIES', $edition];
 
         if (!empty($args['folderId'])) {
             $where[] = 'folder_id = ?';
@@ -863,12 +901,6 @@ class FolderController
 
         $user = UserModel::getByLogin(['login' => $login, 'select' => ['id']]);
 
-        if ($args['edition']) {
-            $edition = [1];
-        } else {
-            $edition = [0, 1, null];
-        }
-
         $where = ['(user_id = ? OR (entity_id in (?) AND entities_folders.edition in (?)) OR folders.id in (?))'];
         $data = [$user['id'], $userEntities, $edition, $folderKeywords];