diff --git a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
index 47efce5..9264364 100644
--- a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
+++ b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/PropertyTag.java
@@ -24,8 +24,7 @@
 import org.apache.felix.scrplugin.Constants;
 import org.apache.felix.scrplugin.tags.JavaClassDescription;
 import org.apache.felix.scrplugin.tags.JavaField;
-import org.apache.felix.scrplugin.tags.annotation.AbstractTag;
-import org.apache.felix.scrplugin.tags.annotation.Util;
+import org.apache.felix.scrplugin.tags.annotation.*;
 
 import com.thoughtworks.qdox.model.Annotation;
 
@@ -40,7 +39,7 @@
      * @param annotation Annotation
      * @param desc Description
      */
-    public PropertyTag(final Annotation annotation, final JavaClassDescription desc, JavaField field) {
+    public PropertyTag(final Annotation annotation, final AnnotationJavaClassDescription desc, JavaField field) {
         super(annotation, desc, field);
         this.annotation = new Property() {
 
@@ -94,7 +93,7 @@
             }
 
             public Class<?>[] classValue() {
-                return Util.getClassArrayValue(annotation, "classValue", Property.class);
+                return Util.getClassArrayValue(annotation, "classValue", Property.class, desc.getClassLoader());
             }
 
             public boolean[] boolValue() {
diff --git a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
index 0c27191..8319692 100644
--- a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
+++ b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ReferenceTag.java
@@ -23,10 +23,8 @@
 
 import org.apache.felix.scr.annotations.*;
 import org.apache.felix.scrplugin.Constants;
-import org.apache.felix.scrplugin.tags.JavaClassDescription;
 import org.apache.felix.scrplugin.tags.JavaField;
-import org.apache.felix.scrplugin.tags.annotation.AbstractTag;
-import org.apache.felix.scrplugin.tags.annotation.Util;
+import org.apache.felix.scrplugin.tags.annotation.*;
 
 import com.thoughtworks.qdox.model.Annotation;
 
@@ -41,7 +39,7 @@
      * @param annotation Annotation
      * @param desc Description
      */
-    public ReferenceTag(final Annotation annotation, final JavaClassDescription desc, JavaField field) {
+    public ReferenceTag(final Annotation annotation, final AnnotationJavaClassDescription desc, JavaField field) {
         super(annotation, desc, field);
 
         this.annotation = new Reference() {
@@ -63,7 +61,7 @@
             }
 
             public Class<?> referenceInterface() {
-                return Util.getClassValue(annotation, "referenceInterface", Reference.class);
+                return Util.getClassValue(annotation, "referenceInterface", Reference.class, desc.getClassLoader());
             }
 
             public ReferenceStrategy strategy() {
diff --git a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ServiceTag.java b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ServiceTag.java
index 0cbf0e5..f9429b4 100644
--- a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ServiceTag.java
+++ b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/tags/annotation/defaulttag/ServiceTag.java
@@ -23,9 +23,7 @@
 import org.apache.felix.scr.annotations.AutoDetect;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.scrplugin.Constants;
-import org.apache.felix.scrplugin.tags.JavaClassDescription;
-import org.apache.felix.scrplugin.tags.annotation.AbstractTag;
-import org.apache.felix.scrplugin.tags.annotation.Util;
+import org.apache.felix.scrplugin.tags.annotation.*;
 
 import com.thoughtworks.qdox.model.Annotation;
 
@@ -43,7 +41,7 @@
      * @param desc Description
      */
     public ServiceTag(final Annotation annotation,
-            final JavaClassDescription desc,
+            final AnnotationJavaClassDescription desc,
             final Service tag,
             final String serviceInterface) {
         super(annotation, desc, null);
@@ -71,7 +69,7 @@
         return map;
     }
 
-    public static List<ServiceTag> createServiceTags(final Annotation annotation, JavaClassDescription desc) {
+    public static List<ServiceTag> createServiceTags(final Annotation annotation, final AnnotationJavaClassDescription desc) {
         final Service tag = new Service() {
 
             public boolean serviceFactory() {
@@ -79,7 +77,7 @@
             }
 
             public Class<?>[] value() {
-                return Util.getClassArrayValue(annotation, "value", Service.class);
+                return Util.getClassArrayValue(annotation, "value", Service.class, desc.getClassLoader());
             }
 
             public Class<? extends java.lang.annotation.Annotation> annotationType() {
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java
index fe53da7..b1aa824 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/JavaClassDescriptorManager.java
@@ -20,7 +20,8 @@
 
 import org.apache.felix.scrplugin.om.Component;
 import org.apache.felix.scrplugin.om.Components;
-import org.apache.felix.scrplugin.tags.*;
+import org.apache.felix.scrplugin.tags.JavaClassDescription;
+import org.apache.felix.scrplugin.tags.JavaTag;
 import org.apache.felix.scrplugin.tags.annotation.AnnotationJavaClassDescription;
 import org.apache.felix.scrplugin.tags.annotation.AnnotationTagProviderManager;
 import org.apache.felix.scrplugin.tags.cl.ClassLoaderJavaClassDescription;
@@ -84,8 +85,6 @@
         this.log = log;
         this.annotationTagProviderManager = new AnnotationTagProviderManager( annotationTagProviders, classLoader );
         this.classloader = classLoader;
-
-        ClassUtil.classLoader = this.classloader;
     }
 
 
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/ClassUtil.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/ClassUtil.java
index d84f4cb..76160d2 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/ClassUtil.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/ClassUtil.java
@@ -26,8 +26,6 @@
  */
 public class ClassUtil {
 
-    public static ClassLoader classLoader;
-
     /**
      * Try to get the initial value of a static field
      * @param clazz     The class.
@@ -59,7 +57,7 @@
     /**
      * Get the compiled class.
      */
-    public static Class<?> getClass(String name) {
+    public static Class<?> getClass(final ClassLoader classLoader, String name) {
         if ( classLoader == null ) {
             return null;
         }
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/AnnotationJavaClassDescription.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/AnnotationJavaClassDescription.java
index 15f3379..85563e9 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/AnnotationJavaClassDescription.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/AnnotationJavaClassDescription.java
@@ -43,6 +43,10 @@
         super(clazz, javaClass, manager);
     }
 
+    public ClassLoader getClassLoader() {
+        return this.manager.getClassLoader();
+    }
+
     /**
      * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getTagByName(String)
      */
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java
index ea44c02..671c616 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/tags/annotation/Util.java
@@ -293,13 +293,13 @@
         }
     }
 
-    public static Class<?> getClassValue(Annotation annotation, String name, final Class<?> clazz) {
+    public static Class<?> getClassValue(Annotation annotation, String name, final Class<?> clazz, final ClassLoader classLoader) {
         final Object obj = annotation.getNamedParameter(name);
         if ( obj != null ) {
             if ( obj instanceof Class<?> ) {
                 return (Class<?>)obj;
             }
-            return ClassUtil.getClass(obj.toString());
+            return ClassUtil.getClass(classLoader, obj.toString());
         }
         try {
             return (Class<?>) clazz.getMethod(name).getDefaultValue();
@@ -309,7 +309,7 @@
         }
     }
 
-    public static Class<?>[] getClassArrayValue(Annotation annotation, String name, final Class<?> clazz) {
+    public static Class<?>[] getClassArrayValue(Annotation annotation, String name, final Class<?> clazz, final ClassLoader classLoader) {
         Object obj = annotation.getNamedParameter(name);
         if ( obj != null ) {
             if ( obj instanceof Class<?> ) {
@@ -325,12 +325,12 @@
                     if ( objArray[i] instanceof Class<?>) {
                         result[i] = (Class<?>)objArray[i];
                     } else {
-                        result[i] = ClassUtil.getClass(objArray[i].toString());
+                        result[i] = ClassUtil.getClass(classLoader, objArray[i].toString());
                     }
                 }
                 return result;
             }
-            return new Class<?>[] {ClassUtil.getClass(obj.toString())};
+            return new Class<?>[] {ClassUtil.getClass(classLoader, obj.toString())};
         }
         try {
             final Object val = clazz.getMethod(name).getDefaultValue();
diff --git a/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java b/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
index 17de868..557fcb8 100644
--- a/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
+++ b/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java
@@ -39,6 +39,7 @@
  *
  * @goal scr
  * @phase process-classes
+ * @threadSafe
  * @description Build Service Descriptors from Java Source
  * @requiresDependencyResolution compile
  */
