From 017aeb12b736c20d18873f3600dd44d50246b7fe Mon Sep 17 00:00:00 2001
From: Matthias Betz <matthias.betz@hft-stuttgart.de>
Date: Fri, 11 Jun 2021 11:27:29 +0200
Subject: [PATCH] fixing inheritance abundance where not needed, release 1.3

---
 citygml4j-quality-ade/pom.xml                 |   2 +-
 .../stuttgart/quality/QualityADEContext.java  |   2 +-
 .../stuttgart/quality/QualityADEModule.java   |  28 +-
 .../model/AllPolygonsWrongOrientation.java    |  40 +-
 .../quality/model/AttributeMissing.java       |  28 +-
 .../quality/model/AttributeWrongValue.java    |  28 +-
 .../stuttgart/quality/model/ChildObject.java  |  53 ++
 .../quality/model/ConsecutivePointsSame.java  |  41 +-
 .../stuttgart/quality/model/HoleOutside.java  |  39 +-
 .../quality/model/InnerRingsNested.java       |  39 +-
 .../quality/model/InteriorDisconnected.java   |  40 +-
 .../quality/model/IntersectingRings.java      |  39 +-
 .../model/MultipleConnectedComponents.java    |  37 +-
 .../quality/model/NonManifoldEdge.java        |  37 +-
 .../quality/model/NonManifoldVertex.java      |  40 +-
 .../quality/model/NonPlanarDistancePlane.java |  38 +-
 .../model/NonPlanarNormalsDeviation.java      |  39 +-
 .../quality/model/OrientationRingsSame.java   |  39 +-
 .../stuttgart/quality/model/PolygonError.java |  31 +
 .../model/PolygonWrongOrientation.java        |  39 +-
 .../stuttgart/quality/model/RingError.java    |  31 +
 .../quality/model/RingNotClosed.java          |  42 +-
 .../quality/model/RingSelfIntersection.java   |  40 +-
 .../quality/model/SemanticError.java          |  22 +
 .../stuttgart/quality/model/SolidError.java   |  30 +
 .../quality/model/SolidNotClosed.java         |  45 +-
 .../quality/model/SolidSelfIntersection.java  |  39 +-
 .../stuttgart/quality/model/TooFewPoints.java |  41 +-
 .../quality/model/TooFewPolygons.java         |  41 +-
 .../stuttgart/quality/model/Validation.java   |  29 +-
 .../quality/model/ValidationError.java        |   7 +-
 .../jaxb/AllPolygonsWrongOrientationType.java |  12 +-
 .../model/jaxb/AttributeMissingType.java      |   2 +-
 .../model/jaxb/AttributeWrongValueType.java   |   2 +-
 .../model/jaxb/ConsecutivePointsSameType.java |  13 +-
 .../quality/model/jaxb/HoleOutsideType.java   |  11 +-
 .../model/jaxb/InnerRingsNestedType.java      |  11 +-
 .../model/jaxb/InteriorDisconnectedType.java  |  12 +-
 .../model/jaxb/IntersectingRingsType.java     |  11 +-
 .../jaxb/MultipleConnectedComponentsType.java |  12 +-
 .../model/jaxb/NonManifoldEdgeType.java       |  12 +-
 .../model/jaxb/NonManifoldVertexType.java     |  11 +-
 .../jaxb/NonPlanarDistancePlaneType.java      |  11 +-
 .../jaxb/NonPlanarNormalsDeviationType.java   |  11 +-
 .../model/jaxb/OrientationRingsSameType.java  |  11 +-
 .../quality/model/jaxb/PolygonErrorType.java  |  37 ++
 .../jaxb/PolygonWrongOrientationType.java     |  12 +-
 .../quality/model/jaxb/RingErrorType.java     |  36 ++
 .../quality/model/jaxb/RingNotClosedType.java |  12 +-
 .../model/jaxb/RingSelfIntersectionType.java  |  11 +-
 .../quality/model/jaxb/SemanticErrorType.java |  25 +
 .../quality/model/jaxb/SolidErrorType.java    |  37 ++
 .../model/jaxb/SolidNotClosedType.java        |  12 +-
 .../model/jaxb/SolidSelfIntersectionType.java |  11 +-
 .../quality/model/jaxb/TooFewPointsType.java  |  39 +-
 .../model/jaxb/TooFewPolygonsType.java        |  12 +-
 .../model/jaxb/ValidationErrorType.java       |  14 +-
 .../quality/model/jaxb/ValidationType.java    |   4 +-
 .../quality/model/jaxb/package-info.java      |   4 +-
 .../src/main/resources/qualityAde.xsd         | 263 +++++---
 ...impleSolid_AllPolygonsWrongOrientation.gml |   2 +-
 .../SimpleSolid_Error_QualityADE.gml          |   2 +-
 .../resources/SimpleSolid_HoleOutside.gml     |   2 +-
 .../resources/SimpleSolid_InnerRingNested.gml |   2 +-
 .../SimpleSolid_InteriorDisconnected.gml      |   2 +-
 .../SimpleSolid_IntersectingRings.gml         |   2 +-
 ...impleSolid_MultipleConnectedComponents.gml |   2 +-
 .../resources/SimpleSolid_NonManifoldEdge.gml |   2 +-
 .../SimpleSolid_NonManifoldVertex.gml         |   2 +-
 ...pleSolid_NonPlanarPolygonDistancePlane.gml |   2 +-
 ...Solid_NonPlanarPolygonNormalsDeviation.gml |   2 +-
 .../SimpleSolid_OrientationRingsSame.gml      |   2 +-
 .../SimpleSolid_PolygonWrongOrientation.gml   |   2 +-
 .../resources/SimpleSolid_RingNotClosed.gml   |   2 +-
 .../SimpleSolid_RingSelfIntersection.gml      |   2 +-
 .../resources/SimpleSolid_SolidNotClosed.gml  |   2 +-
 .../SimpleSolid_SolidSelfIntersection.gml     |   2 +-
 .../resources/SimpleSolid_TooFewPoints.gml    |   2 +-
 .../resources/SimpleSolid_TooFewPolygons.gml  |   2 +-
 public/0.1.3/qualityAde.xsd                   | 580 ++++++++++++++++++
 80 files changed, 1155 insertions(+), 1180 deletions(-)
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ChildObject.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonError.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingError.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticError.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidError.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonErrorType.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingErrorType.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticErrorType.java
 create mode 100644 citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidErrorType.java
 create mode 100644 public/0.1.3/qualityAde.xsd

diff --git a/citygml4j-quality-ade/pom.xml b/citygml4j-quality-ade/pom.xml
index 1474e69..4c65c09 100644
--- a/citygml4j-quality-ade/pom.xml
+++ b/citygml4j-quality-ade/pom.xml
@@ -4,7 +4,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>de.hft.stuttgart</groupId>
 	<artifactId>citygml4j-quality-ade</artifactId>
