diff --git a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties
index 8b0c496..b48e201 100644
--- a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties
+++ b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties
@@ -1,3 +1,3 @@
 GridLayer=org.eclipse.nebula.widgets.nattable.core.example.impl.GridLayer
+SmallLayerExample=org.eclipse.nebula.widgets.nattable.core.example.impl.SmallLayerExample|A little example
 big=|Huge examples
-SmallLayerExample=org.eclipse.nebula.widgets.nattable.core.example.impl.SmallLayerExample
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/META-INF/MANIFEST.MF b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/META-INF/MANIFEST.MF
index aea7455..6d41089 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/META-INF/MANIFEST.MF
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/META-INF/MANIFEST.MF
@@ -5,3 +5,4 @@
 Bundle-Version: 2.0.0.qualifier
 Fragment-Host: org.eclipse.nebula.widgets.nattable.renderer.javafx;bundle-version="2.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.nebula.widgets.nattable.core.example;bundle-version="1.0.0"
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/JavaFXExample.xtend b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/JavaFXExample.xtend
index 4af9382..b45b31a 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/JavaFXExample.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/JavaFXExample.xtend
@@ -6,7 +6,15 @@
 import javafx.stage.Stage
 import org.eclipse.nebula.widgets.nattable.core.layer.Layer
 import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AxisImpl
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.hideshow.HideShowAxis
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.reorder.ReorderAxis
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.DimensionallyDependentLayer
 import org.eclipse.nebula.widgets.nattable.core.layer.impl.DummyLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.LayerDataAccessorImpl
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.composite.CompositeLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.header.ColumnHeaderLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.header.RowHeaderLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
 import org.eclipse.nebula.widgets.nattable.renderer.javafx.JavaFXNatTable
 
 class JavaFXExample extends Application {
@@ -15,15 +23,17 @@
         launch(args)
     }
     
