diff --git a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
index 136acb2..4d190f2 100644
--- a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
+++ b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
@@ -36,7 +36,6 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -1181,14 +1180,6 @@
                 bundleManifest.getMainAttributes().putValue( "Import-Package", result );
             }
 
-            for ( String header : Arrays.asList( Constants.IMPORT_PACKAGE, Constants.DYNAMICIMPORT_PACKAGE,
-                                                 Constants.EXPORT_PACKAGE, Constants.PRIVATE_PACKAGE,
-                                                 Constants.PROVIDE_CAPABILITY, Constants.REQUIRE_CAPABILITY,
-                                                 "Bundle-Blueprint", "Service-Component" ) )
-            {
-                reformatClauses( bundleManifest.getMainAttributes(), header );
-            }
-
             jar.setManifest( bundleManifest );
         }
         catch ( Exception e )
@@ -1209,26 +1200,6 @@
         builder.setJar( jar );
     }
 
-    protected static void reformatClauses( Attributes attributes, String name )
-    {
-        String header = attributes.getValue( name );
-        if ( header != null )
-        {
-            Map<String, Map<String, String>> params = OSGiHeader.parseHeader( header, null ).toBasic();
-            Map<String, Map<String, String>> sorted = new TreeMap<>();
-            for ( Map.Entry<String, Map<String, String>> entry : params.entrySet() )
-            {
-                String key = entry.getKey();
-                Map<String, String> attrs = entry.getValue();
-                Map<String, String> newAttrs = new TreeMap<>(
-                            Comparator.<String, Boolean>comparing( s -> !s.endsWith( ":" ) ).thenComparing( s -> s ) );
-                newAttrs.putAll( attrs );
-                sorted.put( key, newAttrs );
-            }
-            String nh = new Parameters( sorted ).toString();
-            attributes.putValue( name, nh );
-        }
-    }
 
     protected static void mergeManifest( Instructions instructions, Manifest... manifests ) throws IOException
     {
