diff --git a/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java b/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java
index e510db3cea1818c59dcd68559e26e4995ebeba9d..a596f841fffd686b79c35edc480162bbdafaccd7 100644
--- a/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java
+++ b/src/main/java/com/syncleus/ferma/AbstractEdgeTraversal.java
@@ -48,7 +48,7 @@ import com.tinkerpop.pipes.util.structures.Tree;
  * 
  * @param <C> The cap of the current pipe.
  * @param <S> The SideEffect of the current pipe.
- * @param <M> The current mark'ed type for the current pipe.
+ * @param <M> The current marked type for the current pipe.
  */
 abstract class AbstractEdgeTraversal<C, S, M> extends AbstractTraversal<EdgeFrame, C, S, M> implements EdgeTraversal<C, S, M> {
 
@@ -425,7 +425,7 @@ abstract class AbstractEdgeTraversal<C, S, M> extends AbstractTraversal<EdgeFram
     }
 
     @Override
-    public EdgeTraversal<?, ?, M> order(final Comparator<EdgeFrame> compareFunction) {
+    public EdgeTraversal<?, ?, M> order(final Comparator<? super EdgeFrame> compareFunction) {
         return (EdgeTraversal<?, ?, M>) super.order(compareFunction);
     }
 
diff --git a/src/main/java/com/syncleus/ferma/AbstractTraversal.java b/src/main/java/com/syncleus/ferma/AbstractTraversal.java
index 78df28fc6d89cfa3ce2e7ffb8e58458f1b29fb6b..edfc0ed32400d4f860cf8660503380e3ab4631b2 100644
--- a/src/main/java/com/syncleus/ferma/AbstractTraversal.java
+++ b/src/main/java/com/syncleus/ferma/AbstractTraversal.java
@@ -462,7 +462,7 @@ abstract class AbstractTraversal<T, C, S, M> implements Traversal<T, C, S, M> {
     }
 
     @Override
-    public Traversal<T, ?, ?, M> order(final Comparator<T> compareFunction) {
+    public Traversal<T, ?, ?, M> order(final Comparator<? super T> compareFunction) {
         final FramingComparator framingComparator = new FramingComparator(compareFunction, graph());
         pipeline().order(new TraversalFunction<Pair<Object, Object>, Integer>() {
 
diff --git a/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java b/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java
index a011159e60b04dd56f047ecca4428ec91740f9e6..3da52fd1162734b8119781852866feee90c556d9 100644
--- a/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java
+++ b/src/main/java/com/syncleus/ferma/AbstractVertexTraversal.java
@@ -284,7 +284,7 @@ abstract class AbstractVertexTraversal<C, S, M> extends AbstractTraversal<Vertex
     }
 
     @Override
-    public VertexTraversal<?, ?, M> order(final Comparator<VertexFrame> compareFunction) {
+    public VertexTraversal<?, ?, M> order(final Comparator<? super VertexFrame> compareFunction) {
         return (VertexTraversal<?, ?, M>) super.order(compareFunction);
     }
 
diff --git a/src/main/java/com/syncleus/ferma/Comparators.java b/src/main/java/com/syncleus/ferma/Comparators.java
index 3392135dbeead681548b47de0e95ec1e12853644..a45d22ed439f9a81f1be89f98d6008507a36e3c0 100644
--- a/src/main/java/com/syncleus/ferma/Comparators.java
+++ b/src/main/java/com/syncleus/ferma/Comparators.java
@@ -34,55 +34,39 @@ import java.util.Comparator;
  *
  */
 public class Comparators {
+    
+    private static final IdComparator ID_COMPARATOR = new IdComparator();
+    private static final IdAsLongComparator ID_AS_LONG_COMPARATOR = new IdAsLongComparator();
 
     /**
      * Creates a comparator that compares by ID.
      * 
-     * @param <N> The type of framed element this comparator can compare.
      * @return The comparator.
      */
-    public static <N extends ElementFrame> Comparator<N> id() {
-        return new Comparator<N>() {
-            @Override
-            public int compare(final N t, final N t1) {
-                final Comparable c1 = t.getId();
-                final Comparable c2 = t1.getId();
-
-                return c1.compareTo(c2);
-            }
-        };
+    public static Comparator<ElementFrame> id() {
+        return ID_COMPARATOR;
     }
 
     /**
      * Compare by id parsed as a long (Useful for tinkergraph)
      * 
-     * @param <N> The type of framed element this comparator can compare.
      * @return The comparator.
      */
-    public static <N extends ElementFrame> Comparator<N> idAsLong() {
-        return new Comparator<N>() {
-            @Override
-            public int compare(final N t, final N t1) {
-                final Long c1 = Long.parseLong((String) t.getId());
-                final Long c2 = Long.parseLong((String) t1.getId());
-
-                return c1.compareTo(c2);
-            }
-        };
+    public static Comparator<ElementFrame> idAsLong() {
+        return ID_AS_LONG_COMPARATOR;
     }
 
     /**
      * Compare by property. Note that no value may be null.
      * 
-     * @param <N> The type of framed element this comparator can compare.
      * @param property
      *            The property to compare by.
      * @return The result of comparing the property.
      */
-    public static <N extends ElementFrame> Comparator<N> property(final String property) {
-        return new Comparator<N>() {
+    public static Comparator<ElementFrame> property(final String property) {
+        return new Comparator<ElementFrame>() {
             @Override
-            public int compare(final N t, final N t1) {
+            public int compare(final ElementFrame t, final ElementFrame t1) {
                 final Comparable c1 = t.getProperty(property);
                 final Comparable c2 = t1.getProperty(property);
 
@@ -91,4 +75,23 @@ public class Comparators {
         };
     }
 
+    private static final class IdComparator implements Comparator<ElementFrame> {
+        @Override
+        public int compare(final ElementFrame t, final ElementFrame t1) {
+            final Comparable c1 = t.getId();
+            final Comparable c2 = t1.getId();
+
+            return c1.compareTo(c2);
+        }
+    }
+    
+    private static final class IdAsLongComparator implements Comparator<ElementFrame> {
+        @Override
+        public int compare(final ElementFrame t, final ElementFrame t1) {
+            final Long c1 = Long.parseLong((String) t.getId());
+            final Long c2 = Long.parseLong((String) t1.getId());
+
+            return c1.compareTo(c2);
+        }
+    }
 }
diff --git a/src/main/java/com/syncleus/ferma/EdgeTraversal.java b/src/main/java/com/syncleus/ferma/EdgeTraversal.java
index c41696545660c1b49e5c9ef741986d16dd526d6b..05f2bea1dab8b769ad3f841200b52d1792eb24a1 100644
--- a/src/main/java/com/syncleus/ferma/EdgeTraversal.java
+++ b/src/main/java/com/syncleus/ferma/EdgeTraversal.java
@@ -443,7 +443,7 @@ public interface EdgeTraversal<C, S, M> extends Traversal<EdgeFrame, C, S, M> {
     EdgeTraversal<?, ?, M> order(TransformPipe.Order order);
 
     @Override
-    EdgeTraversal<?, ?, M> order(Comparator<EdgeFrame> compareFunction);
+    EdgeTraversal<?, ?, M> order(Comparator<? super EdgeFrame> compareFunction);
 
     @Override
     EdgeTraversal<?, ?, M> as(String name);
diff --git a/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java b/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java
index 4274f17aa064bc0f3c8d55b3f233ededff072b3d..c5e16b7b37006169284201d53ec5a1025e3e9717 100644
--- a/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java
+++ b/src/main/java/com/syncleus/ferma/GlobalVertexTraversal.java
@@ -578,7 +578,7 @@ public class GlobalVertexTraversal<C, S, M> implements VertexTraversal<C, S, M>
     }
 
     @Override
-    public VertexTraversal<?, ?, M> order(final Comparator<VertexFrame> compareFunction) {
+    public VertexTraversal<?, ?, M> order(final Comparator<? super VertexFrame> compareFunction) {
         return this.simpleDelegate().order(compareFunction);
     }
 
diff --git a/src/main/java/com/syncleus/ferma/SimpleTraversal.java b/src/main/java/com/syncleus/ferma/SimpleTraversal.java
index 5a41d4e25c09a4387e356d09090dadd9601e01f2..ccfb6de7fe0feb58809561f5a180dcd1d668423f 100644
--- a/src/main/java/com/syncleus/ferma/SimpleTraversal.java
+++ b/src/main/java/com/syncleus/ferma/SimpleTraversal.java
@@ -41,7 +41,7 @@ import com.tinkerpop.blueprints.Graph;
  * @param <T> The type of the objects coming off the pipe.
  * @param <C> The cap of the current pipe.
  * @param <S> The SideEffect of the current pipe.
- * @param <M> The current mark'ed type for the current pipe.
+ * @param <M> The current marked type for the current pipe.
  */
 class SimpleTraversal<T, C, S, M> extends AbstractTraversal<T, C, S, M> {
 
diff --git a/src/main/java/com/syncleus/ferma/Traversal.java b/src/main/java/com/syncleus/ferma/Traversal.java
index 49390f7200e3779ae4ed707f45669b6309dc9b53..1840f02ac286b0d45c0a08634dbe3772ad3ca685 100644
--- a/src/main/java/com/syncleus/ferma/Traversal.java
+++ b/src/main/java/com/syncleus/ferma/Traversal.java
@@ -621,7 +621,7 @@ public interface Traversal<T, C, S, M> extends Iterator<T>, Iterable<T> {
      *            a comparator function of two objects of type e
      * @return the extended Pipeline
      */
-    Traversal<T, ?, ?, M> order(Comparator<T> compareFunction);
+    Traversal<T, ?, ?, M> order(Comparator<? super T> compareFunction);
 
     /**
      * Wrap the previous step in an AsPipe. Useful for naming steps and is used
diff --git a/src/main/java/com/syncleus/ferma/VertexTraversal.java b/src/main/java/com/syncleus/ferma/VertexTraversal.java
index d38be92c8a384c38825008dc8fe786e3e2b4ee4e..56e897dc35c433f1b8c9a25cbff3b137fc978faf 100644
--- a/src/main/java/com/syncleus/ferma/VertexTraversal.java
+++ b/src/main/java/com/syncleus/ferma/VertexTraversal.java
@@ -706,7 +706,7 @@ public interface VertexTraversal<C, S, M> extends Traversal<VertexFrame, C, S, M
     VertexTraversal<?, ?, M> order();
 
     @Override
-    VertexTraversal<?, ?, M> order(Comparator<VertexFrame> compareFunction);
+    VertexTraversal<?, ?, M> order(Comparator<? super VertexFrame> compareFunction);
 
     @Override
     VertexTraversal<?, ?, M> order(TransformPipe.Order order);
diff --git a/src/test/java/com/syncleus/ferma/TraversalsTest.java b/src/test/java/com/syncleus/ferma/TraversalsTest.java
index 841191ef3895f16d1dc31a01dda8ff172cc6860c..e7c325670e5fdfc044c7c1d11a8997cc1b6b8c69 100644
--- a/src/test/java/com/syncleus/ferma/TraversalsTest.java
+++ b/src/test/java/com/syncleus/ferma/TraversalsTest.java
@@ -190,7 +190,7 @@ public class TraversalsTest {
         Assert.assertEquals("josh", graph.v().property("name").order().next());
         Assert.assertEquals("vadas", graph.v().property("name").order(Order.DECR).next());
 
-        Assert.assertEquals(graph.v(2).next(), graph.v().order(Comparators.<VertexFrame>property("name")).out("knows").next());
+        Assert.assertEquals(graph.v(2).next(), graph.v().order(Comparators.property("name")).out("knows").next());
 
     }