-> long segment positions
diff --git a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend
index e6434b8..ae3117e 100644
--- a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend
@@ -20,8 +20,8 @@
 	
 	override createLayer() {
 		val bodyLayer = new ViewportLayer(new DummyLayer(
-			new AxisImpl(10 * 1000 * 1000, 200),  // Horizontal axis
-			new AxisImpl(10 * 1000 * 1000, 100)  // Vertical axis
+			new AxisImpl(1000 * 1000 * 1000 * 1000, 200),  // Horizontal axis
+			new AxisImpl(1000 * 1000 * 1000 * 1000, 100)  // Vertical axis
 		))
 
 		val columnHeaderLayer = new ColumnHeaderLayer(bodyLayer.horizontalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | columnId ]))
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend
index da5a372..ee4bb1b 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend
@@ -19,19 +19,19 @@
 		assertEquals('''«axisName» getSegmentCount''', expectedIds.size, axis.segmentCount)
 		
 		// Start pixel of segment position
-		for (segmentPosition : 0 .. axis.segmentCount)
+		for (segmentPosition : 0 .. expectedIds.size)
 			assertEquals('''«axisName» getStartPixelOfSegmentPosition(«segmentPosition»)''', expectedPixels.get(segmentPosition), axis.getStartPixelOfSegmentPosition(segmentPosition), 0)
 		
 		// Segment position of pixel location
 		assertEquals('''«axisName» < range getSegmentPositionOfPixelLocation(«expectedPixels.get(0) - 1»)''', -1, axis.getSegmentPositionOfPixelLocation(expectedPixels.get(0) - 1))
