diff --git a/src/main/java/com/syncleus/dann/graph/AssignableBidirectedCloud.java b/src/main/java/com/syncleus/dann/graph/AssignableBidirectedHyperedge.java
similarity index 81%
rename from src/main/java/com/syncleus/dann/graph/AssignableBidirectedCloud.java
rename to src/main/java/com/syncleus/dann/graph/AssignableBidirectedHyperedge.java
index cbceb2077869a7568e06572a64b12e1511898d6f..f2813a7468adb6208572b10c62a0c7d25ae89e6b 100644
--- a/src/main/java/com/syncleus/dann/graph/AssignableBidirectedCloud.java
+++ b/src/main/java/com/syncleus/dann/graph/AssignableBidirectedHyperedge.java
@@ -20,11 +20,11 @@ package com.syncleus.dann.graph;
 
 import java.util.Map;
 
-public interface AssignableBidirectedCloud<
-	  	E extends AssignableBidirectedCloud.Endpoint<?>
-	  > extends AssignableCloud<E>, BidirectedCloud<E>
+public interface AssignableBidirectedHyperedge<
+	  	E extends AssignableBidirectedHyperedge.Endpoint<?>
+	  > extends AssignableCloud<E>, BidirectedHyperedge<E>
 {
-	interface Endpoint<T> extends AssignableCloud.Endpoint<T>, BidirectedCloud.Endpoint<T>
+	interface Endpoint<T> extends AssignableCloud.Endpoint<T>, BidirectedHyperedge.Endpoint<T>
 	{
 	}
 
@@ -34,5 +34,5 @@ public interface AssignableBidirectedCloud<
 		Endpoint.Direction getDirection();
 	}
 
-	<T, TE extends AssignableBidirectedCloud.Endpoint<? super T>> void reassignDirection(Map<TE,? extends ReassignmentPair<? extends T>> reassignments) throws InvalidGraphException;
+	<T, TE extends AssignableBidirectedHyperedge.Endpoint<? super T>> void reassignDirection(Map<TE,? extends ReassignmentPair<? extends T>> reassignments) throws InvalidGraphException;
 }
\ No newline at end of file
diff --git a/src/main/java/com/syncleus/dann/graph/AssignableMixableBidirectedEdge.java b/src/main/java/com/syncleus/dann/graph/AssignableMixableBidirectedEdge.java
index 11606f4ee4900970c8ccd427d8e095b08dec44e9..7f704049bb10ada3a3dbde2cf405dcffb669f714 100644
--- a/src/main/java/com/syncleus/dann/graph/AssignableMixableBidirectedEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/AssignableMixableBidirectedEdge.java
@@ -22,9 +22,9 @@ public interface AssignableMixableBidirectedEdge<
 	  	E extends AssignableMixableBidirectedEdge.Endpoint<?>,
 	  	LE extends E,
 	  	RE extends E
