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

okram pushed a commit to branch tp4
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/tp4 by this push:
     new a38e078  AbstractTraversal now has addInstruction() which does 
coefficient unity reseting and making sure the traverasl isn't locked 
(submitted).
a38e078 is described below

commit a38e07834a7ad7d206d91cac86d2a03f4e10a698
Author: Marko A. Rodriguez <okramma...@gmail.com>
AuthorDate: Sun Mar 24 09:57:01 2019 -0600

    AbstractTraversal now has addInstruction() which does coefficient unity 
reseting and making sure the traverasl isn't locked (submitted).
---
 .../language/gremlin/AbstractTraversal.java        |  25 ++-
 .../org/apache/tinkerpop/language/gremlin/P.java   |   2 +-
 .../language/gremlin/TraversalSource.java          |  24 ++-
 .../tinkerpop/language/gremlin/TraversalUtil.java  |  12 +-
 .../language/gremlin/common/CommonTraversal.java   | 107 ++++--------
 .../language/gremlin/core/CoreTraversal.java       | 183 +++++++++------------
 .../apache/tinkerpop/language/gremlin/core/__.java |  22 +--
 .../ConstantArgument.java => LocalMachine.java}    |  23 +--
 .../{bytecode/FunctionType.java => Machine.java}   |  12 +-
 .../tinkerpop/machine/bytecode/Bytecode.java       |   1 -
 .../tinkerpop/machine/bytecode/BytecodeUtil.java   |  31 +++-
 .../machine/bytecode/{ => compiler}/Argument.java  |   3 +-
 .../bytecode/{ => compiler}/BytecodeArgument.java  |   3 +-
 .../bytecode/{ => compiler}/BytecodeCompiler.java  |   4 +-
 .../{ => bytecode}/compiler/CommonCompiler.java    |   8 +-
 .../bytecode/{ => compiler}/Compilation.java       |  13 +-
 .../bytecode/{ => compiler}/CompilationCircle.java |   2 +-
 .../bytecode/{ => compiler}/CompositeCompiler.java |   4 +-
 .../bytecode/{ => compiler}/ConstantArgument.java  |   2 +-
 .../{ => bytecode}/compiler/CoreCompiler.java      |   9 +-
 .../bytecode/{ => compiler}/FunctionType.java      |   2 +-
 .../bytecode/{ => compiler}/MethodArgument.java    |   2 +-
 .../machine/bytecode/{ => compiler}/Oper.java      |   2 +-
 .../machine/bytecode/{ => compiler}/Pred.java      |   2 +-
 .../tinkerpop/machine/function/BranchFunction.java |   2 +-
 .../machine/function/barrier/JoinBarrier.java      |   6 +-
 .../machine/function/branch/BranchBranch.java      |   4 +-
 .../machine/function/branch/RepeatBranch.java      |   2 +-
 .../machine/function/filter/FilterFilter.java      |   4 +-
 .../machine/function/filter/HasKeyFilter.java      |   4 +-
 .../machine/function/filter/HasKeyValueFilter.java |   2 +-
 .../machine/function/filter/IsFilter.java          |   4 +-
 .../machine/function/flatmap/FlatMapFlatMap.java   |   2 +-
 .../tinkerpop/machine/function/map/MapMap.java     |   2 +-
 .../tinkerpop/machine/function/map/PathMap.java    |   4 +-
 .../tinkerpop/machine/function/map/ValueMap.java   |   2 +-
 .../machine/function/reduce/GroupCountReduce.java  |   2 +-
 .../machine/processor/HasNextProcessor.java        |   2 +-
 .../machine/processor/ProcessorFactory.java        |   4 +-
 .../machine/processor/SimpleProcessor.java         |   6 +-
 .../strategy/decoration/ExplainStrategy.java       |   4 +-
 .../strategy/finalization/CoefficientStrategy.java |   2 +-
 .../strategy/optimization/IdentityStrategy.java    |   2 +-
 .../CoefficientVerificationStrategy.java           |   4 +-
 .../machine/structure/StructureFactory.java        |   2 +-
 .../tinkerpop/machine/processor/beam/Beam.java     |   2 +-
 .../machine/processor/beam/BeamProcessor.java      |   8 +-
 .../tinkerpop/machine/processor/beam/BranchFn.java |   2 +-
 .../machine/processor/beam/RepeatEndFn.java        |   2 +-
 .../machine/processor/beam/RepeatStartFn.java      |   2 +-
 .../processor/beam/strategy/BeamStrategy.java      |   2 +-
 .../machine/processor/beam/util/TopologyUtil.java  |   2 +-
 .../machine/processor/pipes/BranchStep.java        |   2 +-
 .../tinkerpop/machine/processor/pipes/Pipes.java   |   2 +-
 .../machine/processor/pipes/PipesProcessor.java    |   8 +-
 .../machine/processor/pipes/RepeatStep.java        |   2 +-
 .../processor/pipes/strategy/PipesStrategy.java    |   2 +-
 .../structure/blueprints/BlueprintsStructure.java  |   4 +-
 .../compiler/BlueprintsCompiler.java               |   6 +-
 .../provider/BlueprintsVerticesStrategy.java       |   4 +-
 60 files changed, 279 insertions(+), 335 deletions(-)

diff --git 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/AbstractTraversal.java
 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/AbstractTraversal.java
index 5430215..53eebb9 100644
--- 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/AbstractTraversal.java
+++ 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/AbstractTraversal.java
@@ -19,11 +19,12 @@
 package org.apache.tinkerpop.language.gremlin;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -33,7 +34,7 @@ public abstract class AbstractTraversal<C, S, E> implements 
