diff --git a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.java b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.java
index df2b63e..e490a78 100644
--- a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.java
+++ b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/PrimitiveComponentType.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
diff --git a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/composite/CompositeComponentType.java b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/composite/CompositeComponentType.java
index be3dcc6..dd43dd2 100644
--- a/ipojo/api/src/main/java/org/apache/felix/ipojo/api/composite/CompositeComponentType.java
+++ b/ipojo/api/src/main/java/org/apache/felix/ipojo/api/composite/CompositeComponentType.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
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
index 7cbe2c4..dfe9b40 100644
--- a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.java
+++ b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/DynamicMBeanImpl.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
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.felix.ipojo.handlers.jmx;
 
 import java.lang.reflect.InvocationTargetException;
@@ -76,7 +75,7 @@
     /**
      * The sequence number. Used to calculate unique id to notification.
      */
-    private int m_sequenceNumber = 0;
+    private int m_sequenceNumber;
 
     /**
      * Constructor.
@@ -269,7 +268,7 @@
         }
 
         // for each attribute, try to set it and add to the result list if
-        // successfull
+        // successful
         for (Iterator i = attributes.iterator(); i.hasNext();) {
             Attribute attr = (Attribute) i.next();
             try {
@@ -306,13 +305,13 @@
             Iterator < PropertyField > iterator = m_configMap.getProperties()
                 .iterator();
             while (iterator.hasNext()) {
-                PropertyField propertyField = (PropertyField) iterator.next();
+                PropertyField propertyField = iterator.next();
                 lAttributes.add(new MBeanAttributeInfo(propertyField.getName(),
                     propertyField.getType(), propertyField.getDescription(),
                     propertyField.isReadable(), propertyField.isWritable(),
                     false));
             }
-            dAttributes = (MBeanAttributeInfo[]) lAttributes
+            dAttributes = lAttributes
                 .toArray(new MBeanAttributeInfo[lAttributes.size()]);
         }
 
@@ -324,13 +323,13 @@
             Iterator < MethodField[] > iterator = m_configMap.getMethods()
                 .iterator();
             while (iterator.hasNext()) {
-                MethodField[] method = (MethodField[]) iterator.next();
+                MethodField[] method = iterator.next();
                 for (int i = 0; i < method.length; i++) {
                     lOperations.add(new MBeanOperationInfo(method[i].getName(),
                         method[i].getDescription(), method[i].getParams(),
                         method[i].getReturnType(), MBeanOperationInfo.UNKNOWN));
                 }
-                dOperations = (MBeanOperationInfo[]) lOperations
+                dOperations = lOperations
                     .toArray(new MBeanOperationInfo[lOperations.size()]);
             }
         }
@@ -343,11 +342,11 @@
             Iterator < NotificationField > iterator = m_configMap
                 .getNotifications().iterator();
             while (iterator.hasNext()) {
-                NotificationField notification = (NotificationField) iterator
+                NotificationField notification = iterator
                     .next();
                 lNotifications.add(notification.getNotificationInfo());
             }
-            dNotification = (MBeanNotificationInfo[]) lNotifications
+            dNotification = lNotifications
                 .toArray(new MBeanNotificationInfo[lNotifications.size()]);
         }
 
@@ -370,11 +369,11 @@
             Iterator < NotificationField > iterator = m_configMap
                 .getNotifications().iterator();
             while (iterator.hasNext()) {
-                NotificationField notification = (NotificationField) iterator
+                NotificationField notification = iterator
                     .next();
                 lNotifications.add(notification.getNotificationInfo());
             }
-            dNotification = (MBeanNotificationInfo[]) lNotifications
+            dNotification = lNotifications
                 .toArray(new MBeanNotificationInfo[lNotifications.size()]);
         }
         return dNotification;
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java
index 8893121..249b474 100644
--- a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java
+++ b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/MBeanHandler.java
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.felix.ipojo.handlers.jmx;
 
 import java.lang.management.ManagementFactory;
@@ -42,7 +41,7 @@
 /**
  * This class implements iPOJO Handler. it builds the dynamic MBean from
  * metadata.xml and exposes it to the MBean Server.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public class MBeanHandler extends PrimitiveHandler {
@@ -150,7 +149,7 @@
     /**
      * The flag used to inform if we use the MOSGi framework.
      */
-    private boolean m_usesMOSGi = false;
+    private boolean m_usesMOSGi;
     /**
      * The ObjectName used to register the MBean.
      */
@@ -158,7 +157,7 @@
     /**
      * The flag used to inform if the MBean is registered.
      */
-    private boolean m_registered = false;
+    private boolean m_registered;
     /**
      * The ObjectName specified in handler configuration. It can be null.
      */
@@ -167,7 +166,7 @@
      * The ObjectName without domain specified in handler configuration. It can be null.
      */
     private String m_objNameWODomainElt;
-    
+
     /**
      * The ObjectName domain specified in handler configuration. It can be null.
      */
