diff --git a/SanityCheck.jar b/SanityCheck.jar
index 36c886155cf61858bb6e54466cb88efc05f615cd..478417de473b6dd0de5575eef4d474e2ef3d7073 100644
Binary files a/SanityCheck.jar and b/SanityCheck.jar differ
diff --git a/devTools/javaSanityCheck/src/Main.java b/devTools/javaSanityCheck/src/Main.java
index 87b18682d2391fc678a383ccc4b47480278c0473..9c2d72a8ebe019e565a56e8daf3625c50c4b0f6d 100644
--- a/devTools/javaSanityCheck/src/Main.java
+++ b/devTools/javaSanityCheck/src/Main.java
@@ -261,26 +261,33 @@ public class Main {
                 if (change == 3) {
                     //remove the topmost element from stack since it is complete
                     KnownElement k = stack.pop().getKnownElement();
-                    //if KnownElement k is closing another tag check if there is one and remove it
+                    //if KnownElement k is closing another element, check if there is one and remove it
                     if (k.isClosing()) {
-                        if (stack.empty()) { //there are no open tags at all
-                            addError(new SyntaxError("Closed tag " + k.getShortDescription() + " without having any open tags.", -2));
+                        if (stack.empty()) { //there are no open elements at all
+                            addError(new SyntaxError("Closed tag " + k.getShortDescription() + " without " +
+                                    "having any open tags.", -2));
                         } else if (stack.peek() instanceof KnownElement) {
+                            //get opening tag
                             KnownElement kFirst = (KnownElement) stack.pop();
+                            //check if closing element matches the opening element
                             if (!kFirst.isMatchingElement(k)) {
                                 addError(new SyntaxError("Opening tag " + kFirst.getShortDescription() +
                                         " does not match closing tag " + k.getShortDescription() + ".", -2));
                             }
                         } else {
+                            //There closing tag inside another not Known element: <div </html>
                             addError(new SyntaxError("Closing tag " + k.getShortDescription() + " inside " +
-                                    "another tag: " + stack.peek().getShortDescription(), -2, true));
+                                    "another tag " + stack.peek().getShortDescription() + " without opening first.",
+                                    -2, true));
                         }
                     }
+                    //check if the element needs to be closed by another
                     if (k.isOpening()) {
                         stack.push(k);
                     }
                     return;
                 }
+                //means the element couldn't do anything with it and is finished
                 if (change == 4) {
                     stack.pop();
                 } else {
@@ -293,7 +300,7 @@ public class Main {
         //innermost element was uninterested, trying to find matching element
         switch (c) {
             //case '@':
-            //  stack.push(new AtElement(currentLine, currentPosition));
+            //stack.push(new AtElement(currentLine, currentPosition));
             //break;
             case '<':
                 stack.push(new AngleBracketElement(currentLine, currentPosition));
diff --git a/devTools/javaSanityCheck/src/element/AngleBracketElement.java b/devTools/javaSanityCheck/src/element/AngleBracketElement.java
index 233c4f303205ab5e24b7c7ffd8c45088002ed471..43538bd6986a30cbc1a98966c8f6fea15144a3a3 100644
--- a/devTools/javaSanityCheck/src/element/AngleBracketElement.java
+++ b/devTools/javaSanityCheck/src/element/AngleBracketElement.java
@@ -218,7 +218,7 @@ public class AngleBracketElement extends Element {
     private int handleClosingHTML(char c) throws SyntaxError {
         if (c == '>') {
             if (tree.getElement() == null) {
-                throw new SyntaxError("Unknown HTML tag", 2);
+                throw new SyntaxError("Unknown HTML tag: " + tree.getPath(), 2);
             }
             if (tree.getElement().single) {
                 throw new SyntaxError("Single HTML tag used as closing Tag: " + tree.getElement().tag, 2);
@@ -243,7 +243,6 @@ public class AngleBracketElement extends Element {
             if (tree.getElement() == null) {
                 //assuming not listed means widget until better solution
                 return 1;
-                //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + tree.getPath(), 1);
             }
             if (!tree.getElement().single) {
                 if (logicTags.contains(tree.getElement().tag)) {
@@ -260,7 +259,6 @@ public class AngleBracketElement extends Element {
             state = -5;
             if (tree.getElement() == null) {
                 //assuming not listed means widget until better solution
-                //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + tree.getPath(), 1);
                 return 1;
             }
             if (!tree.getElement().single) {
@@ -279,7 +277,6 @@ public class AngleBracketElement extends Element {
         if (tree == null) {
             //assuming not listed means widget until better solution
             state = 3;
-            //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + c, 1);
         }
 
         return 1;
@@ -288,7 +285,7 @@ public class AngleBracketElement extends Element {
     private int handleClosingTwine(char c) throws SyntaxError {
         if (c == '>') {
             if (tree.getElement() == null) {
-                throw new SyntaxError("Unknown Twine tag", 2);
+                throw new SyntaxError("Unknown Twine tag: " + tree.getPath(), 2);
             }
             if (tree.getElement().single) {
                 throw new SyntaxError("Single Twine tag used as closing Tag: " + tree.getElement().tag, 2);
@@ -319,6 +316,7 @@ public class AngleBracketElement extends Element {
             case 0:
                 builder.append("<");
                 break;
+            //TWINE
             case 1:
                 builder.append("<<");
                 break;
@@ -332,28 +330,49 @@ public class AngleBracketElement extends Element {
                 builder.append("<</").append(tree.getPath());
                 break;
             case 3:
-                builder.append("<<??? ???");
-                break;
-            case 4:
-                builder.append("<<?").append(tree.getPath()).append(" ???");
+                builder.append("<<???");
                 break;
             case -3:
-                builder.append("<<??? ???>");
+                builder.append("<<???>");
+                break;
+            case 4:
+                builder.append("<<").append(tree.getPath()).append(" ???");
                 break;
             case -4:
-                builder.append("<<?").append(tree.getPath()).append(" ???>");
+                builder.append("<<").append(tree.getPath()).append(" ???>");
                 break;
             case 5:
-                builder.append("<").append(tree.getPath()).append(" ???");
+                builder.append("<<???");
                 break;
             case -5:
-                builder.append("</").append(tree.getPath());
+                builder.append("<<").append(tree == null ? "???" : tree.getPath()).append(">");
                 break;
             case 6:
-                builder.append("<").append(tree.getPath()).append(" ???");
+                builder.append("<<").append(tree.getPath()).append(" ???>");
+                break;
+            case -6:
+                builder.append("<</").append(tree.getPath()).append(">");
+                break;
+            //HTML
+            case -9:
+                builder.append("</");
                 break;
+            case 10:
+                builder.append("<").append(tree.getPath());
+                break;
+            case -10:
+                builder.append("</").append(tree.getPath());
+                break;
+            case 11:
+                builder.append("<?").append(tree == null ? "???" : tree.getPath());
+                break;
+            case -11:
+                builder.append("</").append(tree == null ? "???" : tree.getPath());
+                break;
+            case 12:
+                builder.append("<").append(tree.getPath()).append(" ???");
             default:
-                //throw new UnknownStateException(state);
+                throw new UnknownStateException(state);
         }
         return builder.toString();
     }