Merge branch 'master' into avoid_subpackages_flattering

# Conflicts:
#	src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
#	src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
#	src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
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 6b2dede..83fc5d3 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -23,6 +23,8 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -35,6 +37,7 @@
 import org.apache.jackrabbit.vault.packaging.PackageId;
 import org.apache.jackrabbit.vault.packaging.PackageProperties;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
+import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.cpconverter.acl.AclManager;
 import org.apache.sling.feature.cpconverter.artifacts.ArtifactsDeployer;
 import org.apache.sling.feature.cpconverter.artifacts.FileArtifactWriter;
@@ -57,6 +60,8 @@
 
     private final Map<PackageId, String> subContentPackages = new HashMap<>();
 
+    private final List<VaultPackageAssembler> assemblers = new LinkedList<>();
+
     private EntryHandlersManager handlersManager;
 
     private AclManager aclManager;
@@ -164,27 +169,11 @@
         for (VaultPackage vaultPackage : orderedContentPackages) {
             try {
                 mainPackageAssembler = VaultPackageAssembler.create(vaultPackage);
-                PackageId packageProperties = vaultPackage.getId();
+                assemblers.add(mainPackageAssembler);
 
-                String group = requireNonNull(packageProperties.getGroup(),
-                                              PackageProperties.NAME_GROUP
-                                              + " property not found in content-package "
-                                              + vaultPackage
-                                              + ", please check META-INF/vault/properties.xml")
-                                              .replace('/', '.');
+                ArtifactId packageId = toArtifactId(vaultPackage);
 
-                String name = requireNonNull(packageProperties.getName(),
-                                            PackageProperties.NAME_NAME
-                                            + " property not found in content-package "
-                                            + vaultPackage
-                                            + ", please check META-INF/vault/properties.xml");
-
-                String version = packageProperties.getVersionString();
-                if (version == null || version.isEmpty()) {
-                    version = DEFEAULT_VERSION;
-                }
-
-                featuresManager.init(group, name, version);
+                featuresManager.init(packageId.getGroupId(), packageId.getArtifactId(), packageId.getVersion());
 
                 logger.info("Converting content-package '{}'...", vaultPackage.getId());
 
@@ -196,29 +185,20 @@
 
                 // deploy the new zip content-package to the local mvn bundles dir
 
-                artifactsDeployer.deploy(new FileArtifactWriter(contentPackageArchive),
-                                         featuresManager.getTargetFeature().getId().getGroupId(),
-                                         featuresManager.getTargetFeature().getId().getArtifactId(),
-                                         featuresManager.getTargetFeature().getId().getVersion(),
-                                         PACKAGE_CLASSIFIER,
-                                         ZIP_TYPE);
+                artifactsDeployer.deploy(new FileArtifactWriter(contentPackageArchive), packageId);
 
-                featuresManager.addArtifact(null,
-                                            featuresManager.getTargetFeature().getId().getGroupId(),
-                                            featuresManager.getTargetFeature().getId().getArtifactId(),
-                                            featuresManager.getTargetFeature().getId().getVersion(),
-                                            PACKAGE_CLASSIFIER,
-                                            ZIP_TYPE);
+                featuresManager.addArtifact(null, packageId);
 
                 // finally serialize the Feature Model(s) file(s)
 
-                aclManager.addRepoinitExtension(mainPackageAssembler, featuresManager.getTargetFeature());
+                aclManager.addRepoinitExtension(assemblers, featuresManager.getTargetFeature());
 
                 logger.info("Conversion complete!");
 
                 featuresManager.serialize();
             } finally {
                 aclManager.reset();
+                assemblers.clear();
 
                 try {
                     vaultPackage.close();
@@ -259,15 +239,28 @@
             return;
         }
 
+        ArtifactId packageId = toArtifactId(vaultPackage);
+        VaultPackageAssembler clonedPackage = VaultPackageAssembler.create(vaultPackage);
+
+        // Please note: THIS IS A HACK to meet the new requirement without drastically change the original design
+        // temporary swap the main handler to collect stuff
+        VaultPackageAssembler handler = mainPackageAssembler;
+        assemblers.add(handler);
+        mainPackageAssembler = clonedPackage;
+
         // scan the detected package, first
         traverse(vaultPackage);
 
-        // merge filters to the main new package
-        mainPackageAssembler.mergeFilters(vaultPackage.getMetaInf().getFilter());
+        File contentPackageArchive = clonedPackage.createPackage();
 
-        // add the metadata-only package one to the main package with overriden filter
-        File clonedPackage = VaultPackageAssembler.createSynthetic(vaultPackage);
-        mainPackageAssembler.addEntry(path, clonedPackage);
+        // deploy the new content-package to the local mvn bundles dir and attach it to the feature
+
+        artifactsDeployer.deploy(new FileArtifactWriter(contentPackageArchive), packageId);
+
+        featuresManager.addArtifact(null, packageId);
+
+        // restore the previous assembler
+        mainPackageAssembler = handler;
     }
 
     protected boolean isSubContentPackageIncluded(String path) {
@@ -292,6 +285,28 @@
         entryHandler.handle(entryPath, archive, entry, this);
     }
 
+    private static ArtifactId toArtifactId(VaultPackage vaultPackage) {
+        PackageId packageId = vaultPackage.getId();
+        String groupId = requireNonNull(packageId.getGroup(),
+                                        PackageProperties.NAME_GROUP
+                                        + " property not found in content-package "
+                                        + vaultPackage
+                                        + ", please check META-INF/vault/properties.xml").replace('/', '.'); 
+
+        String artifactid = requireNonNull(packageId.getName(),
+                                           PackageProperties.NAME_NAME
+                                           + " property not found in content-package "
+                                           + vaultPackage
+                                           + ", please check META-INF/vault/properties.xml");
+
+        String version = packageId.getVersionString();
+        if (version == null || version.isEmpty()) {
+            version = DEFEAULT_VERSION;
+        }
+
+        return new ArtifactId(groupId, artifactid, version, PACKAGE_CLASSIFIER, ZIP_TYPE);
+    }
+
     @Override
     protected void addCdnPattern(Pattern cndPattern) {
         handlersManager.addEntryHandler(new NodeTypesEntryHandler(cndPattern));
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java
index f820bca..80ac1be 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java
@@ -16,6 +16,8 @@
  */
 package org.apache.sling.feature.cpconverter.acl;
 
+import java.util.List;
+
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
 
@@ -28,7 +30,7 @@
 
     Acl addAcl(String systemUser, Acl acl);
 
-    void addRepoinitExtension(VaultPackageAssembler packageAssembler, Feature feature);
+    void addRepoinitExtension(List<VaultPackageAssembler> packageAssemblers, Feature feature);
 
     void addNodetypeRegistrationSentence(String nodetypeRegistrationSentence);
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
index b1816e8..11c8c4c 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
@@ -77,7 +77,7 @@
         }
     }
 
