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 2017/06/08 16:46:13 UTC

tinkerpop git commit: Attempt to make @okram happy.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1682 285456682 -> b92c7fdc6


Attempt to make @okram happy.


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

Branch: refs/heads/TINKERPOP-1682
Commit: b92c7fdc6c1e9fc5fdcfc2a6d0ece4b485cc80be
Parents: 2854566
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Jun 8 18:45:30 2017 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Jun 8 18:45:30 2017 +0200

----------------------------------------------------------------------
 .../process/traversal/step/ByModulating.java    | 10 -------
 .../process/traversal/step/TraversalParent.java |  4 +++
 .../traversal/step/filter/DedupGlobalStep.java  | 10 +++----
 .../traversal/step/filter/PathFilterStep.java   | 19 +++++++------
 .../traversal/step/filter/SampleGlobalStep.java | 10 +++----
 .../step/filter/WherePredicateStep.java         | 19 +++++++------
 .../traversal/step/map/GroupCountStep.java      | 10 +++----
 .../process/traversal/step/map/GroupStep.java   | 22 ++++-----------
 .../traversal/step/map/GroupStepV3d0.java       | 28 +++++---------------
 .../traversal/step/map/OrderGlobalStep.java     | 23 +++++++---------
 .../traversal/step/map/OrderLocalStep.java      | 23 +++++++---------
 .../process/traversal/step/map/PathStep.java    | 19 +++++++------
 .../process/traversal/step/map/ProjectStep.java | 19 +++++++------
 .../traversal/step/map/SelectOneStep.java       | 10 +++----
 .../process/traversal/step/map/SelectStep.java  | 19 +++++++------
 .../process/traversal/step/map/TreeStep.java    | 19 +++++++------
 .../step/sideEffect/AggregateStep.java          | 10 +++----
 .../sideEffect/GroupCountSideEffectStep.java    | 10 +++----
 .../step/sideEffect/GroupSideEffectStep.java    | 22 ++++-----------
 .../sideEffect/GroupSideEffectStepV3d0.java     | 28 +++++---------------
 .../step/sideEffect/SackValueStep.java          | 10 +++----
 .../traversal/step/sideEffect/StoreStep.java    | 10 +++----
 .../step/sideEffect/TreeSideEffectStep.java     | 19 +++++++------
 .../ByModulatorOptimizationStrategy.java        | 20 +++++++-------
 24 files changed, 143 insertions(+), 250 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
index 2aef380..e3146a0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
@@ -101,14 +101,4 @@ public interface ByModulating {
         else
             this.modulateBy(__.map(new FunctionTraverser<>(function)).asAdmin(), comparator);
     }
-
-    //////
-
-    default Collection<Traversal.Admin<?, ?>> getModulateByTraversals() {
-        return Collections.emptyList();
-    }
-
-    default void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        throw new UnsupportedOperationException("The by()-modulating step does not support direct setting of modulator traversals: " + this);
-    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParent.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParent.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParent.java
index 10df950..95a2be1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParent.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParent.java
@@ -57,6 +57,10 @@ public interface TraversalParent extends AutoCloseable {
         throw new IllegalStateException("This traversal parent does not support the removal of global traversals: " + this.getClass().getCanonicalName());
     }
 
