diff -r 7c2354578408 modules/controls/src/main/java/com/sun/javafx/scene/control/SelectedCellsMap.java
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/SelectedCellsMap.java	Wed Feb 05 08:35:28 2014 +0100
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/SelectedCellsMap.java	Wed Feb 05 11:53:38 2014 +0100
@@ -48,12 +48,19 @@
 // T == TablePosition<S,?>
 public class SelectedCellsMap<T extends TablePositionBase> {
     private final ObservableList<T> selectedCells;
+    private final ObservableList<T> sortedSelectedCells;
 
     private final Map<Integer, BitSet> selectedCellBitSetMap;
 
     public SelectedCellsMap(final ListChangeListener<T> listener) {
         selectedCells = FXCollections.<T>observableArrayList();
-        selectedCells.addListener(listener);
+        sortedSelectedCells = selectedCells.sorted(new Comparator<T>() {
+            @Override
+            public int compare(T o1, T o2) {
+                return o1.getRow() - o2.getRow();
+            }
+        });
+        sortedSelectedCells.addListener(listener);
 
         selectedCellBitSetMap = new TreeMap<>(new Comparator<Integer>() {
             @Override public int compare(Integer o1, Integer o2) {
@@ -70,7 +77,7 @@
         if (i < 0) {
             return null;
         }
-        return selectedCells.get(i);
+        return sortedSelectedCells.get(i);
     }
 
     public void add(T tp) {
@@ -193,7 +200,7 @@
     }
 
     public int indexOf(T tp) {
-        return selectedCells.indexOf(tp);
+        return sortedSelectedCells.indexOf(tp);
     }
 
     public boolean isEmpty() {
diff -r 7c2354578408 modules/controls/src/main/java/javafx/scene/control/MultipleSelectionModelBase.java
--- a/modules/controls/src/main/java/javafx/scene/control/MultipleSelectionModelBase.java	Wed Feb 05 08:35:28 2014 +0100
+++ b/modules/controls/src/main/java/javafx/scene/control/MultipleSelectionModelBase.java	Wed Feb 05 11:53:38 2014 +0100
@@ -458,6 +458,7 @@
             // we may have requested to select row 5, and the selectedIndices
             // list may therefore have the following: [1,4,5], meaning row 5
             // is in position 2 of the selectedIndices list
+            Collections.sort(actualSelectedRows);
             Change<Integer> change = createRangeChange(selectedIndicesSeq, actualSelectedRows);
             selectedIndicesSeq.callObservers(change);
         }
@@ -503,18 +504,19 @@
                 
                 // starting from pos, we keep going until the value is
                 // not the next value
-                from = pos;
                 int startValue = addedItems.get(pos++);
+                from = list.indexOf(startValue);
+                to = from + 1;
                 int endValue = startValue;
                 while (pos < addedSize) {
                     int previousEndValue = endValue;
                     endValue = addedItems.get(pos++);
+                    ++to;
                     if (previousEndValue != (endValue - 1)) {
                         break;
                     }
                 }
-                to = pos;
-                
+
                 if (invalid) {
                     invalid = false;
                     return true; 
diff -r 7c2354578408 modules/controls/src/test/java/javafx/scene/control/MultipleSelectionModelImplTest.java
--- a/modules/controls/src/test/java/javafx/scene/control/MultipleSelectionModelImplTest.java	Wed Feb 05 08:35:28 2014 +0100
+++ b/modules/controls/src/test/java/javafx/scene/control/MultipleSelectionModelImplTest.java	Wed Feb 05 11:53:38 2014 +0100
@@ -994,7 +994,6 @@
         tableSM.clearAndSelect(1);
     }
 
-    @Ignore
     @Test public void test_rt35624_selectedIndices_downwards() {
         model.select(2);
 
@@ -1037,7 +1036,6 @@
         model.selectIndices(4, 3, 2);
     }
 
-    @Ignore
     @Test public void test_rt35624_selectedItems_downwards() {
         model.select(2);
 
@@ -1084,7 +1082,6 @@
         model.selectIndices(2, 3, 4);
     }
 
-    @Ignore
     @Test public void test_rt35624_selectedItems_upwards() {
         model.select(4);
 