Traversal<C, S, E> {
 
     protected Coefficient<C> currentCoefficient;
     protected final Bytecode<C> bytecode;
-    private Compilation<C, S, E> compilation;
+    private Iterator<Traverser<C, E>> traversers = null;
     private boolean locked = false; // TODO: when a traversal has been 
submitted, we need to make sure new modulations can't happen.
 
     // iteration helpers
@@ -47,20 +48,30 @@ public abstract class AbstractTraversal<C, S, E> implements 
Traversal<C, S, E> {
 
     ///////
 
+    protected final <A, B> Traversal<C, A, B> addInstruction(final String op, 
final Object... args) {
+        if (this.locked)
+            throw new IllegalStateException("The traversal has already been 
compiled and can no longer be mutated");
+        this.bytecode.addInstruction(this.currentCoefficient, op, args);
+        this.currentCoefficient.unity();
+        return (Traversal<C, A, B>) this;
+    }
+
     private final void prepareTraversal() {
-        if (null == this.compilation)
-            this.compilation = Compilation.compile(this.bytecode);
+        if (null == this.traversers) {
+            this.locked = true;
+            this.traversers = 
BytecodeUtil.getMachine(this.bytecode).get().submit(this.bytecode);
+        }
     }
 
     public Traverser<C, E> nextTraverser() {
         this.prepareTraversal();
-        return this.compilation.getProcessor().next(); // TODO: interaction 
with hasNext/next and counts
+        return this.traversers.next(); // TODO: interaction with hasNext/next 
and counts
     }
 
     @Override
     public boolean hasNext() {
         this.prepareTraversal();
-        return this.lastCount > 0 || this.compilation.getProcessor().hasNext();
+        return this.lastCount > 0 || this.traversers.hasNext();
     }
 
     @Override
@@ -70,7 +81,7 @@ public abstract class AbstractTraversal<C, S, E> implements 
Traversal<C, S, E> {
             this.lastCount--;
             return this.lastObject;
         } else {
-            final Traverser<C, E> traverser = 
this.compilation.getProcessor().next();
+            final Traverser<C, E> traverser = this.traversers.next();
             if (traverser.coefficient().count() > 1) {
                 this.lastObject = traverser.object();
                 this.lastCount = traverser.coefficient().count() - 1L;
diff --git 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/P.java
 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/P.java
index a9d1570..5cc0906 100644
--- 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/P.java
+++ 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/P.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.language.gremlin;
 
-import org.apache.tinkerpop.machine.bytecode.Pred;
+import org.apache.tinkerpop.machine.bytecode.compiler.Pred;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
diff --git 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java
 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java
index 342576e..a294b48 100644
--- 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java
+++ 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalSource.java
@@ -19,13 +19,16 @@
 package org.apache.tinkerpop.language.gremlin;
 
 import org.apache.tinkerpop.language.gremlin.common.CommonTraversal;
+import org.apache.tinkerpop.machine.LocalMachine;
+import org.apache.tinkerpop.machine.Machine;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.coefficient.LongCoefficient;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.processor.ProcessorFactory;
 import org.apache.tinkerpop.machine.strategy.Strategy;
+import org.apache.tinkerpop.machine.strategy.decoration.ExplainStrategy;
 import org.apache.tinkerpop.machine.strategy.finalization.CoefficientStrategy;
 import 
org.apache.tinkerpop.machine.strategy.verification.CoefficientVerificationStrategy;
 import org.apache.tinkerpop.machine.structure.StructureFactory;
@@ -39,11 +42,14 @@ public class TraversalSource<C> implements Cloneable {
     private Bytecode<C> bytecode;
     private Coefficient<C> coefficient = (Coefficient<C>) 
LongCoefficient.create();
     // private Set<Strategy> sortedStrategies (will be more efficient to 
precompute sort order)
+    // private Machine machine (will be more efficient for remote connections)
 
     TraversalSource() {
         this.bytecode = new Bytecode<>();
-        this.bytecode.addSourceInstruction(Symbols.WITH_STRATEGY, 
CoefficientStrategy.class);
-        this.bytecode.addSourceInstruction(Symbols.WITH_STRATEGY, 
CoefficientVerificationStrategy.class); // TODO: remove when strategies full 
integrated
+        this.bytecode.addSourceInstruction(Symbols.WITH_STRATEGY, 
CoefficientStrategy.class); // TODO: remove when strategies full integrated
+        this.bytecode.addSourceInstruction(Symbols.WITH_STRATEGY, 
CoefficientVerificationStrategy.class);
+        this.bytecode.addSourceInstruction(Symbols.WITH_STRATEGY, 
ExplainStrategy.class);
+        this.bytecode.addSourceInstruction(Symbols.WITH_MACHINE, 
LocalMachine.class);
     }
 
     public TraversalSource<C> withCoefficient(final Class<? extends 
Coefficient<C>> coefficient) {
@@ -53,9 +59,11 @@ public class TraversalSource<C> implements Cloneable {
         return clone;
     }
 
-    /*public TraversalSource<C> withMachine(final Class<? extends 
MachineFactory> machine) {
-       // this is where high-level instructions can be inferred?
-    }*/
+    public TraversalSource<C> withMachine(final Class<? extends Machine> 
machine) {
+        final TraversalSource<C> clone = this.clone();
+        clone.bytecode.addUniqueSourceInstruction(Symbols.WITH_MACHINE, 
machine);
+        return clone;
+    }
 
     public TraversalSource<C> withProcessor(final Class<? extends 
ProcessorFactory> processor) {
         final TraversalSource<C> clone = this.clone();
@@ -81,14 +89,14 @@ public class TraversalSource<C> implements Cloneable {
         final Bytecode<C> bytecode = this.bytecode.clone();
         final Coefficient<C> coefficient = this.coefficient.clone();
         bytecode.addInstruction(coefficient, Symbols.INITIAL, objects);
-        return new CommonTraversal<>(coefficient, bytecode); // TODO
+        return new CommonTraversal<>(bytecode, coefficient); // TODO
     }
 
     public Traversal<C, TVertex, TVertex> V() {
         final Bytecode<C> bytecode = this.bytecode.clone();
         final Coefficient<C> coefficient = this.coefficient.clone();
         bytecode.addInstruction(coefficient, Symbols.V);
-        return new CommonTraversal<>(coefficient, bytecode); // TODO
+        return new CommonTraversal<>(bytecode, coefficient); // TODO
     }
 
     //
diff --git 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java
 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java
index 8e492d9..88ffde5 100644
--- 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java
+++ 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java
@@ -20,9 +20,8 @@ package org.apache.tinkerpop.language.gremlin;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
-import org.apache.tinkerpop.machine.coefficient.Coefficient;
-import org.apache.tinkerpop.machine.compiler.CommonCompiler;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -41,12 +40,13 @@ public final class TraversalUtil {
         return object instanceof AbstractTraversal ? ((AbstractTraversal) 
object).bytecode : object;
     }
 
-    public static <C, S, E> void insertRepeatInstruction(final Bytecode<C> 
bytecode, final Coefficient<C> currentCoefficient, final char type, final 
Object argument) {
-        final Instruction<C> lastInstruction = bytecode.lastInstruction();
+    public static <C, S, E> Traversal<C, S, E> insertRepeatInstruction(final 
AbstractTraversal<C, S, E> traversal, final char type, final Object argument) {
+        final Instruction<C> lastInstruction = 
traversal.bytecode.lastInstruction();
         if (lastInstruction.op().equals(Symbols.REPEAT))
             lastInstruction.addArgs(type, argument);
         else
-            bytecode.addInstruction(currentCoefficient, Symbols.REPEAT, type, 
argument);
+            traversal.addInstruction(Symbols.REPEAT, type, argument);
+        return traversal;
     }
 
     public static <C, S, E> Object[] createUnionArguments(final Traversal<C, 
S, E>... traversals) {
diff --git 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/CommonTraversal.java
 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/CommonTraversal.java
index 9261d9f..c505d2d 100644
--- 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/CommonTraversal.java
+++ 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/CommonTraversal.java
@@ -23,12 +23,10 @@ import org.apache.tinkerpop.language.gremlin.P;
 import org.apache.tinkerpop.language.gremlin.Traversal;
 import org.apache.tinkerpop.language.gremlin.TraversalUtil;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.Pred;
+import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.Pred;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.coefficient.LongCoefficient;
-import org.apache.tinkerpop.machine.compiler.CommonCompiler.Symbols;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler;
-import org.apache.tinkerpop.machine.strategy.decoration.ExplainStrategy;
 import org.apache.tinkerpop.machine.traverser.path.Path;
 
 import java.util.Arrays;
@@ -42,11 +40,11 @@ public class CommonTraversal<C, S, E> extends 
AbstractTraversal<C, S, E> {
     // used by __
     CommonTraversal() {
         // TODO: this will cause __ problems
-        super(new Bytecode<>(), (Coefficient<C>) LongCoefficient.create());
+        this(new Bytecode<>(), (Coefficient<C>) LongCoefficient.create());
     }
 
     // used by TraversalSource
-    public CommonTraversal(final Coefficient<C> unity, final Bytecode<C> 
bytecode) {
+    public CommonTraversal(final Bytecode<C> bytecode, final Coefficient<C> 
unity) {
         super(bytecode, unity);
     }
 
@@ -58,8 +56,7 @@ public class CommonTraversal<C, S, E> extends 
AbstractTraversal<C, S, E> {
 
     @Override
     public Traversal<C, S, E> barrier() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BARRIER);
-        return this;
+        return this.addInstruction(Symbols.BARRIER);
     }
 
     @Override
@@ -82,188 +79,156 @@ public class CommonTraversal<C, S, E> extends 
AbstractTraversal<C, S, E> {
 
     @Override
     public <R> Traversal<C, S, R> choose(final Traversal<C, E, ?> predicate, 
final Traversal<C, E, R> trueTraversal, final Traversal<C, E, R> 
falseTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal), 
Symbols.DEFAULT, TraversalUtil.getBytecode(falseTraversal));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal), 
Symbols.DEFAULT, TraversalUtil.getBytecode(falseTraversal));
     }
 
     @Override
     public <R> Traversal<C, S, R> choose(final Traversal<C, E, ?> predicate, 
final Traversal<C, E, R> trueTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal));
     }
 
     @Override
     public <R> Traversal<C, S, R> constant(final R constant) {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.CONSTANT, constant);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.CONSTANT, constant);
     }
 
     @Override
     public Traversal<C, S, Long> count() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.COUNT);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.COUNT);
     }
 
     @Override
     public Traversal<C, S, E> emit() {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'e', true);
