You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/03/03 19:10:39 UTC

[7/8] incubator-tinkerpop git commit: Renamed Gremlin Kryo to simply Gryo.

Renamed Gremlin Kryo to simply Gryo.

The .gio extensions are now renamed to .kryo.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/929a2889
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/929a2889
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/929a2889

Branch: refs/heads/spark
Commit: 929a2889c3ec75ff2b315200bc5abdd001bc4fcd
Parents: 9bdb5e7
Author: Stephen Mallette <sp...@apache.org>
Authored: Tue Mar 3 12:22:28 2015 -0500
Committer: Stephen Mallette <sp...@apache.org>
Committed: Tue Mar 3 12:22:28 2015 -0500

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 data/grateful-dead-vertices.gio                 | Bin 1028298 -> 0 bytes
 data/grateful-dead-vertices.kryo                | Bin 0 -> 1028298 bytes
 data/grateful-dead.gio                          | Bin 515409 -> 0 bytes
 data/grateful-dead.kryo                         | Bin 0 -> 515409 bytes
 data/tinkerpop-classic-vertices.gio             | Bin 1323 -> 0 bytes
 data/tinkerpop-classic-vertices.kryo            | Bin 0 -> 1323 bytes
 data/tinkerpop-classic.gio                      | Bin 817 -> 0 bytes
 data/tinkerpop-classic.kryo                     | Bin 0 -> 817 bytes
 data/tinkerpop-crew-vertices.gio                | Bin 2743 -> 0 bytes
 data/tinkerpop-crew-vertices.kryo               | Bin 0 -> 2743 bytes
 data/tinkerpop-crew.gio                         | Bin 1916 -> 0 bytes
 data/tinkerpop-crew.kryo                        | Bin 0 -> 1916 bytes
 data/tinkerpop-modern-vertices.gio              | Bin 1439 -> 0 bytes
 data/tinkerpop-modern-vertices.kryo             | Bin 0 -> 1439 bytes
 data/tinkerpop-modern.gio                       | Bin 877 -> 0 bytes
 data/tinkerpop-modern.kryo                      | Bin 0 -> 877 bytes
 docs/src/implementations.asciidoc               |  14 +-
 docs/src/the-graph.asciidoc                     |  18 +-
 gremlin-console/conf/remote-objects.yaml        |   2 +-
 gremlin-console/conf/remote.yaml                |   2 +-
 .../plugin/gremlin-server-integration.yaml      |   4 +-
 .../gremlin/console/groovy/plugin/remote.yaml   |   2 +-
 .../util/metric/DependantMutableMetrics.java    |   2 +-
 .../process/util/metric/MutableMetrics.java     |   2 +-
 .../tinkerpop/gremlin/structure/Graph.java      |  50 +--
 .../gremlin/structure/io/DefaultIo.java         |   8 +-
 .../gremlin/structure/io/GraphMigrator.java     |  18 +-
 .../structure/io/gryo/EdgeTerminator.java       |  48 +++
 .../structure/io/gryo/EntrySerializer.java      |  43 ++
 .../structure/io/gryo/GraphSerializer.java      | 164 ++++++++
 .../structure/io/gryo/GremlinClassResolver.java | 206 ++++++++++
 .../gremlin/structure/io/gryo/GryoMapper.java   | 406 +++++++++++++++++++
 .../gremlin/structure/io/gryo/GryoReader.java   | 400 ++++++++++++++++++
 .../gremlin/structure/io/gryo/GryoWriter.java   | 180 ++++++++
 .../structure/io/gryo/URISerializer.java        |  46 +++
 .../structure/io/gryo/UUIDSerializer.java       |  46 +++
 .../io/gryo/VertexByteArrayInputStream.java     |  74 ++++
 .../structure/io/gryo/VertexTerminator.java     |  53 +++
 .../structure/io/kryo/EdgeTerminator.java       |  48 ---
 .../structure/io/kryo/EntrySerializer.java      |  43 --
 .../structure/io/kryo/GraphSerializer.java      | 164 --------
 .../structure/io/kryo/GremlinClassResolver.java | 206 ----------
 .../gremlin/structure/io/kryo/KryoMapper.java   | 406 -------------------
 .../gremlin/structure/io/kryo/KryoReader.java   | 400 ------------------
 .../gremlin/structure/io/kryo/KryoWriter.java   | 180 --------
 .../structure/io/kryo/URISerializer.java        |  46 ---
 .../structure/io/kryo/UUIDSerializer.java       |  46 ---
 .../io/kryo/VertexByteArrayInputStream.java     |  74 ----
 .../structure/io/kryo/VertexTerminator.java     |  53 ---
 .../tinkerpop/gremlin/driver/Cluster.java       |   2 +-
 .../driver/ser/GryoMessageSerializerV1d0.java   | 307 ++++++++++++++
 .../driver/ser/JsonBuilderGryoSerializer.java   |  45 ++
 .../driver/ser/JsonBuilderKryoSerializer.java   |  45 --
 .../driver/ser/KryoMessageSerializerV1d0.java   | 307 --------------
 .../tinkerpop/gremlin/driver/ser/SerTokens.java |   2 +-
 .../gremlin/driver/ser/Serializers.java         |   6 +-
 .../gremlin/driver/simple/NioClient.java        |   4 +-
 .../gremlin/driver/simple/WebSocketClient.java  |   4 +-
 .../ser/GryoMessageSerializerV1D0Test.java      | 294 ++++++++++++++
 .../ser/KryoMessageSerializerV1d0Test.java      | 294 --------------
 .../AbstractImportCustomizerProvider.java       |   4 +-
 gremlin-server/conf/gremlin-server-classic.yaml |   4 +-
 gremlin-server/conf/gremlin-server-modern.yaml  |   4 +-
 gremlin-server/conf/gremlin-server-neo4j.yaml   |   4 +-
 gremlin-server/conf/gremlin-server.yaml         |   4 +-
 .../server/GremlinAdditionPerformanceTest.java  |   2 +-
 .../server/GremlinDriverIntegrateTest.java      |  10 +-
 .../server/gremlin-server-integration.yaml      |   4 +-
 .../server/gremlin-server-performance.yaml      |   2 +-
 .../gremlin/AbstractGraphProvider.java          |   8 +-
 .../apache/tinkerpop/gremlin/LoadGraphWith.java |  10 +-
 .../structure/GraphWritePerformanceTest.java    |   6 +-
 .../tinkerpop/gremlin/structure/IoTest.java     | 180 ++++----
 .../gremlin/structure/SerializationTest.java    |  27 +-
 .../structure/io/gryo/GryoResourceAccess.java   |  27 ++
 .../structure/io/kryo/KryoResourceAccess.java   |  27 --
 .../io/gryo/grateful-dead-vertices.kryo         | Bin 0 -> 1028298 bytes
 .../structure/io/gryo/grateful-dead.kryo        | Bin 0 -> 515409 bytes
 .../io/gryo/tinkerpop-classic-vertices.kryo     | Bin 0 -> 1323 bytes
 .../structure/io/gryo/tinkerpop-classic.kryo    | Bin 0 -> 817 bytes
 .../io/gryo/tinkerpop-crew-vertices.kryo        | Bin 0 -> 2743 bytes
 .../structure/io/gryo/tinkerpop-crew.kryo       | Bin 0 -> 1916 bytes
 .../io/gryo/tinkerpop-modern-vertices.kryo      | Bin 0 -> 1439 bytes
 .../structure/io/gryo/tinkerpop-modern.kryo     | Bin 0 -> 877 bytes
 .../io/kryo/grateful-dead-vertices.gio          | Bin 1028298 -> 0 bytes
 .../gremlin/structure/io/kryo/grateful-dead.gio | Bin 515409 -> 0 bytes
 .../io/kryo/tinkerpop-classic-vertices.gio      | Bin 1323 -> 0 bytes
 .../structure/io/kryo/tinkerpop-classic.gio     | Bin 817 -> 0 bytes
 .../io/kryo/tinkerpop-crew-vertices.gio         | Bin 2743 -> 0 bytes
 .../structure/io/kryo/tinkerpop-crew.gio        | Bin 1916 -> 0 bytes
 .../io/kryo/tinkerpop-modern-vertices.gio       | Bin 1439 -> 0 bytes
 .../structure/io/kryo/tinkerpop-modern.gio      | Bin 877 -> 0 bytes
 .../structure/io/gryo/GryoMapperTest.java       |  34 ++
 .../structure/io/kryo/KryoMapperTest.java       |  34 --
 hadoop-gremlin/conf/hadoop-gryo.properties      |  31 ++
 hadoop-gremlin/conf/hadoop-kryo.properties      |  31 --
 .../groovy/plugin/HadoopGremlinPlugin.java      |   4 +-
 .../computer/giraph/GiraphComputeVertex.java    |   8 +-
 .../process/computer/giraph/RuleWritable.java   |   4 +-
 .../hadoop/structure/io/ObjectWritable.java     |   4 +-
 .../hadoop/structure/io/VertexWritable.java     |   8 +-
 .../structure/io/gryo/GryoInputFormat.java      |  63 +++
 .../structure/io/gryo/GryoOutputFormat.java     |  43 ++
 .../structure/io/gryo/GryoRecordReader.java     | 113 ++++++
 .../structure/io/gryo/GryoRecordWriter.java     |  54 +++
 .../structure/io/gryo/VertexStreamIterator.java | 147 +++++++
 .../structure/io/kryo/KryoInputFormat.java      |  63 ---
 .../structure/io/kryo/KryoOutputFormat.java     |  43 --
 .../structure/io/kryo/KryoRecordReader.java     | 113 ------
 .../structure/io/kryo/KryoRecordWriter.java     |  54 ---
 .../structure/io/kryo/VertexStreamIterator.java | 147 -------
 .../gremlin/hadoop/HadoopGraphProvider.java     |  30 +-
 .../io/graphson/VertexStreamIteratorTest.java   |   6 +-
 .../io/gryo/GryoRecordReaderWriterTest.java     | 113 ++++++
 .../io/kryo/KryoRecordReaderWriterTest.java     | 113 ------
 pom.xml                                         |   2 +-
 tinkergraph-gremlin/pom.xml                     |   6 +-
 .../tinkergraph/structure/TinkerGraphTest.java  |  55 ++-
 119 files changed, 3205 insertions(+), 3206 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d568d64..87fab47 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
 TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Renamed "Gremlin Kryo" to "Gryo".
 * Implement profiling for nested traversals.
 * Removed `Reducing.Reducer` and `ReducingStrategy`. Previous `Reducing` classes are now `MapReducer` classes.
 * Refactored the "process" test suite to allow for better test configuration with respect to different `TraversalEngine` implementations.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/grateful-dead-vertices.gio
