diff --git a/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java b/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java
index 885d9bd48b7..9b1148dff69 100644
--- a/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java
+++ b/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java
@@ -176,7 +176,7 @@ public boolean equals(Object o) {
       return false;
     }
     DefaultGeometry that = (DefaultGeometry) o;
-    return this.getOgcGeometry().equals(that.getOgcGeometry());
+    return this.getOgcGeometry().equals((Object) that.getOgcGeometry());
   }
 
   @Override
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java
index 38dc84549c4..35cef803590 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java
@@ -23,6 +23,9 @@
 import com.datastax.dse.driver.api.core.data.geometry.LineString;
 import com.datastax.dse.driver.api.core.data.geometry.Point;
 import com.esri.core.geometry.ogc.OGCLineString;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import org.junit.Test;
@@ -101,8 +104,26 @@ public void should_parse_valid_geo_json() {
   }
 
   @Test
-  public void should_convert_to_geo_json() {
-    assertThat(lineString.asGeoJson()).isEqualTo(json);
+  public void should_convert_to_geo_json() throws Exception {
+
+    ObjectMapper mapper = new ObjectMapper();
+    JsonNode root = mapper.readTree(lineString.asGeoJson());
+    assertThat(root.get("type").toString()).isEqualTo("\"LineString\"");
+
+    double expected[][] = {{30.0, 10.0}, {10.0, 30.0}, {40.0, 40.0}};
+    JsonNode coordinatesNode = root.get("coordinates");
+    assertThat(coordinatesNode.isArray()).isTrue();
+    ArrayNode coordinatesArray = (ArrayNode) coordinatesNode;
+    assertThat(coordinatesArray.size()).isEqualTo(3);
+    for (int i = 0; i < expected.length; ++i) {
+
+      JsonNode elemNode = coordinatesArray.get(i);
+      assertThat(elemNode.isArray()).isTrue();
+      ArrayNode elemArray = (ArrayNode) elemNode;
+      assertThat(elemArray.size()).isEqualTo(2);
+      assertThat(elemArray.get(0).asDouble()).isEqualTo(expected[i][0]);
+      assertThat(elemArray.get(1).asDouble()).isEqualTo(expected[i][1]);
+    }
   }
 
   @Test
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java
index 1e3a7366741..b99152c6238 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java
@@ -22,6 +22,9 @@
 
 import com.datastax.dse.driver.api.core.data.geometry.Point;
 import com.esri.core.geometry.ogc.OGCPoint;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import org.junit.Test;
@@ -83,8 +86,19 @@ public void should_parse_valid_geo_json() {
   }
 
   @Test
-  public void should_convert_to_geo_json() {
-    assertThat(point.asGeoJson()).isEqualTo(json);
+  public void should_convert_to_geo_json() throws Exception {
+
+    ObjectMapper mapper = new ObjectMapper();
+    JsonNode root = mapper.readTree(point.asGeoJson());
+    assertThat(root.get("type").toString()).isEqualTo("\"Point\"");
+
+    double expected[] = {1.1, 2.2};
+    JsonNode coordinatesNode = root.get("coordinates");
+    assertThat(coordinatesNode.isArray()).isTrue();
+    ArrayNode coordinatesArray = (ArrayNode) coordinatesNode;
+    assertThat(coordinatesArray.size()).isEqualTo(2);
+    assertThat(coordinatesArray.get(0).asDouble()).isEqualTo(expected[0]);
+    assertThat(coordinatesArray.get(1).asDouble()).isEqualTo(expected[1]);
   }
 
   @Test
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java
index d86e9cdc269..e60470a0708 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java
@@ -24,6 +24,9 @@
 import com.datastax.dse.driver.api.core.data.geometry.Point;
 import com.datastax.dse.driver.api.core.data.geometry.Polygon;
 import com.esri.core.geometry.ogc.OGCPolygon;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import org.junit.Test;
@@ -109,8 +112,44 @@ public void should_parse_valid_geo_json() {
   }
 
   @Test
-  public void should_convert_to_geo_json() {
-    assertThat(polygon.asGeoJson()).isEqualTo(json);
+  public void should_convert_to_geo_json() throws Exception {
+
+    ObjectMapper mapper = new ObjectMapper();
+    JsonNode root = mapper.readTree(polygon.asGeoJson());
+    assertThat(root.get("type").toString()).isEqualTo("\"Polygon\"");
+
+    /*
+     Note that the order of values in expected differs from the order of insertion when creating
+     the Polygon.  OGC expects the "exterior" ring of the polygon to be listed in counter-clockwise
+     order... and that's what this sequence represents (draw it out on a graph if you don't believe me).
+
+     Weirdly this is the opposite of the order used for this test when we were using ESRI 1.2.1.
+     That fact (combined with the fact that only ESRI classes are used for serialization here) makes me
+     think that the earlier version was just doing it wrong... or at least doing it in a way that
+     didn't agree with the spec.  Either way it is clearly correct that we should go counter-clockwise...
+     so that's what we're doing.
+    */
+    double expected[][] = {{30.0, 10.0}, {40.0, 40.0}, {20.0, 40.0}, {10.0, 20.0}, {30.0, 10.0}};
+    JsonNode coordinatesNode = root.get("coordinates");
+    assertThat(coordinatesNode.isArray()).isTrue();
+    ArrayNode coordinatesArray = (ArrayNode) coordinatesNode;
+
+    // There's an extra layer here, presumably indicating the bounds of the polygon
+    assertThat(coordinatesArray.size()).isEqualTo(1);
+    JsonNode polygonNode = coordinatesArray.get(0);
+    assertThat(polygonNode.isArray()).isTrue();
+    ArrayNode polygonArray = (ArrayNode) polygonNode;
+
+    assertThat(polygonArray.size()).isEqualTo(5);
+    for (int i = 0; i < expected.length; ++i) {
+
+      JsonNode elemNode = polygonArray.get(i);
+      assertThat(elemNode.isArray()).isTrue();
+      ArrayNode elemArray = (ArrayNode) elemNode;
+      assertThat(elemArray.size()).isEqualTo(2);
+      assertThat(elemArray.get(0).asDouble()).isEqualTo(expected[i][0]);
+      assertThat(elemArray.get(1).asDouble()).isEqualTo(expected[i][1]);
+    }
   }
 
   @Test
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java
index 80294ea6b7d..d9e0e2f2006 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java
@@ -82,7 +82,6 @@ public void should_find_dependencies_from_file() {
     expected.put("com.github.jnr:jffi", withUnverifiedRuntimeVersion("1.2.16"));
     expected.put("io.netty:netty-buffer", withUnverifiedRuntimeVersion("4.0.56.Final"));
     expected.put("org.ow2.asm:asm-commons", withUnverifiedRuntimeVersion("5.0.3"));
-    expected.put("org.json:json", withUnverifiedRuntimeVersion("20090211"));
     expected.put("org.ow2.asm:asm-util", withUnverifiedRuntimeVersion("5.0.3"));
     expected.put("com.github.jnr:jnr-ffi", withUnverifiedRuntimeVersion("2.1.7"));
 
@@ -91,7 +90,7 @@ public void should_find_dependencies_from_file() {
         new PlatformInfoFinder(this::nullUrlProvider).fetchDependenciesFromFile(inputStream);
 
     // then
-    assertThat(stringStringMap).hasSize(28);
+    assertThat(stringStringMap).hasSize(27);
     assertThat(stringStringMap).isEqualTo(expected);
   }
 
diff --git a/core/src/test/resources/insights/test-dependencies.txt b/core/src/test/resources/insights/test-dependencies.txt
index 6cabe8b257d..97503f38c51 100644
--- a/core/src/test/resources/insights/test-dependencies.txt
+++ b/core/src/test/resources/insights/test-dependencies.txt
@@ -27,5 +27,4 @@ The following files have been resolved:
    org.ow2.asm:asm-analysis:jar:5.0.3:compile
    com.github.jnr:jnr-x86asm:jar:1.0.2:compile
    io.netty:netty-codec:jar:4.0.56.Final:compile
-   org.json:json:jar:20090211:compile
    com.github.jnr:jffi:jar:native:1.2.16:runtime
\ No newline at end of file
diff --git a/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java b/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
index 3e6171ca530..d0780829159 100644
--- a/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
+++ b/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
@@ -181,11 +181,10 @@ public static CompositeOption esriBundles() {
             CoreOptions.wrappedBundle(
                     mavenBundle("com.esri.geometry", "esri-geometry-api").versionAsInProject())
                 .exports("com.esri.core.geometry.*")
-                .imports("org.json", "org.codehaus.jackson")
+                .imports("com.fasterxml.jackson.*", "com.fasterxml.jackson.databind.*")
                 .bundleSymbolicName("com.esri.core.geometry")
                 .overwriteManifest(WrappedUrlProvisionOption.OverwriteMode.FULL),
-            mavenBundle("org.json", "json").versionAsInProject(),
-            mavenBundle("org.codehaus.jackson", "jackson-core-asl").versionAsInProject(),
+            mavenBundle("com.fasterxml.jackson.core", "jackson-core").versionAsInProject(),
             systemProperty("cassandra.geo").value("true"));
   }
 
diff --git a/pom.xml b/pom.xml
index 2cfeb65e757..3b356516351 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,7 +58,7 @@
     2.1.12
     4.1.18
     4.1.119.Final
-    1.2.1
+    2.2.4
     
     1.0.3
-    20230227
     2.13.5
     ${jackson.version}
     
@@ -162,11 +161,6 @@
         esri-geometry-api
         ${esri.version}
       
-      
-        org.json
-        json
-        ${json.version}
-      
       
         org.apache.tinkerpop
         gremlin-core