-        return this;
+        return TraversalUtil.insertRepeatInstruction(this, 'e', true);
     }
 
     @Override
     public Traversal<C, S, E> emit(final Traversal<C, ?, ?> emitTraversal) {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'e', TraversalUtil.getBytecode(emitTraversal));
-        return this;
+        return TraversalUtil.insertRepeatInstruction(this, 'e', 
TraversalUtil.getBytecode(emitTraversal));
     }
 
     @Override
     public Traversal<C, S, String> explain() {
-        this.bytecode.addSourceInstruction(CoreCompiler.Symbols.WITH_STRATEGY, 
ExplainStrategy.class); // TODO: maybe its best to have this in the global cache
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.EXPLAIN);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.EXPLAIN);
     }
 
     @Override
     public Traversal<C, S, E> filter(final Traversal<C, E, ?> filterTraversal) 
{
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
TraversalUtil.getBytecode(filterTraversal));
-        return this;
+        return this.addInstruction(Symbols.FILTER, 
TraversalUtil.getBytecode(filterTraversal));
     }
 
     @Override
     public Traversal<C, S, Map<E, Long>> groupCount() {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.GROUP_COUNT);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.GROUP_COUNT);
     }
 
     @Override
     public <K, V> Traversal<C, S, Map<K, V>> has(final K key, final V value) {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.HAS_KEY_VALUE, TraversalUtil.tryToGetBytecode(key), 
TraversalUtil.tryToGetBytecode(value));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, 
TraversalUtil.tryToGetBytecode(key), TraversalUtil.tryToGetBytecode(value));
     }
 
     @Override
     public <K, V> Traversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, V>, 
K> keyTraversal, final V value) {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.HAS_KEY_VALUE, TraversalUtil.getBytecode(keyTraversal), 
TraversalUtil.tryToGetBytecode(value));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, 
TraversalUtil.getBytecode(keyTraversal), TraversalUtil.tryToGetBytecode(value));
     }
 
     @Override
     public <K, V> Traversal<C, S, Map<K, V>> has(final K key, final 
Traversal<C, Map<K, V>, V> valueTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.HAS_KEY_VALUE, TraversalUtil.tryToGetBytecode(key), 
TraversalUtil.getBytecode(valueTraversal));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, 
TraversalUtil.tryToGetBytecode(key), TraversalUtil.getBytecode(valueTraversal));
     }
 
     @Override
     public <K, V> Traversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, V>, 
K> keyTraversal, final Traversal<C, Map<K, V>, V> valueTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.HAS_KEY_VALUE, TraversalUtil.getBytecode(keyTraversal), 
TraversalUtil.getBytecode(valueTraversal));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, 
TraversalUtil.getBytecode(keyTraversal), 
TraversalUtil.getBytecode(valueTraversal));
     }
 
     @Override
     public <K, V> Traversal<C, S, Map<K, V>> hasKey(final P<K> predicate) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.HAS_KEY, 
predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.HAS_KEY, predicate.type().name(), 
TraversalUtil.tryToGetBytecode(predicate.object()));
     }
 
     @Override
     public <K, V> Traversal<C, S, Map<K, V>> hasKey(final K key) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.HAS_KEY, 
TraversalUtil.tryToGetBytecode(key));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.HAS_KEY, 
TraversalUtil.tryToGetBytecode(key));
     }
 
     @Override
     public <K, V> Traversal<C, S, Map<K, V>> hasKey(final Traversal<C, Map<K, 
V>, K> keyTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.HAS_KEY, 
TraversalUtil.getBytecode(keyTraversal));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.HAS_KEY, 
TraversalUtil.getBytecode(keyTraversal));
     }
 
     @Override
     public Traversal<C, S, E> identity() {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.IDENTITY);
-        return this;
+        return this.addInstruction(Symbols.IDENTITY);
     }
 
     @Override
     public Traversal<C, S, E> is(final E object) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, 
Pred.eq.name(), TraversalUtil.tryToGetBytecode(object));
-        return this;
+        return this.addInstruction(Symbols.IS, Pred.eq.name(), 
TraversalUtil.tryToGetBytecode(object));
     }
 
     @Override
     public Traversal<C, S, E> is(final Traversal<C, E, ?> objectTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, 
Pred.eq.name(), TraversalUtil.getBytecode(objectTraversal));
-        return this;
+        return this.addInstruction(Symbols.IS, Pred.eq.name(), 
TraversalUtil.getBytecode(objectTraversal));
     }
 
     @Override
     public Traversal<C, S, E> is(final P<E> predicate) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, 
predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
-        return this;
+        return this.addInstruction(Symbols.IS, predicate.type().name(), 
TraversalUtil.tryToGetBytecode(predicate.object()));
     }
 
     @Override
     public Traversal<C, S, Long> incr() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.INCR);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.INCR);
     }
 
     @Override
     public Traversal<C, S, Integer> loops() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.LOOPS, 
"traverser:loops");
-        return (Traversal) this;
+        return this.addInstruction(Symbols.LOOPS);
     }
 
     @Override
     public <R> Traversal<C, S, R> map(final Traversal<C, E, R> mapTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
TraversalUtil.getBytecode(mapTraversal));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.MAP, 
TraversalUtil.getBytecode(mapTraversal));
     }
 
     @Override
     public Traversal<C, S, Path> path(final String... labels) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.PATH, 
Arrays.asList(labels));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.PATH, Arrays.asList(labels));
     }
 
     @Override
     public Traversal<C, S, E> repeat(final Traversal<C, E, E> repeatTraversal) 
{
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'r', TraversalUtil.getBytecode(repeatTraversal));
-        return this;
+        return TraversalUtil.insertRepeatInstruction(this, 'r', 
TraversalUtil.getBytecode(repeatTraversal));
     }
 
     @Override
     public <R extends Number> Traversal<C, S, R> sum() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.SUM);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.SUM);
     }
 
     @Override
     public Traversal<C, S, E> times(final int times) {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'u', times);
-        return this;
+        return TraversalUtil.insertRepeatInstruction(this, 'u', times);
     }
 
     @Override
     public <R> Traversal<C, S, R> unfold() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.UNFOLD);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.UNFOLD);
     }
 
     @Override
     public <R> Traversal<C, S, R> union(final Traversal<C, E, R>... 
traversals) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BRANCH, 
TraversalUtil.createUnionArguments(traversals));
-        return (Traversal) this;
+        return this.addInstruction(Symbols.BRANCH, 
TraversalUtil.createUnionArguments(traversals));
     }
 
     @Override
     public Traversal<C, S, E> until(final Traversal<C, ?, ?> untilTraversal) {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'u', TraversalUtil.getBytecode(untilTraversal));
-        return this;
+        return TraversalUtil.insertRepeatInstruction(this, 'u', 
TraversalUtil.getBytecode(untilTraversal));
     }
 
     @Override
     public <K, V> Traversal<C, S, V> value(final K key) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.VALUE, 
key);
-        return (Traversal) this;
+        return this.addInstruction(Symbols.VALUE, key);
     }
 }
diff --git 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java
 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java
index 3658414..df5f9b6 100644
--- 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java
+++ 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/CoreTraversal.java
@@ -23,12 +23,11 @@ import org.apache.tinkerpop.language.gremlin.P;
 import org.apache.tinkerpop.language.gremlin.Traversal;
 import org.apache.tinkerpop.language.gremlin.TraversalUtil;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.Oper;
-import org.apache.tinkerpop.machine.bytecode.Pred;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.Oper;
+import org.apache.tinkerpop.machine.bytecode.compiler.Pred;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.coefficient.LongCoefficient;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
-import org.apache.tinkerpop.machine.strategy.decoration.ExplainStrategy;
 import org.apache.tinkerpop.machine.traverser.path.Path;
 
 import java.util.Arrays;
