diff --git a/pom.xml b/pom.xml
index c34b8b9..86b2ea6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -168,7 +168,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature.modelconverter</artifactId>
-            <version>0.1.2</version>
+            <version>0.1.3-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
diff --git a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
index 84b65f7..26c4b5a 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
@@ -68,7 +68,7 @@
                     continue;
                 }
                 File genFile = new File(targetDir, f.getName() + ".txt");
-                FeatureToProvisioning.convert(f, genFile, am);
+                FeatureToProvisioning.convert(f, genFile, am, files);
             }
         } catch (Exception e) {
             throw new MavenExecutionException("Cannot convert feature files to provisioning model", e);
diff --git a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
index 36494f2..273d119 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
@@ -84,7 +84,7 @@
                 }
 
                 File genFile = new File(targetDir, f.getName() + ".txt");
-                FeatureToProvisioning.convert(f, genFile, am);
+                FeatureToProvisioning.convert(f, genFile, am, files.toArray(new File[] {}));
             }
         } catch (Exception e) {
             throw new MojoExecutionException("Cannot convert feature files to provisioning model", e);
diff --git a/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java b/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
index 45a8680..fa1d507 100644
--- a/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
@@ -16,15 +16,6 @@
  */
 package org.apache.sling.maven.slingstart;
 
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URL;
-
-import com.google.common.io.Files;
-
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Build;
@@ -36,12 +27,21 @@
 import org.junit.Test;
 import org.mockito.Mockito;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Files;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 public class FeatureModelConverterTest {
     private File tempDir;
 
     @Before
     public void setup() throws Exception {
-        tempDir = Files.createTempDir();
+        tempDir = Files.createTempDirectory(getClass().getSimpleName()).toFile();
     }
 
     @After
@@ -94,4 +94,43 @@
         assertTrue(expectedFile.exists());
         assertTrue(expectedFile.length() > 0);
     }
+
+    @Test
+    public void testConvertWithIncludes() throws Exception {
+        File f = new File(System.getProperty("user.home") + "/.m2");
+        ArtifactRepository localRepo = Mockito.mock(ArtifactRepository.class);
+        Mockito.when(localRepo.getUrl()).thenReturn(f.toURI().toURL().toString());
+
+        MavenSession session = Mockito.mock(MavenSession.class);
+        Mockito.when(session.getLocalRepository()).thenReturn(localRepo);
+
+        URL url = getClass().getResource("/features3");
+        File projBaseDir = new File(url.toURI());
+
+        Build build = Mockito.mock(Build.class);
+        Mockito.when(build.getDirectory()).thenReturn(tempDir.getAbsolutePath());
+
+        MavenProject proj = Mockito.mock(MavenProject.class);
+        Mockito.when(proj.getBasedir()).thenReturn(projBaseDir);
+        Mockito.when(proj.getBuild()).thenReturn(build);
+
+        ProjectInfo pi = new ProjectInfo();
+        pi.project = proj;
+
+        Environment env = new Environment();
+        env.modelProjects.put("xyz", pi);
+
+        FeatureModelConverter fmc = new FeatureModelConverter();
+        fmc.convert(session, env);
+
+        File simpleProvFile = new File(tempDir, "/provisioning/converted/simple.json.txt");
+        String simpleProv = new String(Files.readAllBytes(simpleProvFile.toPath()));
+        assertTrue(simpleProv.contains("org.apache.aries/org.apache.aries.util/1.1.3"));
+        assertFalse(simpleProv.contains("org.apache.sling/org.apache.sling.commons.log/5.1.0"));
+
+        File inheritsProvFile = new File(tempDir, "/provisioning/converted/simple_inherits.json.txt");
+        String inheritsProv = new String(Files.readAllBytes(inheritsProvFile.toPath()));
+        assertTrue(inheritsProv.contains("org.apache.aries/org.apache.aries.util/1.1.3"));
+        assertTrue(inheritsProv.contains("org.apache.sling/org.apache.sling.commons.log/5.1.0"));
+    }
 }
diff --git a/src/test/resources/features3/src/main/features/simple.json b/src/test/resources/features3/src/main/features/simple.json
new file mode 100644
index 0000000..4cc130a
--- /dev/null
+++ b/src/test/resources/features3/src/main/features/simple.json
@@ -0,0 +1,9 @@
+{
+  "id":"generated:simple:1.0.0",
+  "bundles":[
+    {
+      "id":"org.apache.aries:org.apache.aries.util:1.1.3",
+      "start-level":"20"
+    }
+  ]
+}
diff --git a/src/test/resources/features3/src/main/features/simple_inherits.json b/src/test/resources/features3/src/main/features/simple_inherits.json
new file mode 100644
index 0000000..02c4e20
--- /dev/null
+++ b/src/test/resources/features3/src/main/features/simple_inherits.json
@@ -0,0 +1,11 @@
+{
+  "id":"generated:simple-inherits:1.0.0",
+  "includes": [
+       {
+           "id": "generated:simple:1.0.0"
+       }
+   ],
+  "bundles":[
+      "org.apache.sling/org.apache.sling.commons.log/5.1.0"
+  ]
+}
