diff --git a/CHANGELOG.md b/CHANGELOG.md
index 48bdd905594894e38e28e8e140984a9128f7b9bc..e1e6ac68257f713607317af828279564958192bb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,8 @@
   vertex in the users custom model.
 * Methods annotated with the `@Incidence` annotation can now return a `List` or a `Set` in addition to the usual
   `Iterator` return type.
+* Removed the upper bound on traversal generics. The travese function's argument has changed from
+  `GraphTraversal<? extends Vertex, ? extends Vertex>` to `GraphTraversal<Vertex, Vertex>`.
 
 ## 3.1.0
 
diff --git a/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java b/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
index 41b1d2ba4b22a680420b2ce249de3b658d6d0081..f94ae158b0baf6681535eceb3b19bcec5212eb13 100644
--- a/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
+++ b/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
@@ -83,7 +83,7 @@ public abstract class AbstractEdgeFrame extends AbstractElementFrame implements
     }
 
     @Override
-    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>> traverser) {
+    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<Edge, Edge>, GraphTraversal<?, ?>> traverser) {
         return this.getGraph().traverse(input -> traverser.apply(input.E(getElement().id())));
     }
 
diff --git a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
index f00568b74187633346ea3294ef73082b1a464959..98c66d08a43ae1710396346f935c5a745acac641 100644
--- a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
+++ b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
@@ -268,7 +268,7 @@ public abstract class AbstractVertexFrame extends AbstractElementFrame implement
     }
 
     @Override
-    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>> traverser) {
+    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<Vertex, Vertex>, GraphTraversal<?, ?>> traverser) {
         return this.getGraph().traverse(input -> traverser.apply(input.V(getElement().id())));
     }
 
diff --git a/src/main/java/com/syncleus/ferma/EdgeFrame.java b/src/main/java/com/syncleus/ferma/EdgeFrame.java
index e4cc82ace804ec542f192d2317bb5782983b9727..69d600987124e03382bc0a3f1a7db76a6884228a 100644
--- a/src/main/java/com/syncleus/ferma/EdgeFrame.java
+++ b/src/main/java/com/syncleus/ferma/EdgeFrame.java
@@ -56,7 +56,7 @@ public interface EdgeFrame extends ElementFrame {
      */
     <T> T reframeExplicit(Class<T> kind);
 
-    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>> traverser);
+    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<Edge, Edge>, GraphTraversal<?, ?>> traverser);
 
     GraphTraversal<? extends Edge, ? extends Edge> getRawTraversal();
 }
diff --git a/src/main/java/com/syncleus/ferma/VertexFrame.java b/src/main/java/com/syncleus/ferma/VertexFrame.java
index 3bf85d51cc9dba08e09c3c517ca322713a818776..a556d71a91c11917ddd48fdac28dd4e70c63ba12 100644
--- a/src/main/java/com/syncleus/ferma/VertexFrame.java
+++ b/src/main/java/com/syncleus/ferma/VertexFrame.java
@@ -421,7 +421,7 @@ public interface VertexFrame extends ElementFrame {
      */
     <T> T reframeExplicit(Class<T> kind);
 
-    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>> traverser);
+    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<Vertex, Vertex>, GraphTraversal<?, ?>> traverser);
 
     GraphTraversal<? extends Vertex, ? extends Vertex> getRawTraversal();
 }
diff --git a/src/test/java/com/syncleus/ferma/FramedVertexTest.java b/src/test/java/com/syncleus/ferma/FramedVertexTest.java
index 76fb8903b54a84e1a4a512b61f9b15a1f01505e7..ff056a9e9c47bdd6824994c7da84af9c174ee094 100644
--- a/src/test/java/com/syncleus/ferma/FramedVertexTest.java
+++ b/src/test/java/com/syncleus/ferma/FramedVertexTest.java
@@ -32,8 +32,7 @@ import com.google.common.collect.Lists;
 import javax.annotation.Nullable;
 
 public class FramedVertexTest {
-    private static final Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>
-        OUT_TRAVERSAL = input -> input.out();
+    private static final Function<GraphTraversal<Vertex, Vertex>, GraphTraversal<?, ?>> OUT_TRAVERSAL = input -> input.out();
 
     private FramedGraph fg;
     private Person p1;