----------------------------------------------------------------------
diff --git a/data/grateful-dead-vertices.gio b/data/grateful-dead-vertices.gio
deleted file mode 100644
index 2031c24..0000000
Binary files a/data/grateful-dead-vertices.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/grateful-dead-vertices.kryo
----------------------------------------------------------------------
diff --git a/data/grateful-dead-vertices.kryo b/data/grateful-dead-vertices.kryo
new file mode 100644
index 0000000..2031c24
Binary files /dev/null and b/data/grateful-dead-vertices.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/grateful-dead.gio
----------------------------------------------------------------------
diff --git a/data/grateful-dead.gio b/data/grateful-dead.gio
deleted file mode 100644
index 97143b1..0000000
Binary files a/data/grateful-dead.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/grateful-dead.kryo
----------------------------------------------------------------------
diff --git a/data/grateful-dead.kryo b/data/grateful-dead.kryo
new file mode 100644
index 0000000..97143b1
Binary files /dev/null and b/data/grateful-dead.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-classic-vertices.gio
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-vertices.gio b/data/tinkerpop-classic-vertices.gio
deleted file mode 100644
index 33f8766..0000000
Binary files a/data/tinkerpop-classic-vertices.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-classic-vertices.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-vertices.kryo b/data/tinkerpop-classic-vertices.kryo
new file mode 100644
index 0000000..33f8766
Binary files /dev/null and b/data/tinkerpop-classic-vertices.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-classic.gio
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic.gio b/data/tinkerpop-classic.gio
deleted file mode 100644
index e2f72c6..0000000
Binary files a/data/tinkerpop-classic.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-classic.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic.kryo b/data/tinkerpop-classic.kryo
new file mode 100644
index 0000000..e2f72c6
Binary files /dev/null and b/data/tinkerpop-classic.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-crew-vertices.gio
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-vertices.gio b/data/tinkerpop-crew-vertices.gio
deleted file mode 100644
index 8289cd8..0000000
Binary files a/data/tinkerpop-crew-vertices.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-crew-vertices.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-vertices.kryo b/data/tinkerpop-crew-vertices.kryo
new file mode 100644
index 0000000..8289cd8
Binary files /dev/null and b/data/tinkerpop-crew-vertices.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-crew.gio
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew.gio b/data/tinkerpop-crew.gio
deleted file mode 100644
index 3e8ac2d..0000000
Binary files a/data/tinkerpop-crew.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-crew.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew.kryo b/data/tinkerpop-crew.kryo
new file mode 100644
index 0000000..3e8ac2d
Binary files /dev/null and b/data/tinkerpop-crew.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-modern-vertices.gio
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-vertices.gio b/data/tinkerpop-modern-vertices.gio
deleted file mode 100644
index 760e4d4..0000000
Binary files a/data/tinkerpop-modern-vertices.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-modern-vertices.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-vertices.kryo b/data/tinkerpop-modern-vertices.kryo
new file mode 100644
index 0000000..760e4d4
Binary files /dev/null and b/data/tinkerpop-modern-vertices.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-modern.gio
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern.gio b/data/tinkerpop-modern.gio
deleted file mode 100644
index 05e6101..0000000
Binary files a/data/tinkerpop-modern.gio and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/data/tinkerpop-modern.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern.kryo b/data/tinkerpop-modern.kryo
new file mode 100644
index 0000000..05e6101
Binary files /dev/null and b/data/tinkerpop-modern.kryo differ

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/docs/src/implementations.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/implementations.asciidoc b/docs/src/implementations.asciidoc
index 2911166..5869c5a 100644
--- a/docs/src/implementations.asciidoc
+++ b/docs/src/implementations.asciidoc
@@ -557,7 +557,7 @@ NeoTechnology are the creators of the graph pattern-match query language link:ht
 [source,groovy]
 gremlin> g = Neo4jGraph.open('/tmp/neo4j')
 ==>neo4jgraph[EmbeddedGraphDatabase [/tmp/neo4j]]
