diff --git a/src/main/java/com/syncleus/dann/graph/AssignableCloud.java b/src/main/java/com/syncleus/dann/graph/AssignableCloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ba2d67d0bd1ad04eeb28969c45c915f68d937f0
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/AssignableCloud.java
@@ -0,0 +1,35 @@
+/******************************************************************************
+ *                                                                             *
+ *  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;
+
+import java.util.Map;
+import java.util.Set;
+
+public interface AssignableCloud<
+	  	T,
+	  	EP extends AssignableCloud.Endpoint<? extends T>
+	  > extends Cloud<T,EP>
+{
+	interface Endpoint<T> extends Cloud.Endpoint<T>
+	{
+		void setTarget(T newTarget) throws InvalidEdgeException;
+	}
+
+	void reassign(Map<? extends EP,? extends T> reassignments) throws InvalidGraphException;
+}
diff --git a/src/main/java/com/syncleus/dann/graph/AssignableEdge.java b/src/main/java/com/syncleus/dann/graph/AssignableEdge.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe9d1d3802469418ff143930ac007c4d9ff62706
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/AssignableEdge.java
@@ -0,0 +1,29 @@
+/******************************************************************************
+ *                                                                             *
+ *  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 AssignableEdge<
+	  	T,
+	  	EP extends AssignableEdge.Endpoint<? extends T>
+	  > extends Edge<T, EP>, AssignableCloud<T,EP>
+{
+	interface Endpoint<T> extends Edge.Endpoint<T>, AssignableCloud.Endpoint<T>
+	{
+	};
+}
diff --git a/src/main/java/com/syncleus/dann/graph/AssignableGraph.java b/src/main/java/com/syncleus/dann/graph/AssignableGraph.java
index 9be50dc7c6e4db61e4166d77f173f5ddf913d5a2..4fdc973d2f1da4d1064dc0f011d4b84800080309 100644
--- a/src/main/java/com/syncleus/dann/graph/AssignableGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AssignableGraph.java
@@ -23,22 +23,28 @@ public interface AssignableGraph<
 	  	E extends Cloud<N,? extends Cloud.Endpoint<? extends N>>,
 	  	NEP extends AssignableGraph.NodeEndpoint<N, E>,
 	  	EEP extends AssignableGraph.EdgeEndpoint<N, E>
-	  >  extends Graph<N,E,NEP,EEP>
+	  >  extends Graph<N,E,NEP,EEP>, AssignableCloud<Object,AssignableGraph.Endpoint<?, N,E>>
 {
+	interface Endpoint<
+			  T,
+			  N,
+			  E extends Cloud<N,? extends Cloud.Endpoint<? extends N>>
+		  >
+		  extends Graph.Endpoint<T,N,E>, AssignableCloud.Endpoint<T>
+	{
+	};
 
 	interface NodeEndpoint<
 		  ON,
 		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
-	  > extends Graph.NodeEndpoint<ON,OE>, Cloud.AssignableEndpoint<ON>
+	  > extends Graph.NodeEndpoint<ON,OE>, AssignableCloud.Endpoint<ON>
 	{
-		void setTarget(ON newTarget) throws InvalidGraphException;
 	};
 
 	interface EdgeEndpoint<
 		  ON,
 		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
-	  > extends Graph.EdgeEndpoint<ON,OE>, Cloud.AssignableEndpoint<OE>
+	  > extends Graph.EdgeEndpoint<ON,OE>, AssignableCloud.Endpoint<OE>
 	{
-		void setTarget(OE newTarget) throws InvalidGraphException;
 	};
 }
diff --git a/src/main/java/com/syncleus/dann/graph/Cloud.java b/src/main/java/com/syncleus/dann/graph/Cloud.java
index 094c4cac65fa3d7a075847823726d28eb61971e1..053fb050f4fdeb199d1c7c2c13f4c41dee28f512 100644
--- a/src/main/java/com/syncleus/dann/graph/Cloud.java
+++ b/src/main/java/com/syncleus/dann/graph/Cloud.java
@@ -40,11 +40,6 @@ public interface Cloud<
 		T getTarget();
 	};
 
-	interface AssignableEndpoint<T> extends Cloud.Endpoint<T>
-	{
-		void setTarget(T newTarget) throws InvalidEdgeException;
-	};
-
 	Set<EP> getEndpoints();
 	Set<EP> getEndpoints(Object target);
 	Set<T> getTargets();
diff --git a/src/main/java/com/syncleus/dann/graph/Graph.java b/src/main/java/com/syncleus/dann/graph/Graph.java
index 16484623ae7828b98e2e10470983865b7797fa6f..0b5e66b7c1ff067776e92b28a437e2bd993cac5c 100644
--- a/src/main/java/com/syncleus/dann/graph/Graph.java
+++ b/src/main/java/com/syncleus/dann/graph/Graph.java
@@ -19,6 +19,7 @@
 package com.syncleus.dann.graph;
 
 import java.util.Set;
+import com.sun.xml.internal.org.jvnet.fastinfoset.ExternalVocabulary;
 
 /**
  * Represents a graph as a collection of nodes connected by edges. A graph does
@@ -34,11 +35,13 @@ import java.util.Set;
  * @param <E> The type of edge for the given node type
  */
 public interface Graph<