@@ -51,246 +50,212 @@ public class CoreTraversal<C, S, E> extends 
AbstractTraversal<C, S, E> {
     }
 
     @Override
-    public CoreTraversal<C, S, E> as(final String label) {
+    public Traversal<C, S, E> as(final String label) {
         this.bytecode.lastInstruction().addLabel(label);
         return this;
     }
 
     @Override
-    public CoreTraversal<C, S, E> barrier() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BARRIER);
-        return this;
+    public Traversal<C, S, E> barrier() {
+        return this.addInstruction(Symbols.BARRIER);
     }
 
     @Override
-    public CoreTraversal<C, S, E> by(final Traversal<C, ?, ?> byTraversal) {
+    public Traversal<C, S, E> by(final Traversal<C, ?, ?> byTraversal) {
         
this.bytecode.lastInstruction().addArg(TraversalUtil.getBytecode(byTraversal));
         return this;
     }
 
     @Override
-    public CoreTraversal<C, S, E> by(final String byString) {
+    public Traversal<C, S, E> by(final String byString) {
         this.bytecode.lastInstruction().addArg(byString);
         return this;
     }
 
     @Override
-    public CoreTraversal<C, S, E> c(final C coefficient) {
+    public Traversal<C, S, E> c(final C coefficient) {
         this.currentCoefficient.set(coefficient);
         return this;
     }
 
     @Override
-    public <R> CoreTraversal<C, S, R> choose(final Traversal<C, E, ?> 
predicate, final Traversal<C, E, R> trueTraversal, final Traversal<C, E, R> 
falseTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal), 
Symbols.DEFAULT, TraversalUtil.getBytecode(falseTraversal));
-        return (CoreTraversal) this;
+    public <R> Traversal<C, S, R> choose(final Traversal<C, E, ?> predicate, 
final Traversal<C, E, R> trueTraversal, final Traversal<C, E, R> 
falseTraversal) {
+        return this.addInstruction(Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal), 
Symbols.DEFAULT, TraversalUtil.getBytecode(falseTraversal));
     }
 
     @Override
-    public <R> CoreTraversal<C, S, R> choose(final Traversal<C, E, ?> 
predicate, final Traversal<C, E, R> trueTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal));
-        return (CoreTraversal) this;
+    public <R> Traversal<C, S, R> choose(final Traversal<C, E, ?> predicate, 
final Traversal<C, E, R> trueTraversal) {
+        return this.addInstruction(Symbols.BRANCH, 
TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal));
     }
 
     @Override
-    public <R> CoreTraversal<C, S, R> constant(final R constant) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
constant);
-        return (CoreTraversal) this;
+    public <R> Traversal<C, S, R> constant(final R constant) {
+        return this.addInstruction(Symbols.MAP, constant);
     }
 
     @Override
-    public CoreTraversal<C, S, Long> count() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
"traverser::count");
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.REDUCE, 
Oper.sum.name(), 0L);
-        return (CoreTraversal) this;
+    public Traversal<C, S, Long> count() {
+        this.addInstruction(Symbols.MAP, "traverser::count");
+        return this.addInstruction(Symbols.REDUCE, Oper.sum.name(), 0L);
     }
 
     @Override
-    public CoreTraversal<C, S, E> emit() {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'e', true);
-        return this;
+    public Traversal<C, S, E> emit() {
+        return TraversalUtil.insertRepeatInstruction(this, 'e', true);
     }
 
     @Override
-    public CoreTraversal<C, S, E> emit(final Traversal<C, ?, ?> emitTraversal) 
{
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'e', TraversalUtil.getBytecode(emitTraversal));
-        return this;
+    public Traversal<C, S, E> emit(final Traversal<C, ?, ?> emitTraversal) {
+        return TraversalUtil.insertRepeatInstruction(this, 'e', 
TraversalUtil.getBytecode(emitTraversal));
     }
 
     @Override
-    public CoreTraversal<C, S, String> explain() {
-        this.bytecode.addSourceInstruction(Symbols.WITH_STRATEGY, 
ExplainStrategy.class); // TODO: maybe its best to have this in the global cache
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.EXPLAIN);
-        return (CoreTraversal) this;
+    public Traversal<C, S, String> explain() {
+        return this.addInstruction(Symbols.EXPLAIN);
     }
 
     @Override
-    public CoreTraversal<C, S, E> filter(final Traversal<C, E, ?> 
filterTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
TraversalUtil.getBytecode(filterTraversal));
-        return this;
+    public Traversal<C, S, E> filter(final Traversal<C, E, ?> filterTraversal) 
{
+        return this.addInstruction(Symbols.FILTER, 
TraversalUtil.getBytecode(filterTraversal));
     }
 
     @Override
-    public CoreTraversal<C, S, Map<E, Long>> groupCount() {
-        this.bytecode.addInstruction(this.currentCoefficient, 
Symbols.GROUP_COUNT);
-        return (CoreTraversal) this;
+    public Traversal<C, S, Map<E, Long>> groupCount() {
+        return this.addInstruction(Symbols.GROUP_COUNT);
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, Map<K, V>> hasKey(final P<K> predicate) {
+    public <K, V> Traversal<C, S, Map<K, V>> hasKey(final P<K> predicate) {
         final Bytecode<C> internal = new Bytecode<>();
         internal.addInstruction(this.currentCoefficient, Symbols.FLATMAP, 
"dictionary::keys");
         internal.addInstruction(this.currentCoefficient, Symbols.FILTER, 
predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
internal);
-        return (CoreTraversal) this;
+        return this.addInstruction(Symbols.FILTER, internal);
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, Map<K, V>> hasKey(final K key) {
+    public <K, V> Traversal<C, S, Map<K, V>> hasKey(final K key) {
         final Bytecode<C> internal = new Bytecode<>();
         internal.addInstruction(this.currentCoefficient, Symbols.FLATMAP, 
"dictionary::keys");
         internal.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), key);
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
internal);
-        return (CoreTraversal) this;
+        return this.addInstruction(Symbols.FILTER, internal);
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, Map<K, V>> hasKey(final Traversal<C, 
Map<K, V>, K> keyTraversal) {
+    public <K, V> Traversal<C, S, Map<K, V>> hasKey(final Traversal<C, Map<K, 
V>, K> keyTraversal) {
         final Bytecode<C> internal = new Bytecode<>();
         internal.addInstruction(this.currentCoefficient, Symbols.FLATMAP, 
"dictionary::keys");
         internal.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), TraversalUtil.getBytecode(keyTraversal));
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
internal);
-        return (CoreTraversal) this;
+        return this.addInstruction(Symbols.FILTER, internal);
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, Map<K, V>> has(final K key, final V 
value) {
+    public <K, V> Traversal<C, S, Map<K, V>> has(final K key, final V value) {
         final Bytecode<C> internal = new Bytecode<>();
         internal.addInstruction(this.currentCoefficient, Symbols.MAP, 
"dictionary::get", TraversalUtil.tryToGetBytecode(key));
         internal.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), value);
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
internal);
-        return (CoreTraversal) this;
+        return this.addInstruction(Symbols.FILTER, internal);
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, 
V>, K> keyTraversal, final V value) {
+    public <K, V> Traversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, V>, 
K> keyTraversal, final V value) {
         final Bytecode<C> internal = new Bytecode<>();
         internal.addInstruction(this.currentCoefficient, Symbols.MAP, 
"dictionary::get", TraversalUtil.getBytecode(keyTraversal));
         internal.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), value);
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
internal);
-        return (CoreTraversal) this;
+        return this.addInstruction(Symbols.FILTER, internal);
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, Map<K, V>> has(final K key, final 
Traversal<C, Map<K, V>, V> valueTraversal) {
+    public <K, V> Traversal<C, S, Map<K, V>> has(final K key, final 
Traversal<C, Map<K, V>, V> valueTraversal) {
         final Bytecode<C> internal = new Bytecode<>();
         internal.addInstruction(this.currentCoefficient, Symbols.MAP, 
"dictionary::get", key);
         internal.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), TraversalUtil.getBytecode(valueTraversal));
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
internal);
-        return (CoreTraversal) this;
+        return this.addInstruction(Symbols.FILTER, internal);
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, 
V>, K> keyTraversal, final Traversal<C, Map<K, V>, V> valueTraversal) {
+    public <K, V> Traversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, V>, 
K> keyTraversal, final Traversal<C, Map<K, V>, V> valueTraversal) {
         final Bytecode<C> internal = new Bytecode<>();
         internal.addInstruction(this.currentCoefficient, Symbols.MAP, 
"dictionary::get", TraversalUtil.getBytecode(keyTraversal));
         internal.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), TraversalUtil.getBytecode(valueTraversal));
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
internal);
-        return (CoreTraversal) this;
+        return this.addInstruction(Symbols.FILTER, internal);
     }
 
     @Override
