diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/VisualChangeEventConflaterTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/VisualChangeEventConflaterTest.java
index dc11f3b..380fe64 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/VisualChangeEventConflaterTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/VisualChangeEventConflaterTest.java
@@ -25,8 +25,7 @@
     @Test
     public void shouldAccumulateEvents() throws Exception {
         NatTableFixture natTable = new NatTableFixture();
-        VisualChangeEventConflater conflater = new VisualChangeEventConflater(
-                natTable);
+        VisualChangeEventConflater conflater = new VisualChangeEventConflater(natTable);
         EventConflaterChain chain = new EventConflaterChain();
         chain.add(conflater);
 
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/columnChooser/ColumnChooserUtilsTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/columnChooser/ColumnChooserUtilsTest.java
index 27a1346..b934460 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/columnChooser/ColumnChooserUtilsTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/columnChooser/ColumnChooserUtilsTest.java
@@ -48,15 +48,13 @@
 
     @Test
     public void getPositionsFromEntries() throws Exception {
-        List<Integer> positions = ColumnChooserUtils
-                .getColumnEntryPositions(this.entriesFixture);
+        List<Integer> positions = ColumnChooserUtils.getColumnEntryPositions(this.entriesFixture);
         assertEquals("[2, 6, 3, 4, 5]", positions.toString());
     }
 
     @Test
     public void getIndexesFromEntries() throws Exception {
-        List<Integer> indexes = ColumnChooserUtils
-                .getColumnEntryIndexes(this.entriesFixture);
+        List<Integer> indexes = ColumnChooserUtils.getColumnEntryIndexes(this.entriesFixture);
         assertEquals("[1, 3, 5, 7, 9]", indexes.toString());
     }
 
@@ -67,15 +65,12 @@
     }
 
     @Test
-    public void shouldProvideRenamedLabelsIfTheColumnHasBeenRenamed()
-            throws Exception {
+    public void shouldProvideRenamedLabelsIfTheColumnHasBeenRenamed() throws Exception {
         ColumnHeaderLayerFixture columnHeaderLayer = new ColumnHeaderLayerFixture();
-        assertEquals("[1, 0]",
-                getColumnLabel(columnHeaderLayer, getDataLayer(), 1));
+        assertEquals("[1, 0]", getColumnLabel(columnHeaderLayer, getDataLayer(), 1));
 
         columnHeaderLayer.renameColumnPosition(1, "renamed");
-        assertEquals("renamed*",
-                getColumnLabel(columnHeaderLayer, getDataLayer(), 1));
+        assertEquals("renamed*", getColumnLabel(columnHeaderLayer, getDataLayer(), 1));
     }
 
     @Test
@@ -84,32 +79,31 @@
                 RowDataListFixture.getList(),
                 RowDataListFixture.getPropertyNames(),
                 RowDataListFixture.getPropertyToLabelMap());
-        ColumnHideShowLayer columnHideShowLayer = gridLayer.getBodyLayer()
-                .getColumnHideShowLayer();
+        ColumnHideShowLayer columnHideShowLayer = gridLayer.getBodyLayer().getColumnHideShowLayer();
         ColumnHeaderLayer columnHeaderLayer = gridLayer.getColumnHeaderLayer();
-        DataLayer columnHeaderDataLayer = (DataLayer) gridLayer
-                .getColumnHeaderDataLayer();
+        DataLayer columnHeaderDataLayer = (DataLayer) gridLayer.getColumnHeaderDataLayer();
 
-        List<ColumnEntry> visibleEntries = ColumnChooserUtils
-                .getVisibleColumnsEntries(columnHideShowLayer,
-                        columnHeaderLayer, columnHeaderDataLayer);
+        List<ColumnEntry> visibleEntries = ColumnChooserUtils.getVisibleColumnsEntries(
+                columnHideShowLayer,
+                columnHeaderLayer,
+                columnHeaderDataLayer);
 
         // All columns shown
-        assertEquals(RowDataListFixture.getPropertyNames().length,
-                visibleEntries.size());
+        assertEquals(RowDataListFixture.getPropertyNames().length, visibleEntries.size());
 
         // Hide a few columns
-        gridLayer.getBodyLayer().getColumnHideShowLayer()
-                .hideColumnPositions(Arrays.asList(1, 2, 3));
+        gridLayer.getBodyLayer().getColumnHideShowLayer().hideColumnPositions(Arrays.asList(1, 2, 3));
         visibleEntries = ColumnChooserUtils.getVisibleColumnsEntries(
-                columnHideShowLayer, columnHeaderLayer, columnHeaderDataLayer);
-        assertEquals(RowDataListFixture.getPropertyNames().length - 3,
-                visibleEntries.size());
+                columnHideShowLayer,
+                columnHeaderLayer,
+                columnHeaderDataLayer);
+        assertEquals(RowDataListFixture.getPropertyNames().length - 3l, visibleEntries.size());
 
         // Check the hidden entries
-        List<ColumnEntry> hiddenEntries = ColumnChooserUtils
-                .getHiddenColumnEntries(columnHideShowLayer, columnHeaderLayer,
-                        columnHeaderDataLayer);
+        List<ColumnEntry> hiddenEntries = ColumnChooserUtils.getHiddenColumnEntries(
+                columnHideShowLayer,
+                columnHeaderLayer,
+                columnHeaderDataLayer);
         assertEquals(3, hiddenEntries.size());
     }
 }
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/config/DefaultComparatorTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/config/DefaultComparatorTest.java
index c68ee6d..34d4563 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/config/DefaultComparatorTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/config/DefaultComparatorTest.java
@@ -12,55 +12,49 @@
  ******************************************************************************/
 package org.eclipse.nebula.widgets.nattable.config;
 
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
+
 import org.junit.Test;
 
 public class DefaultComparatorTest {
 
-    private DefaultComparator defaultComparator = DefaultComparator
-            .getInstance();
+    private DefaultComparator defaultComparator = DefaultComparator.getInstance();
 
     @Test
     public void testCompareNonNullComparables() {
-        Assert.assertEquals("abc".compareTo("abc"),
-                this.defaultComparator.compare("abc", "abc"));
-        Assert.assertEquals("abc".compareTo("def"),
-                this.defaultComparator.compare("abc", "def"));
-        Assert.assertEquals("def".compareTo("abc"),
-                this.defaultComparator.compare("def", "abc"));
+        assertEquals(0, this.defaultComparator.compare("abc", "abc"));
+        assertEquals("abc".compareTo("def"), this.defaultComparator.compare("abc", "def"));
+        assertEquals("def".compareTo("abc"), this.defaultComparator.compare("def", "abc"));
     }
 
     @Test
     public void testCompareNullAB() {
-        Assert.assertEquals(0, this.defaultComparator.compare(null, null));
+        assertEquals(0, this.defaultComparator.compare(null, null));
     }
 
     @Test
     public void testCompareNullA() {
-        Assert.assertEquals(-1, this.defaultComparator.compare(null, "abc"));
+        assertEquals(-1, this.defaultComparator.compare(null, "abc"));
     }
 
     @Test
     public void testCompareNullB() {
-        Assert.assertEquals(1, this.defaultComparator.compare("abc", null));
+        assertEquals(1, this.defaultComparator.compare("abc", null));
     }
 
     @Test
     public void testCompareNonComparables() {
-        Assert.assertEquals(0, this.defaultComparator.compare(new SimpleObject(
-                "Test"), new SimpleObject("Test")));
+        assertEquals(0, this.defaultComparator.compare(new SimpleObject("Test"), new SimpleObject("Test")));
     }
 
     @Test
     public void testCompareNonComparables1() {
-        Assert.assertEquals(-1, this.defaultComparator.compare(new SimpleObject(
-                "Test1"), new SimpleObject("Test2")));
+        assertEquals(-1, this.defaultComparator.compare(new SimpleObject("Test1"), new SimpleObject("Test2")));
     }
 
     @Test
     public void testCompareNonComparables2() {
-        Assert.assertEquals(1, this.defaultComparator.compare(new SimpleObject(
-                "Test2"), new SimpleObject("Test1")));
+        assertEquals(1, this.defaultComparator.compare(new SimpleObject("Test2"), new SimpleObject("Test1")));
     }
 
     class SimpleObject {
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/DataChangeLayerIdIndexTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/DataChangeLayerIdIndexTest.java
index 27b0046..db37593 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/DataChangeLayerIdIndexTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/DataChangeLayerIdIndexTest.java
@@ -617,6 +617,7 @@
     }
 
     @Test
+    @SuppressWarnings("java:S2259")
     public void shouldUpdateChangeOnSortAndSaveWithTemp() {
         // enable temp data storage to test update on save
         this.dataChangeLayer = new DataChangeLayer(this.dataLayer,
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeIdIndexTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeIdIndexTest.java
index b010bf3..5a296fc 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeIdIndexTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeIdIndexTest.java
@@ -367,7 +367,7 @@
         assertEquals(1, this.dataChangeLayer.dataChanges.size());
         assertEquals(1, this.deleteHandler.dataChanges.size());
 
-        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(10);
+        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(Integer.valueOf(10));
         assertNotNull(change);
         assertEquals(10, change.getKey());
         assertEquals(toDelete, change.getValue());
@@ -391,7 +391,7 @@
         assertFalse("Cell 0/10 is dirty", this.dataChangeLayer.isCellDirty(0, 10));
         assertFalse("Dirty label set", this.dataChangeLayer.getConfigLabelsByPosition(1, 10).hasLabel(DataChangeLayer.DIRTY));
 
-        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(10);
+        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(Integer.valueOf(10));
         assertNotNull(change);
         assertEquals(10, change.getKey());
         assertEquals(toDelete, change.getValue());
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeTest.java
index 2f31791..2344109 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/datachange/RowStructuralDataChangeTest.java
@@ -355,7 +355,7 @@
         assertEquals(1, this.dataChangeLayer.dataChanges.size());
         assertEquals(1, this.deleteHandler.dataChanges.size());
 
-        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(10);
+        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(Integer.valueOf(10));
         assertNotNull(change);
         assertEquals(10, change.getKey());
         assertEquals(toDelete, change.getValue());
@@ -379,7 +379,7 @@
         assertFalse("Cell 0/10 is dirty", this.dataChangeLayer.isCellDirty(0, 10));
         assertFalse("Dirty label set", this.dataChangeLayer.getConfigLabelsByPosition(1, 10).hasLabel(DataChangeLayer.DIRTY));
 
-        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(10);
+        RowDeleteDataChange change = this.deleteHandler.dataChanges.get(Integer.valueOf(10));
         assertNotNull(change);
         assertEquals(10, change.getKey());
         assertEquals(toDelete, change.getValue());
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/edit/gui/MultiCellEditDialogRunner.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/edit/gui/MultiCellEditDialogRunner.java
index e640b78..adacd59 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/edit/gui/MultiCellEditDialogRunner.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/edit/gui/MultiCellEditDialogRunner.java
@@ -12,6 +12,8 @@
  ******************************************************************************/
 package org.eclipse.nebula.widgets.nattable.edit.gui;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
 import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry;
 import org.eclipse.nebula.widgets.nattable.data.convert.DisplayConverter;
@@ -27,7 +29,6 @@
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
-import org.junit.Assert;
 
 public class MultiCellEditDialogRunner {
 
@@ -60,16 +61,14 @@
         IDataValidator dataValidator = new DataValidator() {
 
             @Override
-            public boolean validate(int columnIndex, int rowIndex,
-                    Object newValue) {
-                Assert.assertEquals(newValue, newValue);
+            public boolean validate(int columnIndex, int rowIndex, Object newValue) {
+                assertEquals(newValue, newValue);
                 return false;
             }
 
         };
 
-        Shell shell = new Shell(Display.getDefault(), SWT.H_SCROLL
-                | SWT.V_SCROLL | SWT.RESIZE);
+        Shell shell = new Shell(Display.getDefault(), SWT.H_SCROLL | SWT.V_SCROLL | SWT.RESIZE);
 
         ConfigRegistry configRegistry = new ConfigRegistry();
         configRegistry.registerConfigAttribute(
@@ -79,8 +78,7 @@
                 EditConfigAttributes.DATA_VALIDATOR,
                 dataValidator);
 
-        final CellEditDialog dialog = new CellEditDialog(shell,
-                newValue, cell, cellEditor, configRegistry);
+        final CellEditDialog dialog = new CellEditDialog(shell, newValue, cell, cellEditor, configRegistry);
 
         if (!this.interactive) {
             Display.getDefault().asyncExec(new Runnable() {
@@ -89,7 +87,7 @@
                     try {
                         Thread.sleep(100);
                     } catch (InterruptedException e) {
-                        e.printStackTrace();
+                        Thread.currentThread().interrupt();
                     } finally {
                         dialog.close();
                     }
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/FormulaParserTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/FormulaParserTest.java
index ff0fd28..eef4b85 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/FormulaParserTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/FormulaParserTest.java
@@ -142,10 +142,10 @@
         assertEquals(new BigDecimal(20 / 2 / 5), result.getValue());
 
         result = this.parser.parseFunction("5 / 2");
-        assertEquals(new BigDecimal(5d / 2), result.getValue());
+        assertEquals(BigDecimal.valueOf(5d / 2), result.getValue());
 
         result = this.parser.parseFunction("100 / 4 / 5 / 2");
-        assertEquals(new BigDecimal(100d / 4 / 5 / 2), result.getValue());
+        assertEquals(BigDecimal.valueOf(100d / 4 / 5 / 2), result.getValue());
 
         result = this.parser.parseFunction("-15 / 3");
         assertEquals(new BigDecimal(-15 / 3), result.getValue());
@@ -172,8 +172,8 @@
         assertEquals(new BigDecimal(29), result.getValue());
 
         result = this.parser.parseFunction("2*5+10/4-3");
-        assertEquals(new BigDecimal(2 * 5 + 10d / 4 - 3), result.getValue());
-        assertEquals(new BigDecimal(9.5), result.getValue());
+        assertEquals(BigDecimal.valueOf(2 * 5 + 10d / 4 - 3), result.getValue());
+        assertEquals(BigDecimal.valueOf(9.5), result.getValue());
     }
 
     @Test(expected = IllegalArgumentException.class)
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/function/FunctionTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/function/FunctionTest.java
index e638d5f..17c059d 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/function/FunctionTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/formula/function/FunctionTest.java
@@ -182,7 +182,7 @@
         values.add(new BigDecimalFunctionValue(4));
         values.add(new BigDecimalFunctionValue(2));
         FunctionValue function = new QuotientFunction(values);
-        assertEquals(new BigDecimal(20d / 4d / 2d), function.getValue());
+        assertEquals(BigDecimal.valueOf(20d / 4d / 2d), function.getValue());
     }
 
     @Test
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java
index bc7c4e5..6c0d5f4 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java
@@ -1338,62 +1338,60 @@
 
         // this hides completely the Address and Facts group and the first item
         // of the Personal group via two separate commands
-        if (this.selectionLayer.doCommand(new MultiColumnHideCommand(this.selectionLayer, 4, 5, 6, 7))
-                && this.selectionLayer.doCommand(new MultiColumnHideCommand(this.selectionLayer, 4, 5, 6, 7))) {
-            assertEquals(6, this.selectionLayer.getColumnCount());
+        this.selectionLayer.doCommand(new MultiColumnHideCommand(this.selectionLayer, 4, 5, 6, 7));
+        this.selectionLayer.doCommand(new MultiColumnHideCommand(this.selectionLayer, 4, 5, 6, 7));
 
-            ILayerCell cell = this.columnGroupHeaderLayer.getCellByPosition(0, 0);
-            assertEquals(0, cell.getOriginColumnPosition());
-            assertEquals(4, cell.getColumnSpan());
-            assertEquals("Person", cell.getDataValue());
-            assertEquals(0, cell.getBounds().x);
-            assertEquals(0, cell.getBounds().y);
-            assertEquals(400, cell.getBounds().width);
-            assertEquals(20, cell.getBounds().height);
+        assertEquals(6, this.selectionLayer.getColumnCount());
 
-            cell = this.columnGroupHeaderLayer.getCellByPosition(4, 0);
-            assertEquals(4, cell.getOriginColumnPosition());
-            assertEquals(4, cell.getColumnPosition());
-            assertEquals(12, cell.getColumnIndex());
-            assertEquals(2, cell.getColumnSpan());
-            assertEquals("Personal", cell.getDataValue());
-            assertEquals(400, cell.getBounds().x);
-            assertEquals(0, cell.getBounds().y);
-            assertEquals(200, cell.getBounds().width);
-            assertEquals(20, cell.getBounds().height);
+        ILayerCell cell = this.columnGroupHeaderLayer.getCellByPosition(0, 0);
+        assertEquals(0, cell.getOriginColumnPosition());
+        assertEquals(4, cell.getColumnSpan());
+        assertEquals("Person", cell.getDataValue());
+        assertEquals(0, cell.getBounds().x);
+        assertEquals(0, cell.getBounds().y);
+        assertEquals(400, cell.getBounds().width);
+        assertEquals(20, cell.getBounds().height);
 
-            Group group1 = this.columnGroupHeaderLayer.getGroupModel().getGroupByPosition(0);
-            assertEquals(0, group1.getStartIndex());
-            assertEquals(0, group1.getVisibleStartIndex());
-            assertEquals(0, group1.getVisibleStartPosition());
-            assertEquals(4, group1.getOriginalSpan());
-            assertEquals(4, group1.getVisibleSpan());
+        cell = this.columnGroupHeaderLayer.getCellByPosition(4, 0);
+        assertEquals(4, cell.getOriginColumnPosition());
+        assertEquals(4, cell.getColumnPosition());
+        assertEquals(12, cell.getColumnIndex());
+        assertEquals(2, cell.getColumnSpan());
+        assertEquals("Personal", cell.getDataValue());
+        assertEquals(400, cell.getBounds().x);
+        assertEquals(0, cell.getBounds().y);
+        assertEquals(200, cell.getBounds().width);
+        assertEquals(20, cell.getBounds().height);
 
-            Group group4 = this.columnGroupHeaderLayer.getGroupModel().getGroupByPosition(4);
-            assertEquals(11, group4.getStartIndex());
-            assertEquals(12, group4.getVisibleStartIndex());
-            assertEquals(4, group4.getVisibleStartPosition());
-            assertEquals(3, group4.getOriginalSpan());
-            assertEquals(2, group4.getVisibleSpan());
+        Group group1 = this.columnGroupHeaderLayer.getGroupModel().getGroupByPosition(0);
+        assertEquals(0, group1.getStartIndex());
+        assertEquals(0, group1.getVisibleStartIndex());
+        assertEquals(0, group1.getVisibleStartPosition());
+        assertEquals(4, group1.getOriginalSpan());
+        assertEquals(4, group1.getVisibleSpan());
 
-            // these groups are not visible by column position, so we retrieve
-            // it by name
-            Group group2 = this.columnGroupHeaderLayer.getGroupModel().getGroupByName("Address");
-            assertEquals(4, group2.getStartIndex());
-            assertEquals(-1, group2.getVisibleStartIndex());
-            assertEquals(-1, group2.getVisibleStartPosition());
-            assertEquals(4, group2.getOriginalSpan());
-            assertEquals(0, group2.getVisibleSpan());
+        Group group4 = this.columnGroupHeaderLayer.getGroupModel().getGroupByPosition(4);
+        assertEquals(11, group4.getStartIndex());
+        assertEquals(12, group4.getVisibleStartIndex());
+        assertEquals(4, group4.getVisibleStartPosition());
+        assertEquals(3, group4.getOriginalSpan());
+        assertEquals(2, group4.getVisibleSpan());
 
-            Group group3 = this.columnGroupHeaderLayer.getGroupModel().getGroupByName("Facts");
-            assertEquals(8, group3.getStartIndex());
-            assertEquals(-1, group3.getVisibleStartIndex());
-            assertEquals(-1, group3.getVisibleStartPosition());
-            assertEquals(3, group3.getOriginalSpan());
-            assertEquals(0, group3.getVisibleSpan());
-        } else {
-            fail("Column not hidden");
-        }
+        // these groups are not visible by column position, so we retrieve
+        // it by name
+        Group group2 = this.columnGroupHeaderLayer.getGroupModel().getGroupByName("Address");
+        assertEquals(4, group2.getStartIndex());
+        assertEquals(-1, group2.getVisibleStartIndex());
+        assertEquals(-1, group2.getVisibleStartPosition());
+        assertEquals(4, group2.getOriginalSpan());
+        assertEquals(0, group2.getVisibleSpan());
+
+        Group group3 = this.columnGroupHeaderLayer.getGroupModel().getGroupByName("Facts");
+        assertEquals(8, group3.getStartIndex());
+        assertEquals(-1, group3.getVisibleStartIndex());
+        assertEquals(-1, group3.getVisibleStartPosition());
+        assertEquals(3, group3.getOriginalSpan());
+        assertEquals(0, group3.getVisibleSpan());
 
         // show again
         if (this.gridLayer.doCommand(new ShowAllColumnsCommand())) {
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java
index d49f404..ba7cc5e 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java
@@ -1335,62 +1335,59 @@
 
         // this hides completely the Address and Facts group and the first item
         // of the Personal group via two separate commands
-        if (this.selectionLayer.doCommand(new MultiRowHideCommand(this.selectionLayer, 4, 5, 6, 7))
-                && this.selectionLayer.doCommand(new MultiRowHideCommand(this.selectionLayer, 4, 5, 6, 7))) {
-            assertEquals(6, this.selectionLayer.getRowCount());
+        this.selectionLayer.doCommand(new MultiRowHideCommand(this.selectionLayer, 4, 5, 6, 7));
+        this.selectionLayer.doCommand(new MultiRowHideCommand(this.selectionLayer, 4, 5, 6, 7));
+        assertEquals(6, this.selectionLayer.getRowCount());
 
-            ILayerCell cell = this.rowGroupHeaderLayer.getCellByPosition(0, 0);
-            assertEquals(0, cell.getOriginRowPosition());
-            assertEquals(4, cell.getRowSpan());
-            assertEquals("Person", cell.getDataValue());
-            assertEquals(0, cell.getBounds().y);
-            assertEquals(0, cell.getBounds().x);
-            assertEquals(80, cell.getBounds().height);
-            assertEquals(20, cell.getBounds().width);
+        ILayerCell cell = this.rowGroupHeaderLayer.getCellByPosition(0, 0);
+        assertEquals(0, cell.getOriginRowPosition());
+        assertEquals(4, cell.getRowSpan());
+        assertEquals("Person", cell.getDataValue());
+        assertEquals(0, cell.getBounds().y);
+        assertEquals(0, cell.getBounds().x);
+        assertEquals(80, cell.getBounds().height);
+        assertEquals(20, cell.getBounds().width);
 
-            cell = this.rowGroupHeaderLayer.getCellByPosition(0, 4);
-            assertEquals(4, cell.getOriginRowPosition());
-            assertEquals(4, cell.getRowPosition());
-            assertEquals(12, cell.getRowIndex());
-            assertEquals(2, cell.getRowSpan());
-            assertEquals("Personal", cell.getDataValue());
-            assertEquals(80, cell.getBounds().y);
-            assertEquals(0, cell.getBounds().x);
-            assertEquals(40, cell.getBounds().height);
-            assertEquals(20, cell.getBounds().width);
+        cell = this.rowGroupHeaderLayer.getCellByPosition(0, 4);
+        assertEquals(4, cell.getOriginRowPosition());
+        assertEquals(4, cell.getRowPosition());
+        assertEquals(12, cell.getRowIndex());
+        assertEquals(2, cell.getRowSpan());
+        assertEquals("Personal", cell.getDataValue());
+        assertEquals(80, cell.getBounds().y);
+        assertEquals(0, cell.getBounds().x);
+        assertEquals(40, cell.getBounds().height);
+        assertEquals(20, cell.getBounds().width);
 
-            Group group1 = this.rowGroupHeaderLayer.getGroupModel().getGroupByPosition(0);
-            assertEquals(0, group1.getStartIndex());
-            assertEquals(0, group1.getVisibleStartIndex());
-            assertEquals(0, group1.getVisibleStartPosition());
-            assertEquals(4, group1.getOriginalSpan());
-            assertEquals(4, group1.getVisibleSpan());
+        Group group1 = this.rowGroupHeaderLayer.getGroupModel().getGroupByPosition(0);
+        assertEquals(0, group1.getStartIndex());
+        assertEquals(0, group1.getVisibleStartIndex());
+        assertEquals(0, group1.getVisibleStartPosition());
+        assertEquals(4, group1.getOriginalSpan());
+        assertEquals(4, group1.getVisibleSpan());
 
-            Group group4 = this.rowGroupHeaderLayer.getGroupModel().getGroupByPosition(4);
-            assertEquals(11, group4.getStartIndex());
-            assertEquals(12, group4.getVisibleStartIndex());
-            assertEquals(4, group4.getVisibleStartPosition());
-            assertEquals(3, group4.getOriginalSpan());
-            assertEquals(2, group4.getVisibleSpan());
+        Group group4 = this.rowGroupHeaderLayer.getGroupModel().getGroupByPosition(4);
+        assertEquals(11, group4.getStartIndex());
+        assertEquals(12, group4.getVisibleStartIndex());
+        assertEquals(4, group4.getVisibleStartPosition());
+        assertEquals(3, group4.getOriginalSpan());
+        assertEquals(2, group4.getVisibleSpan());
 
-            // these groups are not visible by column position, so we retrieve
-            // it by name
-            Group group2 = this.rowGroupHeaderLayer.getGroupModel().getGroupByName("Address");
-            assertEquals(4, group2.getStartIndex());
-            assertEquals(-1, group2.getVisibleStartIndex());
-            assertEquals(-1, group2.getVisibleStartPosition());
-            assertEquals(4, group2.getOriginalSpan());
-            assertEquals(0, group2.getVisibleSpan());
+        // these groups are not visible by column position, so we retrieve
+        // it by name
+        Group group2 = this.rowGroupHeaderLayer.getGroupModel().getGroupByName("Address");
+        assertEquals(4, group2.getStartIndex());
+        assertEquals(-1, group2.getVisibleStartIndex());
+        assertEquals(-1, group2.getVisibleStartPosition());
+        assertEquals(4, group2.getOriginalSpan());
+        assertEquals(0, group2.getVisibleSpan());
 
-            Group group3 = this.rowGroupHeaderLayer.getGroupModel().getGroupByName("Facts");
-            assertEquals(8, group3.getStartIndex());
-            assertEquals(-1, group3.getVisibleStartIndex());
-            assertEquals(-1, group3.getVisibleStartPosition());
-            assertEquals(3, group3.getOriginalSpan());
-            assertEquals(0, group3.getVisibleSpan());
-        } else {
-            fail("Row not hidden");
-        }
+        Group group3 = this.rowGroupHeaderLayer.getGroupModel().getGroupByName("Facts");
+        assertEquals(8, group3.getStartIndex());
+        assertEquals(-1, group3.getVisibleStartIndex());
+        assertEquals(-1, group3.getVisibleStartPosition());
+        assertEquals(3, group3.getOriginalSpan());
+        assertEquals(0, group3.getVisibleSpan());
 
         // show again
         if (this.gridLayer.doCommand(new ShowAllRowsCommand())) {
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTest.java
index e356fe6..df9c59d 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTest.java
@@ -35,7 +35,7 @@
         List<Car> input = new ArrayList<>();
         input.add(new Car("Mercedes", "C Klasse"));
 
-        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, false, CarService.PROPERTY_NAMES);
+        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, false, CarService.getPropertyNames());
 
         assertEquals(1, result.size());
     }
@@ -51,7 +51,7 @@
 
         input.add(car);
 
-        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, false, Arrays.asList(CarService.PROPERTY_NAMES));
+        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, false, Arrays.asList(CarService.getPropertyNames()));
 
         assertEquals(2, result.size());
     }
@@ -71,7 +71,7 @@
 
         input.add(car);
 
-        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, false, Arrays.asList(CarService.PROPERTY_NAMES));
+        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, false, Arrays.asList(CarService.getPropertyNames()));
 
         assertEquals(3, result.size());
 
