diff --git a/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java b/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java
index 7f9b22d..0bbea82 100644
--- a/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java
+++ b/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java
@@ -25,7 +25,7 @@
  * The <code>ConfigurationAdapter</code> TODO
  *
  * @author fmeschbe
- * @version $Rev:$, $Date:$
+ * @version $Rev: 527592 $, $Date$
  */
 public class ConfigurationAdapter implements Configuration
 {
@@ -42,7 +42,6 @@
 
 
     /**
-     * @return
      * @see org.apache.felix.cm.impl.ConfigurationImpl#getPid()
      */
     public String getPid()
@@ -53,7 +52,6 @@
 
 
     /**
-     * @return
      * @see org.apache.felix.cm.impl.ConfigurationImpl#getFactoryPid()
      */
     public String getFactoryPid()
@@ -64,7 +62,6 @@
 
 
     /**
-     * @return
      * @see org.apache.felix.cm.impl.ConfigurationImpl#getBundleLocation()
      */
     public String getBundleLocation()
@@ -111,7 +108,6 @@
 
 
     /**
-     * @return
      * @see org.apache.felix.cm.impl.ConfigurationImpl#getProperties()
      */
     public Dictionary getProperties()
@@ -133,7 +129,6 @@
 
 
     /**
-     * @return
      * @see org.apache.felix.cm.impl.ConfigurationImpl#hashCode()
      */
     public int hashCode()
@@ -144,7 +139,6 @@
 
     /**
      * @param obj
-     * @return
      * @see org.apache.felix.cm.impl.ConfigurationImpl#equals(java.lang.Object)
      */
     public boolean equals( Object obj )
@@ -154,7 +148,6 @@
 
 
     /**
-     * @return
      * @see org.apache.felix.cm.impl.ConfigurationImpl#toString()
      */
     public String toString()
@@ -164,7 +157,7 @@
 
     /**
      * Checks whether this configuration object has already been deleted.
-     * 
+     *
      * @throws IllegalStateException If this configuration object has been
      *      deleted.
      */
diff --git a/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java b/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
index 8e339a7..9b3b97c 100644
--- a/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
+++ b/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
@@ -71,7 +71,7 @@
      * The name of the bundle context property defining the location for the
      * configuration files (value is "felix.cm.dir").
      *
-     * @see #FilePersistenceManager(BundleContext)
+     * @see #start(BundleContext)
      */
     public static final String CM_CONFIG_DIR = "felix.cm.dir";
 
@@ -666,7 +666,7 @@
 
         // sort the plugins by their service.cmRanking
         SortedSet pluginSet = new TreeSet( cmRankComp );
-        for ( int i = 0; plugins != null && i < plugins.length; i++ )
+        for ( int i = 0; i < plugins.length; i++ )
         {
             pluginSet.add( plugins[i] );
         }
diff --git a/configadmin/src/main/java/org/apache/felix/cm/impl/PersistenceManagerProxy.java b/configadmin/src/main/java/org/apache/felix/cm/impl/PersistenceManagerProxy.java
index 24ee315..eac49d6 100644
--- a/configadmin/src/main/java/org/apache/felix/cm/impl/PersistenceManagerProxy.java
+++ b/configadmin/src/main/java/org/apache/felix/cm/impl/PersistenceManagerProxy.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -57,7 +57,6 @@
 
     /**
      * @param pid
-     * @return
      * @see org.apache.felix.cm.PersistenceManager#exists(java.lang.String)
      */
     public boolean exists( String pid )
@@ -67,7 +66,6 @@
 
 
     /**
-     * @return
      * @throws IOException
      * @see org.apache.felix.cm.PersistenceManager#getDictionaries()
      */
@@ -80,7 +78,6 @@
 
     /**
      * @param pid
-     * @return
      * @throws IOException
      * @see org.apache.felix.cm.PersistenceManager#load(java.lang.String)
      */
diff --git a/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java b/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java
index d265f9f..6794d5a 100644
--- a/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java
+++ b/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java
@@ -18,31 +18,22 @@
  */
 package org.apache.felix.dependencymanager;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
+import java.lang.reflect.*;
+import java.util.*;
 
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 
 /**
  * Service implementation.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public class ServiceImpl implements Service {
     private static final Class[] VOID = new Class[] {};
 	private static final ServiceRegistration NULL_REGISTRATION;
     private static final ServiceStateListener[] SERVICE_STATE_LISTENER_TYPE = new ServiceStateListener[] {};
-    
+
     private final BundleContext m_context;
 
     // configuration (static)
@@ -52,16 +43,16 @@
     private String m_callbackDestroy;
     private Object m_serviceName;
     private Object m_implementation;
-    
+
     // configuration (dynamic, but does not affect state)
     private Dictionary m_serviceProperties;
-    
+
     // configuration (dynamic, and affects state)
     private ArrayList m_dependencies = new ArrayList();
-    
+
     // runtime state (calculated from dependencies)
     private State m_state;
-    
+
     // runtime state (changes because of state changes)
     private Object m_serviceInstance;
     private ServiceRegistration m_registration;
@@ -71,16 +62,16 @@
 
     // work queue
     private final SerialExecutor m_executor = new SerialExecutor();
-    
+
     // instance factory
 	private Object m_instanceFactory;
 	private String m_instanceFactoryCreateMethod;
-	
+
 	// composition manager
 	private Object m_compositionManager;
 	private String m_compositionManagerGetMethod;
 	private Object m_compositionManagerInstance;
-    
+
     public ServiceImpl(BundleContext context) {
     	m_state = new State((List) m_dependencies.clone(), false);
         m_context = context;
@@ -90,7 +81,7 @@
         m_callbackDestroy = "destroy";
         m_implementation = null;
     }
-    
+
     private void calculateStateChanges(final State oldState, final State newState) {
     	if (oldState.isWaitingForRequired() && newState.isTrackingOptional()) {
         	m_executor.enqueue(new Runnable() {
@@ -131,7 +122,7 @@
     	}
     	m_executor.execute();
     }
-    
+
     public Service add(final Dependency dependency) {
     	State oldState, newState;
         synchronized (m_dependencies) {
@@ -171,15 +162,15 @@
             return (List) m_dependencies.clone();
         }
     }
-    
+
     public ServiceRegistration getServiceRegistration() {
         return m_registration;
     }
-    
+
     public Object getService() {
         return m_serviceInstance;
     }
-    
+
     public void dependencyAvailable(final Dependency dependency) {
     	State oldState, newState;
         synchronized (m_dependencies) {
@@ -212,7 +203,7 @@
         	m_executor.execute();
         }
     }
-    
+
     public void dependencyUnavailable(final Dependency dependency) {
     	State oldState, newState;
         synchronized (m_dependencies) {
@@ -279,7 +270,7 @@
 	    m_implementation = implementation;
 	    return this;
 	}
-	
+
 	public synchronized Service setFactory(Object factory, String createMethod) {
 	    ensureNotActive();
 		m_instanceFactory = factory;
@@ -290,14 +281,14 @@
 	public synchronized Service setFactory(String createMethod) {
 		return setFactory(null, createMethod);
 	}
-	
+
 	public synchronized Service setComposition(Object instance, String getMethod) {
 	    ensureNotActive();
 		m_compositionManager = instance;
 		m_compositionManagerGetMethod = getMethod;
 		return this;
 	}
-	
+
 	public synchronized Service setComposition(String getMethod) {
 		return setComposition(null, getMethod);
 	}
@@ -458,7 +449,7 @@
             }
         }
     }
-    
+
     private void startTrackingOptional(State state) {
         Iterator i = state.getDependencies().iterator();
         while (i.hasNext()) {
@@ -498,7 +489,7 @@
             }
         }
     }
-    
+
     private Object createInstance(Class clazz) throws SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException {
 		Constructor constructor = clazz.getConstructor(VOID);
 		constructor.setAccessible(true);
@@ -511,11 +502,11 @@
 	            // instantiate
 	            try {
 	            	m_serviceInstance = createInstance((Class) m_implementation);
-	            } 
+	            }
 	            catch (InstantiationException e) {
 	                // TODO handle this exception
 	                e.printStackTrace();
-	            } 
+	            }
 	            catch (IllegalAccessException e) {
 	                // TODO handle this exception
 	                e.printStackTrace();
@@ -534,11 +525,11 @@
 		        		if (m_instanceFactory instanceof Class) {
 		        			try {
 								factory = createInstance((Class) m_instanceFactory);
-							} 
+							}
 		        			catch (InstantiationException e) {
 								// TODO Auto-generated catch block
 								e.printStackTrace();
-							} 
+							}
 		        			catch (IllegalAccessException e) {
 								// TODO Auto-generated catch block
 								e.printStackTrace();
@@ -555,7 +546,7 @@
 		        		}
 		        	}
 		        	else {
-		        		factory = null; // TODO!!!! where does the factory come from if not explicitly defined
+		        		// TODO!!!! where does the factory come from if not explicitly defined
 		        		// could be the activator?
 		        		// could be ???
 		        	}
@@ -565,7 +556,7 @@
 		        	try {
 						Method m = factory.getClass().getDeclaredMethod(m_instanceFactoryCreateMethod, null);
 						m_serviceInstance = m.invoke(factory, null);
-					} 
+					}
 		        	catch (Exception e) {
 						// TODO Auto-generated catch block
 						e.printStackTrace();
@@ -579,9 +570,9 @@
 	        // configure the bundle context
 	        configureImplementation(BundleContext.class, m_context);
 	        configureImplementation(ServiceRegistration.class, NULL_REGISTRATION);
-    	}        
+    	}
     }
-    
+
     private void configureService(State state) {
         // configure all services (the optional dependencies might be configured
         // as null objects but that's what we want at this point)
@@ -592,7 +583,7 @@
         unconfigureServices(state);
         m_serviceInstance = null;
     }
-    
+
     private void registerService() {
         if (m_serviceName != null) {
             ServiceRegistrationImpl wrapper = new ServiceRegistrationImpl();
@@ -600,10 +591,10 @@
             configureImplementation(ServiceRegistration.class, wrapper);
             // service name can either be a string or an array of strings
             ServiceRegistration registration;
-            
+
             // determine service properties
             Dictionary properties = calculateServiceProperties();
-            
+
             // register the service
             try {
                 if (m_serviceName instanceof String) {
@@ -653,14 +644,14 @@
 			}
 		}
 	}
-    
+
     private void unregisterService() {
         if (m_serviceName != null) {
             m_registration.unregister();
             configureImplementation(ServiceRegistration.class, NULL_REGISTRATION);
         }
     }
-    
+
     private void updateInstance(Dependency dependency) {
         if (dependency instanceof ServiceDependency) {
             ServiceDependency sd = (ServiceDependency) dependency;
@@ -679,12 +670,12 @@
         	}
         }
     }
-    
+
     /**
      * Configure a field in the service implementation. The service implementation
      * is searched for fields that have the same type as the class that was specified
      * and for each of these fields, the specified instance is filled in.
-     * 
+     *
      * @param clazz the class to search for
      * @param instance the instance to fill in
      */
@@ -702,7 +693,7 @@
 					Method m = m_compositionManagerInstance.getClass().getDeclaredMethod(m_compositionManagerGetMethod, null);
             		m.setAccessible(true);
 					instances = (Object[]) m.invoke(m_compositionManager, null);
-				} 
+				}
 	    		catch (Exception e) {
 					// TODO Auto-generated catch block
 					e.printStackTrace();
@@ -735,7 +726,7 @@
 		                            " by classloader " + clazz.getClassLoader() +
 		                            " of type " + serviceClazz.getName() +
 		                            " by classloader " + serviceClazz.getClassLoader() +
-		                            " on " + serviceInstance + 
+		                            " on " + serviceInstance +
 		                            " by classloader " + serviceInstance.getClass().getClassLoader() +
 		                            "\nDumping stack:"
 		                        );