+    public default void replaceLocalChild(final Traversal.Admin<?, ?> oldTrversal, final Traversal.Admin<?, ?> newTrversal) {
+        throw new IllegalStateException("This traversal parent does not support the replacement of local traversals: " + this.getClass().getCanonicalName());
+    }
+
     public default Set<TraverserRequirement> getSelfAndChildRequirements(final TraverserRequirement... selfRequirements) {
         final Set<TraverserRequirement> requirements = EnumSet.noneOf(TraverserRequirement.class);
         Collections.addAll(requirements, selfRequirements);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
index b2779ad..e0d595a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
@@ -117,13 +117,9 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.dedupTraversal);
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.dedupTraversal = this.integrateChild(traversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.dedupTraversal && this.dedupTraversal.equals(oldTraversal))
+            this.dedupTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
index 306e4ab..ce6f118 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/PathFilterStep.java
@@ -110,16 +110,15 @@ public final class PathFilterStep<S> extends FilterStep<S> implements FromToModu
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.traversalRing.size());
-        this.traversalRing.getTraversals().forEach(result::add);
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.traversalRing.size();
-        if (size > 0) this.traversalRing.setTraversal(n % size, this.integrateChild(traversal));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Traversal.Admin<?, ?> traversal : this.traversalRing.getTraversals()) {
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.traversalRing.setTraversal(i, this.integrateChild(newTraversal));
+                break;
+            }
+            i++;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleGlobalStep.java
index bc1c260..286625a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleGlobalStep.java
@@ -61,13 +61,9 @@ public final class SampleGlobalStep<S> extends CollectingBarrierStep<S> implemen
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.probabilityTraversal);
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.probabilityTraversal = this.integrateChild(traversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.probabilityTraversal && this.probabilityTraversal.equals(oldTraversal))
+            this.probabilityTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
index cfbcaa3..f386219 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WherePredicateStep.java
@@ -165,15 +165,14 @@ public final class WherePredicateStep<S> extends FilterStep<S> implements Scopin
     }
 
     @Override
