diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java
index 8581d109fe798c9a8a1c88ba07f67a81890ebdd6..d19d5bd9a28dd39bcd642d7f8d8224a3d744bd04 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java
@@ -95,7 +95,7 @@ public class VFSMetadataDAO {
 	 * @param element The curriculum element
 	 * @return The materialized path of the specified element
 	 */
-	private String getMaterializedPathKeys(VFSMetadataImpl parent, VFSMetadataImpl element) {
+	protected String getMaterializedPathKeys(VFSMetadataImpl parent, VFSMetadataImpl element) {
 		if(parent != null) {
 			String parentPathOfKeys = parent.getMaterializedPathKeys();
 			if(parentPathOfKeys == null || "/".equals(parentPathOfKeys)) {
diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java
index e09c462d74194d37596597da2d63a4557dad7407..24a0abb80fb2ca24e6df0fd9c5129fd826d5ffb7 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java
@@ -47,6 +47,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.zip.Adler32;
 import java.util.zip.Checksum;
 
+import org.apache.logging.log4j.Logger;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.core.commons.modules.bc.FolderConfig;
 import org.olat.core.commons.modules.bc.FolderLicenseHandler;
@@ -74,7 +75,6 @@ import org.olat.core.commons.services.vfs.model.VFSRevisionImpl;
 import org.olat.core.gui.control.Event;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
-import org.apache.logging.log4j.Logger;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
@@ -1089,6 +1089,27 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv
 			dbInstance.commit();
 		}
 	}
+	
+	private VFSMetadata checkParentLine(VFSMetadata metadata, VFSMetadata parent) {
+		if(metadata == null || parent == null) {
+			return metadata;
+		}
+
+		VFSMetadata persistedParent = ((VFSMetadataImpl)metadata).getParent();
+		String materializedPath = metadataDao.getMaterializedPathKeys((VFSMetadataImpl)parent, (VFSMetadataImpl)metadata);
+		if(!persistedParent.equals(parent)) {
+			((VFSMetadataImpl)metadata).setMaterializedPathKeys(materializedPath);
+			((VFSMetadataImpl)metadata).setParent(parent);
+			return metadataDao.updateMetadata(metadata);
+		}
+
+		String pathKeys = ((VFSMetadataImpl)metadata).getMaterializedPathKeys();
+		if(!pathKeys.equals(materializedPath)) {
+			((VFSMetadataImpl)metadata).setMaterializedPathKeys(materializedPath);
+			return metadataDao.updateMetadata(metadata);
+		}
+		return metadata;
+	}
 
 	public void migrateDirectories(File folder) throws IOException {
 		Deque<VFSMetadata> parentLine = new LinkedList<>();
@@ -1108,10 +1129,7 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv
 				
 				VFSMetadata parent = parentLine.peekLast();
 				VFSMetadata metadata = migrateMetadata(dir.toFile(), parent);
-				if(metadata != null && "migrated".equals(metadata.getMigrated())) {
-					dbInstance.commitAndCloseSession();
-					return FileVisitResult.SKIP_SUBTREE;
-				}
+				metadata = checkParentLine(metadata, parent);
 				parentLine.add(metadata);
 				dbInstance.commit();
 				return FileVisitResult.CONTINUE;
@@ -1121,7 +1139,8 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv
 			public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
 				File f = file.toFile();
 				if(!f.isHidden() && VFSRepositoryModule.canMeta(f) == VFSConstants.YES) {
-					migrateMetadata(file.toFile(), parentLine.getLast());
+					VFSMetadata metadata = migrateMetadata(file.toFile(), parentLine.getLast());
+					checkParentLine(metadata, parentLine.getLast());
 					
 					migrationCounter.incrementAndGet();
 					if(migrationCounter.get() % 25 == 0) {