diff --git a/pom.xml b/pom.xml
index b104ee5fa3ed9a466b2adc5a0b7ddcef4d053f1b..078a09e11182ee55409e3c0bf9e059595d527ae9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -246,9 +246,16 @@
 			<artifactId>vecmath</artifactId>
 			<version>1.3.1</version>
 		</dependency>
-            
 
-	</dependencies>
+        <dependency>
+            <groupId>xstream</groupId>
+            <artifactId>xstream</artifactId>
+            <version>1.2.2</version>
+        </dependency>
+
+
+
+    </dependencies>
 
 	<repositories>
 		<repository>
diff --git a/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java b/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java
index cd7720c8ca625fc238690959cbdad2736cc09c41..dce39859980038a3d020a9bf37a3158e7a3fe98d 100644
--- a/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java
+++ b/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java
@@ -18,12 +18,12 @@
  ******************************************************************************/
 package com.syncleus.dann.graphicalmodel.bayesian;
 
-import java.io.StringReader;
-import java.io.StringWriter;
 import java.util.*;
 import com.syncleus.dann.graph.ImmutableDirectedEdge;
 import com.syncleus.dann.graphicalmodel.GraphicalModelNode;
 import com.syncleus.dann.graphicalmodel.SimpleGraphicalModelNode;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.StaxDriver;
 import org.junit.*;
 
 public class TestSicknessBayesianNetwork
@@ -58,6 +58,20 @@ public class TestSicknessBayesianNetwork
 	private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
 	private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
 
+    @Test
+    public void testXml() throws Exception
+    {
+        testOverall();
+
+        final XStream xstream = new XStream(new StaxDriver());
+        final String xml = xstream.toXML(network);
+        Assert.assertTrue("could not serialize network!", xml != null);
+        final Object networkObject = xstream.fromXML(xml);
+        Assert.assertTrue("deserialized object type doesnt match serialized object type", networkObject instanceof MutableBayesianAdjacencyNetwork);
+        Assert.assertTrue("deserialized network had the wrong number of edges", ((MutableBayesianAdjacencyNetwork)networkObject).getEdges().size() == network.getEdges().size());
+        Assert.assertTrue("deserialized network had the wrong number of nodes", ((MutableBayesianAdjacencyNetwork)networkObject).getNodes().size() == network.getNodes().size());
+    }
+
 	@Test
 	public void testOverallRepeated()
 	{
diff --git a/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java b/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java
index 73810befa55ccd294de9c24d33db4344109d28cb..7002555dec65b23f8e14eea4fdd026e5264f5d8f 100644
--- a/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java
+++ b/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java
@@ -18,19 +18,15 @@
  ******************************************************************************/
 package com.syncleus.dann.graphicalmodel.markovrandomfield;
 
-import java.io.StringReader;
-import java.io.StringWriter;
 import java.util.*;
 import com.syncleus.dann.graph.ImmutableUndirectedEdge;
 import com.syncleus.dann.graphicalmodel.GraphicalModelNode;
 import com.syncleus.dann.graphicalmodel.SimpleGraphicalModelNode;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.StaxDriver;
 import org.junit.Assert;
 import org.junit.Test;
 
-import javax.xml.bind.JAXB;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Marshaller;
-
 public class TestSicknessRandomMarkovField
 {
 	private static enum BooleanState
@@ -63,6 +59,20 @@ public class TestSicknessRandomMarkovField
 	private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
 	private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
 
+    @Test
+    public void testXml() throws Exception
+    {
+        testOverall();
+
+        final XStream xstream = new XStream(new StaxDriver());
+        final String xml = xstream.toXML(network);
+        Assert.assertTrue("could not serialize network!", xml != null);
+        final Object networkObject = xstream.fromXML(xml);
+        Assert.assertTrue("deserialized object type doesnt match serialized object type", networkObject instanceof MutableMarkovRandomFieldAdjacencyGraph);
+        Assert.assertTrue("deserialized network had the wrong number of edges", ((MutableMarkovRandomFieldAdjacencyGraph)networkObject).getEdges().size() == network.getEdges().size());
+        Assert.assertTrue("deserialized network had the wrong number of nodes", ((MutableMarkovRandomFieldAdjacencyGraph)networkObject).getNodes().size() == network.getNodes().size());
+    }
+
     @Test
 	public void testOverallRepeated()
 	{