-    public Collection<Traversal.Admin<?, ?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?, ?>> result = new ArrayList<>(this.traversalRing.size());
-        this.traversalRing.getTraversals().forEach(result::add);
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.traversalRing.size();
-        if (size > 0) this.traversalRing.setTraversal(n % size, this.integrateChild(traversal));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Traversal.Admin<?, ?> traversal : this.traversalRing.getTraversals()) {
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.traversalRing.setTraversal(i, this.integrateChild(newTraversal));
+                break;
+            }
+            i++;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupCountStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupCountStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupCountStep.java
index 5a21756..43efdac 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupCountStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupCountStep.java
@@ -80,13 +80,9 @@ public final class GroupCountStep<S, E> extends ReducingBarrierStep<S, Map<E, Lo
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.keyTraversal);
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.keyTraversal = this.integrateChild(traversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
+            this.keyTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 03b278a..d615e6b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -81,23 +81,11 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Arrays.asList(
-                this.keyTraversal,
-                this.valueTraversal
-        );
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        switch (n % 2) {
-            case 0:
-                this.keyTraversal = this.integrateChild(traversal);
-                break;
-            case 1:
-                this.valueTraversal = this.integrateChild(traversal);
-                break;
-        }
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
+            this.keyTraversal = this.integrateChild(newTraversal);
+        if (null != this.valueTraversal && this.valueTraversal.equals(oldTraversal))
+            this.valueTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
index 781e705..22fba76 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
@@ -112,27 +112,13 @@ public final class GroupStepV3d0<S, K, V, R> extends ReducingBarrierStep<S, Map<
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Arrays.asList(
-                this.keyTraversal,
-                this.valueTraversal,
-                this.reduceTraversal
-        );
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        switch (n % 3) {
-            case 0:
-                this.keyTraversal = this.integrateChild(traversal);
-                break;
-            case 1:
-                this.valueTraversal = this.integrateChild(traversal);
-                break;
-            case 2:
-                this.reduceTraversal = this.integrateChild(traversal);
-                break;
-        }
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
+            this.keyTraversal = this.integrateChild(newTraversal);
+        if (null != this.valueTraversal && this.valueTraversal.equals(oldTraversal))
+            this.valueTraversal = this.integrateChild(newTraversal);
+        if (null != this.reduceTraversal && this.reduceTraversal.equals(oldTraversal))
+            this.reduceTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
index 775a930..d8b52b1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
@@ -100,20 +100,15 @@ public final class OrderGlobalStep<S, C extends Comparable> extends CollectingBa
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.comparators.size());
-        for (Pair<Traversal.Admin<S, C>, Comparator<C>> comparator : this.comparators) {
-            result.add(comparator.getValue0());
-        }
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.comparators.size();
-        if (size > 0) {
-            final int index = n % size;
-            this.comparators.set(index, Pair.with(this.integrateChild(traversal), this.comparators.get(index).getValue1()));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Pair<Traversal.Admin<S, C>, Comparator<C>> pair : this.comparators) {
+            final Traversal.Admin<S, C> traversal = pair.getValue0();
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.comparators.set(i, Pair.with(this.integrateChild(newTraversal), pair.getValue1()));
+                break;
+            }
+            i++;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderLocalStep.java
index eea7990..bae02fd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderLocalStep.java
@@ -81,20 +81,15 @@ public final class OrderLocalStep<S, C extends Comparable> extends MapStep<S, S>
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.comparators.size());
-        for (Pair<Traversal.Admin<S, C>, Comparator<C>> comparator : this.comparators) {
-            result.add(comparator.getValue0());
-        }
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.comparators.size();
-        if (size > 0) {
-            final int index = n % size;
-            this.comparators.set(index, Pair.with(this.integrateChild(traversal), this.comparators.get(index).getValue1()));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Pair<Traversal.Admin<S, C>, Comparator<C>> pair : this.comparators) {
+            final Traversal.Admin<S, C> traversal = pair.getValue0();
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.comparators.set(i, Pair.with(this.integrateChild(newTraversal), pair.getValue1()));
+                break;
+            }
+            i++;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
index a534973..8f3182a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathStep.java
@@ -100,16 +100,15 @@ public final class PathStep<S> extends MapStep<S, Path> implements TraversalPare
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.traversalRing.size());
-        this.traversalRing.getTraversals().forEach(result::add);
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.traversalRing.size();
-        if (size > 0) this.traversalRing.setTraversal(n % size, this.integrateChild(traversal));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Traversal.Admin<?, ?> traversal : this.traversalRing.getTraversals()) {
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.traversalRing.setTraversal(i, this.integrateChild(newTraversal));
+                break;
+            }
+            i++;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
index 0306ce3..ef096e1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectStep.java
@@ -100,16 +100,15 @@ public final class ProjectStep<S, E> extends MapStep<S, Map<String, E>> implemen
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.traversalRing.size());
-        this.traversalRing.getTraversals().forEach(result::add);
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.traversalRing.size();
-        if (size > 0) this.traversalRing.setTraversal(n % size, this.integrateChild(traversal));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Traversal.Admin<?, ?> traversal : this.traversalRing.getTraversals()) {
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.traversalRing.setTraversal(i, this.integrateChild(newTraversal));
+                break;
+            }
+            i++;
+        }
     }
 
     public List<String> getProjectKeys() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/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 eb5a2b9..3135698 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
@@ -102,13 +102,9 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
     }
 
     @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.selectTraversal = this.integrateChild(traversal);
