diff --git a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index 53bf1a2..09abfcd 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -18,6 +18,7 @@
 
 import static java.util.Objects.requireNonNull;
 import static org.apache.sling.feature.cpconverter.vltpkg.VaultPackageUtils.detectPackageType;
+import static org.apache.sling.feature.cpconverter.vltpkg.VaultPackageUtils.getDependencies;
 
 import java.io.File;
 import java.util.Collection;
@@ -65,7 +66,7 @@
 
     private final List<VaultPackageAssembler> assemblers = new LinkedList<>();
 
-    private final Set<PackageId> mutableContentsIds = new HashSet<>();
+    private final Map<PackageId, Set<Dependency>> mutableContentsIds = new LinkedHashMap<>();
 
     private EntryHandlersManager handlersManager;
 
@@ -201,6 +202,10 @@
 
                 traverse(vaultPackage);
 
+                // make sure 
+
+                mainPackageAssembler.updateDependencies(mutableContentsIds);
+
                 // attach all unmatched resources as new content-package
 
                 File contentPackageArchive = mainPackageAssembler.createPackage();
@@ -266,7 +271,7 @@
 
         emitter.startSubPackage(path, vaultPackage);
 
-        PackageId packageId = vaultPackage.getId();
+        PackageId originalPackageId = vaultPackage.getId();
         ArtifactId mvnPackageId = toArtifactId(vaultPackage);
         VaultPackageAssembler clonedPackage = VaultPackageAssembler.create(vaultPackage);
 
@@ -279,10 +284,12 @@
         // scan the detected package, first
         traverse(vaultPackage);
 
+        clonedPackage.updateDependencies(mutableContentsIds);
+
         File contentPackageArchive = clonedPackage.createPackage();
 
         // deploy the new content-package to the local mvn bundles dir and attach it to the feature
-        processContentPackageArchive(contentPackageArchive, mvnPackageId, packageId);
+        processContentPackageArchive(contentPackageArchive, mvnPackageId, originalPackageId);
 
         // restore the previous assembler
         mainPackageAssembler = handler;
@@ -292,7 +299,7 @@
 
     private void processContentPackageArchive(File contentPackageArchive,
                                               ArtifactId mvnPackageId,
-                                              PackageId packageId) throws Exception {
+                                              PackageId originalPackageId) throws Exception {
         try (VaultPackage vaultPackage = open(contentPackageArchive)) {
             PackageType packageType = detectPackageType(vaultPackage);
             // don't deploy & add content-packages of type content to featuremodel if dropContent is set
@@ -301,8 +308,9 @@
                 artifactsDeployer.deploy(new FileArtifactWriter(contentPackageArchive), mvnPackageId);
                 featuresManager.addArtifact(null, mvnPackageId);
             } else {
-                mutableContentsIds.add(packageId);
-                logger.info("Dropping package of PackageType.CONTENT {} (content-package id: {})", mvnPackageId.getArtifactId(), packageId);
+                mutableContentsIds.put(originalPackageId, getDependencies(vaultPackage));
+                logger.info("Dropping package of PackageType.CONTENT {} (content-package id: {})",
+                            mvnPackageId.getArtifactId(), originalPackageId);
             }
         }
     }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
index 763a4b8..96ddfff 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
@@ -24,6 +24,8 @@
 import static org.apache.jackrabbit.vault.util.Constants.ROOT_DIR;
 import static org.apache.jackrabbit.vault.util.Constants.SETTINGS_XML;
 import static org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter.PACKAGE_CLASSIFIER;
+import static org.apache.sling.feature.cpconverter.vltpkg.VaultPackageUtils.getDependencies;
+import static org.apache.sling.feature.cpconverter.vltpkg.VaultPackageUtils.setDependencies;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -31,12 +33,10 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.HashSet;
+import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
-import java.util.StringTokenizer;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
@@ -45,6 +45,7 @@
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
+import org.apache.jackrabbit.vault.packaging.Dependency;
 import org.apache.jackrabbit.vault.packaging.PackageId;
 import org.apache.jackrabbit.vault.packaging.PackageProperties;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
@@ -56,8 +57,6 @@
 
 public class VaultPackageAssembler implements EntryHandler {
 
-    private static final String DEPENDENCIES_DELIMITER = ",";
-
     private static final String NAME_PATH = "path";
 
     private static final String[] INCLUDE_RESOURCES = { PACKAGE_DEFINITION_XML, CONFIG_XML, SETTINGS_XML };
@@ -110,19 +109,7 @@
             }
         }
 
-        Set<PackageId> dependencies = new HashSet<>();
-        String dependenciesString = properties.getProperty(PackageProperties.NAME_DEPENDENCIES);
-
-        if (dependenciesString != null && !dependenciesString.isEmpty()) {
-         // from https://jackrabbit.apache.org/filevault/properties.html
-            // Comma-separated list of dependencies
-            StringTokenizer tokenizer = new StringTokenizer(dependenciesString, DEPENDENCIES_DELIMITER);
-            while (tokenizer.hasMoreTokens()) {
-                String dependencyString = tokenizer.nextToken();
-                PackageId dependency = PackageId.fromString(dependencyString);
-                dependencies.add(dependency);
-            }
-        }
+        Set<Dependency> dependencies = getDependencies(vaultPackage);
 
         VaultPackageAssembler assembler = new VaultPackageAssembler(storingDirectory, properties, dependencies);
         assembler.mergeFilters(filter);
@@ -131,7 +118,7 @@
 
     private final DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
 
