You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by jo...@apache.org on 2019/10/11 09:47:38 UTC

[tinkerpop] 03/03: TINKERPOP-2035 Move to gremlin-core

This is an automated email from the ASF dual-hosted git repository.

jorgebg pushed a commit to branch TINKERPOP-2305
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 6e10bde76d24962be6caea188dbe86d5d3ecf57b
Author: Jorge Bay Gondra <jo...@gmail.com>
AuthorDate: Fri Oct 11 11:47:09 2019 +0200

    TINKERPOP-2035 Move to gremlin-core
    
    Move GraphBinaryReader and GraphBinaryWriter along with type
    serializers to org.apache.tinkerpop.gremlin.structure.io.binary
    namespace in gremlin-core.
---
 CHANGELOG.asciidoc                                 |  6 +++
 docs/src/upgrade/release-3.4.x.asciidoc            | 25 ++++++++++
 .../gremlin/structure/io}/binary/DataType.java     |  5 +-
 .../structure/io}/binary/GraphBinaryIo.java        |  5 +-
 .../structure/io}/binary/GraphBinaryReader.java    |  9 ++--
 .../structure/io}/binary/GraphBinaryWriter.java    | 17 +++----
 .../structure/io}/binary/TypeSerializer.java       | 13 ++---
 .../io}/binary/TypeSerializerRegistry.java         | 18 +++----
 .../io}/binary/types/BigDecimalSerializer.java     | 14 +++---
 .../io}/binary/types/BigIntegerSerializer.java     | 14 +++---
 .../io}/binary/types/BindingSerializer.java        | 15 +++---
 .../io}/binary/types/BulkSetSerializer.java        | 14 +++---
 .../io}/binary/types/ByteBufferSerializer.java     | 14 +++---
 .../io}/binary/types/ByteCodeSerializer.java       | 20 ++++----
 .../structure/io}/binary/types/CharSerializer.java | 14 +++---
 .../io}/binary/types/ClassSerializer.java          | 15 +++---
 .../io}/binary/types/CollectionSerializer.java     | 14 +++---
 .../io}/binary/types/CustomTypeSerializer.java     |  4 +-
 .../structure/io}/binary/types/DateSerializer.java |  8 ++--
 .../io}/binary/types/DurationSerializer.java       | 14 +++---
 .../structure/io}/binary/types/EdgeSerializer.java | 15 +++---
 .../structure/io}/binary/types/EnumSerializer.java | 14 +++---
 .../io}/binary/types/GraphSerializer.java          | 22 ++++-----
 .../io}/binary/types/InetAddressSerializer.java    | 16 +++----
 .../io}/binary/types/InstantSerializer.java        | 14 +++---
 .../io}/binary/types/LambdaSerializer.java         | 15 +++---
 .../structure/io}/binary/types/ListSerializer.java | 14 +++---
 .../io}/binary/types/LocalDateSerializer.java      | 14 +++---
 .../io}/binary/types/LocalDateTimeSerializer.java  | 14 +++---
 .../io}/binary/types/LocalTimeSerializer.java      | 14 +++---
 .../io}/binary/types/MapEntrySerializer.java       | 16 +++----
 .../structure/io}/binary/types/MapSerializer.java  | 14 +++---
 .../io}/binary/types/MetricsSerializer.java        | 14 +++---
 .../io}/binary/types/MonthDaySerializer.java       | 14 +++---
 .../io}/binary/types/OffsetDateTimeSerializer.java | 14 +++---
 .../io}/binary/types/OffsetTimeSerializer.java     | 14 +++---
 .../structure/io}/binary/types/PSerializer.java    | 22 ++++-----
 .../structure/io}/binary/types/PathSerializer.java | 14 +++---
 .../io}/binary/types/PeriodSerializer.java         | 14 +++---
 .../io}/binary/types/PropertySerializer.java       | 15 +++---
 .../structure/io}/binary/types/SetSerializer.java  | 14 +++---
 .../io}/binary/types/SimpleTypeSerializer.java     | 31 ++++++------
 .../io}/binary/types/SingleTypeSerializer.java     |  8 ++--
 .../io}/binary/types/StringSerializer.java         |  8 ++--
 .../io}/binary/types/TransformSerializer.java      |  4 +-
 .../types/TraversalExplanationSerializer.java      | 16 +++----
 .../binary/types/TraversalMetricsSerializer.java   | 14 +++---
 .../binary/types/TraversalStrategySerializer.java  | 14 +++---
 .../io}/binary/types/TraverserSerializer.java      | 15 +++---
 .../structure/io}/binary/types/TreeSerializer.java | 15 +++---
 .../structure/io}/binary/types/UUIDSerializer.java |  8 ++--
 .../io}/binary/types/VertexPropertySerializer.java | 15 +++---
 .../io}/binary/types/VertexSerializer.java         | 15 +++---
 .../io}/binary/types/YearMonthSerializer.java      | 14 +++---
 .../io}/binary/types/ZoneOffsetSerializer.java     | 14 +++---
 .../io}/binary/types/ZonedDateTimeSerializer.java  | 14 +++---
 .../driver/ser/GraphBinaryMessageSerializerV1.java | 10 ++--
 .../gremlin/driver/{ => ser}/NettyBuffer.java      |  2 +-
 .../driver/{ => ser}/NettyBufferFactory.java       |  2 +-
 .../ser/binary/RequestMessageSerializer.java       | 47 +++++++++++-------
 .../ser/binary/ResponseMessageSerializer.java      | 55 +++++++++++++---------
 .../binary/GraphBinaryMessageSerializerV1Test.java |  1 +
 .../GraphBinaryReaderWriterRoundTripTest.java      |  4 +-
 .../ser/binary/TypeSerializerFailureTests.java     |  7 +--
 .../ser/binary/TypeSerializerRegistryTest.java     | 19 +++++---
 .../ser/binary/types/CharSerializerTest.java       | 19 +++++---
 .../types/sample/SamplePersonSerializer.java       | 17 +++----
 .../types/sample/SamplePersonSerializerTest.java   | 22 ++++-----
 .../driver/GraphBinaryReaderWriterBenchmark.java   | 17 ++++---
 .../gremlin/driver/SerializationBenchmark.java     |  2 +-
 .../scripts/generate-graphbinary-resources.groovy  |  2 +-
 .../graphbinary/GraphBinaryCompatibilityTest.java  | 14 ++----
 72 files changed, 547 insertions(+), 473 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 58cfc85..8841204 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -20,6 +20,12 @@ limitations under the License.
 
 image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/avant-gremlin.png[width=185]
 
+[[release-3-4-5]]
+=== TinkerPop 3.4.5 (Release Date: NOT OFFICIALLY RELEASED YET)
+
+* GraphBinary: Introduced our own `Buffer` API as a way to wrap Netty's Buffer API. Moved `GraphBinaryReader`,
+`GraphBinaryWriter` and `TypeSerializer<T>` to gremlin-core.
+
 [[release-3-4-4]]
 === TinkerPop 3.4.4 (Release Date: NOT OFFICIALLY RELEASED YET)
 
diff --git a/docs/src/upgrade/release-3.4.x.asciidoc b/docs/src/upgrade/release-3.4.x.asciidoc
index 37e5bde..98e1f6c 100644
--- a/docs/src/upgrade/release-3.4.x.asciidoc
+++ b/docs/src/upgrade/release-3.4.x.asciidoc
@@ -21,6 +21,31 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 *Avant-Gremlin Construction #3 for Theremin and Flowers*
 
+== TinkerPop 3.4.5
+
+*Release Date: NOT OFFICIALLY RELEASED YET*
+
+Please see the link:https://github.com/apache/tinkerpop/blob/3.4.5/CHANGELOG.asciidoc#release-3-4-5[changelog] for a
+complete list of all the modifications that are part of this release.
+
+=== Upgrading for Providers
+
+==== Graph Driver Providers
+
+===== GraphBinary API Change
+
+In GraphBinary serialization, Java `GraphBinaryReader` and `GraphBinaryWriter`, along with `TypeSerializer<T>`
+interface now take a `Buffer` instance instead of Netty's `ByteBuf`, that way we avoid exposing Netty's API in our own
+public API.
+
+Using our own `Buffer` interface, wrapping Netty's buffer API, allowed us to move `TypeSerializer<T>` implementations,
+the reader and the writer to `org.apache.tinkerpop.gremlin.structure.io.binary` package in `gremlin-core`.
+
+Additionally, `GraphBinaryReader` and `GraphBinaryWriter` methods now throw an java's `IOException`, instead of our
+own `SerializationException`.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-2305[TINKERPOP-2305]
+
 == TinkerPop 3.4.4
 
 *Release Date: NOT OFFICIALLY RELEASED YET*
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/DataType.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/DataType.java
similarity index 96%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/DataType.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/DataType.java
index abde199..0159d4f 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/DataType.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/DataType.java
@@ -16,11 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary;
+package org.apache.tinkerpop.gremlin.structure.io.binary;
 
 import java.util.HashMap;
 import java.util.Map;
 
