diff --git a/CHANGES.md b/CHANGES.md
index 2ab7c90..5c6a8cb 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,4 +1,6 @@
 ### Apache MetaModel _WIP_
+ * Upgrade to Jackson 2.10.1
+ * Upgrade to Spring 5.2.2
  * [METAMODEL-82] - Detect Column Types with Excel datastores
  * [METAMODEL-1221] - Upgrade to Elasticsearch 7.3
  * Bind Travis build to Trusty distribution to avoid CI build failures.
diff --git a/elasticsearch/common/pom.xml b/elasticsearch/common/pom.xml
index f39b162..29ec710 100644
--- a/elasticsearch/common/pom.xml
+++ b/elasticsearch/common/pom.xml
@@ -33,7 +33,11 @@
 			<artifactId>elasticsearch</artifactId>
 			<version>${elasticsearch.version}</version>
 		</dependency>
-
+		<dependency>
+			<groupId>org.yaml</groupId>
+			<artifactId>snakeyaml</artifactId>
+			<version>1.25</version>
+		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-api</artifactId>
diff --git a/neo4j/src/test/java/org/apache/metamodel/neo4j/Neo4jDataContextTest.java b/neo4j/src/test/java/org/apache/metamodel/neo4j/Neo4jDataContextTest.java
index 1ac7fa2..1cf9b40 100644
--- a/neo4j/src/test/java/org/apache/metamodel/neo4j/Neo4jDataContextTest.java
+++ b/neo4j/src/test/java/org/apache/metamodel/neo4j/Neo4jDataContextTest.java
@@ -21,7 +21,9 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.http.HttpHost;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -217,7 +219,7 @@
         String bookNodeIdJSONObject = requestWrapper.executeCypherQuery("MATCH (n:JUnitBook)"
                 + " WHERE n.title = 'Introduction to algorithms'" + " RETURN id(n);");
         String bookNodeId = new JSONObject(bookNodeIdJSONObject).getJSONArray("results").getJSONObject(0)
-                .getJSONArray("data").getJSONObject(0).getJSONArray("row").getString(0);
+                .getJSONArray("data").getJSONObject(0).getJSONArray("row").optString(0);
 
         Neo4jDataContext strategy = new Neo4jDataContext(getHostname(), getPort(), getUsername(), getPassword());
 
@@ -288,22 +290,22 @@
         String bookNodeIdJSONObject = requestWrapper.executeCypherQuery("MATCH (n:JUnitBook)"
                 + " WHERE n.title = 'Introduction to algorithms'" + " RETURN id(n);");
         String bookNodeId = new JSONObject(bookNodeIdJSONObject).getJSONArray("results").getJSONObject(0)
-                .getJSONArray("data").getJSONObject(0).getJSONArray("row").getString(0);
+                .getJSONArray("data").getJSONObject(0).getJSONArray("row").optString(0);
 
         String helenaNodeIdJSONObject = requestWrapper.executeCypherQuery("MATCH (n:JUnitPerson)"
                 + " WHERE n.name = 'Helena'" + " RETURN id(n);");
         String helenaNodeId = new JSONObject(helenaNodeIdJSONObject).getJSONArray("results").getJSONObject(0)
-                .getJSONArray("data").getJSONObject(0).getJSONArray("row").getString(0);
+                .getJSONArray("data").getJSONObject(0).getJSONArray("row").optString(0);
 
         String tomaszNodeIdJSONObject = requestWrapper.executeCypherQuery("MATCH (n:JUnitPerson)"
                 + " WHERE n.name = 'Tomasz'" + " RETURN id(n);");
         String tomaszNodeId = new JSONObject(tomaszNodeIdJSONObject).getJSONArray("results").getJSONObject(0)
-                .getJSONArray("data").getJSONObject(0).getJSONArray("row").getString(0);
+                .getJSONArray("data").getJSONObject(0).getJSONArray("row").optString(0);
 
         String philomeenaNodeIdJSONObject = requestWrapper.executeCypherQuery("MATCH (n:JUnitPerson)"
                 + " WHERE n.name = 'Philomeena'" + " RETURN id(n);");
         String philomeenaNodeId = new JSONObject(philomeenaNodeIdJSONObject).getJSONArray("results").getJSONObject(0)
-                .getJSONArray("data").getJSONObject(0).getJSONArray("row").getString(0);
+                .getJSONArray("data").getJSONObject(0).getJSONArray("row").optString(0);
 
         Neo4jDataContext strategy = new Neo4jDataContext(getHostname(), getPort(), getUsername(), getPassword());
 
@@ -322,14 +324,31 @@
                 }
             });
             assertEquals(3, rows.size());