-    public CoreTraversal<C, S, E> identity() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
"traverser::object");
-        return this;
+    public Traversal<C, S, E> identity() {
+        return this.addInstruction(Symbols.MAP, "traverser::object");
     }
 
     @Override
-    public CoreTraversal<C, S, E> is(final E object) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), TraversalUtil.tryToGetBytecode(object));
-        return this;
+    public Traversal<C, S, E> is(final E object) {
+        return this.addInstruction(Symbols.FILTER, Pred.eq.name(), 
TraversalUtil.tryToGetBytecode(object));
     }
 
     @Override
-    public CoreTraversal<C, S, E> is(final Traversal<C, E, ?> objectTraversal) 
{
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
Pred.eq.name(), TraversalUtil.getBytecode(objectTraversal));
-        return this;
+    public Traversal<C, S, E> is(final Traversal<C, E, ?> objectTraversal) {
+        return this.addInstruction(Symbols.FILTER, Pred.eq.name(), 
TraversalUtil.getBytecode(objectTraversal));
     }
 
     @Override
-    public CoreTraversal<C, S, E> is(final P<E> predicate) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER, 
predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
-        return this;
+    public Traversal<C, S, E> is(final P<E> predicate) {
+        return this.addInstruction(Symbols.FILTER, predicate.type().name(), 
TraversalUtil.tryToGetBytecode(predicate.object()));
     }
 
     @Override
-    public CoreTraversal<C, S, Long> incr() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
"number::add", 1L);
-        return (CoreTraversal) this;
+    public Traversal<C, S, Long> incr() {
+        return this.addInstruction(Symbols.MAP, "number::add", 1L);
     }
 
-    public <K, V> CoreTraversal<C, S, Map<K, V>> join(final Symbols.Tokens 
joinType, final CoreTraversal<?, ?, Map<K, V>> joinTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.JOIN, 
joinType, joinTraversal.bytecode);
-        return (CoreTraversal) this;
+    public <K, V> Traversal<C, S, Map<K, V>> join(final Symbols.Tokens 
joinType, final CoreTraversal<?, ?, Map<K, V>> joinTraversal) {
+        return this.addInstruction(Symbols.JOIN, joinType, 
joinTraversal.bytecode);
     }
 
     @Override
-    public CoreTraversal<C, S, Integer> loops() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
"traverser:loops");
-        return (CoreTraversal) this;
+    public Traversal<C, S, Integer> loops() {
+        return this.addInstruction(Symbols.MAP, "traverser:loops");
     }
 
     @Override
-    public <R> CoreTraversal<C, S, R> map(final Traversal<C, E, R> 
mapTraversal) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
TraversalUtil.getBytecode(mapTraversal));
-        return (CoreTraversal) this;
+    public <R> Traversal<C, S, R> map(final Traversal<C, E, R> mapTraversal) {
+        return this.addInstruction(Symbols.MAP, 
TraversalUtil.getBytecode(mapTraversal));
     }
 
     @Override
-    public CoreTraversal<C, S, Path> path(final String... labels) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.PATH, 
Arrays.asList(labels));
-        return (CoreTraversal) this;
+    public Traversal<C, S, Path> path(final String... labels) {
+        return this.addInstruction(Symbols.PATH, Arrays.asList(labels));
     }
 
     @Override
-    public CoreTraversal<C, S, E> repeat(final Traversal<C, E, E> 
repeatTraversal) {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'r', TraversalUtil.getBytecode(repeatTraversal));
-        return this;
+    public Traversal<C, S, E> repeat(final Traversal<C, E, E> repeatTraversal) 
{
+        return TraversalUtil.insertRepeatInstruction(this, 'r', 
TraversalUtil.getBytecode(repeatTraversal));
     }
 
     @Override
-    public <R extends Number> CoreTraversal<C, S, R> sum() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.REDUCE, 
Oper.sum.name(), 0);
-        return (CoreTraversal) this;
+    public <R extends Number> Traversal<C, S, R> sum() {
+        return this.addInstruction(Symbols.REDUCE, Oper.sum.name(), 0);
     }
 
     @Override
-    public CoreTraversal<C, S, E> times(final int times) {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'u', times);
-        return this;
+    public Traversal<C, S, E> times(final int times) {
+        return TraversalUtil.insertRepeatInstruction(this, 'u', times);
     }
 
     @Override
-    public <R> CoreTraversal<C, S, R> unfold() {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.FLATMAP, 
"traverser::object");
-        return (CoreTraversal) this;
+    public <R> Traversal<C, S, R> unfold() {
+        return this.addInstruction(Symbols.FLATMAP, "traverser::object");
     }
 
     @Override
-    public <R> CoreTraversal<C, S, R> union(final Traversal<C, E, R>... 
traversals) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.BRANCH, 
TraversalUtil.createUnionArguments(traversals));
-        return (CoreTraversal) this;
+    public <R> Traversal<C, S, R> union(final Traversal<C, E, R>... 
traversals) {
+        return this.addInstruction(Symbols.BRANCH, 
TraversalUtil.createUnionArguments(traversals));
     }
 
     @Override
-    public CoreTraversal<C, S, E> until(final Traversal<C, ?, ?> 
untilTraversal) {
-        TraversalUtil.insertRepeatInstruction(this.bytecode, 
this.currentCoefficient, 'u', TraversalUtil.getBytecode(untilTraversal));
-        return this;
+    public Traversal<C, S, E> until(final Traversal<C, ?, ?> untilTraversal) {
+        return TraversalUtil.insertRepeatInstruction(this, 'u', 
TraversalUtil.getBytecode(untilTraversal));
     }
 
     @Override
-    public <K, V> CoreTraversal<C, S, V> value(final K key) {
-        this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP, 
"dictionary::get", key);
-        return (CoreTraversal) this;
+    public <K, V> Traversal<C, S, V> value(final K key) {
+        return this.addInstruction(Symbols.MAP, "dictionary::get", key);
     }
 }
diff --git 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java
 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java
index 8df1d5e..24a9af4 100644
--- 
a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java
+++ 
b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/core/__.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tinkerpop.language.gremlin.core;
 
+import org.apache.tinkerpop.language.gremlin.Traversal;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -27,39 +29,39 @@ public class __ {
         // static class
     }
 
