diff --git a/scrplugin/maven-scr-plugin/changelog.txt b/scrplugin/maven-scr-plugin/changelog.txt
index 57306ba..4542100 100644
--- a/scrplugin/maven-scr-plugin/changelog.txt
+++ b/scrplugin/maven-scr-plugin/changelog.txt
@@ -1,3 +1,10 @@
+Changes from 1.14.0 to 1.13.0
+-----------------------------
+** Improvement
+    * [FELIX-4101] - Create metatype.properties file when description and label are inlined
+    * [FELIX-4126] - Discontinue creation of single XML descriptor files 
+
+
 Changes from 1.13.0 to 1.12.0
 -----------------------------
 ** Bug
diff --git a/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java b/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
index acd5fca..a61d113 100644
--- a/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
+++ b/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
@@ -105,21 +105,6 @@
     private MavenProject project;
 
     /**
-     * Name of the generated descriptor.
-     *
-     * @parameter expression="${scr.descriptor.name}"
-     *            default-value="serviceComponents.xml"
-     */
-    private String finalName;
-
-    /**
-     * Name of the generated meta type file.
-     *
-     * @parameter default-value="metatype.xml"
-     */
-    private String metaTypeName;
-
-    /**
      * This flag controls the generation of the bind/unbind methods.
      *
      * @parameter default-value="true"
@@ -134,13 +119,6 @@
     private boolean strictMode;
 
     /**
-     * If set to false, a single descriptor will be created.
-     *
-     * @parameter default-value="true"
-     */
-    private boolean generateSeparateDescriptors;
-
-    /**
      * The comma separated list of tokens to include when processing sources.
      *
      * @parameter alias="includes"
@@ -219,13 +197,10 @@
         // create options
         final Options options = new Options();
         options.setOutputDirectory(outputDirectory);
-        options.setSCRName(finalName);
-        options.setMetaTypeName(metaTypeName);
         options.setGenerateAccessors(generateAccessors);
         options.setStrictMode(strictMode);
         options.setProperties(properties);
         options.setSpecVersion(SpecVersion.fromName(specVersion));
-        options.setGenerateSeparateDescriptors(this.generateSeparateDescriptors);
 
         if ( specVersion != null && options.getSpecVersion() == null ) {
             throw new MojoExecutionException("Unknown spec version specified: " + specVersion);
@@ -240,19 +215,13 @@
             generator.setOptions(options);
             generator.setProject(project);
 
-            // don't try to delete per-class descriptors if only one descriptor is generated
-            if ( options.isGenerateSeparateDescriptors() ) {
-                this.removePossiblyStaleFiles(scanner.getSources(), options);
-            }
+            this.removePossiblyStaleFiles(scanner.getSources(), options);
 
             final Result result = generator.execute();
             this.setServiceComponentHeader();
 
             this.updateProjectResources();
-            // don't try to delete per-class descriptors if only one descriptor is generated
-            if ( options.isGenerateSeparateDescriptors() ) {
-                this.cleanUpDeletedSources(scanner.getDeletedSources(), options);
-            }
+            this.cleanUpDeletedSources(scanner.getDeletedSources(), options);
 
             this.refreshMessages(result.getProcessedSourceFiles());
             this.updateBuildContext(result);
