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 d71dafa..055a793 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
@@ -21,11 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.*;
 import org.apache.felix.scrplugin.Constants;
 import org.apache.felix.scrplugin.tags.JavaClassDescription;
 
 import com.thoughtworks.qdox.model.Annotation;
+import com.thoughtworks.qdox.model.JavaMethod;
 
 /**
  * Description of a java tag for components.
@@ -89,6 +90,10 @@
                 return Util.getStringValue(annotation, desc, "name", Component.class);
             }
 
+            public ConfigurationPolicy policy() {
+                return Util.getEnumValue(annotation, "policy", ConfigurationPolicy.class, Component.class);
+            }
+
             public Class<? extends java.lang.annotation.Annotation> annotationType() {
                 return null;
             }
@@ -120,6 +125,21 @@
         map.put(Constants.COMPONENT_DS, String.valueOf(this.annotation.ds()));
         map.put(Constants.COMPONENT_CREATE_PID, String.valueOf(this.annotation.createPid()));
 
+        // version 1.1
+        map.put(Constants.COMPONENT_CONFIG_POLICY, this.annotation.policy().getPolicyString());
+        final JavaMethod[] jms = this.sourceAnnotation.getContext().getParent().getParentSource().getClasses()[0].getMethods();
+        for(final JavaMethod jm : jms) {
+            final Annotation[] annotations = jm.getAnnotations();
+            for(final Annotation a : annotations) {
+                if ( a.getType().getJavaClass().getName().equals(Activate.class) ) {
+                    map.put(Constants.COMPONENT_ACTIVATE, jm.getName());
+                }
+                if ( a.getType().getJavaClass().getName().equals(Deactivate.class) ) {
+                    map.put(Constants.COMPONENT_ACTIVATE, jm.getName());
+                }
+            }
+        }
+
         return map;
     }
 
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
index 7a14c79..c59e74f 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
@@ -68,8 +68,8 @@
                 return Util.getClassValue(annotation, "referenceInterface", Reference.class);
             }
 
-            public String strategy() {
-                return Util.getStringValue(annotation, desc, "strategy", Reference.class);
+            public ReferenceStrategy strategy() {
+                return Util.getEnumValue(annotation, "strategy", ReferenceStrategy.class, Reference.class);
             }
 
             public String target() {
@@ -108,7 +108,7 @@
         map.put(Constants.REFERENCE_BIND, emptyToNull(this.annotation.bind()));
         map.put(Constants.REFERENCE_UNDBIND, emptyToNull(this.annotation.unbind()));
         map.put(Constants.REFERENCE_CHECKED, String.valueOf(this.annotation.checked()));
-        map.put(Constants.REFERENCE_STRATEGY, emptyToNull(this.annotation.strategy()));
+        map.put(Constants.REFERENCE_STRATEGY, this.annotation.strategy().getStrategyString());
 
         return map;
     }