-gremlin> g.io().readKryo('data/tinkerpop-modern.gio')
+gremlin> g.io().readGryo('data/tinkerpop-modern.kryo')
 ==>null
 gremlin> g.cypher('MATCH (a {name:"marko"}) RETURN a')
 ==>[a:v[0]]
@@ -662,7 +662,7 @@ Properties Files
 
 [source,text]
 gremlin.graph=org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph
-gremlin.hadoop.inputLocation=tinkerpop-modern-vertices.gio
+gremlin.hadoop.inputLocation=tinkerpop-modern-vertices.kryo
 gremlin.hadoop.graphInputFormat=org.apache.tinkerpop.gremlin.hadoop.structure.io.kryo.KryoInputFormat
 gremlin.hadoop.outputLocation=output
 gremlin.hadoop.graphOutputFormat=org.apache.tinkerpop.gremlin.hadoop.structure.io.kryo.KryoOutputFormat
@@ -705,12 +705,12 @@ image:hadoop-pipes.png[width=180,float=left] It is possible to execute OLTP oper
 CAUTION: OLTP operations on `HadoopGraph` are not efficient. They require linear scans to execute and are unreasonable for large graphs. In such large graph situations, make use of <<traversalvertexprogram,TraversalVertexProgram>> which is the OLAP implementation of the Gremlin language. Hadoop-Gremlin provides various `GraphComputer` implementations to execute OLAP computations over a `HadoopGraph`.
 
 [source,text]
-gremlin> hdfs.copyFromLocal('data/tinkerpop-modern-vertices.gio', 'tinkerpop-modern-vertices.gio')
+gremlin> hdfs.copyFromLocal('data/tinkerpop-modern-vertices.kryo', 'tinkerpop-modern-vertices.kryo')
 ==>null
 gremlin> hdfs.ls()
-==>rw-r--r-- marko supergroup 1439 tinkerpop-modern-vertices.gio
-gremlin> g = GraphFactory.open('../../../hadoop-gremlin/conf/hadoop-kryo.properties')
-==>hadoopgraph[kryoinputformat->kryooutputformat]
+==>rw-r--r-- marko supergroup 1439 tinkerpop-modern-vertices.kryo
+gremlin> g = GraphFactory.open('../../../hadoop-gremlin/conf/hadoop-gryo.properties')
+==>hadoopgraph[gryoinputformat->gryooutputformat]
 gremlin> g.V().count()
 ==>6
 gremlin> g.V().out().out().values('name')
@@ -830,7 +830,7 @@ The distributed file system of Hadoop is called link:http://en.wikipedia.org/wik
 [source,text]
 gremlin> hdfs.ls()
 ==>rwxr-xr-x marko supergroup 0 (D) output
-==>rw-r--r-- marko supergroup 1439 tinkerpop-modern-vertices.gio
+==>rw-r--r-- marko supergroup 1439 tinkerpop-modern-vertices.kryo
 gremlin> hdfs.ls('output')
 ==>rwxr-xr-x marko supergroup 0 (D) a
 ==>rwxr-xr-x marko supergroup 0 (D) ~g

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/docs/src/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/the-graph.asciidoc b/docs/src/the-graph.asciidoc
index 8d89f14..b380125 100644
--- a/docs/src/the-graph.asciidoc
+++ b/docs/src/the-graph.asciidoc
@@ -652,7 +652,7 @@ In the above code, the `embedTypes` option is set to `true` and the output below
 The ambiguity of components of the GraphSON is now removed by the `@class` property, which contains Java class information for the data it is associated with.  The `@class` property is used for all non-final types, with the exception of a small number of "natural" types (String, Boolean, Integer, and Double) which can be correctly inferred from JSON typing.  While the output is more verbose, it comes with the security of not losing type information.  While non-JVM languages won't be able to consume this information automatically, at least there is a hint as to how the values should be coerced back into the correct types in the target language.
 
 [[gremlin-kryo]]
-Kryo Reader/Writer
+Gryo Reader/Writer
 ~~~~~~~~~~~~~~~~~~
 
 image:gremlin-kryo.png[width=400,float=left] link:https://github.com/EsotericSoftware/kryo[Kryo] is a popular serialization package for the JVM. Gremlin-Kryo is a binary Graph serialization format for use on the JVM by JVM languages. It is designed to be space efficient, non-lossy and is promoted as the standard format to use when working with graph data inside of the TinkerPop stack. A list of common use cases is presented below:
@@ -663,16 +663,16 @@ image:gremlin-kryo.png[width=400,float=left] link:https://github.com/EsotericSof
 
 CAUTION: When migrating between Gremlin Structure implementations, Kryo may not lose data, but it is important to consider the features of each `Graph` and whether or not the data types supported in one will be supported in the other.  Failure to do so, may result in errors.
 
-Kryo supports all of the `GraphReader` and `GraphWriter` interface methods and can therefore read or write an entire `Graph`, a single `Vertex` or a single `Edge`.  The following code shows how to write a `Graph` instance to file called `tinkerpop-modern.gio` and then how to read that file back into a different instance:
+Kryo supports all of the `GraphReader` and `GraphWriter` interface methods and can therefore read or write an entire `Graph`, a single `Vertex` or a single `Edge`.  The following code shows how to write a `Graph` instance to file called `tinkerpop-modern.kryo` and then how to read that file back into a different instance:
 
 
 [source,java]
 ----
 final Graph g = TinkerFactory.createModern();
-g.io().writeKryo("tinkerpop-modern.gio");
+g.io().writeGryo("tinkerpop-modern.kryo");
 
 final Graph newGraph = TinkerGraph.open();
-newGraph.io().readKryo("tinkerpop-modern.gio")'
+newGraph.io().readGryo("tinkerpop-modern.kryo")'
 ----
 
 If a custom configuration is required, then have the `Graph` generate a `GraphReader` or `GraphWriter` "builder" instance:
