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 622296e..aa81756 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
@@ -33,6 +33,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 public class FeatureModelConverter {
     static final String BUILD_DIR = "provisioning/converted";
@@ -113,12 +114,25 @@
 
     static String replaceVars(MavenProject project, String s) {
         // There must be a better way than enumerating all these?
-        s = s.replaceAll("\\Q${project.groupId}\\E", project.getGroupId());
-        s = s.replaceAll("\\Q${project.artifactId}\\E", project.getArtifactId());
-        s = s.replaceAll("\\Q${project.version}\\E", project.getVersion());
+        s = replaceAll(s, "project.groupId", project.getGroupId());
+        s = replaceAll(s, "project.artifactId", project.getArtifactId());
+        s = replaceAll(s, "project.version", project.getVersion());
+
+
+        Properties props = project.getProperties();
+        if (props != null) {
+            for (String key : props.stringPropertyNames()) {
+                s = replaceAll(s, key, props.getProperty(key));
+            }
+        }
+
         return s;
     }
 
+    private static String replaceAll(String s, String key, String value) {
+        return s.replaceAll("\\Q${" + key + "}\\E", value);
+    }
+
     private static ArtifactManager getArtifactManager(MavenProject project, MavenSession session)
             throws IOException {
         List<String> repos = new ArrayList<>();
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 55590eb..b4deea8 100644
--- a/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
@@ -32,6 +32,7 @@
 import java.io.IOException;
 import java.net.URL;
 import java.nio.file.Files;
+import java.util.Properties;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -138,13 +139,18 @@
     public void testReplaceVars() {
         MavenProject mp = Mockito.mock(MavenProject.class);
 
+        Properties props = new Properties();
+        props.put("foo", "bar");
+
         Mockito.when(mp.getGroupId()).thenReturn("abc");
         Mockito.when(mp.getArtifactId()).thenReturn("a.b.c");
         Mockito.when(mp.getVersion()).thenReturn("1.2.3-SNAPSHOT");
+        Mockito.when(mp.getProperties()).thenReturn(props);
 
         assertEquals("xxxabcyyy", FeatureModelConverter.replaceVars(mp,
                 "xxx${project.groupId}yyy"));
         assertEquals("xxxabcyyya.b.c1.2.3-SNAPSHOT", FeatureModelConverter.replaceVars(mp,
                 "xxx${project.groupId}yyy${project.artifactId}${project.version}"));
+        assertEquals("xxxbaryyy", FeatureModelConverter.replaceVars(mp, "xxx${foo}yyy"));
     }
 }
