You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2015/06/04 12:15:23 UTC

[09/43] incubator-tinkerpop git commit: removed AddEdgeByPathStep and AddEdgeStep... added new AddEdgeStep which is now Scoping and supports Scope.local (pull vertices from a Map -- e.g. select().addOutE('a', 'knows', 'b') and it supports Scope.global (pul

removed AddEdgeByPathStep and AddEdgeStep... added new AddEdgeStep which is now Scoping and supports Scope.local (pull vertices from a Map -- e.g. select().addOutE('a','knows','b') and it supports Scope.global (pull vertices from sideEffects and the path -- e.g. g.withSideEffect('v',v).V.out.addOutE('knows','v')). Had to twittle with a lot of stuff, but now AddEdgeStep is REALLY cool and consistent. Need to write more tests and update the docs.


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

Branch: refs/heads/preprocessor
Commit: c387430dfdc9e529b74d27d3b756dc42665b53f2
Parents: 16939e0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Jun 2 12:28:26 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Jun 2 12:28:26 2015 -0600

----------------------------------------------------------------------
 .../traversal/dsl/graph/GraphTraversal.java     |  40 ++----
 .../dsl/graph/GraphTraversalSource.java         |  13 +-
 .../gremlin/process/traversal/dsl/graph/__.java |  44 ++----
 .../gremlin/process/traversal/step/Scoping.java |   3 +
 .../traversal/step/filter/WhereStep.java        |   1 +
 .../traversal/step/map/AddEdgeByPathStep.java   | 139 -------------------
 .../process/traversal/step/map/AddEdgeStep.java | 122 +++++++++++-----
 .../traversal/step/map/SelectOneStep.java       |   1 +
 .../process/traversal/step/map/SelectStep.java  |   1 +
 .../traversal/step/map/match/MatchStep.java     |   5 +
 .../strategy/decoration/ElementIdStrategy.java  |  20 +--
 .../strategy/decoration/PartitionStrategy.java  |  30 ++--
 .../strategy/decoration/SubgraphStrategy.java   |   2 -
 .../strategy/finalization/ScopingStrategy.java  |  12 +-
 .../step/map/AddEdgeByPathStepTest.java         |  47 -------
 .../traversal/step/map/AddEdgeStepTest.java     |  18 +--
 .../ElementIdStrategyTraverseTest.java          |  17 +--
 .../PartitionStrategyTraverseTest.java          |  17 +--
 .../traversal/step/map/GroovyAddEdgeTest.groovy |   6 +-
 .../gremlin/groovy/loaders/StepLoader.groovy    |  12 ++
 .../traversal/step/filter/WhereTest.java        |   2 +-
 .../process/traversal/step/map/AddEdgeTest.java |   9 +-
 .../ElementIdStrategyProcessTest.java           |   8 +-
 .../decoration/EventStrategyProcessTest.java    |   4 +-
 .../PartitionStrategyProcessTest.java           |  17 +--
 25 files changed, 212 insertions(+), 378 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index acd2f6d..5a035b7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -55,7 +55,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.SimplePathStep
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TimeLimitStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceStep;
@@ -372,40 +371,23 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), keyValues));
     }
 
