You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2016/11/15 13:59:08 UTC

[1/2] tinkerpop git commit: per @spmallette instructions, selectV3d0 should be called selectV3d2. Changed and rebuilt.

Repository: tinkerpop
Updated Branches:
  refs/heads/master 9ba6e775f -> 189d4f4a1


per @spmallette instructions, selectV3d0 should be called selectV3d2. Changed and rebuilt.


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

Branch: refs/heads/master
Commit: 189d4f4a175474225fc0cc37423eb50dd23816b9
Parents: cd591d6
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Nov 15 06:58:45 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Nov 15 06:58:58 2016 -0700

----------------------------------------------------------------------
 docs/src/upgrade/release-3.3.x.asciidoc               |  4 +++-
 .../process/traversal/dsl/graph/GraphTraversal.java   | 10 +++++-----
 .../gremlin/process/traversal/dsl/graph/__.java       | 12 ++++++------
 .../jython/gremlin_python/process/graph_traversal.py  | 14 +++++++-------
 4 files changed, 21 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/189d4f4a/docs/src/upgrade/release-3.3.x.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.3.x.asciidoc b/docs/src/upgrade/release-3.3.x.asciidoc
index 74062ff..b05ccff 100644
--- a/docs/src/upgrade/release-3.3.x.asciidoc
+++ b/docs/src/upgrade/release-3.3.x.asciidoc
@@ -42,11 +42,13 @@ it is rare for repeated labels to be used in practice. However, formal backwards
 
 Assuming that `x` is not a `Pop` argument:
 
-1. Change all `select(x,y,z)` calls to `selectV3d0(x,y,z)` calls.
+1. Change all `select(x,y,z)` calls to `selectV3d2(x,y,z)` calls.
 2. Change all `select(x,y,z)`-step calls to `select(Pop.mixed,x,y,z)`.
 
 If an explicit `Pop` argument is provided, then no changes are required.
 
+See: https://issues.apache.org/jira/browse/TINKERPOP-1541[TINKERPOP-1541]
+
 OptionalStep and Side-Effects
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/189d4f4a/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 2fcfb2e..b43d595 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
@@ -640,8 +640,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
      * @deprecated As of release 3.3.0, replaced by {@link GraphTraversal#select(Pop, String)} with {@link Pop#mixed}.
      */
     @Deprecated
-    public default <E2> GraphTraversal<S, E2> selectV3d0(final String selectKey) {
-        this.asAdmin().getBytecode().addStep(Symbols.selectV3d0, selectKey);
+    public default <E2> GraphTraversal<S, E2> selectV3d2(final String selectKey) {
+        this.asAdmin().getBytecode().addStep(Symbols.selectV3d2, selectKey);
         return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), Pop.mixed, selectKey));
     }
 
@@ -649,12 +649,12 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
      * @deprecated As of release 3.3.0, replaced by {@link GraphTraversal#select(Pop, String, String, String...)} with {@link Pop#mixed}.
      */
     @Deprecated
-    public default <E2> GraphTraversal<S, Map<String, E2>> selectV3d0(final String selectKey1, final String selectKey2, String... otherSelectKeys) {
+    public default <E2> GraphTraversal<S, Map<String, E2>> selectV3d2(final String selectKey1, final String selectKey2, String... otherSelectKeys) {
         final String[] selectKeys = new String[otherSelectKeys.length + 2];
         selectKeys[0] = selectKey1;
         selectKeys[1] = selectKey2;
         System.arraycopy(otherSelectKeys, 0, selectKeys, 2, otherSelectKeys.length);
-        this.asAdmin().getBytecode().addStep(Symbols.selectV3d0, selectKey1, selectKey2, otherSelectKeys);
+        this.asAdmin().getBytecode().addStep(Symbols.selectV3d2, selectKey1, selectKey2, otherSelectKeys);
         return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), Pop.mixed, selectKeys));
     }
 
@@ -1577,7 +1577,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         public static final String propertyMap = "propertyMap";
         public static final String valueMap = "valueMap";
         public static final String select = "select";
-        public static final String selectV3d0 = "selectV3d0";
+        public static final String selectV3d2 = "selectV3d2";
         public static final String key = "key";
         public static final String value = "value";
         public static final String path = "path";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/189d4f4a/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 731d6cc..2e0831a 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
@@ -353,11 +353,11 @@ public class __ {
     }
 
     /**
-     * @see GraphTraversal#selectV3d0(String)
+     * @see GraphTraversal#selectV3d2(String)
      */
     @Deprecated