-		for (segmentPosition : 0 ..< axis.segmentCount) {
+		for (segmentPosition : 0 ..< expectedIds.size) {
 			val pixelLocation = expectedPixels.get(segmentPosition)
 			assertEquals('''«axisName» getSegmentPositionOfPixelLocation(«pixelLocation»)''', segmentPosition, axis.getSegmentPositionOfPixelLocation(pixelLocation))
 		}
 		assertEquals('''«axisName» > range getSegmentPositionOfPixelLocation(«axis.pixelSize»)''', axis.segmentCount, axis.getSegmentPositionOfPixelLocation(axis.pixelSize))
 		
 		// Id of segment position
-		for (segmentPosition : 0 ..< axis.segmentCount)
+		for (segmentPosition : 0 ..< expectedIds.size)
 			assertEquals('''«axisName» getIdOfSegmentPosition(«segmentPosition»)''', expectedIds.get(segmentPosition), axis.getIdOfSegmentPosition(segmentPosition))
 
 		// Segment position of id
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend
index d679d10..cc7a427 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend
@@ -18,7 +18,7 @@
 	def void baseline() {
 		testAxis(
 			axis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -29,7 +29,7 @@
 		
 		testAxis(
 			axis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 125.0, 225.0, 325.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend
index d2e8876..df16370 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend
@@ -7,7 +7,7 @@
 
 import static org.eclipse.nebula.widgets.nattable.core.layer.AxisTest.*
 
-class HideShowSegmentPositionAxisTest {
+class HideShowAxisTest {
 	
 	Axis underlyingAxis
 	HideShowAxis hideShowAxis
@@ -23,14 +23,14 @@
 		testAxis(
 			"underlyingAxis",
 			underlyingAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 		
 		testAxis(
 			"hideShowAxis",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -42,7 +42,7 @@
 		testAxis(
 			"hide",
 			hideShowAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -51,7 +51,7 @@
 		testAxis(
 			"show",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -63,7 +63,7 @@
 		testAxis(
 			"hide",
 			hideShowAxis,
-			#[ 0, 2, 3 ],
+			#[ 0L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -72,7 +72,7 @@
 		testAxis(
 			"show",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -84,7 +84,7 @@
 		testAxis(
 			"hide",
 			hideShowAxis,
-			#[ 0, 1, 2 ],
+			#[ 0L, 1L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -93,7 +93,7 @@
 		testAxis(
 			"show",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -105,7 +105,7 @@
 		testAxis(
 			"hide 3",
 			hideShowAxis,
-			#[ 0, 1, 2 ],
+			#[ 0L, 1L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -114,7 +114,7 @@
 		testAxis(
 			"hide 0",
 			hideShowAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ 0.0, 100.0, 200.0 ]
 		)
 		
@@ -123,7 +123,7 @@
 		testAxis(
 			"hide 1",
 			hideShowAxis,
-			#[ 2 ],
+			#[ 2L ],
 			#[ 0.0, 100.0 ]
 		)
 		
@@ -132,7 +132,7 @@
 		testAxis(
 			"show 1",
 			hideShowAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ 0.0, 100.0, 200.0 ]
 		)
 		
@@ -141,7 +141,7 @@
 		testAxis(
 			"show 3",
 			hideShowAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -150,7 +150,7 @@
 		testAxis(
 			"show 0",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend
index 5327ac9..3d38b3e 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend
@@ -23,14 +23,14 @@
 		testAxis(
 			"underlyingAxis",
 			underlyingAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 		
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -42,7 +42,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 1, 2, 0, 3 ],
+			#[ 1L, 2L, 0L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -54,7 +54,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 1, 2, 3, 0 ],
+			#[ 1L, 2L, 3L, 0L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -66,7 +66,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 2, 0, 1, 3 ],
+			#[ 2L, 0L, 1L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -78,7 +78,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 2, 1, 3 ],
+			#[ 0L, 2L, 1L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -90,7 +90,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 2, 1, 3 ],
+			#[ 0L, 2L, 1L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -102,7 +102,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 2, 3, 1 ],
+			#[ 0L, 2L, 3L, 1L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -114,7 +114,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 3, 0, 1, 2 ],
+			#[ 3L, 0L, 1L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -126,7 +126,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 1, 3, 2 ],
+			#[ 0L, 1L, 3L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend
index 68bb301..aefb8c1 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend
@@ -42,14 +42,14 @@
 		testAxis(
 			"bodyLayer.horizontalAxis",
 			bodyLayer.horizontalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 200.0, 400.0, 600.0, 800.0 ]
 		)
 		
 		testAxis(
 			"bodyLayer.verticalAxis",
 			bodyLayer.verticalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -59,14 +59,14 @@
 		testAxis(
 			"columnHeaderLayer.horizontalAxis",
 			columnHeaderLayer.horizontalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 200.0, 400.0, 600.0, 800.0 ]
 		)
 		
 		testAxis(
 			"columnHeaderLayer.verticalAxis",
 			columnHeaderLayer.verticalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 	}
@@ -76,14 +76,14 @@
 		testAxis(
 			"rowHeaderLayer.horizontalAxis",
 			rowHeaderLayer.horizontalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 		
 		testAxis(
 			"rowHeaderLayer.verticalAxis",
 			rowHeaderLayer.verticalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -93,14 +93,14 @@
 		testAxis(
 			"cornerLayer.horizontalAxis",
 			cornerLayer.horizontalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 		
 		testAxis(
 			"cornerLayer.verticalAxis",
 			cornerLayer.verticalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 	}
@@ -110,14 +110,14 @@
 		testAxis(
 			"compositeLayer.horizontalAxis",
 			compositeLayer.horizontalAxis,
-			#[ 0, 0, 1, 2, 3 ],
+			#[ 0L, 0L, 1L, 2L, 3L ],
 			#[ 0.0, 20.0, 220.0, 420.0, 620.0, 820.0 ]
 		)
 		
 		testAxis(
 			"compositeLayer.verticalAxis",
 			compositeLayer.verticalAxis,
-			#[ 0, 0, 1, 2, 3 ],
+			#[ 0L, 0L, 1L, 2L, 3L ],
 			#[ 0.0, 20.0, 120.0, 220.0, 320.0, 420.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend
index 69b7b5a..1d98d17 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend
@@ -31,7 +31,7 @@
 		testAxis(
 			"underlyingAxis",
 			underlyingAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 2.0, 5.0, 12.0, 25.0 ]
 		)
 		
@@ -40,7 +40,7 @@
 		testAxis(
 			"viewportAxis",
 			viewportAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 2.0, 5.0, 12.0, 25.0 ]
 		)
 	}
@@ -54,7 +54,7 @@
 		viewportAxis.visiblePixelRange = 5
 		testAxis(
 			viewportAxis,
-			#[ 0, 1 ],
+			#[ 0L, 1L ],
 			#[ 0.0, 2.0, 5.0 ]
 		)
 	}
@@ -69,7 +69,7 @@
 		viewportAxis.visiblePixelRange = 23
 		testAxis(
 			viewportAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ 0.0, 3.0, 10.0, 23.0 ]
 		)
 	}
@@ -84,7 +84,7 @@
 		viewportAxis.visiblePixelRange = 10
 		testAxis(
 			viewportAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ 0.0, 3.0, 10.0 ]
 		)
 	}
@@ -99,7 +99,7 @@
 		viewportAxis.visiblePixelRange = 8
 		testAxis(
 			viewportAxis,
-			#[ 0, 1, 2 ],
+			#[ 0L, 1L, 2L ],
 			#[ 0.0, 2.0, 5.0, 12.0 ]
 		)
 	}
@@ -114,7 +114,7 @@
 		viewportAxis.visiblePixelRange = 17
 		testAxis(
 			viewportAxis,
-			#[ 2, 3 ],
+			#[ 2L, 3L ],
 			#[ -3.0, 4.0, 17.0 ]
 		)
 	}
@@ -129,7 +129,7 @@
 		viewportAxis.visiblePixelRange = 10
 		testAxis(
 			viewportAxis,
-			#[ 3 ],
+			#[ 3L ],
 			#[ -5.0, 8.0 ]
 		)
 	}
@@ -144,7 +144,7 @@
 		viewportAxis.visiblePixelRange = 15
 		testAxis(
 			viewportAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ -2.0, 1.0, 8.0, 21.0 ]
 		)
 	}
@@ -160,7 +160,7 @@
 		testAxis(
 			"before expand",
 			viewportAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ -2.0, 1.0, 8.0 ]
 		)
 		
@@ -173,7 +173,7 @@
 		testAxis(
 			"after expand",
 			viewportAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ -2.0, 1.0, 8.0, 21.0 ]
 		)
 	}
@@ -189,7 +189,7 @@
 		testAxis(
 			"before expand",
 			viewportAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ -2.0, 1.0, 8.0 ]
 		)
 		
@@ -202,7 +202,7 @@
 		testAxis(
 			"after expand",
 			viewportAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ -1.0, 1.0, 4.0, 11.0, 24.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend
index 78c872d..274cd01 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend
@@ -5,6 +5,6 @@
  */
 @Data
 class PositionCoordinate {
-	int columnPosition
-	int rowPosition
+	long columnPosition
+	long rowPosition
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend
index 2833f1e..131f69b 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend
@@ -5,10 +5,10 @@
  */
 class PositionRectangle {
 	val PositionCoordinate positionOrigin
-	val int positionWidth
-	val int positionHeight
+	val long positionWidth
+	val long positionHeight
 	
-	new(int columnPosition, int rowPosition, int positionWidth, int positionHeight) {
+	new(long columnPosition, long rowPosition, long positionWidth, long positionHeight) {
 		this.positionOrigin = new PositionCoordinate(columnPosition, rowPosition)
 		this.positionWidth = positionWidth
 		this.positionHeight = positionHeight
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
index f7e3569..7c334bf 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
@@ -24,6 +24,6 @@
 	/**
 	 * @return The Cell at the given column and row position in this layer.
 	 */
-	def Cell getCell(int columnPosition, int rowPosition)
+	def Cell getCell(long columnPosition, long rowPosition)
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
index ce743d2..9bbd584 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
@@ -16,15 +16,15 @@
 		layer.horizontalAxis.segmentCount
 	}
 	
-	def static getColumnIdOfPosition(Layer layer, int columnPosition) {
+	def static getColumnIdOfPosition(Layer layer, long columnPosition) {
 		layer.horizontalAxis.getIdOfSegmentPosition(columnPosition)
 	}
 	
-	def static getStartXPixelOfColumnPosition(Layer layer, int columnPosition) {
+	def static getStartXPixelOfColumnPosition(Layer layer, long columnPosition) {
 		layer.horizontalAxis.getStartPixelOfSegmentPosition(columnPosition)
 	}
 	
-	def static getPixelWidthOfColumn(Layer layer, int columnPosition) {
+	def static getPixelWidthOfColumn(Layer layer, long columnPosition) {
 		layer.horizontalAxis.getPixelSizeOfSegmentPosition(columnPosition)
 	}
 	
@@ -42,15 +42,15 @@
 		layer.verticalAxis.segmentCount
 	}
 	
-	def static getRowIdOfPosition(Layer layer, int rowPosition) {
+	def static getRowIdOfPosition(Layer layer, long rowPosition) {
 		layer.verticalAxis.getIdOfSegmentPosition(rowPosition)
 	}
 	
-	def static getStartYPixelOfRowPosition(Layer layer, int rowPosition) {
+	def static getStartYPixelOfRowPosition(Layer layer, long rowPosition) {
 		layer.verticalAxis.getStartPixelOfSegmentPosition(rowPosition)
 	}
 	
-	def static getPixelHeightOfRow(Layer layer, int rowPosition) {
+	def static getPixelHeightOfRow(Layer layer, long rowPosition) {
 		layer.verticalAxis.getPixelSizeOfSegmentPosition(rowPosition)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
index 604e878..1fb99dd 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
@@ -12,7 +12,7 @@
 	/**
 	 * @return The number of segments on this axis.
 	 */
-	def int getSegmentCount()
+	def long getSegmentCount()
 	
 	/**
 	 * Gets the start pixel location of the segment at the given position. This function must be defined for all valid segment position
@@ -23,7 +23,7 @@
 	 * @param segmentPosition
 	 * @return The start pixel location of the given segment position.
 	 */
-	def double getStartPixelOfSegmentPosition(int segmentPosition)
+	def double getStartPixelOfSegmentPosition(long segmentPosition)
 	
 	/**
 	 * Gets the position of the segment that is nearest to the the given pixel location.
@@ -33,18 +33,18 @@
 	 * If the given pixel location is less than 0, the segment position returned will be -1.
 	 * If the given pixel location is greater than the size of the axis, then the last segment position + 1 will be returned (= segment count).
 	 */
-	def int getSegmentPositionOfPixelLocation(double pixelLocation)
+	def long getSegmentPositionOfPixelLocation(double pixelLocation)
 
 	/**
 	 * @param segmentPosition
 	 * @return The identifier associated with the given segment position.
 	 */
-	def Serializable getIdOfSegmentPosition(int segmentPosition)
+	def Serializable getIdOfSegmentPosition(long segmentPosition)
 	
 	/**
 	 * @param segmentId
 	 * @return The position of the segment associated with the given segment identifier.
 	 */
-	def int getSegmentPositionOfId(Serializable segmentId)
+	def long getSegmentPositionOfId(Serializable segmentId)
 	
 }
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
index 1914ed2..1161979 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
@@ -9,7 +9,7 @@
 		axis.getStartPixelOfSegmentPosition(axis.segmentCount) - axis.getStartPixelOfSegmentPosition(0)
 	}
 	
-	def static getPixelSizeOfSegmentPosition(Axis axis, int segmentPosition) {
+	def static getPixelSizeOfSegmentPosition(Axis axis, long segmentPosition) {
 		axis.getStartPixelOfSegmentPosition(segmentPosition + 1) - axis.getStartPixelOfSegmentPosition(segmentPosition)
 	}
 	
@@ -17,7 +17,7 @@
 		pixelLocation >= 0 && pixelLocation < axis.getStartPixelOfSegmentPosition(axis.segmentCount)
 	}
 	
-	def static boolean containsSegmentPosition(Axis axis, int segmentPosition) {
+	def static boolean containsSegmentPosition(Axis axis, long segmentPosition) {
 		segmentPosition >= 0 && segmentPosition < axis.segmentCount
 	}
 
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
index d461293..5175957 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
@@ -12,7 +12,7 @@
 	
 	int segmentCount
 	double defaultSegmentSize
-	val segmentSizeMap = new TreeMap<Integer, Double>  // segment Position -> pixel size
+	val segmentSizeMap = new TreeMap<Long, Double>  // segment Position -> pixel size
 	
 	new() {}
 	
@@ -35,7 +35,7 @@
 		segmentCount
 	}
 
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		if (segmentPosition < 0) return -1
 		else if (segmentPosition == 0) return 0
 		else if (segmentSizeMap.empty) return segmentPosition * defaultSegmentSize
@@ -43,7 +43,7 @@
 			var numResizedSegments = 0
 			var resizeAggregate = 0.0
 			
-			for (resizedSegmentPosition : segmentSizeMap.subMap(0, segmentPosition).keySet) {
+			for (resizedSegmentPosition : segmentSizeMap.subMap(0L, segmentPosition).keySet) {
 				numResizedSegments = numResizedSegments + 1
 				resizeAggregate = resizeAggregate + segmentSizeMap.get(resizedSegmentPosition)
 			}
@@ -56,14 +56,14 @@
 		if (pixelLocation < 0) return -1
 		else if (pixelLocation == 0) return 0
 		else if (pixelLocation >= pixelSize) return segmentCount
-		else if (segmentSizeMap.empty) return (pixelLocation / defaultSegmentSize) as int
+		else if (segmentSizeMap.empty) return (pixelLocation / defaultSegmentSize) as long
 		else return findSegmentPositionOfPixelLocation(pixelLocation, 0, pixelSize, 0, segmentCount)
 	}
 	
-	def private int findSegmentPositionOfPixelLocation(double pixelLocation, double fromPixel, double toPixel, int fromSegmentPosition, int toSegmentPosition) {
+	def private long findSegmentPositionOfPixelLocation(double pixelLocation, double fromPixel, double toPixel, long fromSegmentPosition, long toSegmentPosition) {
 		// guess segment position = pixelLocation / size of guess region
 		val guessSegmentSize = (toPixel - fromPixel) / (toSegmentPosition - fromSegmentPosition)
-		val guessSegmentPosition = fromSegmentPosition + ((pixelLocation - fromPixel) / guessSegmentSize) as int
+		val guessSegmentPosition = fromSegmentPosition + ((pixelLocation - fromPixel) / guessSegmentSize) as long
 		
 		// find start/end pixel of guessed segment position
 		val startPixel = getStartPixelOfSegmentPosition(guessSegmentPosition)
@@ -77,20 +77,20 @@
 			return guessSegmentPosition
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
+	override getIdOfSegmentPosition(long segmentPosition) {
 		segmentPosition
 	}
 	
 	override getSegmentPositionOfId(Serializable segmentId) {
 		if (segmentId != null)
-			return segmentId as Integer
+			return segmentId as Long
 		else
 			return -1
 	}
 	
 	//
 
-	def void setPixelSizeOfSegmentPosition(double size, int segmentPosition) {
+	def void setPixelSizeOfSegmentPosition(double size, long segmentPosition) {
 		if (!containsSegmentPosition(segmentPosition)) throw new IllegalArgumentException('''segment position «segmentPosition» is not contained in this axis''')
 		if (size < 0) throw new IllegalArgumentException("size must be >= 0")
 		
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
index 785fb4b..9c3c395 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
@@ -16,8 +16,8 @@
  */
 class HideShowAxis extends AbstractAxis {
 	
-	val SortedMap<Integer, Serializable> hiddenSegmentPositionToIdMap = new TreeMap
-	val Map<Integer, Double> segmentPositionToStartPixelMap = newHashMap
+	val SortedMap<Long, Serializable> hiddenSegmentPositionToIdMap = new TreeMap
+	val Map<Long, Double> segmentPositionToStartPixelMap = newHashMap
 	
 	Axis underlyingAxis
 	
@@ -37,7 +37,7 @@
 		underlyingAxis.segmentCount - hiddenSegmentPositionToIdMap.size
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		val startPixel = segmentPositionToStartPixelMap.get(segmentPosition)
 		if (startPixel != null)
 			return startPixel
@@ -68,9 +68,9 @@
 	}
 	
 	// TODO Optimize. Cache?
-	override getIdOfSegmentPosition(int segmentPosition) {
-		var numHiddenSegments = 0
-		var fromPosition = 0
+	override getIdOfSegmentPosition(long segmentPosition) {
+		var numHiddenSegments = 0L
+		var fromPosition = 0L
 		var toPosition = segmentPosition
 		
 		while (toPosition < underlyingAxis.segmentCount) {
@@ -89,7 +89,7 @@
 	
 	override getSegmentPositionOfId(Serializable segmentId) {
 		val underlyingSegmentPosition = underlyingAxis.getSegmentPositionOfId(segmentId)
-		underlyingSegmentPosition - hiddenSegmentPositionToIdMap.subMap(0, underlyingSegmentPosition).size
+		underlyingSegmentPosition - hiddenSegmentPositionToIdMap.subMap(0L, underlyingSegmentPosition).size
 	}
 	
 	//
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
index a822adc..c66471e 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
@@ -16,7 +16,7 @@
 class ReorderAxis extends AbstractAxis {
 	
 	val List<Serializable> reorderedSegmentIds = newArrayList
-	val Map<Integer, Double> segmentPositionToStartPixelMap = newHashMap
+	val Map<Long, Double> segmentPositionToStartPixelMap = newHashMap
 	
 	Axis underlyingAxis
 	
@@ -39,7 +39,7 @@
 		underlyingAxis.segmentCount
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		val startPixel = segmentPositionToStartPixelMap.get(segmentPosition)
 		if (startPixel != null)
 			return startPixel
@@ -69,7 +69,7 @@
 		return segmentCount
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
+	override getIdOfSegmentPosition(long segmentPosition) {
 		reorderedSegmentIds.get(segmentPosition)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend
index 6ceb088..7696c0a 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend
@@ -12,11 +12,11 @@
 	val Layer layer
 	val PositionRectangle positionBounds
 	
-	new(Layer layer, int columnPosition, int rowPosition) {
+	new(Layer layer, long columnPosition, long rowPosition) {
 		this(layer, columnPosition, rowPosition, 1, 1)
 	}
 	
-	new(Layer layer, int columnPosition, int rowPosition, int columnSpan, int rowSpan) {
+	new(Layer layer, long columnPosition, long rowPosition, long columnSpan, long rowSpan) {
 		this.layer = layer
 		this.positionBounds = new PositionRectangle(columnPosition, rowPosition, columnSpan, rowSpan)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend
index c9d7112..4da5c34 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend
@@ -12,7 +12,7 @@
 	
 	val LayerDataAccessor layerDataAccessor
 	
-	new(Layer layer, int columnPosition, int rowPosition, LayerDataAccessor layerDataAccessor) {
+	new(Layer layer, long columnPosition, long rowPosition, LayerDataAccessor layerDataAccessor) {
 		super(layer, columnPosition, rowPosition)
 		this.layerDataAccessor = layerDataAccessor
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend
index de34212..d869358 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend
@@ -9,7 +9,7 @@
 	
 	val Object dataValue
 	
-	new(Layer layer, int columnPosition, int rowPosition, Object dataValue) {
+	new(Layer layer, long columnPosition, long rowPosition, Object dataValue) {
 		super(layer, columnPosition, rowPosition)
 		this.dataValue = dataValue
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
index bad09fe..90f9697 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
@@ -26,24 +26,27 @@
 		
 		val fromColumnPosition = max(layer.getColumnPositionOfXPixel(clipBounds.x), 0)
 		val toColumnPosition = min(layer.getColumnPositionOfXPixel(clipBounds.x + clipBounds.width - 1), layer.columnCount - 1)
+		val columnRange = toColumnPosition - fromColumnPosition
+		
 		val fromRowPosition = max(layer.getRowPositionOfYPixel(clipBounds.y), 0)
 		val toRowPosition = min(layer.getRowPositionOfYPixel(clipBounds.y + clipBounds.height - 1), layer.rowCount - 1)
+		val rowRange = toRowPosition - fromRowPosition
 		
-		if (fromColumnPosition <= toColumnPosition)
-			for (columnPosition : fromColumnPosition .. toColumnPosition)
-				if (fromRowPosition <= toRowPosition)
-					for (rowPosition : fromRowPosition .. toRowPosition) {
-						val cell = layer.getCell(columnPosition, rowPosition)
-						
-						gc.pushState
-						
-						val cellPixelBounds = cell.adjustedPixelBounds
-						gc.clipBounds = cellPixelBounds.intersect(layerPixelBounds)
-						gc.translate(cellPixelBounds.x, cellPixelBounds.y)
-						cellPainter.paintCell(cell, new PixelArea(cellPixelBounds.width, cellPixelBounds.height), gc)
-						
-						gc.popState
-					}
+		if (columnRange >= 0 && columnRange <= Integer::MAX_VALUE && rowRange >= 0 && rowRange <= Integer::MAX_VALUE) {
+			for (columnOffset : 0 .. columnRange as int)
+				for (rowOffset : 0 .. rowRange as int) {
+					val cell = layer.getCell(fromColumnPosition + columnOffset, fromRowPosition + rowOffset)
+					
+					gc.pushState
+					
+					val cellPixelBounds = cell.adjustedPixelBounds
+					gc.clipBounds = cellPixelBounds.intersect(layerPixelBounds)
+					gc.translate(cellPixelBounds.x, cellPixelBounds.y)
+					cellPainter.paintCell(cell, new PixelArea(cellPixelBounds.width, cellPixelBounds.height), gc)
+					
+					gc.popState
+				}
+		}
 	}
 	
 	//
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
index 7cccb08..db5918c 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
@@ -35,7 +35,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new LayerDataAccessorCell(this, columnPosition, rowPosition, layerDataAccessor)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
index 8314bb2..25856eb 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
@@ -33,7 +33,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		val columnId = horizontalAxis.getIdOfSegmentPosition(columnPosition)
 		val rowId = verticalAxis.getIdOfSegmentPosition(rowPosition)
 		new ReadOnlyCell(this, columnPosition, rowPosition, '''Column «columnId», Row «rowId»''')
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
index 784fb9a..7c6870f 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
@@ -52,9 +52,10 @@
 		// Draw horizontal grid lines
 		val fromRowPosition = max(layer.getRowPositionOfYPixel(clipBounds.y) + 1, 1)
 		val toRowPosition = min(layer.getRowPositionOfYPixel(clipBounds.y + clipBounds.height), layer.rowCount)
-		if (fromRowPosition <= toRowPosition)
-			for (rowPosition : fromRowPosition .. toRowPosition) {
-				val y = layer.getStartYPixelOfRowPosition(rowPosition) - 1
+		val rowRange = toRowPosition - fromRowPosition
+		if (rowRange >= 0 && rowRange <= Integer::MAX_VALUE)
+			for (rowOffset : 0 .. rowRange as int) {
+				val y = layer.getStartYPixelOfRowPosition(fromRowPosition + rowOffset) - 1
 				gc.drawLine(
 					0,          y,
 					pixelWidth, y
@@ -64,9 +65,10 @@
 		// Draw vertical grid lines
 		val fromColumnPosition = max(layer.getColumnPositionOfXPixel(clipBounds.x) + 1, 1)
 		val toColumnPosition = min(layer.getColumnPositionOfXPixel(clipBounds.x + clipBounds.width), layer.columnCount)
-		if (fromColumnPosition <= toColumnPosition)
-			for (columnPosition : fromColumnPosition .. toColumnPosition) {
-				val x = layer.getStartXPixelOfColumnPosition(columnPosition) - 1
+		val columnRange = toColumnPosition - fromColumnPosition
+		if (columnRange >= 0 && columnRange <= Integer::MAX_VALUE)
+			for (columnOffset : 0 .. columnRange as int) {
+				val x = layer.getStartXPixelOfColumnPosition(fromColumnPosition + columnOffset) - 1
 				gc.drawLine(
 					x, 0,
 					x, pixelHeight
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
index 6bd5968..2d86b7d 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
@@ -45,12 +45,14 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
-		val rowObject = list.get(rowPosition)
-		val propertyId = horizontalAxis.getIdOfSegmentPosition(columnPosition)
-		val value = rowObject.getPropertyValue(propertyId)
-		
-		new ReadOnlyCell(this, columnPosition, rowPosition, value)
+	override getCell(long columnPosition, long rowPosition) {
+		if (rowPosition <= Integer::MAX_VALUE) {
+			val rowObject = list.get(rowPosition as int)
+			val propertyId = horizontalAxis.getIdOfSegmentPosition(columnPosition)
+			val value = rowObject.getPropertyValue(propertyId)
+			
+			new ReadOnlyCell(this, columnPosition, rowPosition, value)
+		}
 	}
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
index 8f812bb..b5a761f 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
@@ -27,11 +27,11 @@
 	// Axis interface
 	
 	override getSegmentCount() {
-		subLayers.fold(0, [ acc, layer | acc + layer.axis.segmentCount ])
+		subLayers.fold(0L, [ acc, layer | acc + layer.axis.segmentCount ])
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
-		var segmentOffset = 0
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
+		var segmentOffset = 0L
 		var pixelOffset = 0.0
 		
 		for (subLayer : subLayers) {
@@ -52,7 +52,7 @@
 		if (pixelLocation < 0) return -1
 		if (pixelLocation >= pixelSize) return segmentCount
 		
-		var segmentOffset = 0
+		var segmentOffset = 0L
 		var pixelOffset = 0.0
 		
 		for (subLayer : subLayers) {
@@ -69,8 +69,8 @@
 		segmentOffset
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
-		var segmentOffset = 0
+	override getIdOfSegmentPosition(long segmentPosition) {
+		var segmentOffset = 0L
 		
 		for (subLayer : subLayers) {
 			val subAxis = subLayer.axis
@@ -86,7 +86,7 @@
 	}
 	
 	override getSegmentPositionOfId(Serializable segmentId) {
-		var segmentOffset = 0
+		var segmentOffset = 0L
 		
 		for (subLayer : subLayers) {
 			val subAxis = subLayer.axis
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend
index 717834f..c43878e 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend
@@ -7,10 +7,10 @@
 	
 	val CompositeLayer compositeLayer
 	val Cell subLayerCell
-	val int columnPositionOffset
-	val int rowPositionOffset
+	val long columnPositionOffset
+	val long rowPositionOffset
 	
-	new(CompositeLayer compositeLayer, Cell subLayerCell, int columnPositionOffset, int rowPositionOffset) {
+	new(CompositeLayer compositeLayer, Cell subLayerCell, long columnPositionOffset, long rowPositionOffset) {
 		this.compositeLayer = compositeLayer
 		this.subLayerCell = subLayerCell
 		this.columnPositionOffset = columnPositionOffset
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
index 828a356..9ddcc0e 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
@@ -46,7 +46,7 @@
 	override CompositeAxis getHorizontalAxis() { horizontalAxis }
 	override CompositeAxis getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		val xLayoutInfo = horizontalAxis.getSubLayerLayoutPositionInfo(columnPosition)
 		val yLayoutInfo = verticalAxis.getSubLayerLayoutPositionInfo(rowPosition)
 		
@@ -64,11 +64,11 @@
 	
 	//
 	
-	def private CompositeLayoutInfo getSubLayerLayoutPositionInfo(CompositeAxis compositeAxis, int segmentPosition) {
+	def private CompositeLayoutInfo getSubLayerLayoutPositionInfo(CompositeAxis compositeAxis, long segmentPosition) {
 		val subLayers = compositeAxis.subLayers
 		val axisAccessor = compositeAxis.axisAccessor
 		
-		var segmentOffset = 0
+		var segmentOffset = 0L
 		
 		for (layoutPosition : 0 ..< subLayers.size) {
 			val axis = axisAccessor.getAxis(subLayers.get(layoutPosition))
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend
index 61ee7a2..4d895a6 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend
@@ -4,6 +4,6 @@
 class CompositeLayoutInfo {
 	
 	int layoutPosition
-	int segmentOffset
+	long segmentOffset
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
index 08987dc..f6fbc43 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
@@ -39,7 +39,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new LayerDataAccessorCell(this, columnPosition, rowPosition, layerDataAccessor)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
index 39b3077..b12fdbc 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
@@ -39,7 +39,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new LayerDataAccessorCell(this, columnPosition, rowPosition, layerDataAccessor)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
index 944e3b0..acc7e26 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
@@ -42,7 +42,7 @@
 		viewportAxisListener?.viewportAxisChanged
 	}
 	
-	def int getOriginSegmentPosition() {
+	def long getOriginSegmentPosition() {
 		underlyingAxis.getSegmentPositionOfPixelLocation(pixelOrigin)
 	}
 	
@@ -62,7 +62,7 @@
 		(endSegmentPosition + if (isEndPixelInsideEndSegment) 1 else 0) - originSegmentPosition
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		underlyingAxis.getStartPixelOfSegmentPosition(originSegmentPosition + segmentPosition) - pixelOrigin
 	}
 	
@@ -73,7 +73,7 @@
 		underlyingAxis.getSegmentPositionOfPixelLocation(underlyingPixelLocation) - originSegmentPosition
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
+	override getIdOfSegmentPosition(long segmentPosition) {
 		underlyingAxis.getIdOfSegmentPosition(originSegmentPosition + segmentPosition)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend
index ecaa30a..f936ebd 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend
@@ -6,10 +6,10 @@
 class ViewportCell implements Cell {
 	
 	val ViewportLayer viewportLayer
-	val int columnPosition
-	val int rowPosition
+	val long columnPosition
+	val long rowPosition
 	
-	new(ViewportLayer viewportLayer, int columnPosition, int rowPosition) {
+	new(ViewportLayer viewportLayer, long columnPosition, long rowPosition) {
 		this.viewportLayer = viewportLayer
 		this.columnPosition = columnPosition
 		this.rowPosition = rowPosition
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
index 05cc194..575648f 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
@@ -36,7 +36,7 @@
 	override ViewportAxis getHorizontalAxis() { horizontalAxis }
 	override ViewportAxis getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new ViewportCell(this, columnPosition, rowPosition)
 	}