diff --git a/core/BayesNet.py b/core/BayesNet.py
deleted file mode 100644
index 9a3987bc4aedd1c85d99090218aae2f3819d78d1..0000000000000000000000000000000000000000
--- a/core/BayesNet.py
+++ /dev/null
@@ -1,129 +0,0 @@
-import sys
-
-import networkx as nx
-from core.Node import Node
-
-
-class BayesNet(object):
-    graph = nx.DiGraph()
-    node_lookup = {}
-
-    def __init__(self):
-        pass
-
-    def add_node(self, node):
-        if isinstance(node, Node):
-            if node.name in self.node_lookup.keys():
-                raise Exception("Node name already exists in Bayesnet: "+node.name)
-            self.node_lookup[node.name]=node
-            self.graph.add_node(node)
-        else:
-            raise Exception("Can only add 'Node' and its subclasses as nodes into the BayesNet")
-
-    def add_edge(self, node_from, node_to):
-        if node_from in self.graph.nodes() and node_to in self.graph.nodes():
-            self.graph.add_edge(node_from, node_to)
-            node_to.announce_parent(node_from)
-        else:
-            raise Exception("Tried to add an Edge between two Nodes of which at least one was not contained in the Bayesnet")
-
-    def remove_node(self, node):
-        if node.name not in self.node_lookup.keys():
-            raise Exception("Node " + node.name + "does not exists")
-        else :
-            try:
-                self.graph.remove_node(node)
-            except nx.exception.NetworkXError:
-                raise Exception("Tried to remove a node which does not exist.")
-            del self.node_lookup[node.name]
-
-    def remove_edge(self, node_from, node_to):
-        try:
-            self.graph.remove_edge(node_from, node_to)
-        except nx.exception.NetworkXError:
-            raise Exception("Tried to remove an edge which does not exist in the BayesNet")
-        #raise Exception("Fixme: Adapt CPD of child-node")
-
-    def get_node(self, node_name):
-        try:
-            return self.node_lookup[node_name]
-        except KeyError:
-            raise Exception("There is no node with name "+node_name+" in the BayesNet")
-
-    def get_nodes(self, node_names):
-        nodes = []
-        if not node_names:
-            nodes = self.graph.nodes()
-        else:
-            for node_name in node_names:
-                nodes.append(self.get_node(node_name))
-        return nodes
-
-    def get_parents(self, node):
-        if node.name not in self.node_lookup.keys():
-            raise Exception("Node " + node.name + "does not exists")
-        else:
-            return self.graph.predecessors(node)
-
-
-    def get_children(self, node):
-        if node.name not in self.node_lookup.keys():
-            raise Exception("Node " + node.name + "does not exists")
-        else:
-            return self.graph.successors(node)
-
-
-    def get_markov_blanket(self, node):
-        raise Exception("Called unimplemented function")
-
-    def is_dag(self):
-        raise Exception("Called unimplemented function")
-
-    def draw(self):
-        import matplotlib.pyplot as plt
-        nx.draw(self.graph)
-        plt.show()
-
-    def is_valid(self):
-        '''Check if graph structure is valid.
-        Returns true if graph is directed and acyclic, false otherwiese'''
-
-        if self.graph.number_of_selfloops() > 0:
-            return False
-
-        for node in self.graph.nodes():
-            if self.has_loop(node):
-                return False
-
-        return True
-
-    def has_loop(self, node, origin=None):
-        '''Check if any path from node leads back to node.
-
-        Keyword arguments:
-        node -- the start node
-        origin -- same as node for internal recursive loop (default: None)
-
-        Returns true on succes, false otherwise.'''
-        if not origin:
-            origin = node
-
-        for successor in self.graph.successors(node):
-            if successor == origin:
-                return True
-            else:
-                return self.has_loop(successor, origin)
-
-    def clear(self):
-        '''Remove all nodes and edges from the graph.
-        This also removes the name, and all graph, node and edge attributes.'''
-        self.graph.clear()
-        self.node_lookup.clear()
-
-    def number_of_nodes(self):
-        '''Return the number of nodes in the graph.'''
-        return len(self)
-
-    def __len__(self):
-        '''Return the number of nodes in the graph.'''
-        return len(self.graph)
diff --git a/core/DynamicBayesNet.py b/core/DynamicBayesNet.py
deleted file mode 100644
index 67babf43fad2875b6148c92bedfcd5f54c388893..0000000000000000000000000000000000000000
--- a/core/DynamicBayesNet.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from BayesNet import BayesNet
-
-
-class DynamicBayesNet(BayesNet):
-
-    def __init__(self):
-        super(DynamicBayesNet, self).__init__()
-
-    def add_edge(self, node_from, node_to, arc=False):
-        '''Add an directed edge to the graph.
-
-        Keyword arguments:
-        node_from -- from node
-        node_to -- to node
-        arc -- is this edge a temporal conditional dependency (default: False)
-        '''
-        super().add_edge(node_from, node_to)
-        # Adding an edge that already exists updates the edge data.
-        self.graph.add_edge(node_from, node_to, arc=arc)
-
diff --git a/core/Node.py b/core/Node.py
deleted file mode 100644
index f8b861c98080afca2b8b16a7124201aa61dcd2fc..0000000000000000000000000000000000000000
--- a/core/Node.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import abc
-
-
-class Node(object):
-    __metaclass__ = abc.ABCMeta
-
-    name = "UninitializedName"
-
-    def __init__(self, node_name):
-        self.name = node_name
-
-    @abc.abstractmethod
-    def announce_parent(self, node):
-        """This method will be called by the graph-management to inform nodes
-        which just became children of other nodes, so they can adapt themselves
-        (e.g. their cpt)"""
-        return
-
-    def __str__(self):
-        print self.name
-        return self.name
diff --git a/core/__init__.py b/core/__init__.py
deleted file mode 100644
index 1413c9657cf97cd7c15ac1e7fb4c04e9932df4d2..0000000000000000000000000000000000000000
--- a/core/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from BayesNet import BayesNet
-from Node import Node
diff --git a/core/tests/BayesNet_test.py b/core/tests/BayesNet_test.py
deleted file mode 100644
index 19c9ce9782b51326879c7a2d7914091dc8223f10..0000000000000000000000000000000000000000
--- a/core/tests/BayesNet_test.py
+++ /dev/null
@@ -1,85 +0,0 @@
-import unittest
-
-from core.BayesNet import BayesNet
-from reasoning.DiscreteNode import DiscreteNode
-
-
-class NodeAddAndRemoveTestCase(unittest.TestCase):
-    def setUp(self):
-        self.bn = BayesNet()
-
-    def tearDown(self):
-        self.bn = None
-
-    def test_clear_and_len(self):
-        self.assertFalse(0 == len(self.bn))
-        self.assertFalse(0 == self.bn.number_of_nodes())
-        self.bn.clear()
-        self.assertEqual(0, len(self.bn))
-        self.assertEqual(0, self.bn.number_of_nodes())
-
-    def test_add_node(self):
-        self.bn.clear()
-        n = DiscreteNode("Some Node", [True, False])
-        self.bn.add_node(n)
-        self.assertEqual(n, self.bn.get_node("Some Node"))
-        self.assertTrue(n in self.bn.get_nodes(["Some Node"]))
-        node_with_same_name = DiscreteNode("Some Node", [True, False])
-        self.assertRaises(Exception, self.bn.add_node, node_with_same_name)
-
-    def test_remove_node(self):
-        self.bn.clear()
-        n = DiscreteNode("Some Node to remove", [True, False])
-        self.bn.add_node(n)
-        self.bn.remove_node(n)
-        self.assertFalse(n in self.bn.get_nodes([]))
-
-    def test_add_edge(self):
-        self.bn.clear()
-        n1 = DiscreteNode("1", [True, False])
-        n2 = DiscreteNode("2", [True, False])
-        self.bn.add_node(n1)
-        self.bn.add_node(n2)
-        self.bn.add_edge(n1, n2)
-        self.assertTrue(n1 in self.bn.get_parents(n2))
-        self.assertTrue(n2 in self.bn.get_children(n1))
-
-    def test_remove_edge(self):
-        self.bn.clear()
-        n1 = DiscreteNode("1", [True, False])
-        n2 = DiscreteNode("2", [True, False])
-        self.bn.add_node(n1)
-        self.bn.add_node(n2)
-        self.bn.add_edge(n1, n2)
-        self.assertEqual([n1], self.bn.get_parents(n2))
-        self.bn.remove_edge(n1, n2)
-        self.assertEqual([], self.bn.get_parents(n2))
-
-    def test_is_valid(self):
-        self.bn.clear()
-        n1 = DiscreteNode("1", [True, False])
-        n2 = DiscreteNode("2", [True, False])
-        self.bn.add_node(n1)
-        self.bn.add_node(n2)
-        self.bn.add_edge(n1, n2)
-        self.assertTrue(self.bn.is_valid())
-        self.bn.add_edge(n1, n1)
-        self.assertFalse(self.bn.is_valid())
-        self.bn.remove_edge(n1, n1)
-        self.assertTrue(self.bn.is_valid())
-        n3 = DiscreteNode("3", [True, False])
-        n4 = DiscreteNode("4", [True, False])
-        self.bn.add_node(n3)
-        self.bn.add_node(n4)
-        self.assertTrue(self.bn.is_valid())
-        self.bn.add_edge(n2, n3)
-        self.assertTrue(self.bn.is_valid())
-        self.bn.add_edge(n3, n4)
-        self.assertTrue(self.bn.is_valid())
-        self.bn.add_edge(n4, n1)
-        self.assertFalse(self.bn.is_valid())
-
-
-#include this so you can run this test without nose
-if __name__ == '__main__':
-    unittest.main()
diff --git a/decision/DecisionNode.py b/decision/DecisionNode.py
deleted file mode 100644
index ef4bc4452ff1f4eaa394251e15d5d0a657d1bba9..0000000000000000000000000000000000000000
--- a/decision/DecisionNode.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from core.Node import Node
-
-
-class DecisionNode(Node):
-    '''TODO: write doc'''
-    def __init__(self):
-        super(DecisionNode, self).__init__()
\ No newline at end of file
diff --git a/decision/UtilityNode.py b/decision/UtilityNode.py
deleted file mode 100644
index 773446d907e186b9993e756defee35b92c4a46ca..0000000000000000000000000000000000000000
--- a/decision/UtilityNode.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from core.Node import Node
-
-
-class UtilityNode(Node):
-    '''TODO: write doc'''
-    def __init__(self):
-        super(UtilityNode, self).__init__()
\ No newline at end of file
diff --git a/ExampleBayesNet.py b/examples/ExampleBayesNet.py
similarity index 100%
rename from ExampleBayesNet.py
rename to examples/ExampleBayesNet.py
diff --git a/teilprojekt3_djohn_mbaum.py b/examples/teilprojekt3_djohn_mbaum.py
similarity index 100%
rename from teilprojekt3_djohn_mbaum.py
rename to examples/teilprojekt3_djohn_mbaum.py
diff --git a/lib/networkx-1.7-py2.7.egg b/lib/networkx-1.7-py2.7.egg
deleted file mode 100644
index a7f43dcf1e07e6b3d4e7a721a155475b4fd154e2..0000000000000000000000000000000000000000
Binary files a/lib/networkx-1.7-py2.7.egg and /dev/null differ
diff --git a/reasoning/DiscreteNode.py b/reasoning/DiscreteNode.py
deleted file mode 100644
index 732055735c09868d6ea1548fca75132edd43ff13..0000000000000000000000000000000000000000
--- a/reasoning/DiscreteNode.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from reasoning.RandomNode import RandomNode
-from reasoning.density.ProbabilityTable import ProbabilityTable
-
-
-class DiscreteNode(RandomNode):
-    '''#TODO: write doc'''
-
-    def __init__(self, name, value_range):
-        super(DiscreteNode, self).__init__(name)
-
-        self.value_range = value_range
-        self.cpd = ProbabilityTable()
-        self.cpd.add_variable(self)
-
-    def announce_parent(self, node):
-        self.cpd.add_variable(node)
-
-    def __str__(self):
-        return self.name + "\n" + str(self.cpd)
-
-    def set_probability(self, value, node_value_pairs):
-        self.cpd.set_probability(value, node_value_pairs)
-
-    def set_probability_table(self, table, nodes):
-        self.cpd.set_probability_table(table, nodes)
-
-    def is_valid(self):
-        return self.cpd.is_normalized_as_cpt(self)
diff --git a/reasoning/GaussNode.py b/reasoning/GaussNode.py
deleted file mode 100644
index 1f084e6359a40ebc0a47c5043d5d50ee07b61ff2..0000000000000000000000000000000000000000
--- a/reasoning/GaussNode.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from reasoning.RandomNode import RandomNode
-
-
-class GaussNode(RandomNode):
-    '''TODO: write doc'''
-
-    def __init__(self):
-        super(GaussNode, self).__init__()
\ No newline at end of file
diff --git a/reasoning/RandomNode.py b/reasoning/RandomNode.py
deleted file mode 100644
index 578f3ca5c6ef190a1f282db227295bd288d6236b..0000000000000000000000000000000000000000
--- a/reasoning/RandomNode.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from core.Node import Node
-from reasoning.density import Density
-
-
-class RandomNode(Node):
-    '''TODO: write doc'''
-
-    cpd = Density()
-
-    def __init__(self, name):
-        super(RandomNode, self).__init__(name)
-
-    def is_valid(self):
-        raise Exception("Called an unimplemented function")
-        
diff --git a/reasoning/__init__.py b/reasoning/__init__.py
deleted file mode 100644
index db4cecb7e413f7cfd8aef4dbadc8bfb298127f02..0000000000000000000000000000000000000000
--- a/reasoning/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from DiscreteNode import DiscreteNode
-from GaussNode import GaussNode
-from RandomNode import RandomNode
diff --git a/reasoning/density/Density.py b/reasoning/density/Density.py
deleted file mode 100644
index 1d8f868177082e8c6526a48044f2a3fe8c2e3216..0000000000000000000000000000000000000000
--- a/reasoning/density/Density.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-
-
-class Density(object):
-    '''TODO: write doc'''
-
-    def __init__(self):
-        super(Density, self).__init__()
diff --git a/reasoning/density/Gauss.py b/reasoning/density/Gauss.py
deleted file mode 100644
index bef6d4941554bf4c5775ce51b5543808e624fe86..0000000000000000000000000000000000000000
--- a/reasoning/density/Gauss.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from reasoning.density import Density
-
-
-class Gauss(Density):
-    '''TODO: write doc'''
-
-    def __init__(self):
-        super(Gauss, self).__init__()
diff --git a/reasoning/density/ProbabilityTable.py b/reasoning/density/ProbabilityTable.py
deleted file mode 100644
index 377cef02e164977fb3223e696b1d768d51d6e49c..0000000000000000000000000000000000000000
--- a/reasoning/density/ProbabilityTable.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# -*- coding: utf-8 -*-
-import numpy
-from reasoning.density import Density
-
-class ProbabilityTable(Density):
-    '''TODO: write doc'''
-
-    
-
-    def __init__(self):
-        super(ProbabilityTable, self).__init__()
-        
-        #self.owner = owner
-        #self.variables = [owner]
-
-        #size_of_range = len(owner.value_range)
-        #self.table = numpy.ones(size_of_range) / size_of_range
-
-        self.variables = []
-        self.table = numpy.array(0)
-
-    def add_variable(self, variable):
-        self.variables.append(variable)
-
-        ax = self.table.ndim
-        self.table=numpy.expand_dims(self.table,ax)
-        self.table=numpy.repeat(self.table,len(variable.value_range),axis = ax)   
-
-    def set_probability_table(self, table, nodes):
-        if not set(nodes) == set(self.variables):
-            raise Exception("The list which should define the ordering of the variables does not match"
-                " the variables that this cpt depends on (plus the node itself)")
-        if not self.table.ndim == table.ndim:
-            raise Exception("The provided probability table does not have the right number of dimensions")
-        for d,node in enumerate(nodes):
-            if len(node.value_range) != table.shape[d]:
-                raise Exception("The size of the provided probability table does not match the number of possible values of the node "+node.name+" in dimension "+str(d))
-
-        self.table = table
-        self.variables = nodes
-
-    def set_probability(self, value, node_value_pairs):
-        index = self.get_cpt_index(node_value_pairs) 
-        self.table[tuple(index)]=value
-
-    def get_cpt_index(self, node_value_pairs):
-        nodes, values = zip(*node_value_pairs)
-        index = []
-        for node in self.variables:
-            index_in_values_list = nodes.index(node)
-            value = values[index_in_values_list]
-            index.append(node.value_range.index(value))
-        return index
-
-
-    def is_normalized_as_cpt(self,owner):
-
-        dim_of_owner = self.variables.index(owner)
-        sum_of_owner_probs = numpy.sum(self.table, dim_of_owner)
-
-        return set(sum_of_owner_probs.flatten()) == set([1])
-
-    def is_normalized_as_jpt(self):
-        return numpy.sum(table) == 1.0
-
-    def multiplication(self, factor):
-        raise Exception("Called unimplemented function")    
-    
-    def marginalization(self, variable):
-        raise Exception("Called unimplemented function")       
-        
-    def reduction(self):
-        raise Exception("Called unimplemented function")
-
-    def division(self, factor):
-        raise Exception("Called unimplemented function")
-
-    def __str__(self):
-        return str(self.table)
diff --git a/reasoning/density/__init__.py b/reasoning/density/__init__.py
deleted file mode 100644
index 0047f8ebd03c6b53e55dc932c3305c715d8a6a14..0000000000000000000000000000000000000000
--- a/reasoning/density/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from Density import Density
-from ProbabilityTable import ProbabilityTable
-from Gauss import Gauss