-	  > extends AssignableMixableEdge<E, LE, RE>, MixableBidirectedEdge<E, LE, RE>, AssignableBidirectedCloud<E>
+	  > extends AssignableMixableEdge<E, LE, RE>, MixableBidirectedEdge<E, LE, RE>, AssignableBidirectedHyperedge<E>
 {
-	interface Endpoint<T> extends AssignableMixableEdge.Endpoint<T>, MixableBidirectedEdge.Endpoint<T>, AssignableBidirectedCloud.Endpoint<T>
+	interface Endpoint<T> extends AssignableMixableEdge.Endpoint<T>, MixableBidirectedEdge.Endpoint<T>, AssignableBidirectedHyperedge.Endpoint<T>
 	{
 	};
 
diff --git a/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java b/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java
index 9e35739446bd09b37c1c74204c2da8d77a66f3c0..b6ba830c6017c8940b98459a1c37039f4a7b3f13 100644
--- a/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java
@@ -18,8 +18,6 @@
  ******************************************************************************/
 package com.syncleus.dann.graph;
 
-import java.util.Set;
-
 /**
  * A type of graph where every edge has exactly 2 end points and may have a
  * directionality at either end point. The two end points at each end do not
@@ -41,7 +39,7 @@ public interface BidirectedGraph<
 	interface Endpoint<
 		  	T
 		  >
-		  extends TraversableGraph.Endpoint<T>, BidirectedCloud.Endpoint<T>
+		  extends TraversableGraph.Endpoint<T>, BidirectedHyperedge.Endpoint<T>
 	{
 	};
 
diff --git a/src/main/java/com/syncleus/dann/graph/BidirectedCloud.java b/src/main/java/com/syncleus/dann/graph/BidirectedHyperedge.java
similarity index 88%
rename from src/main/java/com/syncleus/dann/graph/BidirectedCloud.java
rename to src/main/java/com/syncleus/dann/graph/BidirectedHyperedge.java
index 6d93baba1778838fdb2150e864585cd835549651..87332bf735d1b461a81331f9cb697f28c5c802f8 100644
--- a/src/main/java/com/syncleus/dann/graph/BidirectedCloud.java
+++ b/src/main/java/com/syncleus/dann/graph/BidirectedHyperedge.java
@@ -17,11 +17,11 @@
 
 package com.syncleus.dann.graph;
 
-public interface BidirectedCloud<
-	  E extends BidirectedCloud.Endpoint<?>
-	  > extends TraversableCloud<E>
+public interface BidirectedHyperedge<
+	  E extends BidirectedHyperedge.Endpoint<?>
+	  > extends TraversableHyperedge<E>
 {
-	interface Endpoint<T> extends TraversableCloud.Endpoint<T>
+	interface Endpoint<T> extends TraversableHyperedge.Endpoint<T>
 	{
 		enum Direction
 		{
diff --git a/src/main/java/com/syncleus/dann/graph/DynamicBidirectedGraph.java b/src/main/java/com/syncleus/dann/graph/DynamicBidirectedGraph.java
index 4019a23923dde5b67632beaa7a4a2864df596cdc..e0bef669abb2725758e19b1edbad3a9e1f3373f3 100644
--- a/src/main/java/com/syncleus/dann/graph/DynamicBidirectedGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/DynamicBidirectedGraph.java
@@ -23,12 +23,12 @@ public interface DynamicBidirectedGraph<
 	  	NE extends DynamicBidirectedGraph.NodeEndpoint<N>,
 	  	E extends BidirectedEdge<? extends BidirectedEdge.Endpoint<N>>,
 	  	EE extends DynamicBidirectedGraph.EdgeEndpoint<E>
-	  > extends BidirectedGraph<NE, EE>, DynamicGraph<N, NE, E, EE>, DynamicBidirectedCloud<N,NE>
+	  > extends BidirectedGraph<NE, EE>, DynamicGraph<N, NE, E, EE>, DynamicBidirectedHyperedge<N,NE>
 {
 	interface Endpoint<
 		  	T
 		  >
-		  extends BidirectedGraph.Endpoint<T>, DynamicGraph.Endpoint<T>, DynamicBidirectedCloud.Endpoint<T>
+		  extends BidirectedGraph.Endpoint<T>, DynamicGraph.Endpoint<T>, DynamicBidirectedHyperedge.Endpoint<T>
 	{
 	};
 
diff --git a/src/main/java/com/syncleus/dann/graph/DynamicBidirectedCloud.java b/src/main/java/com/syncleus/dann/graph/DynamicBidirectedHyperedge.java
similarity index 88%
rename from src/main/java/com/syncleus/dann/graph/DynamicBidirectedCloud.java
rename to src/main/java/com/syncleus/dann/graph/DynamicBidirectedHyperedge.java
index 5531191f806d459dc1ad3057d8e927818f2710c5..9ccaa0fdd01415ee9ef9c0bf245dfe974a0fbdf9 100644
--- a/src/main/java/com/syncleus/dann/graph/DynamicBidirectedCloud.java
+++ b/src/main/java/com/syncleus/dann/graph/DynamicBidirectedHyperedge.java
@@ -18,12 +18,12 @@
  ******************************************************************************/
 package com.syncleus.dann.graph;
 
-public interface DynamicBidirectedCloud<
+public interface DynamicBidirectedHyperedge<
 	  	T,
-	  	E extends DynamicBidirectedCloud.Endpoint<T>
-	  > extends DynamicCloud<T,E>, AssignableBidirectedCloud<E>
+	  	E extends DynamicBidirectedHyperedge.Endpoint<T>
+	  > extends DynamicCloud<T,E>, AssignableBidirectedHyperedge<E>
 {
-	interface Endpoint<T> extends DynamicCloud.Endpoint<T>, AssignableBidirectedCloud.Endpoint<T>
+	interface Endpoint<T> extends DynamicCloud.Endpoint<T>, AssignableBidirectedHyperedge.Endpoint<T>
 	{
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java b/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java
index 26a53f92002e04acc56cbb7d5848e84fd75980dd..ab231bdfe26e7522feb6b71195171eace79b36ca 100644
--- a/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java
@@ -22,9 +22,9 @@ public interface MixableBidirectedEdge<
 	  	E extends MixableBidirectedEdge.Endpoint<?>,
 	  	LE extends E,
 	  	RE extends E
-	  > extends MixableEdge<E, LE, RE>, BidirectedCloud<E>
+	  > extends MixableEdge<E, LE, RE>, BidirectedHyperedge<E>
 {
-	interface Endpoint<T> extends MixableEdge.Endpoint<T>, BidirectedCloud.Endpoint<T>
+	interface Endpoint<T> extends MixableEdge.Endpoint<T>, BidirectedHyperedge.Endpoint<T>
 	{
 	};
 
diff --git a/src/main/java/com/syncleus/dann/graph/TraversableHyperedge.java b/src/main/java/com/syncleus/dann/graph/TraversableHyperedge.java
new file mode 100644
index 0000000000000000000000000000000000000000..12fa9b50ec66a3ab79a341fb4bfdb47a2c41c406
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/TraversableHyperedge.java
@@ -0,0 +1,32 @@
+/******************************************************************************
+ *                                                                             *
+ *  Copyright: (c) Syncleus, Inc.                                              *
+ *                                                                             *
+ *  You may redistribute and modify this source code under the terms and       *
+ *  conditions of the Open Source Community License - Type C version 1.0       *
+ *  or any later version as published by Syncleus, Inc. at www.syncleus.com.   *
+ *  There should be a copy of the license included with this file. If a copy   *
+ *  of the license is not included you are granted no right to distribute or   *
+ *  otherwise use this file except through a legal and valid license. You      *
+ *  should also contact Syncleus, Inc. at the information below if you cannot  *
+ *  find a license:                                                            *
+ *                                                                             *
+ *  Syncleus, Inc.                                                             *
+ *  2604 South 12th Street                                                     *
+ *  Philadelphia, PA 19148                                                     *
+ *                                                                             *
+ ******************************************************************************/
+package com.syncleus.dann.graph;
+
+public interface TraversableHyperedge<
+        E extends TraversableHyperedge.Endpoint<?>
+        > extends TraversableCloud<E>, Hyperedge<E>
+{
+    interface Endpoint<T> extends Hyperedge.Endpoint<T>
+    {
+        boolean isTraversableFrom(Hyperedge.Endpoint<?> target);
+        boolean isTraversableTo(Hyperedge.Endpoint<?> target);
+        boolean isTraversableFrom();
+        boolean isTraversableTo();
+    }
+}