diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
index e0231567f268fe7c85eac08ef10c4ca9bd4b35f6..a5249671c586051b51343da8076dc7a66801bcbb 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
@@ -126,11 +126,11 @@ public class VOSpaceClient {
         call(request, BodyHandlers.ofInputStream(), 200, res -> null);
     }
 
-    public Node setNode(Node node) {
+    public Node setNode(Node node, boolean recursive) {
 
         String path = node.getUri().substring(("vos://" + authority).length());
 
-        HttpRequest request = getRequest("/nodes" + urlEncodePath(path))
+        HttpRequest request = getRequest("/nodes" + urlEncodePath(path) + "?recursive=" + recursive)
                 .header("Accept", useJson ? "application/json" : "text/xml")
                 .header("Content-Type", useJson ? "application/json" : "text/xml")
                 .POST(HttpRequest.BodyPublishers.ofString(marshal(node)))
diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java
index 360a3f17a1c97692707b82d249460b7a06bc8157..5870f9a249956b598de87a4f3c2dd70969497c99 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java
@@ -9,6 +9,7 @@ public class ShareRequest {
     private List<String> groupWrite;
     private List<String> userRead;
     private List<String> userWrite;
+    private boolean recursive;
 
     public String getPath() {
         return path;
@@ -49,4 +50,12 @@ public class ShareRequest {
     public void setUserWrite(List<String> userWrite) {
         this.userWrite = userWrite;
     }
+
+    public boolean isRecursive() {
+        return recursive;
+    }
+
+    public void setRecursive(boolean recursive) {
+        this.recursive = recursive;
+    }
 }
diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java
index 8abb1a9fe16544b68b3d3ef22a54d8f714141cc3..855130376b7875ea141c38e5daa08945ece7584b 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java
@@ -94,7 +94,7 @@ public class SharingService {
         getNodeProperty(node, NodeProperties.GROUP_READ_URI).setValue(groupRead);
         getNodeProperty(node, NodeProperties.GROUP_WRITE_URI).setValue(groupWrite);
 
-        vospaceClient.setNode(node);
+        vospaceClient.setNode(node, shareRequest.isRecursive());
     }
 
     private Property getNodeProperty(Node node, String uri) {
diff --git a/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java b/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java
index 23fd9dab509309310643e6c6c23b71ad59140bf3..dbb67b8130a9e02a4cba70843c9a97a4e65617ff 100644
--- a/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java
+++ b/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.eq;
@@ -114,7 +115,7 @@ public class SharingServiceTest {
             assertTrue(groupWrite.contains("people.bianca\\.verdi"));
             assertTrue(groupWrite.contains("group2"));
             return true;
-        }));
+        }), anyBoolean());
     }
 
     private List<RapUser> getRapUsers() {
diff --git a/vospace-ui-frontend/src/components/modal/ShareModal.vue b/vospace-ui-frontend/src/components/modal/ShareModal.vue
index 421986f7b28dd1b4ea14443c795002d6d598051f..dc2d29fa7a3fcb2264240b462141b563872d924a 100644
--- a/vospace-ui-frontend/src/components/modal/ShareModal.vue
+++ b/vospace-ui-frontend/src/components/modal/ShareModal.vue
@@ -6,6 +6,7 @@
   <h5 class="mt-3">Write permissions</h5>
   <ShareInputGroup id="user-write" :values="userWrite" :options="people" label="Users" placeholder="Search user..." buttonText="Add user" />
   <ShareInputGroup id="group-write" :values="groupWrite" :options="groups" label="Groups" placeholder="Search group..." buttonText="Add group" />
+  <b-form-checkbox id="recursive" v-model="recursive" name="recursive">Apply also to children</b-form-checkbox>
 </b-modal>
 </template>
 
@@ -34,7 +35,8 @@ export default {
       groupWrite: [],
       userWrite: [],
       people: [],
-      groups: []
+      groups: [],
+      recursive: true
     }
   },
   methods: {
@@ -64,7 +66,8 @@ export default {
         groupRead: this.groupRead,
         groupWrite: this.groupWrite,
         userRead: this.userRead,
-        userWrite: this.userWrite
+        userWrite: this.userWrite,
+        recursive: this.recursive
       }).then(() => {
         // Reload current path
         this.$bvModal.hide('share-modal');