-            assertEquals("Row[values=[" + helenaNodeId + ", Helena, 100, null, null, null]]", rows.get(0).toString());
-            assertEquals("Row[values=[" + philomeenaNodeId + ", Philomeena, 18, null, null, " + bookNodeId + "]]", rows
-                    .get(1).toString());
-            assertEquals("Row[values=[" + tomaszNodeId + ", Tomasz, 26, " + bookNodeId + ", 5, null]]", rows.get(2)
-                    .toString());
+
+            validateRow(rows.get(0), helenaNodeId, "Helena", "100", "null", "null", "null");
+            validateRow(rows.get(1), philomeenaNodeId, "Philomeena", "18", "null", "null", bookNodeId);
+            validateRow(rows.get(2), tomaszNodeId, "Tomasz", "26", bookNodeId, "5", "null");
         }
     }
 
+    void validateRow(final Row row, String... expectedValues) {
+        // Because the order of columns can vary over different test runs, we have to determine at which index the
+        // columns are.
+        final Map<String, Integer> columnNameMap = new HashMap<>();
+        for (int i = 0; i < 6; i++) {
+            String columnName = row.getSelectItems().get(i).getColumn().getName();
+
+            columnNameMap.put(columnName, i);
+        }
+
+        assertEquals(expectedValues[0], row.getValue(columnNameMap.get("_id")).toString());
+        assertEquals(expectedValues[1], row.getValue(columnNameMap.get("name")).toString());
+        assertEquals(expectedValues[2], row.getValue(columnNameMap.get("age")).toString());
+        assertEquals(expectedValues[3], row.getValue(columnNameMap.get("rel_HAS_READ")).toString());
+        assertEquals(expectedValues[4], row.getValue(columnNameMap.get("rel_HAS_READ#rating")).toString());
+        assertEquals(expectedValues[5], row.getValue(columnNameMap.get("rel_HAS_BROWSED")).toString());
+    }
+
     @Test
     public void testWhereClause() throws Exception {
         if (!isConfigured()) {
@@ -445,7 +464,7 @@
         String bookNodeIdJSONObject = requestWrapper.executeCypherQuery("MATCH (n:JUnitBook)"
                 + " WHERE n.title = 'Introduction to algorithms'" + " RETURN id(n);");
         String bookNodeId = new JSONObject(bookNodeIdJSONObject).getJSONArray("results").getJSONObject(0)
-                .getJSONArray("data").getJSONObject(0).getJSONArray("row").getString(0);
+                .getJSONArray("data").getJSONObject(0).getJSONArray("row").optString(0);
 
         Neo4jDataContext strategy = new Neo4jDataContext(getHostname(), getPort(), getUsername(), getPassword());
 
@@ -486,11 +505,21 @@
         // create datacontext using detected schema
         final DataContext dc = new Neo4jDataContext(getHostname(), getPort(), getUsername(), getPassword());
 
+        final String expectedFirstResult;
         try (final DataSet ds = dc.query().from("JUnitLabel").select("name").and("age").firstRow(2).execute()) {
             assertTrue("Class: " + ds.getClass().getName(), ds instanceof Neo4jDataSet);
             assertTrue(ds.next());
             final Row row = ds.getRow();
-            assertEquals("Row[values=[Jane Doe, null]]", row.toString());
+            
+            // Because the select query doesn't return results in an ordered manner, we can't be sure which result will
+            // be returned first and which second, but we do know that the one expected here (the second) shouldn't be
+            // the one returned first by the second query.
+            if (row.toString().equals("Row[values=[Jane Doe, null]]")) {
+                expectedFirstResult = "Row[values=[John Doe, 30]]";
+            } else {
+                assertEquals("Row[values=[John Doe, 30]]", row.toString());
+                expectedFirstResult = "Row[values=[Jane Doe, null]]";
+            }
             assertFalse(ds.next());
         }
 
@@ -498,7 +527,7 @@
             assertTrue("Class: " + ds.getClass().getName(), ds instanceof Neo4jDataSet);
             assertTrue(ds.next());
             final Row row = ds.getRow();
-            assertEquals("Row[values=[John Doe, 30]]", row.toString());
+            assertEquals(expectedFirstResult, row.toString());
             assertFalse(ds.next());
         }
     }
diff --git a/pom.xml b/pom.xml
index 22a9233..ced6266 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
 		<junit.version>4.12</junit.version>
 		<guava.version>27.0.1-jre</guava.version>
 		<hadoop.version>3.1.1</hadoop.version>
-		<jackson.version>2.6.7</jackson.version>
+		<jackson.version>2.10.1</jackson.version>
 		<easymock.version>3.2</easymock.version>
 		<spring.version>5.2.2.RELEASE</spring.version>
 		<httpcomponents.version>4.4.1</httpcomponents.version>
