diff --git a/scr-annotations/src/main/java/org/apache/felix/scr/annotations/Component.java b/scr-annotations/src/main/java/org/apache/felix/scr/annotations/Component.java
index 6efb369..7c4c84e 100644
--- a/scr-annotations/src/main/java/org/apache/felix/scr/annotations/Component.java
+++ b/scr-annotations/src/main/java/org/apache/felix/scr/annotations/Component.java
@@ -108,6 +108,12 @@
     boolean createPid() default true;
 
     /**
+     * Set the metatype factory pid property (only for non factory components).
+     * @since 1.0
+     */
+    boolean getMetatypeFactoryPid() default false;
+
+    /**
      * The configuration policy
      * @since 1.0
      */
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/Constants.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/Constants.java
index 41f625f..ca9bd35 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/Constants.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/Constants.java
@@ -56,6 +56,8 @@
 
     public static final String COMPONENT_CREATE_PID = "create-pid";
 
+    public static final String COMPONENT_SET_METATYPE_FACTORY_PID = "set-metatype-factory-pid";
+
     // The component configuration policy (V1.1)
     public static final String COMPONENT_CONFIG_POLICY = "policy";
     public static final String COMPONENT_CONFIG_POLICY_OPTIONAL = "optional";
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/SCRDescriptorMojo.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/SCRDescriptorMojo.java
index 09615ca..0144763 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/SCRDescriptorMojo.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/SCRDescriptorMojo.java
@@ -367,7 +367,7 @@
         // set implementation
         component.setImplementation(new Implementation(description.getName()));
 
-        final OCD ocd = this.doComponent(componentTag, component, metaData);
+        final OCD ocd = this.doComponent(componentTag, component, metaData, iLog);
 
         boolean inherited = getBoolean(componentTag, Constants.COMPONENT_INHERIT, true);
         this.doServices(description.getTagsByName(Constants.SERVICE, inherited), component, description);
@@ -443,7 +443,8 @@
      * @param tag
      * @param component
      */
-    protected OCD doComponent(JavaTag tag, Component component, MetaData metaData) {
+    protected OCD doComponent(JavaTag tag, Component component, MetaData metaData,
+            final IssueLog iLog) {
 
         // check if this is an abstract definition
         final String abstractType = tag.getNamedParameter(Constants.COMPONENT_ABSTRACT);
@@ -513,8 +514,17 @@
             final Designate designate = new Designate();
             metaData.addDesignate(designate);
             designate.setPid(component.getName());
-            if (component.getFactory() != null) {
-                designate.setFactoryPid( component.getFactory() );
+
+            // factory pid
+            final String setFactoryPidValue = tag.getNamedParameter(Constants.COMPONENT_SET_METATYPE_FACTORY_PID);
+            final boolean setFactoryPid = setFactoryPidValue != null &&
+                ("yes".equalsIgnoreCase(setFactoryPidValue) || "true".equalsIgnoreCase(setFactoryPidValue));
+            if ( setFactoryPid ) {
+                if ( component.getFactory() == null ) {
+                    designate.setFactoryPid( component.getName() );
+                } else {
+                    iLog.addWarning("Component factory " + component.getName() + " should not set metatype factory pid.");
+                }
             }
             // designate.object
             final MTObject mtobject = new MTObject();
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ComponentTag.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ComponentTag.java
index cacee15..6854589 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ComponentTag.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ComponentTag.java
@@ -94,6 +94,10 @@
                 return Util.getEnumValue(annotation, "policy", ConfigurationPolicy.class, Component.class, false);
             }
 
+            public boolean getMetatypeFactoryPid() {
+                return Util.getBooleanValue(annotation, "getMetatypeFactoryPid", Component.class);
+            }
+
             public Class<? extends java.lang.annotation.Annotation> annotationType() {
                 return null;
             }
@@ -114,6 +118,8 @@
         map.put(Constants.COMPONENT_DESCRIPTION, emptyToNull(this.annotation.description()));
         map.put(Constants.COMPONENT_ENABLED, String.valueOf(this.annotation.enabled()));
         map.put(Constants.COMPONENT_FACTORY, emptyToNull(this.annotation.factory()));
+        map.put(Constants.COMPONENT_SET_METATYPE_FACTORY_PID, String.valueOf(this.annotation.getMetatypeFactoryPid()));
+
         // FELIX-593: immediate attribute does not default to true all the
         // times hence we only set it if declared in the tag
         if ( this.sourceAnnotation.getNamedParameter("immediate") != null) {