@@ -776,7 +767,7 @@
             }
         }
     }
-    
+
     private void unconfigureServices(State state) {
         Iterator i = state.getDependencies().iterator();
         while (i.hasNext()) {
@@ -807,8 +798,8 @@
     	}
         return (state.isTrackingOptional());
     }
-    
+
     static {
-        NULL_REGISTRATION = (ServiceRegistration) Proxy.newProxyInstance(ServiceImpl.class.getClassLoader(), new Class[] {ServiceRegistration.class}, new DefaultNullObject()); 
+        NULL_REGISTRATION = (ServiceRegistration) Proxy.newProxyInstance(ServiceImpl.class.getClassLoader(), new Class[] {ServiceRegistration.class}, new DefaultNullObject());
     }
 }
diff --git a/metatype/src/main/java/org/apache/felix/metatype/AD.java b/metatype/src/main/java/org/apache/felix/metatype/AD.java
index 5ec7912..09f2058 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/AD.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/AD.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -19,10 +19,7 @@
 package org.apache.felix.metatype;
 
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import org.apache.felix.metatype.internal.Activator;
 import org.osgi.service.log.LogService;
@@ -32,7 +29,7 @@
 /**
  * The <code>AD</code> class represents the <code>AD</code> element of the
  * meta type descriptor.
- * 
+ *
  * @author fmeschbe
  */
 public class AD