+/**
+ * Represents a GraphBinary data type.
+ */
 public enum DataType {
     INT(0x01),
     LONG(0x02),
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryIo.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryIo.java
similarity index 93%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryIo.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryIo.java
index bb86b1e..9c3e655 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryIo.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryIo.java
@@ -16,9 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary;
+package org.apache.tinkerpop.gremlin.structure.io.binary;
 
-import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
 import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Io;
@@ -29,7 +28,7 @@ import java.io.IOException;
 
 /**
  * This is a dummy implementation of {@link Io} which is only used in the context of helping to configure a
- * GraphBinary {@link MessageSerializer} with an {@link IoRegistry}. It's methods are not implemented.
+ * GraphBinary {@code MessageSerializer} with an {@link IoRegistry}. It's methods are not implemented.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReader.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryReader.java
similarity index 94%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReader.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryReader.java
index 1052d43..35129f7 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReader.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryReader.java
@@ -16,11 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary;
+package org.apache.tinkerpop.gremlin.structure.io.binary;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 /**
  * Reads a value from a buffer using the {@link TypeSerializer} instances configured in the
  * {@link TypeSerializerRegistry}.
@@ -65,7 +66,7 @@ public class GraphBinaryReader {
      * <p>When the value is not nullable, the reader expects only the <code>{value}</code> to be contained in the
      * buffer.</p>
      */
-    public <T> T readValue(final Buffer buffer, final Class<T> type, final boolean nullable) throws SerializationException {
+    public <T> T readValue(final Buffer buffer, final Class<T> type, final boolean nullable) throws IOException {
         if (buffer == null) {
             throw new IllegalArgumentException("input cannot be null.");
         } else if (type == null) {
@@ -79,7 +80,7 @@ public class GraphBinaryReader {
     /**
      * Reads the type code, information and value of a given buffer with fully-qualified format.
      */
-    public <T> T read(final Buffer buffer) throws SerializationException {
+    public <T> T read(final Buffer buffer) throws IOException {
         // Fully-qualified format: {type_code}{type_info}{value_flag}{value}
         final DataType type = DataType.get(Byte.toUnsignedInt(buffer.readByte()));
 
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryWriter.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryWriter.java
similarity index 90%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryWriter.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryWriter.java
index 91d9aec..ab0b094 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryWriter.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/GraphBinaryWriter.java
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary;
+package org.apache.tinkerpop.gremlin.structure.io.binary;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.types.CustomTypeSerializer;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.types.TransformSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.types.CustomTypeSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.types.TransformSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 /**
  * Writes a value to a buffer using the {@link TypeSerializer} instances configured in the
  * {@link TypeSerializerRegistry}.
@@ -59,10 +60,10 @@ public class GraphBinaryWriter {
     /**
      * Writes a value without including type information.
      */
-    public <T> void writeValue(final T value, final Buffer buffer, final boolean nullable) throws SerializationException {
+    public <T> void writeValue(final T value, final Buffer buffer, final boolean nullable) throws IOException {
         if (value == null) {
             if (!nullable) {
-                throw new SerializationException("Unexpected null value when nullable is false");
+                throw new IOException("Unexpected null value when nullable is false");
             }
 
             writeValueFlagNull(buffer);
@@ -78,7 +79,7 @@ public class GraphBinaryWriter {
     /**
      * Writes an object in fully-qualified format, containing {type_code}{type_info}{value_flag}{value}.
      */
-    public <T> void write(final T value, final Buffer buffer) throws SerializationException {
+    public <T> void write(final T value, final Buffer buffer) throws IOException {
         if (value == null) {
             // return Object of type "unspecified object null" with the value flag set to null.
             buffer.writeBytes(unspecifiedNullBytes);
@@ -116,7 +117,7 @@ public class GraphBinaryWriter {
      * specified.
      * <p>Note that for simple types, the provided information will be <code>null</code>.</p>
      */
-    public <T> void writeFullyQualifiedNull(final Class<T> objectClass, Buffer buffer, final Object information) throws SerializationException {
+    public <T> void writeFullyQualifiedNull(final Class<T> objectClass, Buffer buffer, final Object information) throws IOException {
         TypeSerializer<T> serializer = registry.getSerializer(objectClass);
         serializer.write(null, buffer, this);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializer.java
similarity index 84%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializer.java
index 280933a..490d251 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializer.java
@@ -16,11 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary;
+package org.apache.tinkerpop.gremlin.structure.io.binary;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 /**
  * Represents a serializer for a given type.
  */
@@ -34,7 +35,7 @@ public interface TypeSerializer<T> {
     /**
      * Reads the type information and value from the buffer and returns an instance of T.
      */
-    T read(final Buffer buffer, final GraphBinaryReader context) throws SerializationException;
+    T read(final Buffer buffer, final GraphBinaryReader context) throws IOException;
 
     /**
      * Reads the value from the buffer (not the type information) and returns an instance of T.
@@ -43,15 +44,15 @@ public interface TypeSerializer<T> {
      *     information.
      * </p>
      */
-    T readValue(final Buffer buffer, final GraphBinaryReader context, final boolean nullable) throws SerializationException;
+    T readValue(final Buffer buffer, final GraphBinaryReader context, final boolean nullable) throws IOException;
 
     /**
      * Writes the type code, information and value to a buffer using the provided allocator.
      */
-    void write(final T value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException;
+    void write(final T value, final Buffer buffer, final GraphBinaryWriter context) throws IOException;
 
     /**
      * Writes the value to a buffer, composed by the value flag and the sequence of bytes.
      */
-    void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context, final boolean nullable) throws SerializationException;
+    void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context, final boolean nullable) throws IOException;
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistry.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
similarity index 96%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistry.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
index 9996aab..39aeaaf 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistry.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
@@ -16,10 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary;
+package org.apache.tinkerpop.gremlin.structure.io.binary;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.types.*;
+import org.apache.tinkerpop.gremlin.structure.io.binary.types.*;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
@@ -49,6 +48,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
 
+import java.io.IOException;
 import java.lang.reflect.Modifier;
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -323,7 +323,7 @@ public class TypeSerializerRegistry {
         }
     }
 
-    public <DT> TypeSerializer<DT> getSerializer(final Class<DT> type) throws SerializationException {
+    public <DT> TypeSerializer<DT> getSerializer(final Class<DT> type) throws IOException {
         TypeSerializer<?> serializer = serializers.get(type);
 
         if (null == serializer) {
@@ -366,7 +366,7 @@ public class TypeSerializerRegistry {
         return (TypeSerializer<DT>) serializer;
     }
 
-    public <DT> TypeSerializer<DT> getSerializer(final DataType dataType) throws SerializationException {
+    public <DT> TypeSerializer<DT> getSerializer(final DataType dataType) throws IOException {
         if (dataType == DataType.CUSTOM) {
             throw new IllegalArgumentException("Custom type serializers can not be retrieved using this method");
         }
@@ -377,19 +377,19 @@ public class TypeSerializerRegistry {
     /**
      * Gets the serializer for a given custom type name.
      */
-    public <DT> CustomTypeSerializer<DT> getSerializerForCustomType(final String name) throws SerializationException {
+    public <DT> CustomTypeSerializer<DT> getSerializerForCustomType(final String name) throws IOException {
         final CustomTypeSerializer serializer = serializersByCustomTypeName.get(name);
 
         if (serializer == null) {
-            throw new SerializationException(String.format("Serializer for custom type '%s' not found", name));
+            throw new IOException(String.format("Serializer for custom type '%s' not found", name));
         }
 
         return serializer;
     }
 
-    private static TypeSerializer validateInstance(final TypeSerializer serializer, final String typeName) throws SerializationException {
+    private static TypeSerializer validateInstance(final TypeSerializer serializer, final String typeName) throws IOException {
         if (serializer == null) {
-            throw new SerializationException(String.format("Serializer for type %s not found", typeName));
+            throw new IOException(String.format("Serializer for type %s not found", typeName));
         }
 
         return serializer;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BigDecimalSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BigDecimalSerializer.java
similarity index 77%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BigDecimalSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BigDecimalSerializer.java
index e74dcde..ad8add1 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BigDecimalSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BigDecimalSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -36,14 +36,14 @@ public class BigDecimalSerializer extends SimpleTypeSerializer<BigDecimal> {
     }
 
     @Override
-    protected BigDecimal readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected BigDecimal readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int scale = context.readValue(buffer, Integer.class, false);
         final BigInteger unscaled = context.readValue(buffer, BigInteger.class, false);
         return new BigDecimal(unscaled, scale);
     }
 
     @Override
-    protected void writeValue(final BigDecimal value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final BigDecimal value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.scale(), buffer, false);
         context.writeValue(value.unscaledValue(), buffer, false);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BigIntegerSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BigIntegerSerializer.java
similarity index 76%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BigIntegerSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BigIntegerSerializer.java
index 435b5a6..ab877c7 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BigIntegerSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BigIntegerSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.math.BigInteger;
 
 /**
@@ -36,14 +36,14 @@ public class BigIntegerSerializer extends SimpleTypeSerializer<BigInteger> {
     }
 
     @Override
-    protected BigInteger readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected BigInteger readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final byte[] bigIntBytes = new byte[buffer.readInt()];
         buffer.readBytes(bigIntBytes);
         return new BigInteger(bigIntBytes);
     }
 
     @Override
-    protected void writeValue(final BigInteger value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final BigInteger value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         final byte[] twosComplement = value.toByteArray();
         buffer.writeInt(twosComplement.length).writeBytes(twosComplement);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BindingSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BindingSerializer.java
similarity index 76%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BindingSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BindingSerializer.java
index 1aa3bf6..1158358 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BindingSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BindingSerializer.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -35,13 +36,13 @@ public class BindingSerializer extends SimpleTypeSerializer<Bytecode.Binding> {
     }
 
     @Override
-    protected Bytecode.Binding readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Bytecode.Binding readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final String k = context.readValue(buffer, String.class, false);
         return new Bytecode.Binding<>(k, context.read(buffer));
     }
 
     @Override
-    protected void writeValue(final Bytecode.Binding value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Bytecode.Binding value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.variable(), buffer, false);
         context.write(value.value(), buffer);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BulkSetSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BulkSetSerializer.java
similarity index 79%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BulkSetSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BulkSetSerializer.java
index db5eef9..7811f73 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/BulkSetSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BulkSetSerializer.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.Map;
 
 /**
@@ -36,7 +36,7 @@ public class BulkSetSerializer extends SimpleTypeSerializer<BulkSet> {
     }
 
     @Override
-    protected BulkSet readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected BulkSet readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int length = buffer.readInt();
 
         final BulkSet result = new BulkSet();
@@ -48,7 +48,7 @@ public class BulkSetSerializer extends SimpleTypeSerializer<BulkSet> {
     }
 
     @Override
-    protected void writeValue(final BulkSet value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final BulkSet value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         final Map<Object,Long> raw = value.asBulk();
         buffer.writeInt(raw.size());
 
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ByteBufferSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteBufferSerializer.java
similarity index 76%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ByteBufferSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteBufferSerializer.java
index 4d2c162..4e613ce 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ByteBufferSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteBufferSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 
 /**
@@ -36,7 +36,7 @@ public class ByteBufferSerializer extends SimpleTypeSerializer<ByteBuffer> {
     }
 
     @Override
-    protected ByteBuffer readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected ByteBuffer readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final ByteBuffer bb = ByteBuffer.allocate(buffer.readInt());
         buffer.readBytes(bb);
         bb.rewind();
@@ -44,7 +44,7 @@ public class ByteBufferSerializer extends SimpleTypeSerializer<ByteBuffer> {
     }
 
     @Override
-    protected void writeValue(final ByteBuffer value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final ByteBuffer value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         final byte[] bytes = value.array();
         buffer.writeInt(bytes.length).writeBytes(bytes);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ByteCodeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteCodeSerializer.java
similarity index 83%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ByteCodeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteCodeSerializer.java
index 4e34a9b..bf890f9 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ByteCodeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteCodeSerializer.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.List;
 
 public class ByteCodeSerializer extends SimpleTypeSerializer<Bytecode> {
@@ -33,7 +33,7 @@ public class ByteCodeSerializer extends SimpleTypeSerializer<Bytecode> {
     }
 
     @Override
-    protected Bytecode readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Bytecode readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final Bytecode result = new Bytecode();
 
         final int stepsLength = buffer.readInt();
@@ -49,7 +49,7 @@ public class ByteCodeSerializer extends SimpleTypeSerializer<Bytecode> {
         return result;
     }
 
-    private static Object[] getInstructionArguments(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    private static Object[] getInstructionArguments(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int valuesLength = buffer.readInt();
         final Object[] values = new Object[valuesLength];
         for (int j = 0; j < valuesLength; j++) {
@@ -59,7 +59,7 @@ public class ByteCodeSerializer extends SimpleTypeSerializer<Bytecode> {
     }
 
     @Override
-    protected void writeValue(final Bytecode value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Bytecode value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         final List<Bytecode.Instruction> steps = value.getStepInstructions();
         final List<Bytecode.Instruction> sources = value.getSourceInstructions();
         // 2 buffers for the length + plus 2 buffers per each step and source
@@ -69,7 +69,7 @@ public class ByteCodeSerializer extends SimpleTypeSerializer<Bytecode> {
     }
 
     private void writeInstructions(final Buffer buffer, final GraphBinaryWriter context,
-                                   final List<Bytecode.Instruction> instructions) throws SerializationException {
+                                   final List<Bytecode.Instruction> instructions) throws IOException {
 
         context.writeValue(instructions.size(), buffer, false);
 
@@ -79,7 +79,7 @@ public class ByteCodeSerializer extends SimpleTypeSerializer<Bytecode> {
         }
     }
 
-    private static void fillArgumentsBuffer(final Object[] arguments, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    private static void fillArgumentsBuffer(final Object[] arguments, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
 
         context.writeValue(arguments.length, buffer, false);
 
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CharSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CharSerializer.java
similarity index 82%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CharSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CharSerializer.java
index 6a06fcb..89110b7 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CharSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CharSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
 public class CharSerializer extends SimpleTypeSerializer<Character> {
@@ -32,7 +32,7 @@ public class CharSerializer extends SimpleTypeSerializer<Character> {
     }
 
     @Override
-    protected Character readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Character readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int firstByte = buffer.readByte() & 0xff;
         int byteLength = 1;
         // A byte with the first byte ON (10000000) signals that more bytes are needed to represent the UTF-8 char
@@ -59,7 +59,7 @@ public class CharSerializer extends SimpleTypeSerializer<Character> {
     }
 
     @Override
-    protected void writeValue(final Character value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Character value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         final String stringValue = Character.toString(value);
         buffer.writeBytes(stringValue.getBytes(StandardCharsets.UTF_8));
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ClassSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ClassSerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ClassSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ClassSerializer.java
index 1e0a8a5..0b83287 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ClassSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ClassSerializer.java
@@ -16,21 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 public class ClassSerializer extends SimpleTypeSerializer<Class> {
     public ClassSerializer() {
         super(DataType.CLASS);
     }
 
     @Override
-    protected Class readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Class readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final String name = context.readValue(buffer, String.class, false);
         try {
             return Class.forName(name);
@@ -40,7 +41,7 @@ public class ClassSerializer extends SimpleTypeSerializer<Class> {
     }
 
     @Override
-    protected void writeValue(final Class value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Class value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.getName(), buffer, false);
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CollectionSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CollectionSerializer.java
similarity index 77%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CollectionSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CollectionSerializer.java
index a951bbf..b5020bd 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CollectionSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CollectionSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -33,7 +33,7 @@ class CollectionSerializer extends SimpleTypeSerializer<Collection> {
     }
 
     @Override
-    protected Collection readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Collection readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int length = buffer.readInt();
 
         final ArrayList result = new ArrayList(length);
@@ -45,7 +45,7 @@ class CollectionSerializer extends SimpleTypeSerializer<Collection> {
     }
 
     @Override
-    protected void writeValue(final Collection value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Collection value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeInt(value.size());
 
         for (Object item : value) {
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CustomTypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CustomTypeSerializer.java
similarity index 88%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CustomTypeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CustomTypeSerializer.java
index d718bce..017e75d 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CustomTypeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/CustomTypeSerializer.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.binary.TypeSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializer;
 
 /**
  * Represents a serializer for a custom (provider specific) serializer.
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/DateSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DateSerializer.java
similarity index 86%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/DateSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DateSerializer.java
index f999591..1487383 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/DateSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DateSerializer.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
 import java.sql.Timestamp;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/DurationSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DurationSerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/DurationSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DurationSerializer.java
index 7844554..9c0b526 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/DurationSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DurationSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.Duration;
 
 /**
@@ -35,12 +35,12 @@ public class DurationSerializer extends SimpleTypeSerializer<Duration> {
     }
 
     @Override
-    protected Duration readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Duration readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return Duration.ofSeconds(buffer.readLong(), buffer.readInt());
     }
 
     @Override
-    protected void writeValue(final Duration value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Duration value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeLong(value.getSeconds()).writeInt(value.getNano());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/EdgeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EdgeSerializer.java
similarity index 87%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/EdgeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EdgeSerializer.java
index 9769131..de88180 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/EdgeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EdgeSerializer.java
@@ -16,17 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
 
+import java.io.IOException;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -36,7 +37,7 @@ public class EdgeSerializer extends SimpleTypeSerializer<Edge> {
     }
 
     @Override
-    protected Edge readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Edge readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final Object id = context.read(buffer);
         final String label = context.readValue(buffer, String.class, false);
 
@@ -57,7 +58,7 @@ public class EdgeSerializer extends SimpleTypeSerializer<Edge> {
     }
 
     @Override
-    protected void writeValue(final Edge value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Edge value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
 
         context.write(value.id(), buffer);
         context.writeValue(value.label(), buffer, false);
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/EnumSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EnumSerializer.java
similarity index 88%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/EnumSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EnumSerializer.java
index 57f01cc..12e2d15 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/EnumSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EnumSerializer.java
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Pop;
@@ -34,6 +33,7 @@ import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.function.Function;
 
 /**
@@ -62,12 +62,12 @@ public class EnumSerializer<E extends Enum> extends SimpleTypeSerializer<E> {
     }
 
     @Override
-    protected E readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected E readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return readFunc.apply(context.read(buffer));
     }
 
     @Override
-    protected void writeValue(final E value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final E value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.write(value.name(), buffer);
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/GraphSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/GraphSerializer.java
similarity index 91%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/GraphSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/GraphSerializer.java
index ad69869..d627f18 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/GraphSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/GraphSerializer.java
@@ -16,14 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
 import org.apache.commons.configuration.BaseConfiguration;
 import org.apache.commons.configuration.Configuration;
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Property;
@@ -33,6 +32,7 @@ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
+import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -51,10 +51,10 @@ public class GraphSerializer extends SimpleTypeSerializer<Graph> {
     }
 
     @Override
-    protected Graph readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Graph readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
 
         if (null == openMethod)
-            throw new SerializationException("TinkerGraph is an optional dependency to gremlin-driver - if deserializing Graph instances it must be explicitly added as a dependency");
+            throw new IOException("TinkerGraph is an optional dependency to gremlin-driver - if deserializing Graph instances it must be explicitly added as a dependency");
 
         final Configuration conf = new BaseConfiguration();
         conf.setProperty("gremlin.tinkergraph.defaultVertexPropertyCardinality", "list");
@@ -103,12 +103,12 @@ public class GraphSerializer extends SimpleTypeSerializer<Graph> {
             return graph;
         } catch (Exception ex) {
             // famous last words - can't happen
-            throw new SerializationException(ex);
+            throw new IOException(ex);
         }
     }
 
     @Override
-    protected void writeValue(final Graph value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Graph value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         // this kinda looks scary memory-wise, but GraphBinary is about network derser so we are dealing with a
         // graph instance that should live in memory already - not expecting "big" stuff here.
         final List<Vertex> vertexList = IteratorUtils.list(value.vertices());
@@ -127,7 +127,7 @@ public class GraphSerializer extends SimpleTypeSerializer<Graph> {
         }
     }
 
-    private void writeVertex(Buffer buffer, GraphBinaryWriter context, Vertex vertex) throws SerializationException {
+    private void writeVertex(Buffer buffer, GraphBinaryWriter context, Vertex vertex) throws IOException {
         final List<VertexProperty<Object>> vertexProperties = IteratorUtils.list(vertex.properties());
 
         context.write(vertex.id(), buffer);
@@ -147,7 +147,7 @@ public class GraphSerializer extends SimpleTypeSerializer<Graph> {
         }
     }
 
-    private void writeEdge(Buffer buffer, GraphBinaryWriter context, Edge edge) throws SerializationException {
+    private void writeEdge(Buffer buffer, GraphBinaryWriter context, Edge edge) throws IOException {
         context.write(edge.id(), buffer);
         context.writeValue(edge.label(), buffer, false);
 
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/InetAddressSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InetAddressSerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/InetAddressSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InetAddressSerializer.java
index 08de390..c6153c4 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/InetAddressSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InetAddressSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
@@ -36,7 +36,7 @@ public class InetAddressSerializer<T extends InetAddress> extends SimpleTypeSeri
     }
 
     @Override
-    protected T readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected T readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int length = buffer.readInt();
         final byte[] bytes = new byte[length];
         buffer.readBytes(bytes);
@@ -44,12 +44,12 @@ public class InetAddressSerializer<T extends InetAddress> extends SimpleTypeSeri
         try {
             return (T) InetAddress.getByAddress(bytes);
         } catch (UnknownHostException uhe) {
-            throw new SerializationException("Cannot deserialize InetAddress value", uhe);
+            throw new IOException("Cannot deserialize InetAddress value", uhe);
         }
     }
 
     @Override
-    protected void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         final byte[] bytes = value.getAddress();
         buffer.writeInt(bytes.length).writeBytes(bytes);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/InstantSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InstantSerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/InstantSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InstantSerializer.java
index 62bcbfc..ce0b87b 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/InstantSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InstantSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.Instant;
 
 /**
@@ -35,12 +35,12 @@ public class InstantSerializer extends SimpleTypeSerializer<Instant> {
     }
 
     @Override
-    protected Instant readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Instant readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return Instant.ofEpochSecond(buffer.readLong(), buffer.readInt());
     }
 
     @Override
-    protected void writeValue(final Instant value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Instant value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeLong(value.getEpochSecond()).writeInt(value.getNano());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LambdaSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LambdaSerializer.java
similarity index 81%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LambdaSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LambdaSerializer.java
index f72e478..50cbb52 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LambdaSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LambdaSerializer.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
 
+import java.io.IOException;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -34,7 +35,7 @@ public class LambdaSerializer extends SimpleTypeSerializer<Lambda> {
     }
 
     @Override
-    protected Lambda readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Lambda readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final String lang = context.readValue(buffer, String.class, false);
         final String script = context.readValue(buffer, String.class, false);
         final int args = context.readValue(buffer, Integer.class, false);
@@ -50,7 +51,7 @@ public class LambdaSerializer extends SimpleTypeSerializer<Lambda> {
     }
 
     @Override
-    protected void writeValue(final Lambda value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Lambda value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.getLambdaLanguage(), buffer, false);
         context.writeValue(value.getLambdaScript(), buffer, false);
         context.writeValue(value.getLambdaArguments(), buffer, false);
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ListSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ListSerializer.java
similarity index 76%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ListSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ListSerializer.java
index 49e5061..74ac14b 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ListSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ListSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.List;
 
 public class ListSerializer extends SimpleTypeSerializer<List> {
@@ -34,13 +34,13 @@ public class ListSerializer extends SimpleTypeSerializer<List> {
     }
 
     @Override
-    protected List readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected List readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         // The collection is a List<>
         return (List) collectionSerializer.readValue(buffer, context);
     }
 
     @Override
-    protected void writeValue(final List value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final List value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         collectionSerializer.writeValue(value, buffer, context);
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalDateSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateSerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalDateSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateSerializer.java
index 560d98b..46a3a02 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalDateSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.LocalDate;
 
 /**
@@ -35,12 +35,12 @@ public class LocalDateSerializer extends SimpleTypeSerializer<LocalDate> {
     }
 
     @Override
-    protected LocalDate readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected LocalDate readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return LocalDate.of(buffer.readInt(), buffer.readByte(), buffer.readByte());
     }
 
     @Override
-    protected void writeValue(final LocalDate value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final LocalDate value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeInt(value.getYear()).writeByte(value.getMonthValue()).writeByte(value.getDayOfMonth());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalDateTimeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateTimeSerializer.java
similarity index 77%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalDateTimeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateTimeSerializer.java
index 8971cc6..c3e92c8 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalDateTimeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateTimeSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -37,13 +37,13 @@ public class LocalDateTimeSerializer extends SimpleTypeSerializer<LocalDateTime>
     }
 
     @Override
-    protected LocalDateTime readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected LocalDateTime readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return LocalDateTime.of(context.readValue(buffer, LocalDate.class, false),
                 context.readValue(buffer, LocalTime.class, false));
     }
 
     @Override
-    protected void writeValue(final LocalDateTime value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final LocalDateTime value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.toLocalDate(), buffer, false);
         context.writeValue(value.toLocalTime(), buffer, false);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalTimeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalTimeSerializer.java
similarity index 74%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalTimeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalTimeSerializer.java
index e2639ce..bb654ac 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/LocalTimeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalTimeSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.LocalTime;
 
 /**
@@ -35,12 +35,12 @@ public class LocalTimeSerializer extends SimpleTypeSerializer<LocalTime> {
     }
 
     @Override
-    protected LocalTime readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected LocalTime readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return LocalTime.ofNanoOfDay(buffer.readLong());
     }
 
     @Override
-    protected void writeValue(final LocalTime value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final LocalTime value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeLong(value.toNanoOfDay());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MapEntrySerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MapEntrySerializer.java
similarity index 71%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MapEntrySerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MapEntrySerializer.java
index e521371..e8a28d6 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MapEntrySerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MapEntrySerializer.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -32,13 +32,13 @@ public class MapEntrySerializer extends SimpleTypeSerializer<Map.Entry> implemen
     }
 
     @Override
-    protected Map.Entry readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
-        throw new SerializationException("A map entry should not be read individually");
+    protected Map.Entry readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
+        throw new IOException("A map entry should not be read individually");
     }
 
     @Override
-    protected void writeValue(final Map.Entry value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
-        throw new SerializationException("A map entry should not be written individually");
+    protected void writeValue(final Map.Entry value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
+        throw new IOException("A map entry should not be written individually");
     }
 
     @Override
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MapSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MapSerializer.java
similarity index 78%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MapSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MapSerializer.java
index 9ece182..c2b95d0 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MapSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MapSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
@@ -34,7 +34,7 @@ public class MapSerializer extends SimpleTypeSerializer<Map> {
     }
 
     @Override
-    protected Map readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Map readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int length = buffer.readInt();
 
         final Map<Object,Object> result = new LinkedHashMap<>(length);
@@ -46,7 +46,7 @@ public class MapSerializer extends SimpleTypeSerializer<Map> {
     }
 
     @Override
-    protected void writeValue(final Map value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Map value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeInt(value.size());
 
         for (Map.Entry entry : (Set<Map.Entry>) value.entrySet()) {
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MetricsSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MetricsSerializer.java
similarity index 85%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MetricsSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MetricsSerializer.java
index 5734c48..bedf2cb 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MetricsSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MetricsSerializer.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
 import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -38,7 +38,7 @@ public class MetricsSerializer extends SimpleTypeSerializer<Metrics> {
     }
 
     @Override
-    protected Metrics readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Metrics readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         // Consider using a custom implementation, like "DefaultMetrics"
         final MutableMetrics result = new MutableMetrics(
                 context.readValue(buffer, String.class, false),
@@ -54,7 +54,7 @@ public class MetricsSerializer extends SimpleTypeSerializer<Metrics> {
     }
 
     @Override
-    protected void writeValue(final Metrics value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Metrics value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.getId(), buffer, false);
         context.writeValue(value.getName(), buffer, false);
         context.writeValue(value.getDuration(TimeUnit.NANOSECONDS), buffer, false);
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MonthDaySerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MonthDaySerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MonthDaySerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MonthDaySerializer.java
index 046b0f2..32c2c92 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/MonthDaySerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MonthDaySerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.MonthDay;
 
 /**
@@ -35,12 +35,12 @@ public class MonthDaySerializer extends SimpleTypeSerializer<MonthDay> {
     }
 
     @Override
-    protected MonthDay readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected MonthDay readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return MonthDay.of(buffer.readByte(), buffer.readByte());
     }
 
     @Override
-    protected void writeValue(final MonthDay value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final MonthDay value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeByte(value.getMonthValue()).writeByte(value.getDayOfMonth());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/OffsetDateTimeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetDateTimeSerializer.java
similarity index 77%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/OffsetDateTimeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetDateTimeSerializer.java
index 7e09082..90b1c79 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/OffsetDateTimeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetDateTimeSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.OffsetDateTime;
 import java.time.ZoneOffset;
@@ -37,14 +37,14 @@ public class OffsetDateTimeSerializer extends SimpleTypeSerializer<OffsetDateTim
     }
 
     @Override
-    protected OffsetDateTime readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected OffsetDateTime readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final LocalDateTime ldt = context.readValue(buffer, LocalDateTime.class, false);
         final ZoneOffset zo = context.readValue(buffer, ZoneOffset.class, false);
         return OffsetDateTime.of(ldt, zo);
     }
 
     @Override
-    protected void writeValue(final OffsetDateTime value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final OffsetDateTime value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.toLocalDateTime(), buffer, false);
         context.writeValue(value.getOffset(), buffer, false);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/OffsetTimeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetTimeSerializer.java
similarity index 77%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/OffsetTimeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetTimeSerializer.java
index 052ecfb..f4dcfe6 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/OffsetTimeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetTimeSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.LocalTime;
 import java.time.OffsetTime;
 import java.time.ZoneOffset;
@@ -37,14 +37,14 @@ public class OffsetTimeSerializer extends SimpleTypeSerializer<OffsetTime> {
     }
 
     @Override
-    protected OffsetTime readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected OffsetTime readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final LocalTime ldt = context.readValue(buffer, LocalTime.class, false);
         final ZoneOffset zo = context.readValue(buffer, ZoneOffset.class, false);
         return OffsetTime.of(ldt, zo);
     }
 
     @Override
-    protected void writeValue(final OffsetTime value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final OffsetTime value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.toLocalTime(), buffer, false);
         context.writeValue(value.getOffset(), buffer, false);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PSerializer.java
similarity index 89%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PSerializer.java
index fc092cf..e5ea3e3 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PSerializer.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
@@ -53,7 +53,7 @@ public class PSerializer<T extends P> extends SimpleTypeSerializer<T> {
     }
 
     @Override
-    protected T readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected T readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final String predicateName = context.readValue(buffer, String.class, false);
         final int length = context.readValue(buffer, Integer.class, false);
         final Object[] args = new Object[length];
@@ -75,11 +75,11 @@ public class PSerializer<T extends P> extends SimpleTypeSerializer<T> {
         try {
             return f.apply(args);
         } catch (Exception ex) {
-            throw new SerializationException(String.format("Can't deserialize value into the predicate: '%s'", predicateName), ex);
+            throw new IOException(String.format("Can't deserialize value into the predicate: '%s'", predicateName), ex);
         }
     }
 
-    private CheckedFunction getMethod(final String predicateName, final Class<?>[] argumentClasses) throws SerializationException {
+    private CheckedFunction getMethod(final String predicateName, final Class<?>[] argumentClasses) throws IOException {
         final PFunctionId id = new PFunctionId(predicateName, argumentClasses);
 
         CheckedFunction<Object[], T> result = methods.get(id);
@@ -104,7 +104,7 @@ public class PSerializer<T extends P> extends SimpleTypeSerializer<T> {
                         try {
                             m = classOfP.getMethod(predicateName, Object.class, Object.class);
                         } catch (NoSuchMethodException ex3) {
-                            throw new SerializationException(String.format("Can't find predicate method: '%s'", predicateName), ex2);
+                            throw new IOException(String.format("Can't find predicate method: '%s'", predicateName), ex2);
                         }
                     }
                 }
@@ -141,7 +141,7 @@ public class PSerializer<T extends P> extends SimpleTypeSerializer<T> {
 
                 methods.put(id, result);
             } catch (Exception ex) {
-                throw new SerializationException(ex);
+                throw new IOException(ex);
             }
         }
 
@@ -149,7 +149,7 @@ public class PSerializer<T extends P> extends SimpleTypeSerializer<T> {
     }
 
     @Override
-    protected void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         // the predicate name is either a static method of P or an instance method when a type ConnectiveP
         final boolean isConnectedP = value instanceof ConnectiveP;
         final String predicateName = isConnectedP ?
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PathSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PathSerializer.java
similarity index 82%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PathSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PathSerializer.java
index bdc6fe2..b59436c 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PathSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PathSerializer.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.MutablePath;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Set;
 
@@ -40,7 +40,7 @@ public class PathSerializer extends SimpleTypeSerializer<Path> {
     }
 
     @Override
-    protected Path readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Path readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final MutablePath path = (MutablePath) MutablePath.make();
         final List<Set<String>> labels = context.read(buffer);
         final List<Object> objects = context.read(buffer);
@@ -56,7 +56,7 @@ public class PathSerializer extends SimpleTypeSerializer<Path> {
     }
 
     @Override
-    protected void writeValue(final Path value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Path value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.write(value.labels(), buffer);
         context.write(value.objects(), buffer);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PeriodSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PeriodSerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PeriodSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PeriodSerializer.java
index 1f58c09..267e2cb 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PeriodSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PeriodSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.Period;
 
 /**
@@ -35,12 +35,12 @@ public class PeriodSerializer extends SimpleTypeSerializer<Period> {
     }
 
     @Override
-    protected Period readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Period readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return Period.of(buffer.readInt(), buffer.readInt(), buffer.readInt());
     }
 
     @Override
-    protected void writeValue(final Period value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Period value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeInt(value.getYears()).writeInt(value.getMonths()).writeInt(value.getDays());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PropertySerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PropertySerializer.java
similarity index 79%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PropertySerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PropertySerializer.java
index 7092ff8..cfa22ef 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PropertySerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PropertySerializer.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
 
+import java.io.IOException;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -36,7 +37,7 @@ public class PropertySerializer extends SimpleTypeSerializer<Property> {
     }
 
     @Override
-    protected Property readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Property readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final Property p = new ReferenceProperty<>(context.readValue(buffer, String.class, false), context.read(buffer));
 
         // discard the parent element as it's not serialized for references right now
@@ -45,7 +46,7 @@ public class PropertySerializer extends SimpleTypeSerializer<Property> {
     }
 
     @Override
-    protected void writeValue(final Property value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Property value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.key(), buffer, false);
         context.write(value.value(), buffer);
 
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SetSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SetSerializer.java
similarity index 76%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SetSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SetSerializer.java
index 1f7e6cd..9a7a739 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SetSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SetSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -35,12 +35,12 @@ public class SetSerializer extends SimpleTypeSerializer<Set>{
     }
 
     @Override
-    protected Set readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Set readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return new HashSet<>(collectionSerializer.readValue(buffer, context));
     }
 
     @Override
-    protected void writeValue(final Set value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Set value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         collectionSerializer.writeValue(value, buffer, context);
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SimpleTypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SimpleTypeSerializer.java
similarity index 74%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SimpleTypeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SimpleTypeSerializer.java
index 053b1b9..36a0f93 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SimpleTypeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SimpleTypeSerializer.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.TypeSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 /**
  * Base class for serialization of types that don't contain type specific information only {type_code}, {value_flag}
  * and {value}.
@@ -41,13 +42,13 @@ public abstract class SimpleTypeSerializer<T> implements TypeSerializer<T> {
     }
 
     @Override
-    public T read(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    public T read(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         // No {type_info}, just {value_flag}{value}
         return readValue(buffer, context, true);
     }
 
     @Override
-    public T readValue(final Buffer buffer, final GraphBinaryReader context, final boolean nullable) throws SerializationException {
+    public T readValue(final Buffer buffer, final GraphBinaryReader context, final boolean nullable) throws IOException {
         if (nullable) {
             final byte valueFlag = buffer.readByte();
             if ((valueFlag & 1) == 1) {
@@ -63,20 +64,20 @@ public abstract class SimpleTypeSerializer<T> implements TypeSerializer<T> {
      * @param buffer A buffer which reader index has been set to the beginning of the {value}.
      * @param context The binary writer.
      * @return
-     * @throws SerializationException
+     * @throws IOException
      */
-    protected abstract T readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException;
+    protected abstract T readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException;
 
     @Override
-    public void write(final T value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    public void write(final T value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         writeValue(value, buffer, context, true);
     }
 
     @Override
-    public void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context, final boolean nullable) throws SerializationException {
+    public void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context, final boolean nullable) throws IOException {
         if (value == null) {
             if (!nullable) {
-                throw new SerializationException("Unexpected null value when nullable is false");
+                throw new IOException("Unexpected null value when nullable is false");
             }
 
             context.writeValueFlagNull(buffer);
@@ -95,7 +96,7 @@ public abstract class SimpleTypeSerializer<T> implements TypeSerializer<T> {
      * @param value A non-nullable value.
      * @param buffer The buffer allocator to use.
      * @param context The binary writer.
-     * @throws SerializationException
+     * @throws IOException
      */
-    protected abstract void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException;
+    protected abstract void writeValue(final T value, final Buffer buffer, final GraphBinaryWriter context) throws IOException;
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SingleTypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SingleTypeSerializer.java
similarity index 92%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SingleTypeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SingleTypeSerializer.java
index 13223f7..e8dfb5c 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/SingleTypeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/SingleTypeSerializer.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
 import java.time.Year;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/StringSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/StringSerializer.java
similarity index 85%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/StringSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/StringSerializer.java
index f5a1f7e..c90c5e1 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/StringSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/StringSerializer.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
 import java.nio.charset.StandardCharsets;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TransformSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TransformSerializer.java
similarity index 88%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TransformSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TransformSerializer.java
index cc97577..97ccbba 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TransformSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TransformSerializer.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.binary.TypeSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializer;
 
 /**
  * Represents a special TypeSerializer placeholder that transforms the value into another before serializing it.
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalExplanationSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalExplanationSerializer.java
similarity index 83%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalExplanationSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalExplanationSerializer.java
index 0b8d4c7..5c8d8bd 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalExplanationSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalExplanationSerializer.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.javatuples.Pair;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -45,13 +45,13 @@ public class TraversalExplanationSerializer extends SimpleTypeSerializer<Travers
     }
 
     @Override
-    protected TraversalExplanation readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
-        throw new SerializationException("A TraversalExplanation should not be read individually");
+    protected TraversalExplanation readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
+        throw new IOException("A TraversalExplanation should not be read individually");
     }
 
     @Override
-    protected void writeValue(final TraversalExplanation value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
-        throw new SerializationException("A TraversalExplanation should not be written individually");
+    protected void writeValue(final TraversalExplanation value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
+        throw new IOException("A TraversalExplanation should not be written individually");
     }
 
     /**
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalMetricsSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalMetricsSerializer.java
similarity index 81%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalMetricsSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalMetricsSerializer.java
index 8f0e9cc..ff7b360 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalMetricsSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalMetricsSerializer.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
 import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -39,14 +39,14 @@ public class TraversalMetricsSerializer extends SimpleTypeSerializer<TraversalMe
     }
 
     @Override
-    protected TraversalMetrics readValue(Buffer buffer, GraphBinaryReader context) throws SerializationException {
+    protected TraversalMetrics readValue(Buffer buffer, GraphBinaryReader context) throws IOException {
         Long durationNanos = context.readValue(buffer, Long.class, false);
         final List<MutableMetrics> metrics = new ArrayList<>(collectionSerializer.readValue(buffer, context));
         return new DefaultTraversalMetrics(durationNanos, metrics);
     }
 
     @Override
-    protected void writeValue(TraversalMetrics value, Buffer buffer, GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(TraversalMetrics value, Buffer buffer, GraphBinaryWriter context) throws IOException {
         context.writeValue(value.getDuration(TimeUnit.NANOSECONDS), buffer, false);
         collectionSerializer.writeValue(value.getMetrics(), buffer, context);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalStrategySerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalStrategySerializer.java
similarity index 84%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalStrategySerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalStrategySerializer.java
index 006a2e3..38ea9c9 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraversalStrategySerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalStrategySerializer.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
 import org.apache.commons.configuration.ConfigurationConverter;
 import org.apache.commons.configuration.MapConfiguration;
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -42,7 +42,7 @@ public class TraversalStrategySerializer extends SimpleTypeSerializer<TraversalS
     }
 
     @Override
-    protected TraversalStrategy readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected TraversalStrategy readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final Class<TraversalStrategy> clazz = context.readValue(buffer, Class.class, false);
         final Map config = context.readValue(buffer, Map.class, false);
 
@@ -50,7 +50,7 @@ public class TraversalStrategySerializer extends SimpleTypeSerializer<TraversalS
     }
 
     @Override
-    protected void writeValue(final TraversalStrategy value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final TraversalStrategy value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.getClass(), buffer, false);
         context.writeValue(translateToBytecode(ConfigurationConverter.getMap(value.getConfiguration())), buffer, false);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraverserSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraverserSerializer.java
similarity index 77%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraverserSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraverserSerializer.java
index 4dede70..6361fb0 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TraverserSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraverserSerializer.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -36,14 +37,14 @@ public class TraverserSerializer extends SimpleTypeSerializer<Traverser> {
     }
 
     @Override
-    protected Traverser readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Traverser readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final long bulk = context.readValue(buffer, Long.class, false);
         final Object v = context.read(buffer);
         return new DefaultRemoteTraverser<>(v, bulk);
     }
 
     @Override
-    protected void writeValue(final Traverser value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Traverser value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.bulk(), buffer, false);
         context.write(value.get(), buffer);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TreeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TreeSerializer.java
similarity index 78%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TreeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TreeSerializer.java
index 3747914..66bbf8e 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/TreeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TreeSerializer.java
@@ -16,22 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
+
 public class TreeSerializer extends SimpleTypeSerializer<Tree> {
     public TreeSerializer() {
         super(DataType.TREE);
     }
 
     @Override
-    protected Tree readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Tree readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final int length = buffer.readInt();
 
         final Tree result = new Tree();
@@ -43,7 +44,7 @@ public class TreeSerializer extends SimpleTypeSerializer<Tree> {
     }
 
     @Override
-    protected void writeValue(final Tree value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Tree value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeInt(value.size());
 
         for (Object key : value.keySet()) {
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/UUIDSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/UUIDSerializer.java
similarity index 83%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/UUIDSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/UUIDSerializer.java
index 7fd68d0..dc458d4 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/UUIDSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/UUIDSerializer.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
 import java.util.UUID;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/VertexPropertySerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexPropertySerializer.java
similarity index 83%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/VertexPropertySerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexPropertySerializer.java
index 851c13b..bb9ba8b 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/VertexPropertySerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexPropertySerializer.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty;
 
+import java.io.IOException;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -36,7 +37,7 @@ public class VertexPropertySerializer extends SimpleTypeSerializer<VertexPropert
     }
 
     @Override
-    protected VertexProperty readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected VertexProperty readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final VertexProperty v = new ReferenceVertexProperty<>(context.read(buffer),
                 context.readValue(buffer, String.class, false),
                 context.read(buffer));
@@ -51,7 +52,7 @@ public class VertexPropertySerializer extends SimpleTypeSerializer<VertexPropert
     }
 
     @Override
-    protected void writeValue(final VertexProperty value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final VertexProperty value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.write(value.id(), buffer);
         context.writeValue(value.label(), buffer, false);
         context.write(value.value(), buffer);
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/VertexSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexSerializer.java
similarity index 80%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/VertexSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexSerializer.java
index ce8ffe1..18909f3 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/VertexSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/VertexSerializer.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
 
+import java.io.IOException;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -35,7 +36,7 @@ public class VertexSerializer extends SimpleTypeSerializer<Vertex> {
     }
 
     @Override
-    protected Vertex readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected Vertex readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final Vertex v = new ReferenceVertex(context.read(buffer), 
                                              context.readValue(buffer, String.class, false));
         
@@ -46,7 +47,7 @@ public class VertexSerializer extends SimpleTypeSerializer<Vertex> {
     }
 
     @Override
-    protected void writeValue(final Vertex value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final Vertex value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.write(value.id(), buffer);
         context.writeValue(value.label(), buffer, false);
         context.write(null, buffer);
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/YearMonthSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/YearMonthSerializer.java
similarity index 75%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/YearMonthSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/YearMonthSerializer.java
index cff236c..070c214 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/YearMonthSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/YearMonthSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.YearMonth;
 
 /**
@@ -35,12 +35,12 @@ public class YearMonthSerializer extends SimpleTypeSerializer<YearMonth> {
     }
 
     @Override
-    protected YearMonth readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected YearMonth readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return YearMonth.of(buffer.readInt(), buffer.readByte());
     }
 
     @Override
-    protected void writeValue(final YearMonth value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final YearMonth value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeInt(value.getYear()).writeByte(value.getMonthValue());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ZoneOffsetSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZoneOffsetSerializer.java
similarity index 74%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ZoneOffsetSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZoneOffsetSerializer.java
index 7cbbd78..09b6e47 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ZoneOffsetSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZoneOffsetSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.ZoneOffset;
 
 /**
@@ -36,12 +36,12 @@ public class ZoneOffsetSerializer extends SimpleTypeSerializer<ZoneOffset> {
     }
 
     @Override
-    protected ZoneOffset readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected ZoneOffset readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         return ZoneOffset.ofTotalSeconds(buffer.readInt());
     }
 
     @Override
-    protected void writeValue(final ZoneOffset value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final ZoneOffset value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         buffer.writeInt(value.getTotalSeconds());
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ZonedDateTimeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZonedDateTimeSerializer.java
similarity index 77%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ZonedDateTimeSerializer.java
rename to gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZonedDateTimeSerializer.java
index d9dc8b8..c39dff7 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/ZonedDateTimeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZonedDateTimeSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 
+import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.ZonedDateTime;
 import java.time.ZoneOffset;
@@ -37,14 +37,14 @@ public class ZonedDateTimeSerializer extends SimpleTypeSerializer<ZonedDateTime>
     }
 
     @Override
-    protected ZonedDateTime readValue(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    protected ZonedDateTime readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         final LocalDateTime ldt = context.readValue(buffer, LocalDateTime.class, false);
         final ZoneOffset zo = context.readValue(buffer, ZoneOffset.class, false);
         return ZonedDateTime.of(ldt, zo);
     }
 
     @Override
-    protected void writeValue(final ZonedDateTime value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    protected void writeValue(final ZonedDateTime value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         context.writeValue(value.toLocalDateTime(), buffer, false);
         context.writeValue(value.getOffset(), buffer, false);
     }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
index b555bff..bf4e76f 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
@@ -22,13 +22,13 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufAllocator;
 import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryIo;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryIo;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.driver.ser.binary.RequestMessageSerializer;
 import org.apache.tinkerpop.gremlin.driver.ser.binary.ResponseMessageSerializer;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.TypeSerializerRegistry;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.types.CustomTypeSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.binary.types.CustomTypeSerializer;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
 import org.javatuples.Pair;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/NettyBuffer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/NettyBuffer.java
similarity index 99%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/NettyBuffer.java
rename to gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/NettyBuffer.java
index 0a8ea61..f9de6c6 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/NettyBuffer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/NettyBuffer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver;
+package org.apache.tinkerpop.gremlin.driver.ser;
 
 import io.netty.buffer.ByteBuf;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/NettyBufferFactory.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/NettyBufferFactory.java
similarity index 96%
rename from gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/NettyBufferFactory.java
rename to gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/NettyBufferFactory.java
index 731d3fe..b1bfe1f 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/NettyBufferFactory.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/NettyBufferFactory.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.gremlin.driver;
+package org.apache.tinkerpop.gremlin.driver.ser;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java
index 06c45ed..004bfe9 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java
@@ -19,11 +19,14 @@
 package org.apache.tinkerpop.gremlin.driver.ser.binary;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.tinkerpop.gremlin.driver.NettyBufferFactory;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
 import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 
+import java.io.IOException;
 import java.util.Map;
 import java.util.UUID;
 
@@ -42,31 +45,39 @@ public class RequestMessageSerializer {
             throw new SerializationException("The most significant bit should be set according to the format");
         }
 
-        final UUID id = context.readValue(buffer, UUID.class, false);
-        final String op = context.readValue(buffer, String.class, false);
-        final String processor = context.readValue(buffer, String.class, false);
+        try {
+            final UUID id = context.readValue(buffer, UUID.class, false);
+            final String op = context.readValue(buffer, String.class, false);
+            final String processor = context.readValue(buffer, String.class, false);
 
-        final RequestMessage.Builder builder = RequestMessage.build(op).overrideRequestId(id).processor(processor);
+            final RequestMessage.Builder builder = RequestMessage.build(op).overrideRequestId(id).processor(processor);
 
-        final Map<String, Object> args = context.readValue(buffer, Map.class, false);
-        args.forEach(builder::addArg);
+            final Map<String, Object> args = context.readValue(buffer, Map.class, false);
+            args.forEach(builder::addArg);
 
-        return builder.create();
+            return builder.create();
+        } catch (IOException ex) {
+            throw new SerializationException(ex);
+        }
     }
 
     public void writeValue(final RequestMessage value, final ByteBuf byteBuf, final GraphBinaryWriter context) throws SerializationException {
         // Wrap netty's buffer
         final Buffer buffer = bufferFactory.create(byteBuf);
 
-        // Version
-        buffer.writeByte(GraphBinaryWriter.VERSION_BYTE);
-        // RequestId
-        context.writeValue(value.getRequestId(), buffer, false);
-        // Op
-        context.writeValue(value.getOp(), buffer, false);
-        // Processor
-        context.writeValue(value.getProcessor(), buffer, false);
-        // Args
-        context.writeValue(value.getArgs(), buffer, false);
+        try {
+            // Version
+            buffer.writeByte(GraphBinaryWriter.VERSION_BYTE);
+            // RequestId
+            context.writeValue(value.getRequestId(), buffer, false);
+            // Op
+            context.writeValue(value.getOp(), buffer, false);
+            // Processor
+            context.writeValue(value.getProcessor(), buffer, false);
+            // Args
+            context.writeValue(value.getArgs(), buffer, false);
+        } catch (IOException ex) {
+            throw new SerializationException(ex);
+        }
     }
 }
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java
index 2c35d17..5a07cdb 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java
@@ -19,14 +19,17 @@
 package org.apache.tinkerpop.gremlin.driver.ser.binary;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.tinkerpop.gremlin.driver.NettyBufferFactory;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseResult;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatus;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 
+import java.io.IOException;
 import java.util.Map;
 import java.util.UUID;
 
@@ -44,13 +47,17 @@ public class ResponseMessageSerializer {
             throw new SerializationException("The most significant bit should be set according to the format");
         }
 
-        return ResponseMessage.build(context.readValue(buffer, UUID.class, true))
-                .code(ResponseStatusCode.getFromValue(context.readValue(buffer, Integer.class, false)))
-                .statusMessage(context.readValue(buffer, String.class, true))
-                .statusAttributes(context.readValue(buffer, Map.class, false))
-                .responseMetaData(context.readValue(buffer, Map.class, false))
-                .result(context.read(buffer))
-                .create();
+        try {
+            return ResponseMessage.build(context.readValue(buffer, UUID.class, true))
+                    .code(ResponseStatusCode.getFromValue(context.readValue(buffer, Integer.class, false)))
+                    .statusMessage(context.readValue(buffer, String.class, true))
+                    .statusAttributes(context.readValue(buffer, Map.class, false))
+                    .responseMetaData(context.readValue(buffer, Map.class, false))
+                    .result(context.read(buffer))
+                    .create();
+        } catch (IOException ex) {
+            throw new SerializationException(ex);
+        }
     }
 
     public void writeValue(final ResponseMessage value, final ByteBuf byteBuf, final GraphBinaryWriter context) throws SerializationException {
@@ -60,19 +67,23 @@ public class ResponseMessageSerializer {
         final ResponseResult result = value.getResult();
         final ResponseStatus status = value.getStatus();
 
-        // Version
-        buffer.writeByte(GraphBinaryWriter.VERSION_BYTE);
-        // Nullable request id
-        context.writeValue(value.getRequestId(), buffer, true);
-        // Status code
-        context.writeValue(status.getCode().getValue(), buffer, false);
-        // Nullable status message
-        context.writeValue(status.getMessage(), buffer, true);
-        // Status attributes
-        context.writeValue(status.getAttributes(), buffer, false);
-        // Result meta
-        context.writeValue(result.getMeta(), buffer, false);
-        // Fully-qualified value
-        context.write(result.getData(), buffer);
+        try {
+            // Version
+            buffer.writeByte(GraphBinaryWriter.VERSION_BYTE);
+            // Nullable request id
+            context.writeValue(value.getRequestId(), buffer, true);
+            // Status code
+            context.writeValue(status.getCode().getValue(), buffer, false);
+            // Nullable status message
+            context.writeValue(status.getMessage(), buffer, true);
+            // Status attributes
+            context.writeValue(status.getAttributes(), buffer, false);
+            // Result meta
+            context.writeValue(result.getMeta(), buffer, false);
+            // Fully-qualified value
+            context.write(result.getData(), buffer);
+        } catch (IOException ex) {
+            throw new SerializationException(ex);
+        }
     }
 }
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
index 8a8d27f..d0042ff 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1;
 import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry;
 import org.junit.Test;
 import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
 
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java
index 6bdd8e2..e74e6dc 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java
@@ -19,7 +19,7 @@
 package org.apache.tinkerpop.gremlin.driver.ser.binary;
 
 import io.netty.buffer.ByteBufAllocator;
-import org.apache.tinkerpop.gremlin.driver.NettyBufferFactory;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
 import org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
@@ -50,6 +50,8 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.structure.io.IoTest;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerFailureTests.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerFailureTests.java
index d9eda2a..2268bf1 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerFailureTests.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerFailureTests.java
@@ -20,8 +20,7 @@
 package org.apache.tinkerpop.gremlin.driver.ser.binary;
 
 import io.netty.buffer.UnpooledByteBufAllocator;
-import org.apache.tinkerpop.gremlin.driver.NettyBufferFactory;
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
@@ -31,6 +30,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetri
 import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
@@ -40,6 +40,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -100,7 +101,7 @@ public class TypeSerializerFailureTests {
         try {
             writer.write(value, buffer);
             fail("Should throw exception");
-        } catch (SerializationException | RuntimeException e) {
+        } catch (IOException | RuntimeException e) {
             // We are the owner of the buffer, we should release it
             buffer.release();
         }
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistryTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistryTest.java
index 664a401..a40285b 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistryTest.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/TypeSerializerRegistryTest.java
@@ -18,14 +18,19 @@
  */
 package org.apache.tinkerpop.gremlin.driver.ser.binary;
 
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
 import org.apache.tinkerpop.gremlin.driver.ser.binary.types.sample.SamplePerson;
 import org.apache.tinkerpop.gremlin.driver.ser.binary.types.sample.SamplePersonSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.junit.Test;
 
+import java.io.IOException;
 import java.util.UUID;
 
 import static junit.framework.TestCase.assertEquals;
@@ -34,7 +39,7 @@ import static junit.framework.TestCase.assertSame;
 public class TypeSerializerRegistryTest {
 
     @Test
-    public void shouldResolveToUserProvidedForInterfaces_1() throws SerializationException {
+    public void shouldResolveToUserProvidedForInterfaces_1() throws IOException {
         final TypeSerializer<VertexProperty> expected = new TestVertexPropertySerializer();
         final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
                 .add(VertexProperty.class, expected).create();
@@ -44,7 +49,7 @@ public class TypeSerializerRegistryTest {
     }
 
     @Test
-    public void shouldResolveToUserProvidedForInterfaces_2() throws SerializationException {
+    public void shouldResolveToUserProvidedForInterfaces_2() throws IOException {
         final TypeSerializer<Property> expected = new TestPropertySerializer();
         final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
                 .add(Property.class, expected).create();
@@ -54,7 +59,7 @@ public class TypeSerializerRegistryTest {
     }
 
     @Test
-    public void shouldResolveToUserProvidedForClasses() throws SerializationException {
+    public void shouldResolveToUserProvidedForClasses() throws Exception {
         final TypeSerializer<UUID> expected = new TestUUIDSerializer();
         final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
                 .add(UUID.class, expected).create();
@@ -64,7 +69,7 @@ public class TypeSerializerRegistryTest {
     }
 
     @Test
-    public void shouldResolveToTheFirstSerializerForInterfaces() throws SerializationException {
+    public void shouldResolveToTheFirstSerializerForInterfaces() throws IOException {
         final TypeSerializer<VertexProperty> expectedForVertexProperty = new TestVertexPropertySerializer();
         final TypeSerializer<Property> expectedForProperty = new TestPropertySerializer();
         final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
@@ -89,7 +94,7 @@ public class TypeSerializerRegistryTest {
         String message = null;
         try {
             registry.getSerializer(SamplePerson.class);
-        } catch (SerializationException ex) {
+        } catch (IOException ex) {
             message = ex.getMessage();
         }
 
@@ -98,7 +103,7 @@ public class TypeSerializerRegistryTest {
     }
 
     @Test
-    public void shouldUseFallbackResolverReturnValue() throws SerializationException {
+    public void shouldUseFallbackResolverReturnValue() throws IOException {
         TypeSerializer expected = new SamplePersonSerializer();
         final int[] called = {0};
         final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CharSerializerTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CharSerializerTest.java
index 0c62a24..4d38c99 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CharSerializerTest.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/CharSerializerTest.java
@@ -21,13 +21,15 @@ package org.apache.tinkerpop.gremlin.driver.ser.binary.types;
 import io.netty.buffer.ByteBufAllocator;
 import io.netty.buffer.Unpooled;
 import io.netty.buffer.UnpooledByteBufAllocator;
-import org.apache.tinkerpop.gremlin.driver.NettyBufferFactory;
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
 
@@ -37,9 +39,11 @@ import static org.junit.Assert.assertTrue;
 @RunWith(Parameterized.class)
 public class CharSerializerTest {
     private final ByteBufAllocator allocator = new UnpooledByteBufAllocator(false);
-    private static final CharSerializer serializer = new CharSerializer();
     private static final NettyBufferFactory bufferFactory = new NettyBufferFactory();
 
+    private static final GraphBinaryReader reader = new GraphBinaryReader();
+    private static final GraphBinaryWriter writer = new GraphBinaryWriter();
+
     @Parameterized.Parameters(name = "Character={0}")
     public static Collection input() {
         return Arrays.asList(
@@ -58,15 +62,16 @@ public class CharSerializerTest {
     public byte[] byteArray;
 
     @Test
-    public void readValueTest() throws SerializationException {
-        final Character actual = serializer.readValue(bufferFactory.create(Unpooled.wrappedBuffer(byteArray)), null);
+    public void readValueTest() throws IOException {
+        final Character actual = reader.readValue(
+                bufferFactory.create(Unpooled.wrappedBuffer(byteArray)),Character.class, false);
         assertEquals(charValue, actual.charValue());
     }
 
     @Test
-    public void writeValueTest() throws SerializationException {
+    public void writeValueTest() throws IOException {
         final Buffer actual = bufferFactory.create(allocator.buffer());
-         serializer.writeValue(charValue, actual, null);
+        writer.writeValue(charValue, actual, false);
         final byte[] actualBytes = new byte[byteArray.length];
         actual.readBytes(actualBytes);
         assertTrue(Arrays.deepEquals(new byte[][]{byteArray}, new byte[][]{actualBytes}));
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializer.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializer.java
index 09cde49..ad9e5db 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializer.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializer.java
@@ -19,12 +19,13 @@
 package org.apache.tinkerpop.gremlin.driver.ser.binary.types.sample;
 
 import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.types.CustomTypeSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.types.CustomTypeSerializer;
 
+import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.Date;
 
@@ -45,7 +46,7 @@ public final class SamplePersonSerializer implements CustomTypeSerializer<Sample
     }
 
     @Override
-    public SamplePerson read(final Buffer buffer, final GraphBinaryReader context) throws SerializationException {
+    public SamplePerson read(final Buffer buffer, final GraphBinaryReader context) throws IOException {
         // {custom type info}, {value_flag} and {value}
         // No custom_type_info
         if (buffer.readInt() != 0) {
@@ -56,7 +57,7 @@ public final class SamplePersonSerializer implements CustomTypeSerializer<Sample
     }
 
     @Override
-    public SamplePerson readValue(final Buffer buffer, final GraphBinaryReader context, final boolean nullable) throws SerializationException {
+    public SamplePerson readValue(final Buffer buffer, final GraphBinaryReader context, final boolean nullable) throws IOException {
         if (nullable) {
             final byte valueFlag = buffer.readByte();
             if ((valueFlag & 1) == 1) {
@@ -83,7 +84,7 @@ public final class SamplePersonSerializer implements CustomTypeSerializer<Sample
     }
 
     @Override
-    public void write(final SamplePerson value, final Buffer buffer, final GraphBinaryWriter context) throws SerializationException {
+    public void write(final SamplePerson value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
         // Write {custom type info}, {value_flag} and {value}
         buffer.writeBytes(typeInfoBuffer);
 
@@ -91,7 +92,7 @@ public final class SamplePersonSerializer implements CustomTypeSerializer<Sample
     }
 
     @Override
-    public void writeValue(final SamplePerson value, final Buffer buffer, final GraphBinaryWriter context, final boolean nullable) throws SerializationException {
+    public void writeValue(final SamplePerson value, final Buffer buffer, final GraphBinaryWriter context, final boolean nullable) throws IOException {
         if (value == null) {
             if (!nullable) {
                 throw new SerializationException("Unexpected null value when nullable is false");
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializerTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializerTest.java
index 0944c60..3d6bef3 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializerTest.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/sample/SamplePersonSerializerTest.java
@@ -20,19 +20,19 @@ package org.apache.tinkerpop.gremlin.driver.ser.binary.types.sample;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufAllocator;
-import org.apache.tinkerpop.gremlin.driver.NettyBufferFactory;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1;
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryIo;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.TypeSerializerRegistry;
 import org.apache.tinkerpop.gremlin.structure.io.AbstractIoRegistry;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryIo;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.structure.io.binary.TypeSerializerRegistry;
 import org.junit.Test;
 import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
 
+import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.util.Collections;
@@ -51,14 +51,14 @@ public class SamplePersonSerializerTest {
     private static final NettyBufferFactory bufferFactory = new NettyBufferFactory();
 
     @Test
-    public void shouldCustomSerializationWithPerson() throws SerializationException {
+    public void shouldCustomSerializationWithPerson() throws IOException {
         final GraphBinaryMessageSerializerV1 serializer = new GraphBinaryMessageSerializerV1(
                 TypeSerializerRegistry.build().addCustomType(SamplePerson.class, new SamplePersonSerializer()).create());
         assertPerson(serializer);
     }
 
     @Test
-    public void shouldSerializePersonViaIoRegistry() throws SerializationException {
+    public void shouldSerializePersonViaIoRegistry() throws IOException {
         final GraphBinaryMessageSerializerV1 serializer = new GraphBinaryMessageSerializerV1();
         final Map<String,Object> config = new HashMap<>();
         config.put(TOKEN_IO_REGISTRIES, Collections.singletonList(CustomIoRegistry.class.getName()));
@@ -68,7 +68,7 @@ public class SamplePersonSerializerTest {
     }
 
     @Test
-    public void shouldSerializePersonViaCustom() throws SerializationException {
+    public void shouldSerializePersonViaCustom() throws IOException {
         final GraphBinaryMessageSerializerV1 serializer = new GraphBinaryMessageSerializerV1();
         final Map<String,Object> config = new HashMap<>();
         config.put(TOKEN_CUSTOM, Collections.singletonList(String.format("%s;%s",
@@ -79,7 +79,7 @@ public class SamplePersonSerializerTest {
     }
 
     @Test
-    public void readValueAndWriteValueShouldBeSymmetric() throws SerializationException {
+    public void readValueAndWriteValueShouldBeSymmetric() throws IOException {
         final TypeSerializerRegistry registry = TypeSerializerRegistry.build()
                 .addCustomType(SamplePerson.class, new SamplePersonSerializer()).create();
         final GraphBinaryReader reader = new GraphBinaryReader(registry);
@@ -98,7 +98,7 @@ public class SamplePersonSerializerTest {
         }
     }
 
-    private void assertPerson(final GraphBinaryMessageSerializerV1 serializer) throws SerializationException {
+    private void assertPerson(final GraphBinaryMessageSerializerV1 serializer) throws IOException {
         final Date birthDate = Date.from(LocalDateTime.of(2010, 4, 29, 5, 30).toInstant(ZoneOffset.UTC));
         final SamplePerson person = new SamplePerson("Olivia", birthDate);
 
diff --git a/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/GraphBinaryReaderWriterBenchmark.java b/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/GraphBinaryReaderWriterBenchmark.java
index a3fdd97..e247434 100644
--- a/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/GraphBinaryReaderWriterBenchmark.java
+++ b/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/GraphBinaryReaderWriterBenchmark.java
@@ -18,16 +18,15 @@
  */
 package org.apache.tinkerpop.gremlin.driver;
 
-import io.netty.buffer.ByteBuf;
 import io.netty.buffer.UnpooledByteBufAllocator;
 import org.apache.tinkerpop.benchmark.util.AbstractBenchmarkBase;
-import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.Level;
@@ -104,27 +103,27 @@ public class GraphBinaryReaderWriterBenchmark extends AbstractBenchmarkBase {
     }
 
     @Benchmark
-    public void writeBytecode1(BenchmarkState state) throws SerializationException {
+    public void writeBytecode1(BenchmarkState state) throws IOException {
         writer.writeValue(state.bytecode1, state.bufferWrite, false);
     }
 
     @Benchmark
-    public void writeBytecode2(BenchmarkState state) throws SerializationException {
+    public void writeBytecode2(BenchmarkState state) throws IOException {
         writer.writeValue(state.bytecode2, state.bufferWrite, false);
     }
 
     @Benchmark
-    public void readBytecode1(BenchmarkState state) throws SerializationException {
+    public void readBytecode1(BenchmarkState state) throws IOException {
         reader.readValue(state.bytecodeBuffer1, Bytecode.class, false);
     }
 
     @Benchmark
-    public void readBytecode2(BenchmarkState state) throws SerializationException {
+    public void readBytecode2(BenchmarkState state) throws IOException {
         reader.readValue(state.bytecodeBuffer2, Bytecode.class, false);
     }
 
     @Benchmark
-    public void readP1(BenchmarkState state) throws SerializationException {
+    public void readP1(BenchmarkState state) throws IOException {
         reader.readValue(state.pBuffer1, P.class, false);
     }
 }
diff --git a/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/SerializationBenchmark.java b/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/SerializationBenchmark.java
index bff73c7..2d4ce84 100644
--- a/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/SerializationBenchmark.java
+++ b/gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/driver/SerializationBenchmark.java
@@ -28,8 +28,8 @@ import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1;
 import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0;
 import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.DataType;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
 import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.Warmup;
diff --git a/gremlin-tools/gremlin-io-test/scripts/generate-graphbinary-resources.groovy b/gremlin-tools/gremlin-io-test/scripts/generate-graphbinary-resources.groovy
index 43eeb0d..a423398 100644
--- a/gremlin-tools/gremlin-io-test/scripts/generate-graphbinary-resources.groovy
+++ b/gremlin-tools/gremlin-io-test/scripts/generate-graphbinary-resources.groovy
@@ -18,7 +18,7 @@
  */
 
 import io.netty.buffer.ByteBufAllocator
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.*
 import org.apache.tinkerpop.gremlin.structure.*
 import org.apache.tinkerpop.gremlin.structure.io.*
diff --git a/gremlin-tools/gremlin-io-test/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphbinary/GraphBinaryCompatibilityTest.java b/gremlin-tools/gremlin-io-test/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphbinary/GraphBinaryCompatibilityTest.java
index 45c1632..391f6b4 100644
--- a/gremlin-tools/gremlin-io-test/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphbinary/GraphBinaryCompatibilityTest.java
+++ b/gremlin-tools/gremlin-io-test/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphbinary/GraphBinaryCompatibilityTest.java
@@ -20,20 +20,12 @@ package org.apache.tinkerpop.gremlin.structure.io.graphbinary;
 
 import io.netty.buffer.ByteBufAllocator;
 import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.tinkerpop.gremlin.driver.NettyBufferFactory;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryReader;
-import org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryWriter;
+import org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
 import org.apache.tinkerpop.gremlin.structure.io.AbstractTypedCompatibilityTest;
 import org.apache.tinkerpop.gremlin.structure.io.Buffer;
 import org.apache.tinkerpop.gremlin.structure.io.Compatibility;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoCompatibility;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoVersion;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0;
-import org.apache.tinkerpop.shaded.kryo.Kryo;
-import org.apache.tinkerpop.shaded.kryo.io.Input;
-import org.apache.tinkerpop.shaded.kryo.io.Output;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;