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 cf019df..ebd5f99 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/Constants.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/Constants.java
@@ -94,7 +94,7 @@
     public static final String PROPERTY_TYPE_DOUBLE = "Double";
     public static final String PROPERTY_TYPE_FLOAT = "Float";
     public static final String PROPERTY_TYPE_INTEGER = "Integer";
-    public static final String PROPERTY_TYPE_BYTE = "Bye";
+    public static final String PROPERTY_TYPE_BYTE = "Byte";
     public static final String PROPERTY_TYPE_CHAR = "Char";
     public static final String PROPERTY_TYPE_CHAR_1_1 = "Character";
     public static final String PROPERTY_TYPE_BOOLEAN = "Boolean";
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 6322565..523d884 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/SCRDescriptorMojo.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/SCRDescriptorMojo.java
@@ -223,11 +223,11 @@
                             boolean createBind = false;
                             boolean createUnbind = false;
                             // Only create method if no bind name has been specified
-                            if ( bindValue == null && ref.findMethod(specVersion, ref.getBind()) == null ) {
+                            if ( bindValue == null && ref.findMethod(specVersion, "bind") == null ) {
                                 // create bind method
                                 createBind = true;
                             }
-                            if ( unbindValue == null && ref.findMethod(specVersion, ref.getUnbind()) == null ) {
+                            if ( unbindValue == null && ref.findMethod(specVersion, "unbind") == null ) {
                                 // create unbind method
                                 createUnbind = true;
                             }
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/om/Reference.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/om/Reference.java
index cc8d538..261a53f 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/om/Reference.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/om/Reference.java
@@ -60,9 +60,6 @@
     public Reference(JavaTag t, JavaClassDescription desc) {
         super(t);
         this.javaClassDescription = desc;
-        // set default values
-        this.setBind("bind");
-        this.setUnbind("unbind");
     }
 
     public String getName() {
@@ -194,6 +191,13 @@
 
         // validate bind and unbind methods
         if (!isLookupStrategy()) {
+            // set default values
+            if ( this.bind == null ) {
+                this.setBind("bind");
+            }
+            if ( this.unbind == null ) {
+                this.setUnbind("unbind");
+            }
             final String oldBind = this.bind;
             final String oldUnbind = this.unbind;
             this.bind = this.validateMethod(specVersion, this.bind, componentIsAbstract, iLog);
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 055a793..e31cd37 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
@@ -91,7 +91,7 @@
             }
 
             public ConfigurationPolicy policy() {
-                return Util.getEnumValue(annotation, "policy", ConfigurationPolicy.class, Component.class);
+                return Util.getEnumValue(annotation, "policy", ConfigurationPolicy.class, Component.class, false);
             }
 
             public Class<? extends java.lang.annotation.Annotation> annotationType() {
@@ -126,7 +126,9 @@
         map.put(Constants.COMPONENT_CREATE_PID, String.valueOf(this.annotation.createPid()));
 
         // version 1.1
-        map.put(Constants.COMPONENT_CONFIG_POLICY, this.annotation.policy().getPolicyString());
+        if ( this.annotation.policy() != null ) {
+            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();
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java
index ddef1f5..bf48560 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/Util.java
@@ -303,13 +303,19 @@
         }
     }
 
-    public static <T extends Enum> T getEnumValue(Annotation annotation, String name, final Class<T> enumClass, final Class<?> clazz) {
+    public static <T extends Enum> T getEnumValue(Annotation annotation,
+                                                  String name,
+                                                  final Class<T> enumClass,
+                                                  final Class<?> clazz,
+                                                  final boolean returnDefault) {
         Object obj = annotation.getNamedParameter(name);
         if (obj == null) {
-            try {
-                obj = clazz.getMethod(name).getDefaultValue();
-            } catch( NoSuchMethodException mnfe) {
-                // we ignore this
+            if ( returnDefault ) {
+                try {
+                    obj = clazz.getMethod(name).getDefaultValue();
+                } catch( NoSuchMethodException mnfe) {
+                    // we ignore this
+                }
             }
         }
         if ( obj != null ) {
@@ -329,6 +335,13 @@
         return null;
     }
 
+    public static <T extends Enum> T getEnumValue(Annotation annotation,
+            String name,
+            final Class<T> enumClass,
+            final Class<?> clazz) {
+        return getEnumValue(annotation, name, enumClass, clazz, true);
+    }
+
     private static String getAnnotationValue(final AnnotationValue av, final JavaClassDescription desc)
     throws IllegalArgumentException
     {