-    private final Set<PackageId> dependencies;
+    private final Set<Dependency> dependencies;
 
     private final File storingDirectory;
 
@@ -151,7 +138,7 @@
     /**
      * This class can not be instantiated from outside
      */
-    private VaultPackageAssembler(File storingDirectory, Properties properties, Set<PackageId> dependencies) {
+    private VaultPackageAssembler(File storingDirectory, Properties properties, Set<Dependency> dependencies) {
         this.storingDirectory = storingDirectory;
         this.properties = properties;
         this.dependencies = dependencies;
@@ -197,8 +184,15 @@
         return new File(storingDirectory, path);
     }
 
-    public void removeDependencies(Set<PackageId> mutableContentsIds) {
-        dependencies.removeAll(mutableContentsIds);
+    public void updateDependencies(Map<PackageId, Set<Dependency>> mutableContentsIds) {
+        for (Dependency dependency : dependencies) {
+            for (java.util.Map.Entry<PackageId, Set<Dependency>> mutableContentId : mutableContentsIds.entrySet()) {
+                if (dependency.matches(mutableContentId.getKey())) {
+                    dependencies.remove(dependency);
+                    dependencies.addAll(mutableContentId.getValue());
+                }
+            }
+        }
     }
 
     public File createPackage() throws IOException {
@@ -213,10 +207,7 @@
             metaDir.mkdirs();
         }
 
-        if (!dependencies.isEmpty()) {
-            String dependenciesString = dependencies.stream().map(id -> id.toString()).collect(Collectors.joining(DEPENDENCIES_DELIMITER));
-            properties.setProperty(PackageProperties.NAME_DEPENDENCIES, dependenciesString);
-        }
+        setDependencies(dependencies, properties);
 
         File xmlProperties = new File(metaDir, PROPERTIES_XML);
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java
index e8b4fee..af6d8f1 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java
@@ -16,13 +16,23 @@
  */
 package org.apache.sling.feature.cpconverter.vltpkg;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.jackrabbit.vault.packaging.Dependency;
+import org.apache.jackrabbit.vault.packaging.PackageProperties;
 import org.apache.jackrabbit.vault.packaging.PackageType;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 
 public class VaultPackageUtils {
 
+    private static final String DEPENDENCIES_DELIMITER = ",";
+
     private VaultPackageUtils() {
         // this class must not be instantiated from outside
     }
@@ -62,4 +72,25 @@
         return PackageType.MIXED;
     }
 
+    public static Set<Dependency> getDependencies(VaultPackage vaultPackage) {
+        Dependency[] originalDepenencies = vaultPackage.getDependencies();
+
+        Set<Dependency> dependencies = new HashSet<>();
+
+        if (originalDepenencies != null && originalDepenencies.length > 0) {
+            dependencies.addAll(Arrays.asList(originalDepenencies));
+        }
+
+        return dependencies;
+    }
+
+    public static void setDependencies(Set<Dependency> dependencies, Properties properties) {
+        if (dependencies == null || dependencies.isEmpty()) {
+            return;
+        }
+
+        String dependenciesString = dependencies.stream().map(d -> d.toString()).collect(Collectors.joining(DEPENDENCIES_DELIMITER));
+        properties.setProperty(PackageProperties.NAME_DEPENDENCIES, dependenciesString);
+    }
+
 }
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
index 4e5d85e..ff75514 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -556,7 +556,10 @@
     // see SLING-8649
     @Test
     public void filteredOutContentPackagesAreExcludedDependencies() throws Exception {
-        File[] contentPackages = load("test_dep_a-1.0.zip", "test_dep_b-1.0.zip");
+        File[] contentPackages = load("test_dep_a-1.0.zip", "test_dep_b-1.0.zip", "test_dep_b-1.0.zip");
+
+        // input: c <- a <- b
+        // expected output: c <- a
 
         File outputDirectory = new File(System.getProperty("java.io.tmpdir"), getClass().getName() + '_' + System.currentTimeMillis());
 
@@ -576,8 +579,8 @@
 
         File contentPackage = new File(outputDirectory, "my_packages/test_b/1.0/test_b-1.0-cp2fm-converted.zip");
         VaultPackage vaultPackage = new PackageManagerImpl().open(contentPackage);
-        String depencies = vaultPackage.getProperties().getProperty(PackageProperties.NAME_DEPENDENCIES);
-        assertNull(depencies);
+        String dependencies = vaultPackage.getProperties().getProperty(PackageProperties.NAME_DEPENDENCIES);
+        assertEquals("my_packages:test_c", dependencies);
     }
 
     private File[] load(String...resources) {
diff --git a/src/test/resources/org/apache/sling/feature/cpconverter/test_dep_a-1.0.zip b/src/test/resources/org/apache/sling/feature/cpconverter/test_dep_a-1.0.zip
index 4d9cd27..fd85645 100644
--- a/src/test/resources/org/apache/sling/feature/cpconverter/test_dep_a-1.0.zip
+++ b/src/test/resources/org/apache/sling/feature/cpconverter/test_dep_a-1.0.zip
Binary files differ
diff --git a/src/test/resources/org/apache/sling/feature/cpconverter/test_dep_c-1.0.zip b/src/test/resources/org/apache/sling/feature/cpconverter/test_dep_c-1.0.zip
new file mode 100644
index 0000000..3d4698e
--- /dev/null
+++ b/src/test/resources/org/apache/sling/feature/cpconverter/test_dep_c-1.0.zip
Binary files differ
