diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/CheatPropertyDescriptor.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/CheatPropertyDescriptor.java
index 3f9002d..393415d 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/CheatPropertyDescriptor.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/CheatPropertyDescriptor.java
@@ -161,40 +161,62 @@
     public boolean equals( Object obj )
     {
         if ( this == obj )
+        {
             return true;
+        }
         if ( obj == null )
+        {
             return false;
+        }
         if ( getClass() != obj.getClass() )
+        {
             return false;
+        }
         CheatPropertyDescriptor other = (CheatPropertyDescriptor) obj;
         if ( declaringCanonicalClassname == null )
         {
             if ( other.declaringCanonicalClassname != null )
+            {
                 return false;
+            }
         }
         else if ( !declaringCanonicalClassname.equals( other.declaringCanonicalClassname ) )
+        {
             return false;
+        }
         if ( internalSignature == null )
         {
             if ( other.internalSignature != null )
+            {
                 return false;
+            }
         }
         else if ( !internalSignature.equals( other.internalSignature ) )
+        {
             return false;
+        }
         if ( name == null )
         {
             if ( other.name != null )
+            {
                 return false;
+            }
         }
         else if ( !name.equals( other.name ) )
+        {
             return false;
+        }
         if ( propertyName == null )
         {
             if ( other.propertyName != null )
+            {
                 return false;
+            }
         }
         else if ( !propertyName.equals( other.propertyName ) )
+        {
             return false;
+        }
         return true;
     }
 
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinition.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinition.java
index cb078bc..ec322fe 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinition.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinition.java
@@ -115,25 +115,41 @@
     public boolean equals( Object obj )
     {
         if ( this == obj )
+        {
             return true;
+        }
         if ( obj == null )
+        {
             return false;
+        }
         if ( getClass() != obj.getClass() )
+        {
             return false;
+        }
         InternalClassDefinition other = (InternalClassDefinition) obj;
         if ( canonicalName == null )
         {
             if ( other.canonicalName != null )
+            {
                 return false;
+            }
         }
         else if ( !canonicalName.equals( other.canonicalName ) )
+        {
             return false;
+        }
         if ( !Arrays.equals( checksum, other.checksum ) )
+        {
             return false;
+        }
         if ( id != other.id )
+        {
             return false;
+        }
         if ( serialVersionUID != other.serialVersionUID )
+        {
             return false;
+        }
         return true;
     }
 
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java
index ac12eca..bb4aa47 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java
@@ -43,7 +43,7 @@
 
     private final ClassDefinition[] classDefinitions;
 
-    //private final LongObjectMap<ClassDefinition> classDefinitionsMappings;
+    // private final LongObjectMap<ClassDefinition> classDefinitionsMappings;
     private final FastLongMap<ClassDefinition> classDefinitionsMappings;
 
     // Serialization
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDescriptor.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDescriptor.java
index e9cfd17..7800feb 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDescriptor.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDescriptor.java
@@ -111,19 +111,29 @@
     public boolean equals( Object obj )
     {
         if ( this == obj )
+        {
             return true;
+        }
         if ( obj == null )
+        {
             return false;
+        }
         if ( getClass() != obj.getClass() )
+        {
             return false;
+        }
         InternalClassDescriptor other = (InternalClassDescriptor) obj;
         if ( type == null )
         {
             if ( other.type != null )
+            {
                 return false;
+            }
         }
         else if ( !type.equals( other.type ) )
+        {
             return false;
+        }
         return true;
     }
 
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
index 01573ea..8b30996 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
@@ -19,13 +19,9 @@
 package org.apache.directmemory.lightning.internal;
 
 import java.lang.reflect.Type;
-import java.util.Collections;
-import java.util.Map;
-
 import org.apache.directmemory.lightning.Marshaller;
 import org.apache.directmemory.lightning.MarshallerContext;
 import org.apache.directmemory.lightning.internal.util.FastIntMap;
-import org.apache.directmemory.lightning.internal.util.FastLongMap;
 
 public class InternalMarshallerContext
     implements MarshallerContext
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java
index e4fedd8..dded042 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java
@@ -21,8 +21,6 @@
 import java.lang.reflect.Type;
 import java.util.IdentityHashMap;
 import java.util.Map;
-import java.util.Map.Entry;
-
 import org.apache.directmemory.lightning.Marshaller;
 import org.apache.directmemory.lightning.MarshallerContext;
 import org.apache.directmemory.lightning.MarshallerStrategy;
