diff --git a/HashingTool/Util/AsyncXMLValidator.cs b/HashingTool/Util/AsyncXMLValidator.cs
index f6e8dded14156a67a2395b89c620f271bee182f1..59d8254351e5de653d96ea6a43908b645f3dc03a 100644
--- a/HashingTool/Util/AsyncXMLValidator.cs
+++ b/HashingTool/Util/AsyncXMLValidator.cs
@@ -41,7 +41,7 @@ namespace HashingTool.Util
 	{
 		private XMLValidator _validator;
 
-		public AsyncXMLValidator(XmlReader xml, Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction)
+		public AsyncXMLValidator(XmlReader xml, Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent, string> validationErrorAction)
 		{
 			_validator = new XMLValidator(xml, resultaction, validationErrorAction);
 		}
diff --git a/HashingTool/ViewModel/HashComponentDataViewModel.cs b/HashingTool/ViewModel/HashComponentDataViewModel.cs
index 01641b30662e1801e6db9c0a5dfff0118ba66763..f9bdc6b59ba4a03dd817dd8fc919f0e381ee6c2a 100644
--- a/HashingTool/ViewModel/HashComponentDataViewModel.cs
+++ b/HashingTool/ViewModel/HashComponentDataViewModel.cs
@@ -154,14 +154,14 @@ namespace HashingTool.ViewModel
 					ms.Seek(0, SeekOrigin.Begin);
 					ComponentDataValid = true;
 					var validator = new AsyncXMLValidator(XmlReader.Create(ms), r => { ComponentDataValid = r; },
-						(s, e) => {
+						(s, e, m) => {
 							Application.Current.Dispatcher.Invoke(() => _xmlFile.LogError(
-								string.Format("Validation {0} Line {2}: {1}", 
-									s == XmlSeverityType.Warning ? "WARNING" : "ERROR",
+								string.Format("Validation {0} Line {2}: {1}{3}", 
+									s == XmlSeverityType.Warning ? "WARNING" : "ERROR", 
 									e.ValidationEventArgs == null
-										? e.Exception.Message + (e.Exception.InnerException != null ? Environment.NewLine + e.Exception.InnerException.Message : "")
+										? (e.Exception?.Message ?? "") + (e.Exception?.InnerException != null ? Environment.NewLine + e.Exception.InnerException.Message : "")
 										: e.ValidationEventArgs.Message,
-									e.ValidationEventArgs?.Exception.LineNumber ?? 0)));
+									e.ValidationEventArgs?.Exception.LineNumber ?? 0, m)));
 						});
 					await validator.ValidateXML(XmlDocumentType.DeclarationComponentData);
 				}
