pulled out axis segment
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/Axis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/Axis.xtend
index 781efc0..25bec8f 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/Axis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/Axis.xtend
@@ -1,7 +1,11 @@
 package org.eclipse.nebula.widgets.nattable.core.axis
 
 import java.io.Serializable
+import org.eclipse.nebula.widgets.nattable.core.axis.segment.AxisSegment
 
+/**
+ * Represents a linear dimension (e.g. horizontal columns or vertical rows)
+ */
 interface Axis {
 	
 	/**
@@ -27,8 +31,6 @@
 	 */
 	def Serializable getIdOfSegmentPosition(int segmentPosition)
 	
-	def Object getSegmentDataValue(int segmentPosition)
-	
-	def void setSegmentDataValue(int segmentPosition, Object newValue)
+	def AxisSegment getSegment(int segmentPosition)
 	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/AxisDataAccessor.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/AxisDataAccessor.xtend
new file mode 100644
index 0000000..dd44ae5
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/AxisDataAccessor.xtend
@@ -0,0 +1,5 @@
+package org.eclipse.nebula.widgets.nattable.core.axis
+
+interface AxisDataAccessor {
+	
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/DefaultAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/DefaultAxis.xtend
index 9120188..9acaac0 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/DefaultAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/DefaultAxis.xtend
@@ -1,5 +1,7 @@
 package org.eclipse.nebula.widgets.nattable.core.axis
 
+import org.eclipse.nebula.widgets.nattable.core.axis.segment.ReadOnlyAxisSegment
+
 class DefaultAxis implements Axis {
 	
 	int segmentCount
@@ -26,12 +28,8 @@
 		segmentPosition
 	}
 	
-	override getSegmentDataValue(int segmentPosition) {
-		segmentPosition
-	}
-	
-	override setSegmentDataValue(int segmentPosition, Object newValue) {
-		throw new UnsupportedOperationException("TODO: auto-generated method stub")
+	override getSegment(int segmentPosition) {
+		new ReadOnlyAxisSegment(this, segmentPosition, 1, segmentPosition)
 	}
 	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/AbstractAxisSegment.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/AbstractAxisSegment.xtend
new file mode 100644
index 0000000..9d8037f
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/AbstractAxisSegment.xtend
@@ -0,0 +1,21 @@
+package org.eclipse.nebula.widgets.nattable.core.axis.segment
+
+import org.eclipse.nebula.widgets.nattable.core.axis.Axis
+
+abstract class AbstractAxisSegment implements AxisSegment {
+	
+	val Axis axis
+	val int segmentPosition
+	val int segmentSpan
+	
+	new(Axis axis, int segmentPosition, int segmentSpan) {
+		this.axis = axis
+		this.segmentPosition = segmentPosition
+		this.segmentSpan = segmentSpan
+	}
+	
+	override getAxis() { axis }
+	override getSegmentPosition() { segmentPosition }
+	override getSegmentSpan() { segmentSpan }
+	
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/AxisSegment.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/AxisSegment.xtend
new file mode 100644
index 0000000..1bf2b82
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/AxisSegment.xtend
@@ -0,0 +1,14 @@
+package org.eclipse.nebula.widgets.nattable.core.axis.segment
+
+import org.eclipse.nebula.widgets.nattable.core.axis.Axis
+
+interface AxisSegment {
+	
+	def Axis getAxis()
+	def int getSegmentPosition()
+	def int getSegmentSpan()
+	
+	def Object getDataValue()
+	def void setDataValue(Object newValue)
+	
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/ReadOnlyAxisSegment.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/ReadOnlyAxisSegment.xtend
new file mode 100644
index 0000000..53fda77
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/segment/ReadOnlyAxisSegment.xtend
@@ -0,0 +1,23 @@
+package org.eclipse.nebula.widgets.nattable.core.axis.segment
+
+import org.eclipse.nebula.widgets.nattable.core.axis.Axis
+
+class ReadOnlyAxisSegment extends AbstractAxisSegment {
+	
+	val Object dataValue
+	
+	new(Axis axis, int segmentPosition, int segmentSpan, Object dataValue) {
+		super(axis, segmentPosition, segmentSpan)
+		
+		this.dataValue = dataValue
+	}
+	
+	override getDataValue() {
+		dataValue
+	}
+	
+	override setDataValue(Object newValue) {
+		throw new UnsupportedOperationException("TODO: auto-generated method stub")
+	}
+	
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/viewport/ViewportAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/viewport/ViewportAxis.xtend
index bc12049..13168cc 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/viewport/ViewportAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/axis/viewport/ViewportAxis.xtend
@@ -47,12 +47,8 @@
 		underlyingAxis.getIdOfSegmentPosition(originSegmentPosition + segmentPosition)
 	}
 	
-	override getSegmentDataValue(int segmentPosition) {
-		underlyingAxis.getSegmentDataValue(originSegmentPosition + segmentPosition)
-	}
-	
-	override setSegmentDataValue(int segmentPosition, Object newValue) {
-		underlyingAxis.setSegmentDataValue(originSegmentPosition + segmentPosition, newValue)
+	override getSegment(int segmentPosition) {
+		underlyingAxis.getSegment(originSegmentPosition + segmentPosition)
 	}
 	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend
index fdab9a0..8fb1b0d 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend
@@ -2,7 +2,7 @@
 
 import org.eclipse.nebula.widgets.nattable.core.axis.Axis
 import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.cell.ReadOnlyCell
+import org.eclipse.nebula.widgets.nattable.core.layer.cell.ReadOnlyCell
 
 class DummyLayer implements Layer {
 
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
index aaed4cc..edcf6c0 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
@@ -1,7 +1,7 @@
 package org.eclipse.nebula.widgets.nattable.core.layer
 
 import org.eclipse.nebula.widgets.nattable.core.axis.Axis
-import org.eclipse.nebula.widgets.nattable.core.cell.Cell
+import org.eclipse.nebula.widgets.nattable.core.layer.cell.Cell
 
 interface Layer {
 	
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend
index 54cb127..4ed5e8e 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend
@@ -4,8 +4,8 @@
 import java.util.List
 import org.eclipse.nebula.widgets.nattable.core.axis.Axis
 import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.cell.ReadOnlyCell
 import org.eclipse.nebula.widgets.nattable.core.data.ObjectPropertyAccessor
+import org.eclipse.nebula.widgets.nattable.core.layer.cell.ReadOnlyCell
 
 class ListRowDataLayer implements Layer {
 	
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/Cell.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/Cell.xtend
similarity index 82%
rename from NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/Cell.xtend
rename to NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/Cell.xtend
index 109bd94..ef0f4f3 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/Cell.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/Cell.xtend
@@ -1,4 +1,4 @@
-package org.eclipse.nebula.widgets.nattable.core.cell
+package org.eclipse.nebula.widgets.nattable.core.layer.cell
 
 import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/CellInvariants.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/CellInvariants.xtend
similarity index 92%
rename from NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/CellInvariants.xtend
rename to NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/CellInvariants.xtend
index 612c542..22c2a9c 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/CellInvariants.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/CellInvariants.xtend
@@ -1,4 +1,4 @@
-package org.eclipse.nebula.widgets.nattable.core.cell
+package org.eclipse.nebula.widgets.nattable.core.layer.cell
 
 import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
 
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/LayerDataAccessorCell.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/LayerDataAccessorCell.xtend
similarity index 94%
rename from NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/LayerDataAccessorCell.xtend
rename to NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/LayerDataAccessorCell.xtend
index 711a93c..94ce514 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/LayerDataAccessorCell.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/LayerDataAccessorCell.xtend
@@ -1,4 +1,4 @@
-package org.eclipse.nebula.widgets.nattable.core.cell
+package org.eclipse.nebula.widgets.nattable.core.layer.cell
 
 import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/ReadOnlyCell.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/ReadOnlyCell.xtend
similarity index 92%
rename from NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/ReadOnlyCell.xtend
rename to NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/ReadOnlyCell.xtend
index 19abaad..d8a2e62 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/ReadOnlyCell.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/ReadOnlyCell.xtend
@@ -1,4 +1,4 @@
-package org.eclipse.nebula.widgets.nattable.core.cell
+package org.eclipse.nebula.widgets.nattable.core.layer.cell
 
 import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeAxis.xtend
index 5356a3a..61d541e 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeAxis.xtend
@@ -71,14 +71,14 @@
 		null
 	}
 	
-	override getSegmentDataValue(int segmentPosition) {
+	override getSegment(int segmentPosition) {
 		var segmentOffset = 0
 		
 		for (layer : layers) {
 			val axis = layer.axis
 			
 			if (segmentPosition < axis.segmentCount)
-				return axis.getSegmentDataValue(segmentPosition - segmentOffset)
+				return axis.getSegment(segmentPosition - segmentOffset)
 			
 			segmentOffset = segmentOffset + axis.segmentCount
 		}
@@ -86,19 +86,4 @@
 		null
 	}
 	
-	override setSegmentDataValue(int segmentPosition, Object newValue) {
-		var segmentOffset = 0
-		
-		for (layer : layers) {
-			val axis = layer.axis
-			
-			if (segmentPosition < axis.segmentCount) {
-				axis.setSegmentDataValue(segmentPosition - segmentOffset, newValue)
-				return
-			}
-			
-			segmentOffset = segmentOffset + axis.segmentCount
-		}
-	}
-	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend
index b689bf4..cce2315 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend
@@ -2,9 +2,9 @@
 
 import org.eclipse.nebula.widgets.nattable.core.axis.Axis
 import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.cell.LayerDataAccessorCell
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
 import org.eclipse.nebula.widgets.nattable.core.layer.LayerDataAccessor
+import org.eclipse.nebula.widgets.nattable.core.layer.cell.LayerDataAccessorCell
 
 class ColumnHeaderLayer implements Layer, LayerDataAccessor {
 	
@@ -29,11 +29,11 @@
 	// LayerDataAccessor
 	
 	override getCellDataValue(int columnPosition, int rowPosition) {
-		horizontalAxis.getSegmentDataValue(columnPosition)
+		horizontalAxis.getSegment(columnPosition).dataValue
 	}
 	
 	override setCellDataValue(int columnPosition, int rowPosition, Object newValue) {
-		horizontalAxis.setSegmentDataValue(columnPosition, newValue)
+		horizontalAxis.getSegment(columnPosition).setDataValue(newValue)
 	}
 	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend
index e1f2dc5..6847c29 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend
@@ -2,9 +2,9 @@
 
 import org.eclipse.nebula.widgets.nattable.core.axis.Axis
 import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.cell.LayerDataAccessorCell
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
 import org.eclipse.nebula.widgets.nattable.core.layer.LayerDataAccessor
+import org.eclipse.nebula.widgets.nattable.core.layer.cell.LayerDataAccessorCell
 
 class RowHeaderLayer implements Layer, LayerDataAccessor {
 	
@@ -29,11 +29,11 @@
 	// LayerDataAccessor
 	
 	override getCellDataValue(int columnPosition, int rowPosition) {
-		verticalAxis.getSegmentDataValue(rowPosition)
+		verticalAxis.getSegment(rowPosition).dataValue
 	}
 	
 	override setCellDataValue(int columnPosition, int rowPosition, Object newValue) {
-		verticalAxis.setSegmentDataValue(rowPosition, newValue)
+		verticalAxis.getSegment(rowPosition).setDataValue(newValue)
 	}
 	
 }
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend
index cfc603b..305f255 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend
@@ -5,8 +5,8 @@
 import javafx.scene.paint.Color
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
 
-import static extension org.eclipse.nebula.widgets.nattable.core.cell.CellInvariants.*
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.LayerInvariants.*
+import static extension org.eclipse.nebula.widgets.nattable.core.layer.cell.CellInvariants.*
 
 class DefaultLayerRenderer implements JavaFXLayerRenderer {