diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index 2bc41b4..a8875ca 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -92,6 +92,8 @@
                     final ProjectInfo info = new ProjectInfo();
                     info.plugin = plugin;
                     info.project = project;
+                    info.defaultProvisioningModelName = ModelPreprocessor.nodeValue(plugin,
+                            "defaultProvisioningModelName", null);
                     env.modelProjects.put(project.getGroupId() + ":" + project.getArtifactId(), info);
                     File processed = new File(project.getBuild().getDirectory(), "features/processed");
                     try {
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 5296c66..a00aa95 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
@@ -47,6 +47,7 @@
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.builder.FeatureProvider;
 import org.apache.sling.feature.io.json.FeatureJSONReader;
+import org.apache.sling.feature.io.json.FeatureJSONWriter;
 import org.apache.sling.feature.modelconverter.FeatureToProvisioning;
 import org.apache.sling.maven.slingstart.ModelPreprocessor.Environment;
 import org.apache.sling.maven.slingstart.ModelPreprocessor.ProjectInfo;
@@ -69,7 +70,7 @@
 
     public static void convert(Environment env) throws MavenExecutionException {
         for (ProjectInfo pi : env.modelProjects.values()) {
-            convert(env, pi);
+            convert(env, pi, pi.defaultProvisioningModelName);
         }
     }
 
@@ -93,7 +94,8 @@
         return files;
     }
 
-    public static void convert(Environment env, ProjectInfo info) throws MavenExecutionException {
+    public static void convert(Environment env, ProjectInfo info, String defaultProvName)
+            throws MavenExecutionException {
         final String config = ModelPreprocessor.nodeValue(info.plugin, "featuresDirectory", "src/main/features");
         final List<File> files = getFeatureFiles(info.project.getBasedir(), config);
         if (files == null) {
@@ -101,7 +103,7 @@
         }
 
         try {
-            convert(files, info.project,
+            convert(files, info.project, defaultProvName,
                     id -> getFeature(id, env.session, info.project, env.artifactHandlerManager, env.resolver));
         } catch (RuntimeException ex) {
             throw new MavenExecutionException(ex.getMessage(), ex);
@@ -109,7 +111,10 @@
 
     }
 
-    static void convert(List<File> files, MavenProject project, FeatureProvider fp) throws MavenExecutionException {
+    static final String PROVISIONING_MODEL_NAME_VARIABLE = "provisioning.model.name";
+
+    static void convert(List<File> files, MavenProject project, String defaultProvName, FeatureProvider fp)
+            throws MavenExecutionException {
         File processedFeaturesDir = new File(project.getBuild().getDirectory(), "features/processed");
         processedFeaturesDir.mkdirs();
 
@@ -125,8 +130,22 @@
                     } else {
                         suggestedClassifier = null;
                     }
-                    final String json = readFeatureFile(project, f, suggestedClassifier);
+                    String json = readFeatureFile(project, f, suggestedClassifier);
 
+                    // check for prov model name
+                    if (defaultProvName != null) {
+                        try (final Reader reader = new StringReader(json)) {
+                            final Feature feature = FeatureJSONReader.read(reader, f.getAbsolutePath());
+                            if (feature.getVariables().get(PROVISIONING_MODEL_NAME_VARIABLE) == null) {
+                                feature.getVariables().put(PROVISIONING_MODEL_NAME_VARIABLE, defaultProvName);
+                                try (final Writer writer = new StringWriter()) {
+                                    FeatureJSONWriter.write(writer, feature);
+                                    writer.flush();
+                                    json = writer.toString();
+                                }
+                            }
+                        }
+                    }
                     try (final Writer fileWriter = new FileWriter(outFile)) {
                         fileWriter.write(json);
                     }
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 366743b..27924bd 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
@@ -41,6 +41,9 @@
     @Parameter(defaultValue = "src/main/features")
     private String featuresDirectory;
 
+    @Parameter
+    private String defaultProvisioningModelName;
+
     /**
      * To look up Archiver/UnArchiver implementations
      */
@@ -68,7 +71,8 @@
             return;
 
         try {
-            FeatureModelConverter.convert(featureFiles, project, id -> FeatureModelConverter.getFeature(id,
+            FeatureModelConverter.convert(featureFiles, project, defaultProvisioningModelName,
+                    id -> FeatureModelConverter.getFeature(id,
                     mavenSession,
                     project, artifactHandlerManager, resolver));
         } catch (MavenExecutionException e) {
diff --git a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
index b36a1b5..09f0cb6 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
@@ -69,6 +69,7 @@
         public Model        model;
         public boolean      extendMavenClassPath = true;
         public final Map<org.apache.sling.provisioning.model.Artifact, Model> includedModels = new HashMap<>();
+        public String defaultProvisioningModelName;
 
     }
 