-    }
-
-    @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.selectTraversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.selectTraversal && this.selectTraversal.equals(oldTraversal))
+            this.selectTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/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 0044363..d2f9c86 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
@@ -120,16 +120,15 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.traversalRing.size());
-        this.traversalRing.getTraversals().forEach(result::add);
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.traversalRing.size();
-        if (size > 0) this.traversalRing.setTraversal(n % size, this.integrateChild(traversal));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Traversal.Admin<?, ?> traversal : this.traversalRing.getTraversals()) {
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.traversalRing.setTraversal(i, this.integrateChild(newTraversal));
+                break;
+            }
+            i++;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
index 557a4d6..6ad77bd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TreeStep.java
@@ -65,16 +65,15 @@ public final class TreeStep<S> extends ReducingBarrierStep<S, Tree> implements T
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.traversalRing.size());
-        this.traversalRing.getTraversals().forEach(result::add);
-        return result;
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.traversalRing.size();
-        if (size > 0) this.traversalRing.setTraversal(n % size, this.integrateChild(traversal));
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Traversal.Admin<?, ?> traversal : this.traversalRing.getTraversals()) {
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.traversalRing.setTraversal(i, this.integrateChild(newTraversal));
+                break;
+            }
+            i++;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
index d414fa9..5fe344d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
@@ -72,13 +72,9 @@ public final class AggregateStep<S> extends AbstractStep<S, S> implements SideEf
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.aggregateTraversal);
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.aggregateTraversal = this.integrateChild(traversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.aggregateTraversal && this.aggregateTraversal.equals(oldTraversal))
+            this.aggregateTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
index 470d8ee..a773e90 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountSideEffectStep.java
@@ -109,12 +109,8 @@ public final class GroupCountSideEffectStep<S, E> extends SideEffectStep<S> impl
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.keyTraversal);
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.keyTraversal = this.integrateChild(traversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
+            this.keyTraversal = this.integrateChild(newTraversal);
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
index de5e3e2..62fba32 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
@@ -83,23 +83,11 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Arrays.asList(
-                this.keyTraversal,
-                this.valueTraversal
-        );
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        switch (n % 2) {
-            case 0:
-                this.keyTraversal = this.integrateChild(traversal);
-                break;
-            case 1:
-                this.valueTraversal = this.integrateChild(traversal);
-                break;
-        }
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
+            this.keyTraversal = this.integrateChild(newTraversal);
+        if (null != this.valueTraversal && this.valueTraversal.equals(oldTraversal))
+            this.valueTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStepV3d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStepV3d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStepV3d0.java
index 33bdfee..97445cb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStepV3d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStepV3d0.java
@@ -117,27 +117,13 @@ public final class GroupSideEffectStepV3d0<S, K, V, R> extends SideEffectStep<S>
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Arrays.asList(
-                this.keyTraversal,
-                this.valueTraversal,
-                this.reduceTraversal
-        );
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        switch (n % 3) {
-            case  0:
-                this.keyTraversal = this.integrateChild(traversal);
-                break;
-            case  1:
-                this.valueTraversal = this.integrateChild(traversal);
-                break;
-            case  2:
-                this.reduceTraversal = this.integrateChild(traversal);
-                break;
-        }
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
+            this.keyTraversal = this.integrateChild(newTraversal);
+        if (null != this.valueTraversal && this.valueTraversal.equals(oldTraversal))
+            this.valueTraversal = this.integrateChild(newTraversal);
+        if (null != this.reduceTraversal && this.reduceTraversal.equals(oldTraversal))
+            this.reduceTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
index d24848c..d154275 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
@@ -52,13 +52,9 @@ public final class SackValueStep<S, A, B> extends SideEffectStep<S> implements T
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.sackTraversal);
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.sackTraversal = this.integrateChild(traversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.sackTraversal && this.sackTraversal.equals(oldTraversal))
+            this.sackTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
index 286f262..a2d2cdc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreStep.java
@@ -78,13 +78,9 @@ public final class StoreStep<S> extends SideEffectStep<S> implements SideEffectC
     }
 
     @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        return Collections.singleton(this.storeTraversal);
-    }
-
-    @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        this.storeTraversal = this.integrateChild(traversal);
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        if (null != this.storeTraversal && this.storeTraversal.equals(oldTraversal))
+            this.storeTraversal = this.integrateChild(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
index eb1fe37..c253c51 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeSideEffectStep.java
@@ -120,16 +120,15 @@ public final class TreeSideEffectStep<S> extends SideEffectStep<S> implements Si
     }
 
     @Override
