diff --git a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
index 8c28538..e9b8aac 100644
--- a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
+++ b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
@@ -32,6 +32,7 @@
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.References;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.scr.annotations.Services;
 import org.apache.felix.scrplugin.SCRDescriptorException;
@@ -132,6 +133,16 @@
             describedClass.add(createService(allServiceTags, scannedClass));
         }
 
+        // references - class level
+        final List<ClassAnnotation> referencesClassTags = scannedClass.getClassAnnotations(References.class.getName());
+        scannedClass.processed(referencesClassTags);
+        for (final ClassAnnotation cad : referencesClassTags) {
+            final ClassAnnotation[] values = (ClassAnnotation[]) cad.getValue("value");
+            if (values != null) {
+                createReferences(Arrays.asList(values), describedClass);
+            }
+        }
+
         // reference - class level
         final List<ClassAnnotation> refClassTags = scannedClass.getClassAnnotations(Reference.class.getName());
         scannedClass.processed(refClassTags);
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
index 3ef92df..0b01981 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
@@ -28,6 +28,7 @@
 
 import org.apache.felix.scrplugin.annotations.AnnotationProcessor;
 import org.apache.felix.scrplugin.description.ClassDescription;
+import org.apache.felix.scrplugin.description.ComponentConfigurationPolicy;
 import org.apache.felix.scrplugin.description.ComponentDescription;
 import org.apache.felix.scrplugin.description.PropertyDescription;
 import org.apache.felix.scrplugin.description.PropertyType;
@@ -405,6 +406,10 @@
                     // spec version must be at least 1.1
                     componentDesc.setSpecVersion(SpecVersion.VERSION_1_1);
                 }
+                if ( componentDesc.getConfigurationPolicy() != ComponentConfigurationPolicy.OPTIONAL ) {
+                    // policy requires 1.1
+                    componentDesc.setSpecVersion(SpecVersion.VERSION_1_1);
+                }
             }
 
             // services, properties, references
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java
index 7b656f6..91e4e50 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java
@@ -157,7 +157,7 @@
      */
     private ClassDescription processClass(final Class<?> annotatedClass, final String location)
     throws SCRDescriptorFailureException, SCRDescriptorException {
-        log.info("Scanning " + annotatedClass.getName());
+        log.debug("Processing " + annotatedClass.getName());
         try {
             // get the class file for ASM
             final String pathToClassFile = annotatedClass.getName().replace('.', '/') + ".class";
@@ -172,11 +172,11 @@
             classReader.accept(classNode, SKIP_CODE | SKIP_DEBUG | SKIP_FRAMES);
 
             // create descriptions
-            final List<ScannedAnnotation> descriptions = extractAnnotation(classNode, annotatedClass);
-            if (descriptions.size() > 0) {
-                // process descriptions
+            final List<ScannedAnnotation> annotations = extractAnnotation(classNode, annotatedClass);
+            if (annotations.size() > 0) {
+                // process annotations and create descriptions
                 final ClassDescription desc = new ClassDescription(annotatedClass, location);
-                aProcessor.process(new ScannedClass(descriptions, annotatedClass), desc);
+                aProcessor.process(new ScannedClass(annotations, annotatedClass), desc);
 
                 log.debug("Found descriptions " + desc + " in " + annotatedClass.getName());
                 return desc;
