diff --git a/src/main/java/org/apache/sling/maven/slingstart/AttachDependenciesPom.java b/src/main/java/org/apache/sling/maven/slingstart/AttachDependenciesPom.java
new file mode 100644
index 0000000..a47488f
--- /dev/null
+++ b/src/main/java/org/apache/sling/maven/slingstart/AttachDependenciesPom.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.sling.maven.slingstart;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.stream.StreamSupport;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.shared.utils.WriterFactory;
+import org.apache.sling.provisioning.model.Artifact;
+import org.apache.sling.provisioning.model.Model;
+import org.apache.sling.provisioning.model.ModelUtility;
+
+/**
+ * Attaches a dependencies pom as project artifact 
+ */
+@Mojo(
+        name = "attach-dependencies-pom",
+        defaultPhase = LifecyclePhase.PACKAGE,
+        requiresDependencyResolution = ResolutionScope.COMPILE,
+        threadSafe = true
+    )
+public class AttachDependenciesPom extends AbstractSlingStartMojo {
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+
+        Model model = ProjectHelper.getRawModel(this.project);
+        if (usePomVariables) {
+            model = ModelUtility.applyVariables(model, new PomVariableResolver(project));
+        }
+        if (usePomDependencies) {
+            model = ModelUtility.applyArtifactVersions(model, new PomArtifactVersionResolver(project, allowUnresolvedPomDependencies));
+        }
+
+        // write the model archive
+        final File outputFile = new File(this.project.getBuild().getDirectory(), project.getBuild().getFinalName() + "-" + BuildConstants.CLASSIFIER_DEPENDENCIES + "." + BuildConstants.TYPE_POM);
+        outputFile.getParentFile().mkdirs();
+        
+        try {
+            try ( Writer wf = WriterFactory.newXmlWriter(outputFile) ) {
+                org.apache.maven.model.Model mavenModel = new org.apache.maven.model.Model();
+                mavenModel.setName(project.getName() + " (Dependencies)");
+                mavenModel.setGroupId(project.getGroupId());
+                mavenModel.setArtifactId(project.getArtifactId());
+                mavenModel.setVersion(project.getVersion());
+                mavenModel.setDependencyManagement(new DependencyManagement());
+
+                model.getFeatures().stream()
+                    .flatMap( d -> d.getRunModes().stream() )
+                    .flatMap( r -> r.getArtifactGroups().stream() )
+                    .flatMap( ag -> StreamSupport.stream(ag.spliterator(), false))
+                    .forEach( a -> addDependency(a, mavenModel) );
+                
+                new MavenXpp3Writer().write( wf, mavenModel );
+            }
+                
+        } catch (IOException e) {
+            throw new MojoExecutionException("Failed writing dependencies POM", e);
+        }
+
+        // attach it as an additional artifact
+        projectHelper.attachArtifact(project, BuildConstants.TYPE_POM,
+                    BuildConstants.CLASSIFIER_DEPENDENCIES, outputFile);
+    }
+
+    private void addDependency(Artifact a, org.apache.maven.model.Model model) {
+        Dependency dep = new Dependency();
+        dep.setScope("provided");
+        dep.setGroupId(a.getGroupId());
+        dep.setArtifactId(a.getArtifactId());
+        dep.setVersion(a.getVersion());
+
+        model.getDependencyManagement().addDependency(dep);
+    }
+
+}
diff --git a/src/main/java/org/apache/sling/maven/slingstart/BuildConstants.java b/src/main/java/org/apache/sling/maven/slingstart/BuildConstants.java
index 3da52da..71907ab 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/BuildConstants.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/BuildConstants.java
@@ -57,6 +57,8 @@
     public static final String CLASSIFIER_WEBAPP = "webapp";
 
     public static final String CLASSIFIER_MAR = ModelArchiveWriter.DEFAULT_EXTENSION;
+    
+    public static final String CLASSIFIER_DEPENDENCIES = "dependencies";
 
     // Manifest attributes
 
diff --git a/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml b/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml
index 4aea0a2..ca2260e 100644
--- a/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml
+++ b/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml
@@ -23,6 +23,7 @@
                 <goals>
                     <goal>attach-slingfeature</goal>
                     <goal>attach-modelarchive</goal>
+                    <goal>attach-dependencies-pom</goal>
                     <goal>repository</goal>
                     <goal>package</goal>
                     <goal>prepare-package</goal>
diff --git a/src/main/resources/META-INF/plexus/components.xml b/src/main/resources/META-INF/plexus/components.xml
index c05d45e..cf8bce6 100644
--- a/src/main/resources/META-INF/plexus/components.xml
+++ b/src/main/resources/META-INF/plexus/components.xml
@@ -55,6 +55,7 @@
               <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
               <prepare-package>org.apache.sling:slingstart-maven-plugin:prepare-package</prepare-package>              
               <package>
+                  org.apache.sling:slingstart-maven-plugin:attach-dependencies-pom,
                   org.apache.sling:slingstart-maven-plugin:attach-slingfeature,
                   org.apache.sling:slingstart-maven-plugin:package
               </package>
