diff --git a/scrplugin/bnd-scr-plugin/pom.xml b/scrplugin/bnd-scr-plugin/pom.xml
index 6de852b..1c7eb17 100644
--- a/scrplugin/bnd-scr-plugin/pom.xml
+++ b/scrplugin/bnd-scr-plugin/pom.xml
@@ -55,7 +55,7 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.scr.annotations</artifactId>
-			<version>1.9.9-SNAPSHOT</version>
+			<version>1.9.11-SNAPSHOT</version>
 			<scope>compile</scope>
 		</dependency>
 		<dependency>
diff --git a/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java b/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java
index b115e02..aab84d9 100644
--- a/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java
+++ b/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java
@@ -29,8 +29,11 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.felix.scrplugin.Options;
 import org.apache.felix.scrplugin.Result;
@@ -200,15 +203,33 @@
 	}
 
 	private void addServiceComponentHeader(Analyzer analyzer, String components) {
-		String oldComponents = analyzer.getProperty("Service-Component");
-		if (oldComponents != null && oldComponents.length() > 0) {
-			StringBuilder sb = new StringBuilder(oldComponents);
-			sb.append(",");
-			sb.append(components);
-			components = sb.toString();
+		Set<String> descriptorsSet = new HashSet<String>();
+		String oldComponents = analyzer.getProperty("Service-Component");		
+		parseComponents(descriptorsSet, oldComponents);
+		parseComponents(descriptorsSet, components);
+		
+		StringBuilder sb = new StringBuilder();
+		Iterator<String> it = descriptorsSet.iterator();
+		while (it.hasNext()) {
+		    sb.append(it.next());
+		    if (it.hasNext()) {
+		        sb.append(",");
+		    }
 		}
-		log.info("Setting Service-Component header: " + components);
-		analyzer.setProperty("Service-Component", components);
+		String comps = sb.toString();
+		log.info("Setting Service-Component header: " + comps);
+		analyzer.setProperty("Service-Component", comps);
+	}
+
+    private void parseComponents(Set<String> descriptorsSet, String components) {
+        if (components != null && components.length() > 0) {
+            for (String comp : components.split(",")) {
+                comp = comp.trim();
+                if (comp.length() > 0) {
+                    descriptorsSet.add(comp);
+                }
+            }
+        }
 	}
 
 	private void init(Analyzer analyzer) {
diff --git a/scrplugin/scrtask/pom.xml b/scrplugin/scrtask/pom.xml
index d055881..e9ff64f 100644
--- a/scrplugin/scrtask/pom.xml
+++ b/scrplugin/scrtask/pom.xml
@@ -60,7 +60,7 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr.annotations</artifactId>
-            <version>1.9.9-SNAPSHOT</version>
+            <version>1.9.11-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
