diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
index 83e87db..c45be0f 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaClassDescription.java
@@ -73,7 +73,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getMethodBySignature(java.lang.String, java.lang.String[])
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getMethodBySignature(java.lang.String, java.lang.String[])
      */
     public JavaMethod getMethodBySignature(String name, String[] parameters) {
         Class[] classParameters = null;
@@ -99,20 +99,23 @@
         return null;
     }
 
+    /**
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getMethods()
+     */
     public JavaMethod[] getMethods() {
         // TODO Auto-generated method stub
         return null;
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getName()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getName()
      */
     public String getName() {
         return this.clazz.getName();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getSuperClass()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getSuperClass()
      */
     public JavaClassDescription getSuperClass() throws MojoExecutionException {
         if ( this.clazz.getSuperclass() != null ) {
@@ -122,7 +125,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getTagByName(java.lang.String)
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getTagByName(java.lang.String)
      */
     public JavaTag getTagByName(String name) {
         // TODO Auto-generated method stub
@@ -130,7 +133,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getTagsByName(java.lang.String, boolean)
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getTagsByName(java.lang.String, boolean)
      */
     public JavaTag[] getTagsByName(String name, boolean inherited)
     throws MojoExecutionException {
@@ -161,7 +164,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isA(java.lang.String)
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isA(java.lang.String)
      */
     public boolean isA(String type) {
         if ( this.clazz.getName().equals(type) ) {
@@ -184,21 +187,21 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isAbstract()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isAbstract()
      */
     public boolean isAbstract() {
         return Modifier.isAbstract(this.clazz.getModifiers());
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isInterface()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isInterface()
      */
     public boolean isInterface() {
         return Modifier.isInterface(this.clazz.getModifiers());
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isPublic()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isPublic()
      */
     public boolean isPublic() {
         return Modifier.isPublic(this.clazz.getModifiers());
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaMethod.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaMethod.java
index 31092e6..d7c5dde 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaMethod.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaMethod.java
@@ -39,12 +39,15 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#getName()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#getName()
      */
     public String getName() {
         return this.method.getName();
     }
 
+    /**
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#getParameters()
+     */
     public JavaParameter[] getParameters() {
         final JavaParameter[] params = new JavaParameter[this.method.getParameterTypes().length];
         for(int i=0; i<this.method.getParameterTypes().length; i++) {
@@ -54,21 +57,21 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#isConstructor()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#isConstructor()
      */
     public boolean isConstructor() {
         return this.isConstructor;
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#isProtected()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#isProtected()
      */
     public boolean isProtected() {
         return Modifier.isProtected(this.method.getModifiers());
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#isPublic()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#isPublic()
      */
     public boolean isPublic() {
         return Modifier.isPublic(this.method.getModifiers());
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaParameter.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaParameter.java
index 369f995..daa2427 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaParameter.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaParameter.java
@@ -33,7 +33,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaParameter#getType()
+     * @see org.apache.felix.scrplugin.tags.JavaParameter#getType()
      */
     public String getType() {
         return this.type;
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java
index 3fed074..1071124 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/cl/ClassLoaderJavaTag.java
@@ -41,20 +41,23 @@
         this.description = desc;
     }
 
+    /**
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getField()
+     */
     public JavaField getField() {
         // TODO Auto-generated method stub
         return null;
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getJavaClassDescription()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getJavaClassDescription()
      */
     public JavaClassDescription getJavaClassDescription() {
         return this.description;
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getName()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getName()
      */
     public String getName() {
         if ( this.reference != null ) {
@@ -64,7 +67,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getNamedParameter(java.lang.String)
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getNamedParameter(java.lang.String)
      */
     public String getNamedParameter(String name) {
         final Map map = this.getNamedParameterMap();
@@ -75,7 +78,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getNamedParameterMap()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getNamedParameterMap()
      */
     public Map getNamedParameterMap() {
         if ( this.reference != null ) {
@@ -93,7 +96,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getParameters()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getParameters()
      */
     public String[] getParameters() {
         final Map map = this.getNamedParameterMap();
@@ -104,7 +107,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getSourceLocation()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getSourceLocation()
      */
     public String getSourceLocation() {
         return "Compiled class: " + this.description.getName();
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
index b79600e..dc3668f 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaClassDescription.java
@@ -66,7 +66,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getSuperClass()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getSuperClass()
      */
     public JavaClassDescription getSuperClass() throws MojoExecutionException {
         final JavaClass parent = this.javaClass.getSuperJavaClass();
@@ -77,7 +77,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getTagForName(java.lang.String)
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getTagByName(java.lang.String)
      */
     public JavaTag getTagByName(String name) {
         final DocletTag tag = this.javaClass.getTagByName(name);
@@ -88,14 +88,14 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getName()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getName()
      */
     public String getName() {
         return this.javaClass.getFullyQualifiedName();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getTagsByName(java.lang.String, boolean)
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getTagsByName(java.lang.String, boolean)
      */
     public JavaTag[] getTagsByName(String name, boolean inherited)
     throws MojoExecutionException {
@@ -121,7 +121,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getFields()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getFields()
      */
     public JavaField[] getFields() {
         final com.thoughtworks.qdox.model.JavaField fields[] = this.javaClass.getFields();
@@ -136,7 +136,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getImplementedInterfaces()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getImplementedInterfaces()
      */
     public JavaClassDescription[] getImplementedInterfaces()
     throws MojoExecutionException {
@@ -152,7 +152,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getMethodBySignature(java.lang.String, java.lang.String[])
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getMethodBySignature(java.lang.String, java.lang.String[])
      */
     public JavaMethod getMethodBySignature(String name, String[] parameters)
     throws MojoExecutionException {
@@ -176,7 +176,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#getMethods()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#getMethods()
      */
     public JavaMethod[] getMethods() {
         final com.thoughtworks.qdox.model.JavaMethod[] methods = this.javaClass.getMethods();
@@ -191,7 +191,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isA(java.lang.String)
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isA(java.lang.String)
      */
     public boolean isA(String type) throws MojoExecutionException {
         final Type qType = new Type(type);
@@ -213,21 +213,21 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isAbstract()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isAbstract()
      */
     public boolean isAbstract() {
         return this.javaClass.isAbstract();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isInterface()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isInterface()
      */
     public boolean isInterface() {
         return this.javaClass.isInterface();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaClassDescription#isPublic()
+     * @see org.apache.felix.scrplugin.tags.JavaClassDescription#isPublic()
      */
     public boolean isPublic() {
         return this.javaClass.isPublic();
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaField.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaField.java
index 55090e9..e4d0564 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaField.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaField.java
@@ -40,21 +40,21 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaField#getInitializationExpression()
+     * @see org.apache.felix.scrplugin.tags.JavaField#getInitializationExpression()
      */
     public String getInitializationExpression() {
         return this.field.getInitializationExpression();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaField#getName()
+     * @see org.apache.felix.scrplugin.tags.JavaField#getName()
      */
     public String getName() {
         return this.field.getName();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaField#getTagByName(java.lang.String)
+     * @see org.apache.felix.scrplugin.tags.JavaField#getTagByName(java.lang.String)
      */
     public JavaTag getTagByName(String name) {
         final DocletTag tag = this.field.getTagByName(name);
@@ -65,7 +65,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaField#getType()
+     * @see org.apache.felix.scrplugin.tags.JavaField#getType()
      */
     public String getType() {
         return this.field.getType().getValue();
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaMethod.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaMethod.java
index 2c6f16c..eaf3565 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaMethod.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaMethod.java
@@ -34,14 +34,14 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#getName()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#getName()
      */
     public String getName() {
         return this.method.getName();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#getParameters()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#getParameters()
      */
     public JavaParameter[] getParameters() {
         final com.thoughtworks.qdox.model.JavaParameter[] params = this.method.getParameters();
@@ -56,21 +56,21 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#isConstructor()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#isConstructor()
      */
     public boolean isConstructor() {
         return this.method.isConstructor();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#isProtected()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#isProtected()
      */
     public boolean isProtected() {
         return this.method.isProtected();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaMethod#isPublic()
+     * @see org.apache.felix.scrplugin.tags.JavaMethod#isPublic()
      */
     public boolean isPublic() {
         return this.method.isPublic();
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaParameter.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaParameter.java
index 9603b6a..3ba6ccb 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaParameter.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaParameter.java
@@ -33,7 +33,7 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaParameter#getType()
+     * @see org.apache.felix.scrplugin.tags.JavaParameter#getType()
      */
     public String getType() {
         return this.parameter.getType().getValue();
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaTag.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaTag.java
index 144719e..a8046c5 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaTag.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/tags/qdox/QDoxJavaTag.java
@@ -49,49 +49,49 @@
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getName()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getName()
      */
     public String getName() {
         return this.docletTag.getName();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getNamedParameter(java.lang.String)
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getNamedParameter(java.lang.String)
      */
     public String getNamedParameter(String arg0) {
         return this.docletTag.getNamedParameter(arg0);
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getParameters()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getParameters()
      */
     public String[] getParameters() {
         return this.docletTag.getParameters();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getSourceLocation()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getSourceLocation()
      */
     public String getSourceLocation() {
         return this.docletTag.getContext().getSource().getURL() + ", line " + this.docletTag.getLineNumber();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getJavaClassDescription()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getJavaClassDescription()
      */
     public JavaClassDescription getJavaClassDescription() {
         return this.description;
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getNamedParameterMap()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getNamedParameterMap()
      */
     public Map getNamedParameterMap() {
         return this.docletTag.getNamedParameterMap();
     }
 
     /**
-     * @see org.apache.felix.sandbox.scrplugin.tags.JavaTag#getField()
+     * @see org.apache.felix.scrplugin.tags.JavaTag#getField()
      */
     public JavaField getField() {
         return this.field;
diff --git a/scrplugin/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java b/scrplugin/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java
index 538c2ea..af38c47 100644
--- a/scrplugin/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java
+++ b/scrplugin/src/main/java/org/apache/felix/scrplugin/xml/ComponentDescriptorIO.java
@@ -208,7 +208,7 @@
 
     /**
      * Write the xml for a {@link Interface}.
-     * @param interface
+     * @param interf
      * @param contentHandler
      * @throws SAXException
      */