@@ -99,7 +99,7 @@
         // System.out.println();
 
         // test get data value
-        HierarchicalReflectiveColumnPropertyAccessor accessor = new HierarchicalReflectiveColumnPropertyAccessor(CarService.PROPERTY_NAMES);
+        HierarchicalReflectiveColumnPropertyAccessor accessor = new HierarchicalReflectiveColumnPropertyAccessor(CarService.getPropertyNames());
         assertEquals(Classification.NEUTRAL, accessor.getDataValue(result.get(1), 7));
 
         // test set data value
@@ -118,7 +118,7 @@
         List<Car> input = new ArrayList<>();
         input.add(new Car("Mercedes", "C Klasse"));
 
-        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.PROPERTY_NAMES));
+        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.getPropertyNames()));
 
         assertEquals(1, result.size());
     }
@@ -134,7 +134,7 @@
 
         input.add(car);
 
-        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.PROPERTY_NAMES));
+        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.getPropertyNames()));
 
         assertEquals(3, result.size());
     }
@@ -154,7 +154,7 @@
 
         input.add(car);
 
-        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.PROPERTY_NAMES));
+        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.getPropertyNames()));
 
         assertEquals(5, result.size());
 
@@ -184,7 +184,7 @@
         // test get data value
         // with structure parent objects, first object is Car, second Car +
         // Motor, third Car + Motor + Feedback
-        HierarchicalReflectiveColumnPropertyAccessor accessor = new HierarchicalReflectiveColumnPropertyAccessor(CarService.PROPERTY_NAMES);
+        HierarchicalReflectiveColumnPropertyAccessor accessor = new HierarchicalReflectiveColumnPropertyAccessor(CarService.getPropertyNames());
         HierarchicalWrapper first = result.get(0);
         HierarchicalWrapper second = result.get(1);
         HierarchicalWrapper third = result.get(2);
@@ -232,7 +232,7 @@
 
         input.add(car2);
 
-        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.PROPERTY_NAMES));
+        List<HierarchicalWrapper> result = HierarchicalHelper.deNormalize(input, true, Arrays.asList(CarService.getPropertyNames()));
 
         assertEquals(7, result.size());
 
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java
index 3d1907e..f367187 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/HierarchicalTreeLayerTest.java
@@ -99,13 +99,13 @@
     @Before
     public void setup() {
         // de-normalize the object graph without parent structure objects
-        this.data = HierarchicalHelper.deNormalize(CarService.getInput(), false, CarService.PROPERTY_NAMES_COMPACT);
+        this.data = HierarchicalHelper.deNormalize(CarService.getInput(), false, CarService.getPropertyNamesCompact());
 
         HierarchicalReflectiveColumnPropertyAccessor columnPropertyAccessor =
-                new HierarchicalReflectiveColumnPropertyAccessor(CarService.PROPERTY_NAMES_COMPACT);
+                new HierarchicalReflectiveColumnPropertyAccessor(CarService.getPropertyNamesCompact());
 
         this.bodyDataProvider = new ListDataProvider<>(this.data, columnPropertyAccessor);
-        HierarchicalSpanningDataProvider spanningDataProvider = new HierarchicalSpanningDataProvider(this.bodyDataProvider, CarService.PROPERTY_NAMES_COMPACT);
+        HierarchicalSpanningDataProvider spanningDataProvider = new HierarchicalSpanningDataProvider(this.bodyDataProvider, CarService.getPropertyNamesCompact());
         this.bodyDataLayer = new SpanningDataLayer(spanningDataProvider);
 
         // simply apply labels for every column by index
@@ -114,7 +114,7 @@
         this.columnHideShowLayer = new ColumnHideShowLayer(this.columnReorderLayer);
         this.rowHideShowLayer = new RowHideShowLayer(this.columnHideShowLayer);
         this.selectionLayer = new SelectionLayer(this.rowHideShowLayer);
-        this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.data, CarService.PROPERTY_NAMES_COMPACT);
+        this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.data, CarService.getPropertyNamesCompact());
 
         this.layerListener = new LayerListenerFixture();
         this.treeLayer.addLayerListener(this.layerListener);
@@ -637,7 +637,7 @@
 
     @Test
     public void testGetDisplayModeByPositionWithSelectionLayer() {
-        this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.data, CarService.PROPERTY_NAMES_COMPACT, this.selectionLayer);
+        this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.data, CarService.getPropertyNamesCompact(), this.selectionLayer);
 
         // first test that all cells in a row are NORMAL
         for (int i = 0; i < this.treeLayer.getColumnCount(); i++) {
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/action/HierarchicalTreeColumnReorderDragModeTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/action/HierarchicalTreeColumnReorderDragModeTest.java
index 799809e..a0a3ab6 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/action/HierarchicalTreeColumnReorderDragModeTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/hierarchical/action/HierarchicalTreeColumnReorderDragModeTest.java
@@ -42,13 +42,13 @@
     @Before
     public void setup() {
         // de-normalize the object graph without parent structure objects
-        List<HierarchicalWrapper> data = HierarchicalHelper.deNormalize(CarService.getInput(), false, CarService.PROPERTY_NAMES_COMPACT);
+        List<HierarchicalWrapper> data = HierarchicalHelper.deNormalize(CarService.getInput(), false, CarService.getPropertyNamesCompact());
 
         HierarchicalReflectiveColumnPropertyAccessor columnPropertyAccessor =
-                new HierarchicalReflectiveColumnPropertyAccessor(CarService.PROPERTY_NAMES_COMPACT);
+                new HierarchicalReflectiveColumnPropertyAccessor(CarService.getPropertyNamesCompact());
 
         IRowDataProvider<HierarchicalWrapper> bodyDataProvider = new ListDataProvider<>(data, columnPropertyAccessor);
-        HierarchicalSpanningDataProvider spanningDataProvider = new HierarchicalSpanningDataProvider(bodyDataProvider, CarService.PROPERTY_NAMES_COMPACT);
+        HierarchicalSpanningDataProvider spanningDataProvider = new HierarchicalSpanningDataProvider(bodyDataProvider, CarService.getPropertyNamesCompact());
         DataLayer bodyDataLayer = new SpanningDataLayer(spanningDataProvider);
 
         // simply apply labels for every column by index
@@ -56,7 +56,7 @@
         ColumnReorderLayer columnReorderLayer = new ColumnReorderLayer(bodyDataLayer);
         ColumnHideShowLayer columnHideShowLayer = new ColumnHideShowLayer(columnReorderLayer);
         SelectionLayer selectionLayer = new SelectionLayer(columnHideShowLayer);
-        this.treeLayer = new HierarchicalTreeLayer(selectionLayer, data, CarService.PROPERTY_NAMES_COMPACT);
+        this.treeLayer = new HierarchicalTreeLayer(selectionLayer, data, CarService.getPropertyNamesCompact());
     }
 
     @Test
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/ColumnSelectionTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/ColumnSelectionTest.java
index a5b0151..1069714 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/ColumnSelectionTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/ColumnSelectionTest.java
@@ -59,7 +59,7 @@
 
         // Last selected cell should be part of last row
         assertEquals(2, this.selectionLayer.getLastSelectedCellPosition().getColumnPosition());
-        assertEquals(rowCount - 1, this.selectionLayer.getLastSelectedCellPosition().getRowPosition());
+        assertEquals(rowCount - 1l, this.selectionLayer.getLastSelectedCellPosition().getRowPosition());
 
         // Cells in between should have been selected
         assertEquals(rowCount, this.selectionLayer.getSelectedRowCount());
@@ -170,7 +170,7 @@
         // Last selected cell should be part of last row
         assertEquals(1, this.selectionLayer.getLastSelectedCellPosition().getColumnPosition());
         final int lastRowPosition = this.selectionLayer.getLastSelectedCellPosition().getRowPosition();
-        assertEquals(rowCount - 1, lastRowPosition);
+        assertEquals(rowCount - 1l, lastRowPosition);
 
         // Cells in column should have been selected
         assertEquals(rowCount, this.selectionLayer.getSelectedRowCount());
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/EditTraversalStrategyUpDownTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/EditTraversalStrategyUpDownTest.java
index 93af826..88982aa 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/EditTraversalStrategyUpDownTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/EditTraversalStrategyUpDownTest.java
@@ -1241,7 +1241,7 @@
         try {
             Thread.sleep(50);
         } catch (InterruptedException e) {
-            e.printStackTrace();
+            Thread.currentThread().interrupt();
         }
     }
 }
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/PreserveSelectionModelStructuralChangeEventHandlerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/PreserveSelectionModelStructuralChangeEventHandlerTest.java
index e951db3..253c67c 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/PreserveSelectionModelStructuralChangeEventHandlerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/PreserveSelectionModelStructuralChangeEventHandlerTest.java
@@ -128,7 +128,7 @@
 
         assertEquals(1, this.selectionLayer.getFullySelectedRowPositions().length);
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
-        assertEquals(this.listFixture.size() - 1, this.selectionLayer.getFullySelectedRowPositions()[0]);
+        assertEquals(this.listFixture.size() - 1l, this.selectionLayer.getFullySelectedRowPositions()[0]);
     }
 
     @Test
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RangeTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RangeTest.java
index 4b17a5b..4dbf4f3 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RangeTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RangeTest.java
@@ -49,7 +49,8 @@
 
     @Test
     public void shouldIdentifyEquality() {
-        assertTrue(new Range(3, 10).equals(new Range(3, 10)));
+        Range test = new Range(3, 10);
+        assertTrue(test.equals(new Range(3, 10)));
     }
 
     @Test
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionModelStructuralChangeEventHandlerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionModelStructuralChangeEventHandlerTest.java
index 6c852eb..e8726da 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionModelStructuralChangeEventHandlerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionModelStructuralChangeEventHandlerTest.java
@@ -130,7 +130,7 @@
 
         assertEquals(1, this.selectionLayer.getFullySelectedRowPositions().length);
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
-        assertEquals(this.listFixture.size() - 1, this.selectionLayer.getFullySelectedRowPositions()[0]);
+        assertEquals(this.listFixture.size() - 1l, this.selectionLayer.getFullySelectedRowPositions()[0]);
     }
 
     @Test
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTest.java
index 9fcb662..67ff6cb 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTest.java
@@ -55,7 +55,7 @@
         assertEquals(2, this.selectionLayer.getSelectionAnchor().getRowPosition());
 
         // Last selected cell should be part of last column
