diff --git a/scrplugin/generator/changelog.txt b/scrplugin/generator/changelog.txt
index 0ded2d5..e72adcc 100644
--- a/scrplugin/generator/changelog.txt
+++ b/scrplugin/generator/changelog.txt
@@ -1,3 +1,10 @@
+Changes from 1.1.2 to 1.1.4
+---------------------------
+
+** Bug
+    * [FELIX-2963] - scr annotations @Activate @Deactivate @Modified are not detected with class inheritance
+
+
 Changes from 1.1.0 to 1.1.2
 ---------------------------
 
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
index 16eac5d..0c3e719 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
@@ -18,21 +18,12 @@
  */
 package org.apache.felix.scrplugin.tags.cl;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.lang.reflect.*;
+import java.util.*;
 
-import org.apache.felix.scrplugin.Constants;
-import org.apache.felix.scrplugin.JavaClassDescriptorManager;
-import org.apache.felix.scrplugin.SCRDescriptorException;
+import org.apache.felix.scrplugin.*;
 import org.apache.felix.scrplugin.om.Component;
-import org.apache.felix.scrplugin.tags.JavaClassDescription;
-import org.apache.felix.scrplugin.tags.JavaField;
-import org.apache.felix.scrplugin.tags.JavaMethod;
-import org.apache.felix.scrplugin.tags.JavaTag;
+import org.apache.felix.scrplugin.tags.*;
 
 /**
  * <code>ClassLoaderJavaClassDescription.java</code>...
@@ -185,8 +176,10 @@
      * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getTagByName(java.lang.String)
      */
     public JavaTag getTagByName(String name) {
-        // this is only used to retrieve the component tag, so we can ignore it
-        // for classes from other bundles and simply return null
+        // this is only used to retrieve the component tag, so we just support this
+        if ( this.component != null && name.equals(Constants.COMPONENT) ) {
+            return new ClassLoaderJavaTag(this, this.component);
+        }
         return null;
     }
 
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java
index 4e7118d..c9e8e88 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java
@@ -32,31 +32,43 @@
 public class ClassLoaderJavaTag implements JavaTag {
 
     protected final JavaClassDescription description;
+    protected final Component component;
     protected final Reference reference;
     protected final Property property;
     protected final Interface interf;
     protected boolean isServiceFactory;
 
-    public ClassLoaderJavaTag(JavaClassDescription desc, Reference reference) {
+    public ClassLoaderJavaTag(final JavaClassDescription desc, final Component component) {
+        this.description = desc;
+        this.reference = null;
+        this.interf = null;
+        this.property = null;
+        this.component = component;
+    }
+
+    public ClassLoaderJavaTag(final JavaClassDescription desc, final Reference reference) {
         this.description = desc;
         this.reference = reference;
         this.interf = null;
         this.property = null;
+        this.component = null;
     }
 
-    public ClassLoaderJavaTag(JavaClassDescription desc, Property property) {
+    public ClassLoaderJavaTag(final JavaClassDescription desc, final Property property) {
         this.description = desc;
         this.property = property;
         this.reference = null;
         this.interf = null;
+        this.component = null;
     }
 
-    public ClassLoaderJavaTag(JavaClassDescription desc, Interface i, boolean isSF) {
+    public ClassLoaderJavaTag(final JavaClassDescription desc, final Interface i, final boolean isSF) {
         this.interf = i;
         this.description = desc;
         this.property = null;
         this.reference = null;
         this.isServiceFactory = isSF;
+        this.component = null;
     }
 
     /**
@@ -84,6 +96,8 @@
             return Constants.PROPERTY;
         } else if ( this.interf != null ) {
             return Constants.SERVICE;
+        } else if ( this.component != null ) {
+            return Constants.COMPONENT;
         }
         return null;
     }
@@ -153,6 +167,18 @@
                 map.put(Constants.SERVICE_FACTORY, "true");
             }
             return map;
+        } else if ( this.component != null ) {
+            final Map<String, String> map = new HashMap<String, String>();
+            if ( this.component.getActivate() != null ) {
+                map.put(Constants.COMPONENT_ACTIVATE, this.component.getActivate());
+            }
+            if ( this.component.getDeactivate() != null ) {
+                map.put(Constants.COMPONENT_DEACTIVATE, this.component.getDeactivate());
+            }
+            if ( this.component.getModified() != null ) {
+                map.put(Constants.COMPONENT_MODIFIED, this.component.getModified());
+            }
+            return map;
         }
         return null;
     }
diff --git a/scrplugin/maven-scr-plugin/changelog.txt b/scrplugin/maven-scr-plugin/changelog.txt
index fef6d5c..7774e7c 100644
--- a/scrplugin/maven-scr-plugin/changelog.txt
+++ b/scrplugin/maven-scr-plugin/changelog.txt
@@ -1,6 +1,9 @@
 Changes from 1.7.2 to 1.7.4
 ---------------------------
 
+** Bug
+    * [FELIX-2963] - scr annotations @Activate @Deactivate @Modified are not detected with class inheritance
+
 ** Improvement
     * [FELIX-3066] - Add support for source directory include filter via plugin configuration
 
diff --git a/scrplugin/maven-scr-plugin/pom.xml b/scrplugin/maven-scr-plugin/pom.xml
index ff04933..e9702d1 100644
--- a/scrplugin/maven-scr-plugin/pom.xml
+++ b/scrplugin/maven-scr-plugin/pom.xml
@@ -57,7 +57,7 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr.generator</artifactId>
-            <version>1.1.2</version>
+            <version>1.1.3-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
     </dependencies>
diff --git a/scrplugin/scrtask/changelog.txt b/scrplugin/scrtask/changelog.txt
index 284b44d..a6fa5e3 100644
--- a/scrplugin/scrtask/changelog.txt
+++ b/scrplugin/scrtask/changelog.txt
@@ -1,8 +1,14 @@
-Changes from 1.1.0 to 1.1.2
+Changes from 1.1.2 to 1.1.4
 ---------------------------
 
 ** Bug
     * [FELIX-2963] - scr annotations @Activate @Deactivate @Modified are not detected with class inheritance
+
+
+Changes from 1.1.0 to 1.1.2
+---------------------------
+
+** Bug
     * [FELIX-2978] - Lookup reference policy does not work for inherited components
     * [FELIX-2945] - SCR plugin: Parsing of "options" for property tag broken for java annotations
     * [FELIX-2906] - @Property(cardinality=Integer.MAX_Int, ...) causes java.lang.NumberFormatException
