You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by va...@apache.org on 2024/06/18 21:05:04 UTC

(tinkerpop) branch valentyn/bytecode-removal-server created (now bfd6c881f8)

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

valentyn pushed a change to branch valentyn/bytecode-removal-server
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


      at bfd6c881f8 implementation

This branch includes the following new commits:

     new bfd6c881f8 implementation

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(tinkerpop) 01/01: implementation

Posted by va...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

valentyn pushed a commit to branch valentyn/bytecode-removal-server
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit bfd6c881f87b146ccc89c916ef7935ee62abdb87
Author: Valentyn Kahamlyk <Va...@improving.com>
AuthorDate: Tue Jun 18 14:04:55 2024 -0700

    implementation
---
 docs/src/reference/gremlin-applications.asciidoc   |   1 -
 .../tinkerpop/gremlin/jsr223/CoreImports.java      |  15 +-
 .../gremlin/jsr223/GremlinLangScriptEngine.java    |  24 -
 .../gremlin/jsr223/GremlinScriptEngine.java        |  27 -
 .../tinkerpop/gremlin/jsr223/JavaTranslator.java   | 372 -------------
 .../gremlin/jsr223/TranslatorCustomizer.java       |  38 --
 .../process/remote/EmbeddedRemoteConnection.java   |  13 +-
 .../gremlin/process/traversal/Failure.java         |   9 +-
 .../gremlin/process/traversal/GremlinLang.java     | 208 +------
 .../gremlin/process/traversal/Translator.java      | 352 ------------
 .../traversal/dsl/graph/GraphTraversal.java        |   5 +-
 .../lambda/CardinalityValueTraversal.java          |   5 -
 .../translator/AnonymizingTypeTranslator.java      | 175 ------
 .../traversal/translator/DotNetTranslator.java     | 601 ---------------------
 .../traversal/translator/GolangTranslator.java     | 391 --------------
 .../traversal/translator/GroovyTranslator.java     | 471 ----------------
 .../traversal/translator/JavascriptTranslator.java | 407 --------------
 .../traversal/translator/PythonTranslator.java     | 492 -----------------
 .../process/traversal/util/BytecodeHelper.java     | 416 --------------
 .../io/binary/TypeSerializerRegistry.java          |   5 -
 .../io/binary/types/BindingSerializer.java         |  49 --
 .../io/binary/types/ByteCodeSerializer.java        |  90 ---
 .../structure/io/graphson/GraphSONModule.java      |  12 -
 .../io/graphson/TraversalSerializersV2.java        |  85 ---
 .../io/graphson/TraversalSerializersV3.java        |  85 ---
 .../structure/io/gryo/GryoSerializersV1.java       |  56 --
 .../structure/io/gryo/GryoSerializersV3.java       |  56 --
 .../gremlin/structure/io/gryo/GryoVersion.java     |  23 +-
 .../gremlin/structure/util/StringFactory.java      |   5 -
 .../jsr223/GremlinLangScriptEngineTest.java        |   7 -
 .../remote/EmbeddedRemoteConnectionTest.java       |  37 ++
 .../gremlin/process/traversal/BytecodeTest.java    | 207 -------
 .../gremlin/process/traversal/GremlinLangTest.java |  12 +-
 .../traversal/dsl/graph/GraphTraversalTest.java    | 118 ----
 .../decoration/ConnectiveStrategyTest.java         |   6 +-
 .../decoration/ElementIdStrategyTraverseTest.java  |   9 +-
 .../strategy/decoration/EventStrategyTest.java     |   7 +-
 .../strategy/decoration/PartitionStrategyTest.java |   8 +-
 .../strategy/decoration/SubgraphStrategyTest.java  |   9 +-
 .../decoration/VertexProgramStrategyTest.java      |   5 +-
 .../AdjacentToIncidentStrategyTest.java            |   5 +-
 .../ByModulatorOptimizationStrategyTest.java       |   5 +-
 .../strategy/optimization/CountStrategyTest.java   |   5 +-
 .../optimization/EarlyLimitStrategyTest.java       |   5 +-
 .../optimization/FilterRankingStrategyTest.java    |   5 +-
 .../optimization/IdentityRemovalStrategyTest.java  |   6 +-
 .../IncidentToAdjacentStrategyTest.java            |   5 +-
 .../optimization/InlineFilterStrategyTest.java     |   5 +-
 .../optimization/LazyBarrierStrategyTest.java      |   6 +-
 .../optimization/MatchPredicateStrategyTest.java   |   5 +-
 .../optimization/OrderLimitStrategyTest.java       |   5 +-
 .../optimization/PathProcessorStrategyTest.java    |   7 +-
 .../optimization/PathRetractionStrategyTest.java   |   6 +-
 .../optimization/ProductiveByStrategyTest.java     |   5 +-
 .../optimization/RepeatUnrollStrategyTest.java     |   5 +-
 .../ComputerVerificationStrategyTest.java          |   5 +-
 .../EdgeLabelVerificationStrategyTest.java         |  11 +-
 .../LambdaRestrictionStrategyTest.java             |   5 +-
 .../verification/ReadOnlyStrategyTest.java         |   5 +-
 .../ReservedKeysVerificationStrategyTest.java      |  10 +-
 .../StandardVerificationStrategyTest.java          |   7 +-
 .../translator/AnonymizingTypeTranslatorTest.java  | 136 -----
 .../traversal/translator/DotNetTranslatorTest.java | 352 ------------
 .../traversal/translator/GolangTranslatorTest.java | 142 -----
 .../traversal/translator/GroovyTranslatorTest.java | 374 -------------
 .../translator/JavascriptTranslatorTest.java       | 219 --------
 .../ParameterizedGroovyTranslatorTest.java         | 367 -------------
 .../traversal/translator/PythonTranslatorTest.java | 160 ------
 .../process/traversal/util/BytecodeHelperTest.java | 155 ------
 .../graphson/GraphSONMapperEmbeddedTypeTest.java   |   9 -
 .../apache/tinkerpop/gremlin/driver/Client.java    |  35 --
 .../tinkerpop/gremlin/util/PerformanceTest.java    | 252 ---------
 .../ast/VarAsBindingASTTransformation.groovy       |   4 +-
 .../gremlin/groovy/engine/GremlinExecutor.java     |  62 +--
 .../groovy/jsr223/GremlinGroovyScriptEngine.java   |  44 --
 .../jsr223/GremlinGroovyScriptEngineTest.java      | 123 +----
 .../groovy/jsr223/GroovyTranslatorProvider.java    |   5 +-
 .../ParameterizedGroovyTranslatorProvider.java     |   5 +-
 .../tinkerpop/gremlin/server/authz/Authorizer.java |   5 +
 .../handler/HttpBasicAuthorizationHandler.java     |  24 +-
 .../server/handler/HttpGremlinEndpointHandler.java |  54 +-
 .../gremlin/server/util/GremlinError.java          |  44 +-
 .../driver/remote/AbstractRemoteGraphProvider.java |   2 +-
 .../server/ClientWithOptionsIntegrateTest.java     |  12 -
 .../server/GremlinResultSetIntegrateTest.java      |  13 -
 .../server/GremlinServerHttpIntegrateTest.java     |  79 +--
 .../gremlin/server/authz/AllowListAuthorizer.java  |  14 +-
 .../gremlin/server/authz/AuthorizerTest.java       | 161 +-----
 .../tinkerpop/gremlin/features/TestFiles.java      |   1 -
 .../jsr223/GremlinEnabledScriptEngineTest.java     |  86 ---
 .../gremlin/jsr223/MockGremlinScriptEngine.java    |   5 -
 .../gremlin/process/ProcessComputerSuite.java      |   6 +-
 .../process/ProcessLimitedComputerSuite.java       |  64 ---
 .../process/ProcessLimitedStandardSuite.java       |   8 -
 .../gremlin/process/ProcessStandardSuite.java      |   4 -
 .../process/traversal/CoreTraversalTest.java       |   6 +-
 .../strategy/decoration/TranslationStrategy.java   | 152 ------
 .../decoration/TranslationStrategyProcessTest.java |  70 ---
 .../structure/io/script/script-input.groovy        |  47 --
 .../tinkerpop/jsr223/JavaTranslatorBenchmark.java  |  76 ---
 .../apache/tinkerpop/gremlin/util/TokensV4.java    |   4 -
 .../gremlin/util/message/RequestMessageV4.java     |  45 +-
 .../ser/AbstractGraphSONMessageSerializerV4.java   |   2 +-
 .../ser/binary/RequestMessageSerializerV4.java     |  17 +-
 .../io/AbstractTypedCompatibilityTest.java         |  13 -
 .../tinkerpop/gremlin/structure/io/Model.java      |   2 -
 .../gremlin/util/message/RequestMessageV4Test.java |  11 -
 .../gremlin/util/ser/AbstractRoundTripTest.java    |   1 -
 .../util/ser/binary/MessageSerializerV4Test.java   |   2 +-
 .../ser/binary/TypeSerializerFailureTests.java     |   4 -
 .../tinkergraph/structure/TinkerGraphPlayTest.java |   3 -
 ...tractTinkerGraphGraphSONTranslatorProvider.java |   5 +-
 .../structure/io/graphson/GraphSONTranslator.java  |  88 ---
 .../structure/io/gryo/GryoTranslator.java          |  68 ---
 .../io/gryo/TinkerGraphGryoTranslatorProvider.java |   5 +-
 115 files changed, 190 insertions(+), 8493 deletions(-)

diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 9a223cbcaf..d4a4e1d4d0 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -1709,7 +1709,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.server.Settings.AuthorizationSettings;
 import org.apache.tinkerpop.gremlin.server.auth.AuthenticatedUser;
 
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
index 96f55920d1..2cdc9f6bac 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
@@ -66,7 +66,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
@@ -79,12 +78,13 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventS
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ReferenceElementStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ReferenceElementStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ByModulatorOptimizationStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.EarlyLimitStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
@@ -93,17 +93,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.Lazy
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.DotNetTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.JavascriptTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.PythonTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
 import org.apache.tinkerpop.gremlin.structure.Column;
 import org.apache.tinkerpop.gremlin.structure.Direction;
@@ -285,12 +280,6 @@ public final class CoreImports {
         CLASS_IMPORTS.add(GraphTraversalSource.class);
         CLASS_IMPORTS.add(Traversal.class);
         CLASS_IMPORTS.add(TraversalMetrics.class);
-        CLASS_IMPORTS.add(Translator.class);
-        CLASS_IMPORTS.add(DotNetTranslator.class);
-        CLASS_IMPORTS.add(GroovyTranslator.class);
-        CLASS_IMPORTS.add(JavaTranslator.class);
-        CLASS_IMPORTS.add(JavascriptTranslator.class);
-        CLASS_IMPORTS.add(PythonTranslator.class);
         CLASS_IMPORTS.add(Bindings.class);
         // graph computer
         CLASS_IMPORTS.add(Computer.class);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java
index 7a03090e27..440c27ad56 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngine.java
@@ -21,8 +21,6 @@ package org.apache.tinkerpop.gremlin.jsr223;
 import org.apache.tinkerpop.gremlin.language.grammar.GremlinAntlrToJava;
 import org.apache.tinkerpop.gremlin.language.grammar.GremlinQueryParser;
 import org.apache.tinkerpop.gremlin.language.grammar.VariableResolver;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 
@@ -40,7 +38,6 @@ import java.util.Map;
  * uses {@code gremlin-language} and thus the ANTLR parser, it is not capable of process arbitrary scripts as the
  * {@code GremlinGroovyScriptEngine} can and is therefore a more secure Gremlin evaluator. It is obviously restricted
  * to the capabilities of the ANTLR grammar so therefore syntax that includes things like lambdas are not supported.
- * For GremlinLang evaluation it simply uses the {@link JavaTranslator}.
  * <p/>
  * As an internal note, technically, this is an incomplete implementation of the {@link GremlinScriptEngine} in the
  * traditional sense as a drop-in replacement for something like the {@code GremlinGroovyScriptEngine}. As a result,
@@ -75,27 +72,6 @@ public class GremlinLangScriptEngine extends AbstractScriptEngine implements Gre
         return this.factory;
     }
 
-    /**
-     * GremlinLang is evaluated by the {@link JavaTranslator}.
-     */
-    @Override
-    public Traversal.Admin eval(final GremlinLang gremlinLang, final Bindings bindings, final String traversalSource) throws ScriptException {
-        if (traversalSource.equals(HIDDEN_G))
-            throw new IllegalArgumentException("The traversalSource cannot have the name " + HIDDEN_G + " - it is reserved");
-
-        if (bindings.containsKey(HIDDEN_G))
-            throw new IllegalArgumentException("Bindings cannot include " + HIDDEN_G + " - it is reserved");
-
-        if (!bindings.containsKey(traversalSource))
-            throw new IllegalArgumentException("The bindings available to the ScriptEngine do not contain a traversalSource named: " + traversalSource);
-
-        final Object b = bindings.get(traversalSource);
-        if (!(b instanceof TraversalSource))
-            throw new IllegalArgumentException(traversalSource + " is of type " + b.getClass().getSimpleName() + " and is not an instance of TraversalSource");
-
-        return JavaTranslator.of((TraversalSource) b).translate(gremlinLang);
-    }
-
     /**
      * Gremlin scripts evaluated by the grammar must be bound to "g" and should evaluate to a "g" in the
      * {@code ScriptContext} that is of type {@link TraversalSource}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
index 82173b33ed..bf021142d3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
@@ -37,31 +37,4 @@ public interface GremlinScriptEngine extends ScriptEngine {
 
     @Override
     public GremlinScriptEngineFactory getFactory();
-
-    /**
-     * Evaluates {@link Traversal} {@link GremlinLang} against a traversal source in the global bindings of the
-     * {@code ScriptEngine}.
-     *
-     * @param bytecode of the traversal to execute
-     * @param traversalSource to execute the bytecode against which should be in the available bindings.
-     */
-    public default Traversal.Admin eval(final GremlinLang bytecode, final String traversalSource) throws ScriptException {
-        final Bindings bindings = this.createBindings();
-        final ScriptContext ctx = this.getContext();
-
-        final Bindings gbindings = ctx.getBindings(ScriptContext.GLOBAL_SCOPE);
-        if (gbindings != null) bindings.putAll(gbindings);
-
-        final Bindings ebindings = ctx.getBindings(ScriptContext.ENGINE_SCOPE);
-        if (ebindings != null) bindings.putAll(ebindings);
-
-        bindings.putAll(bytecode.getBindings());
-        return eval(bytecode, bindings, traversalSource);
-    }
-
-    /**
-     * Evaluates {@link Traversal} {@link GremlinLang} with the specified {@code Bindings}. These {@code Bindings}
-     * supplied to this method will be merged with global engine bindings and override them where keys match.
-     */
-    public Traversal.Admin eval(final GremlinLang bytecode, final Bindings bindings, final String traversalSource) throws ScriptException;
 }
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
deleted file mode 100644
index 9881b43279..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- *  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.jsr223;
-
-import org.apache.commons.configuration2.Configuration;
-import org.apache.commons.configuration2.MapConfiguration;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.CardinalityValueTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class JavaTranslator<S extends TraversalSource, T extends Traversal.Admin<?, ?>> implements Translator.StepTranslator<S, T> {
-
-    private final S traversalSource;
-    private final Class<?> anonymousTraversal;
-    private static final Map<Class<?>, Map<String, List<ReflectedMethod>>> GLOBAL_METHOD_CACHE = new ConcurrentHashMap<>();
-    private final Map<Class<?>, Map<String,Method>> localMethodCache = new ConcurrentHashMap<>();
-    private final Method anonymousTraversalStart;
-
-    private JavaTranslator(final S traversalSource) {
-        this.traversalSource = traversalSource;
-        this.anonymousTraversal = traversalSource.getAnonymousTraversalClass().orElse(null);
-        this.anonymousTraversalStart = getStartMethodFromAnonymousTraversal();
-    }
-
-    public static <S extends TraversalSource, T extends Traversal.Admin<?, ?>> JavaTranslator<S, T> of(final S traversalSource) {
-        return new JavaTranslator<>(traversalSource);
-    }
-
-    @Override
-    public S getTraversalSource() {
-        return this.traversalSource;
-    }
-
-    @Override
-    public T translate(final GremlinLang gremlinLang) {
-        if (BytecodeHelper.isGraphOperation(gremlinLang))
-            throw new IllegalArgumentException("JavaTranslator cannot translate traversal operations");
-
-        TraversalSource dynamicSource = this.traversalSource;
-        Traversal.Admin<?, ?> traversal = null;
-        for (final GremlinLang.Instruction instruction : gremlinLang.getSourceInstructions()) {
-            dynamicSource = (TraversalSource) invokeMethod(dynamicSource, TraversalSource.class, instruction.getOperator(), instruction.getArguments());
-        }
-        boolean spawned = false;
-        for (final GremlinLang.Instruction instruction : gremlinLang.getStepInstructions()) {
-            if (!spawned) {
-                traversal = (Traversal.Admin) invokeMethod(dynamicSource, Traversal.class, instruction.getOperator(), instruction.getArguments());
-                spawned = true;
-            } else
-                invokeMethod(traversal, Traversal.class, instruction.getOperator(), instruction.getArguments());
-        }
-        return (T) traversal;
-    }
-
-    @Override
-    public String getTargetLanguage() {
-        return "gremlin-java";
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.translatorString(this);
-    }
-
-    ////
-
-    private Object translateObject(final Object object) {
-        if (object instanceof GremlinLang.Binding)
-            return translateObject(((GremlinLang.Binding) object).value());
-        else if (object instanceof GremlinLang) {
-            // source based bytecode at this stage of translation could have special meaning, but generally this is
-            // going to spawn a new anonymous traversal.
-            final GremlinLang bc = (GremlinLang) object;
-            if (!bc.getSourceInstructions().isEmpty()) {
-                // currently, valid source instructions will be singly defined. would be odd to get this error. could
-                // be just bad construction from a language variant if it appears. maybe better as an assertion but
-                // third-party variants might benefit from this error
-                if (bc.getSourceInstructions().size() != 1) {
-                    throw new IllegalStateException("More than one source instruction defined in bytecode");
-                }
-
-                final GremlinLang.Instruction inst = bc.getSourceInstructions().get(0);
-                if (inst.getOperator().equals(CardinalityValueTraversal.class.getSimpleName())) {
-                    return CardinalityValueTraversal.from(inst);
-                } else {
-                    throw new IllegalStateException(String.format("Unknown source instruction for %s", inst.getOperator()));
-                }
-            } else {
-                try {
-                    final Traversal.Admin<?, ?> traversal = (Traversal.Admin) this.anonymousTraversalStart.invoke(null);
-                    for (final GremlinLang.Instruction instruction : bc.getStepInstructions()) {
-                        invokeMethod(traversal, Traversal.class, instruction.getOperator(), instruction.getArguments());
-                    }
-                    return traversal;
-                } catch (final Throwable e) {
-                    throw new IllegalStateException(e.getMessage(), e);
-                }
-            }
-        } else if (object instanceof TraversalStrategyProxy) {
-            final Map<String, Object> map = new HashMap<>();
-            final Configuration configuration = ((TraversalStrategyProxy) object).getConfiguration();
-            configuration.getKeys().forEachRemaining(key -> map.put(key, translateObject(configuration.getProperty(key))));
-            return invokeStrategyCreationMethod(object, map);
-        } else if (object instanceof Map) {
-            final Map<Object, Object> map = object instanceof Tree ?
-                    new Tree() :
-                    object instanceof LinkedHashMap ?
-                            new LinkedHashMap<>(((Map) object).size()) :
-                            new HashMap<>(((Map) object).size());
-            for (final Map.Entry<?, ?> entry : ((Map<?, ?>) object).entrySet()) {
-                map.put(translateObject(entry.getKey()), translateObject(entry.getValue()));
-            }
-            return map;
-        } else if (object instanceof List) {
-            final List<Object> list = new ArrayList<>(((List) object).size());
-            for (final Object o : (List) object) {
-                list.add(translateObject(o));
-            }
-            return list;
-        } else if (object instanceof BulkSet) {
-            final BulkSet<Object> bulkSet = new BulkSet<>();
-            for (final Map.Entry<?, Long> entry : ((BulkSet<?>) object).asBulk().entrySet()) {
-                bulkSet.add(translateObject(entry.getKey()), entry.getValue());
-            }
-            return bulkSet;
-        } else if (object instanceof Set) {
-            final Set<Object> set = object instanceof LinkedHashSet ?
-                    new LinkedHashSet<>(((Set) object).size()) :
-                    new HashSet<>(((Set) object).size());
-            for (final Object o : (Set) object) {
-                set.add(translateObject(o));
-            }
-            return set;
-        } else
-            return object;
-    }
-
-    private Object invokeStrategyCreationMethod(final Object delegate, final Map<String, Object> map) {
-        final Class<?> strategyClass = ((TraversalStrategyProxy) delegate).getStrategyClass();
-        final Map<String, Method> methodCache = localMethodCache.computeIfAbsent(strategyClass, k -> {
-            final Map<String, Method> cacheEntry = new HashMap<>();
-            try {
-                cacheEntry.put("instance", strategyClass.getMethod("instance"));
-            } catch (NoSuchMethodException ignored) {
-                // nothing - the strategy may not be constructed this way
-            }
-
-            try {
-                cacheEntry.put("create", strategyClass.getMethod("create", Configuration.class));
-            } catch (NoSuchMethodException ignored) {
-                // nothing - the strategy may not be constructed this way
-            }
-
-            if (cacheEntry.isEmpty())
-                throw new IllegalStateException(String.format("%s does can only be constructed with instance() or create(Configuration)", strategyClass.getSimpleName()));
-
-            return cacheEntry;
-        });
-
-        try {
-            return map.isEmpty() ?
-                    methodCache.get("instance").invoke(null) :
-                    methodCache.get("create").invoke(null, new MapConfiguration(map));
-        } catch (final InvocationTargetException | IllegalAccessException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    private Object invokeMethod(final Object delegate, final Class<?> returnType, final String methodName, final Object... arguments) {
-        // populate method cache for fast access to methods in subsequent calls
-        final Map<String, List<ReflectedMethod>> methodCache = GLOBAL_METHOD_CACHE.getOrDefault(delegate.getClass(), new HashMap<>());
-        if (methodCache.isEmpty()) buildMethodCache(delegate, methodCache);
-
-        // create a copy of the argument array so as not to mutate the original bytecode - no need to create a new
-        // object if there are no arguments.
-        final Object[] argumentsCopy = arguments.length > 0 ? new Object[arguments.length] : arguments;
-        for (int i = 0; i < arguments.length; i++) {
-            argumentsCopy[i] = translateObject(arguments[i]);
-        }
-
-        // without this initial check iterating an invalid methodName will lead to a null pointer and a less than
-        // great error message for the user. 
-        if (!methodCache.containsKey(methodName)) {
-            throw new IllegalStateException(generateMethodNotFoundMessage(
-                    "Could not locate method", delegate, methodName, argumentsCopy));
-        }
-
-        try {
-            for (final ReflectedMethod methodx : methodCache.get(methodName)) {
-                final Method method = methodx.method;
-                if (returnType.isAssignableFrom(method.getReturnType())) {
-                    final Parameter[] parameters = methodx.parameters;
-                    if (parameters.length == argumentsCopy.length || methodx.hasVarArgs) {
-                        final Object[] newArguments = new Object[parameters.length];
-                        boolean found = true;
-                        for (int i = 0; i < parameters.length; i++) {
-                            if (parameters[i].isVarArgs()) {
-                                final Class<?> parameterClass = parameters[i].getType().getComponentType();
-                                if (argumentsCopy.length > i && argumentsCopy[i] != null && !parameterClass.isAssignableFrom(argumentsCopy[i].getClass())) {
-                                    found = false;
-                                    break;
-                                }
-                                final Object[] varArgs = (Object[]) Array.newInstance(parameterClass, argumentsCopy.length - i);
-                                int counter = 0;
-                                for (int j = i; j < argumentsCopy.length; j++) {
-                                    varArgs[counter++] = argumentsCopy[j];
-                                }
-                                newArguments[i] = varArgs;
-                                break;
-                            } else {
-                                // try to detect the right method by comparing the type of the parameter to the type
-                                // of the argument. doesn't always work so well because of null arguments which don't
-                                // bring their type in bytecode and rely on position. this doesn't seem to happen often
-                                // ...luckily...because method signatures tend to be sufficiently unique and do not
-                                // encourage whacky use - like g.V().has(null, null) is clearly invalid so we don't
-                                // even need to try to sort that out. on the other hand g.V().has('name',null) which
-                                // is valid hits like four different possible overloads, but we can rely on the most
-                                // generic one which takes Object as the second parameter. that seems to work in this
-                                // case, but it's a shame this isn't nicer. seems like nicer would mean a heavy
-                                // overhaul to Gremlin or to GLVs/bytecode and/or to serialization mechanisms.
-                                //
-                                // the check where argumentsCopy[i] is null could be accompanied by a type check for
-                                // allowable signatures like:
-                                // null == argumentsCopy[i] && parameters[i].getType() == Object.class
-                                // but that doesn't seem helpful. perhaps this approach is fine as long as we ensure
-                                // consistency of null calls to all overloads. in other words addV(String) must behave
-                                // the same as addV(Traversal) if null is used as the argument. so far, that seems to
-                                // be the case. if we find that is not happening we either fix that specific
-                                // inconsistency, start special casing those method finds here, or as mentioned above
-                                // do something far more drastic that doesn't involve reflection.
-                                if (i < argumentsCopy.length && (null == argumentsCopy[i] ||
-                                        (argumentsCopy[i] != null && (
-                                        parameters[i].getType().isAssignableFrom(argumentsCopy[i].getClass()) ||
-                                                (parameters[i].getType().isPrimitive() &&
-                                                        (Number.class.isAssignableFrom(argumentsCopy[i].getClass()) ||
-                                                                argumentsCopy[i].getClass().equals(Boolean.class) ||
-                                                                argumentsCopy[i].getClass().equals(Byte.class) ||
-                                                                argumentsCopy[i].getClass().equals(Character.class))))))) {
-                                    newArguments[i] = argumentsCopy[i];
-                                } else {
-                                    found = false;
-                                    break;
-                                }
-                            }
-                        }
-
-                        // special case has() where the first arg is null - sometimes this can end up with the T being
-                        // null and in 3.5.x that generates an exception which raises badly in the translator. it is
-                        // safer to force this to the String form by letting this "found" version pass. In java this
-                        // form of GraphTraversal can't be produced because of validations for has(T, ...) but in
-                        // other language it might be allowed which means that has((T) null, ...) from something like
-                        // python will end up as has((String) null, ...) which filters rather than generates an
-                        // exception. calling the T version even in a non-JVM language seems odd and more likely the
-                        // caller was shooting for the String one, but ugh who knows. this issue showcases again how
-                        // badly bytecode should either change to use gremlin-language and go away or bytecode should
-                        // get a safer way to be translated to a traversal with more explicit calls that don't rely
-                        // on reflection.
-                        if (methodName.equals(GraphTraversal.Symbols.has) && newArguments.length > 0 && null == newArguments[0] &&
-                            method.getParameterTypes()[0].isAssignableFrom(org.apache.tinkerpop.gremlin.structure.T.class)) {
-                            found = false;
-                        }
-
-                        if (found) {
-                            return 0 == newArguments.length ? method.invoke(delegate) : method.invoke(delegate, newArguments);
-                        }
-                    }
-                }
-            }
-        } catch (final Throwable e) {
-            throw new IllegalStateException(generateMethodNotFoundMessage(
-                    e.getMessage(), null, methodName, argumentsCopy), e);
-        }
-
-        // if it got down here then the method was in the cache but it was never called as it could not be found
-        // for the supplied arguments
-        throw new IllegalArgumentException(generateMethodNotFoundMessage(
-                "Could not locate exact method given the supplied arguments", delegate, methodName, argumentsCopy));
-    }
-
-    /**
-     * Generates the message used when a method cannot be located in the translation. Arguments are converted to
-     * classes to avoid exposing data that might be sensitive.
-     */
-    private String generateMethodNotFoundMessage(final String message, final Object delegate,
-                                                 final String methodNameNotFound, final Object[] args) {
-        final Object[] arguments = null == args ? new Object[0] : args;
-        final String delegateClassName = delegate != null ? delegate.getClass().getSimpleName() : "";
-        return message + ": " + delegateClassName + "." + methodNameNotFound + "(" +
-                Stream.of(arguments).map(a -> null == a ? "null" : a.getClass().getSimpleName()).collect(Collectors.joining(", ")) + ")";
-    }
-
-    private synchronized static void buildMethodCache(final Object delegate, final Map<String, List<ReflectedMethod>> methodCache) {
-        if (methodCache.isEmpty()) {
-            for (final Method method : delegate.getClass().getMethods()) {
-                final List<ReflectedMethod> list = methodCache.computeIfAbsent(method.getName(), k -> new ArrayList<>());
-                list.add(new ReflectedMethod(method));
-            }
-            GLOBAL_METHOD_CACHE.put(delegate.getClass(), methodCache);
-        }
-    }
-
-    private Method getStartMethodFromAnonymousTraversal() {
-        if (this.anonymousTraversal != null) {
-            try {
-                return this.anonymousTraversal.getMethod("start");
-            } catch (NoSuchMethodException ignored) {
-            }
-        }
-
-        return null;
-    }
-
-    private static final class ReflectedMethod {
-        private final Method method;
-        private final Parameter[] parameters;
-        private final boolean hasVarArgs;
-
-        public ReflectedMethod(final Method m) {
-            this.method = m;
-
-            // the reflection getParameters() method calls clone() every time to get the Parameter array. caching it
-            // saves a lot of extra processing
-            this.parameters = m.getParameters();
-
-            this.hasVarArgs = parameters.length > 0 && parameters[parameters.length - 1].isVarArgs();
-        }
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/TranslatorCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/TranslatorCustomizer.java
deleted file mode 100644
index 5345102122..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/TranslatorCustomizer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.jsr223;
-
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-
-/**
- * Provides a way to customize and override {@link GremlinLang} to script translation. Not all {@link GremlinScriptEngine}
- * will support this capability as translation is optional.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public interface TranslatorCustomizer extends Customizer {
-
-    /**
-     * Construct a {@link Translator.ScriptTranslator.TypeTranslator} that will be used by a
-     * {@link Translator.ScriptTranslator} instance within the {@link GremlinScriptEngine} to translate
-     * {@link GremlinLang} to a script.
-     */
-    public Translator.ScriptTranslator.TypeTranslator createTypeTranslator();
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnection.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnection.java
index 83d98de628..7bbcae3d87 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnection.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnection.java
@@ -18,13 +18,16 @@
  */
 package org.apache.tinkerpop.gremlin.process.remote;
 
-import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
+import org.apache.tinkerpop.gremlin.jsr223.GremlinLangScriptEngine;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.EmbeddedRemoteTraversal;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
+import javax.script.Bindings;
+import javax.script.SimpleBindings;
 import java.util.concurrent.CompletableFuture;
 
 /**
@@ -38,7 +41,7 @@ import java.util.concurrent.CompletableFuture;
  * GraphTraversalSource g = graph.traversal();
  *
  * // setup the remote as normal but give it the embedded "g" so that it executes against that
- * GraphTraversalSource simulatedRemoteG = TraversalSourceFactory.traversal(new EmbeddedRemoteConnection(g));
+ * GraphTraversalSource simulatedRemoteG = traversal().with(new EmbeddedRemoteConnection(g));
  * assertEquals(6, simulatedRemoteG.V().count().next().intValue());
  * }
  * </pre>
@@ -59,7 +62,11 @@ public class EmbeddedRemoteConnection implements RemoteConnection {
         // the new submit() in 3.3.x when the deprecation is removed
         final CompletableFuture<RemoteTraversal<?, E>> promise = new CompletableFuture<>();
         try {
-            promise.complete(new EmbeddedRemoteTraversal(JavaTranslator.of(g).translate(gremlinLang)));
+            final GremlinLangScriptEngine scriptEngine = new GremlinLangScriptEngine();
+            final Bindings b = new SimpleBindings();
+            b.put("g", g);
+
+            promise.complete(new EmbeddedRemoteTraversal((Traversal)scriptEngine.eval(gremlinLang.getGremlin(), b)));
         } catch (Exception t) {
             promise.completeExceptionally(t);
         }
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Failure.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Failure.java
index 8e11c878b7..07fe3109cc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Failure.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Failure.java
@@ -18,23 +18,18 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal;
 
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.FailStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
 public interface Failure {
 
-    static Translator.ScriptTranslator TRANSLATOR = GroovyTranslator.of("");
-
     String getMessage();
 
     Map<String,Object> getMetadata();
@@ -79,13 +74,13 @@ public interface Failure {
         }
 
         // removes the starting period so that "__.out()" simply presents as "out()"
-        lines.add(String.format("Traversal> %s", TRANSLATOR.translate(getTraversal()).getScript().substring(1)));
+        lines.add(String.format("Traversal> %s", getTraversal().getGremlinLang().getGremlin().substring(1)));
 
         // not sure there is a situation where fail() would be used where it was not wrapped in a parent,
         // but on the odd case that it is it can be handled
         if (parentStep != EmptyStep.instance()) {
             lines.add(String.format("Parent   > %s [%s]",
-                    parentStep.getClass().getSimpleName(), TRANSLATOR.translate(parentStep.getTraversal()).getScript().substring(1)));
+                    parentStep.getClass().getSimpleName(), getTraversal().getGremlinLang().getGremlin().substring(1)));
         }
 
         lines.add(String.format("Metadata > %s", getMetadata()));
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
index f8a4548315..12fbb27bf6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
@@ -21,22 +21,17 @@ package org.apache.tinkerpop.gremlin.process.traversal;
 
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.text.StringEscapeUtils;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
 import org.apache.tinkerpop.gremlin.structure.Column;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.NumberHelper;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
 import javax.lang.model.SourceVersion;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -59,9 +54,6 @@ public class GremlinLang implements Cloneable, Serializable {
 
     private static final Object[] EMPTY_ARRAY = new Object[]{};
 
-    private List<Instruction> sourceInstructions = new ArrayList<>();
-    private List<Instruction> stepInstructions = new ArrayList<>();
-
     private StringBuilder gremlin = new StringBuilder();
     private Map<String, Object> parameters = new HashMap<>();
     private static final AtomicInteger paramCount = new AtomicInteger(0);
@@ -73,7 +65,6 @@ public class GremlinLang implements Cloneable, Serializable {
     }
 
     public GremlinLang(final String sourceName, final Object... arguments) {
-        this.sourceInstructions.add(new Instruction(sourceName, flattenArguments(arguments)));
         addToGremlin(sourceName, arguments);
     }
 
@@ -276,7 +267,7 @@ public class GremlinLang implements Cloneable, Serializable {
     }
 
     // g for gts, __ for anonymous, any for gremlin-groovy
-    private String getGremlin(final String g) {
+    public String getGremlin(final String g) {
         // special handling for CardinalityValueTraversal
         if (gremlin.length() != 0 && gremlin.charAt(0) != '.') {
             return gremlin.toString();
@@ -304,22 +295,6 @@ public class GremlinLang implements Cloneable, Serializable {
      * @param arguments  the traversal source method arguments
      */
     public void addSource(final String sourceName, final Object... arguments) {
-        if (sourceName.equals(TraversalSource.Symbols.withoutStrategies)) {
-            if (arguments == null)
-                this.sourceInstructions.add(new Instruction(sourceName, null));
-            else {
-                final Class<TraversalStrategy>[] classes = new Class[arguments.length];
-                for (int i = 0; i < arguments.length; i++) {
-                    classes[i] = arguments[i] instanceof TraversalStrategyProxy ?
-                            ((TraversalStrategyProxy) arguments[i]).getStrategyClass() :
-                            (Class) arguments[i];
-                }
-                this.sourceInstructions.add(new Instruction(sourceName, classes));
-            }
-        } else
-            this.sourceInstructions.add(new Instruction(sourceName, flattenArguments(arguments)));
-        Bindings.clear();
-
         if (sourceName.equals(TraversalSource.Symbols.withStrategies) && arguments.length != 0) {
             final String args =  buildStrategyArgs(arguments);
 
@@ -378,8 +353,6 @@ public class GremlinLang implements Cloneable, Serializable {
      * @param arguments the traversal method arguments
      */
     public void addStep(final String stepName, final Object... arguments) {
-        this.stepInstructions.add(new Instruction(stepName, flattenArguments(arguments)));
-
         addToGremlin(stepName, arguments);
     }
 
@@ -387,101 +360,34 @@ public class GremlinLang implements Cloneable, Serializable {
         return optionsStrategies;
     }
 
-    /**
-     * Get the {@link TraversalSource} instructions associated with this bytecode.
-     *
-     * @return an iterable of instructions
-     */
-    public List<Instruction> getSourceInstructions() {
-        return this.sourceInstructions;
-    }
-
-    /**
-     * Get the {@link Traversal} instructions associated with this bytecode.
-     *
-     * @return an iterable of instructions
-     */
-    public List<Instruction> getStepInstructions() {
-        return this.stepInstructions;
-    }
-
-    /**
-     * Get both the {@link TraversalSource} and {@link Traversal} instructions of this bytecode.
-     * The traversal source instructions are provided prior to the traversal instructions.
-     *
-     * @return an interable of all the instructions in this bytecode
-     */
-    public Iterable<Instruction> getInstructions() {
-        return () -> IteratorUtils.concat(this.sourceInstructions.iterator(), this.stepInstructions.iterator());
-    }
-
-    /**
-     * Get all the bindings (in a nested, recursive manner) from all the arguments of all the instructions of this bytecode.
-     *
-     * @return a map of string variable and object value bindings
-     */
-    public Map<String, Object> getBindings() {
-        final Map<String, Object> bindingsMap = new HashMap<>();
-        for (final Instruction instruction : this.sourceInstructions) {
-            for (final Object argument : instruction.getArguments()) {
-                addArgumentBinding(bindingsMap, argument);
-            }
-        }
-        for (final Instruction instruction : this.stepInstructions) {
-            for (final Object argument : instruction.getArguments()) {
-                addArgumentBinding(bindingsMap, argument);
-            }
-        }
-        return bindingsMap;
-    }
-
     public boolean isEmpty() {
-        return this.sourceInstructions.isEmpty() && this.stepInstructions.isEmpty();
-    }
-
-    private static void addArgumentBinding(final Map<String, Object> bindingsMap, final Object argument) {
-        if (argument instanceof Binding)
-            bindingsMap.put(((Binding) argument).key, ((Binding) argument).value);
-        else if (argument instanceof Map) {
-            for (final Map.Entry<?, ?> entry : ((Map<?, ?>) argument).entrySet()) {
-                addArgumentBinding(bindingsMap, entry.getKey());
-                addArgumentBinding(bindingsMap, entry.getValue());
-            }
-        } else if (argument instanceof Collection) {
-            for (final Object item : (Collection) argument) {
-                addArgumentBinding(bindingsMap, item);
-            }
-        } else if (argument instanceof GremlinLang)
-            bindingsMap.putAll(((GremlinLang) argument).getBindings());
+        return this.gremlin.length() == 0;
     }
 
     @Override
     public String toString() {
-        return Arrays.asList(this.sourceInstructions, this.stepInstructions).toString();
+        return gremlin.toString();
     }
 
+    // todo: fix and add tests
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
         final GremlinLang bytecode = (GremlinLang) o;
-        return Objects.equals(sourceInstructions, bytecode.sourceInstructions) &&
-                Objects.equals(stepInstructions, bytecode.stepInstructions);
+        return Objects.equals(gremlin.toString(), bytecode.gremlin.toString()) &&
+                Objects.equals(parameters, bytecode.parameters);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(sourceInstructions, stepInstructions);
+        return Objects.hash(gremlin, parameters);
     }
 
-    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
     @Override
     public GremlinLang clone() {
         try {
             final GremlinLang clone = (GremlinLang) super.clone();
-            clone.sourceInstructions = new ArrayList<>(this.sourceInstructions);
-            clone.stepInstructions = new ArrayList<>(this.stepInstructions);
-
             clone.parameters = new HashMap<>(parameters);
             clone.gremlin = new StringBuilder(gremlin.length());
             clone.gremlin.append(gremlin);
@@ -514,108 +420,24 @@ public class GremlinLang implements Cloneable, Serializable {
         }
     }
 
-    public static class Instruction implements Serializable {
-
-        private final String operator;
-        private final Object[] arguments;
-
-        private Instruction(final String operator, final Object... arguments) {
-            this.operator = operator;
-            this.arguments = arguments;
-        }
-
-        public String getOperator() {
-            return this.operator;
-        }
-
-        public Object[] getArguments() {
-            return this.arguments;
-        }
-
-        @Override
-        public String toString() {
-            return this.operator + "(" + StringFactory.removeEndBrackets(Arrays.asList(this.arguments)) + ")";
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
-            Instruction that = (Instruction) o;
-            return Objects.equals(operator, that.operator) &&
-                    Arrays.equals(arguments, that.arguments);
-        }
-
-        @Override
-        public int hashCode() {
-            int result = Objects.hash(operator);
-            result = 31 * result + Arrays.hashCode(arguments);
-            return result;
-        }
-    }
-
-    public static class Binding<V> implements Serializable {
-
-        private final String key;
-        private final V value;
-
-        public Binding(final String key, final V value) {
-            this.key = key;
-            this.value = value;
-        }
-
-        public String variable() {
-            return this.key;
-        }
-
-        public V value() {
-            return this.value;
-        }
-
-        @Override
-        public String toString() {
-            return "binding[" + this.key + "=" + this.value + "]";
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
-            Binding<?> binding = (Binding<?>) o;
-            return Objects.equals(key, binding.key) &&
-                    Objects.equals(value, binding.value);
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(key, value);
-        }
-    }
-
     /////
 
-    private final Object[] flattenArguments(final Object... arguments) {
+    private Object[] flattenArguments(final Object... arguments) {
         if (arguments == null || arguments.length == 0)
             return EMPTY_ARRAY;
         final List<Object> flatArguments = new ArrayList<>(arguments.length);
         for (final Object object : arguments) {
             if (object instanceof Object[]) {
                 for (final Object nestObject : (Object[]) object) {
-                    flatArguments.add(convertArgument(nestObject, true));
+                    flatArguments.add(convertArgument(nestObject));
                 }
             } else
-                flatArguments.add(convertArgument(object, true));
+                flatArguments.add(convertArgument(object));
         }
         return flatArguments.toArray();
     }
 
-    private final Object convertArgument(final Object argument, final boolean searchBindings) {
-        if (searchBindings) {
-            final String variable = Bindings.getBoundVariable(argument);
-            if (null != variable)
-                return new Binding<>(variable, convertArgument(argument, false));
-        }
-        //
+    private Object convertArgument(final Object argument) {
         if (argument instanceof Traversal) {
             // prevent use of "g" to spawn child traversals
             if (((Traversal) argument).asAdmin().getTraversalSource().isPresent())
@@ -626,25 +448,23 @@ public class GremlinLang implements Cloneable, Serializable {
         } else if (argument instanceof Map) {
             final Map<Object, Object> map = new LinkedHashMap<>(((Map) argument).size());
             for (final Map.Entry<?, ?> entry : ((Map<?, ?>) argument).entrySet()) {
-                map.put(convertArgument(entry.getKey(), true), convertArgument(entry.getValue(), true));
+                map.put(convertArgument(entry.getKey()), convertArgument(entry.getValue()));
             }
             return map;
         } else if (argument instanceof List) {
             final List<Object> list = new ArrayList<>(((List) argument).size());
             for (final Object item : (List) argument) {
-                list.add(convertArgument(item, true));
+                list.add(convertArgument(item));
             }
             return list;
         } else if (argument instanceof Set) {
             final Set<Object> set = new LinkedHashSet<>(((Set) argument).size());
             for (final Object item : (Set) argument) {
-                set.add(convertArgument(item, true));
+                set.add(convertArgument(item));
             }
             return set;
         } else
             return argument;
     }
 
-    /////
-
 }
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java
deleted file mode 100644
index f8c4ce4901..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- *  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.process.traversal;
-
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.CardinalityValueTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.function.BiFunction;
-
-/**
- * A Translator will translate {@link GremlinLang} into another representation. That representation may be a
- * Java instance via {@link StepTranslator} or a String script in some language via {@link ScriptTranslator}.
- * The parameterization of Translator is S (traversal source) and T (full translation).
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stark Arya (sandszhou.zj@alibaba-inc.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public interface Translator<S, T> {
-
-    /**
-     * Get the {@link TraversalSource} representation rooting this translator.
-     * For string-based translators ({@link ScriptTranslator}), this is typically a "g".
-     * For java-based translators ({@link StepTranslator}), this is typically the {@link TraversalSource} instance
-     * which the {@link Traversal} will be built from.
-     *
-     * @return the traversal source representation
-     */
-    public S getTraversalSource();
-
-    /**
-     * Translate {@link GremlinLang} into a new representation. Typically, for language translations, the translation is
-     * to a string representing the traversal in the respective scripting language.
-     *
-     * @param gremlinLang the bytecode representing traversal source and traversal manipulations.
-     * @return the translated object
-     */
-    public T translate(final GremlinLang gremlinLang);
-
-    /**
-     * Translates a {@link Traversal} into the specified form
-     */
-    public default T translate(final Traversal<?,?> t) {
-        return translate(t.asAdmin().getGremlinLang());
-    }
-
-    /**
-     * Get the language that the translator is converting the traversal byte code to.
-     *
-     * @return the language of the translation
-     */
-    public String getTargetLanguage();
-
-    ///
-
-    /**
-     * Translates bytecode to a Script representation.
-     */
-    public interface ScriptTranslator extends Translator<String, Script> {
-
-        /**
-         * Provides a way for the {@link ScriptTranslator} to convert various data types to their string
-         * representations in their target language.
-         */
-        public interface TypeTranslator extends BiFunction<String, Object, Script> { }
-
-        public abstract class AbstractTypeTranslator implements ScriptTranslator.TypeTranslator {
-            protected static final String ANONYMOUS_TRAVERSAL_PREFIX = "__";
-            protected final boolean withParameters;
-            protected final Script script;
-
-            protected AbstractTypeTranslator(final boolean withParameters) {
-                this.withParameters = withParameters;
-                this.script = new Script();
-            }
-
-            @Override
-            public Script apply(final String traversalSource, final Object o) {
-                this.script.init();
-                if (o instanceof GremlinLang) {
-                    return produceScript(traversalSource, (GremlinLang) o);
-                } else {
-                    return convertToScript(o);
-                }
-            }
-
-            /**
-             * Gets the syntax for the spawn of an anonymous traversal which is traditionally the double underscore.
-             */
-            protected String getAnonymousTraversalPrefix() {
-                return ANONYMOUS_TRAVERSAL_PREFIX;
-            }
-
-            /**
-             * Gets the syntax for a {@code null} value as a string representation.
-             */
-            protected abstract String getNullSyntax();
-
-            /**
-             * Take the string argument and convert it to a string representation in the target language (i.e. escape,
-             * enclose in appropriate quotes, etc.)
-             */
-            protected abstract String getSyntax(final String o);
-
-            /**
-             * Take the boolean argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final Boolean o);
-
-            /**
-             * Take the {@code Date} argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final Date o);
-
-            /**
-             * Take the {@code Timestamp} argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final Timestamp o);
-
-            /**
-             * Take the {@code UUID} argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final UUID o);
-
-            /**
-             * Take the {@link Lambda} argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final Lambda o);
-
-            /**
-             * Take the {@link SackFunctions.Barrier} argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final SackFunctions.Barrier o);
-
-            /**
-             * Take the {@link VertexProperty.Cardinality} argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final VertexProperty.Cardinality o);
-
-            /**
-             * Take the {@link Pick} argument and convert it to a string representation in the target language.
-             */
-            protected abstract String getSyntax(final Pick o);
-
-            /**
-             * Take the numeric argument and convert it to a string representation in the target language. Languages
-             * that can discern differences in types of numbers will wish to further check the type of the
-             * {@code Number} instance itself (i.e. {@code Double}, {@code Integer}, etc.)
-             */
-            protected abstract String getSyntax(final Number o);
-
-            /**
-             * Take the {@code Set} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final Set<?> o);
-
-            /**
-             * Take the {@code List} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final List<?> o);
-
-            /**
-             * Take the {@code Map} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final Map<?,?> o);
-
-            /**
-             * Take the {@code Class} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final Class<?> o);
-
-            /**
-             * Take the {@code Enum} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final Enum<?> o);
-
-            /**
-             * Take the {@link Vertex} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final Vertex o);
-
-            /**
-             * Take the {@link Edge} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final Edge o);
-
-            /**
-             * Take the {@link VertexProperty} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final VertexProperty<?> o);
-
-            /**
-             * Take the {@link TraversalStrategyProxy} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final TraversalStrategyProxy<?> o);
-
-            /**
-             * Take the {@link GremlinLang} and writes the syntax directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceScript(final String traversalSource, final GremlinLang o);
-
-            /**
-             * Take the {@link P} and writes the syntax directly to the member {@link #script} variable. This
-             * implementation should also consider {@link TextP}.
-             */
-            protected abstract Script produceScript(final P<?> p);
-
-            /**
-             * Take the {@link GremlinLang} and write the syntax for it directly to the member {@link #script} variable.
-             */
-            protected abstract Script produceCardinalityValue(final GremlinLang o);
-
-            /**
-             *  For each operator argument, if withParameters set true, try parametrization as follows:
-             *
-             *  -----------------------------------------------
-             *  if unpack, why ?      ObjectType
-             *  -----------------------------------------------
-             *  (Yes)                 Bytecode.Binding
-             *  (Recursion, No)       Bytecode
-             *  (Recursion, No)       Traversal
-             *  (Yes)                 String
-             *  (Recursion, No)       Set
-             *  (Recursion, No)       List
-             *  (Recursion, No)       Map
-             *  (Yes)                 Long
-             *  (Yes)                 Double
-             *  (Yes)                 Float
-             *  (Yes)                 Integer
-             *  (Yes)                 Timestamp
-             *  (Yes)                 Date
-             *  (Yes)                 Uuid
-             *  (Recursion, No)       P
-             *  (Enumeration, No)     SackFunctions.Barrier
-             *  (Enumeration, No)     VertexProperty.Cardinality
-             *  (Enumeration, No)     TraversalOptionParent.Pick
-             *  (Enumeration, No)     Enum
-             *  (Recursion, No)       Vertex
-             *  (Recursion, No)       Edge
-             *  (Recursion, No)       VertexProperty
-             *  (Yes)                 Lambda
-             *  (Recursion, No)       TraversalStrategyProxy
-             *  (Enumeration, No)     TraversalStrategy
-             *  (Yes)                 Other
-             *  -------------------------------------------------
-             *
-             * @param object
-             * @return String Repres
-             */
-            protected Script convertToScript(final Object object) {
-                if (object instanceof GremlinLang.Binding) {
-                    return script.getBoundKeyOrAssign(withParameters, ((GremlinLang.Binding) object).variable());
-                } else if (object instanceof GremlinLang) {
-                    final GremlinLang bc = (GremlinLang) object;
-                    if (bc.getSourceInstructions().size() == 1 &&
-                            bc.getSourceInstructions().get(0).getOperator().equals(CardinalityValueTraversal.class.getSimpleName())) {
-                        return produceCardinalityValue(bc);
-                    } else {
-                        return produceScript(getAnonymousTraversalPrefix(), bc);
-                    }
-                } else if (object instanceof Traversal) {
-                    return convertToScript(((Traversal) object).asAdmin().getGremlinLang());
-                } else if (object instanceof String) {
-                    final Object objectOrWrapper = withParameters ? object : getSyntax((String) object);
-                    return script.getBoundKeyOrAssign(withParameters, objectOrWrapper);
-                } else if (object instanceof Boolean) {
-                    final Object objectOrWrapper = withParameters ? object : getSyntax((Boolean) object);
-                    return script.getBoundKeyOrAssign(withParameters, objectOrWrapper);
-                } else if (object instanceof Set) {
-                    return produceScript((Set<?>) object);
-                } else if (object instanceof List) {
-                    return produceScript((List<?>) object);
-                } else if (object instanceof Map) {
-                    return produceScript((Map<?, ?>) object);
-                } else if (object instanceof Number) {
-                    final Object objectOrWrapper = withParameters ? object : getSyntax((Number) object);
-                    return script.getBoundKeyOrAssign(withParameters, objectOrWrapper);
-                } else if (object instanceof Class) {
-                    return produceScript((Class<?>) object);
-                } else if (object instanceof Timestamp) {
-                    final Object objectOrWrapper = withParameters ? object : getSyntax((Timestamp) object);
-                    return script.getBoundKeyOrAssign(withParameters, objectOrWrapper);
-                } else if (object instanceof Date) {
-                    final Object objectOrWrapper = withParameters ? object : getSyntax((Date) object);
-                    return script.getBoundKeyOrAssign(withParameters, objectOrWrapper);
-                } else if (object instanceof UUID) {
-                    final Object objectOrWrapper = withParameters ? object : getSyntax((UUID) object);
-                    return script.getBoundKeyOrAssign(withParameters, objectOrWrapper);
-                } else if (object instanceof P) {
-                    return produceScript((P<?>) object);
-                } else if (object instanceof SackFunctions.Barrier) {
-                    return script.append(getSyntax((SackFunctions.Barrier) object));
-                } else if (object instanceof VertexProperty.Cardinality) {
-                    return script.append(getSyntax((VertexProperty.Cardinality) object));
-                } else if (object instanceof Pick) {
-                    return script.append(getSyntax((Pick) object));
-                } else if (object instanceof Enum) {
-                    return produceScript((Enum<?>) object);
-                } else if (object instanceof Vertex) {
-                    return produceScript((Vertex) object);
-                } else if (object instanceof Edge) {
-                    return produceScript((Edge) object);
-                } else if (object instanceof VertexProperty) {
-                    return produceScript((VertexProperty<?>) object);
-                } else if (object instanceof Lambda) {
-                    final Object objectOrWrapper = withParameters ? object : getSyntax((Lambda) object);
-                    return script.getBoundKeyOrAssign(withParameters,objectOrWrapper);
-                } else if (object instanceof TraversalStrategyProxy) {
-                    return produceScript((TraversalStrategyProxy<?>) object);
-                } else if (object instanceof TraversalStrategy) {
-                    return convertToScript(new TraversalStrategyProxy(((TraversalStrategy) object)));
-                } else {
-                    return null == object ? script.append(getNullSyntax()) : script.getBoundKeyOrAssign(withParameters, object);
-                }
-            }
-        }
-    }
-
-    /**
-     * Translates bytecode to actual steps.
-     */
-    public interface StepTranslator<S extends TraversalSource, T extends Traversal.Admin<?, ?>> extends Translator<S, T> {
-
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index fd23d6839e..9839ad2efc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -2291,10 +2291,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
      * @since 3.0.0-incubating
      */
     public default GraphTraversal<S, E> has(final String propertyKey, final Traversal<?, ?> propertyTraversal) {
-        // the translation here of null to has(String, Object) is likely what was intended. a null Traversal doesn't
-        // really make much sense. this should resolve issues with JavaTranslator grabbing this method when bytecode
-        // uses null as the second argument. we've taken this tactic for other overloads of has() as well, so just
-        // continuing with that pattern.
+        // todo: check if this magic is needed for gremlin-lang
         if (null == propertyTraversal)
             return has(propertyKey, (Object) null);
 
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/CardinalityValueTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/CardinalityValueTraversal.java
index 8dcd9d3551..f92be27441 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/CardinalityValueTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/CardinalityValueTraversal.java
@@ -37,11 +37,6 @@ public final class CardinalityValueTraversal extends AbstractLambdaTraversal {
         this.gremlinLang = new GremlinLang(CardinalityValueTraversal.class.getSimpleName(), cardinality.name(), value);
     }
 
-    public static CardinalityValueTraversal from(final GremlinLang.Instruction inst) {
-        return new CardinalityValueTraversal(VertexProperty.Cardinality.valueOf(inst.getArguments()[0].toString()),
-                inst.getArguments()[1]);
-    }
-
     @Override
     public GremlinLang getGremlinLang() {
         return this.gremlinLang;
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslator.java
deleted file mode 100644
index b7897d2aff..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslator.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * This Translator will translate {@link GremlinLang} into a representation that has been stripped of any user data
- * (anonymized). A default anonymizer is provided, but can be replaced with a custom anonymizer as needed. The
- * default anonymizer replaces any String, Numeric, Date, Timestamp, or UUID with a type-based token. Identical values
- * will receive the same token (e.g. if "foo" is assigned "string0" then all occurrences of "foo" will be replaced
- * with "string0").
- */
-public class AnonymizingTypeTranslator extends GroovyTranslator.DefaultTypeTranslator {
-
-    /**
-     * Customizable anonymizer interface.
-     */
-    public interface Anonymizer {
-        /**
-         * Return an anonymized token for the supplied object.
-         *
-         * @param obj a {@link Traversal} object of one of the following types: String, Long, Double, FLoat, Integer,
-         *            Class, TImestamp, Date, UUID, {@link Vertex}, {@link Edge}, {@link VertexProperty}
-         * @return    an anonymized version of the supplied object
-         */
-        Object anonymize(Object obj);
-    }
-
-    /**
-     * This default implementation keeps a map from type (Java Class) to another map from instances to anonymized
-     * token.
-     */
-    public static class DefaultAnonymizer implements Anonymizer {
-        /*
-         * Map<ClassName, Map<Object, AnonymizedValue>>
-         */
-        private final Map<String, Map<Object, String>> simpleNameToObjectCache = new HashMap<>();
-
-        /**
-         * Return an anonymized token for the supplied object of the form "type:instance#".
-         */
-        @Override
-        public Object anonymize(Object obj) {
-            final String type = obj.getClass().getSimpleName();
-
-            Map<Object, String> objectToAnonymizedString = simpleNameToObjectCache.get(type);
-            if (objectToAnonymizedString != null){
-                // this object type has been handled at least once before
-                final String innerValue = objectToAnonymizedString.get(obj);
-                if (innerValue != null){
-                    return innerValue;
-                } else {
-                    final String anonymizedValue = type.toLowerCase() + objectToAnonymizedString.size();
-                    objectToAnonymizedString.put(obj, anonymizedValue);
-                    return anonymizedValue;
-                }
-            } else {
-                objectToAnonymizedString = new HashMap<>();
-                simpleNameToObjectCache.put(type, objectToAnonymizedString);
-                final String anonymizedValue = type.toLowerCase() + objectToAnonymizedString.size();
-                objectToAnonymizedString.put(obj, anonymizedValue);
-                return anonymizedValue;
-            }
-        }
-    }
-
-    private final Anonymizer anonymizer;
-
-    /**
-     * Default constructor creates a {@link DefaultAnonymizer} + withParameters=false.
-     */
-    public AnonymizingTypeTranslator() {
-        this(new DefaultAnonymizer(), false);
-    }
-
-    public AnonymizingTypeTranslator(final boolean withParameters) {
-        this(new DefaultAnonymizer(), withParameters);
-    }
-
-    public AnonymizingTypeTranslator(final Anonymizer anonymizer, final boolean withParameters) {
-        super(withParameters);
-        this.anonymizer = anonymizer;
-    }
-
-    @Override
-    protected String getSyntax(final String o) {
-        return anonymizer.anonymize(o).toString();
-//      Original syntax:
-//        return (o.contains("\"") ? "\"\"\"" + StringEscapeUtils.escapeJava(o) + "\"\"\"" : "\"" + StringEscapeUtils.escapeJava(o) + "\"")
-//                .replace("$", "\\$");
-    }
-
-    @Override
-    protected String getSyntax(final Date o) {
-        return anonymizer.anonymize(o).toString();
-//      Original syntax:
-//        return "new Date(" + o.getTime() + "L)";
-    }
-
-    @Override
-    protected String getSyntax(final Timestamp o) {
-        return anonymizer.anonymize(o).toString();
-//      Original syntax:
-//        return "new Timestamp(" + o.getTime() + "L)";
-    }
-
-    @Override
-    protected String getSyntax(final UUID o) {
-        return anonymizer.anonymize(o).toString();
-//      Original syntax:
-//        return "UUID.fromString('" + o.toString() + "')";
-    }
-
-    @Override
-    protected String getSyntax(final Number o) {
-        return anonymizer.anonymize(o).toString();
-//      Original syntax:
-//        if (o instanceof Long)
-//            return o + "L";
-//        else if (o instanceof Double)
-//            return o + "d";
-//        else if (o instanceof Float)
-//            return o + "f";
-//        else if (o instanceof Integer)
-//            return "(int) " + o;
-//        else if (o instanceof Byte)
-//            return "(byte) " + o;
-//        if (o instanceof Short)
-//            return "(short) " + o;
-//        else if (o instanceof BigInteger)
-//            return "new BigInteger('" + o.toString() + "')";
-//        else if (o instanceof BigDecimal)
-//            return "new BigDecimal('" + o.toString() + "')";
-//        else
-//            return o.toString();
-    }
-
-    @Override
-    protected Script produceScript(final Class<?> o) {
-        return script.append(anonymizer.anonymize(o).toString());
-//      Original syntax:
-//        return script.append(CoreImports.getClassImports().contains(o) ? o.getSimpleName() : o.getCanonicalName());
-    }
-
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java
deleted file mode 100644
index 1ff0cb1350..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.commons.lang3.EnumUtils;
-import org.apache.commons.text.StringEscapeUtils;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Merge;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pick;
-import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.T;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.util.NumberHelper;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * Converts bytecode to a C# string of Gremlin.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public final class DotNetTranslator implements Translator.ScriptTranslator {
-
-    private final String traversalSource;
-    private final TypeTranslator typeTranslator;
-
-    private static final List<String> methodsWithArgsNotNeedingGeneric = Arrays.asList(GraphTraversal.Symbols.group,
-            GraphTraversal.Symbols.groupCount, GraphTraversal.Symbols.sack);
-
-    private static final List<String> stringMethodsWithScopes = Arrays.asList(GraphTraversal.Symbols.asString,
-            GraphTraversal.Symbols.length, GraphTraversal.Symbols.lTrim, GraphTraversal.Symbols.replace,
-            GraphTraversal.Symbols.rTrim, GraphTraversal.Symbols.split, GraphTraversal.Symbols.substring,
-            GraphTraversal.Symbols.toLower, GraphTraversal.Symbols.toUpper, GraphTraversal.Symbols.trim);
-
-    private DotNetTranslator(final String traversalSource, final TypeTranslator typeTranslator) {
-        this.traversalSource = traversalSource;
-        this.typeTranslator = typeTranslator;
-    }
-
-    /**
-     * Creates the translator with a {@code false} argument to {@code withParameters} using
-     * {@link #of(String, boolean)}.
-     */
-    public static DotNetTranslator of(final String traversalSource) {
-        return of(traversalSource, false);
-    }
-
-    /**
-     * Creates the translator with the {@link DefaultTypeTranslator} passing the {@code withParameters} option to it
-     * which will handle type translation in a fashion that should typically increase cache hits and reduce
-     * compilation times if enabled at the sacrifice to rewriting of the script that could reduce readability.
-     */
-    public static DotNetTranslator of(final String traversalSource, final boolean withParameters) {
-        return of(traversalSource, new DefaultTypeTranslator(withParameters));
-    }
-
-    /**
-     * Creates the translator with a custom {@link TypeTranslator} instance.
-     */
-    public static DotNetTranslator of(final String traversalSource, final TypeTranslator typeTranslator) {
-        return new DotNetTranslator(traversalSource, typeTranslator);
-    }
-
-    @Override
-    public Script translate(final GremlinLang bytecode) {
-        return typeTranslator.apply(traversalSource, bytecode);
-    }
-
-    @Override
-    public String getTargetLanguage() {
-        return "gremlin-dotnet";
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.translatorString(this);
-    }
-
-    @Override
-    public String getTraversalSource() {
-        return this.traversalSource;
-    }
-
-    /**
-     * Performs standard type translation for the TinkerPop types to C#.
-     */
-    public static class DefaultTypeTranslator extends AbstractTypeTranslator {
-
-        public DefaultTypeTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected String getNullSyntax() {
-            return "null";
-        }
-
-        @Override
-        protected String getSyntax(final String o) {
-            return "\"" + StringEscapeUtils.escapeJava(o) + "\"";
-        }
-
-        @Override
-        protected String getSyntax(final Boolean o) {
-            return o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Date o) {
-            return "DateTimeOffset.FromUnixTimeMilliseconds(" + o.getTime() + ")";
-        }
-
-        @Override
-        protected String getSyntax(final Timestamp o) {
-            return "DateTimeOffset.FromUnixTimeMilliseconds(" + o.getTime() + ")";
-        }
-
-        @Override
-        protected String getSyntax(final UUID o) {
-            return "new Guid(\"" + o.toString() + "\")";
-        }
-
-        @Override
-        protected String getSyntax(final Lambda o) {
-            return "Lambda.Groovy(\"" + StringEscapeUtils.escapeEcmaScript(o.getLambdaScript().trim()) + "\")";
-        }
-
-        @Override
-        protected String getSyntax(final SackFunctions.Barrier o) {
-            return "Barrier." + SymbolHelper.toCSharp(o.toString());
-        }
-
-        @Override
-        protected String getSyntax(final VertexProperty.Cardinality o) {
-            return "Cardinality." + SymbolHelper.toCSharp(o.toString());
-        }
-
-        @Override
-        protected String getSyntax(final Pick o) {
-            return "Pick." + SymbolHelper.toCSharp(o.toString());
-        }
-
-        @Override
-        protected String getSyntax(final Number o) {
-            if (o instanceof Float || o instanceof Double) {
-                if (NumberHelper.isNaN(o))
-                    return (o instanceof Float ? "Single" : "Double") + ".NaN";
-                if (NumberHelper.isPositiveInfinity(o))
-                    return (o instanceof Float ? "Single" : "Double") + ".PositiveInfinity";
-                if (NumberHelper.isNegativeInfinity(o))
-                    return (o instanceof Float ? "Single" : "Double") + ".NegativeInfinity";
-            }
-            return o.toString();
-        }
-
-        @Override
-        protected Script produceCardinalityValue(final GremlinLang o) {
-            final GremlinLang.Instruction inst = o.getSourceInstructions().get(0);
-            final String card = inst.getArguments()[0].toString();
-            script.append("CardinalityValue." + card.substring(0, 1).toUpperCase() + card.substring(1) + "(");
-            convertToScript(inst.getArguments()[1]);
-            script.append(")");
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final Set<?> o) {
-            return produceScriptForHashSet(o, "object");
-        }
-
-        private Script produceScriptForHashSet(final Set<?> o, final String generic) {
-            final Iterator<?> iterator = o.iterator();
-            script.append("new HashSet<");
-            script.append(generic);
-            script.append("> {");
-
-            while (iterator.hasNext()) {
-                final Object nextItem = iterator.next();
-                convertToScript(nextItem);
-                if (iterator.hasNext())
-                    script.append(", ");
-            }
-
-            return script.append("}");
-        }
-
-        @Override
-        protected Script produceScript(final List<?> o) {
-            final Iterator<?> iterator = ((List<?>) o).iterator();
-            script.append("new List<object> {");
-
-            while (iterator.hasNext()) {
-                final Object nextItem = iterator.next();
-                convertToScript(nextItem);
-                if (iterator.hasNext())
-                    script.append(", ");
-            }
-
-            return script.append("}");
-        }
-
-        @Override
-        protected Script produceScript(final Map<?, ?> o) {
-            script.append("new Dictionary<object,object> {");
-            produceKeyValuesForMap(o);
-            return script.append("}");
-        }
-
-        @Override
-        protected Script produceScript(final Class<?> o) {
-            return script.append(o.getCanonicalName());
-        }
-
-        @Override
-        protected Script produceScript(final Enum<?> o) {
-            final String e = o instanceof Direction ?
-                    o.name().substring(0,1).toUpperCase() + o.name().substring(1).toLowerCase() :
-                    o.name().substring(0,1).toUpperCase() + o.name().substring(1);
-            return script.append(o.getDeclaringClass().getSimpleName() + "." + e);
-        }
-
-        @Override
-        protected Script produceScript(final Vertex o) {
-            script.append("new Vertex(");
-            convertToScript(o.id());
-            script.append(", ");
-            convertToScript(o.label());
-            return script.append(")");
-        }
-
-        @Override
-        protected Script produceScript(final Edge o) {
-            script.append("new Edge(");
-            convertToScript(o.id());
-            script.append(", new Vertex(");
-            convertToScript(o.outVertex().id());
-            script.append(", ");
-            convertToScript(o.outVertex().label());
-            script.append("), ");
-            convertToScript(o.label());
-            script.append(", new Vertex(");
-            convertToScript(o.inVertex().id());
-            script.append(", ");
-            convertToScript(o.inVertex().label());
-            return script.append("))");
-        }
-
-        @Override
-        protected Script produceScript(final VertexProperty<?> o) {
-            script.append("new VertexProperty(");
-            convertToScript(o.id());
-            script.append(", ");
-            convertToScript(o.label());
-            script.append(", ");
-            convertToScript(o.value());
-            script.append(", ");
-            return script.append("null)");
-        }
-
-        @Override
-        protected Script produceScript(final TraversalStrategyProxy<?> o) {
-            if (o.getConfiguration().isEmpty()) {
-                return script.append("new " + o.getStrategyClass().getSimpleName() + "()");
-            } else {
-                script.append("new " + o.getStrategyClass().getSimpleName() + "(");
-                final Iterator<String> keys = IteratorUtils.stream(o.getConfiguration().getKeys()).
-                        filter(e -> !e.equals(TraversalStrategy.STRATEGY)).iterator();
-                while (keys.hasNext()) {
-                    final String k = keys.next();
-                    script.append(k);
-                    script.append(": ");
-
-                    // special handle PartitionStrategy since the Set it uses must be of String for readPartitions
-                    if (k.equals("readPartitions") && o.getStrategyClass().equals(PartitionStrategy.class))
-                        produceScriptForHashSet((Set) o.getConfiguration().getProperty(k), "string");
-                    else
-                        convertToScript(o.getConfiguration().getProperty(k));
-
-                    if (keys.hasNext())
-                        script.append(", ");
-                }
-
-                return script.append(")");
-            }
-        }
-
-        private Script produceKeyValuesForMap(final Map<?,?> m) {
-            final Iterator<? extends Map.Entry<?, ?>> itty = m.entrySet().iterator();
-            while (itty.hasNext()) {
-                final Map.Entry<?,?> entry = itty.next();
-                script.append("{");
-                convertToScript(entry.getKey());
-                script.append(", ");
-                convertToScript(entry.getValue());
-                script.append("}");
-                if (itty.hasNext())
-                    script.append(", ");
-            }
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final String traversalSource, final GremlinLang o) {
-            script.append(traversalSource);
-            int instructionPosition = 0;
-            for (final GremlinLang.Instruction instruction : o.getInstructions()) {
-                final String methodName = instruction.getOperator();
-                // perhaps too many if/then conditions for specifying generics. doesnt' seem like there is a clear
-                // way to refactor this more nicely though.
-                //
-                // inject() only has types when called with it when its used as a start step
-                if (0 == instruction.getArguments().length) {
-                    if (methodName.equals(GraphTraversal.Symbols.fold) && o.getSourceInstructions().size() + o.getStepInstructions().size() > 1 ||
-                            (methodName.equals(GraphTraversal.Symbols.inject) && instructionPosition > 0))
-                        script.append(".").append(resolveSymbol(methodName).replace("<object>", "")).append("()");
-                    else if (stringMethodsWithScopes.contains(methodName))
-                        // string functions with doesn't use generics if no scope is specified
-                        script.append(".").append(resolveSymbol(methodName).replace("<object>", "")).append("()");
-                    else
-                        script.append(".").append(resolveSymbol(methodName)).append("()");
-                } else {
-                    if (methodsWithArgsNotNeedingGeneric.contains(methodName) ||
-                            (methodName.equals(GraphTraversal.Symbols.inject) && (Arrays.stream(instruction.getArguments()).noneMatch(Objects::isNull) || instructionPosition > 0)) ||
-                            (stringMethodsWithScopes.contains(methodName) && (Arrays.stream(instruction.getArguments()).noneMatch(EnumUtils.getEnumList(Scope.class)::contains))))
-                        script.append(".").append(resolveSymbol(methodName).replace("<object>", "").replace("<object,object>", "")).append("(");
-                    else
-                        script.append(".").append(resolveSymbol(methodName)).append("(");
-
-                    // have to special case withSack() because UnaryOperator and BinaryOperator signatures
-                    // make it impossible for the interpreter to figure out which function to call. specifically we need
-                    // to discern between:
-                    //     withSack(A initialValue, UnaryOperator<A> splitOperator)
-                    //     withSack(A initialValue, BinaryOperator<A> splitOperator)
-                    // and:
-                    //     withSack(Supplier<A> initialValue, UnaryOperator<A> mergeOperator)
-                    //     withSack(Supplier<A> initialValue, BinaryOperator<A> mergeOperator)
-                    if (methodName.equals(TraversalSource.Symbols.withSack) &&
-                            instruction.getArguments().length == 2 && instruction.getArguments()[1] instanceof Lambda) {
-                        final String castFirstArgTo = instruction.getArguments()[0] instanceof Lambda ? "ISupplier" : "";
-                        final Lambda secondArg = (Lambda) instruction.getArguments()[1];
-                        final String castSecondArgTo = secondArg.getLambdaArguments() == 1 ? "IUnaryOperator" : "IBinaryOperator";
-                        if (!castFirstArgTo.isEmpty())
-                            script.append(String.format("(%s) ", castFirstArgTo));
-                        convertToScript(instruction.getArguments()[0]);
-                        script.append(", (").append(castSecondArgTo).append(") ");
-                        convertToScript(instruction.getArguments()[1]);
-                        script.append(",");
-                    } else if (methodName.equals(GraphTraversal.Symbols.mergeE) || methodName.equals(GraphTraversal.Symbols.mergeV)) {
-                        // there must be at least one argument - if null go with Map
-                        final Object instArg = instruction.getArguments()[0];
-                        if (null == instArg) {
-                            script.append("(IDictionary<object,object>) null");
-                        } else {
-                            if (instArg instanceof Traversal || instArg instanceof GremlinLang) {
-                                script.append("(ITraversal) ");
-                            } else {
-                                script.append("(IDictionary<object,object>) ");
-                            }
-                            convertToScript(instArg);
-                        }
-                        script.append(",");
-                    } else if (methodName.equals(GraphTraversalSource.Symbols.tx)) {
-                        final String command = resolveSymbol(instruction.getArguments()[0].toString());
-                        script.append(").").append(command).append("()");
-                    } else if (methodName.equals(GraphTraversal.Symbols.call)) {
-                        // call()
-                        // call(String)
-                        // call(String, Map)
-                        // call(String, Traversal)
-                        // call(String, Map, Traversal)
-                        final Object[] instArgs = instruction.getArguments();
-                        if (instArgs.length > 0) {
-                            // [0] always String
-                            convertToScript(instArgs[0]);
-                            script.append(",");
-                        }
-                        if (instArgs.length > 1) {
-                            // [1] could be Map or Traversal
-                            if (instArgs[1] instanceof Traversal || instArgs[1] instanceof GremlinLang) {
-                                script.append("(ITraversal) ");
-                            } else {
-                                script.append("(IDictionary<object,object>) ");
-                            }
-                            convertToScript(instArgs[1]);
-                            script.append(",");
-                        }
-                        if (instArgs.length > 2) {
-                            // [2] always Traversal
-                            script.append("(ITraversal) ");
-                            convertToScript(instArgs[2]);
-                            script.append(",");
-                        }
-                    } else if (methodName.equals(GraphTraversal.Symbols.option) &&
-                            instruction.getArguments().length == 2 && instruction.getArguments()[0] instanceof Merge) {
-                        final Object[] instArgs = instruction.getArguments();
-                        // trying to catch option(Merge,Traversal|Map)
-                        convertToScript(instArgs[0]);
-                        script.append(", ");
-                        if (instArgs[1] instanceof Traversal || instArgs[1] instanceof GremlinLang) {
-                            script.append("(ITraversal) ");
-                        } else {
-                            script.append("(IDictionary<object,object>) ");
-                        }
-                        convertToScript(instArgs[1]);
-                        script.append(",");
-                    } else {
-                        final Object[] instArgs = instruction.getArguments();
-                        for (int idx = 0; idx < instArgs.length; idx++) {
-                            final Object instArg = instArgs[idx];
-                            // overloads might have trouble with null in calling the right one. add more as we find
-                            // them i guess
-                            if (null == instArg) {
-                                if ((methodName.equals(GraphTraversal.Symbols.addV) && idx % 2 == 0) ||
-                                        (methodName.equals(GraphTraversal.Symbols.hasLabel) && instArgs.length == 1 && idx == 0) ||
-                                        (methodName.equals(GraphTraversal.Symbols.hasKey) && instArgs.length == 1 && idx == 0)) {
-                                    script.append("(string) ");
-                                } else if (methodName.equals(GraphTraversal.Symbols.hasValue) && idx == 0) {
-                                    script.append("(object) ");
-                                } else if (methodName.equals(GraphTraversal.Symbols.has)) {
-                                    if (instArgs.length == 2) {
-                                        if (null == instArgs[0] && idx == 0) {
-                                            // need to avoid a null T accessor or else GraphTraversal gets
-                                            // IllegalArgumentException and when called by way of reflection through
-                                            // JavaTranslator
-                                            script.append("(string)" );
-                                        } else if ((instArgs[0] instanceof T || instArgs[0] instanceof String) && idx == 1) {
-                                            script.append("(object) ");
-                                        }
-                                    } else if (instArgs.length == 3) {
-                                        if ((instArgs[0] instanceof T || instArgs[0] instanceof String) && idx == 1) {
-                                            script.append("(string) ");
-                                        } else if ((instArgs[0] instanceof T || instArgs[0] instanceof String) && idx == 2) {
-                                            script.append("(object) ");
-                                        }
-                                    }
-                                } else if (methodName.equals(GraphTraversal.Symbols.property)) {
-                                    if (instArgs[0] instanceof VertexProperty.Cardinality && instArgs.length == 3) {
-                                        script.append("(object) ");
-                                    }
-                                }
-                            }
-                            convertToScript(instArg);
-                            script.append(",");
-                        }
-                    }
-                    script.setCharAtEnd(')');
-                }
-                instructionPosition++;
-            }
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final P<?> p) {
-            if (p instanceof TextP) {
-                script.append("TextP.").append(SymbolHelper.toCSharp(p.getPredicateName())).append("(");
-                convertToScript(p.getValue());
-            } else if (p instanceof ConnectiveP) {
-                // ConnectiveP gets some special handling because it's reduced to and(P, P, P) and we want it
-                // generated the way it was written which was P.and(P).and(P)
-                final List<P<?>> list = ((ConnectiveP) p).getPredicates();
-                final String connector = p instanceof OrP ? "Or" : "And";
-                for (int i = 0; i < list.size(); i++) {
-                    produceScript(list.get(i));
-
-                    // for the first/last P there is no parent to close
-                    if (i > 0 && i < list.size() - 1) script.append(")");
-
-                    // add teh connector for all but last P
-                    if (i < list.size() - 1) {
-                        script.append(".").append(connector).append("(");
-                    }
-                }
-            } else {
-                script.append("P.").append(SymbolHelper.toCSharp(p.getPredicateName())).append("(");
-                convertToScript(p.getValue());
-            }
-            script.append(")");
-            return script;
-        }
-
-        protected String resolveSymbol(final String methodName) {
-            return SymbolHelper.toCSharp(methodName);
-        }
-    }
-
-    static final class SymbolHelper {
-
-        private final static Map<String, String> TO_CS_MAP = new HashMap<>();
-        private final static Map<String, String> FROM_CS_MAP = new HashMap<>();
-
-        static {
-            TO_CS_MAP.put(GraphTraversal.Symbols.asString, "AsString<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.branch, "Branch<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.call, "Call<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.cap, "Cap<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.choose, "Choose<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.coalesce, "Coalesce<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.constant, "Constant<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.elementMap, "ElementMap<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.flatMap, "FlatMap<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.fold, "Fold<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.group, "Group<object,object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.groupCount, "GroupCount<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.index, "Index<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.inject, "Inject<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.io, "Io<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.length, "Length<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.limit, "Limit<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.local, "Local<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.lTrim, "LTrim<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.match, "Match<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.map, "Map<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.max, "Max<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.min, "Min<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.mean, "Mean<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.optional, "Optional<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.project, "Project<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.properties, "Properties<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.range, "Range<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.replace, "Replace<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.rTrim, "RTrim<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.sack, "Sack<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.select, "Select<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.skip, "Skip<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.split, "Split<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.substring, "Substring<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.sum, "Sum<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.tail, "Tail<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.toLower, "ToLower<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.toUpper, "ToUpper<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.trim, "Trim<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.unfold, "Unfold<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.union, "Union<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.value, "Value<object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.valueMap, "ValueMap<object,object>");
-            TO_CS_MAP.put(GraphTraversal.Symbols.values, "Values<object>");
-            //
-            TO_CS_MAP.forEach((k, v) -> FROM_CS_MAP.put(v, k));
-        }
-
-        private SymbolHelper() {
-            // static methods only, do not instantiate
-        }
-
-        public static String toCSharp(final String symbol) {
-            return TO_CS_MAP.getOrDefault(symbol, symbol.substring(0,1).toUpperCase() + symbol.substring(1));
-        }
-
-        public static String toJava(final String symbol) {
-            return FROM_CS_MAP.getOrDefault(symbol, symbol.substring(0,1).toLowerCase() + symbol.substring(1));
-        }
-
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslator.java
deleted file mode 100644
index c04cc58b92..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslator.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.text.StringEscapeUtils;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pick;
-import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.util.NumberHelper;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * Translates Gremlin {@link GremlinLang} into a Golang string representation.
- *
- * @author Simon Zhao (simonz@bitquilltech.com)
- */
-public final class GolangTranslator implements Translator.ScriptTranslator {
-    private final String traversalSource;
-    private final TypeTranslator typeTranslator;
-    private final static String GO_PACKAGE_NAME = "gremlingo.";
-
-    private GolangTranslator(final String traversalSource, final TypeTranslator typeTranslator) {
-        this.traversalSource = traversalSource;
-        this.typeTranslator = typeTranslator;
-    }
-
-    /**
-     * Creates the translator with a {@code false} argument to {@code withParameters} using
-     * {@link #of(String, boolean)}.
-     */
-    public static GolangTranslator of(final String traversalSource) {
-        return of(traversalSource, false);
-    }
-
-    /**
-     * Creates the translator with the {@link DefaultTypeTranslator} passing the {@code withParameters} option to it
-     * which will handle type translation in a fashion that should typically increase cache hits and reduce
-     * compilation times if enabled at the sacrifice to rewriting of the script that could reduce readability.
-     */
-    public static GolangTranslator of(final String traversalSource, final boolean withParameters) {
-        return of(traversalSource, new DefaultTypeTranslator(withParameters));
-    }
-
-    /**
-     * Creates the translator with a custom {@link TypeTranslator} instance.
-     */
-    public static GolangTranslator of(final String traversalSource, final TypeTranslator typeTranslator) {
-        return new GolangTranslator(traversalSource, typeTranslator);
-    }
-
-    @Override
-    public String getTraversalSource() {
-        return this.traversalSource;
-    }
-
-    @Override
-    public Script translate(final GremlinLang bytecode) {
-        return typeTranslator.apply(traversalSource, bytecode);
-    }
-
-    @Override
-    public String getTargetLanguage() {
-        return "gremlin-go";
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.translatorString(this);
-    }
-
-    /**
-     * Performs standard type translation for the TinkerPop types to Go.
-     */
-    public static class DefaultTypeTranslator extends AbstractTypeTranslator {
-
-        public DefaultTypeTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected String getNullSyntax() {
-            return "nil";
-        }
-
-        @Override
-        protected String getSyntax(final String o) {
-            return "\"" + StringEscapeUtils.escapeJava(o) + "\"";
-        }
-
-        @Override
-        protected String getSyntax(final Boolean o) {
-            return o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Date o) {
-            return "time.UnixMilli(" + o.getTime() + ")";
-        }
-
-        @Override
-        protected String getSyntax(final Timestamp o) {
-            return "time.UnixMilli(" + o.getTime() + ")";
-        }
-
-        @Override
-        protected String getSyntax(final UUID o) {
-            return "uuid.MustParse(\"" + o.toString() + "\")";
-        }
-
-        @Override
-        protected String getSyntax(final Lambda o) {
-            return "&gremlingo.Lambda{Script:\"" + o.getLambdaScript().trim() + "\", Language:\"\"}";
-        }
-
-        @Override
-        protected String getSyntax(final Number o) {
-            if (o instanceof Float || o instanceof Double) {
-                if (NumberHelper.isNaN(o))
-                    return "math.NaN()";
-                else if (NumberHelper.isPositiveInfinity(o))
-                    return "math.Inf(1)";
-                else if (NumberHelper.isNegativeInfinity(o))
-                    return "math.Inf(-11)";
-            }
-            return o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final SackFunctions.Barrier o) {
-            return GO_PACKAGE_NAME + "Barrier." + resolveSymbol(o.toString());
-        }
-
-        @Override
-        protected String getSyntax(final VertexProperty.Cardinality o) {
-            return GO_PACKAGE_NAME + "Cardinality." + resolveSymbol(o.toString());
-        }
-
-        @Override
-        protected String getSyntax(final Pick o) {
-            return GO_PACKAGE_NAME + "Pick." + resolveSymbol(o.toString());
-        }
-
-        @Override
-        protected Script produceCardinalityValue(final GremlinLang o) {
-            final GremlinLang.Instruction inst = o.getSourceInstructions().get(0);
-            final String card = inst.getArguments()[0].toString();
-            script.append(GO_PACKAGE_NAME + "CardinalityValue." + card.substring(0, 1).toUpperCase() + card.substring(1) + "(");
-            convertToScript(inst.getArguments()[1]);
-            script.append(")");
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final Set<?> o) {
-            final Iterator<?> iterator = o.iterator();
-            script.append(GO_PACKAGE_NAME + "NewSimpleSet(");
-            while(iterator.hasNext()) {
-                convertToScript(iterator.next());
-                if (iterator.hasNext())
-                    script.append(", ");
-            }
-            return script.append(")");
-        }
-
-        @Override
-        protected Script produceScript(final List<?> o) {
-            final Iterator<?> iterator = o.iterator();
-            script.append("[]interface{}{");
-            while(iterator.hasNext()) {
-                convertToScript(iterator.next());
-                if (iterator.hasNext())
-                    script.append(", ");
-            }
-            script.append("}");
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final Map<?, ?> o) {
-            script.append("map[interface{}]interface{}{");
-            final Iterator<? extends Map.Entry<?, ?>> itty = o.entrySet().iterator();
-            while (itty.hasNext()) {
-                final Map.Entry<?,?> entry = itty.next();
-                convertToScript(entry.getKey()).append(": ");
-                convertToScript(entry.getValue());
-                if (itty.hasNext())
-                    script.append(", ");
-            }
-            return script.append("}");
-        }
-
-        @Override
-        protected Script produceScript(final Class<?> o) {
-            return script.append(o.getCanonicalName());
-        }
-
-        @Override
-        protected Script produceScript(final Enum<?> o) {
-            return script.append(GO_PACKAGE_NAME + o.getDeclaringClass().getSimpleName() + "." + resolveSymbol(o.toString()));
-        }
-
-        @Override
-        protected Script produceScript(final Vertex o) {
-            script.append(GO_PACKAGE_NAME + "Vertex{Element{");
-            convertToScript(o.id()).append(", ");
-            return convertToScript(o.label()).append("}}");
-        }
-
-        @Override
-        protected Script produceScript(final Edge o) {
-            script.append(GO_PACKAGE_NAME + "Edge{Element{");
-            convertToScript(o.id()).append(", ");
-            convertToScript(o.label()).append("}, ");
-            convertToScript(o.outVertex()).append(",");
-            return convertToScript(o.inVertex()).append("}");
-        }
-
-        @Override
-        protected Script produceScript(final VertexProperty<?> o) {
-            script.append(GO_PACKAGE_NAME + "VertexProperty{");
-            convertToScript(o.id()).append(", ");
-            convertToScript(o.label()).append("}, ");
-            return convertToScript(o.value()).append("}");
-        }
-
-        @Override
-        protected Script produceScript(final TraversalStrategyProxy<?> o) {
-            if (o.getConfiguration().isEmpty()) {
-                return script.append(GO_PACKAGE_NAME + o.getStrategyClass().getSimpleName() + "()");
-            } else {
-                script.append(GO_PACKAGE_NAME + o.getStrategyClass().getSimpleName() + "(");
-                script.append(GO_PACKAGE_NAME + o.getStrategyClass().getSimpleName() + "Config{");
-                final Iterator<String> keys = IteratorUtils.stream(o.getConfiguration().getKeys()).
-                    filter(e -> !e.equals(TraversalStrategy.STRATEGY)).iterator();
-                while (keys.hasNext()) {
-                    final String k = keys.next();
-                    script.append(SymbolHelper.toGolang(k));
-                    script.append(": ");
-
-                    if (o.getConfiguration().getProperty(k) instanceof List) {
-                        List<Object> list =(List<Object>) o.getConfiguration().getProperty(k);
-                        Iterator iterator = list.iterator();
-                        script.append("[]string{");
-                        while(iterator.hasNext()) {
-                            convertToScript(iterator.next());
-                            if (iterator.hasNext())
-                                script.append(", ");
-                        }
-                        script.append("}");
-                    } else if (o.getConfiguration().getProperty(k) == null) {
-                        script.append("nil");
-                    } else {
-                        convertToScript(o.getConfiguration().getProperty(k));
-                    }
-                    if (keys.hasNext())
-                        script.append(", ");
-                }
-                return script.append("})");
-            }
-        }
-
-        @Override
-        protected Script produceScript(final String traversalSource, final GremlinLang o) {
-            final String source = traversalSource.equals("__") ? GO_PACKAGE_NAME + "T__" : traversalSource;
-            script.append(source);
-            for (final GremlinLang.Instruction instruction : o.getInstructions()) {
-                final String methodName = instruction.getOperator();
-                final Object[] arguments = instruction.getArguments();
-
-                if (methodName.equals(GraphTraversalSource.Symbols.tx)) {
-                    final String command = resolveSymbol(arguments[0].toString());
-                    script.append(".").append(resolveSymbol(methodName)).append("().").append(resolveSymbol(command)).append("()");
-                } else {
-                    script.append(".").append(resolveSymbol(methodName)).append("(");
-
-                    for (int i = 0; i < arguments.length; i++) {
-                        convertToScript(arguments[i]);
-                        if (i != arguments.length - 1) {
-                            script.append(", ");
-                        }
-                    }
-
-                    script.append(")");
-                }
-            }
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final P<?> p) {
-            if (p instanceof TextP) {
-                script.append(GO_PACKAGE_NAME + "TextP.").append(resolveSymbol(p.getPredicateName())).append("(");
-                convertToScript(p.getValue());
-            } else if (p instanceof ConnectiveP) {
-                // ConnectiveP gets some special handling because it's reduced to and(P, P, P) and we want it
-                // generated the way it was written which was P.and(P).and(P)
-                final List<P<?>> list = ((ConnectiveP) p).getPredicates();
-                final String connector = p instanceof OrP ? "Or" : "And";
-                for (int i = 0; i < list.size(); i++) {
-                    produceScript(list.get(i));
-
-                    // For the first/last P there is no parent to close.
-                    if (i > 0 && i < list.size() - 1) {
-                        script.append(")");
-                    }
-
-                    // Add the connector for all but last P.
-                    if (i < list.size() - 1) {
-                        script.append(".").append(connector).append("(");
-                    }
-                }
-            } else {
-                script.append(GO_PACKAGE_NAME + "P.").append(resolveSymbol(p.getPredicateName())).append("(");
-                convertToScript(p.getValue());
-            }
-            script.append(")");
-            return script;
-        }
-
-        protected String resolveSymbol(final String methodName) {
-            return SymbolHelper.toGolang(methodName);
-        }
-    }
-
-    static final class SymbolHelper {
-
-        private final static Map<String, String> TO_GO_MAP = new HashMap<>();
-        private final static Map<String, String> FROM_GO_MAP = new HashMap<>();
-
-        static {
-            TO_GO_MAP.put("OUT", "Out");
-            TO_GO_MAP.put("IN", "In");
-            TO_GO_MAP.put("BOTH", "Both");
-            TO_GO_MAP.forEach((k, v) -> FROM_GO_MAP.put(v, k));
-        }
-
-        private SymbolHelper() {
-            // static methods only, do not instantiate
-        }
-
-        public static String toGolang(final String symbol) {
-            return TO_GO_MAP.getOrDefault(symbol, StringUtils.capitalize(symbol));
-        }
-
-        public static String toJava(final String symbol) {
-            return FROM_GO_MAP.getOrDefault(symbol, StringUtils.uncapitalize(symbol));
-        }
-
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslator.java
deleted file mode 100644
index 80473e8f6d..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslator.java
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.commons.configuration2.ConfigurationConverter;
-import org.apache.commons.text.StringEscapeUtils;
-import org.apache.tinkerpop.gremlin.jsr223.CoreImports;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pick;
-import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
-import org.apache.tinkerpop.gremlin.util.DatetimeHelper;
-import org.apache.tinkerpop.gremlin.util.NumberHelper;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Timestamp;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.stream.Collectors;
-
-/**
- * Converts bytecode to a Groovy string of Gremlin.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- * @author Stark Arya (sandszhou.zj@alibaba-inc.com)
- */
-public final class GroovyTranslator implements Translator.ScriptTranslator {
-
-    private final String traversalSource;
-    private final TypeTranslator typeTranslator;
-
-    private GroovyTranslator(final String traversalSource, final TypeTranslator typeTranslator) {
-        this.traversalSource = traversalSource;
-        this.typeTranslator = typeTranslator;
-    }
-
-    /**
-     * Creates the translator with a {@code false} argument to {@code withParameters} using
-     * {@link #of(String, boolean)}.
-     */
-    public static GroovyTranslator of(final String traversalSource) {
-        return of(traversalSource, false);
-    }
-
-    /**
-     * Creates the translator with the {@link DefaultTypeTranslator} passing the {@code withParameters} option to it
-     * which will handle type translation in a fashion that should typically increase cache hits and reduce
-     * compilation times if enabled at the sacrifice to rewriting of the script that could reduce readability.
-     */
-    public static GroovyTranslator of(final String traversalSource, final boolean withParameters) {
-        return of(traversalSource, new DefaultTypeTranslator(withParameters));
-    }
-
-    /**
-     * Creates the translator with a custom {@link TypeTranslator} instance.
-     */
-    public static GroovyTranslator of(final String traversalSource, final TypeTranslator typeTranslator) {
-        return new GroovyTranslator(traversalSource, typeTranslator);
-    }
-
-    @Override
-    public Script translate(final GremlinLang bytecode) {
-        return typeTranslator.apply(traversalSource, bytecode);
-    }
-
-    @Override
-    public String getTargetLanguage() {
-        return "gremlin-groovy";
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.translatorString(this);
-    }
-
-    @Override
-    public String getTraversalSource() {
-        return this.traversalSource;
-    }
-
-    /**
-     * Performs standard type translation for the TinkerPop types to Groovy.
-     */
-    public static class DefaultTypeTranslator extends AbstractTypeTranslator {
-
-        public DefaultTypeTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected String getNullSyntax() {
-            return "null";
-        }
-
-        @Override
-        protected String getSyntax(final String o) {
-            return (o.contains("\"") ? "\"\"\"" + StringEscapeUtils.escapeJava(o) + "\"\"\"" : "\"" + StringEscapeUtils.escapeJava(o) + "\"")
-                    .replace("$", "\\$");
-        }
-
-        @Override
-        protected String getSyntax(final Boolean o) {
-            return o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Date o) {
-            return "new Date(" + o.getTime() + "L)";
-        }
-
-        @Override
-        protected String getSyntax(final Timestamp o) {
-            return "new Timestamp(" + o.getTime() + "L)";
-        }
-
-        @Override
-        protected String getSyntax(final UUID o) {
-            return "UUID.fromString('" + o.toString() + "')";
-        }
-
-        @Override
-        protected String getSyntax(final Lambda o) {
-            final String lambdaString = o.getLambdaScript().trim();
-            return lambdaString.startsWith("{") ? lambdaString : "{" + lambdaString + "}";
-        }
-
-        @Override
-        protected String getSyntax(final SackFunctions.Barrier o) {
-            return "SackFunctions.Barrier." + o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final VertexProperty.Cardinality o) {
-            return "VertexProperty.Cardinality." + o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Pick o) {
-            return "Pick." + o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Number o) {
-            if (o instanceof Double || o instanceof Float) {
-                if (NumberHelper.isNaN(o))
-                    return (o instanceof Double ? "Double" : "Float") + ".NaN";
-                if (NumberHelper.isPositiveInfinity(o))
-                    return (o instanceof Double ? "Double" : "Float") + ".POSITIVE_INFINITY";
-                if (NumberHelper.isNegativeInfinity(o))
-                    return (o instanceof Double ? "Double" : "Float") + ".NEGATIVE_INFINITY";
-
-                return o + (o instanceof Double ? "d" : "f");
-            }
-            if (o instanceof Long)
-                return o + "L";
-            if (o instanceof Integer)
-                return "(int) " + o;
-            if (o instanceof Byte)
-                return "(byte) " + o;
-            if (o instanceof Short)
-                return "(short) " + o;
-            if (o instanceof BigInteger)
-                return "new BigInteger('" + o.toString() + "')";
-            if (o instanceof BigDecimal)
-                return "new BigDecimal('" + o.toString() + "')";
-
-            return o.toString();
-        }
-
-        @Override
-        protected Script produceCardinalityValue(final GremlinLang o) {
-            final GremlinLang.Instruction inst = o.getSourceInstructions().get(0);
-            script.append("VertexProperty.Cardinality." + inst.getArguments()[0] + "(");
-            convertToScript(inst.getArguments()[1]);
-            script.append(")");
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final Set<?> o) {
-            return produceScript(new ArrayList<>(o)).append(" as Set");
-        }
-
-        @Override
-        protected Script produceScript(final List<?> o) {
-            final Iterator<?> iterator = ((List<?>) o).iterator();
-            script.append("[");
-
-            while (iterator.hasNext()) {
-                final Object nextItem = iterator.next();
-                convertToScript(nextItem);
-                if (iterator.hasNext())
-                    script.append(",").append(" ");
-            }
-
-            return script.append("]");
-        }
-
-        @Override
-        protected Script produceScript(final Map<?, ?> o) {
-            script.append("[");
-            final Iterator<? extends Map.Entry<?, ?>> itty = ((Map<?, ?>) o).entrySet().iterator();
-            while (itty.hasNext()) {
-                final Map.Entry<?,?> entry = itty.next();
-                final Object k = entry.getKey();
-                final boolean wrap = !(k instanceof String);
-                if (wrap) script.append("(");
-                convertToScript(entry.getKey());
-                if (wrap) script.append(")");
-                script.append(":");
-                convertToScript(entry.getValue());
-                if (itty.hasNext())
-                    script.append(",");
-            }
-            return script.append("]");
-        }
-
-        /**
-         * Gets the string representation of a class with the default implementation simply checking to see if the
-         * {@code Class} is in {@link CoreImports} or not. If it is present that means it can be referenced using the
-         * simple name otherwise it uses the canonical name.
-         * <p/>
-         * Those building custom {@link ScriptTranslator} instances might override this if they have other classes
-         * that are not in {@link CoreImports} by default.
-         */
-        @Override
-        protected Script produceScript(final Class<?> o) {
-            return script.append(CoreImports.getClassImports().contains(o) ? o.getSimpleName() : o.getCanonicalName());
-        }
-
-        @Override
-        protected Script produceScript(final Enum<?> o) {
-            return script.append(o.getDeclaringClass().getSimpleName() + "." + o.toString());
-        }
-
-        @Override
-        protected Script produceScript(final Vertex o) {
-            script.append("new ReferenceVertex(");
-            convertToScript(o.id());
-            script.append(",");
-            convertToScript(o.label());
-            return script.append(")");
-        }
-
-        @Override
-        protected Script produceScript(final Edge o) {
-            script.append("new ReferenceEdge(");
-            convertToScript(o.id());
-            script.append(",");
-            convertToScript(o.label());
-            script.append(",new ReferenceVertex(");
-            convertToScript(o.inVertex().id());
-            script.append(",");
-            convertToScript(o.inVertex().label());
-            script.append("),new ReferenceVertex(");
-            convertToScript(o.outVertex().id());
-            script.append(",");
-            convertToScript(o.outVertex().label());
-            return script.append("))");
-        }
-
-        @Override
-        protected Script produceScript(final VertexProperty<?> o) {
-            script.append("new ReferenceVertexProperty(");
-            convertToScript(o.id());
-            script.append(",");
-            convertToScript(o.label());
-            script.append(",");
-            convertToScript(o.value());
-            return script.append(")");
-        }
-
-        @Override
-        protected Script produceScript(final TraversalStrategyProxy<?> o) {
-            if (o.getConfiguration().isEmpty()) {
-                return produceScript(o.getStrategyClass());
-            } else {
-                script.append("new ");
-                produceScript(o.getStrategyClass());
-                script.append("(");
-
-                final Iterator<Map.Entry<Object,Object>> itty = ConfigurationConverter.getMap(
-                        o.getConfiguration()).entrySet().iterator();
-                while (itty.hasNext()) {
-                    final Map.Entry<Object,Object> entry = itty.next();
-                    script.append(entry.getKey().toString());
-                    script.append(": ");
-                    convertToScript(entry.getValue());
-                    if (itty.hasNext()) script.append(", ");
-                }
-
-                return script.append(")");
-            }
-        }
-
-        @Override
-        protected Script produceScript(final String traversalSource, final GremlinLang bytecode) {
-            script.append(traversalSource);
-            for (final GremlinLang.Instruction instruction : bytecode.getInstructions()) {
-                final String methodName = instruction.getOperator();
-                if (0 == instruction.getArguments().length) {
-                    script.append(".").append(methodName).append("()");
-                } else {
-                    script.append(".").append(methodName).append("(");
-
-                    // special case inject(null, null) or else groovy might guess the JDK collection extension form
-                    if (methodName.equals(GraphTraversal.Symbols.inject)) {
-                        final Iterator<Object> itty = Arrays.stream(instruction.getArguments()).iterator();
-                        while (itty.hasNext()) {
-                            final Object o = itty.next();
-                            if (null == o) script.append("(Object)");
-                            convertToScript(o);
-                            if (itty.hasNext()) script.append(",");
-                        }
-                    } else if (methodName.equals(GraphTraversalSource.Symbols.tx)) {
-                        final String command = instruction.getArguments()[0].toString();
-                        script.append(").").append(command).append("(");
-                    } else {
-                        final Iterator<Object> itty = Arrays.stream(instruction.getArguments()).iterator();
-                        while (itty.hasNext()) {
-                            convertToScript(itty.next());
-                            if (itty.hasNext()) script.append(",");
-                        }
-                    }
-                    script.append(")");
-                }
-            }
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final P<?> p) {
-            if (p instanceof TextP) {
-                script.append("TextP.").append(p.getPredicateName()).append("(");
-                convertToScript(p.getValue());
-            } else if (p instanceof ConnectiveP) {
-                // ConnectiveP gets some special handling because it's reduced to and(P, P, P) and we want it
-                // generated the way it was written which was P.and(P).and(P)
-                final List<P<?>> list = ((ConnectiveP) p).getPredicates();
-                final String connector = p.getPredicateName();
-                for (int i = 0; i < list.size(); i++) {
-                    produceScript(list.get(i));
-
-                    // for the first/last P there is no parent to close
-                    if (i > 0 && i < list.size() - 1) script.append(")");
-
-                    // add teh connector for all but last P
-                    if (i < list.size() - 1) {
-                        script.append(".").append(connector).append("(");
-                    }
-                }
-            } else {
-                script.append("P.").append(p.getPredicateName()).append("(");
-                convertToScript(p.getValue());
-            }
-            script.append(")");
-            return script;
-        }
-
-        private String convertMapToArguments(final Map<Object,Object> map) {
-            return map.entrySet().stream().map(entry ->
-                String.format("%s: %s", entry.getKey().toString(), convertToScript(entry.getValue()))).
-                    collect(Collectors.joining(", "));
-        }
-    }
-
-    /**
-     * An extension of the {@link DefaultTypeTranslator} that generates Gremlin that is compliant with
-     * {@code gremlin-language} scripts. Specifically, it will convert {@code Date} and {@code Timestamp} to use the
-     * {@code datetime()} function. Time zone offsets are resolved to where {@code 2018-03-22T00:35:44.741+1600}
-     * would be converted to {@code datetime('2018-03-21T08:35:44.741Z')}. More commonly {@code 2018-03-22} would simply
-     * generate {@code datetime('2018-03-22T00:00:00Z')}.
-     * <p/>
-     * In addition, it prefers use of {@code Vertex} when producing a {@link ReferenceVertex}.
-     */
-    public static class LanguageTypeTranslator extends DefaultTypeTranslator {
-        public LanguageTypeTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected String getSyntax(final Date o) {
-            return getDatetimeSyntax(o.toInstant());
-        }
-
-        @Override
-        protected String getSyntax(final Timestamp o) {
-            return getDatetimeSyntax(o.toInstant());
-        }
-
-        @Override
-        protected Script produceScript(final Vertex o) {
-            script.append("new Vertex(");
-            convertToScript(o.id());
-            script.append(",");
-            convertToScript(o.label());
-            return script.append(")");
-        }
-
-        @Override
-        protected String getSyntax(final Number o) {
-            if (o instanceof Double || o instanceof Float) {
-                if (NumberHelper.isNaN(o))
-                    return "NaN";
-                if (NumberHelper.isPositiveInfinity(o))
-                    return "Infinity";
-                if (NumberHelper.isNegativeInfinity(o))
-                    return "-Infinity";
-
-                return o + (o instanceof Double ? "D" : "F");
-            }
-            if (o instanceof Long)
-                return o + "L";
-            if (o instanceof Integer)
-                return o + "I";
-            if (o instanceof Byte)
-                return o + "B";
-            if (o instanceof Short)
-                return o + "S";
-            if (o instanceof BigInteger)
-                return o + "N";
-            if (o instanceof BigDecimal)
-                return o + "D";
-
-            return o.toString();
-        }
-
-        private static String getDatetimeSyntax(final Instant i) {
-            return String.format("datetime('%s')", DatetimeHelper.format(i));
-        }
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslator.java
deleted file mode 100644
index f1d91cddb8..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslator.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.commons.configuration2.ConfigurationConverter;
-import org.apache.commons.text.StringEscapeUtils;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pick;
-import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.util.NumberHelper;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.function.BinaryOperator;
-import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
-
-/**
- * Converts bytecode to a Javascript string of Gremlin.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public final class JavascriptTranslator implements Translator.ScriptTranslator {
-
-    private final String traversalSource;
-    private final TypeTranslator typeTranslator;
-
-    private JavascriptTranslator(final String traversalSource, final TypeTranslator typeTranslator) {
-        this.traversalSource = traversalSource;
-        this.typeTranslator = typeTranslator;
-    }
-
-    /**
-     * Creates the translator with a {@code false} argument to {@code withParameters} using
-     * {@link #of(String, boolean)}.
-     */
-    public static JavascriptTranslator of(final String traversalSource) {
-        return of(traversalSource, false);
-    }
-
-    /**
-     * Creates the translator with the {@link DefaultTypeTranslator} passing the {@code withParameters} option to it
-     * which will handle type translation in a fashion that should typically increase cache hits and reduce
-     * compilation times if enabled at the sacrifice to rewriting of the script that could reduce readability.
-     */
-    public static JavascriptTranslator of(final String traversalSource, final boolean withParameters) {
-        return of(traversalSource, new DefaultTypeTranslator(withParameters));
-    }
-
-    /**
-     * Creates the translator with a custom {@link TypeTranslator} instance.
-     */
-    public static JavascriptTranslator of(final String traversalSource, final TypeTranslator typeTranslator) {
-        return new JavascriptTranslator(traversalSource, typeTranslator);
-    }
-
-    @Override
-    public Script translate(final GremlinLang bytecode) {
-        return typeTranslator.apply(traversalSource, bytecode);
-    }
-
-    @Override
-    public String getTargetLanguage() {
-        return "gremlin-javascript";
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.translatorString(this);
-    }
-
-    @Override
-    public String getTraversalSource() {
-        return this.traversalSource;
-    }
-
-    /**
-     * Performs standard type translation for the TinkerPop types to Javascript.
-     */
-    public static class DefaultTypeTranslator extends AbstractTypeTranslator {
-
-        public DefaultTypeTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected String getNullSyntax() {
-            return "null";
-        }
-
-        @Override
-        protected String getSyntax(final String o) {
-            return (o.contains("\"") ? "\"\"\"" + StringEscapeUtils.escapeJava(o) + "\"\"\"" : "\"" + StringEscapeUtils.escapeJava(o) + "\"")
-                    .replace("$", "\\$");
-        }
-
-        @Override
-        protected String getSyntax(final Boolean o) {
-            return o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Date o) {
-            return "new Date(" + o.getTime() + ")";
-        }
-
-        @Override
-        protected String getSyntax(final Timestamp o) {
-            return "new Date(" + o.getTime() + ")";
-        }
-
-        @Override
-        protected String getSyntax(final UUID o) {
-            return "'" + o.toString() + "'";
-        }
-
-        @Override
-        protected String getSyntax(final Lambda o) {
-            return "() => \"" + StringEscapeUtils.escapeEcmaScript(o.getLambdaScript().trim()) + "\"";
-        }
-
-        @Override
-        protected String getSyntax(final SackFunctions.Barrier o) {
-            return "Barrier." + o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final VertexProperty.Cardinality o) {
-            return "Cardinality." + o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Pick o) {
-            return "Pick." + o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final Number o) {
-            if (o instanceof Float || o instanceof Double) {
-                if (NumberHelper.isNaN(o))
-                    return "Number.NaN";
-                if (NumberHelper.isPositiveInfinity(o))
-                    return "Number.POSITIVE_INFINITY";
-                if (NumberHelper.isNegativeInfinity(o))
-                    return "Number.NEGATIVE_INFINITY";
-            }
-            return o.toString();
-        }
-
-        @Override
-        protected Script produceCardinalityValue(final GremlinLang o) {
-            final GremlinLang.Instruction inst = o.getSourceInstructions().get(0);
-            script.append("CardinalityValue." + inst.getArguments()[0] + "(");
-            convertToScript(inst.getArguments()[1]);
-            script.append(")");
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final Set<?> o) {
-            return produceScript(new ArrayList<>(o));
-        }
-
-        @Override
-        protected Script produceScript(final List<?> o) {
-            final Iterator<?> iterator = ((List<?>) o).iterator();
-            script.append("[");
-
-            while (iterator.hasNext()) {
-                final Object nextItem = iterator.next();
-                convertToScript(nextItem);
-                if (iterator.hasNext())
-                    script.append(",").append(" ");
-            }
-
-            return script.append("]");
-        }
-
-        @Override
-        protected Script produceScript(final Map<?, ?> o) {
-            script.append("new Map([");
-            final Iterator<? extends Map.Entry<?, ?>> itty = ((Map<?, ?>) o).entrySet().iterator();
-            while (itty.hasNext()) {
-                final Map.Entry<?,?> entry = itty.next();
-                script.append("[");
-                convertToScript(entry.getKey());
-                script.append(",");
-                convertToScript(entry.getValue());
-                script.append("]");
-                if (itty.hasNext())
-                    script.append(",");
-            }
-            return script.append("])");
-        }
-
-        @Override
-        protected Script produceScript(final Class<?> o) {
-            return script.append(o.getCanonicalName());
-        }
-
-        @Override
-        protected Script produceScript(final Enum<?> o) {
-            return script.append(o.getDeclaringClass().getSimpleName() + "." + o.toString());
-        }
-
-        @Override
-        protected Script produceScript(final Vertex o) {
-            script.append("new Vertex(");
-            convertToScript(o.id());
-            script.append(",");
-            convertToScript(o.label());
-            return script.append(", null)");
-        }
-
-        @Override
-        protected Script produceScript(final Edge o) {
-            script.append("new Edge(");
-            convertToScript(o.id());
-            script.append(", new Vertex(");
-            convertToScript(o.outVertex().id());
-            script.append(",");
-            convertToScript(o.outVertex().label());
-            script.append(", null),");
-            convertToScript(o.label());
-            script.append(", new Vertex(");
-            convertToScript(o.inVertex().id());
-            script.append(",");
-            convertToScript(o.inVertex().label());
-            return script.append(",null),null)");
-        }
-
-        @Override
-        protected Script produceScript(final VertexProperty<?> o) {
-            script.append("new Property(");
-            convertToScript(o.id());
-            script.append(",");
-            convertToScript(o.label());
-            script.append(",");
-            convertToScript(o.value());
-            script.append(",");
-            return script.append("null)");
-        }
-
-        @Override
-        protected Script produceScript(final TraversalStrategyProxy<?> o) {
-            if (o.getConfiguration().isEmpty()) {
-                return script.append("new " + o.getStrategyClass().getSimpleName() + "()");
-            } else {
-                script.append("new " + o.getStrategyClass().getSimpleName() + "(");
-                final Map<Object,Object> conf = ConfigurationConverter.getMap(o.getConfiguration());
-                script.append("{");
-                conf.entrySet().stream().filter(entry -> !entry.getKey().equals(TraversalStrategy.STRATEGY)).forEach(entry -> {
-                    script.append(entry.getKey().toString());
-                    script.append(":");
-                    convertToScript(entry.getValue()).getScript();
-                    script.append(",");
-                });
-                script.setCharAtEnd('}');
-                return script.append(")");
-            }
-        }
-
-        @Override
-        protected Script produceScript(final String traversalSource, final GremlinLang o) {
-            script.append(traversalSource);
-            for (final GremlinLang.Instruction instruction : o.getInstructions()) {
-                final String methodName = instruction.getOperator();
-                if (0 == instruction.getArguments().length) {
-                    script.append(".").append(resolveSymbol(methodName)).append("()");
-                } else {
-                    script.append(".").append(resolveSymbol(methodName)).append("(");
-
-                    // have to special case withSack() for Groovy because UnaryOperator and BinaryOperator signatures
-                    // make it impossible for the interpreter to figure out which function to call. specifically we need
-                    // to discern between:
-                    //     withSack(A initialValue, UnaryOperator<A> splitOperator)
-                    //     withSack(A initialValue, BinaryOperator<A> splitOperator)
-                    // and:
-                    //     withSack(Supplier<A> initialValue, UnaryOperator<A> mergeOperator)
-                    //     withSack(Supplier<A> initialValue, BinaryOperator<A> mergeOperator)
-                    if (methodName.equals(TraversalSource.Symbols.withSack) &&
-                            instruction.getArguments().length == 2 && instruction.getArguments()[1] instanceof Lambda) {
-                        final String castFirstArgTo = instruction.getArguments()[0] instanceof Lambda ?
-                                Supplier.class.getName() : "";
-                        final Lambda secondArg = (Lambda) instruction.getArguments()[1];
-                        final String castSecondArgTo = secondArg.getLambdaArguments() == 1 ? UnaryOperator.class.getName() :
-                                BinaryOperator.class.getName();
-                        if (!castFirstArgTo.isEmpty())
-                            script.append(String.format("(%s) ", castFirstArgTo));
-                        convertToScript(instruction.getArguments()[0]);
-                        script.append(", (").append(castSecondArgTo).append(") ");
-                        convertToScript(instruction.getArguments()[1]);
-                        script.append(",");
-                    } else if (methodName.equals(GraphTraversalSource.Symbols.tx)) {
-                        final String command = instruction.getArguments()[0].toString();
-                        script.append(").").append(command).append("()");
-                    } else {
-                        for (final Object object : instruction.getArguments()) {
-                            convertToScript(object);
-                            script.append(",");
-                        }
-                    }
-                    script.setCharAtEnd(')');
-                }
-            }
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final P<?> p) {
-            if (p instanceof TextP) {
-                script.append("TextP.").append(p.getPredicateName()).append("(");
-                convertToScript(p.getValue());
-            } else if (p instanceof ConnectiveP) {
-                // ConnectiveP gets some special handling because it's reduced to and(P, P, P) and we want it
-                // generated the way it was written which was P.and(P).and(P)
-                final List<P<?>> list = ((ConnectiveP) p).getPredicates();
-                final String connector = p.getPredicateName();
-                for (int i = 0; i < list.size(); i++) {
-                    produceScript(list.get(i));
-
-                    // for the first/last P there is no parent to close
-                    if (i > 0 && i < list.size() - 1) script.append(")");
-
-                    // add teh connector for all but last P
-                    if (i < list.size() - 1) {
-                        script.append(".").append(connector).append("(");
-                    }
-                }
-            } else {
-                script.append("P.").append(p.getPredicateName()).append("(");
-                convertToScript(p.getValue());
-            }
-            script.append(")");
-            return script;
-        }
-
-        protected String resolveSymbol(final String methodName) {
-            return SymbolHelper.toJavascript(methodName);
-        }
-    }
-
-    static final class SymbolHelper {
-
-        private final static Map<String, String> TO_JS_MAP = new HashMap<>();
-        private final static Map<String, String> FROM_JS_MAP = new HashMap<>();
-
-        static {
-            TO_JS_MAP.put("from", "from_");
-            TO_JS_MAP.put("in", "in_");
-            TO_JS_MAP.put("with", "with_");
-            //
-            TO_JS_MAP.forEach((k, v) -> FROM_JS_MAP.put(v, k));
-        }
-
-        private SymbolHelper() {
-            // static methods only, do not instantiate
-        }
-
-        public static String toJavascript(final String symbol) {
-            return TO_JS_MAP.getOrDefault(symbol, symbol);
-        }
-
-        public static String toJava(final String symbol) {
-            return FROM_JS_MAP.getOrDefault(symbol, symbol);
-        }
-
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java
deleted file mode 100644
index 3f78e06ea8..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.commons.configuration2.ConfigurationConverter;
-import org.apache.commons.text.StringEscapeUtils;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pick;
-import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.Text;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.util.NumberHelper;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.function.BiPredicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * Translates Gremlin {@link GremlinLang} into a Python string representation.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public final class PythonTranslator implements Translator.ScriptTranslator {
-
-    private static final Set<String> STEP_NAMES = Stream.of(GraphTraversal.class.getMethods()).filter(
-            method -> Traversal.class.isAssignableFrom(method.getReturnType())).map(Method::getName).
-            collect(Collectors.toSet());
-
-    private final String traversalSource;
-    private final TypeTranslator typeTranslator;
-
-    private PythonTranslator(final String traversalSource, final TypeTranslator typeTranslator) {
-        this.traversalSource = traversalSource;
-        this.typeTranslator = typeTranslator;
-    }
-
-    /**
-     * Creates the translator with a {@code false} argument to {@code withParameters} using
-     * {@link #of(String, boolean)}.
-     */
-    public static PythonTranslator of(final String traversalSource) {
-        return of(traversalSource, false);
-    }
-
-    /**
-     * Creates the translator with the {@link DefaultTypeTranslator} passing the {@code withParameters} option to it
-     * which will handle type translation in a fashion that should typically increase cache hits and reduce
-     * compilation times if enabled at the sacrifice to rewriting of the script that could reduce readability.
-     */
-    public static PythonTranslator of(final String traversalSource, final boolean withParameters) {
-        return of(traversalSource, new DefaultTypeTranslator(withParameters));
-    }
-
-    /**
-     * Creates the translator with a custom {@link TypeTranslator} instance.
-     */
-    public static PythonTranslator of(final String traversalSource, final TypeTranslator typeTranslator) {
-        return new PythonTranslator(traversalSource, typeTranslator);
-    }
-
-    @Override
-    public String getTraversalSource() {
-        return this.traversalSource;
-    }
-
-    @Override
-    public Script translate(final GremlinLang bytecode) {
-        return typeTranslator.apply(traversalSource, bytecode);
-    }
-
-    @Override
-    public String getTargetLanguage() {
-        return "gremlin-python";
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.translatorString(this);
-    }
-
-    ///////
-
-    /**
-     * Performs standard type translation for the TinkerPop types to Python.
-     */
-    public static class DefaultTypeTranslator extends AbstractTypeTranslator {
-
-        public DefaultTypeTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected String getNullSyntax() {
-            return "None";
-        }
-
-        @Override
-        protected String getSyntax(final String o) {
-            return o.contains("'") || o.contains(System.lineSeparator()) ?
-                    "\"\"\"" + o + "\"\"\"" : "'" + o + "'";
-        }
-
-        @Override
-        protected String getSyntax(final Boolean o) {
-            return o ? "True" : "False";
-        }
-
-        @Override
-        protected String getSyntax(final Date o) {
-            return "datetime.datetime.utcfromtimestamp(" + o.getTime() + " / 1000.0)";
-        }
-
-        @Override
-        protected String getSyntax(final Timestamp o) {
-            return "timestamp(" + o.getTime() + " / 1000.0)";
-        }
-
-        @Override
-        protected String getSyntax(final UUID o) {
-            return "UUID('" + o.toString() +"')";
-        }
-
-        @Override
-        protected String getSyntax(final Lambda o) {
-            final String lambdaString = o.getLambdaScript().trim();
-            return "lambda: \"" + StringEscapeUtils.escapeJava(lambdaString) + "\"";
-        }
-
-        @Override
-        protected String getSyntax(final Number o) {
-            if (o instanceof Double || o instanceof Float || o instanceof BigDecimal) {
-                if (NumberHelper.isNaN(o))
-                    return "float('nan')";
-                if (NumberHelper.isPositiveInfinity(o))
-                    return "float('inf')";
-                if (NumberHelper.isNegativeInfinity(o))
-                    return "float('-inf')";
-
-                return "float(" + o + ")";
-            }
-            if (o instanceof Byte)
-                return "SingleByte(" + o + ")";
-
-            // for large numbers need to specify the type
-            if (o.longValue() > Integer.MAX_VALUE) {
-                return "long(" + o + ")";
-            }
-            // otherwise just use python int/bignum
-            return o.toString();
-        }
-
-        @Override
-        protected String getSyntax(final SackFunctions.Barrier o) {
-            return "Barrier." + resolveSymbol(o.toString());
-        }
-
-        @Override
-        protected String getSyntax(final VertexProperty.Cardinality o) {
-            return "Cardinality." + resolveSymbol(o.toString());
-        }
-
-        @Override
-        protected String getSyntax(final Pick o) {
-            if (o.equals(Pick.any)) {
-                // Translates to Pick.any_ due to any() being a built-in function in Python.
-                return "Pick.any_";
-            }
-            return "Pick." + resolveSymbol(o.toString());
-        }
-
-        @Override
-        protected Script produceScript(final Set<?> o) {
-            final Iterator<?> iterator = o.iterator();
-            script.append("set((");
-            while(iterator.hasNext()) {
-                convertToScript(iterator.next());
-                if (iterator.hasNext())
-                    script.append(",");
-            }
-            return script.append("))");
-        }
-
-        @Override
-        protected Script produceScript(final List<?> o) {
-            final Iterator<?> iterator = o.iterator();
-            script.append("[");
-            while(iterator.hasNext()) {
-                convertToScript(iterator.next());
-                if (iterator.hasNext())
-                    script.append(",");
-            }
-            return script.append("]");
-        }
-
-        @Override
-        protected Script produceScript(final Map<?, ?> o) {
-            script.append("{");
-            final Iterator<? extends Map.Entry<?, ?>> itty = o.entrySet().iterator();
-            while (itty.hasNext()) {
-                final Map.Entry<?,?> entry = itty.next();
-                convertToScript(entry.getKey()).append(":");
-                convertToScript(entry.getValue());
-                if (itty.hasNext())
-                    script.append(",");
-            }
-            return script.append("}");
-        }
-
-        @Override
-        protected Script produceScript(final Class<?> o) {
-            return script.append("GremlinType('" + o.getCanonicalName() + "')");
-        }
-
-        @Override
-        protected Script produceScript(final Enum<?> o) {
-            return script.append(o.getDeclaringClass().getSimpleName() + "." + resolveSymbol(o.toString()));
-        }
-
-        @Override
-        protected Script produceScript(final Vertex o) {
-            script.append("Vertex(");
-            convertToScript(o.id()).append(",");
-            return convertToScript(o.label()).append(")");
-        }
-
-        @Override
-        protected Script produceScript(final Edge o) {
-            script.append("Edge(");
-            convertToScript(o.id()).append(",");
-            convertToScript(o.outVertex()).append(",");
-            convertToScript(o.label()).append(",");
-            return convertToScript(o.inVertex()).append(")");
-        }
-
-        @Override
-        protected Script produceScript(final VertexProperty<?> o) {
-            script.append("VertexProperty(");
-            convertToScript(o.id()).append(",");
-            convertToScript(o.label()).append(",");
-            return convertToScript(o.value()).append(")");
-        }
-
-        @Override
-        protected Script produceScript(final TraversalStrategyProxy<?> o) {
-            if (o.getConfiguration().isEmpty())
-                return script.append("TraversalStrategy('" + o.getStrategyClass().getSimpleName() + "', None, '" + o.getStrategyClass().getName() + "')");
-            else {
-                script.append("TraversalStrategy('").append(o.getStrategyClass().getSimpleName()).append("',");
-                convertToScript(ConfigurationConverter.getMap(o.getConfiguration()));
-                script.append(", '");
-                script.append(o.getStrategyClass().getName());
-                return script.append("')");
-            }
-        }
-
-        @Override
-        protected Script produceScript(final String traversalSource, final GremlinLang o) {
-            script.append(traversalSource);
-            for (final GremlinLang.Instruction instruction : o.getInstructions()) {
-                final String methodName = instruction.getOperator();
-                final Object[] arguments = instruction.getArguments();
-                if (0 == arguments.length)
-                    script.append(".").append(resolveSymbol(methodName)).append("()");
-                else if (methodName.equals("range") && 2 == arguments.length)
-                    if (((Number) arguments[0]).longValue() + 1 == ((Number) arguments[1]).longValue())
-                        script.append("[").append(arguments[0].toString()).append("]");
-                    else
-                        script.append("[").append(arguments[0].toString()).append(":").append(arguments[1].toString()).append("]");
-                else if (methodName.equals("limit") && 1 == arguments.length)
-                    script.append("[0:").append(arguments[0].toString()).append("]");
-                else if (methodName.equals("values") && 1 == arguments.length && script.getScript().length() > 3 && !STEP_NAMES.contains(arguments[0].toString()))
-                    script.append(".").append(arguments[0].toString());
-                else if (methodName.equals(GraphTraversalSource.Symbols.tx)) {
-                    final String command = instruction.getArguments()[0].toString();
-                    script.append(".").append(methodName).append("().").append(command).append("()");
-                } else {
-                    script.append(".").append(resolveSymbol(methodName)).append("(");
-
-                    // python has trouble with java varargs...wrapping in collection seems to solve the problem
-                    final boolean varargsBeware = instruction.getOperator().equals(TraversalSource.Symbols.withStrategies)
-                            || instruction.getOperator().equals(TraversalSource.Symbols.withoutStrategies);
-                    if (varargsBeware) script.append("*[");
-
-                    final Iterator<?> itty = Stream.of(arguments).iterator();
-                    while (itty.hasNext()) {
-                        convertToScript(itty.next());
-                        if (itty.hasNext()) script.append(",");
-                    }
-
-                    if (varargsBeware) script.append("]");
-
-                    script.append(")");
-                }
-            }
-            return script;
-        }
-
-        @Override
-        protected Script produceScript(final P<?> p) {
-            if (p instanceof TextP) {
-                // special case the RegexPredicate since it's named in python "not_regex"
-                final BiPredicate<?, ?> tp = p.getBiPredicate();
-                if (tp instanceof Text.RegexPredicate) {
-                    final String regexToken = ((Text.RegexPredicate) p.getBiPredicate()).isNegate() ? "not_regex" : "regex";
-                    script.append("TextP.").append(regexToken).append("(");
-                } else {
-                    script.append("TextP.").append(p.getPredicateName()).append("(");
-                }
-                convertToScript(p.getValue());
-            } else if (p instanceof ConnectiveP) {
-                // ConnectiveP gets some special handling because it's reduced to and(P, P, P) and we want it
-                // generated the way it was written which was P.and(P).and(P)
-                final List<P<?>> list = ((ConnectiveP) p).getPredicates();
-                final String connector = p instanceof OrP ? "or_" : "and_";
-                for (int i = 0; i < list.size(); i++) {
-                    produceScript(list.get(i));
-
-                    // for the first/last P there is no parent to close
-                    if (i > 0 && i < list.size() - 1) script.append(")");
-
-                    // add teh connector for all but last P
-                    if (i < list.size() - 1) {
-                        script.append(".").append(connector).append("(");
-                    }
-                }
-            } else {
-                script.append("P.").append(resolveSymbol(p.getPredicateName())).append("(");
-                convertToScript(p.getValue());
-            }
-            script.append(")");
-            return script;
-        }
-
-        @Override
-        protected Script produceCardinalityValue(final GremlinLang o) {
-            final GremlinLang.Instruction inst = o.getSourceInstructions().get(0);
-            script.append("CardinalityValue." + resolveSymbol(inst.getArguments()[0].toString()) + "(");
-            convertToScript(inst.getArguments()[1]);
-            script.append(")");
-            return script;
-        }
-
-        protected String resolveSymbol(final String methodName) {
-            return SymbolHelper.toPython(methodName);
-        }
-    }
-
-    /**
-     * Performs translation without for the syntax sugar to Python.
-     */
-    public static class NoSugarTranslator extends DefaultTypeTranslator {
-
-      public NoSugarTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected Script produceScript(final String traversalSource, final GremlinLang o) {
-          script.append(traversalSource);
-          for (final GremlinLang.Instruction instruction : o.getInstructions()) {
-            final String methodName = instruction.getOperator();
-            final Object[] arguments = instruction.getArguments();
-            if (0 == arguments.length)
-              script.append(".").append(resolveSymbol(methodName)).append("()");
-            else {
-              script.append(".").append(resolveSymbol(methodName)).append("(");
-
-              // python has trouble with java varargs...wrapping in collection seems to solve
-              // the problem
-              final boolean varargsBeware = instruction.getOperator().equals(TraversalSource.Symbols.withStrategies)
-                  || instruction.getOperator().equals(TraversalSource.Symbols.withoutStrategies);
-              if (varargsBeware)
-                script.append("*[");
-
-              final Iterator<?> itty = Stream.of(arguments).iterator();
-              while (itty.hasNext()) {
-                convertToScript(itty.next());
-                if (itty.hasNext())
-                  script.append(",");
-              }
-
-              if (varargsBeware)
-                script.append("]");
-
-              script.append(")");
-            }
-          }
-          return script;
-        }
-
-    }
-    static final class SymbolHelper {
-
-        private final static Map<String, String> TO_PYTHON_MAP = new HashMap<>();
-        private final static Map<String, String> FROM_PYTHON_MAP = new HashMap<>();
-
-        static {
-            TO_PYTHON_MAP.put("global", "global_");
-            TO_PYTHON_MAP.put("all", "all_");
-            TO_PYTHON_MAP.put("and", "and_");
-            TO_PYTHON_MAP.put("any", "any_");
-            TO_PYTHON_MAP.put("as", "as_");
-            TO_PYTHON_MAP.put("asString", "as_string");
-            TO_PYTHON_MAP.put("asDate", "as_date");
-            TO_PYTHON_MAP.put("dateAdd", "date_add");
-            TO_PYTHON_MAP.put("dateDiff", "date_diff");
-            TO_PYTHON_MAP.put("filter", "filter_");
-            TO_PYTHON_MAP.put("format", "format_");
-            TO_PYTHON_MAP.put("from", "from_");
-            TO_PYTHON_MAP.put("id", "id_");
-            TO_PYTHON_MAP.put("in", "in_");
-            TO_PYTHON_MAP.put("is", "is_");
-            TO_PYTHON_MAP.put("list", "list_");
-            TO_PYTHON_MAP.put("max", "max_");
-            TO_PYTHON_MAP.put("mergeE", "merge_e");
-            TO_PYTHON_MAP.put("mergeV", "merge_v");
-            TO_PYTHON_MAP.put("inV", "in_v");
-            TO_PYTHON_MAP.put("outV", "out_v");
-            TO_PYTHON_MAP.put("onCreate", "on_create");
-            TO_PYTHON_MAP.put("onMatch", "on_match");
-            TO_PYTHON_MAP.put("min", "min_");
-            TO_PYTHON_MAP.put("or", "or_");
-            TO_PYTHON_MAP.put("not", "not_");
-            TO_PYTHON_MAP.put("range", "range_");
-            TO_PYTHON_MAP.put("set", "set_");
-            TO_PYTHON_MAP.put("sum", "sum_");
-            TO_PYTHON_MAP.put("toLower", "to_lower");
-            TO_PYTHON_MAP.put("toUpper", "to_upper");
-            TO_PYTHON_MAP.put("with", "with_");
-            //
-            TO_PYTHON_MAP.forEach((k, v) -> FROM_PYTHON_MAP.put(v, k));
-        }
-
-        private SymbolHelper() {
-            // static methods only, do not instantiate
-        }
-
-        public static String toPython(final String symbol) {
-            // at some point we will want a camel to snake case converter here. for now the only step that needs
-            // this conversion is mergeE/V related as the rest still continue use in their deprecated forms.
-            return TO_PYTHON_MAP.getOrDefault(symbol, symbol);
-        }
-
-        public static String toJava(final String symbol) {
-            return FROM_PYTHON_MAP.getOrDefault(symbol, symbol);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java
deleted file mode 100644
index dcb7ca58b5..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- *  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.process.traversal.util;
-
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponentVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRankVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressureVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ProgramVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPathVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.GraphOp;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.BranchStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.ChooseStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.OptionalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.RepeatStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.UnionStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.AllStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.AndStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.AnyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CoinStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DiscardStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.IsStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.LambdaFilterStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NoneStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.OrStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.PathFilterStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.SampleGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TimeLimitStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WherePredicateStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AsDateStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AsStringGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AsStringLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.CallStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.CombineStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConcatStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConjoinStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConstantStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.DateAddStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.DateDiffStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.DedupLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.DifferenceStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.DisjunctStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ElementMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ElementStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.FormatStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.IdStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.IndexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.IntersectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LTrimGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LTrimLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LabelStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaCollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaFlatMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LengthGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LengthLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.LoopsStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MathStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MaxGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MaxLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MergeEdgeStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MergeVertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MinGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.NoOpBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProductStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProjectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyKeyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyValueStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.RTrimGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.RTrimLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.RangeLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ReplaceGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ReplaceLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ReverseStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SackStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SampleLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectOneStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SplitGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SplitLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SubstringGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SumLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TailLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ToLowerGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ToLowerLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ToUpperGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ToUpperLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalFlatMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMergeStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalSelectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TrimGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TrimLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.UnfoldStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AddPropertyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AggregateGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AggregateLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.FailStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupCountSideEffectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IoStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.LambdaSideEffectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackValueStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TraversalSideEffectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeSideEffectStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.function.Predicate;
-import java.util.stream.Stream;
-
-/**
- * Utility class for parsing {@link GremlinLang}.
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public final class BytecodeHelper {
-    private static final Map<String, List<Class<? extends Step>>> byteCodeSymbolStepMap;
-
-    static {
-        final Map<String, List<Class<? extends Step>>> operationStepMap = new HashMap<String, List<Class<? extends Step>>>() {{
-            put(GraphTraversal.Symbols.map, Arrays.asList(LambdaMapStep.class, TraversalMapStep.class));
-            put(GraphTraversal.Symbols.flatMap, Arrays.asList(LambdaFlatMapStep.class, TraversalFlatMapStep.class));
-            put(GraphTraversal.Symbols.id, Collections.singletonList(IdStep.class));
-            put(GraphTraversal.Symbols.label, Collections.singletonList(LabelStep.class));
-            put(GraphTraversal.Symbols.identity, Collections.singletonList(IdentityStep.class));
-            put(GraphTraversal.Symbols.constant, Collections.singletonList(ConstantStep.class));
-            put(GraphTraversal.Symbols.V, Collections.singletonList(GraphStep.class));
-            put(GraphTraversal.Symbols.E, Collections.singletonList(GraphStep.class));
-            put(GraphTraversal.Symbols.to, Collections.emptyList());
-            put(GraphTraversal.Symbols.out, Collections.singletonList(VertexStep.class));
-            put(GraphTraversal.Symbols.in, Collections.singletonList(VertexStep.class));
-            put(GraphTraversal.Symbols.both, Collections.singletonList(VertexStep.class));
-            put(GraphTraversal.Symbols.toE, Collections.singletonList(VertexStep.class));
-            put(GraphTraversal.Symbols.outE, Collections.singletonList(VertexStep.class));
-            put(GraphTraversal.Symbols.inE, Collections.singletonList(VertexStep.class));
-            put(GraphTraversal.Symbols.bothE, Collections.singletonList(VertexStep.class));
-            put(GraphTraversal.Symbols.toV, Collections.singletonList(EdgeVertexStep.class));
-            put(GraphTraversal.Symbols.outV, Collections.singletonList(EdgeVertexStep.class));
-            put(GraphTraversal.Symbols.inV, Collections.singletonList(EdgeVertexStep.class));
-            put(GraphTraversal.Symbols.bothV, Collections.singletonList(EdgeVertexStep.class));
-            put(GraphTraversal.Symbols.otherV, Collections.singletonList(EdgeVertexStep.class));
-            put(GraphTraversal.Symbols.order, Arrays.asList(OrderGlobalStep.class, OrderLocalStep.class));
-            put(GraphTraversal.Symbols.properties, Collections.singletonList(PropertiesStep.class));
-            put(GraphTraversal.Symbols.values, Collections.singletonList(PropertiesStep.class));
-            put(GraphTraversal.Symbols.propertyMap, Collections.singletonList(PropertyMapStep.class));
-            put(GraphTraversal.Symbols.valueMap, Collections.singletonList(PropertyMapStep.class));
-            put(GraphTraversal.Symbols.elementMap, Collections.singletonList(ElementMapStep.class));
-            put(GraphTraversal.Symbols.select, Arrays.asList(SelectStep.class, SelectOneStep.class,
-                    TraversalSelectStep.class, TraversalMapStep.class));
-            put(GraphTraversal.Symbols.key, Collections.singletonList(PropertyKeyStep.class));
-            put(GraphTraversal.Symbols.value, Collections.singletonList(PropertyValueStep.class));
-            put(GraphTraversal.Symbols.path, Collections.singletonList(PathStep.class));
-            put(GraphTraversal.Symbols.match, Collections.singletonList(MatchStep.class));
-            put(GraphTraversal.Symbols.math, Collections.singletonList(MathStep.class));
-            put(GraphTraversal.Symbols.sack, Arrays.asList(SackStep.class, SackValueStep.class));
-            put(GraphTraversal.Symbols.loops, Collections.singletonList(LoopsStep.class));
-            put(GraphTraversal.Symbols.project, Collections.singletonList(ProjectStep.class));
-            put(GraphTraversal.Symbols.unfold, Collections.singletonList(UnfoldStep.class));
-            put(GraphTraversal.Symbols.fold, Collections.singletonList(FoldStep.class));
-            put(GraphTraversal.Symbols.count, Arrays.asList(CountGlobalStep.class, CountLocalStep.class));
-            put(GraphTraversal.Symbols.sum, Arrays.asList(SumGlobalStep.class, SumLocalStep.class));
-            put(GraphTraversal.Symbols.max, Arrays.asList(MaxGlobalStep.class, MaxLocalStep.class));
-            put(GraphTraversal.Symbols.min, Arrays.asList(MinGlobalStep.class, MinGlobalStep.class));
-            put(GraphTraversal.Symbols.mean, Arrays.asList(MeanGlobalStep.class, MeanLocalStep.class));
-            put(GraphTraversal.Symbols.concat, Collections.singletonList(ConcatStep.class));
-            put(GraphTraversal.Symbols.format, Collections.singletonList(FormatStep.class));
-            put(GraphTraversal.Symbols.asString, Arrays.asList(AsStringGlobalStep.class, AsStringLocalStep.class));
-            put(GraphTraversal.Symbols.length, Arrays.asList(LengthGlobalStep.class, LengthLocalStep.class));
-            put(GraphTraversal.Symbols.toLower, Arrays.asList(ToLowerGlobalStep.class, ToLowerLocalStep.class));
-            put(GraphTraversal.Symbols.toUpper, Arrays.asList(ToUpperGlobalStep.class, ToUpperLocalStep.class));
-            put(GraphTraversal.Symbols.trim, Arrays.asList(TrimGlobalStep.class, TrimLocalStep.class));
-            put(GraphTraversal.Symbols.lTrim, Arrays.asList(LTrimGlobalStep.class, LTrimLocalStep.class));
-            put(GraphTraversal.Symbols.rTrim, Arrays.asList(RTrimGlobalStep.class, RTrimLocalStep.class));
-            put(GraphTraversal.Symbols.reverse, Collections.singletonList(ReverseStep.class));
-            put(GraphTraversal.Symbols.replace, Arrays.asList(ReplaceGlobalStep.class, ReplaceLocalStep.class));
-            put(GraphTraversal.Symbols.substring, Arrays.asList(SubstringGlobalStep.class, ReplaceLocalStep.class));
-            put(GraphTraversal.Symbols.split, Arrays.asList(SplitGlobalStep.class, SplitLocalStep.class));
-            put(GraphTraversal.Symbols.asDate, Collections.singletonList(AsDateStep.class));
-            put(GraphTraversal.Symbols.dateAdd, Collections.singletonList(DateAddStep.class));
-            put(GraphTraversal.Symbols.dateDiff, Collections.singletonList(DateDiffStep.class));
-            put(GraphTraversal.Symbols.all, Collections.singletonList(AllStep.class));
-            put(GraphTraversal.Symbols.any, Collections.singletonList(AnyStep.class));
-            put(GraphTraversal.Symbols.none, Collections.singletonList(NoneStep.class));
-            put(GraphTraversal.Symbols.combine, Collections.singletonList(CombineStep.class));
-            put(GraphTraversal.Symbols.difference, Collections.singletonList(DifferenceStep.class));
-            put(GraphTraversal.Symbols.disjunct, Collections.singletonList(DisjunctStep.class));
-            put(GraphTraversal.Symbols.merge, Collections.singletonList(TraversalMergeStep.class));
-            put(GraphTraversal.Symbols.conjoin, Collections.singletonList(ConjoinStep.class));
-            put(GraphTraversal.Symbols.product, Collections.singletonList(ProductStep.class));
-            put(GraphTraversal.Symbols.intersect, Collections.singletonList(IntersectStep.class));
-            put(GraphTraversal.Symbols.group, Arrays.asList(GroupStep.class, GroupSideEffectStep.class));
-            put(GraphTraversal.Symbols.groupCount, Arrays.asList(GroupCountStep.class, GroupCountSideEffectStep.class));
-            put(GraphTraversal.Symbols.tree, Arrays.asList(TreeStep.class, TreeSideEffectStep.class));
-            put(GraphTraversal.Symbols.addV, Collections.singletonList(AddVertexStep.class));
-            put(GraphTraversal.Symbols.addE, Collections.singletonList(AddEdgeStep.class));
-            put(GraphTraversal.Symbols.mergeV, Collections.singletonList(MergeVertexStep.class));
-            put(GraphTraversal.Symbols.mergeE, Collections.singletonList(MergeEdgeStep.class));
-            put(GraphTraversal.Symbols.from, Collections.emptyList());
-            put(GraphTraversal.Symbols.filter, Arrays.asList(LambdaFilterStep.class, TraversalFilterStep.class));
-            put(GraphTraversal.Symbols.or, Collections.singletonList(OrStep.class));
-            put(GraphTraversal.Symbols.and, Collections.singletonList(AndStep.class));
-            put(GraphTraversal.Symbols.inject, Collections.singletonList(InjectStep.class));
-            put(GraphTraversal.Symbols.dedup, Arrays.asList(DedupGlobalStep.class, DedupLocalStep.class));
-            put(GraphTraversal.Symbols.where, Arrays.asList(WherePredicateStep.class, WhereTraversalStep.class,
-                    TraversalFilterStep.class));
-            put(GraphTraversal.Symbols.has, Collections.singletonList(HasStep.class));
-            put(GraphTraversal.Symbols.hasNot, Collections.singletonList(NotStep.class));
-            put(GraphTraversal.Symbols.hasLabel, Collections.singletonList(HasStep.class));
-            put(GraphTraversal.Symbols.hasId, Collections.singletonList(HasStep.class));
-            put(GraphTraversal.Symbols.hasKey, Collections.singletonList(HasStep.class));
-            put(GraphTraversal.Symbols.hasValue, Collections.singletonList(HasStep.class));
-            put(GraphTraversal.Symbols.is, Collections.singletonList(IsStep.class));
-            put(GraphTraversal.Symbols.not, Collections.singletonList(NotStep.class));
-            put(GraphTraversal.Symbols.range, Arrays.asList(RangeGlobalStep.class, RangeLocalStep.class));
-            put(GraphTraversal.Symbols.limit, Arrays.asList(RangeGlobalStep.class, RangeLocalStep.class));
-            put(GraphTraversal.Symbols.skip, Arrays.asList(RangeGlobalStep.class, RangeLocalStep.class));
-            put(GraphTraversal.Symbols.tail, Arrays.asList(TailGlobalStep.class, TailLocalStep.class));
-            put(GraphTraversal.Symbols.coin, Collections.singletonList(CoinStep.class));
-            put(GraphTraversal.Symbols.io, Collections.singletonList(IoStep.class));
-            put(GraphTraversal.Symbols.read, Collections.emptyList());
-            put(GraphTraversal.Symbols.write, Collections.emptyList());
-            put(GraphTraversal.Symbols.call, Collections.singletonList(CallStep.class));
-            put(GraphTraversal.Symbols.element, Collections.singletonList(ElementStep.class));
-            put(GraphTraversal.Symbols.timeLimit, Collections.singletonList(TimeLimitStep.class));
-            put(GraphTraversal.Symbols.simplePath, Collections.singletonList(PathFilterStep.class));
-            put(GraphTraversal.Symbols.cyclicPath, Collections.singletonList(PathFilterStep.class));
-            put(GraphTraversal.Symbols.sample, Arrays.asList(SampleGlobalStep.class, SampleLocalStep.class));
-            put(GraphTraversal.Symbols.drop, Collections.singletonList(DropStep.class));
-            put(GraphTraversal.Symbols.sideEffect, Arrays.asList(LambdaSideEffectStep.class, TraversalSideEffectStep.class));
-            put(GraphTraversal.Symbols.cap, Collections.singletonList(SideEffectCapStep.class));
-            put(GraphTraversal.Symbols.property, Collections.singletonList(AddPropertyStep.class));
-            put(GraphTraversal.Symbols.store, Collections.singletonList(AggregateLocalStep.class));
-            put(GraphTraversal.Symbols.aggregate, Arrays.asList(AggregateLocalStep.class, AggregateGlobalStep.class));
-            put(GraphTraversal.Symbols.fail, Collections.singletonList(FailStep.class));
-            put(GraphTraversal.Symbols.subgraph, Collections.singletonList(SubgraphStep.class));
-            put(GraphTraversal.Symbols.barrier, Arrays.asList(NoOpBarrierStep.class, LambdaCollectingBarrierStep.class));
-            put(GraphTraversal.Symbols.index, Collections.singletonList(IndexStep.class));
-            put(GraphTraversal.Symbols.local, Collections.singletonList(LocalStep.class));
-            put(GraphTraversal.Symbols.emit, Collections.emptyList());
-            put(GraphTraversal.Symbols.repeat, Collections.singletonList(RepeatStep.class));
-            put(GraphTraversal.Symbols.until, Collections.emptyList());
-            put(GraphTraversal.Symbols.branch, Collections.singletonList(BranchStep.class));
-            put(GraphTraversal.Symbols.union, Collections.singletonList(UnionStep.class));
-            put(GraphTraversal.Symbols.coalesce, Collections.singletonList(CoalesceStep.class));
-            put(GraphTraversal.Symbols.choose, Collections.singletonList(ChooseStep.class));
-            put(GraphTraversal.Symbols.optional, Collections.singletonList(OptionalStep.class));
-            put(GraphTraversal.Symbols.pageRank, Collections.singletonList(PageRankVertexProgramStep.class));
-            put(GraphTraversal.Symbols.peerPressure, Collections.singletonList(PeerPressureVertexProgramStep.class));
-            put(GraphTraversal.Symbols.connectedComponent, Collections.singletonList(ConnectedComponentVertexProgramStep.class));
-            put(GraphTraversal.Symbols.shortestPath, Collections.singletonList(ShortestPathVertexProgramStep.class));
-            put(GraphTraversal.Symbols.program, Collections.singletonList(ProgramVertexProgramStep.class));
-            put(GraphTraversal.Symbols.by, Collections.emptyList());
-            put(GraphTraversal.Symbols.with, Collections.emptyList());
-            put(GraphTraversal.Symbols.times, Collections.emptyList());
-            put(GraphTraversal.Symbols.as, Collections.emptyList());
-            put(GraphTraversal.Symbols.option, Collections.emptyList());
-            put(Traversal.Symbols.profile, Collections.singletonList(ProfileStep.class));
-            put(Traversal.Symbols.discard, Collections.singletonList(DiscardStep.class));
-            put(TraversalSource.Symbols.withSack, Collections.emptyList());
-            put(TraversalSource.Symbols.withoutStrategies, Collections.emptyList());
-            put(TraversalSource.Symbols.withStrategies, Collections.emptyList());
-            put(TraversalSource.Symbols.withSideEffect, Collections.emptyList());
-            put(TraversalSource.Symbols.withRemote, Collections.emptyList());
-            put(TraversalSource.Symbols.withComputer, Collections.emptyList());
-            put(GraphTraversalSource.Symbols.withBulk, Collections.emptyList());
-            put(GraphTraversalSource.Symbols.withPath, Collections.emptyList());
-            put(GraphTraversalSource.Symbols.tx, Collections.emptyList());
-        }};
-        byteCodeSymbolStepMap = Collections.unmodifiableMap(operationStepMap);
-    }
-
-    private BytecodeHelper() {
-        // public static methods only
-    }
-
-    /**
-     * Parses {@link GremlinLang} to find {@link TraversalStrategy} objects added in the source instructions.
-     */
-    public static <A extends TraversalStrategy> Iterator<A> findStrategies(final GremlinLang bytecode, final Class<A> clazz) {
-        return IteratorUtils.map(
-                IteratorUtils.filter(bytecode.getSourceInstructions().iterator(),
-                        s -> s.getOperator().equals(TraversalSource.Symbols.withStrategies) && clazz.isAssignableFrom(s.getArguments()[0].getClass())),
-                os -> (A) os.getArguments()[0]);
-    }
-
-    public static GremlinLang filterInstructions(final GremlinLang bytecode, final Predicate<GremlinLang.Instruction> predicate) {
-        final GremlinLang clone = new GremlinLang();
-        for (final GremlinLang.Instruction instruction : bytecode.getSourceInstructions()) {
-            if (predicate.test(instruction))
-                clone.addSource(instruction.getOperator(), instruction.getArguments());
-        }
-        for (final GremlinLang.Instruction instruction : bytecode.getStepInstructions()) {
-            if (predicate.test(instruction))
-                clone.addStep(instruction.getOperator(), instruction.getArguments());
-        }
-        return clone;
-    }
-
-    /**
-     * Checks if the bytecode is one of the standard {@link GraphOp} options.
-     */
-    public static boolean isGraphOperation(final GremlinLang bytecode) {
-        return Stream.of(GraphOp.values()).anyMatch(op -> op.equals(bytecode));
-    }
-
-    public static Optional<String> getLambdaLanguage(final GremlinLang bytecode) {
-        for (final GremlinLang.Instruction instruction : bytecode.getInstructions()) {
-            for (Object object : instruction.getArguments()) {
-                if (object instanceof Lambda)
-                    return Optional.of(((Lambda) object).getLambdaLanguage());
-                else if (object instanceof GremlinLang) {
-                    final Optional<String> temp = BytecodeHelper.getLambdaLanguage((GremlinLang) object);
-                    if (temp.isPresent())
-                        return temp;
-                }
-            }
-        }
-        return Optional.empty();
-    }
-
-    public static void removeBindings(final GremlinLang bytecode) {
-        for (final GremlinLang.Instruction instruction : bytecode.getInstructions()) {
-            final Object[] arguments = instruction.getArguments();
-            for (int i = 0; i < arguments.length; i++) {
-                if (arguments[i] instanceof GremlinLang.Binding)
-                    arguments[i] = ((GremlinLang.Binding) arguments[i]).value();
-                else if (arguments[i] instanceof GremlinLang)
-                    removeBindings((GremlinLang) arguments[i]);
-            }
-        }
-    }
-
-    /**
-     * Returns a list of {@link Step} which can be added to the traversal for the provided operator.
-     * <p>
-     * Graph Traversal may or may not add the returned list of steps into the traversal. List only represents
-     * possible steps added to traversal given an operator.
-     * </p>
-     *
-     * @param operator Graph operator
-     * @return List of possible {@link Step}(s)
-     */
-    public static List<Class<? extends Step>> findPossibleTraversalSteps(final String operator) {
-        if (!byteCodeSymbolStepMap.containsKey(operator)) {
-            throw new IllegalArgumentException("Unable to find Traversal steps for the graph operator: " + operator);
-        }
-        return byteCodeSymbolStepMap.get(operator);
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
index 983c14bf85..5273f77113 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.binary;
 
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
 import org.apache.tinkerpop.gremlin.process.traversal.DT;
 import org.apache.tinkerpop.gremlin.process.traversal.Merge;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
@@ -50,10 +49,8 @@ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
 import org.apache.tinkerpop.gremlin.structure.io.binary.types.BigDecimalSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.binary.types.BigIntegerSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.BindingSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.binary.types.BulkSetSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.binary.types.ByteBufferSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.ByteCodeSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.binary.types.CharSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.binary.types.ClassSerializer;
 import org.apache.tinkerpop.gremlin.structure.io.binary.types.CustomTypeSerializer;
@@ -159,8 +156,6 @@ public class TypeSerializerRegistry {
             new RegistryEntry<>(Graph.class, new GraphSerializer()),
             new RegistryEntry<>(Vertex.class, new VertexSerializer()),
             new RegistryEntry<>(SackFunctions.Barrier.class, EnumSerializer.BarrierSerializer),
-            new RegistryEntry<>(GremlinLang.Binding.class, new BindingSerializer()),
-            new RegistryEntry<>(GremlinLang.class, new ByteCodeSerializer()),
             new RegistryEntry<>(VertexProperty.Cardinality.class, EnumSerializer.CardinalitySerializer),
             new RegistryEntry<>(Column.class, EnumSerializer.ColumnSerializer),
             new RegistryEntry<>(Direction.class, EnumSerializer.DirectionSerializer),
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BindingSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BindingSerializer.java
deleted file mode 100644
index bef51c9d19..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BindingSerializer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.binary.types;
-
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-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;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class BindingSerializer extends SimpleTypeSerializer<GremlinLang.Binding> {
-
-    public BindingSerializer() {
-        super(DataType.BINDING);
-    }
-
-    @Override
-    protected GremlinLang.Binding readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
-        final String k = context.readValue(buffer, String.class, false);
-        return new GremlinLang.Binding<>(k, context.read(buffer));
-    }
-
-    @Override
-    protected void writeValue(final GremlinLang.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-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteCodeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteCodeSerializer.java
deleted file mode 100644
index 3dcd3fbf14..0000000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteCodeSerializer.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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.binary.types;
-
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-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 ByteCodeSerializer extends SimpleTypeSerializer<GremlinLang> {
-    public ByteCodeSerializer() {
-        super(DataType.BYTECODE);
-    }
-
-    @Override
-    protected GremlinLang readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
-        final GremlinLang result = new GremlinLang();
-
-        final int stepsLength = buffer.readInt();
-        for (int i = 0; i < stepsLength; i++) {
-            result.addStep(context.readValue(buffer, String.class, false), getInstructionArguments(buffer, context));
-        }
-
-        final int sourcesLength = buffer.readInt();
-        for (int i = 0; i < sourcesLength; i++) {
-            result.addSource(context.readValue(buffer, String.class, false), getInstructionArguments(buffer, context));
-        }
-
-        return result;
-    }
-
-    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++) {
-            values[j] = context.read(buffer);
-        }
-        return values;
-    }
-
-    @Override
-    protected void writeValue(final GremlinLang value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
-        final List<GremlinLang.Instruction> steps = value.getStepInstructions();
-        final List<GremlinLang.Instruction> sources = value.getSourceInstructions();
-        // 2 buffers for the length + plus 2 buffers per each step and source
-
-        writeInstructions(buffer, context, steps);
-        writeInstructions(buffer, context, sources);
-    }
-
-    private void writeInstructions(final Buffer buffer, final GraphBinaryWriter context,
-                                   final List<GremlinLang.Instruction> instructions) throws IOException {
-
-        context.writeValue(instructions.size(), buffer, false);
-
-        for (GremlinLang.Instruction instruction : instructions) {
-            context.writeValue(instruction.getOperator(), buffer, false);
-            fillArgumentsBuffer(instruction.getArguments(), buffer, context);
-        }
-    }
-
-    private static void fillArgumentsBuffer(final Object[] arguments, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
-
-        context.writeValue(arguments.length, buffer, false);
-
-        for (Object value : arguments) {
-            context.write(value, buffer);
-        }
-    }
-}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 567a9deb90..5f1eaccd04 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -167,7 +167,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     put(Tree.class, "Tree");
                     put(BulkSet.class, "BulkSet");
                     put(GremlinLang.class, "Bytecode");
-                    put(GremlinLang.Binding.class, "Binding");
                     put(AndP.class, "P");
                     put(OrP.class, "P");
                     put(P.class, "P");
@@ -259,7 +258,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             // traversal
             addSerializer(BulkSet.class, new TraversalSerializersV3.BulkSetJacksonSerializer());
             addSerializer(Traversal.class, new TraversalSerializersV3.TraversalJacksonSerializer());
-            addSerializer(GremlinLang.class, new TraversalSerializersV3.BytecodeJacksonSerializer());
             Stream.of(VertexProperty.Cardinality.class,
                     Column.class,
                     Direction.class,
@@ -274,7 +272,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     T.class).forEach(e -> addSerializer(e, new TraversalSerializersV3.EnumJacksonSerializer()));
             addSerializer(P.class, new TraversalSerializersV3.PJacksonSerializer());
             addSerializer(Lambda.class, new TraversalSerializersV3.LambdaJacksonSerializer());
-            addSerializer(GremlinLang.Binding.class, new TraversalSerializersV3.BindingJacksonSerializer());
             addSerializer(Traverser.class, new TraversalSerializersV3.TraverserJacksonSerializer());
             addSerializer(TraversalStrategy.class, new TraversalSerializersV3.TraversalStrategyJacksonSerializer());
 
@@ -305,7 +302,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             // traversal
             addDeserializer(BulkSet.class, new TraversalSerializersV3.BulkSetJacksonDeserializer());
             addDeserializer(GremlinLang.class, new TraversalSerializersV3.BytecodeJacksonDeserializer());
-            addDeserializer(GremlinLang.Binding.class, new TraversalSerializersV3.BindingJacksonDeserializer());
             Stream.of(VertexProperty.Cardinality.values(),
                     Column.values(),
                     Direction.values(),
@@ -420,7 +416,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     put(Tree.class, "Tree");
                     put(BulkSet.class, "BulkSet");
                     put(GremlinLang.class, "Bytecode");
-                    put(GremlinLang.Binding.class, "Binding");
                     put(AndP.class, "P");
                     put(OrP.class, "P");
                     put(P.class, "P");
@@ -512,7 +507,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             // traversal
             addSerializer(BulkSet.class, new TraversalSerializersV3.BulkSetJacksonSerializer());
             addSerializer(Traversal.class, new TraversalSerializersV3.TraversalJacksonSerializer());
-            addSerializer(GremlinLang.class, new TraversalSerializersV3.BytecodeJacksonSerializer());
             Stream.of(VertexProperty.Cardinality.class,
                     Column.class,
                     Direction.class,
@@ -527,7 +521,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     T.class).forEach(e -> addSerializer(e, new TraversalSerializersV3.EnumJacksonSerializer()));
             addSerializer(P.class, new TraversalSerializersV3.PJacksonSerializer());
             addSerializer(Lambda.class, new TraversalSerializersV3.LambdaJacksonSerializer());
-            addSerializer(GremlinLang.Binding.class, new TraversalSerializersV3.BindingJacksonSerializer());
             addSerializer(Traverser.class, new TraversalSerializersV3.TraverserJacksonSerializer());
             addSerializer(TraversalStrategy.class, new TraversalSerializersV3.TraversalStrategyJacksonSerializer());
 
@@ -558,7 +551,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             // traversal
             addDeserializer(BulkSet.class, new TraversalSerializersV3.BulkSetJacksonDeserializer());
             addDeserializer(GremlinLang.class, new TraversalSerializersV3.BytecodeJacksonDeserializer());
-            addDeserializer(GremlinLang.Binding.class, new TraversalSerializersV3.BindingJacksonDeserializer());
             Stream.of(VertexProperty.Cardinality.values(),
                     Column.values(),
                     Direction.values(),
@@ -668,7 +660,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     put(Traverser.class, "Traverser");
                     put(Tree.class, "Tree");
                     put(GremlinLang.class, "Bytecode");
-                    put(GremlinLang.Binding.class, "Binding");
                     put(AndP.class, "P");
                     put(OrP.class, "P");
                     put(P.class, "P");
@@ -754,7 +745,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
 
             // traversal
             addSerializer(Traversal.class, new TraversalSerializersV2.TraversalJacksonSerializer());
-            addSerializer(GremlinLang.class, new TraversalSerializersV2.BytecodeJacksonSerializer());
             Stream.of(VertexProperty.Cardinality.class,
                     Column.class,
                     Direction.class,
@@ -769,7 +759,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     T.class).forEach(e -> addSerializer(e, new TraversalSerializersV2.EnumJacksonSerializer()));
             addSerializer(P.class, new TraversalSerializersV2.PJacksonSerializer());
             addSerializer(Lambda.class, new TraversalSerializersV2.LambdaJacksonSerializer());
-            addSerializer(GremlinLang.Binding.class, new TraversalSerializersV2.BindingJacksonSerializer());
             addSerializer(Traverser.class, new TraversalSerializersV2.TraverserJacksonSerializer());
             addSerializer(TraversalStrategy.class, new TraversalSerializersV2.TraversalStrategyJacksonSerializer());
 
@@ -792,7 +781,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
 
             // traversal
             addDeserializer(GremlinLang.class, new TraversalSerializersV2.BytecodeJacksonDeserializer());
-            addDeserializer(GremlinLang.Binding.class, new TraversalSerializersV2.BindingJacksonDeserializer());
             Stream.of(VertexProperty.Cardinality.values(),
                     Column.values(),
                     Direction.values(),
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java
index 5b2912a8e3..3b6c04d31f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java
@@ -82,45 +82,6 @@ final class TraversalSerializersV2 {
 
     }
 
-    final static class BytecodeJacksonSerializer extends StdScalarSerializer<GremlinLang> {
-
-        public BytecodeJacksonSerializer() {
-            super(GremlinLang.class);
-        }
-
-        @Override
-        public void serialize(final GremlinLang bytecode, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            if (bytecode.getSourceInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart(GraphSONTokens.SOURCE);
-                for (final GremlinLang.Instruction instruction : bytecode.getSourceInstructions()) {
-                    jsonGenerator.writeStartArray();
-                    jsonGenerator.writeString(instruction.getOperator());
-                    for (final Object argument : instruction.getArguments()) {
-                        jsonGenerator.writeObject(argument);
-                    }
-                    jsonGenerator.writeEndArray();
-                }
-                jsonGenerator.writeEndArray();
-            }
-            if (bytecode.getStepInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart(GraphSONTokens.STEP);
-                for (final GremlinLang.Instruction instruction : bytecode.getStepInstructions()) {
-                    jsonGenerator.writeStartArray();
-                    jsonGenerator.writeString(instruction.getOperator());
-                    for (final Object argument : instruction.getArguments()) {
-                        jsonGenerator.writeObject(argument);
-                    }
-                    jsonGenerator.writeEndArray();
-                }
-                jsonGenerator.writeEndArray();
-            }
-
-            jsonGenerator.writeEndObject();
-        }
-    }
-
     static class EnumJacksonSerializer extends StdScalarSerializer<Enum> {
 
         public EnumJacksonSerializer() {
@@ -185,23 +146,6 @@ final class TraversalSerializersV2 {
 
     }
 
-    final static class BindingJacksonSerializer extends StdScalarSerializer<GremlinLang.Binding> {
-
-        public BindingJacksonSerializer() {
-            super(GremlinLang.Binding.class);
-        }
-
-        @Override
-        public void serialize(final GremlinLang.Binding binding, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.KEY, binding.variable());
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, binding.value());
-            jsonGenerator.writeEndObject();
-        }
-
-    }
-
     final static class TraverserJacksonSerializer extends StdScalarSerializer<Traverser> {
 
         public TraverserJacksonSerializer() {
@@ -443,35 +387,6 @@ final class TraversalSerializersV2 {
         }
     }
 
-    final static class BindingJacksonDeserializer extends StdDeserializer<GremlinLang.Binding> {
-
-        public BindingJacksonDeserializer() {
-            super(GremlinLang.Binding.class);
-        }
-
-        @Override
-        public GremlinLang.Binding deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-            String k = null;
-            Object v = null;
-
-            while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
-                if (jsonParser.getCurrentName().equals(GraphSONTokens.KEY)) {
-                    jsonParser.nextToken();
-                    k = jsonParser.getText();
-                } else if (jsonParser.getCurrentName().equals(GraphSONTokens.VALUE)) {
-                    jsonParser.nextToken();
-                    v = deserializationContext.readValue(jsonParser, Object.class);
-                }
-            }
-            return new GremlinLang.Binding<>(k, v);
-        }
-
-        @Override
-        public boolean isCachable() {
-            return true;
-        }
-    }
-
     static class TraverserJacksonDeserializer extends StdDeserializer<Traverser> {
 
         public TraverserJacksonDeserializer() {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java
index bfa9bf66a6..495ed3fcfc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java
@@ -89,45 +89,6 @@ final class TraversalSerializersV3 {
 
     }
 
-    final static class BytecodeJacksonSerializer extends StdScalarSerializer<GremlinLang> {
-
-        public BytecodeJacksonSerializer() {
-            super(GremlinLang.class);
-        }
-
-        @Override
-        public void serialize(final GremlinLang bytecode, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            if (bytecode.getSourceInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart(GraphSONTokens.SOURCE);
-                for (final GremlinLang.Instruction instruction : bytecode.getSourceInstructions()) {
-                    jsonGenerator.writeStartArray();
-                    jsonGenerator.writeString(instruction.getOperator());
-                    for (final Object argument : instruction.getArguments()) {
-                        jsonGenerator.writeObject(argument);
-                    }
-                    jsonGenerator.writeEndArray();
-                }
-                jsonGenerator.writeEndArray();
-            }
-            if (bytecode.getStepInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart(GraphSONTokens.STEP);
-                for (final GremlinLang.Instruction instruction : bytecode.getStepInstructions()) {
-                    jsonGenerator.writeStartArray();
-                    jsonGenerator.writeString(instruction.getOperator());
-                    for (final Object argument : instruction.getArguments()) {
-                        jsonGenerator.writeObject(argument);
-                    }
-                    jsonGenerator.writeEndArray();
-                }
-                jsonGenerator.writeEndArray();
-            }
-
-            jsonGenerator.writeEndObject();
-        }
-    }
-
     static class EnumJacksonSerializer extends StdScalarSerializer<Enum> {
 
         public EnumJacksonSerializer() {
@@ -203,23 +164,6 @@ final class TraversalSerializersV3 {
         }
     }
 
-    final static class BindingJacksonSerializer extends StdScalarSerializer<GremlinLang.Binding> {
-
-        public BindingJacksonSerializer() {
-            super(GremlinLang.Binding.class);
-        }
-
-        @Override
-        public void serialize(final GremlinLang.Binding binding, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.KEY, binding.variable());
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, binding.value());
-            jsonGenerator.writeEndObject();
-        }
-
-    }
-
     final static class TraverserJacksonSerializer extends StdScalarSerializer<Traverser> {
 
         public TraverserJacksonSerializer() {
@@ -536,35 +480,6 @@ final class TraversalSerializersV3 {
         }
     }
 
-    final static class BindingJacksonDeserializer extends StdDeserializer<GremlinLang.Binding> {
-
-        public BindingJacksonDeserializer() {
-            super(GremlinLang.Binding.class);
-        }
-
-        @Override
-        public GremlinLang.Binding deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-            String k = null;
-            Object v = null;
-
-            while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
-                if (jsonParser.getCurrentName().equals(GraphSONTokens.KEY)) {
-                    jsonParser.nextToken();
-                    k = jsonParser.getText();
-                } else if (jsonParser.getCurrentName().equals(GraphSONTokens.VALUE)) {
-                    jsonParser.nextToken();
-                    v = deserializationContext.readValue(jsonParser, Object.class);
-                }
-            }
-            return new GremlinLang.Binding<>(k, v);
-        }
-
-        @Override
-        public boolean isCachable() {
-            return true;
-        }
-    }
-
     static class TraverserJacksonDeserializer extends StdDeserializer<Traverser> {
 
         public TraverserJacksonDeserializer() {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV1.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV1.java
index cabd6b7d80..0ca7162c94 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV1.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV1.java
@@ -19,12 +19,10 @@
 package org.apache.tinkerpop.gremlin.structure.io.gryo;
 
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Text;
 import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
@@ -135,45 +133,6 @@ public final class GryoSerializersV1 {
         }
     }
 
-    public final static class BytecodeSerializer implements SerializerShim<GremlinLang> {
-        @Override
-        public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final GremlinLang bytecode) {
-            writeInstructions(kryo, output, bytecode.getSourceInstructions());
-            writeInstructions(kryo, output, bytecode.getStepInstructions());
-        }
-
-        @Override
-        public <I extends InputShim> GremlinLang read(final KryoShim<I, ?> kryo, final I input, final Class<GremlinLang> clazz) {
-            final GremlinLang bytecode = new GremlinLang();
-            final int sourceInstructionCount = input.readInt();
-            for (int ix = 0; ix < sourceInstructionCount; ix++) {
-                final String operator = input.readString();
-                final Object[] args = operator.equals(TraversalSource.Symbols.withoutStrategies) ?
-                        kryo.readObject(input, Class[].class) :
-                        kryo.readObject(input, Object[].class);
-                bytecode.addSource(operator, args);
-            }
-
-            final int stepInstructionCount = input.readInt();
-            for (int ix = 0; ix < stepInstructionCount; ix++) {
-                final String operator = input.readString();
-                final Object[] args = kryo.readObject(input, Object[].class);
-                bytecode.addStep(operator, args);
-            }
-
-            return bytecode;
-        }
-
-        private static <O extends OutputShim> void writeInstructions(final KryoShim<?, O> kryo, final O output,
-                                                                     final List<GremlinLang.Instruction> instructions) {
-            output.writeInt(instructions.size());
-            for (GremlinLang.Instruction inst : instructions) {
-                output.writeString(inst.getOperator());
-                kryo.writeObject(output, inst.getArguments());
-            }
-        }
-    }
-
     public final static class PSerializer implements SerializerShim<P> {
         @Override
         public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final P p) {
@@ -283,21 +242,6 @@ public final class GryoSerializersV1 {
         }
     }
 
-    public final static class BindingSerializer implements SerializerShim<GremlinLang.Binding> {
-        @Override
-        public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final GremlinLang.Binding binding) {
-            output.writeString(binding.variable());
-            kryo.writeClassAndObject(output, binding.value());
-        }
-
-        @Override
-        public <I extends InputShim> GremlinLang.Binding read(final KryoShim<I, ?> kryo, final I input, final Class<GremlinLang.Binding> clazz) {
-            final String var = input.readString();
-            final Object val = kryo.readClassAndObject(input);
-            return new GremlinLang.Binding(var, val);
-        }
-    }
-
     public final static class DefaultRemoteTraverserSerializer implements SerializerShim<DefaultRemoteTraverser> {
         @Override
         public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final DefaultRemoteTraverser remoteTraverser) {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java
index 2d73a95c83..3850454fd5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java
@@ -19,12 +19,10 @@
 package org.apache.tinkerpop.gremlin.structure.io.gryo;
 
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Text;
 import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
@@ -250,45 +248,6 @@ public final class GryoSerializersV3 {
         }
     }
 
-    public final static class BytecodeSerializer implements SerializerShim<GremlinLang> {
-        @Override
-        public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final GremlinLang bytecode) {
-            writeInstructions(kryo, output, bytecode.getSourceInstructions());
-            writeInstructions(kryo, output, bytecode.getStepInstructions());
-        }
-
-        @Override
-        public <I extends InputShim> GremlinLang read(final KryoShim<I, ?> kryo, final I input, final Class<GremlinLang> clazz) {
-            final GremlinLang bytecode = new GremlinLang();
-            final int sourceInstructionCount = input.readInt();
-            for (int ix = 0; ix < sourceInstructionCount; ix++) {
-                final String operator = input.readString();
-                final Object[] args = operator.equals(TraversalSource.Symbols.withoutStrategies) ?
-                        kryo.readObject(input, Class[].class) :
-                        kryo.readObject(input, Object[].class);
-                bytecode.addSource(operator, args);
-            }
-
-            final int stepInstructionCount = input.readInt();
-            for (int ix = 0; ix < stepInstructionCount; ix++) {
-                final String operator = input.readString();
-                final Object[] args = kryo.readObject(input, Object[].class);
-                bytecode.addStep(operator, args);
-            }
-
-            return bytecode;
-        }
-
-        private static <O extends OutputShim> void writeInstructions(final KryoShim<?, O> kryo, final O output,
-                                                                     final List<GremlinLang.Instruction> instructions) {
-            output.writeInt(instructions.size());
-            for (GremlinLang.Instruction inst : instructions) {
-                output.writeString(inst.getOperator());
-                kryo.writeObject(output, inst.getArguments());
-            }
-        }
-    }
-
     public final static class PSerializer implements SerializerShim<P> {
         @Override
         public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final P p) {
@@ -398,21 +357,6 @@ public final class GryoSerializersV3 {
         }
     }
 
-    public final static class BindingSerializer implements SerializerShim<GremlinLang.Binding> {
-        @Override
-        public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final GremlinLang.Binding binding) {
-            output.writeString(binding.variable());
-            kryo.writeClassAndObject(output, binding.value());
-        }
-
-        @Override
-        public <I extends InputShim> GremlinLang.Binding read(final KryoShim<I, ?> kryo, final I input, final Class<GremlinLang.Binding> clazz) {
-            final String var = input.readString();
-            final Object val = kryo.readClassAndObject(input);
-            return new GremlinLang.Binding(var, val);
-        }
-    }
-
     public final static class DefaultRemoteTraverserSerializer implements SerializerShim<DefaultRemoteTraverser> {
         @Override
         public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final DefaultRemoteTraverser remoteTraverser) {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
index c3bc7a92d1..6bd8606ac7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
@@ -18,13 +18,13 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.gryo;
 
+import org.apache.commons.collections4.map.ReferenceMap;
 import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
 import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy;
 import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
 import org.apache.tinkerpop.gremlin.process.traversal.Contains;
 import org.apache.tinkerpop.gremlin.process.traversal.DT;
 import org.apache.tinkerpop.gremlin.process.traversal.Merge;
@@ -59,6 +59,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.Subgra
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ByModulatorOptimizationStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.EarlyLimitStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
@@ -69,29 +70,29 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.Matc
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReservedKeysVerificationStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_P_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_NL_O_P_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_NL_O_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_P_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_NL_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_P_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_NL_O_OB_P_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_NL_O_OB_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_P_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_NL_O_OB_P_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_OB_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.NL_O_OB_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_OB_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.ProjectedTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.IndexedTraverserSet;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ImmutableMetrics;
@@ -126,8 +127,6 @@ import org.apache.tinkerpop.gremlin.util.function.MultiComparator;
 import org.apache.tinkerpop.shaded.kryo.ClassResolver;
 import org.apache.tinkerpop.shaded.kryo.KryoSerializable;
 import org.apache.tinkerpop.shaded.kryo.serializers.JavaSerializer;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.LabelledCounter;
-import org.apache.commons.collections4.map.ReferenceMap;
 import org.javatuples.Pair;
 import org.javatuples.Triplet;
 
@@ -321,12 +320,10 @@ public enum GryoVersion {
             add(GryoTypeReg.of(ProjectedTraverser.class, 168));
             add(GryoTypeReg.of(DefaultRemoteTraverser.class, 123, new GryoSerializersV3.DefaultRemoteTraverserSerializer()));
 
-            add(GryoTypeReg.of(GremlinLang.class, 122, new GryoSerializersV3.BytecodeSerializer()));
             add(GryoTypeReg.of(P.class, 124, new GryoSerializersV3.PSerializer()));
             add(GryoTypeReg.of(TextP.class, 186, new GryoSerializersV3.TextPSerializer()));
             add(GryoTypeReg.of(Text.RegexPredicate.class, 197));                                       // ***LAST ID***
             add(GryoTypeReg.of(Lambda.class, 125, new GryoSerializersV3.LambdaSerializer()));
-            add(GryoTypeReg.of(GremlinLang.Binding.class, 126, new GryoSerializersV3.BindingSerializer()));
             add(GryoTypeReg.of(Order.class, 127));
             add(GryoTypeReg.of(Scope.class, 128));
             add(GryoTypeReg.of(VertexProperty.Cardinality.class, 131));
@@ -524,12 +521,10 @@ public enum GryoVersion {
             add(GryoTypeReg.of(ProjectedTraverser.class, 164));
             add(GryoTypeReg.of(DefaultRemoteTraverser.class, 123, new GryoSerializersV1.DefaultRemoteTraverserSerializer()));
 
-            add(GryoTypeReg.of(GremlinLang.class, 122, new GryoSerializersV1.BytecodeSerializer()));
             add(GryoTypeReg.of(P.class, 124, new GryoSerializersV1.PSerializer()));
             add(GryoTypeReg.of(TextP.class, 186, new GryoSerializersV1.TextPSerializer()));
             add(GryoTypeReg.of(Text.RegexPredicate.class, 197));
             add(GryoTypeReg.of(Lambda.class, 125, new GryoSerializersV1.LambdaSerializer()));
-            add(GryoTypeReg.of(GremlinLang.Binding.class, 126, new GryoSerializersV1.BindingSerializer()));
             add(GryoTypeReg.of(Order.class, 127));
             add(GryoTypeReg.of(Scope.class, 128));
             add(GryoTypeReg.of(VertexProperty.Cardinality.class, 131));
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
index 49206cf8e3..e81ec08c82 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
@@ -28,7 +28,6 @@ import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
@@ -185,10 +184,6 @@ public final class StringFactory {
         return traversalStrategyProxy.getStrategyClass().getSimpleName();
     }
 
-    public static String translatorString(final Translator translator) {
-        return "translator" + L_BRACKET + translator.getTraversalSource() + ":" + translator.getTargetLanguage() + R_BRACKET;
-    }
-
     public static String vertexProgramString(final VertexProgram vertexProgram, final String internalString) {
         return vertexProgram.getClass().getSimpleName() + L_BRACKET + internalString + R_BRACKET;
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngineTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngineTest.java
index ca699a9902..9846363030 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngineTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangScriptEngineTest.java
@@ -59,11 +59,4 @@ public class GremlinLangScriptEngineTest {
         assertThat(result, instanceOf(Traversal.Admin.class));
         assertEquals(g.V(100, 1000, 10000).asAdmin().getGremlinLang(), ((Traversal.Admin) result).getGremlinLang());
     }
-
-    @Test
-    public void shouldEvalGremlinBytecode() throws ScriptException {
-        final Object result = scriptEngine.eval(g.V().asAdmin().getGremlinLang(), "g");
-        assertThat(result, instanceOf(Traversal.Admin.class));
-        assertEquals(g.V().asAdmin().getGremlinLang(), ((Traversal.Admin) result).getGremlinLang());
-    }
 }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java
new file mode 100644
index 0000000000..856f203bc7
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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.process.remote;
+
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
+import static org.junit.Assert.assertEquals;
+
+public class EmbeddedRemoteConnectionTest {
+    @Test
+    public void shouldAllowToUseLocalGraphAsRemote() {
+        final Graph graph = EmptyGraph.instance();
+        final GraphTraversalSource g = graph.traversal();
+        final GraphTraversalSource simulatedRemoteG = traversal().with(new EmbeddedRemoteConnection(g));
+        assertEquals(0, simulatedRemoteG.V().count().next().intValue());
+    }
+}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
deleted file mode 100644
index 72448ba5fc..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- *  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.process.traversal;
-
-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.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.Column;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class BytecodeTest {
-
-    @Test
-    public void shouldHaveProperHashAndEquality() {
-        final GraphTraversalSource g = EmptyGraph.instance().traversal();
-        final Traversal.Admin traversal1 = g.V().out().repeat(__.out().in()).times(2).groupCount().by(__.outE().count()).select(Column.keys).order().by(Order.desc).asAdmin();
-        final Traversal.Admin traversal2 = g.V().out().repeat(__.out().in()).times(2).groupCount().by(__.outE().count()).select(Column.keys).order().by(Order.desc).asAdmin();
-        final Traversal.Admin traversal3 = g.V().out().repeat(__.out().in()).times(2).groupCount().by(__.outE().count()).select(Column.values).order().by(Order.desc).asAdmin();
-
-        assertEquals(traversal1, traversal2);
-        assertNotEquals(traversal1, traversal3);
-        assertNotEquals(traversal2, traversal3);
-        //
-        assertEquals(traversal1.hashCode(), traversal2.hashCode());
-        assertNotEquals(traversal1.hashCode(), traversal3.hashCode());
-        assertNotEquals(traversal2.hashCode(), traversal3.hashCode());
-        //
-        assertEquals(traversal1.getGremlinLang(), traversal2.getGremlinLang());
-        assertNotEquals(traversal1.getGremlinLang(), traversal3.getGremlinLang());
-        assertNotEquals(traversal2.getGremlinLang(), traversal3.getGremlinLang());
-        //
-        assertEquals(traversal1.getGremlinLang().hashCode(), traversal2.getGremlinLang().hashCode());
-        assertNotEquals(traversal1.getGremlinLang().hashCode(), traversal3.getGremlinLang().hashCode());
-        assertNotEquals(traversal2.getGremlinLang().hashCode(), traversal3.getGremlinLang().hashCode());
-
-    }
-
-    @Test
-    public void shouldCloneCorrectly() {
-        final GraphTraversalSource g = EmptyGraph.instance().traversal();
-        final GremlinLang bytecode = g.V().out().asAdmin().getGremlinLang();
-        final GremlinLang bytecodeClone = bytecode.clone();
-        assertEquals(bytecode, bytecodeClone);
-        assertEquals(bytecode.hashCode(), bytecodeClone.hashCode());
-        bytecodeClone.addStep("in", "created"); // mutate the clone and the original should stay the same
-        assertNotEquals(bytecode, bytecodeClone);
-        assertNotEquals(bytecode.hashCode(), bytecodeClone.hashCode());
-        assertEquals(2, IteratorUtils.count(bytecode.getInstructions()));
-        assertEquals(3, IteratorUtils.count(bytecodeClone.getInstructions()));
-    }
-
-    @Test
-    public void shouldIncludeBindingsInEquality() {
-        final Bindings b = Bindings.instance();
-        final GraphTraversalSource g = EmptyGraph.instance().traversal();
-
-        final GremlinLang bytecode1 = g.V().out(b.of("a", "created")).asAdmin().getGremlinLang();
-        final GremlinLang bytecode2 = g.V().out(b.of("a", "knows")).asAdmin().getGremlinLang();
-        final GremlinLang bytecode3 = g.V().out(b.of("b", "knows")).asAdmin().getGremlinLang();
-        final GremlinLang bytecode4 = g.V().out(b.of("b", "knows")).asAdmin().getGremlinLang();
-
-        assertNotEquals(bytecode1, bytecode2);
-        assertNotEquals(bytecode1, bytecode3);
-        assertNotEquals(bytecode2, bytecode3);
-        assertNotEquals(bytecode2, bytecode4);
-        assertNotEquals(bytecode1, bytecode4);
-        assertEquals(bytecode3, bytecode4);
-
-        assertEquals(1, bytecode1.getBindings().size());
-        assertEquals("created", bytecode1.getBindings().get("a"));
-    }
-
-    @Test
-    public void shouldIncludeBindingsInNestedTraversals() {
-        // adding the choose() step as part of TINKERPOP-2458
-        final Bindings b = Bindings.instance();
-        final GraphTraversalSource g = EmptyGraph.instance().traversal();
-        final GremlinLang bytecode = g.V().in(b.of("a","created")).
-                choose(__.out().count()).
-                option(b.of("two", 2), __.values("name")).
-                option(b.of("three",3), __.values("age")).
-                where(__.out(b.of("b","knows")).
-                        has("age",b.of("c",P.gt(32))).
-                        map(__.values(b.of("d","name")))).
-                in(b.of("a", "created")).asAdmin().getGremlinLang();
-        assertEquals(6, bytecode.getBindings().size());
-        assertEquals("created", bytecode.getBindings().get("a"));
-        assertEquals("knows", bytecode.getBindings().get("b"));
-        assertEquals(P.gt(32), bytecode.getBindings().get("c"));
-        assertEquals("name", bytecode.getBindings().get("d"));
-        assertEquals(2, bytecode.getBindings().get("two"));
-        assertEquals(3, bytecode.getBindings().get("three"));
-
-        GremlinLang.Binding binding = (GremlinLang.Binding) bytecode.getStepInstructions().get(1).getArguments()[0];
-        assertEquals("a", binding.variable());
-        assertEquals("created", binding.value());
-        binding = (GremlinLang.Binding) bytecode.getStepInstructions().get(3).getArguments()[0];
-        assertEquals("two", binding.variable());
-        assertEquals(2, binding.value());
-        binding = (GremlinLang.Binding) bytecode.getStepInstructions().get(4).getArguments()[0];
-        assertEquals("three", binding.variable());
-        assertEquals(3, binding.value());
-        binding = (GremlinLang.Binding) ((GremlinLang) bytecode.getStepInstructions().get(5).getArguments()[0]).getStepInstructions().get(0).getArguments()[0];
-        assertEquals("b", binding.variable());
-        assertEquals("knows", binding.value());
-        binding = (GremlinLang.Binding) ((GremlinLang) bytecode.getStepInstructions().get(5).getArguments()[0]).getStepInstructions().get(1).getArguments()[1];
-        assertEquals("c", binding.variable());
-        assertEquals(P.gt(32), binding.value());
-        binding = (GremlinLang.Binding) ((GremlinLang) ((GremlinLang) bytecode.getStepInstructions().get(5).getArguments()[0]).getStepInstructions().get(2).getArguments()[0]).getStepInstructions().get(0).getArguments()[0];
-        assertEquals("d", binding.variable());
-        assertEquals("name", binding.value());
-        binding = (GremlinLang.Binding) bytecode.getStepInstructions().get(6).getArguments()[0];
-        assertEquals("a", binding.variable());
-        assertEquals("created", binding.value());
-    }
-
-    @Test
-    public void shouldConvertStrategies() {
-        final GraphTraversalSource g = EmptyGraph.instance().traversal();
-        GremlinLang bytecode = g.withStrategies(ReadOnlyStrategy.instance()).getGremlinLang();
-        assertEquals(ReadOnlyStrategy.instance(), bytecode.getSourceInstructions().get(0).getArguments()[0]);
-        bytecode = g.withStrategies(SubgraphStrategy.build().edges(__.hasLabel("knows")).create()).getGremlinLang();
-        assertEquals(SubgraphStrategy.build().edges(__.hasLabel("knows")).create().getEdgeCriterion().asAdmin().getGremlinLang(),
-                ((SubgraphStrategy) bytecode.getSourceInstructions().iterator().next().getArguments()[0]).getEdgeCriterion().asAdmin().getGremlinLang());
-    }
-
-    @Test
-    public void shouldConvertComputer() {
-        final GraphTraversalSource g = EmptyGraph.instance().traversal();
-        GremlinLang bytecode = g.withComputer(Computer.compute().workers(10)).getGremlinLang();
-        assertEquals(VertexProgramStrategy.build().create(), bytecode.getSourceInstructions().get(0).getArguments()[0]);
-        assertEquals(VertexProgramStrategy.build().workers(10).create().getConfiguration().getInt(VertexProgramStrategy.WORKERS),
-                ((VertexProgramStrategy) bytecode.getSourceInstructions().iterator().next().getArguments()[0]).getConfiguration().getInt(VertexProgramStrategy.WORKERS));
-    }
-
-    @Test
-    public void shouldNotHaveHashCollisionsWithBindings() {
-        // ideally we should be using guava's EqualsTester to test equals/hashCode but the equals/hashCode contract allows hash collisions.
-        // Yet we should avoid hash collisions in case these objects are being used in data structures that rely on hashCode
-        final GremlinLang.Binding<String> first = new GremlinLang.Binding<>("3", "7");
-        final GremlinLang.Binding<String> second = new GremlinLang.Binding<>("7", "3");
-        assertNotEquals(first, second);
-        assertNotEquals(first.hashCode(), second.hashCode());
-    }
-
-    @Test
-    public void shouldNotHaveHashCollisions() {
-        // ideally we should be using guava's EqualsTester to test equals/hashCode but the equals/hashCode contract allows hash collisions.
-        // Yet we should avoid hash collisions in case these objects are being used in data structures that rely on hashCode
-        final GremlinLang first = new GremlinLang();
-        first.addSource("3", "7");
-        first.addStep("7", "3");
-        final GremlinLang second = new GremlinLang();
-        second.addSource("7", "3");
-        second.addStep("3", "7");
-        assertNotEquals(first, second);
-        assertNotEquals(first.hashCode(), second.hashCode());
-    }
-
-    @Test
-    public void shouldHandleArrays() {
-        final GremlinLang b = new GremlinLang();
-        b.addStep(GraphTraversal.Symbols.property, "k", new Object[] { new String[] {"A", "B", "C"}});
-        assertEquals(1, b.getStepInstructions().size());
-        assertEquals(2, b.getStepInstructions().get(0).getArguments().length);
-    }
-
-    @Test
-    public void shouldAvoidArgumentsNpe() {
-        final GremlinLang first = new GremlinLang();
-        try {
-            first.addSource("3", null);
-            first.addSource(TraversalSource.Symbols.withoutStrategies, null);
-        } catch (Exception e) {
-            e.getCause().printStackTrace(System.err);
-        }
-    }
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
index 28cc4aaabf..58888b2799 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
@@ -28,8 +28,9 @@ import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
 import org.apache.tinkerpop.gremlin.util.DatetimeHelper;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -40,9 +41,9 @@ import java.util.HashSet;
 
 import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
 import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.select;
 import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
 import static org.junit.Assert.assertEquals;
 
@@ -86,12 +87,15 @@ public class GremlinLangTest {
                 {g.V().has(T.label, "person"), "g.V().has(T.label,\"person\")"},
                 {g.addE("knows").from(new DetachedVertex(1, "test1", Collections.emptyList())).to(new DetachedVertex(6, "test2", Collections.emptyList())),
                         "g.addE(\"knows\").from(new ReferenceVertex(1,\"test1\")).to(new ReferenceVertex(6,\"test2\"))"},
+                {g.E(new ReferenceEdge(1, "test label", new ReferenceVertex(1, "v1"), new ReferenceVertex(1, "v1"))),
+                        "g.E(_0)"},
                 {g.V(Bindings.instance().of("x", 1)), "g.V(1)"},
                 {g.V().hasId(P.within(Collections.emptyList())).count(), "g.V().hasId(P.within([])).count()"},
                 {g.V(1).outE().has("weight", P.inside(0.0, 0.6)), "g.V(1).outE().has(\"weight\",P.gt(0.0D).and(P.lt(0.6D)))"},
                 {g.withSack(1.0, Operator.sum).V(1).local(__.out("knows").barrier(SackFunctions.Barrier.normSack)).in("knows").barrier().sack(),
                         "g.withSack(1.0D,Operator.sum).V(1).local(__.out(\"knows\").barrier(Barrier.normSack)).in(\"knows\").barrier().sack()"},
                 {g.inject(Arrays.asList(1, 2, 3)).skip(local, 1), "g.inject([1,2,3]).skip(Scope.local,1L)"},
+                {g.V().repeat(both()).times(10), "g.V().repeat(__.both()).times(10)"},
                 {g.V().has("name", "marko").
                         project("name", "friendsNames").
                         by("name").
@@ -111,8 +115,8 @@ public class GremlinLangTest {
                         "g.withStrategies(new SubgraphStrategy(checkAdjacentVertices:true,vertices:__.hasLabel(\"person\"))).V()",},
                 {g.withStrategies(SubgraphStrategy.build().vertices(__.has("name", P.within("josh", "lop", "ripple"))).create()).V(),
                         "g.withStrategies(new SubgraphStrategy(checkAdjacentVertices:true,vertices:__.has(\"name\",P.within([\"josh\",\"lop\",\"ripple\"])))).V()"},
-                {g.inject(Parameter.var("x","x")).V(Parameter.var("ids", new int[]{1, 2, 3})), "g.inject(x).V(ids)"},
-                {newG().inject(Parameter.value("test1"),Parameter.value("test2")), "g.inject(_0,_1)"},
+                {g.inject(Parameter.var("x", "x")).V(Parameter.var("ids", new int[]{1, 2, 3})), "g.inject(x).V(ids)"},
+                {newG().inject(Parameter.value("test1"), Parameter.value("test2")), "g.inject(_0,_1)"},
                 {newG().inject(new HashSet<>(Arrays.asList(1, 2))), "g.inject(_0)"},
         });
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
index fe95cc5ae3..82bad328ba 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
@@ -18,9 +18,6 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
 
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
@@ -31,16 +28,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.List;
-import java.util.Random;
 import java.util.Set;
-import java.util.function.Consumer;
 
 import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.junit.Assert.assertEquals;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -121,114 +113,4 @@ public class GraphTraversalTest {
             }
         }
     }
-
-    @Test
-    public void shouldGenerateCorrespondingBytecodeFromGraphTraversalMethods() throws Exception {
-        final long seed = System.currentTimeMillis();
-        final Random random = new Random(seed);
-        logger.info("***RANDOM*** GraphTraversalTest.shouldGenerateCorrespondingBytecodeFromGraphTraversalMethods - seed is {}", seed);
-
-        for (Method stepMethod : GraphTraversal.class.getMethods()) {
-            if (Traversal.class.isAssignableFrom(stepMethod.getReturnType()) && !IGNORES_BYTECODE.contains(stepMethod.getName())) {
-                final GraphTraversal.Admin<?, ?> traversal = new DefaultGraphTraversal<>();
-                Object[] arguments = new Object[stepMethod.getParameterCount()];
-                final List<Object> list = new ArrayList<>();
-                boolean doTest = true;
-                ///
-                if (stepMethod.getName().equals("by"))
-                    traversal.order();
-                else if (stepMethod.getName().equals("with"))
-                    randomPossibleStep(random, traversal,
-                            GraphTraversal::V, GraphTraversal::shortestPath, GraphTraversal::pageRank,
-                            GraphTraversal::connectedComponent, GraphTraversal::peerPressure, t -> t.addE("link"),
-                            GraphTraversal::addV);
-                else if (stepMethod.getName().equals("option"))
-                    traversal.branch(__.identity().out(randomString(random)));
-                else if (stepMethod.getName().equals("to") || stepMethod.getName().equals("from"))
-                    traversal.addE(randomString(random));
-
-                if (stepMethod.getName().equals("range")) {
-                    if (Scope.class.isAssignableFrom(stepMethod.getParameterTypes()[0])) {
-                        list.add(arguments[0] = Scope.local);
-                        list.add(arguments[1] = (long) (Math.abs(random.nextInt(10))));
-                        list.add(arguments[2] = (long) (Math.abs(random.nextInt(10) + 100)));
-                    } else {
-                        list.add(arguments[0] = (long) (Math.abs(random.nextInt(10))));
-                        list.add(arguments[1] = (long) (Math.abs(random.nextInt(10) + 100)));
-                    }
-                } else if (stepMethod.getName().equals("math")) {
-                    list.add(arguments[0] = random.nextInt(100) + " + " + random.nextInt(100));
-                } else if (stepMethod.getName().equals("project")) {
-                    // project has two arguments [String, String[]]
-                    list.add(arguments[0] = randomString(random));
-                    arguments[1] = new String[random.nextInt(10) + 1];
-                    for (int j = 0; j < ((String[]) arguments[1]).length; j++) {
-                        ((String[]) arguments[1])[j] = arguments[0] + randomString(random); // adds argument[0] to avoid getting its duplicate in argument[1]
-                    }
-                    // remove duplicates in argument[1] if any
-                    arguments[1] = Arrays.stream((String[]) arguments[1]).distinct().toArray(String[]::new);
-                    list.addAll(Arrays.asList((String[]) arguments[1]));
-                } else {
-                    for (int i = 0; i < stepMethod.getParameterTypes().length; i++) {
-                        final Class<?> type = stepMethod.getParameterTypes()[i];
-                        if (int.class.isAssignableFrom(type))
-                            list.add(arguments[i] = Math.abs(random.nextInt(100)));
-                        else if (long.class.isAssignableFrom(type))
-                            list.add(arguments[i] = (long) (Math.abs(random.nextInt(100))));
-                        else if (double.class.isAssignableFrom(type))
-                            list.add(arguments[i] = Math.abs(random.nextDouble()));
-                        else if (String.class.isAssignableFrom(type))
-                            list.add(arguments[i] = randomString(random));
-                        else if (boolean.class.isAssignableFrom(type))
-                            list.add(arguments[i] = random.nextBoolean());
-                        else if (String[].class.isAssignableFrom(type)) {
-                            arguments[i] = new String[random.nextInt(10) + 1];
-                            for (int j = 0; j < ((String[]) arguments[i]).length; j++) {
-                                list.add(((String[]) arguments[i])[j] = randomString(random));
-                            }
-                        } else if (Traversal.class.isAssignableFrom(type))
-                            list.add(arguments[i] = __.out(randomString(random)).in(randomString(random)).groupCount(randomString(random)));
-                        else if (Traversal[].class.isAssignableFrom(type)) {
-                            arguments[i] = new Traversal[random.nextInt(5) + 1];
-                            for (int j = 0; j < ((Traversal[]) arguments[i]).length; j++) {
-                                list.add(((Traversal[]) arguments[i])[j] = __.as(randomString(random)).out(randomString(random)).both(randomString(random)).has(randomString(random)).store(randomString(random)));
-                            }
-                        } else if (P.class.isAssignableFrom(type))
-                            list.add(arguments[i] = P.gte(stepMethod.getName().contains("where") ? randomString(random) : random.nextInt()));
-                        else if (Enum.class.isAssignableFrom(type))
-                            list.add(arguments[i] = type.getEnumConstants()[0]);
-                        else {
-                            // System.out.println(type);
-                            doTest = false;
-                            break;
-                        }
-                    }
-                }
-                if (doTest) {
-                    stepMethod.invoke(traversal, arguments);
-                    // System.out.print(stepMethod.getName() + "---");
-                    final GremlinLang.Instruction instruction = traversal.getGremlinLang().getStepInstructions().get(traversal.getGremlinLang().getStepInstructions().size() - 1);
-                    // System.out.println(instruction);
-                    assertEquals(stepMethod.getName(), instruction.getOperator());
-                    assertEquals(list.size(), instruction.getArguments().length);
-                    for (int i = 0; i < list.size(); i++) {
-                        assertEquals(list.get(i) instanceof Traversal ? ((Traversal) list.get(i)).asAdmin().getGremlinLang() : list.get(i), instruction.getArguments()[i]);
-                    }
-                }
-            }
-        }
-    }
-
-    private static void randomPossibleStep(final Random random, final GraphTraversal t, final Consumer<GraphTraversal>... possible) {
-        possible[random.nextInt(possible.length)].accept(t);
-    }
-
-    private static String randomString(final Random random) {
-        String s = "";
-        for (int i = 0; i < random.nextInt(10) + 1; i++) {
-            s = (s + (char) (random.nextInt(100) + 1)).trim();
-        }
-        final String temp = "" + random.nextBoolean();
-        return temp.substring(temp.length() - (random.nextInt(2) + 1)) + s.replace("\"", "x").replace(",", "y").replace("'", "z");
-    }
 }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConnectiveStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConnectiveStrategyTest.java
index ca84ee95e1..bf74269b9b 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConnectiveStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConnectiveStrategyTest.java
@@ -18,11 +18,9 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,8 +37,6 @@ import static org.junit.Assert.assertEquals;
 @RunWith(Parameterized.class)
 public class ConnectiveStrategyTest {
 
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
-
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
 
@@ -56,7 +52,7 @@ public class ConnectiveStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         applyConnectiveStrategy(original);
         assertEquals(repr, optimized, original);
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java
index 2bfdcc532d..ebe2dd2179 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java
@@ -19,16 +19,14 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
@@ -37,10 +35,10 @@ import org.junit.runners.Parameterized;
 
 import java.util.Arrays;
 
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
@@ -49,7 +47,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
 @RunWith(Parameterized.class)
 public class ElementIdStrategyTraverseTest {
     private static Traversal traversalWithAddV;
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     static {
         final Graph mockedGraph = mock(Graph.class);
@@ -85,7 +82,7 @@ public class ElementIdStrategyTraverseTest {
 
     @Test
     public void shouldAlterTraversalToIncludeIdWhereNecessary() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin("__");
         final ElementIdStrategy strategy = ElementIdStrategy.build().create();
         strategy.apply(traversal.asAdmin());
 
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
index 1d36f609bf..0088640da2 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
@@ -18,13 +18,11 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ConsoleMutationListener;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.MutationListener;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -33,7 +31,6 @@ import org.junit.runners.Parameterized;
 import java.util.Arrays;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.addV;
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -42,8 +39,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class EventStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
-
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
         return Arrays.asList(new Object[][]{
@@ -71,7 +66,7 @@ public class EventStrategyTest {
 
     @Test
     public void shouldEventOnMutatingSteps() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         final MutationListener listener1 = new ConsoleMutationListener(EmptyGraph.instance());
         final EventStrategy eventStrategy = EventStrategy.build()
                 .addListener(listener1).create();
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java
index 957bdcae52..b4d25f2626 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java
@@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Contains;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
@@ -30,7 +29,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartSte
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
@@ -47,12 +45,11 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.hamcrest.core.IsIterableContaining.hasItem;
 import static org.hamcrest.core.IsNot.not;
-import static org.hamcrest.core.IsIterableContaining.hasItem;
 import static org.junit.Assert.assertEquals;
-import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
@@ -66,7 +63,6 @@ public class PartitionStrategyTest {
 
     @RunWith(Parameterized.class)
     public static class PartitionStrategyTraverseTest {
-        private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
         @Parameterized.Parameters(name = "{0}")
         public static Iterable<Object[]> data() {
@@ -111,7 +107,7 @@ public class PartitionStrategyTest {
 
         @Test
         public void shouldIncludeAdditionalHasStepsAndAppendPartitionOnMutatingSteps() {
-            final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+            final String repr = traversal.getGremlinLang().getGremlin();
             final PartitionStrategy strategy = PartitionStrategy.build()
                     .partitionKey("p").writePartition("a").readPartitions("a").create();
 
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java
index 26aaa33a80..39b4d312c2 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java
@@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
@@ -32,7 +31,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.InlineFilterStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -58,15 +56,12 @@ import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.values
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 @RunWith(Enclosed.class)
 public class SubgraphStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
-
     @RunWith(Parameterized.class)
     public static class TraverseTest {
         private static final GraphTraversalSource g = EmptyGraph.instance().traversal();
@@ -100,7 +95,7 @@ public class SubgraphStrategyTest {
 
         @Test
         public void shouldSubgraph() {
-            final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+            final String repr = traversal.getGremlinLang().getGremlin();
             final SubgraphStrategy strategy = SubgraphStrategy.build().edges(__.has("edge")).vertices(__.has("vertex")).create();
             strategy.apply(traversal);
 
@@ -120,7 +115,7 @@ public class SubgraphStrategyTest {
 
         @Test
         public void doTest() {
-            final String repr = translator.translate(original.getGremlinLang()).getScript();
+            final String repr = original.getGremlinLang().getGremlin();
             final TraversalStrategies originalStrategies = new DefaultTraversalStrategies();
             originalStrategies.addStrategies(SubgraphStrategy.build().
                     vertices(__.and(has("name", "marko"), has("age", 29))).
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategyTest.java
index baeb3de7a4..6e669b4cf9 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategyTest.java
@@ -24,14 +24,12 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.Computer
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.junit.Test;
@@ -47,7 +45,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class VertexProgramStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
@@ -58,7 +55,7 @@ public class VertexProgramStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(new VertexProgramStrategy(Computer.compute()), ComputerVerificationStrategy.instance());
         original.asAdmin().setStrategies(strategies);
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java
index f3be627781..dac509cfa7 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java
@@ -18,11 +18,9 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -37,7 +35,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class AdjacentToIncidentStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
@@ -55,7 +52,7 @@ public class AdjacentToIncidentStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin();
         applyAdjacentToIncidentStrategy(original);
         assertEquals(repr, optimized, original);
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategyTest.java
index 5a4cfd11cc..c093646f32 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategyTest.java
@@ -20,12 +20,10 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.junit.Test;
@@ -44,7 +42,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class ByModulatorOptimizationStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter
     public Traversal.Admin original;
@@ -186,7 +183,7 @@ public class ByModulatorOptimizationStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin();
         applyByModulatorOptimizationStrategy(original);
         assertEquals(repr, optimized, original);
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/CountStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/CountStrategyTest.java
index 9d5646ea36..1b4a0ab785 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/CountStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/CountStrategyTest.java
@@ -19,11 +19,9 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -48,7 +46,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class CountStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
@@ -158,7 +155,7 @@ public class CountStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin();
         applyCountStrategy(original);
         assertEquals(repr, optimized, original);
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyTest.java
index 5cfe5b3282..71ece0d65f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyTest.java
@@ -19,14 +19,12 @@
 
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -43,7 +41,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class EarlyLimitStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter()
     public Traversal.Admin original;
@@ -56,7 +53,7 @@ public class EarlyLimitStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(EarlyLimitStrategy.instance());
         for (final TraversalStrategy strategy : this.otherStrategies) {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/FilterRankingStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/FilterRankingStrategyTest.java
index b326b81487..b6a1642139 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/FilterRankingStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/FilterRankingStrategyTest.java
@@ -19,12 +19,10 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
@@ -55,7 +53,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class FilterRankingStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     public static Iterable<Object[]> data() {
         return generateTestParameters();
@@ -72,7 +69,7 @@ public class FilterRankingStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(FilterRankingStrategy.instance());
         for (final TraversalStrategy strategy : this.otherStrategies) {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java
index ebe05edd78..ea1778d8d3 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java
@@ -18,11 +18,9 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -40,7 +38,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class IdentityRemovalStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
@@ -69,7 +66,7 @@ public class IdentityRemovalStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         applyIdentityRemovalStrategy(original);
         assertEquals(repr, optimized, original);
     }
@@ -79,6 +76,5 @@ public class IdentityRemovalStrategyTest {
         strategies.addStrategies(IdentityRemovalStrategy.instance());
         traversal.asAdmin().setStrategies(strategies);
         traversal.asAdmin().applyStrategies();
-
     }
 }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java
index 89662f25eb..8a21ebe564 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java
@@ -18,12 +18,10 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
@@ -40,7 +38,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class IncidentToAdjacentStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
@@ -74,7 +71,7 @@ public class IncidentToAdjacentStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(IncidentToAdjacentStrategy.instance());
         this.original.asAdmin().setStrategies(strategies);
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java
index 23ffe5ebc0..23729bfba7 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java
@@ -20,7 +20,6 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
@@ -29,7 +28,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
@@ -65,7 +63,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class InlineFilterStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
@@ -78,7 +75,7 @@ public class InlineFilterStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(InlineFilterStrategy.instance());
 
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategyTest.java
index 97f50ab522..273618b0b6 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategyTest.java
@@ -19,12 +19,10 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -41,8 +39,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class LazyBarrierStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
-
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
         return generateTestParameters();
@@ -59,7 +55,7 @@ public class LazyBarrierStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(LazyBarrierStrategy.instance());
         for (final TraversalStrategy strategy : this.otherStrategies) {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategyTest.java
index f98df222ef..ed0187399a 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategyTest.java
@@ -19,12 +19,10 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -43,7 +41,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class MatchPredicateStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin original;
@@ -56,7 +53,7 @@ public class MatchPredicateStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(MatchPredicateStrategy.instance());
         for (final TraversalStrategy strategy : this.otherStrategies) {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderLimitStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderLimitStrategyTest.java
index 00dcde7a28..2e4b69fc5a 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderLimitStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderLimitStrategyTest.java
@@ -20,12 +20,10 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -42,7 +40,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class OrderLimitStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin traversal;
@@ -59,7 +56,7 @@ public class OrderLimitStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         traversal.asAdmin().setParent(new TraversalVertexProgramStep(EmptyTraversal.instance(), EmptyTraversal.instance())); // trick it
         applyOrderLimitStrategyStrategy(traversal);
         assertEquals(repr, limit, TraversalHelper.getFirstStepOfAssignableClass(OrderGlobalStep.class, traversal.asAdmin()).get().getLimit());
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java
index 45cdc3e14f..e1ac45cbcc 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java
@@ -22,17 +22,15 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Pop;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.ValueTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.ValueTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.junit.Test;
@@ -53,7 +51,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class PathProcessorStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
     private static final Collection<TraversalStrategy> withProductiveByStrategy =
             Stream.concat(Stream.of(ProductiveByStrategy.instance()),
                           TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList().stream()).collect(Collectors.toList());
@@ -69,7 +66,7 @@ public class PathProcessorStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         final Traversal.Admin<?, ?> rootTraversal = new DefaultGraphTraversal<>();
         final TraversalParent parent = new TraversalVertexProgramStep(rootTraversal, this.original.asAdmin());
         rootTraversal.addStep(parent.asStep());
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java
index 43d04b2e3c..5f489649c9 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathRetractionStrategyTest.java
@@ -23,16 +23,13 @@ import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
-
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -68,7 +65,6 @@ import static org.mockito.Mockito.when;
  */
 @RunWith(Parameterized.class)
 public class PathRetractionStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     /**
      * Always need LazyBarrierStrategy because it will trigger barrier() additions in PathRetractionStrategy.
@@ -92,7 +88,7 @@ public class PathRetractionStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         for (final TraversalStrategies currentStrategies : this.strategies) {
             final Traversal.Admin<?, ?> currentTraversal = this.original.clone();
             currentTraversal.setStrategies(currentStrategies);
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProductiveByStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProductiveByStrategyTest.java
index 03397fbf80..440e02defb 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProductiveByStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ProductiveByStrategyTest.java
@@ -20,13 +20,11 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.ValueTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.junit.Test;
@@ -47,7 +45,6 @@ import static org.junit.Assert.assertEquals;
 
 @RunWith(Parameterized.class)
 public class ProductiveByStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
     private static final Traversal<Object,Object> ageValueTraversal = new ValueTraversal<>("age");
     private static final Traversal<Object,Object> nameValueTraversal = new ValueTraversal<>("name");
     private static final Traversal<Object,Object> nullTraversal = new ConstantTraversal<>(null);
@@ -70,7 +67,7 @@ public class ProductiveByStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         applyProductiveByStrategy(original);
         assertEquals(repr, optimized, original);
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RepeatUnrollStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RepeatUnrollStrategyTest.java
index af07df4534..46e9441bc7 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RepeatUnrollStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RepeatUnrollStrategyTest.java
@@ -19,14 +19,12 @@
 
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.NoOpBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -48,7 +46,6 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class RepeatUnrollStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameter(value = 0)
     public Traversal.Admin<?,?> original;
@@ -61,7 +58,7 @@ public class RepeatUnrollStrategyTest {
 
     @Test
     public void doTest() {
-        final String repr = translator.translate(original.getGremlinLang()).getScript();
+        final String repr = original.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategiesWithLazy = new DefaultTraversalStrategies();
         strategiesWithLazy.addStrategies(RepeatUnrollStrategy.instance());
         Traversal.Admin<?, ?> clonedOriginal = this.original.clone();
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
index 148afd0bd5..574ff4b911 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
@@ -20,11 +20,9 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.junit.Test;
@@ -45,7 +43,6 @@ import static org.junit.Assert.fail;
  */
 @RunWith(Parameterized.class)
 public class ComputerVerificationStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
@@ -70,7 +67,7 @@ public class ComputerVerificationStrategyTest {
 
     @Test
     public void shouldBeVerifiedIllegal() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
 
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(ComputerVerificationStrategy.instance());
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EdgeLabelVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EdgeLabelVerificationStrategyTest.java
index 778385d6b5..2d24d9678c 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EdgeLabelVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/EdgeLabelVerificationStrategyTest.java
@@ -19,11 +19,9 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
 import nl.altindag.log.LogCaptor;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.junit.AfterClass;
@@ -46,7 +44,6 @@ import static org.junit.Assert.fail;
  */
 @RunWith(Parameterized.class)
 public class EdgeLabelVerificationStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     private final static Predicate<String> MSG_PREDICATE = Pattern.compile(
             "^The provided traversal contains a vertex step without any specified edge label: VertexStep.*")
@@ -93,7 +90,7 @@ public class EdgeLabelVerificationStrategyTest {
 
     @Test
     public void shouldIgnore() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(EdgeLabelVerificationStrategy.build().create());
         final Traversal traversal = this.traversal.asAdmin().clone();
@@ -104,7 +101,7 @@ public class EdgeLabelVerificationStrategyTest {
 
     @Test
     public void shouldOnlyThrow() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(EdgeLabelVerificationStrategy.build().throwException().create());
         final Traversal traversal = this.traversal.asAdmin().clone();
@@ -124,7 +121,7 @@ public class EdgeLabelVerificationStrategyTest {
 
     @Test
     public void shouldOnlyLog() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(EdgeLabelVerificationStrategy.build().logWarning().create());
         final Traversal traversal = this.traversal.asAdmin().clone();
@@ -138,7 +135,7 @@ public class EdgeLabelVerificationStrategyTest {
 
     @Test
     public void shouldThrowAndLog() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(EdgeLabelVerificationStrategy.build().throwException().logWarning().create());
         final Traversal traversal = this.traversal.asAdmin().clone();
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
index 52cee035f8..4ba5cad8a8 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
@@ -20,13 +20,11 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
@@ -48,7 +46,6 @@ import static org.junit.Assert.fail;
  */
 @RunWith(Parameterized.class)
 public class LambdaRestrictionStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
@@ -87,7 +84,7 @@ public class LambdaRestrictionStrategyTest {
 
     @Test
     public void shouldBeVerifiedIllegal() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(ProfileStrategy.instance());
         strategies.addStrategies(LambdaRestrictionStrategy.instance());
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java
index 2fccb0bf7f..92ac53cfa8 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java
@@ -18,10 +18,8 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 import org.junit.Test;
@@ -39,7 +37,6 @@ import static org.junit.Assert.fail;
  */
 @RunWith(Parameterized.class)
 public class ReadOnlyStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
@@ -61,7 +58,7 @@ public class ReadOnlyStrategyTest {
 
     @Test
     public void shouldBeVerifiedIllegal() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         try {
             ReadOnlyStrategy.instance().apply(this.traversal.asAdmin());
             fail("The strategy should have found a mutating step: " + repr);
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java
index cbdffe3dd9..83feb0032b 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java
@@ -19,11 +19,9 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
 import nl.altindag.log.LogCaptor;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.junit.AfterClass;
@@ -47,7 +45,6 @@ import static org.junit.Assert.fail;
  */
 @RunWith(Parameterized.class)
 public class ReservedKeysVerificationStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     private final static Predicate<String> MSG_PREDICATE = Pattern.compile(
             ".*that is setting a property key to a reserved word.*")
@@ -93,7 +90,6 @@ public class ReservedKeysVerificationStrategyTest {
 
     @Test
     public void shouldIgnore() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         strategies.addStrategies(ReservedKeysVerificationStrategy.build().create());
         final Traversal traversal = this.traversal.asAdmin().clone();
@@ -104,7 +100,7 @@ public class ReservedKeysVerificationStrategyTest {
 
     @Test
     public void shouldOnlyThrow() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         final ReservedKeysVerificationStrategy.Builder builder = ReservedKeysVerificationStrategy.build().throwException();
         if (repr.equals("__.addV().property(\"x\",\"xyz\",\"not-allowed\",\"xxx\")"))
@@ -127,7 +123,7 @@ public class ReservedKeysVerificationStrategyTest {
 
     @Test
     public void shouldOnlyLog() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         final ReservedKeysVerificationStrategy.Builder builder = ReservedKeysVerificationStrategy.build().logWarning();
         if (repr.equals("__.addV().property(\"x\",\"xyz\",\"not-allowed\",\"xxx\")"))
@@ -144,7 +140,7 @@ public class ReservedKeysVerificationStrategyTest {
 
     @Test
     public void shouldThrowAndLog() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin("__");
         final TraversalStrategies strategies = new DefaultTraversalStrategies();
         final ReservedKeysVerificationStrategy.Builder builder = ReservedKeysVerificationStrategy.build().
                 throwException().logWarning();
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
index 2935d76052..edec3fb92e 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
@@ -18,12 +18,10 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.RequirementsStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.apache.tinkerpop.gremlin.util.TestSupport;
@@ -37,8 +35,8 @@ import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.repeat;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.sum;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
+import static org.junit.Assert.fail;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -46,7 +44,6 @@ import static org.hamcrest.core.IsInstanceOf.instanceOf;
  */
 @RunWith(Parameterized.class)
 public class StandardVerificationStrategyTest {
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("__");
 
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() throws Exception {
@@ -71,7 +68,7 @@ public class StandardVerificationStrategyTest {
 
     @Test
     public void shouldBeVerified() {
-        final String repr = translator.translate(traversal.getGremlinLang()).getScript();
+        final String repr = traversal.getGremlinLang().getGremlin();
         final Traversal copy = copyAndConfigureTraversal(traversal);
 
         if (legalTraversal) {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslatorTest.java
deleted file mode 100644
index cd5ade506d..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslatorTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.tinkerpop.gremlin.language.grammar.GremlinQueryParser;
-import org.apache.tinkerpop.gremlin.language.grammar.NoOpTerminalVisitor;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.javatuples.Pair;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.UUID;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.junit.Assert.assertEquals;
-
-public class AnonymizingTypeTranslatorTest {
-    private static final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-
-    private void testAnonymize(final String query, final String expected) {
-        try {
-            final GremlinLang bc = (GremlinLang) GremlinQueryParser.parse(query, new NoOpTerminalVisitor());
-            final Translator.ScriptTranslator translator = GroovyTranslator.of("g", new AnonymizingTypeTranslator());
-            final String converted = translator.translate(bc).getScript();
-            Assert.assertEquals(expected, converted);
-        } catch (Exception ex) {
-            throw ex instanceof RuntimeException ? (RuntimeException) ex : new RuntimeException(ex);
-        }
-    }
-
-    private void testAnonymize(final Traversal<?,?> t, final String expected) {
-        final Translator.ScriptTranslator translator = GroovyTranslator.of("g", new AnonymizingTypeTranslator());
-        final String converted = translator.translate(t).getScript();
-        Assert.assertEquals(expected, converted);
-    }
-
-    @Test
-    public void testBasicAnonymize() {
-
-        Arrays.asList(
-            
-            new Pair<>("g.V().hasLabel('person')",
-                       "g.V().hasLabel(string0)"),
-            new Pair<>("g.V('3').valueMap(true).unfold().toList()",
-                       "g.V(string0).valueMap(true).unfold().toList()"),
-            new Pair<>("g.V().has('code','AUS').out().out().out().has('code','AGR').path().by('code').toList()",
-                       "g.V().has(string0,string1).out().out().out().has(string0,string2).path().by(string0).toList()"),
-            new Pair<>("g.V().has('length', 10L)",
-                       "g.V().has(string0,long0)"),
-            new Pair<>("g.V().hasId(between('1','3'))",
-                       "g.V().hasId(P.gte(string0).and(P.lt(string1)))"),
-            new Pair<>("g.V().hasId(between(1.0d,6.0d))",
-                       "g.V().hasId(P.gte(double0).and(P.lt(double1)))"),
-            new Pair<>("g.V().where(label().is(eq('airport'))).count().toList()",
-                       "g.V().where(__.label().is(P.eq(string0))).count().toList()"),
-            new Pair<>("g.V().has(label,'person').count()",
-                       "g.V().has(T.label,string0).count()"),
-            new Pair<>("g.V().has('runways',inside(1,3)).values('code','airport').toList()",
-                       "g.V().has(string0,P.gt(integer0).and(P.lt(integer1))).values(string1,string2).toList()"),
-            new Pair<>("g.V().hasId(within(100..115)).out().hasId(lte(46)).count().toList()",
-                       "g.V().hasId(P.within([integer0, integer1, integer2, integer3, integer4, integer5, integer6, integer7, integer8, integer9, integer10, integer11, integer12, integer13, integer14, integer15])).out().hasId(P.lte(integer16)).count().toList()"),
-            new Pair<>("g.V().out('nothing').tryNext()",
-                       "g.V().out(string0).tryNext()"),
-            new Pair<>("g.V().out('created').next(2)",
-                       "g.V().out(string0).next(integer0)"),
-            new Pair<>("g.V().out('created').toList()",
-                       "g.V().out(string0).toList()"),
-            new Pair<>("g.V().out('created').toSet()",
-                       "g.V().out(string0).toSet()"),
-            new Pair<>("g.V().out('created').explain()",
-                       "g.V().out(string0).explain()"),
-            new Pair<>("g.V().out('created').toBulkSet()",
-                       "g.V().out(string0).toBulkSet()"),
-            new Pair<>("g.V(1).property('city','santa fe').property('state','new mexico').valueMap()",
-                       "g.V(integer0).property(string0,string1).property(string2,string3).valueMap()"),
-            new Pair<>("g.V().values('name').order().by(Order.desc)",
-                       "g.V().values(string0).order().by(Order.desc)"),
-            new Pair<>("g.V(1).property(Cardinality.single, 'x', 'y')",
-                       "g.V(integer0).property(VertexProperty.Cardinality.single,string0,string1)"),
-            new Pair<>("g.V().as('x').out('created')",
-                       "g.V().as(string0).out(string1)"),
-            new Pair<>("g.V(3,4,5).aggregate('x').has('name','josh').as('a').select('x').unfold().hasLabel('software').addE('createdBy').to('a')",
-                       "g.V(integer0,integer1,integer2).aggregate(string0).has(string1,string2).as(string3).select(string0).unfold().hasLabel(string4).addE(string5).to(string3)")
-
-        ).forEach(test -> testAnonymize(test.getValue0(), test.getValue1()));
-
-    }
-
-    @Test
-    public void shouldTranslateDate() {
-        final Calendar c = Calendar.getInstance();
-        c.set(1975, Calendar.SEPTEMBER, 7);
-        final Date d = c.getTime();
-        testAnonymize(g.inject(d), "g.inject(date0)");
-    }
-
-    @Test
-    public void shouldTranslateTimestamp() {
-        final Calendar c = Calendar.getInstance();
-        c.set(1975, Calendar.SEPTEMBER, 7);
-        final Timestamp t = new Timestamp(c.getTime().getTime());
-        testAnonymize(g.inject(t), "g.inject(timestamp0)");
-    }
-
-    @Test
-    public void shouldTranslateUuid() {
-        final UUID uuid = UUID.fromString("ffffffff-fd49-1e4b-0000-00000d4b8a1d");
-        testAnonymize(g.inject(uuid), "g.inject(uuid0)");
-    }
-
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java
deleted file mode 100644
index 231054797a..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.tinkerpop.gremlin.process.traversal.GraphOp;
-import org.apache.tinkerpop.gremlin.process.traversal.Merge;
-import org.apache.tinkerpop.gremlin.process.traversal.Order;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Pop;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.Column;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.T;
-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.DetachedVertex;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.apache.tinkerpop.gremlin.process.traversal.Order.asc;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class DotNetTranslatorTest {
-    private static final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-    private static final Translator.ScriptTranslator translator = DotNetTranslator.of("g");
-
-    @Test
-    public void shouldTranslateStrategies() throws Exception {
-        assertEquals("g.WithStrategies(new ReadOnlyStrategy()," +
-                        "new SubgraphStrategy(checkAdjacentVertices: false, vertices: __.HasLabel(\"person\"))," +
-                        "new SeedStrategy(seed: 999999)).V().Has(\"name\")",
-                translator.translate(g.withStrategies(ReadOnlyStrategy.instance(),
-                        SubgraphStrategy.build().checkAdjacentVertices(false).vertices(hasLabel("person")).create(),
-                        SeedStrategy.build().seed(999999).create()).
-                        V().has("name").asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldTranslateMaps() {
-        final String script = translator.translate(g.V().id().is(new LinkedHashMap<Object,Object>() {{
-            put(3, "32");
-            put(Arrays.asList(1, 2, 3.1d), 4);
-        }}).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Id().Is(new Dictionary<object,object> {{3, \"32\"}, {new List<object> {1, 2, 3.1}, 4}})", script);
-    }
-
-    @Test
-    public void shouldTranslateValues() {
-        final String script = translator.translate(g.V().values("name").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Values<object>(\"name\")", script);
-    }
-
-    @Test
-    public void shouldTranslateValue() {
-        final String script = translator.translate(g.V().properties().order().by(T.value, asc).value().asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Properties<object>().Order().By(T.Value,Order.Asc).Value<object>()", script);
-    }
-
-    @Test
-    public void shouldTranslateInject() {
-        String script = translator.translate(g.inject(10,20,null,20,10,10).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.Inject<object>(10,20,null,20,10,10)", script);
-        script = translator.translate(g.inject().asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.Inject<object>()", script);
-        script = translator.translate(g.inject((Object) null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.Inject<object>(null)", script);
-        script = translator.translate(g.inject(null, null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.Inject<object>(null,null)", script);
-        script = translator.translate(g.V().values("age").inject().asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Values<object>(\"age\").Inject()", script);
-        script = translator.translate(g.V().values("age").inject(null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Values<object>(\"age\").Inject(null)", script);
-        script = translator.translate(g.V().values("age").inject(null, null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Values<object>(\"age\").Inject(null,null)", script);
-    }
-
-    @Test
-    public void shouldTranslateGroup() {
-        final String script = translator.translate(g.V().group("x").group().by("name").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Group(\"x\").Group<object,object>().By(\"name\")", script);
-    }
-
-    @Test
-    public void shouldTranslateGroupCount() {
-        final String script = translator.translate(g.V().groupCount("x").groupCount().by("name").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().GroupCount(\"x\").GroupCount<object>().By(\"name\")", script);
-    }
-
-    @Test
-    public void shouldTranslateDate() {
-        final Calendar c = Calendar.getInstance();
-        c.set(1975, Calendar.SEPTEMBER, 7);
-        final Date d = c.getTime();
-        assertTranslation(String.format("DateTimeOffset.FromUnixTimeMilliseconds(%s)", d.getTime()), d);
-    }
-
-    @Test
-    public void shouldTranslateUuid() {
-        final UUID uuid = UUID.fromString("ffffffff-fd49-1e4b-0000-00000d4b8a1d");
-        assertTranslation(String.format("new Guid(\"%s\")", uuid), uuid);
-    }
-
-    @Test
-    public void shouldTranslateP() {
-        assertTranslation("P.Gt(1).And(P.Gt(2)).And(P.Gt(3))", P.gt(1).and(P.gt(2)).and(P.gt(3)));
-    }
-
-    @Test
-    public void shouldTranslateTextP() {
-        assertTranslation("TextP.Containing(\"ark\")", TextP.containing("ark"));
-        assertTranslation("TextP.Regex(\"ark\")", TextP.regex("ark"));
-        assertTranslation("TextP.NotRegex(\"ark\")", TextP.notRegex("ark"));
-    }
-
-    @Test
-    public void shouldTranslateColumn() {
-        assertTranslation("Column.Keys", Column.keys);
-    }
-
-    @Test
-    public void shouldTranslateDirection() {
-        assertTranslation("Direction.Both", Direction.BOTH);
-    }
-
-    @Test
-    public void shouldTranslateOrder() {
-        assertTranslation("Order.Desc", Order.desc);
-    }
-
-    @Test
-    public void shouldTranslatePop() {
-        assertTranslation("Pop.Last", Pop.last);
-    }
-
-    @Test
-    public void shouldTranslateScope() {
-        assertTranslation("Scope.Local", Scope.local);
-    }
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertEquals("translator[h:gremlin-dotnet]", DotNetTranslator.of("h").toString());
-    }
-
-    @Test
-    public void shouldTranslateHasLabelNull() {
-        String script = translator.translate(g.V().hasLabel(null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().HasLabel((string) null)", script);
-        script = translator.translate(g.V().hasLabel(null, null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().HasLabel(null,null)", script);
-        script = translator.translate(g.V().hasLabel(null, "person").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().HasLabel(null,\"person\")", script);
-        script = translator.translate(g.V().hasLabel(null, "person", null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().HasLabel(null,\"person\",null)", script);
-        script = translator.translate(g.V().has(T.label, (Object) null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Has(T.Label,(object) null)", script);
-    }
-
-    @Test
-    public void shouldTranslateCardinalityWithProperty() {
-        assertEquals("g.V().HasLabel(\"person\").Property(Cardinality.Single,\"name\",(object) null)", translator.translate(
-                g.V().hasLabel("person").property(VertexProperty.Cardinality.single, "name", null)).getScript());
-    }
-
-    @Test
-    public void shouldTranslateCardinalityValue() {
-        assertTranslation("CardinalityValue.Set(\"test\")", VertexProperty.Cardinality.set("test"));
-    }
-
-    @Test
-    public void shouldTranslateHasNull() {
-        String script = translator.translate(g.V().has("k", (Object) null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Has(\"k\",(object) null)", script);
-        script = translator.translate(g.V().has("l", "k", (Object) null).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Has(\"l\",\"k\",(object) null)", script);
-    }
-
-    @Test
-    public void shouldTranslateMergeVNull() {
-        String script = translator.translate(g.mergeV((Map) null).option(Merge.onCreate, (Map) null).mergeV(__.identity()).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.MergeV((IDictionary<object,object>) null).Option(Merge.OnCreate, (IDictionary<object,object>) null).MergeV((ITraversal) __.Identity())", script);
-    }
-
-    @Test
-    public void shouldEscapeStrings() {
-        final String script = translator.translate(g.addV("customer")
-                .property("customer_id", 501L)
-                .property("name", "Foo\u0020Bar")
-                .property("age", 25)
-                .property("special", "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?")
-                .asAdmin().getGremlinLang()).getScript();
-
-        assertEquals("g.AddV(\"customer\")" +
-                        ".Property(\"customer_id\",501)" +
-                        ".Property(\"name\",\"Foo Bar\")" +
-                        ".Property(\"age\",25)" +
-                        ".Property(\"special\",\"`~!@#$%^&*()-_=+[{]}\\\\|;:'\\\",<.>/?\")",
-                script);
-    }
-
-    @Test
-    public void shouldTranslateVertexAndEdge() {
-        final Object id1 = "customer:10:foo\u0020bar\u0020\u0024100#90"; // customer:10:foo bar $100#90
-        final Vertex vertex1 = DetachedVertex.build().setLabel("customer").setId(id1)
-                .create();
-        final String script1 = translator.translate(g.inject(vertex1).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.Inject(new Vertex(" +
-                        "\"customer:10:foo bar $100#90\", " +
-                        "\"customer\"))",
-                script1);
-
-        final Object id2 = "user:20:foo\\u0020bar\\u005c\\u0022mr\\u005c\\u0022\\u00241000#50"; // user:20:foo\u0020bar\u005c\u0022mr\u005c\u0022\u00241000#50
-        final Vertex vertex2 = DetachedVertex.build().setLabel("user").setId(id2)
-                .create();
-        final String script2 = translator.translate(g.inject(vertex2).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.Inject(new Vertex(" +
-                        "\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\", " +
-                        "\"user\"))",
-                script2);
-
-        final Object id3 = "knows:30:foo\u0020bar\u0020\u0024100:\\u0020\\u0024500#70";
-        final Edge edge = DetachedEdge.build().setLabel("knows").setId(id3)
-                .setOutV((DetachedVertex) vertex1)
-                .setInV((DetachedVertex) vertex2)
-                .create();
-        final String script3 = translator.translate(g.inject(edge).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.Inject(" +
-                        "new Edge(\"knows:30:foo bar $100:\\\\u0020\\\\u0024500#70\", " +
-                        "new Vertex(\"customer:10:foo bar $100#90\", \"customer\"), " +
-                        "\"knows\", " +
-                        "new Vertex(\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\", \"user\")))",
-                script3);
-
-        final String script4 = translator.translate(
-                g.addE("knows").from(vertex1).to(vertex2).property("when", "2018/09/21")
-                        .asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.AddE(\"knows\")" +
-                        ".From(new Vertex(\"customer:10:foo bar $100#90\", \"customer\"))" +
-                        ".To(new Vertex(\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\", \"user\"))" +
-                        ".Property(\"when\",\"2018/09/21\")",
-                script4);
-    }
-
-    @Test
-    public void shouldTranslateStringFunctionWithAndWithoutScopes(){
-        assertEquals("g.Inject(1).AsString()",
-                translator.translate(g.inject(1).asString().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(1).AsString<object>(Scope.Local)",
-                translator.translate(g.inject(1).asString(Scope.local).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").Length()",
-                translator.translate(g.inject("hello").length().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").Length<object>(Scope.Local)",
-                translator.translate(g.inject("hello").length(Scope.local).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").LTrim()",
-                translator.translate(g.inject("hello").lTrim().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").LTrim<object>(Scope.Local)",
-                translator.translate(g.inject("hello").lTrim(Scope.local).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").RTrim()",
-                translator.translate(g.inject("hello").rTrim().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").RTrim<object>(Scope.Local)",
-                translator.translate(g.inject("hello").rTrim(Scope.local).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").ToUpper()",
-                translator.translate(g.inject("hello").toUpper().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").ToUpper<object>(Scope.Local)",
-                translator.translate(g.inject("hello").toUpper(Scope.local).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").ToLower()",
-                translator.translate(g.inject("hello").toLower().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").ToLower<object>(Scope.Local)",
-                translator.translate(g.inject("hello").toLower(Scope.local).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").Trim()",
-                translator.translate(g.inject("hello").trim().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").Trim<object>(Scope.Local)",
-                translator.translate(g.inject("hello").trim(Scope.local).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").Replace(\"o\",\"a\")",
-                translator.translate(g.inject("hello").replace("o", "a").asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").Replace<object>(Scope.Local,\"o\",\"a\")",
-                translator.translate(g.inject("hello").replace(Scope.local, "o", "a").asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").Split(\"o\")",
-                translator.translate(g.inject("hello").split("o").asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").Split<object>(Scope.Local,\"o\")",
-                translator.translate(g.inject("hello").split(Scope.local, "o").asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").Substring(1)",
-                translator.translate(g.inject("hello").substring(1).asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").Substring<object>(Scope.Local,1)",
-                translator.translate(g.inject("hello").substring(Scope.local, 1).asAdmin().getGremlinLang()).getScript());
-
-        assertEquals("g.Inject(\"hello\").Substring(1,2)",
-                translator.translate(g.inject("hello").substring(1, 2).asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.Inject(\"hello\").Substring<object>(Scope.Local,1,2)",
-                translator.translate(g.inject("hello").substring(Scope.local, 1, 2).asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldTranslateTx() {
-        String script = translator.translate(GraphOp.TX_COMMIT.getGremlinLang()).getScript();
-        assertEquals("g.Tx().Commit()", script);
-        script = translator.translate(GraphOp.TX_ROLLBACK.getGremlinLang()).getScript();
-        assertEquals("g.Tx().Rollback()", script);
-    }
-
-    private void assertTranslation(final String expectedTranslation, final Object... objs) {
-        final String script = translator.translate(g.inject(objs).asAdmin().getGremlinLang()).getScript();
-        assertEquals(String.format("g.Inject(%s)", expectedTranslation), script);
-    }
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslatorTest.java
deleted file mode 100644
index 516ce2d5d9..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslatorTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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.process.traversal.translator;
-
-import org.apache.commons.text.StringEscapeUtils;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.GraphOp;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.junit.Test;
-
-import java.util.Arrays;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.inE;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
-import static org.junit.Assert.assertEquals;
-
-public class GolangTranslatorTest {
-    private static final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-    private static final Translator.ScriptTranslator translator = GolangTranslator.of("g");
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertEquals("translator[h:gremlin-go]", GolangTranslator.of("h").toString());
-    }
-
-    @Test
-    public void shouldTranslateOption() {
-        final String gremlinAsGo = translator.translate(
-                g.V().has("person", "name", "marko").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Has(\"person\", \"name\", \"marko\")", gremlinAsGo);
-    }
-
-    @Test
-    public void shouldTranslateCardinality() {
-        final String gremlinAsGo = translator.translate(
-                g.addV("person").property(VertexProperty.Cardinality.list, "name", "marko").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.AddV(\"person\").Property(gremlingo.Cardinality.List, \"name\", \"marko\")", gremlinAsGo);
-    }
-
-    @Test
-    public void shouldTranslateCardinalityValue() {
-        assertEquals("g.Inject(gremlingo.CardinalityValue.Set(\"test\"))", translator.translate(
-                g.inject(VertexProperty.Cardinality.set("test")).asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldTranslateMultilineStrings() {
-        final String gremlinAsGo = translator.translate(
-                g.addV().property("text", "a" + System.lineSeparator() + "\"and\"" + System.lineSeparator() + "b").asAdmin().getGremlinLang()).getScript();
-        final String escapedSeparator = StringEscapeUtils.escapeJava(System.lineSeparator());
-        final String expected = "g.AddV().Property(\"text\", \"a" + escapedSeparator + StringEscapeUtils.escapeJava("\"and\"") + escapedSeparator + "b\")";
-        assertEquals(expected, gremlinAsGo);
-    }
-
-    @Test
-    public void shouldTranslateChildTraversals() {
-        final String gremlinAsGo = translator.translate(
-                g.V().has("person", "name", "marko").
-                        where(outE()).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Has(\"person\", \"name\", \"marko\").Where(gremlingo.T__.OutE())", gremlinAsGo);
-    }
-
-    @Test
-    public void shouldTranslateGoNamedSteps() {
-        final String gremlinAsGo = translator.translate(
-                g.V().has("person", "name", "marko").
-                        where(outE().count().is(2).and(__.not(inE().count().is(3)))).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().Has(\"person\", \"name\", \"marko\").Where(gremlingo.T__.OutE().Count().Is(2).And(gremlingo.T__.Not(gremlingo.T__.InE().Count().Is(3))))", gremlinAsGo);
-    }
-
-    @Test
-    public void shouldTranslateStrategies() {
-        assertEquals("g.WithStrategies(gremlingo.ReadOnlyStrategy(), gremlingo.SubgraphStrategy(gremlingo.SubgraphStrategyConfig{CheckAdjacentVertices: false, Vertices: gremlingo.T__.HasLabel(\"person\")}), gremlingo.SeedStrategy(gremlingo.SeedStrategyConfig{Seed: 999999})).V().Has(\"name\")",
-                translator.translate(g.withStrategies(ReadOnlyStrategy.instance(),
-                                SubgraphStrategy.build().checkAdjacentVertices(false).vertices(hasLabel("person")).create(),
-                                SeedStrategy.build().seed(999999).create()).
-                        V().has("name").asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldTranslateLambdas() {
-        final GremlinLang bytecode = g.withSideEffect("lengthSum", 0).withSack(1)
-                .V()
-                .filter(Lambda.predicate("x -> x.get().label() == 'person'", "gremlin-groovy"))
-                .flatMap(Lambda.function("it.get().vertices(Direction.OUT)", "gremlin-groovy"))
-                .map(Lambda.<Traverser<Object>, Integer>function("x -> x : len(x.get().value('name'))", "gremlin-groovy"))
-                .sideEffect(Lambda.consumer("x -> x.sideEffects(\"lengthSum\", x.sideEffects('lengthSum') + x.get())    ", "gremlin-groovy"))
-                .order().by(Lambda.comparator("a,b -> a == b ? 0 : (a > b) ? 1 : -1)", "gremlin-groovy"))
-                .sack(Lambda.biFunction("a,b -> a + b", "gremlin-groovy"))
-                .asAdmin().getGremlinLang();
-        assertEquals("g.WithSideEffect(\"lengthSum\", 0).WithSack(1).V()." +
-                        "Filter(&gremlingo.Lambda{Script:\"x -> x.get().label() == 'person'\", Language:\"\"})." +
-                        "FlatMap(&gremlingo.Lambda{Script:\"it.get().vertices(Direction.OUT)\", Language:\"\"})." +
-                        "Map(&gremlingo.Lambda{Script:\"x -> x : len(x.get().value('name'))\", Language:\"\"})." +
-                        "SideEffect(&gremlingo.Lambda{Script:\"x -> x.sideEffects(\"lengthSum\", x.sideEffects('lengthSum') + x.get())\", Language:\"\"})." +
-                        "Order().By(&gremlingo.Lambda{Script:\"a,b -> a == b ? 0 : (a > b) ? 1 : -1)\", Language:\"\"})." +
-                        "Sack(&gremlingo.Lambda{Script:\"a,b -> a + b\", Language:\"\"})",
-                translator.translate(bytecode).getScript());
-    }
-
-    @Test
-    public void shouldTranslateArrayOfArray() {
-        assertEquals("g.Inject([]interface{}{[]interface{}{1, 2}, []interface{}{3, 4}})",
-                translator.translate(g.inject(Arrays.asList(Arrays.asList(1,2),Arrays.asList(3,4))).asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldTranslateTx() {
-        String script = translator.translate(GraphOp.TX_COMMIT.getGremlinLang()).getScript();
-        assertEquals("g.Tx().Commit()", script);
-        script = translator.translate(GraphOp.TX_ROLLBACK.getGremlinLang()).getScript();
-        assertEquals("g.Tx().Rollback()", script);
-    }
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslatorTest.java
deleted file mode 100644
index 04154ba162..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslatorTest.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.tinkerpop.gremlin.process.traversal.GraphOp;
-import org.apache.tinkerpop.gremlin.process.traversal.Order;
-import org.apache.tinkerpop.gremlin.process.traversal.Pop;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.Column;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-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.DetachedVertex;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.junit.Test;
-
-import java.sql.Timestamp;
-import java.time.ZonedDateTime;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.UUID;
-import java.util.function.Function;
-
-import static java.time.ZoneOffset.UTC;
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class GroovyTranslatorTest {
-    private static final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("g");
-
-    @Test
-    public void shouldTranslateStrategies() {
-        assertEquals("g.withStrategies(ReadOnlyStrategy,new SubgraphStrategy(checkAdjacentVertices: false, vertices: __.hasLabel(\"person\"))).V().has(\"name\")",
-                translator.translate(g.withStrategies(ReadOnlyStrategy.instance(),
-                        SubgraphStrategy.build().checkAdjacentVertices(false).vertices(hasLabel("person")).create()).
-                        V().has("name")).getScript());
-    }
-
-    @Test
-    public void shouldTranslateConfusingSacks() {
-        final Traversal<Vertex,Double> tConstantUnary = g.withSack(1.0, Lambda.unaryOperator("it + 1")).V().sack();
-        final String scriptConstantUnary = translator.translate(tConstantUnary).getScript();
-        assertEquals("g.withSack(1.0d,{it + 1}).V().sack()", scriptConstantUnary);
-
-        final Traversal<Vertex,Double> tSupplierUnary = g.withSack(Lambda.supplier("1.0d"), Lambda.<Double>unaryOperator("it + 1")).V().sack();
-        final String scriptSupplierUnary = translator.translate(tSupplierUnary).getScript();
-        assertEquals("g.withSack({1.0d},{it + 1}).V().sack()", scriptSupplierUnary);
-
-        final Traversal<Vertex,Double> tConstantBinary = g.withSack(1.0, Lambda.binaryOperator("x,y -> x + y + 1")).V().sack();
-        final String scriptConstantBinary = translator.translate(tConstantBinary).getScript();
-        assertEquals("g.withSack(1.0d,{x,y -> x + y + 1}).V().sack()", scriptConstantBinary);
-
-        final Traversal<Vertex,Double> tSupplierBinary = g.withSack(Lambda.supplier("1.0d"), Lambda.<Double>binaryOperator("x,y -> x + y + 1")).V().sack();
-        final String scriptSupplierBinary = translator.translate(tSupplierBinary).getScript();
-        assertEquals("g.withSack({1.0d},{x,y -> x + y + 1}).V().sack()", scriptSupplierBinary);
-    }
-
-    @Test
-    public void shouldTranslateStringSupplierLambdas() {
-        final GraphTraversal.Admin<Vertex, Integer> t = g.withSideEffect("lengthSum", 0).withSack(1)
-                .V()
-                .filter(Lambda.predicate("it.get().label().equals('person')"))
-                .flatMap(Lambda.function("it.get().vertices(Direction.OUT)"))
-                .map(Lambda.<Traverser<Object>, Integer>function("it.get().value('name').length()"))
-                .sideEffect(Lambda.consumer("{ x -> x.sideEffects(\"lengthSum\", x.<Integer>sideEffects('lengthSum') + x.get()) }"))
-                .order().by(Lambda.comparator("a,b -> a <=> b"))
-                .sack(Lambda.biFunction("{ a,b -> a + b }"))
-                .asAdmin();
-
-        final String script = translator.translate(t.getGremlinLang()).getScript();
-        assertEquals(   "g.withSideEffect(\"lengthSum\",(int) 0).withSack((int) 1)" +
-                        ".V()" +
-                        ".filter({it.get().label().equals('person')})" +
-                        ".flatMap({it.get().vertices(Direction.OUT)})" +
-                        ".map({it.get().value('name').length()})" +
-                        ".sideEffect({ x -> x.sideEffects(\"lengthSum\", x.<Integer>sideEffects('lengthSum') + x.get()) })" +
-                        ".order().by({a,b -> a <=> b})" +
-                        ".sack({ a,b -> a + b })",
-                script);
-    }
-
-    @Test
-    public void shouldTranslateMaps() {
-        final String script = translator.translate(g.V().id().is(new LinkedHashMap<Object,Object>() {{
-            put(3, "32");
-            put(Arrays.asList(1, 2, 3.1d), 4);
-            put("x", 4);
-            put("+x", 8);
-        }})).getScript();
-        assertEquals("g.V().id().is([((int) 3):\"32\",([(int) 1, (int) 2, 3.1d]):(int) 4,\"x\":(int) 4,\"+x\":(int) 8])", script);
-    }
-
-    @Test
-    public void shouldTranslateEmptyMaps() {
-        final Function identity = new Lambda.OneArgLambda("it.get()", "gremlin-groovy");
-        final String script = translator.translate(g.inject(Collections.emptyMap()).map(identity)).getScript();
-        assertEquals("g.inject([]).map({it.get()})", script);
-    }
-
-    @Test
-    public void shouldTranslateDate() {
-        final Calendar c = Calendar.getInstance();
-        c.set(1975, Calendar.SEPTEMBER, 7);
-        final Date d = c.getTime();
-        assertTranslation(String.format("new Date(%sL)", d.getTime()), d);
-    }
-
-    @Test
-    public void shouldTranslateTimestamp() {
-        final Calendar c = Calendar.getInstance();
-        c.set(1975, Calendar.SEPTEMBER, 7);
-        final Timestamp t = new Timestamp(c.getTime().getTime());
-        assertTranslation(String.format("new Timestamp(%sL)", t.getTime()), t);
-    }
-
-    @Test
-    public void shouldTranslateUuid() {
-        final UUID uuid = UUID.fromString("ffffffff-fd49-1e4b-0000-00000d4b8a1d");
-        assertTranslation(String.format("UUID.fromString('%s')", uuid), uuid);
-    }
-
-    @Test
-    public void shouldTranslateColumn() {
-        assertTranslation("Column.keys", Column.keys);
-    }
-
-    @Test
-    public void shouldTranslateCardinalityValue() {
-        assertTranslation("VertexProperty.Cardinality.set(\"test\")", VertexProperty.Cardinality.set("test"));
-    }
-
-    @Test
-    public void shouldTranslateDateUsingLanguageTypeTranslator() {
-        final Translator.ScriptTranslator t = GroovyTranslator.of("g",
-                new GroovyTranslator.LanguageTypeTranslator(false));
-        final Date datetime = Date.from(ZonedDateTime.of(2018, 03, 22, 00, 35, 44, 741000000, UTC).toInstant());
-        final Date date = Date.from(ZonedDateTime.of(2018, 03, 22, 0, 0, 0, 0, UTC).toInstant());
-        assertEquals("g.inject(datetime('2018-03-22T00:00:00Z'),datetime('2018-03-22T00:35:44.741Z'))",
-                t.translate(g.inject(date, datetime)).getScript());
-    }
-
-    @Test
-    public void shouldTranslateVertexUsingLanguageTypeTranslator() {
-        final Translator.ScriptTranslator t = GroovyTranslator.of("g",
-                new GroovyTranslator.LanguageTypeTranslator(false));
-
-        assertEquals("g.addE(\"knows\").from(new Vertex(1I,\"person\"))",
-                t.translate(g.addE("knows").from(new ReferenceVertex(1, "person"))).getScript());
-    }
-
-    @Test
-    public void shouldTranslateMapsUsingLanguageTypeTranslator() {
-        final Translator.ScriptTranslator t = GroovyTranslator.of("g",
-                new GroovyTranslator.LanguageTypeTranslator(false));
-        final String script = t.translate(g.V().id().is(new LinkedHashMap<Object,Object>() {{
-            put(3, "32");
-            put(Arrays.asList(1, 2, 3.1d), 4);
-            put("x", 4);
-            put("+x", 8);
-        }})).getScript();
-        assertEquals("g.V().id().is([(3I):\"32\",([1I, 2I, 3.1D]):4I,\"x\":4I,\"+x\":8I])", script);
-    }
-
-    @Test
-    public void shouldTranslateDirection() {
-        assertTranslation("Direction.BOTH", Direction.BOTH);
-    }
-
-    @Test
-    public void shouldTranslateOrder() {
-        assertTranslation("Order.desc", Order.desc);
-    }
-
-    @Test
-    public void shouldTranslatePop() {
-        assertTranslation("Pop.last", Pop.last);
-    }
-
-    @Test
-    public void shouldTranslateScope() {
-        assertTranslation("Scope.local", Scope.local);
-    }
-
-    @Test
-    public void shouldTranslateNaN() {
-        assertTranslation("Double.NaN", Double.NaN);
-    }
-
-    @Test
-    public void shouldTranslatePosInf() {
-        assertTranslation("Double.POSITIVE_INFINITY", Double.POSITIVE_INFINITY);
-    }
-
-    @Test
-    public void shouldTranslateNegInf() {
-        assertTranslation("Double.NEGATIVE_INFINITY", Double.NEGATIVE_INFINITY);
-    }
-
-    @Test
-    public void shouldIncludeCustomTypeTranslationForSomethingSilly() throws Exception {
-        final SillyClass notSillyEnough = SillyClass.from("not silly enough", 100);
-
-        // without type translation we get uglinesss
-        final String scriptBad = translator.
-                translate(g.inject(notSillyEnough)).getScript();
-        assertEquals(String.format("g.inject(%s)", "not silly enough:100"), scriptBad);
-
-        // with type translation we get valid gremlin
-        final String scriptGood = GroovyTranslator.of("g", new SillyClassTranslator(false)).
-                translate(g.inject(notSillyEnough)).getScript();
-        assertEquals(String.format("g.inject(org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslatorTest.SillyClass.from('%s', (int) %s))", notSillyEnough.getX(), notSillyEnough.getY()), scriptGood);
-    }
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertEquals("translator[h:gremlin-groovy]", GroovyTranslator.of("h").toString());
-    }
-
-    @Test
-    public void shouldEscapeStrings() {
-        final String script = translator.translate(g.addV("customer")
-                .property("customer_id", 501L)
-                .property("name", "Foo\u0020Bar")
-                .property("age", 25)
-                .property("special", "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?")
-                ).getScript();
-
-        assertEquals("g.addV(\"customer\")" +
-                        ".property(\"customer_id\",501L)" +
-                        ".property(\"name\",\"Foo Bar\")" +
-                        ".property(\"age\",(int) 25)" +
-                        ".property(\"special\",\"\"\"`~!@#\\$%^&*()-_=+[{]}\\\\|;:'\\\",<.>/?\"\"\")",
-                script);
-    }
-
-    @Test
-    public void shouldTranslateVertexAndEdge() {
-        final Object id1 = "customer:10:foo\u0020bar\u0020\u0024100#90"; // customer:10:foo bar $100#90
-        final Vertex vertex1 = DetachedVertex.build().setLabel("customer").setId(id1)
-                .create();
-        final String script1 = translator.translate(g.inject(vertex1)).getScript();
-        assertEquals("g.inject(new ReferenceVertex(" +
-                        "\"customer:10:foo bar \\$100#90\"," +
-                        "\"customer\"))",
-                script1);
-
-        final Object id2 = "user:20:foo\\u0020bar\\u005c\\u0022mr\\u005c\\u0022\\u00241000#50"; // user:20:foo\u0020bar\u005c\u0022mr\u005c\u0022\u00241000#50
-        final Vertex vertex2 = DetachedVertex.build().setLabel("user").setId(id2)
-                .create();
-        final String script2 = translator.translate(g.inject(vertex2)).getScript();
-        assertEquals("g.inject(new ReferenceVertex(" +
-                        "\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\"," +
-                        "\"user\"))",
-                script2);
-
-        final Object id3 = "knows:30:foo\u0020bar\u0020\u0024100:\\u0020\\u0024500#70";
-        final Edge edge = DetachedEdge.build().setLabel("knows").setId(id3)
-                .setOutV((DetachedVertex) vertex1)
-                .setInV((DetachedVertex) vertex2)
-                .create();
-        final String script3 = translator.translate(g.inject(edge)).getScript();
-        assertEquals("g.inject(new ReferenceEdge(" +
-                        "\"knows:30:foo bar \\$100:\\\\u0020\\\\u0024500#70\"," +
-                        "\"knows\"," +
-                        "new ReferenceVertex(\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\",\"user\")," +
-                        "new ReferenceVertex(\"customer:10:foo bar \\$100#90\",\"customer\")))",
-                script3);
-
-        final String script4 = translator.translate(
-                g.addE("knows").from(vertex1).to(vertex2).property("when", "2018/09/21")
-                        ).getScript();
-        assertEquals("g.addE(\"knows\")" +
-                        ".from(new ReferenceVertex(\"customer:10:foo bar \\$100#90\",\"customer\"))" +
-                        ".to(new ReferenceVertex(\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\",\"user\"))" +
-                        ".property(\"when\",\"2018/09/21\")",
-                script4);
-    }
-
-    @Test
-    public void shouldTranslateTx() {
-        String script = translator.translate(GraphOp.TX_COMMIT.getGremlinLang()).getScript();
-        assertEquals("g.tx().commit()", script);
-        script = translator.translate(GraphOp.TX_ROLLBACK.getGremlinLang()).getScript();
-        assertEquals("g.tx().rollback()", script);
-    }
-
-    private void assertTranslation(final String expectedTranslation, final Object... objs) {
-        final String script = translator.translate(g.inject(objs)).getScript();
-        assertEquals(String.format("g.inject(%s)", expectedTranslation), script);
-    }
-
-    public static class SillyClass {
-
-        private final String x;
-        private final int y;
-
-        private SillyClass(final String x, final int y) {
-            this.x = x;
-            this.y = y;
-        }
-
-        public static SillyClass from(final String x, final int y) {
-            return new SillyClass(x, y);
-        }
-
-        public String getX() {
-            return x;
-        }
-
-        public int getY() {
-            return y;
-        }
-
-        @Override
-        public String toString() {
-            return x + ":" + String.valueOf(y);
-        }
-    }
-
-    public static class SillyClassTranslator extends GroovyTranslator.DefaultTypeTranslator {
-
-        public SillyClassTranslator(final boolean withParameters) {
-            super(withParameters);
-        }
-
-        @Override
-        protected Script convertToScript(final Object object) {
-            if (object instanceof SillyClass) {
-                return script.append(String.format("org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslatorTest.SillyClass.from('%s', (int) %s)",
-                        ((SillyClass) object).getX(), ((SillyClass) object).getY()));
-            } else {
-                return super.convertToScript(object);
-            }
-        }
-    }
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslatorTest.java
deleted file mode 100644
index dd51db0f87..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslatorTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.tinkerpop.gremlin.process.traversal.GraphOp;
-import org.apache.tinkerpop.gremlin.process.traversal.Order;
-import org.apache.tinkerpop.gremlin.process.traversal.Pop;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.Column;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-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.DetachedVertex;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.UUID;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class JavascriptTranslatorTest {
-    private static final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-    private static final Translator.ScriptTranslator translator = JavascriptTranslator.of("g");
-
-    @Test
-    public void shouldTranslateStrategies() throws Exception {
-        assertEquals("g.withStrategies(new ReadOnlyStrategy()," +
-                        "new SubgraphStrategy({checkAdjacentVertices:false,vertices:__.hasLabel(\"person\")})," +
-                        "new SeedStrategy({seed:999999})).V().has(\"name\")",
-                translator.translate(g.withStrategies(ReadOnlyStrategy.instance(),
-                        SubgraphStrategy.build().checkAdjacentVertices(false).vertices(hasLabel("person")).create(),
-                        SeedStrategy.build().seed(999999).create()).
-                        V().has("name").asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldTranslateMaps() {
-        final String script = translator.translate(g.V().id().is(new LinkedHashMap<Object,Object>() {{
-            put(3, "32");
-            put(Arrays.asList(1, 2, 3.1d), 4);
-        }}).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().id().is(new Map([[3,\"32\"],[[1, 2, 3.1],4]]))", script);
-    }
-
-    @Test
-    public void shouldTranslateDate() {
-        final Calendar c = Calendar.getInstance();
-        c.set(1975, Calendar.SEPTEMBER, 7);
-        final Date d = c.getTime();
-        assertTranslation(String.format("new Date(%s)", d.getTime()), d);
-    }
-
-    @Test
-    public void shouldTranslateUuid() {
-        final UUID uuid = UUID.fromString("ffffffff-fd49-1e4b-0000-00000d4b8a1d");
-        assertTranslation(String.format("'%s'", uuid), uuid);
-    }
-
-    @Test
-    public void shouldTranslateColumn() {
-        assertTranslation("Column.keys", Column.keys);
-    }
-
-    @Test
-    public void shouldTranslateDirection() {
-        assertTranslation("Direction.BOTH", Direction.BOTH);
-    }
-
-    @Test
-    public void shouldTranslateOrder() {
-        assertTranslation("Order.desc", Order.desc);
-    }
-
-    @Test
-    public void shouldTranslatePop() {
-        assertTranslation("Pop.last", Pop.last);
-    }
-
-    @Test
-    public void shouldTranslateTextP() {
-        assertTranslation("TextP.containing(\"ark\")", TextP.containing("ark"));
-        assertTranslation("TextP.regex(\"ark\")", TextP.regex("ark"));
-        assertTranslation("TextP.notRegex(\"ark\")", TextP.notRegex("ark"));
-    }
-
-    @Test
-    public void shouldTranslateScope() {
-        assertTranslation("Scope.local", Scope.local);
-    }
-
-    @Test
-    public void shouldTranslateCardinalityValue() {
-        assertTranslation("CardinalityValue.set(\"test\")", VertexProperty.Cardinality.set("test"));
-    }
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertEquals("translator[h:gremlin-javascript]", JavascriptTranslator.of("h").toString());
-    }
-
-    @Test
-    public void shouldHaveNull() {
-        assertEquals("g.inject(null,null)", translator.translate(g.inject(null, null).asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.V()", translator.translate(g.V().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.V(null)", translator.translate(g.V(null).asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.V(null,null)", translator.translate(g.V(null, null).asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.E()", translator.translate(g.E().asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.E(null)", translator.translate(g.E(null).asAdmin().getGremlinLang()).getScript());
-        assertEquals("g.E(null,null)", translator.translate(g.E(null, null).asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldEscapeStrings() {
-        final String script = translator.translate(g.addV("customer")
-                .property("customer_id", 501L)
-                .property("name", "Foo\u0020Bar")
-                .property("age", 25)
-                .property("special", "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?")
-                .asAdmin().getGremlinLang()).getScript();
-
-        assertEquals("g.addV(\"customer\")" +
-                        ".property(\"customer_id\",501)" +
-                        ".property(\"name\",\"Foo Bar\")" +
-                        ".property(\"age\",25)" +
-                        ".property(\"special\",\"\"\"`~!@#\\$%^&*()-_=+[{]}\\\\|;:'\\\",<.>/?\"\"\")",
-                script);
-    }
-
-    @Test
-    public void shouldTranslateVertexAndEdge() {
-        final Object id1 = "customer:10:foo\u0020bar\u0020\u0024100#90"; // customer:10:foo bar $100#90
-        final Vertex vertex1 = DetachedVertex.build().setLabel("customer").setId(id1)
-                .create();
-        final String script1 = translator.translate(g.inject(vertex1).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.inject(new Vertex(" +
-                        "\"customer:10:foo bar \\$100#90\"," +
-                        "\"customer\", null))",
-                script1);
-
-        final Object id2 = "user:20:foo\\u0020bar\\u005c\\u0022mr\\u005c\\u0022\\u00241000#50"; // user:20:foo\u0020bar\u005c\u0022mr\u005c\u0022\u00241000#50
-        final Vertex vertex2 = DetachedVertex.build().setLabel("user").setId(id2)
-                .create();
-        final String script2 = translator.translate(g.inject(vertex2).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.inject(new Vertex(" +
-                        "\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\"," +
-                        "\"user\", null))",
-                script2);
-
-        final Object id3 = "knows:30:foo\u0020bar\u0020\u0024100:\\u0020\\u0024500#70";
-        final Edge edge = DetachedEdge.build().setLabel("knows").setId(id3)
-                .setOutV((DetachedVertex) vertex1)
-                .setInV((DetachedVertex) vertex2)
-                .create();
-        final String script3 = translator.translate(g.inject(edge).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.inject(" +
-                        "new Edge(\"knows:30:foo bar \\$100:\\\\u0020\\\\u0024500#70\", " +
-                        "new Vertex(\"customer:10:foo bar \\$100#90\",\"customer\", null)," +
-                        "\"knows\", " +
-                        "new Vertex(\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\",\"user\",null)," +
-                        "null))",
-                script3);
-
-        final String script4 = translator.translate(
-                g.addE("knows").from(vertex1).to(vertex2).property("when", "2018/09/21")
-                        .asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.addE(\"knows\")" +
-                        ".from_(new Vertex(\"customer:10:foo bar \\$100#90\",\"customer\", null))" +
-                        ".to(new Vertex(\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\",\"user\", null))" +
-                        ".property(\"when\",\"2018/09/21\")",
-                script4);
-    }
-
-    @Test
-    public void shouldTranslateTx() {
-        String script = translator.translate(GraphOp.TX_COMMIT.getGremlinLang()).getScript();
-        assertEquals("g.tx().commit()", script);
-        script = translator.translate(GraphOp.TX_ROLLBACK.getGremlinLang()).getScript();
-        assertEquals("g.tx().rollback()", script);
-    }
-
-    private void assertTranslation(final String expectedTranslation, final Object... objs) {
-        final String script = translator.translate(g.inject(objs).asAdmin().getGremlinLang()).getScript();
-        assertEquals(String.format("g.inject(%s)", expectedTranslation), script);
-    }
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/ParameterizedGroovyTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/ParameterizedGroovyTranslatorTest.java
deleted file mode 100644
index 50c8012aeb..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/ParameterizedGroovyTranslatorTest.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- *  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.process.traversal.translator;
-
-import org.apache.tinkerpop.gremlin.jsr223.TranslatorCustomizer;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Script;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.T;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.junit.Test;
-
-import javax.script.Bindings;
-import javax.script.SimpleBindings;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.LinkedHashMap;
-import java.util.function.Function;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
-import static org.junit.Assert.assertEquals;
-
-/**
- *  test {@link GroovyTranslator} which return parameterized result, covers:
- *   - parameterized script checking
- *   - binding checking
- *   - eval result checking
- *
- *  <p>
- *  {@link GroovyTranslatorTest } is used to test {@link GroovyTranslator}, both test cases looks the same
- *  <p>
- *
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- * @author Stark Arya (sandszhou.zj@alibaba-inc.com)
- */
-public class ParameterizedGroovyTranslatorTest {
-
-    private static final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-    private static final Translator.ScriptTranslator translator = GroovyTranslator.of("g", true);
-
-    @Test
-    public void shouldHandleStrategies() throws Exception {
-        assertEquals("g.withStrategies(ReadOnlyStrategy,new SubgraphStrategy(checkAdjacentVertices: _args_0, vertices: __.hasLabel(_args_1))).V().has(_args_2)",
-                translator.translate(g.withStrategies(ReadOnlyStrategy.instance(),
-                        SubgraphStrategy.build().checkAdjacentVertices(false).vertices(hasLabel("person")).create()).
-                        V().has("name").asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldSupportStringSupplierLambdas() {
-        final GraphTraversal.Admin<Vertex, Integer> t = g.withSideEffect("lengthSum", 0).withSack(1)
-                .V()
-                .filter(Lambda.predicate("it.get().label().equals('person')"))
-                .flatMap(Lambda.function("it.get().vertices(Direction.OUT)"))
-                .map(Lambda.<Traverser<Object>, Integer>function("it.get().value('name').length()"))
-                .sideEffect(Lambda.consumer("{ x -> x.sideEffects(\"lengthSum\", x.<Integer>sideEffects('lengthSum') + x.get()) }"))
-                .order().by(Lambda.comparator("a,b -> a <=> b"))
-                .sack(Lambda.biFunction("{ a,b -> a + b }"))
-                .asAdmin();
-        final Script script = translator.translate(t.getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        script.getParameters().ifPresent(bindings::putAll);
-        assertEquals(9, bindings.size());
-        assertEquals("lengthSum", bindings.get("_args_0"));
-        assertEquals(Integer.valueOf(0), bindings.get("_args_1"));
-        assertEquals(Integer.valueOf(1), bindings.get("_args_2"));
-        assertEquals(Lambda.predicate("it.get().label().equals('person')"), bindings.get("_args_3"));
-        assertEquals(Lambda.function("it.get().vertices(Direction.OUT)"), bindings.get("_args_4"));
-        assertEquals(Lambda.<Traverser<Object>, Integer>function("it.get().value('name').length()"), bindings.get("_args_5"));
-        assertEquals(Lambda.consumer("{ x -> x.sideEffects(\"lengthSum\", x.<Integer>sideEffects('lengthSum') + x.get()) }"), bindings.get("_args_6"));
-        assertEquals(Lambda.comparator("a,b -> a <=> b"), bindings.get("_args_7"));
-        assertEquals(Lambda.biFunction("{ a,b -> a + b }"), bindings.get("_args_8"));
-        assertEquals("g.withSideEffect(_args_0,_args_1).withSack(_args_2)" +
-                        ".V()" +
-                        ".filter(_args_3)" +
-                        ".flatMap(_args_4)" +
-                        ".map(_args_5)" +
-                        ".sideEffect(_args_6)" +
-                        ".order().by(_args_7)" +
-                        ".sack(_args_8)",
-                script.getScript());
-    }
-
-    @Test
-    public void shouldHandleArray() {
-        final Script script = translator.translate(g.V().has(T.id, P.within(new ArrayList() {{
-            add(1);
-            add(2);
-            add(3);
-            add(4);
-            add(5);
-        }})).asAdmin().getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        script.getParameters().ifPresent(bindings::putAll);
-        assertEquals(5, bindings.size());
-        assertEquals(Integer.valueOf(1), bindings.get("_args_0"));
-        assertEquals(Integer.valueOf(2), bindings.get("_args_1"));
-        assertEquals(Integer.valueOf(3), bindings.get("_args_2"));
-        assertEquals(Integer.valueOf(4), bindings.get("_args_3"));
-        assertEquals(Integer.valueOf(5), bindings.get("_args_4"));
-        assertEquals("g.V().has(T.id,P.within([_args_0, _args_1, _args_2, _args_3, _args_4]))", script.getScript());
-    }
-
-    @Test
-    public void shouldHandleSet() {
-        final Script script = translator.translate(g.V().id().is(new LinkedHashSet<Object>() {{
-            add(3);
-            add(Arrays.asList(1, 2, 3.1d));
-            add(3);
-            add("3");
-        }}).asAdmin().getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        script.getParameters().ifPresent(bindings::putAll);
-        assertEquals(5, bindings.size());
-        assertEquals(Integer.valueOf(3), bindings.get("_args_0"));
-        assertEquals(Integer.valueOf(1), bindings.get("_args_1"));
-        assertEquals(Integer.valueOf(2), bindings.get("_args_2"));
-        assertEquals(Double.valueOf(3.1), bindings.get("_args_3"));
-        assertEquals("3", bindings.get("_args_4"));
-
-        assertEquals("g.V().id().is([_args_0, [_args_1, _args_2, _args_3], _args_4] as Set)", script.getScript());
-    }
-
-    @Test
-    public void shouldHandleMaps() {
-        final Script script = translator.translate(g.V().id().is(new LinkedHashMap<Object,Object>() {{
-            put(3, "32");
-            put(Arrays.asList(1, 2, 3.1d), 4);
-        }}).asAdmin().getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        script.getParameters().ifPresent(bindings::putAll);
-        assertEquals(6, bindings.size());
-        assertEquals(Integer.valueOf(3), bindings.get("_args_0"));
-        assertEquals("32", bindings.get("_args_1"));
-        assertEquals(Integer.valueOf(1), bindings.get("_args_2"));
-        assertEquals(Integer.valueOf(2), bindings.get("_args_3"));
-        assertEquals(Double.valueOf(3.1), bindings.get("_args_4"));
-        assertEquals(Integer.valueOf(4), bindings.get("_args_5"));
-        assertEquals("g.V().id().is([(_args_0):_args_1,([_args_2, _args_3, _args_4]):_args_5])", script.getScript());
-    }
-
-    @Test
-    public void shouldHandleEmptyMaps() {
-        final Function identity = new Lambda.OneArgLambda("it.get()", "gremlin-groovy");
-        final Script script = translator.translate(g.inject(Collections.emptyMap()).map(identity).asAdmin().getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        script.getParameters().ifPresent(bindings::putAll);
-        assertEquals(1, bindings.size());
-        assertEquals(identity, bindings.get("_args_0"));
-        assertEquals("g.inject([]).map(_args_0)", script.getScript());
-    }
-
-    @Test
-    public void shouldIncludeCustomTypeTranslationForSomethingSilly() throws Exception {
-        final ParameterizedSillyClass notSillyEnough = ParameterizedSillyClass.from("not silly enough", 100);
-
-        // without type translation we get uglinesss
-        final Script parameterizedScriptBad = translator.translate(g.inject(notSillyEnough).asAdmin().getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        parameterizedScriptBad.getParameters().ifPresent(bindings::putAll);
-        assertEquals(String.format("g.inject(%s)", "_args_0"), parameterizedScriptBad.getScript());
-        assertEquals(1, bindings.size());
-        assertEquals(notSillyEnough, bindings.get("_args_0"));
-        bindings.clear();
-
-        // with type translation we get valid gremlin
-        final Script parameterizedScriptGood = GroovyTranslator.of("g", new ParameterizedSillyClassTranslatorCustomizer().createTypeTranslator()).
-                translate(g.inject(notSillyEnough).asAdmin().getGremlinLang());
-        parameterizedScriptGood.getParameters().ifPresent(bindings::putAll);
-        assertEquals(2, bindings.size());
-        assertEquals(notSillyEnough.getX(), bindings.get("_args_0"));
-        assertEquals(notSillyEnough.getY(), bindings.get("_args_1"));
-        assertEquals("g.inject(org.apache.tinkerpop.gremlin.process.traversal.translator.ParameterizedGroovyTranslatorTest.ParameterizedSillyClass.from(_args_0,_args_1))",
-                parameterizedScriptGood.getScript());
-    }
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertEquals("translator[h:gremlin-groovy]", GroovyTranslator.of("h", true).toString());
-    }
-
-    @Test
-    public void shouldEscapeStrings() {
-        final Script script = translator.translate(g.addV("customer")
-                .property("customer_id", 501L)
-                .property("name", "Foo\u0020Bar")
-                .property("age", 25)
-                .property("special", "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?")
-                .asAdmin().getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        script.getParameters().ifPresent(bindings::putAll);
-        assertEquals(9, bindings.size());
-        assertEquals("customer", bindings.get("_args_0"));
-        assertEquals("customer_id", bindings.get("_args_1"));
-        assertEquals(Long.valueOf(501), bindings.get("_args_2"));
-        assertEquals("name", bindings.get("_args_3"));
-        assertEquals("Foo\u0020Bar", bindings.get("_args_4"));
-        assertEquals("age", bindings.get("_args_5"));
-        assertEquals(Integer.valueOf(25), bindings.get("_args_6"));
-        assertEquals("special", bindings.get("_args_7"));
-        assertEquals("`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?", bindings.get("_args_8"));
-        assertEquals("g.addV(_args_0).property(_args_1,_args_2).property(_args_3,_args_4).property(_args_5,_args_6).property(_args_7,_args_8)", script.getScript());
-    }
-
-    @Test
-    public void shouldHandleVertexAndEdge() {
-        final Object id1 = "customer:10:foo\u0020bar\u0020\u0024100#90"; // customer:10:foo bar $100#90
-        final Vertex vertex1 = DetachedVertex.build().setLabel("customer").setId(id1)
-                .create();
-        final Script script1 = translator.translate(g.inject(vertex1).asAdmin().getGremlinLang());
-        final Bindings bindings = new SimpleBindings();
-        script1.getParameters().ifPresent(bindings::putAll);
-        assertEquals(2, bindings.size());
-        assertEquals(id1, bindings.get("_args_0"));
-        assertEquals("customer", bindings.get("_args_1"));
-        assertEquals("g.inject(new ReferenceVertex(_args_0,_args_1))", script1.getScript());
-        bindings.clear();
-
-        final Object id2 = "user:20:foo\\u0020bar\\u005c\\u0022mr\\u005c\\u0022\\u00241000#50"; // user:20:foo\u0020bar\u005c\u0022mr\u005c\u0022\u00241000#50
-        final Vertex vertex2 = DetachedVertex.build().setLabel("user").setId(id2)
-                .create();
-        final Script script2 = translator.translate(g.inject(vertex2).asAdmin().getGremlinLang());
-        script2.getParameters().ifPresent(bindings::putAll);
-        assertEquals(2, bindings.size());
-        assertEquals(id2, bindings.get("_args_0"));
-        assertEquals("user", bindings.get("_args_1"));
-        assertEquals("g.inject(new ReferenceVertex(_args_0,_args_1))", script2.getScript());
-        bindings.clear();
-
-        final Object id3 = "knows:30:foo\u0020bar\u0020\u0024100:\\u0020\\u0024500#70";
-        final Edge edge = DetachedEdge.build().setLabel("knows").setId(id3)
-                .setOutV((DetachedVertex) vertex1)
-                .setInV((DetachedVertex) vertex2)
-                .create();
-        final Script script3 = translator.translate(g.inject(edge).asAdmin().getGremlinLang());
-        script3.getParameters().ifPresent(bindings::putAll);
-        assertEquals(6, bindings.size());
-        assertEquals(id3, bindings.get("_args_0"));
-        assertEquals("knows", bindings.get("_args_1"));
-        assertEquals(id2, bindings.get("_args_2"));
-        assertEquals("user", bindings.get("_args_3"));
-        assertEquals(id1, bindings.get("_args_4"));
-        assertEquals("customer", bindings.get("_args_5"));
-        assertEquals("g.inject(new ReferenceEdge(_args_0,_args_1,new ReferenceVertex(_args_2,_args_3),new ReferenceVertex(_args_4,_args_5)))", script3.getScript());
-        bindings.clear();
-
-        final Script script4 = translator.translate(
-                g.addE("knows").from(vertex1).to(vertex2).property("when", "2018/09/21")
-                        .asAdmin().getGremlinLang());
-        script4.getParameters().ifPresent(bindings::putAll);
-        assertEquals(7, bindings.size());
-        assertEquals("knows", bindings.get("_args_0"));
-        assertEquals(id1, bindings.get("_args_1"));
-        assertEquals("customer", bindings.get("_args_2"));
-        assertEquals(id2, bindings.get("_args_3"));
-        assertEquals("user", bindings.get("_args_4"));
-        assertEquals("when", bindings.get("_args_5"));
-        assertEquals("2018/09/21", bindings.get("_args_6"));
-        assertEquals("g.addE(_args_0).from(new ReferenceVertex(_args_1,_args_2)).to(new ReferenceVertex(_args_3,_args_4)).property(_args_5,_args_6)", script4.getScript());
-        bindings.clear();
-
-        final Script script5 = translator.translate(g.V().has("age").asAdmin().getGremlinLang());
-        script5.getParameters().ifPresent(bindings::putAll);
-        assertEquals(1, bindings.size());
-        assertEquals("age", bindings.get("_args_0"));
-        assertEquals("g.V().has(_args_0)", script5.getScript());
-    }
-
-    public static class ParameterizedSillyClass {
-
-        private final String x;
-        private final int y;
-
-        private ParameterizedSillyClass(final String x, final int y) {
-            this.x = x;
-            this.y = y;
-        }
-
-        public static ParameterizedSillyClass from(final String x, final int y) {
-            return new ParameterizedSillyClass(x, y);
-        }
-
-        public String getX() {
-            return x;
-        }
-
-        public int getY() {
-            return y;
-        }
-
-        public Object[] getArguments() {
-            return new Object[] {x,y};
-        }
-
-        @Override
-        public String toString() {
-            return String.format("org.apache.tinkerpop.gremlin.groovy.jsr223.ParameterizedGroovyTranslatorTest.ParameterizedSillyClass.from('%s', (int) %s)", getX(), getY());
-        }
-    }
-
-    public static class ParameterizedSillyClassTranslator extends  GroovyTranslator.DefaultTypeTranslator {
-        public ParameterizedSillyClassTranslator(final boolean withParameters) {
-           super(withParameters);
-        }
-
-        @Override
-        protected Script convertToScript(final Object object) {
-            if (object instanceof ParameterizedSillyClass) {
-                ParameterizedSillyClass obj = (ParameterizedSillyClass) object;
-                script.append(obj.getClass().getCanonicalName());
-                if (0 == obj.getArguments().length) {
-                    script.append(".").append("from").append("()");
-                } else {
-                    script.append(".").append("from").append("(");
-                    for (final Object argument: obj.getArguments()) {
-                        convertToScript(argument);
-                        script.append(",");
-                    }
-                    script.setCharAtEnd(')');
-                }
-                return script;
-            } else {
-                return super.convertToScript(object);
-            }
-        }
-    }
-
-    public static class ParameterizedSillyClassTranslatorCustomizer implements TranslatorCustomizer {
-
-        @Override
-        public Translator.ScriptTranslator.TypeTranslator createTypeTranslator() {
-            return new ParameterizedSillyClassTranslator(true);
-        }
-    }
-}
-
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslatorTest.java
deleted file mode 100644
index 82674922ec..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslatorTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * 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.process.traversal.translator;
-
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Merge;
-import org.apache.tinkerpop.gremlin.process.traversal.GraphOp;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.hasLabel;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.inE;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
-import static org.junit.Assert.assertEquals;
-
-public class PythonTranslatorTest {
-    private static final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-    private static final Translator.ScriptTranslator translator = PythonTranslator.of("g");
-    private static final Translator.ScriptTranslator noSugarTranslator = PythonTranslator.of("g", new PythonTranslator.NoSugarTranslator(false));
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertEquals("translator[h:gremlin-python]", PythonTranslator.of("h").toString());
-    }
-
-    @Test
-    public void shouldTranslateOption() {
-        final String gremlinAsPython = translator.translate(
-                g.V().has("person", "name", "marko").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().has('person','name','marko')", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslateCardinality() {
-        final String gremlinAsPython = translator.translate(
-                g.addV("person").property(VertexProperty.Cardinality.list, "name", "marko").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.addV('person').property(Cardinality.list_,'name','marko')", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslateCardinalityValue() {
-        final Map<Object, Object> m = new HashMap<>();
-        m.put("name", VertexProperty.Cardinality.set("marko"));
-        final String gremlinAsPython = translator.translate(
-                g.mergeV(new HashMap<>()).option(Merge.onMatch, m).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.merge_v({}).option(Merge.on_match,{'name':CardinalityValue.set_('marko')})", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslateMultilineStrings() {
-        final String gremlinAsPython = translator.translate(
-                g.addV().property("text", "a"+ System.lineSeparator() + "\"and\"" + System.lineSeparator() + "b").asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.addV().property('text',\"\"\"a" + System.lineSeparator() + "\"and\"" + System.lineSeparator() + "b\"\"\")", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslateChildTraversals() {
-        final String gremlinAsPython = translator.translate(
-                g.V().has("person", "name", "marko").
-                  where(outE()).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().has('person','name','marko').where(__.outE())", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslatePythonNamedSteps() {
-        final String gremlinAsPython = translator.translate(
-                g.V().has("person", "name", "marko").
-                        where(outE().count().is(2).and(__.not(inE().count().is(3)))).asAdmin().getGremlinLang()).getScript();
-        assertEquals("g.V().has('person','name','marko').where(__.outE().count().is_(2).and_(__.not_(__.inE().count().is_(3))))", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslateTextP() {
-        assertTranslation("TextP.containing('ark')", TextP.containing("ark"));
-        assertTranslation("TextP.regex('ark')", TextP.regex("ark"));
-        assertTranslation("TextP.not_regex('ark')", TextP.notRegex("ark"));
-    }
-
-    @Test
-    public void shouldTranslateStrategies() {
-        assertEquals("g.withStrategies(*[TraversalStrategy('ReadOnlyStrategy', None, 'org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy'),TraversalStrategy('SubgraphStrategy',{'checkAdjacentVertices':False,'vertices':__.hasLabel('person')}, 'org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy'),TraversalStrategy('SeedStrategy',{'seed':999999,'strategy':'org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.S [...]
-                translator.translate(g.withStrategies(ReadOnlyStrategy.instance(),
-                        SubgraphStrategy.build().checkAdjacentVertices(false).vertices(hasLabel("person")).create(),
-                        SeedStrategy.build().seed(999999).create()).
-                        V().has("name").asAdmin().getGremlinLang()).getScript());
-    }
-
-    @Test
-    public void shouldTranslateLambdas() {
-        final GremlinLang bytecode = g.withSideEffect("lengthSum", 0).withSack(1)
-                .V()
-                .filter(Lambda.predicate("x -> x.get().label() == 'person'", "gremlin-groovy"))
-                .flatMap(Lambda.function("it.get().vertices(Direction.OUT)", "gremlin-groovy"))
-                .map(Lambda.<Traverser<Object>, Integer>function("x -> x : len(x.get().value('name'))", "gremlin-groovy"))
-                .sideEffect(Lambda.consumer("x -> x.sideEffects(\"lengthSum\", x.sideEffects('lengthSum') + x.get())    ", "gremlin-groovy"))
-                .order().by(Lambda.comparator("a,b -> a == b ? 0 : (a > b) ? 1 : -1)", "gremlin-groovy"))
-                .sack(Lambda.biFunction("a,b -> a + b", "gremlin-groovy"))
-                .asAdmin().getGremlinLang();
-        assertEquals("g.withSideEffect('lengthSum',0).withSack(1).V().filter_(lambda: \"x -> x.get().label() == 'person'\").flatMap(lambda: \"it.get().vertices(Direction.OUT)\").map(lambda: \"x -> x : len(x.get().value('name'))\").sideEffect(lambda: \"x -> x.sideEffects(\\\"lengthSum\\\", x.sideEffects('lengthSum') + x.get())\").order().by(lambda: \"a,b -> a == b ? 0 : (a > b) ? 1 : -1)\").sack(lambda: \"a,b -> a + b\")",
-                translator.translate(bytecode).getScript());
-    }
-
-    @Test
-    public void shouldTranslateWithSyntaxSugar() {
-      final String gremlinAsPython = translator.translate(g.V().range(0, 10).has("person", "name", "marko").limit(2).values("name").asAdmin().getGremlinLang())
-          .getScript();
-      assertEquals("g.V()[0:10].has('person','name','marko')[0:2].name", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslateWithoutSyntaxSugar() {
-      final String gremlinAsPython = noSugarTranslator
-          .translate(g.V().range(0, 10).has("person", "name", "marko").limit(2).values("name").asAdmin().getGremlinLang())
-          .getScript();
-      assertEquals("g.V().range_(0,10).has('person','name','marko').limit(2).values('name')", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldTranslateTx() {
-        String script = translator.translate(GraphOp.TX_COMMIT.getGremlinLang()).getScript();
-        assertEquals("g.tx().commit()", script);
-        script = translator.translate(GraphOp.TX_ROLLBACK.getGremlinLang()).getScript();
-        assertEquals("g.tx().rollback()", script);
-    }
-
-    private void assertTranslation(final String expectedTranslation, final Object... objs) {
-        final String script = translator.translate(g.inject(objs).asAdmin().getGremlinLang()).getScript();
-        assertEquals(String.format("g.inject(%s)", expectedTranslation), script);
-    }
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelperTest.java
deleted file mode 100644
index 9724b2783b..0000000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelperTest.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * 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.process.traversal.util;
-
-import java.lang.reflect.Modifier;
-import java.util.Arrays;
-import java.util.List;
-import org.apache.tinkerpop.gremlin.process.traversal.Bindings;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.util.Iterator;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.GraphOp.TX_COMMIT;
-import static org.apache.tinkerpop.gremlin.process.traversal.GraphOp.TX_ROLLBACK;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class BytecodeHelperTest {
-    private static final GraphTraversalSource g = EmptyGraph.instance().traversal();
-    private static final List<Class<?>> TRAVERSAL_SYMBOLS_CLASSES = Arrays.asList(
-            Traversal.Symbols.class, GraphTraversal.Symbols.class,
-            TraversalSource.Symbols.class, GraphTraversalSource.Symbols.class
-    );
-    private static final List<String> MODULATING_OPERATORS = Arrays.asList(
-            GraphTraversal.Symbols.to, GraphTraversal.Symbols.from, GraphTraversal.Symbols.read,
-            GraphTraversal.Symbols.write, GraphTraversal.Symbols.emit, GraphTraversal.Symbols.until,
-            GraphTraversal.Symbols.by, GraphTraversal.Symbols.with, GraphTraversal.Symbols.times,
-            GraphTraversal.Symbols.as, GraphTraversal.Symbols.option, TraversalSource.Symbols.withSack,
-            TraversalSource.Symbols.withStrategies, TraversalSource.Symbols.withoutStrategies,
-            TraversalSource.Symbols.withSideEffect, TraversalSource.Symbols.withRemote,
-            TraversalSource.Symbols.withComputer, GraphTraversalSource.Symbols.withBulk,
-            GraphTraversalSource.Symbols.withPath
-    );
-
-    @Test
-    public void shouldFindStrategy() {
-        final Iterator<OptionsStrategy> itty = BytecodeHelper.findStrategies(g.with("x").with("y", 100).V().asAdmin().getGremlinLang(), OptionsStrategy.class);
-        int counter = 0;
-        while(itty.hasNext()) {
-            final OptionsStrategy strategy = itty.next();
-            if (strategy.getOptions().keySet().contains("x")) {
-                assertThat(strategy.getOptions().get("x"), is(true));
-                counter++;
-            } else if (strategy.getOptions().keySet().contains("y")) {
-                assertEquals(100, strategy.getOptions().get("y"));
-                counter++;
-            }
-        }
-
-        assertEquals(2, counter);
-    }
-
-    @Test
-    public void shouldNotFindStrategy() {
-        final Iterator<ReadOnlyStrategy> itty = BytecodeHelper.findStrategies(g.with("x").with("y", 100).V().asAdmin().getGremlinLang(), ReadOnlyStrategy.class);
-        assertThat(itty.hasNext(), is(false));
-    }
-
-    @Test
-    public void shouldNotFindGremlinGroovyLambdaLanguage() {
-        final Optional<String> lambda = BytecodeHelper.getLambdaLanguage(g.V().out("knows").map(Lambda.function("it.get()")).asAdmin().getGremlinLang());
-        assertThat(lambda.isPresent(), is(true));
-    }
-
-    @Test
-    public void shouldNotFindLambdaLanguage() {
-        final Optional<String> lambda = BytecodeHelper.getLambdaLanguage(g.V().out("knows").map(__.identity()).asAdmin().getGremlinLang());
-        assertThat(lambda.isPresent(), is(false));
-    }
-
-    @Test
-    public void shouldRemoveBindings() {
-        final Bindings b = Bindings.instance();
-        final GremlinLang bc = g.V(b.of("x", 1)).out(b.of("y", "knows")).asAdmin().getGremlinLang();
-        final GremlinLang filteredBeforeRemoved = BytecodeHelper.filterInstructions(
-                bc, i -> Stream.of(i.getArguments()).anyMatch(o -> o instanceof GremlinLang.Binding));
-        assertEquals(2, filteredBeforeRemoved.getStepInstructions().size());
-
-        BytecodeHelper.removeBindings(bc);
-        final GremlinLang filteredAfterRemoved = BytecodeHelper.filterInstructions(
-                bc, i -> Stream.of(i.getArguments()).anyMatch(o -> o instanceof GremlinLang.Binding));
-        assertEquals(0, filteredAfterRemoved.getStepInstructions().size());
-    }
-
-    @Test
-    public void shouldDetermineOperation() {
-        assertThat(BytecodeHelper.isGraphOperation(TX_COMMIT.getGremlinLang()), is(true));
-        assertThat(BytecodeHelper.isGraphOperation(TX_ROLLBACK.getGremlinLang()), is(true));
-        assertThat(BytecodeHelper.isGraphOperation(g.V().out("knows").asAdmin().getGremlinLang()), is(false));
-    }
-
-    @Test
-    public void findPossibleTraversalSteps() {
-        TRAVERSAL_SYMBOLS_CLASSES.stream().map(Class::getDeclaredFields).flatMap(Arrays::stream).filter(field -> {
-            final int modifier = field.getModifiers();
-            // We are interested in public static final string fields defined in the class
-            return Modifier.isStatic(modifier) && Modifier.isPublic(modifier) && Modifier.isFinal(modifier);
-        }).forEach(field -> {
-            try {
-                final List<Class<? extends Step>> steps = BytecodeHelper.findPossibleTraversalSteps((String) field.get(null));
-                assertNotNull(steps);
-            } catch (Exception ex) {
-                Assert.fail(String.format("Error while finding possible Traversal step for operator %s. Exception: %s", field.getName(), ex));
-            }
-        });
-    }
-
-    @Test
-    public void findPossibleTraversalStepsForModulatorOperators() {
-        MODULATING_OPERATORS.forEach(operator -> {
-            try {
-                final List<Class<? extends Step>> steps = BytecodeHelper.findPossibleTraversalSteps(operator);
-                assertNotNull(steps);
-                assertThat(steps.size(), is(0));
-            } catch (Exception ex) {
-                Assert.fail(String.format("Error while finding possible Traversal step for operator %s. Exception: %s", operator, ex));
-            }
-        });
-    }
-}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
index e74e289e31..3e9e6dddab 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
@@ -19,7 +19,6 @@
 package org.apache.tinkerpop.gremlin.structure.io.graphson;
 
 import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
 import org.apache.tinkerpop.gremlin.process.traversal.Compare;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.PBiPredicate;
@@ -242,14 +241,6 @@ public class GraphSONMapperEmbeddedTypeTest extends AbstractGraphSONTest {
         assertEquals(o, serializeDeserialize(mapper, o, Lambda.class));
     }
 
-    @Test
-    public void shouldHandleBytecodeBinding() throws Exception {
-        assumeThat(version, not(startsWith("v1")));
-
-        final GremlinLang.Binding<String> o = new GremlinLang.Binding<>("test", "testing");
-        assertEquals(o, serializeDeserialize(mapper, o, GremlinLang.Binding.class));
-    }
-
     @Test
     public void shouldHandleTraverser() throws Exception {
         assumeThat(version, not(startsWith("v1")));
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java
index 0fc8d5bad9..8b344600b6 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java
@@ -21,10 +21,7 @@ package org.apache.tinkerpop.gremlin.driver;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.driver.exception.ConnectionException;
 import org.apache.tinkerpop.gremlin.driver.exception.NoHostAvailableException;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.util.message.RequestMessageV4;
 import org.slf4j.Logger;
@@ -105,31 +102,6 @@ public abstract class Client {
         return new AliasClusteredClient(this, graphOrTraversalSource);
     }
 
-    /**
-     * Submit a {@link Traversal} to the server for remote execution.Results are returned as {@link Traverser}
-     * instances and are therefore bulked, meaning that to properly iterate the contents of the result each
-     * {@link Traverser#bulk()} must be examined to determine the number of times that object should be presented in
-     * iteration.
-     */
-    public ResultSet submit(final Traversal traversal) {
-        try {
-            return submitAsync(traversal).get();
-        } catch (RuntimeException re) {
-            throw re;
-        } catch (Exception ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-
-    /**
-     * An asynchronous version of {@link #submit(Traversal)}. Results are returned as {@link Traverser} instances and
-     * are therefore bulked, meaning that to properly iterate the contents of the result each {@link Traverser#bulk()}
-     * must be examined to determine the number of times that object should be presented in iteration.
-     */
-    public CompletableFuture<ResultSet> submitAsync(final Traversal traversal) {
-        throw new UnsupportedOperationException("This implementation does not support Traversal submission - use a Client created with from the alias() method");
-    }
-
     /**
      * Initializes the client which typically means that a connection is established to the server.  Depending on the
      * implementation and configuration this blocking call may take some time.  This method will be called
@@ -517,13 +489,6 @@ public abstract class Client {
             return super.submitAsync(builder.create());
         }
 
-        @Override
-        public CompletableFuture<ResultSet> submitAsync(final Traversal traversal) {
-            final GremlinLang gremlincode = traversal.asAdmin().getGremlinLang();
-            gremlincode.addG(graphOrTraversalSource);
-            return submitAsync(gremlincode.getGremlin(), gremlincode.getParameters());
-        }
-
         @Override
         public synchronized Client init() {
             if (close.isDone()) throw new IllegalStateException("Client is closed");
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/util/PerformanceTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/util/PerformanceTest.java
deleted file mode 100644
index 6310794d10..0000000000
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/util/PerformanceTest.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * 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.util;
-
-import org.apache.tinkerpop.gremlin.driver.Client;
-import org.apache.tinkerpop.gremlin.driver.Cluster;
-import org.apache.tinkerpop.gremlin.driver.ResultSet;
-import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import java.time.Duration;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-
-/**
- * DO NOT USE - THIS WILL BE DELETED
- * This file is intended for generating Performance test results only.
- * It is not to be used in a production setting.
- * It is being made available as a reference to the test results for
- * anyone that wants see the code used to obtain the performance metrics.
- */
-class PerformanceTest {
-    private static final int SAMPLE_SIZE = 55;
-    private static final int VALUE_MAP_REPEATS = 500;
-    private static final String HOST = "localhost";
-    private static final int PORT = 45940;
-    private static final int POOLING_CONTENT_LENGTH = 25 * 1024 * 1024;
-    private static final int MAX_CONTENT_LENGTH = 300 * 1024 * 1024;
-    private static final String REMOTE_TRAVERSAL_SOURCE = "ggrateful";
-    private static final int POOLING_TRAVERSAL_SIZE = 10;
-    private static final List<Integer> POOL_SIZE = new ArrayList<>();
-    private static final List<Integer> POOL_QUERY_COUNT = new ArrayList<>();
-    static {
-        POOL_SIZE.add(1);
-        POOL_SIZE.add(2);
-        POOL_SIZE.add(4);
-        POOL_SIZE.add(8);
-        POOL_QUERY_COUNT.add(50);
-        POOL_QUERY_COUNT.add(100);
-        POOL_QUERY_COUNT.add(250);
-        POOL_QUERY_COUNT.add(500);
-    }
-
-    private static void main(String[] args) {
-        // executePerformanceTests();
-        System.exit(0);
-    }
-
-    private static DriverRemoteConnection getDriverRemoteConnection(final Integer poolSize) {
-        return DriverRemoteConnection.using(getCluster(poolSize), REMOTE_TRAVERSAL_SOURCE);
-    }
-
-    private static Cluster getCluster(final Integer poolSize) {
-
-        return (poolSize == null) ? Cluster.build(HOST).port(PORT).maxContentLength(MAX_CONTENT_LENGTH).create()
-                :Cluster.build(HOST).port(PORT).maxContentLength(POOLING_CONTENT_LENGTH).maxConnectionPoolSize(poolSize).create();
-    }
-
-    private static Client getClient(final Cluster cluster) {
-        return cluster.connect().alias(REMOTE_TRAVERSAL_SOURCE);
-    }
-
-    private static GraphTraversalSource getGraphTraversalSource(final DriverRemoteConnection connection) {
-        return traversal().withRemote(connection);
-    }
-
-    private static String[] getArgs(final int repeats) {
-        final String[] args = new String[repeats];
-        for (int i = 0; i < repeats; i++) {
-            args[i] = Integer.toString(i);
-        }
-        return args;
-    }
-
-    private static GraphTraversal<?, ?> getProjectTraversal(final GraphTraversalSource g, final int repeats,
-                                                            final String[] args) {
-        GraphTraversal<?, ?> traversal = g.V().project(args[0], Arrays.copyOfRange(args, 1, repeats));
-        for (int i = 0; i < repeats; i++) {
-            traversal = traversal.by(__.valueMap(true));
-        }
-        return traversal;
-    }
-
-    private static void executePerformanceTests() {
-        System.out.println("~~~~~~~ PERFORMANCE TESTS STARTED ~~~~~~~");
-        System.out.println("~~~~~~~ RUNNING ONE ITEM PERFORMANCE TEST ~~~~~~~");
-        executeGetNextPerformanceTest();
-        System.out.println("~~~~~~~ RUNNING LIST PERFORMANCE TEST ~~~~~~~");
-        executeGetToListPerformanceTest();
-        System.out.println("~~~~~~~ RUNNING THROUGHPUT PERFORMANCE TEST ~~~~~~~");
-        POOL_QUERY_COUNT.forEach(queryCount -> {
-            POOL_SIZE.forEach(poolSize -> {
-                System.out.println("~~~ Pool size " + poolSize + ", query count " + queryCount + " ~~~");
-                executeThroughputPerformanceTest(poolSize, queryCount);
-            });
-        });
-        System.out.println("~~~~~~~ PERFORMANCE TESTS COMPLETE ~~~~~~~");
-    }
-
-    private static void executeThroughputPerformanceTest(final int poolSize, final int queryCount) {
-        final DriverRemoteConnection connection = getDriverRemoteConnection(poolSize);
-        final GraphTraversalSource g = getGraphTraversalSource(connection);
-        final Client client = getClient(getCluster(poolSize));
-        final List<Duration> durations = new ArrayList<>();
-        for (int i = 0; i < SAMPLE_SIZE; i++) {
-            try {
-                final List<CompletableFuture<ResultSet>> results = new ArrayList<>();
-                final Instant start = Instant.now();
-                for (int j = 0; j < queryCount; j++) {
-                    final String[] args = getArgs(POOLING_TRAVERSAL_SIZE);
-                    results.add(client.submitAsync(getProjectTraversal(g, POOLING_TRAVERSAL_SIZE, args)));
-                }
-                for (final CompletableFuture<ResultSet> result : results) {
-                    result.get().all().get();
-                }
-                final Instant end = Instant.now();
-                durations.add(Duration.between(start, end));
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        final TimingData data = getTimingDataFromDurationList(durations);
-        System.out.println(data.toThroughput("Pooling", queryCount));
-    }
-
-    private static void executeGetNextPerformanceTest() {
-        GraphTraversalSource g = getGraphTraversalSource(getDriverRemoteConnection(null));
-        final List<Duration> durations = new ArrayList<>();
-        for (int i = 0; i < SAMPLE_SIZE; i++) {
-            try {
-                final String[] args = getArgs(VALUE_MAP_REPEATS);
-                final Instant starts = Instant.now();
-                // execute and retrieve(timed)
-                getProjectTraversal(g, VALUE_MAP_REPEATS, args).next();
-                final Instant ends = Instant.now();
-                durations.add(Duration.between(starts, ends));
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        final TimingData data = getTimingDataFromDurationList(durations);
-        System.out.println(data.toStringMillis("One Item"));
-    }
-
-    private static void executeGetToListPerformanceTest() {
-        final GraphTraversalSource g = getGraphTraversalSource(getDriverRemoteConnection(null));
-        final List<Duration> durations = new ArrayList<>();
-        for (int i = 0; i < SAMPLE_SIZE; i++) {
-            try {
-                final String[] args = getArgs(VALUE_MAP_REPEATS);
-                final Instant starts = Instant.now();
-                // execute and retrieve(timed)
-                getProjectTraversal(g, VALUE_MAP_REPEATS, args).toList();
-                final Instant ends = Instant.now();
-                durations.add(Duration.between(starts, ends));
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        final TimingData data = getTimingDataFromDurationList(durations);
-        System.out.println(data.toStringMillis("List"));
-    }
-
-    private static TimingData getTimingDataFromDurationList(final List<Duration> durations) {
-        Collections.sort(durations);
-        for (int i = 0; i < 5; i++) {
-            durations.remove(durations.size() - 1);
-        }
-        return new TimingData(
-                durations.stream().reduce(Duration.ZERO, Duration::plus).dividedBy(durations.size()),
-                durations.get(durations.size() / 2),
-                durations.get((int) (durations.size() * 0.90)),
-                durations.get((int) (durations.size() * 0.95)),
-                durations.get((int) (durations.size() * 0.10)),
-                durations.get((int) (durations.size() * 0.05)),
-                durations.get(0),
-                durations.get(durations.size() - 1)
-        );
-    }
-}
-
-
-class TimingData {
-    final Duration AVG;
-    final Duration MEDIAN;
-    final Duration PERCENTILE_90;
-    final Duration PERCENTILE_95;
-    final Duration PERCENTILE_10;
-    final Duration PERCENTILE_5;
-    final Duration MIN;
-    final Duration MAX;
-
-    TimingData(Duration avg, Duration median, Duration percentile_90, Duration percentile_95, Duration percentile_10, Duration percentile_5, Duration min,
-               Duration max) {
-        AVG = avg;
-        MEDIAN = median;
-        PERCENTILE_90 = percentile_90;
-        PERCENTILE_95 = percentile_95;
-        PERCENTILE_10 = percentile_10;
-        PERCENTILE_5 = percentile_5;
-        MIN = min;
-        MAX = max;
-    }
-
-    public String toStringMillis(final String testType) {
-        return "Test Type: " + testType + "\n" +
-                "\tAVG=" + AVG.toMillis() + "ms \n" +
-                "\tPERCENTILE_5=" + PERCENTILE_5.toMillis() + "ms \n" +
-                "\tPERCENTILE_10=" + PERCENTILE_10.toMillis() + "ms \n" +
-                "\tMEDIAN=" + MEDIAN.toMillis() + "ms \n" +
-                "\tPERCENTILE_90=" + PERCENTILE_90.toMillis() + "ms \n" +
-                "\tPERCENTILE_95=" + PERCENTILE_95.toMillis() + "ms \n" +
-                "\tMIN=" + MIN.toMillis() + "ms \n" +
-                "\tMAX=" + MAX.toMillis() + "ms \n";
-    }
-
-    public String toThroughput(final String testType, int queryCount) {
-        return "Test Type: " + testType + "\n" +
-                "\tAVG=" + ((1000L * queryCount) / AVG.toMillis()) + " query/s \n" +
-                "\tPERCENTILE_5=" + ((1000L * queryCount) / PERCENTILE_95.toMillis()) + " query/s \n" +
-                "\tPERCENTILE_10=" + ((1000L * queryCount) / PERCENTILE_90.toMillis()) + " query/s \n" +
-                "\tMEDIAN=" + ((1000L * queryCount) / MEDIAN.toMillis()) + " query/s \n" +
-                "\tPERCENTILE_90=" + ((1000L * queryCount) / PERCENTILE_10.toMillis()) + " query/s \n" +
-                "\tPERCENTILE_95=" + ((1000L * queryCount) / PERCENTILE_5.toMillis()) + " query/s \n" +
-                "\tMIN=" + ((1000L * queryCount) / MAX.toMillis()) + " query/s \n" +
-                "\tMAX=" + ((1000L * queryCount) / MIN.toMillis()) + " query/s \n";
-    }
-}
diff --git a/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/jsr223/ast/VarAsBindingASTTransformation.groovy b/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/jsr223/ast/VarAsBindingASTTransformation.groovy
index e06b12f14e..7161f3faea 100644
--- a/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/jsr223/ast/VarAsBindingASTTransformation.groovy
+++ b/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/jsr223/ast/VarAsBindingASTTransformation.groovy
@@ -19,10 +19,10 @@
 
 package org.apache.tinkerpop.gremlin.groovy.jsr223.ast
 
+import org.apache.tinkerpop.gremlin.language.translator.GremlinTranslator
 import org.apache.tinkerpop.gremlin.process.traversal.Order
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
-import org.apache.tinkerpop.gremlin.process.traversal.Translator
 import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang
 import org.apache.tinkerpop.gremlin.process.traversal.Bindings
 import org.apache.tinkerpop.gremlin.util.CollectionUtil
@@ -50,7 +50,7 @@ import org.codehaus.groovy.transform.GroovyASTTransformation
 /**
  * Converts variables used in Gremlin to {@link Bindings} declarations. By doing this, the generated traversal ends up
  * having those {@link Bindings} in the Gremlin {@link GremlinLang} which means that when passed through a
- * {@link Translator} to generate a script form, the variables are preserved.
+ * {@link GremlinTranslator} to generate a script form, the variables are preserved.
  * <p/>
  * This AST Transformation is meant to work with a single lines of Gremlin and only Gremlin. Inclusion of Groovy code
  * might produce odd behavior as all variables found are basically treated as bindings which is not desirable for
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
index 977b8f5c8e..38b21c1d01 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
@@ -19,19 +19,15 @@
 package org.apache.tinkerpop.gremlin.groovy.engine;
 
 import org.apache.commons.lang3.ClassUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.commons.lang3.concurrent.BasicThreadFactory;
-import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptChecker;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager;
 import org.apache.tinkerpop.gremlin.jsr223.ConcurrentBindings;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin;
+import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptChecker;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngineManager;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,7 +36,6 @@ import javax.script.Compilable;
 import javax.script.CompiledScript;
 import javax.script.ScriptException;
 import javax.script.SimpleBindings;
-
 import java.io.InterruptedIOException;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Method;
@@ -192,12 +187,12 @@ public class GremlinExecutor implements AutoCloseable {
      * result after script evaluates but before transaction commit and before the returned {@link CompletableFuture}
      * is completed.
      *
-     * @param gremlin the script or GremlinLang to evaluate
+     * @param gremlin the script to evaluate
      * @param language the language to evaluate it in
      * @param boundVars the bindings to evaluate in the context of the script
      * @param transformResult a {@link Function} that transforms the result - can be {@code null}
      */
-    public CompletableFuture<Object> eval(final Object gremlin, final String language, final Map<String, Object> boundVars,
+    public CompletableFuture<Object> eval(final String gremlin, final String language, final Map<String, Object> boundVars,
                                           final Function<Object, Object> transformResult) {
         return eval(gremlin, language, new SimpleBindings(boundVars), transformResult, null);
     }
@@ -207,13 +202,13 @@ public class GremlinExecutor implements AutoCloseable {
      * result after script evaluates but before transaction commit and before the returned {@link CompletableFuture}
      * is completed.
      *
-     * @param gremlin the script or GremlinLang to evaluate
+     * @param gremlin the script to evaluate
      * @param language the language to evaluate it in
      * @param boundVars the bindings to evaluate in the context of the script
      * @param timeOut optional override for evaluation timeout
      * @param transformResult a {@link Function} that transforms the result - can be {@code null}
      */
-    public CompletableFuture<Object> eval(final Object gremlin, final String language, final Map<String, Object> boundVars,
+    public CompletableFuture<Object> eval(final String gremlin, final String language, final Map<String, Object> boundVars,
                                           final Long timeOut, final Function<Object, Object> transformResult) {
         return eval(gremlin, language, new SimpleBindings(boundVars), timeOut, transformResult, null);
     }
@@ -240,13 +235,13 @@ public class GremlinExecutor implements AutoCloseable {
      * processing after the script evaluates and after the {@link CompletableFuture} is completed, but before the
      * transaction is committed.
      *
-     * @param gremlin the script or GremlinLang to evaluate
+     * @param gremlin the script to evaluate
      * @param language the language to evaluate it in
      * @param boundVars the bindings to evaluate in the context of the script
      * @param transformResult a {@link Function} that transforms the result - can be {@code null}
      * @param withResult a {@link Consumer} that accepts the result - can be {@code null}
      */
-    public CompletableFuture<Object> eval(final Object gremlin, final String language, final Bindings boundVars,
+    public CompletableFuture<Object> eval(final String gremlin, final String language, final Bindings boundVars,
                                           final Function<Object, Object> transformResult, final Consumer<Object> withResult) {
         return eval(gremlin, language, boundVars, null, transformResult, withResult);
     }
@@ -258,14 +253,14 @@ public class GremlinExecutor implements AutoCloseable {
      * processing after the script evaluates and after the {@link CompletableFuture} is completed, but before the
      * transaction is committed.
      *
-     * @param gremlin the script or GremlinLang to evaluate
+     * @param gremlin the script to evaluate
      * @param language the language to evaluate it in
      * @param boundVars the bindings to evaluate in the context of the script
      * @param timeOut optional override for evaluation timeout
      * @param transformResult a {@link Function} that transforms the result - can be {@code null}
      * @param withResult a {@link Consumer} that accepts the result - can be {@code null}
      */
-    public CompletableFuture<Object> eval(final Object gremlin, final String language, final Bindings boundVars, final Long timeOut,
+    public CompletableFuture<Object> eval(final String gremlin, final String language, final Bindings boundVars, final Long timeOut,
                                           final Function<Object, Object> transformResult, final Consumer<Object> withResult) {
         final LifeCycle lifeCycle = LifeCycle.build()
                 .evaluationTimeoutOverride(timeOut)
@@ -278,12 +273,12 @@ public class GremlinExecutor implements AutoCloseable {
     /**
      * Evaluate a script and allow for the submission of alteration to the entire evaluation execution lifecycle.
      *
-     * @param gremlin the script or GremlinLang to evaluate
+     * @param gremlin the script to evaluate
      * @param language the language to evaluate it in
      * @param boundVars the bindings to evaluate in the context of the script
      * @param lifeCycle a set of functions that can be applied at various stages of the evaluation process
      */
-    public CompletableFuture<Object> eval(final Object gremlin, final String language, final Bindings boundVars, final LifeCycle lifeCycle) {
+    public CompletableFuture<Object> eval(final String gremlin, final String language, final Bindings boundVars, final LifeCycle lifeCycle) {
         final String lang = Optional.ofNullable(language).orElse("gremlin-groovy");
 
         if (logger.isDebugEnabled()) {
@@ -296,9 +291,7 @@ public class GremlinExecutor implements AutoCloseable {
 
         // override the timeout if the lifecycle has a value assigned. if the script contains with(timeout)
         // options then allow that value to override what's provided on the lifecycle
-        final Optional<Long> timeoutDefinedInScript = gremlin instanceof String
-                ? GremlinScriptChecker.parse((String) gremlin).getTimeout()
-                : Optional.empty();
+        final Optional<Long> timeoutDefinedInScript = GremlinScriptChecker.parse(gremlin).getTimeout();
         final long scriptEvalTimeOut = timeoutDefinedInScript.orElse(
                 lifeCycle.getEvaluationTimeoutOverride().orElse(evaluationTimeout));
 
@@ -309,21 +302,7 @@ public class GremlinExecutor implements AutoCloseable {
 
                 logger.debug("Evaluating script - {} - in thread [{}]", gremlin, Thread.currentThread().getName());
 
-                Object o;
-                if (gremlin instanceof String) {
-                    o = gremlinScriptEngineManager.getEngineByName(lang).eval((String) gremlin, bindings);
-                }
-                else if (gremlin instanceof GremlinLang) {
-                    final GremlinLang GremlinLang = (GremlinLang) gremlin;
-                    final Traversal.Admin<?, ?> traversal = eval(
-                            GremlinLang, bindings, BytecodeHelper.getLambdaLanguage(GremlinLang).orElse("gremlin-groovy"), "g");
-
-                    o = IteratorUtils.asList(traversal);
-                }
-                else {
-                    throw new IllegalArgumentException("Invalid gremlin type.");
-                }
-
+                final Object o =gremlinScriptEngineManager.getEngineByName(lang).eval(gremlin, bindings);
 
                 // apply a transformation before sending back the result - useful when trying to force serialization
                 // in the same thread that the eval took place given ThreadLocal nature of graphs as well as some
@@ -392,19 +371,6 @@ public class GremlinExecutor implements AutoCloseable {
         return evaluationFuture;
     }
 
-    /**
-     * Evaluates bytecode with bindings for a specific language into a {@link Traversal}.
-     */
-    public Traversal.Admin eval(final GremlinLang bytecode, final Bindings boundVars, final String language, final String traversalSource) throws ScriptException {
-        final String lang = Optional.ofNullable(language).orElse("gremlin-groovy");
-
-        final Bindings bindings = new SimpleBindings();
-        bindings.putAll(globalBindings);
-        bindings.putAll(boundVars);
-
-        return gremlinScriptEngineManager.getEngineByName(lang).eval(bytecode, bindings, traversalSource);
-    }
-
     public GremlinScriptEngineManager getScriptEngineManager() {
         return this.gremlinScriptEngineManager;
     }
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
index ede4b91dfe..aa3e24a165 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java
@@ -37,12 +37,6 @@ import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptContext;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngineFactory;
 import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer;
-import org.apache.tinkerpop.gremlin.jsr223.TranslatorCustomizer;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.control.CompilationFailedException;
@@ -79,7 +73,6 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -140,7 +133,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
      */
     public static final String COLLECTED_BOUND_VARS_MAP_VARNAME = "gremlin_script_engine_collected_boundvars";
 
-    private static final Pattern patternImportStatic = Pattern.compile("\\Aimport\\sstatic.*");
 
     public static final ThreadLocal<Map<String, Object>> COMPILE_OPTIONS = new ThreadLocal<Map<String, Object>>() {
         @Override
@@ -186,7 +178,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
 
     private volatile GremlinGroovyScriptEngineFactory factory;
 
-    private static final String STATIC = "static";
     private static final String SCRIPT = "Script";
     private static final String DOT_GROOVY = ".groovy";
     private static final String GROOVY_LANG_SCRIPT = "groovy.lang.Script";
@@ -198,7 +189,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
 
     private final boolean interpreterModeEnabled;
     private final long expectedCompilationTime;
-    private final Optional<Translator.ScriptTranslator.TypeTranslator> typeTranslator;
 
     /**
      * There is no need to require type checking infrastructure if type checking is not enabled.
@@ -257,11 +247,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
         interpreterModeEnabled = groovyCustomizers.stream()
                 .anyMatch(p -> p.getClass().equals(InterpreterModeGroovyCustomizer.class));
 
-        final Optional<TranslatorCustomizer> translatorCustomizer = listOfCustomizers.stream().
-                filter(p -> p instanceof TranslatorCustomizer).
-                map(p -> (TranslatorCustomizer) p).findFirst();
-        typeTranslator = translatorCustomizer.map(TranslatorCustomizer::createTypeTranslator);
-
         createClassLoader();
     }
 
@@ -272,35 +257,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
         return loadedPlugins;
     }
 
-    @Override
-    public Traversal.Admin eval(final GremlinLang bytecode, final Bindings bindings, final String traversalSource) throws ScriptException {
-        // these validations occur before merging in bytecode bindings which will override existing ones. need to
-        // extract the named traversalsource prior to that happening so that bytecode bindings can share the same
-        // namespace as global bindings (e.g. traversalsources and graphs).
-        if (traversalSource.equals(HIDDEN_G))
-            throw new IllegalArgumentException("The traversalSource cannot have the name " + HIDDEN_G + " - it is reserved");
-
-        if (bindings.containsKey(HIDDEN_G))
-            throw new IllegalArgumentException("Bindings cannot include " + HIDDEN_G + " - it is reserved");
-
-        if (!bindings.containsKey(traversalSource))
-            throw new IllegalArgumentException("The bindings available to the ScriptEngine do not contain a traversalSource named: " + traversalSource);
-
-        final Object b = bindings.get(traversalSource);
-        if (!(b instanceof TraversalSource))
-            throw new IllegalArgumentException(traversalSource + " is of type " + b.getClass().getSimpleName() + " and is not an instance of TraversalSource");
-
-        final Bindings inner = new SimpleBindings();
-        inner.putAll(bindings);
-        inner.putAll(bytecode.getBindings());
-        inner.put(HIDDEN_G, b);
-        // DefaultTypeTranslator isn't thread-safe so a new one needs to be instantiated to keep this ScriptEngine thread-safe.
-        final Translator.ScriptTranslator.TypeTranslator translator = typeTranslator.isPresent() ? typeTranslator.get() : new GroovyTranslator.DefaultTypeTranslator(false);
-        org.apache.tinkerpop.gremlin.process.traversal.Script script = GroovyTranslator.of(HIDDEN_G, translator).translate(bytecode);
-        script.getParameters().ifPresent(inner::putAll);
-        return (Traversal.Admin) this.eval(script.getScript(), inner);
-    }
-
     /**
      * Resets the entire {@code GremlinGroovyScriptEngine} by clearing script caches, recreating the classloader,
      * clearing bindings.
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
index a78921cae9..47f7a7a699 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
@@ -21,24 +21,19 @@ package org.apache.tinkerpop.gremlin.groovy.jsr223;
 import groovy.lang.Closure;
 import groovy.lang.MissingMethodException;
 import groovy.lang.MissingPropertyException;
-import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.AmbiguousMethodASTTransformation;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.RepeatASTTransformationCustomizer;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.VarAsBindingASTTransformation;
 import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.DotNetTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.JavascriptTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.translator.PythonTranslator;
 import org.apache.tinkerpop.gremlin.structure.Column;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
 import org.javatuples.Pair;
@@ -474,122 +469,6 @@ public class GremlinGroovyScriptEngineTest {
 		engine.eval("__.users();[]");
 	}
 
-    @Test
-    public void shouldProduceBindingsForVars() throws Exception {
-        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(
-                (GroovyCustomizer) () -> new RepeatASTTransformationCustomizer(new AmbiguousMethodASTTransformation()),
-                (GroovyCustomizer) () -> new RepeatASTTransformationCustomizer(new VarAsBindingASTTransformation()));
-
-        final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-        final Bindings bindings = new SimpleBindings();
-        bindings.put("g", g);
-        engine.eval("g.V(b).out()", bindings);
-        final Traversal.Admin<Vertex, Vertex> t = (Traversal.Admin<Vertex, Vertex>)
-                engine.eval("g.V(v1Id).has(\"person\",\"age\",29).has('person','active',x).in(\"knows\")." +
-                        System.lineSeparator() +
-                        "mergeE(m1).mergeV(m2).option(Merge.onCreate,m3).mergeV(__.identity())." +
-                        System.lineSeparator() +
-                        "choose(__.out().count()).option(two, __.values(\"name\")).option(three, __.values(\"age\"))." +
-                        System.lineSeparator() +
-                        "filter(outE().count().is(y))."  +
-                        System.lineSeparator() +
-                        "map(l)." +
-                        System.lineSeparator() +
-                        "order().by('name',o)", bindings);
-        final GremlinLang bytecode = t.getGremlinLang();
-        engine.eval("g.V(b).out()", bindings);
-
-        final PythonTranslator translator = PythonTranslator.of("g");
-        final String gremlinAsPython = translator.translate(bytecode).getScript();
-
-        final Map<String,Object> bytecodeBindings = bytecode.getBindings();
-        assertEquals(10, bytecodeBindings.size());
-        assertThat(bytecodeBindings.containsKey("x"), is(true));
-        assertThat(bytecodeBindings.containsKey("y"), is(true));
-        assertThat(bytecodeBindings.containsKey("v1Id"), is(true));
-        assertThat(bytecodeBindings.containsKey("l"), is(true));
-        assertThat(bytecodeBindings.containsKey("o"), is(true));
-        assertThat(bytecodeBindings.containsKey("m1"), is(true));
-        assertThat(bytecodeBindings.containsKey("m2"), is(true));
-        assertThat(bytecodeBindings.containsKey("m3"), is(true));
-        assertThat(bytecodeBindings.containsKey("two"), is(true));
-        assertThat(bytecodeBindings.containsKey("three"), is(true));
-
-        assertEquals("g.V(v1Id).has('person','age',29).has('person','active',x).in_('knows').merge_e(m1).merge_v(m2).option(Merge.on_create,m3).merge_v(__.identity()).choose(__.out().count()).option(two,__.name).option(three,__.age).filter_(__.outE().count().is_(y)).map(l).order().by('name',o)", gremlinAsPython);
-    }
-
-    @Test
-    public void shouldHandleNaNInf() throws Exception {
-        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine((GroovyCustomizer)
-                () -> new RepeatASTTransformationCustomizer(new VarAsBindingASTTransformation()));
-
-        final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-        final Bindings bindings = new SimpleBindings();
-        bindings.put("g", g);
-
-        final Traversal.Admin t = (Traversal.Admin)
-                engine.eval("g.inject(-Infinity,NaN,xx1).is(P.eq(Infinity).or(P.eq(NaN)).or(P.eq(+Infinity)))", bindings);
-        final GremlinLang bytecode = t.getGremlinLang();
-
-        final Map<String,Object> bytecodeBindings = bytecode.getBindings();
-        assertEquals(1, bytecodeBindings.size());
-        assertThat(bytecodeBindings.containsKey("xx1"), is(true));
-
-        final JavascriptTranslator jsTranslator = JavascriptTranslator.of("g");
-        final String gremlinAsJs = jsTranslator.translate(bytecode).getScript();
-        assertEquals("g.inject(Number.NEGATIVE_INFINITY,Number.NaN,xx1).is(P.eq(Number.POSITIVE_INFINITY).or(P.eq(Number.NaN)).or(P.eq(Number.POSITIVE_INFINITY)))", gremlinAsJs);
-
-        final PythonTranslator pyTranslator = PythonTranslator.of("g");
-        final String gremlinAsPy = pyTranslator.translate(bytecode).getScript();
-        assertEquals("g.inject(float('-inf'),float('nan'),xx1).is_(P.eq(float('inf')).or_(P.eq(float('nan'))).or_(P.eq(float('inf'))))", gremlinAsPy);
-
-        final DotNetTranslator dnTranslator = DotNetTranslator.of("g");
-        final String gremlinAsDn = dnTranslator.translate(bytecode).getScript();
-        assertEquals("g.Inject(Double.NegativeInfinity,Double.NaN,xx1).Is(P.Eq(Double.PositiveInfinity).Or(P.Eq(Double.NaN)).Or(P.Eq(Double.PositiveInfinity)))", gremlinAsDn);
-    }
-
-    @Test
-    public void shouldHandleCall() throws Exception {
-        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(
-                (GroovyCustomizer) () -> new RepeatASTTransformationCustomizer(new AmbiguousMethodASTTransformation()),
-                (GroovyCustomizer) () -> new RepeatASTTransformationCustomizer(new VarAsBindingASTTransformation())
-        );
-
-        final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-        final Bindings bindings = new SimpleBindings();
-        bindings.put("g", g);
-
-        final Traversal.Admin t = (Traversal.Admin)
-                engine.eval("g.V().as(\"v\").call(\"tinker.degree.centrality\", xx1, __.project(\"direction\").by(__.constant(OUT))).project(\"vertex\", \"degree\").by(select(\"v\")).by()", bindings);
-        final GremlinLang bytecode = t.getGremlinLang();
-
-        final Map<String,Object> bytecodeBindings = bytecode.getBindings();
-        assertEquals(1, bytecodeBindings.size());
-        assertThat(bytecodeBindings.containsKey("xx1"), is(true));
-
-        final JavascriptTranslator jsTranslator = JavascriptTranslator.of("g");
-        final String gremlinAsJs = jsTranslator.translate(bytecode).getScript();
-        assertEquals("g.V().as(\"v\").call(\"tinker.degree.centrality\",xx1,__.project(\"direction\").by(__.constant(Direction.OUT))).project(\"vertex\",\"degree\").by(__.select(\"v\")).by()", gremlinAsJs);
-
-        final PythonTranslator pyTranslator = PythonTranslator.of("g");
-        final String gremlinAsPy = pyTranslator.translate(bytecode).getScript();
-        assertEquals("g.V().as_('v').call('tinker.degree.centrality',xx1,__.project('direction').by(__.constant(Direction.OUT))).project('vertex','degree').by(__.select('v')).by()", gremlinAsPy);
-
-        final DotNetTranslator dnTranslator = DotNetTranslator.of("g");
-        final String gremlinAsDn = dnTranslator.translate(bytecode).getScript();
-        assertEquals("g.V().As(\"v\").Call<object>(\"tinker.degree.centrality\",(IDictionary<object,object>) xx1,(ITraversal) __.Project<object>(\"direction\").By(__.Constant<object>(Direction.Out))).Project<object>(\"vertex\",\"degree\").By(__.Select<object>(\"v\")).By()", gremlinAsDn);
-
-        // verify no Bindings bleedover
-        final Traversal.Admin t2 = (Traversal.Admin)
-                engine.eval("g.inject([:])", bindings);
-        final GremlinLang bytecode2 = t2.getGremlinLang();
-
-        final Map<String,Object> bytecodeBindings2 = bytecode2.getBindings();
-        assertEquals(0, bytecodeBindings2.size());
-        assertThat(bytecodeBindings2.containsKey("xx1"), is(false));
-    }
-
-
     @Test
     public void shouldHandleMergeVAmbiguousNull() throws Exception {
         final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorProvider.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorProvider.java
index de9e1eea29..dcd13bd0a0 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorProvider.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorProvider.java
@@ -18,9 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.groovy.jsr223;
 
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.util.TinkerGraphProvider;
 
@@ -222,7 +220,6 @@ import org.apache.tinkerpop.gremlin.util.TinkerGraphProvider;
 public class GroovyTranslatorProvider extends TinkerGraphProvider {
     @Override
     public GraphTraversalSource traversal(final Graph graph) {
-        final GraphTraversalSource g = graph.traversal();
-        return g.withStrategies(new TranslationStrategy(g, GroovyTranslator.of("g"), true));
+        return graph.traversal();
     }
 }
\ No newline at end of file
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorProvider.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorProvider.java
index fb4ef311b1..db6512311a 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorProvider.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorProvider.java
@@ -18,9 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.groovy.jsr223;
 
-import org.apache.tinkerpop.gremlin.process.traversal.translator.GroovyTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.util.TinkerGraphProvider;
 
@@ -222,7 +220,6 @@ import org.apache.tinkerpop.gremlin.util.TinkerGraphProvider;
 public class ParameterizedGroovyTranslatorProvider extends TinkerGraphProvider {
     @Override
     public GraphTraversalSource traversal(final Graph graph) {
-        final GraphTraversalSource g = graph.traversal();
-        return g.withStrategies(new TranslationStrategy(g, GroovyTranslator.of("g", true), true));
+        return graph.traversal();
     }
 }
\ No newline at end of file
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/authz/Authorizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/authz/Authorizer.java
index 73aaa3361b..3af1ff4080 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/authz/Authorizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/authz/Authorizer.java
@@ -51,6 +51,11 @@ public interface Authorizer {
      */
     public GremlinLang authorize(final AuthenticatedUser user, final GremlinLang bytecode, final Map<String, String> aliases) throws AuthorizationException;
 
+    // todo: implement auth for gremlin-lang
+    public default String authorize(final AuthenticatedUser user, final String gremlin, final Map<String, String> aliases) throws AuthorizationException {
+        return gremlin;
+    }
+
     /**
      * Checks whether a user is authorized to have a script request from a gremlin client answered and raises an
      * {@link AuthorizationException} if this is not the case.
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java
index 712bac9cec..51c95d4730 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpBasicAuthorizationHandler.java
@@ -66,22 +66,14 @@ public class HttpBasicAuthorizationHandler extends ChannelInboundHandlerAdapter
                 if (null == user) {    // This is expected when using the AllowAllAuthenticator
                     user = AuthenticatedUser.ANONYMOUS_USER;
                 }
-                switch (requestMessage.getGremlinType()) {
-                    case TokensV4.OPS_BYTECODE:
-                        final GremlinLang bytecode = (GremlinLang) requestMessage.getGremlin();
-                        final Map<String, String> aliases = new HashMap<>();
-                        aliases.put(TokensV4.ARGS_G, requestMessage.getField(TokensV4.ARGS_G));
-                        final GremlinLang restrictedBytecode = authorizer.authorize(user, bytecode, aliases);
-                        final RequestMessageV4 restrictedMsg = RequestMessageV4.from(requestMessage, restrictedBytecode).create();
-                        ctx.fireChannelRead(restrictedMsg);
-                        break;
-                    case TokensV4.OPS_EVAL:
-                        authorizer.authorize(user, requestMessage);
-                        ctx.fireChannelRead(requestMessage);
-                        break;
-                    default:
-                        throw new AuthorizationException("This AuthorizationHandler only handles requests with OPS_BYTECODE or OPS_EVAL.");
-                }
+
+                final String gremlin = requestMessage.getGremlin();
+                final Map<String, String> aliases = new HashMap<>();
+                aliases.put(TokensV4.ARGS_G, requestMessage.getField(TokensV4.ARGS_G));
+                final String restrictedGremlin = authorizer.authorize(user, gremlin, aliases);
+                final RequestMessageV4 restrictedMsg = RequestMessageV4.from(requestMessage, restrictedGremlin).create();
+                ctx.fireChannelRead(restrictedMsg);
+
             } catch (AuthorizationException ex) {  // Expected: users can alternate between allowed and disallowed requests
                 String address = ctx.channel().remoteAddress().toString();
                 if (address.startsWith("/") && address.length() > 1) address = address.substring(1);
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
index 711a0d87ae..cc9265b3cc 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpGremlinEndpointHandler.java
@@ -33,8 +33,6 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.TimedInterruptTimeoutException;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
-import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang;
 import org.apache.tinkerpop.gremlin.process.traversal.Failure;
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
@@ -42,7 +40,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
 import org.apache.tinkerpop.gremlin.server.Context;
 import org.apache.tinkerpop.gremlin.server.GraphManager;
@@ -116,8 +113,6 @@ public class HttpGremlinEndpointHandler extends SimpleChannelInboundHandler<Requ
 
     private static final Timer evalOpTimer = MetricManager.INSTANCE.getTimer(name(GremlinServer.class, "op", "eval"));
 
-    private static final Bindings EMPTY_BINDINGS = new SimpleBindings();
-
     protected static final Set<String> INVALID_BINDINGS_KEYS = new HashSet<>();
 
     static {
@@ -203,19 +198,7 @@ public class HttpGremlinEndpointHandler extends SimpleChannelInboundHandler<Requ
                 ctx.writeAndFlush(responseHeader);
                 ctx.channel().attr(StateKey.HTTP_RESPONSE_SENT).set(true);
 
-                switch (requestMessage.getGremlinType()) {
-                    case "":
-                    case TokensV4.OPS_EVAL:
-                        iterateScriptEvalResult(requestCtx, serializer.getValue1(), requestMessage);
-                        break;
-                    case TokensV4.OPS_BYTECODE:
-                        iterateTraversal(requestCtx, serializer.getValue1(), translateBytecodeToTraversal(requestCtx));
-                        break;
-                    case TokensV4.OPS_INVALID:
-                        throw new ProcessingException(GremlinError.invalidGremlinType(requestMessage));
-                    default:
-                        throw new ProcessingException(GremlinError.unknownGremlinType(requestMessage));
-                }
+                iterateScriptEvalResult(requestCtx, serializer.getValue1(), requestMessage);
             } catch (Throwable t) {
                 writeError(requestCtx, formErrorResponseMessage(t, requestMessage), serializer.getValue1());
             } finally {
@@ -320,44 +303,11 @@ public class HttpGremlinEndpointHandler extends SimpleChannelInboundHandler<Requ
         final GremlinScriptEngine scriptEngine = gremlinExecutor.getScriptEngineManager().getEngineByName(language);
 
         final Bindings mergedBindings = mergeBindingsFromRequest(context, new SimpleBindings(graphManager.getAsBindings()));
-        final Object result = scriptEngine.eval((String) message.getGremlin(), mergedBindings);
+        final Object result = scriptEngine.eval(message.getGremlin(), mergedBindings);
 
         handleIterator(context, IteratorUtils.asIterator(result), serializer);
     }
 
-    private static Traversal.Admin<?,?> translateBytecodeToTraversal(Context ctx) throws ProcessingException {
-        final RequestMessageV4 requestMsg = ctx.getRequestMessage();
-        if (!(requestMsg.getGremlin() instanceof GremlinLang)) {
-            throw new ProcessingException(GremlinError.gremlinType());
-        }
-
-        final Optional<String> alias = requestMsg.optionalField(TokensV4.ARGS_G);
-        if (!alias.isPresent()) {
-            throw new ProcessingException(GremlinError.traversalSource());
-        }
-
-        final String traversalSourceName = alias.get();
-        if (!ctx.getGraphManager().getTraversalSourceNames().contains(traversalSourceName)) {
-            throw new ProcessingException(GremlinError.traversalSource(traversalSourceName));
-        }
-
-        final TraversalSource g = ctx.getGraphManager().getTraversalSource(traversalSourceName);
-        final GremlinLang bytecode = (GremlinLang) requestMsg.getGremlin(); // type checked at start of method.
-        try {
-            final Optional<String> lambdaLanguage = BytecodeHelper.getLambdaLanguage(bytecode);
-            if (!lambdaLanguage.isPresent())
-                return JavaTranslator.of(g).translate(bytecode);
-            else
-                return ctx.getGremlinExecutor().eval(bytecode, EMPTY_BINDINGS, lambdaLanguage.get(), traversalSourceName);
-        } catch (ScriptException ex) {
-            logger.error("Traversal contains a lambda that cannot be compiled", ex);
-            throw new ProcessingException(GremlinError.lambdaNotSupported(ex));
-        } catch (Exception ex) {
-            logger.error("Could not deserialize the Traversal instance", ex);
-            throw new ProcessingException(GremlinError.deserializeTraversal(ex));
-        }
-    }
-
     @Override
     public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) {
         logger.error("Error processing HTTP Request", cause);
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/GremlinError.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/GremlinError.java
index 33114138bf..bcd9ec40a8 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/GremlinError.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/GremlinError.java
@@ -62,28 +62,21 @@ public class GremlinError {
         return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
     }
 
-    public static GremlinError unknownGremlinType(final RequestMessageV4 requestMessage ) {
-        final String message = String.format("Message with gremlin of type [%s] is not recognized.",
-                requestMessage.getGremlinType());
-        return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
-    }
-
     // script errors
     public static GremlinError binding() {
-        final String message = String.format("The [%s] message is using one or more invalid binding keys - they must be of type String and cannot be null",
-                TokensV4.OPS_EVAL);
+        final String message = String.format("The message is using one or more invalid binding keys - they must be of type String and cannot be null");
         return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
     }
 
     public static GremlinError binding(final Set<String> badBindings) {
-        final String message = String.format("The [%s] message supplies one or more invalid parameters key of [%s] - these are reserved names.",
-                TokensV4.OPS_EVAL, badBindings);
+        final String message = String.format("The message supplies one or more invalid parameters key of [%s] - these are reserved names.",
+                badBindings);
         return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
     }
 
     public static GremlinError binding(final int bindingsCount, final int allowedSize) {
-        final String message = String.format("The [%s] message contains %s bindings which is more than is allowed by the server %s configuration",
-                TokensV4.OPS_EVAL, bindingsCount, allowedSize);
+        final String message = String.format("The message contains %s bindings which is more than is allowed by the server %s configuration",
+                bindingsCount, allowedSize);
         return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
     }
 
@@ -93,33 +86,6 @@ public class GremlinError {
         return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
     }
 
-    // bytecode errors
-
-    public static GremlinError gremlinType() {
-        final String message = String.format("A [%s] message requires a gremlin argument that is of type %s.",
-                TokensV4.OPS_BYTECODE, TokensV4.ARGS_GREMLIN);
-        return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
-    }
-
-    public static GremlinError traversalSource() {
-        final String message = String.format("A [%s] message requires a [%s] argument.", TokensV4.OPS_BYTECODE, TokensV4.ARGS_G);
-        return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
-    }
-
-    public static GremlinError traversalSource(final String traversalSourceName ) {
-        final String message = String.format("The traversal source [%s] for alias [%s] is not configured on the server.",
-                traversalSourceName, TokensV4.ARGS_G);
-        return new GremlinError(HttpResponseStatus.BAD_REQUEST, message, "InvalidRequestException");
-    }
-
-    public static GremlinError lambdaNotSupported(final Throwable t) {
-        return new GremlinError(HttpResponseStatus.BAD_REQUEST, t.getMessage(), "InvalidRequestException");
-    }
-
-    public static GremlinError deserializeTraversal(final Throwable t) {
-        return new GremlinError(HttpResponseStatus.BAD_REQUEST, t.getMessage(), "InvalidRequestException");
-    }
-
     // execution errors
     public static GremlinError timeout(final RequestMessageV4 requestMessage ) {
         final String message = String.format("A timeout occurred during traversal evaluation of [%s] - consider increasing the limit given to evaluationTimeout",
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/AbstractRemoteGraphProvider.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/AbstractRemoteGraphProvider.java
index 7e29eb1050..20f14395b4 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/AbstractRemoteGraphProvider.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/AbstractRemoteGraphProvider.java
@@ -320,7 +320,7 @@ public abstract class AbstractRemoteGraphProvider extends AbstractGraphProvider
             }
         }
 
-        return g;
+        return g.with("language", "gremlin-lang");
     }
 
     public static Cluster.Builder createClusterBuilder(final SerializersV4 serializer) {
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ClientWithOptionsIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ClientWithOptionsIntegrateTest.java
index a120f999d4..7d8483c59f 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ClientWithOptionsIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ClientWithOptionsIntegrateTest.java
@@ -42,18 +42,6 @@ import static org.junit.Assert.fail;
  */
 public class ClientWithOptionsIntegrateTest extends AbstractGremlinServerIntegrationTest {
 
-    @Test
-    public void shouldTimeOutAliasedClientSendingBytecode() {
-        final Cluster cluster = TestClientFactory.build().create();
-        final Client client = cluster.connect().alias("ggrateful");
-        final GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(client, "g"));
-        final GraphTraversal traversal = g.with("evaluationTimeout", 1).V().both().both().both();
-        assertThrows(ExecutionException.class, () -> {
-            final List<Result> res = client.submit(traversal).all().get();
-            fail("Failed to time out. Result: " + res);
-        });
-    }
-
     @Test
     public void shouldTimeOutnonAliasedClientSendingByteCode() {
         final Cluster cluster = TestClientFactory.build().create();
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
index b0a9bc3cf9..d1f0d4d00d 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
@@ -95,19 +95,6 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
         cluster.close();
     }
 
-    @Test
-    @Ignore("[Discuss] is this valid use case?")
-    public void shouldHandleVertexResultFromTraversalBulked() throws Exception {
-        final Graph graph = TinkerGraph.open();
-        final GraphTraversalSource g = graph.traversal();
-        final Client aliased = client.alias("gmodern");
-        final ResultSet resultSetUnrolled = aliased.submit(g.V().both().barrier().both().barrier());
-        final List<Result> results = resultSetUnrolled.all().get();
-
-        assertThat(results.get(0).getObject(), CoreMatchers.instanceOf(Traverser.class));
-        assertEquals(6, results.size());
-    }
-
     @Test
     public void shouldHandleNullResult() throws Exception {
         final ResultSet results = client.submit("gmodern.V().drop().iterate();null");
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
index d394eb2703..0262439625 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
@@ -1121,58 +1121,6 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         return stream.getFooters();
     }
 
-    @Test
-    public void should200OnPOSTWithValidGraphSONBytecodeRequest() throws Exception {
-        final GremlinLang bytecodeQuery = EmptyGraph.instance().traversal().V().asAdmin().getGremlinLang();
-        final GraphSONMessageSerializerV4 serializer = new GraphSONMessageSerializerV4();
-        final ByteBuf serializedRequest = serializer.serializeRequestAsBinary(
-                RequestMessageV4.build(bytecodeQuery).addG("gmodern").create(),
-                new UnpooledByteBufAllocator(false));
-
-        final CloseableHttpClient httpclient = HttpClients.createDefault();
-        final HttpPost httppost = new HttpPost(TestClientFactory.createURLString());
-        httppost.addHeader(HttpHeaders.CONTENT_TYPE, SerializersV4.GRAPHSON_V4.getValue());
-        httppost.addHeader(HttpHeaders.ACCEPT, SerializersV4.GRAPHSON_V4.getValue());
-        httppost.setEntity(new ByteArrayEntity(serializedRequest.array()));
-
-        try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
-            assertEquals(200, response.getStatusLine().getStatusCode());
-            assertEquals(SerializersV4.GRAPHSON_V4.getValue(), response.getEntity().getContentType().getValue());
-            final String json = EntityUtils.toString(response.getEntity());
-            final JsonNode node = mapper.readTree(json);
-            final JsonNode dataArray = node.get("result").get(GraphSONTokens.VALUEPROP);
-            assertTrue(dataArray.isArray());
-            assertEquals(6, dataArray.size());
-        }
-    }
-
-    @Test
-    public void should200OnPOSTWithValidGraphBinaryBytecodeRequest() throws Exception {
-        final GremlinLang bytecodeQuery = EmptyGraph.instance().traversal().V().asAdmin().getGremlinLang();
-        final GraphBinaryMessageSerializerV4 serializer = new GraphBinaryMessageSerializerV4();
-//        final Map<String, String> aliases = new HashMap<>();
-//        aliases.put("g", "gmodern");
-        final ByteBuf serializedRequest = serializer.serializeRequestAsBinary(
-                RequestMessageV4.build(bytecodeQuery).addG("gmodern").create(),
-//                RequestMessage.build(Tokens.OPS_BYTECODE).addArg(Tokens.ARGS_GREMLIN, bytecodeQuery).addArg(Tokens.ARGS_ALIASES, aliases).create(),
-                new UnpooledByteBufAllocator(false));
-
-        final CloseableHttpClient httpclient = HttpClients.createDefault();
-        final HttpPost httppost = new HttpPost(TestClientFactory.createURLString());
-        httppost.addHeader(HttpHeaders.CONTENT_TYPE, SerializersV4.GRAPHBINARY_V4.getValue());
-        httppost.addHeader(HttpHeaders.ACCEPT, SerializersV4.GRAPHBINARY_V4.getValue());
-        httppost.setEntity(new ByteArrayEntity(serializedRequest.array()));
-
-        try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
-            assertEquals(200, response.getStatusLine().getStatusCode());
-            assertEquals(SerializersV4.GRAPHBINARY_V4.getValue(), response.getEntity().getContentType().getValue());
-            final ResponseMessageV4 respMsg = serializer.deserializeBinaryResponse(toByteBuf(response.getEntity()));
-            Object results = respMsg.getResult().getData();
-            assertTrue(results instanceof List);
-            assertEquals(6, ((List) results).size());
-        }
-    }
-
     @Test
     public void should200OnPOSTWithGremlinGraphSONEndcodedBodyAndDoubleBindings() throws Exception {
         final GraphSONMessageSerializerV4 serializer = new GraphSONMessageSerializerV4();
@@ -1219,31 +1167,10 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
     }
 
     @Test
-    public void should400OnPOSTWithInvalidRequestArgsWhenAliasesNotSuppliedForBytecode() throws Exception {
-        final GremlinLang bytecodeQuery = EmptyGraph.instance().traversal().V().asAdmin().getGremlinLang();
-        final GraphSONMessageSerializerV4 serializer = new GraphSONMessageSerializerV4();
-        final ByteBuf serializedRequest = serializer.serializeRequestAsBinary(
-                RequestMessageV4.build(bytecodeQuery).create(), new UnpooledByteBufAllocator(false));
-
-        final CloseableHttpClient httpclient = HttpClients.createDefault();
-        final HttpPost httppost = new HttpPost(TestClientFactory.createURLString());
-        httppost.addHeader(HttpHeaders.CONTENT_TYPE, SerializersV4.GRAPHSON_V4.getValue());
-        httppost.addHeader(HttpHeaders.ACCEPT, SerializersV4.GRAPHSON_V4.getValue());
-        httppost.setEntity(new ByteArrayEntity(serializedRequest.array()));
-
-        try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
-            assertEquals(200, response.getStatusLine().getStatusCode());
-            final String json = EntityUtils.toString(response.getEntity());
-            final JsonNode node = mapper.readTree(json);
-            assertTrue(node.get("status").get("message").asText().contains("A [bytecode] message requires a [g] argument"));
-        }
-    }
-
-    @Test
-    public void shouldErrorOnBytecodeGremlinFromApplicationJsonPostRequest() throws Exception {
... 1517 lines suppressed ...