-    private static <C, S> CoreTraversal<C, S, S> start() {
+    private static <C, S> Traversal<C, S, S> start() {
         return new CoreTraversal<>();
     }
 
-    public static <C, S> CoreTraversal<C, S, S> c(final C coefficient) {
+    public static <C, S> Traversal<C, S, S> c(final C coefficient) {
         return __.<C, S>start().c(coefficient);
     }
 
-    public static <C, S> CoreTraversal<C, ?, S> constant(final S constant) {
+    public static <C, S> Traversal<C, ?, S> constant(final S constant) {
         return __.<C, S>start().constant(constant);
     }
 
-    public static <C> CoreTraversal<C, Long, Long> incr() {
+    public static <C> Traversal<C, Long, Long> incr() {
         return __.<C, Long>start().incr();
     }
 
-    public static <C, S> CoreTraversal<C, S, S> is(final S object) {
-        return object instanceof CoreTraversal ? __.is((CoreTraversal<C, S, 
S>) object) : __.<C, S>start().is(object); // TODO: this is sucky. we don't 
want this
+    public static <C, S> Traversal<C, S, S> is(final S object) {
+        return __.<C, S>start().is(object);
     }
 
-    public static <C, S> CoreTraversal<C, S, S> is(final CoreTraversal<C, S, 
S> objectTraversal) {
+    public static <C, S> Traversal<C, S, S> is(final Traversal<C, S, S> 
objectTraversal) {
         return __.<C, S>start().is(objectTraversal);
     }
 
-    public static <C, S> CoreTraversal<C, S, Integer> loops() {
+    public static <C, S> Traversal<C, S, Integer> loops() {
         return __.<C, S>start().loops();
     }
 
-    public static <C, S extends Number> CoreTraversal<C, S, S> sum() {
+    public static <C, S extends Number> Traversal<C, S, S> sum() {
         return __.<C, S>start().sum();
     }
 
-    public static <C, S> CoreTraversal<C, S, Long> count() {
+    public static <C, S> Traversal<C, S, Long> count() {
         return __.<C, S>start().count();
     }
 }
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/ConstantArgument.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/LocalMachine.java
similarity index 68%
copy from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/ConstantArgument.java
copy to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/LocalMachine.java
index 5233912..760a248 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/ConstantArgument.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/LocalMachine.java
@@ -16,28 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine;
 
+import org.apache.tinkerpop.machine.bytecode.Bytecode;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
+import java.util.Iterator;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class ConstantArgument<E> implements Argument<E> {
-
-    private final E constant;
-
-    public ConstantArgument(final E constant) {
-        this.constant = constant;
-    }
-
-    @Override
-    public <C, S> E mapArg(final Traverser<C, S> traverser) {
-        return this.constant;
-    }
+public class LocalMachine implements Machine {
 
     @Override
-    public <C, S> boolean filterArg(final Traverser<C, S> traverser) {
-        return (Boolean) this.constant;
+    public <C, E> Iterator<Traverser<C, E>> submit(final Bytecode<C> bytecode) 
{
+        return Compilation.<C, Object, E>compile(bytecode).getProcessor();
     }
 }
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/FunctionType.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/Machine.java
similarity index 75%
copy from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/FunctionType.java
copy to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/Machine.java
index 49fc465..5ee511a 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/FunctionType.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/Machine.java
@@ -16,13 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine;
+
+import org.apache.tinkerpop.machine.bytecode.Bytecode;
+import org.apache.tinkerpop.machine.traverser.Traverser;
+
+import java.util.Iterator;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public enum FunctionType {
-
-    BARRIER, INITIAL, MAP, FLATMAP, FILTER, REDUCE, BRANCH
+public interface Machine {
 
+    public <C, S> Iterator<Traverser<C, S>> submit(final Bytecode<C> bytecode);
 }
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
index bfcb930..bcc1dab 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
@@ -48,7 +48,6 @@ public final class Bytecode<C> implements Cloneable { // 
todo: serializable?
 
     public void addInstruction(final Coefficient<C> coefficient, final String 
op, final Object... args) {
         this.instructions.add(new Instruction<>(coefficient, op, args));
-        coefficient.unity();
     }
 
     public List<Instruction<C>> getInstructions() {
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
index 64e2827..637e35d 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
@@ -18,8 +18,11 @@
  */
 package org.apache.tinkerpop.machine.bytecode;
 
+import org.apache.tinkerpop.machine.Machine;
+import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CompositeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.processor.ProcessorFactory;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 import org.apache.tinkerpop.machine.strategy.StrategyUtil;
@@ -40,7 +43,7 @@ import java.util.Set;
  */
 public final class BytecodeUtil {
 
-    static <C> void strategize(final Bytecode<C> bytecode) {
+    public static <C> void strategize(final Bytecode<C> bytecode) {
         for (final Strategy strategy : BytecodeUtil.getStrategies(bytecode)) {
             BytecodeUtil.strategize(bytecode, strategy);
         }
@@ -102,7 +105,7 @@ public final class BytecodeUtil {
             ProcessorFactory processor = null;
             for (final SourceInstruction sourceInstruction : 
bytecode.getSourceInstructions()) {
                 if (sourceInstruction.op().equals(Symbols.WITH_PROCESSOR)) {
-                    processor = (ProcessorFactory) ((Class<? extends 
Coefficient<C>>) sourceInstruction.args()[0]).getConstructor().newInstance();
+                    processor = ((Class<? extends ProcessorFactory>) 
sourceInstruction.args()[0]).getConstructor().newInstance();
                 }
             }
             return Optional.ofNullable(processor);
@@ -116,7 +119,7 @@ public final class BytecodeUtil {
             StructureFactory structure = null;
             for (final SourceInstruction sourceInstruction : 
bytecode.getSourceInstructions()) {
                 if (sourceInstruction.op().equals(Symbols.WITH_STRUCTURE)) {
-                    structure = (StructureFactory) ((Class<? extends 
Coefficient<C>>) sourceInstruction.args()[0]).getConstructor().newInstance();
+                    structure = ((Class<? extends StructureFactory>) 
sourceInstruction.args()[0]).getConstructor().newInstance();
                 }
             }
             return Optional.ofNullable(structure);
@@ -125,6 +128,20 @@ public final class BytecodeUtil {
         }
     }
 
+    public static <C> Optional<Machine> getMachine(final Bytecode<C> bytecode) 
{
+        try {
+            Machine machine = null;
+            for (final SourceInstruction sourceInstruction : 
bytecode.getSourceInstructions()) {
+                if (sourceInstruction.op().equals(Symbols.WITH_MACHINE)) {
+                    machine = ((Class<? extends Machine>) 
sourceInstruction.args()[0]).getConstructor().newInstance();
+                }
+            }
+            return Optional.ofNullable(machine);
+        } catch (NoSuchMethodException | IllegalAccessException | 
InstantiationException | InvocationTargetException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
     public static boolean hasSourceInstruction(final Bytecode<?> bytecode, 
final String op) {
         for (final SourceInstruction sourceInstruction : 
bytecode.getSourceInstructions()) {
             if (sourceInstruction.op().equals(op))
@@ -139,11 +156,7 @@ public final class BytecodeUtil {
         bytecode.getInstructions().add(index, newInstruction);
     }
 
-    public static <C> void removeSourceInstruction(final Bytecode<C> bytecode, 
final String op) {
-        bytecode.getSourceInstructions().removeIf(instruction -> 
instruction.op().equals(op));
-    }
-
-    static <C> Optional<TraverserFactory<C>> getTraverserFactory(final 
Bytecode<C> bytecode) {
+    public static <C> Optional<TraverserFactory<C>> getTraverserFactory(final 
Bytecode<C> bytecode) {
         // TODO: make this real
         for (final Instruction<C> instruction : bytecode.getInstructions()) {
             if (instruction.op().equals(Symbols.PATH))
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Argument.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Argument.java
similarity index 93%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Argument.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Argument.java
index bb756a3..495d9a2 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Argument.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Argument.java
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
+import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
 import java.io.Serializable;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeArgument.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeArgument.java
similarity index 93%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeArgument.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeArgument.java
index bc88673..1daae88 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeArgument.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeArgument.java
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
+import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
 /**
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeCompiler.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeCompiler.java
similarity index 89%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeCompiler.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeCompiler.java
index bd68642..50582bf 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeCompiler.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/BytecodeCompiler.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
+import org.apache.tinkerpop.machine.bytecode.Bytecode;
+import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.function.CFunction;
 
 import java.util.ArrayList;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/compiler/CommonCompiler.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CommonCompiler.java
similarity index 96%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/compiler/CommonCompiler.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CommonCompiler.java
index 53df574..7f2690f 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/compiler/CommonCompiler.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CommonCompiler.java
@@ -16,15 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.compiler;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.bytecode.FunctionType;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
-import org.apache.tinkerpop.machine.bytecode.Oper;
-import org.apache.tinkerpop.machine.bytecode.Pred;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.CFunction;
 import org.apache.tinkerpop.machine.function.barrier.JoinBarrier;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Compilation.java
similarity index 94%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Compilation.java
index 08c61b3..5c9ae05 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Compilation.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
+import org.apache.tinkerpop.machine.bytecode.Bytecode;
+import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
 import org.apache.tinkerpop.machine.function.CFunction;
 import org.apache.tinkerpop.machine.processor.FilterProcessor;
 import org.apache.tinkerpop.machine.processor.LoopsProcessor;
@@ -33,7 +35,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -132,14 +133,6 @@ public final class Compilation<C, S, E> implements 
Serializable {
         return new Compilation<>((Bytecode<C>) arg);
     }
 
-    public static <C, S, E> Optional<Compilation<C, S, E>> compileMaybe(final 
Object... args) {
-        for (final Object arg : args) {
-            if (arg instanceof Bytecode)
-                return Optional.of(new Compilation<>((Bytecode<C>) arg));
-        }
-        return Optional.empty();
-    }
-
     public static <C, S, E> Compilation<C, S, E> compileOrNull(final int 
index, final Object... args) {
         return args.length > index && args[index] instanceof Bytecode ?
                 new Compilation<>((Bytecode<C>) args[index]) :
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationCircle.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CompilationCircle.java
similarity index 96%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationCircle.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CompilationCircle.java
index f593430..59bf840 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationCircle.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CompilationCircle.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
 import java.io.Serializable;
 import java.util.List;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompositeCompiler.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CompositeCompiler.java
similarity index 93%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompositeCompiler.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CompositeCompiler.java
index dc0e27c..97e8a90 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompositeCompiler.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CompositeCompiler.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
+import org.apache.tinkerpop.machine.bytecode.Bytecode;
+import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.function.CFunction;
 
 import java.util.List;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/ConstantArgument.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/ConstantArgument.java
similarity index 96%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/ConstantArgument.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/ConstantArgument.java
index 5233912..ecc9b9d 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/ConstantArgument.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/ConstantArgument.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/compiler/CoreCompiler.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
similarity index 94%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/compiler/CoreCompiler.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
index aac5ba3..c0a727d 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/compiler/CoreCompiler.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
@@ -16,15 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.compiler;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.bytecode.FunctionType;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
-import org.apache.tinkerpop.machine.bytecode.Oper;
-import org.apache.tinkerpop.machine.bytecode.Pred;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.CFunction;
 import org.apache.tinkerpop.machine.function.barrier.JoinBarrier;
@@ -126,6 +120,7 @@ public final class CoreCompiler implements BytecodeCompiler 
{
 
         // SOURCE OPS
         public static final String WITH_COEFFICIENT = "withCoefficient";
+        public static final String WITH_MACHINE = "withMachine";
         public static final String WITH_PROCESSOR = "withProcessor";
         public static final String WITH_STRUCTURE = "withStructure";
         public static final String WITH_STRATEGY = "withStrategy";
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/FunctionType.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
similarity index 94%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/FunctionType.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
index 49fc465..d3580d6 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/FunctionType.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/FunctionType.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/MethodArgument.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
similarity index 97%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/MethodArgument.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
index fc76797..e940ad4 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/MethodArgument.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
 import org.apache.tinkerpop.machine.structure.data.TElement;
 import org.apache.tinkerpop.machine.traverser.Traverser;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Oper.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Oper.java
similarity index 95%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Oper.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Oper.java
index 7548723..108e710 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Oper.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Oper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
 import org.apache.tinkerpop.machine.util.NumberHelper;
 
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Pred.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Pred.java
similarity index 98%
rename from 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Pred.java
rename to 
java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Pred.java
index 5dcb848..fdb0528 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/Pred.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/Pred.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.bytecode.compiler;
 
 import org.apache.tinkerpop.machine.util.NumberHelper;
 
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
index f3b460d..ff57f74 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.function;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 
 import java.util.List;
 import java.util.Map;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/barrier/JoinBarrier.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/barrier/JoinBarrier.java
index ee2d9da..bba2fc1 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/barrier/JoinBarrier.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/barrier/JoinBarrier.java
@@ -18,9 +18,9 @@
  */
 package org.apache.tinkerpop.machine.function.barrier;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.BarrierFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/BranchBranch.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/BranchBranch.java
index 00d2acc..5af3f0b 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/BranchBranch.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/BranchBranch.java
@@ -18,8 +18,8 @@
  */
 package org.apache.tinkerpop.machine.function.branch;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.BranchFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/RepeatBranch.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/RepeatBranch.java
index 6a30b2c..6195ad9 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/RepeatBranch.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/branch/RepeatBranch.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.function.branch;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.util.StringFactory;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/FilterFilter.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/FilterFilter.java
index d93a420..652ec77 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/FilterFilter.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/FilterFilter.java
@@ -18,8 +18,8 @@
  */
 package org.apache.tinkerpop.machine.function.filter;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
-import org.apache.tinkerpop.machine.bytecode.Pred;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Pred;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.FilterFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyFilter.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyFilter.java
index 59c90da..8e41f3b 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyFilter.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyFilter.java
@@ -18,8 +18,8 @@
  */
 package org.apache.tinkerpop.machine.function.filter;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
-import org.apache.tinkerpop.machine.bytecode.Pred;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Pred;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.FilterFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyValueFilter.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyValueFilter.java
index 1a16f44..74b5cb0 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyValueFilter.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/HasKeyValueFilter.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.function.filter;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.FilterFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java
index 26995fe..097c375 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java
@@ -18,8 +18,8 @@
  */
 package org.apache.tinkerpop.machine.function.filter;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
-import org.apache.tinkerpop.machine.bytecode.Pred;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Pred;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.FilterFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/FlatMapFlatMap.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/FlatMapFlatMap.java
index 056d1a2..3caad80 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/FlatMapFlatMap.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/FlatMapFlatMap.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.function.flatmap;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.FlatMapFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/MapMap.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/MapMap.java
index 8ee8713..2e75c57 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/MapMap.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/MapMap.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.function.map;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.MapFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java
index 04172b1..a0ed4c1 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/PathMap.java
@@ -18,8 +18,8 @@
  */
 package org.apache.tinkerpop.machine.function.map;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.bytecode.CompilationCircle;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.CompilationCircle;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.MapFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/ValueMap.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/ValueMap.java
index c3d6a8d..352cdbf 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/ValueMap.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/ValueMap.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.function.map;
 
-import org.apache.tinkerpop.machine.bytecode.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.MapFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/reduce/GroupCountReduce.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/reduce/GroupCountReduce.java
index e97d834..044a410 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/reduce/GroupCountReduce.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/reduce/GroupCountReduce.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.function.reduce;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.ReduceFunction;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java
index 83aa364..ce2b5b1 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.processor;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
 /**
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/ProcessorFactory.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/ProcessorFactory.java
index 26a2f3f..6d75232 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/ProcessorFactory.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/ProcessorFactory.java
@@ -18,8 +18,8 @@
  */
 package org.apache.tinkerpop.machine.processor;
 
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
 import java.io.Serializable;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/SimpleProcessor.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/SimpleProcessor.java
index 3447972..1052891 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/SimpleProcessor.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/processor/SimpleProcessor.java
@@ -18,14 +18,10 @@
  */
 package org.apache.tinkerpop.machine.processor;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.strategy.Strategy;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.FastNoSuchElementException;
 
-import java.util.Collections;
-import java.util.Set;
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java
index 0926584..1f3ba68 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/decoration/ExplainStrategy.java
@@ -20,8 +20,8 @@ package org.apache.tinkerpop.machine.strategy.decoration;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/finalization/CoefficientStrategy.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/finalization/CoefficientStrategy.java
index 6e31096..f0d7dce 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/finalization/CoefficientStrategy.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/finalization/CoefficientStrategy.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.strategy.finalization;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.coefficient.LongCoefficient;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/optimization/IdentityStrategy.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/optimization/IdentityStrategy.java
index 45fddd0..1b87783 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/optimization/IdentityStrategy.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/optimization/IdentityStrategy.java
@@ -19,7 +19,7 @@
 package org.apache.tinkerpop.machine.strategy.optimization;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/verification/CoefficientVerificationStrategy.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/verification/CoefficientVerificationStrategy.java
index 6ed798a..b48f830 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/verification/CoefficientVerificationStrategy.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/strategy/verification/CoefficientVerificationStrategy.java
@@ -20,8 +20,8 @@ package org.apache.tinkerpop.machine.strategy.verification;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
-import org.apache.tinkerpop.machine.bytecode.CompositeCompiler;
-import org.apache.tinkerpop.machine.bytecode.FunctionType;
+import org.apache.tinkerpop.machine.bytecode.compiler.CompositeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.FunctionType;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
diff --git 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/StructureFactory.java
 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/StructureFactory.java
index 3101fb4..caf0796 100644
--- 
a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/StructureFactory.java
+++ 
b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/StructureFactory.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.structure;
 
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
 import java.io.Serializable;
diff --git 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/Beam.java
 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/Beam.java
index a5d4d1e..39cd859 100644
--- 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/Beam.java
+++ 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/Beam.java
@@ -23,7 +23,7 @@ import org.apache.beam.sdk.options.PipelineOptions;
 import org.apache.beam.sdk.transforms.Create;
 import org.apache.beam.sdk.transforms.ParDo;
 import org.apache.beam.sdk.values.PCollection;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.processor.Processor;
 import 
org.apache.tinkerpop.machine.processor.beam.serialization.TraverserCoder;
 import org.apache.tinkerpop.machine.processor.beam.util.ExecutionPlanner;
diff --git 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BeamProcessor.java
 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BeamProcessor.java
index abe5eeb..305b866 100644
--- 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BeamProcessor.java
+++ 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BeamProcessor.java
@@ -18,10 +18,10 @@
  */
 package org.apache.tinkerpop.machine.processor.beam;
 
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.compiler.CommonCompiler;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.processor.Processor;
 import org.apache.tinkerpop.machine.processor.ProcessorFactory;
 import org.apache.tinkerpop.machine.processor.beam.strategy.BeamStrategy;
diff --git 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BranchFn.java
 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BranchFn.java
index 57219e8..9bc0a9f 100644
--- 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BranchFn.java
+++ 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/BranchFn.java
@@ -19,7 +19,7 @@
 package org.apache.tinkerpop.machine.processor.beam;
 
 import org.apache.beam.sdk.values.TupleTag;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.function.BranchFunction;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
diff --git 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatEndFn.java
 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatEndFn.java
index 0f0d156..75f7d20 100644
--- 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatEndFn.java
+++ 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatEndFn.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.beam;
 
 import org.apache.beam.sdk.transforms.DoFn;
 import org.apache.beam.sdk.values.TupleTag;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.function.branch.RepeatBranch;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
diff --git 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatStartFn.java
 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatStartFn.java
index 30ac329..056bd28 100644
--- 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatStartFn.java
+++ 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/RepeatStartFn.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.beam;
 
 import org.apache.beam.sdk.transforms.DoFn;
 import org.apache.beam.sdk.values.TupleTag;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.function.branch.RepeatBranch;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 
diff --git 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/strategy/BeamStrategy.java
 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/strategy/BeamStrategy.java
index 1da44ac..24951dc 100644
--- 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/strategy/BeamStrategy.java
+++ 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/strategy/BeamStrategy.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.beam.strategy;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.processor.pipes.PipesProcessor;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
diff --git 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/util/TopologyUtil.java
 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/util/TopologyUtil.java
index c74c705..b1eba6b 100644
--- 
a/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/util/TopologyUtil.java
+++ 
b/java/machine/processor/beam/src/main/java/org/apache/tinkerpop/machine/processor/beam/util/TopologyUtil.java
@@ -26,7 +26,7 @@ import org.apache.beam.sdk.values.PCollectionList;
 import org.apache.beam.sdk.values.PCollectionTuple;
 import org.apache.beam.sdk.values.TupleTag;
 import org.apache.beam.sdk.values.TupleTagList;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.function.BranchFunction;
 import org.apache.tinkerpop.machine.function.CFunction;
 import org.apache.tinkerpop.machine.function.FilterFunction;
diff --git 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java
 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java
index 1a6b147..32ed3eb 100644
--- 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java
+++ 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.processor.pipes;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.function.BranchFunction;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.EmptyIterator;
diff --git 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java
 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java
index 24f62c0..9ef86e1 100644
--- 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java
+++ 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/Pipes.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.processor.pipes;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.function.BarrierFunction;
 import org.apache.tinkerpop.machine.function.BranchFunction;
 import org.apache.tinkerpop.machine.function.CFunction;
diff --git 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/PipesProcessor.java
 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/PipesProcessor.java
index 46a6bd3..7ceb8e0 100644
--- 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/PipesProcessor.java
+++ 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/PipesProcessor.java
@@ -18,10 +18,10 @@
  */
 package org.apache.tinkerpop.machine.processor.pipes;
 
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.compiler.CommonCompiler;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.processor.Processor;
 import org.apache.tinkerpop.machine.processor.ProcessorFactory;
 import org.apache.tinkerpop.machine.processor.pipes.strategy.PipesStrategy;
diff --git 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java
 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java
index 6bf6ada..f13261d 100644
--- 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java
+++ 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.processor.pipes;
 
-import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.function.branch.RepeatBranch;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.traverser.TraverserSet;
diff --git 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/strategy/PipesStrategy.java
 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/strategy/PipesStrategy.java
index 4bf0971..fc7252b 100644
--- 
a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/strategy/PipesStrategy.java
+++ 
b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/strategy/PipesStrategy.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.pipes.strategy;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.processor.pipes.PipesProcessor;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
diff --git 
a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/BlueprintsStructure.java
 
b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/BlueprintsStructure.java
index f27a3f8..2e4f2c9 100644
--- 
a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/BlueprintsStructure.java
+++ 
b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/BlueprintsStructure.java
@@ -18,11 +18,11 @@
  */
 package org.apache.tinkerpop.machine.structure.blueprints;
 
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 import org.apache.tinkerpop.machine.structure.Structure;
 import org.apache.tinkerpop.machine.structure.StructureFactory;
-import 
org.apache.tinkerpop.machine.structure.blueprints.compiler.BlueprintsCompiler;
+import 
org.apache.tinkerpop.machine.structure.blueprints.bytecode.compiler.BlueprintsCompiler;
 import 
org.apache.tinkerpop.machine.structure.blueprints.strategy.provider.BlueprintsVerticesStrategy;
 
 import java.util.Collections;
diff --git 
a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/compiler/BlueprintsCompiler.java
 
b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/bytecode/compiler/BlueprintsCompiler.java
similarity index 90%
rename from 
java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/compiler/BlueprintsCompiler.java
rename to 
java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/bytecode/compiler/BlueprintsCompiler.java
index cac4a86..3ca8478 100644
--- 
a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/compiler/BlueprintsCompiler.java
+++ 
b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/bytecode/compiler/BlueprintsCompiler.java
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.blueprints.compiler;
+package org.apache.tinkerpop.machine.structure.blueprints.bytecode.compiler;
 
-import org.apache.tinkerpop.machine.bytecode.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.FunctionType;
+import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.FunctionType;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.CFunction;
diff --git 
a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
 
b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
index e0b3e21..56a9b9c 100644
--- 
a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
+++ 
b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
@@ -20,11 +20,11 @@ package 
org.apache.tinkerpop.machine.structure.blueprints.strategy.provider;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
-import org.apache.tinkerpop.machine.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
-import 
org.apache.tinkerpop.machine.structure.blueprints.compiler.BlueprintsCompiler;
+import 
org.apache.tinkerpop.machine.structure.blueprints.bytecode.compiler.BlueprintsCompiler;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)

Reply via email to