diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java
index c3a2677..9a1d6f3 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/AbstractDependencyFilter.java
@@ -23,11 +23,13 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.regex.Pattern;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
 
 import aQute.lib.osgi.Instruction;
+import aQute.libg.header.OSGiHeader;
 
 
 /**
@@ -37,6 +39,8 @@
  */
 public abstract class AbstractDependencyFilter
 {
+    private final Pattern MISSING_KEY_PATTERN = Pattern.compile( "^[a-zA-Z]+=" );
+
     /**
      * Dependency artifacts.
      */
@@ -100,8 +104,15 @@
     }
 
 
-    protected final void processInstructions( Map instructions ) throws MojoExecutionException
+    protected final void processInstructions( String header ) throws MojoExecutionException
     {
+        if ( MISSING_KEY_PATTERN.matcher( header ).lookingAt() )
+        {
+            header = "*;" + header;
+        }
+
+        Map instructions = OSGiHeader.parseHeader( header );
+
         DependencyFilter filter;
         for ( Iterator clauseIterator = instructions.entrySet().iterator(); clauseIterator.hasNext(); )
         {
@@ -114,8 +125,6 @@
             Map.Entry clause = ( Map.Entry ) clauseIterator.next();
 
             String primaryKey = ( ( String ) clause.getKey() ).replaceFirst( "~+$", "" );
-            StringBuilder tag = new StringBuilder( primaryKey );
-
             if ( !"*".equals( primaryKey ) )
             {
                 filter = new DependencyFilter( primaryKey )
@@ -133,8 +142,6 @@
             {
                 // ATTRIBUTE: KEY --> REGEXP
                 Map.Entry attr = ( Map.Entry ) attrIterator.next();
-                tag.append( ';' ).append( attr );
-
                 if ( "groupId".equals( attr.getKey() ) )
                 {
                     filter = new DependencyFilter( ( String ) attr.getValue() )
@@ -227,10 +234,10 @@
                 filter.filter( filteredDependencies );
             }
 
-            processDependencies( tag.toString(), inline, filteredDependencies );
+            processDependencies( filteredDependencies, inline );
         }
     }
 
 
-    protected abstract void processDependencies( String clause, String inline, Collection dependencies );
+    protected abstract void processDependencies( Collection dependencies, String inline );
 }
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
index 8ef8c93..1ab4ccf 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyEmbedder.java
@@ -23,7 +23,6 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
-import java.util.Map;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -31,7 +30,6 @@
 import org.codehaus.plexus.util.StringUtils;
 
 import aQute.lib.osgi.Analyzer;
-import aQute.libg.header.OSGiHeader;
 
 
 /**
@@ -98,8 +96,7 @@
             m_embedStripGroup = analyzer.getProperty( EMBED_STRIP_GROUP, "true" );
             m_embedStripVersion = analyzer.getProperty( EMBED_STRIP_VERSION );
 
-            Map embedInstructions = OSGiHeader.parseHeader( embedDependencyHeader );
-            processInstructions( embedInstructions );
+            processInstructions( embedDependencyHeader );
 
             for ( Iterator i = m_inlinedPaths.iterator(); i.hasNext(); )
             {
@@ -127,13 +124,8 @@
 
 
     @Override
-    protected void processDependencies( String tag, String inline, Collection dependencies )
+    protected void processDependencies( Collection dependencies, String inline )
     {
-        if ( dependencies.isEmpty() )
-        {
-            m_log.warn( EMBED_DEPENDENCY + ": clause \"" + tag + "\" did not match any dependencies" );
-        }
-
         if ( null == inline || "false".equalsIgnoreCase( inline ) )
         {
             m_embeddedArtifacts.addAll( dependencies );
diff --git a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyExcluder.java b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyExcluder.java
index e301426..dedd93d 100644
--- a/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyExcluder.java
+++ b/bundleplugin/src/main/java/org/apache/felix/bundleplugin/DependencyExcluder.java
@@ -24,8 +24,6 @@
 
 import org.apache.maven.plugin.MojoExecutionException;
 
-import aQute.libg.header.OSGiHeader;
-
 
 /**
  * Exclude selected dependencies from the classpath passed to BND.
@@ -54,13 +52,13 @@
 
         if ( null != excludeDependencies && excludeDependencies.length() > 0 )
         {
-            processInstructions( OSGiHeader.parseHeader( excludeDependencies ) );
+            processInstructions( excludeDependencies );
         }
     }
 
 
     @Override
-    protected void processDependencies( String tag, String inline, Collection dependencies )
+    protected void processDependencies( Collection dependencies, String inline )
     {
         m_excludedArtifacts.addAll( dependencies );
     }
diff --git a/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java b/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
index 2df29ff..428fbf4 100644
--- a/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
+++ b/bundleplugin/src/test/java/org/apache/felix/bundleplugin/BundlePluginTest.java
@@ -237,7 +237,7 @@
         Manifest manifest = builder.getJar().getManifest();
 
         String bcp = manifest.getMainAttributes().getValue( Constants.BUNDLE_CLASSPATH );
-        assertEquals( ".,compile-1.0.jar,b-1.0.jar,runtime-1.0.jar", bcp );
+        assertEquals( ".," + "compile-1.0.jar,b-1.0.jar,runtime-1.0.jar", bcp );
 
         String eas = manifest.getMainAttributes().getValue( "Embedded-Artifacts" );
         assertEquals( "compile-1.0.jar;g=\"g\";a=\"compile\";v=\"1.0\"," + "b-1.0.jar;g=\"g\";a=\"b\";v=\"1.0\","
@@ -266,7 +266,7 @@
         Manifest manifest = builder.getJar().getManifest();
 
         String bcp = manifest.getMainAttributes().getValue( Constants.BUNDLE_CLASSPATH );
-        assertEquals( ".,c-1.0-three.jar," + "c-1.0.sources", bcp );
+        assertEquals( ".," + "c-1.0-three.jar," + "c-1.0.sources", bcp );
 
         String eas = manifest.getMainAttributes().getValue( "Embedded-Artifacts" );
         assertEquals( "c-1.0-three.jar;g=\"g\";a=\"c\";v=\"1.0\";c=\"three\","
@@ -274,6 +274,35 @@
     }
 
 
+    public void testEmbedDependencyMissingKey() throws Exception
+    {
+        ArtifactStubFactory artifactFactory = new ArtifactStubFactory( plugin.getOutputDirectory(), true );
+
+        Set artifacts = new LinkedHashSet();
+
+        artifacts.addAll( artifactFactory.getClassifiedArtifacts() );
+        artifacts.addAll( artifactFactory.getScopedArtifacts() );
+        artifacts.addAll( artifactFactory.getTypedArtifacts() );
+
+        MavenProject project = getMavenProjectStub();
+        project.setDependencyArtifacts( artifacts );
+
+        Map instructions = new HashMap();
+        instructions.put( DependencyEmbedder.EMBED_DEPENDENCY, "artifactId=a|b" );
+        Properties props = new Properties();
+
+        Builder builder = plugin.buildOSGiBundle( project, instructions, props, plugin.getClasspath( project ) );
+        Manifest manifest = builder.getJar().getManifest();
+
+        String bcp = manifest.getMainAttributes().getValue( Constants.BUNDLE_CLASSPATH );
+        assertEquals( ".," + "a-1.0.war," + "a-1.0-one.jar," + "b-1.0.jar," + "b-1.0-two.jar", bcp );
+
+        String eas = manifest.getMainAttributes().getValue( "Embedded-Artifacts" );
+        assertEquals( "a-1.0.war;g=\"g\";a=\"a\";v=\"1.0\"," + "a-1.0-one.jar;g=\"g\";a=\"a\";v=\"1.0\";c=\"one\","
+            + "b-1.0.jar;g=\"g\";a=\"b\";v=\"1.0\"," + "b-1.0-two.jar;g=\"g\";a=\"b\";v=\"1.0\";c=\"two\"", eas );
+    }
+
+
     public void testEmbedDependencyNegativeClauses() throws Exception
     {
     }
