You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2019/04/29 11:58:14 UTC

[tinkerpop] branch tp4 updated: Removed historic method-based traversal as we are not going to go in that direction. Added TTuple, TSequence, and TSymbol. Added JDBC support via TDatabase, TTable, TRow. We have a new reference implementation structure/jdbc. Added TraversalSource.db(). Removed TMap, TList, etc. as now everything is TTuple based. Fixed up the Structure API and BytecodeUtil to use it more intelligently. Lots of nicknack reorg and cleanups.

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 26c55ff  Removed historic method-based traversal as we are not going to go in that direction. Added TTuple, TSequence, and TSymbol. Added JDBC support via TDatabase, TTable, TRow. We have a new reference implementation structure/jdbc. Added TraversalSource.db(). Removed TMap, TList, etc. as now everything is TTuple based. Fixed up the Structure API and BytecodeUtil to use it more intelligently. Lots of nicknack reorg and cleanups.
26c55ff is described below

commit 26c55fff30debaf040a04a2994eed005cc36fbb8
Author: Marko A. Rodriguez <ok...@gmail.com>
AuthorDate: Mon Apr 29 05:58:00 2019 -0600

    Removed historic method-based traversal as we are not going to go in that direction. Added TTuple, TSequence, and TSymbol. Added JDBC support via TDatabase, TTable, TRow. We have a new reference implementation structure/jdbc. Added TraversalSource.db(). Removed TMap, TList, etc. as now everything is TTuple based. Fixed up the Structure API and BytecodeUtil to use it more intelligently. Lots of nicknack reorg and cleanups.
---
 .../tinkerpop/language/gremlin/Traversal.java      |  20 +-
 .../language/gremlin/TraversalSource.java          |  23 +-
 .../tinkerpop/language/gremlin/TraversalUtil.java  |   4 +-
 .../language/gremlin/common/CommonTraversal.java   | 255 ---------------------
 .../tinkerpop/language/gremlin/common/__.java      |  96 --------
 .../language/gremlin/core/CoreTraversal.java       |  96 +++-----
 .../apache/tinkerpop/language/gremlin/core/__.java |  29 +++
 .../tinkerpop/machine/bytecode/BytecodeUtil.java   |  19 +-
 .../machine/bytecode/compiler/CommonCompiler.java  | 207 -----------------
 .../machine/bytecode/compiler/CoreCompiler.java    |  82 ++++++-
 .../machine/bytecode/compiler/MethodArgument.java  |   6 +-
 .../machine/function/barrier/JoinBarrier.java      |   8 +-
 .../machine/function/branch/BranchBranch.java      |   2 +-
 .../machine/function/filter/HasKeyFilter.java      |  16 +-
 .../machine/function/filter/HasKeyValueFilter.java |  10 +-
 .../ValueMap.java => flatmap/ValuesFlatMap.java}   |  24 +-
 .../machine/function/initial/DbInitial.java}       |  35 ++-
 .../tinkerpop/machine/function/map/ValueMap.java   |   8 +-
 .../machine/function/reduce/GroupCountReduce.java  |  27 +--
 .../machine/processor/ProcessorFactory.java        |   8 -
 .../strategy/decoration/ExplainStrategy.java       |   2 +-
 .../strategy/finalization/CoefficientStrategy.java |   8 +-
 .../strategy/optimization/IdentityStrategy.java    |   4 +-
 .../machine/structure/EmptyStructure.java          |   2 +-
 .../machine/structure/StructureFactory.java        |  12 +-
 .../{data/TTuple2.java => TSequence.java}          |   8 +-
 .../structure/{data/TTuple2.java => TSymbol.java}  |   8 +-
 .../structure/{data/TMap.java => TTuple.java}      |  23 +-
 .../tinkerpop/machine/structure/data/JMap.java     |  91 --------
 .../{data/TTuple2.java => graph/IdSymbol.java}     |  11 +-
 .../{data/TTuple2.java => graph/LabelSymbol.java}  |  11 +-
 .../machine/structure/{data => graph}/TEdge.java   |  10 +-
 .../structure/{data => graph}/TElement.java        |   6 +-
 .../{data/TElement.java => graph/TGraph.java}      |  11 +-
 .../machine/structure/{data => graph}/TVertex.java |  12 +-
 .../{data/TElement.java => graph/TVertices.java}   |  10 +-
 .../{data/TElement.java => table/TDatabase.java}   |  10 +-
 .../{data/TElement.java => table/TRow.java}        |  10 +-
 .../{data/TElement.java => table/TTable.java}      |  10 +-
 .../tinkerpop/machine/structure/util/J2Tuple.java  |  72 ++++++
 .../tinkerpop/machine/structure/util/JTuple.java}  |  36 +--
 .../{data/JTuple2.java => util/T2Tuple.java}       |  24 +-
 .../machine/bytecode/compiler/CompilationTest.java |  12 +-
 .../machine/species/LocalMachineTest.java          |   8 +-
 .../apache/tinkerpop/machine/SimpleTestSuite.java  |  10 +-
 .../machine/processor/beam/BeamProcessor.java      |   9 +-
 .../machine/processor/beam/SimpleLocalTest.java    |   4 +-
 .../machine/processor/beam/SimpleRemoteTest.java   |   4 +-
 .../machine/processor/pipes/PipesProcessor.java    |   8 +-
 .../machine/processor/pipes/PipesTest.java         |   6 +-
 .../machine/processor/pipes/SimpleLocalTest.java   |   4 +-
 .../machine/processor/pipes/SimpleRemoteTest.java  |   4 +-
 .../machine/processor/rxjava/RxJavaProcessor.java  |   5 -
 .../processor/rxjava/strategy/RxJavaStrategy.java  |   8 +-
 .../machine/processor/rxjava/RxJavaBenchmark.java  |   3 +-
 .../processor/rxjava/SimpleLocalParallelTest.java  |   4 +-
 .../processor/rxjava/SimpleLocalSerialTest.java    |   4 +-
 .../processor/rxjava/SimpleRemoteParallelTest.java |   4 +-
 .../processor/rxjava/SimpleRemoteSerialTest.java   |   4 +-
 .../structure/blueprints/BlueprintsStructure.java  |   6 +-
 .../blueprints/data/BlueprintsVertex.java          |  30 +--
 .../function/initial/VerticesFlatMap.java          |   3 +-
 .../provider/BlueprintsVerticesStrategy.java       |   4 +-
 java/machine/structure/jdbc/pom.xml                |  72 ++++++
 .../machine/structure/jdbc/JDBCDatabase.java       |  76 ++++++
 .../tinkerpop/machine/structure/jdbc/JDBCRow.java  | 107 +++++++++
 .../machine/structure/jdbc/JDBCStructure.java}     |  23 +-
 .../machine/structure/jdbc/JDBCTable.java          |  70 ++++++
 .../structure/jdbc/strategy/JDBCStrategy.java}     |  24 +-
 .../tinkerpop/machine/structure/jdbc/JDBCTest.java |  65 ++++++
 java/machine/structure/pom.xml                     |   1 +
 71 files changed, 897 insertions(+), 1051 deletions(-)

diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java
index f0fa839..c281220 100644
--- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java
+++ b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java
@@ -19,7 +19,7 @@
 package org.apache.tinkerpop.language.gremlin;
 
 import org.apache.tinkerpop.machine.bytecode.compiler.Order;
-import org.apache.tinkerpop.machine.structure.data.TMap;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.traverser.path.Path;
 
@@ -63,21 +63,21 @@ public interface Traversal<C, S, E> extends Iterator<E> {
 
     public <R> Traversal<C, S, R> flatMap(final Traversal<C, E, R> flatMapTraversal);
 
-    public Traversal<C, S, TMap<E, Long>> groupCount();
+    public Traversal<C, S, TTuple<E, Long>> groupCount();
 
-    public <K, V> Traversal<C, S, TMap<K, V>> hasKey(final P<K> predicate);
+    public <K, V> Traversal<C, S, TTuple<K, V>> hasKey(final P<K> predicate);
 
-    public <K, V> Traversal<C, S, TMap<K, V>> hasKey(final K key);
+    public <K, V> Traversal<C, S, TTuple<K, V>> hasKey(final K key);
 
-    public <K, V> Traversal<C, S, TMap<K, V>> hasKey(final Traversal<C, TMap<K, V>, K> keyTraversal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> hasKey(final Traversal<C, TTuple<K, V>, K> keyTraversal);
 
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final K key, final V value);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final K key, final V value);
 
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final Traversal<C, TMap<K, V>, K> keyTraversal, final V value);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final Traversal<C, TTuple<K, V>, K> keyTraversal, final V value);
 
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final K key, final Traversal<C, TMap<K, V>, V> valueTraversal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final K key, final Traversal<C, TTuple<K, V>, V> valueTraversal);
 
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final Traversal<C, TMap<K, V>, K> keyTraversal, final Traversal<C, TMap<K, V>, V> valueTraversal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final Traversal<C, TTuple<K, V>, K> keyTraversal, final Traversal<C, TTuple<K, V>, V> valueTraversal);
 
     public Traversal<C, S, E> identity();
 