@@ -195,7 +194,7 @@
 
     /**
      * Constructs the structure JmxConfigFieldMap and the Dynamic Mbean.
-     * 
+     *
      * @param metadata the component metadata
      * @param dict the instance configuration
      */
@@ -250,14 +249,14 @@
 
         // set property
         Element[] attributes = mbeans[0].getElements(JMX_PROPERTY_ELT, m_namespace);
-        
+
         if (attributes == null) {
             attributes = mbeans[0].getElements(JMX_PROPERTY_ELT);
             if (attributes != null) {
                 warn("The JMX property element should use the '" + m_namespace + "' namespace.");
             }
         }
-        
+
         // String[] fields = new String[attributes.length];
         if (attributes != null) {
             for (int i = 0; attributes != null && i < attributes.length; i++) {
@@ -305,14 +304,14 @@
 
         // set methods
         Element[] methods = mbeans[0].getElements(JMX_METHOD_ELT, m_namespace);
-        
+
         if (methods == null) {
             methods = mbeans[0].getElements(JMX_METHOD_ELT);
             if (methods != null) {
                 warn("The JMX method element should use the '" + m_namespace + "' namespace.");
             }
         }
-        
+
         for (int i = 0; methods != null && i < methods.length; i++) {
             String name = methods[i].getAttribute(JMX_NAME_ELT);
             if (name == null) {
@@ -395,7 +394,7 @@
 
     /**
      * Returns the object name of the exposed component.
-     * 
+     *
      * @return the object name of the exposed component.
      */
     private String getObjectNameString() {
@@ -423,13 +422,13 @@
         sb.append(name);
 
         info("Computed Objectname: " + sb.toString());
-        
+
         return sb.toString();
     }
 
     /**
      * Extracts the package name from of given type.
-     * 
+     *
      * @param className the type name.
      * @return the package name of the given type.
      */
@@ -470,7 +469,7 @@
 
     /**
      * Called when a POJO member is modified externally.
-     * 
+     *
      * @param pojo the modified POJO object
      * @param fieldName the name of the modified field
      * @param value the new value of the field
@@ -495,7 +494,7 @@
 
     /**
      * Called when a POJO member is read by the MBean.
-     * 
+     *
      * @param pojo the read POJO object.
      * @param fieldName the name of the modified field
      * @param value the old value of the field
@@ -516,7 +515,7 @@
 
     /**
      * Gets the type from a field name.
-     * 
+     *
      * @param fieldRequire the name of the required field
      * @param manipulation the metadata extracted from metadata.xml file
      * @return the type of the field or {@code null} if it wasn't found
@@ -534,7 +533,7 @@
 
     /**
      * Gets all the methods available which get this name.
-     * 
+     *
      * @param methodName the name of the required methods
      * @param manipulation the metadata extract from metadata.xml file
      * @param description the description which appears in JMX console
@@ -563,7 +562,7 @@
 
     /**
      * Gets the JMX handler description.
-     * 
+     *
      * @return the JMX handler description.
      * @see org.apache.felix.ipojo.Handler#getDescription()
      */
@@ -573,7 +572,7 @@
 
     /**
      * Returns the objectName used to register the MBean. If the MBean is not registered, return an empty string.
-     * 
+     *
      * @return the objectName used to register the MBean.
      * @see org.apache.felix.ipojo.Handler#getDescription()
      */
@@ -587,7 +586,7 @@
 
     /**
      * Returns true if the MBean is registered.
-     * 
+     *
      * @return true if the MBean is registered.
      */
     public boolean isRegistered() {
@@ -596,7 +595,7 @@
 
     /**
      * Returns true if the MBean must be registered thanks to white board pattern of MOSGi.
-     * 
+     *
      * @return {@code true} if the MBean must be registered thanks to white board pattern of MOSGi, false otherwise.
      */
     public boolean isUsesMOSGi() {
@@ -605,7 +604,7 @@
 
     /**
      * Returns true if the MOSGi framework is present on the OSGi platform.
-     * 
+     *
      * @return {@code true} if the MOSGi framework is present on the OSGi platform, false otherwise.
      */
     public boolean isMOSGiExists() {
diff --git a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java
index 38b0011..f7abc8a 100644
--- a/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java
+++ b/ipojo/handler/jmx/src/main/java/org/apache/felix/ipojo/handlers/jmx/PropertyField.java
@@ -21,7 +21,7 @@
 
 /**
  * This class build the notification description structure.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 public class PropertyField {
@@ -49,11 +49,11 @@
     /**
      * The name of the notification.
      */
-    private boolean m_notification = false;
+    private boolean m_notification;
 
     /**
      * Constructor.
-     * 
+     *
      * @param name the name of the properety
      * @param field the field which send a notification when it is modified
      * @param rights the rights of the attribute (ie: 'r' or 'w')
@@ -185,7 +185,7 @@
 
     /**
      * Is the rights is valid or not ? (ie = 'r' || 'w').
-     * 
+     *
      * @param rights string representing the rights
      * @return boolean : return {@code true} if rights = 'r' or 'w'
      */