+	  	A,
 	  	N,
 	  	E extends Cloud<N,? extends Cloud.Endpoint<? extends N>>,
+	  	AE extends Graph.Endpoint<A, N, E>,
 	  	NE extends Graph.NodeEndpoint<N, E>,
 	  	EE extends Graph.EdgeEndpoint<N, E>
-	  > extends Cloud<Object,Graph.Endpoint<?, N,E>>
+	  > extends Cloud<A,AE>
 {
 	interface Endpoint<
 			  T,
diff --git a/src/main/java/com/syncleus/dann/graph/HyperEdge.java b/src/main/java/com/syncleus/dann/graph/HyperEdge.java
index 9bf419301f2c0f25411834bce881b383ce32e068..9a5689103d6479658bc7ebeeee3b02a3d1629830 100644
--- a/src/main/java/com/syncleus/dann/graph/HyperEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/HyperEdge.java
@@ -19,13 +19,13 @@
 package com.syncleus.dann.graph;
 
 public interface HyperEdge<
-	  	N,
-	  	EP extends Edge.Endpoint<N>
-	  > extends Edge<N, EP>
+	  	T,
+	  	EP extends HyperEdge.Endpoint<? extends T>
+	  > extends Edge<T, EP>
 {
-	interface Endpoint<NN, EN extends NN> extends Edge.Endpoint<NN, EN>
+	interface Endpoint<NN> extends Edge.Endpoint<NN>
 	{
 	};
 
-	boolean isSymmetric(HyperEdge<N> symmetricEdge);
+	boolean isSymmetric(HyperEdge<T,EP> symmetricEdge);
 }
diff --git a/src/main/java/com/syncleus/dann/graph/JoinableCloud.java b/src/main/java/com/syncleus/dann/graph/JoinableCloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0841a681b3e6986d0e9d53a09945cb06a896e7d
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/JoinableCloud.java
@@ -0,0 +1,36 @@
+/******************************************************************************
+ *                                                                             *
+ *  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;
+
+import java.util.Map;
+import java.util.Set;
+
+public interface JoinableCloud<
+	  	T,
+	  	EP extends JoinableCloud.Endpoint<? extends T>
+	  > extends Cloud<T,EP>
+{
+	interface Endpoint<T> extends Cloud.Endpoint<T>
+	{
+	}
+
+	EP join(T edge) throws InvalidGraphException;
+	Map<T, EP> joins(Set<? extends T> edges) throws InvalidGraphException;
+	Map<T, Set<EP>> joins(Map<? extends T,? extends Integer> edges) throws InvalidGraphException;
+}
diff --git a/src/main/java/com/syncleus/dann/graph/JoinableEdge.java b/src/main/java/com/syncleus/dann/graph/JoinableEdge.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba71ce8b8d36b3c15c4a960e3eb120feeb49633b
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/JoinableEdge.java
@@ -0,0 +1,29 @@
+/******************************************************************************
+ *                                                                             *
+ *  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 JoinableEdge<
+	  	T,
+	  	EP extends JoinableEdge.Endpoint<? extends T>
+	  > extends Edge<T, EP>, JoinableCloud<T,EP>
+{
+	interface Endpoint<T> extends Edge.Endpoint<T>, JoinableCloud.Endpoint<T>
+	{
+	};
+}
diff --git a/src/main/java/com/syncleus/dann/graph/JoinableGraph.java b/src/main/java/com/syncleus/dann/graph/JoinableGraph.java
new file mode 100644
index 0000000000000000000000000000000000000000..11d2fdda98024be950b763dca0a4563f119c9e41
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/JoinableGraph.java
@@ -0,0 +1,42 @@
+/******************************************************************************
+ *                                                                             *
+ *  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 JoinableGraph<
+	  	N,
+	  	E extends Cloud<N,? extends Cloud.Endpoint<? extends N>>,
+	  	NEP extends JoinableGraph.NodeEndpoint<N, E>,
+	  	EEP extends JoinableGraph.EdgeEndpoint<N, E>
+	  >  extends Graph<N,E,NEP,EEP>
+{
+
+	interface NodeEndpoint<
+		  ON,
+		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
+	  > extends Graph.NodeEndpoint<ON,OE>, JoinableCloud.Endpoint<ON>
+	{
+	};
+
+	interface EdgeEndpoint<
+		  ON,
+		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
+	  > extends Graph.EdgeEndpoint<ON,OE>, JoinableCloud.Endpoint<OE>
+	{
+	};
+}
diff --git a/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java b/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java
index 283d55251d83950bd98257994d284169ccf3d26a..daa2fe264c9504f62c4f71a33ed64a8648d6d771 100644
--- a/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/MixableBidirectedEdge.java
@@ -18,9 +18,18 @@
  ******************************************************************************/
 package com.syncleus.dann.graph;
 
-public interface MixableBidirectedEdge<N, LN extends N, RN extends N> extends Edge<N>
+public interface MixableBidirectedEdge<
+	  	T,
+	  	LT extends T,
+	  	RT extends T,
+	  	EP extends MixableBidirectedEdge.Endpoint<? extends T, ? extends LT, ? extends RT>
+	  > extends Edge<T, EP>
 {
-	interface Endpoint<NN, EN extends NN, ON extends NN> extends Edge.Endpoint<NN, EN>
+	interface Endpoint<
+			  NN,
+			  EN extends NN,
+			  ON extends NN
+		  > extends Edge.Endpoint<NN>
 	{
 		enum Direction
 		{
@@ -31,8 +40,8 @@ public interface MixableBidirectedEdge<N, LN extends N, RN extends N> extends Ed
 		Endpoint<NN, ON,EN> getNeighbor();
 	};
 
-	Endpoint<N, LN,RN> getLeftEndPoint();
-	Endpoint<N, RN,LN> getRightEndPoint();
+	EP getLeftEndPoint();
+	EP getRightEndPoint();
 	boolean isIntroverted();
 	boolean isExtroverted();
 	boolean isDirected();
diff --git a/src/main/java/com/syncleus/dann/graph/MutableCloud.java b/src/main/java/com/syncleus/dann/graph/MutableCloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd6066718ca5096d5f02d2ea20416d2c47b241ca
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/MutableCloud.java
@@ -0,0 +1,29 @@
+/******************************************************************************
+ *                                                                             *
+ *  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 MutableCloud<
+	  	T,
+	  	EP extends MutableCloud.Endpoint<? extends T>
+	  > extends AssignableCloud<T,EP>, JoinableCloud<T,EP>, PartibleCloud<T, EP>
+{
+	interface Endpoint<T> extends AssignableCloud.Endpoint<T>, JoinableCloud.Endpoint<T>, PartibleCloud.Endpoint<T>
+	{
+	}
+}
diff --git a/src/main/java/com/syncleus/dann/graph/MutableEdge.java b/src/main/java/com/syncleus/dann/graph/MutableEdge.java
index 9559255572bac270b033af6feb084ef7be06af20..9abece6c8bf9e58864c4a47e928702138c575664 100644
--- a/src/main/java/com/syncleus/dann/graph/MutableEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/MutableEdge.java
@@ -21,9 +21,9 @@ package com.syncleus.dann.graph;
 public interface MutableEdge<
 	  	T,
 	  	EP extends MutableEdge.Endpoint<? extends T>
-	  > extends Edge<T, EP>, AssignableCloud<T,EP>
+	  > extends AssignableEdge<T, EP>, JoinableEdge<T,EP>, PartibleEdge<T,EP>, MutableCloud<T,EP>
 {
-	interface Endpoint<T> extends Edge.Endpoint<T>, AssignableCloud.Endpoint<T>
+	interface Endpoint<T> extends AssignableEdge.Endpoint<T>, JoinableEdge.Endpoint<T>, PartibleEdge.Endpoint<T>, MutableCloud.Endpoint<T>
 	{
 	};
 }
diff --git a/src/main/java/com/syncleus/dann/graph/MutableGraph.java b/src/main/java/com/syncleus/dann/graph/MutableGraph.java
index 109590b74f68c3b9b750414c5927c52b70db2b9c..883213c27db775b83e231ac7b33f0de05fce8d33 100644
--- a/src/main/java/com/syncleus/dann/graph/MutableGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/MutableGraph.java
@@ -24,21 +24,22 @@ import java.util.Set;
 public interface MutableGraph<
 	  	N,
 	  	E extends Cloud<N,? extends Cloud.Endpoint<? extends N>>,
-	  	NE extends MutableGraph.NodeEndpoint<N, E>,
-	  	EE extends MutableGraph.EdgeEndpoint<N, E>
-	  > extends AssignableGraph<N,E,NE,EE>
+	  	NEP extends MutableGraph.NodeEndpoint<N, E>,
+	  	EEP extends MutableGraph.EdgeEndpoint<N, E>
+	  >  extends Graph<N,E,NEP,EEP>
 {
+
 	interface NodeEndpoint<
-		  N,
-		  E extends Cloud<N,? extends Cloud.Endpoint<? extends N>>
-	  > extends AssignableGraph.NodeEndpoint<N,E>
+		  ON,
+		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
+	  > extends Graph.NodeEndpoint<ON,OE>, PartibleCloud.Endpoint<ON>
 	{
 	};
 
 	interface EdgeEndpoint<
 		  ON,
 		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
-	  > extends AssignableGraph.EdgeEndpoint<ON,OE>
+	  > extends Graph.EdgeEndpoint<ON,OE>, PartibleCloud.Endpoint<OE>
 	{
 	};
 
diff --git a/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java b/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java
index 3ba41f83f6d79d4e8bd9311568cee253e3fc826d..de36949f15fe68cc41807a4aef32f1a408a4d115 100644
--- a/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java
@@ -22,17 +22,10 @@ import java.util.*;
 
 public interface MutableHyperEdge<
 	  	T,
-	  	EP extends Edge.Endpoint<T>
+	  	EP extends MutableHyperEdge.Endpoint<? extends T>
 	  > extends HyperEdge<T,EP>, MutableEdge<T,EP>
 {
-	interface Endpoint<NN, EN extends NN> extends HyperEdge.Endpoint<NN, EN>, MutableEdge.Endpoint<NN, EN>
+	interface Endpoint<NN> extends HyperEdge.Endpoint<NN>, MutableEdge.Endpoint<NN>
 	{
 	};
-
-	Endpoint<T, T> join(final T node) throws InvalidEdgeException;
-	Map<T,Endpoint<T, T>> join(final Set<T> nodes) throws InvalidEdgeException;
-	void leave(final Endpoint<T, T> endPoint) throws InvalidEdgeException;
-	void leave(final Set<Endpoint<T, T>> endPoint) throws InvalidEdgeException;
-	void clear() throws InvalidEdgeException;
-	Map<T,Endpoint<T, T>> reconfigure(final Set<T> connectNodes, final Set<Endpoint<T, T>> disconnectEndPoints) throws InvalidEdgeException;
 }
diff --git a/src/main/java/com/syncleus/dann/graph/PartibleCloud.java b/src/main/java/com/syncleus/dann/graph/PartibleCloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..82ba759cfd3dc736b65e8dd42043be9f1ba4f8c3
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/PartibleCloud.java
@@ -0,0 +1,36 @@
+/******************************************************************************
+ *                                                                             *
+ *  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;
+
+import java.util.Set;
+
+public interface PartibleCloud<
+	  	T,
+	  	EP extends PartibleCloud.Endpoint<? extends T>
+	  > extends Cloud<T,EP>
+{
+	interface Endpoint<T> extends Cloud.Endpoint<T>
+	{
+		void part() throws InvalidEdgeException;
+	}
+
+	void leave(MutableGraph.EdgeEndpoint<?, ?> endpoint) throws InvalidGraphException;
+	void leave(Set<? extends MutableGraph.EdgeEndpoint<?, ?>> endpoints) throws InvalidGraphException;
+	void clear() throws InvalidGraphException;
+}
diff --git a/src/main/java/com/syncleus/dann/graph/PartibleEdge.java b/src/main/java/com/syncleus/dann/graph/PartibleEdge.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f43ef25a34a5e9cb8507d01cb72a008ff9ce786
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/PartibleEdge.java
@@ -0,0 +1,29 @@
+/******************************************************************************
+ *                                                                             *
+ *  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 PartibleEdge<
+	  	T,
+	  	EP extends PartibleEdge.Endpoint<? extends T>
+	  > extends Edge<T, EP>, PartibleCloud<T,EP>
+{
+	interface Endpoint<T> extends Edge.Endpoint<T>, PartibleCloud.Endpoint<T>
+	{
+	};
+}
diff --git a/src/main/java/com/syncleus/dann/graph/PartibleGraph.java b/src/main/java/com/syncleus/dann/graph/PartibleGraph.java
new file mode 100644
index 0000000000000000000000000000000000000000..19547419540acefbfd9a7cb7b5519d4bb29deea4
--- /dev/null
+++ b/src/main/java/com/syncleus/dann/graph/PartibleGraph.java
@@ -0,0 +1,42 @@
+/******************************************************************************
+ *                                                                             *
+ *  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 PartibleGraph<
+	  	N,
+	  	E extends Cloud<N,? extends Cloud.Endpoint<? extends N>>,
+	  	NEP extends PartibleGraph.NodeEndpoint<N, E>,
+	  	EEP extends PartibleGraph.EdgeEndpoint<N, E>
+	  >  extends Graph<N,E,NEP,EEP>
+{
+
+	interface NodeEndpoint<
+		  ON,
+		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
+	  > extends Graph.NodeEndpoint<ON,OE>, PartibleCloud.Endpoint<ON>
+	{
+	};
+
+	interface EdgeEndpoint<
+		  ON,
+		  OE extends Cloud<ON,? extends Cloud.Endpoint<? extends ON>>
+	  > extends Graph.EdgeEndpoint<ON,OE>, PartibleCloud.Endpoint<OE>
+	{
+	};
+}