diff --git a/HashingTool/ViewModel/UserControl/XMLFileSelector.cs b/HashingTool/ViewModel/UserControl/XMLFileSelector.cs
index 1bcf23c1ccd3699d81beec8b449958e05febc08a..d1cecfc098b888d28f1d7f4e75b05a1ef3c49f1b 100644
--- a/HashingTool/ViewModel/UserControl/XMLFileSelector.cs
+++ b/HashingTool/ViewModel/UserControl/XMLFileSelector.cs
@@ -275,7 +275,7 @@ namespace HashingTool.ViewModel.UserControl
 			var valid = true;
 			try {
 				var validator = new AsyncXMLValidator(xml, r => { valid = r; },
-													(s, e) => {
+													(s, e, m) => {
 														Application.Current.Dispatcher.Invoke(
 															() => {
 																if (e.ValidationEventArgs == null) {
diff --git a/VECTO3GUI2020/Helper/XmlHelper.cs b/VECTO3GUI2020/Helper/XmlHelper.cs
index af8abe92b4bf8c5f6e0f6479ffaee6a9b75a1fbd..9401e886066fa33065514f54ea54a5abee7a1d55 100644
--- a/VECTO3GUI2020/Helper/XmlHelper.cs
+++ b/VECTO3GUI2020/Helper/XmlHelper.cs
@@ -36,7 +36,7 @@ namespace VECTO3GUI2020.Helper
 		}
 
 		public static bool ValidateXDocument(XDocument xDocument, Action<bool> resultAction = null,
-			Action<XmlSeverityType, ValidationEvent> validationErrorAction = null)
+			Action<XmlSeverityType, ValidationEvent, string> validationErrorAction = null)
 		{
 			var xmlDocument = xDocument.ToXmlDocument();
 			if (xmlDocument == null)
diff --git a/VectoCommon/VectoHashingTest/VectoHashTest.cs b/VectoCommon/VectoHashingTest/VectoHashTest.cs
index ce2fdff3a779688c744b6df1c4bd87e5ca49893b..9ac7c5b9eed305f9fc3b006b3404bb3648b343e3 100644
--- a/VectoCommon/VectoHashingTest/VectoHashTest.cs
+++ b/VectoCommon/VectoHashingTest/VectoHashTest.cs
@@ -743,7 +743,7 @@ namespace VectoHashingTest
 			var variationValid = h2.ValidateHash();
 			Assert.IsTrue(variationValid);
 
-			var validatorV = new XMLValidator(xmlDocV, validationErrorAction: (s, ve) => {});
+			var validatorV = new XMLValidator(xmlDocV, validationErrorAction: (s, ve, m) => {});
 			var result = validatorV.ValidateXML(XmlDocumentType.DeclarationComponentData);
 
 			Assert.IsFalse(result);
@@ -799,7 +799,7 @@ namespace VectoHashingTest
 			var h = VectoHash.Load(xmlDoc);
 			var hashed = h.AddHash();
 			var validator = new XMLValidator(XmlReader.Create(new StringReader(hashed.ToString())),
-				validationErrorAction: (s, ve) => { });
+				validationErrorAction: (s, ve, m) => { });
 			var result = validator.ValidateXML(XmlDocumentType.DeclarationComponentData);
 			
 			Assert.IsFalse(result);
diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs
index 120f525fe39329303faa87df3b20ce52e230b2bd..5dc37bed6ade17d72d79bcb08163d81ee524f480 100644
--- a/VectoCore/VectoCore/Utils/XMLValidator.cs
+++ b/VectoCore/VectoCore/Utils/XMLValidator.cs
@@ -44,22 +44,22 @@ namespace TUGraz.VectoCore.Utils
 {
 	public class XMLValidator
 	{
-		private readonly Action<XmlSeverityType, ValidationEvent> _validationErrorAction;
+		private readonly Action<XmlSeverityType, ValidationEvent, string> _validationErrorAction;
 		private readonly Action<bool> _resultAction;
 		private bool _valid;
 		private  XmlDocument _doc;
 		private List<string> _validationErrors = new List<string>();
 
-		private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction)
+		private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent, string> validationErrorAction)
 		{
-			_validationErrorAction = validationErrorAction ?? ((x, y) => { });
+			_validationErrorAction = validationErrorAction ?? ((x, y, s) => { });
 			_resultAction = resultaction ?? (x => { });
 			_valid = false;
 		}
 
 		public XMLValidator(
 			XmlReader document, Action<bool> resultaction = null,
-			Action<XmlSeverityType, ValidationEvent> validationErrorAction = null) : this(resultaction, validationErrorAction)
+			Action<XmlSeverityType, ValidationEvent, string> validationErrorAction = null) : this(resultaction, validationErrorAction)
 		{
 			_doc = new XmlDocument();
 			_doc.Load(document);
@@ -67,7 +67,7 @@ namespace TUGraz.VectoCore.Utils
 
 		public XMLValidator(
 			XmlDocument document, Action<bool> resultaction = null,
-			Action<XmlSeverityType, ValidationEvent> validationErrorAction = null) : this(resultaction, validationErrorAction)
+			Action<XmlSeverityType, ValidationEvent, string> validationErrorAction = null) : this(resultaction, validationErrorAction)
 		{
 			_doc = document;
 		}
@@ -115,22 +115,16 @@ namespace TUGraz.VectoCore.Utils
 		{
 			_resultAction(false);
 			_valid = false;
-			var validationEvent = new ValidationEvent { ValidationEventArgs = args };
-			if (sender == this) {
-				//validationEvent = new ValidationEvent() { };
-			} else {
-				_validationErrors.Add(args?.Message ?? "no schema found");
-				_validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args });
-			}
-			_validationErrorAction(args?.Severity ?? XmlSeverityType.Error, validationEvent);
+			_validationErrors.Add(args?.Message ?? "no schema found");
+			_validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args }, ValidationError);
 		}
 
 		public string ValidationError => _validationErrors.Any() ? _validationErrors.Join(Environment.NewLine) : null;
 
-		public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt)
+		public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt, string message)
 		{
 			if (severity == XmlSeverityType.Error) {
-				throw new VectoException("Validation error: {0}", evt?.ValidationEventArgs?.Message ?? "XML schema not known");
+				throw new VectoException("Validation error: {0}", evt?.ValidationEventArgs?.Message ?? message ?? "XML schema not known");
 			}
 		}
 
diff --git a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs
index 8d577a78d3ac5912dd2896b200f66290061232c1..33a12a3d9fe0b072ed05951a8d76f676e3e8aa17 100644
--- a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs
+++ b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs
@@ -94,13 +94,13 @@ namespace TUGraz.VectoCore.Tests.XML
 
 			var validationMsg1 = new List<string> {customerRecord} ;
 
-			var validator1 = new XMLValidator(XmlReader.Create(customerRecord), validationErrorAction: (s,e) => {
+			var validator1 = new XMLValidator(XmlReader.Create(customerRecord), validationErrorAction: (s,e, m) => {
 				validationMsg1.Add(e?.ValidationEventArgs?.Message ?? "no schema found?");
 			});
 			Assert.IsTrue(validator1.ValidateXML(XmlDocumentType.CustomerReport), validationMsg1.Join("\n"));
 
 			var validationMsg2 = new List<string> {manufacturerRecord};
-			var validator2 = new XMLValidator(XmlReader.Create(manufacturerRecord), validationErrorAction: (s,e) => {
+			var validator2 = new XMLValidator(XmlReader.Create(manufacturerRecord), validationErrorAction: (s,e, m) => {
 				validationMsg2.Add(e?.ValidationEventArgs?.Message ?? "no schema found");
 			});
 			Assert.IsTrue(validator2.ValidateXML(XmlDocumentType.ManufacturerReport), validationMsg2.Join("\n"));