-	<version>0.1.2</version>
+	<version>0.1.3</version>
 
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java
index aef857c..f1e7d58 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java
@@ -28,7 +28,7 @@ import de.hft.stuttgart.quality.marshaller.QualityAdeUnmarshaller;
 
 public class QualityADEContext implements ADEContext {
 	
-	private final List<ADEModule> modules = Collections.singletonList(QualityADEModule.V0_1_2);
+	private final List<ADEModule> modules = Collections.singletonList(QualityADEModule.V0_1_3);
 
 	@Override
 	public List<ADEModule> getADEModules() {
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java
index 3b1f54f..9270a25 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java
@@ -17,8 +17,6 @@ package de.hft.stuttgart.quality;
 
 import java.net.URL;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
@@ -28,25 +26,16 @@ import org.citygml4j.model.gml.feature.AbstractFeature;
 import org.citygml4j.model.module.ade.ADEModule;
 import org.citygml4j.model.module.citygml.CityGMLVersion;
 
-import de.hft.stuttgart.quality.model.Validation;
-
 public class QualityADEModule extends ADEModule {
 
-	public static final String NAMESPACE_URI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2";
+	public static final String NAMESPACE_URI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3";
 
-	public static final QualityADEModule V0_1_2 = new QualityADEModule();
+	public static final QualityADEModule V0_1_3 = new QualityADEModule();
 	
-    private HashMap<String, Class<? extends AbstractFeature>> features;
-    private HashSet<String> featureProperties;
-
 	private static final long serialVersionUID = -8208579547274734280L;
 
 	public QualityADEModule() {
 		super(NAMESPACE_URI, "qual", CityGMLVersion.v2_0_0);
-		features = new HashMap<>();
-		features.put("validation", Validation.class);
-		
-		featureProperties = new HashSet<>();
 	}
 	
 	@Override
@@ -61,32 +50,27 @@ public class QualityADEModule extends ADEModule {
 
 	@Override
 	public boolean hasFeatureProperty(String name) {
-        return featureProperties.contains(name);
+		return false;
 	}
 
 	@Override
 	public boolean hasFeature(String name) {
-		return features.containsKey(name);
+		return false;
 	}
 
 	@Override
 	public Class<? extends AbstractFeature> getFeatureClass(String name) {
-		return features.get(name);
+		throw new IllegalStateException("No feature classes available");
 	}
 
 	@Override
 	public QName getFeatureName(Class<? extends AbstractFeature> featureClass) {
-        for (Map.Entry<String, Class<? extends AbstractFeature>> entry : features.entrySet()) {
-            if (entry.getValue() == featureClass)
-                return new QName(getNamespaceURI(), entry.getKey());
-        }
-
         return null;
 	}
 
 	@Override
 	public Map<String, Class<? extends AbstractFeature>> getFeatures() {
-		return Collections.unmodifiableMap(features);
+		return Collections.emptyMap();
 	}
 
 	@Override
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java
index ebc2cc1..0b384b7 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AllPolygonsWrongOrientation.java
@@ -16,30 +16,14 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class AllPolygonsWrongOrientation extends AbstractFeature implements ValidationError, ADEModelObject {
+public class AllPolygonsWrongOrientation extends SolidError {
 
 	private static final long serialVersionUID = 3817224755569965908L;
 
-	private String geometryId;
-
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 	@Override
 	public String toString() {
-		return "AllPolygonsWrongOrientation [geometryId=" + geometryId + "]";
+		return "AllPolygonsWrongOrientation [geometryId=" + getGeometryId() + "]";
 	}
 
 	@Override
@@ -47,24 +31,4 @@ public class AllPolygonsWrongOrientation extends AbstractFeature implements Vali
 		return copyTo(new AllPolygonsWrongOrientation(), copyBuilder);
 	}
 
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeMissing.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeMissing.java
index 6d339fa..d3eee9b 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeMissing.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeMissing.java
@@ -16,14 +16,8 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class AttributeMissing extends AbstractFeature implements ValidationError, ADEModelObject {
+public class AttributeMissing extends SemanticError {
 
 	private static final long serialVersionUID = -5416574100733885169L;
 	
@@ -59,24 +53,4 @@ public class AttributeMissing extends AbstractFeature implements ValidationError
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new AttributeWrongValue(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeWrongValue.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeWrongValue.java
index 8816734..b881559 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeWrongValue.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/AttributeWrongValue.java
@@ -16,14 +16,8 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class AttributeWrongValue extends AbstractFeature implements ValidationError, ADEModelObject {
+public class AttributeWrongValue extends SemanticError {
 	
 	private static final long serialVersionUID = -5650985861847806620L;
 	
@@ -65,24 +59,4 @@ public class AttributeWrongValue extends AbstractFeature implements ValidationEr
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new AttributeWrongValue(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ChildObject.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ChildObject.java
new file mode 100644
index 0000000..39aec6d
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ChildObject.java
@@ -0,0 +1,53 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model;
+
+import org.citygml4j.builder.copy.CopyBuilder;
+import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
+import org.citygml4j.model.common.base.ModelObject;
+
+public abstract class ChildObject implements ADEModelObject {
+
+	private static final long serialVersionUID = 6726372382501963276L;
+	
+	private ModelObject parent;
+
+	@Override
+	public Object copyTo(Object target, CopyBuilder copyBuilder) {
+		return target;
+	}
+
+	@Override
+	public ModelObject getParent() {
+		return parent;
+	}
+
+	@Override
+	public void setParent(ModelObject parent) {
+		this.parent = parent;
+	}
+
+	@Override
+	public boolean isSetParent() {
+		return parent != null;
+	}
+
+	@Override
+	public void unsetParent() {
+		parent = null;
+	}
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ConsecutivePointsSame.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ConsecutivePointsSame.java
index d4ce99e..91cb869 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ConsecutivePointsSame.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ConsecutivePointsSame.java
@@ -16,26 +16,15 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
 
-public class ConsecutivePointsSame extends AbstractFeature implements ValidationError, ADEModelObject {
+public class ConsecutivePointsSame extends RingError {
 	
 	private static final long serialVersionUID = -838421312521561747L;
 	
-	private String linearRingId;
 	private DirectPosition vertex1;
 	private DirectPosition vertex2;
 	
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
-	
 	public void setVertex1(DirectPosition vertex1) {
 		this.vertex1 = vertex1;
 	}
@@ -43,11 +32,7 @@ public class ConsecutivePointsSame extends AbstractFeature implements Validation
 	public void setVertex2(DirectPosition vertex2) {
 		this.vertex2 = vertex2;
 	}
-	
-	public String getLinearRingId() {
-		return linearRingId;
-	}
-	
+
 	public DirectPosition getVertex1() {
 		return vertex1;
 	}
@@ -58,7 +43,7 @@ public class ConsecutivePointsSame extends AbstractFeature implements Validation
 
 	@Override
 	public String toString() {
-		return "ConsecutivePointsSame [linearRingId=" + linearRingId + ", vertex1=" + vertex1 + ", vertex2=" + vertex2
+		return "ConsecutivePointsSame [linearRingId=" + getLinearRingId() + ", vertex1=" + vertex1 + ", vertex2=" + vertex2
 				+ "]";
 	}
 
@@ -67,24 +52,4 @@ public class ConsecutivePointsSame extends AbstractFeature implements Validation
 		return copyTo(new ConsecutivePointsSame(), copyBuilder);
 	}
 
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/HoleOutside.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/HoleOutside.java
index 2547b7b..4804bb0 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/HoleOutside.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/HoleOutside.java
@@ -16,63 +16,28 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class HoleOutside extends AbstractFeature implements ValidationError, ADEModelObject {
+public class HoleOutside extends PolygonError {
 
 	private static final long serialVersionUID = -3029497342950689843L;
 	
-	private String polygonId;
 	private String linearRingId;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setLinearRingId(String linearRingId) {
 		this.linearRingId = linearRingId;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public String getLinearRingId() {
 		return linearRingId;
 	}
 
 	@Override
 	public String toString() {
-		return "HoleOutside [polygonId=" + polygonId + ", linearRingId=" + linearRingId + "]";
+		return "HoleOutside [polygonId=" + getPolygonId() + ", linearRingId=" + linearRingId + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new HoleOutside(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InnerRingsNested.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InnerRingsNested.java
index dc9013e..b1f886d 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InnerRingsNested.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InnerRingsNested.java
@@ -16,25 +16,14 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class InnerRingsNested extends AbstractFeature implements ValidationError, ADEModelObject {
+public class InnerRingsNested extends PolygonError {
 
 	private static final long serialVersionUID = 2291087505629924993L;
-	
-	private String polygonId;
+
 	private String linearRingId1;
 	private String linearRingId2;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setLinearRingId1(String linearRingId1) {
 		this.linearRingId1 = linearRingId1;
 	}
@@ -43,10 +32,6 @@ public class InnerRingsNested extends AbstractFeature implements ValidationError
 		this.linearRingId2 = linearRingId2;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public String getLinearRingId1() {
 		return linearRingId1;
 	}
@@ -59,24 +44,4 @@ public class InnerRingsNested extends AbstractFeature implements ValidationError
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new InnerRingsNested(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java
index dbaab2e..64da8cc 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/InteriorDisconnected.java
@@ -16,54 +16,18 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class InteriorDisconnected extends AbstractFeature implements ValidationError, ADEModelObject {
+public class InteriorDisconnected extends PolygonError {
 
 	private static final long serialVersionUID = 8443642232356795359L;
 	
-	private String polygonId;
-	
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-	
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	@Override
 	public String toString() {
-		return "InteriorDisconnected [polygonId=" + polygonId + "]";
+		return "InteriorDisconnected [polygonId=" + getPolygonId() + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new InteriorDisconnected(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/IntersectingRings.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/IntersectingRings.java
index 518d65f..cab11d6 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/IntersectingRings.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/IntersectingRings.java
@@ -16,25 +16,14 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class IntersectingRings extends AbstractFeature implements ValidationError, ADEModelObject {
+public class IntersectingRings extends PolygonError {
 
 	private static final long serialVersionUID = 7668529369582991408L;
 	
-	private String polygonId;
 	private String linearRingId1;
 	private String linearRingId2;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setLinearRingId1(String linearRingId1) {
 		this.linearRingId1 = linearRingId1;
 	}
@@ -43,10 +32,6 @@ public class IntersectingRings extends AbstractFeature implements ValidationErro
 		this.linearRingId2 = linearRingId2;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public String getLinearRingId1() {
 		return linearRingId1;
 	}
@@ -57,7 +42,7 @@ public class IntersectingRings extends AbstractFeature implements ValidationErro
 
 	@Override
 	public String toString() {
-		return "IntersectingRings [polygonId=" + polygonId + ", linearRingId1=" + linearRingId1 + ", linearRingId2="
+		return "IntersectingRings [polygonId=" + getPolygonId() + ", linearRingId1=" + linearRingId1 + ", linearRingId2="
 				+ linearRingId2 + "]";
 	}
 
@@ -65,24 +50,4 @@ public class IntersectingRings extends AbstractFeature implements ValidationErro
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new IntersectingRings(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/MultipleConnectedComponents.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/MultipleConnectedComponents.java
index 087995c..c69d6a1 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/MultipleConnectedComponents.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/MultipleConnectedComponents.java
@@ -19,31 +19,15 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
 import de.hft.stuttgart.quality.model.jaxb.Component;
 
-public class MultipleConnectedComponents extends AbstractFeature implements ValidationError, ADEModelObject {
+public class MultipleConnectedComponents extends SolidError {
 
 	private static final long serialVersionUID = -4199420154182053060L;
 
-	private String geometryId;
-	
 	private List<Component> components;
 	
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-	
-	public String getGeometryId() {
-		return geometryId;
-	}
-	
 	public boolean isSetComponents() {
 		return components != null && !components.isEmpty();
 	}
@@ -60,23 +44,4 @@ public class MultipleConnectedComponents extends AbstractFeature implements Vali
 		return copyTo(new MultipleConnectedComponents(), copyBuilder);
 	}
 
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldEdge.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldEdge.java
index 39f9ade..3d07d31 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldEdge.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldEdge.java
@@ -19,28 +19,13 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class NonManifoldEdge extends AbstractFeature implements ValidationError, ADEModelObject {
+public class NonManifoldEdge extends SolidError {
 
 	private static final long serialVersionUID = -4312748985706248178L;
 
-	private String geometryId;
 	private List<Edge> edges;
 
-	public String getGeometryId() {
-		return geometryId;
-	}
-
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
 	public boolean isSetEdges() {
 		return edges != null && !edges.isEmpty();
 	}
@@ -56,24 +41,4 @@ public class NonManifoldEdge extends AbstractFeature implements ValidationError,
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new NonPlanarNormalsDeviation(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldVertex.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldVertex.java
index 3b646c4..b1d9b53 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldVertex.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonManifoldVertex.java
@@ -16,65 +16,29 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
 
-public class NonManifoldVertex extends AbstractFeature implements ValidationError, ADEModelObject {
+public class NonManifoldVertex extends SolidError {
 
 	private static final long serialVersionUID = -3434116956866828127L;
 	
-	private String geometryId;
 	private DirectPosition vertex;
 
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
 	public void setVertex(DirectPosition vertex) {
 		this.vertex = vertex;
 	}
 
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 	public DirectPosition getVertex() {
 		return vertex;
 	}
 
 	@Override
 	public String toString() {
-		return "NonManifoldVertex [geometryId=" + geometryId + ", vertex=" + vertex + "]";
+		return "NonManifoldVertex [geometryId=" + getGeometryId() + ", vertex=" + vertex + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new NonManifoldVertex(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarDistancePlane.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarDistancePlane.java
index 6612f5e..fd0292f 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarDistancePlane.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarDistancePlane.java
@@ -16,26 +16,16 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
 import org.citygml4j.model.gml.measures.Length;
 
-public class NonPlanarDistancePlane extends AbstractFeature implements ValidationError, ADEModelObject {
+public class NonPlanarDistancePlane extends PolygonError {
 
 	private static final long serialVersionUID = -3428574131554438219L;
 	
-	private String polygonId;
 	private DirectPosition vertex;
 	private Length distance;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
 
 	public void setVertex(DirectPosition vertex) {
 		this.vertex = vertex;
@@ -45,10 +35,6 @@ public class NonPlanarDistancePlane extends AbstractFeature implements Validatio
 		this.distance = distance;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public DirectPosition getVertex() {
 		return vertex;
 	}
@@ -59,31 +45,11 @@ public class NonPlanarDistancePlane extends AbstractFeature implements Validatio
 
 	@Override
 	public String toString() {
-		return "NonPlanarDistancePlane [polygonId=" + polygonId + ", vertex=" + vertex + ", distance=" + distance + "]";
+		return "NonPlanarDistancePlane [polygonId=" + getPolygonId() + ", vertex=" + vertex + ", distance=" + distance + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new NonPlanarDistancePlane(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarNormalsDeviation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarNormalsDeviation.java
index 4fbf8d1..faa5a4f 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarNormalsDeviation.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/NonPlanarNormalsDeviation.java
@@ -16,64 +16,29 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 import org.citygml4j.model.gml.measures.Angle;
 
-public class NonPlanarNormalsDeviation extends AbstractFeature implements ValidationError, ADEModelObject {
+public class NonPlanarNormalsDeviation extends PolygonError {
 
 	private static final long serialVersionUID = -8574024132334399550L;
 	
-	private String polygonId;
 	private Angle deviation;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setDeviation(Angle deviation) {
 		this.deviation = deviation;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public Angle getDeviation() {
 		return deviation;
 	}
 
 	@Override
 	public String toString() {
-		return "NonPlanarNormalsDeviation [polygonId=" + polygonId + ", deviation=" + deviation + "]";
+		return "NonPlanarNormalsDeviation [polygonId=" + getPolygonId() + ", deviation=" + deviation + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new NonPlanarNormalsDeviation(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/OrientationRingsSame.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/OrientationRingsSame.java
index 653153f..16ab55e 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/OrientationRingsSame.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/OrientationRingsSame.java
@@ -16,63 +16,28 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class OrientationRingsSame extends AbstractFeature implements ValidationError, ADEModelObject {
+public class OrientationRingsSame extends PolygonError {
 
 	private static final long serialVersionUID = -6983324580253488854L;
 	
-	private String polygonId;
 	private String linearRingId;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setLinearRingId(String linearRingId) {
 		this.linearRingId = linearRingId;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public String getLinearRingId() {
 		return linearRingId;
 	}
 
 	@Override
 	public String toString() {
-		return "OrientationRingsSame [polygonId=" + polygonId + ", linearRingId=" + linearRingId + "]";
+		return "OrientationRingsSame [polygonId=" + getPolygonId() + ", linearRingId=" + linearRingId + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new OrientationRingsSame(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonError.java
new file mode 100644
index 0000000..12e9c5e
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonError.java
@@ -0,0 +1,31 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model;
+
+public abstract class PolygonError extends ValidationError {
+
+	private static final long serialVersionUID = 4694297467768369526L;
+	
+	private String polygonId;
+
+	public void setPolygonId(String polygonId) {
+		this.polygonId = polygonId;
+	}
+
+	public String getPolygonId() {
+		return polygonId;
+	}
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonWrongOrientation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonWrongOrientation.java
index e5ff020..965491b 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonWrongOrientation.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/PolygonWrongOrientation.java
@@ -19,27 +19,12 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class PolygonWrongOrientation extends AbstractFeature implements ValidationError, ADEModelObject {
+public class PolygonWrongOrientation extends SolidError {
 
 	private static final long serialVersionUID = 1128689472694838648L;
 	
-	private String geometryId;
 	private List<Edge> edges;
-
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
-	public String getGeometryId() {
-		return geometryId;
-	}
 	
 	public boolean isSetEdges() {
 		return edges != null && !edges.isEmpty();
@@ -54,31 +39,11 @@ public class PolygonWrongOrientation extends AbstractFeature implements Validati
 
 	@Override
 	public String toString() {
-		return "PolygonWrongOrientation [geometryId=" + geometryId + ", edges=" + edges + "]";
+		return "PolygonWrongOrientation [geometryId=" + getGeometryId() + ", edges=" + edges + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new PolygonWrongOrientation(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingError.java
new file mode 100644
index 0000000..d17e507
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingError.java
@@ -0,0 +1,31 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model;
+
+public abstract class RingError extends ValidationError {
+
+	private static final long serialVersionUID = -8610600028811350500L;
+	
+	private String linearRingId;
+
+	public void setLinearRingId(String linearRingId) {
+		this.linearRingId = linearRingId;
+	}
+
+	public String getLinearRingId() {
+		return linearRingId;
+	}
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingNotClosed.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingNotClosed.java
index 78603b2..4c52b24 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingNotClosed.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingNotClosed.java
@@ -16,56 +16,18 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class RingNotClosed extends AbstractFeature implements ValidationError, ADEModelObject {
+public class RingNotClosed extends RingError {
 	
 	private static final long serialVersionUID = 5502668444088395535L;
 	
-	private String linearRingId;
-	
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
-	
-	public String getLinearRingId() {
-		return linearRingId;
-	}
-	
-
 	@Override
 	public String toString() {
-		return "RingNotClosed [linearRingId=" + linearRingId + "]";
+		return "RingNotClosed [linearRingId=" + getLinearRingId() + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new RingNotClosed(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingSelfIntersection.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingSelfIntersection.java
index cbb6fce..fd11024 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingSelfIntersection.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/RingSelfIntersection.java
@@ -16,31 +16,20 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
 
 import de.hft.stuttgart.quality.model.jaxb.RingSelfIntType;
 
-public class RingSelfIntersection extends AbstractFeature implements ValidationError, ADEModelObject {
+public class RingSelfIntersection extends RingError {
 
 	private static final long serialVersionUID = -4426615638983209222L;
 	
-	private String linearRingId;
 	private RingSelfIntType type;
 	private Edge edge1;
 	private Edge edge2;
 	private DirectPosition vertex1;
 	private DirectPosition vertex2;
 
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
-
 	public void setType(RingSelfIntType type) {
 		this.type = type;
 	}
@@ -61,10 +50,6 @@ public class RingSelfIntersection extends AbstractFeature implements ValidationE
 		this.vertex2 = vertex2;
 	}
 
-	public String getLinearRingId() {
-		return linearRingId;
-	}
-
 	public RingSelfIntType getType() {
 		return type;
 	}
@@ -87,7 +72,7 @@ public class RingSelfIntersection extends AbstractFeature implements ValidationE
 
 	@Override
 	public String toString() {
-		return "RingSelfIntersection [linearRingId=" + linearRingId + ", type=" + type + ", edge1=" + edge1 + ", edge2="
+		return "RingSelfIntersection [linearRingId=" + getLinearRingId() + ", type=" + type + ", edge1=" + edge1 + ", edge2="
 				+ edge2 + ", vertex1=" + vertex1 + ", vertex2=" + vertex2 + "]";
 	}
 
@@ -95,25 +80,4 @@ public class RingSelfIntersection extends AbstractFeature implements ValidationE
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new RingSelfIntersection(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticError.java
new file mode 100644
index 0000000..b2741c3
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SemanticError.java
@@ -0,0 +1,22 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model;
+
+public abstract class SemanticError extends ValidationError {
+
+	private static final long serialVersionUID = 8986289777859562928L;
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidError.java
new file mode 100644
index 0000000..d20493c
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidError.java
@@ -0,0 +1,30 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model;
+
+public abstract class SolidError extends ValidationError {
+	private static final long serialVersionUID = 6430138970493794998L;
+	
+	private String geometryId;
+
+	public void setGeometryId(String geometryId) {
+		this.geometryId = geometryId;
+	}
+
+	public String getGeometryId() {
+		return geometryId;
+	}
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNotClosed.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNotClosed.java
index b8e26c6..71a9b13 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNotClosed.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidNotClosed.java
@@ -19,61 +19,26 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class SolidNotClosed extends AbstractFeature implements ValidationError, ADEModelObject {
+public class SolidNotClosed extends SolidError {
 
 	private static final long serialVersionUID = 4609395125395073697L;
-	
-	private String geometryId;
+
 	private List<Edge> edges;
-	
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-	public String getGeometryId() {
-		return geometryId;
-	}
-	
+
 	public boolean isSetEdges() {
 		return edges != null && !edges.isEmpty();
 	}
-	
+
 	public List<Edge> getEdges() {
 		if (edges == null) {
 			edges = new ArrayList<>();
 		}
 		return edges;
 	}
-	
+
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new SolidNotClosed(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidSelfIntersection.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidSelfIntersection.java
index 664eead..423512c 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidSelfIntersection.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/SolidSelfIntersection.java
@@ -16,29 +16,14 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class SolidSelfIntersection extends AbstractFeature implements ValidationError, ADEModelObject {
+public class SolidSelfIntersection extends SolidError {
 
 	private static final long serialVersionUID = 4086097021438848040L;
 
-	private String geometryId;
 	private String polygonId1;
 	private String polygonId2;
 
-	public String getGeometryId() {
-		return geometryId;
-	}
-
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
 	public String getPolygonId1() {
 		return polygonId1;
 	}
@@ -57,7 +42,7 @@ public class SolidSelfIntersection extends AbstractFeature implements Validation
 
 	@Override
 	public String toString() {
-		return "SolidSelfIntersection [geometryId=" + geometryId + ", polygonId1=" + polygonId1 + ", polygonId2="
+		return "SolidSelfIntersection [geometryId=" + getGeometryId() + ", polygonId1=" + polygonId1 + ", polygonId2="
 				+ polygonId2 + "]";
 	}
 
@@ -65,24 +50,4 @@ public class SolidSelfIntersection extends AbstractFeature implements Validation
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new SolidSelfIntersection(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java
index 829a627..7e12722 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPoints.java
@@ -16,55 +16,18 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class TooFewPoints extends AbstractFeature implements ValidationError, ADEModelObject {
+public class TooFewPoints extends RingError {
 
 	private static final long serialVersionUID = -904319347280328865L;
 	
-	private String linearRingId;
-	
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
-	
-	public String getLinearRingId() {
-		return linearRingId;
-	}
-	
 	@Override
 	public String toString() {
-		return "TooFewPoints [linearRingId=" + linearRingId + "]";
+		return "TooFewPoints [linearRingId=" + getLinearRingId() + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new TooFewPoints(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPolygons.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPolygons.java
index 21fd990..19abc23 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPolygons.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/TooFewPolygons.java
@@ -16,55 +16,18 @@
 package de.hft.stuttgart.quality.model;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
-public class TooFewPolygons extends AbstractFeature implements ValidationError, ADEModelObject {
+public class TooFewPolygons extends SolidError {
 
 	private static final long serialVersionUID = -51591095439740599L;
 
-	private String geometryId;
-
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 	@Override
 	public String toString() {
-		return "TooFewPolygons [geometryId=" + geometryId + "]";
+		return "TooFewPolygons [geometryId=" + getGeometryId() + "]";
 	}
 
 	@Override
 	public Object copy(CopyBuilder copyBuilder) {
 		return copyTo(new TooFewPolygons(), copyBuilder);
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Validation.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Validation.java
index bba251e..2ee30ba 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Validation.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/Validation.java
@@ -18,17 +18,11 @@ package de.hft.stuttgart.quality.model;
 import java.time.ZonedDateTime;
 
 import org.citygml4j.builder.copy.CopyBuilder;
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-import org.citygml4j.model.common.visitor.FeatureFunctor;
-import org.citygml4j.model.common.visitor.FeatureVisitor;
-import org.citygml4j.model.common.visitor.GMLFunctor;
-import org.citygml4j.model.common.visitor.GMLVisitor;
-import org.citygml4j.model.gml.feature.AbstractFeature;
 
 import de.hft.stuttgart.quality.model.jaxb.Statistics;
 import de.hft.stuttgart.quality.model.jaxb.ValidationPlan;
 
-public class Validation extends AbstractFeature implements ADEModelObject {
+public class Validation extends ChildObject {
 
 	private static final long serialVersionUID = 1738293574859506005L;
 	
@@ -82,7 +76,6 @@ public class Validation extends AbstractFeature implements ADEModelObject {
 		return validationDate;
 	}
 	
-	
 	public void setValidationSoftware(String validationSoftware) {
 		this.validationSoftware = validationSoftware;
 	}
@@ -90,24 +83,4 @@ public class Validation extends AbstractFeature implements ADEModelObject {
 	public String getValidationSoftware() {
 		return validationSoftware;
 	}
-
-	@Override
-	public void accept(FeatureVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(FeatureFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
-
-	@Override
-	public void accept(GMLVisitor visitor) {
-		visitor.visit(this);
-	}
-
-	@Override
-	public <T> T accept(GMLFunctor<T> visitor) {
-		return visitor.apply(this);
-	}
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java
index 8be6f35..a1b5a8e 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/ValidationError.java
@@ -15,8 +15,7 @@
  */
 package de.hft.stuttgart.quality.model;
 
-import org.citygml4j.model.citygml.ade.binding.ADEModelObject;
-
-public interface ValidationError extends ADEModelObject {
-
+public abstract class ValidationError extends ChildObject {
+	
+	private static final long serialVersionUID = -2995694676938108325L;
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AllPolygonsWrongOrientationType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AllPolygonsWrongOrientationType.java
index afbdb57..f582f22 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AllPolygonsWrongOrientationType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AllPolygonsWrongOrientationType.java
@@ -18,16 +18,6 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_S_ALL_POLYGONS_WRONG_ORIENTATION")
-public class AllPolygonsWrongOrientationType extends ValidationErrorType {
-
-	private String geometryId;
-
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
-	public String getGeometryId() {
-		return geometryId;
-	}
+public class AllPolygonsWrongOrientationType extends SolidErrorType {
 
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java
index c2cbb61..ce13091 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java
@@ -18,7 +18,7 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "SE_ATTRIBUTE_MISSING")
-public class AttributeMissingType extends ValidationErrorType {
+public class AttributeMissingType extends SemanticErrorType {
 	
 	private String childId;
 	private String attributeName;
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java
index 6ea84b5..a3596b9 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java
@@ -18,7 +18,7 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "SE_ATTRIBUTE_WRONG_VALUE")
-public class AttributeWrongValueType extends ValidationErrorType {
+public class AttributeWrongValueType extends SemanticErrorType {
 
 	private String childId;
 	private String attributeName;
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ConsecutivePointsSameType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ConsecutivePointsSameType.java
index 1de6be6..4a584f0 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ConsecutivePointsSameType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ConsecutivePointsSameType.java
@@ -20,20 +20,11 @@ import javax.xml.bind.annotation.XmlRootElement;
 import net.opengis.gml.DirectPositionType;
 
 @XmlRootElement(name = "GE_R_CONSECUTIVE_POINTS_SAME")
-public class ConsecutivePointsSameType extends ValidationErrorType {
+public class ConsecutivePointsSameType extends RingErrorType {
 	
-	private String linearRingId;
 	private DirectPositionType vertex1;
 	private DirectPositionType vertex2;
 	
-	public String getLinearRingId() {
-		return linearRingId;
-	}
-	
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
-	
 	public void setVertex1(DirectPositionType vertex1) {
 		this.vertex1 = vertex1;
 	}
@@ -52,7 +43,7 @@ public class ConsecutivePointsSameType extends ValidationErrorType {
 
 	@Override
 	public String toString() {
-		return "ConsecutivePointsSameType [linearRingId=" + linearRingId + ", vertex1=" + vertex1 + ", vertex2=" + vertex2
+		return "ConsecutivePointsSameType [linearRingId=" + getLinearRingId() + ", vertex1=" + vertex1 + ", vertex2=" + vertex2
 				+ "]";
 	}
 
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/HoleOutsideType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/HoleOutsideType.java
index ae7f8b4..17d09fc 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/HoleOutsideType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/HoleOutsideType.java
@@ -18,23 +18,14 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_P_HOLE_OUTSIDE")
-public class HoleOutsideType extends ValidationErrorType {
+public class HoleOutsideType extends PolygonErrorType {
 
-	private String polygonId;
 	private String linearRingId;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setLinearRingId(String linearRingId) {
 		this.linearRingId = linearRingId;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public String getLinearRingId() {
 		return linearRingId;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InnerRingsNestedType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InnerRingsNestedType.java
index 0c2438a..cce7ffe 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InnerRingsNestedType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InnerRingsNestedType.java
@@ -18,16 +18,11 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_P_INNER_RINGS_NESTED")
-public class InnerRingsNestedType extends ValidationErrorType {
+public class InnerRingsNestedType extends PolygonErrorType {
 
-	private String polygonId;
 	private String linearRingId1;
 	private String linearRingId2;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setLinearRingId1(String linearRingId1) {
 		this.linearRingId1 = linearRingId1;
 	}
@@ -36,10 +31,6 @@ public class InnerRingsNestedType extends ValidationErrorType {
 		this.linearRingId2 = linearRingId2;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public String getLinearRingId1() {
 		return linearRingId1;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InteriorDisconnectedType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InteriorDisconnectedType.java
index 45642ab..a8daaf0 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InteriorDisconnectedType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/InteriorDisconnectedType.java
@@ -18,16 +18,6 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_P_INTERIOR_DISCONNECTED")
-public class InteriorDisconnectedType extends ValidationErrorType {
-	
-	private String polygonId;
-	
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-	
-	public String getPolygonId() {
-		return polygonId;
-	}
+public class InteriorDisconnectedType extends PolygonErrorType {
 
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/IntersectingRingsType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/IntersectingRingsType.java
index 8f547df..7f47eef 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/IntersectingRingsType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/IntersectingRingsType.java
@@ -18,20 +18,11 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_P_INTERSECTING_RINGS")
-public class IntersectingRingsType extends ValidationErrorType {
+public class IntersectingRingsType extends PolygonErrorType {
 
-	private String polygonId;
 	private String linearRingId1;
 	private String linearRingId2;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public void setLinearRingId1(String linearRingId1) {
 		this.linearRingId1 = linearRingId1;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/MultipleConnectedComponentsType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/MultipleConnectedComponentsType.java
index 6d2e396..0507eb0 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/MultipleConnectedComponentsType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/MultipleConnectedComponentsType.java
@@ -23,22 +23,12 @@ import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_S_MULTIPLE_CONNECTED_COMPONENTS")
-public class MultipleConnectedComponentsType extends ValidationErrorType {
-	
-	private String geometryId;
+public class MultipleConnectedComponentsType extends SolidErrorType {
 	
 	@XmlElementWrapper
 	@XmlElement(name = "component")
 	private List<Component> components;
 	
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-	
-	public String getGeometryId() {
-		return geometryId;
-	}
-	
 	public boolean isSetComponents() {
 		return components != null && !components.isEmpty();
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldEdgeType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldEdgeType.java
index cadaeff..aac1ac8 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldEdgeType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldEdgeType.java
@@ -23,22 +23,12 @@ import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_S_NON_MANIFOLD_EDGE")
-public class NonManifoldEdgeType extends ValidationErrorType {
-
-	private String geometryId;
+public class NonManifoldEdgeType extends SolidErrorType {
 
 	@XmlElementWrapper
 	@XmlElement(name = "edge")
 	private List<EdgeType> edges;
 
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 	public boolean isSetEdges() {
 		return edges != null && !edges.isEmpty();
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldVertexType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldVertexType.java
index f286ed3..7b8f3a2 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldVertexType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonManifoldVertexType.java
@@ -20,23 +20,14 @@ import javax.xml.bind.annotation.XmlRootElement;
 import net.opengis.gml.DirectPositionType;
 
 @XmlRootElement(name = "GE_S_NON_MANIFOLD_VERTEX")
-public class NonManifoldVertexType extends ValidationErrorType {
+public class NonManifoldVertexType extends SolidErrorType {
 
-	private String geometryId;
 	private DirectPositionType vertex;
 
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
 	public void setVertex(DirectPositionType vertex) {
 		this.vertex = vertex;
 	}
 
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 	public DirectPositionType getVertex() {
 		return vertex;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarDistancePlaneType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarDistancePlaneType.java
index b7d17e7..4e3523b 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarDistancePlaneType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarDistancePlaneType.java
@@ -21,16 +21,11 @@ import net.opengis.gml.DirectPositionType;
 import net.opengis.gml.LengthType;
 
 @XmlRootElement(name = "GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE")
-public class NonPlanarDistancePlaneType extends ValidationErrorType {
+public class NonPlanarDistancePlaneType extends PolygonErrorType {
 
-	private String polygonId;
 	private DirectPositionType vertex;
 	private LengthType distance;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setVertex(DirectPositionType vertex) {
 		this.vertex = vertex;
 	}
@@ -39,10 +34,6 @@ public class NonPlanarDistancePlaneType extends ValidationErrorType {
 		this.distance = distance;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public DirectPositionType getVertex() {
 		return vertex;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarNormalsDeviationType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarNormalsDeviationType.java
index 4dceda9..5471ad6 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarNormalsDeviationType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/NonPlanarNormalsDeviationType.java
@@ -20,23 +20,14 @@ import javax.xml.bind.annotation.XmlRootElement;
 import net.opengis.gml.AngleType;
 
 @XmlRootElement(name = "GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION")
-public class NonPlanarNormalsDeviationType extends ValidationErrorType {
+public class NonPlanarNormalsDeviationType extends PolygonErrorType {
 
-	private String polygonId;
 	private AngleType deviation;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setDeviation(AngleType deviation) {
 		this.deviation = deviation;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public AngleType getDeviation() {
 		return deviation;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/OrientationRingsSameType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/OrientationRingsSameType.java
index 6ac0a58..a625724 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/OrientationRingsSameType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/OrientationRingsSameType.java
@@ -18,23 +18,14 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_P_ORIENTATION_RINGS_SAME")
-public class OrientationRingsSameType extends ValidationErrorType {
+public class OrientationRingsSameType extends PolygonErrorType {
 
-	private String polygonId;
 	private String linearRingId;
 
-	public void setPolygonId(String polygonId) {
-		this.polygonId = polygonId;
-	}
-
 	public void setLinearRingId(String linearRingId) {
 		this.linearRingId = linearRingId;
 	}
 
-	public String getPolygonId() {
-		return polygonId;
-	}
-
 	public String getLinearRingId() {
 		return linearRingId;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonErrorType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonErrorType.java
new file mode 100644
index 0000000..aec3160
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonErrorType.java
@@ -0,0 +1,37 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+@XmlSeeAlso({ InteriorDisconnectedType.class, IntersectingRingsType.class, HoleOutsideType.class,
+		InnerRingsNestedType.class, NonPlanarDistancePlaneType.class, NonPlanarNormalsDeviationType.class,
+		OrientationRingsSameType.class })
+
+@XmlRootElement(name = "PolygonError")
+public class PolygonErrorType extends ValidationErrorType {
+
+	private String polygonId;
+
+	public void setPolygonId(String polygonId) {
+		this.polygonId = polygonId;
+	}
+
+	public String getPolygonId() {
+		return polygonId;
+	}
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonWrongOrientationType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonWrongOrientationType.java
index d045ef2..7cd6358 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonWrongOrientationType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/PolygonWrongOrientationType.java
@@ -23,22 +23,12 @@ import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_S_POLYGON_WRONG_ORIENTATION")
-public class PolygonWrongOrientationType extends ValidationErrorType {
-	
-	private String geometryId;
+public class PolygonWrongOrientationType extends SolidErrorType {
 	
 	@XmlElementWrapper
 	@XmlElement(name = "edge")
 	private List<EdgeType> edges;
 	
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-	
-	public String getGeometryId() {
-		return geometryId;
-	}
-	
 	public boolean isSetEdges() {
 		return edges != null && !edges.isEmpty();
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingErrorType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingErrorType.java
new file mode 100644
index 0000000..90e7034
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingErrorType.java
@@ -0,0 +1,36 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+@XmlSeeAlso({ ConsecutivePointsSameType.class, RingNotClosedType.class, RingSelfIntersectionType.class,
+		TooFewPointsType.class })
+@XmlRootElement(name = "RingError")
+public class RingErrorType extends ValidationErrorType {
+
+	private String linearRingId;
+
+	public String getLinearRingId() {
+		return linearRingId;
+	}
+
+	public void setLinearRingId(String linearRingId) {
+		this.linearRingId = linearRingId;
+	}
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java
index 5194a40..e6b9e25 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingNotClosedType.java
@@ -18,16 +18,6 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_R_NOT_CLOSED")
-public class RingNotClosedType extends ValidationErrorType {
-	
-	private String linearRingId;
-	
-	public void setLinearRingId(String linarRingId) {
-		this.linearRingId = linarRingId;
-	}
-	
-	public String getLinearRingId() {
-		return linearRingId;
-	}
+public class RingNotClosedType extends RingErrorType {
 
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java
index 2c6d8bf..5e01f59 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RingSelfIntersectionType.java
@@ -20,19 +20,14 @@ import javax.xml.bind.annotation.XmlRootElement;
 import net.opengis.gml.DirectPositionType;
 
 @XmlRootElement(name = "GE_R_SELF_INTERSECTION")
-public class RingSelfIntersectionType extends ValidationErrorType {
+public class RingSelfIntersectionType extends RingErrorType {
 
-	private String linearRingId;
 	private RingSelfIntType type;
 	private EdgeType edge1;
 	private EdgeType edge2;
 	private DirectPositionType vertex1;
 	private DirectPositionType vertex2;
 
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
-
 	public void setType(RingSelfIntType type) {
 		this.type = type;
 	}
@@ -53,10 +48,6 @@ public class RingSelfIntersectionType extends ValidationErrorType {
 		this.vertex2 = vertex2;
 	}
 
-	public String getLinearRingId() {
-		return linearRingId;
-	}
-
 	public RingSelfIntType getType() {
 		return type;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticErrorType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticErrorType.java
new file mode 100644
index 0000000..da2e5a5
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SemanticErrorType.java
@@ -0,0 +1,25 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+@XmlSeeAlso({ AttributeWrongValueType.class, AttributeMissingType.class })
+@XmlRootElement(name = "SemanticError")
+public class SemanticErrorType extends ValidationErrorType {
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidErrorType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidErrorType.java
new file mode 100644
index 0000000..ad57862
--- /dev/null
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidErrorType.java
@@ -0,0 +1,37 @@
+/*-
+ * Copyright 2020 Hochschule für Technik Stuttgart
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.hft.stuttgart.quality.model.jaxb;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+@XmlSeeAlso({ SolidNotClosedType.class, AllPolygonsWrongOrientationType.class, PolygonWrongOrientationType.class,
+		NonManifoldVertexType.class, NonManifoldEdgeType.class, TooFewPolygonsType.class,
+		MultipleConnectedComponentsType.class, SolidSelfIntersectionType.class })
+@XmlRootElement(name = "SolidError")
+public class SolidErrorType extends ValidationErrorType {
+
+	private String geometryId;
+
+	public void setGeometryId(String geometryId) {
+		this.geometryId = geometryId;
+	}
+
+	public String getGeometryId() {
+		return geometryId;
+	}
+
+}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java
index 06f676e..b2f64dd 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidNotClosedType.java
@@ -23,22 +23,12 @@ import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_S_NOT_CLOSED")
-public class SolidNotClosedType extends ValidationErrorType {
+public class SolidNotClosedType extends SolidErrorType {
 
-	private String geometryId;
-	
 	@XmlElementWrapper
 	@XmlElement(name = "edge")
 	private List<EdgeType> edges;
 
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 	public boolean isSetEdges() {
 		return edges != null && !edges.isEmpty();
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java
index de734a2..58e37bc 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/SolidSelfIntersectionType.java
@@ -18,16 +18,11 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_S_SELF_INTERSECTION")
-public class SolidSelfIntersectionType extends ValidationErrorType {
+public class SolidSelfIntersectionType extends SolidErrorType {
 
-	private String geometryId;
 	private String polygonId1;
 	private String polygonId2;
 
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-
 	public void setPolygonId1(String polygonId1) {
 		this.polygonId1 = polygonId1;
 	}
@@ -36,10 +31,6 @@ public class SolidSelfIntersectionType extends ValidationErrorType {
 		this.polygonId2 = polygonId2;
 	}
 
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 	public String getPolygonId1() {
 		return polygonId1;
 	}
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPointsType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPointsType.java
index 474a79e..b790459 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPointsType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPointsType.java
@@ -18,46 +18,11 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_R_TOO_FEW_POINTS")
-public class TooFewPointsType extends ValidationErrorType {
-
-	private String linearRingId;
-
-	public void setLinearRingId(String linearRingId) {
-		this.linearRingId = linearRingId;
-	}
-
-	public String getLinearRingId() {
-		return linearRingId;
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((linearRingId == null) ? 0 : linearRingId.hashCode());
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		TooFewPointsType other = (TooFewPointsType) obj;
-		if (linearRingId == null) {
-			if (other.linearRingId != null)
-				return false;
-		} else if (!linearRingId.equals(other.linearRingId))
-			return false;
-		return true;
-	}
+public class TooFewPointsType extends RingErrorType {
 
 	@Override
 	public String toString() {
-		return "TooFewPoints [linearRingId=" + linearRingId + "]";
+		return "TooFewPoints [linearRingId=" + getLinearRingId() + "]";
 	}
 
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPolygonsType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPolygonsType.java
index 5a49a97..0bac474 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPolygonsType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/TooFewPolygonsType.java
@@ -18,16 +18,6 @@ package de.hft.stuttgart.quality.model.jaxb;
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "GE_S_TOO_FEW_POLYGONS")
-public class TooFewPolygonsType extends ValidationErrorType {
+public class TooFewPolygonsType extends SolidErrorType {
 	
-	private String geometryId;
-	
-	public void setGeometryId(String geometryId) {
-		this.geometryId = geometryId;
-	}
-	
-	public String getGeometryId() {
-		return geometryId;
-	}
-
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationErrorType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationErrorType.java
index e2502f0..42aee33 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationErrorType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationErrorType.java
@@ -17,18 +17,12 @@ package de.hft.stuttgart.quality.model.jaxb;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSeeAlso;
 
-import net.opengis.gml.AbstractFeatureType;
-
-@XmlSeeAlso({ ConsecutivePointsSameType.class, RingSelfIntersectionType.class, TooFewPointsType.class,
-		RingNotClosedType.class, InteriorDisconnectedType.class, IntersectingRingsType.class,
-		NonPlanarDistancePlaneType.class, InnerRingsNestedType.class, HoleOutsideType.class,
-		NonPlanarNormalsDeviationType.class, OrientationRingsSameType.class, AllPolygonsWrongOrientationType.class,
-		PolygonWrongOrientationType.class, NonManifoldVertexType.class, NonManifoldEdgeType.class,
-		SolidNotClosedType.class, TooFewPolygonsType.class, MultipleConnectedComponentsType.class,
-		AttributeWrongValueType.class, AttributeMissingType.class, SolidSelfIntersectionType.class })
+@XmlSeeAlso({ RingErrorType.class, PolygonErrorType.class, SolidErrorType.class, SemanticErrorType.class })
 @XmlAccessorType(XmlAccessType.FIELD)
-public abstract class ValidationErrorType extends AbstractFeatureType {
+@XmlRootElement(name = "ValidationError")
+public abstract class ValidationErrorType {
 
 }
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java
index 8aaaf3c..e8ef812 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ValidationType.java
@@ -21,10 +21,10 @@ import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import de.hft.stuttgart.quality.marshaller.ZonedDateTimeAdapter;
-import net.opengis.gml.AbstractFeatureType;
+import net.opengis.gml.AbstractGMLType;
 
 @XmlType(name = "validation")
-public class ValidationType extends AbstractFeatureType {
+public class ValidationType extends AbstractGMLType {
 
 	@XmlJavaTypeAdapter(ZonedDateTimeAdapter.class)
 	private ZonedDateTime validationDate;
diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java
index 075985f..a5e5288 100644
--- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java
+++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java
@@ -13,6 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@javax.xml.bind.annotation.XmlSchema(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = {
-		@javax.xml.bind.annotation.XmlNs(namespaceURI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2", prefix = "qual") })
+@javax.xml.bind.annotation.XmlSchema(namespace = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = {
+		@javax.xml.bind.annotation.XmlNs(namespaceURI = "https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3", prefix = "qual") })
 package de.hft.stuttgart.quality.model.jaxb;
diff --git a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd b/citygml4j-quality-ade/src/main/resources/qualityAde.xsd
index b104238..0cb8f4f 100644
--- a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd
+++ b/citygml4j-quality-ade/src/main/resources/qualityAde.xsd
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <schema xmlns="http://www.w3.org/2001/XMLSchema"
-	xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2"
-	targetNamespace="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2"
+	xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3"
+	targetNamespace="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3"
 	xmlns:core="http://www.opengis.net/citygml/2.0"
 	xmlns:bldg="http://www.opengis.net/citygml/building/2.0"
 	xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified"
@@ -45,34 +45,53 @@
 		</restriction>
 	</simpleType>
 
+	<complexType name="ValidationError">
+	</complexType>
+
+	<complexType name="RingError">
+		<complexContent>
+			<extension base="qual:ValidationError">
+				<sequence>
+					<element name="linearRingId" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
 	<complexType name="GE_R_CONSECUTIVE_POINTS_SAME">
 		<annotation>
 			<documentation>Consecutive point are the same</documentation>
 		</annotation>
-		<sequence>
-			<element name="linearRingId" type="string" />
-			<element name="vertex1" type="gml:DirectPositionType" />
-			<element name="vertex2" type="gml:DirectPositionType" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:RingError">
+				<sequence>
+					<element name="vertex1" type="gml:DirectPositionType" />
+					<element name="vertex2" type="gml:DirectPositionType" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_R_TOO_FEW_POINTS">
-		<sequence>
-			<element name="linearRingId" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:RingError" />
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_R_SELF_INTERSECTION">
-		<sequence>
-			<element name="linearRingId" type="string" />
-			<element name="type" type="qual:ringSelfIntType" />
-			<element name="edge1" type="qual:edgeType" minOccurs="0" />
-			<element name="edge2" type="qual:edgeType" minOccurs="0" />
-			<element name="vertex1" type="gml:DirectPositionType"
-				minOccurs="0" />
-			<element name="vertex2" type="gml:DirectPositionType"
-				minOccurs="0" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:RingError">
+				<sequence>
+					<element name="type" type="qual:ringSelfIntType" />
+					<element name="edge1" type="qual:edgeType" minOccurs="0" />
+					<element name="edge2" type="qual:edgeType" minOccurs="0" />
+					<element name="vertex1" type="gml:DirectPositionType"
+						minOccurs="0" />
+					<element name="vertex2" type="gml:DirectPositionType"
+						minOccurs="0" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<simpleType name="ringSelfIntType">
@@ -91,66 +110,96 @@
 	</complexType>
 
 	<complexType name="GE_R_NOT_CLOSED">
-		<sequence>
-			<element name="linearRingId" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:RingError" />
+		</complexContent>
 	</complexType>
 
-	<complexType name="GE_P_INTERIOR_DISCONNECTED">
+	<complexType name="PolygonError">
 		<sequence>
 			<element name="polygonId" type="string" />
 		</sequence>
 	</complexType>
 
+	<complexType name="GE_P_INTERIOR_DISCONNECTED">
+		<complexContent>
+			<extension base="qual:PolygonError" />
+		</complexContent>
+	</complexType>
+
 	<complexType name="GE_P_INTERSECTING_RINGS">
-		<sequence>
-			<element name="polygonId" type="string" />
-			<element name="linearRingId1" type="string" />
-			<element name="linearRingId2" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId1" type="string" />
+					<element name="linearRingId2" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_P_INNER_RINGS_NESTED">
-		<sequence>
-			<element name="polygonId" type="string" />
-			<element name="linearRingId1" type="string" />
-			<element name="linearRingId2" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId1" type="string" />
+					<element name="linearRingId2" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_P_HOLE_OUTSIDE">
-		<sequence>
-			<element name="polygonId" type="string" />
-			<element name="linearRingId" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType
 		name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION">
-		<sequence>
-			<element name="polygonId" type="string" />
-			<element name="deviation" type="gml:AngleType"></element>
-		</sequence>
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="deviation" type="gml:AngleType"></element>
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_P_ORIENTATION_RINGS_SAME">
-		<sequence>
-			<element name="polygonId" type="string" />
-			<element name="linearRingId" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
-	<complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION">
+	<complexType name="SolidError">
 		<sequence>
 			<element name="geometryId" type="string" />
 		</sequence>
 	</complexType>
 
+	<complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION">
+		<complexContent>
+			<extension base="qual:SolidError" />
+		</complexContent>
+	</complexType>
+
 	<complexType name="GE_S_POLYGON_WRONG_ORIENTATION">
-		<sequence>
-			<element name="geometryId" type="string" />
-			<element name="edges" type="qual:EdgeList" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="edges" type="qual:EdgeList" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="EdgeList">
@@ -161,45 +210,60 @@
 	</complexType>
 
 	<complexType name="GE_S_SELF_INTERSECTION">
-		<sequence>
-			<element name="geometryId" type="string" />
-			<element name="polygonId1" type="string" />
-			<element name="polygonId2" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="polygonId1" type="string" />
+					<element name="polygonId2" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_S_NON_MANIFOLD_VERTEX">
-		<sequence>
-			<element name="geometryId" type="string" />
-			<element name="vertex" type="gml:DirectPositionType" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="vertex" type="gml:DirectPositionType" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_S_NON_MANIFOLD_EDGE">
-		<sequence>
-			<element name="geometryId" type="string" />
-			<element name="edges" type="qual:EdgeList" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="edges" type="qual:EdgeList" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_S_NOT_CLOSED">
-		<sequence>
-			<element name="geometryId" type="string" />
-			<element name="edges" type="qual:EdgeList" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="edges" type="qual:EdgeList" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_S_TOO_FEW_POLYGONS">
-		<sequence>
-			<element name="geometryId" type="string" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SolidError" />
+		</complexContent>
 	</complexType>
 
 	<complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTS">
-		<sequence>
-			<element name="geometryId" type="string" />
-			<element name="components" type="qual:ComponentList" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="components" type="qual:ComponentList" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="ComponentList">
@@ -221,27 +285,41 @@
 				regression plane
 			</documentation>
 		</annotation>
-		<sequence>
-			<element name="polygonId" type="string" />
-			<element name="vertex" type="gml:DirectPositionType" />
-			<element name="distance" type="gml:LengthType" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="vertex" type="gml:DirectPositionType" />
+					<element name="distance" type="gml:LengthType" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="SemanticError">
 	</complexType>
 
 	<complexType name="SE_ATTRIBUTE_WRONG_VALUE">
-		<sequence>
-			<element name="childId" type="string" minOccurs="0"/>
-			<element name="attributeName" type="string" />
-			<element name="generic" type="boolean" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SemanticError">
+				<sequence>
+					<element name="childId" type="string" minOccurs="0" />
+					<element name="attributeName" type="string" />
+					<element name="generic" type="boolean" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="SE_ATTRIBUTE_MISSING">
-		<sequence>
-			<element name="childId" type="string" minOccurs="0" />
-			<element name="attributeName" type="string" />
-			<element name="generic" type="boolean" />
-		</sequence>
+		<complexContent>
+			<extension base="qual:SemanticError">
+				<sequence>
+					<element name="childId" type="string" minOccurs="0" />
+					<element name="attributeName" type="string" />
+					<element name="generic" type="boolean" />
+				</sequence>
+			</extension>
+		</complexContent>
 	</complexType>
 
 	<complexType name="validationResultType">
@@ -311,8 +389,7 @@
 				type="qual:SE_ATTRIBUTE_WRONG_VALUE" minOccurs="0"
 				maxOccurs="unbounded" />
 			<element name="SE_ATTRIBUTE_MISSING"
-				type="qual:SE_ATTRIBUTE_MISSING" minOccurs="0"
-				maxOccurs="unbounded" />
+				type="qual:SE_ATTRIBUTE_MISSING" minOccurs="0" maxOccurs="unbounded" />
 		</sequence>
 		<attribute name="result" type="qual:result" />
 	</complexType>
@@ -491,7 +568,6 @@
 				statistics of a validation process
 			</documentation>
 		</annotation>
-		<!-- <complexContent> <extension base="gml:AbstractFeatureType"> -->
 		<sequence>
 			<element name="validationDate" type="dateTime" />
 			<element name="validationSoftware" type="string" />
@@ -500,6 +576,5 @@
 			<element name="statistics" type="qual:statisticsType"
 				maxOccurs="1" />
 		</sequence>
-		<!-- </extension> </complexContent> -->
 	</complexType>
 </schema>
\ No newline at end of file
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_AllPolygonsWrongOrientation.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_AllPolygonsWrongOrientation.gml
index 44d0c5d..0ef3a62 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_AllPolygonsWrongOrientation.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_AllPolygonsWrongOrientation.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml
index a764003..3334930 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_Error_QualityADE.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_HoleOutside.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_HoleOutside.gml
index fc63f78..6c3c99d 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_HoleOutside.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_HoleOutside.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_InnerRingNested.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_InnerRingNested.gml
index bdcebc9..71f5720 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_InnerRingNested.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_InnerRingNested.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_InteriorDisconnected.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_InteriorDisconnected.gml
index bdc2839..580a6ef 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_InteriorDisconnected.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_InteriorDisconnected.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_IntersectingRings.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_IntersectingRings.gml
index 42c7304..4acb090 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_IntersectingRings.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_IntersectingRings.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_MultipleConnectedComponents.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_MultipleConnectedComponents.gml
index 2cebdd6..87ae4d3 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_MultipleConnectedComponents.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_MultipleConnectedComponents.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldEdge.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldEdge.gml
index fafb470..c0c52b9 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldEdge.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldEdge.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldVertex.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldVertex.gml
index df2bd0e..78ab1d3 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldVertex.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonManifoldVertex.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonDistancePlane.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonDistancePlane.gml
index 0c4c02b..df2c5d4 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonDistancePlane.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonDistancePlane.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonNormalsDeviation.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonNormalsDeviation.gml
index 5d19968..07af13e 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonNormalsDeviation.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_NonPlanarPolygonNormalsDeviation.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_OrientationRingsSame.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_OrientationRingsSame.gml
index d33120a..a5dfffe 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_OrientationRingsSame.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_OrientationRingsSame.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_PolygonWrongOrientation.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_PolygonWrongOrientation.gml
index de65359..2ef9c87 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_PolygonWrongOrientation.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_PolygonWrongOrientation.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingNotClosed.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingNotClosed.gml
index c4808fd..f019062 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingNotClosed.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingNotClosed.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingSelfIntersection.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingSelfIntersection.gml
index 510db18..5b036f2 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingSelfIntersection.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_RingSelfIntersection.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidNotClosed.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidNotClosed.gml
index 6ccfc41..9e12672 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidNotClosed.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidNotClosed.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidSelfIntersection.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidSelfIntersection.gml
index 0bc7d63..6d55c8a 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidSelfIntersection.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_SolidSelfIntersection.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPoints.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPoints.gml
index c74ad2b..244901c 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPoints.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPoints.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPolygons.gml b/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPolygons.gml
index 4d89b0c..af54124 100644
--- a/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPolygons.gml
+++ b/citygml4j-quality-ade/src/test/resources/SimpleSolid_TooFewPolygons.gml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.2/qualityAde.xsd">
+<core:CityModel xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:dem="http://www.opengis.net/citygml/relief/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3 https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3/qualityAde.xsd">
 
 <!--
 Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
diff --git a/public/0.1.3/qualityAde.xsd b/public/0.1.3/qualityAde.xsd
new file mode 100644
index 0000000..0cb8f4f
--- /dev/null
+++ b/public/0.1.3/qualityAde.xsd
@@ -0,0 +1,580 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+	xmlns:qual="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3"
+	targetNamespace="https://transfer.hft-stuttgart.de/pages/citydoctor/qualityade/0.1.3"
+	xmlns:core="http://www.opengis.net/citygml/2.0"
+	xmlns:bldg="http://www.opengis.net/citygml/building/2.0"
+	xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified"
+	version="1.0">
+	<import namespace="http://www.opengis.net/citygml/2.0"
+		schemaLocation="http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd" />
+	<import namespace="http://www.opengis.net/citygml/building/2.0"
+		schemaLocation="http://schemas.opengis.net/citygml/building/2.0/building.xsd" />
+	<import
+		namespace="http://www.opengis.net/citygml/appearance/2.0"
+		schemaLocation="http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd" />
+	<import namespace="http://www.opengis.net/citygml/generics/2.0"
+		schemaLocation="http://schemas.opengis.net/citygml/generics/2.0/generics.xsd" />
+	<import namespace="http://www.opengis.net/gml"
+		schemaLocation="http://schemas.opengis.net/gml/2.1.2/gml.xsd" />
+
+	<element name="validationResult"
+		type="qual:validationResultType"
+		substitutionGroup="core:_GenericApplicationPropertyOfCityObject" />
+
+	<simpleType name="result" final="restriction">
+		<annotation>
+			<documentation>Enumeration for status of check result</documentation>
+		</annotation>
+		<restriction base="string">
+			<enumeration value="ERROR">
+				<annotation>
+					<documentation>One or more errors were found</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="NOT_CHECKED">
+				<annotation>
+					<documentation>Feature was not checked</documentation>
+				</annotation>
+			</enumeration>
+			<enumeration value="OK">
+				<annotation>
+					<documentation>No errors were found</documentation>
+				</annotation>
+			</enumeration>
+		</restriction>
+	</simpleType>
+
+	<complexType name="ValidationError">
+	</complexType>
+
+	<complexType name="RingError">
+		<complexContent>
+			<extension base="qual:ValidationError">
+				<sequence>
+					<element name="linearRingId" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_R_CONSECUTIVE_POINTS_SAME">
+		<annotation>
+			<documentation>Consecutive point are the same</documentation>
+		</annotation>
+		<complexContent>
+			<extension base="qual:RingError">
+				<sequence>
+					<element name="vertex1" type="gml:DirectPositionType" />
+					<element name="vertex2" type="gml:DirectPositionType" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_R_TOO_FEW_POINTS">
+		<complexContent>
+			<extension base="qual:RingError" />
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_R_SELF_INTERSECTION">
+		<complexContent>
+			<extension base="qual:RingError">
+				<sequence>
+					<element name="type" type="qual:ringSelfIntType" />
+					<element name="edge1" type="qual:edgeType" minOccurs="0" />
+					<element name="edge2" type="qual:edgeType" minOccurs="0" />
+					<element name="vertex1" type="gml:DirectPositionType"
+						minOccurs="0" />
+					<element name="vertex2" type="gml:DirectPositionType"
+						minOccurs="0" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<simpleType name="ringSelfIntType">
+		<restriction base="string">
+			<enumeration value="DUPLICATE_POINT" />
+			<enumeration value="POINT_TOUCHES_EDGE" />
+			<enumeration value="EDGE_INTERSECTS_EDGE" />
+		</restriction>
+	</simpleType>
+
+	<complexType name="edgeType">
+		<sequence>
+			<element name="from" type="gml:DirectPositionType" />
+			<element name="to" type="gml:DirectPositionType" />
+		</sequence>
+	</complexType>
+
+	<complexType name="GE_R_NOT_CLOSED">
+		<complexContent>
+			<extension base="qual:RingError" />
+		</complexContent>
+	</complexType>
+
+	<complexType name="PolygonError">
+		<sequence>
+			<element name="polygonId" type="string" />
+		</sequence>
+	</complexType>
+
+	<complexType name="GE_P_INTERIOR_DISCONNECTED">
+		<complexContent>
+			<extension base="qual:PolygonError" />
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_P_INTERSECTING_RINGS">
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId1" type="string" />
+					<element name="linearRingId2" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_P_INNER_RINGS_NESTED">
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId1" type="string" />
+					<element name="linearRingId2" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_P_HOLE_OUTSIDE">
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType
+		name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION">
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="deviation" type="gml:AngleType"></element>
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_P_ORIENTATION_RINGS_SAME">
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="linearRingId" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="SolidError">
+		<sequence>
+			<element name="geometryId" type="string" />
+		</sequence>
+	</complexType>
+
+	<complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION">
+		<complexContent>
+			<extension base="qual:SolidError" />
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_S_POLYGON_WRONG_ORIENTATION">
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="edges" type="qual:EdgeList" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="EdgeList">
+		<sequence>
+			<element name="edge" type="qual:edgeType"
+				maxOccurs="unbounded" />
+		</sequence>
+	</complexType>
+
+	<complexType name="GE_S_SELF_INTERSECTION">
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="polygonId1" type="string" />
+					<element name="polygonId2" type="string" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_S_NON_MANIFOLD_VERTEX">
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="vertex" type="gml:DirectPositionType" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_S_NON_MANIFOLD_EDGE">
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="edges" type="qual:EdgeList" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_S_NOT_CLOSED">
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="edges" type="qual:EdgeList" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_S_TOO_FEW_POLYGONS">
+		<complexContent>
+			<extension base="qual:SolidError" />
+		</complexContent>
+	</complexType>
+
+	<complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTS">
+		<complexContent>
+			<extension base="qual:SolidError">
+				<sequence>
+					<element name="components" type="qual:ComponentList" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="ComponentList">
+		<sequence>
+			<element name="component" type="qual:componentType"
+				maxOccurs="unbounded" />
+		</sequence>
+	</complexType>
+
+	<complexType name="componentType">
+		<sequence>
+			<element name="polygonId" type="string" maxOccurs="unbounded" />
+		</sequence>
+	</complexType>
+
+	<complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE">
+		<annotation>
+			<documentation>A planarity error with a point too far from the
+				regression plane
+			</documentation>
+		</annotation>
+		<complexContent>
+			<extension base="qual:PolygonError">
+				<sequence>
+					<element name="vertex" type="gml:DirectPositionType" />
+					<element name="distance" type="gml:LengthType" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="SemanticError">
+	</complexType>
+
+	<complexType name="SE_ATTRIBUTE_WRONG_VALUE">
+		<complexContent>
+			<extension base="qual:SemanticError">
+				<sequence>
+					<element name="childId" type="string" minOccurs="0" />
+					<element name="attributeName" type="string" />
+					<element name="generic" type="boolean" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="SE_ATTRIBUTE_MISSING">
+		<complexContent>
+			<extension base="qual:SemanticError">
+				<sequence>
+					<element name="childId" type="string" minOccurs="0" />
+					<element name="attributeName" type="string" />
+					<element name="generic" type="boolean" />
+				</sequence>
+			</extension>
+		</complexContent>
+	</complexType>
+
+	<complexType name="validationResultType">
+		<annotation>
+			<documentation>Data structure containing validation results for
+				features
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="GE_R_TOO_FEW_POINTS"
+				type="qual:GE_R_TOO_FEW_POINTS" minOccurs="0" maxOccurs="unbounded" />
+			<element name="GE_R_SELF_INTERSECTION"
+				type="qual:GE_R_SELF_INTERSECTION" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_R_NOT_CLOSED" type="qual:GE_R_NOT_CLOSED"
+				minOccurs="0" maxOccurs="unbounded" />
+			<element name="GE_R_CONSECUTIVE_POINTS_SAME"
+				type="qual:GE_R_CONSECUTIVE_POINTS_SAME" minOccurs="0"
+				maxOccurs="unbounded" />
+
+			<element name="GE_P_INTERIOR_DISCONNECTED"
+				type="qual:GE_P_INTERIOR_DISCONNECTED" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_P_INTERSECTING_RINGS"
+				type="qual:GE_P_INTERSECTING_RINGS" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"
+				type="qual:GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_P_INNER_RINGS_NESTED"
+				type="qual:GE_P_INNER_RINGS_NESTED" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_P_HOLE_OUTSIDE"
+				type="qual:GE_P_HOLE_OUTSIDE" minOccurs="0" maxOccurs="unbounded" />
+			<element name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"
+				type="qual:GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_P_ORIENTATION_RINGS_SAME"
+				type="qual:GE_P_ORIENTATION_RINGS_SAME" minOccurs="0"
+				maxOccurs="unbounded" />
+
+			<element name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION"
+				type="qual:GE_S_ALL_POLYGONS_WRONG_ORIENTATION" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_S_POLYGON_WRONG_ORIENTATION"
+				type="qual:GE_S_POLYGON_WRONG_ORIENTATION" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_S_SELF_INTERSECTION"
+				type="qual:GE_S_SELF_INTERSECTION" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_S_NON_MANIFOLD_VERTEX"
+				type="qual:GE_S_NON_MANIFOLD_VERTEX" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_S_NON_MANIFOLD_EDGE"
+				type="qual:GE_S_NON_MANIFOLD_EDGE" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_S_NOT_CLOSED" type="qual:GE_S_NOT_CLOSED"
+				minOccurs="0" maxOccurs="unbounded" />
+			<element name="GE_S_TOO_FEW_POLYGONS"
+				type="qual:GE_S_TOO_FEW_POLYGONS" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="GE_S_MULTIPLE_CONNECTED_COMPONENTS"
+				type="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTS" minOccurs="0"
+				maxOccurs="unbounded" />
+
+			<element name="SE_ATTRIBUTE_WRONG_VALUE"
+				type="qual:SE_ATTRIBUTE_WRONG_VALUE" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="SE_ATTRIBUTE_MISSING"
+				type="qual:SE_ATTRIBUTE_MISSING" minOccurs="0" maxOccurs="unbounded" />
+		</sequence>
+		<attribute name="result" type="qual:result" />
+	</complexType>
+
+	<simpleType name="requirementID" final="restriction">
+		<annotation>
+			<documentation>Enumeration for available requirements</documentation>
+		</annotation>
+		<restriction base="string">
+			<enumeration value="R_GE_R_TOO_FEW_POINTS" />
+			<enumeration value="R_GE_R_NOT_CLOSED" />
+			<enumeration value="R_GE_R_CONSECUTIVE_POINTS_SAME" />
+			<enumeration value="R_GE_R_SELF_INTERSECTION" />
+			<enumeration value="R_GE_P_NON_PLANAR" />
+			<enumeration value="R_GE_P_INTERIOR_DISCONNECTED" />
+			<enumeration value="R_GE_P_INTERSECTING_RINGS" />
+			<enumeration value="R_GE_P_HOLE_OUTSIDE" />
+			<enumeration value="R_GE_P_ORIENTATION_RINGS_SAME" />
+			<enumeration value="R_GE_P_INNER_RINGS_NESTED" />
+			<enumeration value="R_GE_S_TOO_FEW_POLYGONS" />
+			<enumeration value="R_GE_S_NOT_CLOSED" />
+			<enumeration value="R_GE_S_NON_MANIFOLD_EDGE" />
+			<enumeration value="R_GE_S_POLYGON_WRONG_ORIENTATION" />
+			<enumeration
+				value="R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION" />
+			<enumeration value="R_GE_S_NON_MANIFOLD_VERTEX" />
+			<enumeration value="R_GE_S_SELF_INTERSECTION" />
+			<enumeration value="R_GE_S_MULTIPLE_CONNECTED_COMPONENTS" />
+			<enumeration value="R_SE_ATTRIBUTES_EXISTING" />
+			<enumeration value="R_SE_ATTRIBUTES_CORRECT" />
+		</restriction>
+	</simpleType>
+
+	<complexType name="parameter">
+		<simpleContent>
+			<extension base="string">
+				<attribute name="name" type="string" use="required" />
+				<attribute name="uom" type="string" use="optional" />
+			</extension>
+		</simpleContent>
+	</complexType>
+
+	<complexType name="requirementType">
+		<annotation>
+			<documentation>Requirement structure for configuration purposes
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="parameter" type="qual:parameter" minOccurs="0"
+				maxOccurs="unbounded" />
+		</sequence>
+		<attribute name="name" type="qual:requirementID" />
+		<attribute name="enabled" type="boolean" />
+	</complexType>
+
+	<complexType name="validationPlanType">
+		<annotation>
+			<documentation>Validation plan structure containing information about
+				the parameters used to perform the checks
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="globalParameters"
+				type="qual:globalParameterType" />
+			<element name="requirement" type="qual:requirementType"
+				maxOccurs="unbounded" />
+			<element name="filter" type="qual:filterType" minOccurs="1"
+				maxOccurs="1" />
+		</sequence>
+	</complexType>
+
+	<complexType name="filterType">
+		<sequence>
+			<element name="checking" type="qual:featureType"
+				minOccurs="0" maxOccurs="unbounded" />
+		</sequence>
+	</complexType>
+
+	<simpleType name="featureType">
+		<restriction base="string">
+			<enumeration value="BUILDING"></enumeration>
+			<enumeration value="TRANSPORTATION"></enumeration>
+			<enumeration value="VEGETATION"></enumeration>
+			<enumeration value="BRIDGE"></enumeration>
+			<enumeration value="WATER"></enumeration>
+			<enumeration value="LAND"></enumeration>
+		</restriction>
+	</simpleType>
+
+	<complexType name="globalParameterType">
+		<sequence>
+			<element name="parameter" type="qual:parameter"
+				maxOccurs="unbounded" />
+		</sequence>
+	</complexType>
+
+	<complexType name="statisticsType">
+		<annotation>
+			<documentation>Statistics structure containing information about end
+				result of checking process
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="numErrorBuildings"
+				type="qual:featureStatistics" />
+			<element name="numErrorVegetation"
+				type="qual:featureStatistics" />
+			<element name="numErrorLandObjects"
+				type="qual:featureStatistics" />
+			<element name="numErrorBridgeObjects"
+				type="qual:featureStatistics" />
+			<element name="numErrorWaterObjects"
+				type="qual:featureStatistics" />
+			<element name="numErrorTransportation"
+				type="qual:featureStatistics" />
+			<element name="errorStatistics"
+				type="qual:errorStatisticsType" />
+		</sequence>
+	</complexType>
+
+	<complexType name="errorStatisticsType">
+		<sequence>
+			<element name="error" type="qual:errorType" minOccurs="0"
+				maxOccurs="unbounded" />
+		</sequence>
+	</complexType>
+
+	<complexType name="errorType">
+		<simpleContent>
+			<extension base="int">
+				<attribute name="name" type="qual:errorId"></attribute>
+			</extension>
+		</simpleContent>
+	</complexType>
+
+	<simpleType name="errorId">
+		<restriction base="string">
+			<enumeration value="GE_R_TOO_FEW_POINTS" />
+			<enumeration value="GE_R_NOT_CLOSED" />
+			<enumeration value="GE_R_CONSECUTIVE_POINTS_SAME" />
+			<enumeration value="GE_R_SELF_INTERSECTION" />
+			<enumeration value="GE_R_NOT_CLOSED" />
+			<enumeration value="GE_P_NON_PLANAR" />
+			<enumeration value="GE_P_INTERIOR_DISCONNECTED" />
+			<enumeration value="GE_P_INTERSECTING_RINGS" />
+			<enumeration value="GE_P_HOLE_OUTSIDE" />
+			<enumeration value="GE_P_ORIENTATION_RINGS_SAME" />
+			<enumeration value="GE_P_INNER_RINGS_NESTED" />
+			<enumeration value="GE_S_TOO_FEW_POLYGONS" />
+			<enumeration value="GE_S_NOT_CLOSED" />
+			<enumeration value="GE_S_NON_MANIFOLD_EDGE" />
+			<enumeration value="GE_S_POLYGON_WRONG_ORIENTATION" />
+			<enumeration value="GE_S_ALL_POLYGONS_WRONG_ORIENTATION" />
+			<enumeration value="GE_S_NON_MANIFOLD_VERTEX" />
+			<enumeration value="GE_S_SELF_INTERSECTION" />
+			<enumeration value="GE_S_MULTIPLE_CONNECTED_COMPONENTS" />
+			<enumeration value="SE_ATTRIBUTE_WRONG_VALUE" />
+			<enumeration value="SE_ATTRIBUTE_MISSING" />
+		</restriction>
+	</simpleType>
+
+	<complexType name="featureStatistics">
+		<simpleContent>
+			<extension base="int">
+				<attribute name="numChecked" type="int" />
+			</extension>
+		</simpleContent>
+	</complexType>
+
+	<element name="validation" type="qual:validationType"
+		substitutionGroup="core:_GenericApplicationPropertyOfCityModel" />
+
+	<complexType name="validationType">
+		<annotation>
+			<documentation>Data structure containing the validation plan and
+				statistics of a validation process
+			</documentation>
+		</annotation>
+		<sequence>
+			<element name="validationDate" type="dateTime" />
+			<element name="validationSoftware" type="string" />
+			<element name="validationPlan" type="qual:validationPlanType"
+				maxOccurs="1" />
+			<element name="statistics" type="qual:statisticsType"
+				maxOccurs="1" />
+		</sequence>
+	</complexType>
+</schema>
\ No newline at end of file
-- 
GitLab