-    public static <A, B> GraphTraversal<A, B> selectV3d0(final String selectKey) {
-        return __.<A>start().selectV3d0(selectKey);
+    public static <A, B> GraphTraversal<A, B> selectV3d2(final String selectKey) {
+        return __.<A>start().selectV3d2(selectKey);
     }
 
     /**
@@ -375,11 +375,11 @@ public class __ {
     }
 
     /**
-     * @see GraphTraversal#selectV3d0(String, String, String...)
+     * @see GraphTraversal#selectV3d2(String, String, String...)
      */
     @Deprecated
-    public static <A, B> GraphTraversal<A, Map<String, B>> selectV3d0(final String selectKey1, final String selectKey2, final String... otherSelectKeys) {
-        return __.<A>start().selectV3d0(selectKey1, selectKey2, otherSelectKeys);
+    public static <A, B> GraphTraversal<A, Map<String, B>> selectV3d2(final String selectKey1, final String selectKey2, final String... otherSelectKeys) {
+        return __.<A>start().selectV3d2(selectKey1, selectKey2, otherSelectKeys);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/189d4f4a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index 354cabe..7e5fdbc 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -333,8 +333,8 @@ class GraphTraversal(Traversal):
   def select(self, *args):
     self.bytecode.add_step("select", *args)
     return self
-  def selectV3d0(self, *args):
-    self.bytecode.add_step("selectV3d0", *args)
+  def selectV3d2(self, *args):
+    self.bytecode.add_step("selectV3d2", *args)
     return self
   def sideEffect(self, *args):
     self.bytecode.add_step("sideEffect", *args)
@@ -616,8 +616,8 @@ class __(object):
   def select(*args):
     return GraphTraversal(None, None, Bytecode()).select(*args)
   @staticmethod
-  def selectV3d0(*args):
-    return GraphTraversal(None, None, Bytecode()).selectV3d0(*args)
+  def selectV3d2(*args):
+    return GraphTraversal(None, None, Bytecode()).selectV3d2(*args)
   @staticmethod
   def sideEffect(*args):
     return GraphTraversal(None, None, Bytecode()).sideEffect(*args)
@@ -1040,10 +1040,10 @@ def select(*args):
 
 statics.add_static('select', select)
 
-def selectV3d0(*args):
-      return __.selectV3d0(*args)
+def selectV3d2(*args):
+      return __.selectV3d2(*args)
 
-statics.add_static('selectV3d0', selectV3d0)
+statics.add_static('selectV3d2', selectV3d2)
 
 def sideEffect(*args):
       return __.sideEffect(*args)


[2/2] tinkerpop git commit: Pop.mixed introduced to replace using a null Pop argument. SelectOneStep and SelectStep now default to using Pop.last instead of Pop.mixed. All other Scoping steps already use Pop.last semantics. This change will allow us to i

Posted by ok...@apache.org.
Pop.mixed introduced to replace using a null Pop argument. SelectOneStep and SelectStep now default to using Pop.last instead of Pop.mixed. All other Scoping steps already use Pop.last semantics. This change will allow us to introduce a simpler Path data structure for LABELED_PATH traversals with complete Pop.last semantics (99 percent of uses).


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

Branch: refs/heads/master
Commit: cd591d617e1423bc10586641a7965aded57ffba8
Parents: 9ba6e77
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Nov 8 07:01:19 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Nov 15 06:58:58 2016 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   2 +
 docs/src/upgrade/release-3.3.x.asciidoc         |  15 +++
 .../gremlin/process/traversal/Path.java         |   4 +-
 .../gremlin/process/traversal/Pop.java          |  14 +-
 .../traversal/dsl/graph/GraphTraversal.java     |  34 ++++-
 .../gremlin/process/traversal/dsl/graph/__.java |  18 ++-
 .../gremlin/process/traversal/step/Scoping.java |   8 +-
 .../traversal/step/map/SelectOneStep.java       |   2 +-
 .../traversal/step/util/ImmutablePath.java      |   4 +-
 .../traversal/step/util/MutablePath.java        |   4 +-
 .../optimization/PathProcessorStrategy.java     |  23 ++--
 .../traversal/step/map/SelectOneStepTest.java   |   4 +-
 .../traversal/step/map/SelectStepTest.java      |   4 +-
 .../optimization/PathProcessorStrategyTest.java |   1 +
 .../step/filter/GroovyRangeTest.groovy          |  20 +--
 .../traversal/step/filter/GroovyTailTest.groovy |  16 +--
 .../gremlin_python/process/graph_traversal.py   |  11 ++
 .../jython/gremlin_python/process/traversal.py  |   3 +-
 .../io/graphson/GraphSONWriterTest.java         |   1 +
 .../traversal/step/filter/RangeTest.java        | 129 +++++++++++--------
 .../process/traversal/step/filter/TailTest.java | 125 +++++++++++-------
 .../process/traversal/step/map/SelectTest.java  |  25 ++--
 22 files changed, 295 insertions(+), 172 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 8211eee..a2afd13 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.3.0 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Added `Pop.mixed` instead of using `null` to represent such semantics.
+* `select()`-step now defaults to using `Pop.last` instead of `Pop.mixed`. (*breaking*)
 * Removed previously deprecated `Console` constructor that took a `String` as an argument from `gremlin-console`.
 * Removed previously deprecated `ConcurrentBindings` from `gremlin-groovy`.
 * Removed previously deprecated `ScriptExecutor` from `gremlin-groovy`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/docs/src/upgrade/release-3.3.x.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.3.x.asciidoc b/docs/src/upgrade/release-3.3.x.asciidoc
index 514c1cd..74062ff 100644
--- a/docs/src/upgrade/release-3.3.x.asciidoc
+++ b/docs/src/upgrade/release-3.3.x.asciidoc
@@ -32,6 +32,21 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.3.3/CHANGELOG.asc
 Upgrading for Users
 ~~~~~~~~~~~~~~~~~~~
 
+SelectStep Defaults to Pop.last
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+`SelectStep` and `SelectOneStep` (`select()`) are the only `Scoping` steps that default to `Pop.mixed` as their labeled path
+selection criteria. All other steps, like `match()`, `where()` and `dedup()`, use `Pop.last`. In order to better enable optimizations
+around total `Pop.last` traversals, the `select()`-steps now default to `Pop.last`. Most users will not notice a difference as
+it is rare for repeated labels to be used in practice. However, formal backwards compatibility is possible as outlined below.
+
+Assuming that `x` is not a `Pop` argument:
+
+1. Change all `select(x,y,z)` calls to `selectV3d0(x,y,z)` calls.
+2. Change all `select(x,y,z)`-step calls to `select(Pop.mixed,x,y,z)`.
+
+If an explicit `Pop` argument is provided, then no changes are required.
+
 OptionalStep and Side-Effects
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
index b2916d9..6eabc46 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Path.java
@@ -134,7 +134,9 @@ public interface Path extends Cloneable, Iterable<Object> {
      * @throws IllegalArgumentException if the path does not contain the label
      */
     public default <A> A get(final Pop pop, final String label) throws IllegalArgumentException {
-        if (Pop.all == pop) {
+        if (Pop.mixed == pop) {
+            return this.get(label);
+        } else if (Pop.all == pop) {
             if (this.hasLabel(label)) {
                 final Object object = this.get(label);
                 if (object instanceof List)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Pop.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Pop.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Pop.java
index c9eab94..d40fe60 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Pop.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Pop.java
@@ -19,6 +19,12 @@
 package org.apache.tinkerpop.gremlin.process.traversal;
 
 /**
+ * A {@link Path} may have multiple values associated with a single label.
+ * {@link Pop} is used to determine whether the first value, last value, or
+ * all values are gathered. Note that {@link Pop#mixed} will return results
+ * as a list if there are multiple (like {@link Pop#all}) or as a singleton
+ * if only one object in the path is labeled (like {@link Pop#last}).
+ *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public enum Pop {
@@ -32,7 +38,11 @@ public enum Pop {
      */
     last,
     /**
-     * Get all the items and return them as a list
+     * Get all the items and return them as a list.
+     */
+    all,
+    /**
+     * Get the items as either a list (for multiple) or an object (for singles).
      */
-    all
+    mixed
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/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 441d3f0..2fcfb2e 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
@@ -623,7 +623,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         selectKeys[1] = selectKey2;
         System.arraycopy(otherSelectKeys, 0, selectKeys, 2, otherSelectKeys.length);
         this.asAdmin().getBytecode().addStep(Symbols.select, selectKey1, selectKey2, otherSelectKeys);
-        return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), null, selectKeys));
+        return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), Pop.last, selectKeys));
     }
 
     public default <E2> GraphTraversal<S, E2> select(final Pop pop, final String selectKey) {
@@ -633,9 +633,32 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
 
     public default <E2> GraphTraversal<S, E2> select(final String selectKey) {
         this.asAdmin().getBytecode().addStep(Symbols.select, selectKey);
-        return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), null, selectKey));
+        return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), Pop.last, selectKey));
     }
 
