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 7d8346b..8c28538 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
@@ -205,7 +205,7 @@
         // FELIX-593: immediate attribute does not default to true all the
         // times hence we only set it if declared in the tag
         if (cad.getValue("immediate") != null) {
-            component.setEnabled(cad.getBooleanValue("immediate", false));
+            component.setImmediate(cad.getBooleanValue("immediate", false));
         }
         component.setInherit(cad.getBooleanValue("inherit", true));
         component.setConfigurationPolicy(ComponentConfigurationPolicy.valueOf(cad.getEnumValue("policy",
diff --git a/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java b/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java
index 9adcbca..da8e7fd 100644
--- a/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java
+++ b/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java
@@ -162,7 +162,7 @@
 
         // immediate
         if (cad.getValue("immediate") != null) {
-            component.setEnabled(cad.getBooleanValue("immediate", false));
+            component.setImmediate(cad.getBooleanValue("immediate", false));
         }
 
         // property
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 ed07973..3ef92df 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
@@ -426,7 +426,7 @@
                     iLog.addError(sde.getMessage(), sde.getSourceLocation());
                 }
             }
-        } while ( inherit && current != null);
+        } while ( current != null);
 
         // PID handling
         if ( componentDesc.isCreatePid() && !container.getProperties().containsKey(org.osgi.framework.Constants.SERVICE_PID)) {
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 f2dcebc..7b656f6 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
@@ -136,9 +136,12 @@
                 final Class<?> annotatedClass = project.getClassLoader().loadClass(src.getClassName());
 
                 final ClassDescription desc = this.processClass(annotatedClass, src.getFile().toString());
-                if (desc != null) {
-                    result.add(desc);
+                if ( desc != null ) {
                     this.allDescriptions.put(annotatedClass.getName(), desc);
+                    if ( desc.getDescriptions(ComponentDescription.class).size() > 0) {
+                        result.add(desc);
+                        log.debug("Found component description " + desc + " in " + annotatedClass.getName());
+                    }
                 } else {
                     this.allDescriptions.put(annotatedClass.getName(), new ClassDescription(annotatedClass, GENERATED));
                 }
@@ -154,6 +157,7 @@
      */
     private ClassDescription processClass(final Class<?> annotatedClass, final String location)
     throws SCRDescriptorFailureException, SCRDescriptorException {
+        log.info("Scanning " + annotatedClass.getName());
         try {
             // get the class file for ASM
             final String pathToClassFile = annotatedClass.getName().replace('.', '/') + ".class";
@@ -174,10 +178,8 @@
                 final ClassDescription desc = new ClassDescription(annotatedClass, location);
                 aProcessor.process(new ScannedClass(descriptions, annotatedClass), desc);
 
-                if (desc.getDescriptions(ComponentDescription.class).size() > 0) {
-                    log.debug("Found component description " + desc + " in " + annotatedClass.getName());
-                    return desc;
-                }
+                log.debug("Found descriptions " + desc + " in " + annotatedClass.getName());
+                return desc;
             }
         } catch (final IOException ioe) {
             throw new SCRDescriptorFailureException("Unable to scan class files: " + annotatedClass.getName(), ioe);
@@ -394,18 +396,7 @@
                     try {
                         scrInfoFile = this.getFile( artifact, ABSTRACT_DESCRIPTOR_ARCHIV_PATH );
                         if ( scrInfoFile != null ) {
-                            final List<ClassDescription> c =  this.parseServiceComponentDescriptor( scrInfoFile, artifact.toString() + ':' + ABSTRACT_DESCRIPTOR_ARCHIV_PATH);
-                            if ( c != null ) {
-                                for(final ClassDescription cd : c) {
-                                    final String name;
-                                    if ( cd.getDescribedClass() == null ) {
-                                        name = cd.getDescription(ComponentDescription.class).getName();
-                                    } else {
-                                        name = cd.getDescribedClass().getName();
-                                    }
-                                    loadedDependencies.put(name, cd);
-                                }
-                            }
+                            this.readServiceComponentDescriptor( scrInfoFile, artifact.toString() + ':' + ABSTRACT_DESCRIPTOR_ARCHIV_PATH);
                             continue;
                         }
                         this.log.debug( "Artifact has no scrinfo file (it's optional): " + artifact );
@@ -429,18 +420,7 @@
                             while ( st.hasMoreTokens() ) {
                                 final String entry = st.nextToken().trim();
                                 if ( entry.length() > 0 ) {
-                                    final List<ClassDescription> c = this.readServiceComponentDescriptor( artifact, entry );
-                                    if ( c != null ) {
-                                        for(final ClassDescription cd : c) {
-                                            final String name;
-                                            if ( cd.getDescribedClass() == null ) {
-                                                name = cd.getDescription(ComponentDescription.class).getName();
-                                            } else {
-                                                name = cd.getDescribedClass().getName();
-                                            }
-                                            loadedDependencies.put(name, cd);
-                                        }
-                                    }
+                                    this.readServiceComponentDescriptor( artifact, entry );
                                 }
                             }
                         } else {
@@ -467,10 +447,22 @@
      * @throws SCRDescriptorException If an error occurrs reading the
      *             descriptors from the stream.
      */
-    private List<ClassDescription> parseServiceComponentDescriptor(
+    private void readServiceComponentDescriptor(
                     final InputStream file, final String location )
     throws SCRDescriptorException {
-        return ComponentDescriptorIO.read( file, this.project.getClassLoader(), iLog, location );
+        final List<ClassDescription> list = ComponentDescriptorIO.read( file, this.project.getClassLoader(), iLog, location );
+        if ( list != null ) {
+            for(final ClassDescription cd : list) {
+                final String name;
+                if ( cd.getDescribedClass() == null ) {
+                    name = cd.getDescription(ComponentDescription.class).getName();
+                } else {
+                    name = cd.getDescribedClass().getName();
+                }
+                loadedDependencies.put(name, cd);
+            }
+        }
+
     }
 
     /**
@@ -481,7 +473,7 @@
      * @throws IOException
      * @throws SCRDescriptorException
      */
-    private List<ClassDescription> readServiceComponentDescriptor( final File artifactFile, String entry ) {
+    private void readServiceComponentDescriptor( final File artifactFile, String entry ) {
         this.log.debug( "Reading " + entry + " from " + artifactFile );
         InputStream xml = null;
         try {
@@ -489,7 +481,7 @@
             if ( xml == null ) {
                 throw new SCRDescriptorException( "Entry " + entry + " not contained in JAR File ", artifactFile.toString());
             }
-            return this.parseServiceComponentDescriptor( xml, artifactFile.toString() + ':' + entry );
+            this.readServiceComponentDescriptor( xml, artifactFile.toString() + ':' + entry );
         } catch ( final IOException mee ) {
             this.log.warn( "Unable to read SCR descriptor file from JAR File " + artifactFile + " at " + entry );
             this.log.debug( "Exception occurred during reading: " + mee.getMessage(), mee );
@@ -501,8 +493,6 @@
                 try { xml.close(); } catch (final IOException ignore) {}
             }
         }
-
-        return null;
     }
 
 
