diff --git a/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore b/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore
index 472b549de865a7052a86fb69990f7fcb4feacc32..084cbadd60a61ec085cdce51d467dddc231e83a3 100644
--- a/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore
+++ b/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore
@@ -1,2 +1,3 @@
 /memo.xml.1.html
 /memo.xml.2.html
+/persons.xml.highlight.html
diff --git a/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java b/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java
index cd69c964cceb8d24ccac70e60bd0c8626567e542..3829ae4766a466467eff06c6a166d05aa1502980 100644
--- a/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java
+++ b/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java
@@ -3,7 +3,8 @@ package de.hdm_stuttgart.mi.sda1.scripts;
 import org.junit.Assert;
 import org.junit.Test;
 
-import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation;
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
+
 
 /**
  * Unit test for an XML instance set.
diff --git a/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java b/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java
index cd69c964cceb8d24ccac70e60bd0c8626567e542..61625d8dc26662a280c0fcb2fcf761526ce7b9f2 100644
--- a/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java
+++ b/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java
@@ -3,7 +3,7 @@ package de.hdm_stuttgart.mi.sda1.scripts;
 import org.junit.Assert;
 import org.junit.Test;
 
-import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation;
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
 
 /**
  * Unit test for an XML instance set.
diff --git a/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java b/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
index 433c8861e953e27dae88dd31ff28608edca5022f..bd335db5665c8efb0f4bbe48af2f2731f8654d63 100644
--- a/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
+++ b/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
@@ -3,7 +3,7 @@ package de.hdm_stuttgart.mi.sda1.exam.xsd;
 import org.junit.Assert;
 import org.junit.Test;
 
-import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation;
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
 
 /**
  * Unit test for an XML instance set.
diff --git a/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java b/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
index 433c8861e953e27dae88dd31ff28608edca5022f..bd335db5665c8efb0f4bbe48af2f2731f8654d63 100644
--- a/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
+++ b/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
@@ -3,7 +3,7 @@ package de.hdm_stuttgart.mi.sda1.exam.xsd;
 import org.junit.Assert;
 import org.junit.Test;
 
-import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation;
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
 
 /**
  * Unit test for an XML instance set.
diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/AssertXpathResult.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/AssertXpathResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3b497e64a7b782d71ea8ee7e2be8199ebc5d226
--- /dev/null
+++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/AssertXpathResult.java
@@ -0,0 +1,18 @@
+package de.hdm_stuttgart.mi.unitmarking.jdom;
+
+/**
+ * @author goik
+ *
+ */
+public class AssertXpathResult extends AssertionError {
+
+	private static final long serialVersionUID = -1369600480719379445L;
+
+	/**
+	 * @param msg
+	 */
+	public AssertXpathResult(String msg) {
+		super(msg);
+	}
+
+}
diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomAssert.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomAssert.java
new file mode 100644
index 0000000000000000000000000000000000000000..20a88df97e6888cb6c5578e00af8d68b5b016881
--- /dev/null
+++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomAssert.java
@@ -0,0 +1,83 @@
+package de.hdm_stuttgart.mi.unitmarking.jdom;
+
+import java.util.List;
+
+import org.jdom2.Element;
+import org.jdom2.xpath.XPathExpression;
+import org.jdom2.xpath.XPathFactory;
+
+/**
+ * Helper methods for analyzing XML result documents
+ *
+ */
+public class DomAssert {
+
+   final static XPathFactory xpf = XPathFactory.instance();
+
+   /**
+    * A given XPath expression is being evaluated for returning an expected number of element nodes
+    * 
+    * @param msg An informative text explaining an error's cause.
+    * @param context XPath evaluation will start from this node 
+    * @param xpath 
+    * @param expectedNodeCount
+    */
+   public static void assertNumberOfNodes(final String msg, final Element context,
+         final String xpath, int expectedNodeCount) {
+
+      @SuppressWarnings({ "unchecked", "rawtypes" })
+      final XPathExpression<Element> xpathExpr = (XPathExpression<Element>) (XPathExpression) xpf
+            .compile(xpath);
+
+      final List<Element> matchedNodes = xpathExpr.evaluate(context);
+
+      if (expectedNodeCount != matchedNodes.size()) {
+         throw new AssertXpathResult(msg + "\nExpected " + expectedNodeCount
+               + " node" + (expectedNodeCount == 1 ? "" : "s") + " for xpath '"
+               + xpath + "' but found " + matchedNodes.size());
+      }
+   }
+
+   /**
+    * A given XPath expression is being evaluated for returning exactly one element node of simple text content
+    * containing a given text.
+    * 
+    * @param msg
+    * @param context
+    * @param xpath
+    * @param expectedTagName Will be evaluated unless being set to null
+    * @param expectedContent Will be evaluated unless being set to null
+    */
+   public static void assertSingleNodeContent(final String msg,
+         final Element context, final String xpath, final String expectedTagName,
+         String expectedContent) {
+
+      @SuppressWarnings({ "unchecked", "rawtypes" })
+      final XPathExpression<Element> xpathExpr = (XPathExpression<Element>) (XPathExpression) xpf
+            .compile(xpath);
+      final List<Element> matchedNodes = xpathExpr.evaluate(context);
+
+      if (1 == matchedNodes.size()) {
+         final Element element = matchedNodes.get(0);
+
+         if (null != expectedTagName) {
+            final String actualTagName = element.getName();
+            if (!expectedTagName.equals(actualTagName)) {
+               throw new AssertXpathResult(msg + "\nExpected <" + expectedTagName
+                     + "> for xpath '" + xpath + "' but found <" + actualTagName + ">");
+            }
+         }
+         if (null != expectedContent) {
+            final String actualContent = element.getValue();
+            if (!expectedContent.equals(actualContent)) {
+               throw new AssertXpathResult(msg + "\nExpected element content '"
+                     + expectedContent + "' for xpath '" + xpath + "' but found '"
+                     + actualContent + "'");
+            }
+         }
+      } else {
+         throw new AssertXpathResult("Exactly node expected for xpath '" + xpath
+               + "' but found " + matchedNodes.size());
+      }
+   }
+}
diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilter.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf1aa59d028d8726d26945ad15917e73cfc89497
--- /dev/null
+++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilter.java
@@ -0,0 +1,19 @@
+package de.hdm_stuttgart.mi.unitmarking.jdom;
+
+import org.jdom2.Document;
+
+/**
+ * Transform a given Dom Tree
+ *
+ */
+public interface DomFilter {
+   
+   /**
+    * transform DOM input to output
+    * 
+    * @param input Input DOM tree
+    * @return output DOM tree
+    */
+   public Document process(final Document input);
+
+}
diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilterTest.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2de875a93e8f5326c121220ce7f467f1ea700d3
--- /dev/null
+++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilterTest.java
@@ -0,0 +1,69 @@
+package de.hdm_stuttgart.mi.unitmarking.jdom;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.jdom2.Document;
+import org.jdom2.Element;
+import org.jdom2.JDOMException;
+import org.jdom2.input.SAXBuilder;
+import org.jdom2.output.Format;
+import org.jdom2.output.XMLOutputter;
+
+public abstract class DomFilterTest {
+
+   public static String xmlInputFileName, xmlOutputFileName;
+   static DomFilter domFilter;
+   protected static String initializationErrorString = null;
+
+   protected static Element xmlRootElement = null;
+
+   static protected void init (final String xmlInputFileName,
+         final DomFilter domFilter, 
+         final String resultFileExtension) {
+      DomFilterTest.xmlInputFileName = xmlInputFileName;
+      DomFilterTest.xmlOutputFileName = xmlInputFileName + resultFileExtension;
+      DomFilterTest.domFilter = domFilter;
+      processAndParseResult();
+   }
+
+   static protected void processAndParseResult() {
+
+      final SAXBuilder builder = new SAXBuilder();
+      final Document input;
+      try {
+         input = builder.build(xmlInputFileName);
+      } catch (JDOMException | IOException e) {
+         initializationErrorString = "Error parsing input:" + e.getLocalizedMessage();
+         return;
+      }
+
+      final PrintStream out;
+      try {
+         out = new PrintStream(xmlOutputFileName);
+      } catch (FileNotFoundException e1) {
+         initializationErrorString = "Unable to open result file '" + xmlOutputFileName
+               + "' for writing";
+         return;
+      }
+
+      // Print to file
+      final Document result = domFilter.process(input);
+      xmlRootElement = result.getRootElement();
+      final Format outFormat = Format.getPrettyFormat();
+      final XMLOutputter printer = new XMLOutputter(outFormat);
+      try {
+         printer.output(result, out);
+      } catch (IOException e) {
+         initializationErrorString = "Error serializing result document to file '" + xmlOutputFileName + "': " + e.getLocalizedMessage();
+         return;
+      }
+      // Print to standard out as well
+      try {
+         printer.output(result, System.out);
+      } catch (IOException e) {
+         initializationErrorString = "Error serializing result document to standard output: " + e.getLocalizedMessage();
+      }
+   }
+}
diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceSetEvaluation.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java
similarity index 98%
rename from ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceSetEvaluation.java
rename to ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java
index d86a24fd0a3d05fe19755ab2a23e14ec5ddd4c26..eb30f8309193cace9844e9afd5470cc265294b46 100644
--- a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceSetEvaluation.java
+++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java
@@ -1,4 +1,4 @@
-package de.hdm_stuttgart.mi.sda1.exam.xsdmarking;
+package de.hdm_stuttgart.mi.unitmarking.xsd;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceTest.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceTest.java
similarity index 99%
rename from ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceTest.java
rename to ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceTest.java
index 531b7ae9927ce32e50e5f985e5e389ab044a554b..ee68fe15f042607127308e917ef852255aeb662d 100644
--- a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceTest.java
+++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceTest.java
@@ -1,4 +1,4 @@
-package de.hdm_stuttgart.mi.sda1.exam.xsdmarking;
+package de.hdm_stuttgart.mi.unitmarking.xsd;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/ws/eclipse/ExamTesting/pom.xml b/ws/eclipse/ExamTesting/pom.xml
index 8c61e755043a1e1aac0a8fc02615b1fb202d52e9..0b5c7a9c9abb91ac743d3b981b3605efe88febd9 100644
--- a/ws/eclipse/ExamTesting/pom.xml
+++ b/ws/eclipse/ExamTesting/pom.xml
@@ -20,7 +20,7 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.11</version>
+      <version>4.12</version>
     </dependency>
 
     <dependency>
@@ -54,7 +54,7 @@
         <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.1</version>
+        <version>3.5.1</version>
         <configuration>
           <source>1.8</source>
           <target>1.8</target>