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 84bc7ac..0a277b1 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,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -88,7 +89,7 @@
 
     private final RecollectorVaultPackageScanner recollectorVaultPackageScanner;
 
-    private PackagesEventsEmitter emitter;
+    private List<PackagesEventsEmitter> emitters = new ArrayList<>();
 
     private boolean failOnMixedPackages = false;
 
@@ -123,6 +124,9 @@
 
     public @NotNull ContentPackage2FeatureModelConverter setFeaturesManager(@Nullable FeaturesManager featuresManager) {
         this.featuresManager = featuresManager;
+        if ( featuresManager instanceof PackagesEventsEmitter ) {
+            this.emitters.add((PackagesEventsEmitter)featuresManager);
+        }
         return this;
     }
 
@@ -154,7 +158,7 @@
     }
 
     public @NotNull ContentPackage2FeatureModelConverter setEmitter(@Nullable PackagesEventsEmitter emitter) {
-        this.emitter = emitter;
+        this.emitters.add(emitter);
         return this;
     }
     
@@ -229,11 +233,11 @@
     }
 
     protected void secondPass(@NotNull Collection<VaultPackage> orderedContentPackages) throws Exception {
-        emitter.start();
+        emitters.stream().forEach(e -> e.start());
 
         for (VaultPackage vaultPackage : orderedContentPackages) {
             try {
-                emitter.startPackage(vaultPackage);
+                emitters.stream().forEach(e -> e.startPackage(vaultPackage));
                 mainPackageAssembler = VaultPackageAssembler.create(this.getTempDirectory(), vaultPackage, removeInstallHooks);
                 assemblers.add(mainPackageAssembler);
 
@@ -264,7 +268,7 @@
                 logger.info("Conversion complete!");
 
                 featuresManager.serialize();
-                emitter.endPackage();
+                emitters.stream().forEach(e -> e.endPackage());
             } finally {
                 aclManager.reset();
                 assemblers.clear();
@@ -279,7 +283,7 @@
 
         mutableContentsIds.clear();
 
-        emitter.end();
+        emitters.stream().forEach(e -> e.end());
     }
 
     private void orderDependencies(@NotNull Map<PackageId, VaultPackage> idFileMap,
@@ -312,7 +316,7 @@
             return;
         }
 
-        emitter.startSubPackage(path, vaultPackage);
+        emitters.stream().forEach(e -> e.startSubPackage(path, vaultPackage));
 
         PackageId originalPackageId = vaultPackage.getId();
         ArtifactId mvnPackageId = toArtifactId(vaultPackage);
@@ -347,7 +351,7 @@
         // restore the previous assembler
         mainPackageAssembler = handler;
 
-        emitter.endSubPackage();
+        emitters.stream().forEach(e -> e.endSubPackage());
     }
 
     private void processContentPackageArchive(@NotNull File contentPackageArchive,
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 d0df8c5..b16425c 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
@@ -25,6 +25,7 @@
 import java.util.*;
 import java.util.Map.Entry;
 
+import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Artifacts;
@@ -38,6 +39,7 @@
 import org.apache.sling.feature.cpconverter.accesscontrol.Mapping;
 import org.apache.sling.feature.cpconverter.interpolator.SimpleVariablesInterpolator;
 import org.apache.sling.feature.cpconverter.interpolator.VariablesInterpolator;
+import org.apache.sling.feature.cpconverter.vltpkg.PackagesEventsEmitter;
 import org.apache.sling.feature.extension.apiregions.api.ApiExport;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegion;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
@@ -49,7 +51,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DefaultFeaturesManager implements FeaturesManager {
+public class DefaultFeaturesManager implements FeaturesManager, PackagesEventsEmitter {
 
     public enum ConfigurationHandling {
         ORDERED,
@@ -63,6 +65,9 @@
 
     private static final String JSON_FILE_EXTENSION = ".json";
 
+    private static final String BUNDLE_ORIGINS = "content-package-origins";
+    private static final String CONFIGURATION_ORIGINS = Configuration.CONFIGURATOR_PREFIX.concat(BUNDLE_ORIGINS);
+
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     private final Map<String, Feature> runModes = new HashMap<>();
@@ -93,6 +98,8 @@
 
     private final Map<String, String> pidToPathMapping = new HashMap<>();
 
+    private final Stack<String> packageIds = new Stack<>();
+    
     DefaultFeaturesManager() {
         this(new File(""));
     }
@@ -183,9 +190,15 @@
 
             artifacts = extension.getArtifacts();
         } else {
-            int startOrderForBundle = startOrder != null ? startOrder.intValue() : bundlesStartOrder;
+            // set start order
+            final int startOrderForBundle = startOrder != null ? startOrder.intValue() : bundlesStartOrder;
             artifact.setStartOrder(startOrderForBundle);
-            artifacts = targetFeature.getBundles();
+            // set origins
+            if ( !this.packageIds.isEmpty() ) {
+                artifact.getMetadata().put(BUNDLE_ORIGINS, String.join("|", this.packageIds));
+            }
+
+            artifacts = targetFeature.getBundles();        
         }
 
         artifacts.add(artifact);
@@ -288,7 +301,6 @@
         @NotNull String path,
         @NotNull Dictionary<String, Object> configurationProperties) {
         String factoryPid = null;
-        String id;
         int n = pid.indexOf('~');
         if (n > 0) {
             factoryPid = pid.substring(0, n);
@@ -339,6 +351,17 @@
         configuration.getProperties().remove(Constants.SERVICE_PID);
         configuration.getProperties().remove("service.bundleLocation");
         configuration.getProperties().remove("service.factoryPid");
+
+        // set origins
+        if ( !this.packageIds.isEmpty() ) {
+            final List<String> origins = new ArrayList<>();
+            final Object val = configuration.getProperties().get(CONFIGURATION_ORIGINS);
+            if ( val != null ) {
+                origins.addAll(Arrays.asList(val.toString().split(",")));
+            }    
+            origins.add(String.join("|", this.packageIds));
+            configuration.getProperties().put(CONFIGURATION_ORIGINS, String.join(",", origins));
+        }
     }
 
     private void addAPIRegions(@NotNull Feature feature, @Nullable List<String> exportedPackages) throws IOException {
@@ -462,4 +485,49 @@
             }
         }
     }
+
+    /**
+     * Package converter starts
+     */
+    public void start() {
+        // nothing to do
+    }
+
+    /** 
+     * Package converter ends
+     */
+    public void end() {
+        // nothing to do
+    }
+
+    /**
+     * Package starts
+     * @param vaultPackage the package
+     */
+    public void startPackage(final @NotNull VaultPackage vaultPackage) {
+        packageIds.push(vaultPackage.getId().toString());
+    }
+
+    /**
+     * Package ends
+     */
+    public void endPackage() {
+        packageIds.pop();
+    }
+
+    /**
+     * Sub package starts
+     * @param path The path
+     * @param vaultPackage the package
+     */
+    public void startSubPackage(final @NotNull String path, final @NotNull VaultPackage vaultPackage) {
+        packageIds.push(vaultPackage.getId().toString());
+    }
+
+    /**
+     * Sub package ends
+     */
+    public void endSubPackage() {
+        packageIds.pop();
+    }
 }