-        assertEquals(columnCount - 1, this.selectionLayer.getLastSelectedCellPosition().getColumnPosition());
+        assertEquals(columnCount - 1l, this.selectionLayer.getLastSelectedCellPosition().getColumnPosition());
         assertEquals(2, this.selectionLayer.getLastSelectedCellPosition().getRowPosition());
 
         // Cells in between should have been selected
@@ -189,7 +189,7 @@
         // Last selected cell should be part of last column
         assertEquals(1, this.selectionLayer.getLastSelectedCellPosition().getRowPosition());
         int lastColumnPosition = this.selectionLayer.getLastSelectedCellPosition().getColumnPosition();
-        assertEquals(columnCount - 1, lastColumnPosition);
+        assertEquals(columnCount - 1l, lastColumnPosition);
 
         // Cells in row should have been selected
         int[] selectedColumns = this.selectionLayer.getSelectedColumnPositions();
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTraversalTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTraversalTest.java
index aaaf26d..054f088 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTraversalTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/RowSelectionTraversalTest.java
@@ -117,7 +117,7 @@
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT,
                 ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -139,7 +139,7 @@
         // move one to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -179,7 +179,7 @@
         // move 3 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -219,7 +219,7 @@
         // move one to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -239,7 +239,7 @@
         // move one to right at end -> relocate at beginning, same row
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -259,7 +259,7 @@
         // move 3 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -279,7 +279,7 @@
         // move 4 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -299,7 +299,7 @@
         // move 24 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -319,7 +319,7 @@
         // move one to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -339,7 +339,7 @@
         // move one to right at end -> relocate at beginning, new row
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -379,7 +379,7 @@
         // move 3 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -399,7 +399,7 @@
         // move 4 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -419,7 +419,7 @@
         // move 24 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(7, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -459,7 +459,7 @@
         // move one to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -479,7 +479,7 @@
         // move one to right at end -> relocate at beginning, new row
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -499,7 +499,7 @@
         // move one to right at end -> relocate at beginning, top
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -522,7 +522,7 @@
         // move 3 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -542,7 +542,7 @@
         // move 4 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -562,7 +562,7 @@
         // move 24 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(7, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -582,7 +582,7 @@
         // move 34 steps to right
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.RIGHT, 34, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -604,7 +604,7 @@
         // move one to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -624,7 +624,7 @@
         // move on to left at beginning -> stay
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -644,7 +644,7 @@
         // move 3 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -664,7 +664,7 @@
         // move 4 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -684,7 +684,7 @@
         // move one to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -724,7 +724,7 @@
         // move 3 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -744,7 +744,7 @@
         // move 4 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -764,7 +764,7 @@
         // move 24 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -784,7 +784,7 @@
         // move one to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -824,7 +824,7 @@
         // move one to left at beginning -> stay
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -844,7 +844,7 @@
         // move 3 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -864,7 +864,7 @@
         // move 4 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -884,7 +884,7 @@
         // move 24 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -904,7 +904,7 @@
         // move 24 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -924,7 +924,7 @@
         // move one to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -984,7 +984,7 @@
         // move 3 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1004,7 +1004,7 @@
         // move 4 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1024,7 +1024,7 @@
         // move 24 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1044,7 +1044,7 @@
         // move 34 steps to left
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.LEFT, 34, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(7, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1066,7 +1066,7 @@
         // move one down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1086,7 +1086,7 @@
         // move down at end -> stay
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(9, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1106,7 +1106,7 @@
         // move 3 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(7, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1126,7 +1126,7 @@
         // move 4 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(9, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1146,7 +1146,7 @@
         // move one down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1166,7 +1166,7 @@
         // move down at end -> relocate at beginning, same column
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1186,7 +1186,7 @@
         // move 3 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(7, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1206,7 +1206,7 @@
         // move 4 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1226,7 +1226,7 @@
         // move 24 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1246,7 +1246,7 @@
         // move one down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1266,7 +1266,7 @@
         // move one down at end -> relocate at beginning, new column
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1306,7 +1306,7 @@
         // move 3 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(7, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1326,7 +1326,7 @@
         // move 4 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1346,7 +1346,7 @@
         // move 24 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1386,7 +1386,7 @@
         // move one down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(5, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1406,7 +1406,7 @@
         // move one down at end -> relocate at beginning, new column
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1426,7 +1426,7 @@
         // move one to right at end -> relocate at beginning, top
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1446,7 +1446,7 @@
         // move 3 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(7, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1466,7 +1466,7 @@
         // move 4 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1486,7 +1486,7 @@
         // move 24 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1506,7 +1506,7 @@
         // move 34 steps down
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.DOWN, 34, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1528,7 +1528,7 @@
         // move one up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1548,7 +1548,7 @@
         // move up at beginning -> stay
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1568,7 +1568,7 @@
         // move 3 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1588,7 +1588,7 @@
         // move 4 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1608,7 +1608,7 @@
         // move one up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1628,7 +1628,7 @@
         // move one up at beginning -> relocate at end, same column
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(9, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1648,7 +1648,7 @@
         // move 3 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1668,7 +1668,7 @@
         // move 4 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(8, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1688,7 +1688,7 @@
         // move 24 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(8, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1708,7 +1708,7 @@
         // move one up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1728,7 +1728,7 @@
         // move one up at beginning -> relocate at end, new column
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(9, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1748,7 +1748,7 @@
         // move one up at beginning -> stay
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1768,7 +1768,7 @@
         // move 3 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1788,7 +1788,7 @@
         // move 4 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(8, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1808,7 +1808,7 @@
         // move 24 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(8, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1828,7 +1828,7 @@
         // move 24 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1848,7 +1848,7 @@
         // move one up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1868,7 +1868,7 @@
         // move one up at beginning -> relocate at end, new column
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(9, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1908,7 +1908,7 @@
         // move 3 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 3, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1928,7 +1928,7 @@
         // move 4 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 4, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(8, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1948,7 +1948,7 @@
         // move 24 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 24, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(8, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
@@ -1968,7 +1968,7 @@
         // move 34 steps up
         this.viewportLayer.doCommand(new MoveSelectionCommand(MoveDirectionEnum.UP, 34, false, false));
 
-        assertEquals(this.selectionLayer.getColumnCount() - 1, this.selectionLayer.getLastSelectedCell().getColumnPosition());
+        assertEquals(this.selectionLayer.getColumnCount() - 1l, this.selectionLayer.getLastSelectedCell().getColumnPosition());
         assertEquals(8, this.selectionLayer.getLastSelectedCell().getRowPosition());
 
         assertEquals(1, this.selectionLayer.getSelectedRowCount());
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/event/SelectionEventsTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/event/SelectionEventsTest.java
index 5268eb1..37195b8 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/event/SelectionEventsTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/selection/event/SelectionEventsTest.java
@@ -26,26 +26,26 @@
 
 public class SelectionEventsTest {
 
-    public static boolean NO_SHIFT = false;
-    public static boolean NO_CTRL = false;
+    public static final boolean NO_SHIFT = false;
+    public static final boolean NO_CTRL = false;
 
-    public static boolean WITH_SHIFT = true;
-    public static boolean WITH_CTRL = true;
+    public static final boolean WITH_SHIFT = true;
+    public static final boolean WITH_CTRL = true;
 
-    NatTableFixture nattable;
+    NatTableFixture natTable;
     private LayerListenerFixture listener;
 
     @Before
     public void setup() {
-        this.nattable = new NatTableFixture();
+        this.natTable = new NatTableFixture();
         this.listener = new LayerListenerFixture();
-        this.nattable.addLayerListener(this.listener);
+        this.natTable.addLayerListener(this.listener);
     }
 
     @Test
     public void shouldFireCellSelectionEvent() {
         // Grid coordinates
-        this.nattable.doCommand(new SelectCellCommand(this.nattable, 1, 5, NO_SHIFT, NO_CTRL));
+        this.natTable.doCommand(new SelectCellCommand(this.natTable, 1, 5, NO_SHIFT, NO_CTRL));
 
         assertEquals(1, this.listener.getEventsCount());
         assertTrue(this.listener.containsInstanceOf(CellSelectionEvent.class));
@@ -58,7 +58,7 @@
     @Test
     public void shouldFireRowSelectionEvent() {
         // Select single row
-        this.nattable.doCommand(new SelectRowsCommand(this.nattable, 5, 5, NO_SHIFT, NO_CTRL));
+        this.natTable.doCommand(new SelectRowsCommand(this.natTable, 5, 5, NO_SHIFT, NO_CTRL));
 
         assertEquals(1, this.listener.getEventsCount());
         assertTrue(this.listener.containsInstanceOf(RowSelectionEvent.class));
@@ -68,7 +68,7 @@
         assertEquals(6, event.getRowPositionRanges().iterator().next().end);
 
         // Select additional rows with shift
-        this.nattable.doCommand(new SelectRowsCommand(this.nattable, 5, 7, WITH_SHIFT, NO_CTRL));
+        this.natTable.doCommand(new SelectRowsCommand(this.natTable, 5, 7, WITH_SHIFT, NO_CTRL));
         assertEquals(2, this.listener.getEventsCount());
         assertTrue(this.listener.containsInstanceOf(RowSelectionEvent.class));
 
@@ -81,7 +81,7 @@
 
     @Test
     public void shouldFireColumnSelectionEvent() {
-        this.nattable.doCommand(new SelectColumnCommand(this.nattable, 5, 5, NO_SHIFT, NO_CTRL));
+        this.natTable.doCommand(new SelectColumnCommand(this.natTable, 5, 5, NO_SHIFT, NO_CTRL));
 
         assertEquals(2, this.listener.getEventsCount());
         assertTrue(this.listener.containsInstanceOf(ColumnSelectionEvent.class));
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/style/StyleInheritanceTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/style/StyleInheritanceTest.java
index d0d377c..a5bb0ec 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/style/StyleInheritanceTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/style/StyleInheritanceTest.java
@@ -60,16 +60,14 @@
                 this.superCellStyle);
 
         // Setup even row style
-        this.evenCellStyle = new Style() {
-            {
-                setAttributeValue(
-                        CellStyleAttributes.BACKGROUND_COLOR,
-                        Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
-                setAttributeValue(
-                        CellStyleAttributes.FOREGROUND_COLOR,
-                        Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
-            }
-        };
+        this.evenCellStyle = new Style();
+        this.evenCellStyle.setAttributeValue(
+                CellStyleAttributes.BACKGROUND_COLOR,
+                Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
+        this.evenCellStyle.setAttributeValue(
+                CellStyleAttributes.FOREGROUND_COLOR,
+                Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+
         this.configRegistry.registerConfigAttribute(
                 CellConfigAttributes.CELL_STYLE,
                 this.evenCellStyle,
@@ -77,13 +75,10 @@
                 AlternatingRowConfigLabelAccumulator.ODD_ROW_CONFIG_TYPE);
 
         // Setup odd row style
-        this.oddCellStyle = new Style() {
-            {
-                setAttributeValue(
-                        CellStyleAttributes.FOREGROUND_COLOR,
-                        Display.getDefault().getSystemColor(SWT.COLOR_RED));
-            }
-        };
+        this.oddCellStyle = new Style();
+        this.oddCellStyle.setAttributeValue(
+                CellStyleAttributes.FOREGROUND_COLOR,
+                Display.getDefault().getSystemColor(SWT.COLOR_RED));
         this.configRegistry.registerConfigAttribute(
                 CellConfigAttributes.CELL_STYLE,
                 this.oddCellStyle,
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/BorderStyleFixture.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/BorderStyleFixture.java
index 8aa7493..9ad11d2 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/BorderStyleFixture.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/BorderStyleFixture.java
@@ -18,9 +18,9 @@
 
 public class BorderStyleFixture extends BorderStyle {
 
-    public static int THICKNESS = 2;
-    public static Color COLOR = GUIHelper.COLOR_GREEN;
-    public static LineStyleEnum LINE_STYLE = LineStyleEnum.DASHDOT;
+    public static final int THICKNESS = 2;
+    public static final Color COLOR = GUIHelper.COLOR_GREEN;
+    public static final LineStyleEnum LINE_STYLE = LineStyleEnum.DASHDOT;
 
     public BorderStyleFixture() {
         super(2, COLOR, LINE_STYLE);
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ColumnHeaderLayerFixture.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ColumnHeaderLayerFixture.java
index b89b96e..c2fb8f4 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ColumnHeaderLayerFixture.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ColumnHeaderLayerFixture.java
@@ -20,20 +20,19 @@
 public class ColumnHeaderLayerFixture extends ColumnHeaderLayer {
 
     // Viewport is 400px wide
-    public static DataLayer dataLayer = new DataLayerFixture();
-    public static SelectionLayer selectionLayer = new SelectionLayer(dataLayer);
-    public static ViewportLayer bodyLayer = new ViewportLayerFixture(
-            selectionLayer);
+    public static final DataLayer DATA_LAYER = new DataLayerFixture();
+    public static final SelectionLayer SELECTION_LAYER = new SelectionLayer(DATA_LAYER);
+    public static final ViewportLayer BODY_LAYER = new ViewportLayerFixture(SELECTION_LAYER);
 
     public ColumnHeaderLayerFixture() {
-        super(dataLayer, bodyLayer, selectionLayer);
+        super(DATA_LAYER, BODY_LAYER, SELECTION_LAYER);
     }
 
     public ColumnHeaderLayerFixture(ViewportLayer viewportLayer) {
-        super(dataLayer, viewportLayer, selectionLayer);
+        super(DATA_LAYER, viewportLayer, SELECTION_LAYER);
     }
 
     public static DataLayer getDataLayer() {
-        return dataLayer;
+        return DATA_LAYER;
     }
 }
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ViewportLayerFixture.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ViewportLayerFixture.java
index 4457c0b..2c743b0 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ViewportLayerFixture.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/fixture/layer/ViewportLayerFixture.java
@@ -28,9 +28,9 @@
  */
 public class ViewportLayerFixture extends ViewportLayer {
 
-    public static Rectangle DEFAULT_CLIENT_AREA = new Rectangle(0, 0, 200, 100);
-    public static IClientAreaProvider DEFAULT_CLIENT_AREA_PROVIDER = getClientAreaProvider(DEFAULT_CLIENT_AREA);
-    public static Scrollable DEFAULT_SCROLLABLE = scrollable();
+    public static final Rectangle DEFAULT_CLIENT_AREA = new Rectangle(0, 0, 200, 100);
+    public static final IClientAreaProvider DEFAULT_CLIENT_AREA_PROVIDER = getClientAreaProvider(DEFAULT_CLIENT_AREA);
+    public static final Scrollable DEFAULT_SCROLLABLE = scrollable();
 
     /**
      * Default Xtor
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/integration/PersistenceIntegrationTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/integration/PersistenceIntegrationTest.java
index 9e15824..cfc33fa 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/integration/PersistenceIntegrationTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/test/integration/PersistenceIntegrationTest.java
@@ -13,7 +13,6 @@
 package org.eclipse.nebula.widgets.nattable.test.integration;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 
 import java.util.Properties;
 
@@ -48,10 +47,8 @@
                             IUniqueIndexLayer columnHeaderDataLayer,
                             IUniqueIndexLayer rowHeaderDataLayer,
                             IUniqueIndexLayer cornerDataLayer) {
-                        RowReorderLayer rowReorderLayer = new RowReorderLayer(
-                                bodyDataLayer);
-                        super.init(rowReorderLayer, columnHeaderDataLayer,
-                                rowHeaderDataLayer, cornerDataLayer);
+                        RowReorderLayer rowReorderLayer = new RowReorderLayer(bodyDataLayer);
+                        super.init(rowReorderLayer, columnHeaderDataLayer, rowHeaderDataLayer, cornerDataLayer);
                     }
 
                 });
@@ -75,21 +72,18 @@
     public void saveStateToPropeties() throws Exception {
         // Resize column 2 to 200px
         assertEquals(100, this.natTableFixture.getColumnWidthByPosition(2));
-        this.natTableFixture.doCommand(new ColumnResizeCommand(this.natTableFixture, 2,
-                200));
+        this.natTableFixture.doCommand(new ColumnResizeCommand(this.natTableFixture, 2, 200));
         assertEquals(200, this.natTableFixture.getColumnWidthByPosition(2));
 
         // Resize row 2 to 100px
         assertEquals(20, this.natTableFixture.getRowHeightByPosition(2));
-        this.natTableFixture
-                .doCommand(new RowResizeCommand(this.natTableFixture, 2, 100));
+        this.natTableFixture.doCommand(new RowResizeCommand(this.natTableFixture, 2, 100));
         assertEquals(100, this.natTableFixture.getRowHeightByPosition(2));
 
         // Reorder column 1 --> 5 (grid coordinates)
         // 0, 1, 2, 3, 4, 5,.. --> 1, 2, 3, 0, 4, 5,..
         assertEquals(0, this.natTableFixture.getColumnIndexByPosition(1));
-        this.natTableFixture.doCommand(new ColumnReorderCommand(this.natTableFixture, 1,
-                5));
+        this.natTableFixture.doCommand(new ColumnReorderCommand(this.natTableFixture, 1, 5));
         assertEquals(1, this.natTableFixture.getColumnIndexByPosition(1));
 
         // Reorder row 1 --> 5 (grid coordinates)
@@ -108,65 +102,59 @@
         // Ensure that properties got persisted
         assertEquals(
                 "true",
-                this.properties
-                        .get("testPrefix.COLUMN_HEADER.columnWidth.resizableByDefault"));
+                this.properties.get("testPrefix.COLUMN_HEADER.columnWidth.resizableByDefault"));
         assertEquals(
                 "100",
-                this.properties
-                        .get("testPrefix.COLUMN_HEADER.columnWidth.defaultSize"));
+                this.properties.get("testPrefix.COLUMN_HEADER.columnWidth.defaultSize"));
         assertEquals(
                 "true",
-                this.properties
-                        .get("testPrefix.COLUMN_HEADER.rowHeight.resizableByDefault"));
+                this.properties.get("testPrefix.COLUMN_HEADER.rowHeight.resizableByDefault"));
 
-        assertEquals("40",
+        assertEquals(
+                "40",
                 this.properties.get("testPrefix.ROW_HEADER.columnWidth.defaultSize"));
         assertEquals(
                 "true",
-                this.properties
-                        .get("testPrefix.ROW_HEADER.rowHeight.resizableByDefault"));
+                this.properties.get("testPrefix.ROW_HEADER.rowHeight.resizableByDefault"));
         assertEquals(
                 "true",
-                this.properties
-                        .get("testPrefix.ROW_HEADER.columnWidth.resizableByDefault"));
-        assertEquals("40",
+                this.properties.get("testPrefix.ROW_HEADER.columnWidth.resizableByDefault"));
+        assertEquals(
+                "40",
                 this.properties.get("testPrefix.ROW_HEADER.rowHeight.defaultSize"));
 
-        assertEquals("20",
+        assertEquals(
+                "20",
                 this.properties.get("testPrefix.CORNER.rowHeight.defaultSize"));
         assertEquals(
                 "true",
-                this.properties
-                        .get("testPrefix.CORNER.columnWidth.resizableByDefault"));
-        assertEquals("true",
-                this.properties
-                        .get("testPrefix.CORNER.rowHeight.resizableByDefault"));
+                this.properties.get("testPrefix.CORNER.columnWidth.resizableByDefault"));
+        assertEquals(
+                "true",
+                this.properties.get("testPrefix.CORNER.rowHeight.resizableByDefault"));
 
-        assertEquals("20",
+        assertEquals(
+                "20",
                 this.properties.get("testPrefix.BODY.rowHeight.defaultSize"));
-        assertEquals("true",
+        assertEquals(
+                "true",
                 this.properties.get("testPrefix.BODY.rowHeight.resizableByDefault"));
-        assertEquals("true",
-                this.properties
-                        .get("testPrefix.BODY.columnWidth.resizableByDefault"));
-        assertEquals("1,2,3,0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19",
+        assertEquals(
+                "true",
+                this.properties.get("testPrefix.BODY.columnWidth.resizableByDefault"));
+        assertEquals(
+                "1,2,3,0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19",
                 this.properties.get("testPrefix.BODY.columnIndexOrder"));
-        assertEquals("1:100,",
+        assertEquals(
+                "1:100,",
                 this.properties.get("testPrefix.BODY.rowHeight.sizes"));
-        assertEquals("1:200,",
+        assertEquals(
+                "1:200,",
                 this.properties.get("testPrefix.BODY.columnWidth.sizes"));
     }
 
     @Test
-    public void tableShouldDefaultProperlyIfNoPropertiesAreLoaded()
-            throws Exception {
-        boolean exceptionOccured = false;
-        try {
-            this.natTableFixture.loadState(TEST_PERSISTENCE_PREFIX, this.properties);
-        } catch (Exception e) {
-            e.printStackTrace();
-            exceptionOccured = true;
-        }
-        assertFalse(exceptionOccured);
+    public void tableShouldDefaultProperlyIfNoPropertiesAreLoaded() throws Exception {
+        this.natTableFixture.loadState(TEST_PERSISTENCE_PREFIX, this.properties);
     }
 }
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/tree/TreeLayerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/tree/TreeLayerTest.java
index f852967..a7fcd39 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/tree/TreeLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/tree/TreeLayerTest.java
@@ -298,7 +298,7 @@
             // identify the parent node element
             String current = null;
             for (Person p : this.values) {
-                if (p.getLastName() != current) {
+                if (!p.getLastName().equals(current)) {
                     this.firstElementMapping.put(p.getLastName(), p);
                     current = p.getLastName();
                 }
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/util/CalculatedValueCacheTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/util/CalculatedValueCacheTest.java
index aa6ac84..b49e3d4 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/util/CalculatedValueCacheTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/util/CalculatedValueCacheTest.java
@@ -33,6 +33,7 @@
             try {
                 Thread.sleep(200);
             } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
             }
 
             return Integer.valueOf(42);
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/blink/UpdateEventsCache.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/blink/UpdateEventsCache.java
index b816e8a..b400ec0 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/blink/UpdateEventsCache.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/blink/UpdateEventsCache.java
@@ -34,10 +34,10 @@
 public class UpdateEventsCache<T> {
 
     /** Initial startup delay for the expired event removal task */
-    public static final int INITIAL_DELAY = 100;
+    public static final long INITIAL_DELAY = 100;
 
     /** TTL for an event in the cache. The event is deleted when this expires */
-    public static final int TIME_TO_LIVE = 500;
+    public static final long TIME_TO_LIVE = 500;
 
     private final IRowIdAccessor<T> rowIdAccessor;
     private final KeyStrategy keyStrategy;
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/conflation/EventConflaterChain.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/conflation/EventConflaterChain.java
index 48e9dd8..fbf2fda 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/conflation/EventConflaterChain.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/conflation/EventConflaterChain.java
@@ -26,8 +26,8 @@
  */
 public class EventConflaterChain implements IEventConflater {
 
-    public static final int DEFAULT_INITIAL_DELAY = 100;
-    public static final int DEFAULT_REFRESH_INTERVAL = 20;
+    public static final long DEFAULT_INITIAL_DELAY = 100;
+    public static final long DEFAULT_REFRESH_INTERVAL = 20;
     private static final Scheduler scheduler = new Scheduler("EventConflaterChain"); //$NON-NLS-1$
 
     private final List<IEventConflater> chain = new LinkedList<IEventConflater>();
@@ -40,7 +40,10 @@
         this(DEFAULT_REFRESH_INTERVAL, DEFAULT_INITIAL_DELAY);
     }
 
-    public EventConflaterChain(int refreshInterval, int initialDelay) {
+    /**
+     * @since 2.0
+     */
+    public EventConflaterChain(long refreshInterval, long initialDelay) {
         this.refreshInterval = refreshInterval;
         this.initialDelay = initialDelay;
     }
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java
index 1556e3f..e04daad 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java
@@ -35,8 +35,7 @@
  * FilterRowComboBoxCellEditor as editor for the filter row with its necessary
  * configurations regarding matching mode, converter and painter.
  */
-public class ComboBoxFilterRowConfiguration extends
-        AbstractRegistryConfiguration {
+public class ComboBoxFilterRowConfiguration extends AbstractRegistryConfiguration {
 
     /**
      * The ICellEditor that should be used for the filter cells. Usually it
@@ -70,20 +69,35 @@
      *            The IComboBoxDataProvider that is used to fill the filter row
      *            comboboxes.
      */
-    public ComboBoxFilterRowConfiguration(
-            IComboBoxDataProvider comboBoxDataProvider) {
-        this.cellEditor = new FilterRowComboBoxCellEditor(comboBoxDataProvider,
-                10);
-        this.filterIconPainter = new ComboBoxFilterIconPainter(
-                comboBoxDataProvider);
+    public ComboBoxFilterRowConfiguration(IComboBoxDataProvider comboBoxDataProvider) {
+        this.cellEditor = new FilterRowComboBoxCellEditor(comboBoxDataProvider, 10);
+        this.filterIconPainter = new ComboBoxFilterIconPainter(comboBoxDataProvider);
+    }
+
+    /**
+     * Create a ComboBoxFilterRowConfiguration with the given filter cell editor
+     * and filter icon painter.
+     *
+     * @param cellEditor
+     *            The {@link ICellEditor} that should be used in the filter row.
+     * @param filterIconPainter
+     *            The {@link ImagePainter} that should be used to render a
+     *            filter icon in the filter row.
+     * @since 2.0
+     */
+    public ComboBoxFilterRowConfiguration(ICellEditor cellEditor, ImagePainter filterIconPainter) {
+        this.cellEditor = cellEditor;
+        this.filterIconPainter = filterIconPainter;
     }
 
     @Override
     public void configureRegistry(IConfigRegistry configRegistry) {
 
         configRegistry.registerConfigAttribute(
-                EditConfigAttributes.CELL_EDITOR, this.cellEditor,
-                DisplayMode.NORMAL, GridRegion.FILTER_ROW);
+                EditConfigAttributes.CELL_EDITOR,
+                this.cellEditor,
+                DisplayMode.NORMAL,
+                GridRegion.FILTER_ROW);
 
         configRegistry.registerConfigAttribute(
                 FilterRowConfigAttributes.TEXT_MATCHING_MODE,
@@ -99,21 +113,21 @@
             // selection will be taken into account for auto resizing
 
             @Override
-            public int getPreferredWidth(ILayerCell cell, GC gc,
-                    IConfigRegistry configRegistry) {
+            public int getPreferredWidth(ILayerCell cell, GC gc, IConfigRegistry configRegistry) {
                 return 0;
             }
 
             @Override
-            public int getPreferredHeight(ILayerCell cell, GC gc,
-                    IConfigRegistry configRegistry) {
+            public int getPreferredHeight(ILayerCell cell, GC gc, IConfigRegistry configRegistry) {
                 return 0;
             }
         }, CellEdgeEnum.RIGHT, this.filterIconPainter);
 
         configRegistry.registerConfigAttribute(
-                CellConfigAttributes.CELL_PAINTER, cellPainter,
-                DisplayMode.NORMAL, GridRegion.FILTER_ROW);
+                CellConfigAttributes.CELL_PAINTER,
+                cellPainter,
+                DisplayMode.NORMAL,
+                GridRegion.FILTER_ROW);
     }
 
 }
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/cell/LayerCell.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/cell/LayerCell.java
index 4ac897f..b36ec1a 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/cell/LayerCell.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/cell/LayerCell.java
@@ -80,12 +80,18 @@
 
     @Override
     public int getColumnIndex() {
-        return getLayer().getColumnIndexByPosition(getColumnPosition());
+        if (getLayer() != null) {
+            return getLayer().getColumnIndexByPosition(getColumnPosition());
+        }
+        return getColumnPosition();
     }
 
     @Override
     public int getRowIndex() {
-        return getLayer().getRowIndexByPosition(getRowPosition());
+        if (getLayer() != null) {
+            return getLayer().getRowIndexByPosition(getRowPosition());
+        }
+        return getRowPosition();
     }
 
     @Override
diff --git a/org.eclipse.nebula.widgets.nattable.dataset.test/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGeneratorTest.java b/org.eclipse.nebula.widgets.nattable.dataset.test/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGeneratorTest.java
index 2f5a0c1..f907b07 100644
--- a/org.eclipse.nebula.widgets.nattable.dataset.test/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGeneratorTest.java
+++ b/org.eclipse.nebula.widgets.nattable.dataset.test/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGeneratorTest.java
@@ -24,8 +24,7 @@
     @Test
     public void testGenerate() {
         try {
-            PricingDataBean pricingDataBean = new DataGenerator<PricingDataBean>()
-                    .generate(PricingDataBean.class);
+            PricingDataBean pricingDataBean = new DataGenerator<PricingDataBean>().generate(PricingDataBean.class);
 
             assertNotNull(pricingDataBean);
             assertTrue(pricingDataBean.getBid() >= 0.0d);
@@ -39,7 +38,6 @@
 
             assertNotNull(pricingDataBean.getPricingSource());
         } catch (GeneratorException e) {
-            e.printStackTrace();
             fail(e.getMessage() + " : " + e.getCause().getMessage());
         }
     }
diff --git a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/car/CarService.java b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/car/CarService.java
index b556998..de9c13c 100644
--- a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/car/CarService.java
+++ b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/car/CarService.java
@@ -20,7 +20,7 @@
 
 public class CarService {
 
-    public static String[] PROPERTY_NAMES = {
+    private static final String[] PROPERTY_NAMES = {
             "manufacturer",
             "model",
             "motors.identifier",
@@ -32,7 +32,7 @@
             "motors.feedbacks.comment"
     };
 
-    public static String[] PROPERTY_NAMES_COMPACT = {
+    private static final String[] PROPERTY_NAMES_COMPACT = {
             "manufacturer",
             "model",
             "motors.identifier",
@@ -86,4 +86,12 @@
         return input;
     }
 
+    public static String[] getPropertyNames() {
+        return PROPERTY_NAMES;
+    }
+
+    public static String[] getPropertyNamesCompact() {
+        return PROPERTY_NAMES_COMPACT;
+    }
+
 }
diff --git a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGenerator.java b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGenerator.java
index 922d301..a552e4c 100644
--- a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGenerator.java
+++ b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/DataGenerator.java
@@ -35,8 +35,7 @@
 
             for (Field field : dataClass.getDeclaredFields()) {
 
-                final IValueGenerator generator = generatorFactory
-                        .createValueGenerator(field);
+                final IValueGenerator generator = generatorFactory.createValueGenerator(field);
                 if (generator != null) {
                     setField(dataClass, dataContainer, field, generator);
                 }
@@ -44,23 +43,7 @@
 
             return dataContainer;
 
-        } catch (InstantiationException ie) {
-            ie.printStackTrace();
-            throw new GeneratorException(ie);
-        } catch (IllegalAccessException iae) {
-            iae.printStackTrace();
-            throw new GeneratorException(iae);
-        } catch (SecurityException se) {
-            se.printStackTrace();
-            throw new GeneratorException(se);
-        } catch (NoSuchMethodException nsme) {
-            nsme.printStackTrace();
-            throw new GeneratorException(nsme);
-        } catch (IllegalArgumentException e) {
-            e.printStackTrace();
-            throw new GeneratorException(e);
-        } catch (InvocationTargetException e) {
-            e.printStackTrace();
+        } catch (Exception e) {
             throw new GeneratorException(e);
         }
     }
@@ -81,70 +64,52 @@
     }
 
     private static interface IValueGeneratorFactory {
-        IValueGenerator createValueGenerator(Field field)
-                throws InstantiationException, IllegalAccessException;
+        IValueGenerator createValueGenerator(Field field) throws InstantiationException, IllegalAccessException;
     }
 
-    private static class DataValueGeneratorFactory implements
-            IValueGeneratorFactory {
+    private static class DataValueGeneratorFactory implements IValueGeneratorFactory {
         @Override
-        public IValueGenerator createValueGenerator(Field field)
-                throws InstantiationException, IllegalAccessException {
+        public IValueGenerator createValueGenerator(Field field) throws InstantiationException, IllegalAccessException {
             field.setAccessible(true);
-            DataValueGenerator annotation = field
-                    .getAnnotation(DataValueGenerator.class);
+            DataValueGenerator annotation = field.getAnnotation(DataValueGenerator.class);
             // Class<? extends IValueGenerator> generatorClass =
             // annotation.value();
-            Class<? extends IValueGenerator> generatorClass = annotation
-                    .value();
+            Class<? extends IValueGenerator> generatorClass = annotation.value();
             return generatorClass.newInstance();
         }
     }
 
-    private static class DoubleValueGeneratorFactory implements
-            IValueGeneratorFactory {
+    private static class DoubleValueGeneratorFactory implements IValueGeneratorFactory {
         @Override
-        public IValueGenerator createValueGenerator(Field field)
-                throws InstantiationException, IllegalAccessException {
+        public IValueGenerator createValueGenerator(Field field) throws InstantiationException, IllegalAccessException {
             field.setAccessible(true);
-            GenerateDouble generateDouble = field
-                    .getAnnotation(GenerateDouble.class);
-            return new DoubleValueGenerator(generateDouble.floor(),
-                    generateDouble.range());
+            GenerateDouble generateDouble = field.getAnnotation(GenerateDouble.class);
+            return new DoubleValueGenerator(generateDouble.floor(), generateDouble.range());
         }
     }
 
-    private static class StringListValueGeneratorFactory implements
-            IValueGeneratorFactory {
+    private static class StringListValueGeneratorFactory implements IValueGeneratorFactory {
         @Override
-        public IValueGenerator createValueGenerator(Field field)
-                throws InstantiationException, IllegalAccessException {
+        public IValueGenerator createValueGenerator(Field field) throws InstantiationException, IllegalAccessException {
             field.setAccessible(true);
-            GenerateListOfStrings generateList = field
-                    .getAnnotation(GenerateListOfStrings.class);
-            return new ListValueGenerator<String>(
-                    generateList.nullLoadFactor(), generateList.values());
+            GenerateListOfStrings generateList = field.getAnnotation(GenerateListOfStrings.class);
+            return new ListValueGenerator<String>(generateList.nullLoadFactor(), generateList.values());
         }
     }
 
-    private static class ValueGeneratorFactory implements
-            IValueGeneratorFactory {
+    private static class ValueGeneratorFactory implements IValueGeneratorFactory {
         @Override
-        public IValueGenerator createValueGenerator(Field field)
-                throws InstantiationException, IllegalAccessException {
+        public IValueGenerator createValueGenerator(Field field) throws InstantiationException, IllegalAccessException {
             if (field.isAnnotationPresent(DataValueGenerator.class)) {
-                return new DataValueGeneratorFactory()
-                        .createValueGenerator(field);
+                return new DataValueGeneratorFactory().createValueGenerator(field);
             }
 
             if (field.isAnnotationPresent(GenerateDouble.class)) {
-                return new DoubleValueGeneratorFactory()
-                        .createValueGenerator(field);
+                return new DoubleValueGeneratorFactory().createValueGenerator(field);
             }
 
             if (field.isAnnotationPresent(GenerateListOfStrings.class)) {
-                return new StringListValueGeneratorFactory()
-                        .createValueGenerator(field);
+                return new StringListValueGeneratorFactory().createValueGenerator(field);
             }
 
             return null;
diff --git a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/NatTableDataGenerator.java b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/NatTableDataGenerator.java
index a00ef48..ed698e4 100644
--- a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/NatTableDataGenerator.java
+++ b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/generator/NatTableDataGenerator.java
@@ -52,15 +52,13 @@
     private void initColumnDataTypes() {
         this.columnDataTypes = new ArrayList<ColumnDataType>();
         for (int i = 0; i < this.numCols; i++) {
-            ColumnDataType dataType = ColumnDataType.values()[(int) (Math
-                    .random() * ColumnDataType.values().length)];
+            ColumnDataType dataType = ColumnDataType.values()[(int) (Math.random() * ColumnDataType.values().length)];
             this.columnDataTypes.add(dataType);
         }
     }
 
-    public void persistData(final String fileName) {
-        try {
-            BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
+    public void persistData(final String fileName) throws IOException, GeneratorException {
+        try (BufferedWriter out = new BufferedWriter(new FileWriter(fileName))) {
             // first write the data types
             for (int i = 0; i < this.columnDataTypes.size(); i++) {
                 ColumnDataType dataType = this.columnDataTypes.get(i);
@@ -78,12 +76,10 @@
                     ColumnValueBean<?> value = null;
                     switch (dataType) {
                         case STRING_DATA:
-                            value = stringGenerator
-                                    .generate(StringColumnValueBean.class);
+                            value = stringGenerator.generate(StringColumnValueBean.class);
                             break;
                         case DOUBLE_DATA:
-                            value = doubleGenerator
-                                    .generate(DoubleColumnValueBean.class);
+                            value = doubleGenerator.generate(DoubleColumnValueBean.class);
                             break;
                     }
                     String stringValue = (value == null || value.getValue() == null) ? " "
@@ -102,20 +98,13 @@
                 }
                 out.newLine();
             }
-            out.close();
             System.out.println("done");
-        } catch (IOException e) {
-            e.printStackTrace();
-            System.exit(-1);
-        } catch (GeneratorException e) {
-            e.printStackTrace();
-            System.exit(-1);
         }
 
     }
 
     // TODO: file dimensions should be embedded in the file
-    public void getNumRows(String fileName) {
+    public void getNumRows(String fileName) throws IOException {
         try (BufferedReader bro = new BufferedReader(new FileReader(fileName))) {
 
             String stringFromFile = bro.readLine();
@@ -124,17 +113,11 @@
                 this.numRows++;
                 stringFromFile = bro.readLine(); // read next line
             }
-        } catch (FileNotFoundException filenotfoundexxption) {
-            System.out.println(fileName + ", does not exist");
-            System.exit(-1);
-        } catch (IOException ioexception) {
-            ioexception.printStackTrace();
-            System.exit(-1);
         }
         this.numRows--; // first row contains the data types of the columns
     }
 
-    public TableDataProvider loadData(final String fileName) {
+    public TableDataProvider loadData(final String fileName) throws FileNotFoundException, IOException {
 
         // need to pass through file first to get matrix dimensions
         getNumRows(fileName);
@@ -167,12 +150,6 @@
                     System.out.print(".");
             }
             System.out.println("done");
-        } catch (FileNotFoundException filenotfoundexxption) {
-            System.out.println(fileName + ", does not exist");
-            System.exit(-1);
-        } catch (IOException ioexception) {
-            ioexception.printStackTrace();
-            System.exit(-1);
         }
 
         return new TableDataProvider(tableData, this.numCols, this.numRows);
@@ -251,7 +228,7 @@
         }
     };
 
-    public static void main(String[] args) {
+    public static void main(String[] args) throws GeneratorException, IOException {
         NatTableDataGenerator dataGenerator;
         String fileName;
 
diff --git a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/DataModelConstants.java b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/DataModelConstants.java
index a729e18..63fbb50 100644
--- a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/DataModelConstants.java
+++ b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/DataModelConstants.java
@@ -41,7 +41,7 @@
     public static final String POSTALCODE_PROPERTYNAME = "postalCode";
     public static final String CITY_PROPERTYNAME = "city";
 
-    public static final String[] PERSON_PROPERTY_NAMES = {
+    private static final String[] PERSON_PROPERTY_NAMES = {
             FIRSTNAME_PROPERTYNAME,
             LASTNAME_PROPERTYNAME,
             GENDER_PROPERTYNAME,
@@ -49,7 +49,11 @@
             BIRTHDAY_PROPERTYNAME
     };
 
-    public static final String[] PERSONWITHADDRESS_PROPERTY_NAMES = {
+    public static String[] getPersonPropertyNames() {
+        return PERSON_PROPERTY_NAMES;
+    }
+
+    private static final String[] PERSONWITHADDRESS_PROPERTY_NAMES = {
             FIRSTNAME_PROPERTYNAME,
             LASTNAME_PROPERTYNAME,
             GENDER_PROPERTYNAME,
@@ -60,4 +64,8 @@
             POSTALCODE_PROPERTYNAME,
             CITY_PROPERTYNAME
     };
+
+    public static String[] getPersonwithaddressPropertyNames() {
+        return PERSONWITHADDRESS_PROPERTY_NAMES;
+    }
 }
diff --git a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/PersonService.java b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/PersonService.java
index 0b418eb..0d481b7 100644
--- a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/PersonService.java
+++ b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/person/PersonService.java
@@ -287,7 +287,7 @@
         try {
             result.setBirthday(sdf.parse("" + year + "-" + month + "-" + day));
         } catch (ParseException e) {
-            e.printStackTrace();
+            // do nothing as there should be no parse exception;
         }
 
         result.setMoney(randomGenerator.nextDouble() * 100);
diff --git a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/pricing/ColumnHeaders.java b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/pricing/ColumnHeaders.java
index bfa75db..ba34ffc 100644
--- a/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/pricing/ColumnHeaders.java
+++ b/org.eclipse.nebula.widgets.nattable.dataset/src/org/eclipse/nebula/widgets/nattable/dataset/pricing/ColumnHeaders.java
@@ -16,30 +16,12 @@
 import java.util.Map;
 
 public enum ColumnHeaders {
-    ONE("ISIN", "isin", String.class),
-    TWO("Bid", "bid", Double.class),
-    THREE("Ask", "ask", Double.class),
-    FOUR("Pricing Model", "pricingModel", String.class),
-    FIVE("Ask Yield", "askYield", Double.class),
-    SIX("Bid Yield", "bidYield", Double.class),
-    SEVEN("(p) Bid/Ask", "bidOverAsk", Double.class),
-    EIGHT("Bid Ask Type", "bidAskType", String.class),
-    NINE("Base Issue", "baseIssue", String.class),
-    TEN("Closing Price", "closingPrice", Double.class),
-    ELEVEN("Closing Yield", "closingYield", Double.class),
-    TWELVE("Closing Spread", "closingSpread", Double.class),
-    THIRTEEN("Price Change", "priceChange", Double.class),
-    FOURTEEN("Yield Change", "yieldChange", Double.class),
-    FIFTEEN("Spread Change", "spreadChange", Double.class),
-    SIXTEEN("Alias", "alias", String.class),
-    SEVENTEEN("Basis Point Value", "basisPointValue", Double.class),
-    EIGHTEEN("Mod. Duration", "modDuration", Double.class),
-    NINETEEN("Convexity", "convexity", Double.class),
-    TWENTY("Native Trading Group", "nativeTradingGroup", String.class),
-    TWENTYONE("Error Severity", "errorSeverity", Double.class),
-    TWENTYTWO("Error Message", "errorMessage", String.class),
-    TWENTYTHREE("Pricing Source", "pricingSource", String.class),
-    TWENTYFOUR("Security Type", "securityType", String.class);
+    ONE("ISIN", "isin", String.class), TWO("Bid", "bid", Double.class), THREE("Ask", "ask", Double.class), FOUR("Pricing Model", "pricingModel", String.class), FIVE("Ask Yield", "askYield", Double.class), SIX("Bid Yield", "bidYield",
+            Double.class), SEVEN("(p) Bid/Ask", "bidOverAsk", Double.class), EIGHT("Bid Ask Type", "bidAskType", String.class), NINE("Base Issue", "baseIssue", String.class), TEN("Closing Price", "closingPrice", Double.class), ELEVEN(
+                    "Closing Yield", "closingYield", Double.class), TWELVE("Closing Spread", "closingSpread", Double.class), THIRTEEN("Price Change", "priceChange", Double.class), FOURTEEN("Yield Change", "yieldChange",
+                            Double.class), FIFTEEN("Spread Change", "spreadChange", Double.class), SIXTEEN("Alias", "alias", String.class), SEVENTEEN("Basis Point Value", "basisPointValue", Double.class), EIGHTEEN("Mod. Duration",
+                                    "modDuration", Double.class), NINETEEN("Convexity", "convexity", Double.class), TWENTY("Native Trading Group", "nativeTradingGroup", String.class), TWENTYONE("Error Severity", "errorSeverity",
+                                            Double.class), TWENTYTWO("Error Message", "errorMessage", String.class), TWENTYTHREE("Pricing Source", "pricingSource", String.class), TWENTYFOUR("Security Type", "securityType", String.class);
 
     private String label;
     private String property;
@@ -64,10 +46,6 @@
         return this.label;
     }
 
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
     public static String[] getProperties() {
         String properties[] = new String[ColumnHeaders.values().length];
         int colIndex = 0;
@@ -101,10 +79,6 @@
         return this.property;
     }
 
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
     public Class<?> getType() {
         return this.type;
     }
diff --git a/org.eclipse.nebula.widgets.nattable.examples.e4/src/org/eclipse/nebula/widgets/nattable/examples/e4/AbstractE4NatExamplePart.java b/org.eclipse.nebula.widgets.nattable.examples.e4/src/org/eclipse/nebula/widgets/nattable/examples/e4/AbstractE4NatExamplePart.java
index a79ad39..e19ed43 100644
--- a/org.eclipse.nebula.widgets.nattable.examples.e4/src/org/eclipse/nebula/widgets/nattable/examples/e4/AbstractE4NatExamplePart.java
+++ b/org.eclipse.nebula.widgets.nattable.examples.e4/src/org/eclipse/nebula/widgets/nattable/examples/e4/AbstractE4NatExamplePart.java
@@ -59,7 +59,7 @@
                 if (!path.startsWith("/")) {
                     path = "/" + path;
                 }
-                String source = getResourceAsString("/src" + path + ".java");
+                String source = getResourceAsText("/src" + path + ".java");
                 if (source != null) {
                     viewSource(part.getLabel(), source);
                 }
@@ -73,7 +73,7 @@
         final SelectionAdapter cssLinkSelectionListener = new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent event) {
-                String source = getResourceAsString(event.text);
+                String source = getResourceAsText(event.text);
                 if (source != null) {
                     viewSource("default.css", source);
                 }
@@ -82,7 +82,7 @@
         cssLink.addSelectionListener(cssLinkSelectionListener);
     }
 
-    private String getResourceAsString(String resource) {
+    private String getResourceAsText(String resource) {
         try (InputStream inStream = getClass().getResourceAsStream(resource)) {
             if (inStream != null) {
                 StringBuilder builder = new StringBuilder();
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_302_CustomColumnPropertyAccessorExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_302_CustomColumnPropertyAccessorExample.java
index a665ac2..d1a280d 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_302_CustomColumnPropertyAccessorExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_302_CustomColumnPropertyAccessorExample.java
@@ -197,12 +197,12 @@
 
         @Override
         public String getColumnProperty(int columnIndex) {
-            return DataModelConstants.PERSONWITHADDRESS_PROPERTY_NAMES[columnIndex];
+            return DataModelConstants.getPersonwithaddressPropertyNames()[columnIndex];
         }
 
         @Override
         public int getColumnIndex(String propertyName) {
-            return Arrays.asList(DataModelConstants.PERSONWITHADDRESS_PROPERTY_NAMES).indexOf(propertyName);
+            return Arrays.asList(DataModelConstants.getPersonwithaddressPropertyNames()).indexOf(propertyName);
         }
 
     }
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_303_CalculatedDataExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_303_CalculatedDataExample.java
index db344d7..507f65d 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_303_CalculatedDataExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_303_CalculatedDataExample.java
@@ -69,11 +69,11 @@
  */
 public class _303_CalculatedDataExample extends AbstractNatExample {
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
 
     private EventList<NumberValues> valuesToShow = GlazedLists.eventList(new ArrayList<NumberValues>());
 
@@ -198,8 +198,8 @@
                     return rowObject.getColumnTwoNumber()
                             + rowObject.getColumnThreeNumber();
                 case 4: // calculate the percentage
-                    return new Double(rowObject.getColumnTwoNumber()
-                            + rowObject.getColumnThreeNumber())
+                    return new Double((double) rowObject.getColumnTwoNumber()
+                            + (double) rowObject.getColumnThreeNumber())
                             / rowObject.getColumnOneNumber();
             }
             return null;
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_306_CalculatedFormulaDataExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_306_CalculatedFormulaDataExample.java
index c3e2e08..f557d67 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_306_CalculatedFormulaDataExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_300_Data/_306_CalculatedFormulaDataExample.java
@@ -74,11 +74,11 @@
  */
 public class _306_CalculatedFormulaDataExample extends AbstractNatExample {
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
 
     private EventList<NumberValues> valuesToShow = GlazedLists.eventList(new ArrayList<NumberValues>());
 
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_4222_CellPainterExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_4222_CellPainterExample.java
index 0c092f5..566abba 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_4222_CellPainterExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_4222_CellPainterExample.java
@@ -72,18 +72,18 @@
         return "Example showing the different painters that come with NatTable";
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
-    public static String COLUMN_SIX_LABEL = "ColumnSixLabel";
-    public static String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
-    public static String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
-    public static String COLUMN_NINE_LABEL = "ColumnNineLabel";
-    public static String COLUMN_TEN_LABEL = "ColumnTenLabel";
-    public static String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
-    public static String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_SIX_LABEL = "ColumnSixLabel";
+    public static final String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
+    public static final String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
+    public static final String COLUMN_NINE_LABEL = "ColumnNineLabel";
+    public static final String COLUMN_TEN_LABEL = "ColumnTenLabel";
+    public static final String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
+    public static final String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
 
     private NatTable natTable;
 
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4451_CrossValidationGridExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4451_CrossValidationGridExample.java
index ad45574..da6298d 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4451_CrossValidationGridExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4451_CrossValidationGridExample.java
@@ -63,8 +63,8 @@
  */
 public class _4451_CrossValidationGridExample extends AbstractNatExample {
 
-    public static String DATE_LABEL = "DateLabel";
-    public static String INVALID_LABEL = "InvalidLabel";
+    public static final String DATE_LABEL = "DateLabel";
+    public static final String INVALID_LABEL = "InvalidLabel";
 
     private EventList<EventData> valuesToShow = GlazedLists.eventList(new ArrayList<EventData>());
 
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_446_EditErrorHandlingExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_446_EditErrorHandlingExample.java
index 7c4fb17..cbcae9f 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_446_EditErrorHandlingExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_446_EditErrorHandlingExample.java
@@ -74,15 +74,15 @@
                 + "other exceptions than the defined ones for conversion and validation failures are logged completely.";
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
-    public static String COLUMN_SIX_LABEL = "ColumnSixLabel";
-    public static String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
-    public static String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
-    public static String COLUMN_NINE_LABEL = "ColumnNineLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_SIX_LABEL = "ColumnSixLabel";
+    public static final String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
+    public static final String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
+    public static final String COLUMN_NINE_LABEL = "ColumnNineLabel";
 
     @Override
     public Control createExampleControl(Composite parent) {
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4471_EditorTraversalExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4471_EditorTraversalExample.java
index 8134e2d..a5b9411 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4471_EditorTraversalExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_4471_EditorTraversalExample.java
@@ -61,11 +61,11 @@
         return "";
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
 
     @Override
     public Control createExampleControl(Composite parent) {
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_447_EditorExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_447_EditorExample.java
index 2181955..2a4b16f 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_447_EditorExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_447_EditorExample.java
@@ -87,20 +87,20 @@
         return "";
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
-    public static String COLUMN_SIX_LABEL = "ColumnSixLabel";
-    public static String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
-    public static String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
-    public static String COLUMN_NINE_LABEL = "ColumnNineLabel";
-    public static String COLUMN_TEN_LABEL = "ColumnTenLabel";
-    public static String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
-    public static String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
-    public static String COLUMN_THIRTEEN_LABEL = "ColumnThirteenLabel";
-    public static String COLUMN_FOURTEEN_LABEL = "ColumnFourteenLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_SIX_LABEL = "ColumnSixLabel";
+    public static final String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
+    public static final String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
+    public static final String COLUMN_NINE_LABEL = "ColumnNineLabel";
+    public static final String COLUMN_TEN_LABEL = "ColumnTenLabel";
+    public static final String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
+    public static final String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
+    public static final String COLUMN_THIRTEEN_LABEL = "ColumnThirteenLabel";
+    public static final String COLUMN_FOURTEEN_LABEL = "ColumnFourteenLabel";
 
     @Override
     public Control createExampleControl(Composite parent) {
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_448_CDateTimeEditorExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_448_CDateTimeEditorExample.java
index 98c05ab..b7f89b1 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_448_CDateTimeEditorExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_400_Configuration/_440_Editing/_448_CDateTimeEditorExample.java
@@ -72,12 +72,12 @@
  */
 public class _448_CDateTimeEditorExample extends AbstractNatExample {
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
-    public static String COLUMN_SIX_LABEL = "ColumnSixLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_SIX_LABEL = "ColumnSixLabel";
 
     private EventList<DateValues> valuesToShow = GlazedLists.eventList(new ArrayList<DateValues>());
 
@@ -311,7 +311,7 @@
                             if (canonicalValue != null) {
                                 canonical = (Calendar) canonicalValue;
                             }
-                            return super.canonicalToDisplayValue(canonical.getTime());
+                            return super.canonicalToDisplayValue(canonical != null ? canonical.getTime() : null);
                         }
 
                         @Override
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_505_Selection/_5055_SelectionTraversalExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_505_Selection/_5055_SelectionTraversalExample.java
index 212718d..5917ee1 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_505_Selection/_5055_SelectionTraversalExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_505_Selection/_5055_SelectionTraversalExample.java
@@ -219,11 +219,11 @@
         return panel;
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
 
     private void registerColumnLabels(ColumnOverrideLabelAccumulator columnLabelAccumulator) {
         columnLabelAccumulator.registerColumnOverrides(0, COLUMN_ONE_LABEL);
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_514_TreeLayerExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_514_TreeLayerExample.java
index c53051f..c90c310 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_514_TreeLayerExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_500_Layers/_514_TreeLayerExample.java
@@ -284,7 +284,7 @@
             // identify the parent node element
             String current = null;
             for (PersonWithAddress p : this.values) {
-                if (p.getLastName() != current) {
+                if (!p.getLastName().equals(current)) {
                     this.firstElementMapping.put(p.getLastName(), p);
                     current = p.getLastName();
                 }
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_603_Filter/_6035_ExcelLikeFilterRowCustomTypesExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_603_Filter/_6035_ExcelLikeFilterRowCustomTypesExample.java
index 7b176aa..27ebd00 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_603_Filter/_6035_ExcelLikeFilterRowCustomTypesExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_603_Filter/_6035_ExcelLikeFilterRowCustomTypesExample.java
@@ -134,16 +134,10 @@
                         columnHeaderLayer, columnHeaderDataProvider, configRegistry,
                         false);
         final IComboBoxDataProvider comboBoxDataProvider = filterRowHeaderLayer.getComboBoxDataProvider();
-        filterRowHeaderLayer.addConfiguration(new ComboBoxFilterRowConfiguration() {
-            {
-                this.cellEditor = new FilterRowComboBoxCellEditor(
-                        comboBoxDataProvider, 5);
-                this.filterIconPainter = new ComboBoxFilterIconPainter(
-                        comboBoxDataProvider, GUIHelper
-                                .getImage("filter"),
-                        null);
-            }
-        });
+        filterRowHeaderLayer.addConfiguration(
+                new ComboBoxFilterRowConfiguration(
+                        new FilterRowComboBoxCellEditor(comboBoxDataProvider, 5),
+                        new ComboBoxFilterIconPainter(comboBoxDataProvider, GUIHelper.getImage("filter"), null)));
 
         // build the row header layer
         IDataProvider rowHeaderDataProvider =
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6043_HierarchicalTreeExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6043_HierarchicalTreeExample.java
index 8e458f0..0433cb4 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6043_HierarchicalTreeExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6043_HierarchicalTreeExample.java
@@ -86,12 +86,12 @@
 
         BodyLayerStack bodyLayerStack = new BodyLayerStack(
                 CarService.getInput(),
-                CarService.PROPERTY_NAMES,
-                new HierarchicalWrapperTreeFormat(CarService.PROPERTY_NAMES));
+                CarService.getPropertyNames(),
+                new HierarchicalWrapperTreeFormat(CarService.getPropertyNames()));
 
         // create the column header layer stack
         IDataProvider columnHeaderDataProvider =
-                new DefaultColumnHeaderDataProvider(CarService.PROPERTY_NAMES, propertyToLabelMap);
+                new DefaultColumnHeaderDataProvider(CarService.getPropertyNames(), propertyToLabelMap);
         ILayer columnHeaderLayer = new ColumnHeaderLayer(
                 new DataLayer(columnHeaderDataProvider),
                 bodyLayerStack,
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6044_HierarchicalTreeLayerGridExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6044_HierarchicalTreeLayerGridExample.java
index c053493..22ea8fb 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6044_HierarchicalTreeLayerGridExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6044_HierarchicalTreeLayerGridExample.java
@@ -102,11 +102,11 @@
 
         ConfigRegistry configRegistry = new ConfigRegistry();
 
-        BodyLayerStack bodyLayerStack = new BodyLayerStack(CarService.getInput(), CarService.PROPERTY_NAMES);
+        BodyLayerStack bodyLayerStack = new BodyLayerStack(CarService.getInput(), CarService.getPropertyNames());
 
         // create the column header layer stack
         IDataProvider columnHeaderDataProvider =
-                new DefaultColumnHeaderDataProvider(CarService.PROPERTY_NAMES, propertyToLabelMap);
+                new DefaultColumnHeaderDataProvider(CarService.getPropertyNames(), propertyToLabelMap);
         DataLayer columnHeaderDataLayer = new DataLayer(columnHeaderDataProvider);
         ILayer columnHeaderLayer = new ColumnHeaderLayer(
                 columnHeaderDataLayer,
@@ -145,13 +145,12 @@
 
         NatTable natTable = new NatTable(parent, gridLayer, false);
         natTable.setConfigRegistry(configRegistry);
-        natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {
-            {
-                this.vAlign = VerticalAlignmentEnum.TOP;
-                this.hAlign = HorizontalAlignmentEnum.LEFT;
-                this.cellPainter = new PaddingDecorator(new TextPainter(), 2);
-            }
-        });
+
+        DefaultNatTableStyleConfiguration styleConfig = new DefaultNatTableStyleConfiguration();
+        styleConfig.vAlign = VerticalAlignmentEnum.TOP;
+        styleConfig.hAlign = HorizontalAlignmentEnum.LEFT;
+        styleConfig.cellPainter = new PaddingDecorator(new TextPainter(), 2);
+        natTable.addConfiguration(styleConfig);
 
         // adds the key bindings that allows pressing space bar to
         // expand/collapse tree nodes
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6045_HierarchicalTreeLayerExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6045_HierarchicalTreeLayerExample.java
index e5f2260..43fc726 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6045_HierarchicalTreeLayerExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_600_GlazedLists/_604_Tree/_6045_HierarchicalTreeLayerExample.java
@@ -139,11 +139,11 @@
 
         BodyLayerStack bodyLayerStack = new BodyLayerStack(
                 CarService.getInput(),
-                CarService.PROPERTY_NAMES);
+                CarService.getPropertyNames());
 
         // create the column header layer stack
         IDataProvider columnHeaderDataProvider =
-                new DefaultColumnHeaderDataProvider(CarService.PROPERTY_NAMES, propertyToLabelMap);
+                new DefaultColumnHeaderDataProvider(CarService.getPropertyNames(), propertyToLabelMap);
         DataLayer columnHeaderDataLayer = new DataLayer(columnHeaderDataProvider);
         ILayer columnHeaderLayer = new ColumnHeaderLayer(
                 columnHeaderDataLayer,
@@ -195,8 +195,7 @@
             protected void addAlternateRowColoringConfig(CompositeLayer gridLayer) {
                 // do nothing to avoid the default grid alternate row coloring
                 // needed because the alternate row coloring in the hierarchical
-                // tree
-                // is based on the spanned cells and not per individual row
+                // tree is based on the spanned cells and not per individual row
                 // position
             }
         });
@@ -204,13 +203,11 @@
         NatTable natTable = new NatTable(container, compositeLayer, false);
         natTable.setConfigRegistry(configRegistry);
 
-        natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {
-            {
-                this.vAlign = VerticalAlignmentEnum.TOP;
-                this.hAlign = HorizontalAlignmentEnum.LEFT;
-                this.cellPainter = new PaddingDecorator(new TextPainter(), 2);
-            }
-        });
+        DefaultNatTableStyleConfiguration styleConfig = new DefaultNatTableStyleConfiguration();
+        styleConfig.vAlign = VerticalAlignmentEnum.TOP;
+        styleConfig.hAlign = HorizontalAlignmentEnum.LEFT;
+        styleConfig.cellPainter = new PaddingDecorator(new TextPainter(), 2);
+        natTable.addConfiguration(styleConfig);
 
         // add editing configuration
         natTable.addConfiguration(new AbstractRegistryConfiguration() {
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_700_AdditionalFunctions/_774_MultiExportExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_700_AdditionalFunctions/_774_MultiExportExample.java
index 0e103bc..9c1ba12 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_700_AdditionalFunctions/_774_MultiExportExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_700_AdditionalFunctions/_774_MultiExportExample.java
@@ -68,8 +68,8 @@
 
 public class _774_MultiExportExample extends AbstractNatExample {
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
 
     public static void main(String[] args) throws Exception {
         StandaloneNatExampleRunner.run(600, 480, new _774_MultiExportExample());
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_802_CalculatingGridExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_802_CalculatingGridExample.java
index c367548..006bf11 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_802_CalculatingGridExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_802_CalculatingGridExample.java
@@ -78,11 +78,11 @@
  */
 public class _802_CalculatingGridExample extends AbstractNatExample {
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
 
     private EventList<NumberValues> valuesToShow = GlazedLists.eventList(new ArrayList<NumberValues>());
 
@@ -204,11 +204,10 @@
                 case 2:
                     return rowObject.getColumnThreeNumber();
                 case 3: // calculate the sum
-                    return rowObject.getColumnTwoNumber()
-                            + rowObject.getColumnThreeNumber();
+                    return rowObject.getColumnTwoNumber() + rowObject.getColumnThreeNumber();
                 case 4: // calculate the percentage
-                    return new Double(rowObject.getColumnTwoNumber()
-                            + rowObject.getColumnThreeNumber())
+                    return new Double(
+                            (double) rowObject.getColumnTwoNumber() + (double) rowObject.getColumnThreeNumber())
                             / rowObject.getColumnOneNumber();
             }
             return null;
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_803_CachedCalculatingGridExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_803_CachedCalculatingGridExample.java
index 0b860e5..33e47c3 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_803_CachedCalculatingGridExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_803_CachedCalculatingGridExample.java
@@ -86,11 +86,11 @@
  */
 public class _803_CachedCalculatingGridExample extends AbstractNatExample {
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
 
     private EventList<NumberValues> valuesToShow = GlazedLists.eventList(new ArrayList<NumberValues>());
 
@@ -278,6 +278,7 @@
                                 try {
                                     Thread.sleep(500);
                                 } catch (InterruptedException e) {
+                                    Thread.currentThread().interrupt();
                                 }
                                 return colTwo + colThree;
                             }
@@ -292,15 +293,16 @@
                             @Override
                             public Object executeCalculation() {
                                 // calculate the percentage
-                                int colOne = (Integer) getDataValue(0, rowIndex);
-                                int colTwo = (Integer) getDataValue(1, rowIndex);
-                                int colThree = (Integer) getDataValue(2, rowIndex);
+                                Integer colOne = (Integer) getDataValue(0, rowIndex);
+                                Integer colTwo = (Integer) getDataValue(1, rowIndex);
+                                Integer colThree = (Integer) getDataValue(2, rowIndex);
                                 // add some delay
                                 try {
                                     Thread.sleep(500);
                                 } catch (InterruptedException e) {
+                                    Thread.currentThread().interrupt();
                                 }
-                                return new Double(colTwo + colThree) / colOne;
+                                return new Double(colTwo.doubleValue() + colThree.doubleValue()) / colOne.doubleValue();
                             }
                         });
 
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_804_GlazedListsEditorExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_804_GlazedListsEditorExample.java
index 050cb9f..1f47381 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_804_GlazedListsEditorExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_804_GlazedListsEditorExample.java
@@ -105,19 +105,19 @@
         return "";
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
-    public static String COLUMN_SIX_LABEL = "ColumnSixLabel";
-    public static String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
-    public static String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
-    public static String COLUMN_NINE_LABEL = "ColumnNineLabel";
-    public static String COLUMN_TEN_LABEL = "ColumnTenLabel";
-    public static String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
-    public static String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
-    public static String COLUMN_THIRTEEN_LABEL = "ColumnThirteenLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_SIX_LABEL = "ColumnSixLabel";
+    public static final String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
+    public static final String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
+    public static final String COLUMN_NINE_LABEL = "ColumnNineLabel";
+    public static final String COLUMN_TEN_LABEL = "ColumnTenLabel";
+    public static final String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
+    public static final String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
+    public static final String COLUMN_THIRTEEN_LABEL = "ColumnThirteenLabel";
 
     @Override
     public Control createExampleControl(Composite parent) {
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_817_TreeLayerWithRowGroupingExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_817_TreeLayerWithRowGroupingExample.java
index 2c97a52..2406c16 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_817_TreeLayerWithRowGroupingExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_817_TreeLayerWithRowGroupingExample.java
@@ -300,7 +300,7 @@
             // identify the parent node element
             String current = null;
             for (Person p : this.values) {
-                if (p.getLastName() != current) {
+                if (!p.getLastName().equals(current)) {
                     this.firstElementMapping.put(p.getLastName(), p);
                     current = p.getLastName();
                 }
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_102_Configuration/TextPainter_Examples.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_102_Configuration/TextPainter_Examples.java
index b638cb8..c007d84 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_102_Configuration/TextPainter_Examples.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_102_Configuration/TextPainter_Examples.java
@@ -75,28 +75,19 @@
         tableContainer.setLayout(new GridLayout(6, true));
         GridDataFactory.fillDefaults().grab(true, true).applyTo(tableContainer);
 
-        createNatTable(tableContainer, new GradientBackgroundPainter(
-                new TextPainter(false, false, false), true));
+        createNatTable(tableContainer, new GradientBackgroundPainter(new TextPainter(false, false, false), true));
         createNatTable(tableContainer, new TextPainter(true, true, false));
         createNatTable(tableContainer, new TextPainter(false, true, true));
         createNatTable(tableContainer, new TextPainter(true, true, true));
         createNatTable(tableContainer, new TextPainter(true, true, 5, true));
-        createNatTable(tableContainer, new PaddingDecorator(new TextPainter(
-                true, true, 5, true), 5));
+        createNatTable(tableContainer, new PaddingDecorator(new TextPainter(true, true, 5, true), 5));
 
-        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(
-                false, true, false));
-        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(
-                true, true, false));
-        createVerticalHeaderNatTable(tableContainer,
-                new GradientBackgroundPainter(new VerticalTextPainter(false,
-                        false, true)));
-        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(
-                true, true, true));
-        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(
-                true, true, 5, true));
-        createVerticalHeaderNatTable(tableContainer, new PaddingDecorator(
-                new VerticalTextPainter(true, true, 5, true), 5));
+        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(false, true, false));
+        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(true, true, false));
+        createVerticalHeaderNatTable(tableContainer, new GradientBackgroundPainter(new VerticalTextPainter(false, false, true)));
+        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(true, true, true));
+        createVerticalHeaderNatTable(tableContainer, new VerticalTextPainter(true, true, 5, true));
+        createVerticalHeaderNatTable(tableContainer, new PaddingDecorator(new VerticalTextPainter(true, true, 5, true), 5));
 
         TextPainter underlineTextPainer = new TextPainter();
         underlineTextPainer.setUnderline(true);
@@ -109,20 +100,16 @@
         underlineStrikethroughTextPainer.setStrikethrough(true);
         createNatTable2(tableContainer, underlineStrikethroughTextPainer);
 
-        VerticalTextPainter vunderlineTextPainer = new VerticalTextPainter(
-                true, true, true);
+        VerticalTextPainter vunderlineTextPainer = new VerticalTextPainter(true, true, true);
         vunderlineTextPainer.setUnderline(true);
         createVerticalHeaderNatTable(tableContainer, vunderlineTextPainer);
-        VerticalTextPainter vstrikethroughTextPainer = new VerticalTextPainter(
-                true, true, true);
+        VerticalTextPainter vstrikethroughTextPainer = new VerticalTextPainter(true, true, true);
         vstrikethroughTextPainer.setStrikethrough(true);
         createVerticalHeaderNatTable(tableContainer, vstrikethroughTextPainer);
-        VerticalTextPainter vunderlineStrikethroughTextPainer = new VerticalTextPainter(
-                true, true, true);
+        VerticalTextPainter vunderlineStrikethroughTextPainer = new VerticalTextPainter(true, true, true);
         vunderlineStrikethroughTextPainer.setUnderline(true);
         vunderlineStrikethroughTextPainer.setStrikethrough(true);
-        createVerticalHeaderNatTable(tableContainer,
-                vunderlineStrikethroughTextPainer);
+        createVerticalHeaderNatTable(tableContainer, vunderlineStrikethroughTextPainer);
 
         // uncomment the following lines to see different calculation
         // configurations with greater font sizes
@@ -176,19 +163,17 @@
                 viewportLayer, selectionLayer);
 
         CompositeLayer compositeLayer = new CompositeLayer(1, 2);
-        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER,
-                columnHeaderLayer, 0, 0);
+        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER, columnHeaderLayer, 0, 0);
         compositeLayer.setChildLayer(GridRegion.BODY, viewportLayer, 0, 1);
 
         NatTable natTable = new NatTable(parent, compositeLayer, false);
 
-        natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {
-            {
-                this.vAlign = VerticalAlignmentEnum.TOP;
-                this.hAlign = HorizontalAlignmentEnum.LEFT;
-                this.cellPainter = new LineBorderDecorator(painter);
-            }
-        });
+        DefaultNatTableStyleConfiguration styleConfig = new DefaultNatTableStyleConfiguration();
+        styleConfig.vAlign = VerticalAlignmentEnum.TOP;
+        styleConfig.hAlign = HorizontalAlignmentEnum.LEFT;
+        styleConfig.cellPainter = new LineBorderDecorator(painter);
+
+        natTable.addConfiguration(styleConfig);
 
         natTable.configure();
         GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
@@ -202,66 +187,52 @@
         ViewportLayer viewportLayer = new ViewportLayer(selectionLayer);
 
         ColumnHeaderLayer columnHeaderLayer = new ColumnHeaderLayer(
-                new DataLayer(new ExampleHeaderDataProvider()), viewportLayer,
-                selectionLayer, false);
-        columnHeaderLayer
-                .addConfiguration(new DefaultColumnHeaderLayerConfiguration() {
-                    @Override
-                    protected void addColumnHeaderStyleConfig() {
-                        addConfiguration(new DefaultColumnHeaderStyleConfiguration() {
-                            {
-                                this.cellPainter = new BeveledBorderDecorator(
-                                        painter);
-                            }
-                        });
-                    }
-                });
+                new DataLayer(new ExampleHeaderDataProvider()), viewportLayer, selectionLayer, false);
+        columnHeaderLayer.addConfiguration(new DefaultColumnHeaderLayerConfiguration() {
+            @Override
+            protected void addColumnHeaderStyleConfig() {
+                DefaultColumnHeaderStyleConfiguration styleConfig = new DefaultColumnHeaderStyleConfiguration();
+                styleConfig.cellPainter = new BeveledBorderDecorator(painter);
+                addConfiguration(styleConfig);
+            }
+        });
 
         CompositeLayer compositeLayer = new CompositeLayer(1, 2);
-        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER,
-                columnHeaderLayer, 0, 0);
+        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER, columnHeaderLayer, 0, 0);
         compositeLayer.setChildLayer(GridRegion.BODY, viewportLayer, 0, 1);
 
         NatTable natTable = new NatTable(parent, compositeLayer, false);
 
-        natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {
-            {
-                this.vAlign = VerticalAlignmentEnum.TOP;
-                this.hAlign = HorizontalAlignmentEnum.LEFT;
-                this.cellPainter = new LineBorderDecorator(painter);
-            }
-        });
+        DefaultNatTableStyleConfiguration styleConfig = new DefaultNatTableStyleConfiguration();
+        styleConfig.vAlign = VerticalAlignmentEnum.TOP;
+        styleConfig.hAlign = HorizontalAlignmentEnum.LEFT;
+        styleConfig.cellPainter = new LineBorderDecorator(painter);
+
+        natTable.addConfiguration(styleConfig);
 
         natTable.configure();
         GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
     }
 
-    private void createVerticalHeaderNatTable(Composite parent,
-            final ICellPainter painter) {
+    private void createVerticalHeaderNatTable(Composite parent, final ICellPainter painter) {
         IDataProvider bodyDataProvider = new ExampleHeaderDataProvider();
-        SelectionLayer selectionLayer = new SelectionLayer(new DataLayer(
-                bodyDataProvider));
+        SelectionLayer selectionLayer = new SelectionLayer(new DataLayer(bodyDataProvider));
         ViewportLayer viewportLayer = new ViewportLayer(selectionLayer);
 
         ColumnHeaderLayer columnHeaderLayer = new ColumnHeaderLayer(
                 new DataLayer(new ExampleHeaderDataProvider()), viewportLayer,
                 selectionLayer, false);
-        columnHeaderLayer
-                .addConfiguration(new DefaultColumnHeaderLayerConfiguration() {
-                    @Override
-                    protected void addColumnHeaderStyleConfig() {
-                        addConfiguration(new DefaultColumnHeaderStyleConfiguration() {
-                            {
-                                this.cellPainter = new BeveledBorderDecorator(
-                                        painter);
-                            }
-                        });
-                    }
-                });
+        columnHeaderLayer.addConfiguration(new DefaultColumnHeaderLayerConfiguration() {
+            @Override
+            protected void addColumnHeaderStyleConfig() {
+                DefaultColumnHeaderStyleConfiguration styleConfig = new DefaultColumnHeaderStyleConfiguration();
+                styleConfig.cellPainter = new BeveledBorderDecorator(painter);
+                addConfiguration(styleConfig);
+            }
+        });
 
         CompositeLayer compositeLayer = new CompositeLayer(1, 2);
-        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER,
-                columnHeaderLayer, 0, 0);
+        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER, columnHeaderLayer, 0, 0);
         compositeLayer.setChildLayer(GridRegion.BODY, viewportLayer, 0, 1);
 
         NatTable natTable = new NatTable(parent, compositeLayer);
@@ -282,31 +253,27 @@
                 viewportLayer, selectionLayer);
 
         CompositeLayer compositeLayer = new CompositeLayer(1, 2);
-        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER,
-                columnHeaderLayer, 0, 0);
+        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER, columnHeaderLayer, 0, 0);
         compositeLayer.setChildLayer(GridRegion.BODY, viewportLayer, 0, 1);
 
         NatTable natTable = new NatTable(parent, compositeLayer, false);
 
-        natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {
-            {
-                this.vAlign = VerticalAlignmentEnum.TOP;
-                this.hAlign = HorizontalAlignmentEnum.LEFT;
-                this.cellPainter = new LineBorderDecorator(painter);
-                this.font = GUIHelper.getFont(new FontData("Arial", 20, SWT.NORMAL));
-            }
-        });
+        DefaultNatTableStyleConfiguration styleConfig = new DefaultNatTableStyleConfiguration();
+        styleConfig.vAlign = VerticalAlignmentEnum.TOP;
+        styleConfig.hAlign = HorizontalAlignmentEnum.LEFT;
+        styleConfig.cellPainter = new LineBorderDecorator(painter);
+        styleConfig.font = GUIHelper.getFont(new FontData("Arial", 20, SWT.NORMAL));
+
+        natTable.addConfiguration(styleConfig);
 
         natTable.configure();
         GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
     }
 
     @SuppressWarnings("unused")
-    private void createVerticalNatTable(Composite parent,
-            final ICellPainter painter) {
+    private void createVerticalNatTable(Composite parent, final ICellPainter painter) {
         IDataProvider bodyDataProvider = new ExampleHeaderDataProvider();
-        SelectionLayer selectionLayer = new SelectionLayer(new DataLayer(
-                bodyDataProvider, 20, 100));
+        SelectionLayer selectionLayer = new SelectionLayer(new DataLayer(bodyDataProvider, 20, 100));
         ViewportLayer viewportLayer = new ViewportLayer(selectionLayer);
 
         ColumnHeaderLayer columnHeaderLayer = new ColumnHeaderLayer(
@@ -314,34 +281,28 @@
                         bodyDataProvider), 20, 100),
                 viewportLayer,
                 selectionLayer);
-        columnHeaderLayer
-                .addConfiguration(new DefaultColumnHeaderLayerConfiguration() {
-                    @Override
-                    protected void addColumnHeaderStyleConfig() {
-                        addConfiguration(new DefaultColumnHeaderStyleConfiguration() {
-                            {
-                                this.cellPainter = new BeveledBorderDecorator(
-                                        new VerticalTextPainter());
-                            }
-                        });
-                    }
-                });
+        columnHeaderLayer.addConfiguration(new DefaultColumnHeaderLayerConfiguration() {
+            @Override
+            protected void addColumnHeaderStyleConfig() {
+                DefaultColumnHeaderStyleConfiguration styleConfig = new DefaultColumnHeaderStyleConfiguration();
+                styleConfig.cellPainter = new BeveledBorderDecorator(new VerticalTextPainter());
+                addConfiguration(styleConfig);
+            }
+        });
 
         CompositeLayer compositeLayer = new CompositeLayer(1, 2);
-        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER,
-                columnHeaderLayer, 0, 0);
+        compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER, columnHeaderLayer, 0, 0);
         compositeLayer.setChildLayer(GridRegion.BODY, viewportLayer, 0, 1);
 
         NatTable natTable = new NatTable(parent, compositeLayer, false);
 
-        natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {
-            {
-                this.vAlign = VerticalAlignmentEnum.MIDDLE;
-                this.hAlign = HorizontalAlignmentEnum.LEFT;
-                this.cellPainter = new LineBorderDecorator(painter);
-                this.font = GUIHelper.getFont(new FontData("Arial", 20, SWT.NORMAL));
-            }
-        });
+        DefaultNatTableStyleConfiguration styleConfig = new DefaultNatTableStyleConfiguration();
+        styleConfig.vAlign = VerticalAlignmentEnum.MIDDLE;
+        styleConfig.hAlign = HorizontalAlignmentEnum.LEFT;
+        styleConfig.cellPainter = new LineBorderDecorator(painter);
+        styleConfig.font = GUIHelper.getFont(new FontData("Arial", 20, SWT.NORMAL));
+
+        natTable.addConfiguration(styleConfig);
 
         natTable.configure();
 
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_104_Styling/_001_Custom_styling_of_specific_cells.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_104_Styling/_001_Custom_styling_of_specific_cells.java
index ebaffde..84fc559 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_104_Styling/_001_Custom_styling_of_specific_cells.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_104_Styling/_001_Custom_styling_of_specific_cells.java
@@ -87,10 +87,8 @@
         // Custom label "FOO" for cell at column, row index (1, 5)
         IConfigLabelAccumulator cellLabelAccumulator = new IConfigLabelAccumulator() {
             @Override
-            public void accumulateConfigLabels(LabelStack configLabels,
-                    int columnPosition, int rowPosition) {
-                int columnIndex = bodyLayer
-                        .getColumnIndexByPosition(columnPosition);
+            public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition) {
+                int columnIndex = bodyLayer.getColumnIndexByPosition(columnPosition);
                 int rowIndex = bodyLayer.getRowIndexByPosition(rowPosition);
                 if (columnIndex == 1 && rowIndex == 5) {
                     configLabels.addLabel(FOO_LABEL);
@@ -101,18 +99,14 @@
 
                 // add labels for surrounding borders
                 if (rowIndex == 13) {
-                    configLabels
-                            .addLabel(CustomLineBorderDecorator.TOP_LINE_BORDER_LABEL);
-                    configLabels
-                            .addLabel(CustomLineBorderDecorator.BOTTOM_LINE_BORDER_LABEL);
+                    configLabels.addLabel(CustomLineBorderDecorator.TOP_LINE_BORDER_LABEL);
+                    configLabels.addLabel(CustomLineBorderDecorator.BOTTOM_LINE_BORDER_LABEL);
 
                     if (columnIndex == 0) {
-                        configLabels
-                                .addLabel(CustomLineBorderDecorator.LEFT_LINE_BORDER_LABEL);
+                        configLabels.addLabel(CustomLineBorderDecorator.LEFT_LINE_BORDER_LABEL);
                     }
                     if (columnIndex == 2) {
-                        configLabels
-                                .addLabel(CustomLineBorderDecorator.RIGHT_LINE_BORDER_LABEL);
+                        configLabels.addLabel(CustomLineBorderDecorator.RIGHT_LINE_BORDER_LABEL);
                     }
                 }
             }
@@ -121,16 +115,15 @@
 
         NatTable natTable = new NatTable(parent, gridLayer, false);
 
-        natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {
-            {
-                // override the LineBorderDecorator here to show how to paint
-                // borders on single sides of a cell
-                this.cellPainter = new CustomLineBorderDecorator(new TextPainter());
-                // set a border style
-                this.borderStyle = new BorderStyle(2, GUIHelper.COLOR_BLUE,
-                        LineStyleEnum.DASHDOT);
-            }
-        });
+        DefaultNatTableStyleConfiguration styleConfig = new DefaultNatTableStyleConfiguration();
+        // override the LineBorderDecorator here to show how to paint
+        // borders on single sides of a cell
+        styleConfig.cellPainter = new CustomLineBorderDecorator(new TextPainter());
+        // set a border style
+        styleConfig.borderStyle = new BorderStyle(2, GUIHelper.COLOR_BLUE, LineStyleEnum.DASHDOT);
+
+        natTable.addConfiguration(styleConfig);
+
         // Custom style for label "FOO"
         natTable.addConfiguration(new AbstractRegistryConfiguration() {
             @Override
@@ -140,7 +133,8 @@
                         CellStyleAttributes.BACKGROUND_COLOR,
                         GUIHelper.COLOR_GREEN);
                 configRegistry.registerConfigAttribute(
-                        CellConfigAttributes.CELL_STYLE, cellStyle,
+                        CellConfigAttributes.CELL_STYLE,
+                        cellStyle,
                         DisplayMode.NORMAL, FOO_LABEL);
 
                 cellStyle = new Style();
@@ -148,7 +142,8 @@
                         CellStyleAttributes.TEXT_DECORATION,
                         TextDecorationEnum.UNDERLINE_STRIKETHROUGH);
                 configRegistry.registerConfigAttribute(
-                        CellConfigAttributes.CELL_STYLE, cellStyle,
+                        CellConfigAttributes.CELL_STYLE,
+                        cellStyle,
                         DisplayMode.NORMAL, BAR_LABEL);
             }
         });
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CalculatingGridExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CalculatingGridExample.java
index 058c7f1..1317dec 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CalculatingGridExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CalculatingGridExample.java
@@ -77,11 +77,11 @@
  */
 public class CalculatingGridExample extends AbstractNatExample {
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
 
     private EventList<NumberValues> valuesToShow = GlazedLists.eventList(new ArrayList<NumberValues>());
 
@@ -206,8 +206,8 @@
                 return rowObject.getColumnTwoNumber()
                         + rowObject.getColumnThreeNumber();
             case 4: // calculate the percentage
-                return new Double(rowObject.getColumnTwoNumber()
-                        + rowObject.getColumnThreeNumber())
+                return new Double((double) rowObject.getColumnTwoNumber()
+                        + (double) rowObject.getColumnThreeNumber())
                         / rowObject.getColumnOneNumber();
         }
         return null;
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CrossValidationGridExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CrossValidationGridExample.java
index 2ef172c..cabfb7b 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CrossValidationGridExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/CrossValidationGridExample.java
@@ -63,8 +63,8 @@
  */
 public class CrossValidationGridExample extends AbstractNatExample {
 
-    public static String DATE_LABEL = "DateLabel";
-    public static String INVALID_LABEL = "InvalidLabel";
+    public static final String DATE_LABEL = "DateLabel";
+    public static final String INVALID_LABEL = "InvalidLabel";
 
     private EventList<EventData> valuesToShow = GlazedLists.eventList(new ArrayList<EventData>());
 
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditErrorHandlingExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditErrorHandlingExample.java
index a3f79b9..3f6838d 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditErrorHandlingExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditErrorHandlingExample.java
@@ -74,15 +74,15 @@
                 + "other exceptions than the defined ones for conversion and validation failures are logged completely.";
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
-    public static String COLUMN_SIX_LABEL = "ColumnSixLabel";
-    public static String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
-    public static String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
-    public static String COLUMN_NINE_LABEL = "ColumnNineLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_SIX_LABEL = "ColumnSixLabel";
+    public static final String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
+    public static final String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
+    public static final String COLUMN_NINE_LABEL = "ColumnNineLabel";
 
     @Override
     public Control createExampleControl(Composite parent) {
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditableGridExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditableGridExample.java
index ac83067..9203dd7 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditableGridExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditableGridExample.java
@@ -550,8 +550,7 @@
                         valid = isAlpha(alphabeticPart)
                                 && isNumeric(numericPart);
                     } else {
-                        String alphabeticPart = value.substring(0, value.length());
-                        valid = isAlpha(alphabeticPart);
+                        valid = isAlpha(value);
                     }
                 }
 
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditorExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditorExample.java
index 9a3e836..110d3fe 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditorExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_110_Editing/EditorExample.java
@@ -77,19 +77,19 @@
         return "";
     }
 
-    public static String COLUMN_ONE_LABEL = "ColumnOneLabel";
-    public static String COLUMN_TWO_LABEL = "ColumnTwoLabel";
-    public static String COLUMN_THREE_LABEL = "ColumnThreeLabel";
-    public static String COLUMN_FOUR_LABEL = "ColumnFourLabel";
-    public static String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
-    public static String COLUMN_SIX_LABEL = "ColumnSixLabel";
-    public static String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
-    public static String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
-    public static String COLUMN_NINE_LABEL = "ColumnNineLabel";
-    public static String COLUMN_TEN_LABEL = "ColumnTenLabel";
-    public static String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
-    public static String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
-    public static String COLUMN_THIRTEEN_LABEL = "ColumnThirteenLabel";
+    public static final String COLUMN_ONE_LABEL = "ColumnOneLabel";
+    public static final String COLUMN_TWO_LABEL = "ColumnTwoLabel";
+    public static final String COLUMN_THREE_LABEL = "ColumnThreeLabel";
+    public static final String COLUMN_FOUR_LABEL = "ColumnFourLabel";
+    public static final String COLUMN_FIVE_LABEL = "ColumnFiveLabel";
+    public static final String COLUMN_SIX_LABEL = "ColumnSixLabel";
+    public static final String COLUMN_SEVEN_LABEL = "ColumnSevenLabel";
+    public static final String COLUMN_EIGHT_LABEL = "ColumnEightLabel";
+    public static final String COLUMN_NINE_LABEL = "ColumnNineLabel";
+    public static final String COLUMN_TEN_LABEL = "ColumnTenLabel";
+    public static final String COLUMN_ELEVEN_LABEL = "ColumnElevenLabel";
+    public static final String COLUMN_TWELVE_LABEL = "ColumnTwelveLabel";
+    public static final String COLUMN_THIRTEEN_LABEL = "ColumnThirteenLabel";
 
     @Override
     public Control createExampleControl(Composite parent) {
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_900_Everything_but_the_kitchen_sink.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_900_Everything_but_the_kitchen_sink.java
index 4601b12..a4d88be 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_900_Everything_but_the_kitchen_sink.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/examples/_900_Everything_but_the_kitchen_sink.java
@@ -109,8 +109,7 @@
     @Override
     public Control createExampleControl(Composite parent) {
         final String[] propertyNames = RowDataListFixture.getPropertyNames();
-        final Map<String, String> propertyToLabelMap = RowDataListFixture
-                .getPropertyToLabelMap();
+        final Map<String, String> propertyToLabelMap = RowDataListFixture.getPropertyToLabelMap();
 
         ConfigRegistry configRegistry = new ConfigRegistry();
         ColumnGroupModel columnGroupModel = new ColumnGroupModel();
@@ -118,15 +117,12 @@
         // Body
 
         LinkedList<BlinkingRowDataFixture> rowData = new LinkedList<>();
-        this.baseEventList = GlazedLists.threadSafeList(GlazedLists
-                .eventList(rowData));
+        this.baseEventList = GlazedLists.threadSafeList(GlazedLists.eventList(rowData));
         ObservableElementList<BlinkingRowDataFixture> observableElementList = new ObservableElementList<>(
                 this.baseEventList,
                 GlazedLists.beanConnector(BlinkingRowDataFixture.class));
-        FilterList<BlinkingRowDataFixture> filterList = new FilterList<>(
-                observableElementList);
-        SortedList<BlinkingRowDataFixture> sortedList = new SortedList<>(
-                filterList, null);
+        FilterList<BlinkingRowDataFixture> filterList = new FilterList<>(observableElementList);
+        SortedList<BlinkingRowDataFixture> sortedList = new SortedList<>(filterList, null);
 
         FullFeaturedBodyLayerStack<BlinkingRowDataFixture> bodyLayer =
                 new FullFeaturedBodyLayerStack<>(
@@ -147,34 +143,38 @@
         registerBlinkingConfigCells(configRegistry);
 
         // Column header
-        FullFeaturedColumnHeaderLayerStack<BlinkingRowDataFixture> columnHeaderLayer = new FullFeaturedColumnHeaderLayerStack<>(
-                sortedList, filterList, propertyNames, propertyToLabelMap,
-                bodyLayer, bodyLayer.getSelectionLayer(), columnGroupModel,
-                configRegistry);
+        FullFeaturedColumnHeaderLayerStack<BlinkingRowDataFixture> columnHeaderLayer =
+                new FullFeaturedColumnHeaderLayerStack<>(
+                        sortedList,
+                        filterList,
+                        propertyNames,
+                        propertyToLabelMap,
+                        bodyLayer,
+                        bodyLayer.getSelectionLayer(),
+                        columnGroupModel,
+                        configRegistry);
 
         // column groups
         setUpColumnGroups(columnHeaderLayer);
 
         // Row header
-        final DefaultRowHeaderDataProvider rowHeaderDataProvider = new DefaultSummaryRowHeaderDataProvider(
-                this.bodyDataProvider);
-        DefaultRowHeaderDataLayer rowHeaderDataLayer = new DefaultRowHeaderDataLayer(
-                rowHeaderDataProvider);
+        final DefaultRowHeaderDataProvider rowHeaderDataProvider =
+                new DefaultSummaryRowHeaderDataProvider(this.bodyDataProvider);
+        DefaultRowHeaderDataLayer rowHeaderDataLayer =
+                new DefaultRowHeaderDataLayer(rowHeaderDataProvider);
         rowHeaderDataLayer.setDefaultColumnWidth(50);
-        ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer,
-                bodyLayer, bodyLayer.getSelectionLayer());
+        ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());
 
         // Corner
-        final DefaultCornerDataProvider cornerDataProvider = new DefaultCornerDataProvider(
-                columnHeaderLayer.getColumnHeaderDataProvider(),
-                rowHeaderDataProvider);
+        final DefaultCornerDataProvider cornerDataProvider =
+                new DefaultCornerDataProvider(
+                        columnHeaderLayer.getColumnHeaderDataProvider(),
+                        rowHeaderDataProvider);
         DataLayer cornerDataLayer = new DataLayer(cornerDataProvider);
-        ILayer cornerLayer = new CornerLayer(cornerDataLayer, rowHeaderLayer,
-                columnHeaderLayer);
+        ILayer cornerLayer = new CornerLayer(cornerDataLayer, rowHeaderLayer, columnHeaderLayer);
 
         // Grid
-        GridLayer gridLayer = new GridLayer(bodyLayer, columnHeaderLayer,
-                rowHeaderLayer, cornerLayer);
+        GridLayer gridLayer = new GridLayer(bodyLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer);
 
         this.natTable = new NatTable(parent, gridLayer, false);
 
@@ -193,13 +193,11 @@
         this.natTable.addConfiguration(new SingleClickSortConfiguration());
 
         // Editing
-        ColumnOverrideLabelAccumulator columnLabelAccumulator = new ColumnOverrideLabelAccumulator(
-                bodyLayer.getBodyDataLayer());
-        bodyLayer.getBodyDataLayer().setConfigLabelAccumulator(
-                columnLabelAccumulator);
-        this.natTable.addConfiguration(EditableGridExample
-                .editableGridConfiguration(columnLabelAccumulator,
-                        this.bodyDataProvider));
+        ColumnOverrideLabelAccumulator columnLabelAccumulator =
+                new ColumnOverrideLabelAccumulator(bodyLayer.getBodyDataLayer());
+        bodyLayer.getBodyDataLayer().setConfigLabelAccumulator(columnLabelAccumulator);
+        this.natTable.addConfiguration(
+                EditableGridExample.editableGridConfiguration(columnLabelAccumulator, this.bodyDataProvider));
         this.natTable.addConfiguration(new FilterRowGridExample.FilterRowCustomConfiguration());
 
         // Column chooser
@@ -212,19 +210,15 @@
         bodyLayer.registerCommandHandler(columnChooserCommandHandler);
 
         // Summary row configuration
-        this.natTable.addConfiguration(new MySummaryRow<>(
-                this.bodyDataProvider));
+        this.natTable.addConfiguration(new MySummaryRow<>(this.bodyDataProvider));
         this.natTable.configure();
 
         return this.natTable;
     }
 
-    private void setUpColumnGroups(
-            FullFeaturedColumnHeaderLayerStack<BlinkingRowDataFixture> headerLayer) {
-        headerLayer.getColumnGroupHeaderLayer().addColumnsIndexesToGroup(
-                "TestGroup", 1, 2);
-        headerLayer.getColumnGroupHeaderLayer().addColumnsIndexesToGroup(
-                "TestGroup1", 5, 6, 7);
+    private void setUpColumnGroups(FullFeaturedColumnHeaderLayerStack<BlinkingRowDataFixture> headerLayer) {
+        headerLayer.getColumnGroupHeaderLayer().addColumnsIndexesToGroup("TestGroup", 1, 2);
+        headerLayer.getColumnGroupHeaderLayer().addColumnsIndexesToGroup("TestGroup1", 5, 6, 7);
         headerLayer.getColumnGroupHeaderLayer().setGroupUnbreakable(5);
         headerLayer.getColumnGroupHeaderLayer().setGroupAsCollapsed(5);
     }
@@ -254,21 +248,30 @@
 
     private void registerBlinkingConfigCells(ConfigRegistry configRegistry) {
         configRegistry.registerConfigAttribute(
-                BlinkConfigAttributes.BLINK_RESOLVER, getBlinkResolver(),
+                BlinkConfigAttributes.BLINK_RESOLVER,
+                getBlinkResolver(),
                 DisplayMode.NORMAL);
 
         // Styles
         Style cellStyle = new Style();
-        cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
+        cellStyle.setAttributeValue(
+                CellStyleAttributes.BACKGROUND_COLOR,
                 GUIHelper.COLOR_GREEN);
-        configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE,
-                cellStyle, DisplayMode.NORMAL, BLINK_UP_CONFIG_LABEL);
+        configRegistry.registerConfigAttribute(
+                CellConfigAttributes.CELL_STYLE,
+                cellStyle,
+                DisplayMode.NORMAL,
+                BLINK_UP_CONFIG_LABEL);
 
         cellStyle = new Style();
-        cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR,
+        cellStyle.setAttributeValue(
+                CellStyleAttributes.BACKGROUND_COLOR,
                 GUIHelper.COLOR_RED);
-        configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE,
-                cellStyle, DisplayMode.NORMAL, BLINK_DOWN_CONFIG_LABEL);
+        configRegistry.registerConfigAttribute(
+                CellConfigAttributes.CELL_STYLE,
+                cellStyle,
+                DisplayMode.NORMAL,
+                BLINK_DOWN_CONFIG_LABEL);
     }
 
     private IBlinkingCellResolver getBlinkResolver() {
@@ -279,7 +282,8 @@
             public String[] resolve(Object oldValue, Object newValue) {
                 double old = ((Double) oldValue).doubleValue();
                 double latest = ((Double) newValue).doubleValue();
-                this.configLabels[0] = (latest > old ? BLINK_UP_CONFIG_LABEL
+                this.configLabels[0] = (latest > old
+                        ? BLINK_UP_CONFIG_LABEL
                         : BLINK_DOWN_CONFIG_LABEL);
                 return this.configLabels;
             }
@@ -305,8 +309,7 @@
         private final String waitMsg = "Loading data. Please wait... ";
         private WaitDialog dialog;
 
-        public DataLoader(PropertyChangeListener changeListener,
-                EventList<BlinkingRowDataFixture> baseEventList) {
+        public DataLoader(PropertyChangeListener changeListener, EventList<BlinkingRowDataFixture> baseEventList) {
             this.changeListener = changeListener;
             this.list = baseEventList;
         }
@@ -332,8 +335,7 @@
                     // Add to buffer
                     List<BlinkingRowDataFixture> buffer = new ArrayList<>();
                     for (int i = 0; i < 100; i++) {
-                        buffer.addAll(BlinkingRowDataFixture
-                                .getList(this.changeListener));
+                        buffer.addAll(BlinkingRowDataFixture.getList(this.changeListener));
                     }
                     // Load as a batch
                     this.list.addAll(buffer);
@@ -399,7 +401,7 @@
                             // System.out.println("Ask:
                             // "+rowObject.getAsk_price()+" --> "+nextAsk);
                             rowObject.setAsk_price(nextAsk);
-                            rowObject.setBid_price(-1 * nextAsk);
+                            rowObject.setBid_price(-1d * nextAsk);
                         }
                     }
                 }
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/GlazedListsEventLayerTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/GlazedListsEventLayerTest.java
index 28b0b35..c4502a0 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/GlazedListsEventLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/GlazedListsEventLayerTest.java
@@ -62,12 +62,16 @@
         CountDownLatch countDownLatch = new CountDownLatch(1);
         this.listenerFixture.setCountDownLatch(countDownLatch);
         this.listFixture.add(RowDataFixture.getInstance("T1", "A"));
-        countDownLatch.await(500, TimeUnit.MILLISECONDS);
+        boolean completed = countDownLatch.await(500, TimeUnit.MILLISECONDS);
+
+        assertTrue(completed, "Timeout - no event received");
 
         countDownLatch = new CountDownLatch(1);
         this.listenerFixture.setCountDownLatch(countDownLatch);
         this.listFixture.add(RowDataFixture.getInstance("T2", "A"));
-        countDownLatch.await(500, TimeUnit.MILLISECONDS);
+        completed = countDownLatch.await(500, TimeUnit.MILLISECONDS);
+
+        assertTrue(completed, "Timeout - no event received");
 
         assertNotNull(this.listenerFixture.getReceivedEvent(RowStructuralRefreshEvent.class));
     }
@@ -80,12 +84,16 @@
         assertFalse(this.layerUnderTest.isDisposed());
 
         this.listFixture.add(RowDataFixture.getInstance("T1", "A"));
-        countDownLatch.await(500, TimeUnit.MILLISECONDS);
+        boolean completed = countDownLatch.await(500, TimeUnit.MILLISECONDS);
+
+        assertTrue(completed, "Timeout - no event received");
 
         countDownLatch = new CountDownLatch(1);
         this.listenerFixture.setCountDownLatch(countDownLatch);
         this.listFixture.add(RowDataFixture.getInstance("T2", "A"));
-        countDownLatch.await(500, TimeUnit.MILLISECONDS);
+        completed = countDownLatch.await(500, TimeUnit.MILLISECONDS);
+
+        assertTrue(completed, "Timeout - no event received");
 
         this.layerUnderTest.doCommand(new DisposeResourcesCommand());
         assertTrue(this.layerUnderTest.isDisposed());
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java
index cfedadc..47f5f72 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java
@@ -324,7 +324,9 @@
         // edit one entry
         natTable.doCommand(new UpdateDataCommand(natTable, 1, 3, "Bort"));
 
-        countDown.await(2000, TimeUnit.MILLISECONDS);
+        boolean completed = countDown.await(2000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(1, listener.getEventsCount());
 
@@ -350,7 +352,9 @@
 
         natTable.doCommand(new UpdateDataCommand(natTable, 1, 3, "Bart"));
 
-        countDown.await(2000, TimeUnit.MILLISECONDS);
+        completed = countDown.await(2000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(1, listener.getEventsCount());
 
@@ -395,10 +399,12 @@
         bodyLayer.eventList.add(entry);
 
         // long start = System.currentTimeMillis();
-        countDown.await(2000, TimeUnit.MILLISECONDS);
+        boolean completed = countDown.await(2000, TimeUnit.MILLISECONDS);
         // long end = System.currentTimeMillis();
         // System.out.println("duration " + (end - start));
 
+        assertTrue("Timeout - no event received", completed);
+
         assertEquals(2, listener.getEventsCount());
 
         FilterRowComboUpdateEvent evt = listener.getReceivedEvents().get(0);
@@ -433,10 +439,12 @@
         listener.setCountDown(countDown);
 
         // start = System.currentTimeMillis();
-        countDown.await(2000, TimeUnit.MILLISECONDS);
+        completed = countDown.await(2000, TimeUnit.MILLISECONDS);
         // end = System.currentTimeMillis();
         // System.out.println("duration " + (end - start));
 
+        assertTrue("Timeout - no event received", completed);
+
         filterRowHeaderLayer.comboBoxDataProvider.removeCacheUpdateListener(listener);
     }
 
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/fixture/ViewportLayerFixture.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/fixture/ViewportLayerFixture.java
index 41ba95d..b6e4984 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/fixture/ViewportLayerFixture.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/fixture/ViewportLayerFixture.java
@@ -27,9 +27,9 @@
  */
 public class ViewportLayerFixture extends ViewportLayer {
 
-    public static Rectangle DEFAULT_CLIENT_AREA = new Rectangle(0, 0, 200, 100);
-    public static IClientAreaProvider DEFAULT_CLIENT_AREA_PROVIDER = getClientAreaProvider(DEFAULT_CLIENT_AREA);
-    public static Scrollable DEFAULT_SCROLLABLE = scrollable();
+    public static final Rectangle DEFAULT_CLIENT_AREA = new Rectangle(0, 0, 200, 100);
+    public static final IClientAreaProvider DEFAULT_CLIENT_AREA_PROVIDER = getClientAreaProvider(DEFAULT_CLIENT_AREA);
+    public static final Scrollable DEFAULT_SCROLLABLE = scrollable();
 
     /**
      * Default Xtor
@@ -41,8 +41,7 @@
 
     public ViewportLayerFixture(IUniqueIndexLayer underlingLayer) {
         super(underlingLayer);
-        setClientAreaProvider(getClientAreaProvider(new Rectangle(0, 0, 1000,
-                1000)));
+        setClientAreaProvider(getClientAreaProvider(new Rectangle(0, 0, 1000, 1000)));
         doCommand(new InitializeClientAreaCommandFixture());
     }
 
@@ -61,10 +60,8 @@
      * @param rowCount
      *            total number of rows
      */
-    public ViewportLayerFixture(int colCount, int rowCount,
-            int defaultColWidth, int defaultRowHeight) {
-        super(new DataLayerFixture(colCount, rowCount, defaultColWidth,
-                defaultRowHeight));
+    public ViewportLayerFixture(int colCount, int rowCount, int defaultColWidth, int defaultRowHeight) {
+        super(new DataLayerFixture(colCount, rowCount, defaultColWidth, defaultRowHeight));
         setClientAreaProvider(DEFAULT_CLIENT_AREA_PROVIDER);
     }
 
@@ -76,8 +73,7 @@
         setClientAreaProvider(getClientAreaProvider(clientArea));
     }
 
-    private static IClientAreaProvider getClientAreaProvider(
-            final Rectangle clientArea) {
+    private static IClientAreaProvider getClientAreaProvider(Rectangle clientArea) {
         return new IClientAreaProvider() {
             @Override
             public Rectangle getClientArea() {
@@ -87,7 +83,6 @@
     }
 
     private static Scrollable scrollable() {
-        return new Composite(new Shell(Display.getDefault()), SWT.H_SCROLL
-                | SWT.V_SCROLL);
+        return new Composite(new Shell(Display.getDefault()), SWT.H_SCROLL | SWT.V_SCROLL);
     }
 }
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerSummaryRowConcurrencyTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerSummaryRowConcurrencyTest.java
index d3417cf..1f2da29 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerSummaryRowConcurrencyTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupby/GroupByDataLayerSummaryRowConcurrencyTest.java
@@ -84,7 +84,7 @@
                     try {
                         Thread.sleep(80);
                     } catch (InterruptedException e) {
-                        e.printStackTrace();
+                        Thread.currentThread().interrupt();
                     }
                 }
                 return rowObject.value;
@@ -170,7 +170,7 @@
             try {
                 Thread.sleep(1000);
             } catch (InterruptedException e) {
-                e.printStackTrace();
+                Thread.currentThread().interrupt();
             }
         }
 
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/hierarchical/HierarchicalTreeLayerGlazedListsTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/hierarchical/HierarchicalTreeLayerGlazedListsTest.java
index e74762e..52c102b 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/hierarchical/HierarchicalTreeLayerGlazedListsTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/hierarchical/HierarchicalTreeLayerGlazedListsTest.java
@@ -83,22 +83,22 @@
     public void setup() {
         this.input = CarService.getInput();
         // de-normalize the object graph without parent structure objects
-        List<HierarchicalWrapper> data = HierarchicalHelper.deNormalize(this.input, false, CarService.PROPERTY_NAMES_COMPACT);
+        List<HierarchicalWrapper> data = HierarchicalHelper.deNormalize(this.input, false, CarService.getPropertyNamesCompact());
 
         this.eventList = GlazedLists.eventList(data);
         TransformedList<HierarchicalWrapper, HierarchicalWrapper> rowObjectsGlazedList = GlazedLists.threadSafeList(this.eventList);
 
-        this.columnPropertyAccessor = new HierarchicalReflectiveColumnPropertyAccessor(CarService.PROPERTY_NAMES_COMPACT);
+        this.columnPropertyAccessor = new HierarchicalReflectiveColumnPropertyAccessor(CarService.getPropertyNamesCompact());
 
         this.sortedList = new SortedList<>(
                 rowObjectsGlazedList,
                 new HierarchicalWrapperComparator(
                         this.columnPropertyAccessor,
-                        HierarchicalHelper.getLevelIndexMapping(CarService.PROPERTY_NAMES_COMPACT)));
+                        HierarchicalHelper.getLevelIndexMapping(CarService.getPropertyNamesCompact())));
         this.filterList = new FilterList<>(this.sortedList);
 
         this.bodyDataProvider = new ListDataProvider<>(this.filterList, this.columnPropertyAccessor);
-        HierarchicalSpanningDataProvider spanningDataProvider = new HierarchicalSpanningDataProvider(this.bodyDataProvider, CarService.PROPERTY_NAMES_COMPACT);
+        HierarchicalSpanningDataProvider spanningDataProvider = new HierarchicalSpanningDataProvider(this.bodyDataProvider, CarService.getPropertyNamesCompact());
         this.bodyDataLayer = new SpanningDataLayer(spanningDataProvider);
 
         // simply apply labels for every column by index
@@ -109,7 +109,7 @@
         glazedListsEventLayer.setTestMode(true);
 
         this.selectionLayer = new SelectionLayer(glazedListsEventLayer);
-        this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.filterList, CarService.PROPERTY_NAMES_COMPACT);
+        this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.filterList, CarService.getPropertyNamesCompact());
 
         // create a dummy config registry
         this.configRegistry = new ConfigRegistry();
@@ -117,7 +117,7 @@
                 SortConfigAttributes.SORT_COMPARATOR,
                 DefaultComparator.getInstance());
 
-        this.columnHeaderDataLayer = new DataLayer(new DefaultColumnHeaderDataProvider(CarService.PROPERTY_NAMES_COMPACT));
+        this.columnHeaderDataLayer = new DataLayer(new DefaultColumnHeaderDataProvider(CarService.getPropertyNamesCompact()));
 
         this.sortModel = new HierarchicalWrapperSortModel(
                 this.sortedList, this.columnPropertyAccessor, this.treeLayer.getLevelIndexMapping(), this.columnHeaderDataLayer, this.configRegistry);
@@ -934,7 +934,7 @@
 
         this.input.add(car4);
 
-        List<HierarchicalWrapper> data = HierarchicalHelper.deNormalize(this.input, false, CarService.PROPERTY_NAMES_COMPACT);
+        List<HierarchicalWrapper> data = HierarchicalHelper.deNormalize(this.input, false, CarService.getPropertyNamesCompact());
         this.eventList.clear();
         this.eventList.addAll(data);
 
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/DataChangeLayerIntegrationTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/DataChangeLayerIntegrationTest.java
index 9eec975..3bd0d37 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/DataChangeLayerIntegrationTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/DataChangeLayerIntegrationTest.java
@@ -134,7 +134,9 @@
 
         // give the GlazedListsEventLayer some time to trigger the
         // RowStructuralRefreshEvent
-        this.lock.await(1000, TimeUnit.MILLISECONDS);
+        boolean completed = this.lock.await(1000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(9, this.filterList.size());
         assertFalse(this.dataChangeLayer.getDataChanges().isEmpty());
@@ -145,7 +147,9 @@
 
         // give the GlazedListsEventLayer some time to trigger the
         // RowStructuralRefreshEvent
-        this.lock.await(1000, TimeUnit.MILLISECONDS);
+        completed = this.lock.await(1000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(18, this.filterList.size());
         assertFalse(this.dataChangeLayer.getDataChanges().isEmpty());
@@ -174,7 +178,9 @@
 
         // give the GlazedListsEventLayer some time to trigger the
         // RowStructuralRefreshEvent
-        this.lock.await(1000, TimeUnit.MILLISECONDS);
+        boolean completed = this.lock.await(1000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(18, this.filterList.size());
         assertFalse(this.dataChangeLayer.getDataChanges().isEmpty());
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/RowStructuralDataChangeLayerIntegrationTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/RowStructuralDataChangeLayerIntegrationTest.java
index b663cd0..6653238 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/RowStructuralDataChangeLayerIntegrationTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/test/integration/RowStructuralDataChangeLayerIntegrationTest.java
@@ -440,7 +440,9 @@
 
         // give the GlazedListsEventLayer some time to trigger the
         // RowStructuralRefreshEvent
-        this.lock.await(1000, TimeUnit.MILLISECONDS);
+        boolean completed = this.lock.await(1000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(9, this.filterList.size());
         assertFalse(this.dataChangeLayer.getDataChanges().isEmpty());
@@ -451,7 +453,9 @@
 
         // give the GlazedListsEventLayer some time to trigger the
         // RowStructuralRefreshEvent
-        this.lock.await(1000, TimeUnit.MILLISECONDS);
+        completed = this.lock.await(1000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(18, this.filterList.size());
         assertFalse(this.dataChangeLayer.getDataChanges().isEmpty());
@@ -480,7 +484,9 @@
 
         // give the GlazedListsEventLayer some time to trigger the
         // RowStructuralRefreshEvent
-        this.lock.await(1000, TimeUnit.MILLISECONDS);
+        boolean completed = this.lock.await(1000, TimeUnit.MILLISECONDS);
+
+        assertTrue("Timeout - no event received", completed);
 
         assertEquals(18, this.filterList.size());
         assertFalse(this.dataChangeLayer.getDataChanges().isEmpty());