@@ -31,7 +29,6 @@
 import org.apache.directmemory.lightning.TypeBindableMarshaller;
 import org.apache.directmemory.lightning.instantiator.ObjectInstantiatorFactory;
 import org.apache.directmemory.lightning.internal.util.FastIntMap;
-import org.apache.directmemory.lightning.internal.util.FastLongMap;
 import org.apache.directmemory.lightning.internal.util.TypeUtil;
 import org.apache.directmemory.lightning.metadata.ClassDefinitionContainer;
 import org.apache.directmemory.lightning.metadata.ValueNullableEvaluator;
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/beans/InternalPropertyDescriptor.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/beans/InternalPropertyDescriptor.java
index 83e0ceb..5faa787 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/beans/InternalPropertyDescriptor.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/beans/InternalPropertyDescriptor.java
@@ -143,56 +143,88 @@
     public boolean equals( Object obj )
     {
         if ( this == obj )
+        {
             return true;
+        }
         if ( obj == null )
+        {
             return false;
+        }
         if ( getClass() != obj.getClass() )
+        {
             return false;
+        }
         InternalPropertyDescriptor other = (InternalPropertyDescriptor) obj;
         if ( !Arrays.equals( annotations, other.annotations ) )
+        {
             return false;
+        }
         if ( declaringCanonicalClassname == null )
         {
             if ( other.declaringCanonicalClassname != null )
+            {
                 return false;
+            }
         }
         else if ( !declaringCanonicalClassname.equals( other.declaringCanonicalClassname ) )
+        {
             return false;
+        }
         if ( declaringClass == null )
         {
             if ( other.declaringClass != null )
+            {
                 return false;
+            }
         }
         else if ( !declaringClass.equals( other.declaringClass ) )
+        {
             return false;
+        }
         if ( definedClass == null )
         {
             if ( other.definedClass != null )
+            {
                 return false;
+            }
         }
         else if ( !definedClass.equals( other.definedClass ) )
+        {
             return false;
+        }
         if ( internalSignature == null )
         {
             if ( other.internalSignature != null )
+            {
                 return false;
+            }
         }
         else if ( !internalSignature.equals( other.internalSignature ) )
+        {
             return false;
+        }
         if ( name == null )
         {
             if ( other.name != null )
+            {
                 return false;
+            }
         }
         else if ( !name.equals( other.name ) )
+        {
             return false;
+        }
         if ( propertyName == null )
         {
             if ( other.propertyName != null )
+            {
                 return false;
+            }
         }
         else if ( !propertyName.equals( other.propertyName ) )
+        {
             return false;
+        }
         return true;
     }
 
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/instantiator/sun/SunUnsafeAllocateInstanceInstantiator.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/instantiator/sun/SunUnsafeAllocateInstanceInstantiator.java
index 21bbd4a..1e8489e 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/instantiator/sun/SunUnsafeAllocateInstanceInstantiator.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/instantiator/sun/SunUnsafeAllocateInstanceInstantiator.java
@@ -41,7 +41,9 @@
         try
         {
             if ( UNSAFE != null )
+            {
                 return UNSAFE.allocateInstance( type );
+            }
         }
         catch ( Exception e )
         {
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshaller.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshaller.java
index 2e1bceb..3052ea4 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshaller.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshaller.java
@@ -181,7 +181,9 @@
     private void ensureMarshallerInitialized( SerializationContext serializationContext )
     {
         if ( listTypeMarshaller != null )
+        {
             return;
+        }
 
         listTypeMarshaller = serializationContext.findMarshaller( listType );
     }
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshaller.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshaller.java
index 9aca41b..06df31b 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshaller.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshaller.java
@@ -238,7 +238,9 @@
     private void ensureMarshallersInitialized( SerializationContext serializationContext )
     {
         if ( mapKeyTypeMarshaller != null && mapValueTypeMarshaller != null )
+        {
             return;
+        }
 
         mapKeyTypeMarshaller = serializationContext.findMarshaller( mapKeyType );
         mapValueTypeMarshaller = serializationContext.findMarshaller( mapValueType );
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshaller.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshaller.java
index 1ee1880..5188d02 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshaller.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshaller.java
@@ -176,7 +176,9 @@
     private void ensureMarshallerInitialized( SerializationContext serializationContext )
     {
         if ( setTypeMarshaller != null )
+        {
             return;
+        }
 
         setTypeMarshaller = serializationContext.findMarshaller( setType );
     }
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/ClassUtil.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/ClassUtil.java
index 268460c..2a956c9 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/ClassUtil.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/ClassUtil.java
@@ -407,25 +407,41 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             JavaBuildInTypeClassDefinition other = (JavaBuildInTypeClassDefinition) obj;
             if ( canonicalName == null )
             {
                 if ( other.canonicalName != null )
+                {
                     return false;
+                }
             }
             else if ( !canonicalName.equals( other.canonicalName ) )
+            {
                 return false;
+            }
             if ( !Arrays.equals( checksum, other.checksum ) )
+            {
                 return false;
+            }
             if ( id != other.id )
+            {
                 return false;
+            }
             if ( serialVersionUID != other.serialVersionUID )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java
index a9f9ab3..95148c4 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java
@@ -45,14 +45,22 @@
     public FastIntMap( int initialCapacity, float loadFactor )
     {
         if ( initialCapacity > 1 << 30 )
+        {
             throw new IllegalArgumentException( "initialCapacity is too large." );
+        }
         if ( initialCapacity < 0 )
+        {
             throw new IllegalArgumentException( "initialCapacity must be greater than zero." );
+        }
         if ( loadFactor <= 0 )
+        {
             throw new IllegalArgumentException( "initialCapacity must be greater than zero." );
+        }
         capacity = 1;
         while ( capacity < initialCapacity )
+        {
             capacity <<= 1;
+        }
         this.threshold = (int) ( capacity * loadFactor );
         this.table = new Entry[capacity];
         this.mask = capacity - 1;
@@ -77,7 +85,9 @@
         for ( Entry<V> e = table[index]; e != null; e = e.next )
         {
             if ( e.key != key )
+            {
                 continue;
+            }
             V oldValue = e.value;
             e.value = value;
             return oldValue;
@@ -86,7 +96,9 @@
         table[index] = new Entry<V>( key, value, table[index] );
 
         if ( size++ >= threshold )
+        {
             rehash( table );
+        }
 
         return null;
     }
@@ -102,7 +114,9 @@
         {
             Entry<V> e = table[i];
             if ( e == null )
+            {
                 continue;
+            }
             do
             {
                 final Entry<V> next = e.next;
@@ -124,8 +138,12 @@
     {
         final int index = index( key );
         for ( Entry<V> e = table[index]; e != null; e = e.next )
+        {
             if ( e.key == key )
+            {
                 return e.value;
+            }
+        }
         return null;
     }
 
@@ -133,9 +151,15 @@
     {
         final Entry<V>[] table = this.table;
         for ( int i = table.length - 1; i >= 0; i-- )
+        {
             for ( Entry<V> e = table[i]; e != null; e = e.next )
+            {
                 if ( e.value.equals( value ) )
+                {
                     return true;
+                }
+            }
+        }
         return false;
     }
 
@@ -143,8 +167,12 @@
     {
         final int index = index( key );
         for ( Entry<V> e = table[index]; e != null; e = e.next )
+        {
             if ( e.key == key )
+            {
                 return true;
+            }
+        }
         return false;
     }
 
@@ -161,9 +189,13 @@
             {
                 size--;
                 if ( prev == e )
+                {
                     table[index] = next;
+                }
                 else
+                {
                     prev.next = next;
+                }
                 return e.value;
             }
             prev = e;
@@ -186,10 +218,13 @@
     {
         final Entry<V>[] table = this.table;
         for ( int index = table.length - 1; index >= 0; index-- )
+        {
             table[index] = null;
+        }
         size = 0;
     }
 
+    @Override
     public EntryIterator iterator()
     {
         return new EntryIterator();
@@ -215,19 +250,27 @@
             final Entry<V>[] table = FastIntMap.this.table;
             int i;
             for ( i = table.length - 1; i >= 0; i-- )
+            {
                 if ( table[i] != null )
+                {
                     break;
+                }
+            }
             nextIndex = i;
         }
 
+        @Override
         public boolean hasNext()
         {
             if ( nextIndex >= 0 )
+            {
                 return true;
+            }
             Entry e = current;
             return e != null && e.next != null;
         }
 
+        @Override
         public Entry<V> next()
         {
             // Next entry in current bucket.
@@ -246,12 +289,17 @@
             int i = nextIndex;
             e = current = table[i];
             while ( --i >= 0 )
+            {
                 if ( table[i] != null )
+                {
                     break;
+                }
+            }
             nextIndex = i;
             return e;
         }
 
+        @Override
         public void remove()
         {
             FastIntMap.this.remove( current.key );
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java
index 382ce84..2874772 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java
@@ -49,14 +49,22 @@
     public FastLongMap( int initialCapacity, float loadFactor )
     {
         if ( initialCapacity > 1 << 30 )
+        {
             throw new IllegalArgumentException( "initialCapacity is too large." );
+        }
         if ( initialCapacity < 0 )
+        {
             throw new IllegalArgumentException( "initialCapacity must be greater than zero." );
+        }
         if ( loadFactor <= 0 )
+        {
             throw new IllegalArgumentException( "initialCapacity must be greater than zero." );
+        }
         capacity = 1;
         while ( capacity < initialCapacity )
+        {
             capacity <<= 1;
+        }
         this.threshold = (int) ( capacity * loadFactor );
         this.table = new Entry[capacity];
         this.mask = capacity - 1;
@@ -82,7 +90,9 @@
         for ( Entry<V> e = table[index]; e != null; e = e.next )
         {
             if ( e.key != key )
+            {
                 continue;
+            }
             V oldValue = e.value;
             e.value = value;
             return oldValue;
@@ -91,7 +101,9 @@
         table[index] = new Entry<V>( key, value, table[index] );
 
         if ( size++ >= threshold )
+        {
             rehash( table );
+        }
 
         return null;
     }
@@ -107,7 +119,9 @@
         {
             Entry<V> e = table[i];
             if ( e == null )
+            {
                 continue;
+            }
             do
             {
                 final Entry<V> next = e.next;
@@ -129,8 +143,12 @@
     {
         final int index = index( key );
         for ( Entry<V> e = table[index]; e != null; e = e.next )
+        {
             if ( e.key == key )
+            {
                 return e.value;
+            }
+        }
         return null;
     }
 
@@ -138,9 +156,15 @@
     {
         final Entry<V>[] table = this.table;
         for ( int i = table.length - 1; i >= 0; i-- )
+        {
             for ( Entry<V> e = table[i]; e != null; e = e.next )
+            {
                 if ( e.value.equals( value ) )
+                {
                     return true;
+                }
+            }
+        }
         return false;
     }
 
@@ -148,8 +172,12 @@
     {
         final int index = index( key );
         for ( Entry<V> e = table[index]; e != null; e = e.next )
+        {
             if ( e.key == key )
+            {
                 return true;
+            }
+        }
         return false;
     }
 
@@ -166,9 +194,13 @@
             {
                 size--;
                 if ( prev == e )
+                {
                     table[index] = next;
+                }
                 else
+                {
                     prev.next = next;
+                }
                 return e.value;
             }
             prev = e;
@@ -191,10 +223,13 @@
     {
         final Entry<V>[] table = this.table;
         for ( int index = table.length - 1; index >= 0; index-- )
+        {
             table[index] = null;
+        }
         size = 0;
     }
 
+    @Override
     public EntryIterator iterator()
     {
         return new EntryIterator();
@@ -220,19 +255,27 @@
             final Entry<V>[] table = FastLongMap.this.table;
             int i;
             for ( i = table.length - 1; i >= 0; i-- )
+            {
                 if ( table[i] != null )
+                {
                     break;
+                }
+            }
             nextIndex = i;
         }
 
+        @Override
         public boolean hasNext()
         {
             if ( nextIndex >= 0 )
+            {
                 return true;
+            }
             Entry e = current;
             return e != null && e.next != null;
         }
 
+        @Override
         public Entry<V> next()
         {
             // Next entry in current bucket.
@@ -251,12 +294,17 @@
             int i = nextIndex;
             e = current = table[i];
             while ( --i >= 0 )
+            {
                 if ( table[i] != null )
+                {
                     break;
+                }
+            }
             nextIndex = i;
             return e;
         }
 
+        @Override
         public void remove()
         {
             FastLongMap.this.remove( current.key );
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/StringUtil.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/StringUtil.java
index 142862a..f40cd60 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/StringUtil.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/StringUtil.java
@@ -28,10 +28,14 @@
     public static String toLowerCamelCase( String value )
     {
         if ( value == null )
+        {
             return null;
+        }
 
         if ( value.length() == 0 )
+        {
             return value;
+        }
 
         return toCamelCase( value );
     }
@@ -52,16 +56,24 @@
         {
             i = ignoreWhitespace( characters, i );
             if ( i == -1 )
+            {
                 break;
+            }
 
             if ( camelCase.length() == 0 )
+            {
                 camelCase.append( Character.toLowerCase( characters[i] ) );
+            }
             else
+            {
                 camelCase.append( Character.toUpperCase( characters[i] ) );
+            }
 
             int nextWhitespace = nextWhitespace( characters, i );
             if ( nextWhitespace == -1 )
+            {
                 nextWhitespace = characters.length;
+            }
 
             camelCase.append( value.substring( i + 1, nextWhitespace ) );
             i = nextWhitespace;
@@ -76,7 +88,9 @@
         {
             char c = characters[i];
             if ( !Character.isWhitespace( c ) && '-' != c && '_' != c )
+            {
                 return i;
+            }
         }
         return -1;
     }
@@ -87,7 +101,9 @@
         {
             char c = characters[i];
             if ( Character.isWhitespace( c ) || '-' == c || '_' == c )
+            {
                 return i;
+            }
         }
         return -1;
     }
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
index 44124a1..4788305 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
@@ -235,16 +235,22 @@
                         // Valid surrogate pair
                     }
                     else
+                    {
                         // Unmatched high surrogate
                         return false;
+                    }
                 }
                 else
+                {
                     // Unmatched high surrogate
                     return false;
+                }
             }
             else if ( ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END )
+            {
                 // Unmatched low surrogate
                 return false;
+            }
         }
 
         return true;
@@ -266,14 +272,20 @@
                         // Valid surrogate pair
                     }
                     else
+                    {
                         return false;
+                    }
                 }
                 else
+                {
                     return false;
+                }
             }
             else if ( ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END )
+            {
                 // Unmatched low surrogate
                 return false;
+            }
         }
 
         return true;
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/AbstractLightningBenchmark.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/AbstractLightningBenchmark.java
index 3a05a24..7456f79 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/AbstractLightningBenchmark.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/AbstractLightningBenchmark.java
@@ -244,37 +244,59 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Foo other = (Foo) obj;
             if ( enumValue != other.enumValue )
+            {
                 return false;
+            }
             if ( first == null )
             {
                 if ( other.first != null )
+                {
                     return false;
+                }
             }
             else if ( !first.equals( other.first ) )
+            {
                 return false;
+            }
             if ( second == null )
             {
                 if ( other.second != null )
+                {
                     return false;
+                }
             }
             else if ( !second.equals( other.second ) )
+            {
                 return false;
+            }
             if ( someOther != other.someOther )
+            {
                 return false;
+            }
             if ( value == null )
             {
                 if ( other.value != null )
+                {
                     return false;
+                }
             }
             else if ( !value.equals( other.value ) )
+            {
                 return false;
+            }
             return true;
         }
     }
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/ComplexClassHierarchyTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/ComplexClassHierarchyTestCase.java
index ba962f5..058b42e 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/ComplexClassHierarchyTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/ComplexClassHierarchyTestCase.java
@@ -230,21 +230,33 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Foo other = (Foo) obj;
             if ( id != other.id )