@@ -111,6 +111,8 @@ public interface Traversal<C, S, E> extends Iterator<E> {
 
     public <K, V> Traversal<C, S, V> value(final K key);
 
+    public <K, V> Traversal<C, S, V> values(final K key);
+
     /**
      * UTILITY METHODS
      */
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 eb17866..82f3ddc 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
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.language.gremlin;
 
-import org.apache.tinkerpop.language.gremlin.common.CommonTraversal;
+import org.apache.tinkerpop.language.gremlin.core.CoreTraversal;
 import org.apache.tinkerpop.machine.Machine;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
@@ -31,7 +31,8 @@ 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;
-import org.apache.tinkerpop.machine.structure.data.TVertex;
+import org.apache.tinkerpop.machine.structure.graph.TVertex;
+import org.apache.tinkerpop.machine.structure.table.TDatabase;
 
 import java.util.Map;
 
@@ -78,6 +79,12 @@ public class TraversalSource<C> implements Cloneable {
         return clone;
     }
 
+    public TraversalSource<C> withStructure(final Class<? extends StructureFactory> structure, final Map<String, Object> configuration) {
+        final TraversalSource<C> clone = this.clone();
+        clone.bytecode.addSourceInstruction(Symbols.WITH_STRUCTURE, structure, configuration);
+        return clone;
+    }
+
     public TraversalSource<C> withStrategy(final Class<? extends Strategy> strategy) {
         final TraversalSource<C> clone = this.clone();
         clone.bytecode.addSourceInstruction(Symbols.WITH_STRATEGY, strategy);
@@ -91,7 +98,7 @@ 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<>(this.machine, bytecode, coefficient); // TODO
+        return new CoreTraversal<>(this.machine, bytecode, coefficient); // TODO
     }
 
     public Traversal<C, TVertex, TVertex> V() {
@@ -99,7 +106,15 @@ public class TraversalSource<C> implements Cloneable {
         final Bytecode<C> bytecode = this.bytecode.clone();
         final Coefficient<C> coefficient = this.coefficient.clone();
         bytecode.addInstruction(coefficient, Symbols.V);
-        return new CommonTraversal<>(this.machine, bytecode, coefficient); // TODO
+        return new CoreTraversal<>(this.machine, bytecode, coefficient); // TODO
+    }
+
+    public Traversal<C, TDatabase, TDatabase> db() {
+        this.prepareSourceCode();
+        final Bytecode<C> bytecode = this.bytecode.clone();
+        final Coefficient<C> coefficient = this.coefficient.clone();
+        bytecode.addInstruction(coefficient, Symbols.DB);
+        return new CoreTraversal<>(this.machine, 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 3587e4c..25157fd 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
@@ -19,8 +19,6 @@
 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.bytecode.compiler.CommonCompiler;
 import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 
 /**
@@ -55,7 +53,7 @@ public final class TraversalUtil {
     public static <C, S, E> Object[] createUnionArguments(final Traversal<C, S, E>... traversals) {
         final Object[] args = new Object[traversals.length * 2];
         for (int i = 0; i < args.length; i = i + 2) {
-            args[i] = CommonCompiler.Symbols.DEFAULT;
+            args[i] = Symbols.DEFAULT;
         }
         for (int i = 0; i < traversals.length; i++) {
             args[(i * 2) + 1] = TraversalUtil.getBytecode(traversals[i]);
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
deleted file mode 100644
index 95aeb51..0000000
--- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/CommonTraversal.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.language.gremlin.common;
-
-import org.apache.tinkerpop.language.gremlin.AbstractTraversal;
-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.Machine;
-import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler.Symbols;
-import org.apache.tinkerpop.machine.bytecode.compiler.Order;
-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.structure.data.TMap;
-import org.apache.tinkerpop.machine.traverser.path.Path;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class CommonTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
-
-    // used by __
-    CommonTraversal() {
-        // TODO: this will cause __ problems
-        this(null, new Bytecode<>(), (Coefficient<C>) LongCoefficient.create());
-    }
-
-    // used by TraversalSource
-    public CommonTraversal(final Machine machine, final Bytecode<C> bytecode, final Coefficient<C> unity) {
-        super(machine, bytecode, unity);
-    }
-
-    @Override
-    public Traversal<C, S, E> as(final String label) {
-        this.bytecode.lastInstruction().setLabel(label);
-        return this;
-    }
-
-    @Override
-    public Traversal<C, S, E> barrier() {
-        return this.addInstruction(Symbols.BARRIER);
-    }
-
-    @Override
-    public Traversal<C, S, E> by(final String byString) {
-        this.bytecode.addArgs(byString);
-        return this;
-    }
-
-    @Override
-    public Traversal<C, S, E> by(final Traversal<C, ?, ?> byTraversal) {
-        this.bytecode.addArgs(TraversalUtil.getBytecode(byTraversal));
-        return this;
-    }
-
-    @Override
-    public Traversal<C, S, E> by(final Order order) {
-        return this.by(__.identity(), order);
-    }
-
-    @Override
-    public Traversal<C, S, E> by(final Traversal<C, ?, ?> byTraversal, final Order order) {
-        this.bytecode.addArgs(TraversalUtil.getBytecode(byTraversal), order.name());
-        return this;
-    }
-
-    @Override
-    public Traversal<C, S, E> c(final C coefficient) {
-        this.currentCoefficient.set(coefficient);
-        return this;
-    }
-
-    @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) {
-        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) {
-        return this.addInstruction(Symbols.BRANCH, TraversalUtil.getBytecode(predicate), TraversalUtil.getBytecode(trueTraversal));
-    }
-
-    @Override
-    public <R> Traversal<C, S, R> constant(final R constant) {
-        return this.addInstruction(Symbols.CONSTANT, constant);
-    }
-
-    @Override
-    public Traversal<C, S, Long> count() {
-        return this.addInstruction(Symbols.COUNT);
-    }
-
-    @Override
-    public Traversal<C, S, E> emit() {
-        return TraversalUtil.insertRepeatInstruction(this, 'e', true);
-    }
-
-    @Override
-    public Traversal<C, S, E> emit(final Traversal<C, ?, ?> emitTraversal) {
-        return TraversalUtil.insertRepeatInstruction(this, 'e', TraversalUtil.getBytecode(emitTraversal));
-    }
-
-    @Override
-    public Traversal<C, S, String> explain() {
-        return this.addInstruction(Symbols.EXPLAIN);
-    }
-
-    @Override
-    public Traversal<C, S, E> filter(final Traversal<C, E, ?> filterTraversal) {
-        return this.addInstruction(Symbols.FILTER, TraversalUtil.getBytecode(filterTraversal));
-    }
-
-    @Override
-    public <R> Traversal<C, S, R> flatMap(final Traversal<C, E, R> flatMapTraversal) {
-        return this.addInstruction(Symbols.FLATMAP, TraversalUtil.getBytecode(flatMapTraversal));
-    }
-
-    @Override
-    public Traversal<C, S, TMap<E, Long>> groupCount() {
-        return this.addInstruction(Symbols.GROUP_COUNT);
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final K key, final V value) {
-        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.tryToGetBytecode(key), TraversalUtil.tryToGetBytecode(value));
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final Traversal<C, TMap<K, V>, K> keyTraversal, final V value) {
-        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.getBytecode(keyTraversal), TraversalUtil.tryToGetBytecode(value));
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final K key, final Traversal<C, TMap<K, V>, V> valueTraversal) {
-        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.tryToGetBytecode(key), TraversalUtil.getBytecode(valueTraversal));
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final Traversal<C, TMap<K, V>, K> keyTraversal, final Traversal<C, TMap<K, V>, V> valueTraversal) {
-        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.getBytecode(keyTraversal), TraversalUtil.getBytecode(valueTraversal));
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> hasKey(final P<K> predicate) {
-        return this.addInstruction(Symbols.HAS_KEY, predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> hasKey(final K key) {
-        return this.addInstruction(Symbols.HAS_KEY, TraversalUtil.tryToGetBytecode(key));
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> hasKey(final Traversal<C, TMap<K, V>, K> keyTraversal) {
-        return this.addInstruction(Symbols.HAS_KEY, TraversalUtil.getBytecode(keyTraversal));
-    }
-
-    @Override
-    public Traversal<C, S, E> identity() {
-        return this.addInstruction(Symbols.IDENTITY);
-    }
-
-    @Override
-    public Traversal<C, S, E> is(final E object) {
-        return this.addInstruction(Symbols.IS, Pred.eq.name(), TraversalUtil.tryToGetBytecode(object));
-    }
-
-    @Override
-    public Traversal<C, S, E> is(final Traversal<C, E, ?> objectTraversal) {
-        return this.addInstruction(Symbols.IS, Pred.eq.name(), TraversalUtil.getBytecode(objectTraversal));
-    }
-
-    @Override
-    public Traversal<C, S, E> is(final P<E> predicate) {
-        return this.addInstruction(Symbols.IS, predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
-    }
-
-    @Override
-    public Traversal<C, S, Long> incr() {
-        return this.addInstruction(Symbols.INCR);
-    }
-
-    @Override
-    public Traversal<C, S, Integer> loops() {
-        return this.addInstruction(Symbols.LOOPS);
-    }
-
-    @Override
-    public <R> Traversal<C, S, R> map(final Traversal<C, E, R> mapTraversal) {
-        return this.addInstruction(Symbols.MAP, TraversalUtil.getBytecode(mapTraversal));
-    }
-
-    @Override
-    public Traversal<C, S, E> order() {
-        return this.addInstruction(Symbols.ORDER);
-    }
-
-    @Override
-    public Traversal<C, S, Path> path(final String... labels) {
-        return this.addInstruction(Symbols.PATH, TraversalUtil.addObjects(labels, "|"));
-    }
-
-    @Override
-    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> Traversal<C, S, R> sum() {
-        return this.addInstruction(Symbols.SUM);
-    }
-
-    @Override
-    public Traversal<C, S, E> times(final int times) {
-        return TraversalUtil.insertRepeatInstruction(this, 'u', times);
-    }
-
-    @Override
-    public <R> Traversal<C, S, R> unfold() {
-        return this.addInstruction(Symbols.UNFOLD);
-    }
-
-    @Override
-    public <R> Traversal<C, S, R> union(final Traversal<C, E, R>... traversals) {
-        return this.addInstruction(Symbols.BRANCH, TraversalUtil.createUnionArguments(traversals));
-    }
-
-    @Override
-    public Traversal<C, S, E> until(final Traversal<C, ?, ?> untilTraversal) {
-        return TraversalUtil.insertRepeatInstruction(this, 'u', TraversalUtil.getBytecode(untilTraversal));
-    }
-
-    @Override
-    public <K, V> Traversal<C, S, V> value(final K key) {
-        return this.addInstruction(Symbols.VALUE, key);
-    }
-}
diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/__.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/__.java
deleted file mode 100644
index 0bd98df..0000000
--- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/common/__.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.language.gremlin.common;
-
-import org.apache.tinkerpop.language.gremlin.P;
-import org.apache.tinkerpop.language.gremlin.Traversal;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class __ {
-
-    private __() {
-        // static class
-    }
-
-    private static <C, S> Traversal<C, S, S> start() {
-        return new CommonTraversal<>();
-    }
-
-    public static <C, S> Traversal<C, S, S> c(final C coefficient) {
-        return __.<C, S>start().c(coefficient);
-    }
-
-    public static <C, S, E> Traversal<C, S, E> choose(final Traversal<C, S, ?> predicate, final Traversal<C, S, E> trueTraversal, final Traversal<C, S, E> falseTraversal) {
-        return __.<C, S>start().choose(predicate, trueTraversal, falseTraversal);
-    }
-
-    public static <C, S, E> Traversal<C, S, E> choose(final Traversal<C, S, ?> predicate, final Traversal<C, S, E> trueTraversal) {
-        return __.<C, S>start().choose(predicate, trueTraversal);
-    }
-
-    public static <C, S> Traversal<C, ?, S> constant(final S constant) {
-        return __.<C, S>start().constant(constant);
-    }
-
-    public static <C, S, E> Traversal<C, S, E> flatMap(final Traversal<C, S, E> traversal) {
-        return __.<C, S>start().flatMap(traversal);
-    }
-
-    public static <C, S> Traversal<C, S, S> identity() {
-        return __.<C, S>start().identity();
-    }
-
-    public static <C> Traversal<C, Long, Long> incr() {
-        return __.<C, Long>start().incr();
-    }
-
-    public static <C, S> Traversal<C, S, S> is(final S object) {
-        return __.<C, S>start().is(object);
-    }
-
-    public static <C, S> Traversal<C, S, S> is(final P<S> predicate) {
-        return __.<C, S>start().is(predicate);
-    }
-
-    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> Traversal<C, S, Integer> loops() {
-        return __.<C, S>start().loops();
-    }
-
-    public static <C, S, E> Traversal<C, S, E> map(final Traversal<C, S, E> traversal) {
-        return __.<C, S>start().map(traversal);
-    }
-
-    public static <C, S extends Number> Traversal<C, S, S> sum() {
-        return __.<C, S>start().sum();
-    }
-
-    public static <C, S> Traversal<C, S, Long> count() {
-        return __.<C, S>start().count();
-    }
-
-    public static <C, S, E> Traversal<C, S, E> union(final Traversal<C, S, E>... traversals) {
-        return __.<C, S>start().union(traversals);
-    }
-}
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 1b7d9e1..111613c 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
@@ -22,21 +22,16 @@ import org.apache.tinkerpop.language.gremlin.AbstractTraversal;
 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.language.gremlin.common.__;
 import org.apache.tinkerpop.machine.Machine;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
 import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
-import org.apache.tinkerpop.machine.bytecode.compiler.Oper;
 import org.apache.tinkerpop.machine.bytecode.compiler.Order;
 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.structure.data.TMap;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.path.Path;
 
-import java.util.Map;
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -83,7 +78,7 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
 
     @Override
     public Traversal<C, S, E> by(final Traversal<C, ?, ?> byTraversal, final Order order) {
-        this.bytecode.addArgs(TraversalUtil.getBytecode(byTraversal), order);
+        this.bytecode.addArgs(TraversalUtil.getBytecode(byTraversal), order.name());
         return this;
     }
 
@@ -105,13 +100,12 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
 
     @Override
     public <R> Traversal<C, S, R> constant(final R constant) {
-        return this.addInstruction(Symbols.MAP, constant);
+        return this.addInstruction(Symbols.CONSTANT, constant);
     }
 
     @Override
     public Traversal<C, S, Long> count() {
-        this.addInstruction(Symbols.MAP, "traverser::count");
-        return this.addInstruction(Symbols.REDUCE, Oper.sum.name(), 0L);
+        return this.addInstruction(Symbols.COUNT);
     }
 
     @Override
@@ -136,102 +130,77 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
 
     @Override
     public <R> Traversal<C, S, R> flatMap(final Traversal<C, E, R> flatMapTraversal) {
-        return this.addInstruction(CommonCompiler.Symbols.FLATMAP, TraversalUtil.getBytecode(flatMapTraversal));
+        return this.addInstruction(Symbols.FLATMAP, TraversalUtil.getBytecode(flatMapTraversal));
     }
 
     @Override
-    public Traversal<C, S, TMap<E, Long>> groupCount() {
+    public Traversal<C, S, TTuple<E, Long>> groupCount() {
         return this.addInstruction(Symbols.GROUP_COUNT);
     }
 
     @Override
-    public <K, V> Traversal<C, S, TMap<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()));
-        return this.addInstruction(Symbols.FILTER, internal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final K key, final V value) {
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.tryToGetBytecode(key), TraversalUtil.tryToGetBytecode(value));
     }
 
     @Override
-    public <K, V> Traversal<C, S, TMap<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);
-        return this.addInstruction(Symbols.FILTER, internal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final Traversal<C, TTuple<K, V>, K> keyTraversal, final V value) {
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.getBytecode(keyTraversal), TraversalUtil.tryToGetBytecode(value));
     }
 
     @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> hasKey(final Traversal<C, TMap<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));
-        return this.addInstruction(Symbols.FILTER, internal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final K key, final Traversal<C, TTuple<K, V>, V> valueTraversal) {
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.tryToGetBytecode(key), TraversalUtil.getBytecode(valueTraversal));
     }
 
     @Override
-    public <K, V> Traversal<C, S, TMap<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);
-        return this.addInstruction(Symbols.FILTER, internal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> has(final Traversal<C, TTuple<K, V>, K> keyTraversal, final Traversal<C, TTuple<K, V>, V> valueTraversal) {
+        return this.addInstruction(Symbols.HAS_KEY_VALUE, TraversalUtil.getBytecode(keyTraversal), TraversalUtil.getBytecode(valueTraversal));
     }
 
     @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final Traversal<C, TMap<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);
-        return this.addInstruction(Symbols.FILTER, internal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> hasKey(final P<K> predicate) {
+        return this.addInstruction(Symbols.HAS_KEY, predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
     }
 
     @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final K key, final Traversal<C, TMap<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));
-        return this.addInstruction(Symbols.FILTER, internal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> hasKey(final K key) {
+        return this.addInstruction(Symbols.HAS_KEY, TraversalUtil.tryToGetBytecode(key));
     }
 
     @Override
-    public <K, V> Traversal<C, S, TMap<K, V>> has(final Traversal<C, TMap<K, V>, K> keyTraversal, final Traversal<C, TMap<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));
-        return this.addInstruction(Symbols.FILTER, internal);
+    public <K, V> Traversal<C, S, TTuple<K, V>> hasKey(final Traversal<C, TTuple<K, V>, K> keyTraversal) {
+        return this.addInstruction(Symbols.HAS_KEY, TraversalUtil.getBytecode(keyTraversal));
     }
 
     @Override
     public Traversal<C, S, E> identity() {
-        return this.addInstruction(Symbols.MAP, "traverser::object");
+        return this.addInstruction(Symbols.IDENTITY);
     }
 
     @Override
     public Traversal<C, S, E> is(final E object) {
-        return this.addInstruction(Symbols.FILTER, Pred.eq.name(), TraversalUtil.tryToGetBytecode(object));
+        return this.addInstruction(Symbols.IS, Pred.eq.name(), TraversalUtil.tryToGetBytecode(object));
     }
 
     @Override
     public Traversal<C, S, E> is(final Traversal<C, E, ?> objectTraversal) {
-        return this.addInstruction(Symbols.FILTER, Pred.eq.name(), TraversalUtil.getBytecode(objectTraversal));
+        return this.addInstruction(Symbols.IS, Pred.eq.name(), TraversalUtil.getBytecode(objectTraversal));
     }
 
     @Override
     public Traversal<C, S, E> is(final P<E> predicate) {
-        return this.addInstruction(Symbols.FILTER, predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
+        return this.addInstruction(Symbols.IS, predicate.type().name(), TraversalUtil.tryToGetBytecode(predicate.object()));
     }
 
     @Override
     public Traversal<C, S, Long> incr() {
-        return this.addInstruction(Symbols.MAP, "number::add", 1L);
-    }
-
-    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);
+        return this.addInstruction(Symbols.INCR);
     }
 
     @Override
     public Traversal<C, S, Integer> loops() {
-        return this.addInstruction(Symbols.MAP, "traverser:loops");
+        return this.addInstruction(Symbols.LOOPS);
     }
 
     @Override
@@ -241,7 +210,7 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
 
     @Override
     public Traversal<C, S, E> order() {
-        throw new IllegalStateException("Unimplemented");
+        return this.addInstruction(Symbols.ORDER);
     }
 
     @Override
@@ -256,7 +225,7 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
 
     @Override
     public <R extends Number> Traversal<C, S, R> sum() {
-        return this.addInstruction(Symbols.REDUCE, Oper.sum.name(), 0);
+        return this.addInstruction(Symbols.SUM);
     }
 
     @Override
@@ -266,7 +235,7 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
 
     @Override
     public <R> Traversal<C, S, R> unfold() {
-        return this.addInstruction(Symbols.FLATMAP, "traverser::object");
+        return this.addInstruction(Symbols.UNFOLD);
     }
 
     @Override
@@ -281,6 +250,11 @@ public class CoreTraversal<C, S, E> extends AbstractTraversal<C, S, E> {
 
     @Override
     public <K, V> Traversal<C, S, V> value(final K key) {
-        return this.addInstruction(Symbols.MAP, "dictionary::get", key);
+        return this.addInstruction(Symbols.VALUE, key);
+    }
+
+    @Override
+    public <K, V> Traversal<C, S, V> values(final K key) {
+        return this.addInstruction(Symbols.VALUES, 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 24a9af4..72f13a1 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,7 @@
  */
 package org.apache.tinkerpop.language.gremlin.core;
 
+import org.apache.tinkerpop.language.gremlin.P;
 import org.apache.tinkerpop.language.gremlin.Traversal;
 
 /**
@@ -37,10 +38,26 @@ public class __ {
         return __.<C, S>start().c(coefficient);
     }
 
+    public static <C, S, E> Traversal<C, S, E> choose(final Traversal<C, S, ?> predicate, final Traversal<C, S, E> trueTraversal, final Traversal<C, S, E> falseTraversal) {
+        return __.<C, S>start().choose(predicate, trueTraversal, falseTraversal);
+    }
+
+    public static <C, S, E> Traversal<C, S, E> choose(final Traversal<C, S, ?> predicate, final Traversal<C, S, E> trueTraversal) {
+        return __.<C, S>start().choose(predicate, trueTraversal);
+    }
+
     public static <C, S> Traversal<C, ?, S> constant(final S constant) {
         return __.<C, S>start().constant(constant);
     }
 
+    public static <C, S, E> Traversal<C, S, E> flatMap(final Traversal<C, S, E> traversal) {
+        return __.<C, S>start().flatMap(traversal);
+    }
+
+    public static <C, S> Traversal<C, S, S> identity() {
+        return __.<C, S>start().identity();
+    }
+
     public static <C> Traversal<C, Long, Long> incr() {
         return __.<C, Long>start().incr();
     }
@@ -49,6 +66,10 @@ public class __ {
         return __.<C, S>start().is(object);
     }
 
+    public static <C, S> Traversal<C, S, S> is(final P<S> predicate) {
+        return __.<C, S>start().is(predicate);
+    }
+
     public static <C, S> Traversal<C, S, S> is(final Traversal<C, S, S> objectTraversal) {
         return __.<C, S>start().is(objectTraversal);
     }
@@ -57,6 +78,10 @@ public class __ {
         return __.<C, S>start().loops();
     }
 
+    public static <C, S, E> Traversal<C, S, E> map(final Traversal<C, S, E> traversal) {
+        return __.<C, S>start().map(traversal);
+    }
+
     public static <C, S extends Number> Traversal<C, S, S> sum() {
         return __.<C, S>start().sum();
     }
@@ -64,4 +89,8 @@ public class __ {
     public static <C, S> Traversal<C, S, Long> count() {
         return __.<C, S>start().count();
     }
+
+    public static <C, S, E> Traversal<C, S, E> union(final Traversal<C, S, E>... traversals) {
+        return __.<C, S>start().union(traversals);
+    }
 }
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 1e2ab57..c4ea488 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
@@ -19,7 +19,6 @@
 package org.apache.tinkerpop.machine.bytecode;
 
 import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
 import org.apache.tinkerpop.machine.bytecode.compiler.CompositeCompiler;
 import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
@@ -71,12 +70,10 @@ public final class BytecodeUtil {
             for (final SourceInstruction sourceInstruction : bytecode.getSourceInstructions()) {
                 if (sourceInstruction.op().equals(Symbols.WITH_STRATEGY)) {
                     strategies.add(((Class<? extends Strategy>) sourceInstruction.args()[0]).getConstructor().newInstance());
-                } else if (sourceInstruction.op().equals(Symbols.WITH_PROCESSOR)) {
-                    strategies.addAll(ProcessorFactory.processorStrategies(((Class<? extends ProcessorFactory>) sourceInstruction.args()[0])));
-                } else if (sourceInstruction.op().equals(Symbols.WITH_STRUCTURE)) {
-                    strategies.addAll(StructureFactory.structureStrategies(((Class<? extends StructureFactory>) sourceInstruction.args()[0])));
                 }
             }
+            BytecodeUtil.getStructureFactory(bytecode).ifPresent(s -> strategies.addAll(s.getStrategies()));
+            BytecodeUtil.getProcessorFactory(bytecode).ifPresent(s -> strategies.addAll(s.getStrategies()));
             return StrategyUtil.sortStrategies(strategies);
 
         } catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
@@ -88,7 +85,7 @@ public final class BytecodeUtil {
         final List<BytecodeCompiler> compilers = new ArrayList<>();
         BytecodeUtil.getProcessorFactory(bytecode).ifPresent(f -> compilers.addAll(f.getCompilers()));
         BytecodeUtil.getStructureFactory(bytecode).ifPresent(f -> compilers.addAll(f.getCompilers()));
-        return CompositeCompiler.create(compilers.isEmpty() ? List.of(CoreCompiler.instance(), CommonCompiler.instance()) : compilers);
+        return CompositeCompiler.create(compilers.isEmpty() ? List.of(CoreCompiler.instance()) : compilers);
     }
 
     public static <C> Optional<Coefficient<C>> getCoefficient(final Bytecode<C> bytecode) {
@@ -111,9 +108,9 @@ public final class BytecodeUtil {
             ProcessorFactory processor = null;
             for (final SourceInstruction sourceInstruction : bytecode.getSourceInstructions()) {
                 if (sourceInstruction.op().equals(Symbols.WITH_PROCESSOR)) {
-                    processor = 1 == sourceInstruction.args().length ?
-                            ((Class<? extends ProcessorFactory>) sourceInstruction.args()[0]).getConstructor().newInstance() :
-                            ((Class<? extends ProcessorFactory>) sourceInstruction.args()[0]).getConstructor(Map.class).newInstance((Map) sourceInstruction.args()[1]);
+                    processor = ((Class<? extends ProcessorFactory>) sourceInstruction.args()[0]).
+                            getConstructor(Map.class).
+                            newInstance(1 == sourceInstruction.args().length ? Map.of() : (Map) sourceInstruction.args()[1]);
                 }
             }
             return Optional.ofNullable(processor);
@@ -127,7 +124,9 @@ public final class BytecodeUtil {
             StructureFactory structure = null;
             for (final SourceInstruction sourceInstruction : bytecode.getSourceInstructions()) {
                 if (sourceInstruction.op().equals(Symbols.WITH_STRUCTURE)) {
-                    structure = ((Class<? extends StructureFactory>) sourceInstruction.args()[0]).getConstructor().newInstance();
+                    structure = ((Class<? extends StructureFactory>) sourceInstruction.args()[0]).
+                            getConstructor(Map.class).
+                            newInstance(1 == sourceInstruction.args().length ? Map.of() : (Map) sourceInstruction.args()[1]);
                 }
             }
             return Optional.ofNullable(structure);
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CommonCompiler.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CommonCompiler.java
deleted file mode 100644
index bf86873..0000000
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CommonCompiler.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.machine.bytecode.compiler;
-
-import org.apache.tinkerpop.machine.bytecode.Instruction;
-import org.apache.tinkerpop.machine.function.CFunction;
-import org.apache.tinkerpop.machine.function.barrier.JoinBarrier;
-import org.apache.tinkerpop.machine.function.barrier.OrderBarrier;
-import org.apache.tinkerpop.machine.function.barrier.StallBarrier;
-import org.apache.tinkerpop.machine.function.branch.BranchBranch;
-import org.apache.tinkerpop.machine.function.branch.RepeatBranch;
-import org.apache.tinkerpop.machine.function.filter.FilterFilter;
-import org.apache.tinkerpop.machine.function.filter.HasKeyFilter;
-import org.apache.tinkerpop.machine.function.filter.HasKeyValueFilter;
-import org.apache.tinkerpop.machine.function.filter.IdentityFilter;
-import org.apache.tinkerpop.machine.function.filter.IsFilter;
-import org.apache.tinkerpop.machine.function.flatmap.FlatMapFlatMap;
-import org.apache.tinkerpop.machine.function.flatmap.UnfoldFlatMap;
-import org.apache.tinkerpop.machine.function.initial.InitialInitial;
-import org.apache.tinkerpop.machine.function.map.ConstantMap;
-import org.apache.tinkerpop.machine.function.map.IncrMap;
-import org.apache.tinkerpop.machine.function.map.LoopsMap;
-import org.apache.tinkerpop.machine.function.map.MapMap;
-import org.apache.tinkerpop.machine.function.map.PathMap;
-import org.apache.tinkerpop.machine.function.map.ValueMap;
-import org.apache.tinkerpop.machine.function.reduce.CountReduce;
-import org.apache.tinkerpop.machine.function.reduce.GroupCountReduce;
-import org.apache.tinkerpop.machine.function.reduce.ReduceReduce;
-import org.apache.tinkerpop.machine.function.reduce.SumReduce;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class CommonCompiler implements BytecodeCompiler {
-
-    private static final CommonCompiler INSTANCE = new CommonCompiler();
-
-    private CommonCompiler() {
-        // static instance
-    }
-
-    public static CommonCompiler instance() {
-        return INSTANCE;
-    }
-
-    private static final Map<String, FunctionType> OP_TYPES = new HashMap<>() {{
-        put(Symbols.BARRIER, FunctionType.BARRIER);
-        put(Symbols.BRANCH, FunctionType.BRANCH);
-        put(Symbols.CONSTANT, FunctionType.MAP);
-        put(Symbols.COUNT, FunctionType.REDUCE);
-        put(Symbols.FILTER, FunctionType.FILTER);
-        put(Symbols.FLATMAP, FunctionType.FLATMAP);
-        put(Symbols.GROUP_COUNT, FunctionType.REDUCE);
-        put(Symbols.HAS_KEY, FunctionType.FILTER);
-        put(Symbols.HAS_KEY_VALUE, FunctionType.FILTER);
-        put(Symbols.IDENTITY, FunctionType.FILTER);
-        put(Symbols.INCR, FunctionType.MAP);
-        put(Symbols.INITIAL, FunctionType.INITIAL);
-        put(Symbols.IS, FunctionType.FILTER);
-        put(Symbols.JOIN, FunctionType.BARRIER);
-        put(Symbols.LOOPS, FunctionType.MAP);
-        put(Symbols.MAP, FunctionType.MAP);
-        put(Symbols.ORDER, FunctionType.BARRIER);
-        put(Symbols.PATH, FunctionType.MAP);
-        put(Symbols.REDUCE, FunctionType.REDUCE);
-        put(Symbols.REPEAT, FunctionType.BRANCH);
-        put(Symbols.SUM, FunctionType.REDUCE);
-        put(Symbols.UNFOLD, FunctionType.FLATMAP);
-        put(Symbols.V, FunctionType.FLATMAP);
-        put(Symbols.VALUE, FunctionType.MAP);
-    }};
-
-    @Override
-    public <C> CFunction<C> compile(final Instruction<C> instruction) {
-        switch (instruction.op()) {
-            case Symbols.BARRIER:
-                return StallBarrier.compile(instruction);
-            case Symbols.BRANCH:
-                return BranchBranch.compile(instruction);
-            case Symbols.CONSTANT:
-                return ConstantMap.compile(instruction);
-            case Symbols.COUNT:
-                return CountReduce.compile(instruction);
-            case Symbols.FILTER:
-                return FilterFilter.compile(instruction);
-            case Symbols.FLATMAP:
-                return FlatMapFlatMap.compile(instruction);
-            case Symbols.GROUP_COUNT:
-                return GroupCountReduce.compile(instruction);
-            case Symbols.HAS_KEY:
-                return HasKeyFilter.compile(instruction);
-            case Symbols.HAS_KEY_VALUE:
-                return HasKeyValueFilter.compile(instruction);
-            case Symbols.IDENTITY:
-                return IdentityFilter.compile(instruction);
-            case Symbols.INCR:
-                return IncrMap.compile(instruction);
-            case Symbols.INITIAL:
-                return InitialInitial.compile(instruction);
-            case Symbols.IS:
-                return IsFilter.compile(instruction);
-            case Symbols.JOIN:
-                return JoinBarrier.compile(instruction);
-            case Symbols.LOOPS:
-                return LoopsMap.compile(instruction);
-            case Symbols.MAP:
-                return MapMap.compile(instruction);
-            case Symbols.ORDER:
-                return OrderBarrier.compile(instruction);
-            case Symbols.PATH:
-                return PathMap.compile(instruction);
-            case Symbols.REDUCE:
-                return ReduceReduce.compile(instruction);
-            case Symbols.REPEAT:
-                return RepeatBranch.compile(instruction);
-            case Symbols.SUM:
-                return SumReduce.compile(instruction);
-            case Symbols.UNFOLD:
-                return UnfoldFlatMap.compile(instruction);
-            case Symbols.VALUE:
-                return ValueMap.compile(instruction);
-            default:
-                return null;
-        }
-    }
-
-    @Override
-    public FunctionType getFunctionType(final String op) {
-        return OP_TYPES.get(op);
-    }
-
-    public static final class Symbols {
-
-        private Symbols() {
-            // static instance
-        }
-
-        public static enum Tokens {
-            inner, left, right, full
-        }
-
-        // SOURCE OPS
-        public static final String WITH_COEFFICIENT = "withCoefficient";
-        public static final String WITH_PROCESSOR = "withProcessor";
-        public static final String WITH_STRUCTURE = "withStructure";
-        public static final String WITH_STRATEGY = "withStrategy";
-
-
-        // ARGUMENT TOKENS
-        public static final String EQ = "eq";
-        public static final String NEQ = "neq";
-        public static final String LT = "lt";
-        public static final String GT = "gt";
-        public static final String LTE = "lte";
-        public static final String GTE = "gte";
-        public static final String REGEX = "regex";
-
-        // BRANCH TOKENS
-        public static final String DEFAULT = "default";
-
-        // INSTRUCTION OPS
-        public static final String BARRIER = "barrier";
-        public static final String BRANCH = "branch";
-        public static final String CONSTANT = "constant";
-        public static final String COUNT = "count";
-        public static final String EXPLAIN = "explain";
-        public static final String FILTER = "filter";
-        public static final String FLATMAP = "flatmap";
-        public static final String GROUP_COUNT = "groupCount";
-        public static final String HAS_KEY = "hasKey";
-        public static final String HAS_KEY_VALUE = "hasKeyValue";
-        public static final String IDENTITY = "identity";
-        public static final String INCR = "incr";
-        public static final String INITIAL = "initial";
-        public static final String IS = "is";
-        public static final String JOIN = "join";
-        public static final String LOOPS = "loops";
-        public static final String MAP = "map";
-        public static final String ORDER = "order";
-        public static final String PATH = "path";
-        public static final String REDUCE = "reduce";
-        public static final String REPEAT = "repeat";
-        public static final String SUM = "sum";
-        public static final String UNFOLD = "unfold";
-        public static final String V = "V";
-        public static final String VALUE = "value";
-    }
-}
\ No newline at end of file
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
index 0ce8a91..d7f2904 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/CoreCompiler.java
@@ -21,16 +21,30 @@ package org.apache.tinkerpop.machine.bytecode.compiler;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.function.CFunction;
 import org.apache.tinkerpop.machine.function.barrier.JoinBarrier;
+import org.apache.tinkerpop.machine.function.barrier.OrderBarrier;
 import org.apache.tinkerpop.machine.function.barrier.StallBarrier;
 import org.apache.tinkerpop.machine.function.branch.BranchBranch;
 import org.apache.tinkerpop.machine.function.branch.RepeatBranch;
 import org.apache.tinkerpop.machine.function.filter.FilterFilter;
+import org.apache.tinkerpop.machine.function.filter.HasKeyFilter;
+import org.apache.tinkerpop.machine.function.filter.HasKeyValueFilter;
+import org.apache.tinkerpop.machine.function.filter.IdentityFilter;
+import org.apache.tinkerpop.machine.function.filter.IsFilter;
 import org.apache.tinkerpop.machine.function.flatmap.FlatMapFlatMap;
+import org.apache.tinkerpop.machine.function.flatmap.UnfoldFlatMap;
+import org.apache.tinkerpop.machine.function.flatmap.ValuesFlatMap;
+import org.apache.tinkerpop.machine.function.initial.DbInitial;
 import org.apache.tinkerpop.machine.function.initial.InitialInitial;
+import org.apache.tinkerpop.machine.function.map.ConstantMap;
+import org.apache.tinkerpop.machine.function.map.IncrMap;
+import org.apache.tinkerpop.machine.function.map.LoopsMap;
 import org.apache.tinkerpop.machine.function.map.MapMap;
 import org.apache.tinkerpop.machine.function.map.PathMap;
+import org.apache.tinkerpop.machine.function.map.ValueMap;
+import org.apache.tinkerpop.machine.function.reduce.CountReduce;
 import org.apache.tinkerpop.machine.function.reduce.GroupCountReduce;
 import org.apache.tinkerpop.machine.function.reduce.ReduceReduce;
+import org.apache.tinkerpop.machine.function.reduce.SumReduce;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -53,16 +67,32 @@ public final class CoreCompiler implements BytecodeCompiler {
     private static final Map<String, FunctionType> OP_TYPES = new HashMap<>() {{
         put(Symbols.BARRIER, FunctionType.BARRIER);
         put(Symbols.BRANCH, FunctionType.BRANCH);
+        put(Symbols.CONSTANT, FunctionType.MAP);
+        put(Symbols.COUNT, FunctionType.REDUCE);
         put(Symbols.FILTER, FunctionType.FILTER);
         put(Symbols.FLATMAP, FunctionType.FLATMAP);
         put(Symbols.GROUP_COUNT, FunctionType.REDUCE);
+        put(Symbols.HAS_KEY, FunctionType.FILTER);
+        put(Symbols.HAS_KEY_VALUE, FunctionType.FILTER);
+        put(Symbols.IDENTITY, FunctionType.FILTER);
+        put(Symbols.INCR, FunctionType.MAP);
         put(Symbols.INITIAL, FunctionType.INITIAL);
+        put(Symbols.IS, FunctionType.FILTER);
         put(Symbols.JOIN, FunctionType.BARRIER);
+        put(Symbols.LOOPS, FunctionType.MAP);
         put(Symbols.MAP, FunctionType.MAP);
+        put(Symbols.ORDER, FunctionType.BARRIER);
         put(Symbols.PATH, FunctionType.MAP);
         put(Symbols.REDUCE, FunctionType.REDUCE);
         put(Symbols.REPEAT, FunctionType.BRANCH);
+        put(Symbols.SUM, FunctionType.REDUCE);
+        put(Symbols.UNFOLD, FunctionType.FLATMAP);
         put(Symbols.V, FunctionType.FLATMAP);
+        put(Symbols.VALUE, FunctionType.MAP);
+        put(Symbols.VALUES, FunctionType.FLATMAP);
+
+        //
+        put(Symbols.DB, FunctionType.FLATMAP);
     }};
 
     @Override
@@ -72,24 +102,52 @@ public final class CoreCompiler implements BytecodeCompiler {
                 return StallBarrier.compile(instruction);
             case Symbols.BRANCH:
                 return BranchBranch.compile(instruction);
+            case Symbols.CONSTANT:
+                return ConstantMap.compile(instruction);
+            case Symbols.COUNT:
+                return CountReduce.compile(instruction);
             case Symbols.FILTER:
                 return FilterFilter.compile(instruction);
             case Symbols.FLATMAP:
                 return FlatMapFlatMap.compile(instruction);
             case Symbols.GROUP_COUNT:
                 return GroupCountReduce.compile(instruction);
+            case Symbols.HAS_KEY:
+                return HasKeyFilter.compile(instruction);
+            case Symbols.HAS_KEY_VALUE:
+                return HasKeyValueFilter.compile(instruction);
+            case Symbols.IDENTITY:
+                return IdentityFilter.compile(instruction);
+            case Symbols.INCR:
+                return IncrMap.compile(instruction);
             case Symbols.INITIAL:
                 return InitialInitial.compile(instruction);
+            case Symbols.IS:
+                return IsFilter.compile(instruction);
             case Symbols.JOIN:
                 return JoinBarrier.compile(instruction);
+            case Symbols.LOOPS:
+                return LoopsMap.compile(instruction);
             case Symbols.MAP:
                 return MapMap.compile(instruction);
+            case Symbols.ORDER:
+                return OrderBarrier.compile(instruction);
             case Symbols.PATH:
                 return PathMap.compile(instruction);
             case Symbols.REDUCE:
                 return ReduceReduce.compile(instruction);
             case Symbols.REPEAT:
                 return RepeatBranch.compile(instruction);
+            case Symbols.SUM:
+                return SumReduce.compile(instruction);
+            case Symbols.UNFOLD:
+                return UnfoldFlatMap.compile(instruction);
+            case Symbols.VALUE:
+                return ValueMap.compile(instruction);
+            case Symbols.VALUES:
+                return ValuesFlatMap.compile(instruction);
+            case Symbols.DB:
+                return DbInitial.compile(instruction);
             default:
                 return null;
         }
@@ -112,7 +170,6 @@ 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";
@@ -133,23 +190,32 @@ public final class CoreCompiler implements BytecodeCompiler {
         // INSTRUCTION OPS
         public static final String BARRIER = "barrier";
         public static final String BRANCH = "branch";
+        public static final String CONSTANT = "constant";
+        public static final String COUNT = "count";
         public static final String EXPLAIN = "explain";
-        // [filter, [bc]]
         public static final String FILTER = "filter";
         public static final String FLATMAP = "flatmap";
-        // [groupCount, ?[bc]]
         public static final String GROUP_COUNT = "groupCount";
-        // [incr]
+        public static final String HAS_KEY = "hasKey";
+        public static final String HAS_KEY_VALUE = "hasKeyValue";
+        public static final String IDENTITY = "identity";
+        public static final String INCR = "incr";
         public static final String INITIAL = "initial";
+        public static final String IS = "is";
         public static final String JOIN = "join";
-        // [map, [bc]]
+        public static final String LOOPS = "loops";
         public static final String MAP = "map";
+        public static final String ORDER = "order";
         public static final String PATH = "path";
         public static final String REDUCE = "reduce";
-        // [repeat, (char, [bc]), ?(char, [bc]), ?(char, [bc])]
         public static final String REPEAT = "repeat";
-        // [V]
+        public static final String SUM = "sum";
+        public static final String UNFOLD = "unfold";
         public static final String V = "V";
+        public static final String VALUE = "value";
+        public static final String VALUES = "values";
 
+        //
+        public static final String DB = "db";
     }
-}
+}
\ No newline at end of file
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
index f399f2e..c2aef26 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/bytecode/compiler/MethodArgument.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.bytecode.compiler;
 
-import org.apache.tinkerpop.machine.structure.data.TElement;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.IteratorUtils;
 import org.apache.tinkerpop.machine.util.NumberHelper;
@@ -52,9 +52,7 @@ public class MethodArgument<E> implements Argument<E> {
         else if (this.method.equals("keys"))
             return (E) ((Map) traverser.object()).keySet();
         else if (this.method.equals("get"))
-            return (E) (traverser.object() instanceof Map ?
-                    ((Map) traverser.object()).get(this.arguments[0].mapArg(traverser)) :
-                    ((TElement) traverser.object()).get(this.arguments[0].mapArg(traverser)));
+            return (E) ((TTuple) traverser.object()).value(this.arguments[0].mapArg(traverser));
         else if (this.method.equals("add"))
             return (E) NumberHelper.add((Number) traverser.object(), (Number) this.arguments[0].mapArg(traverser));
         else
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 85c8dcf..1cfdca5 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
@@ -20,8 +20,8 @@ package org.apache.tinkerpop.machine.function.barrier;
 
 import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.bytecode.compiler.Argument;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 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;
@@ -39,12 +39,12 @@ import java.util.Map;
  */
 public final class JoinBarrier<C, K, V> extends AbstractFunction<C> implements BarrierFunction<C, Map<K, V>, Map<K, V>, List<Map<K, V>>> {
 
-    private final CoreCompiler.Symbols.Tokens joinType;
+    private final Symbols.Tokens joinType;
     private final Compilation<C, Map<K, V>, Map<K, V>> joinCompilation;
     private final Argument<K> joinKey;
 
     private JoinBarrier(final Coefficient<C> coefficient, final String label,
-                        CoreCompiler.Symbols.Tokens joinType,
+                        Symbols.Tokens joinType,
                         final Compilation<C, Map<K, V>, Map<K, V>> joinCompilation,
                         final Argument<K> joinKey) {
         super(coefficient, label);
@@ -99,7 +99,7 @@ public final class JoinBarrier<C, K, V> extends AbstractFunction<C> implements B
 
     public static <C, K, V> JoinBarrier<C, K, V> compile(final Instruction<C> instruction) {
         return new JoinBarrier<>(instruction.coefficient(), instruction.label(),
-                CoreCompiler.Symbols.Tokens.valueOf((String) instruction.args()[0]),
+                Symbols.Tokens.valueOf((String) instruction.args()[0]),
                 Compilation.compile(instruction.args()[1]),
                 Argument.create(instruction.args()[2]));
     }
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 b548b8c..fd9ff10 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
@@ -19,8 +19,8 @@
 package org.apache.tinkerpop.machine.function.branch;
 
 import org.apache.tinkerpop.machine.bytecode.Instruction;
-import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
+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.BranchFunction;
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 81b1fbe..835bf4d 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
@@ -24,16 +24,15 @@ 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;
-import org.apache.tinkerpop.machine.structure.data.TMap;
+import org.apache.tinkerpop.machine.structure.util.T2Tuple;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.StringFactory;
 
-import java.util.Iterator;
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class HasKeyFilter<C, K, V> extends AbstractFunction<C> implements FilterFunction<C, TMap<K, V>> {
+public final class HasKeyFilter<C, K, V> extends AbstractFunction<C> implements FilterFunction<C, TTuple<K, V>> {
 
     private final Pred predicate;
     private Argument<K> key;
@@ -45,15 +44,14 @@ public final class HasKeyFilter<C, K, V> extends AbstractFunction<C> implements
     }
 
     @Override
-    public boolean test(final Traverser<C, TMap<K, V>> traverser) {
-        final TMap<K, V> object = traverser.object();
+    public boolean test(final Traverser<C, TTuple<K, V>> traverser) {
+        final TTuple<K, V> object = traverser.object();
         if (Pred.eq == this.predicate)
             return object.has(this.key.mapArg(traverser));
         else {
             final K testKey = this.key.mapArg(traverser);
-            final Iterator<K> keys = traverser.object().keys();
-            while (keys.hasNext()) {
-                if (this.predicate.test(keys.next(), testKey))
+            for (final T2Tuple<K, V> entry : traverser.object().entries()) {
+                if (this.predicate.test(entry.key(), testKey))
                     return true;
             }
             return false;
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 bfbd541..f08f736 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
@@ -23,14 +23,14 @@ 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;
-import org.apache.tinkerpop.machine.structure.data.TMap;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.StringFactory;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class HasKeyValueFilter<C, K, V> extends AbstractFunction<C> implements FilterFunction<C, TMap<K, V>> {
+public final class HasKeyValueFilter<C, K, V> extends AbstractFunction<C> implements FilterFunction<C, TTuple<K, V>> {
 
     private Argument<K> key;
     private Argument<V> value;
@@ -42,9 +42,9 @@ public final class HasKeyValueFilter<C, K, V> extends AbstractFunction<C> implem
     }
 
     @Override
-    public boolean test(final Traverser<C, TMap<K, V>> traverser) {
-        final TMap<K, V> object = traverser.object();
-        return this.value.mapArg(traverser).equals(object.get(this.key.mapArg(traverser)));
+    public boolean test(final Traverser<C, TTuple<K, V>> traverser) {
+        final TTuple<K, V> object = traverser.object();
+        return this.value.mapArg(traverser).equals(object.value(this.key.mapArg(traverser)));
     }
 
     @Override
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/flatmap/ValuesFlatMap.java
similarity index 63%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/map/ValueMap.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/flatmap/ValuesFlatMap.java
index 720f03e..34cc5e3 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/flatmap/ValuesFlatMap.java
@@ -16,37 +16,39 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.function.map;
+package org.apache.tinkerpop.machine.function.flatmap;
 
 import org.apache.tinkerpop.machine.bytecode.Instruction;
 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;
-import org.apache.tinkerpop.machine.structure.data.TMap;
+import org.apache.tinkerpop.machine.function.FlatMapFunction;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.StringFactory;
 
+import java.util.Iterator;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class ValueMap<C, K, V> extends AbstractFunction<C> implements MapFunction<C, TMap<K, V>, V> {
+public final class ValuesFlatMap<C, K, V> extends AbstractFunction<C> implements FlatMapFunction<C, TTuple<K, V>, V> {
 
     private Argument<K> key;
 
-    private ValueMap(final Coefficient<C> coefficient, final String label, final Argument<K> key) {
+    private ValuesFlatMap(final Coefficient<C> coefficient, final String label, final Argument<K> key) {
         super(coefficient, label);
         this.key = key;
     }
 
     @Override
-    public V apply(final Traverser<C, TMap<K, V>> traverser) {
-        return traverser.object().get(this.key.mapArg(traverser));
+    public Iterator<V> apply(final Traverser<C, TTuple<K, V>> traverser) {
+        return ((Iterable<V>) traverser.object().value(this.key.mapArg(traverser))).iterator();
     }
 
     @Override
-    public ValueMap<C, K, V> clone() {
-        final ValueMap<C, K, V> clone = (ValueMap<C, K, V>) super.clone();
+    public ValuesFlatMap<C, K, V> clone() {
+        final ValuesFlatMap<C, K, V> clone = (ValuesFlatMap<C, K, V>) super.clone();
         clone.key = this.key.clone();
         return clone;
     }
@@ -61,7 +63,7 @@ public final class ValueMap<C, K, V> extends AbstractFunction<C> implements MapF
         return StringFactory.makeFunctionString(this, this.key);
     }
 
-    public static <C, K, V> ValueMap<C, K, V> compile(final Instruction<C> instruction) {
-        return new ValueMap<>(instruction.coefficient(), instruction.label(), Argument.create(instruction.args()[0]));
+    public static <C, K, V> ValuesFlatMap<C, K, V> compile(final Instruction<C> instruction) {
+        return new ValuesFlatMap<>(instruction.coefficient(), instruction.label(), Argument.create(instruction.args()[0]));
     }
 }
\ No newline at end of file
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/DbInitial.java
similarity index 52%
copy from java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/DbInitial.java
index 5d9e1d2..9b983b6 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/function/initial/DbInitial.java
@@ -16,30 +16,47 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.blueprints.function.initial;
+package org.apache.tinkerpop.machine.function.initial;
 
-import org.apache.tinkerpop.machine.structure.data.TVertex;
+import org.apache.tinkerpop.machine.bytecode.Instruction;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.InitialFunction;
-import org.apache.tinkerpop.machine.structure.blueprints.data.BlueprintsVertex;
-import org.apache.tinkerpop.machine.util.IteratorUtils;
+import org.apache.tinkerpop.machine.structure.table.TDatabase;
+import org.apache.tinkerpop.machine.util.StringFactory;
 
 import java.util.Iterator;
-import java.util.Set;
+import java.util.List;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class VerticesFlatMap<C> extends AbstractFunction<C> implements InitialFunction<C, TVertex> {
+public final class DbInitial<C> extends AbstractFunction<C> implements InitialFunction<C, TDatabase> {
 
-    public VerticesFlatMap(final Coefficient<C> coefficient, final String label) {
+    private TDatabase database;
+
+    private DbInitial(final Coefficient<C> coefficient, final String label, final TDatabase database) {
         super(coefficient, label);
+        this.database = database;
+    }
+
+
+    @Override
+    public Iterator<TDatabase> get() {
+        return List.of(this.database).iterator();
     }
 
     @Override
-    public Iterator<TVertex> get() {
-        return IteratorUtils.of(new BlueprintsVertex(), new BlueprintsVertex());
+    public int hashCode() {
+        return super.hashCode() ^ this.database.hashCode();
     }
 
+    @Override
+    public String toString() {
+        return StringFactory.makeFunctionString(this, this.database);
+    }
+
+    public static <C> DbInitial<C> compile(final Instruction<C> instruction) {
+        return new DbInitial<>(instruction.coefficient(), instruction.label(), (TDatabase) instruction.args()[0]);
+    }
 }
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 720f03e..81f38b9 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
@@ -23,14 +23,14 @@ 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;
-import org.apache.tinkerpop.machine.structure.data.TMap;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.StringFactory;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class ValueMap<C, K, V> extends AbstractFunction<C> implements MapFunction<C, TMap<K, V>, V> {
+public final class ValueMap<C, K, V> extends AbstractFunction<C> implements MapFunction<C, TTuple<K, V>, V> {
 
     private Argument<K> key;
 
@@ -40,8 +40,8 @@ public final class ValueMap<C, K, V> extends AbstractFunction<C> implements MapF
     }
 
     @Override
-    public V apply(final Traverser<C, TMap<K, V>> traverser) {
-        return traverser.object().get(this.key.mapArg(traverser));
+    public V apply(final Traverser<C, TTuple<K, V>> traverser) {
+        return traverser.object().value(this.key.mapArg(traverser));
     }
 
     @Override
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 0e2dbad..89eadb2 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
@@ -23,18 +23,15 @@ 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;
-import org.apache.tinkerpop.machine.structure.data.JMap;
-import org.apache.tinkerpop.machine.structure.data.TMap;
+import org.apache.tinkerpop.machine.structure.util.JTuple;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.traverser.Traverser;
 import org.apache.tinkerpop.machine.util.StringFactory;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class GroupCountReduce<C, S, E> extends AbstractFunction<C> implements ReduceFunction<C, S, TMap<E, Long>> {
+public final class GroupCountReduce<C, S, E> extends AbstractFunction<C> implements ReduceFunction<C, S, TTuple<E, Long>> {
 
     private Compilation<C, S, E> byCompilation;
 
@@ -44,23 +41,23 @@ public final class GroupCountReduce<C, S, E> extends AbstractFunction<C> impleme
     }
 
     @Override
-    public TMap<E, Long> apply(final Traverser<C, S> traverser, final TMap<E, Long> currentValue) {
+    public TTuple<E, Long> apply(final Traverser<C, S> traverser, final TTuple<E, Long> currentValue) {
         final E object = null == this.byCompilation ? (E) traverser.object() : this.byCompilation.mapObject(traverser.object()).object();
-        currentValue.set(object, traverser.coefficient().count() + currentValue.get(object, 0L));
+        currentValue.set(object, traverser.coefficient().count() + currentValue.value(object, 0L));
         return currentValue;
     }
 
     @Override
-    public TMap<E, Long> merge(final TMap<E, Long> valueA, final TMap<E, Long> valueB) {
-        final Map<E, Long> newMap = new HashMap<>();
-        valueA.entries().forEachRemaining(entry -> newMap.put(entry.getA(), entry.getB()));
-        valueB.entries().forEachRemaining(entry -> newMap.put(entry.getA(), entry.getB()));
-        return new JMap<>(newMap);
+    public TTuple<E, Long> merge(final TTuple<E, Long> valueA, final TTuple<E, Long> valueB) {
+        final JTuple<E, Long> tuple = new JTuple<>();
+        valueA.entries().forEach(entry -> tuple.set(entry.key(), entry.value()));
+        valueB.entries().forEach(entry -> tuple.set(entry.key(), entry.value()));
+        return new JTuple<>();
     }
 
     @Override
-    public TMap<E, Long> getInitialValue() {
-        return new JMap<>(new HashMap<>());
+    public TTuple<E, Long> getInitialValue() {
+        return new JTuple<>();
     }
 
     @Override
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 6d75232..5d5ae30 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
@@ -23,7 +23,6 @@ import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
 import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -43,11 +42,4 @@ public interface ProcessorFactory extends Serializable {
         return Collections.emptyList();
     }
 
-    public static Set<Strategy<?>> processorStrategies(final Class<? extends ProcessorFactory> processFactoryClass) {
-        try {
-            return processFactoryClass.getConstructor().newInstance().getStrategies();
-        } catch (final NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) {
-            throw new RuntimeException(e.getMessage(), e);
-        }
-    }
 }
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 e01bf9e..d60cfff 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.compiler.Compilation;
 import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.coefficient.LongCoefficient;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
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 f0d7dce..20e1b1f 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,8 +20,8 @@ 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.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
+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.strategy.AbstractStrategy;
@@ -36,14 +36,14 @@ public final class CoefficientStrategy extends AbstractStrategy<Strategy.Finaliz
         Coefficient<C> coefficient = BytecodeUtil.getCoefficient(bytecode).orElse(null);
         if (null == coefficient) {
             coefficient = (Coefficient<C>) LongCoefficient.create();
-            bytecode.addSourceInstruction(CoreCompiler.Symbols.WITH_COEFFICIENT, coefficient.getClass());
+            bytecode.addSourceInstruction(Symbols.WITH_COEFFICIENT, coefficient.getClass());
         }
         for (final Instruction<C> instruction : bytecode.getInstructions()) {
             for (final Object arg : instruction.args()) {
                 if (arg instanceof Bytecode) {
                     final Bytecode<C> next = (Bytecode<C>) arg;
-                    if (!BytecodeUtil.hasSourceInstruction(next, CoreCompiler.Symbols.WITH_COEFFICIENT)) {
-                        next.addSourceInstruction(CoreCompiler.Symbols.WITH_COEFFICIENT, coefficient.getClass());
+                    if (!BytecodeUtil.hasSourceInstruction(next, Symbols.WITH_COEFFICIENT)) {
+                        next.addSourceInstruction(Symbols.WITH_COEFFICIENT, coefficient.getClass());
                     }
                 }
             }
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 1b7bd9f..eea7994 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.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
@@ -31,7 +31,7 @@ public final class IdentityStrategy extends AbstractStrategy<Strategy.Optimizati
     @Override
     public <C> void apply(final Bytecode<C> bytecode) {
         bytecode.getInstructions().removeIf(instruction ->
-                instruction.op().equals(CoreCompiler.Symbols.MAP) &&
+                instruction.op().equals(Symbols.MAP) &&
                         instruction.args().length == 1 &&
                         "traverser::object".equals(instruction.args()[0]) &&
                         null != instruction.label() &&
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/EmptyStructure.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/EmptyStructure.java
index c7a59ae..a00abb7 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/EmptyStructure.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/EmptyStructure.java
@@ -32,7 +32,7 @@ public final class EmptyStructure implements Structure, StructureFactory {
     }
 
     @Override
-    public Structure mint(final Map<String, Object> configuration) {
+    public Structure mint() {
         return this;
     }
 
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 caf0796..c93b57b 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
@@ -22,10 +22,8 @@ import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
 import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 /**
@@ -33,7 +31,7 @@ import java.util.Set;
  */
 public interface StructureFactory extends Serializable {
 
-    public Structure mint(final Map<String, Object> configuration);
+    public Structure mint();
 
     public default Set<Strategy<?>> getStrategies() {
         return Collections.emptySet();
@@ -42,12 +40,4 @@ public interface StructureFactory extends Serializable {
     public default List<BytecodeCompiler> getCompilers() {
         return Collections.emptyList();
     }
-
-    public static Set<Strategy<?>> structureStrategies(final Class<? extends StructureFactory> structureFactoryClass) {
-        try {
-            return structureFactoryClass.getConstructor().newInstance().getStrategies();
-        } catch (final NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) {
-            throw new RuntimeException(e.getMessage(), e);
-        }
-    }
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TSequence.java
similarity index 87%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TSequence.java
index e2c1c6e..7e6ceba 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TSequence.java
@@ -16,15 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TTuple2<A, B> {
-
-    public A getA();
-
-    public B getB();
+public interface TSequence<V> extends Iterable<V> {
 
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TSymbol.java
similarity index 87%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TSymbol.java
index e2c1c6e..67891ba 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TSymbol.java
@@ -16,15 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TTuple2<A, B> {
-
-    public A getA();
-
-    public B getB();
+public interface TSymbol {
 
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TMap.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TTuple.java
similarity index 73%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TMap.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TTuple.java
index 0a4471b..8228291 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TMap.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/TTuple.java
@@ -16,28 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure;
 
-import java.io.Serializable;
-import java.util.Iterator;
+import org.apache.tinkerpop.machine.structure.util.T2Tuple;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TMap<K, V> extends Serializable {
-
-    public void set(final K key, final V value);
-
-    public V get(final K key);
-
-    public V get(final K key, final V defaultValue);
+public interface TTuple<K, V> {
 
     public boolean has(final K key);
 
-    public Iterator<K> keys();
+    public V value(final K key);
+
+    public default V value(final K key, final V defaultValue) {
+        return this.has(key) ? this.value(key) : defaultValue;
+    }
 
-    public Iterator<V> values();
+    public void set(final K key, final V value);
 
-    public Iterator<TTuple2<K, V>> entries();
+    public TSequence<T2Tuple<K, V>> entries();
 
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/JMap.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/JMap.java
deleted file mode 100644
index e80d641..0000000
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/JMap.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.machine.structure.data;
-
-import org.apache.tinkerpop.machine.util.IteratorUtils;
-
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class JMap<K, V> implements TMap<K, V> {
-
-    private final Map<K, V> map;
-
-    public JMap(final Map<K, V> map) {
-        this.map = map;
-    }
-
-    @Override
-    public void set(final K key, final V value) {
-        this.map.put(key, value);
-    }
-
-    @Override
-    public V get(final K key) {
-        return this.map.get(key);
-    }
-
-    @Override
-    public V get(final K key, final V defaultValue) {
-        return this.map.getOrDefault(key, defaultValue);
-    }
-
-    @Override
-    public boolean has(final K key) {
-        return this.map.containsKey(key);
-    }
-
-    @Override
-    public Iterator<K> keys() {
-        return this.map.keySet().iterator();
-    }
-
-    @Override
-    public Iterator<V> values() {
-        return this.map.values().iterator();
-    }
-
-    @Override
-    public Iterator<TTuple2<K, V>> entries() {
-        return IteratorUtils.map(this.map.entrySet().iterator(),
-                entry -> new JTuple2<>(entry.getKey(), entry.getValue()));
-    }
-
-    @Override
-    public int hashCode() {
-        return this.map.hashCode();
-    }
-
-    @Override
-    public boolean equals(final Object object) {
-        return object instanceof JMap && this.map.equals(((JMap) object).map);
-    }
-
-    @Override
-    public String toString() {
-        return this.map.toString();
-    }
-
-    public static <K, V> JMap<K, V> create(final Map<K, V> map) {
-        return new JMap<>(map);
-    }
-}
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/IdSymbol.java
similarity index 85%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/IdSymbol.java
index e2c1c6e..bda1787 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/IdSymbol.java
@@ -16,15 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.graph;
+
+import org.apache.tinkerpop.machine.structure.TSymbol;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TTuple2<A, B> {
-
-    public A getA();
-
-    public B getB();
-
+public class IdSymbol implements TSymbol {
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/LabelSymbol.java
similarity index 84%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/LabelSymbol.java
index e2c1c6e..09ae9f8 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TTuple2.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/LabelSymbol.java
@@ -16,15 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.graph;
+
+import org.apache.tinkerpop.machine.structure.TSymbol;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TTuple2<A, B> {
-
-    public A getA();
-
-    public B getB();
-
+public class LabelSymbol implements TSymbol {
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TEdge.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TEdge.java
similarity index 80%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TEdge.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TEdge.java
index 08885b6..c5695e4 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TEdge.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TEdge.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.graph;
 
 import org.apache.tinkerpop.machine.util.IteratorUtils;
 
@@ -27,11 +27,11 @@ import java.util.Iterator;
  */
 public interface TEdge<V> extends TElement<V> {
 
-    public TVertex<V> inVertex();
+    public TVertex<V> inV();
 
-    public TVertex<V> outVertex();
+    public TVertex<V> outV();
 
-    public default Iterator<TVertex<V>> bothVertices() {
-        return IteratorUtils.of(this.inVertex(), this.outVertex());
+    public default Iterator<TVertex<V>> bothV() {
+        return IteratorUtils.of(this.inV(), this.outV());
     }
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TElement.java
similarity index 84%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TElement.java
index b29423f..7ef45cd 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TElement.java
@@ -16,12 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.graph;
+
+import org.apache.tinkerpop.machine.structure.TTuple;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TElement<V> extends TMap<String, V> {
+public interface TElement<V> extends TTuple<String, V> {
 
     public String label();
 
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TGraph.java
similarity index 78%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TGraph.java
index b29423f..d515a33 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TGraph.java
@@ -16,14 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.graph;
+
+import org.apache.tinkerpop.machine.structure.TSequence;
+import org.apache.tinkerpop.machine.structure.TTuple;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TElement<V> extends TMap<String, V> {
-
-    public String label();
-
-    public Object id();
+public interface TGraph extends TTuple<String, TSequence<TVertex>> {
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TVertex.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TVertex.java
similarity index 79%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TVertex.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TVertex.java
index 7a07a8c..360c25d 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TVertex.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TVertex.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.graph;
 
 import org.apache.tinkerpop.machine.util.MultiIterator;
 
@@ -27,14 +27,14 @@ import java.util.Iterator;
  */
 public interface TVertex<V> extends TElement<V> {
 
-    public Iterator<TEdge<V>> inEdges();
+    public Iterator<TEdge<V>> inE();
 
-    public Iterator<TEdge<V>> outEdges();
+    public Iterator<TEdge<V>> outE();
 
-    public default Iterator<TEdge<V>> bothEdges() {
+    public default Iterator<TEdge<V>> bothE() {
         final MultiIterator<TEdge<V>> iterator = new MultiIterator<>();
-        iterator.addIterator(this.inEdges());
-        iterator.addIterator(this.outEdges());
+        iterator.addIterator(this.inE());
+        iterator.addIterator(this.outE());
         return iterator;
     }
 
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TVertices.java
similarity index 83%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TVertices.java
index b29423f..90890b2 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/graph/TVertices.java
@@ -16,14 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.graph;
+
+import org.apache.tinkerpop.machine.structure.TSequence;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TElement<V> extends TMap<String, V> {
-
-    public String label();
-
-    public Object id();
+public interface TVertices extends TSequence<TVertex> {
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TDatabase.java
similarity index 83%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TDatabase.java
index b29423f..445ed33 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TDatabase.java
@@ -16,14 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.table;
+
+import org.apache.tinkerpop.machine.structure.TTuple;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TElement<V> extends TMap<String, V> {
-
-    public String label();
-
-    public Object id();
+public interface TDatabase extends TTuple<String,TTable> {
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TRow.java
similarity index 84%
copy from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TRow.java
index b29423f..d4161bb 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TRow.java
@@ -16,14 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.table;
+
+import org.apache.tinkerpop.machine.structure.TTuple;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TElement<V> extends TMap<String, V> {
-
-    public String label();
-
-    public Object id();
+public interface TRow<V> extends TTuple<String,V> {
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TTable.java
similarity index 84%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TTable.java
index b29423f..f3d7679 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/TElement.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/table/TTable.java
@@ -16,14 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.table;
+
+import org.apache.tinkerpop.machine.structure.TSequence;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface TElement<V> extends TMap<String, V> {
-
-    public String label();
-
-    public Object id();
+public interface TTable extends TSequence<TRow<?>> {
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/J2Tuple.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/J2Tuple.java
new file mode 100644
index 0000000..4827f71
--- /dev/null
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/J2Tuple.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.structure.util;
+
+import org.apache.tinkerpop.machine.structure.TSequence;
+
+import java.util.List;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class J2Tuple<K, V> implements T2Tuple<K, V> {
+
+    private K key;
+    private V value;
+
+    public J2Tuple(final K key, final V value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    @Override
+    public K key() {
+        return this.key;
+    }
+
+    @Override
+    public V value() {
+        return this.value;
+    }
+
+    @Override
+    public V value(final K key) {
+        return this.key.equals(key) ? this.value : null;
+    }
+
+    @Override
+    public void set(final K key, final V value) {
+        throw new IllegalStateException("Can't set key/value for a 2-tuple");
+    }
+
+    @Override
+    public TSequence<T2Tuple<K, V>> entries() {
+        return () -> List.of((T2Tuple<K, V>) this).iterator();
+    }
+
+    @Override
+    public boolean has(final K key) {
+        return this.key.equals(key);
+    }
+
+    @Override
+    public String toString() {
+        return this.key + ":" + this.value;
+    }
+}
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/JTuple.java
similarity index 54%
copy from java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
copy to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/JTuple.java
index 5d9e1d2..edff5bd 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/JTuple.java
@@ -16,30 +16,40 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.blueprints.function.initial;
+package org.apache.tinkerpop.machine.structure.util;
 
-import org.apache.tinkerpop.machine.structure.data.TVertex;
-import org.apache.tinkerpop.machine.coefficient.Coefficient;
-import org.apache.tinkerpop.machine.function.AbstractFunction;
-import org.apache.tinkerpop.machine.function.InitialFunction;
-import org.apache.tinkerpop.machine.structure.blueprints.data.BlueprintsVertex;
+import org.apache.tinkerpop.machine.structure.TSequence;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.apache.tinkerpop.machine.util.IteratorUtils;
 
-import java.util.Iterator;
-import java.util.Set;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class VerticesFlatMap<C> extends AbstractFunction<C> implements InitialFunction<C, TVertex> {
+public class JTuple<K, V> implements TTuple<K, V> {
 
-    public VerticesFlatMap(final Coefficient<C> coefficient, final String label) {
-        super(coefficient, label);
+    private final Map<K, V> map = new HashMap<>();
+
+    @Override
+    public boolean has(final K key) {
+        return this.map.containsKey(key);
+    }
+
+    @Override
+    public V value(final K key) {
+        return this.map.get(key);
+    }
+
+    @Override
+    public void set(final K key, final V value) {
+        this.map.put(key, value);
     }
 
     @Override
-    public Iterator<TVertex> get() {
-        return IteratorUtils.of(new BlueprintsVertex(), new BlueprintsVertex());
+    public TSequence<T2Tuple<K, V>> entries() {
+        return () -> IteratorUtils.map(this.map.entrySet().iterator(), e -> new J2Tuple<>(e.getKey(), e.getValue()));
     }
 
 }
diff --git a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/JTuple2.java b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/T2Tuple.java
similarity index 67%
rename from java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/JTuple2.java
rename to java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/T2Tuple.java
index e8efb9c..f10b8ff 100644
--- a/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/data/JTuple2.java
+++ b/java/machine/machine-core/src/main/java/org/apache/tinkerpop/machine/structure/util/T2Tuple.java
@@ -16,30 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.data;
+package org.apache.tinkerpop.machine.structure.util;
 
-import java.io.Serializable;
+import org.apache.tinkerpop.machine.structure.TTuple;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class JTuple2<A, B> implements TTuple2<A, B>, Serializable {
+public interface T2Tuple<K, V> extends TTuple<K, V> {
 
-    private final A a;
-    private final B b;
+    public K key();
 
-    JTuple2(final A a, final B b) {
-        this.a = a;
-        this.b = b;
-    }
-
-    @Override
-    public A getA() {
-        return this.a;
-    }
-
-    @Override
-    public B getB() {
-        return this.b;
-    }
+    public V value();
 }
diff --git a/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/bytecode/compiler/CompilationTest.java b/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/bytecode/compiler/CompilationTest.java
index bf89aed..1970f60 100644
--- a/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/bytecode/compiler/CompilationTest.java
+++ b/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/bytecode/compiler/CompilationTest.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.machine.bytecode.compiler;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.coefficient.LongCoefficient;
 import org.apache.tinkerpop.machine.function.CFunction;
-import org.apache.tinkerpop.machine.structure.data.TMap;
+import org.apache.tinkerpop.machine.structure.TTuple;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
@@ -38,12 +38,12 @@ class CompilationTest {
     void shouldCloneCorrectly() {
         final Bytecode<Long> bytecode = new Bytecode<>();
         final Bytecode<Long> inner = new Bytecode<>();
-        inner.addInstruction(LongCoefficient.create(), CommonCompiler.Symbols.VALUE, "name");
-        bytecode.addInstruction(LongCoefficient.create(), CommonCompiler.Symbols.HAS_KEY, "eq", inner);
-        bytecode.addInstruction(LongCoefficient.create(), CommonCompiler.Symbols.COUNT);
+        inner.addInstruction(LongCoefficient.create(), CoreCompiler.Symbols.VALUE, "name");
+        bytecode.addInstruction(LongCoefficient.create(), CoreCompiler.Symbols.HAS_KEY, "eq", inner);
+        bytecode.addInstruction(LongCoefficient.create(), CoreCompiler.Symbols.COUNT);
 
-        final Compilation<Long, TMap, Long> compilationA = Compilation.compile(bytecode);
-        final Compilation<Long, TMap, Long> compilationB = compilationA.clone();
+        final Compilation<Long, TTuple, Long> compilationA = Compilation.compile(bytecode);
+        final Compilation<Long, TTuple, Long> compilationB = compilationA.clone();
         assertEquals(compilationA.hashCode(), compilationB.hashCode());
         assertEquals(compilationA, compilationB);
         assertNotSame(compilationA, compilationB);
diff --git a/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/species/LocalMachineTest.java b/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/species/LocalMachineTest.java
index 0d45458..de66cb4 100644
--- a/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/species/LocalMachineTest.java
+++ b/java/machine/machine-core/src/test/java/org/apache/tinkerpop/machine/species/LocalMachineTest.java
@@ -19,7 +19,7 @@
 package org.apache.tinkerpop.machine.species;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.strategy.finalization.CoefficientStrategy;
 import org.apache.tinkerpop.machine.strategy.optimization.IdentityStrategy;
 import org.apache.tinkerpop.machine.strategy.verification.CoefficientVerificationStrategy;
@@ -40,8 +40,8 @@ class LocalMachineTest {
         assertEquals(0, machine.sources.size());
         ///
         final Bytecode<Long> sourceCode = new Bytecode<>();
-        sourceCode.addSourceInstruction(CommonCompiler.Symbols.WITH_STRATEGY, IdentityStrategy.class);
-        sourceCode.addSourceInstruction(CommonCompiler.Symbols.WITH_STRATEGY, CoefficientStrategy.class);
+        sourceCode.addSourceInstruction(CoreCompiler.Symbols.WITH_STRATEGY, IdentityStrategy.class);
+        sourceCode.addSourceInstruction(CoreCompiler.Symbols.WITH_STRATEGY, CoefficientStrategy.class);
         assertEquals(2, sourceCode.getSourceInstructions().size());
         assertEquals(0, sourceCode.getInstructions().size());
         ///
@@ -70,7 +70,7 @@ class LocalMachineTest {
         assertEquals(bytecode, machine.register(bytecode));
         assertEquals(1, machine.sources.size());
         ///
-        bytecode.addSourceInstruction(CommonCompiler.Symbols.WITH_STRATEGY, CoefficientVerificationStrategy.class);
+        bytecode.addSourceInstruction(CoreCompiler.Symbols.WITH_STRATEGY, CoefficientVerificationStrategy.class);
         assertFalse(machine.submit(bytecode).hasNext());
         assertEquals(1, machine.sources.size());
         assertNotEquals(bytecode, machine.register(bytecode));
diff --git a/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java b/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java
index 7b1b6e8..38918d2 100644
--- a/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java
+++ b/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine;
 
-import org.apache.tinkerpop.language.gremlin.common.__;
+import org.apache.tinkerpop.language.gremlin.core.__;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.compiler.Order;
 import org.junit.jupiter.api.Test;
@@ -29,10 +29,10 @@ import java.util.stream.Stream;
 
 import static org.apache.tinkerpop.language.gremlin.P.gt;
 import static org.apache.tinkerpop.language.gremlin.P.lt;
-import static org.apache.tinkerpop.language.gremlin.common.__.choose;
-import static org.apache.tinkerpop.language.gremlin.common.__.incr;
-import static org.apache.tinkerpop.language.gremlin.common.__.is;
-import static org.apache.tinkerpop.language.gremlin.common.__.union;
+import static org.apache.tinkerpop.language.gremlin.core.__.choose;
+import static org.apache.tinkerpop.language.gremlin.core.__.incr;
+import static org.apache.tinkerpop.language.gremlin.core.__.is;
+import static org.apache.tinkerpop.language.gremlin.core.__.union;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
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 53ed990..44f26cc 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
@@ -19,9 +19,8 @@
 package org.apache.tinkerpop.machine.processor.beam;
 
 import org.apache.tinkerpop.machine.bytecode.compiler.BytecodeCompiler;
-import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
-import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.Compilation;
 import org.apache.tinkerpop.machine.processor.Processor;
 import org.apache.tinkerpop.machine.processor.ProcessorFactory;
 import org.apache.tinkerpop.machine.processor.beam.strategy.BeamStrategy;
@@ -39,17 +38,13 @@ import java.util.Set;
  */
 public class BeamProcessor implements ProcessorFactory {
 
-    private static final List<BytecodeCompiler> COMPILERS = List.of(CoreCompiler.instance(), CommonCompiler.instance());
+    private static final List<BytecodeCompiler> COMPILERS = List.of(CoreCompiler.instance());
     private static final int DEFAULT_SERVER_PORT = 8888;
     public static final String TRAVERSER_SERVER_LOCATION = "beam.traverserServer.location";
     public static final String TRAVERSER_SERVER_PORT = "beam.traverserServer.port";
 
     private final Map<String, Object> configuration;
 
-    public BeamProcessor() {
-        this.configuration = Collections.emptyMap();
-    }
-
     public BeamProcessor(final Map<String, Object> configuration) {
         this.configuration = configuration;
     }
diff --git a/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleLocalTest.java b/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleLocalTest.java
index 6f53981..00db16e 100644
--- a/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleLocalTest.java
+++ b/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleLocalTest.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.beam;
 
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.LocalMachine;
 
 /**
@@ -31,7 +31,7 @@ class SimpleLocalTest extends SimpleTestSuite {
     private final static Bytecode<Long> BYTECODE = new Bytecode<>();
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, BeamProcessor.class);
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR, BeamProcessor.class);
     }
 
     SimpleLocalTest() {
diff --git a/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleRemoteTest.java b/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleRemoteTest.java
index 72fac52..eef8ec4 100644
--- a/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleRemoteTest.java
+++ b/java/machine/processor/beam/src/test/java/org/apache/tinkerpop/machine/processor/beam/SimpleRemoteTest.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.machine.processor.beam;
 import org.apache.tinkerpop.machine.AbstractTestSuite;
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.remote.MachineServer;
 import org.apache.tinkerpop.machine.species.remote.RemoteMachine;
 import org.junit.jupiter.api.AfterAll;
@@ -38,7 +38,7 @@ public class SimpleRemoteTest extends SimpleTestSuite {
     private static MachineServer SERVER = new MachineServer(7777);
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR,
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR,
                 BeamProcessor.class,
                 Map.of(BeamProcessor.TRAVERSER_SERVER_LOCATION,
                         "localhost", BeamProcessor.TRAVERSER_SERVER_PORT, 6666));
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 fa4890c..6c26f48 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
@@ -20,16 +20,14 @@ package org.apache.tinkerpop.machine.processor.pipes;
 
 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;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -37,9 +35,9 @@ import java.util.Set;
  */
 public final class PipesProcessor implements ProcessorFactory {
 
-    private static final List<BytecodeCompiler> COMPILERS = List.of(CoreCompiler.instance(), CommonCompiler.instance());
+    private static final List<BytecodeCompiler> COMPILERS = List.of(CoreCompiler.instance());
 
-    public PipesProcessor() {
+    public PipesProcessor(final Map<String, Object> configuration) {
     }
 
     @Override
diff --git a/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/PipesTest.java b/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/PipesTest.java
index 8d94250..cbc087d 100644
--- a/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/PipesTest.java
+++ b/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/PipesTest.java
@@ -22,7 +22,7 @@ import org.apache.tinkerpop.language.gremlin.Gremlin;
 import org.apache.tinkerpop.language.gremlin.Traversal;
 import org.apache.tinkerpop.language.gremlin.TraversalSource;
 import org.apache.tinkerpop.language.gremlin.TraversalUtil;
-import org.apache.tinkerpop.language.gremlin.common.__;
+import org.apache.tinkerpop.language.gremlin.core.__;
 import org.apache.tinkerpop.machine.Machine;
 import org.apache.tinkerpop.machine.coefficient.LongCoefficient;
 import org.apache.tinkerpop.machine.species.LocalMachine;
@@ -30,6 +30,8 @@ import org.apache.tinkerpop.machine.strategy.optimization.IdentityStrategy;
 import org.apache.tinkerpop.machine.structure.blueprints.BlueprintsStructure;
 import org.junit.jupiter.api.Test;
 
+import static org.apache.tinkerpop.language.gremlin.core.__.count;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -44,7 +46,7 @@ class PipesTest {
                 .withStructure(BlueprintsStructure.class)
                 .withStrategy(IdentityStrategy.class);
 
-        Traversal<Long, ?, ?> traversal = g.V().identity().union(__.count(), __.count()).map(__.<Long, Long>count().identity()).explain();
+        Traversal<Long, ?, ?> traversal = g.V().identity().union(count(), count()).map(__.<Long, Long>count().identity()).explain();
         System.out.println(TraversalUtil.getBytecode(traversal));
         System.out.println(traversal);
         System.out.println(TraversalUtil.getBytecode(traversal));
diff --git a/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleLocalTest.java b/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleLocalTest.java
index be12546..5e5c2cf 100644
--- a/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleLocalTest.java
+++ b/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleLocalTest.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.pipes;
 
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.LocalMachine;
 
 /**
@@ -31,7 +31,7 @@ class SimpleLocalTest extends SimpleTestSuite {
     private final static Bytecode<Long> BYTECODE = new Bytecode<>();
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, PipesProcessor.class);
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR, PipesProcessor.class);
     }
 
     SimpleLocalTest() {
diff --git a/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleRemoteTest.java b/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleRemoteTest.java
index f895ada..9a43238 100644
--- a/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleRemoteTest.java
+++ b/java/machine/processor/pipes/src/test/java/org/apache/tinkerpop/machine/processor/pipes/SimpleRemoteTest.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.machine.processor.pipes;
 import org.apache.tinkerpop.machine.AbstractTestSuite;
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.remote.MachineServer;
 import org.apache.tinkerpop.machine.species.remote.RemoteMachine;
 import org.junit.jupiter.api.AfterAll;
@@ -36,7 +36,7 @@ class SimpleRemoteTest extends SimpleTestSuite {
     private static MachineServer SERVER = new MachineServer(7777);
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, PipesProcessor.class);
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR, PipesProcessor.class);
     }
 
     SimpleRemoteTest() {
diff --git a/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaProcessor.java b/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaProcessor.java
index 23346f5..b2ad367 100644
--- a/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaProcessor.java
+++ b/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaProcessor.java
@@ -26,7 +26,6 @@ import org.apache.tinkerpop.machine.processor.rxjava.strategy.RxJavaStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 import org.apache.tinkerpop.machine.util.StringFactory;
 
-import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -45,10 +44,6 @@ public final class RxJavaProcessor implements ProcessorFactory {
 
     private final Map<String, Object> configuration;
 
-    public RxJavaProcessor() {
-        this.configuration = Collections.emptyMap();
-    }
-
     public RxJavaProcessor(final Map<String, Object> configuration) {
         this.configuration = configuration;
     }
diff --git a/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/strategy/RxJavaStrategy.java b/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/strategy/RxJavaStrategy.java
index 4e9de21..9672955 100644
--- a/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/strategy/RxJavaStrategy.java
+++ b/java/machine/processor/rxjava/src/main/java/org/apache/tinkerpop/machine/processor/rxjava/strategy/RxJavaStrategy.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.machine.processor.rxjava.strategy;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
 import org.apache.tinkerpop.machine.bytecode.SourceInstruction;
-import org.apache.tinkerpop.machine.bytecode.compiler.CommonCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.bytecode.compiler.CompositeCompiler;
 import org.apache.tinkerpop.machine.bytecode.compiler.FunctionType;
 import org.apache.tinkerpop.machine.processor.rxjava.RxJavaProcessor;
@@ -42,12 +42,12 @@ public final class RxJavaStrategy extends AbstractStrategy<Strategy.ProviderStra
         if (bytecode.getParent().isEmpty()) { // root bytecode
             final String id = UUID.randomUUID().toString();
             bytecode.addSourceInstruction(RxJavaProcessor.RX_ROOT_BYTECODE_ID, id);
-        } else if (!BytecodeUtil.hasSourceInstruction(bytecode, CommonCompiler.Symbols.WITH_PROCESSOR)) {
+        } else if (!BytecodeUtil.hasSourceInstruction(bytecode, CoreCompiler.Symbols.WITH_PROCESSOR)) {
             if (RxJavaStrategy.isSimple(bytecode)) {
-                bytecode.addSourceInstruction(CommonCompiler.Symbols.WITH_PROCESSOR, RxJavaProcessor.class, Map.of(RxJavaProcessor.RX_THREAD_POOL_SIZE, 0)); // guaranteed serial execution
+                bytecode.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, RxJavaProcessor.class, Map.of(RxJavaProcessor.RX_THREAD_POOL_SIZE, 0)); // guaranteed serial execution
             } else {
                 final Bytecode<C> root = BytecodeUtil.getRootBytecode(bytecode);
-                final List<SourceInstruction> processors = BytecodeUtil.getSourceInstructions(root, CommonCompiler.Symbols.WITH_PROCESSOR); // potential parallel execution
+                final List<SourceInstruction> processors = BytecodeUtil.getSourceInstructions(root, CoreCompiler.Symbols.WITH_PROCESSOR); // potential parallel execution
                 for (final SourceInstruction sourceInstruction : processors) {
                     bytecode.addSourceInstruction(sourceInstruction.op(), sourceInstruction.args());
                 }
diff --git a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaBenchmark.java b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaBenchmark.java
index 5ec8fc2..faa5339 100644
--- a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaBenchmark.java
+++ b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/RxJavaBenchmark.java
@@ -20,11 +20,10 @@ package org.apache.tinkerpop.machine.processor.rxjava;
 
 import org.apache.tinkerpop.language.gremlin.Gremlin;
 import org.apache.tinkerpop.language.gremlin.TraversalSource;
-import org.apache.tinkerpop.language.gremlin.common.__;
+import org.apache.tinkerpop.language.gremlin.core.__;
 import org.apache.tinkerpop.machine.Machine;
 import org.apache.tinkerpop.machine.processor.pipes.PipesProcessor;
 import org.apache.tinkerpop.machine.species.LocalMachine;
-import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalParallelTest.java b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalParallelTest.java
index 46b37d2..994f575 100644
--- a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalParallelTest.java
+++ b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalParallelTest.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.rxjava;
 
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.LocalMachine;
 
 import java.util.Map;
@@ -33,7 +33,7 @@ public class SimpleLocalParallelTest extends SimpleTestSuite {
     private final static Bytecode<Long> BYTECODE = new Bytecode<>();
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, RxJavaProcessor.class, Map.of(RxJavaProcessor.RX_THREAD_POOL_SIZE, Runtime.getRuntime().availableProcessors()-1));
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR, RxJavaProcessor.class, Map.of(RxJavaProcessor.RX_THREAD_POOL_SIZE, Runtime.getRuntime().availableProcessors()-1));
     }
 
     SimpleLocalParallelTest() {
diff --git a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalSerialTest.java b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalSerialTest.java
index 5afa1e7..cf1780e 100644
--- a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalSerialTest.java
+++ b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleLocalSerialTest.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.processor.rxjava;
 
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.LocalMachine;
 
 /**
@@ -31,7 +31,7 @@ class SimpleLocalSerialTest extends SimpleTestSuite {
     private final static Bytecode<Long> BYTECODE = new Bytecode<>();
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, RxJavaProcessor.class);
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR, RxJavaProcessor.class);
     }
 
     SimpleLocalSerialTest() {
diff --git a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteParallelTest.java b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteParallelTest.java
index 11daedf..0f697fc 100644
--- a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteParallelTest.java
+++ b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteParallelTest.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.machine.processor.rxjava;
 import org.apache.tinkerpop.machine.AbstractTestSuite;
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.remote.MachineServer;
 import org.apache.tinkerpop.machine.species.remote.RemoteMachine;
 import org.junit.jupiter.api.AfterAll;
@@ -38,7 +38,7 @@ class SimpleRemoteParallelTest extends SimpleTestSuite {
     private static MachineServer SERVER = new MachineServer(7777);
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, RxJavaProcessor.class, Map.of(RxJavaProcessor.RX_THREAD_POOL_SIZE, Runtime.getRuntime().availableProcessors() - 1));
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR, RxJavaProcessor.class, Map.of(RxJavaProcessor.RX_THREAD_POOL_SIZE, Runtime.getRuntime().availableProcessors() - 1));
     }
 
     SimpleRemoteParallelTest() {
diff --git a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteSerialTest.java b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteSerialTest.java
index 8582bb8..dba44e7 100644
--- a/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteSerialTest.java
+++ b/java/machine/processor/rxjava/src/test/java/org/apache/tinkerpop/machine/processor/rxjava/SimpleRemoteSerialTest.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.machine.processor.rxjava;
 import org.apache.tinkerpop.machine.AbstractTestSuite;
 import org.apache.tinkerpop.machine.SimpleTestSuite;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.species.remote.MachineServer;
 import org.apache.tinkerpop.machine.species.remote.RemoteMachine;
 import org.junit.jupiter.api.AfterAll;
@@ -36,7 +36,7 @@ public class SimpleRemoteSerialTest extends SimpleTestSuite {
     private static MachineServer SERVER = new MachineServer(7777);
 
     static {
-        BYTECODE.addSourceInstruction(CoreCompiler.Symbols.WITH_PROCESSOR, RxJavaProcessor.class);
+        BYTECODE.addSourceInstruction(Symbols.WITH_PROCESSOR, RxJavaProcessor.class);
     }
 
     SimpleRemoteSerialTest() {
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 144439c..7e04783 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
@@ -36,8 +36,12 @@ public class BlueprintsStructure implements StructureFactory {
 
     private static final List<BytecodeCompiler> COMPILERS = List.of(BlueprintsCompiler.instance());
 
+    public BlueprintsStructure(final Map<String, Object> configuration) {
+
+    }
+
     @Override
-    public Structure mint(final Map<String, Object> configuration) {
+    public Structure mint() {
         return new Blueprints();
     }
 
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java
index 7a3f189..a88b146 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java
+++ b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/data/BlueprintsVertex.java
@@ -18,10 +18,10 @@
  */
 package org.apache.tinkerpop.machine.structure.blueprints.data;
 
-import org.apache.tinkerpop.machine.structure.data.TEdge;
-import org.apache.tinkerpop.machine.structure.data.TTuple2;
-import org.apache.tinkerpop.machine.structure.data.TVertex;
-import org.apache.tinkerpop.machine.util.IteratorUtils;
+import org.apache.tinkerpop.machine.structure.util.T2Tuple;
+import org.apache.tinkerpop.machine.structure.TSequence;
+import org.apache.tinkerpop.machine.structure.graph.TEdge;
+import org.apache.tinkerpop.machine.structure.graph.TVertex;
 
 import java.io.Serializable;
 import java.util.Collections;
@@ -34,12 +34,12 @@ import java.util.UUID;
 public class BlueprintsVertex<V> implements TVertex<V>, Serializable {
 
     @Override
-    public Iterator<TEdge<V>> inEdges() {
+    public Iterator<TEdge<V>> inE() {
         return Collections.emptyIterator();
     }
 
     @Override
-    public Iterator<TEdge<V>> outEdges() {
+    public Iterator<TEdge<V>> outE() {
         return Collections.emptyIterator();
     }
 
@@ -59,12 +59,12 @@ public class BlueprintsVertex<V> implements TVertex<V>, Serializable {
     }
 
     @Override
-    public V get(String key) {
+    public V value(String key) {
         return (V) "marko";
     }
 
     @Override
-    public V get(String key, V defaultValue) {
+    public V value(String key, V defaultValue) {
         return defaultValue;
     }
 
@@ -74,18 +74,8 @@ public class BlueprintsVertex<V> implements TVertex<V>, Serializable {
     }
 
     @Override
-    public Iterator keys() {
-        return IteratorUtils.of("name");
-    }
-
-    @Override
-    public Iterator values() {
-        return IteratorUtils.of("marko");
-    }
-
-    @Override
-    public Iterator<TTuple2<String, V>> entries() {
-        return Collections.emptyIterator();
+    public TSequence<T2Tuple<String, V>> entries() {
+        return Collections::emptyIterator;
     }
 
     @Override
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
index 5d9e1d2..2790291 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
+++ b/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/function/initial/VerticesFlatMap.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tinkerpop.machine.structure.blueprints.function.initial;
 
-import org.apache.tinkerpop.machine.structure.data.TVertex;
+import org.apache.tinkerpop.machine.structure.graph.TVertex;
 import org.apache.tinkerpop.machine.coefficient.Coefficient;
 import org.apache.tinkerpop.machine.function.AbstractFunction;
 import org.apache.tinkerpop.machine.function.InitialFunction;
@@ -26,7 +26,6 @@ import org.apache.tinkerpop.machine.structure.blueprints.data.BlueprintsVertex;
 import org.apache.tinkerpop.machine.util.IteratorUtils;
 
 import java.util.Iterator;
-import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
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 56a9b9c..8cbe34f 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,8 +20,8 @@ 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.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
 import org.apache.tinkerpop.machine.structure.blueprints.bytecode.compiler.BlueprintsCompiler;
@@ -34,7 +34,7 @@ public class BlueprintsVerticesStrategy extends AbstractStrategy<Strategy.Provid
     public <C> void apply(final Bytecode<C> bytecode) {
         Instruction<C> temp = null;
         for (final Instruction<C> instruction : bytecode.getInstructions()) {
-            if (instruction.op().equals(CoreCompiler.Symbols.V))
+            if (instruction.op().equals(Symbols.V))
                 temp = instruction;
         }
         if (null != temp)
diff --git a/java/machine/structure/jdbc/pom.xml b/java/machine/structure/jdbc/pom.xml
new file mode 100644
index 0000000..ce25086
--- /dev/null
+++ b/java/machine/structure/jdbc/pom.xml
@@ -0,0 +1,72 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+  http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>structure</artifactId>
+        <groupId>org.apache.tinkerpop</groupId>
+        <version>4.0.0-SNAPSHOT</version>
+    </parent>
+    <name>Apache TinkerPop :: Machine :: JDBC</name>
+    <artifactId>jdbc</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tinkerpop</groupId>
+            <artifactId>machine-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <!-- TEST -->
+        <dependency>
+            <groupId>org.apache.tinkerpop</groupId>
+            <artifactId>gremlin</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tinkerpop</groupId>
+            <artifactId>pipes</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.4.199</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <directory>${basedir}/target</directory>
+        <finalName>${project.artifactId}-${project.version}</finalName>
+        <testResources>
+            <testResource>
+                <directory>${basedir}/src/test/resources
+                </directory>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCDatabase.java b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCDatabase.java
new file mode 100644
index 0000000..cad8d9c
--- /dev/null
+++ b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCDatabase.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.structure.jdbc;
+
+import org.apache.tinkerpop.machine.structure.Structure;
+import org.apache.tinkerpop.machine.structure.TSequence;
+import org.apache.tinkerpop.machine.structure.table.TDatabase;
+import org.apache.tinkerpop.machine.structure.table.TTable;
+import org.apache.tinkerpop.machine.structure.util.T2Tuple;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+final class JDBCDatabase implements TDatabase, Structure {
+
+    private final Connection connection;
+
+    JDBCDatabase(final String connectionURI) {
+        try {
+            this.connection = DriverManager.getConnection(connectionURI);
+        } catch (final SQLException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public boolean has(final String key) {
+        try {
+            final ResultSet result = this.connection.createStatement().executeQuery("SHOW TABLES");
+            while (result.next()) {
+                if (result.getString(1).equalsIgnoreCase(key))
+                    return true;
+            }
+            return false;
+        } catch (final SQLException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public TTable value(final String key) {
+        return new JDBCTable(this.connection, key);
+    }
+
+    @Override
+    public void set(final String key, final TTable value) {
+
+    }
+
+    @Override
+    public TSequence<T2Tuple<String, TTable>> entries() {
+        return null;
+    }
+
+}
diff --git a/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCRow.java b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCRow.java
new file mode 100644
index 0000000..57017ad
--- /dev/null
+++ b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCRow.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.structure.jdbc;
+
+import org.apache.tinkerpop.machine.structure.TSequence;
+import org.apache.tinkerpop.machine.structure.table.TRow;
+import org.apache.tinkerpop.machine.structure.util.J2Tuple;
+import org.apache.tinkerpop.machine.structure.util.T2Tuple;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+final class JDBCRow<V> implements TRow<V> {
+
+    private final ResultSet rows;
+    private final int rowId;
+
+    JDBCRow(final ResultSet rows, final int rowId) {
+        this.rows = rows;
+        this.rowId = rowId;
+
+    }
+
+    @Override
+    public boolean has(final String key) {
+        try {
+            this.rows.absolute(this.rowId);
+            this.rows.findColumn(key);
+            return true;
+        } catch (final SQLException e) {
+            return false;
+        }
+    }
+
+    @Override
+    public V value(final String key) {
+        try {
+            this.rows.absolute(this.rowId);
+            return (V) this.rows.getObject(key);
+        } catch (final SQLException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public void set(final String key, final V value) {
+        try {
+            this.rows.absolute(this.rowId);
+            this.rows.updateObject(key, value);
+        } catch (final SQLException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public TSequence<T2Tuple<String, V>> entries() {
+        try {
+            this.rows.absolute(this.rowId);
+            return () -> new Iterator<>() {
+
+                int column = 1;
+
+                @Override
+                public boolean hasNext() {
+                    try {
+                        return rows.getMetaData().getColumnCount() + 1 != column;
+                    } catch (final SQLException e) {
+                        throw new RuntimeException(e.getMessage(), e);
+                    }
+                }
+
+                @Override
+                public T2Tuple<String, V> next() {
+                    try {
+                        final J2Tuple<String, V> temp = new J2Tuple<>(rows.getMetaData().getColumnName(column), (V) rows.getObject(column));
+                        column++;
+                        return temp;
+                    } catch (final SQLException e) {
+                        throw new RuntimeException(e.getMessage(), e);
+                    }
+                }
+            };
+        } catch (final SQLException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+}
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/BlueprintsStructure.java b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCStructure.java
similarity index 60%
copy from java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/BlueprintsStructure.java
copy to java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCStructure.java
index 144439c..778a36b 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/BlueprintsStructure.java
+++ b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCStructure.java
@@ -16,39 +16,34 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.blueprints;
+package org.apache.tinkerpop.machine.structure.jdbc;
 
-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.bytecode.compiler.BlueprintsCompiler;
-import org.apache.tinkerpop.machine.structure.blueprints.strategy.provider.BlueprintsVerticesStrategy;
+import org.apache.tinkerpop.machine.structure.jdbc.strategy.JDBCStrategy;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class BlueprintsStructure implements StructureFactory {
+public class JDBCStructure implements StructureFactory {
 
-    private static final List<BytecodeCompiler> COMPILERS = List.of(BlueprintsCompiler.instance());
+    private final Map<String, Object> configuration;
 
-    @Override
-    public Structure mint(final Map<String, Object> configuration) {
-        return new Blueprints();
+    public JDBCStructure(final Map<String, Object> configuration) {
+        this.configuration = configuration;
     }
 
     @Override
     public Set<Strategy<?>> getStrategies() {
-        return Set.of(new BlueprintsVerticesStrategy());
+        return Set.of(new JDBCStrategy());
     }
 
     @Override
-    public List<BytecodeCompiler> getCompilers() {
-        return COMPILERS;
+    public Structure mint() {
+        return new JDBCDatabase((String) this.configuration.get("jdbc.connection"));
     }
-
 }
diff --git a/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTable.java b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTable.java
new file mode 100644
index 0000000..de8b46a
--- /dev/null
+++ b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTable.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.structure.jdbc;
+
+import org.apache.tinkerpop.machine.structure.table.TRow;
+import org.apache.tinkerpop.machine.structure.table.TTable;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Iterator;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+final class JDBCTable implements TTable {
+
+    private final Connection connection;
+    private final String name;
+
+    JDBCTable(final Connection connection, final String name) {
+        this.connection = connection;
+        this.name = name;
+    }
+
+    @Override
+    public Iterator<TRow<?>> iterator() {
+        try {
+            final ResultSet resultSet = this.connection.createStatement().executeQuery("SELECT * FROM " + this.name);
+            return new Iterator<>() {
+
+                private boolean done = false;
+
+                @Override
+                public boolean hasNext() {
+                    return !this.done;
+                }
+
+                @Override
+                public TRow<?> next() {
+                    try {
+                        resultSet.next();
+                        this.done = resultSet.isLast();
+                        return new JDBCRow<>(resultSet, resultSet.getRow());
+                    } catch (final SQLException e) {
+                        throw new RuntimeException(e.getMessage(), e);
+                    }
+                }
+            };
+        } catch (final SQLException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+}
diff --git a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/strategy/JDBCStrategy.java
similarity index 65%
copy from java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
copy to java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/strategy/JDBCStrategy.java
index 56a9b9c..84466cd 100644
--- a/java/machine/structure/blueprints/src/main/java/org/apache/tinkerpop/machine/structure/blueprints/strategy/provider/BlueprintsVerticesStrategy.java
+++ b/java/machine/structure/jdbc/src/main/java/org/apache/tinkerpop/machine/structure/jdbc/strategy/JDBCStrategy.java
@@ -16,28 +16,34 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.structure.blueprints.strategy.provider;
+package org.apache.tinkerpop.machine.structure.jdbc.strategy;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
-import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
+import org.apache.tinkerpop.machine.bytecode.compiler.CoreCompiler.Symbols;
 import org.apache.tinkerpop.machine.strategy.AbstractStrategy;
 import org.apache.tinkerpop.machine.strategy.Strategy;
-import org.apache.tinkerpop.machine.structure.blueprints.bytecode.compiler.BlueprintsCompiler;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class BlueprintsVerticesStrategy extends AbstractStrategy<Strategy.ProviderStrategy> implements Strategy.ProviderStrategy {
+public final class JDBCStrategy extends AbstractStrategy<Strategy.ProviderStrategy> implements Strategy.ProviderStrategy {
+
     @Override
     public <C> void apply(final Bytecode<C> bytecode) {
-        Instruction<C> temp = null;
+        Instruction<C> dbInstruction = null;
         for (final Instruction<C> instruction : bytecode.getInstructions()) {
-            if (instruction.op().equals(CoreCompiler.Symbols.V))
-                temp = instruction;
+            if (instruction.op().equals(Symbols.DB)) {
+                dbInstruction = instruction;
+            }
+        }
+        if (null != dbInstruction) {
+            BytecodeUtil.replaceInstruction(bytecode, dbInstruction,
+                    new Instruction<>(
+                            dbInstruction.coefficient(),
+                            Symbols.DB,
+                            BytecodeUtil.getStructureFactory(BytecodeUtil.getRootBytecode(bytecode)).get().mint()));
         }
-        if (null != temp)
-            BytecodeUtil.replaceInstruction(bytecode, temp, new Instruction<>(temp.coefficient(), BlueprintsCompiler.Symbols.BP_V));
     }
 }
diff --git a/java/machine/structure/jdbc/src/test/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTest.java b/java/machine/structure/jdbc/src/test/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTest.java
new file mode 100644
index 0000000..be9a7d2
--- /dev/null
+++ b/java/machine/structure/jdbc/src/test/java/org/apache/tinkerpop/machine/structure/jdbc/JDBCTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.structure.jdbc;
+
+import org.apache.tinkerpop.language.gremlin.Gremlin;
+import org.apache.tinkerpop.language.gremlin.P;
+import org.apache.tinkerpop.language.gremlin.TraversalSource;
+import org.apache.tinkerpop.machine.Machine;
+import org.apache.tinkerpop.machine.processor.pipes.PipesProcessor;
+import org.apache.tinkerpop.machine.species.BasicMachine;
+import org.junit.jupiter.api.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.Map;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class JDBCTest {
+
+    @Test
+    void doStuff2() throws Exception {
+        final Connection connection = DriverManager.getConnection("jdbc:h2:/tmp/test");
+        connection.createStatement().execute("CREATE TABLE IF NOT EXISTS people (\n" +
+                "    name VARCHAR(255) NOT NULL,\n" +
+                "    age TINYINT NOT NULL)");
+        //connection.createStatement().execute("INSERT INTO people(`name`,`age`) VALUES ('marko',29)");
+
+
+       /* final TDatabase db = new JDBCDatabase("jdbc:h2:/tmp/test");
+        System.out.println(db.has("people"));
+        final TTable table = db.value("people");
+        for (final TRow<?> row : table) {
+            row.entries().forEach(System.out::println);
+        }
+        */
+
+
+        ////////
+
+        final Machine machine = BasicMachine.open();
+        final TraversalSource<Long> jdbc =
+                Gremlin.<Long>traversal(machine).
+                        withProcessor(PipesProcessor.class).
+                        withStructure(JDBCStructure.class, Map.of("jdbc.connection", "jdbc:h2:/tmp/test"));
+        System.out.println(jdbc.db().values("people").hasKey(P.eq("age")).value("name").toList());
+    }
+}
diff --git a/java/machine/structure/pom.xml b/java/machine/structure/pom.xml
index 1dc2c29..13d48c2 100644
--- a/java/machine/structure/pom.xml
+++ b/java/machine/structure/pom.xml
@@ -26,5 +26,6 @@ limitations under the License.
     <artifactId>structure</artifactId>
     <modules>
         <module>blueprints</module>
+        <module>jdbc</module>
     </modules>
 </project>
\ No newline at end of file