@@ -680,17 +680,17 @@ If a custom configuration is required, then have the `Graph` generate a `GraphRe
 [source,java]
 ----
 final Graph g = TinkerFactory.createModern();
-try (final OutputStream os = new FileOutputStream("tinkerpop-modern.gio")) {
-    g.io().kryoWriter().create().writeGraph(os);
+try (final OutputStream os = new FileOutputStream("tinkerpop-modern.kryo")) {
+    g.io().gryoWriter().create().writeGraph(os);
 }
 
 final Graph newGraph = TinkerGraph.open();
-try (final InputStream stream = new FileInputStream("tinkerpop-modern.gio")) {
-    newGraph.io().kryoReader().vertexIdKey("name").create().readGraph(stream);
+try (final InputStream stream = new FileInputStream("tinkerpop-modern.kryo")) {
+    newGraph.io().gryoReader().vertexIdKey("name").create().readGraph(stream);
 }
 ----
 
-NOTE: The preferred extension for files names produced by Kryo is `.gio`.
+NOTE: The preferred extension for files names produced by Gryo is `.kryo`.
 
 TinkerPop2 Data Migration
 ~~~~~~~~~~~~~~~~~~~~~~~~~

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-console/conf/remote-objects.yaml
----------------------------------------------------------------------
diff --git a/gremlin-console/conf/remote-objects.yaml b/gremlin-console/conf/remote-objects.yaml
index be5f83a..78424fd 100644
--- a/gremlin-console/conf/remote-objects.yaml
+++ b/gremlin-console/conf/remote-objects.yaml
@@ -17,4 +17,4 @@
 
 hosts: [localhost]
 port: 8182
-serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.KryoMessageSerializerV1d0}
\ No newline at end of file
+serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-console/conf/remote.yaml
----------------------------------------------------------------------
diff --git a/gremlin-console/conf/remote.yaml b/gremlin-console/conf/remote.yaml
index 5e9ea87..7b23779 100644
--- a/gremlin-console/conf/remote.yaml
+++ b/gremlin-console/conf/remote.yaml
@@ -17,4 +17,4 @@
 
 hosts: [localhost]
 port: 8182
-serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.KryoMessageSerializerV1d0, config: { serializeResultToString: true }}
\ No newline at end of file
+serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/gremlin-server-integration.yaml b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/gremlin-server-integration.yaml
index 7bb082e..124408f 100644
--- a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/gremlin-server-integration.yaml
+++ b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/gremlin-server-integration.yaml
@@ -34,8 +34,8 @@ scriptEngines: {
       imports: [java.lang.Math],
       staticImports: [java.lang.Math.PI]}}
 serializers:
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.KryoMessageSerializerV1d0, config: { custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderKryoSerializer]}}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.KryoMessageSerializerV1d0, config: { serializeResultToString: true}}
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.JsonMessageSerializerGremlinV1d0 }
   - { className: org.apache.tinkerpop.gremlin.driver.ser.JsonMessageSerializerV1d0 }
 processors:

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/remote.yaml
----------------------------------------------------------------------
diff --git a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/remote.yaml b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/remote.yaml
index 5e9ea87..7b23779 100644
--- a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/remote.yaml
+++ b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/remote.yaml
@@ -17,4 +17,4 @@
 
 hosts: [localhost]
 port: 8182
-serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.KryoMessageSerializerV1d0, config: { serializeResultToString: true }}
\ No newline at end of file
+serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/DependantMutableMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/DependantMutableMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/DependantMutableMetrics.java
index 42eb270..7bb5c4d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/DependantMutableMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/DependantMutableMetrics.java
@@ -29,7 +29,7 @@ public class DependantMutableMetrics extends MutableMetrics {
     private DependantMutableMetrics upStreamMetrics;
 
     private DependantMutableMetrics() {
-        // necessary for kryo serialization
+        // necessary for gryo serialization
         super();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/MutableMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/MutableMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/MutableMetrics.java
index 5d20540..d84ed40 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/MutableMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/metric/MutableMetrics.java
@@ -33,7 +33,7 @@ public class MutableMetrics extends ImmutableMetrics implements Cloneable {
     private long tempTime = -1l;
 
     protected MutableMetrics() {
-        // necessary for kryo serialization
+        // necessary for gryo serialization
     }
 
     public MutableMetrics(final String id, final String name) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
index 0d516ee..6ede86f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
@@ -32,9 +32,9 @@ import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLWriter;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
-import org.apache.tinkerpop.gremlin.structure.io.kryo.KryoMapper;
-import org.apache.tinkerpop.gremlin.structure.io.kryo.KryoReader;
-import org.apache.tinkerpop.gremlin.structure.io.kryo.KryoWriter;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter;
 import org.apache.tinkerpop.gremlin.structure.strategy.GraphStrategy;
 import org.apache.tinkerpop.gremlin.structure.strategy.SequenceStrategy;
 import org.apache.tinkerpop.gremlin.structure.strategy.StrategyGraph;
@@ -279,53 +279,53 @@ public interface Graph extends AutoCloseable {
      */
     public interface Io {
         /**
-         * Creates a {@link org.apache.tinkerpop.gremlin.structure.io.GraphReader} builder for Kryo serializations. This
-         * method calls the {@link Io#kryoMapper} method to supply to
-         * {@link org.apache.tinkerpop.gremlin.structure.io.kryo.KryoReader.Builder#mapper} which means that implementers
-         * should usually just override {@link Io#kryoMapper} to append in their mapper classes.
+         * Creates a {@link org.apache.tinkerpop.gremlin.structure.io.GraphReader} builder for Gryo serializations. This
+         * method calls the {@link Io#gryoMapper} method to supply to
+         * {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader.Builder#mapper} which means that implementers
+         * should usually just override {@link Io#gryoMapper} to append in their mapper classes.
          */
-        public default KryoReader.Builder kryoReader() {
-            return KryoReader.build().mapper(kryoMapper().create());
+        public default GryoReader.Builder gryoReader() {
+            return GryoReader.build().mapper(gryoMapper().create());
         }
 
         /**
-         * Creates a {@link org.apache.tinkerpop.gremlin.structure.io.GraphWriter} builder for Kryo serializations. This
-         * method calls the {@link Io#kryoMapper} method to supply to
-         * {@link org.apache.tinkerpop.gremlin.structure.io.kryo.KryoWriter.Builder#mapper} which means that implementers
-         * should usually just override {@link Io#kryoMapper} to append in their mapper classes.
+         * Creates a {@link org.apache.tinkerpop.gremlin.structure.io.GraphWriter} builder for Gryo serializations. This
+         * method calls the {@link Io#gryoMapper} method to supply to
+         * {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter.Builder#mapper} which means that implementers
+         * should usually just override {@link Io#gryoMapper} to append in their mapper classes.
          */
-        public default KryoWriter.Builder kryoWriter() {
-            return KryoWriter.build().mapper(kryoMapper().create());
+        public default GryoWriter.Builder gryoWriter() {
+            return GryoWriter.build().mapper(gryoMapper().create());
         }
 
         /**
-         * Write a kryo file using the default configuration of the {@link KryoWriter}.
+         * Write a gryo file using the default configuration of the {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter}.
          */
-        public void writeKryo(final String file) throws IOException;
+        public void writeGryo(final String file) throws IOException;
 
         /**
-         * Read a kryo file using the default configuration of the {@link KryoReader}.
+         * Read a gryo file using the default configuration of the {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader}.
          */
-        public void readKryo(final String file) throws IOException;
+        public void readGryo(final String file) throws IOException;
 
         /**
-         * By default, this method creates an instance of the most current version of {@link org.apache.tinkerpop.gremlin.structure.io.kryo.KryoMapper} which is
+         * By default, this method creates an instance of the most current version of {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper} which is
          * used to serialize data to and from the graph.   Implementers with mapper classes (e.g. a non-primitive
          * class returned from {@link Element#id}) should override this method with those classes automatically
-         * registered to the returned {@link org.apache.tinkerpop.gremlin.structure.io.kryo.KryoMapper}.
+         * registered to the returned {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper}.
          * <br/>
          * Implementers should respect versions.  Once a class is registered, the order of its registration should be
          * maintained. Note that registering such classes will reduce the portability of the graph data as data
-         * written with {@link org.apache.tinkerpop.gremlin.structure.io.kryo.KryoMapper} will not be readable without this serializer configuration.  It is
+         * written with {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper} will not be readable without this serializer configuration.  It is
          * considered good practice to make serialization classes generally available so that users may
-         * register these classes themselves if necessary when building up a mapper {@link org.apache.tinkerpop.gremlin.structure.io.kryo.KryoMapper}
+         * register these classes themselves if necessary when building up a mapper {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper}
          * instance.
          * <br/>
          * Note that this method is meant to return current versions for serialization operations.  Users wishing
          * to use an "older" version should construct this instance as well as their readers and writers manually.
          */
-        public default KryoMapper.Builder kryoMapper() {
-            return KryoMapper.build();
+        public default GryoMapper.Builder gryoMapper() {
+            return GryoMapper.build();
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/DefaultIo.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/DefaultIo.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/DefaultIo.java
index cba2e97..7ef6434 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/DefaultIo.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/DefaultIo.java
@@ -39,16 +39,16 @@ public class DefaultIo implements Graph.Io {
     }
 
     @Override
-    public void writeKryo(final String file) throws IOException {
+    public void writeGryo(final String file) throws IOException {
         try (final OutputStream out = new FileOutputStream(file)) {
-            kryoWriter().create().writeGraph(out, g);
+            gryoWriter().create().writeGraph(out, g);
         }
     }
 
     @Override
-    public void readKryo(final String file) throws IOException {
+    public void readGryo(final String file) throws IOException {
         try (final InputStream in = new FileInputStream(file)) {
-            kryoReader().create().readGraph(in, g);
+            gryoReader().create().readGraph(in, g);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/GraphMigrator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/GraphMigrator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/GraphMigrator.java
index e7a7c88..618b519 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/GraphMigrator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/GraphMigrator.java
@@ -19,33 +19,33 @@
 package org.apache.tinkerpop.gremlin.structure.io;
 
 import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.io.kryo.KryoReader;
-import org.apache.tinkerpop.gremlin.structure.io.kryo.KryoWriter;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter;
 
 import java.io.IOException;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
 
 /**
- * {@link GraphMigrator} takes the data in one graph and pipes it to another graph.  Uses the {@link KryoReader}
- * and {@link KryoWriter} by default.
+ * {@link GraphMigrator} takes the data in one graph and pipes it to another graph.  Uses the {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader}
+ * and {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter} by default.
  *
  * @author Alex Averbuch (alex.averbuch@gmail.com)
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public final class GraphMigrator {
 
-    private static final KryoReader defaultKryoReader = KryoReader.build().create();
-    private static final KryoWriter defaultKryoWriter = KryoWriter.build().create();
+    private static final GryoReader DEFAULT_GRYO_READER = GryoReader.build().create();
+    private static final GryoWriter DEFAULT_GRYO_WRITER = GryoWriter.build().create();
 
     /**
-     * Use Kryo to pipe the data from one graph to another graph.  Uses all default settings for reader/writers.
-     * Refer to {@link KryoReader} and {@link KryoWriter} for those settings.  To use features like incremental
+     * Use Gryo to pipe the data from one graph to another graph.  Uses all default settings for reader/writers.
+     * Refer to {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader} and {@link org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter} for those settings.  To use features like incremental
      * loading, construct the reader/writers manually and utilize
      * {@link #migrateGraph(org.apache.tinkerpop.gremlin.structure.Graph, org.apache.tinkerpop.gremlin.structure.Graph, GraphReader, GraphWriter)}
      */
     public static void migrateGraph(final Graph fromGraph, final Graph toGraph) throws IOException {
-        migrateGraph(fromGraph, toGraph, defaultKryoReader, defaultKryoWriter);
+        migrateGraph(fromGraph, toGraph, DEFAULT_GRYO_READER, DEFAULT_GRYO_WRITER);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EdgeTerminator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EdgeTerminator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EdgeTerminator.java
new file mode 100644
index 0000000..12848cf
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EdgeTerminator.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.gryo;
+
+/**
+ * Represents the end of an edge list in a serialization stream.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class EdgeTerminator {
+    public static final EdgeTerminator INSTANCE = new EdgeTerminator();
+    private final boolean terminal;
+
+    private EdgeTerminator() {
+        this.terminal = true;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        final EdgeTerminator that = (EdgeTerminator) o;
+
+        return terminal == that.terminal;
+    }
+
+    @Override
+    public int hashCode() {
+        return (terminal ? 1 : 0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EntrySerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EntrySerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EntrySerializer.java
new file mode 100644
index 0000000..c9715bd
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/EntrySerializer.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.gryo;
+
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.Serializer;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+
+import java.util.AbstractMap;
+import java.util.Map;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class EntrySerializer extends Serializer<Map.Entry> {
+    @Override
+    public void write(final Kryo kryo, final Output output, final Map.Entry entry) {
+        kryo.writeClassAndObject(output, entry.getKey());
+        kryo.writeClassAndObject(output, entry.getValue());
+    }
+
+    @Override
+    public Map.Entry read(final Kryo kryo, final Input input, final Class<Map.Entry> entryClass) {
+        return new AbstractMap.SimpleEntry(kryo.readClassAndObject(input), kryo.readClassAndObject(input));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GraphSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GraphSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GraphSerializer.java
new file mode 100644
index 0000000..aba9f97
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GraphSerializer.java
@@ -0,0 +1,164 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.gryo;
+
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.Serializer;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+import org.apache.tinkerpop.gremlin.process.Path;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+
+/**
+ * Class used to serialize graph-based objects such as vertices, edges, properties, and paths.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+class GraphSerializer {
+    /**
+     * Serializes any {@link Edge} implementation encountered to a {@link DetachedEdge}.
+     *
+     * @author Stephen Mallette (http://stephen.genoprime.com)
+     */
+    static class EdgeSerializer extends Serializer<Edge> {
+        @Override
+        public void write(final Kryo kryo, final Output output, final Edge edge) {
+            kryo.writeClassAndObject(output, DetachedFactory.detach(edge, true));
+        }
+
+        @Override
+        public Edge read(final Kryo kryo, final Input input, final Class<Edge> edgeClass) {
+            final Object o = kryo.readClassAndObject(input);
+            return (Edge) o;
+        }
+    }
+
+    /**
+     * Serializes any {@link Vertex} implementation encountered to an {@link DetachedVertex}.
+     *
+     * @author Stephen Mallette (http://stephen.genoprime.com)
+     */
+    static class VertexSerializer extends Serializer<Vertex> {
+        public VertexSerializer() {
+        }
+
+        @Override
+        public void write(final Kryo kryo, final Output output, final Vertex vertex) {
+            kryo.writeClassAndObject(output, DetachedFactory.detach(vertex, true));
+        }
+
+        @Override
+        public Vertex read(final Kryo kryo, final Input input, final Class<Vertex> vertexClass) {
+            return (Vertex) kryo.readClassAndObject(input);
+        }
+    }
+
+    /**
+     * Serializes any {@link Property} implementation encountered to an {@link DetachedProperty}.
+     *
+     * @author Stephen Mallette (http://stephen.genoprime.com)
+     */
+    static class PropertySerializer extends Serializer<Property> {
+        public PropertySerializer() {
+        }
+
+        @Override
+        public void write(final Kryo kryo, final Output output, final Property property) {
+            kryo.writeClassAndObject(output, DetachedFactory.detach(property));
+        }
+
+        @Override
+        public Property read(final Kryo kryo, final Input input, final Class<Property> propertyClass) {
+            return (Property) kryo.readClassAndObject(input);
+        }
+    }
+
+    /**
+     * Serializes any {@link VertexProperty} implementation encountered to an {@link DetachedVertexProperty}.
+     *
+     * @author Stephen Mallette (http://stephen.genoprime.com)
+     */
+    static class VertexPropertySerializer extends Serializer<VertexProperty> {
+        public VertexPropertySerializer() {
+        }
+
+        @Override
+        public void write(final Kryo kryo, final Output output, final VertexProperty vertexProperty) {
+            kryo.writeClassAndObject(output, DetachedFactory.detach(vertexProperty, true));
+        }
+
+        @Override
+        public VertexProperty read(final Kryo kryo, final Input input, final Class<VertexProperty> vertexPropertyClass) {
+            return (VertexProperty) kryo.readClassAndObject(input);
+        }
+    }
+
+    /**
+     * Serializes any {@link Path} implementation encountered to an {@link DetachedPath}.
+     *
+     * @author Marko A. Rodriguez (http://markorodriguez.com)
+     */
+    static class PathSerializer extends Serializer<Path> {
+        public PathSerializer() {
+        }
+
+        @Override
+        public void write(final Kryo kryo, final Output output, final Path path) {
+            kryo.writeClassAndObject(output, DetachedFactory.detach(path, false));
+        }
+
+        @Override
+        public Path read(final Kryo kryo, final Input input, final Class<Path> pathClass) {
+            return (Path) kryo.readClassAndObject(input);
+        }
+
+    }
+
+    /**
+     * Serializes any {@link Traverser} implementation encountered via pre-processing with {@link Traverser.Admin#detach()}.
+     *
+     * @author Marko A. Rodriguez (http://markorodriguez.com)
+     */
+    /*static class TraverserSerializer extends Serializer<Traverser.Admin> {
+        public TraverserSerializer() {
+        }
+
+        @Override
+        public void write(final Kryo kryo, final Output output, final Traverser.Admin traverser) {
+            gryo.writeClassAndObject(output, traverser.asAdmin().detach());
+        }
+
+        @Override
+        public Traverser.Admin read(final Kryo kryo, final Input input, final Class<Traverser.Admin> traverser) {
+            return (Traverser.Admin) gryo.readClassAndObject(input);
+        }
+
+    }*/
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GremlinClassResolver.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GremlinClassResolver.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GremlinClassResolver.java
new file mode 100644
index 0000000..449e8b9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GremlinClassResolver.java
@@ -0,0 +1,206 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.gryo;
+
+import com.esotericsoftware.kryo.ClassResolver;
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.KryoException;
+import com.esotericsoftware.kryo.Registration;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.util.IdentityObjectIntMap;
+import com.esotericsoftware.kryo.util.IntMap;
+import com.esotericsoftware.kryo.util.ObjectMap;
+import org.apache.tinkerpop.gremlin.process.Path;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+
+import static com.esotericsoftware.kryo.util.Util.getWrapperClass;
+
+/**
+ * This mapper implementation of the {@code ClassResolver} helps ensure that all Vertex and Edge concrete classes
+ * get properly serialized and deserialized by stripping them of their concrete class name so that they are treated
+ * generically.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+class GremlinClassResolver implements ClassResolver {
+    static public final byte NAME = -1;
+
+    protected Kryo kryo;
+
+    protected final IntMap<Registration> idToRegistration = new IntMap<>();
+    protected final ObjectMap<Class, Registration> classToRegistration = new ObjectMap<>();
+
+    protected IdentityObjectIntMap<Class> classToNameId;
+    protected IntMap<Class> nameIdToClass;
+    protected ObjectMap<String, Class> nameToClass;
+    protected int nextNameId;
+
+    private int memoizedClassId = -1;
+    private Registration memoizedClassIdValue;
+    private Class memoizedClass;
+    private Registration memoizedClassValue;
+
+    @Override
+    public void setKryo(Kryo kryo) {
+        this.kryo = kryo;
+    }
+
+    @Override
+    public Registration register(final Registration registration) {
+        if (null == registration) throw new IllegalArgumentException("Registration cannot be null.");
+        if (registration.getId() != NAME) idToRegistration.put(registration.getId(), registration);
+
+        classToRegistration.put(registration.getType(), registration);
+        if (registration.getType().isPrimitive())
+            classToRegistration.put(getWrapperClass(registration.getType()), registration);
+        return registration;
+    }
+
+    @Override
+    public Registration registerImplicit(final Class type) {
+        return register(new Registration(type, kryo.getDefaultSerializer(type), NAME));
+    }
+
+    @Override
+    public Registration getRegistration(final Class clazz) {
+        // force all instances of Vertex, Edge, VertexProperty, etc. to their respective interface
+        final Class type;
+        if (!DetachedVertex.class.isAssignableFrom(clazz) && Vertex.class.isAssignableFrom(clazz))
+            type = Vertex.class;
+        else if (!DetachedEdge.class.isAssignableFrom(clazz) && Edge.class.isAssignableFrom(clazz))
+            type = Edge.class;
+        else if (!DetachedVertexProperty.class.isAssignableFrom(clazz) && VertexProperty.class.isAssignableFrom(clazz))
+            type = VertexProperty.class;
+        else if (!DetachedProperty.class.isAssignableFrom(clazz) && !DetachedVertexProperty.class.isAssignableFrom(clazz) && Property.class.isAssignableFrom(clazz))
+            type = Property.class;
+        else if (!DetachedPath.class.isAssignableFrom(clazz) && Path.class.isAssignableFrom(clazz))
+            type = Path.class;
+        else
+            type = clazz;
+
+        if (type == memoizedClass) return memoizedClassValue;
+        final Registration registration = classToRegistration.get(type);
+        if (registration != null) {
+            memoizedClass = type;
+            memoizedClassValue = registration;
+        }
+
+        return registration;
+    }
+
+    @Override
+    public Registration getRegistration(final int classID) {
+        return idToRegistration.get(classID);
+    }
+
+    @Override
+    public Registration writeClass(final Output output, final Class type) {
+        if (null == type) {
+            output.writeVarInt(Kryo.NULL, true);
+            return null;
+        }
+
+        final Registration registration = kryo.getRegistration(type);
+        if (registration.getId() == NAME)
+            writeName(output, type);
+        else
+            output.writeVarInt(registration.getId() + 2, true);
+
+        return registration;
+    }
+
+    protected void writeName(final Output output, final Class type) {
+        output.writeVarInt(NAME + 2, true);
+        if (classToNameId != null) {
+            final int nameId = classToNameId.get(type, -1);
+            if (nameId != -1) {
+                output.writeVarInt(nameId, true);
+                return;
+            }
+        }
+        // Only write the class name the first time encountered in object graph.
+        final int nameId = nextNameId++;
+        if (classToNameId == null) classToNameId = new IdentityObjectIntMap<>();
+        classToNameId.put(type, nameId);
+        output.writeVarInt(nameId, true);
+        output.writeString(type.getName());
+    }
+
+    @Override
+    public Registration readClass(final Input input) {
+        final int classID = input.readVarInt(true);
+        switch (classID) {
+            case Kryo.NULL:
+                return null;
+            case NAME + 2: // Offset for NAME and NULL.
+                return readName(input);
+        }
+
+        if (classID == memoizedClassId) return memoizedClassIdValue;
+        final Registration registration = idToRegistration.get(classID - 2);
+        if (registration == null) throw new KryoException("Encountered unregistered class ID: " + (classID - 2));
+        memoizedClassId = classID;
+        memoizedClassIdValue = registration;
+        return registration;
+    }
+
+    protected Registration readName(final Input input) {
+        final int nameId = input.readVarInt(true);
+        if (nameIdToClass == null) nameIdToClass = new IntMap<>();
+        Class type = nameIdToClass.get(nameId);
+        if (type == null) {
+            // Only read the class name the first time encountered in object graph.
+            final String className = input.readString();
+            type = getTypeByName(className);
+            if (type == null) {
+                try {
+                    type = Class.forName(className, false, kryo.getClassLoader());
+                } catch (ClassNotFoundException ex) {
+                    throw new KryoException("Unable to find class: " + className, ex);
+                }
+                if (nameToClass == null) nameToClass = new ObjectMap<>();
+                nameToClass.put(className, type);
+            }
+            nameIdToClass.put(nameId, type);
+        }
+        return kryo.getRegistration(type);
+    }
+
+    protected Class<?> getTypeByName(final String className) {
+        return nameToClass != null ? nameToClass.get(className) : null;
+    }
+
+    @Override
+    public void reset() {
+        if (!kryo.isRegistrationRequired()) {
+            if (classToNameId != null) classToNameId.clear();
+            if (nameIdToClass != null) nameIdToClass.clear();
+            nextNameId = 0;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/929a2889/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
new file mode 100644
index 0000000..511891e
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
@@ -0,0 +1,406 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.gryo;
+
+import com.esotericsoftware.kryo.Kryo;
+import com.esotericsoftware.kryo.KryoSerializable;
+import com.esotericsoftware.kryo.Serializer;
+import com.esotericsoftware.kryo.io.Input;
+import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.util.DefaultStreamFactory;
+import com.esotericsoftware.kryo.util.MapReferenceResolver;
+import org.apache.tinkerpop.gremlin.process.Path;
+import org.apache.tinkerpop.gremlin.process.T;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
+import org.apache.tinkerpop.gremlin.process.graph.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traverser.B_O_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traverser.B_O_P_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traverser.B_O_Traverser;
+import org.apache.tinkerpop.gremlin.process.traverser.O_Traverser;
+import org.apache.tinkerpop.gremlin.process.util.BulkSet;
+import org.apache.tinkerpop.gremlin.process.util.metric.DependantMutableMetrics;
+import org.apache.tinkerpop.gremlin.process.util.metric.MutableMetrics;
+import org.apache.tinkerpop.gremlin.process.util.metric.StandardTraversalMetrics;
+import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.structure.Contains;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.Mapper;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.javatuples.Triplet;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.URI;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.BiPredicate;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+/**
+ * A {@link Mapper} implementation for Kryo.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class GryoMapper implements Mapper<Kryo> {
+    static final byte[] GIO = "gio".getBytes();
+    private final List<Triplet<Class, Function<Kryo, Serializer>, Integer>> serializationList;
+    private final HeaderWriter headerWriter;
+    private final HeaderReader headerReader;
+    private final byte[] versionedHeader;
+
+    public static final byte DEFAULT_EXTENDED_VERSION = Byte.MIN_VALUE;
+
+    private GryoMapper(final List<Triplet<Class, Function<Kryo, Serializer>, Integer>> serializationList,
+                       final HeaderWriter headerWriter,
+                       final HeaderReader headerReader) {
+        this.serializationList = serializationList;
+        this.headerWriter = headerWriter;
+        this.headerReader = headerReader;
+
+        final Output out = new Output(32);
+        try {
+            this.headerWriter.write(createMapper(), out);
+        } catch (IOException ioe) {
+            throw new RuntimeException(ioe);
+        }
+        this.versionedHeader = out.toBytes();
+    }
+
+    @Override
+    public Kryo createMapper() {
+        final Kryo kryo = new Kryo(new GremlinClassResolver(), new MapReferenceResolver(), new DefaultStreamFactory());
+        kryo.addDefaultSerializer(Map.Entry.class, new EntrySerializer());
+        kryo.setRegistrationRequired(true);
+        serializationList.forEach(p -> {
+            final Function<Kryo, Serializer> serializer = p.getValue1();
+            if (null == serializer)
+                kryo.register(p.getValue0(), kryo.getDefaultSerializer(p.getValue0()), p.getValue2());
+            else
+                kryo.register(p.getValue0(), serializer.apply(kryo), p.getValue2());
+        });
+        return kryo;
+    }
+
+    public HeaderWriter getHeaderWriter() {
+        return headerWriter;
+    }
+
+    public HeaderReader getHeaderReader() {
+        return headerReader;
+    }
+
+    /**
+     * Gets the header for a Gremlin Kryo file, which is based on the version of Gremlin Kryo that is constructed
+     * via the builder classes.
+     */
+    public byte[] getVersionedHeader() {
+        return versionedHeader;
+    }
+
+    @FunctionalInterface
+    public interface HeaderReader {
+        public void read(final Kryo kryo, final Input input) throws IOException;
+    }
+
+    @FunctionalInterface
+    public interface HeaderWriter {
+        public void write(final Kryo kryo, final Output output) throws IOException;
+    }
+
+    /**
+     * Use a specific version of Gryo.
+     */
+    public static Builder build(final Version version) {
+        return version.getBuilder();
+    }
+
+    /**
+     * Use the most current version of Gryo.
+     */
+    public static Builder build() {
+        return Version.V_1_0_0.getBuilder();
+    }
+
+    public static interface Builder {
+        /**
+         * Add mapper classes to serializes with gryo using standard serialization.
+         */
+        public Builder addCustom(final Class... custom);
+
+        /**
+         * Add mapper class to serializes with mapper serialization.
+         */
+        public Builder addCustom(final Class clazz, final Serializer serializer);
+
+        /**
+         * Add mapper class to serializes with mapper serialization as returned from a {@link Function}.
+         */
+        public Builder addCustom(final Class clazz, final Function<Kryo, Serializer> serializer);
+
+        /**
+         * If using mapper classes it might be useful to tag the version stamped to the serialization with a mapper
+         * value, such that Gryo serialization at 1.0.0 would have a fourth byte for an extended version.  The user
+         * supplied fourth byte can then be used to ensure the right deserializer is used to read the data. If this
+         * value is not supplied then it is written as {@link Byte#MIN_VALUE}. The value supplied here should be greater
+         * than or equal to zero.
+         */
+        public Builder extendedVersion(final byte extendedVersion);
+
+        /**
+         * By default the {@link #extendedVersion(byte)} is checked against what is read from an input source and if
+         * those values are equal the version being read is considered "compliant".  To alter this behavior, supply a
+         * mapper compliance {@link Predicate} to evaluate the value read from the input source (i.e. first argument)
+         * and the value marked in the {@code GryoMapper} instance {i.e. second argument}.  Supplying this function is
+         * useful when versions require backward compatibility or other more complex checks.  This function is only used
+         * if the {@link #extendedVersion(byte)} is set to something other than its default.
+         */
+        public Builder compliant(final BiPredicate<Byte, Byte> compliant);
+
+        public GryoMapper create();
+    }
+
+    public enum Version {
+        V_1_0_0(BuilderV1d0.class);
+
+        private final Class<? extends Builder> builder;
+
+        private Version(final Class<? extends Builder> builder) {
+            this.builder = builder;
+        }
+
+        Builder getBuilder() {
+            try {
+                return builder.newInstance();
+            } catch (Exception x) {
+                throw new RuntimeException("Gryo Builder implementation cannot be instantiated", x);
+            }
+        }
+    }
+
+    public static class BuilderV1d0 implements Builder {
+
+        /**
+         * Map with one entry that is used so that it is possible to get the class of LinkedHashMap.Entry.
+         */
+        private static final LinkedHashMap m = new LinkedHashMap() {{
+            put("junk", "dummy");
+        }};
+
+        private static final Class LINKED_HASH_MAP_ENTRY_CLASS = m.entrySet().iterator().next().getClass();
+
+        /**
+         * Note that the following are pre-registered boolean, Boolean, byte, Byte, char, Character, double, Double,
+         * int, Integer, float, Float, long, Long, short, Short, String, void.
+         */
+        private final List<Triplet<Class, Function<Kryo, Serializer>, Integer>> serializationList = new ArrayList<Triplet<Class, Function<Kryo, Serializer>, Integer>>() {{
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(byte[].class, null, 25));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(char[].class, null, 26));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(short[].class, null, 27));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(int[].class, null, 28));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(long[].class, null, 29));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(float[].class, null, 30));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(double[].class, null, 31));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(String[].class, null, 32));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Object[].class, null, 33));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(ArrayList.class, null, 10));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(BigInteger.class, null, 34));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(BigDecimal.class, null, 35));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Calendar.class, null, 39));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Class.class, null, 41));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Collection.class, null, 37));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Collections.EMPTY_LIST.getClass(), null, 51));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Collections.EMPTY_MAP.getClass(), null, 52));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Collections.EMPTY_SET.getClass(), null, 53));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Collections.singleton(null).getClass(), null, 54));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Collections.singletonList(null).getClass(), null, 24));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Collections.singletonMap(null, null).getClass(), null, 23));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Contains.class, null, 49));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Currency.class, null, 40));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Date.class, null, 38));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Direction.class, null, 12));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(DetachedEdge.class, null, 21));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(DetachedVertexProperty.class, null, 20));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(DetachedProperty.class, null, 18));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(DetachedVertex.class, null, 19));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(DetachedPath.class, null, 60));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(EdgeTerminator.class, null, 14));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(EnumSet.class, null, 46));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(HashMap.class, null, 11));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(HashMap.Entry.class, null, 16));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(KryoSerializable.class, null, 36));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LinkedHashMap.class, null, 47));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LinkedHashSet.class, null, 71));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(LINKED_HASH_MAP_ENTRY_CLASS, null, 15));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Locale.class, null, 22));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(StringBuffer.class, null, 43));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(StringBuilder.class, null, 44));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(T.class, null, 48));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TimeZone.class, null, 42));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TreeMap.class, null, 45));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TreeSet.class, null, 50));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(UUID.class, kryo -> new UUIDSerializer(), 17));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(URI.class, kryo -> new URISerializer(), 72));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(VertexTerminator.class, null, 13));
+
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Edge.class, kryo -> new GraphSerializer.EdgeSerializer(), 65));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Vertex.class, kryo -> new GraphSerializer.VertexSerializer(), 66));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Property.class, kryo -> new GraphSerializer.PropertySerializer(), 67));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(VertexProperty.class, kryo -> new GraphSerializer.VertexPropertySerializer(), 68));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Path.class, kryo -> new GraphSerializer.PathSerializer(), 59));
+            // HACK!
+            //add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Traverser.Admin.class, gryo -> new GraphSerializer.TraverserSerializer(), 55));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_Traverser.class, null, 75));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(O_Traverser.class, null, 76));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_P_PA_S_SE_SL_Traverser.class, null, 77));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_PA_S_SE_SL_Traverser.class, null, 78));
+
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TraverserSet.class, null, 58));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Tree.class, null, 61));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(HashSet.class, null, 62));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(BulkSet.class, null, 64));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MutableMetrics.class, null, 69));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(StandardTraversalMetrics.class, null, 70));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MapMemory.class, null, 73));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MapReduce.NullObject.class, null, 74));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(AtomicLong.class, null, 79));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(DependantMutableMetrics.class, null, 80));  // ***LAST ID**
+        }};
+
+        private static final byte major = 1;
+        private static final byte minor = 0;
+        private static final byte patchLevel = 0;
+
+        private byte extendedVersion = DEFAULT_EXTENDED_VERSION;
+        private BiPredicate<Byte, Byte> compliant = (readExt, serExt) -> readExt.equals(serExt);
+
+        /**
+         * Starts numbering classes for Gryo serialization at 65536 to leave room for future usage by TinkerPop.
+         */
+        private final AtomicInteger currentSerializationId = new AtomicInteger(65536);
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public Builder addCustom(final Class... custom) {
+            if (custom != null && custom.length > 0)
+                serializationList.addAll(Arrays.asList(custom).stream()
+                        .map(c -> Triplet.<Class, Function<Kryo, Serializer>, Integer>with(c, null, currentSerializationId.getAndIncrement()))
+                        .collect(Collectors.<Triplet<Class, Function<Kryo, Serializer>, Integer>>toList()));
+            return this;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public Builder addCustom(final Class clazz, final Serializer serializer) {
+            serializationList.add(Triplet.with(clazz, kryo -> serializer, currentSerializationId.getAndIncrement()));
+            return this;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public Builder addCustom(final Class clazz, final Function<Kryo, Serializer> serializer) {
+            serializationList.add(Triplet.with(clazz, serializer, currentSerializationId.getAndIncrement()));
+            return this;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public Builder extendedVersion(final byte extendedVersion) {
+            if (extendedVersion > DEFAULT_EXTENDED_VERSION && extendedVersion < 0)
+                throw new IllegalArgumentException("The extendedVersion must be greater than zero");
+
+            this.extendedVersion = extendedVersion;
+            return this;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public Builder compliant(final BiPredicate<Byte, Byte> compliant) {
+            if (null == compliant)
+                throw new IllegalArgumentException("compliant");
+
+            this.compliant = compliant;
+            return this;
+        }
+
+        @Override
+        public GryoMapper create() {
+            return new GryoMapper(serializationList, this::writeHeader, this::readHeader);
+        }
+
+        private void writeHeader(final Kryo kryo, final Output output) throws IOException {
+            // 32 byte header total
+            output.writeBytes(GIO);
+
+            // some space for later
+            output.writeBytes(new byte[25]);
+
+            // version x.y.z
+            output.writeByte(major);
+            output.writeByte(minor);
+            output.writeByte(patchLevel);
+            output.writeByte(extendedVersion);
+        }
+
+        private void readHeader(final Kryo kryo, final Input input) throws IOException {
+            if (!Arrays.equals(GIO, input.readBytes(3)))
+                throw new IOException("Invalid format - first three bytes of header do not match expected value");
+
+            // skip the next 25 bytes in v1
+            input.readBytes(25);
+
+            // final three bytes of header are the version which should be 1.0.0
+            final byte[] version = input.readBytes(3);
+            final byte extension = input.readByte();
+
+            // direct match on version for now
+            if (version[0] != major || version[1] != minor || version[2] != patchLevel)
+                throw new IOException(String.format(
+                        "The version [%s.%s.%s] in the stream cannot be understood by this reader",
+                        version[0], version[1], version[2]));
+
+            if (extendedVersion >= 0 && !compliant.test(extension, extendedVersion))
+                throw new IOException(String.format(
+                        "The extension [%s] in the input source is not compliant with this configuration of Gryo - [%s]",
+                        extension, extendedVersion));
+        }
+    }
+}