+            {
                 return false;
+            }
             if ( name == null )
             {
                 if ( other.name != null )
+                {
                     return false;
+                }
             }
             else if ( !name.equals( other.name ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -298,21 +310,33 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Complex other = (Complex) obj;
             if ( bar != other.bar )
+            {
                 return false;
+            }
             if ( foo == null )
             {
                 if ( other.foo != null )
+                {
                     return false;
+                }
             }
             else if ( !foo.equals( other.foo ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/CustomBenchmark.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/CustomBenchmark.java
index 8aa2926..90e3189 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/CustomBenchmark.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/CustomBenchmark.java
@@ -434,37 +434,59 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Foo other = (Foo) obj;
             if ( enumValue != other.enumValue )
+            {
                 return false;
+            }
             if ( first == null )
             {
                 if ( other.first != null )
+                {
                     return false;
+                }
             }
             else if ( !first.equals( other.first ) )
+            {
                 return false;
+            }
             if ( second == null )
             {
                 if ( other.second != null )
+                {
                     return false;
+                }
             }
             else if ( !second.equals( other.second ) )
+            {
                 return false;
+            }
             if ( someOther != other.someOther )
+            {
                 return false;
+            }
             if ( value == null )
             {
                 if ( other.value != null )
+                {
                     return false;
+                }
             }
             else if ( !value.equals( other.value ) )
+            {
                 return false;
+            }
             return true;
         }
     }
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/GenericTypedTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/GenericTypedTestCase.java
index 1f6dd2b..b5495af 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/GenericTypedTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/GenericTypedTestCase.java
@@ -233,14 +233,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Foo other = (Foo) obj;
             if ( id != other.id )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -294,21 +302,33 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Complex other = (Complex) obj;
             if ( bar != other.bar )
+            {
                 return false;
+            }
             if ( foo == null )
             {
                 if ( other.foo != null )
+                {
                     return false;
+                }
             }
             else if ( !foo.equals( other.foo ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/PropertyFinderTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/PropertyFinderTestCase.java
index db255ab..c62e97a 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/PropertyFinderTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/PropertyFinderTestCase.java
@@ -393,21 +393,33 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Standard other = (Standard) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -462,21 +474,33 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( !super.equals( obj ) )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Inherted other = (Inherted) obj;
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             if ( value4 != other.value4 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -518,19 +542,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( !super.equals( obj ) )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             ComposedInherted other = (ComposedInherted) obj;
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -608,28 +642,44 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             Composed other = (Composed) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ArrayMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ArrayMarshallerTestCase.java
index 536bbde..ca1633c 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ArrayMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ArrayMarshallerTestCase.java
@@ -508,14 +508,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             BooleanArray other = (BooleanArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -555,14 +563,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             ByteArray other = (ByteArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -602,14 +618,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             CharArray other = (CharArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -649,14 +673,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             ShortArray other = (ShortArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -696,14 +728,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             IntArray other = (IntArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -743,14 +783,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             LongArray other = (LongArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -790,14 +838,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             FloatArray other = (FloatArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -837,14 +893,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             DoubleArray other = (DoubleArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -884,14 +948,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             ObjectArray other = (ObjectArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -931,14 +1003,22 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             DeepObjectArray other = (DeepObjectArray) obj;
             if ( !Arrays.equals( array, other.array ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigDecimalMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigDecimalMarshallerTestCase.java
index 0a0ec41..7116d82 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigDecimalMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigDecimalMarshallerTestCase.java
@@ -163,33 +163,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             BigDecimalHolder other = (BigDecimalHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigIntegerMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigIntegerMarshallerTestCase.java
index 9abb50d..b6e2dd5 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigIntegerMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BigIntegerMarshallerTestCase.java
@@ -163,33 +163,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             BigIntegerHolder other = (BigIntegerHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BooleanMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BooleanMarshallerTestCase.java
index 736d852..ecdfd9f 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BooleanMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/BooleanMarshallerTestCase.java
@@ -192,16 +192,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( value1 != other.value1 )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -269,33 +279,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ByteMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ByteMarshallerTestCase.java
index f0289aa..abfad20 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ByteMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ByteMarshallerTestCase.java
@@ -192,16 +192,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( value1 != other.value1 )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -269,33 +279,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/CharacterMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/CharacterMarshallerTestCase.java
index 167a74a..df3097e 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/CharacterMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/CharacterMarshallerTestCase.java
@@ -192,16 +192,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( value1 != other.value1 )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -269,33 +279,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/DoubleMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/DoubleMarshallerTestCase.java
index d83b316..0f0c8df 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/DoubleMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/DoubleMarshallerTestCase.java
@@ -195,16 +195,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( Double.doubleToLongBits( value1 ) != Double.doubleToLongBits( other.value1 ) )
+            {
                 return false;
+            }
             if ( Double.doubleToLongBits( value2 ) != Double.doubleToLongBits( other.value2 ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -272,33 +282,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/FloatMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/FloatMarshallerTestCase.java
index b0c0c4f..792b61e 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/FloatMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/FloatMarshallerTestCase.java
@@ -192,16 +192,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( Float.floatToIntBits( value1 ) != Float.floatToIntBits( other.value1 ) )
+            {
                 return false;
+            }
             if ( Float.floatToIntBits( value2 ) != Float.floatToIntBits( other.value2 ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -269,33 +279,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/IntegerMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/IntegerMarshallerTestCase.java
index 5123de8..d9a79e3 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/IntegerMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/IntegerMarshallerTestCase.java
@@ -192,16 +192,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( value1 != other.value1 )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -269,33 +279,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshallerTestCase.java
index e95f8ab..a17456e 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ListMarshallerTestCase.java
@@ -193,19 +193,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             NoGenericTypeList other = (NoGenericTypeList) obj;
             if ( list == null )
             {
                 if ( other.list != null )
+                {
                     return false;
+                }
             }
             else if ( !list.equals( other.list ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -245,19 +255,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             SimpleGenericTypeList other = (SimpleGenericTypeList) obj;
             if ( list == null )
             {
                 if ( other.list != null )
+                {
                     return false;
+                }
             }
             else if ( !list.equals( other.list ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -297,19 +317,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             ComplexGenericTypeList other = (ComplexGenericTypeList) obj;
             if ( list == null )
             {
                 if ( other.list != null )
+                {
                     return false;
+                }
             }
             else if ( !list.equals( other.list ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/LongMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/LongMarshallerTestCase.java
index 63553fc..faac9fc 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/LongMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/LongMarshallerTestCase.java
@@ -192,16 +192,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( value1 != other.value1 )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -269,33 +279,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshallerTestCase.java
index 7377fa4..5942c95 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshallerTestCase.java
@@ -194,19 +194,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             NoGenericTypeMap other = (NoGenericTypeMap) obj;
             if ( map == null )
             {
                 if ( other.map != null )
+                {
                     return false;
+                }
             }
             else if ( !map.equals( other.map ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -246,19 +256,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             SimpleGenericTypeMap other = (SimpleGenericTypeMap) obj;
             if ( map == null )
             {
                 if ( other.map != null )
+                {
                     return false;
+                }
             }
             else if ( !map.equals( other.map ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -298,19 +318,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             ComplexGenericTypeSet other = (ComplexGenericTypeSet) obj;
             if ( set == null )
             {
                 if ( other.set != null )
+                {
                     return false;
+                }
             }
             else if ( !set.equals( other.set ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshallerTestCase.java
index a2c52f8..c905ce9 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/SetMarshallerTestCase.java
@@ -193,19 +193,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             NoGenericTypeSet other = (NoGenericTypeSet) obj;
             if ( set == null )
             {
                 if ( other.set != null )
+                {
                     return false;
+                }
             }
             else if ( !set.equals( other.set ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -245,19 +255,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             SimpleGenericTypeSet other = (SimpleGenericTypeSet) obj;
             if ( set == null )
             {
                 if ( other.set != null )
+                {
                     return false;
+                }
             }
             else if ( !set.equals( other.set ) )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -297,19 +317,29 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             ComplexGenericTypeSet other = (ComplexGenericTypeSet) obj;
             if ( set == null )
             {
                 if ( other.set != null )
+                {
                     return false;
+                }
             }
             else if ( !set.equals( other.set ) )
+            {
                 return false;
+            }
             return true;
         }
 
diff --git a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ShortMarshallerTestCase.java b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ShortMarshallerTestCase.java
index 824fe88..bbccc8b 100644
--- a/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ShortMarshallerTestCase.java
+++ b/lightning-core/src/test/java/org/apache/directmemory/lightning/internal/marshaller/ShortMarshallerTestCase.java
@@ -192,16 +192,26 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             PrimitiveHolder other = (PrimitiveHolder) obj;
             if ( value1 != other.value1 )
+            {
                 return false;
+            }
             if ( value2 != other.value2 )
+            {
                 return false;
+            }
             return true;
         }
 
@@ -269,33 +279,51 @@
         public boolean equals( Object obj )
         {
             if ( this == obj )
+            {
                 return true;
+            }
             if ( obj == null )
+            {
                 return false;
+            }
             if ( getClass() != obj.getClass() )
+            {
                 return false;
+            }
             WrapperHolder other = (WrapperHolder) obj;
             if ( value1 == null )
             {
                 if ( other.value1 != null )
+                {
                     return false;
+                }
             }
             else if ( !value1.equals( other.value1 ) )
+            {
                 return false;
+            }
             if ( value2 == null )
             {
                 if ( other.value2 != null )
+                {
                     return false;
+                }
             }
             else if ( !value2.equals( other.value2 ) )
+            {
                 return false;
+            }
             if ( value3 == null )
             {
                 if ( other.value3 != null )
+                {
                     return false;
+                }
             }
             else if ( !value3.equals( other.value3 ) )
+            {
                 return false;
+            }
             return true;
         }
 