+    //
+    
     override start(Stage primaryStage) {
         primaryStage.title = "NatTable -> JavaFX"
         val root = new Pane
         
-        val natTable = new JavaFXNatTable(layer, 300, 250)
+        val natTable = new JavaFXNatTable(layer)
         
         root.children += natTable
 
-        primaryStage.scene = new Scene(root)
+        primaryStage.scene = new Scene(root, 500, 400)
         primaryStage.show
         
         natTable.widthProperty.bind(root.widthProperty)
@@ -31,10 +41,26 @@
     }
     
 	def Layer getLayer() {
-    	new DummyLayer(
-    		new AxisImpl(4, 200),
-    		new AxisImpl(4, 100)
-    	)
+		val bodyLayer = new ViewportLayer(new DummyLayer(
+			// Horizontal axis
+			new ReorderAxis(
+				new AxisImpl(10, 200) => [ setPixelSizeOfSegmentPosition(100, 0) ]
+			) => [ reorderSegmentPosition(0, 2) ],
+			
+			// Vertical axis
+			new HideShowAxis(
+				new AxisImpl(10, 100) => [ setPixelSizeOfSegmentPosition(200, 2) ]
+			) => [ hideSegmentId(0) ]
+		))
+
+		val columnHeaderLayer = new ColumnHeaderLayer(bodyLayer.horizontalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | columnId ]))
+		val rowHeaderLayer = new RowHeaderLayer(bodyLayer.verticalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | rowId ]))
+		val cornerLayer = new DimensionallyDependentLayer(rowHeaderLayer.horizontalAxis, columnHeaderLayer.verticalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | "" ]))
+		
+		new CompositeLayer => [
+			addRow(cornerLayer, columnHeaderLayer)
+			addRow(rowHeaderLayer, bodyLayer)
+		]
     }
     
 }
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/JavaFXNatExamplesRunner.xtend b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/JavaFXNatExamplesRunner.xtend
new file mode 100644
index 0000000..56810a6
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/JavaFXNatExamplesRunner.xtend
@@ -0,0 +1,127 @@
+package org.eclipse.nebula.widgets.nattable.renderer.javafx.example
+
+import java.util.HashSet
+import javafx.application.Application
+import javafx.geometry.Pos
+import javafx.scene.Scene
+import javafx.scene.control.Label
+import javafx.scene.control.Tab
+import javafx.scene.control.TabPane
+import javafx.scene.control.TreeCell
+import javafx.scene.control.TreeItem
+import javafx.scene.control.TreeView
+import javafx.scene.image.Image
+import javafx.scene.image.ImageView
+import javafx.scene.layout.BorderPane
+import javafx.scene.layout.StackPane
+import javafx.stage.Stage
+import org.eclipse.nebula.widgets.nattable.core.example.index.NatExamplesIndex
+import org.eclipse.nebula.widgets.nattable.core.example.index.node.CategoryNode
+import org.eclipse.nebula.widgets.nattable.core.example.index.node.IndexNode
+import org.eclipse.nebula.widgets.nattable.core.example.index.node.NatExampleNode
+import org.eclipse.nebula.widgets.nattable.renderer.javafx.JavaFXNatTable
+
+class JavaFXNatExamplesRunner extends Application {
+	
+	def static void main(String[] args) {
+        launch(args)
+	}
+	
+	//
+	
+    val nodeImage = new Image(class.getResourceAsStream("opened_folder.png"))
+    val rootTreeItem = new TreeItem<IndexNode>(NatExamplesIndex::rootNode, new ImageView(nodeImage))
+	val tabPane = new TabPane
+	
+	val exampleNodes = new HashSet<NatExampleNode>
+	
+	override start(Stage primaryStage) throws Exception {
+        primaryStage.title = "NatTable -> JavaFX"
+        val grid = new BorderPane
+        
+        // Nav tree
+        val indexNode = NatExamplesIndex::rootNode
+        indexNode.createTreeItem(rootTreeItem)
+	    grid.left = new TreeView<IndexNode>(rootTreeItem) => [
+	    	showRoot = false
+        	editable = true
+        	cellFactory = [ treeView | new NavTreeCell(this) as TreeCell<IndexNode> ]
+       	]
+		
+		// Example pane
+	    grid.center = tabPane
+        
+        val scene = new Scene(grid, 1000, 600)
+        scene.stylesheets += "style.css"
+        primaryStage.scene = scene
+        primaryStage.show
+
+		// Stop
+		for (exampleNode : exampleNodes)
+			exampleNode.natExample.stop
+	}
+	
+	def void createTreeItem(IndexNode indexNode, TreeItem<IndexNode> treeItem) {
+		for (childIndexNodeName : indexNode.childNodeNames) {
+			val childIndexNode = indexNode.getChildNode(childIndexNodeName)
+			val childTreeItem = switch (childIndexNode) {
+				NatExampleNode: new TreeItem<IndexNode>(childIndexNode)
+				CategoryNode: new TreeItem<IndexNode>(childIndexNode, new ImageView(nodeImage))
+			}
+			childIndexNode.createTreeItem(childTreeItem)
+			treeItem.children += childTreeItem
+		}
+	}
+	
+	def void openExampleInTab(NatExampleNode node) {
+		exampleNodes += node
+		
+		tabPane.tabs += new Tab => [
+			text = node.displayName
+			
+			content = new BorderPane => [
+				// Create example control
+				center = new StackPane => [
+					val centerPane = it
+					children += new JavaFXNatTable(node.natExample.createLayer) => [
+				        widthProperty.bind(centerPane.widthProperty)
+				        heightProperty.bind(centerPane.heightProperty)
+			        ]
+				]
+				
+				// Description
+				val description = node.natExample.description
+				if (description != null && description.length() > 0) {
+					bottom = new StackPane => [
+						children += new Label(" Description ") => [
+						    styleClass += "bordered-titled-title"
+			    			StackPane::setAlignment(it, Pos::TOP_LEFT)
+						]
+						
+					    children += new StackPane => [
+						    children += new Label(description) => [
+						    	styleClass += "bordered-titled-content"
+						    ]
+					    ]
+						
+					    styleClass += "bordered-titled-border"
+					]
+				}
+			]
+			
+			onClosed = [
+				// Stop
+				node.natExample.stop
+				
+				// Remove from map
+				exampleNodes.remove(node)
+			]
+			
+			tabPane.selectionModel.select(it)
+		]
+		
+		// Start
+		node.natExample.start
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/NavTreeCell.xtend b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/NavTreeCell.xtend
new file mode 100644
index 0000000..5eb2374
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/NavTreeCell.xtend
@@ -0,0 +1,37 @@
+package org.eclipse.nebula.widgets.nattable.renderer.javafx.example
+
+import javafx.scene.control.TreeCell
+import org.eclipse.nebula.widgets.nattable.core.example.index.node.IndexNode
+import org.eclipse.nebula.widgets.nattable.core.example.index.node.NatExampleNode
+
+class NavTreeCell extends TreeCell<IndexNode> {
+
+	val JavaFXNatExamplesRunner runner
+	
+	new(JavaFXNatExamplesRunner runner) {
+		this.runner = runner
+	}
+	
+	override startEdit() {
+		super.startEdit
+		
+		if (item instanceof NatExampleNode)
+			runner.openExampleInTab(item as NatExampleNode)
+	}
+
+	override updateItem(IndexNode item, boolean empty) {
+		super.updateItem(item, empty)
+
+		if (empty) {
+			text = null
+			graphic = null
+		} else {
+			text = string
+			graphic = treeItem.graphic
+		}
+	}
+
+	def private String getString() {
+		item?.displayName ?: ""
+	}
+}
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/TreeViewSample.java b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/TreeViewSample.java
new file mode 100644
index 0000000..3ff4d17
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/TreeViewSample.java
@@ -0,0 +1,184 @@
+package org.eclipse.nebula.widgets.nattable.renderer.javafx.example;
+import java.util.Arrays;
+import java.util.List;
+
+import javafx.application.Application;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.event.EventHandler;
+import javafx.scene.Node;
+import javafx.scene.Scene;
+import javafx.scene.control.TextField;
+import javafx.scene.control.TreeCell;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeView;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.KeyCode;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.stage.Stage;
+import javafx.util.Callback;
+ 
+public class TreeViewSample extends Application {
+ 
+    private final Node rootIcon = 
+        new ImageView(new Image(getClass().getResourceAsStream("opened_folder.png")));
+    private final Image depIcon = 
+        new Image(getClass().getResourceAsStream("opened_folder.png"));
+    List<Employee> employees = Arrays.<Employee>asList(
+            new Employee("Ethan Williams", "Sales Department"),
+            new Employee("Emma Jones", "Sales Department"),
+            new Employee("Michael Brown", "Sales Department"),
+            new Employee("Anna Black", "Sales Department"),
+            new Employee("Rodger York", "Sales Department"),
+            new Employee("Susan Collins", "Sales Department"),
+            new Employee("Mike Graham", "IT Support"),
+            new Employee("Judy Mayer", "IT Support"),
+            new Employee("Gregory Smith", "IT Support"),
+            new Employee("Jacob Smith", "Accounts Department"),
+            new Employee("Isabella Johnson", "Accounts Department"));
+    TreeItem<String> rootNode = 
+        new TreeItem<String>("MyCompany Human Resources", rootIcon);
+ 
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
+ 
+    @Override
+    public void start(Stage stage) {
+        rootNode.setExpanded(true);
+        for (Employee employee : employees) {
+            TreeItem<String> empLeaf = new TreeItem<String>(employee.getName());
+            boolean found = false;
+            for (TreeItem<String> depNode : rootNode.getChildren()) {
+                if (depNode.getValue().contentEquals(employee.getDepartment())){
+                    depNode.getChildren().add(empLeaf);
+                    found = true;
+                    break;
+                }
+            }
+            if (!found) {
+                TreeItem<String> depNode = new TreeItem<String>(
+                    employee.getDepartment(), 
+                    new ImageView(depIcon)
+                );
+                rootNode.getChildren().add(depNode);
+                depNode.getChildren().add(empLeaf);
+            }
+        }
+ 
+        stage.setTitle("Tree View Sample");
+        VBox box = new VBox();
+        final Scene scene = new Scene(box, 400, 300);
+        scene.setFill(Color.LIGHTGRAY);
+ 
+        TreeView<String> treeView = new TreeView<String>(rootNode);
+        treeView.setEditable(true);
+        treeView.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){
+            @Override
+            public TreeCell<String> call(TreeView<String> p) {
+                return new TextFieldTreeCellImpl();
+            }
+        });
+ 
+        box.getChildren().add(treeView);
+        stage.setScene(scene);
+        stage.show();
+    }
+ 
+    private final class TextFieldTreeCellImpl extends TreeCell<String> {
+ 
+        private TextField textField;
+ 
+        public TextFieldTreeCellImpl() {
+        }
+ 
+        @Override
+        public void startEdit() {
+            super.startEdit();
+ 
+            if (textField == null) {
+            	System.out.println("edit!");
+                createTextField();
+            }
+            setText(null);
+            setGraphic(textField);
+            textField.selectAll();
+        }
+ 
+        @Override
+        public void cancelEdit() {
+            super.cancelEdit();
+            setText((String) getItem());
+            setGraphic(getTreeItem().getGraphic());
+        }
+ 
+        @Override
+        public void updateItem(String item, boolean empty) {
+            super.updateItem(item, empty);
+ 
+            if (empty) {
+                setText(null);
+                setGraphic(null);
+            } else {
+                if (isEditing()) {
+                    if (textField != null) {
+                        textField.setText(getString());
+                    }
+                    setText(null);
+                    setGraphic(textField);
+                } else {
+                    setText(getString());
+                    setGraphic(getTreeItem().getGraphic());
+                }
+            }
+        }
+ 
+        private void createTextField() {
+            textField = new TextField(getString());
+            textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
+ 
+                @Override
+                public void handle(KeyEvent t) {
+                    if (t.getCode() == KeyCode.ENTER) {
+                        commitEdit(textField.getText());
+                    } else if (t.getCode() == KeyCode.ESCAPE) {
+                        cancelEdit();
+                    }
+                }
+            });
+        }
+ 
+        private String getString() {
+            return getItem() == null ? "" : getItem().toString();
+        }
+    }
+ 
+    public static class Employee {
+ 
+        private final SimpleStringProperty name;
+        private final SimpleStringProperty department;
+ 
+        private Employee(String name, String department) {
+            this.name = new SimpleStringProperty(name);
+            this.department = new SimpleStringProperty(department);
+        }
+ 
+        public String getName() {
+            return name.get();
+        }
+ 
+        public void setName(String fName) {
+            name.set(fName);
+        }
+ 
+        public String getDepartment() {
+            return department.get();
+        }
+ 
+        public void setDepartment(String fName) {
+            department.set(fName);
+        }
+    }
+}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/opened_folder.png b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/opened_folder.png
new file mode 100644
index 0000000..6f2c5f7
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/example/opened_folder.png
Binary files differ
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/style.css b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/style.css
new file mode 100644
index 0000000..477d90e
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx.example/src/style.css
@@ -0,0 +1,24 @@
+.button1{
+    -fx-text-fill: #006464;
+    -fx-background-color: #DFB951;
+    -fx-border-radius: 20;
+    -fx-background-radius: 20;
+    -fx-padding: 5;
+}
+
+.bordered-titled-title {
+  -fx-background-color: white;
+  -fx-translate-y: -16;
+}
+
+.bordered-titled-border {
+  -fx-content-display: top;
+  -fx-border-insets: 20 15 15 15;
+  -fx-background-color: white;
+  -fx-border-color: black;
+  -fx-border-width: 2;
+}
+
+.bordered-titled-content {
+  -fx-padding: 26 10 10 10;
+}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend b/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend
index fed9af0..9bd1cbd 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/JavaFXNatTable.xtend
@@ -16,8 +16,7 @@
 	
 	val Layer layer
 	
-	new(Layer layer, double width, double height) {
-		super(width, height)
+	new(Layer layer) {
 		this.layer = layer
 		
 		paintLayer