@@ -157,11 +154,11 @@
      *      localized is returned. If any of the minimum, maximum or option
      *      values is <code>null</code>, the respective value is not checked.
      * </dl>
-     *  
+     *
      * @param valueString The string representation of the value to validate.
-     * 
+     *
      * @return As explained above.
-     * 
+     *
      * @see #VALIDATE_GREATER_THAN_MAXIMUM
      * @see #VALIDATE_LESS_THAN_MINIMUM
      * @see #VALIDATE_NOT_A_VALID_OPTION
@@ -250,7 +247,7 @@
 
 
     /**
-     * @param type the type to set
+     * @param typeString the type to set
      */
     public void setType( String typeString )
     {
@@ -268,7 +265,7 @@
 
 
     /**
-     * @param optionLabels the optionLabels to set
+     * @param options the options to set
      */
     public void setOptions( Map options )
     {
@@ -464,14 +461,14 @@
 
         return null;
     }
-    
+
     private static class ComparableBoolean implements Comparable {
         private boolean value;
 
         ComparableBoolean(String boolValue) {
             value = Boolean.valueOf(boolValue).booleanValue();
         }
-        
+
         public int compareTo(Object obj) {
             ComparableBoolean cb = (ComparableBoolean) obj;
             return (cb.value == value ? 0 : (value ? 1 : -1));
diff --git a/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java b/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
index 251563d..d73318e 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
@@ -378,10 +378,7 @@
                     eventType = this.parser.getEventType();
                     continue;
                 }
-                else
-                {
-                    this.ignoreElement();
-                }
+                this.ignoreElement();
             }
             else if ( eventType == XmlPullParser.END_TAG )
             {
diff --git a/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java b/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
index 291fa2b..b10b057 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -21,15 +21,10 @@
 
 import java.io.PrintStream;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Dictionary;
-import java.util.Hashtable;
+import java.util.*;
 
 import org.apache.felix.metatype.internal.l10n.BundleResources;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
+import org.osgi.framework.*;
 import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.MetaTypeService;
 import org.osgi.util.tracker.ServiceTracker;
@@ -41,7 +36,7 @@
  * <code>LogService</code> is available, that service is used, otherwise
  * logging goes to standard output or standard error (in case of level ERROR
  * messages).
- * 
+ *
  * @author fmeschbe
  */
 public class Activator implements BundleActivator
@@ -66,7 +61,7 @@
     /**
      * The <code>LogService</code> used to log messages. If a log service is
      * not available in the framework, this field is <code>null</code>.
-     * 
+     *
      * @see #start(BundleContext)
      * @see #serviceChanged(ServiceEvent)
      */
@@ -84,12 +79,12 @@
      * Starts this bundle doing the following:
      * <ol>
      * <li>Register as listener for service events concerning the
-     *      <code>LogService</code> (see {@link #serviceChanged(ServiceEvent)}
+     *      <code>LogService</code>
      * <li>Try to get the <code>LogService</code>
      * <li>Registers the <code>MetaTypeService</code> implementation provided
      *      by this bundle.
      * </ol>
-     * 
+     *
      * @param context The <code>BundleContext</code> of this activator's bundle
      */
     public void start( BundleContext context )
@@ -112,9 +107,9 @@
      * Stops this bundle by just unregistering as a service listener.
      * <p>
      * The framework will take care of ungetting the <code>LogService</code> and
-     * unregistering the <code>MetaTypeService</code> registered by the 
+     * unregistering the <code>MetaTypeService</code> registered by the
      * {@link #start(BundleContext)} method.
-     * 
+     *
      * @param context The <code>BundleContext</code> of this activator's bundle
      */
     public void stop( BundleContext context )
diff --git a/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedAttributeDefinition.java b/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedAttributeDefinition.java
index b5ce0d8..b65bf13 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedAttributeDefinition.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedAttributeDefinition.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -30,7 +30,7 @@
  * calls to the underlying {@link AD} localizing the results of the following
  * methods: {@link #getName()}, {@link #getDescription()},
  * {@link #getOptionLabels()}, and {@link #validate(String)}.
- * 
+ *
  * @author fmeschbe
  */
 class LocalizedAttributeDefinition extends LocalizedBase implements AttributeDefinition
@@ -41,7 +41,7 @@
 
     /**
      * Creates and instance of this localizing facade.
-     * 
+     *
      * @param ad The {@link AD} to which calls are delegated.
      * @param resources The {@link Resources} used to localize return values of
      * localizable methods.
@@ -54,7 +54,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getCardinality()
      */
     public int getCardinality()
@@ -64,7 +63,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getDefaultValue()
      */
     public String[] getDefaultValue()
@@ -74,7 +72,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getDescription()
      */
     public String getDescription()
@@ -84,7 +81,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getID()
      */
     public String getID()
@@ -94,7 +90,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getName()
      */
     public String getName()
@@ -104,7 +99,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getOptionLabels()
      */
     public String[] getOptionLabels()
@@ -114,7 +108,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getOptionValues()
      */
     public String[] getOptionValues()
@@ -124,7 +117,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#getType()
      */
     public int getType()
@@ -135,7 +127,6 @@
 
     /**
      * @param value
-     * @return
      * @see org.osgi.service.metatype.AttributeDefinition#validate(java.lang.String)
      */
     public String validate( String value )
diff --git a/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedObjectClassDefinition.java b/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedObjectClassDefinition.java
index 3523761..18e28c3 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedObjectClassDefinition.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/internal/LocalizedObjectClassDefinition.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -22,11 +22,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
+import java.util.*;
 
 import org.apache.felix.metatype.AD;
 import org.apache.felix.metatype.OCD;
@@ -42,7 +38,7 @@
  * calls to the underlying {@link OCD} localizing the results of the following
  * methods: {@link #getName()}, {@link #getDescription()}, and
  * {@link #getIcon(int)}.
- * 
+ *
  * @author fmeschbe
  */
 public class LocalizedObjectClassDefinition extends LocalizedBase implements ObjectClassDefinition
@@ -55,7 +51,7 @@
 
     /**
      * Creates and instance of this localizing facade.
-     * 
+     *
      * @param bundle The <code>Bundle</code> providing this object class
      *            definition.
      * @param ocd The {@link OCD} to which calls are delegated.
@@ -72,7 +68,6 @@
 
     /**
      * @param filter
-     * @return
      * @see org.osgi.service.metatype.ObjectClassDefinition#getAttributeDefinitions(int)
      */
     public AttributeDefinition[] getAttributeDefinitions( int filter )
@@ -109,7 +104,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.ObjectClassDefinition#getDescription()
      */
     public String getDescription()
@@ -120,7 +114,6 @@
 
     /**
      * @param size
-     * @return
      * @throws IOException
      * @see org.osgi.service.metatype.ObjectClassDefinition#getIcon(int)
      */
@@ -174,7 +167,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.ObjectClassDefinition#getID()
      */
     public String getID()
@@ -184,7 +176,6 @@
 
 
     /**
-     * @return
      * @see org.osgi.service.metatype.ObjectClassDefinition#getName()
      */
     public String getName()
diff --git a/metatype/src/main/java/org/apache/felix/metatype/internal/ServiceMetaTypeInformation.java b/metatype/src/main/java/org/apache/felix/metatype/internal/ServiceMetaTypeInformation.java
index 30a353e..c3e4321 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/internal/ServiceMetaTypeInformation.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/internal/ServiceMetaTypeInformation.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -19,24 +19,17 @@
 package org.apache.felix.metatype.internal;
 
 
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceEvent;
-import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
+import org.osgi.framework.*;
 import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.MetaTypeProvider;
 
 
 /**
  * The <code>ServiceMetaTypeInformation</code> extends the
- * {@link CompoundMetaTypeInformation} adding support to register and unregister
+ * {@link MetaTypeInformationImpl} adding support to register and unregister
  * <code>ManagedService</code>s and <code>ManagedServiceFactory</code>s
  * also implementing the <code>MetaTypeProvider</code> interface.
- * 
+ *
  * @author fmeschbe
  */
 public class ServiceMetaTypeInformation extends MetaTypeInformationImpl implements ServiceListener
@@ -62,7 +55,7 @@
     /**
      * Creates an instance of this class handling services of the given
      * <code>bundle</code>.
-     * 
+     *
      * @param bundleContext The <code>BundleContext</code> used to get and
      *            unget services.
      * @param bundle The <code>Bundle</code> whose services are handled by
@@ -118,7 +111,7 @@
      * Handles service registration and unregistration events ignoring all
      * services not belonging to the <code>Bundle</code> which is handled by
      * this instance.
-     * 
+     *
      * @param event The <code>ServiceEvent</code>
      */
     public void serviceChanged( ServiceEvent event )
@@ -149,7 +142,7 @@
      * <p>
      * If the service is registered, this bundle keeps a reference, which is
      * ungot when the service is unregistered or this bundle is stopped.
-     * 
+     *
      * @param serviceRef The <code>ServiceReference</code> describing the
      *            service to be checked and handled.
      */
@@ -203,7 +196,7 @@
      * <p>
      * If the service is actually unregistered the reference retrieved by the
      * registration method is ungotten.
-     * 
+     *
      * @param serviceRef The <code>ServiceReference</code> describing the
      *            service to be unregistered.
      */
