diff --git a/src/app/folder/controllers/FolderController.php b/src/app/folder/controllers/FolderController.php
index 4b0b527b3e40e2b55f2febb73810e51aaa91880c..d46458e49f543ee054dfbd974d0d8a2d789e8151 100755
--- a/src/app/folder/controllers/FolderController.php
+++ b/src/app/folder/controllers/FolderController.php
@@ -114,17 +114,7 @@ class FolderController
         if ($folder['public']) {
             $entitiesFolder = EntityFolderModel::getByFolderId(['folder_id' => $args['id'], 'select' => ['entities_folders.entity_id', 'entities_folders.edition', 'entities.entity_label']]);
             foreach ($entitiesFolder as $value) {
-                $edition = $value['edition'];
-                // Check if parent is in perimeter
-                if ($edition) {
-                    $edition = !empty(FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $folder['parent_id'], 'edition' => true]));
-                }
-                // Check if children are in perimeter
-                if ($edition) {
-                    $edition = FolderController::areChildrenInPerimeter(['folderId' => $args['id']]);
-                }
-
-                $folder['sharing']['entities'][] = ['entity_id' => $value['entity_id'], 'edition' => $edition, 'label' => $value['entity_label']];
+                $folder['sharing']['entities'][] = ['entity_id' => $value['entity_id'], 'edition' => $value['edition'], 'label' => $value['entity_label']];
             }
         }
 
@@ -217,10 +207,7 @@ class FolderController
             $data['parent_id'] = null;
             $level = 0;
         } else {
-            $folderParent = FolderController::getScopeFolders(['login' => $GLOBALS['userId'], 'folderId' => $data['parent_id']]);
-            if (empty($folderParent[0])) {
-                return $response->withStatus(400)->withJson(['errors' => 'Parent Folder not found or out of your perimeter']);
-            }
+            $folderParent = FolderModel::getById(['id' => $data['parent_id'], 'select' => ['folders.id', 'parent_id', 'level']]);
             $level = $folderParent[0]['level'] + 1;
         }
 
@@ -228,14 +215,29 @@ class FolderController
 
         FolderModel::update([
             'set' => [
-                'label'      => $data['label'],
-                'parent_id'  => $data['parent_id'],
-                'level'      => $level
+                'label'      => $data['label']
             ],
             'where' => ['id = ?'],
             'data' => [$aArgs['id']]
         ]);
 
+
+        if ($folder[0]['parent_id'] != $data['parent_id']) {
+            $childrenInPerimeter = FolderController::areChildrenInPerimeter(['folderId' => $aArgs['id']]);
+            if ($childrenInPerimeter) {
+                FolderModel::update([
+                    'set' => [
+                        'parent_id' => $data['parent_id'],
+                        'level' => $level
+                    ],
+                    'where' => ['id = ?'],
+                    'data' => [$aArgs['id']]
+                ]);
+            } else {
+                return $response->withStatus(400)->withJson(['errors' => 'Cannot move folder because at least one folder is out of your perimeter']);
+            }
+        }
+
         HistoryController::add([
             'tableName' => 'folders',
             'recordId'  => $aArgs['id'],
@@ -262,6 +264,11 @@ class FolderController
             return $response->withStatus(400)->withJson(['errors' => 'Body sharing/entities does not exists']);
         }
 
+        $childrenInPerimeter = FolderController::areChildrenInPerimeter(['folderId' => $aArgs['id']]);
+        if (!$childrenInPerimeter) {
+            return $response->withStatus(400)->withJson(['errors' => 'Cannot share/unshare folder because at least one folder is out of your perimeter']);
+        }
+
         DatabaseModel::beginTransaction();
         $sharing = FolderController::folderSharing(['folderId' => $aArgs['id'], 'public' => $data['public'], 'sharing' => $data['sharing']]);
         if (!$sharing) {
@@ -312,10 +319,7 @@ class FolderController
         $folderChild = FolderModel::getChild(['id' => $aArgs['folderId'], 'select' => ['id']]);
         if (!empty($folderChild)) {
             foreach ($folderChild as $child) {
-                $sharing = FolderController::folderSharing(['folderId' => $child['id'], 'public' => $aArgs['public'], 'sharing' => $aArgs['sharing']]);
-                if (!$sharing) {
-                    return false;
-                }
+                FolderController::folderSharing(['folderId' => $child['id'], 'public' => $aArgs['public'], 'sharing' => $aArgs['sharing']]);
             }
         }
 
diff --git a/src/frontend/app/folder/folder-tree.component.ts b/src/frontend/app/folder/folder-tree.component.ts
index 873788bad127c8af51d2d14de4e58182a58e0f0b..580715785097d17c3260336d265929e2f753f9ae 100644
--- a/src/frontend/app/folder/folder-tree.component.ts
+++ b/src/frontend/app/folder/folder-tree.component.ts
@@ -440,8 +440,8 @@ export class FolderTreeComponent implements OnInit {
                 if (data.folder.user_id !== currentUserId && node.public) {
                     canAdd = false;
                 }
-                node.canAdd = canAdd;
                 node.edition = (canAdmin || data.folder.user_id === currentUserId) ? true : false;
+                node.canAdd = node.edition;
             }),
         ).subscribe();
     }