-    public void addRepoinitExtension(VaultPackageAssembler packageAssembler, Feature feature) {
+    public void addRepoinitExtension(List<VaultPackageAssembler> packageAssemblers, Feature feature) {
         Formatter formatter = null;
         try {
             formatter = new Formatter();
@@ -114,7 +114,7 @@
 
                 // create then the paths
 
-                addPaths(authorizations, packageAssembler, formatter);
+                addPaths(authorizations, packageAssemblers, formatter);
 
                 // finally add ACLs
 
@@ -131,7 +131,7 @@
 
                     // make sure all paths are created first
 
-                    addPaths(authorizations, packageAssembler, formatter);
+                    addPaths(authorizations, packageAssemblers, formatter);
 
                     // finally add ACLs
 
@@ -181,7 +181,7 @@
         privileges.clear();
     }
 
-    private void addPaths(List<Acl> authorizations, VaultPackageAssembler packageAssembler, Formatter formatter) {
+    private void addPaths(List<Acl> authorizations, List<VaultPackageAssembler> packageAssemblers, Formatter formatter) {
         if (areEmpty(authorizations)) {
             return;
         }
@@ -191,25 +191,32 @@
             addPath(authorization.getPath(), paths);
         }
 
-        for (Path path : paths) {
-            File currentDir = packageAssembler.getEntry(path.toString());
-            String type = DEFAULT_TYPE;
+        Set<Path> visitedPaths = new HashSet<>();
+        for (VaultPackageAssembler packageAssembler: packageAssemblers) {
+            for (Path path : paths) {
+                if (!visitedPaths.add(path)) {
+                    continue;
+                }
 
-            if (currentDir.exists()) {
-                File currentContent = new File(currentDir, CONTENT_XML_FILE_NAME);
-                if (currentContent.exists()) {
-                    try (FileInputStream input = new FileInputStream(currentContent)) {
-                        type = new PrimaryTypeParser(DEFAULT_TYPE).parse(input);
-                    } catch (Exception e) {
-                        throw new RuntimeException("A fatal error occurred while parsing the '"
-                            + currentContent
-                            + "' file, see nested exceptions: "
-                            + e);
+                File currentDir = packageAssembler.getEntry(path.toString());
+                String type = DEFAULT_TYPE;
+
+                if (currentDir.exists()) {
+                    File currentContent = new File(currentDir, CONTENT_XML_FILE_NAME);
+                    if (currentContent.exists()) {
+                        try (FileInputStream input = new FileInputStream(currentContent)) {
+                            type = new PrimaryTypeParser(DEFAULT_TYPE).parse(input);
+                        } catch (Exception e) {
+                            throw new RuntimeException("A fatal error occurred while parsing the '"
+                                + currentContent
+                                + "' file, see nested exceptions: "
+                                + e);
+                        }
                     }
                 }
-            }
 
-            formatter.format("create path (%s) %s%n", type, path);
+                formatter.format("create path (%s) %s%n", type, path);
+            }
         }
     }
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java
index 27548cf..3e189fd 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/ArtifactsDeployer.java
@@ -19,15 +19,12 @@
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.sling.feature.ArtifactId;
+
 public interface ArtifactsDeployer {
 
     File getBundlesDirectory();
 
-    void deploy(ArtifactWriter artifactWriter,
-                String groupId,
-                String artifactId,
-                String version,
-                String classifier,
-                String type) throws IOException;
+    void deploy(ArtifactWriter artifactWriter, ArtifactId id) throws IOException;
 
 }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java
index c728642..31b519b 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/DefaultArtifactsDeployer.java
@@ -23,6 +23,7 @@
 import java.io.IOException;
 import java.util.StringTokenizer;
 
+import org.apache.sling.feature.ArtifactId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,42 +46,34 @@
     }
 
     @Override
-    public void deploy(ArtifactWriter artifactWriter,
-                       String groupId,
-                       String artifactId,
-                       String version,
-                       String classifier,
-                       String type) throws IOException {
+    public void deploy(ArtifactWriter artifactWriter, ArtifactId id) throws IOException {
         requireNonNull(artifactWriter, "Null ArtifactWriter can not install an artifact to a Maven repository.");
-        requireNonNull(groupId, "Bundle can not be installed to a Maven repository without specifying a valid 'groupId'.");
-        requireNonNull(artifactId, "Bundle can not be installed to a Maven repository without specifying a valid 'artifactId'.");
-        requireNonNull(version, "Bundle can not be installed to a Maven repository without specifying a valid 'version'.");
-        requireNonNull(type, "Bundle can not be installed to a Maven repository without specifying a valid 'type'.");
+        requireNonNull(id, "Bundle can not be installed to a Maven repository without specifying a valid id.");
 
         File targetDir = artifactsDirectory;
 
-        StringTokenizer tokenizer = new StringTokenizer(groupId, ".");
+        StringTokenizer tokenizer = new StringTokenizer(id.getGroupId(), ".");
         while (tokenizer.hasMoreTokens()) {
             String current = tokenizer.nextToken();
             targetDir = new File(targetDir, current);
         }
 
-        targetDir = new File(targetDir, artifactId);
-        targetDir = new File(targetDir, version);
+        targetDir = new File(targetDir, id.getArtifactId());
+        targetDir = new File(targetDir, id.getVersion());
         targetDir.mkdirs();
 
         // deploy the main artifact
 
         StringBuilder nameBuilder = new StringBuilder()
-                                    .append(artifactId)
+                                    .append(id.getArtifactId())
                                     .append('-')
-                                    .append(version);
+                                    .append(id.getVersion());
 
-        if (classifier != null) {
-            nameBuilder.append('-').append(classifier);
+        if (id.getClassifier() != null) {
+            nameBuilder.append('-').append(id.getClassifier());
         }
 
-        nameBuilder.append('.').append(type);
+        nameBuilder.append('.').append(id.getType());
 
         File targetFile = new File(targetDir, nameBuilder.toString());
 
@@ -94,10 +87,10 @@
 
         // automatically deploy the supplied POM file
 
-        targetFile = new File(targetDir, String.format("%s-%s.pom", artifactId, version));
+        targetFile = new File(targetDir, String.format("%s-%s.pom", id.getArtifactId(), id.getVersion()));
 
         try (FileOutputStream targetStream = new FileOutputStream(targetFile)) {
-            new MavenPomSupplierWriter(groupId, artifactId, version, type).write(targetStream);
+            new MavenPomSupplierWriter(id).write(targetStream);
         }
     }
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java
index cff6b4c..1d09166 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/artifacts/MavenPomSupplierWriter.java
@@ -21,31 +21,23 @@
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.sling.feature.ArtifactId;
 
 public final class MavenPomSupplierWriter implements ArtifactWriter {
 
-    private final String groupId;
+    private final ArtifactId id;
 
-    private final String artifactId;
-
-    private final String version;
-
-    private final String type;
-
-    public MavenPomSupplierWriter(String groupId, String artifactId, String version, String type) {
-        this.groupId = groupId;
-        this.artifactId = artifactId;
-        this.version = version;
-        this.type = type;
+    public MavenPomSupplierWriter(ArtifactId id) {
+        this.id = id;
     }
 
     @Override
     public void write(OutputStream outputStream) throws IOException {
         Model model = new Model();
-        model.setGroupId(groupId);
-        model.setArtifactId(artifactId);
-        model.setVersion(version);
-        model.setPackaging(type);
+        model.setGroupId(id.getGroupId());
+        model.setArtifactId(id.getArtifactId());
+        model.setVersion(id.getVersion());
+        model.setPackaging(id.getType());
 
         new MavenXpp3Writer().write(outputStream, model);
     }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
index 526cd9e..f805eef 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
@@ -109,23 +109,15 @@
         return runModes.computeIfAbsent(runMode, k -> new Feature(newId));
     }
 
-    public void addArtifact(String runMode,
-                            String groupId,
-                            String artifactId,
-                            String version,
-                            String classifier,
-                            String type) {
-        requireNonNull(groupId, "Artifact can not be attached to a feature without specifying a valid 'groupId'.");
-        requireNonNull(artifactId, "Artifact can not be attached to a feature without specifying a valid 'artifactId'.");
-        requireNonNull(version, "Artifact can not be attached to a feature without specifying a valid 'version'.");
-        requireNonNull(type, "Artifact can not be attached to a feature without specifying a valid 'type'.");
+    public void addArtifact(String runMode, ArtifactId id) {
+        requireNonNull(id, "Artifact can not be attached to a feature without specifying a valid ArtifactId.");
 
-        Artifact artifact = new Artifact(new ArtifactId(groupId, artifactId, version, classifier, type));
+        Artifact artifact = new Artifact(id);
 
         Feature targetFeature = getRunMode(runMode);
         Artifacts artifacts;
 
-        if (ZIP_TYPE.equals(type) ) {
+        if (ZIP_TYPE.equals(id.getType()) ) {
             Extensions extensions = targetFeature.getExtensions();
             Extension extension = extensions.getByName(CONTENT_PACKAGES);
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
index 5c0b672..30851be 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
@@ -18,6 +18,7 @@
 
 import java.util.Dictionary;
 
+import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
 
 public interface FeaturesManager {
@@ -28,12 +29,7 @@
 
     Feature getRunMode(String runMode);
 
-    void addArtifact(String runMode,
-                     String groupId,
-                     String artifactId,
-                     String version,
-                     String classifier,
-                     String type);
+    void addArtifact(String runMode, ArtifactId id);
 
     void addConfiguration(String runMode, String pid, Dictionary<String, Object> configurationProperties);
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java
index eee0c40..e757de0 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java
@@ -30,6 +30,7 @@
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
+import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
 import org.apache.sling.feature.cpconverter.artifacts.InputStreamArtifactWriter;
 import org.slf4j.Logger;
@@ -99,19 +100,11 @@
         }
 
         try (InputStream input = archive.openInputStream(entry)) {
-            converter.getArtifactsDeployer().deploy(new InputStreamArtifactWriter(input),
-                                                  groupId,
-                                                  artifactId,
-                                                  version,
-                                                  classifier,
-                                                  JAR_TYPE);
+            ArtifactId id = new ArtifactId(groupId, artifactId, version, classifier, JAR_TYPE);
 
-            converter.getFeaturesManager().addArtifact(runMode,
-                                                       groupId,
-                                                       artifactId,
-                                                       version,
-                                                       classifier,
-                                                       JAR_TYPE);
+            converter.getArtifactsDeployer().deploy(new InputStreamArtifactWriter(input), id);
+
+            converter.getFeaturesManager().addArtifact(runMode, id);
         }
     }
 
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
index 5ae7cd8..2fc239b 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
@@ -24,6 +24,7 @@
 
 import java.io.File;
 import java.nio.file.Paths;
+import java.util.Arrays;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
@@ -66,7 +67,7 @@
         when(assembler.getEntry(anyString())).thenReturn(new File(System.getProperty("java.io.tmpdir")));
         Feature feature = new Feature(new ArtifactId("org.apache.sling", "org.apache.sling.cp2fm", "0.0.1", null, null));
 
-        aclManager.addRepoinitExtension(assembler, feature);
+        aclManager.addRepoinitExtension(Arrays.asList(assembler), feature);
 
         Extension repoinitExtension = feature.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
         assertNotNull(repoinitExtension);
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/artifacts/DefaultBundlesDeployerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/artifacts/DefaultBundlesDeployerTest.java
index d5f9f73..0b9b914 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/artifacts/DefaultBundlesDeployerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/artifacts/DefaultBundlesDeployerTest.java
@@ -54,27 +54,12 @@
 
     @Test(expected = NullPointerException.class)
     public void deployLocallyAndAttachRequiresNonNullInput() throws Exception {
-        artifactDeployer.deploy(null, null, null, null, null, null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void deployLocallyAndAttachRequiresNonNullGroupId() throws Exception {
-        artifactDeployer.deploy(mock(ArtifactWriter.class), null, null, null, null, null);
+        artifactDeployer.deploy(null, null);
     }
 
     @Test(expected = NullPointerException.class)
     public void deployLocallyAndAttachRequiresNonNullArtifactId() throws Exception {
-        artifactDeployer.deploy(mock(ArtifactWriter.class), "org.apache.sling", null, null, null, null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void deployLocallyAndAttachRequiresNonNullVersion() throws Exception {
-        artifactDeployer.deploy(mock(ArtifactWriter.class), "org.apache.sling", "org.apache.sling.cm2fm", null, null, null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void deployLocallyAndAttachRequiresNonNullType() throws Exception {
-        artifactDeployer.deploy(mock(ArtifactWriter.class), "org.apache.sling", "org.apache.sling.cm2fm", "0.0.1", null, null);
+        artifactDeployer.deploy(mock(ArtifactWriter.class), null);
     }
 
 }
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/features/FeaturesManagerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/features/FeaturesManagerTest.java
index 02c3882..7cb6c20 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/features/FeaturesManagerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/features/FeaturesManagerTest.java
@@ -40,28 +40,8 @@
     }
 
     @Test(expected = NullPointerException.class)
-    public void deployLocallyAndaddArtifactRequiresNonNullInput() throws Exception {
-        featuresManager.addArtifact(null, null, null, null, null, null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void deployLocallyAndaddArtifactRequiresNonNullGroupId() throws Exception {
-        featuresManager.addArtifact(null, null, null, null, null, null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void deployLocallyAndaddArtifactRequiresNonNullArtifactId() throws Exception {
-        featuresManager.addArtifact(null, "org.apache.sling", null, null, null, null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void deployLocallyAndaddArtifactRequiresNonNullVersion() throws Exception {
-        featuresManager.addArtifact(null, "org.apache.sling", "org.apache.sling.cm2fm", null, null, null);
-    }
-
-    @Test(expected = NullPointerException.class)
-    public void deployLocallyAndaddArtifactRequiresNonNullType() throws Exception {
-        featuresManager.addArtifact(null, "org.apache.sling", "org.apache.sling.cm2fm", "0.0.1", null, null);
+    public void deployLocallyAndaddArtifactRequiresNonNullId() throws Exception {
+        featuresManager.addArtifact(null, null);
     }
 
 }
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandlerTest.java
index 0d8f131..23c9edf 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandlerTest.java
@@ -19,6 +19,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.mock;
@@ -91,7 +92,7 @@
         FeaturesManager featuresManager = spy(DefaultFeaturesManager.class);
         when(featuresManager.getTargetFeature()).thenReturn(feature);
         when(featuresManager.getRunMode(anyString())).thenReturn(feature);
-        doCallRealMethod().when(featuresManager).addArtifact(anyString(), anyString(), anyString(), anyString(), anyString(), anyString());
+        doCallRealMethod().when(featuresManager).addArtifact(anyString(), any(ArtifactId.class));
 
         ContentPackage2FeatureModelConverter converter = spy(ContentPackage2FeatureModelConverter.class);
 
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandlerTest.java
index 953218e..f384139 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/PrivilegesHandlerTest.java
@@ -23,6 +23,8 @@
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.util.Arrays;
+
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
 import org.apache.sling.feature.ArtifactId;
@@ -80,7 +82,7 @@
 
         handler.handle(path, archive, entry, converter);
 
-        converter.getAclManager().addRepoinitExtension(packageAssembler, feature);
+        converter.getAclManager().addRepoinitExtension(Arrays.asList(packageAssembler), feature);
 
         Extension repoinitExtension = feature.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
         assertNotNull(repoinitExtension);
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
index e39c660..a94cf52 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
@@ -16,18 +16,19 @@
  */
 package org.apache.sling.feature.cpconverter.handlers;
 
-import static org.mockito.ArgumentMatchers.anyString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.nio.file.Paths;
+import java.util.Arrays;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -178,7 +179,7 @@
 
         when(packageAssembler.getEntry(anyString())).thenReturn(new File("itdoesnotexist"));
 
-        converter.getAclManager().addRepoinitExtension(packageAssembler, feature);
+        converter.getAclManager().addRepoinitExtension(Arrays.asList(packageAssembler), feature);
         return feature.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
     }
 
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
index efb6d14..a4f133a 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
@@ -25,6 +25,7 @@
 import static org.mockito.Mockito.*;
 
 import java.io.File;
+import java.util.Arrays;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -105,7 +106,7 @@
 
         when(packageAssembler.getEntry(anyString())).thenReturn(new File("itdoesnotexist"));
 
-        converter.getAclManager().addRepoinitExtension(packageAssembler, feature);
+        converter.getAclManager().addRepoinitExtension(Arrays.asList(packageAssembler), feature);
         return feature.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
     }