started adding a segmented list
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
index 2f9ba78..937a195 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
@@ -33,26 +33,6 @@
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-import javafx.beans.binding.Binding;
-import javafx.beans.binding.BooleanExpression;
-import javafx.beans.binding.ListBinding;
-import javafx.beans.binding.ObjectBinding;
-import javafx.beans.binding.StringBinding;
-import javafx.beans.property.BooleanProperty;
-import javafx.beans.property.DoubleProperty;
-import javafx.beans.property.FloatProperty;
-import javafx.beans.property.IntegerProperty;
-import javafx.beans.property.LongProperty;
-import javafx.beans.property.Property;
-import javafx.beans.property.SimpleIntegerProperty;
-import javafx.beans.property.StringProperty;
-import javafx.beans.value.ObservableBooleanValue;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.FXCollections;
-import javafx.collections.ListChangeListener;
-import javafx.collections.ListChangeListener.Change;
-import javafx.collections.ObservableList;
-
 import org.eclipse.fx.core.Status;
 import org.eclipse.fx.core.Subscription;
 import org.eclipse.fx.core.ThreadSynchronize;
@@ -71,6 +51,25 @@
 import org.eclipse.fx.core.bindings.internal.SyncObjectBinding;
 import org.eclipse.fx.core.bindings.internal.TenaryBinding;
 
+import javafx.beans.binding.Binding;
+import javafx.beans.binding.ListBinding;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.binding.StringBinding;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.StringProperty;
+import javafx.beans.value.ObservableBooleanValue;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ListChangeListener;
+import javafx.collections.ListChangeListener.Change;
+import javafx.collections.ObservableList;
+
 /**
  * Collection of JavaFX bean bindings.
  *
@@ -112,6 +111,82 @@
 		}
 	}
 
+//	public static <E> ObservableList<ObservableList<E>> segmentedList(int segmentSize, ObservableList<E> list) {
+//		ObservableList<ObservableList<E>> rv = FXCollections.observableArrayList();
+//
+//		ObservableList<E> v = null;
+//		for( int i = 0; i < list.size(); i++ ) {
+//			if( i % segmentSize == 0 ) {
+//				rv.add(v = FXCollections.observableArrayList());
+//			}
+//			if( v != null ) {
+//				v.add(list.get(i));
+//			}
+//		}
+//
+//		list.addListener( (Change<? extends E> c) -> {
+//			while( c.next() ) {
+//				if( c.wasReplaced() || c.wasRemoved() ) {
+//					for( int i = 0; i < c.getAddedSize(); i++ ) {
+//						int ii = i + c.getFrom();
+//						int listIndex = ii / segmentSize;
+//						ObservableList<E> target;
+//						if( rv.size() == listIndex ) {
+//							rv.add(target = FXCollections.observableArrayList());
+//						} else {
+//							target = rv.get(listIndex);
+//						}
+//
+//						if( target.size() == ii % segmentSize ) {
+//							target.add(c.getAddedSubList().get(i));
+//						} else {
+//							target.set(ii % segmentSize, c.getAddedSubList().get(i));
+//						}
+//					}
+//
+//					if( c.getAddedSize() < c.getRemovedSize() ) {
+//						int removeIdx = -1;
+//						for( int i = 0; i < c.getRemovedSize() - c.getAddedSize(); i++ ) {
+//							int ii = i + c.getFrom() + c.getAddedSize();
+//							int listIndex = ii / segmentSize;
+//							if( removeIdx == -1 ) {
+//								if( ii % segmentSize == 0 ) {
+//									removeIdx = listIndex;
+//								} else {
+//									rv.get(listIndex).remove(ii % segmentSize);
+//								}
+//							}
+//						}
+//
+//						if( removeIdx != -1 ) {
+//							List<ObservableList<E>> subList = rv.subList(removeIdx, rv.size());
+//							List<ObservableList<E>> tmp = new ArrayList<>(subList);
+//							subList.clear();
+//							tmp.forEach( List::clear );
+//						}
+//					}
+//				} else if( c.wasAdded() ) {
+//					for( int i = 0; i < c.getAddedSize(); i++ ) {
+//						int ii = i + c.getFrom();
+//						int listIndex = ii / segmentSize;
+//						ObservableList<E> target;
+//						if( rv.size() == listIndex ) {
+//							rv.add(target = FXCollections.observableArrayList());
+//						} else {
+//							target = rv.get(listIndex);
+//						}
+//
+//						if( target.size() == ii % segmentSize ) {
+//							target.add(c.getAddedSubList().get(i));
+//						}
+//					}
+//				}
+//			}
+//		});
+//
+//		return rv;
+//	}
+
 	/**
 	 * Create a concatenated list similar to
 	 * {@link FXCollections#concat(ObservableList...)}