diff --git a/pom.xml b/pom.xml
index 22fcc6c..633abce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
     <groupId>org.apache.felix</groupId>
     <artifactId>org.apache.felix.scr.generator</artifactId>
 
-    <version>1.1.3-SNAPSHOT</version>
+    <version>1.1.2</version>
     <packaging>jar</packaging>
 
     <name>Descriptor Generator Implementation</name>
@@ -39,9 +39,9 @@
     </description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/scrplugin/generator</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/scrplugin/generator</developerConnection>
-        <url>http://svn.apache.org/repos/asf/felix/scrplugin/generator</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.scr.generator-1.1.2</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.scr.generator-1.1.2</developerConnection>
+        <url>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.scr.generator-1.1.2</url>
     </scm>
 
     <dependencies>
diff --git a/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java b/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java
index 3da23a7..7583624 100644
--- a/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java
+++ b/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java
@@ -367,6 +367,18 @@
         return descs;
     }
 
+    private boolean doingHasScrPluginAnnotationCheck = false;
+
+    private boolean hasScrPluginAnnotation(final Class<?> clazz, final JavaClass javaClass)
+    {
+        boolean result;
+        doingHasScrPluginAnnotationCheck = true;
+
+        result = getAnnotationTagProviderManager().hasScrPluginAnnotation( javaClass,
+                new AnnotationJavaClassDescription( clazz, javaClass, this ));
+        doingHasScrPluginAnnotationCheck = false;
+        return result;
+    }
 
     /**
      * Get a java class description for the class.
@@ -393,17 +405,16 @@
                         // check for java annotation descriptions - fallback to
                         // QDox if none found
                         Class<?> clazz = this.classloader.loadClass( className );
-                        if ( this.processAnnotations
-                            && getAnnotationTagProviderManager().hasScrPluginAnnotation( javaClass,
-                                    new AnnotationJavaClassDescription( clazz, javaClasses[index], this )) )
+                        if ( this.processAnnotations && !doingHasScrPluginAnnotationCheck
+                            && hasScrPluginAnnotation(clazz, javaClass) )
                         {
                             this.log.debug( "Found java annotation description for: " + className );
-                            result = new AnnotationJavaClassDescription( clazz, javaClasses[index], this );
+                            result = new AnnotationJavaClassDescription( clazz, javaClass, this );
                         }
                         else if ( this.parseJavadocs )
                         {
                             this.log.debug( "Found qdox description for: " + className );
-                            result = new QDoxJavaClassDescription( clazz, javaClasses[index], this );
+                            result = new QDoxJavaClassDescription( clazz, javaClass, this );
                         }
                     }
                     catch ( ClassNotFoundException e )
@@ -429,7 +440,9 @@
                     throw new SCRDescriptorException( "Unable to load class", className, 0 );
                 }
             }
-            this.javaClassDescriptions.put( className, result );
+            if ( !doingHasScrPluginAnnotationCheck ) {
+                this.javaClassDescriptions.put( className, result );
+            }
         }
         return result;
     }