-    public default GraphTraversal<S, Edge> addE(final Direction direction, final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
-        return this.asAdmin().addStep(new AddEdgeByPathStep(this.asAdmin(), direction, edgeLabel, stepLabel, propertyKeyValues));
+    public default GraphTraversal<S, Edge> addE(final Scope scope, final Direction direction, final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        if (propertyKeyValues.length % 2 == 0)
+            return this.asAdmin().addStep(new AddEdgeStep<>(this.asAdmin(), scope, direction, null, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues));
+        else
+            return this.asAdmin().addStep(new AddEdgeStep<>(this.asAdmin(), scope, direction, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, (String) propertyKeyValues[0], Arrays.copyOfRange(propertyKeyValues, 1, propertyKeyValues.length)));
     }
 
-    public default GraphTraversal<S, Edge> addE(final Direction direction, final String edgeLabel, final Vertex otherVertex, final Object... propertyKeyValues) {
-        return this.asAdmin().addStep(new AddEdgeStep(this.asAdmin(), direction, edgeLabel, otherVertex, propertyKeyValues));
+    public default GraphTraversal<S, Edge> addE(final Direction direction, final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        return this.addE(Scope.global, direction, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues);
     }
 
-    public default GraphTraversal<S, Edge> addE(final Direction direction, final String edgeLabel, final Iterator<Vertex> otherVertices, final Object... propertyKeyValues) {
-        return this.asAdmin().addStep(new AddEdgeStep(this.asAdmin(), direction, edgeLabel, otherVertices, propertyKeyValues));
+    public default GraphTraversal<S, Edge> addOutE(final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        return this.addE(Scope.global, Direction.OUT, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues);
     }
 
-    public default GraphTraversal<S, Edge> addInE(final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
-        return this.addE(Direction.IN, edgeLabel, stepLabel, propertyKeyValues);
-    }
-
-    public default GraphTraversal<S, Edge> addInE(final String edgeLabel, final Vertex otherVertex, final Object... propertyKeyValues) {
-        return this.addE(Direction.IN, edgeLabel, otherVertex, propertyKeyValues);
-    }
-
-    public default GraphTraversal<S, Edge> addInE(final String edgeLabel, final Iterator<Vertex> otherVertices, final Object... propertyKeyValues) {
-        return this.addE(Direction.IN, edgeLabel, otherVertices, propertyKeyValues);
-    }
-
-    public default GraphTraversal<S, Edge> addOutE(final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
-        return this.addE(Direction.OUT, edgeLabel, stepLabel, propertyKeyValues);
-    }
-
-    public default GraphTraversal<S, Edge> addOutE(final String edgeLabel, final Vertex otherVertex, final Object... propertyKeyValues) {
-        return this.addE(Direction.OUT, edgeLabel, otherVertex, propertyKeyValues);
-    }
-
-    public default GraphTraversal<S, Edge> addOutE(final String edgeLabel, final Iterator<Vertex> otherVertices, final Object... propertyKeyValues) {
-        return this.addE(Direction.OUT, edgeLabel, otherVertices, propertyKeyValues);
+    public default GraphTraversal<S, Edge> addInE(final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        return this.addE(Scope.global, Direction.IN, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues);
     }
 
     ///////////////////// FILTER STEPS /////////////////////

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 0bbbf6f..59b9b18 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -107,12 +107,18 @@ public class GraphTraversalSource implements TraversalSource {
 
     //// UTILITIES
 
-    public <S> GraphTraversalSourceStub withSideEffect(final String key, final Supplier supplier) {
+    public GraphTraversalSourceStub withSideEffect(final String key, final Supplier supplier) {
         final GraphTraversal.Admin traversal = this.generateTraversal();
         traversal.getSideEffects().registerSupplier(key, supplier);
         return new GraphTraversalSourceStub(traversal, false);
     }
 
+    public GraphTraversalSourceStub withSideEffect(final String key, final Object object) {
+        final GraphTraversal.Admin traversal = this.generateTraversal();
+        traversal.getSideEffects().registerSupplier(key, new ConstantSupplier<>(object));
+        return new GraphTraversalSourceStub(traversal, false);
+    }
+
     public <A> GraphTraversalSourceStub withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator) {
         final GraphTraversal.Admin traversal = this.generateTraversal();
         traversal.getSideEffects().setSack(initialValue, Optional.of(splitOperator));
@@ -244,6 +250,11 @@ public class GraphTraversalSource implements TraversalSource {
             return this;
         }
 
+        public GraphTraversalSourceStub withSideEffect(final String key, final Object object) {
+            this.traversal.getSideEffects().registerSupplier(key, new ConstantSupplier<>(object));
+            return this;
+        }
+
         public <A> GraphTraversalSourceStub withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator) {
             this.traversal.getSideEffects().setSack(initialValue, Optional.of(splitOperator));
             return this;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 9ee23e7..b290051 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -172,7 +172,7 @@ public class __ {
         return __.<A>start().path();
     }
 
-    public static <A, B> GraphTraversal<A, Map<String, B>> match(final String startLabel, final Traversal<?,?>... traversals) {
+    public static <A, B> GraphTraversal<A, Map<String, B>> match(final String startLabel, final Traversal<?, ?>... traversals) {
         return __.<A>start().match(startLabel, traversals);
     }
 
@@ -264,40 +264,20 @@ public class __ {
         return __.<A>start().addV(propertyKeyValues);
     }
 
-    public static <A> GraphTraversal<A, Edge> addE(final Direction direction, final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
-        return __.<A>start().addE(direction, edgeLabel, stepLabel, propertyKeyValues);
+    public static <A> GraphTraversal<A, Edge> addE(final Scope scope, final Direction direction, final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        return __.<A>start().addE(scope, direction, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues);
     }
 
-    public static <A> GraphTraversal<A, Edge> addE(final Direction direction, final String edgeLabel, final Vertex otherVertex, final Object... propertyKeyValues) {
-        return __.<A>start().addE(direction, edgeLabel, otherVertex, propertyKeyValues);
+    public static <A> GraphTraversal<A, Edge> addE(final Direction direction, final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        return __.<A>start().addE(direction, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues);
     }
 
-    public static <A> GraphTraversal<A, Edge> addE(final Direction direction, final String edgeLabel, final Iterator<Vertex> otherVertices, final Object... propertyKeyValues) {
-        return __.<A>start().addE(direction, edgeLabel, otherVertices, propertyKeyValues);
+    public static <A> GraphTraversal<A, Edge> addOutE(final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        return __.<A>start().addOutE(firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues);
     }
 
-    public static <A> GraphTraversal<A, Edge> addInE(final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
-        return __.<A>start().addInE(edgeLabel, stepLabel, propertyKeyValues);
-    }
-
-    public static <A> GraphTraversal<A, Edge> addInE(final String edgeLabel, final Vertex otherVertex, final Object... propertyKeyValues) {
-        return __.<A>start().addInE(edgeLabel, otherVertex, propertyKeyValues);
-    }
-
-    public static <A> GraphTraversal<A, Edge> addInE(final String edgeLabel, final Iterator<Vertex> otherVertices, final Object... propertyKeyValues) {
-        return __.<A>start().addInE(edgeLabel, otherVertices, propertyKeyValues);
-    }
-
-    public static <A> GraphTraversal<A, Edge> addOutE(final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
-        return __.<A>start().addOutE(edgeLabel, stepLabel, propertyKeyValues);
-    }
-
-    public static <A> GraphTraversal<A, Edge> addOutE(final String edgeLabel, final Vertex otherVertex, final Object... propertyKeyValues) {
-        return __.<A>start().addOutE(edgeLabel, otherVertex, propertyKeyValues);
-    }
-
-    public static <A> GraphTraversal<A, Edge> addOutE(final String edgeLabel, final Iterator<Vertex> otherVertices, final Object... propertyKeyValues) {
-        return __.<A>start().addOutE(edgeLabel, otherVertices, propertyKeyValues);
+    public static <A> GraphTraversal<A, Edge> addInE(final String firstVertexKeyOrEdgeLabel, final String edgeLabelOrSecondVertexKey, final Object... propertyKeyValues) {
+        return __.<A>start().addInE(firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey, propertyKeyValues);
     }
 
     ///////////////////// FILTER STEPS /////////////////////
@@ -350,7 +330,7 @@ public class __ {
         return __.<A>start().has(label, key, predicate);
     }
 
-    public static <A> GraphTraversal<A, A> has(final String key, final Traversal<?,?> propertyTraversal) {
+    public static <A> GraphTraversal<A, A> has(final String key, final Traversal<?, ?> propertyTraversal) {
         return __.<A>start().has(key, propertyTraversal);
     }
 
@@ -386,7 +366,7 @@ public class __ {
         return __.<A>start().where(scope, predicate);
     }
 
-    public static <A> GraphTraversal<A, A> where(final Scope scope, final Traversal<?,?> whereTraversal) {
+    public static <A> GraphTraversal<A, A> where(final Scope scope, final Traversal<?, ?> whereTraversal) {
         return __.<A>start().where(scope, whereTraversal);
     }
 
@@ -398,7 +378,7 @@ public class __ {
         return __.<A>start().where(predicate);
     }
 
-    public static <A> GraphTraversal<A, A> where(final Traversal<?,?> whereTraversal) {
+    public static <A> GraphTraversal<A, A> where(final Traversal<?, ?> whereTraversal) {
         return __.<A>start().where(whereTraversal);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Scoping.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Scoping.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Scoping.java
index dd536f2..bb086e6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Scoping.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Scoping.java
@@ -29,4 +29,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 public interface Scoping {
 
     public Scope recommendNextScope();
+
+    public void setScope(final Scope scope);
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index 2fbe5e5..8293867 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -113,6 +113,7 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
                 TraverserRequirement.OBJECT : TraverserRequirement.OBJECT, TraverserRequirement.PATH, TraverserRequirement.SIDE_EFFECTS);
     }
 
+    @Override
     public void setScope(final Scope scope) {
         this.scope = scope;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStep.java
deleted file mode 100644
index 5918dd5..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStep.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.step.map;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-
-import java.util.*;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public final class AddEdgeByPathStep extends MapStep<Vertex, Edge> implements Mutating<EventCallback<Event.EdgeAddedEvent>> {
-
-    private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
-            TraverserRequirement.PATH,
-            TraverserRequirement.OBJECT
-    );
-
-    private List<EventCallback<Event.EdgeAddedEvent>> callbacks = null;
-
-    // TODO: Weight key based on Traverser.getCount() ?
-
-    private final Direction direction;
-    private final String edgeLabel;
-    private final String stepLabel;
-    private final Object[] keyValues;
-
-    public AddEdgeByPathStep(final Traversal.Admin traversal, final Direction direction, final String edgeLabel, final String stepLabel, final Object... keyValues) {
-        super(traversal);
-        this.direction = direction;
-        if (this.direction.equals(Direction.BOTH))
-            throw new IllegalArgumentException("Only in- and out- directions are supported by " + AddEdgeByPathStep.class.getSimpleName());
-        this.edgeLabel = edgeLabel;
-        this.stepLabel = stepLabel;
-        this.keyValues = keyValues;
-    }
-
-    public Direction getDirection() {
-        return direction;
-    }
-
-    public String getEdgeLabel() {
-        return edgeLabel;
-    }
-
-    public String getStepLabel() {
-        return stepLabel;
-    }
-
-    public Object[] getKeyValues() {
-        return keyValues;
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.stepString(this, this.direction.name(), this.edgeLabel, this.stepLabel);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = super.hashCode() ^ this.direction.hashCode() ^ this.edgeLabel.hashCode() ^ this.stepLabel.hashCode();
-        for (final Object item : this.keyValues) {
-            result ^= item.hashCode();
-        }
-        return result;
-    }
-
-    @Override
-    protected Edge map(final Traverser.Admin<Vertex> traverser) {
-        final Vertex currentVertex = traverser.get();
-        final Vertex otherVertex = traverser.path().get(this.stepLabel);
-
-        Edge e;
-        if (this.direction.equals(Direction.IN))
-            e = otherVertex.addEdge(this.edgeLabel, currentVertex, this.keyValues);
-        else
-            e = currentVertex.addEdge(this.edgeLabel, otherVertex, this.keyValues);
-
-        if (callbacks != null) {
-            final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(e, true));
-            callbacks.forEach(c -> c.accept(vae));
-        }
-
-        return e;
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return REQUIREMENTS;
-    }
-
-    @Override
-    public void addCallback(final EventCallback<Event.EdgeAddedEvent> edgeAddedEventEventCallback) {
-        if (callbacks == null) callbacks = new ArrayList<>();
-        callbacks.add(edgeAddedEventEventCallback);
-    }
-
-    @Override
-    public void removeCallback(final EventCallback<Event.EdgeAddedEvent> edgeAddedEventEventCallback) {
-        if (callbacks != null) callbacks.remove(edgeAddedEventEventCallback);
-    }
-
-    @Override
-    public void clearCallbacks() {
-        if (callbacks != null) callbacks.clear();
-    }
-
-    @Override
-    public List<EventCallback<Event.EdgeAddedEvent>> getCallbacks() {
-        return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
index 426aa2d..0b9ad11 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
@@ -18,83 +18,125 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.EventCallback;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public final class AddEdgeStep extends FlatMapStep<Vertex, Edge> implements Mutating<EventCallback<Event.EdgeAddedEvent>> {
+public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Scoping, Mutating<EventCallback<Event.EdgeAddedEvent>> {
 
-    private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT);
+    private static final Set<TraverserRequirement> LOCAL_REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT);
+    private static final Set<TraverserRequirement> GLOBAL_REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT, TraverserRequirement.PATH, TraverserRequirement.SIDE_EFFECTS);
 
-    private final String edgeLabel;
-    private final Object[] keyValues;
-    private final List<Vertex> vertices;
+    private Scope scope;
     private final Direction direction;
+    private final String firstVertexKey;
+    private final String edgeLabel;
+    private final String secondVertexKey;
+    private final Object[] propertyKeyValues;
 
     private List<EventCallback<Event.EdgeAddedEvent>> callbacks = null;
 
-    public AddEdgeStep(final Traversal.Admin traversal, final Direction direction, final String edgeLabel, final Vertex vertex, final Object... keyValues) {
-        this(traversal, direction, edgeLabel, IteratorUtils.of(vertex), keyValues);
-    }
-
-    public AddEdgeStep(final Traversal.Admin traversal, final Direction direction, final String edgeLabel, final Iterator<Vertex> vertices, final Object... keyValues) {
+    public AddEdgeStep(final Traversal.Admin traversal, final Scope scope, final Direction direction, final String firstVertexKey, final String edgeLabel, final String secondVertexKey, final Object... propertyKeyValues) {
         super(traversal);
+        this.scope = scope;
         this.direction = direction;
+        this.firstVertexKey = firstVertexKey;
         this.edgeLabel = edgeLabel;
-        this.vertices = IteratorUtils.list(vertices);
-        this.keyValues = keyValues;
+        this.secondVertexKey = secondVertexKey;
+        this.propertyKeyValues = propertyKeyValues;
     }
 
     public Direction getDirection() {
         return direction;
     }
 
+    public String getFirstVertexKey() {
+        return this.firstVertexKey;
+    }
+
     public String getEdgeLabel() {
         return edgeLabel;
     }
 
-    public Object[] getKeyValues() {
-        return keyValues;
+    public String getSecondVertexKey() {
+        return this.secondVertexKey;
     }
 
-    public List<Vertex> getVertices() {
-        return vertices;
+    public Object[] getPropertyKeyValues() {
+        return this.propertyKeyValues;
     }
 
     @Override
-    protected Iterator<Edge> flatMap(final Traverser.Admin<Vertex> traverser) {
-        return IteratorUtils.map(this.vertices.iterator(), vertex -> {
-            final Edge e = this.direction.equals(Direction.OUT) ?
-                    traverser.get().addEdge(this.edgeLabel, vertex, this.keyValues) :
-                    vertex.addEdge(this.edgeLabel, traverser.get(), this.keyValues);
+    protected Iterator<Edge> flatMap(final Traverser.Admin<S> traverser) {
+        final Object firstVertex = null == this.firstVertexKey ? (Vertex) traverser.get() : Scope.getScopeValueByKey(this.scope, this.firstVertexKey, traverser);
+        final Object secondVertex = null == this.secondVertexKey ? (Vertex) traverser.get() : Scope.getScopeValueByKey(this.scope, this.secondVertexKey, traverser);
+        final Object finalFirstVertex = firstVertex instanceof Iterable ? ((Iterable) firstVertex).iterator() : firstVertex;
+        final Object finalSecondVertex = secondVertex instanceof Iterable ? ((Iterable) secondVertex).iterator() : secondVertex;
+
+        if (finalFirstVertex instanceof Iterator || finalSecondVertex instanceof Iterator) {
+            if (finalFirstVertex instanceof Iterator) {
+                return IteratorUtils.map((Iterator<Vertex>) finalFirstVertex, vertex -> {
+                    final Edge edge = this.direction.equals(Direction.OUT) ?
+                            vertex.addEdge(this.edgeLabel, (Vertex) finalSecondVertex, this.propertyKeyValues) :
+                            ((Vertex) finalSecondVertex).addEdge(this.edgeLabel, vertex, this.propertyKeyValues);
+
+                    if (callbacks != null) {
+                        final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
+                        callbacks.forEach(c -> c.accept(vae));
+                    }
+                    return edge;
+                });
+            } else {
+                return IteratorUtils.map((Iterator<Vertex>) finalSecondVertex, vertex -> {
+                    final Edge edge = this.direction.equals(Direction.OUT) ?
+                            ((Vertex) finalFirstVertex).addEdge(this.edgeLabel, vertex, this.propertyKeyValues) :
+                            vertex.addEdge(this.edgeLabel, ((Vertex) finalFirstVertex), this.propertyKeyValues);
+
+                    if (callbacks != null) {
+                        final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
+                        callbacks.forEach(c -> c.accept(vae));
+                    }
+                    return edge;
+                });
+            }
+        } else {
+            final Edge edge = this.direction.equals(Direction.OUT) ?
+                    ((Vertex) firstVertex).addEdge(this.edgeLabel, (Vertex) secondVertex, this.propertyKeyValues) :
+                    ((Vertex) secondVertex).addEdge(this.edgeLabel, (Vertex) firstVertex, this.propertyKeyValues);
 
             if (callbacks != null) {
-                final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(e, true));
+                final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
                 callbacks.forEach(c -> c.accept(vae));
             }
 
-            return e;
-        });
+            return IteratorUtils.of(edge);
+        }
     }
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        return REQUIREMENTS;
+        return Scope.local == this.scope ? LOCAL_REQUIREMENTS : GLOBAL_REQUIREMENTS;
     }
 
     @Override
@@ -118,15 +160,31 @@ public final class AddEdgeStep extends FlatMapStep<Vertex, Edge> implements Muta
         return (callbacks != null) ? Collections.unmodifiableList(callbacks) : Collections.emptyList();
     }
 
+
     @Override
     public int hashCode() {
         int result = super.hashCode() ^ this.direction.hashCode() ^ this.edgeLabel.hashCode();
-        for (final Vertex vertex : this.vertices) {
-            result ^= ElementHelper.hashCode(vertex);
-        }
-        for (final Object item : this.keyValues) {
-            result ^= item.hashCode();
+        if (null != this.firstVertexKey)
+            result ^= this.firstVertexKey.hashCode();
+        if (null != this.secondVertexKey)
+            result ^= this.secondVertexKey.hashCode();
+        for (final Object object : this.propertyKeyValues) {
+            result ^= object.hashCode();
         }
         return result;
     }
+
+    @Override
+    public void setScope(final Scope scope) {
+        this.scope = scope;
+    }
+
+    @Override
+    public Scope recommendNextScope() {
+        return this.scope;
+    }
+
+    public Scope getScope() {
+        return this.scope;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
index 94e75d8..21ef76c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
@@ -86,6 +86,7 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
         return this.getSelfAndChildRequirements(this.scope == Scope.local ? TraverserRequirement.OBJECT : TraverserRequirement.PATH);
     }
 
+    @Override
     public void setScope(final Scope scope) {
         this.scope = scope;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 77c0174..dbac25c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -113,6 +113,7 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
         return this.getSelfAndChildRequirements(this.scope == Scope.local ? TraverserRequirement.OBJECT : TraverserRequirement.PATH);
     }
 
+    @Override
     public void setScope(final Scope scope) {
         this.scope = scope;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
index 19794a1..831e28f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
@@ -411,6 +411,11 @@ public final class MatchStep<S, E> extends AbstractStep<S, Map<String, E>> imple
         return Scope.local;
     }
 
+    @Override
+    public void setScope(final Scope scope) {
+
+    }
+
     /**
      * A wrapper for a traversal in a query which maintains statistics about the traversal as
      * it consumes inputs and produces outputs.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
index eb5e866..a3b4b2d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
@@ -18,11 +18,11 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
+import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.HasContainerHolder;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
@@ -33,7 +33,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.structure.PropertyType;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
@@ -125,20 +124,11 @@ public final class ElementIdStrategy extends AbstractTraversalStrategy<Traversal
         });
 
         TraversalHelper.getStepsOfAssignableClass(AddEdgeStep.class, traversal).stream().forEach(s -> {
-            if (ElementHelper.getIdValue(s.getKeyValues()).isPresent())
-                TraversalHelper.replaceStep(s, new AddEdgeStep(traversal, s.getDirection(), s.getEdgeLabel(), s.getVertices().iterator(), ElementHelper.replaceKey(s.getKeyValues(), T.id, idPropertyKey)), traversal);
-            else {
-                final Object[] kvs = ElementHelper.getKeys(s.getKeyValues()).contains(idPropertyKey) ? s.getKeyValues() : ElementHelper.upsert(s.getKeyValues(), idPropertyKey, idMaker.get());
-                TraversalHelper.replaceStep(s, new AddEdgeStep(traversal, s.getDirection(), s.getEdgeLabel(), s.getVertices().iterator(), kvs), traversal);
-            }
-        });
-
-        TraversalHelper.getStepsOfAssignableClass(AddEdgeByPathStep.class, traversal).stream().forEach(s -> {
-            if (ElementHelper.getIdValue(s.getKeyValues()).isPresent())
-                TraversalHelper.replaceStep(s, new AddEdgeByPathStep(traversal, s.getDirection(), s.getEdgeLabel(), s.getStepLabel(), ElementHelper.replaceKey(s.getKeyValues(), T.id, idPropertyKey)), traversal);
+            if (ElementHelper.getIdValue(s.getPropertyKeyValues()).isPresent())
+                TraversalHelper.replaceStep(s, new AddEdgeStep(traversal, s.getScope(), s.getDirection(), s.getFirstVertexKey(), s.getEdgeLabel(), s.getSecondVertexKey(), ElementHelper.replaceKey(s.getPropertyKeyValues(), T.id, idPropertyKey)), traversal);
             else {
-                final Object[] kvs = ElementHelper.getKeys(s.getKeyValues()).contains(idPropertyKey) ? s.getKeyValues() : ElementHelper.upsert(s.getKeyValues(), idPropertyKey, idMaker.get());
-                TraversalHelper.replaceStep(s, new AddEdgeByPathStep(traversal, s.getDirection(), s.getEdgeLabel(), s.getStepLabel(), kvs), traversal);
+                final Object[] kvs = ElementHelper.getKeys(s.getPropertyKeyValues()).contains(idPropertyKey) ? s.getPropertyKeyValues() : ElementHelper.upsert(s.getPropertyKeyValues(), idPropertyKey, idMaker.get());
+                TraversalHelper.replaceStep(s, new AddEdgeStep(traversal, s.getScope(), s.getDirection(), s.getFirstVertexKey(), s.getEdgeLabel(), s.getSecondVertexKey(), kvs), traversal);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
index fc7a310..64ceae4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
@@ -18,18 +18,27 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
+import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.*;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeOtherVertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 import java.util.stream.Stream;
 
 /**
@@ -79,13 +88,8 @@ public final class PartitionStrategy extends AbstractTraversalStrategy<Traversal
 
         // all write edge steps need to have partition keys tossed into the property key/value list after mutating steps
         TraversalHelper.getStepsOfAssignableClass(AddEdgeStep.class, traversal).forEach(s -> {
-            final Object[] keyValues = injectPartitionInfo(s.getKeyValues());
-            TraversalHelper.replaceStep(s, new AddEdgeStep(traversal, s.getDirection(), s.getEdgeLabel(), s.getVertices().iterator(), keyValues), traversal);
-        });
-
-        TraversalHelper.getStepsOfAssignableClass(AddEdgeByPathStep.class, traversal).forEach(s -> {
-            final Object[] keyValues = injectPartitionInfo(s.getKeyValues());
-            TraversalHelper.replaceStep(s, new AddEdgeByPathStep(traversal, s.getDirection(), s.getEdgeLabel(), s.getStepLabel(), keyValues), traversal);
+            final Object[] keyValues = injectPartitionInfo(s.getPropertyKeyValues());
+            TraversalHelper.replaceStep(s, new AddEdgeStep(traversal, s.getScope(), s.getDirection(), s.getFirstVertexKey(), s.getEdgeLabel(), s.getSecondVertexKey(), keyValues), traversal);
         });
 
         // all write vertex steps need to have partition keys tossed into the property key/value list after mutating steps
@@ -109,7 +113,8 @@ public final class PartitionStrategy extends AbstractTraversalStrategy<Traversal
         private String partitionKey;
         private Set<String> readPartitions = new HashSet<>();
 
-        Builder() {}
+        Builder() {
+        }
 
         public Builder writePartition(final String writePartition) {
             this.writePartition = writePartition;
@@ -127,7 +132,8 @@ public final class PartitionStrategy extends AbstractTraversalStrategy<Traversal
         }
 
         public PartitionStrategy create() {
-            if (partitionKey == null || partitionKey.isEmpty()) throw new IllegalStateException("The partitionKey cannot be null or empty");
+            if (partitionKey == null || partitionKey.isEmpty())
+                throw new IllegalStateException("The partitionKey cannot be null or empty");
 
             return new PartitionStrategy(this.partitionKey, this.writePartition, this.readPartitions);
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
index c04daa6..d5c0900 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
@@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
@@ -95,7 +94,6 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
         if (edgeCriterion != null) {
             final List<Step> edgeStepsToInsertFilterAfter = new ArrayList<>();
             edgeStepsToInsertFilterAfter.addAll(TraversalHelper.getStepsOfAssignableClass(AddEdgeStep.class, traversal));
-            edgeStepsToInsertFilterAfter.addAll(TraversalHelper.getStepsOfAssignableClass(AddEdgeByPathStep.class, traversal));
             edgeStepsToInsertFilterAfter.addAll(graphSteps.stream().filter(GraphStep::returnsEdge).collect(Collectors.toList()));
             edgeStepsToInsertFilterAfter.addAll(vertexSteps.stream().filter(VertexStep::returnsEdge).collect(Collectors.toList()));
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ScopingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ScopingStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ScopingStrategy.java
index 35640c4..40f8e10 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ScopingStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/ScopingStrategy.java
@@ -24,9 +24,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectOneStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 
 /**
@@ -42,13 +39,8 @@ public final class ScopingStrategy extends AbstractTraversalStrategy<TraversalSt
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
         traversal.getSteps().stream().forEach(step -> {
-            if (step.getPreviousStep() instanceof Scoping) {
-                if (step instanceof SelectStep)
-                    ((SelectStep) step).setScope(((Scoping) step.getPreviousStep()).recommendNextScope());
-                else if (step instanceof SelectOneStep)
-                    ((SelectOneStep) step).setScope(((Scoping) step.getPreviousStep()).recommendNextScope());
-                else if (step instanceof WhereStep)
-                    ((WhereStep) step).setScope(((Scoping) step.getPreviousStep()).recommendNextScope());
+            if (step instanceof Scoping && step.getPreviousStep() instanceof Scoping) {
+                ((Scoping) step).setScope(((Scoping) step.getPreviousStep()).recommendNextScope());
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStepTest.java
deleted file mode 100644
index e9a16b4..0000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeByPathStepTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *
- *  * Licensed to the Apache Software Foundation (ASF) under one
- *  * or more contributor license agreements.  See the NOTICE file
- *  * distributed with this work for additional information
- *  * regarding copyright ownership.  The ASF licenses this file
- *  * to you under the Apache License, Version 2.0 (the
- *  * "License"); you may not use this file except in compliance
- *  * with the License.  You may obtain a copy of the License at
- *  *
- *  * http://www.apache.org/licenses/LICENSE-2.0
- *  *
- *  * Unless required by applicable law or agreed to in writing,
- *  * software distributed under the License is distributed on an
- *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  * KIND, either express or implied.  See the License for the
- *  * specific language governing permissions and limitations
- *  * under the License.
- *
- */
-
-package org.apache.tinkerpop.gremlin.process.traversal.step.map;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.StepTest;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author Daniel Kuppitz (http://gremlin.guru)
- */
-public class AddEdgeByPathStepTest extends StepTest {
-
-    @Override
-    protected List<Traversal> getTraversals() {
-        return Arrays.asList(
-                __.addE(Direction.IN, "knows", "x"),
-                __.addE(Direction.IN, "knows", "y"),
-                __.addE(Direction.OUT, "knows", "x"),
-                __.addE(Direction.IN, "knows", "x", "weight", 0),
-                __.addE(Direction.IN, "knows", "x", "weight", 1)
-        );
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
index 2ee463c..204f5cd 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
@@ -25,11 +25,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.StepTest;
 import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
 
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -39,17 +36,12 @@ public class AddEdgeStepTest extends StepTest {
 
     @Override
     protected List<Traversal> getTraversals() {
-        final Vertex v1 = new DetachedVertex(1, Vertex.DEFAULT_LABEL, new HashMap<>());
-        final Vertex v2 = new DetachedVertex(2, Vertex.DEFAULT_LABEL, new HashMap<>());
-        final List<Vertex> v = Arrays.asList(v1, v2);
         return Arrays.asList(
-                __.addE(Direction.IN, "knows", v1),
-                __.addE(Direction.IN, "knows", v2),
-                __.addE(Direction.IN, "knows", v.iterator()),
-                __.addE(Direction.OUT, "knows", v1),
-                __.addE(Direction.IN, "knows", v1, "weight", 0),
-                __.addE(Direction.IN, "knows", v1, "weight", 1),
-                __.addE(Direction.IN, "knows", v.iterator(), "weight", 0)
+                __.addE(Direction.IN, "knows", "x"),
+                __.addE(Direction.IN, "knows", "y"),
+                __.addE(Direction.OUT, "knows", "x"),
+                __.addE(Direction.IN, "knows", "x", "weight", 0),
+                __.addE(Direction.IN, "knows", "x", "weight", 1)
         );
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java
index 75dca11..f3ad539 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyTraverseTest.java
@@ -22,7 +22,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
@@ -38,9 +37,7 @@ import org.junit.runners.Parameterized;
 
 import java.util.Arrays;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.*;
 import static org.mockito.Mockito.mock;
 
 /**
@@ -94,15 +91,13 @@ public class ElementIdStrategyTraverseTest {
         strategy.apply(traversal.asAdmin());
 
         final Step s = (Step) traversal.asAdmin().getSteps().get(expectedInsertedSteps);
-        if(s instanceof AddVertexStep)
+        if (s instanceof AddVertexStep)
             assertTrue(ElementHelper.getKeys(((AddVertexStep) s).getKeyValues()).contains(strategy.getIdPropertyKey()));
-        else if(s instanceof AddVertexStartStep)
+        else if (s instanceof AddVertexStartStep)
             assertTrue(ElementHelper.getKeys(((AddVertexStartStep) s).getKeyValues()).contains(strategy.getIdPropertyKey()));
-        else if(s instanceof AddEdgeByPathStep)
-            assertTrue(ElementHelper.getKeys(((AddEdgeByPathStep) s).getKeyValues()).contains(strategy.getIdPropertyKey()));
-        else if(s instanceof AddEdgeStep)
-            assertTrue(ElementHelper.getKeys(((AddEdgeStep) s).getKeyValues()).contains(strategy.getIdPropertyKey()));
-        else if(s instanceof PropertiesStep)
+        else if (s instanceof AddEdgeStep)
+            assertTrue(ElementHelper.getKeys(((AddEdgeStep) s).getPropertyKeyValues()).contains(strategy.getIdPropertyKey()));
+        else if (s instanceof PropertiesStep)
             assertEquals(strategy.getIdPropertyKey(), ((PropertiesStep) s).getPropertyKeys()[0]);
         else
             fail("Check test definition - the expectedInsertedSteps should be the index of the step to trigger the ID substitution");

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTraverseTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTraverseTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTraverseTest.java
index 6dccc9c..97ecd94 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTraverseTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTraverseTest.java
@@ -18,18 +18,17 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
+import org.apache.tinkerpop.gremlin.process.traversal.Contains;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.Contains;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -43,9 +42,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.*;
 import static org.mockito.Mockito.mock;
 
 /**
@@ -118,21 +115,21 @@ public class PartitionStrategyTraverseTest {
                 assertEquals(1, addEdgeSteps.size());
 
                 addEdgeSteps.forEach(s -> {
-                    final Object[] keyValues = s.getKeyValues();
+                    final Object[] keyValues = s.getPropertyKeyValues();
                     final List<Pair<String, Object>> pairs = ElementHelper.asPairs(keyValues);
                     assertEquals("test", s.getEdgeLabel());
                     assertEquals(d, s.getDirection());
                     assertTrue(pairs.stream().anyMatch(p -> p.getValue0().equals("p") && p.getValue1().equals("a")));
                 });
-            } else if (TraversalHelper.hasStepOfAssignableClass(AddEdgeByPathStep.class, traversal.asAdmin())) {
-                final Direction d = TraversalHelper.getStepsOfClass(AddEdgeByPathStep.class, traversal.asAdmin()).get(0).getDirection();
+            } else if (TraversalHelper.hasStepOfAssignableClass(AddEdgeStep.class, traversal.asAdmin())) {
+                final Direction d = TraversalHelper.getStepsOfClass(AddEdgeStep.class, traversal.asAdmin()).get(0).getDirection();
                 strategy.apply(traversal.asAdmin());
 
-                final List<AddEdgeByPathStep> addEdgeSteps = TraversalHelper.getStepsOfAssignableClass(AddEdgeByPathStep.class, traversal.asAdmin());
+                final List<AddEdgeStep> addEdgeSteps = TraversalHelper.getStepsOfAssignableClass(AddEdgeStep.class, traversal.asAdmin());
                 assertEquals(1, addEdgeSteps.size());
 
                 addEdgeSteps.forEach(s -> {
-                    final Object[] keyValues = s.getKeyValues();
+                    final Object[] keyValues = s.getPropertyKeyValues();
                     final List<Pair<String, Object>> pairs = ElementHelper.asPairs(keyValues);
                     assertEquals("test", s.getEdgeLabel());
                     assertEquals(d, s.getDirection());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
index 5efe44f..6df5aa3 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
@@ -18,8 +18,8 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.map
 
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptHelper
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptHelper
 import org.apache.tinkerpop.gremlin.structure.Edge
 import org.apache.tinkerpop.gremlin.structure.Vertex
 
@@ -42,8 +42,8 @@ public abstract class GroovyAddEdgeTest {
         }
 
         @Override
-        public Traversal<Vertex, Edge> get_g_V_addOutEXexistsWith__g_V__time_nowX() {
-            TraversalScriptHelper.compute("g.V.addOutE('existsWith', g.V, 'time', 'now')", g)
+        public Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX() {
+            TraversalScriptHelper.compute("g.withSideEffect('x',g.V.toList()).V.addOutE('existsWith', 'x', 'time', 'now')", g)
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/StepLoader.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/StepLoader.groovy b/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/StepLoader.groovy
index ecba410..889c118 100644
--- a/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/StepLoader.groovy
+++ b/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/StepLoader.groovy
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.groovy.function.GSupplier
 import org.apache.tinkerpop.gremlin.groovy.function.GUnaryOperator
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource
+import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -36,6 +37,10 @@ class StepLoader {
             return ((GraphTraversal) delegate).by(1 == closure.getMaximumNumberOfParameters() ? new GFunction(closure) : new GComparator(closure));
         }
 
+        GraphTraversalSource.metaClass.withSideEffect = { final String key, final Object object ->
+            return ((GraphTraversalSource) delegate).withSideEffect(key, object instanceof Closure ? new GSupplier((Closure) object) : new ConstantSupplier<>(object));
+        }
+
         GraphTraversalSource.metaClass.withSack = { final Closure closure ->
             return ((GraphTraversalSource) delegate).withSack(new GSupplier(closure));
         }
@@ -44,6 +49,13 @@ class StepLoader {
             return ((GraphTraversalSource) delegate).withSack(new GSupplier(closure), new GUnaryOperator(operator));
         }
 
+        ///////////////////
+
+        GraphTraversalSource.GraphTraversalSourceStub.metaClass.withSideEffect = {
+            final String key, final Object object ->
+                return (((GraphTraversalSource.GraphTraversalSourceStub) delegate).withSideEffect(key, object instanceof Closure ? new GSupplier((Closure) object) : new ConstantSupplier<>(object)));
+        }
+
         GraphTraversalSource.GraphTraversalSourceStub.metaClass.withSack = { final Closure closure ->
             return ((GraphTraversalSource.GraphTraversalSourceStub) delegate).withSack(new GSupplier(closure));
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index e2f798c..d7c4ad1 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -320,7 +320,7 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Vertex> get_g_withSideEffectXa_graph_verticesX2XX_VX1X_out_whereXneqXaXX(final Object v1Id, final Object v2Id) {
-            return g.withSideEffect("a", () -> graph.vertices(v2Id).next()).V(v1Id).out().where(neq("a"));
+            return g.withSideEffect("a", graph.vertices(v2Id).next()).V(v1Id).out().where(neq("a"));
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
index 66a3808..bf44370 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
@@ -23,7 +23,6 @@ import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -46,7 +45,7 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Edge> get_g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_a_weight_2X(final Object v1Id);
 
-    public abstract Traversal<Vertex, Edge> get_g_V_addOutEXexistsWith__g_V__time_nowX();
+    public abstract Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX();
 
     @Test
     @LoadGraphWith(MODERN)
@@ -92,7 +91,7 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
     @LoadGraphWith(MODERN)
     @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
     public void g_V_addOutEXexistsWith__g_V__time_nowX() {
-        final Traversal<Vertex, Edge> traversal = get_g_V_addOutEXexistsWith__g_V__time_nowX();
+        final Traversal<Vertex, Edge> traversal = get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX();
         printTraversalForm(traversal);
         int count = 0;
         while (traversal.hasNext()) {
@@ -124,8 +123,8 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, Edge> get_g_V_addOutEXexistsWith__g_V__time_nowX() {
-            return g.V().addOutE("existsWith", g.V(), "time", "now");
+        public Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX() {
+            return g.withSideEffect("x",g.V().toList()).V().addOutE("existsWith", "x", "time", "now");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
index 334f4e0..8d6d6e4 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
@@ -158,7 +158,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.V(v).addE(Direction.OUT, "self", v, "test", "value", T.id, "some-id").next();
+        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value", T.id, "some-id").next();
         assertEquals("value", e.value("test"));
         assertEquals("some-id", sg.E(e).id().next());
         assertEquals("some-id", sg.E("some-id").id().next());
@@ -170,7 +170,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.V(v).addE(Direction.OUT, "self", v, "test", "value").next();
+        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value").next();
         assertEquals("value", e.value("test"));
         assertNotNull(UUID.fromString(sg.E(e).id().next().toString()));
     }
@@ -181,7 +181,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.V(v).addE(Direction.OUT, "self", v, "test", "value", T.id, "some-id").next();
+        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value", T.id, "some-id").next();
         assertEquals("value", e.value("test"));
         assertEquals("some-id", e.value("name"));
         assertEquals("some-id", sg.E(e).id().next());
@@ -194,7 +194,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.V(v).addE(Direction.OUT, "self", v, "test", "value", "name", "some-id").next();
+        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value", "name", "some-id").next();
         assertEquals("value", e.value("test"));
         assertEquals("some-id", e.value("name"));
         assertEquals("some-id", sg.E(e).id().next());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
index da82a0d..e07b38d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyProcessTest.java
@@ -93,7 +93,7 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
         v.addEdge("self", v);
 
         final GraphTraversalSource gts = create(eventStrategy);
-        gts.V(v).addOutE("self", v).next();
+        gts.withSideEffect("v",()->v).V(v).addOutE("self", "v").next();
 
         tryCommit(graph, g -> assertEquals(2, IteratorUtils.count(gts.E())));
 
@@ -210,7 +210,7 @@ public class EventStrategyProcessTest extends AbstractGremlinProcessTest {
         v.addEdge("self", v);
 
         final GraphTraversalSource gts = create(eventStrategy);
-        gts.V(v).addOutE("self", v).property("some", "thing").next();
+        gts.withSideEffect("v",v).V(v).addOutE("self", "v").property("some", "thing").next();
 
         tryCommit(graph, g -> assertEquals(1, IteratorUtils.count(gts.E().has("some", "thing"))));
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c387430d/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
index cf0d366..67fe639 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
@@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.FeatureRequirementSet;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -28,9 +27,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.*;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
@@ -58,7 +55,7 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
         final GraphTraversalSource source = create(partitionStrategy);
         final Vertex v1 = source.addV("any", "thing").next();
         final Vertex v2 = source.addV("some", "thing").next();
-        final Edge e = source.V(v1.id()).addInE("connectsTo", v2, "every", "thing").next();
+        final Edge e = source.withSideEffect("v2", v2).V(v1.id()).addInE("connectsTo", "v2", "every", "thing").next();
 
         assertNotNull(v1);
         assertEquals("thing", v1.property("any").value());
@@ -146,7 +143,7 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
         final GraphTraversalSource sourceA = create(partitionStrategyA);
 
         final Vertex vA = sourceAA.addV("any", "a").next();
-        final Edge e = sourceAA.V(vA.id()).addOutE("knows", vA).next();
+        final Edge e = sourceAA.withSideEffect("vA", vA).V(vA.id()).addOutE("knows", "vA").next();
         assertEquals(e.id(), g.E(e.id()).id().next());
 
         try {
@@ -199,14 +196,14 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
 
         final Vertex vA = sourceAA.addV("any", "a").next();
         final Vertex vAA = sourceAA.addV("any", "aa").next();
-        final Edge eAtoAA = sourceAA.V(vA.id()).addOutE("a->a", vAA).next();
+        final Edge eAtoAA = sourceAA.withSideEffect("vAA", vAA).V(vA.id()).addOutE("a->a", "vAA").next();
 
         final Vertex vB = sourceBA.addV("any", "b").next();
-        sourceBA.V(vA.id()).addOutE("a->b", vB).next();
+        sourceBA.withSideEffect("vB", vB).V(vA.id()).addOutE("a->b", "vB").next();
 
         final Vertex vC = sourceCAB.addV("any", "c").next();
-        final Edge eBtovC = sourceCAB.V(vB.id()).addOutE("b->c", vC).next();
-        final Edge eAtovC = sourceCAB.V(vA.id()).addOutE("a->c", vC).next();
+        final Edge eBtovC = sourceCAB.withSideEffect("vC", vC).V(vB.id()).addOutE("b->c", "vC").next();
+        final Edge eAtovC = sourceCAB.withSideEffect("vC", vC).V(vA.id()).addOutE("a->c", "vC").next();
 
         assertEquals(0, IteratorUtils.count(sourceC.V()));
         assertEquals(0, IteratorUtils.count(sourceC.E()));