-    public void setModulateByTraversal(final int n, final Traversal.Admin<?, ?> traversal) {
-        final int size = this.traversalRing.size();
-        if (size > 0) this.traversalRing.setTraversal(n % size, this.integrateChild(traversal));
-    }
-
-    @Override
-    public Collection<Traversal.Admin<?,?>> getModulateByTraversals() {
-        final List<Traversal.Admin<?,?>> result = new ArrayList<>(this.traversalRing.size());
-        this.traversalRing.getTraversals().forEach(result::add);
-        return result;
+    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
+        int i = 0;
+        for (final Traversal.Admin<?, ?> traversal : this.traversalRing.getTraversals()) {
+            if (null != traversal && traversal.equals(oldTraversal)) {
+                this.traversalRing.setTraversal(i, this.integrateChild(newTraversal));
+                break;
+            }
+            i++;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b92c7fdc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategy.java
index 384bf0a..8202ca2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ByModulatorOptimizationStrategy.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.IdStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.LabelStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
@@ -65,7 +66,7 @@ public final class ByModulatorOptimizationStrategy extends AbstractTraversalStra
         return INSTANCE;
     }
 
-    private void optimizeByModulatingTraversal(final ByModulating step, final Traversal.Admin<?, ?> traversal, int n) {
+    private void optimizeByModulatingTraversal(final TraversalParent step, final Traversal.Admin<?, ?> traversal) {
         if (traversal == null) return;
         final List<Step> steps = traversal.asAdmin().getSteps();
         if (steps.size() == 1) {
@@ -73,12 +74,12 @@ public final class ByModulatorOptimizationStrategy extends AbstractTraversalStra
             if (singleStep instanceof PropertiesStep) {
                 final PropertiesStep ps = (PropertiesStep) singleStep;
                 if (ps.getReturnType().equals(PropertyType.VALUE) && ps.getPropertyKeys().length == 1) {
-                    step.setModulateByTraversal(n, new ElementValueTraversal<>(ps.getPropertyKeys()[0]));
+                    step.replaceLocalChild(traversal, new ElementValueTraversal<>(ps.getPropertyKeys()[0]));
                 }
             } else if (singleStep instanceof IdStep) {
-                step.setModulateByTraversal(n, new TokenTraversal<>(T.id));
+                step.replaceLocalChild(traversal, new TokenTraversal<>(T.id));
             } else if (singleStep instanceof LabelStep) {
-                step.setModulateByTraversal(n, new TokenTraversal<>(T.label));
+                step.replaceLocalChild(traversal, new TokenTraversal<>(T.label));
 /* todo: this fails for `Property`s (e.g. outE().property().as("a").select("a").by(key/value))
             } else if (singleStep instanceof PropertyKeyStep) {
                 step.setModulateByTraversal(n, new TokenTraversal<>(T.key));
@@ -86,7 +87,7 @@ public final class ByModulatorOptimizationStrategy extends AbstractTraversalStra
                 step.setModulateByTraversal(n, new TokenTraversal<>(T.value));
 */
             } else if (singleStep instanceof IdentityStep) {
-                step.setModulateByTraversal(n, new IdentityTraversal<>());
+                step.replaceLocalChild(traversal, new IdentityTraversal<>());
             }
         }
     }
@@ -94,11 +95,10 @@ public final class ByModulatorOptimizationStrategy extends AbstractTraversalStra
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
         final Step step = traversal.getParent().asStep();
-        if (step instanceof ByModulating) {
-            final ByModulating byModulatingStep = (ByModulating) step;
-            int i = 0;
-            for (final Traversal.Admin<?, ?> byModulatingTraversal : byModulatingStep.getModulateByTraversals()) {
-                optimizeByModulatingTraversal(byModulatingStep, byModulatingTraversal, i++);
+        if (step instanceof ByModulating && step instanceof TraversalParent) {
+            final TraversalParent byModulatingStep = (TraversalParent) step;
+            for (final Traversal.Admin<?, ?> byModulatingTraversal : byModulatingStep.getLocalChildren()) {
+                optimizeByModulatingTraversal(byModulatingStep, byModulatingTraversal);
             }
         }
     }