+    /**
+     * @deprecated As of release 3.3.0, replaced by {@link GraphTraversal#select(Pop, String)} with {@link Pop#mixed}.
+     */
+    @Deprecated
+    public default <E2> GraphTraversal<S, E2> selectV3d0(final String selectKey) {
+        this.asAdmin().getBytecode().addStep(Symbols.selectV3d0, selectKey);
+        return this.asAdmin().addStep(new SelectOneStep<>(this.asAdmin(), Pop.mixed, selectKey));
+    }
+
+    /**
+     * @deprecated As of release 3.3.0, replaced by {@link GraphTraversal#select(Pop, String, String, String...)} with {@link Pop#mixed}.
+     */
+    @Deprecated
+    public default <E2> GraphTraversal<S, Map<String, E2>> selectV3d0(final String selectKey1, final String selectKey2, String... otherSelectKeys) {
+        final String[] selectKeys = new String[otherSelectKeys.length + 2];
+        selectKeys[0] = selectKey1;
+        selectKeys[1] = selectKey2;
+        System.arraycopy(otherSelectKeys, 0, selectKeys, 2, otherSelectKeys.length);
+        this.asAdmin().getBytecode().addStep(Symbols.selectV3d0, selectKey1, selectKey2, otherSelectKeys);
+        return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), Pop.mixed, selectKeys));
+    }
+
+
     public default <E2> GraphTraversal<S, E2> unfold() {
         this.asAdmin().getBytecode().addStep(Symbols.unfold);
         return this.asAdmin().addStep(new UnfoldStep<>(this.asAdmin()));
@@ -678,7 +701,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
 
     public default <E2 extends Number> GraphTraversal<S, E2> sum(final Scope scope) {
         this.asAdmin().getBytecode().addStep(Symbols.sum, scope);
-        return this.asAdmin().addStep(scope.equals(Scope.global) ? new SumGlobalStep<>(this.asAdmin()) : new SumLocalStep(this.asAdmin()));
+        return this.asAdmin().addStep(scope.equals(Scope.global) ? new SumGlobalStep<>(this.asAdmin()) : new SumLocalStep<>(this.asAdmin()));
     }
 
     public default <E2 extends Number> GraphTraversal<S, E2> max() {
@@ -688,7 +711,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
 
     public default <E2 extends Number> GraphTraversal<S, E2> max(final Scope scope) {
         this.asAdmin().getBytecode().addStep(Symbols.max, scope);
-        return this.asAdmin().addStep(scope.equals(Scope.global) ? new MaxGlobalStep<>(this.asAdmin()) : new MaxLocalStep(this.asAdmin()));
+        return this.asAdmin().addStep(scope.equals(Scope.global) ? new MaxGlobalStep<>(this.asAdmin()) : new MaxLocalStep<>(this.asAdmin()));
     }
 
     public default <E2 extends Number> GraphTraversal<S, E2> min() {
@@ -708,7 +731,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
 
     public default <E2 extends Number> GraphTraversal<S, E2> mean(final Scope scope) {
         this.asAdmin().getBytecode().addStep(Symbols.mean, scope);
-        return this.asAdmin().addStep(scope.equals(Scope.global) ? new MeanGlobalStep<>(this.asAdmin()) : new MeanLocalStep(this.asAdmin()));
+        return this.asAdmin().addStep(scope.equals(Scope.global) ? new MeanGlobalStep(this.asAdmin()) : new MeanLocalStep(this.asAdmin()));
     }
 
     public default <K, V> GraphTraversal<S, Map<K, V>> group() {
@@ -1554,6 +1577,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         public static final String propertyMap = "propertyMap";
         public static final String valueMap = "valueMap";
         public static final String select = "select";
+        public static final String selectV3d0 = "selectV3d0";
         public static final String key = "key";
         public static final String value = "value";
         public static final String path = "path";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/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 83739d8..731d6cc 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
@@ -353,6 +353,14 @@ public class __ {
     }
 
     /**
+     * @see GraphTraversal#selectV3d0(String)
+     */
+    @Deprecated
+    public static <A, B> GraphTraversal<A, B> selectV3d0(final String selectKey) {
+        return __.<A>start().selectV3d0(selectKey);
+    }
+
+    /**
      * @see GraphTraversal#select(Pop, String, String, String...)
      */
     public static <A, B> GraphTraversal<A, Map<String, B>> select(final Pop pop, final String selectKey1, final String selectKey2, final String... otherSelectKeys) {
@@ -367,6 +375,14 @@ public class __ {
     }
 
     /**
+     * @see GraphTraversal#selectV3d0(String, String, String...)
+     */
+    @Deprecated
+    public static <A, B> GraphTraversal<A, Map<String, B>> selectV3d0(final String selectKey1, final String selectKey2, final String... otherSelectKeys) {
+        return __.<A>start().selectV3d0(selectKey1, selectKey2, otherSelectKeys);
+    }
+
+    /**
      * @see GraphTraversal#unfold()
      */
     public static <A> GraphTraversal<A, A> unfold() {
@@ -465,7 +481,7 @@ public class __ {
     }
 
     /**
-     * @see GraphTraversal#group()
+     * @see GraphTraversal#groupV3d0()
      */
     @Deprecated
     public static <A, K, V> GraphTraversal<A, Map<K, V>> groupV3d0() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/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 8c27405..3de2621 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
@@ -41,7 +41,7 @@ public interface Scoping {
 
     public default <S> S getScopeValue(final Pop pop, final String key, final Traverser.Admin<?> traverser) throws IllegalArgumentException {
         if (traverser.getSideEffects().exists(key))
-            return traverser.getSideEffects().<S>get(key);
+            return traverser.getSideEffects().get(key);
         ///
         final Object object = traverser.get();
         if (object instanceof Map && ((Map<String, S>) object).containsKey(key))
@@ -49,14 +49,14 @@ public interface Scoping {
         ///
         final Path path = traverser.path();
         if (path.hasLabel(key))
-            return null == pop ? path.get(key) : path.get(pop, key);
+            return path.get(pop, key);
         ///
         throw new IllegalArgumentException("Neither the sideEffects, map, nor path has a " + key + "-key: " + this);
     }
 
     public default <S> S getNullableScopeValue(final Pop pop, final String key, final Traverser.Admin<?> traverser) {
         if (traverser.getSideEffects().exists(key))
-            return traverser.getSideEffects().<S>get(key);
+            return traverser.getSideEffects().get(key);
         ///
         final Object object = traverser.get();
         if (object instanceof Map && ((Map<String, S>) object).containsKey(key))
@@ -64,7 +64,7 @@ public interface Scoping {
         ///
         final Path path = traverser.path();
         if (path.hasLabel(key))
-            return null == pop ? path.get(key) : path.get(pop, key);
+            return path.get(pop, key);
         ///
         return null;
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/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 a51a8d2..191e0ed 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
@@ -44,7 +44,7 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
     private Traversal.Admin<S, E> selectTraversal = null;
     private Set<String> keepLabels;
 
-    public SelectOneStep(final Traversal.Admin traversal, Pop pop, final String selectKey) {
+    public SelectOneStep(final Traversal.Admin traversal, final Pop pop, final String selectKey) {
         super(traversal);
         this.pop = pop;
         this.selectKey = selectKey;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
index 28aac3c..7a6b9a8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
@@ -136,7 +136,9 @@ public class ImmutablePath implements Path, Serializable, Cloneable {
 
     @Override
     public <A> A get(final Pop pop, final String label) {
-        if (Pop.all == pop) {
+        if (Pop.mixed == pop) {
+            return this.get(label);
+        } else if (Pop.all == pop) {
             // Recursively build the list to avoid building objects/labels collections.
             final List<Object> list = new ArrayList<>();
             ImmutablePath currentPath = this;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
index 69be820..168b7dc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/MutablePath.java
@@ -113,7 +113,9 @@ public class MutablePath implements Path, Serializable {
 
     @Override
     public <A> A get(final Pop pop, final String label) {
-        if (Pop.all == pop) {
+        if (Pop.mixed == pop) {
+            return this.get(label);
+        } else if (Pop.all == pop) {
             if (this.hasLabel(label)) {
                 final Object object = this.get(label);
                 if (object instanceof List)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategy.java
index fa0ddc5..27ef8a4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategy.java
@@ -127,18 +127,17 @@ public final class PathProcessorStrategy extends AbstractTraversalStrategy<Trave
         // process select("a","b").by(...).by(...)
         final List<SelectStep> selectSteps = TraversalHelper.getStepsOfClass(SelectStep.class, traversal);
         for (final SelectStep<?, Object> selectStep : selectSteps) {
-            if (selectStep.getPop() != Pop.all && selectStep.getMaxRequirement().compareTo(PathProcessor.ElementRequirement.ID) > 0) {
-                if (null == selectStep.getPop()) {
-                    boolean oneLabel = true;
-                    for (final String key : selectStep.getScopeKeys()) {
-                        if (labelCount(key, TraversalHelper.getRootTraversal(traversal)) > 1) {
-                            oneLabel = false;
-                            break;
-                        }
+            if (selectStep.getPop() != Pop.all && selectStep.getPop() != Pop.mixed && // TODO: necessary?
+                    selectStep.getMaxRequirement().compareTo(PathProcessor.ElementRequirement.ID) > 0) {
+                boolean oneLabel = true;
+                for (final String key : selectStep.getScopeKeys()) {
+                    if (labelCount(key, TraversalHelper.getRootTraversal(traversal)) > 1) {
+                        oneLabel = false;
+                        break;
                     }
-                    if (!oneLabel)
-                        continue;
                 }
+                if (!oneLabel)
+                    continue;
                 final int index = TraversalHelper.stepIndex(selectStep, traversal);
                 final Map<String, Traversal.Admin<Object, Object>> byTraversals = selectStep.getByTraversals();
                 final String[] keys = new String[byTraversals.size()];
@@ -159,9 +158,9 @@ public final class PathProcessorStrategy extends AbstractTraversalStrategy<Trave
         // process select("a").by(...)
         final List<SelectOneStep> selectOneSteps = TraversalHelper.getStepsOfClass(SelectOneStep.class, traversal);
         for (final SelectOneStep<?, ?> selectOneStep : selectOneSteps) {
-            if (selectOneStep.getPop() != Pop.all &&
+            if (selectOneStep.getPop() != Pop.all && selectOneStep.getPop() != Pop.mixed && // TODO: necessary?
                     selectOneStep.getMaxRequirement().compareTo(PathProcessor.ElementRequirement.ID) > 0 &&
-                    (null != selectOneStep.getPop() || labelCount(selectOneStep.getScopeKeys().iterator().next(), TraversalHelper.getRootTraversal(traversal)) <= 1)) {
+                    labelCount(selectOneStep.getScopeKeys().iterator().next(), TraversalHelper.getRootTraversal(traversal)) <= 1) {
                 final int index = TraversalHelper.stepIndex(selectOneStep, traversal);
                 final Traversal.Admin<?, ?> localChild = selectOneStep.getLocalChildren().get(0);
                 selectOneStep.removeLocalChild(localChild);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStepTest.java
index 3dd5103..480c0b1 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStepTest.java
@@ -41,11 +41,11 @@ public class SelectOneStepTest extends StepTest {
                 __.select(Pop.all, "x"),
                 __.select(Pop.first, "x"),
                 __.select(Pop.last, "x"),
-                __.select("x"),
+                __.select(Pop.mixed, "x"),
                 __.select(Pop.all, "x").by("name"),
                 __.select(Pop.first, "x").by("name"),
                 __.select(Pop.last, "x").by("name"),
-                __.select("x").by("name")
+                __.select(Pop.mixed, "x").by("name")
         );
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStepTest.java
index 8bdc93a..5393403 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStepTest.java
@@ -41,11 +41,11 @@ public class SelectStepTest extends StepTest {
                 __.select(Pop.all, "x", "y"),
                 __.select(Pop.first, "x", "y"),
                 __.select(Pop.last, "x", "y"),
-                __.select("x", "y"),
+                __.select(Pop.mixed, "x", "y"),
                 __.select(Pop.all, "x", "y").by("name").by("age"),
                 __.select(Pop.first, "x", "y").by("name").by("age"),
                 __.select(Pop.last, "x", "y").by("name").by("age"),
-                __.select("x", "y").by("name").by("age")
+                __.select(Pop.mixed, "x", "y").by("name").by("age")
         );
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java
index 89edd85..9616d5a 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/PathProcessorStrategyTest.java
@@ -97,6 +97,7 @@ public class PathProcessorStrategyTest {
                 {__.select(Pop.first, "a", "b").by("name").by("age"), __.select(Pop.first, "b").map(new ElementValueTraversal<>("age")).as("b").select(Pop.first, "a").map(new ElementValueTraversal<>("name")).as("a").select(Pop.last, "a", "b"), Collections.emptyList()},
                 {__.select(Pop.last, "a", "b").by("name").by("age"), __.select(Pop.last, "b").map(new ElementValueTraversal<>("age")).as("b").select(Pop.last, "a").map(new ElementValueTraversal<>("name")).as("a").select(Pop.last, "a", "b"), TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList()},
                 {__.select(Pop.all, "a", "b").by("name").by("age"), __.select(Pop.all, "a", "b").by("name").by("age"), Collections.emptyList()},
+                {__.select(Pop.mixed, "a", "b").by("name").by("age"), __.select(Pop.mixed, "a", "b").by("name").by("age"), Collections.emptyList()},
                 // where(as("a")...)
                 {__.where(__.out("knows")), __.where(__.outE("knows")), TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList()},
                 {__.where(__.as("a").out("knows")), __.identity().as("xyz").select(Pop.last, "a").filter(__.out("knows")).select(Pop.last, "xyz"), Collections.emptyList()},

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy
index 498e399..7ab4e6e 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy
@@ -65,28 +65,28 @@ public abstract class GroovyRangeTest {
         }
 
         @Override
-        public Traversal<Vertex, List<String>> get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_2X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').in().as('a').in().as('a').select('a').by(unfold().values('name').fold).limit(local,2)")
+        public Traversal<Vertex, List<String>> get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_2X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').in().as('a').in().as('a').select(mixed,'a').by(unfold().values('name').fold).limit(local,2)")
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_1X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').in().as('a').in().as('a').select('a').by(unfold().values('name').fold).limit(local,1)")
+        public Traversal<Vertex, String> get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_1X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').in().as('a').in().as('a').select(mixed,'a').by(unfold().values('name').fold).limit(local,1)")
         }
 
         @Override
-        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').out().as('a').out().as('a').select('a').by(unfold().values('name').fold).range(local,1,3)")
+        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').out().as('a').out().as('a').select(mixed,'a').by(unfold().values('name').fold).range(local,1,3)")
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').out().as('a').out().as('a').select('a').by(unfold().values('name').fold).range(local,1,2)")
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').out().as('a').out().as('a').select(mixed,'a').by(unfold().values('name').fold).range(local,1,2)")
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').out().as('a').out().as('a').select('a').by(unfold().values('name').fold).range(local,4,5)")
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().as('a').out().as('a').out().as('a').select(mixed,'a').by(unfold().values('name').fold).range(local,4,5)")
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
index 4bc2321..38c2a1d 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
@@ -60,23 +60,23 @@ public abstract class GroovyTailTest {
         }
 
         @Override
-        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select('a').by(unfold().values('name').fold).tail(local, 2)")
+        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select(mixed,'a').by(unfold().values('name').fold).tail(local, 2)")
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select('a').by(unfold().values('name').fold).tail(local, 1)")
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_1X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select(mixed,'a').by(unfold().values('name').fold).tail(local, 1)")
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocalX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select('a').by(unfold().values('name').fold).tail(local)")
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocalX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select(mixed,'a').by(unfold().values('name').fold).tail(local)")
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXlimitXlocal_0XX_tailXlocal_1X() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select('a').by(limit(local, 0)).tail(local, 1)")
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXlimitXlocal_0XX_tailXlocal_1X() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select(mixed,'a').by(limit(local, 0)).tail(local, 1)")
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index 6165ed3..354cabe 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -333,6 +333,9 @@ class GraphTraversal(Traversal):
   def select(self, *args):
     self.bytecode.add_step("select", *args)
     return self
+  def selectV3d0(self, *args):
+    self.bytecode.add_step("selectV3d0", *args)
+    return self
   def sideEffect(self, *args):
     self.bytecode.add_step("sideEffect", *args)
     return self
@@ -613,6 +616,9 @@ class __(object):
   def select(*args):
     return GraphTraversal(None, None, Bytecode()).select(*args)
   @staticmethod
+  def selectV3d0(*args):
+    return GraphTraversal(None, None, Bytecode()).selectV3d0(*args)
+  @staticmethod
   def sideEffect(*args):
     return GraphTraversal(None, None, Bytecode()).sideEffect(*args)
   @staticmethod
@@ -1034,6 +1040,11 @@ def select(*args):
 
 statics.add_static('select', select)
 
+def selectV3d0(*args):
+      return __.selectV3d0(*args)
+
+statics.add_static('selectV3d0', selectV3d0)
+
 def sideEffect(*args):
       return __.sideEffect(*args)
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index d30db35..b156402 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -122,10 +122,11 @@ Pick = Enum('Pick', 'any none')
 statics.add_static('any', Pick.any)
 statics.add_static('none', Pick.none)
 
-Pop = Enum('Pop', 'all_ first last')
+Pop = Enum('Pop', 'all_ first last mixed')
 statics.add_static('first', Pop.first)
 statics.add_static('last', Pop.last)
 statics.add_static('all_', Pop.all_)
+statics.add_static('mixed', Pop.mixed)
 
 Scope = Enum('Scope', 'global_ local')
 statics.add_static('global_', Scope.global_)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
index 58211c6..2ad1964 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
@@ -104,6 +104,7 @@ public class GraphSONWriterTest {
         assertEquals(Pop.first, mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.first)").toString(), Object.class));
         assertEquals(Pop.last, mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.last)").toString(), Object.class));
         assertEquals(Pop.all, mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.all_)").toString(), Object.class));
+        assertEquals(Pop.mixed, mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.mixed)").toString(), Object.class));
         assertEquals(Scope.global, mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Scope.global_)").toString(), Object.class));
         assertEquals(Scope.local, mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Scope.local)").toString(), Object.class));
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
index 6de8da0..5ae86f9 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
@@ -21,25 +21,26 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 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.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.unfold;
-import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  * @author Stephen Mallette (http://stephen.genoprime.com)
@@ -61,15 +62,15 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_rangeX5_11X();
 
-    public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_2X();
+    public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_2X();
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_1X();
+    public abstract Traversal<Vertex, String> get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_1X();
 
-    public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X();
+    public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X();
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X();
+    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X();
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X();
+    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X();
 
     public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_in_asXbX_in_asXcX_selectXa_b_cX_byXnameX_limitXlocal_2X();
 
@@ -174,50 +175,58 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
         assertEquals(6, counter);
     }
 
-    /** Scenario: limit step, Scope.local, >1 item requested, List<String> input, List<String> output */
+    /**
+     * Scenario: limit step, Scope.local, >1 item requested, List<String> input, List<String> output
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_2X() {
-        final Traversal<Vertex, List<String>> traversal = get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_2X();
+    public void g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_2X() {
+        final Traversal<Vertex, List<String>> traversal = get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_2X();
         printTraversalForm(traversal);
         final Set<List<String>> expected =
-            new HashSet(Arrays.asList(
-                            Arrays.asList("ripple", "josh"),
-                            Arrays.asList("lop", "josh")));
+                new HashSet(Arrays.asList(
+                        Arrays.asList("ripple", "josh"),
+                        Arrays.asList("lop", "josh")));
         final Set<List<String>> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: limit step, Scope.local, 1 item requested, List input, String output */
+    /**
+     * Scenario: limit step, Scope.local, 1 item requested, List input, String output
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_1X() {
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_1X();
+    public void g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_1X() {
+        final Traversal<Vertex, String> traversal = get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_1X();
         printTraversalForm(traversal);
         final Set<String> expected = new HashSet<>(Arrays.asList("ripple", "lop"));
         final Set<List<String>> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: range step, Scope.local, >1 item requested, List<String> input, List<String> output */
+    /**
+     * Scenario: range step, Scope.local, >1 item requested, List<String> input, List<String> output
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X() {
-        final Traversal<Vertex, List<String>> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X();
+    public void g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X() {
+        final Traversal<Vertex, List<String>> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X();
         printTraversalForm(traversal);
         final Set<List<String>> expected =
-            new HashSet<>(Arrays.asList(
-                            Arrays.asList("josh", "ripple"),
-                            Arrays.asList("josh", "lop")));
+                new HashSet<>(Arrays.asList(
+                        Arrays.asList("josh", "ripple"),
+                        Arrays.asList("josh", "lop")));
         final Set<List<String>> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: range step, Scope.local, 1 item requested, List input, String output */
+    /**
+     * Scenario: range step, Scope.local, 1 item requested, List input, String output
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X() {
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X();
+    public void g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X() {
+        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X();
         printTraversalForm(traversal);
         int counter = 0;
         while (traversal.hasNext()) {
@@ -228,16 +237,20 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
         assertEquals(2, counter);
     }
 
-    /** Scenario: range step, Scope.local, 1 item requested, List input, no items selected, stop traversal */
+    /**
+     * Scenario: range step, Scope.local, 1 item requested, List input, no items selected, stop traversal
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X() {
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X();
+    public void g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X() {
+        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X();
         printTraversalForm(traversal);
         assertEquals(Arrays.asList(), traversal.toList());
     }
 
-    /** Scenario: limit step, Scope.local, >1 item requested, Map input, Map output */
+    /**
+     * Scenario: limit step, Scope.local, >1 item requested, Map input, Map output
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_in_asXbX_in_asXcX_selectXa_b_cX_byXnameX_limitXlocal_2X() {
@@ -250,33 +263,39 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
         assertEquals(expected, actual);
     }
 
-    /** Scenario: limit step, Scope.local, 1 item requested, Map input, Map output */
+    /**
+     * Scenario: limit step, Scope.local, 1 item requested, Map input, Map output
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_in_asXbX_in_asXcX_selectXa_b_cX_byXnameX_limitXlocal_1X() {
         final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_in_asXbX_in_asXcX_selectXa_b_cX_byXnameX_limitXlocal_1X();
         printTraversalForm(traversal);
         final Set<Map<String, String>> expected = new HashSet<>(makeMapList(1,
-                 "a", "ripple",
-                 "a", "lop"));
+                "a", "ripple",
+                "a", "lop"));
         final Set<Map<String, String>> actual = new HashSet<>(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: range step, Scope.local, >1 item requested, Map input, Map output */
+    /**
+     * Scenario: range step, Scope.local, >1 item requested, Map input, Map output
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_rangeXlocal_1_3X() {
         final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_rangeXlocal_1_3X();
         printTraversalForm(traversal);
         final Set<Map<String, String>> expected = new HashSet<>(makeMapList(2,
-                 "b", "josh", "c", "ripple",
-                 "b", "josh", "c", "lop"));
+                "b", "josh", "c", "ripple",
+                "b", "josh", "c", "lop"));
         final Set<Map<String, String>> actual = new HashSet<>(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: range step, Scope.local, 1 item requested, Map input, Map output */
+    /**
+     * Scenario: range step, Scope.local, 1 item requested, Map input, Map output
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_rangeXlocal_1_2X() {
@@ -332,48 +351,48 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, List<String>> get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_2X() {
-            return g.V().as("a").in().as("a").in().as("a").<List<String>>select("a").by(unfold().values("name").fold()).limit(local, 2);
+        public Traversal<Vertex, List<String>> get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_2X() {
+            return g.V().as("a").in().as("a").in().as("a").<List<String>>select(Pop.mixed, "a").by(unfold().values("name").fold()).limit(local, 2);
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_in_asXaX_in_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_limitXlocal_1X() {
-            return g.V().as("a").in().as("a").in().as("a").<List<String>>select("a").by(unfold().values("name").fold()).limit(local, 1);
+        public Traversal<Vertex, String> get_g_V_asXaX_in_asXaX_in_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_limitXlocal_1X() {
+            return g.V().as("a").in().as("a").in().as("a").<List<String>>select(Pop.mixed, "a").by(unfold().values("name").fold()).limit(local, 1);
         }
 
         @Override
-        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X() {
-            return g.V().as("a").out().as("a").out().as("a").<List<String>>select("a").by(unfold().values("name").fold()).range(local, 1, 3);
+        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_3X() {
+            return g.V().as("a").out().as("a").out().as("a").<List<String>>select(Pop.mixed, "a").by(unfold().values("name").fold()).range(local, 1, 3);
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X() {
-            return g.V().as("a").out().as("a").out().as("a").<List<String>>select("a").by(unfold().values("name").fold()).range(local, 1, 2);
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_1_2X() {
+            return g.V().as("a").out().as("a").out().as("a").<List<String>>select(Pop.mixed, "a").by(unfold().values("name").fold()).range(local, 1, 2);
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X() {
-            return g.V().as("a").out().as("a").out().as("a").<List<String>>select("a").by(unfold().values("name").fold()).range(local, 4, 5);
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_rangeXlocal_4_5X() {
+            return g.V().as("a").out().as("a").out().as("a").<List<String>>select(Pop.mixed, "a").by(unfold().values("name").fold()).range(local, 4, 5);
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_in_asXbX_in_asXcX_selectXa_b_cX_byXnameX_limitXlocal_2X() {
-            return g.V().as("a").in().as("b").in().as("c").<Map<String, String>>select("a","b","c").by("name").limit(local, 2);
+            return g.V().as("a").in().as("b").in().as("c").<Map<String, String>>select("a", "b", "c").by("name").limit(local, 2);
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_in_asXbX_in_asXcX_selectXa_b_cX_byXnameX_limitXlocal_1X() {
-            return g.V().as("a").in().as("b").in().as("c").<Map<String, String>>select("a","b","c").by("name").limit(local, 1);
+            return g.V().as("a").in().as("b").in().as("c").<Map<String, String>>select("a", "b", "c").by("name").limit(local, 1);
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_rangeXlocal_1_3X() {
-            return g.V().as("a").out().as("b").out().as("c").<Map<String, String>>select("a","b","c").by("name").range(local, 1, 3);
+            return g.V().as("a").out().as("b").out().as("c").<Map<String, String>>select("a", "b", "c").by("name").range(local, 1, 3);
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_rangeXlocal_1_2X() {
-            return g.V().as("a").out().as("b").out().as("c").<Map<String, String>>select("a","b","c").by("name").range(local, 1, 2);
+            return g.V().as("a").out().as("b").out().as("c").<Map<String, String>>select("a", "b", "c").by("name").range(local, 1, 2);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
index 738964c..f48d0af 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
@@ -21,20 +21,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 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.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.limit;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.unfold;
-import static org.apache.tinkerpop.gremlin.process.traversal.Scope.global;
-import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
-import static org.junit.Assert.assertEquals;
-
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -42,6 +34,15 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.Scope.global;
+import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.limit;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.unfold;
+import static org.junit.Assert.assertEquals;
+
 /**
  * Original spec: https://issues.apache.org/jira/browse/TINKERPOP-670
  *
@@ -62,19 +63,21 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count();
 
-    public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X();
+    public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_2X();
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X();
+    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_1X();
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocalX();
+    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocalX();
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXlimitXlocal_0XX_tailXlocal_1X();
+    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXlimitXlocal_0XX_tailXlocal_1X();
 
     public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_2X();
 
     public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_1X();
 
-    /** Scenario: Global scope */
+    /**
+     * Scenario: Global scope
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_valuesXnameX_order_tailXglobal_2X() {
@@ -83,7 +86,9 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         assertEquals(Arrays.asList("ripple", "vadas"), traversal.toList());
     }
 
-    /** Scenario: Default scope is global */
+    /**
+     * Scenario: Default scope is global
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_valuesXnameX_order_tailX2X() {
@@ -92,7 +97,9 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         assertEquals(Arrays.asList("ripple", "vadas"), traversal.toList());
     }
 
-    /** Scenario: Default is global, N=1 */
+    /**
+     * Scenario: Default is global, N=1
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_valuesXnameX_order_tail() {
@@ -101,7 +108,9 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         assertEquals(Arrays.asList("vadas"), traversal.toList());
     }
 
-    /** Scenario: Global scope, not enough elements */
+    /**
+     * Scenario: Global scope, not enough elements
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_valuesXnameX_order_tailX7X() {
@@ -110,7 +119,9 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         assertEquals(Arrays.asList("josh", "lop", "marko", "peter", "ripple", "vadas"), traversal.toList());
     }
 
-    /** Scenario: Global scope, using repeat (BULK) */
+    /**
+     * Scenario: Global scope, using repeat (BULK)
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_repeatXbothX_timesX3X_tailX7X() {
@@ -124,7 +135,9 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         assertEquals(7, counter);
     }
 
-    /** Scenario: Global scope, using repeat (excess BULK) */
+    /**
+     * Scenario: Global scope, using repeat (excess BULK)
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_repeatXin_outX_timesX3X_tailX7X_count() {
@@ -133,75 +146,87 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         checkResults(Collections.singletonList(7L), traversal);
     }
 
-    /** Scenario: Local scope, List input, N>1 */
+    /**
+     * Scenario: Local scope, List input, N>1
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
-        final Traversal<Vertex, List<String>> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X();
+    public void g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
+        final Traversal<Vertex, List<String>> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_2X();
         printTraversalForm(traversal);
         final Set<List<String>> expected =
-            new HashSet(Arrays.asList(
-                            Arrays.asList("josh", "ripple"),
-                            Arrays.asList("josh", "lop")));
+                new HashSet(Arrays.asList(
+                        Arrays.asList("josh", "ripple"),
+                        Arrays.asList("josh", "lop")));
         final Set<List<String>> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: Local scope, List input, N=1 */
+    /**
+     * Scenario: Local scope, List input, N=1
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X() {
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X();
+    public void g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_1X() {
+        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_1X();
         printTraversalForm(traversal);
         final Set<String> expected = new HashSet(Arrays.asList("ripple", "lop"));
         final Set<String> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: Local scope, List input, default N=1 */
+    /**
+     * Scenario: Local scope, List input, default N=1
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocalX() {
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocalX();
+    public void g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocalX() {
+        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocalX();
         printTraversalForm(traversal);
         final Set<String> expected = new HashSet(Arrays.asList("ripple", "lop"));
         final Set<String> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: Local scope, List input, N=1, empty input */
+    /**
+     * Scenario: Local scope, List input, N=1, empty input
+     */
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXlimitXlocal_0XX_tailXlocal_1X() {
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXlimitXlocal_0XX_tailXlocal_1X();
+    public void g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXlimitXlocal_0XX_tailXlocal_1X() {
+        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXlimitXlocal_0XX_tailXlocal_1X();
         printTraversalForm(traversal);
         final Set<String> expected = new HashSet();
         final Set<String> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: Local scope, Map input, N>1 */
+    /**
+     * Scenario: Local scope, Map input, N>1
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_2X() {
         final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_2X();
         printTraversalForm(traversal);
         final Set<Map<String, String>> expected = new HashSet(makeMapList(2,
-                 "b", "josh", "c", "ripple",
-                 "b", "josh", "c", "lop"));
+                "b", "josh", "c", "ripple",
+                "b", "josh", "c", "lop"));
         final Set<Map<String, String>> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
 
-    /** Scenario: Local scope, Map input, N=1 */
+    /**
+     * Scenario: Local scope, Map input, N=1
+     */
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_1X() {
         final Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_1X();
         printTraversalForm(traversal);
         final Set<Map<String, String>> expected = new HashSet(makeMapList(1,
-                 "c", "ripple",
-                 "c", "lop"));
+                "c", "ripple",
+                "c", "lop"));
         final Set<Map<String, String>> actual = new HashSet(traversal.toList());
         assertEquals(expected, actual);
     }
@@ -239,33 +264,33 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
-            return g.V().as("a").out().as("a").out().as("a").<List<String>>select("a").by(unfold().values("name").fold()).tail(local, 2);
+        public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
+            return g.V().as("a").out().as("a").out().as("a").<List<String>>select(Pop.mixed, "a").by(unfold().values("name").fold()).tail(local, 2);
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X() {
-            return g.V().as("a").out().as("a").out().as("a").<String>select("a").by(unfold().values("name").fold()).tail(local, 1);
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocal_1X() {
+            return g.V().as("a").out().as("a").out().as("a").<String>select(Pop.mixed, "a").by(unfold().values("name").fold()).tail(local, 1);
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocalX() {
-            return g.V().as("a").out().as("a").out().as("a").<String>select("a").by(unfold().values("name").fold()).tail(local);
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXunfold_valuesXnameX_foldX_tailXlocalX() {
+            return g.V().as("a").out().as("a").out().as("a").<String>select(Pop.mixed, "a").by(unfold().values("name").fold()).tail(local);
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXlimitXlocal_0XX_tailXlocal_1X() {
-            return g.V().as("a").out().as("a").out().as("a").<String>select("a").by(limit(local, 0)).tail(local, 1);
+        public Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXmixed_aX_byXlimitXlocal_0XX_tailXlocal_1X() {
+            return g.V().as("a").out().as("a").out().as("a").<String>select(Pop.mixed, "a").by(limit(local, 0)).tail(local, 1);
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_2X() {
-            return g.V().as("a").out().as("b").out().as("c").<String>select("a","b","c").by("name").tail(local, 2);
+            return g.V().as("a").out().as("b").out().as("c").<String>select("a", "b", "c").by("name").tail(local, 2);
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_1X() {
-            return g.V().as("a").out().as("b").out().as("c").<String>select("a","b","c").by("name").tail(local, 1);
+            return g.V().as("a").out().as("b").out().as("c").<String>select("a", "b", "c").by("name").tail(local, 1);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cd591d61/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
index 6e418b2..2b3960d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
@@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -39,6 +38,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Stream;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.CREW;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
@@ -141,9 +141,6 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXknowsX_asXbX_localXselectXa_bX_byXnameXX();
 
-    // Useful for permuting Pop use cases
-    protected final static List<Pop> POPS = Arrays.asList(null, Pop.first, Pop.last, Pop.all);
-
     @Test
     @LoadGraphWith(MODERN)
     public void g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX() {
@@ -498,7 +495,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_selectXaX() {
-        POPS.forEach(pop -> {
+        Stream.of(Pop.values()).forEach(pop -> {
             final Traversal<Vertex, Object> traversal = get_g_V_selectXaX(pop);
             printTraversalForm(traversal);
             assertEquals(Collections.emptyList(), traversal.toList());
@@ -508,7 +505,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_selectXa_bX() {
-        POPS.forEach(pop -> {
+        Stream.of(Pop.values()).forEach(pop -> {
             final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXa_bX(pop);
             printTraversalForm(traversal);
             assertEquals(Collections.emptyList(), traversal.toList());
@@ -518,7 +515,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_valueMap_selectXpop_aX() {
-        POPS.forEach(pop -> {
+        Stream.of(Pop.values()).forEach(pop -> {
             final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXpop_aX(pop);
             printTraversalForm(traversal);
             assertEquals(Collections.emptyList(), traversal.toList());
@@ -528,7 +525,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_valueMap_selectXpop_a_bX() {
-        POPS.forEach(pop -> {
+        Stream.of(Pop.values()).forEach(pop -> {
             final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXpop_a_bX(pop);
             printTraversalForm(traversal);
             assertEquals(Collections.emptyList(), traversal.toList());
@@ -771,26 +768,22 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop) {
-            final GraphTraversal<Vertex, Vertex> root = g.V();
-            return null == pop ? root.select("a") : root.select(pop, "a");
+            return g.V().select(pop, "a");
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop) {
-            final GraphTraversal<Vertex, Vertex> root = g.V();
-            return null == pop ? root.select("a", "b") : root.select(pop, "a", "b");
+            return g.V().select(pop, "a", "b");
         }
 
         @Override
         public Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop) {
-            final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap();
-            return null == pop ? root.select("a") : root.select(pop, "a");
+            return g.V().valueMap().select(pop, "a");
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop) {
-            final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap();
-            return null == pop ? root.select("a", "b") : root.select(pop, "a", "b");
+            return g.V().valueMap().select(pop, "a", "b");
         }
 
         // when labels don't exist