diff --git a/bundleplugin/pom.xml b/bundleplugin/pom.xml
index 8bd01c4..c24a7a9 100644
--- a/bundleplugin/pom.xml
+++ b/bundleplugin/pom.xml
@@ -74,6 +74,11 @@
    <version>2.0.7</version>
   </dependency>
   <dependency>
+   <groupId>org.apache.maven</groupId>
+   <artifactId>maven-archiver</artifactId>
+   <version>2.2</version>
+  </dependency>
+  <dependency>
    <groupId>org.apache.maven.shared</groupId>
    <artifactId>maven-dependency-tree</artifactId>
    <version>1.1</version>
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
index 57db3f5..b187c40 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
@@ -34,6 +34,8 @@
 import java.util.jar.Manifest;
 import java.util.zip.ZipException;
 
+import org.apache.maven.archiver.MavenArchiveConfiguration;
+import org.apache.maven.archiver.MavenArchiver;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.model.License;
@@ -46,6 +48,7 @@
 import org.codehaus.plexus.archiver.UnArchiver;
 import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.StringInputStream;
 
 import aQute.lib.osgi.Analyzer;
 import aQute.lib.osgi.Builder;
@@ -317,6 +320,32 @@
                 }
             }
 
+            try
+            {
+                /*
+                 * Grab customized manifest entries from the maven-jar-plugin configuration
+                 */
+                MavenArchiveConfiguration archiveConfig = JarPluginConfiguration.getArchiveConfiguration( project );
+                String mavenManifestText = new MavenArchiver().getManifest( project, archiveConfig ).toString();
+
+                Manifest mavenManifest = new Manifest();
+                mavenManifest.read( new StringInputStream( mavenManifestText ) );
+                Manifest bundleManifest = jar.getManifest();
+
+                /*
+                 * Overlay customized Maven manifest with the generated bundle manifest
+                 */
+                mavenManifest.getMainAttributes().putAll( bundleManifest.getMainAttributes() );
+                mavenManifest.getMainAttributes().putValue( "Created-By", "Apache Maven Bundle Plugin" );
+                mavenManifest.getEntries().putAll( bundleManifest.getEntries() );
+
+                jar.setManifest( mavenManifest );
+            }
+            catch (Exception e)
+            {
+                getLog().warn( "Unable to merge Maven manifest" );
+            }
+            
             jarFile.getParentFile().mkdirs();
             builder.getJar().write(jarFile);
             Artifact bundleArtifact = project.getArtifact();
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/JarPluginConfiguration.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/JarPluginConfiguration.java
new file mode 100644
index 0000000..f0ab2bb
--- /dev/null
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/JarPluginConfiguration.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.bundleplugin;
+
+import org.apache.maven.archiver.MavenArchiveConfiguration;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.configurator.converters.composite.ObjectWithFieldsConverter;
+import org.codehaus.plexus.component.configurator.converters.lookup.ConverterLookup;
+import org.codehaus.plexus.component.configurator.converters.lookup.DefaultConverterLookup;
+import org.codehaus.plexus.component.configurator.expression.DefaultExpressionEvaluator;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * Provide access to the archive configuration from the jar plugin
+ * 
+ * @author stuart.mcculloch@jayway.net (Stuart McCulloch)
+ */
+public class JarPluginConfiguration
+{
+    public static MavenArchiveConfiguration getArchiveConfiguration( MavenProject project )
+    {
+        MavenArchiveConfiguration archiveConfig = new MavenArchiveConfiguration();
+
+        try
+        {
+            ObjectWithFieldsConverter converter = new ObjectWithFieldsConverter();
+            ClassLoader loader = JarPluginConfiguration.class.getClassLoader();
+            ExpressionEvaluator evaluator = new DefaultExpressionEvaluator();
+            ConverterLookup converters = new DefaultConverterLookup();
+
+            PlexusConfiguration pluginSettings = getCorePluginConfiguration( project, "jar" );
+            PlexusConfiguration archiveSettings = pluginSettings.getChild( "archive" );
+
+            converter.processConfiguration( converters, archiveConfig, loader, archiveSettings, evaluator, null );
+        }
+        catch( Exception e )
+        {
+            // ignore and return empty configuration...
+        }
+
+        return archiveConfig;
+    }
+
+    private static PlexusConfiguration getCorePluginConfiguration( MavenProject project, String pluginName )
+    {
+        return getPluginConfiguration( project, "org.apache.maven.plugins", "maven-" + pluginName + "-plugin" );
+    }
+
+    private static PlexusConfiguration getPluginConfiguration( MavenProject project, String groupId, String artifactId )
+    {
+        Xpp3Dom pluginConfig = project.getGoalConfiguration( groupId, artifactId, null, null );
+
+        return new XmlPlexusConfiguration( pluginConfig );
+    }
+}
